Почему не переносятся справочники при синхронизации ERP 2.4 и БП 3.0 через Enterprise Data?

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

При настройке типовой синхронизации данных между 1С:ERP Управление предприятием 2.4 и 1С:Бухгалтерия предприятия 3.0 специалисты часто сталкиваются с ситуацией, когда документы переносятся корректно, а некоторые справочники (нормативно-справочная информация — НСИ) игнорируются системой. Особенно часто это касается таких объектов, как ДоговорыКонтрагентов, БанковскиеСчета и другие подчиненные справочники. В этой статье мы подробно разберем, почему это происходит, проанализируем программный код и предложим несколько вариантов решения проблемы.

Проблема: режим выгрузки по условию

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

Проанализируем причину. Через отладчик можно выяснить, что для проблемных справочников установлен режим выгрузки ВыгружатьПоУсловию. В формате Enterprise Data (ED) это означает, что объект не будет выгружен просто так — он должен либо входить в определенный раздел учета, либо на него должен ссылаться документ, который сам успешно прошел все фильтры. Если мы пытаемся выгрузить только справочники (без документов), связь разрывается, и система отсекает «лишние», по ее мнению, данные.

Разбор логики запроса в плане обмена

Выясним, какое именно условие блокирует выгрузку. Основная логика отбора узлов-получателей заложена в общем модуле ОбменДаннымиСобытия, в функции МассивУзловПоЗначениямСвойств. Именно здесь формируется запрос к плану обмена СинхронизацияДанныхЧерезУниверсальныйФормат. Посмотрим на фрагмент этого запроса, который отвечает за фильтрацию:


ВЫБРАТЬ РАЗЛИЧНЫЕ ПланОбменаОсновнаяТаблица.Ссылка КАК Ссылка,
ПланОбменаРазделыУчета.РазделУчета,
ПланОбменаРазделыУчета.Выгружать
ИЗ
ПланОбмена.СинхронизацияДанныхЧерезУниверсальныйФормат КАК ПланОбменаОсновнаяТаблица
ЛЕВОЕ СОЕДИНЕНИЕ ПланОбмена.СинхронизацияДанныхЧерезУниверсальныйФормат.РазделыУчета КАК ПланОбменаРазделыУчета
ПО ПланОбменаОсновнаяТаблица.Ссылка = ПланОбменаРазделыУчета.Ссылка
    И (ПланОбменаРазделыУчета.РазделУчета = &СвойствоОбъекта_РазделУчета1
ИЛИ ПланОбменаРазделыУчета.РазделУчета = &СвойствоОбъекта_РазделУчета2
ИЛИ ПланОбменаРазделыУчета.РазделУчета = &СвойствоОбъекта_РазделУчета3)
    И ПланОбменаРазделыУчета.Выгружать

Проанализируем этот код. Система пытается соединить основную таблицу плана обмена с табличной частью РазделыУчета. Если в настройках синхронизации эта табличная часть пуста, то условие И ПланОбменаРазделыУчета.Выгружать (или последующая проверка на NULL) не проходит. В результате объект, даже будучи зарегистрированным, удаляется из очереди на выгрузку, так как программа не может определить его принадлежность к разрешенному разделу учета.

Причина пустой таблицы «Разделы учета»

Почему же табличная часть РазделыУчета оказывается пустой? Рассмотрим механизм актуализации параметров узла. В ERP 2.4 за это отвечает процедура АктуализацияРеквизитовУзлаПланаОбмена в модуле менеджера плана обмена.

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

Решение 1: Исправление в модуле менеджера (рекомендуемое для разработчиков)

Для того чтобы справочники выгружались корректно даже без документов, нам необходимо изменить логику заполнения разделов учета. Рассмотрим, как можно модифицировать процедуру АктуализацияРеквизитовУзлаПланаОбмена. Нам нужно закомментировать условие, которое проверяет режим выгрузки документов перед заполнением разделов.


Процедура АктуализацияРеквизитовУзлаПланаОбмена(УзелПланаОбмена) Экспорт
    
    // ... (код инициализации) ...
    
    Если Не УзелПланаОбмена.ИспользоватьОтборПоРазделамУчета Тогда
        
        УзелПланаОбмена.РазделыУчета.Очистить();
        
        // Условие закомментировано, чтобы разделы учета заполнялись всегда
        // Если УзелПланаОбмена.РежимВыгрузкиДокументов <> Перечисления.РежимыВыгрузкиОбъектовОбмена.НеВыгружать Тогда 
            РазделыУчета = ПолучитьРазделыУчета(Ложь, ВариантНастройки);
            УзелПланаОбмена.РазделыУчета.Загрузить(РазделыУчета);
        // КонецЕсли;
        
    КонецЕсли;
    
КонецПроцедуры

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

Решение 2: Программное заполнение через обработку

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


УзелОбъект = МойУзелСинхронизации.ПолучитьОбъект();
// Получаем структуру стандартных разделов из модуля менеджера
Разделы = ПланОбмена.СинхронизацияДанныхЧерезУниверсальныйФормат.ПолучитьРазделыУчета(Ложь);
УзелОбъект.РазделыУчета.Загрузить(Разделы);
УзелОбъект.Записать();

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

Решение 3: «Обманный маневр» в настройках (без программирования)

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

  1. Включите выгрузку документов в настройках синхронизации.
  2. Установите дату начала выгрузки документов далеко в будущем (например, через год).
  3. В этом случае флаг РежимВыгрузкиДокументов будет отличаться от значения НеВыгружать, и система автоматически заполнит разделы учета.
  4. Документы при этом фактически выгружаться не будут (так как их дата меньше установленной границы), а справочники начнут уходить в полном объеме.

Важные нюансы для справочника «Договоры»

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

Итоги и рекомендации

Мы проанализировали сложный механизм фильтрации данных при обмене через Enterprise Data. Подведем итог: основной причиной «пропажи» справочников при обмене из ERP 2.4 является очистка разделов учета в настройках узла.

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

← На главную