|
Оптимизация запроса по периодам | ☑ | ||
---|---|---|---|---|
0
serg-lom89
01.09.16
✎
16:52
|
запрос,который берет остатки на указанные даты.Подскажите как можно оптимизировать данный запрос
|
|||
1
serg-lom89
01.09.16
✎
16:53
|
ВЫБРАТЬ
ПринадлежностьСкладовСрезПоследних.Склад, ПринадлежностьСкладовСрезПоследних.Организация ПОМЕСТИТЬ СкладыОрганизаций ИЗ РегистрСведений.ПринадлежностьСкладов.СрезПоследних(&КонецПериода, Склад.ТипСклада <> ЗНАЧЕНИЕ(перечисление.типыСкладов.виртуальный)) КАК ПринадлежностьСкладовСрезПоследних ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕНЬ, aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d) КАК Период ПОМЕСТИТЬ ТЗ_Дат ИЗ (ВЫБРАТЬ 0 КАК a ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9) КАК aa ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ 0 КАК b ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9) КАК bb ПО (ИСТИНА) ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ 0 КАК c ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9) КАК cc ПО (ИСТИНА) ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ 0 КАК d ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9) КАК dd ПО (ИСТИНА) ГДЕ aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РАЗЛИЧНЫЕ НАЧАЛОПЕРИОДА(ТЗ_Дат.Период, ДЕНЬ) КАК Период ПОМЕСТИТЬ Дни ИЗ ТЗ_Дат КАК ТЗ_Дат ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Движения.Номенклатура, ДНИ.Период КАК ПериодОстатки, СУММА(ВЫБОР КОГДА Движения.Период = &НачалоПериода ТОГДА Движения.КоличествоКонечныйОстаток ИНАЧЕ ВЫБОР КОГДА Движения.Период <= ДНИ.Период ТОГДА Движения.КоличествоОборот ИНАЧЕ 0 КОНЕЦ КОНЕЦ) КАК КоличествоКонечныйОстаток, Движения.Склад ПОМЕСТИТЬ втБезЦены ИЗ Дни КАК ДНИ, РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, ДЕНЬ, , Склад.ТипСклада <> ЗНАЧЕНИЕ(перечисление.типыСкладов.виртуальный) {(Склад), (Номенклатура), (Номенклатура.НоменклатурнаяГруппа), (Номенклатура.НоменклатурнаяГруппа.Поставщик), (Номенклатура.ОсновнойПоставщик), (Номенклатура.Закрыт), (Номенклатура.Распродажа)}) КАК Движения СГРУППИРОВАТЬ ПО Движения.Номенклатура, ДНИ.Период, Движения.Склад ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ втБезЦены.Номенклатура, втБезЦены.ПериодОстатки, втБезЦены.КоличествоКонечныйОстаток, втБезЦены.Склад, ЦеныНоменклатуры.Валюта, ЦеныНоменклатуры.Цена, ЦеныНоменклатуры.ЕдиницаИзмерения, втБезЦены.КоличествоКонечныйОстаток * втБезЦены.Номенклатура.ЕдиницаХраненияОстатков.Литраж КАК Литраж ПОМЕСТИТЬ ОстаткиИЦены ИЗ втБезЦены КАК втБезЦены ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры ПО (ЦеныНоменклатуры.ТипЦен.Код = "А00000004") И втБезЦены.Номенклатура = ЦеныНоменклатуры.Номенклатура И (ЦеныНоменклатуры.Период В (ВЫБРАТЬ ПЕРВЫЕ 1 ЦеныНоменклатуры.Период КАК Период ИЗ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры ГДЕ ЦеныНоменклатуры.ТипЦен.Код = "А00000004" И ЦеныНоменклатуры.Период <= КОНЕЦПЕРИОДА(втБезЦены.ПериодОстатки, ДЕНЬ) И ЦеныНоменклатуры.Номенклатура = втБезЦены.Номенклатура УПОРЯДОЧИТЬ ПО Период УБЫВ)) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ОстаткиИЦены.Номенклатура, ОстаткиИЦены.ПериодОстатки, ОстаткиИЦены.КоличествоКонечныйОстаток, ОстаткиИЦены.Склад, ОстаткиИЦены.Цена * ОстаткиИЦены.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент / ОстаткиИЦены.ЕдиницаИзмерения.Коэффициент * (КурсыВалют.Курс / КурсыВалют.Кратность) * 1 КАК ПересчитаннаяЦена, ОстаткиИЦены.Литраж ПОМЕСТИТЬ Итоговая ИЗ ОстаткиИЦены КАК ОстаткиИЦены ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют ПО ОстаткиИЦены.Валюта = КурсыВалют.Валюта И (КурсыВалют.ВалютаКотировки.Код = "978") И (КурсыВалют.Период В (ВЫБРАТЬ ПЕРВЫЕ 1 КурсыВалют.Период КАК Период ИЗ РегистрСведений.КурсыВалют КАК КурсыВалют ГДЕ КурсыВалют.ВалютаКотировки.Код = "978" И КурсыВалют.Валюта = ОстаткиИЦены.Валюта И КурсыВалют.Период <= КОНЕЦПЕРИОДА(ОстаткиИЦены.ПериодОстатки, ДЕНЬ) УПОРЯДОЧИТЬ ПО Период УБЫВ)) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Итоговая.Номенклатура, Итоговая.ПериодОстатки КАК Дата_, Итоговая.КоличествоКонечныйОстаток КАК КоличествоОстаток, Итоговая.Склад, Итоговая.ПересчитаннаяЦена, Итоговая.ПересчитаннаяЦена * Итоговая.КоличествоКонечныйОстаток КАК Стоимость, Итоговая.Литраж, СкладыОрганизаций.Организация КАК ОрганизацияСкладов ИЗ Итоговая КАК Итоговая ЛЕВОЕ СОЕДИНЕНИЕ СкладыОрганизаций КАК СкладыОрганизаций ПО Итоговая.Склад = СкладыОрганизаций.Склад |
|||
2
serg-lom89
01.09.16
✎
16:54
|
как можно ускорить ?
|
|||
3
Джинн
01.09.16
✎
16:56
|
Что это вообще такое? С мистовским интеллектуальным форматирование это вообще набор букв.
|
|||
4
aleks_default
01.09.16
✎
17:00
|
(0)Ты хоть связь с таблицей дней пропиши, а то все в куче имени одного знака зодиака
|
|||
5
serg-lom89
01.09.16
✎
17:00
|
запрос который вибирает остатки на каждую дату,потом берет цены по указанному типу цен и пересчитывает в валюту
|
|||
6
Горогуля
01.09.16
✎
17:00
|
есть такое слово: этоги периодами
|
|||
7
serg-lom89
01.09.16
✎
17:02
|
затем его в скд,и вывожу
|
|||
8
serg-lom89
01.09.16
✎
17:03
|
(7) когда еще отбор ладно ,более менее ,но например за месяц по одному складу что то долго все это
|
|||
9
vicof
01.09.16
✎
17:03
|
(7) в суд это проще делается
|
|||
10
vicof
01.09.16
✎
17:03
|
(9) скд
|
|||
11
serg-lom89
01.09.16
✎
17:06
|
(10) как?через несколько наборов данных?
|
|||
12
serg-lom89
01.09.16
✎
17:07
|
(10) или есть способ проще.буду признателен за инфу)
|
|||
13
serg-lom89
01.09.16
✎
17:12
|
(10) если и быстрее то просто класс)
|
|||
14
Горогуля
01.09.16
✎
17:15
|
тебе строку для гугления дать или ссылку из результата?
|
|||
15
hhhh
01.09.16
✎
17:35
|
(11) нет, просто копипастишь свой запрос, но без этих объединить. и группировке у твоего поля Дата_ пусть юзер потом ставит: период дополнения день. или период дополнения год. Ну как он захочет.
|
|||
16
serg-lom89
01.09.16
✎
19:40
|
(14) любое одно из двух)
|
|||
17
serg-lom89
01.09.16
✎
19:43
|
(15) группировка по ном, складу, и дата_ -это разве так много времени забирает?
|
|||
18
mistеr
01.09.16
✎
19:54
|
(17) Время забирает генерация таблицы из 100500 дат, из которых потом нужен только месяц. Ну и цены на каждый день, как-то нестандартно они берутся.
И номенклатуру собери в ВТ предварительно. |
|||
19
Горогуля
01.09.16
✎
19:57
|
(16) 1с скд итоги периодами
|
|||
20
serg-lom89
01.09.16
✎
20:01
|
(18) завтра замерю время производительности таб дат.,и ее преобразование на (конец периода,день) но думаю оно минимальное
|
|||
21
mistеr
01.09.16
✎
20:04
|
(20) А что, календаря нет в конфе? Зачем такие извращения?
|
|||
22
serg-lom89
01.09.16
✎
20:05
|
нету(21) ,если Вы про регистр сведений с датами
|
|||
23
serg-lom89
01.09.16
✎
20:08
|
(18) а стандартно как, получить максимальные даты, и по этим датам соединить
|
|||
24
mistеr
01.09.16
✎
22:30
|
(23) Да, получить период действия записей (Период и Период следующей записи) и по ним соединять.
|
|||
25
serg-lom89
02.09.16
✎
16:31
|
(21) ну сделала я РС ,заполнил их датами,производительность не взлетела.может чуток.но не заметно сильно
|
|||
26
serg-lom89
02.09.16
✎
17:16
|
сформировал 2 запроса.
1 запрос(это старый что в ветке) показал 7 секунд 2 сгрупировал ,выбрал максимальную дату и соединил с остатками показал 10с. |
|||
27
serg-lom89
02.09.16
✎
17:17
|
текстЗапроса 2-го
ВЫБРАТЬ ПринадлежностьСкладовСрезПоследних.Склад, ПринадлежностьСкладовСрезПоследних.Организация ПОМЕСТИТЬ СкладыОрганизаций ИЗ РегистрСведений.ПринадлежностьСкладов.СрезПоследних(&КонецПериода, Склад.ТипСклада <> ЗНАЧЕНИЕ(перечисление.типыСкладов.виртуальный)) КАК ПринадлежностьСкладовСрезПоследних ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТаблицаДат.ДатаДень ПОМЕСТИТЬ ТЗ_Дат ИЗ РегистрСведений.ТаблицаДат КАК ТаблицаДат ГДЕ ТаблицаДат.ДатаДень МЕЖДУ &НачалоПериода И &КонецПериода ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ НАЧАЛОПЕРИОДА(ТЗ_Дат.ДатаДень, ДЕНЬ) КАК Период ПОМЕСТИТЬ Дни ИЗ ТЗ_Дат КАК ТЗ_Дат СГРУППИРОВАТЬ ПО НАЧАЛОПЕРИОДА(ТЗ_Дат.ДатаДень, ДЕНЬ) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Движения.Номенклатура КАК Номенклатура, ДНИ.Период КАК ПериодОстатки, ВЫБОР КОГДА Движения.Период = &НачалоПериода ТОГДА Движения.КоличествоКонечныйОстаток ИНАЧЕ ВЫБОР КОГДА Движения.Период <= ДНИ.Период ТОГДА Движения.КоличествоОборот ИНАЧЕ 0 КОНЕЦ КОНЕЦ КАК КоличествоКонечныйОстаток, Движения.Склад КАК Склад ПОМЕСТИТЬ втБезЦены ИЗ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты( &НачалоПериода, &КонецПериода, ДЕНЬ, , Склад.ТипСклада <> ЗНАЧЕНИЕ(перечисление.типыСкладов.виртуальный) И склад.код = "0001" И Номенклатура.основнойПоставщик.код = "АСП00016" {(Склад), (Номенклатура), (Номенклатура.НоменклатурнаяГруппа), (Номенклатура.НоменклатурнаяГруппа.Поставщик), (Номенклатура.ОсновнойПоставщик), (Номенклатура.Закрыт), (Номенклатура.Распродажа)}) КАК Движения, Дни КАК ДНИ ИНДЕКСИРОВАТЬ ПО Номенклатура, Склад, ПериодОстатки ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ втБезЦены.Номенклатура, втБезЦены.ПериодОстатки, втБезЦены.КоличествоКонечныйОстаток, втБезЦены.Склад, МАКСИМУМ(ЦеныНоменклатуры.Период) КАК Период ПОМЕСТИТЬ ТабМакДатЦен ИЗ втБезЦены КАК втБезЦены ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры ПО втБезЦены.Номенклатура = ЦеныНоменклатуры.Номенклатура И втБезЦены.ПериодОстатки >= ЦеныНоменклатуры.Период И (ЦеныНоменклатуры.ТипЦен.Код = "А00000004") СГРУППИРОВАТЬ ПО втБезЦены.Номенклатура, втБезЦены.ПериодОстатки, втБезЦены.КоличествоКонечныйОстаток, втБезЦены.Склад ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТабМакДатЦен.Номенклатура, ТабМакДатЦен.ПериодОстатки, ТабМакДатЦен.КоличествоКонечныйОстаток, ТабМакДатЦен.Склад, ЦеныНоменклатуры.Цена ИЗ ТабМакДатЦен КАК ТабМакДатЦен ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры ПО ТабМакДатЦен.Номенклатура = ЦеныНоменклатуры.Номенклатура И ТабМакДатЦен.Период = ЦеныНоменклатуры.Период И (ЦеныНоменклатуры.ТипЦен.Код = "А00000004") |
|||
28
serg-lom89
02.09.16
✎
17:17
|
как сделать что бы еще быстрее было?
|
|||
29
serg-lom89
02.09.16
✎
17:18
|
остатки аз год,по одному складу выбирала 2,5 минуты примерно
|
|||
30
serg-lom89
02.09.16
✎
17:18
|
(26) это без пересчета в валюту ,и одинаковыми отборами
|
|||
31
Горогуля
02.09.16
✎
17:19
|
(29) слабак. мой личный рекорд запроса 1223 секунды
|
|||
32
Горогуля
02.09.16
✎
17:20
|
поизбавляйся от точек что ли...
Склад.ТипСклада ЦеныНоменклатуры.ТипЦен.Код = "А00000004" - вообще застрелить и всё в таком духе |
|||
33
mistеr
02.09.16
✎
19:41
|
(25) (26) (29) У вас с женой один аккаунт на двоих? Или все намного хуже?..
|
|||
34
serg-lom89
05.09.16
✎
11:36
|
(33) не...все ок)))хотя могло бы быть намного хуже)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |