Как найти и устранить ошибку в правилах обмена данными

· 10 мин

Содержание

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

Отлаживают правила обмена в связке: сначала читают текст ошибки в журнале регистрации, затем включают режим отладки в «Конвертации данных 3.0» и проходят алгоритм выгрузки или загрузки по шагам с точками останова. Ниже — этот маршрут целиком, от первой диагностики до разбора частых ошибок XML.

Начинаем с журнала регистрации и текста ошибки

Первое, что даёт зацепку, — журнал регистрации. Откройте его через Все функции → Стандартные → Журнал регистрации (в режиме предприятия) и отфильтруйте записи:

  • 🔎 по важности — Ошибка и Предупреждение;
  • 🔎 по приложению и пользователю, под которым шла синхронизация;
  • 🔎 по интервалу времени сеанса обмена.

В тексте события обычно виден и тип объекта, и этап: отправка, конвертация XDTO, запись в приёмнике. Фразы вроде «Не найден обработчик», «Тип не определён», «Ошибка при вызове метода контекста» указывают на конкретное место в правилах.

Если обмен файловый или через COM, параллельно формируется файл протокола обмена — текстовый лог выгрузки и загрузки. Путь к нему задаётся в настройках обмена; в протоколе видны все объекты по очереди, и строка обрыва показывает, на каком именно споткнулся механизм.

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

Запишите три факта из журнала: какой объект, на каком этапе (выгрузка или загрузка), какой текст ошибки. С этим уже можно включать отладку правил.

Включаем режим отладки в «Конвертации данных 3.0»

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

Порядок такой:

  1. Откройте в КД 3.0 нужную конвертацию и перейдите к настройкам отладки.
  2. Укажите каталог, куда лягут обработки, и включите отладку отдельно для выгрузки и для загрузки — это две независимые обработки.
  3. КД 3.0 сгенерирует файлы внешних обработок: в их модули перенесён код всех обработчиков правил (ПКО, ПКС, ПОД, общих алгоритмов).
  4. Подключите нужную обработку к сеансу обмена в рабочей базе — путь к ней указывается в настройке синхронизации (поле для внешней обработки отладки выгрузки/загрузки).

После этого реальный обмен будет вызывать не внутренний скомпилированный модуль менеджера, а вашу внешнюю обработку . Именно в неё и ставятся точки останова.

Отладочная обработка подключается к боевому обмену. Делайте это на копии базы или в согласованное окно: лишний прогон синхронизации в рабочей базе двигает данные по узлам. После отладки обязательно снимите подключение обработки.

Как поставить точку останова и поймать объект

Запустите 1С:Предприятие в режиме отладки (в конфигураторе должна быть разрешена отладка по протоколу — HTTP или TCP). Откройте сгенерированную обработку в конфигураторе, найдите процедуру нужного обработчика и поставьте точку останова (F9).

Дальше запустите обмен по проблемному объекту. Когда исполнение остановится, смотрите:

  • 🧩 Табло — значения переменных Источник, Получатель, ПараметрыПередачи;
  • 🧩 Стек вызовов — какой обработчик какого правила вызвал текущий код;
  • 🧩 пошаговый проход F11/F10 по строкам алгоритма.

Так видно, где именно значение теряется или подменяется: до конвертации, в момент заполнения свойства или при записи в приёмнике.

Разбираем ошибки XML и несоответствие структуры

Сообщение обмена — это XML-файл в формате EnterpriseData. Многие сбои проявляются именно на уровне XML, а не кода.

Откройте файл сообщения (каталог обмена или выгруженный вручную файл) и проверьте по симптомам:

Симптом в XMLВероятная причинаЧто проверить
Пустой блок объектаСвойство не заполнилось в ПКСОбработчик «При отправке» свойства
Нет ожидаемого объекта целикомОбъект не зарегистрирован или отсеян отборомПравила регистрации (ПРО)
Тип не найден / неизвестный типВерсия формата приёмника нижеПоддерживаемые версии EnterpriseData
Объект есть, но не загрузилсяОшибка в обработчике загрузки«Перед загрузкой» / «После загрузки»

Частый корень — рассинхрон версий формата EnterpriseData. Источник выгружает в формате версии, которую приёмник не понимает. В настройках синхронизации у обоих узлов видно поддерживаемые версии формата; обмен идёт по наибольшей общей. Если в источнике правила новее, понизьте версию выгрузки или обновите правила в приёмнике.

Второй типовой случай — ссылка на объект, которого в приёмнике нет. В EnterpriseData объекты связываются по natural key (набору ключевых реквизитов) или по GUID. Если ключевые реквизиты в базах заполнены по-разному, приёмник не находит соответствие и либо создаёт дубль, либо падает. Проверяйте правила поиска (ПКО, вкладка полей поиска).

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

XML удобно читать в браузере или редакторе с подсветкой: сразу видно незакрытые теги и структуру. Валидность against XSD-схемы формата проверяется средствами XDTO, но для диагностики хватает визуального сравнения «что ушло» и «что ждали».

Проверяем правила регистрации и условия отбора

Если объект вообще не попадает в выгрузку, виноват не код конвертации, а регистрация. Прежде чем объект конвертируется, он должен быть зарегистрирован к отправке на узел плана обмена.

