Как отменить регистрацию изменений документа в плане обмена без изменения конфигурации?

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

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

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

Почему простое удаление тегов из XML-правил не отключает регистрацию

Выясним причину такого поведения. Механизм регистрации изменений в 1С базируется на двух составляющих:

  1. Платформенный состав плана обмена: если для объекта в метаданных установлено свойство Авторегистрация = Разрешить (Авто), платформа регистрирует изменения непосредственно в момент записи объекта.
  2. Правила регистрации объектов (ПРО) БСП: алгоритмы БСП управляют регистрацией на основе файла XML. Если удалить блок описания объекта с параметром <Авторегистрация>false</Авторегистрация>, то для объекта начинает действовать регистрация по умолчанию, то есть изменения продолжают регистрироваться.

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

Способ 1. Корректировка правил регистрации объектов через «Конвертацию данных»

Самый надежный и штатный способ — выгрузить правила регистрации, отредактировать их в конфигурации «Конвертация данных» и загрузить обратно в базу в режиме «1С:Предприятие».

Разберем по шагам, как это сделать:

  1. Выгрузим текущие правила регистрации из информационной базы (раздел администрирования синхронизации данных).
  2. Откроем правила в конфигурации «Конвертация данных».
  3. Найдем необходимое правило для выгружаемого документа (например, Документ.РеализацияТоваровУслуг).
  4. В обработчике события «Перед обработкой» напишем простой код отказа:

Отказ = Истина;

Либо, если правила правятся вручную в XML, можно добавить заведомо невыполнимый отбор по свойствам, как показано в примере:


<Правило Отключить="false" Валидное="true">
    <Код>000000001</Код>
    <Наименование>РеализацияТоваровУслуг</Наименование>
    <ОбъектНастройки>ДокументСсылка.РеализацияТоваровУслуг</ОбъектНастройки>
    <ОбъектМетаданныхИмя>Документ.РеализацияТоваровУслуг</ОбъектМетаданныхИмя>
    <ОбъектМетаданныхТип>Документ</ОбъектМетаданныхТип>
    <ОтборПоСвойствамОбъекта>
        <ЭлементОтбора>
            <СвойствоОбъекта>Номер</СвойствоОбъекта>
            <ВидСравнения>Равно</ВидСравнения>
            <Значение>__НЕ_ВЫГРУЖАТЬ__</Значение>
        </ЭлементОтбора>
    </ОтборПоСвойствамОбъекта>
</Правило>

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

Способ 2. Использование расширения конфигурации

Если обмен работает на чистом платформенном механизме РИБ (без подсистемы обмена данными БСП), внешние XML-правила не применяются. В этом случае задачу можно решить добавлением расширения.

Рассмотрим два варианта реализации в расширении:

  1. Подписка на событие ПриЗаписи: в расширение добавляется подписка для нужного типа документов. В обработчике очищается регистрация изменений на узле:

Процедура Расш_СнятьРегистрациюПриЗаписи(Источник, Отказ) Экспорт
    ПланыОбмена.УдалитьРегистрациюИзменений(УзелОбмена, Источник);
КонецПроцедуры
  1. Обработчик плана обмена: в модуле плана обмена переопределяется метод ПриОтправкеДанныхПодчиненному или ПриОтправкеДанныхГлавному:

&Вместо("ПриОтправкеДанныхПодчиненному")
Процедура Расш_ПриОтправкеДанныхПодчиненному(Элемент, ОтправкаЭлемента)
    Если ТипЗнч(Элемент) = Тип("ДокументСсылка.РеализацияТоваровУслуг") Тогда
        Элемент = Неопределено;
    Иначе
        ПродолжитьВызов(Элемент, ОтправкаЭлемента);
    КонецЕсли;
КонецПроцедуры

При установке Элемент = Неопределено платформа автоматически снимает регистрацию с объекта, и данные не попадают в сообщение обмена.

Способ 3. Регламентная очистка регистрации внешней обработкой

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


ПланыОбмена.УдалитьРегистрациюИзменений(УзелОбмена, Метаданные.Документы.РеализацияТоваровУслуг);

Важные ограничения и риски

При исключении документов из обмена обратим внимание на следующие нюансы:

  1. Нарушение ссылочной целостности: если исключенный документ участвует в движениях регистров, которые продолжают выгружаться, в базе-приемнике появятся битые ссылки (отображение <Объект не найден>).
  2. Синхронизация движений: если документ является регистратором для регистров накопления или сведений, для них также необходимо настроить аналогичные правила отмены регистрации, иначе движения документа продолжат выгружаться в подчиненный узел.
← На главную