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