Как исключить из синхронизации в РИБ макет печатной формы, измененный в пользовательском режиме?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Торговля и дистрибуция
← На главную

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

Разберем детально, почему это происходит и какими способами можно исключить передачу измененного макета при обмене данными.

Выясним причину автоматической синхронизации макетов

Когда пользователь вносит правки в печатную форму через интерфейс программы («Печатные формы, отчеты и обработки» — «Макеты печатных форм»), платформа не меняет саму конфигурацию. Измененный двоичный макет сохраняется в служебный регистр сведений ПользовательскиеМакетыПечати.

В типовых планах обмена РИБ для данного регистра по умолчанию установлено свойство Авторегистрация: Разрешить. Как только запись в регистре создается или перезаписывается, платформа 1С фиксирует изменение и регистрирует узел-получатель для выгрузки.

Если просто вручную удалить регистрацию через обработку Регистрация изменений для обмена, это поможет лишь временно. При следующем редактировании или обновлении настроек макета авторегистрация сработает вновь, а при получении пакета из центрального узла локальные правки будут перезаписаны центральными данными.

Способ 1. Отключение авторегистрации в составе плана обмена

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

  1. Откроем дерево метаданных в конфигураторе центрального узла.
  2. Найдем используемый план обмена (например, ПланОбмена.РИБ_С_Филиалами или аналогичный).
  3. Перейдем на вкладку Состав и найдем в списке объектов регистр сведений ПользовательскиеМакетыПечати.
  4. Изменим свойство Авторегистрация со значения Разрешить на Запретить.
  5. Применим изменения конфигурации и передадим обновление во все подчиненные узлы по штатной схеме РИБ.

После применения данного правила любые локальные изменения макетов печати в узлах перестанут автоматически регистрироваться к отправке.

Способ 2. Программное игнорирование через модуль плана обмена

Если необходимо запретить синхронизацию не всех пользовательских макетов, а только конкретной печатной формы (или полностью исключить перезапись макетов как при отправке, так и при приеме данных), настроим программную фильтрацию. Для этого используем обработчики событий в модуле плана обмена или соответствующие подписки на события.

Посмотрим на пример кода, который исключает выгрузку и загрузку записей регистра ПользовательскиеМакетыПечати:


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

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

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

Способ 3. Использование внешней печатной формы или расширения

Проанализируем альтернативный путь, который не требует вмешательства в правила обмена и конфигурацию метаданных РИБ:

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

Такой подход полностью изолирует логику печати узла от механизмов синхронизации и исключает любые риски перезаписи данных при плановых обменах РИБ.

← На главную