При разработке и сопровождении интеграций на базе технологии Конвертация данных 3.0 (EnterpriseData) разработчики часто сталкиваются с необходимостью пошаговой отладки обработчиков правил конвертации объектов (ПКО) и правил обработки данных (ПОД). Ранее классический сценарий отладки заключался в подключении внешней обработки с модулем менеджера обмена напрямую к узлу плана обмена. Однако в современных версиях Библиотеки стандартных подсистем (БСП) и типовых конфигурациях (1С:ERP, 1С:Комплексная автоматизация, 1С:Управление торговлей, 1С:Бухгалтерия предприятия) этот механизм изменился: обработка помещается во временное хранилище, а обмен выполняется в фоновом задании на стороне сервера. В результате точки останова в исходном файле внешней обработки перестают срабатывать.
Разберем детально, почему это происходит, и рассмотрим рабочие способы отладки логики обмена в универсальном формате.
Проанализируем механизм, который платформа и БСП используют при запуске синхронизации:
ВнешниеОбработки.Подключить(АдресОбработки) сохраняет двоичные данные файла во временный системный каталог сервера под динамически сгенерированным именем. Поскольку отладчик в Конфигураторе сопоставляет контрольные точки с исходным путем к файлу обработки на диске, выполнение кода во временном файле проходит мимо открытого в среде разработки модуля.Рассмотрим, как подготовить внешнюю обработку для отладки логики обмена:
МенеджерОбменаЧерезУниверсальныйФормат (или МенеджерОбменаЧерезУниверсальныйФормат13 в зависимости от версии).usr1cv8).Чтобы платформа не копировала обработку во временное хранилище и исполняла код напрямую из файла, скорректируем код получения менеджера обмена в модуле плана обмена СинхронизацияДанныхЧерезУниверсальныйФормат (или переопределим его через расширение):
Процедура ПолучитьВерсииФорматаОбмена(ВерсииФормата) Экспорт
// ... получение данных узла
ИмяОбработки = Выборка.ПутьКМенеджеруОбмена;
Если НЕ ОбщегоНазначенияКлиентСервер.РежимОтладки() Тогда
ДанныеОбработки = Новый ДвоичныеДанные(ИмяОбработки);
АдресОбработки = ПоместитьВоВременноеХранилище(ДанныеОбработки);
Если ОбщегоНазначения.ЕстьЗащитаОтОпасныхДействий() Тогда
ИмяОбработки = ВнешниеОбработки.Подключить(АдресОбработки, , , ОбщегоНазначения.ОписаниеЗащитыБезПредупреждений());
Иначе
ИмяОбработки = ВнешниеОбработки.Подключить(АдресОбработки);
КонецЕсли;
КонецЕсли;
МенеджерОбмена = ВнешниеОбработки.Создать(ИмяОбработки);
// ... дальнейшая логика
КонецПроцедуры
При передаче ключа РежимОтладки в параметрах запуска клиентского приложения выполнение пойдет по ветке прямого вызова ВнешниеОбработки.Создать(ИмяОбработки), что позволит отладчику успешно перехватывать точки останова в исходном файле.
Наиболее современным и надежным методом является перенос отлаживаемых алгоритмов в расширение конфигурации. Это позволяет избежать проблем с путями к файлам и правами службы сервера.
Разберем по шагам, как настроить отладку через расширение:
МенеджерОбменаЧерезУниверсальныйФормат (или модуль ОбменДаннымиXDTOСервер).&Вместо или &ИзменениеИКонтроль переопределим интересующие обработчики правил конвертации (например, ПКО_Документ_РеализацияТоваровУслуг_ПриОтправкеДанных или процедуры отложенного заполнения).Если требуется принудительно перенаправить выбор менеджера обмена на внешнюю обработку для конкретного узла, переопределим функцию ВерсииФорматаОбмена в общем модуле ОбменДаннымиXDTOСервер через аннотацию &Вместо:
&Вместо("ВерсииФорматаОбмена")
Функция Расш_ВерсииФорматаОбмена(УзелИнформационнойБазы)
// Подменяем получение встроенного общего модуля на создание объекта внешней обработки,
// путь к которой прочитан из реквизитов узла плана обмена
Результат = ПродолжитьВызов(УзелИнформационнойБазы);
ПутьКОбработке = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УзелИнформационнойБазы, "ПутьКМенеджеруОбмена");
Если ЗначениеЗаполнено(ПутьКОбработке) Тогда
// Возвращаем менеджер обмена из внешней обработки
Менеджер = ВнешниеОбработки.Создать(ПутьКОбработке, Ложь);
Возврат Менеджер;
КонецЕсли;
Возврат Результат;
КонецФункции
Для корректного перехвата точек останова при серверном обмене выполним обязательную настройку среды:
-debug (при отладке по TCP) или с активным протоколом HTTP-отладки.При отладке обмена между базами с разными версиями формата EnterpriseData (например, источник поддерживает формат 1.0 и 1.2, а приемник — 1.0, 1.2 и 1.3) возможна ситуация, когда при первом сеансе обработчики выборки берутся из внешней обработки, а сопоставление и загрузка — из встроенного модуля конфигурации.
Чтобы избежать расхождения модулей, выполним следующий порядок действий: