Как запретить передачу определенных документов из центрального узла РИБ в подчиненный в 1С:Бухгалтерия 3.0?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

При работе с распределенными информационными базами (РИБ) в конфигурации 1С:Бухгалтерия предприятия 3.0 нередко возникает задача односторонней синхронизации. Например, требуется, чтобы кассовые документы (приходные и расходные кассовые ордера), созданные в подчиненном узле, поступали в центральную базу, но документы, заведенные в центре, не попадали в периферийную базу.

В платформе 1С:Предприятие 7.7 для этого использовалось простое свойство миграции «место создания и центр». В современных конфигурациях на базе Библиотеки стандартных подсистем (БСП) механизм распределения данных устроен иначе. Разберем по шагам, как правильно реализовать такое ограничение и избежать типичных ошибок целостности данных.

Архитектура обмена данными в БСП и правила регистрации

В типовой конфигурации 1С:Бухгалтерия предприятия 3.0 регистрацией изменений для планов обмена управляют Правила регистрации объектов (ПРО). Они создаются и редактируются в конфигурации Конвертация данных 2.1 (КД 2.1).

Поскольку правила регистрации в РИБ передаются вместе с конфигурацией и являются общими для всех узлов, нельзя просто отключить регистрацию объекта целиком. Нам необходимо программно определять, в каком именно узле (центральном или подчиненном) происходит запись объекта.

Определение роли текущего узла в правилах регистрации

Проанализируем ситуацию: чтобы документ регистрировался в подчиненной базе, но игнорировался в центральной, в обработчиках правил регистрации объектов необходимо проверить наличие главного узла. Если главный узел не определен — текущая база является центральной.

Рассмотрим пример кода в обработчике события ПриОбработке или ПередОбработкой для правила регистрации документа (например, Документ.ПриходныйКассовыйОрдер):


Если ПланыОбмена.ГлавныйУзел() = Неопределено Тогда
    // Мы находимся в центральном узле, отменяем регистрацию для подчиненных баз
    Отказ = Истина;
КонецЕсли;

Когда данный код выполняется в периферийной базе, функция ПланыОбмена.ГлавныйУзел() вернет ссылку на узел центральной базы, условие не выполнится, и документ успешно встанет в очередь на выгрузку в центр.

Обязательная фильтрация связанных регистров

Наиболее частая ошибка при ограничении миграции документов — блокировка только самого объекта документа без учета его движений. Если отменить регистрацию документа, но оставить регистрацию наборов записей регистров бухгалтерии и накопления, в подчиненный узел придут проводки с пустой или «битой» ссылкой в поле Регистратор (появится надпись вида «Объект не найден»).

Чтобы исключить появление некорректных движений, разберем по шагам настройку правил регистрации для регистров:

  1. В Конвертации данных 2.1 найдем правила регистрации для регистров, по которым делает движения исключаемый документ (например, РегистрБухгалтерии.Хозрасчетный, регистры накопления по УСН, НДС и т.д.).
  2. В обработчике события правила регистрации набора записей регистра добавим проверку типа регистратора и узла базы:

Если ПланыОбмена.ГлавныйУзел() = Неопределено Тогда
    Если Объект.Отбор.Регистратор.Использование Тогда
        ТипРегистратора = ТипЗнч(Объект.Отбор.Регистратор.Значение);
        
        Если ТипРегистратора = Тип("ДокументСсылка.ПриходныйКассовыйОрдер")
            Или ТипРегистратора = Тип("ДокументСсылка.РасходныйКассовыйОрдер") Тогда
            Отказ = Истина;
        КонецЕсли;
    КонецЕсли;
КонецЕсли;

Способы загрузки обновленных правил в базу

После выгрузки измененных правил регистрации из КД 2.1 в файл формата .xml, применим их к рабочей базе. Существует два основных способа:

  1. Через макет конфигурации: обновить XML-макет правил регистрации в свойствах плана обмена в дереве метаданных. После сохранения и обновления конфигурации базы данных изменения автоматически уйдут во все подчиненные узлы при очередной синхронизации.
  2. В режиме «1С:Предприятие»: в типовых решениях БСП правила регистрации можно загрузить интерактивно через параметры синхронизации данных (или регистр сведений Правила для обмена данными) без необходимости снимать конфигурацию с поддержки.

Альтернативный вариант: обработчик «ПриОтправкеДанныхПодчиненному»

Если требуется перехватить отправку непосредственно в момент формирования сообщения обмена, можно использовать обработчик модуля плана обмена ПриОтправкеДанныхПодчиненному. В нем доступен параметр ЭлементДанных и возможность управления выгрузкой:


Процедура ПриОтправкеДанныхПодчиненному(Элемент, ОтправкаЭлемента)
    
    Если ТипЗнч(Элемент) = Тип("ДокументОбъект.ПриходныйКассовыйОрдер")
        Или ТипЗнч(Элемент) = Тип("ДокументОбъект.РасходныйКассовыйОрдер") Тогда
        ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать;
    КонецЕсли;
    
КонецПроцедуры

Обратите внимание: при использовании этого метода движения регистров также потребуется вручную фильтровать, проверяя значение регистратора в передаваемом наборе записей.

Ограничения и подводные камни выборочной синхронизации

Перед внедрением выборочной миграции важно учесть следующие риски:

  1. Ссылки в других документах: если исключенный из выгрузки кассовый ордер указан в качестве документа расчетов или основания в другом объекте (который выгружается в подчиненный узел), в подчиненной базе этот реквизит превратится в неразрешенную ссылку (битую ссылку).
  2. Ручная регистрация: если пользователи используют обработку Регистрация изменений для обмена, ручное добавление узла в очередь выгрузки может обойти программные подписки при записи. Настройка через правила регистрации (ПРО) гарантирует корректную фильтрацию независимо от способа постановки объекта на учет.
  3. Типовой обмен «По организациям»: если разделение данных обусловлено филиальной структурой, зачастую проще перейти с плана обмена «Полный» на план обмена «По организациям», где разграничение документов кассы и банка реализовано штатными средствами конфигурации без внесения изменений в код.
← На главную