Добрый день, друзья!

Вопрос вроде когда то поднимался уже, но подскажите, пожалуйста еще раз:

Каким способом можно выполнить разузлование спецификаций (в ERP 2.5) более оптимально ?
Желательно с использованием типового функционала (можно и без), а еще лучше с примером
---
В общем пока остановился на данном решении.

Если найдется оптимальнее - просьба сообщить.

Спасибо всем откликнувшимся !

```1c
    &НаСервере
    Процедура РазузловатьНаСервере(Спецификация, Количество)

    Отчет.Материалы.Очистить();

    ПараметрыДерева = УправлениеДаннымиОбИзделияхКлиентСервер.ПараметрыДереваСпецификаций();

    ПараметрыДерева.Номенклатура = Справочники.Номенклатура.ПустаяСсылка();
    ПараметрыДерева.ХарактеристикаНоменклатуры = Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка();
    ПараметрыДерева.Спецификация = Спецификация;

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

    ПараметрыДерева.Дата = ДатаОстатков;
    ПараметрыДерева.ПодразделениеДиспетчер = Справочники.СтруктураПредприятия.ПустаяСсылка();
    ПараметрыДерева.НаправлениеДеятельности = Справочники.НаправленияДеятельности.ПустаяСсылка();

    ПараметрыДерева.ДинамическоеСчитывание = Истина;

    МнимаяФорма = новый Структура("ДеревоВыводитьЭтапы, ДеревоВыводитьОперации, ДеревоВыводитьВыходныеИзделия,ДеревоВыводитьМатериалы,ДеревоВыводитьТрудозатраты,ДеревоВыводитьЗаголовкиГруппировок",
    Ложь, Ложь, Ложь, Истина,Ложь,Ложь);

    УправлениеДаннымиОбИзделиях.ЗаполнитьНастройкиОтбораДереваСпецификации(ПараметрыДерева, МнимаяФорма);

    ПараметрыДерева.РазузловыватьПолуфабрикаты = РазузловыватьПолуфабрикаты;

    ОсновноеИзделие = Справочники.РесурсныеСпецификации.ДанныеОсновногоИзделияСпецификации(Спецификация);

    ПараметрыДерева.Номенклатура = ОсновноеИзделие.Номенклатура;
    ПараметрыДерева.КоличествоВыходногоИзделия = Количество * ОсновноеИзделие.Количество;
    ПараметрыДерева.КоличествоУпаковокВыходногоИзделия = ложь;
    ПараметрыДерева.УпаковкаВыходногоИзделия = ложь;

    ПараметрыДерева.ВыводитьОстаткиТоваров = Истина;

    УправлениеДаннымиОбИзделиях.ПостроитьДеревоСпецификаций(ЭтотОбъект, ПараметрыДерева);

    РазвернутьДерево(ДеревоСпецификаций);

    КонецПроцедуры

    &НаСервере
    Процедура РазвернутьДерево(СтрокаДерево)

    Для каждого ст из СтрокаДерево.ПолучитьЭлементы() Цикл

    Идентификатор = ст.ПолучитьИдентификатор();

    УправлениеДаннымиОбИзделияхКлиентСервер.ДеревоСпецификацийПередРазворачиванием(ЭтотОбъект, Идентификатор, ложь);

    РазвернутьДерево(ст);

    КонецЦикла;

    КонецПроцедуры
```
---
Публикации ildarovich'а смотрели?
https://infostart.ru/profile/28527/
---
Иерархия без "В ИЕРАРХИИ" вот это только, но не думаю что это по моему вопросу ...
---
https://infostart.ru/1c/tools/78371/
---
Это тоже не по моему вопросу...
В интернете я уже находил подобные задачи, но большинство из них не актуальны..
Хотелось бы именно что то более оптимальное
---
для разузлования вариантов не так много, один из них - рекурсия.
---
https://infostart.ru/1c/tools/179376/
---
Разузловать в виде дерева или просто получить все вхождения?
---
Преимущественно - получить все вхождения
---
Ищите в сторону модуля менеджера справочника ресурсных спецификаций. Например ДанныеСпецификацииПоНоменклатуре
---
Заказ на производство - Структура заказа
---
Этапы немного не то... нужны спецификации
---
Зайди в спецификацию внутрь. Вверху Дерево спецификации.
---
Это тоже я видел, пока использую его, но там частично используются элементы формы + дерево (процедуры сворачивания\разворачивания) ...
Думал есть более оптимальные способы, поэтому поднял тему
---
В общем пока остановился на данном решении.

Если найдется оптимальнее - просьба сообщить.

Спасибо всем откликнувшимся !

```1c
    &НаСервере
    Процедура РазузловатьНаСервере(Спецификация, Количество)

    Отчет.Материалы.Очистить();

    ПараметрыДерева = УправлениеДаннымиОбИзделияхКлиентСервер.ПараметрыДереваСпецификаций();

    ПараметрыДерева.Номенклатура = Справочники.Номенклатура.ПустаяСсылка();
    ПараметрыДерева.ХарактеристикаНоменклатуры = Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка();
    ПараметрыДерева.Спецификация = Спецификация;

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

    ПараметрыДерева.Дата = ДатаОстатков;
    ПараметрыДерева.ПодразделениеДиспетчер = Справочники.СтруктураПредприятия.ПустаяСсылка();
    ПараметрыДерева.НаправлениеДеятельности = Справочники.НаправленияДеятельности.ПустаяСсылка();

    ПараметрыДерева.ДинамическоеСчитывание = Истина;

    МнимаяФорма = новый Структура("ДеревоВыводитьЭтапы, ДеревоВыводитьОперации, ДеревоВыводитьВыходныеИзделия,ДеревоВыводитьМатериалы,ДеревоВыводитьТрудозатраты,ДеревоВыводитьЗаголовкиГруппировок",
    Ложь, Ложь, Ложь, Истина,Ложь,Ложь);

    УправлениеДаннымиОбИзделиях.ЗаполнитьНастройкиОтбораДереваСпецификации(ПараметрыДерева, МнимаяФорма);

    ПараметрыДерева.РазузловыватьПолуфабрикаты = РазузловыватьПолуфабрикаты;

    ОсновноеИзделие = Справочники.РесурсныеСпецификации.ДанныеОсновногоИзделияСпецификации(Спецификация);

    ПараметрыДерева.Номенклатура = ОсновноеИзделие.Номенклатура;
    ПараметрыДерева.КоличествоВыходногоИзделия = Количество * ОсновноеИзделие.Количество;
    ПараметрыДерева.КоличествоУпаковокВыходногоИзделия = ложь;
    ПараметрыДерева.УпаковкаВыходногоИзделия = ложь;

    ПараметрыДерева.ВыводитьОстаткиТоваров = Истина;

    УправлениеДаннымиОбИзделиях.ПостроитьДеревоСпецификаций(ЭтотОбъект, ПараметрыДерева);

    РазвернутьДерево(ДеревоСпецификаций);

    КонецПроцедуры

    &НаСервере
    Процедура РазвернутьДерево(СтрокаДерево)

    Для каждого ст из СтрокаДерево.ПолучитьЭлементы() Цикл

    Идентификатор = ст.ПолучитьИдентификатор();

    УправлениеДаннымиОбИзделияхКлиентСервер.ДеревоСпецификацийПередРазворачиванием(ЭтотОбъект, Идентификатор, ложь);

    РазвернутьДерево(ст);

    КонецЦикла;

    КонецПроцедуры
```