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