При сопровождении доработок через механизм расширений разработчики нередко сталкиваются с ситуацией, когда после обновления основной конфигурации код из модуля формы расширения перестает выполняться. При установке точек останова отладчик либо переходит в исходный модуль типовой конфигурации, либо вовсе игнорирует переопределенные процедуры (например, обработчик команды Сформировать в отчете). Разберем детально, почему это происходит и как восстановить корректную работу расширения.
Одной из наиболее частых причин игнорирования расширения после обновления конфигурации является расхождение режимов совместимости. Если в основной конфигурации режим совместимости был изменен (например, переведен в значение Не использовать или повышен до более новой версии), а в свойствах самого расширения остался старый режим совместимости (например, Версия 8.3.8), платформа не сможет корректно применить перехват методов через аннотации.
Разберем по шагам, как выровнять режимы совместимости:
Не использовать, если в основной конфигурации совместимость отключена).Проанализируем механизм перехвата обработчиков событий и команд в управляемых формах. При использовании директивы &Вместо имя исходной процедуры в строковом литерале должно строго совпадать с именем процедуры в модуле основной формы, а список параметров должен полностью соответствовать оригиналу.
Посмотрим на пример правильного оформления перехватывающего метода в модуле формы расширения:
&НаКлиенте
&Вместо("СформироватьОтчет")
Процедура Расш1_СформироватьОтчетВместо(Команда)
// Собственная логика формирования отчета
Сообщить("Выполняется код из модуля формы расширения");
// При необходимости вызова оригинального метода:
// ПродолжитьВызов(Команда);
КонецПроцедуры
Если же команда формы создавалась как собственная команда расширения, проверим привязку в визуальном редакторе. Откроем форму в расширении, перейдем на закладку Команды, выделим нужную команду и в палитре свойств проверим свойство Действие — оно должно указывать на процедуру расширения в модуле формы.
При обновлении типовой конфигурации структура заимствованного отчета или формы могла измениться (добавились новые реквизиты, изменились типы или состав элементов). В этом случае расширение содержит устаревший слепок формы, из-за чего платформа в режиме 1С:Предприятие отключает переопределения во избежание критических ошибок.
Выполним процедуру актуализации формы:
Платформа 1С сохраняет пользовательские настройки отображения форм и вариантов отчетов в системных таблицах. Если пользователь ранее открывал отчет, система может загружать старое состояние формы из кэша настроек, минуя логику расширения.
Для устранения влияния кэша выполним следующие действия:
1С:Предприятие откроем форму проблемного отчета, нажмем меню Еще → Установить стандартные настройки./ClearCache.%LOCALAPPDATA%\1C\1Cv8 и %APPDATA%\1C\1Cv8.В типовых конфигурациях (включая 1C:Бухгалтерия) формирование отчетов зачастую делегируется фоновому заданию на сервере. Если отладчик подключен только к клиентскому сеансу, точка останова внутри кода формирования не сработает, что создает ложное впечатление игнорирования кода расширения.
Проверим параметры подключения отладчика:
1C:Enterprise Server запущена в режиме отладки (с ключом -debug).