![]() |
|
Подскажите,возможно ли оптимизировать данный запрос? | ☑ | ||
---|---|---|---|---|
0
ZSSSP
20.10.17
✎
11:36
|
ВЫБРАТЬ
ВЗ.Номенклатура, ВЗ.Склад, МАКСИМУМ(ВЗ.Остаток) КАК Остаток ПОМЕСТИТЬ ТСОИО ИЗ (ВЫБРАТЬ ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура, ТоварыНаСкладахОстаткиИОбороты.Склад КАК Склад, ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток КАК Остаток, ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток КАК КоличествоНачальныйОстаток, ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход КАК КоличествоПриход, ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход КАК КоличествоРасход, ТоварыНаСкладахОстаткиИОбороты.КоличествоОборот КАК КоличествоОборот ИЗ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты( , , , , Номенклатура В ИЕРАРХИИ (&ГруппаНоменклатуры) И Склад.Подразделение.ТипПодразделения = &ТипПодразделения) КАК ТоварыНаСкладахОстаткиИОбороты ГДЕ (ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток > 0 ИЛИ ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток > 0 ИЛИ ТоварыНаСкладахОстаткиИОбороты.КоличествоОборот > 0 ИЛИ ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход > 0 ИЛИ ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход > 0) ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ЗначенияТочкиЗаказаСрезПоследних.Номенклатура, ЗначенияТочкиЗаказаСрезПоследних.Склад, 0, 0, 0, 0, 0 ИЗ РегистрСведений.ЗначенияТочкиЗаказа.СрезПоследних( , Номенклатура В ИЕРАРХИИ (&ГруппаНоменклатуры) И Склад.Подразделение.ТипПодразделения = &ТипПодразделения) КАК ЗначенияТочкиЗаказаСрезПоследних) КАК ВЗ СГРУППИРОВАТЬ ПО ВЗ.Номенклатура, ВЗ.Склад ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТСОИО.Номенклатура КАК Номенклатура, ТСОИО.Склад КАК Склад, ТСОИО.Номенклатура.СостояниеНоменклатуры КАК Состояние, ЕСТЬNULL(Продажи.КоличествоОборот, 0) КАК Продажи, ЕСТЬNULL(ОстаткиМаг.КоличествоОстаток, 0) КАК ОстатокМаг, ЕСТЬNULL(ОстаткиОсн.КоличествоОстаток, 0) КАК ОстатокОсн, ЕСТЬNULL(Цены.Цена, 0) КАК Цена, ВЫБОР КОГДА ЕСТЬNULL(ЗначенияТочкиЗаказаСрезПоследних.ЗначениеТочкиЗаказа, 0) > 0 ТОГДА 1 ИНАЧЕ 0 КОНЕЦ КАК ВМатрице, ЕСТЬNULL(ЗначенияТочкиЗаказаСрезПоследних.Период, ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)) КАК ДатаВводаВывода ИЗ ТСОИО КАК ТСОИО ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты( , , , Подразделение.ТипПодразделения = &ТипПодразделения И Номенклатура В (ВЫБРАТЬ ТСОИО.Номенклатура ИЗ ТСОИО КАК ТСОИО)) КАК Продажи ПО ТСОИО.Номенклатура = Продажи.Номенклатура И ТСОИО.Склад = Продажи.Подразделение.Склад ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки( , Склад.Подразделение.ТипПодразделения = &ТипПодразделения И Номенклатура В (ВЫБРАТЬ ТСОИО.Номенклатура ИЗ ТСОИО КАК ТСОИО)) КАК ОстаткиМаг ПО ТСОИО.Номенклатура = ОстаткиМаг.Номенклатура И ТСОИО.Склад = ОстаткиМаг.Склад ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки( , Склад = &ОсновнойСклад И Номенклатура В (ВЫБРАТЬ ТСОИО.Номенклатура ИЗ ТСОИО КАК ТСОИО)) КАК ОстаткиОсн ПО ТСОИО.Номенклатура = ОстаткиОсн.Номенклатура ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних( , ТипЦен = &ТипЦен И Номенклатура В (ВЫБРАТЬ ТСОИО.Номенклатура ИЗ ТСОИО КАК ТСОИО)) КАК Цены ПО ТСОИО.Номенклатура = Цены.Номенклатура ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияТочкиЗаказа.СрезПоследних( , Номенклатура В (ВЫБРАТЬ ТСОИО.Номенклатура ИЗ ТСОИО КАК ТСОИО)) КАК ЗначенияТочкиЗаказаСрезПоследних ПО ТСОИО.Номенклатура = ЗначенияТочкиЗаказаСрезПоследних.Номенклатура И ТСОИО.Склад = ЗначенияТочкиЗаказаСрезПоследних.Склад |
|||
1
Лефмихалыч
20.10.17
✎
11:42
|
как минимум, можно в одну временную выбрать все данные которые по нескольку раз получаются из одной и той же виртуальной таблицы.
Потом "Склад.Подразделение.ТипПодразделения" - просто выбери все нужные склады одним запросом и отбирай по "Склад В &СписокСкладов". это для начала |
|||
2
catena
20.10.17
✎
11:45
|
В первой ВТ какую смсыловую нагрузку несет объединение с регистром ЗначенияТочкиЗаказа?
|
|||
3
asady
20.10.17
✎
11:53
|
(0) зачем юзать ОстаткиИОбороты если интересует только остаток
|
|||
4
ZSSSP
20.10.17
✎
12:08
|
Данный запрос вставляется в скд.Мне необходимо оптимизировать данный отчет чтобы человек мог сформировать за год данный отчет по нескольким группам номенклатур.
|
|||
5
Лефмихалыч
20.10.17
✎
12:11
|
(4) тебя укусил канцелярийный комар
Примени рекомендации (1) и (3) и, если будут еще вопросы, возвращайся |
|||
6
ZSSSP
20.10.17
✎
13:41
|
Вот таким образом получилось:
ВЫБРАТЬ ВЗ.Номенклатура, ВЗ.Склад, МАКСИМУМ(ВЗ.Остаток) КАК Остаток, СУММА(ВЗ.ОстаткиОсновногоСклада) КАК ОстаткиОсновногоСклада ПОМЕСТИТЬ ТСОИО ИЗ (ВЫБРАТЬ ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура, ТоварыНаСкладахОстатки.Склад КАК Склад, ТоварыНаСкладахОстатки.КоличествоОстаток КАК Остаток, 0 КАК ОстаткиОсновногоСклада ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки( &КонецПериода, Номенклатура В ИЕРАРХИИ (&ГруппаНоменклатуры) И Склад.Подразделение.ТипПодразделения = &ТипПодразделения) КАК ТоварыНаСкладахОстатки ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ЗначенияТочкиЗаказаСрезПоследних.Номенклатура, ЗначенияТочкиЗаказаСрезПоследних.Склад, 0, 0 ИЗ РегистрСведений.ЗначенияТочкиЗаказа.СрезПоследних( , Номенклатура В ИЕРАРХИИ (&ГруппаНоменклатуры) И Склад.Подразделение.ТипПодразделения = &ТипПодразделения) КАК ЗначенияТочкиЗаказаСрезПоследних ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ТоварыНаСкладахОстатки.Номенклатура, 0, 0, ТоварыНаСкладахОстатки.КоличествоОстаток ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки( &КонецПериода, Склад = &ОсновнойСклад И Номенклатура В ИЕРАРХИИ (&ГруппаНоменклатуры)) КАК ТоварыНаСкладахОстатки) КАК ВЗ СГРУППИРОВАТЬ ПО ВЗ.Номенклатура, ВЗ.Склад ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТСОИО.Номенклатура КАК Номенклатура, ТСОИО.Склад КАК Склад, ТСОИО.Номенклатура.СостояниеНоменклатуры КАК Состояние, ЕСТЬNULL(Продажи.КоличествоОборот, 0) КАК Продажи, ЕСТЬNULL(ТСОИО.Остаток, 0) КАК ОстатокМаг, ЕСТЬNULL(ТСОИО.ОстаткиОсновногоСклада, 0) КАК ОстатокОсн, ЕСТЬNULL(Цены.Цена, 0) КАК Цена, ВЫБОР КОГДА ЕСТЬNULL(ЗначенияТочкиЗаказаСрезПоследних.ЗначениеТочкиЗаказа, 0) > 0 ТОГДА 1 ИНАЧЕ 0 КОНЕЦ КАК ВМатрице, ЕСТЬNULL(ЗначенияТочкиЗаказаСрезПоследних.Период, ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)) КАК ДатаВводаВывода ИЗ ТСОИО КАК ТСОИО ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты( , , , Подразделение.ТипПодразделения = &ТипПодразделения И Номенклатура В (ВЫБРАТЬ ТСОИО.Номенклатура ИЗ ТСОИО КАК ТСОИО)) КАК Продажи ПО ТСОИО.Номенклатура = Продажи.Номенклатура И ТСОИО.Склад = Продажи.Подразделение.Склад ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних( , ТипЦен = &ТипЦен И Номенклатура В (ВЫБРАТЬ ТСОИО.Номенклатура ИЗ ТСОИО КАК ТСОИО)) КАК Цены ПО ТСОИО.Номенклатура = Цены.Номенклатура ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияТочкиЗаказа.СрезПоследних( , Номенклатура В (ВЫБРАТЬ ТСОИО.Номенклатура ИЗ ТСОИО КАК ТСОИО)) КАК ЗначенияТочкиЗаказаСрезПоследних ПО ТСОИО.Номенклатура = ЗначенияТочкиЗаказаСрезПоследних.Номенклатура И ТСОИО.Склад = ЗначенияТочкиЗаказаСрезПоследних.Склад |
|||
7
catena
20.10.17
✎
13:43
|
Еще раз спрошу: вот это зачем?
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ЗначенияТочкиЗаказаСрезПоследних.Номенклатура, ЗначенияТочкиЗаказаСрезПоследних.Склад, 0, 0 ИЗ РегистрСведений.ЗначенияТочкиЗаказа.СрезПоследних( , Номенклатура В ИЕРАРХИИ (&ГруппаНоменклатуры) И Склад.Подразделение.ТипПодразделения = &ТипПодразделения) КАК ЗначенияТочкиЗаказаСрезПоследних |
|||
8
catena
20.10.17
✎
13:43
|
Чтобы было, что потом группировать?
|
|||
9
Лефмихалыч
20.10.17
✎
13:48
|
(6) доломал только
|
|||
10
VS-1976
20.10.17
✎
13:49
|
Вот это и нужно оптимизировать
Номенклатура В ИЕРАРХИИ (&ГруппаНоменклатуры) И Склад.Подразделение.ТипПодразделения = &ТипПодразделения При этом не пользоваться виртуальными таблицами кроме СрезПоследних в данном случае и то правильно пользоваться СрезПоследних |
|||
11
ZSSSP
20.10.17
✎
14:01
|
В чем я его сломал я убрал таблицы остатков и поместил их ВТ или можно обойтись одной таблицей остатков?
|
|||
12
ZSSSP
20.10.17
✎
14:05
|
Скорее всего для группировки.
|
|||
13
kittystark
20.10.17
✎
20:19
|
а это зачем?
|
|||
14
kittystark
20.10.17
✎
20:21
|
а увидел... уже убрал
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |