При доработке конфигураций 1С через расширения разработчики часто сталкиваются с ситуацией, когда процедура с аннотацией &После("ОбработкаЗаполнения") не срабатывает. Отладчик в нее не заходит, а код дозаполнения документа (например, Реализации товаров и услуг) игнорируется платформой. Давайте вместе проанализируем эту ситуацию, разберем частые ошибки и посмотрим на шаги по их устранению.
Самая распространенная причина, по которой 1С "втихую" игнорирует ваш перехватчик — это несовпадение количества или порядка параметров между оригинальной процедурой в основной конфигурации и процедурой в расширении.
Посмотрим на пример. При автоматическом создании обработчика через выпадающий список платформа может сгенерировать следующий код:
&После("ОбработкаЗаполнения")
Процедура Документ_РеализацияТоваровУслугОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)
// Код дозаполнения
КонецПроцедуры
Однако в стандартной процедуре документа параметра ТекстЗаполнения (а иногда и СтандартнаяОбработка) может не быть. Как только в сигнатуре появляется лишний параметр, платформа перестает связывать ваш метод с оригинальным. Решение: внимательно проверьте оригинальную процедуру в модуле объекта и приведите параметры в вашем расширении в полное соответствие с ней. Идеальный способ — выделить название оригинальной процедуры в конфигураторе и через правую кнопку мыши добавить ее в расширение.
Проанализируем еще одну частую причину, связанную с настройками самого расширения. Если код синтаксически верен, параметры совпадают, но процедура всё равно не срабатывает, обратите внимание на флаг безопасного режима.
Часто достаточно зайти в свойства расширения и снять галочку "Безопасный режим". Безопасный режим накладывает определенные ограничения на выполнение серверного кода и перехват событий, поэтому его отключение во многих случаях моментально решает проблему, и отладчик начинает перехватывать вызов.
Если код выполняется, но вы просто не можете в него попасть отладчиком, выясним причину в настройках запуска конфигуратора. Убедитесь, что у вас включен режим отладки:
/РежимОтладки (или проверьте настройки подключения отладчика к серверу, если работаете в клиент-серверном варианте).Рассмотрим структурные ошибки. Событие ОбработкаЗаполнения является платформенным и возникает исключительно в модуле объекта документа (или справочника). Если вы случайно добавили аннотацию &После в модуль менеджера или модуль формы, платформа проигнорирует этот код при стандартном программном вводе на основании, так как в этих модулях данное событие не инициируется.
Разберем важность контекста. Директивы компиляции в вашем расширении должны строго соответствовать оригинальному модулю. Если оригинальная процедура ОбработкаЗаполнения работает под директивой #Если Сервер Тогда, а в расширении вы забыли это указать (или указали неверно), платформа может пропустить вызов при определенных режимах запуска.
Если база содержит несколько расширений, проанализируем их влияние друг на друга:
&После, они выполняются в зависимости от их назначения (Исправление -> Адаптация -> Дополнение). Если в одном из "верхних" расширений возникает ошибка, до вашего кода очередь не дойдет.Наконец, обратим внимание на пользовательские действия. Событие ОбработкаЗаполнения гарантированно срабатывает при программном создании нового документа и при вводе на основании. Однако при копировании документа вызов этого события зависит от передаваемых параметров копирования. Учитывайте это при тестировании: если вы проверяете код, копируя документ, отладка может не сработать по логике самой платформы.
Подводя итог: при проблемах с перехватом ОбработкаЗаполнения всегда начинайте с проверки точного совпадения параметров (сигнатуры метода) и отключения безопасного режима расширения. Это решает 90% подобных проблем!