Разработка и Конфигурация · 12 мин
Как отладить правила обмена в 1С
Практическое руководство по отладке правил обмена 1С: отладчик алгоритмов, обработка УниверсальныйОбменДаннымиXML, типовые ошибки и проверка результата.
Правила обмена данными между конфигурациями 1С создаются в «Конвертации данных 2.1» и применяются при выгрузке и загрузке через обработку «Универсальный обмен данными в формате XML». Ошибки в правилах проявляются по-разному: объекты не переносятся, теряются реквизиты, возникают дубли справочников или обмен прерывается с неинформативным сообщением. Без отладки найти причину бывает сложно, особенно если обработчики написаны на встроенном языке.
Отладка правил обмена — это не одна процедура, а набор приёмов: запуск обмена под отладчиком, подключение внешних обработок с кодом обработчиков, анализ протокола обмена и проверка результата на тестовых данных. Ниже разобраны основные инструменты, порядок действий и типичные ошибки, которые встречаются при сопровождении обменов между базами 1С.
Все действия лучше выполнять на копиях рабочих баз. Загрузка данных с ошибочными правилами может создать дубли контрагентов, номенклатуры или документов, и откатить такие изменения в рабочей базе бывает трудоёмко.
Какие инструменты нужны для отладки правил обмена
Для работы потребуются три вещи. Во-первых, сама конфигурация «Конвертация данных, редакция 2.1» — в ней хранятся и редактируются правила конвертации объектов (ПКО), свойств (ПКС) и обработчики событий. Во-вторых, обработка «Универсальный обмен данными в формате XML» (файл обычно называется УниверсальныйОбменДаннымиXML.epf или входит в состав конфигурации) — именно она выполняет выгрузку и загрузку по правилам. В-третьих, конфигуратор 1С с возможностью запуска отладки по протоколу TCP/IP или HTTP.
Отдельно стоит подготовить тестовые данные: небольшой набор объектов, на которых воспроизводится проблема. Отлаживать правило на полной выгрузке из тысяч документов нерационально — каждый проход будет занимать много времени. Достаточно одного-двух проблемных объектов и одного корректного для сравнения.
Как включить режим отладки обработчиков
Ключевая возможность обработки «Универсальный обмен данными в формате XML» — выгрузка кода обработчиков во внешние файлы и их выполнение как внешних обработок. Без этого код обработчиков выполняется через «Выполнить», и поставить точку останова в нём невозможно.
Порядок включения следующий. Откройте обработку универсального обмена в базе-источнике, на форме выгрузки данных установите флаг «Режим отладки обработчиков» (в некоторых версиях — «Отладка обработчиков выгрузки»). Затем нажмите кнопку формирования модуля отладки — обработка создаст файл с кодом всех обработчиков выгрузки. Укажите этот файл в поле «Имя файла внешней обработки обработчиков событий». Аналогичные действия выполняются в базе-приёмнике для отладки обработчиков загрузки.
- 1Откройте «Универсальный обмен данными в формате XML» в базе-источнике
- 2Установите флаг «Режим отладки обработчиков»
- 3Нажмите кнопку выгрузки модуля отладки и сохраните файл обработчиков
- 4Укажите созданный файл в поле внешней обработки обработчиков
- 5В конфигураторе включите автоматическое подключение внешних обработок к отладке
- 6Поставьте точку останова в коде внешней обработки и запустите выгрузку
Важный нюанс: чтобы конфигуратор останавливался на точках останова внутри внешней обработки, в настройках отладки (Сервис → Параметры → Отладка) должно быть разрешено подключение внешних обработок и отчётов. Также файл обработчиков должен быть открыт в конфигураторе — точки останова ставятся именно в нём.
Как настроить конфигуратор для отладки обмена
Запустите базу в режиме отладки через конфигуратор (Отладка → Начать отладку) или подключитесь к уже запущенному сеансу (Отладка → Подключение). Если обмен выполняется на сервере, а обработка запускается в клиентском сеансе, убедитесь, что отладка на сервере разрешена (параметр сервера 1С «debug»), иначе серверный код не остановится.
Откройте в конфигураторе файл с выгруженными обработчиками и найдите нужный обработчик по имени — например, процедуру «ПКО_Документ_РеализацияТоваровУслуг_ПередВыгрузкой». Поставьте точку останова на первой строке тела процедуры и запустите выгрузку из обработки обмена. При достижении обработчика выполнение остановится, и вы сможете пошагово пройти код, смотреть значения переменных через «Вычислить выражение» (Shift+F9) и табло.
Обратите внимание на предопределённые переменные, доступные в обработчиках: «Источник», «Приемник», «Объект», «ВходящиеДанные», «ИсходящиеДанные», «Отказ», «Значение». Большинство ошибок связано именно с неверным использованием этих переменных — например, обращением к «Приемник» в обработчике, где он ещё не сформирован.
Как читать протокол обмена и находить ошибки
Протокол обмена — первый источник информации ещё до подключения отладчика. В обработке универсального обмена включите вывод протокола с максимальной детализацией: флаги «Вывод в протокол информационных сообщений» и «Вывод в протокол сообщений об ошибках». Файл протокола сохраняется на диск, его удобно открыть и искать по слову «Ошибка».
Типичная запись об ошибке содержит: имя ПКО, позицию в файле обмена, описание объекта и текст исключения. Например, «Ошибка при загрузке данных: {Обработка.УниверсальныйОбменДаннымиXML...}: Ошибка в обработчике события ПередЗагрузкойОбъекта» — дальше указывается, какой именно объект вызвал проблему. По этому описанию вы сразу понимаете, какое правило и какой объект отлаживать.
Если обмен завершается без явных ошибок, но данные не переносятся, проверьте, не срабатывает ли где-то «Отказ = Истина» или условие отбора в правилах. В протоколе при детальном уровне видно, какие объекты выгружены, а какие пропущены. Отсутствие объекта в файле выгрузки означает проблему на стороне источника, наличие в файле, но отсутствие в приёмнике — проблему при загрузке.
Отлаживайте обработчики загрузки в базе-приёмнике
Проверяйте правила выгрузки данных, отборы и обработчики выгрузки
Откройте это ПКО в Конвертации данных и проверьте обработчики
Проверьте правила конвертации свойств и настройки поиска объекта в приёмнике
Типичные ошибки в правилах и обработчиках
Самая частая проблема — дубли объектов в приёмнике. Причина почти всегда в настройках поиска: в ПКО не указаны или неверно указаны поля поиска (например, поиск по наименованию вместо уникального идентификатора или сочетания ИНН+КПП для контрагентов). Проверьте вкладку с полями поиска в ПКО и убедитесь, что комбинация полей действительно уникальна.
Вторая группа ошибок — обращение к несуществующим реквизитам. Если правила писались под одну версию конфигурации, а обмен выполняется на другой, реквизит мог быть переименован или удалён. В отладчике это видно сразу: обращение «Источник.СтарыйРеквизит» вызовет исключение или вернёт неопределённое значение.
Третья группа — ошибки в логике обработчиков: неинициализированные переменные, обращение к «Приемник» в обработчике «ПередВыгрузкой» (где он ещё недоступен), модификация «ИсходящиеДанные» после того, как они уже сформированы. Также часто встречается забытый в коде отладочный «ВызватьИсключение» или «Сообщить», оставленный предыдущим разработчиком.
Как проверить результат после исправления правил
После исправления правила повторите цикл на тестовых данных: выгрузите один-два проблемных объекта, загрузите их в копию приёмника и сравните результат с ожидаемым. Проверяйте не только наличие объекта, но и значения ключевых реквизитов, табличных частей и движений документа, если они переносятся.
Для справочников убедитесь, что повторная загрузка не создаёт дубль — это проверка корректности полей поиска. Для документов проверьте, что проведение (если оно предусмотрено правилами) выполняется без ошибок. Полезно также прогнать обмен в обе стороны, если обмен двусторонний: исправление в одном направлении иногда ломает другое.
Как проверить результат отладки
Объект обновляется, дубль не создаётся
Появляется второй объект с теми же данными
Совпадают с источником по правилам конвертации
Пустые или неверные значения у части реквизитов
Нет строк с ошибками, все объекты загружены
Ошибки обработчиков или пропущенные объекты
Документ проводится без ошибок
Ошибки проведения из-за незаполненных реквизитов
Когда отладчик не нужен: альтернативные приёмы
Не каждая проблема требует запуска отладчика. Если ошибка видна в протоколе с указанием строки и объекта, часто достаточно открыть правило в «Конвертации данных» и исправить очевидную причину — неверное поле поиска, отсутствующее ПКС, некорректное условие отбора в правилах выгрузки данных.
Для быстрой диагностики без изменения правил можно временно добавить в обработчик вывод значений через «Сообщить» — они попадут в окно сообщений и в протокол. Это грубее, чем точки останова, но быстрее, когда нужно проверить одно-два значения. После диагностики такие вставки обязательно удаляйте, иначе протокол будет засорён.
Если обмен работает через планы обмена и типовые правила, а не через универсальную обработку, принцип отладки тот же: типовые правила тоже можно выгрузить, доработать в «Конвертации данных» и зарегистрировать как внешние. Но в этом случае учитывайте, что обновление конфигурации может затребовать повторного сопоставления доработанных правил.
Что важно запомнить
Отладка правил обмена строится на трёх опорах: протокол обмена с детальными сообщениями, режим отладки обработчиков с выгрузкой кода во внешний файл и точки останова в конфигураторе. Работайте на тестовых копиях, локализуйте проблему до конкретного ПКО и объекта, после правок обязательно перевыгружайте модуль отладки и проверяйте результат повторным обменом.
Частые вопросы
Почему точка останова в обработчике не срабатывает?
Чаще всего не выгружен свежий модуль отладки после изменения правил, либо в настройках отладки конфигуратора не разрешено подключение внешних обработок. Также проверьте, что в обработке обмена указан именно тот файл обработчиков, который открыт в конфигураторе, и что сеанс запущен под отладкой.
Можно ли отладить обмен, если он выполняется регламентным заданием?
Да. Нужно подключиться к отладке фонового задания: в конфигураторе откройте «Отладка → Подключение», дождитесь появления фонового задания в списке и подключитесь к нему. Для серверной базы должна быть включена отладка на сервере (параметр debug при запуске службы агента).
Как найти, какое правило выгружает конкретный объект?
Включите детальный протокол выгрузки — в нём для каждого объекта указывается имя ПКО. Альтернатива: откройте файл выгрузки в текстовом виде, найдите объект и посмотрите атрибут правила в его узле XML. В «Конвертации данных» правила можно искать по имени через поиск.
Что делать, если при загрузке создаются дубли контрагентов?
Откройте ПКО контрагента в «Конвертации данных» и проверьте поля поиска. Надёжный вариант — поиск по сочетанию ИНН и КПП, а не по наименованию. Если обмен идёт между разнородными базами, убедитесь, что идентификатор объекта передаётся и используется при поиске. После изменения полей поиска протестируйте повторную загрузку одного контрагента на копии базы.
Можно ли отлаживать правила без Конвертации данных?
Частично. Если правила уже выгружены в файл XML, их можно использовать в обработке универсального обмена и отлаживать обработчики через режим отладки. Но редактировать правила, добавлять ПКС и менять поля поиска удобно только в «Конвертации данных», поэтому для полноценной работы она необходима.
Почему после обновления конфигурации обмен перестал работать?
При обновлении могли измениться имена реквизитов, состав объектов или типовые правила, если обмен типовой. Проверьте протокол на ошибки обращения к реквизитам, сравните состав реквизитов в правилах с актуальной структурой метаданных и при необходимости обновите правила в «Конвертации данных».