К статье
Практический материал

Разработка и Конфигурация · 11 мин

Как отлаживать правила обмена 1С

Пошаговая отладка правил обмена 1С (Конвертация данных): отладчик, обработчики ПКО, выгрузка в файлы, типовые ошибки и способы их быстро найти и исправить.

Отладка правил обмена — одна из самых трудоёмких задач при работе с «Конвертацией данных» и типовыми планами обмена 1С. Ошибка может проявляться по-разному: объект не переносится, переносится с пустыми реквизитами, дублируется или падает с невразумительной ошибкой «Ошибка в обработчике события». Без системного подхода поиск причины превращается в хаотичное перебирание правил.

Рабочая методика строится на трёх принципах: воспроизвести проблему на минимальном наборе данных, локализовать этап сбоя (выгрузка, передача, загрузка) и только потом исправлять конкретный обработчик. Ниже разобраны инструменты, порядок действий и типовые ошибки, которые встречаются при отладке правил конвертации объектов (ПКО), свойств (ПКС) и значений (ПКЗ).

Локализация проблемы: где именно ломается обмен

Прежде чем открывать конфигуратор, определите, на каком этапе возникает ошибка. Обмен через правила конвертации состоит из двух независимых половин: выгрузка формирует XML-файл, загрузка его разбирает. Если в файле выгрузки объект уже отсутствует или содержит неверные данные — проблема в правилах выгрузки (ПКО, ПКС, ПВД). Если файл корректен, а в базе-приёмнике объект появляется с ошибками — искать нужно в обработчиках загрузки или в логике поиска существующих объектов.

Практический приём: откройте файл обмена в текстовом редакторе и найдите проблемный объект по наименованию или GUID. Сравните содержимое с тем, что ожидалось. Это занимает минуты и сразу сокращает область поиска вдвое. Заодно проверьте журнал регистрации обеих баз и протокол обмена — часто там есть номер правила и текст исключения.

Маршрут решения

Как выбрать действие

Объект отсутствует в файле выгрузкиПроверяйте ПВД, отборы и обработчик «Перед выгрузкой» ПКО источника
Объект в файле есть, но реквизиты пустые или неверныеОтлаживайте ПКС и обработчики «Перед выгрузкой свойства»
Файл корректен, но в приёмнике объект дублируется или не находитсяПроверяйте поля поиска в ПКО и событие «Поля поиска» при загрузке
Обмен падает с ошибкой в обработчикеПодключайте внешние файлы обработчиков и проходите код отладчиком

Подготовка тестового контура и минимального примера

Никогда не отлаживайте правила на рабочих базах с реальным обменом. Создайте копии баз-источника и приёмника, зарегистрируйте к выгрузке один-два проблемных объекта и воспроизведите ошибку на них. Минимальный пример позволяет прогонять обмен десятки раз без риска и без ожидания полной выгрузки.

Убедитесь, что версии правил в тестовом и рабочем контуре совпадают. Частая ситуация: на тесте всё работает, в продакшене — нет, потому что там загружена устаревшая версия правил. Сверьте версию конфигурации «Конвертация данных», из которой выгружались правила, и дату файла правил, подключённого в узле обмена.

Отладка через внешние файлы обработчиков

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

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

Отладка при обмене через типовой план обмена

Если обмен идёт через план обмена (например, «Синхронизация данных» в БСП), правила хранятся в макете или в информационной базе узла. Для отладки выгрузите правила в файл (через настройку синхронизации — «Загрузить правила» / сохранение правил, либо из макета конфигурации), а затем используйте ту же универсальную обработку. Альтернатива — временно указать в узле внешний файл правил с подключёнными отладочными обработчиками, если механизм синхронизации это поддерживает.

Ключевые обработчики и что в них проверять

Большинство дефектов обмена сосредоточено в нескольких событиях. В ПКО это «Перед выгрузкой» (здесь часто стоит Отказ = Истина по условию, из-за чего объект молча пропадает), «При выгрузке» и «После выгрузки». На стороне загрузки критичны «Перед загрузкой» (здесь формируются поля поиска), «При загрузке» и «После загрузки».

В ПКС смотрите «Перед выгрузкой свойства»: именно здесь вычисляется параметр Значение. Пустой реквизит в приёмнике почти всегда означает, что выражение в этом обработчике вернуло Неопределено или обработчик завершился с Отказ. В ПКЗ проверяйте соответствие значений перечислений и предопределённых элементов — несовпадение имён приводит к пустым ссылкам.

Объект исчезает без ошибокСрабатывает Отказ = Истина

Условия в «Перед выгрузкой» ПКО и в ПВД

Пустые реквизиты в приёмникеПКС не вычисляет значение

Выражение в «Перед выгрузкой свойства», ПКЗ для перечислений

Дубли объектов в приёмникеНе срабатывает поиск

Поля поиска ПКО, ГУИД, режим поиска по внутреннему идентификатору

Ошибка «Поле не обнаружено»Обращение к несуществующему реквизиту

Совпадение имён реквизитов в источнике и приёмнике

Трассировка и логирование без отладчика

