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


1С:Предприятие :: 1С:Предприятие 8 общая

Оптимизация запроса получения остатков на каждый день.

Оптимизация запроса получения остатков на каждый день.
Я
   serg-lom89
 
11.01.18 - 10:27
добрый день

прошу помощи по оптимизации запроса для получения остатков на каждый день.

вот запрос который получает остатки (количество )


////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    Движения.Номенклатура КАК Номенклатура,
    ДНИ.Период КАК Дата_,
    ВЫБОР
        КОГДА Движения.Период = &НачалоПериода
            ТОГДА Движения.КоличествоКонечныйОстаток
        ИНАЧЕ ВЫБОР
                КОГДА Движения.Период <= ДНИ.Период
                    ТОГДА Движения.КоличествоОборот
                ИНАЧЕ 0
            КОНЕЦ
    КОНЕЦ КАК КоличествоОстаток,
    0 КАК ПересчитаннаяЦена,
    0 КАК Стоимость,
    Движения.Склад КАК Склад,
    ЕСТЬNULL(СкладыОрганизаций.Организация, ЗНАЧЕНИЕ(справочник.организации.пустаяссылка)) КАК ОрганизацияСкладов
ПОМЕСТИТЬ втБезЦены
ИЗ
    Дни КАК ДНИ,
    РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, ДЕНЬ, , Склад.ТипСклада <> ЗНАЧЕНИЕ(перечисление.типыСкладов.виртуальный) {(Склад), (Номенклатура), (Номенклатура.НоменклатурнаяГруппа), (Номенклатура.НоменклатурнаяГруппа.Поставщик), (Номенклатура.ОсновнойПоставщик), (Номенклатура.Закрыт), (Номенклатура.Распродажа)}) КАК Движения
        ЛЕВОЕ СОЕДИНЕНИЕ СкладыОрганизаций КАК СкладыОрганизаций
        ПО Движения.Склад = СкладыОрганизаций.Склад

ИНДЕКСИРОВАТЬ ПО
    Номенклатура,
    Склад
;



вот запрос
Который получается для литража

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    Движения.Номенклатура КАК Номенклатура,
    ДНИ.Период КАК Дата_,
    ВЫБОР
        КОГДА Движения.Период = &НачалоПериода
            ТОГДА Движения.КоличествоКонечныйОстаток
        ИНАЧЕ ВЫБОР
                КОГДА Движения.Период <= ДНИ.Период
                    ТОГДА Движения.КоличествоОборот
                ИНАЧЕ 0
            КОНЕЦ
    КОНЕЦ * Движения.Номенклатура.ЕдиницаХраненияОстатков.Литраж КАК КоличествоОстаток,
    0 КАК ПересчитаннаяЦена,
    0 КАК Стоимость,
    Движения.Склад КАК Склад,
    ЕСТЬNULL(СкладыОрганизаций.Организация, ЗНАЧЕНИЕ(справочник.организации.пустаяссылка)) КАК ОрганизацияСкладов
ПОМЕСТИТЬ втБезЦены
ИЗ
    Дни КАК ДНИ,
    РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, ДЕНЬ, , Склад.ТипСклада <> ЗНАЧЕНИЕ(перечисление.типыСкладов.виртуальный) {(Склад), (Номенклатура), (Номенклатура.НоменклатурнаяГруппа), (Номенклатура.НоменклатурнаяГруппа.Поставщик), (Номенклатура.ОсновнойПоставщик), (Номенклатура.Закрыт), (Номенклатура.Распродажа)}) КАК Движения
        ЛЕВОЕ СОЕДИНЕНИЕ СкладыОрганизаций КАК СкладыОрганизаций
        ПО Движения.Склад = СкладыОрганизаций.Склад

ИНДЕКСИРОВАТЬ ПО
    Номенклатура,
    Склад

понятно что все получается через точку и это не есть хорошо.
Подскажите как можно оптимизировать?
 
 
   Borteg
 
