При работе с механизмом синхронизации данных в современных конфигурациях 1С (на базе Библиотеки стандартных подсистем — БСП) часто возникает ситуация: разработчик добавляет новый объект в правила обмена (КД 2.0), регистрирует его на узле плана обмена, но при запуске синхронизации документ упорно игнорируется. Ошибок в журнале регистрации нет, другие документы успешно переносятся, а новый — нет. Разберем подробно, почему так происходит и как устроена внутренняя логика распределения правил между базами.
Для начала проанализируем, как 1С понимает, какие объекты и по каким правилам нужно выгружать. В типовых конфигурациях обмен происходит не просто по одному файлу, а по комплекту правил. Рассмотрим основные компоненты этого комплекта:
Разберем ситуацию, описанную в теме: разработчик обновил правила в базе-приемнике и запустил обмен оттуда («тянет» данные из источника). Однако документ не выгрузился. Выясним причину: при «подтягивании» данных (Pull-модель) база-приемник подключается к источнику. Если в самом источнике в это время хранятся старые правила, которые «не знают» о новом документе, то источник просто не включит этот объект в пакет данных, даже если он зарегистрирован на узле.
Рассмотрим подробнее, как направление инициации обмена влияет на выбор файла правил:
ExchangeRules.xml, считывает зарегистрированные изменения и выталкивает их в Базу Б.Посмотрим на важный нюанс, который часто путает разработчиков: в интерфейсе настройки синхронизации ExchangeRules в приемнике — это фактически CorrespondentExchangeRules для источника. Если вы обновили правила только в одной базе и не обеспечили их репликацию на вторую сторону, механизм обмена будет работать на старых алгоритмах.
Выполним последовательность действий, которая гарантирует корректное обновление правил для обеих сторон обмена:
Шаг 1: Подготовка правил в Конвертации данных 2.0.
Убедимся, что в конфигурации «Конвертация данных» для нового документа созданы:
ПКО (Правило конвертации объектов).ПВД (Правило выгрузки данных) со стандартным способом выборки.ПКС (Правила конвертации свойств).Шаг 2: Выгрузка и загрузка в базу.
Сохраняем правила в файл. Переходим в базу, где настраивается синхронизация. Заходим в Администрирование — Синхронизация данных — Настройки синхронизации. Выбираем нужный узел и нажимаем Параметры синхронизации данных — Загрузить правила.
Шаг 3: Синхронизация правил с корреспондентом.
Это критический момент. Проанализируем состояние переключателей. Если обмен идет через прямое подключение, программа предложит «Записать правила в информационную базу корреспондента». Обязательно соглашаемся. Если обмен идет через файлы или FTP, необходимо зайти в базу-источник и вручную загрузить тот же файл правил в аналогичном меню. Только после того, как обе базы будут обладать идентичными правилами, новый объект сможет корректно пройти через сито выгрузки.
Если после обновления правил документ все равно не выгружается, проанализируем RegistrationRules.xml. Даже если объект зарегистрирован на узле (вы видите его в мониторе регистрации), механизм БСП при фактической генерации XML-файла может повторно проверять правила регистрации.
Если в RegistrationRules.xml отсутствует описание для нового документа или стоят жесткие фильтры (например, по реквизиту Проведен), документ будет отсеян в последний момент. Проверим код в обработчиках правил регистрации:
// Пример типичного фильтра в правилах регистрации
Если Объект.Дата < ДатаНачалаВыгрузки Тогда
Отказ = Истина;
КонецЕсли;
Выясним причину отсутствия документа через регистрацию: если вы добавили документ в состав Плана обмена в конфигураторе, но не обновили RegistrationRules, система может работать нестабильно. Рекомендуется всегда обновлять весь комплект (Конвертация + Регистрация) одновременно.
Рассмотрим ситуацию, когда синхронизация проходит без ошибок, но данных в файле нет. Чтобы понять, «виноваты» ли правила или сам механизм синхронизации, воспользуемся проверенным инструментом — обработкой «Универсальный обмен данными в формате XML».
Выполним следующие действия для диагностики:
В отличие от фонового задания синхронизации, эта обработка выведет все ошибки в окно сообщений. Если документ не выгрузится и здесь, мы увидим конкретную причину, например: «Ошибка в обработчике события ПередВыгрузкой (ПВД)» или «Не найдено ПКО для объекта».
Проанализируем специфику кадровых документов. Документ ВозвратИзОтпускаПоУходуЗаРебенком часто требует наличия ссылки на основной документ ОтпускПоУходуЗаРебенком. Если в правилах конвертации (ПКО) для основного отпуска не настроен поиск по уникальному идентификатору или полям поиска (Номер + Дата), то при загрузке «Возврата» система не сможет сопоставить родительский документ. В результате объект может создаться «битым» или не создаться вовсе из-за нарушения логики кадрового учета в приемнике.
Подведем итог: главная причина проблем при добавлении новых объектов в существующий обмен — это рассинхронизация правил между базой-инициатором и базой-корреспондентом. Всегда проверяйте наличие актуальных ExchangeRules на обеих сторонах и не забывайте про правила регистрации.