Проверьте по порядку:

  1. Зарегистрирован ли объект на узле. В правилах регистрации объектов (ПРО) задаются условия, при которых изменение попадает в очередь к отправке. Слишком жёсткое условие отбора молча отсекает нужные документы.
  2. Отбор в самой выгрузке. В настройке синхронизации часто стоит ограничение по организации, дате начала выгрузки, складу. Документ до этой даты просто не выгрузится — это не ошибка правил.
  3. Фактическую регистрацию. Через обработку управления регистрацией изменений (служебная обработка плана обмена) видно, что реально числится к отправке на узел. Если объекта там нет — он не зарегистрирован, и отлаживать конвертацию бессмысленно.

Чтобы заставить объект зарегистрироваться повторно, его перепроводят или регистрируют вручную через ту же служебную обработку. После этого объект снова встаёт в очередь, и его можно ловить отладкой.

Массовая принудительная регистрация «на всякий случай» раздувает очередь обмена и грузит приёмник. Регистрируйте точечно — только проблемный объект и его зависимости.

Условия отбора, которые чаще всего мешают

  • 📌 отбор по организации — документ чужой организации не выгрузится;
  • 📌 дата запрета выгрузки раньше даты документа;
  • 📌 условие в ПРО по статусу, виду операции, признаку проведения;
  • 📌 объект-зависимость (контрагент, номенклатура) не зарегистрирован, поэтому документ-владелец ждёт.

Отладка обработчиков событий конвертации

Самое интересное живёт в обработчиках. В КД 3.0 они расположены в правилах конвертации объектов (ПКО), правилах конвертации свойств (ПКС) и правилах обработки данных (ПОД). Логика выгрузки и загрузки разнесена:

На стороне выгрузки (отправка):

  • Перед отправкой — объект ещё не конвертирован, можно отменить отправку или подготовить данные;
  • При конвертации данных XDTO — заполнение XML-объекта из объекта источника;
  • При отправке свойства (в ПКС) — вычисление конкретного значения.

На стороне загрузки (приёмник):

  • Перед загрузкой — приходит XDTO-объект, можно изменить или пропустить;
  • При конвертации — заполнение объекта приёмника;
  • После загрузки — объект уже записан, здесь довыполняют связанные действия (движения, подчинённые записи).

Отлаживают их так же, как описано выше: точка останова в соответствующей процедуре внешней обработки и пошаговый проход. Типовые находки:

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

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

Если обработчик вызывает общий алгоритм, точку останова ставьте и в алгоритме. В сгенерированной обработке общие алгоритмы лежат отдельными процедурами — стек вызовов покажет, откуда пришли.

Диагностика: выберите симптом

Частые ошибки в правилах обмена и как их устранить

Соберём то, что встречается чаще всего, и быстрый способ проверки.

  • Молчаливый отбор в регистрации. Условие в ПРО кажется безобидным, но отсекает нужные объекты. Лечится проверкой фактической регистрации, а не перечитыванием кода.
  • Разные natural key в базах. Поиск не находит соответствие — дубли или падение загрузки. Приводите ключевые реквизиты к единому виду до обмена.
  • Устаревшие правила после обновления конфигурации. Добавили реквизит, а правила обмена остались старые — свойство не переносится. Правила обновляют вслед за конфигурацией.
  • Ошибка в приведении типов. Строка вместо ссылки, пустая дата, число со строкой. В обработчике свойства возвращается не тот тип, какого ждёт приёмник.
  • Циклическая зависимость объектов. Документ ссылается на объект, который сам ссылается на документ. Порядок выгрузки и обработчик «После загрузки» решают это.

Прежде чем править боевые правила обмена, сохраните текущую версию файла правил. Откат к рабочей версии — самый быстрый способ вернуть синхронизацию, если правка сделала хуже.

Чек-лист отладки правил обмена
Выполнено: 0 / 8

Частые вопросы

Чем отличается отладка выгрузки от отладки загрузки?
Это две разные внешние обработки и два разных набора обработчиков. Выгрузка — на стороне источника (отправка, конвертация в XDTO), загрузка — на стороне приёмника (приём XDTO, запись объекта). Ошибку ищут там, где оборвался обмен по данным журнала.
Можно ли отлаживать правила обмена без «Конвертации данных 3.0»?
Полноценно пройти алгоритм с точками останова — нет, механизм отладки формирует именно КД 3.0. Без неё остаётся анализ журнала регистрации, файла протокола и XML-сообщения, но править и пересобирать правила всё равно нужно в КД 3.0.
Почему объект выгрузился, а в приёмнике его нет?
Чаще всего сработал поиск по ключевым реквизитам и объект «нашёлся» как уже существующий, либо отсеялся обработчиком «Перед загрузкой». Поставьте точку останова на загрузке и посмотрите, по какой ветке уходит объект.
Как понять, что дело в версии формата EnterpriseData?
Признак — ошибки «тип не найден» или пропажа целых блоков данных при live-обмене между базами разных релизов. Сверьте поддерживаемые версии формата у обоих узлов в настройке синхронизации; обмен идёт по наибольшей общей версии.
Нужно ли останавливать работу пользователей на время отладки?
Саму отладку — нет, но подключённая отладочная обработка меняет поведение боевого обмена. Отлаживайте на копии базы, а если только в рабочей — в согласованное окно и обязательно снимайте подключение обработки после.