|
Оптимизация запроса для отчета. | ☑ | ||
---|---|---|---|---|
0
asder117
12.03.19
✎
16:13
|
Доброго времени суток.
Строю отчет по товарам на складах со стоимостью на базе универсального. В нем добавлен такой запрос: ТекстЗапроса = "ВЫБРАТЬ | ТоварыНаСкладахОстаткиИОбороты.Склад, | ТоварыНаСкладахОстаткиИОбороты.Номенклатура, | ТоварыНаСкладахОстаткиИОбороты.ХарактеристикаНоменклатуры, | ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток КАК КоличествоНачальныйОстаток, | ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход КАК КоличествоПриход, | ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход КАК КоличествоРасход, | ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток КАК КоличествоКонечныйОстаток, | ПартииТоваровНаСкладахОстаткиИОбороты.СтоимостьНачальныйОстаток КАК СтоимостьНачальныйОстаток, | ПартииТоваровНаСкладахОстаткиИОбороты.СтоимостьПриход КАК СтоимостьПриход, | ПартииТоваровНаСкладахОстаткиИОбороты.СтоимостьРасход КАК СтоимостьРасход, | ПартииТоваровНаСкладахОстаткиИОбороты.СтоимостьКонечныйОстаток КАК СтоимостьКонечныйОстаток, | НАЧАЛОПЕРИОДА(ТоварыНаСкладахОстаткиИОбороты.Период, МЕСЯЦ) КАК ПериодМесяц, | НАЧАЛОПЕРИОДА(ПартииТоваровНаСкладахОстаткиИОбороты.Период, МЕСЯЦ) КАК ПериодМесяцСумма, | ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.СтоимостьКонечныйОстаток КАК СтоимостьКонечныйОстатокБух, | НАЧАЛОПЕРИОДА(ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.Период, МЕСЯЦ) КАК ПериодМесяцБух |{ВЫБРАТЬ | Склад.*, | Номенклатура.*, | ХарактеристикаНоменклатуры.*, | КоличествоНачальныйОстаток, | КоличествоКонечныйОстаток, | КоличествоПриход, | КоличествоРасход, | СтоимостьНачальныйОстаток, | СтоимостьКонечныйОстаток, | СтоимостьКонечныйОстатокБух, | СтоимостьПриход, | СтоимостьРасход, | ПериодМесяц, | ПериодМесяцСумма, | ПериодМесяцБух} |ИЗ | РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&ДатаНач, &ДатаКон, Месяц, , ) КАК ТоварыНаСкладахОстаткиИОбороты | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах.ОстаткиИОбороты(&ДатаНач, &ДатаКон, Месяц, , ) КАК ПартииТоваровНаСкладахОстаткиИОбороты | ПО ТоварыНаСкладахОстаткиИОбороты.Склад = ПартииТоваровНаСкладахОстаткиИОбороты.Склад | И ТоварыНаСкладахОстаткиИОбороты.Номенклатура = ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура | И ТоварыНаСкладахОстаткиИОбороты.Качество = ПартииТоваровНаСкладахОстаткиИОбороты.Качество | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладахБухгалтерскийУчет.ОстаткиИОбороты(&ДатаНач, &ДатаКон, Месяц, , ) КАК ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты | ПО ТоварыНаСкладахОстаткиИОбороты.Склад = ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.Склад | И ТоварыНаСкладахОстаткиИОбороты.Номенклатура = ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.Номенклатура | И ТоварыНаСкладахОстаткиИОбороты.Качество = ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.Качество |{ГДЕ | ТоварыНаСкладахОстаткиИОбороты.Склад.*, | ТоварыНаСкладахОстаткиИОбороты.Номенклатура.*} | |СГРУППИРОВАТЬ ПО | ТоварыНаСкладахОстаткиИОбороты.ХарактеристикаНоменклатуры, | ТоварыНаСкладахОстаткиИОбороты.Склад, | ТоварыНаСкладахОстаткиИОбороты.Номенклатура, | ТоварыНаСкладахОстаткиИОбороты.КоличествоНачальныйОстаток, | ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток, | ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход, | ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход, | ПартииТоваровНаСкладахОстаткиИОбороты.СтоимостьНачальныйОстаток, | ПартииТоваровНаСкладахОстаткиИОбороты.СтоимостьКонечныйОстаток, | ПартииТоваровНаСкладахОстаткиИОбороты.СтоимостьПриход, | ПартииТоваровНаСкладахОстаткиИОбороты.СтоимостьРасход, | НАЧАЛОПЕРИОДА(ТоварыНаСкладахОстаткиИОбороты.Период, МЕСЯЦ), | НАЧАЛОПЕРИОДА(ПартииТоваровНаСкладахОстаткиИОбороты.Период, МЕСЯЦ), | ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.СтоимостьКонечныйОстаток, | НАЧАЛОПЕРИОДА(ПартииТоваровНаСкладахБухгалтерскийУчетОстаткиИОбороты.Период, МЕСЯЦ) |{УПОРЯДОЧИТЬ ПО | Склад.*, | Номенклатура.*, | ПериодМесяц, | ПериодМесяцСумма, | ПериодМесяцБух} |ИТОГИ | СУММА(КоличествоНачальныйОстаток), | СУММА(КоличествоПриход), | СУММА(КоличествоРасход), | СУММА(КоличествоКонечныйОстаток), | СУММА(СтоимостьНачальныйОстаток), | СУММА(СтоимостьПриход), | СУММА(СтоимостьРасход), | СУММА(СтоимостьКонечныйОстаток), | СУММА(СтоимостьКонечныйОстатокБух) |ПО | ОБЩИЕ |{ИТОГИ ПО | Склад.*, | Номенклатура.*, | ПериодМесяц, | ПериодМесяцСумма, | ПериодМесяцБух} |АВТОУПОРЯДОЧИВАНИЕ"; Отчет долго работает и если период поставить больше 3 месяцев вообще выплевывает "недостаточно памяти". Может его как-то с оптимизировать. У меня как вариант убрать из него управленческую составляющую и оставить только БУ. Кто что подскажет заранее спасибо. |
|||
1
Жан Пердежон
12.03.19
✎
16:16
|
(0) подскажу почитать про оптимизацию запросов хоть что-нибудь;
инфы море (тот же ИТС) |
|||
2
asder117
12.03.19
✎
16:18
|
(1) читал, но что-то в голову ничего не пришло...Это было первое куда я смотрел
|
|||
3
Ёпрст
12.03.19
✎
16:18
|
Группировать по ресурсам, это пять
|
|||
4
sqr4
12.03.19
✎
16:23
|
Связи по характеристикам нету
|
|||
5
asder117
12.03.19
✎
16:30
|
(3) Может вообще ее убрать лучше?
(4) может убыстрить если добавить? |
|||
6
sqr4
12.03.19
✎
16:31
|
Ном 1 Хар 1
ном 1 хар 2 Ном 1 Хар 1 Ном 2 Хар 2 сколько записей будет при левом соединении? |
|||
7
sqr4
12.03.19
✎
16:31
|
Если связываться толкьо по номенклатуре?
|
|||
8
Sapiens_bru
12.03.19
✎
16:33
|
Пиши контакты сюда или на почту [email protected] , подключусь, раскидаем отчёт консолькой, найдем причину медленной работы.
Бесплатно в рамках моей подготовки к 1С Эксперт |
|||
9
asder117
12.03.19
✎
16:35
|
(7) НЕ пробовал
|
|||
10
asder117
12.03.19
✎
16:54
|
Еще может какие варианты есть??
|
|||
11
Ёпрст
12.03.19
✎
17:00
|
(10) есть. Весь запрос в топку
|
|||
12
breezee
12.03.19
✎
17:07
|
Постройте запрос к одному регистру и поместите во временную таблицу и ко второму, тоже во временную и сойденятесь. Используйте СКД. Практика показывает, что СКД быстрее и удобней универсального отчета.
С периодичностью месяц, наверное, не надо дату приводить к началу месяца (но это не точно) |
|||
13
DrWatson
12.03.19
✎
17:07
|
(0) Отборы не в ГДЕ, а в параметрах виртуальной таблицы.
|
|||
14
sqr4
12.03.19
✎
17:10
|
(13) а где ГДЕ?)
|
|||
15
Ботаник Гарден Меран
12.03.19
✎
17:18
|
(14)
{ГДЕ | ТоварыНаСкладахОстаткиИОбороты.Склад.*, | ТоварыНаСкладахОстаткиИОбороты.Номенклатура.*} |
|||
16
palsergeich
12.03.19
✎
17:18
|
Всё тлен.
Использование ОстаткиИОбороты - чтение всей таблицы за период. 1 оценить количество данных в каждом запросе соединения. 2 нарушена одна из рекомендаций 1с не соединять 2 и более виртуальных таблиц. Скорее всего оптимизатор лазает. Что бы я сделал: разделил каждую Вирт таблицу в отдельный пакет и потом соединил бы уже пакеты |
|||
17
palsergeich
12.03.19
✎
17:20
|
Если записей в регистрах очень много и разделение на пакеты не возможно, то принципиально переделывать архитектуру.
|
|||
18
palsergeich
12.03.19
✎
17:21
|
(16) и при чем не факт что оптимизатор не ошибется
|
|||
19
Ёпрст
12.03.19
✎
17:21
|
У него и так дублирующая инфа в этих вт. В партиях поди, количество уже есть - не надо тащить ТоварыНаСкладах ну и т.д
|
|||
20
palsergeich
12.03.19
✎
17:23
|
Конфа не известна и может быть из партий не очень то и достанешь.
|
|||
21
DrWatson
12.03.19
✎
17:25
|
(17) Вот именно, временные таблицы могут быть большими. Это же отчет, возьмут пользователи и не поставят отборы. Тут можно подумать о замене соединения объединением с группировкой.
|
|||
22
palsergeich
12.03.19
✎
17:25
|
Конкретно в этом случае ещё как вариант - запрос объединение.
В первой части получить остатки начальные конечные. Во второй части - обороты из реальной таблицы. |
|||
23
palsergeich
12.03.19
✎
17:27
|
В принципе для того что бы сделать через объединение никаких препятствий не вижу, будет быстрее
|
|||
24
asder117
12.03.19
✎
17:35
|
(20) УПП
|
|||
25
asder117
12.03.19
✎
17:35
|
(23) Как вариант попробую
|
|||
26
asder117
12.03.19
✎
17:41
|
что самое интересное надо выводить помесячно.
(12)стоимость если я привожу к началупериода НАЧАЛОПЕРИОДА(ПартииТоваровНаСкладахОстаткиИОбороты.Период, МЕСЯЦ), то он берет начало следующего месяца |
|||
27
Homer
12.03.19
✎
18:05
|
Если это УПП, то автор совсем плох в знаниях
1. РегистрНакопления.ТоварыНаСкладах - он должен равняться РегистрНакопления.ПартииТоваровНаСкладах. 2. Как уже было сказано объединение тут рулит. 3. Если это через универсальный отчет, то где характеристики? |
|||
28
asder117
12.03.19
✎
18:18
|
(27) Это я знаю просто в некоторых случаях у нас не совпадает вот и было решено 2 регистар использовать.
Боюсь при объединение периоды потерять. в первом регистре период на начало месяца к примеру а во втором несколько дат в месяце.. Характеристики добавил - но это не помогло. попробую объединением попробовать а второй регистр остатки с приведением периода к началу периода |
|||
29
asder117
12.03.19
✎
18:19
|
(19) в некоторых позициях разнятся
|
|||
30
asder117
12.03.19
✎
21:13
|
вообщем через объединение сделал дальше смотрю
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |