При настройке обмена данными между конфигурациями 1С программисты часто сталкиваются с ситуацией, когда объекты регистрируются к обмену не так, как ожидалось, или не регистрируются вовсе. Особенно много вопросов вызывает работа с правилами регистрации (ПР) в инструменте Конвертация данных 2.1 (КД 2.1). Разберем по шагам, как управлять процессом регистрации объектов, почему стандартные настройки в конфигураторе могут конфликтовать с правилами КД и как добиться филигранной точности в отборе данных для обмена, используя в том числе RabbitMQ для передачи объектов по одному.
Рассмотрим ситуацию: в конфигураторе в составе плана обмена для конкретного справочника установлено свойство Авторегистрация — Запретить. Программист создает правила регистрации в КД 2.1, загружает их в базу (поможет подсистема настройки регулярного обмена по правилам конвертации), но элементы справочника при записи всё равно не попадают в таблицу регистрации изменений. Почему так происходит?
Выясним причину. Когда в метаданных стоит жесткий запрет на авторегистрацию, платформа 1С полностью игнорирует стандартные механизмы отслеживания изменений при записи объекта. В этом случае регистрация должна инициироваться программно. Для подготовки описания обмена может пригодиться генератор структуры метаданных объекта. Если ваша конфигурация построена на базе Библиотеки стандартных подсистем (БСП), то именно подсистема обмена данными берет на себя роль диспетчера. Для корректной работы необходимо убедиться в следующем:
ПередЗаписью или ПриЗаписи. Если конфигурация самописная и не использует БСП, загруженные XML-правила сами по себе не «оживут» — нужен программный вызов ПланыОбмена.ЗарегистрироватьИзменения().Часто при попытке зарегистрировать данные вручную через типовую обработку «Регистрация изменений для обмена», пользователь видит в списке выбора только предопределенные элементы. Проанализируем, с чем это может быть связано. Чаще всего это не ошибка правил, а особенность интерфейса или настроек прав:
Разберем типичную ошибку: программист хочет, чтобы справочник перестал регистрироваться, и просто удаляет правило регистрации для него в КД 2.1. Однако после загрузки комплекта правил объект продолжает попадать в обмен. Посмотрим на логику работы системы:
Если в файле правил регистрации отсутствует информация об объекте, но сам объект включен в состав плана обмена в конфигураторе с включенной авторегистрацией, платформа будет регистрировать его по стандартному алгоритму. Отсутствие правила в КД воспринимается системой как «использовать поведение по умолчанию».
Чтобы полностью исключить объект из регистрации, у нас есть два пути:
Это самый надежный способ управления регистрацией без изменения метаданных конфигурации. Проанализируем, где именно нужно писать этот код в интерфейсе Конвертации данных 2.1. Откройте ваше правило регистрации для конкретного объекта и перейдите на закладку «Обработчики событий».
Рассмотрим пример кода в обработчике «Перед обработкой». Этот обработчик выполняется в самом начале, и если мы установим Отказ = Истина здесь, система даже не будет тратить ресурсы на анализ свойств объекта.
// Пример: запрещаем регистрацию для всех элементов
Отказ = Истина;
Если же нам нужно запретить регистрацию только при определенных условиях (например, не регистрировать помеченные на удаление объекты), используем обработчик «При обработке». В нем доступен сам объект через переменную Объект.
// Пример: регистрируем только активные элементы
Если Объект.ПометкаУдаления Тогда
Отказ = Истина;
КонецЕсли;
Важный нюанс: Если вы используете программный отказ, убедитесь, что в настройках правила снят флаг «Выполнить стандартную обработку», если вы хотите полностью переопределить логику БСП.
Чтобы ваши изменения вступили в силу, недостаточно просто сохранить их в КД 2.1. Пройдем по шагам процесс корректного обновления:
Отказ = Истина, он сам не исчезнет из таблицы изменений. Вам нужно зайти в обработку «Регистрация изменений» и вручную удалить ненужные записи. Правила регистрации работают только в момент события (запись, проведение), они не фильтруют уже накопленные изменения ретроспективно.Таким образом, мы видим, что ключом к решению проблем с регистрацией является правильное сочетание настроек в конфигураторе и использование программных обработчиков в КД 2.1. Никогда не удаляйте правила из списка, если хотите запретить регистрацию — всегда используйте явный Отказ.