|
|
|
Оч. сложный запрос.
|
|||
|---|---|---|---|
|
#18+
Не могу почему то додумать как сделать Есть справочник "Номенклатура" с иерархией: Например: Продукция -Телевизоры --Sony --- Sony TV100 -Холодильники --Indesit --- хххххх Есть справочник "Ассортимент" В нем табличная часть с группами номенклатуры (Указываются папки номенклатуры) Например: Полный (в табл. части группа номенклатуры "Продукция"); Телевизоры (в табл. части группа номенклатуры "Холодильники"); Как в запросе получить табличку вида: Ассортимент | Номенклатура ======================= Полный | Sony TV100 Полный | хххххх Телевизоры | Sony TV100 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2010, 11:20 |
|
||
|
Оч. сложный запрос.
|
|||
|---|---|---|---|
|
#18+
Прежде всего - иерархия элементов или групп и элементов? tinijiНапример: Полный (в табл. части группа номенклатуры "Продукция"); Телевизоры (в табл. части группа номенклатуры "Холодильники"); Т.е. если там верхнего уровня ("Продукция"), то выводиться должны только самого нижнего уровня? С телевизорами, которые холодильники, вроде ясно, хотя смущает такое описание. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2010, 11:33 |
|
||
|
Оч. сложный запрос.
|
|||
|---|---|---|---|
|
#18+
Иерархический справочник "Номенклатура" в УТ 10.3 В результате нужны только элементы номенклатуры. Примерно так решил пока что: Берется максимальный уровень группы, например 5 И идет левое соединение Ассортимента с Номенклатурой по Ассортимент.Группа = Номенклатура.Ссылка.Родитель ИЛИ Ассортимент.Группа = Номенклатура.Ссылка.Родитель.Родитель ИЛИ Ассортимент.Группа = Номенклатура.Ссылка.Родитель.Родитель.Родитель .................. и так N раз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2010, 17:09 |
|
||
|
Оч. сложный запрос.
|
|||
|---|---|---|---|
|
#18+
tinijiИерархический справочник "Номенклатура" в УТ 10.3По конфигурациям я не спец, на голой платформе ваяю. Таки элементов, судя по ниженаписанному. Так и не ответил на вопрос, что должно выводиться. То ли только самые нижние листья, то ли вся иерархия... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2010, 17:25 |
|
||
|
Оч. сложный запрос.
|
|||
|---|---|---|---|
|
#18+
WildSery, Как не ответил ? Нужны только элементы номенклатуры в итоге. Иерархия не нужна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2010, 09:59 |
|
||
|
Оч. сложный запрос.
|
|||
|---|---|---|---|
|
#18+
tinijiНужны только элементы номенклатуры в итоге. Иерархия не нужна.Значит, правильным путём идёшь. PS: Мне скрытые соединения не нравятся, предпочитаю сам 5 раз LEFT JOIN написать, чем через точку Родитель.Родитель.Родитель. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2010, 11:22 |
|
||
|
Оч. сложный запрос.
|
|||
|---|---|---|---|
|
#18+
WildSery, Насколько я понял,в справочнике "номенклатура" иерархия групп и элементов, в справочнике "ассортимент" прописаны ссылки только на группы номенклатуры, нужно вывести элементы. tiniji, Вариант все равно не нравится... Количество уровней может измениться.. Можно конечно извернуться: 1). Создаем таблицу вида (Верхний уровень иерархии| ГруппыНоменклатуры) Для заполнения получать запросом все группы с итогами по иерархии (только иерархия), и сначала делаем обход по группировкам (получаем верхний уровень) а далее в прямом обходе заполняем строки нашей таблицы. 2) Передаем в запрос нашу таблицу параметром, и получаем что нам нужно: Ассортимент -left join- НашаТаблица - Left join - Номенклатура (элементы). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2010, 11:27 |
|
||
|
Оч. сложный запрос.
|
|||
|---|---|---|---|
|
#18+
По времени конечно чуть дольше будет, но все равно быстрее чем лепить левое соединение н раз (особенно если н достаточно большое) и, главное, решение универсально - при увеличении макс. уровня вложенности номенклатуры будет так же работать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2010, 11:31 |
|
||
|
Оч. сложный запрос.
|
|||
|---|---|---|---|
|
#18+
Косяк за собой заметил: Ассортимент -left join- НашаТаблица - Inner join - Номенклатура (элементы) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2010, 14:26 |
|
||
|
Оч. сложный запрос.
|
|||
|---|---|---|---|
|
#18+
1C никКоличество уровней может измениться.. В устоявшейся структуре как правило нет. Если "впрок", можно ещё один уровень докинуть заранее. 1C ник1). Создаем таблицу вида (Верхний уровень иерархии| ГруппыНоменклатуры) Для заполнения получать запросом все группы с итогами по иерархии (только иерархия), и сначала делаем обход по группировкам (получаем верхний уровень) а далее в прямом обходе заполняем строки нашей таблицы.Не понял, как тебе поможет эта таблица. Судя по идее, ты хочешь сделать дерево полносвязным (или как там оно называется), т.е. для каждого потомка перечислить всех родителей. Это будет таблица, большая справочника Номенклатура, следовательно, сомневаюсь, что будет быстрее чем 5-6 левых соединений, особенно с учётом того, что эту "вспомогательную" таблицу нужно ещё построить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2010, 18:54 |
|
||
|
Оч. сложный запрос.
|
|||
|---|---|---|---|
|
#18+
WildSeryНе понял, как тебе поможет эта таблица. Судя по идее, ты хочешь сделать дерево полносвязным (или как там оно называется), т.е. для каждого потомка перечислить всех родителей. Это будет таблица, большая справочника Номенклатура, следовательно, сомневаюсь, что будет быстрее чем 5-6 левых соединений, особенно с учётом того, что эту "вспомогательную" таблицу нужно ещё построить. В том то и дело, что не для каждого потомка всех родителей. А для каждой группы всех родителей - количество групп в любом случае << количества элементов. Обход ее (для "строительства" новой ТЧ) соответственно много времени не займет. И далее у нас есть таблица ВерхнийРодитель| Родитель, которую по полю Родитель мы связываем внутренним соединением с номенклатурой (нашаТЧ.Родитель = Номенклатура.Родитель) и все это лепим левым соединением к ассортименту (ПО Ассортимент.ГруппаТоваров = Номенклатура.Родитель). Если задуматься, решение вполне себе красиво:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2010, 13:32 |
|
||
|
Оч. сложный запрос.
|
|||
|---|---|---|---|
|
#18+
1C ник, Составление этой "вспомогательной" таблицы эквивалентно тем же самым нескольким левым соединениям. Даже левые соединения (по уникальному индексу-то) побыстрее будут, потому как работа только сиквела, никаких обходов и циклов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2010, 15:38 |
|
||
|
Оч. сложный запрос.
|
|||
|---|---|---|---|
|
#18+
если у нас около 100 групп и 20 000 номенклатурных позиций с макс вложенностью 5 (закладываем еще 1 про запас - получаем 6), то обход всей этой таблицы 6 раз (для всех соединений) вряд ли будет дюже быстрым... А в целом, тут нужно в каждом конкретном случае смотреть замером производительности. В любом случае, каждое решение имеет право на жизнь - в данном случае, жертвуя быстродействием (не факт, не везде), мы получаем универсальность. В общем, оба решения имеют право на жизнь, заканчиваем холивар. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2010, 17:40 |
|
||
|
Оч. сложный запрос.
|
|||
|---|---|---|---|
|
#18+
да. В нашем случае будет формирование сиквелом таблицы в 100 срок (одно обращение к данным). Дальше обход 100 строк средствами 1С. И далее запросом соединение ассортимента с 2-мя соединенными внутренним соединением по уникальному полю таблицами на 100 и 20 000 элементов средствами сиквела. В Вашем же случае будет соединение ассортимента с 6-ю соединенными левыми соединением по уникальному полю таблицами на 20 000 элементов средствами сиквела... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2010, 17:49 |
|
||
|
Оч. сложный запрос.
|
|||
|---|---|---|---|
|
#18+
1C никВ Вашем же случае будет соединение ассортимента с 6-ю соединенными левыми соединением по уникальному полю таблицами на 20 000 элементов средствами сиквела...Хм... Начну издалека. Вы знаете, что такое индексы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2010, 18:02 |
|
||
|
Оч. сложный запрос.
|
|||
|---|---|---|---|
|
#18+
WildSery, Спасибо, кэп! Знаю. Смею предположить, что следующий вопрос будет о использовании join по индексируемым полям таблицы.. Как уже писал, холивар закончим. В любом случае, проверять нужно в каждом конкретном случае замером производительности на своей БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2010, 10:04 |
|
||
|
Оч. сложный запрос.
|
|||
|---|---|---|---|
|
#18+
1С никКак уже писал, холивар закончим.Где тут холивар? Вы написали явную чепуху, что мол вся таблица будет задействована. С помощью индексного соединения будут отобраны только результирующие записи, подходящие под условие, и никак иначе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2010, 11:00 |
|
||
|
|

start [/forum/topic.php?fid=28&msg=36779983&tid=1522120]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
29ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
67ms |
get tp. blocked users: |
2ms |
| others: | 228ms |
| total: | 370ms |

| 0 / 0 |
