Как отладить обработчики КД2 при использовании обработки КонвертацияОбъектовИнформационныхБаз?

Программист IT и автоматизация бизнеса
← На главную

Работа с обменами данными в конфигурациях на базе Библиотеки стандартных подсистем (БСП) часто сопряжена с трудностями при отладке. В отличие от привычной многим обработки УниверсальныйОбменДаннымиXML, встроенная обработка КонвертацияОбъектовИнформационныхБаз (КОИБ) чаще всего запускается в фоновом режиме, что делает невозможным использование стандартных точек останова. В этой статье мы подробно разберем, как преодолеть эти ограничения и эффективно отлаживать алгоритмы обмена.

Метод 1. Использование параметра запуска РежимОтладки

Первое, с чем мы сталкиваемся при попытке отладки обмена в БСП — это выполнение кода в фоновом задании. Чтобы «вытащить» выполнение кода в текущий сеанс и сделать его доступным для отладчика, проанализируем возможности самой платформы и БСП.

Рассмотрим порядок действий:

  1. Запустим сеанс 1С:Предприятия с параметром командной строки /C РежимОтладки. Этот параметр дает сигнал БСП выполнять длительные операции синхронно.
  2. Перейдем в раздел Администрирование — Синхронизация данных.
  3. Запустим процесс синхронизации. Если параметр установлен верно, система не создаст фоновое задание, а начнет выполнение обмена прямо в интерфейсном потоке.
  4. Теперь мы можем использовать точки останова в конфигураторе, если код обработчиков вынесен во внешние модули или расширения.

Метод 2. Отладка через расширения конфигурации

Поскольку код правил обмена КД 2.1 обычно хранится в виде текста в справочниках и выполняется через функцию Выполнить(), поставить точку останова напрямую в теле обработчика невозможно. Рассмотрим наиболее стабильный современный метод — использование расширений.

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

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

Например, если нам нужно отладить обработчик «После загрузки», создадим процедуру в расширении:


Процедура МойМодульОтладки_ПослеЗагрузки(Объект, СвойстваПоиска, ПараметрыОбъекта) Экспорт
    // Здесь ставим точку останова (F9)
    Если Объект.Наименование = "НужныйНамОбъект" Тогда
        Приостановить; // Или любой другой код для анализа
    КонецЕсли;
КонецПроцедуры

Затем в самой «Конвертации данных 2.1» в соответствующем обработчике пропишем вызов этой процедуры:


ИмяМодуляРасширения.МойМодульОтладки_ПослеЗагрузки(Объект, СвойстваПоиска, ПараметрыОбъекта);

Теперь при выполнении обмена управление перейдет в модуль расширения, где отладчик успешно остановится на вашей точке останова. Проанализируем состояние переменных через табло или стек вызовов.

Метод 3. Логирование событий в Журнал регистрации и текстовые файлы

Если по каким-то причинам использование отладчика затруднено (например, на рабочем сервере), выясним причины некорректной работы через запись логов. Обычный метод Сообщить() в фоновых заданиях бесполезен, поэтому используем альтернативы.

Рассмотрим вариант записи в Журнал регистрации с использованием стандартных методов БСП:


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

Если данных слишком много, проанализируем ситуацию через запись в текстовый файл. Это быстрее и не раздувает базу данных:


ФайлЛога = Новый ЗаписьТекста("C:\Debug\exchange_log.txt", КодировкаТекста.UTF8, , Истина);
ФайлЛога.ЗаписатьСтроку("Текущее время: " + ТекущаяДата() + " - Обработка объекта: " + Объект.Ссылка.УникальныйИдентификатор());
ФайлЛога.Закрыть();

Метод 4. Особенности обработчика «Поля поиска» в БСП

Важно учитывать, что логика поиска в обработке КонвертацияОбъектовИнформационныхБаз отличается от стандартного универсального обмена. Разберем два критически важных нюанса, которые часто принимают за ошибки.

Нюанс 1. Имена переменных.
В стандартной обработке КД2 для управления поиском используется переменная ПродолжитьПоискПоПолямПоискаЕслиПоИдентификаторуНеНашли. Однако внутри механизмов БСП эта переменная сокращена. Чтобы логика сработала, используйте следующий код:


// Для БСП используем короткое имя
ПродолжитьПоиск = Истина; 

Нюанс 2. Регистр соответствий.
Система БСП в первую очередь проверяет наличие записи в регистре сведений Соответствия объектов информационных баз. Если запись о соответствии уже существует, система сразу берет ссылку из регистра и вообще не заходит в обработчик «Поля поиска». Чтобы заставить систему зайти в этот обработчик повторно для уже переданного объекта, необходимо удалить соответствующую запись в этом регистре в базе-приемнике. Для анализа других неочевидных сценариев сопоставления объектов можно использовать заметки по особенностям поиска при конвертации данных.

Метод 5. Использование штатного режима отладки БСП

Проанализируем еще один встроенный механизм. В современных версиях БСП в справочнике или регистре, где хранятся Правила для обмена данными, предусмотрена возможность загрузки внешних модулей отладки. Для восстановления возможности загрузки комплекта правил КД 2.1 в регистр правил актуальных версий БСП подойдёт расширение для загрузки правил обмена XML.

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

Используя эти методы, мы сможем детально проанализировать процесс трансформации данных, увидеть состояние переменных в критических точках и оперативно исправить ошибки в правилах обмена.

← На главную