Почему в ERP не переносятся подразделения из ЗУП 3.1 при синхронизации и как это исправить

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

При использовании штатного механизма синхронизации между ЗУП 3.1 и ERP 2.0 (или Комплексной автоматизацией 2.x) пользователи часто сталкиваются с ситуацией, когда документ Отражение зарплаты в финансовом учете загружается в ERP без аналитики по подразделениям — для этой задачи есть расширение типового обмена EnterpriseData для ЗУП 3.1. При этом в исходном документе в ЗУП все начисления распределены по подразделениям корректно. Рассмотрим подробно, почему так происходит, и разберем варианты решения — от простых пользовательских настроек до внесения изменений в программный код правил обмена.

Разбор причины: Подразделения организации vs Структура предприятия

Для начала проанализируем архитектурное различие между двумя конфигурациями. В ЗУП 3.1 основным справочником является ПодразделенияОрганизаций (регламентированная структура). В ERP 2.0 финансовый учет и затраты ведутся в разрезе справочника СтруктураПредприятия (управленческие подразделения). Проблема заключается в том, что типовые правила обмена EnterpriseData ищут в ЗУП данные именно по управленческой структуре. Если связь между ними не настроена, ERP получает «пустое» значение подразделения.

В ЗУП ПРОФ справочник Структура предприятия скрыт по умолчанию. Однако, как только активируется синхронизация с ERP, этот справочник становится видимым и активным. Выясним, заполнена ли у вас колонка Место в структуре предприятия в документе Отражение зарплаты в бухучете в ЗУП. Если она пуста, данные в ERP гарантированно придут без подразделений.

Решение 1: Настройка функциональных связей в ЗУП

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

  1. Синхронизация справочников: Убедимся, что справочник Структура предприятия в ЗУП заполнен данными из ERP. Обычно это происходит автоматически при первичной синхронизации.
  2. Привязка к штатному расписанию: Если в ЗУП ведется штатное расписание, необходимо в позициях штатного расписания или в карточках подразделений указать соответствие управленческому подразделению (поле «Место в структуре предприятия»).
  3. Проверка документов: Проанализируем уже созданные документы Отражение зарплаты в бухучете. В новых документах, созданных после настройки связей, колонка Место в структуре предприятия должна заполняться автоматически. Для старых документов может потребоваться перезаполнение. Для этой задачи подойдёт автоматическое заполнение аналитики в Отражении зарплаты для КА 2.

Как показывает практика, после настройки связей в штатном расписании и перезаполнения документа в ЗУП, синхронизация начинает отрабатывать корректно без всяких доработок кода.

Решение 2: Программное исправление правил обмена (EnterpriseData)

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

Логика обмена сосредоточена в общем модуле МенеджерОбменаЧерезУниверсальныйФормат. В этом модуле за каждое преобразование объекта отвечает отдельный блок кода. Нам необходимы процедуры, отвечающие за документ ОтражениеЗарплатыВФинансовомУчете.

Для внесения изменений рекомендуется следующий алгоритм:

  1. Найдем в ЗУП процедуру ПКО_Документ_ОтражениеЗарплатыВФинансовомУчете_Отправка_ПриОтправкеДанных (название может незначительно меняться в зависимости от версии формата, например, _1_13).
  2. В этой процедуре описывается логика выгрузки табличных частей. Нам нужно убедиться, что свойство Подразделение (или ПодразделениеДиспетчер) заполняется значением из нашей структуры.
  3. Для отладки процесса используем обработку Выгрузка и загрузка данных EnterpriseData. Она позволяет выгрузить данные в XML-файл и посмотреть, какие именно значения попадают в тег подразделения.

Пример фрагмента кода, который можно использовать в расширении для принудительного заполнения (условно):


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

Решение 3: Использование «Конвертации данных 3.0»

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

Проанализируем процесс:

  1. Выгрузим схему XML (XSD) вашего формата из ЗУП.
  2. Загрузим правила из общего модуля МенеджерОбменаЧерезУниверсальныйФормат в КД 3.0.
  3. Отредактируем алгоритмы сопоставления (ПОД и ПКО).
  4. Выгрузим обновленный код менеджера обмена.

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

Решение 4: Доработка на стороне ERP (прием данных)

Иногда проще поправить логику приема данных в самой ERP. Рассмотрим ситуацию, когда данные из ЗУП приходят корректно (в XML есть ГУИД подразделения), но ERP не может найти соответствующий объект в своем справочнике Структура предприятия.

В этом случае необходимо проверить процедуру ПКО_Документ_ОтражениеЗарплатыВФинансовомУчете_Получение_ПриЗаписи в модуле менеджера обмена на стороне ERP. Здесь можно прописать поиск подразделения по наименованию или коду, если поиск по внутреннему идентификатору (GUID) завершился неудачей.

Рассмотрим пример логики: если поле Подразделение в загруженном документе пустое, мы можем попытаться заполнить его на основании Способа отражения или других косвенных признаков, уже используя расширение в ERP.

Рекомендации по отладке

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

  1. В ЗУП откройте Состав отправляемых данных в узле синхронизации.
  2. Найдите конкретный документ Отражение зарплаты в бухучете и выполните его выгрузку в файл через универсальную обработку обмена EnterpriseData.
  3. Откройте полученный XML-файл любым текстовым редактором и найдите узел Подразделение.
  4. Если узел пустой — проблема в ЗУП (не заполнены данные в документе или правила выгрузки).
  5. Если узел заполнен (есть ГУИД), но в ERP подразделение пустое — проблема в сопоставлении объектов (разные ГУИДы у подразделений в разных базах) — это решается через сравнение данных и поиск расхождений в 1С.

Таким образом, мы видим, что проблема чаще всего кроется в отсутствии связей между регламентированным и управленческим учетом. Использование штатной настройки «Место в структуре предприятия» в 90% случаев решает задачу без написания кода. В остальных случаях наиболее гибким решением будет использование КД 3.0 и подключение внешних правил обмена.

← На главную