1 - 11.01.18 - 10:30
(0) РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, ДЕНЬ, , Склад.ТипСклада <> ЗНАЧЕНИЕ(перечисление.типыСкладов.виртуальный) {(Склад), (Номенклатура), (Номенклатура.НоменклатурнаяГруппа),

сначала в запросе определить все склады которые там нужны, потом передать склад в (вложенный запрос по складам)
   serg-lom89
 
2 - 11.01.18 - 10:32
(1)
вопрос в том что если по всем складам
   Borteg
 
3 - 11.01.18 - 10:32
(2) Склад.ТипСклада <> ЗНАЧЕНИЕ(перечисление.типыСкладов.виртуальный)
   Borteg
 
4 - 11.01.18 - 10:33
(3) эта конструкция адски усложняет оптимизатору жизнь и сам запрос. Если там будут уже склады в которых значение не виртуальный будет намного лучше
   cw014
 
5 - 11.01.18 - 10:36
А зачем тут дни тянутся без связи?
   serg-lom89
 
6 - 11.01.18 - 10:45
(5) потом вывожу периодичностью по дням
   serg-lom89
 
7 - 11.01.18 - 11:05
что то не могу "допереть" насчет условия по датам
   Borteg
 
8 - 11.01.18 - 11:29
(7) склады переделал уже? у зачемвообще оптимизируешь? запрос выполняет долго?
   Вафель
 
9 - 11.01.18 - 11:44
а почему дни и движения никак не соединяются?
   Вафель
 
10 - 11.01.18 - 11:45
(8) не поможет с вероятностью 99.9999%
 
 Рекламное место пустует
   Timon1405
 
11 - 11.01.18 - 11:48
   Borteg
 
12 - 11.01.18 - 12:34
(10) поможет 100%, скорей всего это скд и связь там произведена.
   Antony8x
 
13 - 11.01.18 - 12:39
(12) Что сомнительно в плане производительности
   breezee
 
14 - 11.01.18 - 12:56
(1) Лучше во внутреннее соединение, так вроде (!ВРОДЕ!) быстрее будет работать
   VS-1976
 
15 - 11.01.18 - 13:26
Так как конструктор непонятно как построит запрос ( может быть очень ужасный план исполнения ), то лучше сделать что-то подобное. Не перетендую на истину. В выборке { Номенклатура }, не всегда хорошо если иерархия большая, это сильно сказывается на произодительности...

ВЫБРАТЬ
    спрСклад.Ссылка КАК Склад

ПОМЕСТИТЬ втФильтрПоСкладам

ИЗ
    Справочник.Склады КАК спрСклад
ГДЕ
    ТипСклада <> ЗНАЧЕНИЕ( перечисление.типыСкладов.виртуальный )
{ ГДЕ
    спрСклад.Ссылка КАК Склад }
;

ВЫБРАТЬ
    Склад,
    Номенклатура,
    ...

ПОМЕСТИТЬ втДанные

ИЗ
    РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты( &НачалоПериода, &КонецПериода, ДЕНЬ, , Склад В ( ВЫБРАТЬ Склад ИЗ втФильтрПоСкладам ) {Номенклатура} )
;

ВЫБРАТЬ
    втНоменклатура.Номенклатура

ПОМЕСТИТЬ втФильтрПоНоменклатуре

ИЗ
    ( ВЫБРАТЬ РАЗЛИЧНЫЕ Номенклатура ИЗ втДанные ) КАК втНоменклатура 

    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК спрНоменклатура
        по спрНоменклатура.Ссылка = втНоменклатура.Номенклатура
{ ГДЕ
    спрНоменклатура.НоменклатурнаяГруппа,
    Номенклатура.НоменклатурнаяГруппа.Поставщик КАК Поставщик,
    спрНоменклатура.Закрыт,
    спрНоменклатура.ОсновнойПоставщик,
    спрНоменклатура.Распродажа }

ИНДЕКСИРОВАТЬ ПО
    втНоменклатура.Номенклатура
;

ВЫБРАТЬ
    ...
ИЗ
    втДанные
    СОЕДИНЕНИЕ втФильтрПоНоменклатуре
        ПО втФильтрПоНоменклатуре.Номенклатура = втДанные.Номенклатура
   VS-1976
 
16 - 11.01.18 - 13:54
Ошибка
Номенклатура.НоменклатурнаяГруппа.Поставщик КАК Поставщик,

Читать как

спрНоменклатура.НоменклатурнаяГруппа.Поставщик КАК Поставщик,
   Радим1987
 
17 - 11.01.18 - 13:59
Если СКД то лучше использовать 2 НабораДанных и в первым даты+ некоторые параметры во втором остатки из регистра  РегистрНакопления.ТоварыНаСкладах.ОСТАТКИ
   Timon1405
 
18 - 11.01.18 - 14:02
(17) то есть фактически поиметь запрос в цикле + что еще печальнее, соединение наборов происходит на клиенте.
   VS-1976
 
19 - 11.01.18 - 14:02
(17) На каждый день в течении месяца, при больших движения за день? Вы хотите к примеру за 31 день взять остатки? Это может сильно замедлить...
   Радим1987
 
20 - 11.01.18 - 14:05
(19) Личный опыт одним запросом медленнее, чем 2 мя наборами
   VS-1976
 
21 - 11.01.18 - 14:06
(18) Остатки вычисляются так: Остаток текущий - движения до даты..., а ОстаткиИОбороты ( Остаток + Сгруппированные Движения ) для периода ДЕНЬ рассчитываются после выборки, а не отбираются на каждый день...
   Радим1987
 
22 - 11.01.18 - 14:11
(21) Это тоже самое на каждый день
   VS-1976
 
23 - 11.01.18 - 14:11
(22) С чего ты взял что тоже самое, я всё расписал. Прочти несколько раз до просветления


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