|
Можно ли как-то такое оптимизировать? | ☑ | ||
---|---|---|---|---|
0
al_zzz
21.02.12
✎
19:46
|
Задача - получить динамику по магазинам группы и ещё много всего.
Получил такую громоздкую конструкцию пакетных запросов, но из песни слово не выкинешь. Прошу сразу ногами не пинать, так как впрограммирую на снеговике две недели. ТекстЗапроса = "ВЫБРАТЬ | Склады.Ссылка КАК Ссылка, | Склады.Родитель КАК Родитель |ПОМЕСТИТЬ ПодСкладОтдел |ИЗ | Справочник.Склады КАК Склады |ГДЕ | (НЕ Склады.ПометкаУдаления) | И (НЕ Склады.ЭтоГруппа) |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ПодСкладОтдел.Ссылка КАК Отдел, | ВЫБОР | КОГДА ПодСкладОтдел.Родитель.Родитель.ЭтоГруппа | ТОГДА ПодСкладОтдел.Родитель.Родитель | ИНАЧЕ ПодСкладОтдел.Родитель | КОНЕЦ КАК Склад |ПОМЕСТИТЬ ВТ_Склад |ИЗ | ПодСкладОтдел КАК ПодСкладОтдел | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Склады КАК Склады | ПО ПодСкладОтдел.Родитель = Склады.Ссылка |{ГДЕ | ПодСкладОтдел.Ссылка.*} |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВТ_Склад.Отдел КАК Отдел, | ВТ_Склад.Склад КАК Склад |ПОМЕСТИТЬ СкладОтдел |{ВЫБРАТЬ | Отдел.*, | Склад.*} |ИЗ | ВТ_Склад КАК ВТ_Склад |ГДЕ | ВТ_Склад.Склад = &РозничныйСклад |{ГДЕ | ВТ_Склад.Склад.* КАК РозничныйСклад} |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗЛИЧНЫЕ | ТоварыВРезервеНаСкладахОстатки.Номенклатура КАК Номенклатура, | ТоварыНаСкладахОстатки.КоличествоОстаток - ЕСТЬNULL(ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток, 0) КАК ОстатокОПТ |ПОМЕСТИТЬ ОстатокОПТ_3 |{ВЫБРАТЬ | Номенклатура.*, | ОстатокОПТ} |ИЗ | РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки КАК ТоварыВРезервеНаСкладахОстатки | ПО ТоварыНаСкладахОстатки.Номенклатура = ТоварыВРезервеНаСкладахОстатки.Номенклатура |ГДЕ | ТоварыВРезервеНаСкладахОстатки.Склад = &СкладОПТ | И ТоварыНаСкладахОстатки.Склад = &СкладОПТ | И ТоварыНаСкладахОстатки.КоличествоОстаток > ЕСТЬNULL(ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток, 0) |{ГДЕ | ТоварыВРезервеНаСкладахОстатки.Склад КАК СкладОПТ, | ТоварыНаСкладахОстатки.Склад КАК СкладОПТ} |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗЛИЧНЫЕ | ТоварыНаСкладахОстатки.Номенклатура, | СкладОтдел.Склад, | ТоварыНаСкладахОстатки.КоличествоОстаток - ЕСТЬNULL(ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток, 0) КАК ОстатокРОЗН |ПОМЕСТИТЬ ОстатокРОЗН_4 |{ВЫБРАТЬ | ОстатокРОЗН} |ИЗ | РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки КАК ТоварыВРезервеНаСкладахОстатки | ПО ТоварыНаСкладахОстатки.Номенклатура = ТоварыВРезервеНаСкладахОстатки.Номенклатура | И ТоварыНаСкладахОстатки.Склад = ТоварыВРезервеНаСкладахОстатки.Склад | ЛЕВОЕ СОЕДИНЕНИЕ СкладОтдел КАК СкладОтдел | ПО ТоварыНаСкладахОстатки.Склад = СкладОтдел.Отдел |{ГДЕ | ТоварыВРезервеНаСкладахОстатки.Склад КАК СкладОПТ, | ТоварыНаСкладахОстатки.Склад КАК СкладОПТ} |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗЛИЧНЫЕ | НоменклатураНормы.Ссылка КАК Ссылка, | НоменклатураНормы.Склад КАК Склад, | НоменклатураНормы.Норма КАК Норма, | НоменклатураНормы.ОптимальнаяНорма КАК ОптимальнаяНорма |ПОМЕСТИТЬ НоменклатураСкладНорма_2 |{ВЫБРАТЬ | Ссылка.*, | Склад.*, | Норма, | ОптимальнаяНорма} |ИЗ | Справочник.Номенклатура.Нормы КАК НоменклатураНормы | ВНУТРЕННЕЕ СОЕДИНЕНИЕ СкладОтдел КАК СкладОтдел | ПО НоменклатураНормы.Склад = СкладОтдел.Склад |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | НоменклатураСкладНорма_2.Ссылка, | НоменклатураСкладНорма_2.Склад, | НоменклатураСкладНорма_2.Норма, | НоменклатураСкладНорма_2.ОптимальнаяНорма, | ОстатокОПТ_3.ОстатокОПТ, | ОстатокРОЗН_4.ОстатокРОЗН |ИЗ | НоменклатураСкладНорма_2 КАК НоменклатураСкладНорма_2 | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ОстатокОПТ_3 КАК ОстатокОПТ_3 | ПО НоменклатураСкладНорма_2.Ссылка = ОстатокОПТ_3.Номенклатура | ЛЕВОЕ СОЕДИНЕНИЕ ОстатокРОЗН_4 КАК ОстатокРОЗН_4 | ПО НоменклатураСкладНорма_2.Ссылка = ОстатокРОЗН_4.Номенклатура | И НоменклатураСкладНорма_2.Склад = ОстатокРОЗН_4.Склад"; Иначе //Получаем данные по динамике на розничном складе ТекстЗапроса = "ВЫБРАТЬ | СкладОтдел.Отдел КАК Склад, | НоменклатураСкладНорма_2.Ссылка КАК Номенклатура |ПОМЕСТИТЬ ТЗНоменклатур |ИЗ | НоменклатураСкладНорма_2 КАК НоменклатураСкладНорма_2, | СкладОтдел КАК СкладОтдел |; |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ТЗНоменклатур.Склад, | ТЗНоменклатур.Номенклатура, | t.Дата |ПОМЕСТИТЬ ТаблицаДата |ИЗ | (ВЫБРАТЬ | ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕНЬ, aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d) КАК Дата | {ВЫБРАТЬ | Дата} | ИЗ | (ВЫБРАТЬ | 0 КАК a | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 1 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 2 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 3 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 4 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 5 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 6 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 7 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 8 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 9) КАК aa | ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | 0 КАК b | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 1 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 2 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 3 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 4 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 5 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 6 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 7 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 8 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 9) КАК bb | ПО (ИСТИНА) | ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | 0 КАК c | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 1 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 2 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 3 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 4 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 5 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 6 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 7 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 8 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 9) КАК cc | ПО (ИСТИНА) | ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | 0 КАК d | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 1 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 2 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 3 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 4 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 5 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 6 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 7 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 8 | | ОБЪЕДИНИТЬ | | ВЫБРАТЬ | 9) КАК dd | ПО (ИСТИНА) | ГДЕ | aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ)) КАК t, | ТЗНоменклатур КАК ТЗНоменклатур |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВложенныйЗапрос.Склад, | ВложенныйЗапрос.Номенклатура, | ВложенныйЗапрос.НачалоПериода КАК НачалоПериода, | МАКСИМУМ(ВложенныйЗапрос.Количество) КАК Количество |ПОМЕСТИТЬ Остатки |ИЗ | (ВЫБРАТЬ | КОНЕЦПЕРИОДА(&НачалоПериода, ДЕНЬ) КАК НачалоПериода, | ТоварыНаСкладахОстатки.Склад КАК Склад, | ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура, | ТоварыНаСкладахОстатки.КоличествоОстаток КАК Количество | ИЗ | РегистрНакопления.ТоварыНаСкладах.Остатки(&НачалоПериода, ) КАК ТоварыНаСкладахОстатки | | ОБЪЕДИНИТЬ ВСЕ | | ВЫБРАТЬ | НАЧАЛОПЕРИОДА(ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ), | ТоварыНаСкладахОстаткиИОбороты.Склад, | ТоварыНаСкладахОстаткиИОбороты.Номенклатура, | ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток | ИЗ | РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, День, , ) КАК ТоварыНаСкладахОстаткиИОбороты) КАК ВложенныйЗапрос | |СГРУППИРОВАТЬ ПО | ВложенныйЗапрос.НачалоПериода, | ВложенныйЗапрос.Номенклатура, | ВложенныйЗапрос.Склад |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Остатки.НачалоПериода, | МИНИМУМ(ДОБАВИТЬКДАТЕ(ЕСТЬNULL(ОстаткиКонец.НачалоПериода, ДОБАВИТЬКДАТЕ(&КонецПериода, СЕКУНДА, 1)), СЕКУНДА, -1)) КАК КонецПериода, | Остатки.Склад, | Остатки.Номенклатура, | Остатки.Количество |ПОМЕСТИТЬ ОстаткиПериодами |ИЗ | Остатки КАК Остатки | ЛЕВОЕ СОЕДИНЕНИЕ Остатки КАК ОстаткиКонец | ПО Остатки.Номенклатура = ОстаткиКонец.Номенклатура | И Остатки.НачалоПериода < ОстаткиКонец.НачалоПериода | |СГРУППИРОВАТЬ ПО | Остатки.НачалоПериода, | Остатки.Номенклатура, | Остатки.Количество, | Остатки.Склад |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ТаблицаДата.Дата, | ТаблицаДата.Склад КАК Склад, | ТаблицаДата.Номенклатура КАК Номенклатура, | ВЫБОР | КОГДА ЕСТЬNULL(ОстаткиПериодами.Количество, 0) > 0 | ТОГДА 1 | ИНАЧЕ 0 | КОНЕЦ КАК Количество |ПОМЕСТИТЬ ОстаткиПоОтделамПоДням |ИЗ | ТаблицаДата КАК ТаблицаДата | ЛЕВОЕ СОЕДИНЕНИЕ ОстаткиПериодами КАК ОстаткиПериодами | ПО ТаблицаДата.Номенклатура = ОстаткиПериодами.Номенклатура | И (ТаблицаДата.Дата МЕЖДУ ОстаткиПериодами.НачалоПериода И ОстаткиПериодами.КонецПериода) | И ТаблицаДата.Склад = ОстаткиПериодами.Склад |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ОстаткиПоОтделамПоДням.Склад, | ОстаткиПоОтделамПоДням.Номенклатура, | СУММА(ОстаткиПоОтделамПоДням.Количество) КАК Количество |ПОМЕСТИТЬ ДниВНаличииПоСкладам |ИЗ | ОстаткиПоОтделамПоДням КАК ОстаткиПоОтделамПоДням | |СГРУППИРОВАТЬ ПО | ОстаткиПоОтделамПоДням.Склад, | ОстаткиПоОтделамПоДням.Номенклатура |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ПродажиОбороты.Номенклатура, | СУММА(ПродажиОбороты.КоличествоОборот) КАК Продажа, | ПродажиОбороты.ДокументПродажи.Склад КАК Склад |ПОМЕСТИТЬ ПродажиПоСкладам |ИЗ | РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, , ) КАК ПродажиОбороты | ВНУТРЕННЕЕ СОЕДИНЕНИЕ СкладОтдел КАК ВТ_Склад | ПО ПродажиОбороты.ДокументПродажи.Склад = ВТ_Склад.Отдел | |СГРУППИРОВАТЬ ПО | ПродажиОбороты.Номенклатура, | ПродажиОбороты.ДокументПродажи.Склад |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ДниВНаличииПоСкладам.Номенклатура, | ДниВНаличииПоСкладам.Склад, | IsNull(ПродажиПоСкладам.Продажа, 0) КАК Продажа, | ДниВНаличииПоСкладам.Количество |ПОМЕСТИТЬ ИтогБезЦен |ИЗ | ДниВНаличииПоСкладам КАК ДниВНаличииПоСкладам | ЛЕВОЕ СОЕДИНЕНИЕ ПродажиПоСкладам КАК ПродажиПоСкладам | ПО ДниВНаличииПоСкладам.Склад = ПродажиПоСкладам.Склад | И ДниВНаличииПоСкладам.Номенклатура = ПродажиПоСкладам.Номенклатура |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ЦеныНоменклатурыСрезПоследних.Номенклатура, | СРЕДНЕЕ(ЦеныНоменклатурыСрезПоследних.Цена) КАК Цена |ПОМЕСТИТЬ Цены |ИЗ | РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних |ГДЕ | ЦеныНоменклатурыСрезПоследних.ТипЦен = &ТипЦен | |СГРУППИРОВАТЬ ПО | ЦеныНоменклатурыСрезПоследних.Номенклатура |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ИтогБезЦен.Номенклатура КАК Номенклатура, | ИтогБезЦен.Склад КАК Склад, | ИтогБезЦен.Продажа КАК Продажа, | ИтогБезЦен.Количество КАК ДнейВНаличии, | ВЫБОР КОГДА ИтогБезЦен.Количество=0 ТОГДА 0 | ИНАЧЕ ИтогБезЦен.Продажа/ИтогБезЦен.Количество | КОНЕЦ КАК Динамика, | Цены.Цена |ИЗ | ИтогБезЦен КАК ИтогБезЦен | ЛЕВОЕ СОЕДИНЕНИЕ Цены КАК Цены | ПО ИтогБезЦен.Номенклатура = Цены.Номенклатура |ГДЕ ИтогБезЦен.Продажа<>0 И ИтогБезЦен.Количество<>0 |УПОРЯДОЧИТЬ ПО | Номенклатура, | Склад"; |
|||
1
PR
21.02.12
✎
19:47
|
Взрыв мозга
|
|||
2
simol
21.02.12
✎
19:48
|
(0) Берешь консоль от TormozIT и смотришь какой подзапрос больше тормозит, его и ускоряешь
|
|||
3
BOZKURT
21.02.12
✎
19:50
|
(0) пожалей наш и без того измученный мозх..
|
|||
4
Aleks73
21.02.12
✎
19:51
|
(0) Чё сказать-то хотел ?
Можно ли оптимизировать ? Я не знаю как остальные, но лично я не возражаю. |
|||
5
al_zzz
21.02.12
✎
20:06
|
(1) Во-во мой тоже взорвался, когда такое выдал. :-)
(4) Я рад. |
|||
6
al_zzz
21.02.12
✎
20:07
|
На клюшках для подсчета дней в наличии имелось очень элегантное решение. К сожалению, для 1с8 оно не подходит.
|
|||
7
Doomer
21.02.12
✎
20:08
|
(5)Не нужно ничего оптимизировать. Этот запрос нужно отправить в 1С в отдел разрабатывающий типовые конфы. Это будет для них образец какие запросы нужно клипать, чтобы никто ничего не понял.
|
|||
8
Beduin
21.02.12
✎
20:10
|
(7) В зарплатном отделе, такой запрос за своего примут.
|
|||
9
Юрий Лазаренко
21.02.12
✎
20:27
|
(8) Неа. Там посмотрят, поржут и скажут: "Неееее, такой легкотней мы не занимаемся!" ))))
|
|||
10
KarpovDeniska
21.02.12
✎
21:40
|
Выбрать склады.родитель где не склады это группа можешь оптимизировать. ))))
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |