|
Оптимизация запроса по остаткам для построения на СКД | ☑ | ||
---|---|---|---|---|
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) ЭлементОтбора = КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(Имя); ЭлементОтбора.ВидСравнения = ВидСравнения; ЭлементОтбора.ПравоеЗначение = Значение; ЭлементОтбора.Использование = Истина; я такой метод как то применял)) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |