Большую часть времени разработчики правил обмена 1С не новые правила разрабатывают, а, конечно, вносят изменения в существующие и исправляют обнаруженные заказчиками ошибки. Мы рекомендуем заниматься отладкой по алгоритму, описанному ниже.
Этапы отладки правил обмена XML
Считаем, что отладку правил обмена нужно делать по возможности с минимальными усилиями. А возможности для этого есть. Мы предлагаем разделить на три этапа в зависимости от сложности требуемых усилий для разработчика.
Этап 1. Просто изучить текст ошибки
У обработки “Универсальный обмен в формате XML” хорошо реализовано логирование. Часто в тексте ошибки указано имя ПКО или ПВД, имя и номер свойства, в котором возникает ошибка и даже номер строки, в которой возникает ошибка.
Большую часть замечаний можно исправить именно таким способом. Заказчик присылает текст ошибки, внимательно смотрите на него. Исправляете ошибку. Отправляете корректные правила заказчику. Все.
Пример:
Ошибка в обработчике события ПередВыгрузкой (свойства)
ПКО = ВводОстатковРасчетыСПартнерами (:)
ПКС = 10 (--> ДатаПлатежа)
Объект = (Не определено)
СвойствоПриемника = ДатаПлатежа (Дата)
Обработчик = ПередВыгрузкойСвойства
ОписаниеОшибки = Ошибка компиляции при вычислении выражения или выполнении фрагмента кода: {<Неизвестный модуль>(16,2)}: Ожидается ключевое слово 'КонецЕсли' ('EndIf')
ПозицияМодуля = ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(10228)
КодСообщения = 55
Видно, что в ПКО ВводОстатковРасчетыСПартнерами в ПКС с кодом 10 с названием “ДатаПлатежа” в обработчике ПередВыгрузкойСвойства в строке 16 в позиции символа 2 ожидается ключевое слово “КонецЕсли”. То есть в данном случае разработчик не завершил условный оператор.
В основном именно такие простые ошибки и возникают и для их исправления даже не надо запускать выгрузку или загрузку данных 1С.
Этап 2. Запросить и изучить подробные логи
Иногда ошибка заключается в том, что объект неверного типа значения попадает в ПКО. То есть ПКО ожидает, например, тип СправочникСсылка.Контрагенты, а попадает СправочникСсылка.Организации. В этом случае из текста ошибки по умолчанию непонятно, из какого предыдущего ПКО или ПВД вызывается данное ПКО. То есть ошибка находится где-то выше по коду. Ранее. В каком-то другом ПКО есть ПКС и в этом ПКС неверное имя ПКО подставляется. Там в нее и надо усложнить алгоритм подбора ПКО.
Но этот код выше нам не увидеть из текста ошибки.
Что делать в этом случае?
Рекомендуем запросить клиента выполнить выгрузку данных с подробными логами. В терминах обработки “Универсальный обмен в формате ХМЛ” это называется Выводить информационные сообщения в протокол обмена.
Как выполнять эту выгрузку написали в отдельной статье: Как сделать выгрузку данных с подробными логами в обработке Универсальный обмен в формате XML?
Рекомендуем вашим заказчикам отправлять ссылку на эту статью и просить прислать протокол выгрузки в текстовом файле.
Ниже пример подробных логов выгрузки:
Правило выгрузки данных: ОстаткиАрендованныхОС (Остатки арендованных ОС (счет 001))
Выгрузка объекта: СтрокаТаблицыЗначений (Строка таблицы значений)
Выгрузка объекта: СтрокаТаблицыЗначений (Строка таблицы значений)
Выгрузка объекта: СтрокаТаблицыЗначений (Строка таблицы значений)
Конвертация объекта: СтрокаТаблицыЗначений (Строка таблицы значений) ПКО: ВводОстатковАрендованныхОС (:)
Конвертация объекта: ООО (Организация) ПКО: Организации (Справочник: Организации)
Конвертация объекта: 1 (Число) ПКО: ПодразделениеОсновное (:)
Конвертация объекта: Соглашение № 11001268 от 19.11.2021, EUR (Аренда) (Договор) ПКО: ОбъектыЭксплуатации (Справочник: Основные средства)
Ошибка получения значения свойства объекта (по имени свойства источника)
ПКО = ОбъектыЭксплуатации (Справочник: Основные средства)
ПКС = 1 (ДатаВыпуска --> ДатаВыпуска)
Объект = Соглашение № 11001268 от 19.11.2021, EUR (Аренда) (Договор)
СвойствоПриемника = ДатаВыпуска (Дата)
ОписаниеОшибки = Поле объекта не обнаружено (ДатаВыпуска)
ПозицияМодуля = ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(9587)
КодСообщения = 13
Какую ошибку тут наблюдаем?
В ПКО ОбъектыЭксплуатации попадает элемент справочника Договоры. И поэтому не могут отрабатывать ПКС.
Но кто вызывает ПКО ОбъектыЭксплуатации? Без подробных логов мы этого не видели. Сейчас же видно, что это ПКО ОстаткиАрендованныхСредств. Благодаря этому очень легко и быстро найти место, где вызываем ПКО ОбъектыЭксплуатации при выгрузке остатков арендованных средств.
Конкретно в этом случае мы выгружали из сальдо счета учета арендованных ОС значение Субконто1. А в клиентской базе основное средство находилось в Субконто2.
Добавили такой на проверку типа значения и выбор из разных номеров субконтов счета учета при заполнении Выборки данных в ПВД и ошибка ушла:
Если ТипЗнч(ДетальнаяВыборка.Субконто1) = Тип("СправочникСсылка.ОсновныеСредства") Тогда НоваяСтрокаОС.ОсновноеСредство = ДетальнаяВыборка.Субконто1; ИначеЕсли ТипЗнч(ДетальнаяВыборка.Субконто2) = Тип("СправочникСсылка.ОсновныеСредства") Тогда НоваяСтрокаОС.ОсновноеСредство = ДетальнаяВыборка.Субконто2; ИначеЕсли ТипЗнч(ДетальнаяВыборка.Субконто3) = Тип("СправочникСсылка.ОсновныеСредства") Тогда НоваяСтрокаОС.ОсновноеСредство = ДетальнаяВыборка.Субконто3; КонецЕсли;
Этап 3. Отладка обработчиков правил обмена
Делается с помощью выгрузки кода в модуль объекта отдельной обработки для отладки обработчиков. Пошаговую инструкцию разберем далее по тексту.
Отладка обработчиков событий правил обмена с помощью внешней обработки 1С
Представьте ситуацию, что у вас написано большое количество программного кода в обработчиках событий правил конвертации данных XML. При выгрузке данных возникает ошибка. И по логам никак не получается идентифицировать, почему возникает ошибка. На каком объекте возникает ошибка, в какой момент? Ничего не известно.
В этом случае разработчикам приходится выполнять отладку обработчиков правил обмена XML. Для этого создается отдельная внешняя обработка. В ее модуль объекта помещается специальный программный интерфейс. И прямо в тексте можно устанавливать точки останова. Также можно включить остановку по ошибке.
Разберем инструкцию, как подготовить обработку отладки обработчиков выгрузки. А уже методику поиска конкретной ошибки выберете в зависимости от своей ситуации. Например, можете установить точку останова с условием и так далее.
- В базе-источнике данных выгрузки открывается обработки Универсальный обмен в формате XML. Выбираем и читаем правила конвертации данных XML. Внизу включаем флаг Режим отладки обработчиков выгрузки. И нажимаем кнопку Настройка отладки выгрузки:
- В открывшейся форме выберите вариант Подставлять код алгоритмов по месту вызова. Нажмите кнопку Сформировать модуль отладки выгрузки. Через некоторое время будет подготовлен текст с программным кодом для модуля объекта внешней обработки отладки обработчиков.
- Выделите весь текст и скопируйте его:
- Откройте конфигуратор базы-источника данных. Создайте новую внешнюю обработку:
И далее:
- Нажмите Действия - Открыть модуль объекта:
- Вставьте текст, который скопировали на шаге 3, в модуль объекта обработки. Сохраните обработку на диск:
Если в этот момент возникает ошибка, это говорит либо о наличии синтаксических ошибок в правилах конвертации данных (их надо исправить, сохранить правила конвертации на диск и начать все действия с Шага 1), либо о том, что у одного из алгоритмов в используемых параметрах не указаны все используемые в коде значения.
На скриншоте ниже пример ошибки:
В параметрах указано “Источник”. Забыли указано глобальную переменную с параметрами выгрузки, которая называется “Параметры”. То есть корректно было бы написать так:
Все такие ситуации надо обязательно исправить и добиться, чтобы текст модуля объекта обработки отладки обработчиков сохранялся без ошибок. Только после этого можно начать заниматься отладкой.
- Вернитесь в базу 1С в режиме 1С:Предприятие, укажите путь к сохраненной на диск обработке. Нажмите Готово:
- Перечитайте правила в обработке (после подключения обработки отладки это нужно всегда сделать заново):
- Далее уже в конфигураторе в модуле объекта обработки отладки обработчиков установите необходимые точки останова. Используйте поиск по ключевым словам для поиска проблемных мест в программном коде. Также можете включить остановку по ошибке.
















































