Разберем ситуацию, которая часто ставит в тупик даже опытных разработчиков 1С: вы вносите изменения в модуль объекта или формы, ставите точку останова, запускаете процесс, но программа «пролетает» мимо вашего кода. События ОбработкаЗаполнения, ПриСозданииНаСервере, ПриЗаписи или ОбработкаПроведения визуально не отрабатывают, хотя логика кажется верной. Проанализируем причины такого поведения, особенно в контексте работы с платформой 1С:Предприятие 8.3.18 и выше, а также в гибридных конфигурациях, где сочетаются обычные и управляемые формы.
Первым делом выясним самую банальную, но часто встречающуюся причину — отключенную отладку на сервере 1С. Если ваша конфигурация работает в клиент-серверном варианте, код серверных процедур выполняется внутри процесса rphost. Чтобы отладчик «зацепился» за этот процесс, сервер должен быть запущен с ключом -debug.
Рассмотрим порядок действий для проверки:
Важный нюанс: часто системные администраторы отключают отладку на рабочих серверах для повышения производительности и забывают сообщить об этом разработчикам. Если вчера всё работало, а сегодня нет — начните проверку именно с этого пункта.
Проанализируем программный код на наличие условий компиляции. В старых конфигурациях или при переносе кода из обычного приложения в управляемое часто встречаются конструкции следующего вида:
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)
// Логика заполнения документа
КонецПроцедуры
#КонецЕсли
Разберем по шагам, к чему это может привести:
Выясним причину возможной путаницы между событиями объекта и формы. Важно понимать строгую последовательность инициализации документа:
Событие ОбработкаЗаполнения всегда находится в модуле объекта. Оно вызывается первым при создании нового объекта (например, на основании другого документа). Если в этом методе происходит отказ или устанавливается параметр СтандартнаяОбработка = Ложь, это напрямую влияет на дальнейшее поведение формы.
Событие ПриСозданииНаСервере находится в модуле формы. Оно срабатывает только в том случае, если документ открывается интерактивно. Если документ создается программно кодом типа:
НовыйДокумент = Документы.ЭСФ.СоздатьДокумент();
НовыйДокумент.Заполнить(ДокументОснование);
НовыйДокумент.Записать();
То событие формы ПриСозданииНаСервере не вызовется вовсе. Проанализируем способ создания документа в вашем конкретном случае. Если используется специализированный помощник или обработка формирования Электронных счетов-фактур (ЭСФ), создание может происходить в фоновом задании.
Посмотрим на специфику работы современных типовых решений. Часто формирование электронных документов (ЭДО, ЭСФ) выносится в фоновые задания, чтобы не блокировать интерфейс пользователя. Для отладки таких процессов стандартного включения сервера в режим -debug недостаточно.
Выполним следующие настройки:
Без этой настройки отладчик будет игнорировать код, выполняемый в фоновом потоке, и у вас сложится впечатление, что ОбработкаЗаполнения не работает.
Проанализируем техническое состояние сервера 1С. Для платформы 8.3.18 характерна проблема «залипания» серверного кэша. Даже если вы изменили код и сохранили конфигурацию, серверный процесс rphost может продолжать использовать старую скомпилированную версию модуля.
Рассмотрим способы решения:
1C:Enterprise 8.3 Server Agent.snccntxt в папке сервера (обычно в C:\Program Files\1cv8\srvinfo).Выясним, не блокирует ли система данные на уровне прав доступа. Если у пользователя настроен RLS (Record Level Security — ограничение прав на уровне записей), то при создании документа на основании, например, «Счета-фактуры выданной», платформа может не дать доступ к данным объекта-основания.
В этом случае в процедуру ОбработкаЗаполнения в параметр ДанныеЗаполнения придет Неопределено или пустая ссылка. Если ваш код обернут в условие:
Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.СчетФактураВыданный") Тогда
// Заполнение
КонецЕсли;
То логика внутри условия просто не выполнится, создавая иллюзию «неработающего» события.
Проанализируем наличие расширений в базе. Даже если вы уверены, что расширений нет, проверим это через «Конфигурация — Расширения конфигурации». В современных реалиях многие доработки делаются именно там. Если в расширении определена процедура &Вместо("ОбработкаЗаполнения"), то основной код в модуле объекта будет полностью проигнорирован, если только в расширении явно не вызван ПродолжитьВызов().
Подводя итог, если у вас перестали отрабатывать серверные события, выполним проверку по следующему чек-листу:
-debug в настройках запуска службы сервера 1С.#Если Сервер и права доступа RLS.В большинстве случаев проблема кроется именно в настройках среды исполнения и инструментария отладки, а не в ошибках самой логики кода платформы.