Как отладить типовые правила обмена КД 2 в конфигурациях на БСП?

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

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

Проанализируем причины такого поведения и разберем надежные практические способы отладки обработчиков правил конвертации объектов (ПКО) и свойств (ПКС).

Способ 1. Вынос отлаживаемого кода в общий модуль конфигурации

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

Разберем реализацию этого способа по шагам:

  1. Откроем базу-приемник или базу-источник (в зависимости от того, на какой стороне требуется отладка — при выгрузке или загрузке) в конфигураторе.
  2. Создадим новый общий модуль (например, с именем ДляОтладкиОбмена). Модуль должен иметь установленные флаги Сервер, Вызов сервера (при необходимости) и не быть привилегированным, если проверяются типовые права.
  3. Создадим в модуле экспортную процедуру, которая будет принимать все необходимые контекстные переменные обработчика. Например, для обработчика ПослеЗагрузки передадим параметры Объект, Параметры и Отказ:
    
    Процедура ПослеЗагрузкиДокумента(Объект, Параметры, Отказ) Экспорт
        // Поместим сюда отлаживаемый код обработчика
        Если ТипЗнч(Объект) = Тип("ДокументОбъект.РеализацияТоваровУслуг") Тогда
            // Здесь можно свободно ставить точку останова
            Объект.Комментарий = "Загружено по обмену: " + ТекущаяДата();
        КонецЕсли;
    КонецПроцедуры
    
  4. Откроем правила в конфигурации «Конвертация данных 2.1». В нужном правиле конвертации (в событии После загрузки) заменим исходный код на вызов созданной процедуры: ДляОтладкиОбмена.ПослеЗагрузкиДокумента(Объект, Параметры, Отказ);
  5. Сохраним и выгрузим обновленные правила обмена, затем загрузим их в базу через настройки синхронизации данных.
  6. Поставим стандартную точку останова (клавиша F9) внутри процедуры общего модуля ДляОтладкиОбмена.ПослеЗагрузкиДокумента и запустим обмен. Платформа гарантированно остановится на нужной строке.

Способ 2. Использование штатного режима отладки и внешней обработки обработчиков

Если изменять конфигурацию добавлением новых общих модулей нельзя, используем штатный механизм БСП с подключением внешней обработки отладки. Однако здесь кроется подводный камень: при генерации модуля в КД 2.1 возникает синтаксическая ошибка компиляции из-за отсутствия контекста обработки КонвертацияОбъектовИнформационныхБаз.

Разберем правильный алгоритм настройки внешней обработки:

  1. Откроем правила в конфигурации «Конвертация данных 2.1». В свойствах конвертации перед выгрузкой рекомендуется отключить режим совместимости, чтобы структура формируемого кода соответствовала требованиям БСП.
  2. Перейдем в меню настройки отладки правил и нажмем Сформировать модуль обработчиков загрузки (или выгрузки). Скопируем полученный текст.
  3. В конфигураторе целевой базы создадим новую внешнюю обработку (через Файл — Новый — Внешняя обработка). Откроем модуль объекта созданной обработки и вставим сформированный код.
  4. Устраним ошибку компиляции. При сохранении модуля обычно появляется ошибка: Процедура или функция с указанным именем не определена (ДокументыДляОтложенногоПроведения). Это происходит потому, что данный метод принадлежит типовой обработке обмена, а не нашей внешней обработке. Добавим в модуль объекта в самом начале или конце функцию-заглушку:
    
    Функция ДокументыДляОтложенногоПроведения() Экспорт
        Возврат Новый ТаблицаЗначений;
    КонецФункции
    
    После добавления функции модуль успешно пройдет синтаксический контроль и сохранится на диск в файл с расширением .epf.
  5. В режиме «1С:Предприятие» откроем форму синхронизации: Синхронизация данных — Настройки синхронизации — Загрузить правила конвертации. Установим флаг Режим отладки, выберем режим подключения внешней обработки и укажем сохраненный файл .epf. Обратите внимание: снимаем флаг «Не останавливать обмен при возникновении ошибок», иначе система при малейшем сбое тихо переключится на встроенные правила.

Почему точки останова могут не срабатывать при синхронизации?

Выясним основные технические причины, из-за которых отладчик не перехватывает управление в момент обмена:

  1. Прямое COM-соединение: если обмен настроен через прямое подключение к базе, код на стороне приемника выполняется не в пользовательском клиенте, а в сеансе внешнего соединения. В конфигураторе базы-приемника обязательно откроем меню Отладка — Подключение — Автоматическое подключение и установим флаг Внешние соединения. Для упрощения отладки рекомендуется временно перевести обмен на выгрузку в локальный каталог (XML-файл), запустить базу-приемник в режиме толстого или тонкого клиента и загрузить файл интерактивно.
  2. Фоновые задания: стандартный запуск обмена выполняется в фоновом задании на сервере. В окне Отладка — Автоматическое подключение обязательно должен быть включен флаг Фоновые задания, а сама служба сервера 1С:Предприятия (ragent) должна быть запущена с ключом -debug.
  3. Несовпадение контрольных сумм внешней обработки: БСП часто копирует внешнюю обработку во временную папку сервера перед выполнением метода ВнешниеОбработки.Создать(). Из-за различия путей точка останова в исходном файле может не сработать. В этом случае поставим точку останова в общем модуле или обработке КонвертацияОбъектовИнформационныхБаз перед вызовом процедуры алгоритма и зайдем внутрь обработчика клавишей F11 («Шагнуть в»).

Способ 3. Остановка по ошибке и протоколирование

Если доступ к полноценной отладке ограничен политиками безопасности или серверным окружением, применим быстрые приемы локализации ошибок:

  1. Искусственное исключение: добавим в проблемное место обработчика правил строку ВызватьИсключение "ТОЧКА_ОСТАНОВА"; либо операцию деления на ноль: Тест = 1 / 0;. В конфигураторе включим режим Отладка — Остановка по ошибке. Платформа остановит выполнение точно на этой строке, предоставив доступ ко всем локальным переменным: Объект, Параметры, РежимЗаписи, Отказ.
  2. Запись в журнал регистрации: для фонового анализа значений реквизитов используем метод:
    
    ЗаписьЖурналаРегистрации("ОтладкаОбмена", 
        УровеньЖурналаРегистрации.Информация,,, 
        "Значение реквизита: " + Строка(Объект.Ссылка));
    
← На главную