Разработка и Конфигурация · 11 мин
Как отлаживать правила обмена 1С
Пошаговая отладка правил обмена 1С (Конвертация данных): отладчик, обработчики ПКО, выгрузка в файлы, типовые ошибки и способы их быстро найти и исправить.
Отладка правил обмена — одна из самых трудоёмких задач при работе с «Конвертацией данных» и типовыми планами обмена 1С. Ошибка может проявляться по-разному: объект не переносится, переносится с пустыми реквизитами, дублируется или падает с невразумительной ошибкой «Ошибка в обработчике события». Без системного подхода поиск причины превращается в хаотичное перебирание правил.
Рабочая методика строится на трёх принципах: воспроизвести проблему на минимальном наборе данных, локализовать этап сбоя (выгрузка, передача, загрузка) и только потом исправлять конкретный обработчик. Ниже разобраны инструменты, порядок действий и типовые ошибки, которые встречаются при отладке правил конвертации объектов (ПКО), свойств (ПКС) и значений (ПКЗ).
Локализация проблемы: где именно ломается обмен
Прежде чем открывать конфигуратор, определите, на каком этапе возникает ошибка. Обмен через правила конвертации состоит из двух независимых половин: выгрузка формирует XML-файл, загрузка его разбирает. Если в файле выгрузки объект уже отсутствует или содержит неверные данные — проблема в правилах выгрузки (ПКО, ПКС, ПВД). Если файл корректен, а в базе-приёмнике объект появляется с ошибками — искать нужно в обработчиках загрузки или в логике поиска существующих объектов.
Практический приём: откройте файл обмена в текстовом редакторе и найдите проблемный объект по наименованию или GUID. Сравните содержимое с тем, что ожидалось. Это занимает минуты и сразу сокращает область поиска вдвое. Заодно проверьте журнал регистрации обеих баз и протокол обмена — часто там есть номер правила и текст исключения.
Как выбрать действие
Подготовка тестового контура и минимального примера
Никогда не отлаживайте правила на рабочих базах с реальным обменом. Создайте копии баз-источника и приёмника, зарегистрируйте к выгрузке один-два проблемных объекта и воспроизведите ошибку на них. Минимальный пример позволяет прогонять обмен десятки раз без риска и без ожидания полной выгрузки.
Убедитесь, что версии правил в тестовом и рабочем контуре совпадают. Частая ситуация: на тесте всё работает, в продакшене — нет, потому что там загружена устаревшая версия правил. Сверьте версию конфигурации «Конвертация данных», из которой выгружались правила, и дату файла правил, подключённого в узле обмена.
Отладка через внешние файлы обработчиков
Основной профессиональный способ отладки — вынос обработчиков во внешние файлы и их пошаговое выполнение в отладчике. В «Конвертации данных 2.1» обработчики собираются в единый модуль, который выгружается в файл через кнопку «Выгрузить обработчики событий» (или через настройку в форме правил обмена). Получаются файлы для выгрузки и для загрузки.
Далее обмен запускается не типовым узлом, а универсальной обработкой «Универсальный обмен данными в формате XML» (поставляется в комплекте конфигурации «Конвертация данных»). В ней на закладке выгрузки или загрузки включается флаг «Отладка обработчиков» и указывается путь к файлу обработчиков. После этого код обработчиков исполняется из внешнего файла, и его можно открыть в конфигураторе через «Файл — Открыть» и поставить точки останова.
Отладка при обмене через типовой план обмена
Если обмен идёт через план обмена (например, «Синхронизация данных» в БСП), правила хранятся в макете или в информационной базе узла. Для отладки выгрузите правила в файл (через настройку синхронизации — «Загрузить правила» / сохранение правил, либо из макета конфигурации), а затем используйте ту же универсальную обработку. Альтернатива — временно указать в узле внешний файл правил с подключёнными отладочными обработчиками, если механизм синхронизации это поддерживает.
Ключевые обработчики и что в них проверять
Большинство дефектов обмена сосредоточено в нескольких событиях. В ПКО это «Перед выгрузкой» (здесь часто стоит Отказ = Истина по условию, из-за чего объект молча пропадает), «При выгрузке» и «После выгрузки». На стороне загрузки критичны «Перед загрузкой» (здесь формируются поля поиска), «При загрузке» и «После загрузки».
В ПКС смотрите «Перед выгрузкой свойства»: именно здесь вычисляется параметр Значение. Пустой реквизит в приёмнике почти всегда означает, что выражение в этом обработчике вернуло Неопределено или обработчик завершился с Отказ. В ПКЗ проверяйте соответствие значений перечислений и предопределённых элементов — несовпадение имён приводит к пустым ссылкам.
Условия в «Перед выгрузкой» ПКО и в ПВД
Выражение в «Перед выгрузкой свойства», ПКЗ для перечислений
Поля поиска ПКО, ГУИД, режим поиска по внутреннему идентификатору
Совпадение имён реквизитов в источнике и приёмнике
Трассировка и логирование без отладчика
Не всегда отладчик доступен — например, обмен выполняется на сервере под пользователем службы или в распределённой инфраструктуре. В этом случае добавьте в проблемные обработчики вывод в протокол обмена или в журнал регистрации. В обработчиках конвертации доступен объект для сообщений, а также можно использовать стандартную запись в журнал регистрации через встроенный язык.
Полезно логировать ключевые значения: представление источника, вычисленное значение свойства, результат поиска в приёмнике. После прогона откройте протокол обмена (в универсальной обработке он выводится автоматически, в типовой синхронизации — через форму «Результаты синхронизации») и найдите свои сообщения. Не забудьте убрать или отключить отладочный вывод после завершения работ — избыточное логирование замедляет обмен и раздувает журнал регистрации.
Типовые ошибки и способы их избежать
Опыт показывает, что большинство проблем отладки связано не со сложностью правил, а с организационными просчётами: правки вносятся не в ту версию правил, обработчики не перевыгружаются после изменения, тестирование идёт на разных данных. Ниже — самые частые ошибки.
Отдельно отметьте ошибку с режимом поиска. Если в ПКО включён поиск по внутреннему идентификатору (GUID) и одновременно поисковые поля настроены неверно, поведение при повторной загрузке становится неочевидным: объект то находится, то создаётся заново. При отладке дублей временно сузьте набор полей поиска до одного гарантированно уникального и проверьте, как ведёт себя загрузка.
Проверка результата после исправления правил
Исправление считается завершённым только после контрольного прогона. Перевыгрузите правила и обработчики, очистите регистрацию изменений в тестовом узле, зарегистрируйте тестовый объект заново и выполните полный цикл: выгрузка — проверка XML — загрузка — сверка объекта в приёмнике.
Как проверить результат
Объект есть, реквизиты заполнены ожидаемыми значениями
Объект отсутствует или свойства пустые
Объект найден или создан один раз, реквизиты совпадают с источником
Появляются дубли, пустые ссылки или ошибки в протоколе
Объект не перезаписывается без необходимости, дублей нет
Каждый обмен создаёт новые объекты
Нет ошибок и предупреждений по тестовому объекту
Сообщения об ошибках обработчиков или отказах
После успешного теста прогоните обмен на расширенном наборе данных, включающем граничные случаи: объект с пустыми реквизитами, помеченный на удаление, объект с незаполненными табличными частями. Только после этого переносите правила в рабочий контур — с обязательной резервной копией приёмника.
Что важно запомнить
Сначала локализуйте этап сбоя по файлу обмена, затем отлаживайте конкретный обработчик через внешние файлы и универсальную обработку XML на минимальном наборе данных. Все правки вносите в «Конвертацию данных», перевыгружайте правила и проверяйте результат полным циклом на копиях баз.
Частые вопросы по отладке правил обмена
Можно ли отладить обмен без конфигурации «Конвертация данных»?
Да, если правила уже выгружены в файл. Универсальная обработка обмена XML работает в любой базе и позволяет включить режим отладки обработчиков. Но для исправления самих правил без «Конвертации данных» придётся править XML правил вручную, что допустимо только для мелких изменений выражений в обработчиках.
Точка останова в файле обработчиков не срабатывает. Что не так?
Чаще всего не включён флаг отладки обработчиков в обработке обмена или указан не тот файл. Также проверьте, что отладка запущена для нужного клиентского или серверного процесса: если обмен выполняется на сервере, в настройках отладки конфигуратора должно быть разрешено подключение к серверным процедурам, а отладка на сервере 1С — включена.
Объект выгружается, но в приёмнике создаётся дубликат при каждом обмене. Где искать?
Проблема в механизме поиска. Проверьте в ПКО настройки поиска: какие поля участвуют, включён ли поиск по внутреннему идентификатору. Убедитесь, что GUID объекта совпадает в обеих базах — если приёмник заполнялся не через этот обмен, идентификаторы различаются, и поиск должен идти по реквизитам.
Как отладить обмен, который выполняется регламентным заданием?
Запустите тот же код вручную в сеансе под своим пользователем: откройте обработку обмена или форму синхронизации и выполните выгрузку интерактивно с включённой отладкой. Если ошибка воспроизводится только в фоне, добавьте в обработчики запись в журнал регистрации и анализируйте лог после выполнения задания.
Ошибка «Ошибка в обработчике события» без деталей. Как узнать причину?
Полный текст обычно есть в протоколе обмена и журнале регистрации — там указывается имя правила и исходное исключение. Если деталей недостаточно, оберните подозрительный фрагмент обработчика в попытку/исключение с выводом ОписаниеОшибки() в протокол или запустите обмен под отладчиком с остановкой по ошибке.
После изменения правил обмен стал работать медленнее. Это нормально?
Нет, это признак неоптимального кода в обработчиках: чаще всего запросы к базе выполняются внутри цикла по объектам или для каждого свойства заново ищется значение, которое можно закэшировать. Уберите оставшийся отладочный вывод, вынесите повторяющиеся запросы за пределы обработчиков в события «Перед выгрузкой данных» с сохранением в параметры.