При доработке типовой синхронизации данных между конфигурациями (например, между 1С:Управление торговлей 11 и 1С:Бухгалтерия предприятия) разработчики часто сталкиваются со сложностями отладки алгоритмов «Конвертации данных 2.1». В отличие от классической обработки УниверсальныйОбменДаннымиXML, механизм синхронизации на базе Библиотеки стандартных подсистем (БСП) использует обработку КонвертацияОбъектовИнформационныхБаз. При попытке подключить внешнюю обработку для отладки часто возникают синтаксические ошибки, либо точки останова попросту игнорируются платформой.
Проанализируем причины такого поведения и разберем надежные практические способы отладки обработчиков правил конвертации объектов (ПКО) и свойств (ПКС).
Самый быстрый и гарантированно рабочий метод, позволяющий полноценно использовать возможности отладчика платформы 1С без сложной подготовки внешних файлов. Перенос логики в общий модуль полностью снимает ограничения, связанные с динамическим выполнением кода через Выполнить().
Разберем реализацию этого способа по шагам:
ДляОтладкиОбмена). Модуль должен иметь установленные флаги Сервер, Вызов сервера (при необходимости) и не быть привилегированным, если проверяются типовые права.ПослеЗагрузки передадим параметры Объект, Параметры и Отказ:
Процедура ПослеЗагрузкиДокумента(Объект, Параметры, Отказ) Экспорт
// Поместим сюда отлаживаемый код обработчика
Если ТипЗнч(Объект) = Тип("ДокументОбъект.РеализацияТоваровУслуг") Тогда
// Здесь можно свободно ставить точку останова
Объект.Комментарий = "Загружено по обмену: " + ТекущаяДата();
КонецЕсли;
КонецПроцедуры
После загрузки) заменим исходный код на вызов созданной процедуры:
ДляОтладкиОбмена.ПослеЗагрузкиДокумента(Объект, Параметры, Отказ);
ДляОтладкиОбмена.ПослеЗагрузкиДокумента и запустим обмен. Платформа гарантированно остановится на нужной строке.Если изменять конфигурацию добавлением новых общих модулей нельзя, используем штатный механизм БСП с подключением внешней обработки отладки. Однако здесь кроется подводный камень: при генерации модуля в КД 2.1 возникает синтаксическая ошибка компиляции из-за отсутствия контекста обработки КонвертацияОбъектовИнформационныхБаз.
Разберем правильный алгоритм настройки внешней обработки:
Процедура или функция с указанным именем не определена (ДокументыДляОтложенногоПроведения). Это происходит потому, что данный метод принадлежит типовой обработке обмена, а не нашей внешней обработке. Добавим в модуль объекта в самом начале или конце функцию-заглушку:
Функция ДокументыДляОтложенногоПроведения() Экспорт
Возврат Новый ТаблицаЗначений;
КонецФункции
.epf..epf. Обратите внимание: снимаем флаг «Не останавливать обмен при возникновении ошибок», иначе система при малейшем сбое тихо переключится на встроенные правила.Выясним основные технические причины, из-за которых отладчик не перехватывает управление в момент обмена:
ragent) должна быть запущена с ключом -debug.ВнешниеОбработки.Создать(). Из-за различия путей точка останова в исходном файле может не сработать. В этом случае поставим точку останова в общем модуле или обработке КонвертацияОбъектовИнформационныхБаз перед вызовом процедуры алгоритма и зайдем внутрь обработчика клавишей F11 («Шагнуть в»).Если доступ к полноценной отладке ограничен политиками безопасности или серверным окружением, применим быстрые приемы локализации ошибок:
ВызватьИсключение "ТОЧКА_ОСТАНОВА"; либо операцию деления на ноль: Тест = 1 / 0;. В конфигураторе включим режим Отладка — Остановка по ошибке. Платформа остановит выполнение точно на этой строке, предоставив доступ ко всем локальным переменным: Объект, Параметры, РежимЗаписи, Отказ.
ЗаписьЖурналаРегистрации("ОтладкаОбмена",
УровеньЖурналаРегистрации.Информация,,,
"Значение реквизита: " + Строка(Объект.Ссылка));