Как конвертировать справочник Структура предприятия из ERP 2 в Подразделения организаций в БП 3.0

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

При переносе данных и бухгалтерских операций из конфигурации 1С:ERP Управление предприятием 2 в 1С:Бухгалтерия предприятия 3.0 разработчики часто сталкиваются с несовпадением архитектуры аналитических разрезов. В ERP аналитика проводок по подразделениям представлена справочником СтруктураПредприятия, который не имеет подчинения и задает общую управленческую иерархию компании. В БП 3.0 справочник ПодразделенияОрганизаций жестко подчинен справочнику Организации.

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

В чем заключается архитектурная коллизия

Рассмотрим ключевые особенности структуры данных в обеих конфигурациях:

  1. Разрыв подчинения: В ERP одно управленческое подразделение (например, «Бухгалтерия» или «Отдел продаж») может участвовать в хозяйственных операциях различных юридических лиц. В БП 3.0 для каждой организации требуется собственная запись в справочнике подразделений.
  2. Опасность поиска по УИД: Если оставить в ПКО стандартный поиск по внутреннему идентификатору (GUID), при выгрузке операций по второй и последующим организациям элемент приемника будет перезаписывать своего владельца. Это приведет к нарушению целостности ранее перенесенных данных.

Способ 1. Передача организации через ИсходящиеДанные и ВходящиеДанные

Рассмотрим классический механизм «Конвертации данных 2.1», при котором контекст документа или проводки передается в подчиненное правило конвертации свойств (ПКС).

Разберем реализацию по шагам:

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

ИсходящиеДанные = Новый Структура;
ИсходящиеДанные.Вставить("Организация", Источник.Организация);

Перейдем в ПКО справочника ПодразделенияОрганизаций и настроим обработку владельца:

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

Если ВходящиеДанные <> Неопределено И ВходящиеДанные.Свойство("Организация") Тогда
    Значение = ВходящиеДанные.Организация;
Иначе
    // Если операция не содержит организации, можно назначить организацию по умолчанию
    Значение = Неопределено;
КонецЕсли;

Способ 2. Программная выгрузка через ВыгрузитьПоПравилу

Посмотрим на более гибкий вариант, который часто применяется при конвертации проводок регистра бухгалтерии в обработчиках ПриВыгрузке или ПередВыгрузкой строки движений.

В этом случае мы собираем структуру полей для поиска и заполнения объекта приемника и вызываем правило конвертации явно:


ИсходящиеДанные = Новый Структура("Наименование, Владелец");
ИсходящиеДанные.Наименование = СтрокаПроводки.Подразделение.Наименование;
ИсходящиеДанные.Владелец     = СтрокаПроводки.Организация;

ВыгрузитьПоПравилу( , , ИсходящиеДанные, , "СтруктураВПодразделенияОрганизаций");

Настройка правил поиска и идентификации в ПКО

Выясним причину возможных дублей и затирания данных при загрузке. Чтобы правило конвертации корректно создавало и находило элементы в подчиненном справочнике приемника, выполним обязательные настройки в ПКО ПодразделенияОрганизаций:

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

Способ 3. Использование дополнительного реквизита в ERP

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

  1. В конфигурации 1С:ERP добавим для справочника СтруктураПредприятия дополнительный реквизит (через механизм Свойства и категории) с типом СправочникСсылка.Организации.
  2. Заполним для каждого подразделения соответствующую организацию.
  3. В правиле конвертации свойств для реквизита Владелец обратимся к данному дополнительному реквизиту напрямую через свойства объекта-источника.

Этот вариант удобен тем, что избавляет от необходимости передавать контекст организации через все документы и проводки, однако требует предварительной ручной классификации структуры в базе-источнике.

Обработка исключений и значений по умолчанию в БП 3.0

Если в выгружаемых движениях подразделение или организация не заполнены (например, по счетам, где подразделение не является обязательным субконто), настроим безопасное поведение в обработчике ПередЗаписью или ПриЗагрузке в ПКО приемника:


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

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

← На главную