Правила обмена не срабатывают: как найти и устранить причину
Содержание
Объект не доехал до второй базы, суммы не сошлись или обмен падает с ошибкой конвертации — отлаживают правила обмена в несколько заходов: сначала смотрят настройку узла и регистрацию изменений, потом журнал регистрации, и только затем лезут в сами правила через отладочную обработку. В 1С:Предприятии 8.3 и для «Конвертации данных» (КД) 2.0, и для КД 3.0 есть штатный механизм отладки — обработчики правил можно пройти в конфигураторе по шагам с точками останова.
Порядок ниже одинаков для файлового и клиент-серверного варианта. Разница только в том, где физически лежит внешняя обработка отладки и чьими правами она запускается.
С чего начать: узел, план обмена и параметры синхронизации
Прежде чем винить правила, проверьте, что обмен вообще дошёл до их выполнения. Девять из десяти «правила не работают» — это не правила, а настройка узла.
- Откройте план обмена (в типовых конфигурациях на БСП —
Администрирование → Синхронизация данных, список настроек) и убедитесь, что узел-получатель активен, а не помечен на удаление. - Проверьте префикс базы и префикс узла. Совпадающие префиксы у двух баз приводят к коллизиям кодов и «молчаливой» потере объектов.
- Сверьте, какой именно формат и версию правил использует настройка. КД 2.0 работает через правила в XML-файле, КД 3.0 — через встроенный в конфигурацию модуль менеджера обмена либо подключаемый формат EnterpriseData.
- Посмотрите даты последней успешной выгрузки и загрузки. Если выгрузка идёт, а загрузка стоит — проблема на принимающей стороне, и отлаживать нужно её.
Для синхронизаций на БСП полезен состав отправляемых данных: в карточке настройки есть команда просмотра того, что уйдёт в следующем сеансе. Пусто — значит, объект не зарегистрировался к отправке, и до правил дело не дойдёт.
Если тип обмена — универсальный (обработка «Универсальный обмен данными в формате XML»), проверьте путь к файлу правил и к файлу данных. Устаревший файл правил — классическая причина, когда «вчера работало, сегодня нет».
Что показывает журнал регистрации об ошибках обмена
Журнал регистрации — первый источник правды. Он фиксирует и сам факт обмена, и текст ошибки конвертации.
Откройте Главное меню → Все функции → Журнал регистрации (или Настройки → Журнал регистрации в разделе администрирования). Настройте отбор:
- По событию — «Обмен данными», «Синхронизация данных».
- По важности — «Ошибка» и «Предупреждение».
- По периоду — интервал последнего сеанса обмена.
В тексте события ищите имя правила конвертации объектов (ПКО) или правила выгрузки данных (ПВД) — именно оно подсказывает, какой обработчик смотреть. Сообщения вида «Поле объекта не обнаружено», «Преобразование значения не выполнено», «Ошибка при вызове метода контекста» почти всегда указывают на конкретный обработчик в правилах.
В клиент-серверной базе ошибки фонового задания обмена пишутся под служебным пользователем. Если журнал пуст, снимите отбор по пользователю — иначе события регламентного сеанса не видны.
Отдельно включите у настройки синхронизации опцию подробного протоколирования (запись событий обмена в отдельный файл). Файл протокола читается удобнее журнала и показывает порядок выгрузки объектов.
Отладочная обработка в КД 2.0: как пройти правила по шагам
Главный приём отладки КД 2.0 — сгенерировать внешнюю обработку выгрузки или загрузки и пройти её в конфигураторе с точками останова. Без этого вы смотрите на правила «снаружи» и только гадаете.
Порядок такой:
- В конфигурации «Конвертация данных » откройте нужные правила обмена.
- В настройках выгрузки/загрузки включите режим отладки алгоритмов и укажите путь, по которому будет сохранена внешняя обработка (обработка выгрузки — для источника, обработка загрузки — для приёмника).
- Сохраните. КД встроит код всех обработчиков (ПередВыгрузкой, ПриВыгрузке, алгоритмы, глобальные обработчики) прямо в модуль этой обработки.
- Откройте полученную внешнюю обработку в конфигураторе той базы, где идёт выгрузка (или загрузка).
- Поставьте точки останова в нужных процедурах-обработчиках и запустите 1С:Предприятие в режиме отладки.
- Запустите обмен штатной обработкой «Универсальный обмен данными в формате XML», подключив к ней эту же внешнюю обработку как отладочную.
Дальше отладка ничем не отличается от обычной: F11 — шаг с заходом в процедуру, F10 — шаг с обходом, в окне «Выражение» (Shift+F9) смотрите значения Источник, Приемник, НоваяСтрока, параметры обработчика.
Если нужно просто понять, доходит ли выполнение до обработчика, не поднимая отладчик, вставьте в алгоритм временную строку Сообщить(...). После проверки уберите её — лишние сообщения замедляют массовую выгрузку.
Помните: отладочная обработка — это слепок правил на момент выгрузки. Поменяли правила в КД — перегенерируйте обработку заново, иначе отлаживаете старую версию.
Отладка правил конвертации в КД 3.0
В КД 3.0 правила хранятся не в XML, а в модуле менеджера обмена конфигурации (или в подключаемом модуле формата). Логика та же — внешняя обработка отладки, — но включается она иначе.
- В конфигурации «Конвертация данных 3.0» для вашего формата обмена есть команда формирования внешней обработки с правилами конвертации. Она собирает все обработчики (ПередКонвертацией, ПриКонвертации, ПослеЗагрузки, обработчики свойств) в один модуль.
- В настройке синхронизации принимающей или передающей базы укажите эту внешнюю обработку как отладочную — в типовых конфигурациях на БСП для этого есть служебная возможность подключить обработку отладки правил.
- Откройте обработку в конфигураторе, поставьте точки останова в обработчиках конкретного правила конвертации объекта (ПКО) и запустите сеанс в режиме отладки.
Ключевые объекты, на которые смотрят при отладке КД 3.0:
ДанныеИзмененияи структура данных объекта-источника — что реально пришло в обработчик.ПараметрыОбъекта,КомпонентыОбмена— контекст конвертации.- Коллекция конвертируемых свойств — видно, какое свойство не нашло соответствия.
Внешняя обработка отладки подключается с правами текущего пользователя. Для клиент-серверной базы запускайте отладку под пользователем с полными правами, иначе часть объектов «не найдётся» из-за RLS, а вы спишете это на правила.
Для проверки одного конкретного правила удобнее выгрузить один объект, а не всю базу: в универсальном обмене задайте отбор по ссылке или по дате. Отлаживать правило на тысяче объектов — терять часы.
Сопоставление полей источника и приёмника
Половина «неправильных» выгрузок — это несошедшееся сопоставление: поле есть и там и там, а значение не переносится, потому что правило конвертации свойств (ПКС) смотрит не туда.
Сверяйте пары «поле источника → поле приёмника» прямо по правилам. Типовые места, где ломается:
Чаще всего проблема в трёх точках:
- Поиск объекта. ПКО ищет существующий объект по полям поиска. Если поле поиска заполнено в источнике, но пусто в приёмнике, создаётся дубль. Проверяйте поля поиска в первую очередь.
- Перечисления. Значения перечислений в двух конфигурациях разные. Для них нужны правила конвертации предопределённых данных (ПКПД) — без них значение «теряется».
- Составные типы. Если реквизит источника хранит несколько типов, а в приёмнике тип один, лишние типы молча отсекаются.
Почему объект не выгружается: разбор регистрации изменений
Если объект изменили, а в выгрузку он не попал — дело не в правилах конвертации, а в регистрации изменений. Обмен выгружает только то, что зарегистрировано к отправке для данного узла.
Проверьте по шагам:
- Входит ли объект в состав плана обмена. В конфигураторе откройте план обмена и посмотрите состав — если справочника или документа в составе нет, изменения по нему не регистрируются в принципе.
- Есть ли регистрация для нужного узла. Для синхронизаций на БСП в карточке настройки есть просмотр состава данных к отправке. Объекта там нет — значит, он не зарегистрирован.
- Не «съела» ли регистрацию предыдущая выгрузка. После успешной выгрузки регистрация по узлу снимается. Повторно объект уйдёт, только если его снова изменить или зарегистрировать принудительно.
Зарегистрировать объект заново можно штатно — командой регистрации изменений в составе данных настройки (выбрать объект → добавить к отправке). Для РИБ и универсальных обменов используют обработку «Управление распределённой информационной базой» или «Регистрация изменений для обмена».
Массовая принудительная регистрации всего справочника — это полная повторная выгрузка. На больших объёмах она создаёт длинный сеанс и нагружает обе базы. Делайте выборочно, по конкретным объектам.
Отдельно проверьте номер отправленного и принятого сообщения у узла. Рассинхрон номеров (приёмник «ушёл вперёд» или «отстал») приводит к тому, что сообщение либо игнорируется, либо применяется повторно.
Как прочитать само сообщение обмена
Когда непонятно, на чьей стороне теряется объект — на выгрузке или на загрузке, — смотрят сам файл сообщения. Это быстрее любой отладки: если объекта нет в выгруженном XML, проблема на источнике и правила приёмника отлаживать бессмысленно.
Для файлового и универсального обмена файл сообщения лежит в каталоге обмена (путь указан в настройке). Откройте его любым просмотрщиком XML и найдите по имени объекта или по коду. Что искать:
- Объект есть в файле, но не загрузился — проблема на приёмнике: правило конвертации, поля поиска или проведение. Отлаживайте загрузку.
- Объекта в файле нет — проблема на источнике: регистрация изменений или правило выгрузки данных (ПВД) с жёстким отбором. Отлаживайте выгрузку.
- Объект есть, но реквизит пустой — не сработало правило конвертации свойств. Смотрите конкретный ПКС.
Для синхронизаций на БСП файл сообщения служебный и чаще зашифрован/упакован, читать его напрямую не всегда получится. Там опирайтесь на состав данных к отправке и протокол синхронизации, а сверку файлом применяйте к универсальным обменам и РИБ.
Этот приём экономит самое дорогое — вы сразу знаете, какую из двух баз поднимать в отладчик, и не тратите час на правила той стороны, где всё в порядке.
Частые ошибки правил обмена и как их устранить
Ниже — сбои, которые повторяются из базы в базу. Симптом в журнале — и что с ним делать.
Общее правило: сначала локализуйте слой (узел → регистрация → журнал → правила), и только потом правьте. Правка правил без локализации — самый долгий путь.
Частые вопросы
Чем отладка КД 2.0 отличается от КД 3.0?
Можно ли отладить правила без «Конвертации данных»?
Сообщить() в обработчиках помогают локализовать место. Но полноценная пошаговая отладка с просмотром переменных возможна только через внешнюю обработку, которую генерирует КД.