Не всегда отладчик доступен — например, обмен выполняется на сервере под пользователем службы или в распределённой инфраструктуре. В этом случае добавьте в проблемные обработчики вывод в протокол обмена или в журнал регистрации. В обработчиках конвертации доступен объект для сообщений, а также можно использовать стандартную запись в журнал регистрации через встроенный язык.

Полезно логировать ключевые значения: представление источника, вычисленное значение свойства, результат поиска в приёмнике. После прогона откройте протокол обмена (в универсальной обработке он выводится автоматически, в типовой синхронизации — через форму «Результаты синхронизации») и найдите свои сообщения. Не забудьте убрать или отключить отладочный вывод после завершения работ — избыточное логирование замедляет обмен и раздувает журнал регистрации.

Типовые ошибки и способы их избежать

Опыт показывает, что большинство проблем отладки связано не со сложностью правил, а с организационными просчётами: правки вносятся не в ту версию правил, обработчики не перевыгружаются после изменения, тестирование идёт на разных данных. Ниже — самые частые ошибки.

Типичные ошибки
01
Правка обработчиков прямо во внешнем файле без переноса в «Конвертацию данных» — при следующей выгрузке обработчиков изменения теряются
02
Забыли перевыгрузить правила после изменения — обмен работает по старой версии, и отладка показывает неактуальный код
03
Отладка на полном объёме данных — один прогон занимает часы, точку останова найти невозможно; регистрируйте один объект
04
Поиск по наименованию вместо уникальных полей — в приёмнике создаются дубли при малейшем расхождении строк
05
Игнорирование протокола обмена — текст ошибки с номером правила уже выведен, но его не читают
06
Изменение правил без копии базы-приёмника — ошибочная загрузка портит рабочие данные

Отдельно отметьте ошибку с режимом поиска. Если в ПКО включён поиск по внутреннему идентификатору (GUID) и одновременно поисковые поля настроены неверно, поведение при повторной загрузке становится неочевидным: объект то находится, то создаётся заново. При отладке дублей временно сузьте набор полей поиска до одного гарантированно уникального и проверьте, как ведёт себя загрузка.

Проверка результата после исправления правил

Исправление считается завершённым только после контрольного прогона. Перевыгрузите правила и обработчики, очистите регистрацию изменений в тестовом узле, зарегистрируйте тестовый объект заново и выполните полный цикл: выгрузка — проверка XML — загрузка — сверка объекта в приёмнике.

Контрольные точки

Как проверить результат

Наличие объекта в файле выгрузки
Норма

Объект есть, реквизиты заполнены ожидаемыми значениями

Тревожный признак

Объект отсутствует или свойства пустые

Загрузка в приёмник
Норма

Объект найден или создан один раз, реквизиты совпадают с источником

Тревожный признак

Появляются дубли, пустые ссылки или ошибки в протоколе

Повторный обмен без изменений
Норма

Объект не перезаписывается без необходимости, дублей нет

Тревожный признак

Каждый обмен создаёт новые объекты

Протокол обмена
Норма

Нет ошибок и предупреждений по тестовому объекту

Тревожный признак

Сообщения об ошибках обработчиков или отказах

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

Итог

Что важно запомнить

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

Частые вопросы по отладке правил обмена

Можно ли отладить обмен без конфигурации «Конвертация данных»?

Да, если правила уже выгружены в файл. Универсальная обработка обмена XML работает в любой базе и позволяет включить режим отладки обработчиков. Но для исправления самих правил без «Конвертации данных» придётся править XML правил вручную, что допустимо только для мелких изменений выражений в обработчиках.

Точка останова в файле обработчиков не срабатывает. Что не так?

Чаще всего не включён флаг отладки обработчиков в обработке обмена или указан не тот файл. Также проверьте, что отладка запущена для нужного клиентского или серверного процесса: если обмен выполняется на сервере, в настройках отладки конфигуратора должно быть разрешено подключение к серверным процедурам, а отладка на сервере 1С — включена.

Объект выгружается, но в приёмнике создаётся дубликат при каждом обмене. Где искать?

Проблема в механизме поиска. Проверьте в ПКО настройки поиска: какие поля участвуют, включён ли поиск по внутреннему идентификатору. Убедитесь, что GUID объекта совпадает в обеих базах — если приёмник заполнялся не через этот обмен, идентификаторы различаются, и поиск должен идти по реквизитам.

Как отладить обмен, который выполняется регламентным заданием?

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

Ошибка «Ошибка в обработчике события» без деталей. Как узнать причину?

Полный текст обычно есть в протоколе обмена и журнале регистрации — там указывается имя правила и исходное исключение. Если деталей недостаточно, оберните подозрительный фрагмент обработчика в попытку/исключение с выводом ОписаниеОшибки() в протокол или запустите обмен под отладчиком с остановкой по ошибке.

После изменения правил обмен стал работать медленнее. Это нормально?

Нет, это признак неоптимального кода в обработчиках: чаще всего запросы к базе выполняются внутри цикла по объектам или для каждого свойства заново ищется значение, которое можно закэшировать. Уберите оставшийся отладочный вывод, вынесите повторяющиеся запросы за пределы обработчиков в события «Перед выгрузкой данных» с сохранением в параметры.