Как найти и устранить ошибку в правилах обмена данными
Содержание
Объект не доехал из одной базы в другую, в приёмнике задвоились контрагенты, а синхронизация завершается с красной строкой в журнале — почти всегда корень в правилах обмена: регистрация, конвертация или обработчик события отработали не так, как задумано. Разберём, как локализовать сбой правил обмена данными в 1С и починить его, не гадая по симптомам.
Отлаживают правила обмена в связке: сначала читают текст ошибки в журнале регистрации, затем включают режим отладки в «Конвертации данных 3.0» и проходят алгоритм выгрузки или загрузки по шагам с точками останова. Ниже — этот маршрут целиком, от первой диагностики до разбора частых ошибок XML.
Начинаем с журнала регистрации и текста ошибки
Первое, что даёт зацепку, — журнал регистрации. Откройте его через Все функции → Стандартные → Журнал регистрации (в режиме предприятия) и отфильтруйте записи:
- 🔎 по важности —
ОшибкаиПредупреждение; - 🔎 по приложению и пользователю, под которым шла синхронизация;
- 🔎 по интервалу времени сеанса обмена.
В тексте события обычно виден и тип объекта, и этап: отправка, конвертация XDTO, запись в приёмнике. Фразы вроде «Не найден обработчик», «Тип не определён», «Ошибка при вызове метода контекста» указывают на конкретное место в правилах.
Если обмен файловый или через COM, параллельно формируется файл протокола обмена — текстовый лог выгрузки и загрузки. Путь к нему задаётся в настройках обмена; в протоколе видны все объекты по очереди, и строка обрыва показывает, на каком именно споткнулся механизм.
Не отлаживайте «вслепую». Сначала добейтесь воспроизводимости: один документ, который стабильно не выгружается или даёт ошибку. На нём всё видно, на массовой выгрузке — нет.
Запишите три факта из журнала: какой объект, на каком этапе (выгрузка или загрузка), какой текст ошибки. С этим уже можно включать отладку правил.
Включаем режим отладки в «Конвертации данных 3.0»
Правила обмена в формате EnterpriseData разрабатываются в конфигурации «1С:Конвертация данных , редакция 3.0» (КД 3.0). В ней же встроен механизм отладки — он формирует внешние обработки, в которых ваш код обработчиков можно пройти с точками останова.
Порядок такой:
- Откройте в КД 3.0 нужную конвертацию и перейдите к настройкам отладки.
- Укажите каталог, куда лягут обработки, и включите отладку отдельно для выгрузки и для загрузки — это две независимые обработки.
- КД 3.0 сгенерирует файлы внешних обработок: в их модули перенесён код всех обработчиков правил (ПКО, ПКС, ПОД, общих алгоритмов).
- Подключите нужную обработку к сеансу обмена в рабочей базе — путь к ней указывается в настройке синхронизации (поле для внешней обработки отладки выгрузки/загрузки).
После этого реальный обмен будет вызывать не внутренний скомпилированный модуль менеджера, а вашу внешнюю обработку . Именно в неё и ставятся точки останова.
Отладочная обработка подключается к боевому обмену. Делайте это на копии базы или в согласованное окно: лишний прогон синхронизации в рабочей базе двигает данные по узлам. После отладки обязательно снимите подключение обработки.
Как поставить точку останова и поймать объект
Запустите 1С:Предприятие в режиме отладки (в конфигураторе должна быть разрешена отладка по протоколу — HTTP или TCP). Откройте сгенерированную обработку в конфигураторе, найдите процедуру нужного обработчика и поставьте точку останова (F9).
Дальше запустите обмен по проблемному объекту. Когда исполнение остановится, смотрите:
- 🧩
Табло— значения переменныхИсточник,Получатель,ПараметрыПередачи; - 🧩
Стек вызовов— какой обработчик какого правила вызвал текущий код; - 🧩 пошаговый проход
F11/F10по строкам алгоритма.
Так видно, где именно значение теряется или подменяется: до конвертации, в момент заполнения свойства или при записи в приёмнике.
Разбираем ошибки XML и несоответствие структуры
Сообщение обмена — это XML-файл в формате EnterpriseData. Многие сбои проявляются именно на уровне XML, а не кода.
Откройте файл сообщения (каталог обмена или выгруженный вручную файл) и проверьте по симптомам:
| Симптом в XML | Вероятная причина | Что проверить |
|---|---|---|
| Пустой блок объекта | Свойство не заполнилось в ПКС | Обработчик «При отправке» свойства |
| Нет ожидаемого объекта целиком | Объект не зарегистрирован или отсеян отбором | Правила регистрации (ПРО) |
| Тип не найден / неизвестный тип | Версия формата приёмника ниже | Поддерживаемые версии EnterpriseData |
| Объект есть, но не загрузился | Ошибка в обработчике загрузки | «Перед загрузкой» / «После загрузки» |
Частый корень — рассинхрон версий формата EnterpriseData. Источник выгружает в формате версии, которую приёмник не понимает. В настройках синхронизации у обоих узлов видно поддерживаемые версии формата; обмен идёт по наибольшей общей. Если в источнике правила новее, понизьте версию выгрузки или обновите правила в приёмнике.
Второй типовой случай — ссылка на объект, которого в приёмнике нет. В EnterpriseData объекты связываются по natural key (набору ключевых реквизитов) или по GUID. Если ключевые реквизиты в базах заполнены по-разному, приёмник не находит соответствие и либо создаёт дубль, либо падает. Проверяйте правила поиска (ПКО, вкладка полей поиска).
Полезно сравнить XML-сообщения источника и приёмника за один сеанс. В выгруженном файле каждый объект — отдельный блок с перечнем свойств; если нужное свойство в блоке пустое или отсутствует, вопрос не к загрузке, а к выгрузке — конкретно к обработчику свойства в ПКС. Если же свойство в XML заполнено, а в приёмнике объект записался без него, разбирайте обработчик загрузки. Такое разделение экономит время: сразу ясно, на чьей стороне правила ошиблись.
XML удобно читать в браузере или редакторе с подсветкой: сразу видно незакрытые теги и структуру. Валидность against XSD-схемы формата проверяется средствами XDTO, но для диагностики хватает визуального сравнения «что ушло» и «что ждали».
Проверяем правила регистрации и условия отбора
Если объект вообще не попадает в выгрузку, виноват не код конвертации, а регистрация. Прежде чем объект конвертируется, он должен быть зарегистрирован к отправке на узел плана обмена.
Проверьте по порядку:
- Зарегистрирован ли объект на узле. В правилах регистрации объектов (ПРО) задаются условия, при которых изменение попадает в очередь к отправке. Слишком жёсткое условие отбора молча отсекает нужные документы.
- Отбор в самой выгрузке. В настройке синхронизации часто стоит ограничение по организации, дате начала выгрузки, складу. Документ до этой даты просто не выгрузится — это не ошибка правил.
- Фактическую регистрацию. Через обработку управления регистрацией изменений (служебная обработка плана обмена) видно, что реально числится к отправке на узел. Если объекта там нет — он не зарегистрирован, и отлаживать конвертацию бессмысленно.
Чтобы заставить объект зарегистрироваться повторно, его перепроводят или регистрируют вручную через ту же служебную обработку. После этого объект снова встаёт в очередь, и его можно ловить отладкой.
Массовая принудительная регистрация «на всякий случай» раздувает очередь обмена и грузит приёмник. Регистрируйте точечно — только проблемный объект и его зависимости.
Условия отбора, которые чаще всего мешают
- 📌 отбор по организации — документ чужой организации не выгрузится;
- 📌 дата запрета выгрузки раньше даты документа;
- 📌 условие в ПРО по статусу, виду операции, признаку проведения;
- 📌 объект-зависимость (контрагент, номенклатура) не зарегистрирован, поэтому документ-владелец ждёт.
Отладка обработчиков событий конвертации
Самое интересное живёт в обработчиках. В КД 3.0 они расположены в правилах конвертации объектов (ПКО), правилах конвертации свойств (ПКС) и правилах обработки данных (ПОД). Логика выгрузки и загрузки разнесена:
На стороне выгрузки (отправка):
Перед отправкой— объект ещё не конвертирован, можно отменить отправку или подготовить данные;При конвертации данных XDTO— заполнение XML-объекта из объекта источника;При отправкесвойства (в ПКС) — вычисление конкретного значения.
На стороне загрузки (приёмник):
Перед загрузкой— приходит XDTO-объект, можно изменить или пропустить;При конвертации— заполнение объекта приёмника;После загрузки— объект уже записан, здесь довыполняют связанные действия (движения, подчинённые записи).
Отлаживают их так же, как описано выше: точка останова в соответствующей процедуре внешней обработки и пошаговый проход. Типовые находки:
- в
При отправкесвойства возвращается не то значение — проверьте источник данных и преобразование; - в
Перед загрузкойобъект отсеивается условием, которое автор считал безопасным; - в
После загрузкипадает код движений, потому что объект-ссылка ещё не загрузился в этом же сеансе.
Отдельно держите в голове порядок загрузки объектов. Приёмник записывает пришедшие объекты в той последовательности, в какой они лежат в сообщении, а зависимости (контрагент, номенклатура, договор) должны прийти раньше документа-владельца. Если документ ссылается на ещё не загруженный объект, ссылка временно остаётся «пустой» и достраивается позже — а код в обработчике «После загрузки», который рассчитывает на уже готовую ссылку, в этот момент падает или считает неверно. Поэтому движения и связанные записи безопаснее формировать не сразу, а на завершающем этапе загрузки.
Если обработчик вызывает общий алгоритм, точку останова ставьте и в алгоритме. В сгенерированной обработке общие алгоритмы лежат отдельными процедурами — стек вызовов покажет, откуда пришли.
Частые ошибки в правилах обмена и как их устранить
Соберём то, что встречается чаще всего, и быстрый способ проверки.
- Молчаливый отбор в регистрации. Условие в ПРО кажется безобидным, но отсекает нужные объекты. Лечится проверкой фактической регистрации, а не перечитыванием кода.
- Разные natural key в базах. Поиск не находит соответствие — дубли или падение загрузки. Приводите ключевые реквизиты к единому виду до обмена.
- Устаревшие правила после обновления конфигурации. Добавили реквизит, а правила обмена остались старые — свойство не переносится. Правила обновляют вслед за конфигурацией.
- Ошибка в приведении типов. Строка вместо ссылки, пустая дата, число со строкой. В обработчике свойства возвращается не тот тип, какого ждёт приёмник.
- Циклическая зависимость объектов. Документ ссылается на объект, который сам ссылается на документ. Порядок выгрузки и обработчик «После загрузки» решают это.
Прежде чем править боевые правила обмена, сохраните текущую версию файла правил. Откат к рабочей версии — самый быстрый способ вернуть синхронизацию, если правка сделала хуже.