Как ограничить выгрузку справочников при синхронизации УНФ и Бухгалтерии через Универсальный формат?

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

При настройке синхронизации данных между конфигурациями 1С:Управление нашей фирмой (УНФ) и 1С:Бухгалтерия предприятия (БП) через Универсальный формат (EnterpriseData) часто возникает задача: ограничить передачу определенных справочников. Например, необходимо, чтобы справочник Контрагенты или Номенклатура принимался из БП, но не отправлялся обратно из УНФ, чтобы избежать дублирования или замусоривания базы. Однако простым удалением объектов из правил регистрации проблему решить удается не всегда.

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

Анализ причин избыточной регистрации данных

Разберем ситуацию, когда вы изменили правила регистрации, загрузили их в базу, но в списке объектов для отправки все равно видите «ненужные» справочники. Проанализируем основные причины такого поведения:

  1. Ссылочная целостность (Выгрузка по ссылке): Это самая частая причина. Даже если вы запретили регистрацию справочника Номенклатура, при выгрузке документа РеализацияТоваровУслуг система обязана передать данные о товарах, указанных в табличной части. Механизм обмена автоматически включает в пакет выгрузки все связанные объекты по ссылке, игнорируя правила регистрации для этих конкретных записей.
  2. Использование некорректной версии Конвертации данных: Обмен через универсальный формат (EnterpriseData) базируется на технологии КД 3.0. Попытки использовать КД 2.0 для редактирования правил обмена или регистрации в данном случае будут неэффективны, так как механизмы работы с XDTO-пакетами принципиально отличаются.
  3. Кэширование правил в оперативной памяти: После загрузки нового файла правил регистрации (xml) система может продолжать использовать старые правила, сохраненные в кэше сеанса или в зашитых макетах конфигурации.
  4. Накопленная ранее очередь: Правила регистрации определяют, что будет записываться в таблицу изменений в будущем. Те объекты, которые уже попали в список регистрации до изменения правил, сами оттуда не исчезнут.

Шаг 1. Корректное редактирование правил регистрации

Выясним, как правильно изменить правила, чтобы объекты перестали автоматически попадать в очередь обмена. Для этого нам понадобится конфигурация «Конвертация данных 3.0».

Рассмотрим по шагам процесс настройки в правилах регистрации (ПР):

  1. Найдем нужный объект (например, справочник ДоговорыКонтрагентов).
  2. Обратим внимание на свойство «Авторегистрация». Если установлено значение Разрешить, объект будет регистрироваться при любом изменении. Чтобы программные условия в правилах начали работать, установим значение Запретить или Выполнять программно.
  3. В обработчике ПередОбработкой или непосредственно в условиях регистрации пропишем логику, которая будет блокировать добавление объекта в узел обмена. Например, можно проверять наличие определенного реквизита или просто установить Отказ = Истина; для всех случаев, если выгрузка из этой базы не предполагается.

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


Если ПустаяСсылка(Объект.Ссылка) Тогда
    Отказ = Истина;
КонецЕсли;

// Блокируем выгрузку, если объект не соответствует условию
Если ТипЗнч(Объект.Ссылка) = Тип("СправочникСсылка.Номенклатура") Тогда
    Отказ = Истина;
КонецЕсли;

Шаг 2. Очистка накопленной регистрации изменений

После того как новые правила загружены, необходимо «обнулить» текущую очередь обмена для тех объектов, которые больше не должны выгружаться. Выполним это с помощью стандартных инструментов системы.

Рассмотрим порядок действий:

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

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

Шаг 3. Решение проблемы выгрузки «По ссылке»

Если справочники очищены, а правила настроены на отказ, но при выгрузке документов объекты все равно улетают в базу-приемник, значит, срабатывает механизм извлечения связанных данных. Чтобы полностью это пресечь, необходимо вмешательство в Правила Конвертации Объектов (ПКО) в КД 3.0.

Проанализируем ситуацию: в Универсальном формате за выгрузку отвечает не только регистрация, но и логика формирования XDTO-сообщения. Нам нужно изменить поведение системы так, чтобы вместо полного объекта передавалась только ссылка (УИД) или «пустышка».

Разберем способы решения:

Шаг 4. Программный контроль регистрации через расширение

Если правка правил в КД 3.0 кажется слишком трудоемкой, можно прибегнуть к программному методу контроля через механизм расширений. Это гарантированный способ запретить регистрацию изменений на уровне платформы.

Рассмотрим пример кода, который можно разместить в расширении (например, в модуле объекта справочника или через подписку на событие ПередЗаписью):


Процедура ПередЗаписью(Отказ)
    // Проверяем, что запись инициирована не самим обменом
    Если ОбменДанными.Загрузка Тогда
        Возврат;
    КонецЕсли;

    // Перебираем узлы обмена и удаляем регистрацию для конкретного плана обмена
    Для Каждого СтрокаУзла Из ОбменДанными.Получатели Цикл
        Если ТипЗнч(СтрокаУзла.Узел) = Тип("ПланОбменаСсылка.СинхронизацияДанныхЧерезУниверсальныйФормат") Тогда
            // Если это наш обмен с Бухгалтерией, удаляем получателя
            ОбменДанными.Получатели.Удалить(СтрокаУзла);
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

Этот метод позволяет жестко контролировать состав отправляемых данных, минуя сложные настройки правил регистрации. Однако помните, что это может привести к нарушению ссылочной целостности в базе-приемнике (например, в БП появится документ с «битой» ссылкой на контрагента, если этого контрагента там еще нет).

Рекомендации по стабильной работе обмена

Чтобы настройка прошла успешно, придерживайтесь следующих советов:

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

Во-вторых, проверяйте версию EnterpriseData. В УНФ 1.6.19 и актуальных версиях БП могут поддерживаться разные версии формата (например, 1.7, 1.8, 1.10). Правила регистрации должны быть адаптированы под ту версию формата, которая выбрана в настройках узла обмена.

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

Таким образом, для полной изоляции справочников при обмене УНФ — БП требуется комплексный подход: корректировка правил регистрации в КД 3.0 (с обязательным переключением режима авторегистрации), очистка текущих очередей через типовую обработку и, при необходимости, программное вмешательство через расширения для контроля ссылочной выгрузки.

← На главную