При работе с инструментом 1С:Конвертация данных 2.1 разработчики часто сталкиваются с тем, что правила обмена (ПКО, ПКС) отлаживаются достаточно легко с помощью штатной обработки «Отладка обработчиков выгрузки». Однако, когда дело доходит до правил регистрации объектов (ПРО), ситуация осложняется: штатного механизма «из коробки» для их проверки не предусмотрено. Если ваш код фильтрации в правилах регистрации не срабатывает или работает некорректно, приходится прибегать к методам ручной отладки. В этой статье мы подробно разберем, как локализовать проблему и проверить работу вашего кода.
Прежде чем приступать к отладке, давайте проанализируем, как система вообще понимает, что объект нужно зарегистрировать. В большинстве типовых конфигураций 1С этот процесс реализован через подписки на события. Обычно это подписки типа ПередЗаписью или ПриЗаписи для документов, справочников и других объектов.
Когда вы записываете объект в базе, срабатывает подписка, которая вызывает программный код в общем модуле. Этот код считывает XML-файл с правилами регистрации, которые вы загрузили в базу, находит нужный объект и проверяет условия, написанные вами в КД 2.1. Основная сложность заключается в том, что этот код выполняется динамически через оператор Выполнить(), что делает невозможным прямой «заход» в него отладчиком.
Рассмотрим по шагам, где именно в конфигураторе «ловить» выполнение ваших правил. Нам необходимо найти процедуру, которая отвечает за анализ условий регистрации. В типовых решениях (УТ 11, БП 3.0, ЗУП 3.1) логика сосредоточена в общем модуле «ОбменДаннымиСобытия».
ОбменДаннымиСобытия.ПроверитьУсловиеРегистрацииОбъекта. Именно здесь система вычисляет результат ваших фильтров.Выполнить(Алгоритм). Параметр Алгоритм — это и есть ваш текст из Конвертации данных.Выполнить.Важный нюанс: Чтобы отладчик сработал, запись объекта должна происходить в том же сеансе, где открыт конфигуратор. Если объект записывается фоновым заданием, необходимо включить отладку фоновых заданий.
Иногда отладка через конфигуратор неудобна, особенно если база большая, а регистрация происходит внутри сложной транзакции. В таком случае мы можем применить метод логирования. Поскольку в правилах регистрации нам доступен встроенный язык 1С, мы можем принудительно записывать промежуточные значения переменных в Журнал регистрации.
Разберем пример. Допустим, в правиле регистрации для документа «Реализация товаров и услуг» у вас написан код фильтрации по сумме или складу. Добавьте в код правила следующую конструкцию:
ТекстДляОтладки = "Сумма документа: " + Объект.СуммаДокумента + ", Склад: " + Объект.Склад;
ЗаписьЖурналаРегистрации("Отладка_ПРО", УровеньЖурналаРегистрации.Информационный, , , ТекстДляОтладки);
Теперь после записи объекта вам достаточно открыть Журнал регистрации в режиме «1С:Предприятие» и отфильтровать события по названию "Отладка_ПРО". Так вы увидите, какие значения принимали поля объекта в момент срабатывания правил.
Если код фильтрации становится слишком сложным и отлаживать его через Выполнить() становится невозможным, применим профессиональный прием: вынос логики в общий модуль конфигурации. Это требует изменения самой конфигурации, но значительно упрощает жизнь разработчику.
Проанализируем алгоритм действий:
итОтладкаПРО) с установленными флажками «Сервер» и «Вызов сервера».
Функция УсловиеРегистрацииВыполнено(Объект, Отказ) Экспорт
// Здесь пишем сложный код фильтрации
Если Объект.СуммаДокумента > 1000 Тогда
Возврат Истина;
КонецЕсли;
Возврат Ложь;
КонецФункции
Отказ = Не итОтладкаПРО.УсловиеРегистрацииВыполнено(Объект, Отказ);
Теперь вы сможете поставить обычную точку останова в общем модуле и полноценно пользоваться всеми инструментами отладчика (стек вызовов, табло, вычисление выражений).
Существуют сторонние инструменты, позволяющие тестировать правила регистрации без физической записи объекта в базу. Рассмотрим, как они работают. Такие обработки имитируют контекст выполнения подписки на события. Вы выбираете объект, выбираете файл XML с правилами, и обработка программно выполняет те же функции, что и модуль ОбменДаннымиСобытия.
Это отличный способ, если вам нужно проверить правила на большом массиве уже существующих данных. Вы сразу увидите список узлов (получателей), для которых объект будет зарегистрирован, или причину, по которой регистрация отклонена (параметр Отказ = Истина).
Выясним причины, по которым отладка может «не идти», даже если вы все сделали правильно:
Объект.ОбменДанными.Загрузка = Истина, то стандартные подписки на события могут игнорировать такой объект. Проверьте, заходит ли выполнение в подписку вообще.Подводя итог, можно сказать: несмотря на отсутствие прямой кнопки «Отладить», правила регистрации объектов полностью поддаются анализу. Используйте точки останова в общих модулях для глубокого анализа, журнал регистрации для быстрой проверки и внешние модули для сложной бизнес-логики. Это позволит вам создавать надежные и точные механизмы синхронизации данных.