|
Своя иерархия в СКД | ☑ | ||
---|---|---|---|---|
0
Jokero
04.08.16
✎
08:32
|
Делаю дерево спецификаций. Разузлование делаю циклом, в итоге получаю таблицу вида:
Номенклатура - Владелец - ... Где номенклатура - сырье из спецификации, а владелец - это полуфабрикат. (На верхнем уровне для готовой продукции соответственно владелец пустой) Далее скармливаю эту таблицу в СКД. Там соединяю ее саму с собой, что бы СКД отлавливал иерархию для детальных записей. Все вроде бы норм, пока есть одно ГП. А если раскрывать несколько продуктов, то в них может быть один и тот же полуфабрикат, и его состав дублируется СКД в каждом владельце. Как бы так указать СКД для какого продукта идет сырье и полуфабрикаты, что бы она не дублировала их? |
|||
1
Jokero
04.08.16
✎
14:56
|
Все оказалось просто. Нужно было связывать не по ссылкам, которые могут повторяться в разных продуктах, а по индексам строк. Тоесть, использовать не ТЗ, а ТЧ. а у владельца указывать НомерСтрокиВладельца и так связывать.
|
|||
2
aleks_default
04.08.16
✎
15:05
|
Индексы тоже могут совпадать. Добавь еще одно поле - ссылку на ГП (передавать как параметр) и в связи сомой с собой добавить еще одну связь по ГП.
|
|||
3
aleks_default
04.08.16
✎
15:08
|
Хотя в СКД это не получится. Ерунду сказал
|
|||
4
Jokero
04.08.16
✎
15:15
|
(2) Индекс это типо номер строки в ТЧ. У одинаковых полуфабрикатов в разных ГП не может быть одинакового владельца номера строки.
Ссылку на ГП я тоже добавил, я ее использую, что бы зацикленность спецификаций обрабатывать. |
|||
5
ovrfox
04.08.16
✎
15:18
|
(4) Как ты решил вопрос зацикленности? Как проверяешь, что цикла нет?
|
|||
6
Jokero
04.08.16
✎
15:41
|
(5) Если в пределах ГП встречается строка у которой уже есть такой разузлованный полуфабрикат с таким владельцем, то эту номенклатуру не разузловываю дальше и пишу юзверю, что возможно зацикленность.
Отбор = новый Структура; Отбор.Вставить("Номенклатура", ТекЭлемент.Номенклатура); Отбор.Вставить("Владелец", ТекЭлемент.Владелец); Отбор.Вставить("ГП", ТекЭлемент.ГП); Если ИтогТЗ.НайтиСтроки(Отбор).Количество() > 1 тогда //Если кроме самой себя найдет еще одну такую же позицию Сообщить("При разузловании номенклатуры """ + ТекЭлемент.ГП + """ произошла зацикленность спецификации, полуфабрикат """ + ТекЭлемент.Номенклатура + """ не будет разузлован."); Иначе ...// разузловываем |
|||
7
aleks_default
04.08.16
✎
15:47
|
(3) Стоп. Так разузлование ты делаешь не в СКД? Ну тогда можно так сделать. Ну т. е. добавить поле ГП и передавать его в каждый вложенный узел. Ну а потом в СКД соединять по нему.
(5) решается просто ограничением на количество уровней вложенности. |
|||
8
DrZombi
гуру
04.08.16
✎
15:50
|
(1) Как замечательно. Вот и ответ нашелся :)
|
|||
9
Jokero
04.08.16
✎
15:56
|
(7) я бы хотел сделать разузлование запросом, но не представляю как это возможно.
Ограничение на количество уровней, хм, а это количество не фиксированно, может быть и 9 может и 15. А зацикливание может в 2-3 м быть, так и будет вся табица до 15 уровней повторяться, это не красиво. (8) Ага, ответ в (1) )), |
|||
10
aleks_default
04.08.16
✎
16:07
|
(9) "я бы хотел сделать разузлование запросом, но не представляю как это возможно" - а вот в СКД произвольная иерархия что делает по-твоему?
"Ограничение на количество уровней, хм, а это количество не фиксированно, может быть и 9 может и 15. А зацикливание может в 2-3 м быть, так и будет вся таблица до 15 уровней повторяться, это не красиво." - зацикленность может быть с любым шагом и через 5 и 10 уровней. Тут задача не в красивости, а в предотвращении падения сервера. А красивость пусть определяют те кто такую сецификацию создал. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |