|
Можно переписать запрос? | ☑ | ||
---|---|---|---|---|
0
St-Anger
22.03.19
✎
13:08
|
Можно ли переписать часть запроса, где идет связь по родителю?
ВЫБРАТЬ СкидкиНаценкиСегментНоменклатуры.Номенклатура, СкидкиНаценкиСегментНоменклатуры.Ссылка КАК СкидкаНаценка, ДействиеСкидокНаценокСрезПоследних.Период, ДействиеСкидокНаценокСрезПоследних.ТипЦен, ДействиеСкидокНаценокСрезПоследних.ДатаОкончания ПОМЕСТИТЬ вт ИЗ РегистрСведений.ДействиеСкидокНаценок.СрезПоследних( &Завтра, ДатаОкончания = &ПустаяДата ИЛИ КОНЕЦПЕРИОДА(ДатаОкончания, ДЕНЬ) >= &Завтра) КАК ДействиеСкидокНаценокСрезПоследних ПОЛНОЕ СОЕДИНЕНИЕ Справочник.СкидкиНаценки.СегментНоменклатуры КАК СкидкиНаценкиСегментНоменклатуры ПО ДействиеСкидокНаценокСрезПоследних.СкидкаНаценка = СкидкиНаценкиСегментНоменклатуры.Ссылка ГДЕ ДействиеСкидокНаценокСрезПоследних.СкидкаНаценка.СтатусДействия = &Действует ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ЗаказПокупателяТовары.Номенклатура ПОМЕСТИТЬ втЗаказы ИЗ Документ.ЗаказПокупателя.Товары КАК ЗаказПокупателяТовары ГДЕ ЗаказПокупателяТовары.Ссылка.Дата МЕЖДУ &Дата1 И &Дата2 И ЗаказПокупателяТовары.Ссылка.Проведен ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РАЗЛИЧНЫЕ вт.СкидкаНаценка КАК СкидкаНаценка ИЗ втЗаказы КАК втЗаказы ВНУТРЕННЕЕ СОЕДИНЕНИЕ вт КАК вт ПО (ВЫБОР КОГДА вт.Номенклатура = втЗаказы.Номенклатура ИЛИ вт.Номенклатура = втЗаказы.Номенклатура.Родитель ИЛИ вт.Номенклатура = втЗаказы.Номенклатура.Родитель.Родитель ИЛИ вт.Номенклатура = втЗаказы.Номенклатура.Родитель.Родитель.Родитель ИЛИ вт.Номенклатура = втЗаказы.Номенклатура.Родитель.Родитель.Родитель.Родитель ИЛИ вт.Номенклатура = втЗаказы.Номенклатура.Родитель.Родитель.Родитель.Родитель.Родитель ИЛИ вт.Номенклатура = втЗаказы.Номенклатура.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель ИЛИ вт.Номенклатура = втЗаказы.Номенклатура.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель ИЛИ вт.Номенклатура = втЗаказы.Номенклатура.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель ИЛИ вт.Номенклатура = втЗаказы.Номенклатура.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель ИЛИ вт.Номенклатура = втЗаказы.Номенклатура.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель ТОГДА ИСТИНА КОНЕЦ) |
|||
1
St-Anger
22.03.19
✎
13:11
|
В скидках номенклатура может быть как элементом так и группой и нужно понять, входит ли номенклатура в заказе в номенклатуру в скидках.
|
|||
2
H A D G E H O G s
22.03.19
✎
13:11
|
Милота какая
|
|||
3
St-Anger
22.03.19
✎
13:12
|
(2) да не то слово, но пока ничего умнее не придумал((
|
|||
4
НЕА123
22.03.19
✎
13:28
|
В ИЕРАРХИИ
? |
|||
5
Buster007
22.03.19
✎
13:30
|
возьми самый верхний уровень из справочника номенклатуры, определи в каком из них лежит номенклатура втЗаказы.Номенклатура, и потом сделаешь в Иерархии 1 элемент верхнего уровня
|
|||
6
palsergeich
22.03.19
✎
13:35
|
(0) можно, переписывать.
|
|||
7
Garykom
гуру
22.03.19
✎
13:36
|
Если "вт" сделать правильную (перебрать группы верхнего уровня и все подчиненные засунуть) то можно.
|
|||
8
sqr4
22.03.19
✎
13:37
|
(4) (5) не работает виерархии в связи помоему
|
|||
9
palsergeich
22.03.19
✎
13:38
|
(8) В иерархии на связь таблиц уже звучит не очень
|
|||
10
AquaMan
22.03.19
✎
13:39
|
В ИЕРАРХИИ тут не поможет. Подключаешь менеджер ВТ и в цикле заполняешь таблицу вт, на каждого родителя в этой таблице будет по записи.
|
|||
11
Сияющий в темноте
22.03.19
✎
13:39
|
Кстати вопрос
если в группу А вложена группа Б товар в группе Б скидка 1 на группу А,а скидка 2 на группу Б то какая скидка в товаре должна сработать? просто,выбрать номенклатуру из заказа и определить для нее всевозможные скидки,потом выбрать одну и добавить в результирующую таблицу. я для скидок на группы делал регистр сведений,где скидки для элементов автоматом задавались по группам,и можно было во Фронтол без иерархии выгружать. |
|||
12
sqr4
22.03.19
✎
13:42
|
http://catalog.mista.ru/public/158512/
Транзитивное замыкание запросом |
|||
13
St-Anger
22.03.19
✎
13:43
|
Хотелось все сделать одним запросом. Не будет ли менеджер ВТ отрабатывать дольше, чем текущий запрос?
|
|||
14
arsik
гуру
22.03.19
✎
13:44
|
(11) Я так понимаю, что чем глубже уровень, тем больше приоритет. У нас такие запросы тоже используются и для справочника номенклатура добавлен реквизит "Уровень", хранит уровень вложенности элемента.
|
|||
15
sqr4
22.03.19
✎
13:44
|
+(12) наверно с помощью этого можно определить всех родителей элемента, а уж потом соединиться по нормальному.
|
|||
16
St-Anger
22.03.19
✎
13:51
|
(11) на этом первом этапе нужно просто понять, какие скидки могут быть применины для данного заказа. Потом идет уже более глубокий расчет.
|
|||
17
St-Anger
22.03.19
✎
13:57
|
(12) если уже городить такое, то мне кажется легче сделать выборку номенклатуры с заказа с итогами по иерархии и засунуть ее опять в запрос как таблицу.
|
|||
18
sqr4
22.03.19
✎
14:01
|
+ (12) тут как я понял уже решено.
https://forum.infostart.ru/forum9/topic125683/#message1306905 |
|||
19
sqr4
22.03.19
✎
14:03
|
(17) ты уже нагородил, дольше этого работать ничего точно не будет
|
|||
20
sqr4
22.03.19
✎
14:03
|
+(19) хотя я не проверял
|
|||
21
St-Anger
22.03.19
✎
14:05
|
(20) не хилый такой запросик выростает. И все таки чем он лучше, чем связь по родителю, если известно количество уровней? Быстрее будет работать?
|
|||
22
vi0
22.03.19
✎
14:15
|
(17) на самом деле там не сильно и сложно, ты попробуй
просто у автора статьи склонность использовать непонятные слова и писать нечитабельный код |
|||
23
St-Anger
22.03.19
✎
14:19
|
(22) Уже разобрался, сначала подумал, что нужно запрос собирать циклом, но спасибо (18) тут готовое решение.
Спасибо! |
|||
24
sqr4
22.03.19
✎
14:20
|
(21) Проверяй на своих данных, я не эксперементировал. ПРосто если нужен голый запрос, то это явно лучше чем в (0)
|
|||
25
St-Anger
22.03.19
✎
14:39
|
(24) Проверил, отрабатывает намного дольше, чем через родителя. Видно даже без замеров.Причем оставил глубину иерархии 16.
|
|||
26
sqr4
22.03.19
✎
14:44
|
(25) пали сюда запрос
|
|||
27
St-Anger
22.03.19
✎
14:59
|
ВЫБРАТЬ
Номенклатура.Родитель КАК НачалоДуги, Номенклатура.Ссылка КАК КонецДуги ПОМЕСТИТЬ ЗамыканияДлины1 ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.Родитель <> ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка) ОБЪЕДИНИТЬ ВЫБРАТЬ Номенклатура.Ссылка, Номенклатура.Ссылка ИЗ Справочник.Номенклатура КАК Номенклатура ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РАЗЛИЧНЫЕ ПерваяДуга.НачалоДуги, ВтораяДуга.КонецДуги ПОМЕСТИТЬ ЗамыканияДлины2 ИЗ ЗамыканияДлины1 КАК ПерваяДуга ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЗамыканияДлины1 КАК ВтораяДуга ПО ПерваяДуга.КонецДуги = ВтораяДуга.НачалоДуги ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РАЗЛИЧНЫЕ ПерваяДуга.НачалоДуги, ВтораяДуга.КонецДуги ПОМЕСТИТЬ ЗамыканияДлины4 ИЗ ЗамыканияДлины2 КАК ПерваяДуга ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЗамыканияДлины2 КАК ВтораяДуга ПО ПерваяДуга.КонецДуги = ВтораяДуга.НачалоДуги ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РАЗЛИЧНЫЕ ПерваяДуга.НачалоДуги, ВтораяДуга.КонецДуги ПОМЕСТИТЬ ЗамыканияДлины8 ИЗ ЗамыканияДлины4 КАК ПерваяДуга ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЗамыканияДлины4 КАК ВтораяДуга ПО ПерваяДуга.КонецДуги = ВтораяДуга.НачалоДуги ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РАЗЛИЧНЫЕ ПерваяДуга.НачалоДуги, ВтораяДуга.КонецДуги ПОМЕСТИТЬ ЗамыканияДлины16 ИЗ ЗамыканияДлины8 КАК ПерваяДуга ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЗамыканияДлины8 КАК ВтораяДуга ПО ПерваяДуга.КонецДуги = ВтораяДуга.НачалоДуги ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РАЗЛИЧНЫЕ ЗаказПокупателяТовары.Номенклатура ПОМЕСТИТЬ втЗаказы ИЗ Документ.ЗаказПокупателя.Товары КАК ЗаказПокупателяТовары ГДЕ ЗаказПокупателяТовары.Ссылка.Дата МЕЖДУ &Дата1 И &Дата2 И ЗаказПокупателяТовары.Ссылка.Проведен ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РАЗЛИЧНЫЕ СкидкиНаценкиСегментНоменклатуры.Номенклатура, СкидкиНаценкиСегментНоменклатуры.Ссылка КАК СкидкаНаценка, ДействиеСкидокНаценокСрезПоследних.Период, ДействиеСкидокНаценокСрезПоследних.ТипЦен, ДействиеСкидокНаценокСрезПоследних.ДатаОкончания ИЗ РегистрСведений.ДействиеСкидокНаценок.СрезПоследних( &Завтра, ДатаОкончания = &ПустаяДата ИЛИ КОНЕЦПЕРИОДА(ДатаОкончания, ДЕНЬ) >= &Завтра) КАК ДействиеСкидокНаценокСрезПоследних ПОЛНОЕ СОЕДИНЕНИЕ Справочник.СкидкиНаценки.СегментНоменклатуры КАК СкидкиНаценкиСегментНоменклатуры ЛЕВОЕ СОЕДИНЕНИЕ ЗамыканияДлины16 КАК ЗамыканияДлины16 ПО СкидкиНаценкиСегментНоменклатуры.Номенклатура = ЗамыканияДлины16.НачалоДуги ПО ДействиеСкидокНаценокСрезПоследних.СкидкаНаценка = СкидкиНаценкиСегментНоменклатуры.Ссылка ГДЕ ДействиеСкидокНаценокСрезПоследних.СкидкаНаценка.СтатусДействия = &Действует |
|||
28
St-Anger
22.03.19
✎
15:00
|
Это даже без выборки номенклатуры с заказа. Но там будет разница минимальная т.к. это тестовая база и там всего 3 акции,а с заказа выбирает 2.
|
|||
29
тарам пам пам
22.03.19
✎
15:07
|
(27) у ильдаровича строится по сути полная таблица по всему справочнику, кто кому подчинен => из-за этого и тормозит. Проверь в консоли размер таблицы ЗамыканияДлины16. Чтобы оно шевелилось, как минимум нужно добавить индекс по номенклатуре в таблицу ЗамыканияДлины16.
|
|||
30
sqr4
22.03.19
✎
15:08
|
да может сначала все же номенклатуру из заказов получить?
|
|||
31
sqr4
22.03.19
✎
15:08
|
а потом ограничить получение родителей по ней?
|
|||
32
sqr4
22.03.19
✎
15:09
|
вообщем дело не в бобине
|
|||
33
St-Anger
22.03.19
✎
15:10
|
(32) да, уже понял, что не с той таблицей связал. Сейчас с заказами пробую связать.
|
|||
34
St-Anger
22.03.19
✎
15:25
|
Вот так работает. Сначала ограничиваем номенклатуру для построения родителей, а потом уже связываем основную таблицу по номенклатуре.
ВЫБРАТЬ РАЗЛИЧНЫЕ ЗаказПокупателяТовары.Номенклатура ПОМЕСТИТЬ втЗаказы ИЗ Документ.ЗаказПокупателя.Товары КАК ЗаказПокупателяТовары ГДЕ ЗаказПокупателяТовары.Ссылка.Дата МЕЖДУ &Дата1 И &Дата2 И ЗаказПокупателяТовары.Ссылка.Проведен ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Номенклатура.Родитель КАК НачалоДуги, Номенклатура.Ссылка КАК КонецДуги ПОМЕСТИТЬ ЗамыканияДлины1 ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.Родитель <> ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка) И Номенклатура.Ссылка В (ВЫБРАТЬ втЗаказы.Номенклатура ИЗ втЗаказы) ОБЪЕДИНИТЬ ВЫБРАТЬ Номенклатура.Ссылка, Номенклатура.Ссылка ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.Ссылка В (ВЫБРАТЬ втЗаказы.Номенклатура ИЗ втЗаказы) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РАЗЛИЧНЫЕ ПерваяДуга.НачалоДуги, ВтораяДуга.КонецДуги ПОМЕСТИТЬ ЗамыканияДлины2 ИЗ ЗамыканияДлины1 КАК ПерваяДуга ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЗамыканияДлины1 КАК ВтораяДуга ПО ПерваяДуга.КонецДуги = ВтораяДуга.НачалоДуги ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РАЗЛИЧНЫЕ ПерваяДуга.НачалоДуги, ВтораяДуга.КонецДуги ПОМЕСТИТЬ ЗамыканияДлины4 ИЗ ЗамыканияДлины2 КАК ПерваяДуга ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЗамыканияДлины2 КАК ВтораяДуга ПО ПерваяДуга.КонецДуги = ВтораяДуга.НачалоДуги ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РАЗЛИЧНЫЕ ПерваяДуга.НачалоДуги, ВтораяДуга.КонецДуги ПОМЕСТИТЬ ЗамыканияДлины8 ИЗ ЗамыканияДлины4 КАК ПерваяДуга ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЗамыканияДлины4 КАК ВтораяДуга ПО ПерваяДуга.КонецДуги = ВтораяДуга.НачалоДуги ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РАЗЛИЧНЫЕ ПерваяДуга.НачалоДуги, ВтораяДуга.КонецДуги ПОМЕСТИТЬ ЗамыканияДлины16 ИЗ ЗамыканияДлины8 КАК ПерваяДуга ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЗамыканияДлины8 КАК ВтораяДуга ПО ПерваяДуга.КонецДуги = ВтораяДуга.НачалоДуги ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РАЗЛИЧНЫЕ СкидкиНаценкиСегментНоменклатуры.Номенклатура, СкидкиНаценкиСегментНоменклатуры.Ссылка КАК СкидкаНаценка, ДействиеСкидокНаценокСрезПоследних.Период, ДействиеСкидокНаценокСрезПоследних.ТипЦен, ДействиеСкидокНаценокСрезПоследних.ДатаОкончания ИЗ РегистрСведений.ДействиеСкидокНаценок.СрезПоследних( &Завтра, ДатаОкончания = &ПустаяДата ИЛИ КОНЕЦПЕРИОДА(ДатаОкончания, ДЕНЬ) >= &Завтра) КАК ДействиеСкидокНаценокСрезПоследних ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.СкидкиНаценки.СегментНоменклатуры КАК СкидкиНаценкиСегментНоменклатуры ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЗамыканияДлины16 КАК ЗамыканияДлины16 ПО СкидкиНаценкиСегментНоменклатуры.Номенклатура = ЗамыканияДлины16.НачалоДуги ПО ДействиеСкидокНаценокСрезПоследних.СкидкаНаценка = СкидкиНаценкиСегментНоменклатуры.Ссылка ГДЕ ДействиеСкидокНаценокСрезПоследних.СкидкаНаценка.СтатусДействия = &Действует |
|||
35
sqr4
22.03.19
✎
15:26
|
(34) НУ как норм? Пушка?
|
|||
36
St-Anger
22.03.19
✎
15:27
|
(35) ага, быстро отрабатывает. Спасибо!
|
|||
37
St-Anger
22.03.19
✎
15:44
|
Только нужно оставить условие только в одном подзапросе, иначе не все верхние группы выбирает
//////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Номенклатура.Родитель КАК НачалоДуги, Номенклатура.Ссылка КАК КонецДуги ПОМЕСТИТЬ ЗамыканияДлины1 ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.Родитель <> ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка) ОБЪЕДИНИТЬ ВЫБРАТЬ Номенклатура.Ссылка, Номенклатура.Ссылка ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.Ссылка В (ВЫБРАТЬ втЗаказы.Номенклатура ИЗ втЗаказы) ; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |