← На главную
При доработке типовой синхронизации данных между конфигурациями (например, «Комплексная автоматизация» и «Розница») разработчики часто сталкиваются с ситуацией: в конфигурации-источнике добавлен новый справочник, изменены состав плана обмена, правила конвертации и подписки на события. Изменения успешно регистрируются на узле и выгружаются в файл сообщения, однако в базе-приемнике новые элементы не появляются, а связанные реквизиты остаются пустыми. Разберем причины такого поведения платформы и типовых подсистем БСП, а также пошагово устраним проблему.
Причина: как БСП использует правила конвертации на стороне приемника
В типовых конфигурациях на базе Библиотеки стандартных подсистем (БСП) правила обмена хранятся внутри базы данных — в регистре сведений ПравилаДляОбменаДанными. Механизм синхронизации не считывает произвольные файлы с диска во время регламентного обмена, а использует предварительно загруженные и скомпилированные правила.
Для корректного обмена используются два взаимосвязанных набора правил конвертации:
- Правила для текущей базы (ExchangeRules): определяют, как объекты источника преобразуются в формат сообщения обмена при выгрузке.
- Правила корреспондента (CorrespondentExchangeRules): используются базой-приемником для понимания того, как интерпретировать входящие узлы XML и в какие объекты приемника их загружать.
Если изменить правила только в базе-источнике, она выгрузит XML с новыми тегами (например, справочника ЦеновыеГруппы). Но база-приемник, используя свою старую версию правил из регистра, просто проигнорирует неизвестные типы данных или не сможет сопоставить реквизиты ссылающегося объекта (Номенклатура).
Пошаговое решение проблемы
Разберем по шагам, как правильно обновить правила и настроить загрузку нового объекта в базу-приемник.
- Подготовка файла правил корреспондента: в конфигурации «Конвертация данных» 2.x выгрузим обновленный файл правил обмена
ExchangeRules.xml. Для базы-приемника этот же файл выполняет роль правил корреспондента. Переименуем его в CorrespondentExchangeRules.xml.
- Загрузка правил в приемнике: откроем информационную базу-приемник (в нашем случае — «Розница»), перейдем в раздел Администрирование → Синхронизация данных → Настройки синхронизации данных. Откроем параметры нужного узла и выберем пункт загрузки комплекта правил. В диалоге выбора файлов заменим только правила корреспондента новым файлом
CorrespondentExchangeRules.xml. Менять состав плана обмена и подписки в базе-приемнике не требуется, если обратный перенос этих данных не планируется.
- Проверка правил регистрации (ПРО): если новый справочник должен переноситься целиком, независимо от использования в номенклатуре, проверим файл правил регистрации на стороне источника. Справочник должен быть включен в правила регистрации, а в свойствах состава плана обмена для него должно быть установлено свойство
Авторегистрация = Разрешить.
Важные нюансы настройки ПКО и поиска объектов
Если после обновления правил корреспондента данные все еще не загружаются, проанализируем настройки самих правил конвертации объектов (ПКО) в «Конвертации данных»:
- Флаг создания объекта: в ПКО нового справочника обратим внимание на флаг «Не создавать новый объект в приемнике, если он не найден». Если данный флаг активен, а объект сопоставляется впервые, программа не создаст запись, а ссылка в реквизите номенклатуры запишется пустой.
- Поля поиска: убедимся, что для справочника заданы поля поиска (например, признак «Искать объект приемника по внутреннему идентификатору» или флажки поиска по реквизитам
Код / Наименование). Без корректных полей поиска алгоритм загрузки не сможет сопоставить элемент.
- Перенос по ссылке: если справочник не нужно передавать целиком, а требуется переносить только значения, выбранные в товарах, его не обязательно регистрировать в плане обмена. Достаточно оставить ПКО и указать его в правиле конвертации свойства (ПКС) номенклатуры. При выгрузке товара ссылка будет автоматически извлечена и записана в пакет сообщения.
Диагностика процесса обмена
Для контроля загрузки данных используем встроенные инструменты платформы и БСП:
- Журнал регистрации: ошибки синтаксиса в обработчиках событий (
ПриЗагрузке, ПослеЗагрузки) перехватываются подсистемой обмена и фиксируются в журнале регистрации с отбором по событию синхронизации данных.
- Регистр сведений «Соответствия объектов информационных баз»: проверим, создаются ли записи соответствий между идентификаторами источника и ссылками приемника. Если соответствие не установилось, объект может попасть в форму сопоставления данных.
- Права доступа: убедимся, что учетная запись, под которой выполняется фоновое задание синхронизации, обладает правами на чтение и запись добавленного справочника. При нехватке прав запись блокируется без прерывания загрузки всего пакета.