Имя: Пароль:
1C
1С v8
Оптимизация запроса по остаткам для построения на СКД
0 serg-lom89
 
25.07.16
13:49
всем добрый

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

СГРУППИРОВАТЬ ПО
    ТоварыНаСкладахОстаткиИОбороты.Склад,
    ТоварыНаСкладахОстаткиИОбороты.Номенклатура,
    НоменклатурныеГруппы.Ссылка,
    Поставщики.Ссылка

Текст запроса.
Затем с этого запроса буду строить диграмму по остаткам с отборами и  периодчисностью.(день,неделя,месяц...)
Вопрос в том что как то можно оптимизировать запрос данный ,потому что выборка за день что то долго выполняется ,а если ввести год и построить диаграмму по неделям то это вообще повиснет все(((????
1 serg-lom89
 
25.07.16
13:54
База хочу сказать не маленькая.Железо менять никто не будет)))
2 HeKrendel
 
25.07.16
13:57
Убери поставщики из запроса
3 HeKrendel
 
25.07.16
13:57
либо храни поставщиков в регистре
4 HeKrendel
 
25.07.16
13:58
Это я тебе как консультант 2 раза открывавший конфигуратор говорю
5 serg-lom89
 
25.07.16
14:00
(4) поставщики то не столь пока важны.Основное выборка по остаткам ,быстродействие
6 FIXXXL
 
25.07.16
14:04
(5) попробуй так:
первым запросом пакета в ВТ помести остатки
а вторым-выборкой уже навешивай соединения
7 serg-lom89
 
25.07.16
14:05
(6) первым запросом получается остатки на конДату?
а с чем соединять ?
расскажите поподробнее пожалуйста,не совсем понял)
8 FIXXXL
 
25.07.16
14:06
(7) свой запрос разбей на два
1 - остатки в временную таблицу получи
2 - уже к временной таблице лепи остальное
9 serg-lom89
 
25.07.16
14:07
(8) понял))))недопер сразу)
10 serg-lom89
 
25.07.16
14:10
(8) а сам как то запрос по остаткам проаптимизировать можно?:
11 serg-lom89
 
25.07.16
14:10
может кто какие нить нюансы знает?
12 serg-lom89
 
25.07.16
14:15
ВЫБРАТЬ
    ТоварыНаСкладахОстаткиИОбороты.Склад,
    ТоварыНаСкладахОстаткиИОбороты.Номенклатура,
    СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток) КАК КоличествоКонечныйОстаток,
    КОНЕЦПЕРИОДА(ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ) КАК ПериодДЕНЬ,
    КОНЕЦПЕРИОДА(ТоварыНаСкладахОстаткиИОбороты.Период, НЕДЕЛЯ) КАК ПериодНЕДЕЛЯ,
    КОНЕЦПЕРИОДА(ТоварыНаСкладахОстаткиИОбороты.Период, МЕСЯЦ) КАК ПериодМЕСЯЦ,
    КОНЕЦПЕРИОДА(ТоварыНаСкладахОстаткиИОбороты.Период, ГОД) КАК ПериодГОД
ИЗ
    РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&ДатаНач, &ДатаКон, Регистратор, , Склад.ТипСклада <> ЗНАЧЕНИЕ(Перечисление.ТипыСкладов.Виртуальный)) КАК ТоварыНаСкладахОстаткиИОбороты
ГДЕ
    ТоварыНаСкладахОстаткиИОбороты.Склад.ТипСклада <> ЗНАЧЕНИЕ(Перечисление.ТипыСкладов.Виртуальный)

СГРУППИРОВАТЬ ПО
    ТоварыНаСкладахОстаткиИОбороты.Склад,
    ТоварыНаСкладахОстаткиИОбороты.Номенклатура,
    КОНЕЦПЕРИОДА(ТоварыНаСкладахОстаткиИОбороты.Период, ДЕНЬ),
    КОНЕЦПЕРИОДА(ТоварыНаСкладахОстаткиИОбороты.Период, НЕДЕЛЯ),
    КОНЕЦПЕРИОДА(ТоварыНаСкладахОстаткиИОбороты.Период, МЕСЯЦ),
    КОНЕЦПЕРИОДА(ТоварыНаСкладахОстаткиИОбороты.Период, ГОД)

вот запрос,с ним можно что нить сделать в плане оптимизации?
13 serg-lom89
 
25.07.16
14:29
upну тему
14 FIXXXL
 
25.07.16
14:32
ГДЕ
    ТоварыНаСкладахОстаткиИОбороты.Склад.ТипСклада <> ЗНАЧЕНИЕ(Перечисление.ТипыСкладов.Виртуальный)

