В конфигурации есть модуль "Сервер1" и расширение "Расширение1" с префиксом "Расш1", в котором создано расширение этого модуля.
Я открыл модуль Сервер1 из расширения и начал писать в нем новый метод для теста. Затем переключился в другой модуль и вызывал подсказка Т9. Получил коллекцию ПолучитьМодифицированныеДокументы(), содержащую 2 модуля:
Естественно что п.1 перезаписал в моем кэше модулей реальный модуль конфигурации.
Сам модуль конфигурации я не открывал.
Кажется что DocumentRuntimeId у обоих документов был одинаковым. Прошу подтвердить это предположение по логу.
В целом проблема не разовая. Замечал много раз как модуль расширения имел пустое свойство ИмяКонфигурации и потому попадал в кэш модулей конфигурации, затирая расширяемый модуль конфигурации.
Текст модуля на момент открытия
&Вместо("Стек")
Функция Расш1_Стек() Экспорт
// Вставить содержимое метода.1
Результат = ПродолжитьВызов();//
Ценбур();
Возврат Результат;
КонецФункции
&После("Проц1")
Процедура Расш1_Проц1()
// Вставить содержимое метода.
КонецПроцедуры
Текст модуля пришедший с неправильным именем расширения
&Вместо("Стек")
Функция Расш1_Стек() Экспорт
// Вставить содержимое метода.1
Результат = ПродолжитьВызов();//
Ценбур();
Возврат Результат;
КонецФункции
&После("Проц1")
Процедура Расш1_Проц1()
// Вставить содержимое метода.
КонецПроцедуры
П
Конечный текст модуля
&Вместо("Стек")
Функция Расш1_Стек() Экспорт
// Вставить содержимое метода.1
Результат = ПродолжитьВызов();//
Ценбур();
Возврат Результат;
КонецФункции
&После("Проц1")
Процедура Расш1_Проц1()
// Вставить содержимое метода.
КонецПроцедуры
Процедура Расш1_Новая() Экспорт
КонецПроцедуры
Ссылка скрыта
#1, ред. 13 января 2024 13:04
Почему ИмяКонфигурации пустое пока выясняю. Но зачем перезатирать в этом случае модуль основной конфигурации? Ведь свойство ИмяКонфигурации в документе не соответствует имени конфигурации.
#2, 13 января 2024 13:15
Посмотрел алгоритм. ИмяКонфигурации может быть пустым, если документ был изменен и добавлен в список измененных до идентификации.
Тогда имя конфигурации будет пустым. Могу конечно его в этом случае в таком виде "?" отправлять.
#3, 13 января 2024 13:27
Пустое значение свойства ИмяКонфигурации у меня трактуется как равнозначное имени основной конфигурации.
#4, ред. 13 января 2024 13:32
Если ты не можешь привязать документ к конкретному имени конфигурации (расширения), то лучше вообще его не добавляй в эту коллекцию, т.к. непонятно какую пользу можно из его изменений извлечь. Только лишние сложности.
#5, 13 января 2024 13:38
По-хорошему, кажется ты бы мог после выполнения идентификации окна документа найти по идентификатору документа его этой коллекции измененных документов и там вписать уточненные значения атрибутов. В таком случае будет смысл от хранения такого измененного документа, но имя конфигурации нужно тогда как ты предложил временно устанавливать в "?"
#6, 13 января 2024 13:53
(4) tormozit, мне они нужны в этой коллекции даже если имя конфигурации неизвестно. Я использую эти данные в автосохранении модулей. Просто пропускай их тогда.
#7, ред. 13 января 2024 14:04
Почему нельзя сделать вместо пустого имени конфигурации "?"? Если ты так сделаешь, будет однозначно понятно, что это твой внутренний документ.
#8, 13 января 2024 14:07
(7) tormozit, я не говорил, что нельзя. Наоборот предложил это. Выше я написал, про то что не могу их исключить совсем. Значит будет "?".
#9, 13 января 2024 20:32
Вобще делать "?" вместо пустой строки не очень хорошо. У них разные значения. "?" - была попытка получения, но не удалось получить по какой-то причине. Пустая строка - не было попытки получения.
У меня на это завязано логика, если я сейчас начну это все менять, то может полететь многое. У себя я не буду это менять.
Но могу заменять пустую сроку на "?" перед отправкой в API, но тогда сложно будет определить причину отсутствия имени конфигурации.
Опять же самое простое решение игнорировать пустую строку при обновлении кэша.
#10, 13 января 2024 20:45
Понял. Сделаю игнорирование документа из этой коллекции с пустым значением свойства ИмяКонфигурации.
tormozit изменил статус на Закрыто
#11, ред. 05 февраля 2024 22:57
Часто в коллекции ПолучитьМодифицированныеДокументы() приходит документ с пустым свойством ИмяКонфигурации. Это происходит регулярно с момента закрытия этой заявки, когда я добавил игнорирование документа с таким значением свойства. Из-за этого ИР адаптер не видит изменений другого модуля.
Такой измененный документ содержит правильные
но неправильные
Прошу расследовать причину не заполнения этого свойства.
yw0p6sg0Iy.mp4
Ссылка скрыта
tormozit изменил статус на Открыто
#12, ред. 05 февраля 2024 23:10
Я так понял, что происходит это (пустое свойство ИмяКонфигурации) в случае, если с момента открытия модуля в нем что то изменили без вызова команд требующих идентификации документа.
Поэтому предлагаю при активном ИР адаптере вызывать идентификацию при первом же изменении в модуле.
#13, ред. 05 февраля 2024 23:19
(12) tormozit, пробовали же такой вариант, получается не очень. Когда идентификация происходит в момент вызова подсказки и пользователь уже подсознательно готов ждать какое-то время - то этот процесс не вызывает дискомфорта. В отличие от варианта, в котором при любом действии начинается что-то непонятное. А пользователь всего лишь пробел добавил или перенос строки удалил / добавил.
Также, скорее всего в этих измененных модулях нет критически важных изменений, а какие-то незначительные правки, т.к. не был задействован вызов подсказки.
#14, ред. 05 февраля 2024 23:38
(13) bolsun, про важные изменения думаю мое видео довольно красноречиво демонстрирует - я добавил новый метод вставкой из буфера и не могу его позвать его из соседнего модуля.
Нашел еще признак по которому можно быстрее выявить, что модуль относится к любому расширению. Открыть контекстное меню и найти в нем недоступную команду добавления в расширение.
Этого будет достаточно для редактирования модулей основной конфигурации, т.е. знать относится ли модуль к ней или нет, пока не было полноценной идентификации документа. Если относится то в свойство ИмяКонфигурации поместишь имя основной конфигурации или #, иначе - пустую строку как раньше.
#15, ред. 05 февраля 2024 23:41
Я же написал "скорее всего", т.е. в основном. Понятно, что без вызова подсказки можно внести и важные изменения.
Да, это должно быть быстрее. Правда запинки все равно будут при вызове меню и может быть несколько расширений, и модуль может быть не развернут. Но если это не смущает, то можно попробовать.
#16, ред. 05 февраля 2024 23:43
(15) bolsun, задержка понятное дело будет, но кажется что заметно короче. Имя расширения в этой ситуации не играет роли, т.к. для любого расширения поведение останется старым - изменения будут игнорироваться до выполнения полноценной идентификации. В этом состоянии важно только понять, относится ли модуль к основной конфигурации.
#17, ред. 05 февраля 2024 23:44
(16) tormozit,
ну совсем игнорировать может и не стоит, если известно, что расширение одно. Но не знаю, получаешь ли ты такую информацию.
#18, ред. 06 февраля 2024 00:21
(15) bolsun, если окно модуля не развернуто, то в этом режиме не нужно пытаться его временно разворачивать, т.к. это относительно долго.
#19, 08 февраля 2024 21:43
Можешь сделать пробную сборку?
#20, 08 февраля 2024 23:13
(19) tormozit, думаю пока над реализацией.
Не нравится мне теперь эта затея. Изменение может вызывать сильный дискомфорт у пользователя.
Придется блокировать ввод на время отображения меню, а пользователь может что-то делать в это время (кликнуть мышью например).
#21, ред. 08 февраля 2024 23:20
Сейчас мы вызываем идентификацию, когда юзер печатает текст, в процессе показа подсказки и это не вызывает дискомфорта. Мышь обычно в это время не используется.
А в процесе изменения модуля с использованием мыши, поведение непредсказуемо.
#22, 09 февраля 2024 08:04
Еще можно сделать так. При первом изменении без идентификации в модуле при подключенном подписчике на модификации модулей - показывать долгое всплывающее уведомление. Оно должно давать понять
Если пользователь не делает явную идентификацию и затем идентификация документа вызывается неявно, то в этот момент показывать уведомление "Начато отслеживание изменений модуля ХХХ".
#23, ред. 12 февраля 2024 08:44
Пока я сделал такой костыль для пропуска неидентифицированных модулей
Он сразу относит к конфигурации неидентифицрованные модули размером более 1000 символов, в которых нет характерных для модуля расширения фрагментов. Таким образом для немаленьких модулей конфигурации проблема исчезает. Но в мелких модулях конфигурации и во всех модулях расширений она остается.