СКД Иерархия

1. Asya.Ozerova 40 30.05.24 19:29 Сейчас в теме
Всем доброго времени суток!
Подскажите, можно ли в СКД сделать так:
Есть Элемент Иерархии с количеством: 2, соответственно все элементы в его иерархии надо умножить на 2,
Далее у него в Иерархии есть элемент 2 количеством 3 его так же надо умножить на 3 и элемент 3 с количеством 5 надо умножать на 5.
Количество вложений иерархии заранее не определено.
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. PhoenixAOD 62 31.05.24 05:47 Сейчас в теме
Чет не понял, причем тут иерархия и количество?
3. scarl1n 12 31.05.24 07:38 Сейчас в теме
(2)Ну может это требуемое количество для сборки изделия по спецификации. Выбрали спецификацию, в ней указано, что нужно 2 стула, а в спецификации стула указано, что нужно 4 ножки. Для первого изделия нам уже требуется 8 ножек, но выводит в отчете 4.
4. Asya.Ozerova 40 31.05.24 10:24 Сейчас в теме
(3)Верно! Именно так мне и надо!
5. Asya.Ozerova 40 31.05.24 10:48 Сейчас в теме
(2)Суть вот в чем:
СКД умеет делать иерархию:
ВЫБРАТЬ
 Т.Ссылка КАК СпецификацияРодитель,
 Т.Спецификация КАК Спецификация,
 Т.Номенклатура,
 Т.Количество
ИЗ
 Справочник.СпецификацииНоменклатуры.ИсходныеКомплектующие КАК Т
ГДЕ
 Т.Ссылка В(&СписокСпецификаций)
Показать

Но "Количество" он ставит из самой спецификации, а мне надо чтоб учитывал "Количество" из "СпецификацияРодитель", т.е.:
"Количество" всех подчиненных элементов иерархии надо умножать на количество в "СпецификацииРодитель"!
Вот.
Вопрос к Гуру СКД, как это сделать?
Заранее спасибо)
Прикрепленные файлы:
6. PhoenixAOD 62 31.05.24 11:15 Сейчас в теме
(5)Ну определить, Выбор когда СпецификацияРодитель.Родитель есть Null тогда 2 иначе че-то еще твое конец.
7. scarl1n 12 31.05.24 11:45 Сейчас в теме
(5)А не получится соединение делать не с документом "Спецификация" в качестве родителя, а также с табличной частью, чтобы у вас было 2 табличных части, в которых вы перемножите количество? Я просто не вижу всей структуры, не могу точно сказать.
8. Asya.Ozerova 40 31.05.24 12:29 Сейчас в теме
(7)Суть:
Есть Спецификация:
Комплект для кафе:
Обеденная группа - 5;
..... и что-то там еще, тут не важно;

Обеденная группа:
Стол - 1 (спецификация);
Стул - 4 (спецификация);

Стул:
Сиденье - 1;
НожкаСтула - 4 (спецификация);

Стол:
Столешня - 1;
НожкаСтола - 4 (спецификация);

НожкаСтула:
Труба - 1;
Заглушка - 2;

НожкаСтола:
Труба - 1;
Заглушка - 2;

В итоге должно получиться:
Комплект для кафе:
Обеденная группа - 5;
Стол - 1 Х 5 = 5;
Сиденье - 1 Х 5 = 5;
НожкаСтола - 4 Х 5 = 20;
Труба - 1 Х 4 Х 5 = 20;
Заглушка - 2 Х 4 Х 5 = 40;
Стул - 1 Х 5 = 5;
Столешня - 1 Х 5 = 5;
НожкаСтула - 4 Х 5 = 20;
Труба - 1 Х 4 Х 5 = 20;
Заглушка - 2 Х 4 Х 5 = 40;

Это простой пример, в реальности дерево может быть на много больше.
т.е. Количество в каждом уровене Иерархии должно умножаться на Количество Предидущего уровня
Вот!
9. Asya.Ozerova 40 31.05.24 12:32 Сейчас в теме
(7)Заранее не известно сколько вложенных Спецификаций будет, их может быть 100...
10. Asya.Ozerova 40 31.05.24 12:43 Сейчас в теме
Вопрос вот в чем:
Как в СКД в Иерархии передать значение все элементам на уровень ниже,
или как взять значение из уровня выше?
11. scarl1n 12 31.05.24 13:50 Сейчас в теме
(10)Разве вопрос сейчас в этом? Если у вас неизвестно количество вложений спецификаций, то запросом это не решить. Ну сделаете вы 2 уровня, а если их 10?
12. Asya.Ozerova 40 31.05.24 13:54 Сейчас в теме
(11)Почему не решить!?
СКД строит Иерархический список с ЛЮБЫМ количеством уровней сам.
смотрите (5)
13. scarl1n 12 31.05.24 14:16 Сейчас в теме
(12)Не слышал о таком, да и кроме транзитивного замыкания не нашел информации, как решать такие задачи. Сам делал отдельную обработку и программно формировал дерево (медленно, зато вид читабельный). В общем, помочь не смогу.
15. Asya.Ozerova 40 01.06.24 19:33 Сейчас в теме
(13)вот так можно, простая рекурсия (14)
14. Asya.Ozerova 40 31.05.24 18:17 Сейчас в теме
В общем так и не нашларешение(
Временно сделала с Внешним источником данных - ТЗ
Выбрала в ТЗ рекурсией все вложенные спецификации, вот пример, если кому то еще надо будет:
Процедура Посчитать(ТаблицаРезультат, ССпецификация, Множитель = 1)
	Для Каждого СтрокаСпецификации Из ССпецификация.ИсходныеКомплектующие Цикл 
		ЕстьСтрока = ТаблицаРезультат.НайтиСтроки(Новый Структура("Спецификация, СпецификацияРодитель, Номенклатура", СтрокаСпецификации.Спецификация, ССпецификация, СтрокаСпецификации.Номенклатура));
		Если ЕстьСтрока.Количество() = 0 Тогда 
			НоваяСтрока = ТаблицаРезультат.Добавить(); 
			Если Множитель = 0 Тогда Множитель = 1 КонецЕсли;
			НоваяСтрока.Множитель = Множитель;      
		    НоваяСтрока.СпецификацияРодитель = ССпецификация;
		Иначе
			НоваяСтрока = ЕстьСтрока[0];  
	    	НоваяСтрока.Множитель = НоваяСтрока.Множитель * Множитель;
		КонецЕсли;
	    НоваяСтрока.Спецификация = СтрокаСпецификации.Спецификация;
	    НоваяСтрока.Номенклатура = СтрокаСпецификации.Номенклатура;
	    НоваяСтрока.СКоличество = СтрокаСпецификации.Количество; 
		Если НЕ СтрокаСпецификации.Спецификация = Справочники.СпецификацииНоменклатуры.ПустаяСсылка() Тогда 
			Посчитать(ТаблицаРезультат, СтрокаСпецификации.Спецификация, СтрокаСпецификации.Количество * Множитель);
		КонецЕсли;
	КонецЦикла;               
КонецПроцедуры                                                           
Показать
16. Vinzor 112 01.06.24 19:59 Сейчас в теме
(14) Что за конфигурация? Справочник типовой?
17. Asya.Ozerova 40 02.06.24 05:42 Сейчас в теме
18. Vadim-SH 03.06.24 11:46 Сейчас в теме
(17) В ERP есть Обработка ДеревоРесурсныхСпецификаций.
На форме обработки рекурсивно строится дерево с вычислением количества материала.
Возможно, в УПП есть что-то подобное.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот