1С:Конвертация данных: Способ переноса дерева элементов справочников между разнородными конфигурациями.
Данная задача возникает когда необходимо перенести справочники между конфигурациями у которых различается количество уровней. Например, количество уровней в справочнике "Номенклатура" в конфигурации "Торговля и Склад" — 5, а в конфигурации "Бухгалтерия" — 4. Самое простое решение — отбросить реквизит "Родитель" элементов справочника при выгрузке, но есть способ элегантнее. В данном случае мы не обсуждаем возможность изменения структуры справочника в базе-приемнике конфигурации "1С:Бухгалтерия".
- Описание
- Подробнее
Описание
Данная задача возникает, когда необходимо перенести справочники между конфигурациями у которых различается количество уровней (например, количество уровней в справочнике «Номенклатура» в конфигурации «Торговля и Склад» — 5, а в конфигурации «Бухгалтерия» — 4).
Самое простое решение — отбросить реквизит «Родитель» элементов справочника при выгрузке, но есть способ элегантнее. В данном случае мы не обсуждаем возможность изменения структуры справочника в базе-приемнике конфигурации «1С:Бухгалтерия».
Т.к. количество уровней в целевой конфигурации на 1 меньше, придется пожертвовать одним уровнем исходной конфигурации. Как правило это будет подгруппа уровня 4. Конечно, возможна ситуация, когда на Вашем предприятии каждый уровень имеет определенную семантику, тогда решение о том какой уровень отбросить надо принимать по ситуации.
Итак, как избавиться от подгруппы уровня №4? Разделим все множество элементов справочника на два множества:
- находящиеся на уровне 5,
- и находящиеся на уровне меньше 5-го.
Для этих двух групп создаем правила выгрузки:

Пятый уровень иерархии (вернее более четвертого)…
…и

Уровень иерархии 4 и меньше.
Для каждого из данных правил конвертации определяем условия выгрузки. Соответственно:

…и:

Для элементов, которые удовлетворяют первому правилу (уровень оказался менее 5) состав правила конвертации объекта обычен, в части конвертации реквизита «Родитель»:

А для элементов с уровнем более 5 преобразуем реквизит «Родитель»:

Вот и все. При загрузке элементы пятого уровня попадут в четвертый, группы четвертого уровня перенесены не будут.
Дополнение: Хотя, конечно, данное решение имеет и свои недостатки. Например, если мы выгружаем какие-либо документы имеющие реквизит «Номенклатура» — придется явно указывать по какому из двух правилу конвертировать данный реквизит, а для этого предварительно вычислять его уровень. Это же верно и для случая, когда выгружаем элементы переданные в качестве параметра форму выгрузки.