убери
15 FIXXXL
 
25.07.16
14:33
и Регистратор тебе зачем?
16 serg-lom89
 
25.07.16
14:35
(15) ну мне же периодичность нужна в запросе для построения по периодам
17 FIXXXL
 
25.07.16
14:35
еще попробуй такой вариант:
кучку запросов с созданием временных таблиц на каждый нужный период

или же в СКД сделать периодичность отчета параметризуемой

или тебе одновременно все периодичности нужны?
18 FIXXXL
 
25.07.16
14:36
(16) Авто не подойдет разве?
19 serg-lom89
 
25.07.16
14:37
(17) ну я хотел бы конечно в одном запросе все это сделать.что бы затем на основании этих полей строить уже
20 FIXXXL
 
25.07.16
14:37
и еще: если запрос долго работает, посмотри, что с итогами в базе
21 aleks_default
 
25.07.16
14:41
(0)Левое соединение с спр. Поставщики вообще не нужно((если нужна только ссылка)). Поставщика можно брать из номенклатурной группы.
Нужны ли остатки по номенклатуре, у которой не заполнена номенклатурная группа? Если не нужны, то ЛЕВОЕ СОЕДИНЕНИЕ с номенклатурной группой переделай во ВНУТРЕННЕЕ.
(12) с периодичностью "Регистратор" будет еще медленнее.
22 aleks_default
 
25.07.16
14:46
И вообще, вот главный вопрос.
Нужны ли остатки по номенклатуре, у которой не заполнена номенклатурная группа?
Если нет, то проще выбрать в пераую таблицу список номенклатуры, у которой заполнена номенклатурная группа, и этот список использовать как вирт. параметр для таблицы остатков. Тогда левое соединение не нужно будет.
23 serg-lom89
 
25.07.16
14:49
(22) но через 2 точки ,Номенклатура.НомГруппа.Поставщик наверное подольше будет
а Поставщики нужны будут
24 aleks_default
 
25.07.16
14:53
ВЫБРАТЬ
    ТоварыНаСкладахОстаткиИОбороты.Склад,
    ТоварыНаСкладахОстаткиИОбороты.Номенклатура,
    Номенклатура1.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа,
    НоменклатурныеГруппы.Поставщик КАК Бренд,
    СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток) КАК КоличествоКонечныйОстаток
ИЗ
    РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(
            &ДатаНач,
            &ДатаКон,

            Период,
            ,
            Склад.ТипСклада <> ЗНАЧЕНИЕ(Перечисление.ТипыСкладов.Виртуальный)
                  ) КАК ТоварыНаСкладахОстаткиИОбороты
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура1
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.НоменклатурныеГруппы КАК НоменклатурныеГруппы
            
        ПО Номенклатура1.НоменклатурнаяГруппа = НоменклатурныеГруппы.Ссылка

СГРУППИРОВАТЬ ПО
    ТоварыНаСкладахОстаткиИОбороты.Склад,
    ТоварыНаСкладахОстаткиИОбороты.Номенклатура,
    НоменклатурныеГруппы.Ссылка,
    НоменклатурныеГруппы.Поставщик
25 serg-lom89
 
25.07.16
14:54
(24) так у меня тогда же вроде поле Период не будет доступна?
26 aleks_default
 
25.07.16
14:54
Пропустил для внутреннего соединения условие

ПО Номенклатура1.Ссылка = ТоварыНаСкладахОстаткиИОбороты.Номенклатура
27 aleks_default
 
25.07.16
14:56
(24) почему?
28 serg-lom89
 
25.07.16
15:00
(27) а чего будет доступно?не должно же появиться
29 serg-lom89
 
25.07.16
15:03
при всех остальных появляется а при периоде не появляется же
30 aleks_default
 
25.07.16
15:06
(28)Периодичность АВТО поставь.
31 aleks_default
 
25.07.16
15:08
И вообще номенклатурные группы может лучше вынести в отдельный набор данных.
32 serg-lom89
 
25.07.16
15:11
(31) я думал что сразу лучше запихнуть выборку в ВТ,а затем уже с этой вирт таб работать
33 DrZombi
 
гуру
25.07.16
15:12
(0) Используй команды отбора для Компоновки данных, немного ускоришься, при отборах :)
34 serg-lom89
 
25.07.16
15:18
(33)     ЭлементОтбора = КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(Имя);
    ЭлементОтбора.ВидСравнения = ВидСравнения;
    ЭлементОтбора.ПравоеЗначение = Значение;
    ЭлементОтбора.Использование = Истина;

я такой метод как то применял))
AdBlock убивает бесплатный контент. 1Сергей