Правила обмена не срабатывают: как найти и устранить причину

· 9 мин

Содержание

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

Порядок ниже одинаков для файлового и клиент-серверного варианта. Разница только в том, где физически лежит внешняя обработка отладки и чьими правами она запускается.

С чего начать: узел, план обмена и параметры синхронизации

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

  • Откройте план обмена (в типовых конфигурациях на БСП — Администрирование → Синхронизация данных, список настроек) и убедитесь, что узел-получатель активен, а не помечен на удаление.
  • Проверьте префикс базы и префикс узла. Совпадающие префиксы у двух баз приводят к коллизиям кодов и «молчаливой» потере объектов.
  • Сверьте, какой именно формат и версию правил использует настройка. КД 2.0 работает через правила в XML-файле, КД 3.0 — через встроенный в конфигурацию модуль менеджера обмена либо подключаемый формат EnterpriseData.
  • Посмотрите даты последней успешной выгрузки и загрузки. Если выгрузка идёт, а загрузка стоит — проблема на принимающей стороне, и отлаживать нужно её.

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

Если тип обмена — универсальный (обработка «Универсальный обмен данными в формате XML»), проверьте путь к файлу правил и к файлу данных. Устаревший файл правил — классическая причина, когда «вчера работало, сегодня нет».

Что показывает журнал регистрации об ошибках обмена

Журнал регистрации — первый источник правды. Он фиксирует и сам факт обмена, и текст ошибки конвертации.

Откройте Главное меню → Все функции → Журнал регистрации (или Настройки → Журнал регистрации в разделе администрирования). Настройте отбор:

  1. По событию — «Обмен данными», «Синхронизация данных».
  2. По важности — «Ошибка» и «Предупреждение».
  3. По периоду — интервал последнего сеанса обмена.

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

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

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

Отладочная обработка в КД 2.0: как пройти правила по шагам

Главный приём отладки КД 2.0 — сгенерировать внешнюю обработку выгрузки или загрузки и пройти её в конфигураторе с точками останова. Без этого вы смотрите на правила «снаружи» и только гадаете.

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

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

Дальше отладка ничем не отличается от обычной: F11 — шаг с заходом в процедуру, F10 — шаг с обходом, в окне «Выражение» (Shift+F9) смотрите значения Источник, Приемник, НоваяСтрока, параметры обработчика.

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

Помните: отладочная обработка — это слепок правил на момент выгрузки. Поменяли правила в КД — перегенерируйте обработку заново, иначе отлаживаете старую версию.

Отладка правил конвертации в КД 3.0

В КД 3.0 правила хранятся не в XML, а в модуле менеджера обмена конфигурации (или в подключаемом модуле формата). Логика та же — внешняя обработка отладки, — но включается она иначе.

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

Ключевые объекты, на которые смотрят при отладке КД 3.0:

  • ДанныеИзменения и структура данных объекта-источника — что реально пришло в обработчик.
  • ПараметрыОбъекта, КомпонентыОбмена — контекст конвертации.
  • Коллекция конвертируемых свойств — видно, какое свойство не нашло соответствия.

Внешняя обработка отладки подключается с правами текущего пользователя. Для клиент-серверной базы запускайте отладку под пользователем с полными правами, иначе часть объектов «не найдётся» из-за RLS, а вы спишете это на правила.

Для проверки одного конкретного правила удобнее выгрузить один объект, а не всю базу: в универсальном обмене задайте отбор по ссылке или по дате. Отлаживать правило на тысяче объектов — терять часы.

Сопоставление полей источника и приёмника

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

Сверяйте пары «поле источника → поле приёмника» прямо по правилам. Типовые места, где ломается:

Сопоставление полей
Реквизит источника→Реквизит приёмника
Элемент справочника→Поиск по коду/наименованию
Перечисление (значение)→Перечисление приёмника (может не совпасть)
Составной тип (несколько типов)→Один тип в приёмнике
Пустая ссылка→Создание объекта по умолчанию

Чаще всего проблема в трёх точках:

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

Почему объект не выгружается: разбор регистрации изменений

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

Проверьте по шагам:

  1. Входит ли объект в состав плана обмена. В конфигураторе откройте план обмена и посмотрите состав — если справочника или документа в составе нет, изменения по нему не регистрируются в принципе.
  2. Есть ли регистрация для нужного узла. Для синхронизаций на БСП в карточке настройки есть просмотр состава данных к отправке. Объекта там нет — значит, он не зарегистрирован.
  3. Не «съела» ли регистрацию предыдущая выгрузка. После успешной выгрузки регистрация по узлу снимается. Повторно объект уйдёт, только если его снова изменить или зарегистрировать принудительно.

Зарегистрировать объект заново можно штатно — командой регистрации изменений в составе данных настройки (выбрать объект → добавить к отправке). Для РИБ и универсальных обменов используют обработку «Управление распределённой информационной базой» или «Регистрация изменений для обмена».

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

Отдельно проверьте номер отправленного и принятого сообщения у узла. Рассинхрон номеров (приёмник «ушёл вперёд» или «отстал») приводит к тому, что сообщение либо игнорируется, либо применяется повторно.

Что проверить, если объект не доехал
Выполнено: 0 / 6

Как прочитать само сообщение обмена

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

Для файлового и универсального обмена файл сообщения лежит в каталоге обмена (путь указан в настройке). Откройте его любым просмотрщиком XML и найдите по имени объекта или по коду. Что искать:

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

Для синхронизаций на БСП файл сообщения служебный и чаще зашифрован/упакован, читать его напрямую не всегда получится. Там опирайтесь на состав данных к отправке и протокол синхронизации, а сверку файлом применяйте к универсальным обменам и РИБ.

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

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

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

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

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

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

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