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