Вход | Регистрация

1С:Предприятие ::

Метки: 

Подскажите,возможно ли оптимизировать данный запрос?

Я
   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
как минимум, можно в одну временную выбрать все данные которые по нескольку раз получаются из одной и той же виртуальной таблицы.

Потом "Склад.Подразделение.ТипПодразделения" - просто выбери все нужные склады одним запросом и отбирай по "Склад В &СписокСкладов".

это для начала
   catena
 
2 - 20.10.17 - 11:45
В первой ВТ какую смсыловую нагрузку несет объединение с регистром ЗначенияТочкиЗаказа?
   asady
 
3 - 20.10.17 - 11:53
(0) зачем юзать ОстаткиИОбороты если интересует только остаток
   ZSSSP
 
4 - 20.10.17 - 12:08
Данный запрос вставляется в скд.Мне необходимо оптимизировать данный отчет чтобы человек мог сформировать за год данный отчет по нескольким группам номенклатур.
   Лефмихалыч
 
5 - 20.10.17 - 12:11
(4) тебя укусил канцелярийный комар
Примени рекомендации (1) и (3) и, если будут еще вопросы, возвращайся
   ZSSSP
 
6 - 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)) КАК ДатаВводаВывода
ИЗ
    ТСОИО КАК ТСОИО
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты(
                ,
                ,
                ,
                Подразделение.ТипПодразделения = &ТипПодразделения
                    И Номенклатура В
                        (ВЫБРАТЬ
                            ТСОИО.Номенклатура
                        ИЗ
                            ТСОИО КАК ТСОИО)) КАК Продажи
        ПО ТСОИО.Номенклатура = Продажи.Номенклатура
            И ТСОИО.Склад = Продажи.Подразделение.Склад
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
                ,
                ТипЦен = &ТипЦен
                    И Номенклатура В
                        (ВЫБРАТЬ
                            ТСОИО.Номенклатура
                        ИЗ
                            ТСОИО КАК ТСОИО)) КАК Цены
        ПО ТСОИО.Номенклатура = Цены.Номенклатура
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияТочкиЗаказа.СрезПоследних(
                ,
                Номенклатура В
                    (ВЫБРАТЬ
                        ТСОИО.Номенклатура
                    ИЗ
                        ТСОИО КАК ТСОИО)) КАК ЗначенияТочкиЗаказаСрезПоследних
        ПО ТСОИО.Номенклатура = ЗначенияТочкиЗаказаСрезПоследних.Номенклатура
            И ТСОИО.Склад = ЗначенияТочкиЗаказаСрезПоследних.Склад
   catena
 
7 - 20.10.17 - 13:43
Еще раз спрошу: вот это зачем?
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        ЗначенияТочкиЗаказаСрезПоследних.Номенклатура,
        ЗначенияТочкиЗаказаСрезПоследних.Склад,
        0,
        0
    ИЗ
        РегистрСведений.ЗначенияТочкиЗаказа.СрезПоследних(
                ,
                Номенклатура В ИЕРАРХИИ (&ГруппаНоменклатуры)
                    И Склад.Подразделение.ТипПодразделения = &ТипПодразделения) КАК ЗначенияТочкиЗаказаСрезПоследних
   catena
 
8 - 20.10.17 - 13:43
Чтобы было, что потом группировать?
   Лефмихалыч
 
9 - 20.10.17 - 13:48
(6) доломал только
   VS-1976
 
10 - 20.10.17 - 13:49
Вот это и нужно оптимизировать

Номенклатура В ИЕРАРХИИ (&ГруппаНоменклатуры)
И Склад.Подразделение.ТипПодразделения = &ТипПодразделения

При этом не пользоваться виртуальными таблицами кроме СрезПоследних в данном случае и то правильно пользоваться СрезПоследних
 
  Рекламное место пустует
   ZSSSP
 
11 - 20.10.17 - 14:01
В чем я его сломал я убрал таблицы остатков и поместил их ВТ или можно обойтись одной таблицей остатков?
   ZSSSP
 
12 - 20.10.17 - 14:05
Скорее всего для группировки.
   kittystark
 
13 - 20.10.17 - 20:19
а это зачем?
[1с]
ГДЕ
        (ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток > 0
                ИЛИ ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток > 0
                ИЛИ ТоварыНаСкладахОстаткиИОбороты.КоличествоОборот > 0
                ИЛИ ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход > 0
                ИЛИ ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход > 0)
[/1с]
   kittystark
 
14 - 20.10.17 - 20:21
а увидел...  уже убрал


Список тем форума
Рекламное место пустует   Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует