Как отладить правила регистрации объектов (ПРО) в 1С:Конвертация данных 2.1

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При работе с инструментом 1С:Конвертация данных 2.1 разработчики часто сталкиваются с тем, что правила обмена (ПКО, ПКС) отлаживаются достаточно легко с помощью штатной обработки «Отладка обработчиков выгрузки». Однако, когда дело доходит до правил регистрации объектов (ПРО), ситуация осложняется: штатного механизма «из коробки» для их проверки не предусмотрено. Если ваш код фильтрации в правилах регистрации не срабатывает или работает некорректно, приходится прибегать к методам ручной отладки. В этой статье мы подробно разберем, как локализовать проблему и проверить работу вашего кода.

Понимание механизма регистрации объектов

Прежде чем приступать к отладке, давайте проанализируем, как система вообще понимает, что объект нужно зарегистрировать. В большинстве типовых конфигураций 1С этот процесс реализован через подписки на события. Обычно это подписки типа ПередЗаписью или ПриЗаписи для документов, справочников и других объектов.

Когда вы записываете объект в базе, срабатывает подписка, которая вызывает программный код в общем модуле. Этот код считывает XML-файл с правилами регистрации, которые вы загрузили в базу, находит нужный объект и проверяет условия, написанные вами в КД 2.1. Основная сложность заключается в том, что этот код выполняется динамически через оператор Выполнить(), что делает невозможным прямой «заход» в него отладчиком.

Поиск точки входа в конфигураторе

Рассмотрим по шагам, где именно в конфигураторе «ловить» выполнение ваших правил. Нам необходимо найти процедуру, которая отвечает за анализ условий регистрации. В типовых решениях (УТ 11, БП 3.0, ЗУП 3.1) логика сосредоточена в общем модуле «ОбменДаннымиСобытия».

  1. Откроем конфигуратор и найдем общий модуль ОбменДаннымиСобытия.
  2. Внутри модуля найдем процедуру ПроверитьУсловиеРегистрацииОбъекта. Именно здесь система вычисляет результат ваших фильтров.
  3. Внутри этой процедуры найдем фрагмент кода, где вызывается оператор Выполнить(Алгоритм). Параметр Алгоритм — это и есть ваш текст из Конвертации данных.
  4. Установим точку останова (F9) перед вызовом Выполнить.

Важный нюанс: Чтобы отладчик сработал, запись объекта должна происходить в том же сеансе, где открыт конфигуратор. Если объект записывается фоновым заданием, необходимо включить отладку фоновых заданий.

Использование журнала регистрации для «быстрой» отладки

Иногда отладка через конфигуратор неудобна, особенно если база большая, а регистрация происходит внутри сложной транзакции. В таком случае мы можем применить метод логирования. Поскольку в правилах регистрации нам доступен встроенный язык 1С, мы можем принудительно записывать промежуточные значения переменных в Журнал регистрации.

Разберем пример. Допустим, в правиле регистрации для документа «Реализация товаров и услуг» у вас написан код фильтрации по сумме или складу. Добавьте в код правила следующую конструкцию:


ТекстДляОтладки = "Сумма документа: " + Объект.СуммаДокумента + ", Склад: " + Объект.Склад;
ЗаписьЖурналаРегистрации("Отладка_ПРО", УровеньЖурналаРегистрации.Информационный, , , ТекстДляОтладки);

Теперь после записи объекта вам достаточно открыть Журнал регистрации в режиме «1С:Предприятие» и отфильтровать события по названию "Отладка_ПРО". Так вы увидите, какие значения принимали поля объекта в момент срабатывания правил.

Вынос логики в общий модуль

Если код фильтрации становится слишком сложным и отлаживать его через Выполнить() становится невозможным, применим профессиональный прием: вынос логики в общий модуль конфигурации. Это требует изменения самой конфигурации, но значительно упрощает жизнь разработчику.

Проанализируем алгоритм действий:

  1. Создадим в конфигурации новый общий модуль (например, итОтладкаПРО) с установленными флажками «Сервер» и «Вызов сервера».
  2. Создадим в нем экспортную функцию:
    
    Функция УсловиеРегистрацииВыполнено(Объект, Отказ) Экспорт
        // Здесь пишем сложный код фильтрации
        Если Объект.СуммаДокумента > 1000 Тогда
            Возврат Истина;
        КонецЕсли;
        Возврат Ложь;
    КонецФункции
    
  3. В 1С:Конвертация данных 2.1 в тексте правила регистрации оставим только вызов этой функции: Отказ = Не итОтладкаПРО.УсловиеРегистрацииВыполнено(Объект, Отказ);

Теперь вы сможете поставить обычную точку останова в общем модуле и полноценно пользоваться всеми инструментами отладчика (стек вызовов, табло, вычисление выражений).

Внешние обработки для тестирования ПРО

Существуют сторонние инструменты, позволяющие тестировать правила регистрации без физической записи объекта в базу. Рассмотрим, как они работают. Такие обработки имитируют контекст выполнения подписки на события. Вы выбираете объект, выбираете файл XML с правилами, и обработка программно выполняет те же функции, что и модуль ОбменДаннымиСобытия.

Это отличный способ, если вам нужно проверить правила на большом массиве уже существующих данных. Вы сразу увидите список узлов (получателей), для которых объект будет зарегистрирован, или причину, по которой регистрация отклонена (параметр Отказ = Истина).

Типичные ошибки при отладке

Выясним причины, по которым отладка может «не идти», даже если вы все сделали правильно:

Подводя итог, можно сказать: несмотря на отсутствие прямой кнопки «Отладить», правила регистрации объектов полностью поддаются анализу. Используйте точки останова в общих модулях для глубокого анализа, журнал регистрации для быстрой проверки и внешние модули для сложной бизнес-логики. Это позволит вам создавать надежные и точные механизмы синхронизации данных.

← На главную