|
Разузлование спецификации в СКД | ☑ | ||
---|---|---|---|---|
0
1snik_d
28.04.21
✎
10:07
|
Все привет. Пытаюсь решить следующую задачу: необходимо по планам производства построить таблицу комплектующих по спецификациям из этого плана. Спецификации многоуровневые, может доходить до 20 уровня вложенности. Т.е. необходимо разузлование.
Знаю, как сделать рекурсивным алгоритмом, но сильно не устраивает скорость его работы. Нашел на просторах интернета, что СКД умеет иерархию при связи набора с самим собой ВЫБРАТЬ Т.Ссылка КАК СпецификацияРодитель, Т.Спецификация КАК Спецификация, Т.Номенклатура, Т.Количество * &КоличествоСпецификации КАК Количество, Т.Количество КАК КоличествоНормативное, &КоличествоСпецификации КАК КоличествоСпецификации ИЗ Справочник.СпецификацииНоменклатуры.ИсходныеКомплектующие КАК Т ГДЕ Т.Ссылка В(&СписокСпецификаций) ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ЗНАЧЕНИЕ(Справочник.СпецификацииНоменклатуры.ПустаяСсылка), &Спецификация, &Спецификация, 1, 1, 1 Это пример запроса, и он работает, разузловывает как надо и самое главное, что очень быстро. Но ему надо скармливать конкретную спецификацию в качестве начального значения связи в СКД, а мне нужно передавать список спецификаций, которые я выбрал из планов производства. Не могу понять, как это можно реализовать. |
|||
1
Почему 1С
28.04.21
✎
10:29
|
Ничего не понял как это работает, дай ссылку на исходник?
|
|||
2
1snik_d
28.04.21
✎
10:41
|
||||
3
toypaul
гуру
28.04.21
✎
11:29
|
вторая часть запроса выбирает не одну спецификацию, а список начальных
|
|||
4
1snik_d
28.04.21
✎
11:35
|
(3) Если туда подпихнуть список, то запрос не выполняется, т.к. в объединении разные типы получаются в 2-х запросах
|
|||
5
1snik_d
28.04.21
✎
11:37
|
Как бы хотелось сделать: добавить еще один набор, в нем сделать выборку нужных мне спецификаций. Потом соединить этот набор с первоначальным каким-то образом, чтобы для каждой спецификации из второго набора произошло разузлование
|
|||
6
toypaul
гуру
28.04.21
✎
11:47
|
не надо туда подпихивать список. надо (если возможно) ВЫБРАТЬ ИЗ
|
|||
7
1snik_d
28.04.21
✎
11:58
|
(6) Вложенный запрос сделать, в смысле?
|
|||
8
WebberNSK
28.04.21
✎
12:06
|
(0) это будет еще медленнее, или разузловывай пакетно в цикле (на каждый уровень 1 запрос) или реализуй хранения таким образом, чтобы по родителю можно получить все дочерние элементы.
|
|||
9
1snik_d
28.04.21
✎
12:09
|
(6) Ура, заработало (©Кот Матроскин). Сделал вложенный запрос и второй набор не понадобился. Работает как надо. Спасибо за идею.
|
|||
10
1snik_d
28.04.21
✎
12:10
|
(8) Это работает пипец как быстрее обычного разузлования. На порядок быстрее
|
|||
11
DrShad
28.04.21
✎
12:11
|
(10) это будет медленно и не гарантированно от сваливания в бесконечный цикл
в общем задача решаема с помощью СКД, но результат тебе не понравится |
|||
12
1snik_d
28.04.21
✎
12:12
|
А самое приятное, что можно пользовать все плюшки СКД в виде отборов, группировок и т.д.
|
|||
13
1snik_d
28.04.21
✎
12:12
|
(11) Да он мне уже нравится. На рабочей базе скорость построения дерева в 10 раз быстрее, чем рекурсией
|
|||
14
1snik_d
28.04.21
✎
12:13
|
(11) Для того, чтобы в бесконечный цикл не падало, есть условия в связи наборов
|
|||
15
DrShad
28.04.21
✎
12:17
|
тебе из личного опыта рассказывают, а ты почему то думаешь, что именно у тебя все будет иначе)))
|
|||
16
1snik_d
28.04.21
✎
12:22
|
(15) А как лучше сделать, чтобы работало быстро?
|
|||
17
DrShad
28.04.21
✎
12:29
|
(16) см (8)
но самый прикол начнется когда ты будешь не просто получать разузловывание, а когда нужно будет посчитать на определенное количество |
|||
18
1snik_d
28.04.21
✎
12:32
|
(17) А в чем проблема, то, что у меня сейчас получилось в СКД считает на нужное количество, причем правильно на каждом уровне - проверил.
|
|||
19
DrShad
28.04.21
✎
12:39
|
(18) вот если сделаешь по списку продукции поймешь
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |