Поскольку глюк оказался очень устойчивым (воспроизводится с вероятностью 100%), я решил подробно описать, как он себя проявляет и как мне его удалось победить.
Платформа 1С Предприятие 8.3.22.2283. Серверная база (и не одна). Одинаково глючат сразу несколько баз.
В глючном расширении расширены модули объектов одного документа и двух обработок.
Глючит только модуль документа, причём глюк выглядит так.
При попытке в пользовательском режиме открыть обычную форму документа одной из первых интерпретатором платформы 1С вызывается функция его модуля, данная функция является первой в списке модуля объекта.
Вот в момент вызова этой функции и происходит странный глюк, который без труда воспроизводится в отладчике (я сделал замер производительности, подтверждающий мои слова). Вызов этой функции (не исправленной в расширении!), переадресуется в расширение в тело процедуры, которая замещает другую процедуру (даже не функцию!) модуля документа.
В результате получается сбой открытия формы документа. Так как после выполнения процедуры в расширении ничего не возвращается (точнее, возвращается Неопределено), а выполняемый интерпретатором код ждёт значение типа Булево из выполняемой функции (которая вдруг стала процедурой).
Если расширение удалить из базы, то всё работает как часы (разумеется, за исключением удаленного функционала, который нужен его заказчику).
Откуда взялось проблемное расширение.
Его изготовил и установил в рабочие базы мой коллега (сотрудник моего отдела). Он и понятия не имел, что в расширении есть такая проблема.
Как ни странно, мне удалось победить данный глюк следующим способом.
Я удалил документ из расширения и создал новое расширение, в котором способ исправления процедуры модуля документа в расширении выбрал не "Вместо", а "Изменение и контроль". Таким образом, глючное расширение было успешно декомпозировано на 2 части, каждая из которых работает нормально.
Первая часть - это исходное проблемное расширение, в котором удалён проблемный документ.
Вторая часть - это изготовленное мной расширение с куском нового кода (всего три строчки), который был взят мной из предыдущего расширения.
Эксперименты с проблемным расширением.
Прежде чем я декомпозировал проблемное расширение на 2 части, я пытался его "починить". Например, я добавил в расширение реквизиты документа и табличную часть документа, на которые была ссылка в коде расширения, с целью добиться корректного результата синтакс-контроля модулей расширения.
В итоге - синтакс-контроль не выдал ошибок, но расширение по-прежнему оставалось "битым". Так как результат применения его отредактированной мной версии был тот же самым, что и до моих вмешательств.
Вступайте в нашу телеграмм-группу Инфостарт
