|
Оптимизация запроса Crusher, RVN, Галахад, Prog_man, alex_kld_2024, Бычье сердце, eRik, H A D G E H O G s, igouranga, Dmitrii, Hawk_1c, mikecool, Garykom, piter3, backfire, Мультук, palsergeich, DiMel_77, ldo6, SleepyHead, andryscha1c, АнализДанных, Spyke, ADirks, Greeen, who respawn, lucky_, AlexKimp, tir654, laeg, LuckyStar, qwerty, Homer, Wern, Fil_il, СвинТуз, Дмитрий, , Шурик71, Djelf, calmius, maxab72, Жеглофф, ReaLg, BDA80, , Гипервизор, Mankubus, elka302, Tigrann, rozer76, dergreche, Sasha_1CK, okmail, orakool, Доминошник, Timon1405, tomvlad, CepeLLlka, Bigbro, craxx, Silgis, WARLOG, vyaz, Ёпрст, jack777, TormozIT, breezee, DimR_71, 2S, DemonShinji2, formista2000, novichok79, , DimVad, Valdis2007, ILM, , U4Me2
| ☑ | ||
---|---|---|---|---|
0
Хрусталев
04.03.25
✎
12:56
|
Здравствуйте, помогите с оптимизацией запроса, пожалуйста, кому не лень
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ПоступлениеДопРасходов.Содержание КАК Содержание, | ПоступлениеДопРасходов.Номенклатура КАК Номенклатура, | СУММА(ПоступлениеДопРасходов.Сумма) КАК Сумма, | МАКСИМУМ(ЗаказПоставщикуОтгруженный.Количество) КАК Количество, | ПоступлениеДопРасходов.Валюта КАК Валюта, | ПоступлениеДопРасходов.Курс КАК Курс, | ПоступлениеДопРасходов.Контрагент КАК Контрагент, | ПоступлениеДопРасходов.ДоговорВзаиморасчетов КАК Договор |ИЗ | (ВЫБРАТЬ | ""ГТД: Таможенная пошлина"" КАК Содержание, | ГТДИмпортТовары.Номенклатура КАК Номенклатура, | ГТДИмпортТовары.Количество КАК Количество, | ГТДИмпортТовары.СуммаПошлины КАК Сумма, | ГТДИмпортТовары.Ссылка.ДоговорВзаиморасчетов.ВалютаВзаиморасчетов КАК Валюта, | ГТДИмпортТовары.Ссылка.КурсВзаиморасчетов КАК Курс, | ГТДИмпортТовары.Ссылка.Контрагент КАК Контрагент, | ГТДИмпортТовары.Ссылка.ДоговорВзаиморасчетов КАК ДоговорВзаиморасчетов | ИЗ | Документ.ГТДИмпорт.Товары КАК ГТДИмпортТовары | ГДЕ | ГТДИмпортТовары.Ссылка.ДокументОснование = &Основание | И ГТДИмпортТовары.Ссылка.Проведен | И ГТДИмпортТовары.Номенклатура В(&МассивНоменклатуры) | | ОБЪЕДИНИТЬ ВСЕ | | ВЫБРАТЬ | ""ГТД: НДС"", | ГТДИмпортТовары.Номенклатура, | ГТДИмпортТовары.Количество, | ГТДИмпортТовары.СуммаНДС, | ГТДИмпортТовары.Ссылка.ДоговорВзаиморасчетов.ВалютаВзаиморасчетов, | ГТДИмпортТовары.Ссылка.КурсВзаиморасчетов, | ГТДИмпортТовары.Ссылка.Контрагент, | ГТДИмпортТовары.Ссылка.ДоговорВзаиморасчетов | ИЗ | Документ.ГТДИмпорт.Товары КАК ГТДИмпортТовары | ГДЕ | ГТДИмпортТовары.Ссылка.ДокументОснование = &Основание | И ГТДИмпортТовары.Ссылка.Проведен | И ГТДИмпортТовары.Номенклатура В(&МассивНоменклатуры) | | ОБЪЕДИНИТЬ ВСЕ | | ВЫБРАТЬ | ""ГТД: Таможенный сбор"", | ГТДИмпортТовары.Номенклатура, | ГТДИмпортТовары.Количество, | ГТДИмпортТовары.СуммаТаможня, | ГТДИмпортТовары.Ссылка.ДоговорВзаиморасчетов.ВалютаВзаиморасчетов, | ГТДИмпортТовары.Ссылка.КурсВзаиморасчетов, | ГТДИмпортТовары.Ссылка.Контрагент, | ГТДИмпортТовары.Ссылка.ДоговорВзаиморасчетов | ИЗ | Документ.ГТДИмпорт.Товары КАК ГТДИмпортТовары | ГДЕ | ГТДИмпортТовары.Ссылка.ДокументОснование = &Основание | И ГТДИмпортТовары.Ссылка.Проведен | И ГТДИмпортТовары.Номенклатура В(&МассивНоменклатуры) | | ОБЪЕДИНИТЬ ВСЕ | | ВЫБРАТЬ | ""ДР: "" + ПоступлениеДопРасходовИмпортТовары.Ссылка.Содержание, | ПоступлениеДопРасходовИмпортТовары.Номенклатура, | ПоступлениеДопРасходовИмпортТовары.Количество, | ПоступлениеДопРасходовИмпортТовары.Сумма, | ПоступлениеДопРасходовИмпортТовары.Ссылка.ВалютаДокумента, | ПоступлениеДопРасходовИмпортТовары.Ссылка.КурсДокумента, | ПоступлениеДопРасходовИмпортТовары.Ссылка.Контрагент, | ПоступлениеДопРасходовИмпортТовары.Ссылка.ДоговорВзаиморасчетов | ИЗ | Документ.ПоступлениеДопРасходовИмпорт.Товары КАК ПоступлениеДопРасходовИмпортТовары | ГДЕ | ПоступлениеДопРасходовИмпортТовары.Ссылка.ДокументОснование = &Основание | И ПоступлениеДопРасходовИмпортТовары.Ссылка.Проведен | И ПоступлениеДопРасходовИмпортТовары.Номенклатура В(&МассивНоменклатуры)) КАК ПоступлениеДопРасходов | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | ЗаказПоставщикуОтгруженныйТовары.Номенклатура КАК Номенклатура, | СУММА(ЗаказПоставщикуОтгруженныйТовары.Количество) КАК Количество | ИЗ | Документ.ЗаказПоставщикуОтгруженный.Товары КАК ЗаказПоставщикуОтгруженныйТовары | ГДЕ | ЗаказПоставщикуОтгруженныйТовары.Ссылка = &Основание | | СГРУППИРОВАТЬ ПО | ЗаказПоставщикуОтгруженныйТовары.Номенклатура) КАК ЗаказПоставщикуОтгруженный | ПО ПоступлениеДопРасходов.Номенклатура = ЗаказПоставщикуОтгруженный.Номенклатура | |СГРУППИРОВАТЬ ПО | ПоступлениеДопРасходов.Содержание, | ПоступлениеДопРасходов.Номенклатура, | ПоступлениеДопРасходов.Валюта, | ПоступлениеДопРасходов.Курс, | ПоступлениеДопРасходов.Контрагент, | ПоступлениеДопРасходов.ДоговорВзаиморасчетов"; Запрос.УстановитьПараметр("Основание", ПоступлениеТоваровИмпорт.ДокументОснование); Запрос.УстановитьПараметр("МассивНоменклатуры", ПоступлениеТоваровИмпорт.Товары.ВыгрузитьКолонку("Номенклатура")); ТЗ_Товары = ПоступлениеТоваровИмпорт.Товары.Выгрузить(); ТЗ_Товары.Свернуть("Номенклатура", "Количество"); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл НоваяСтрокаТЧ = ДопРасходыИмпортДокументы.Добавить(); НоваяСтрокаТЧ.Содержание = Выборка.Содержание; НоваяСтрокаТЧ.Контрагент = Выборка.Контрагент; НоваяСтрокаТЧ.Договор = Выборка.Договор; НоваяСтрокаТЧ.Валюта = Выборка.Валюта; НоваяСтрокаТЧ.Курс = Выборка.Курс; НоваяСтрокаТЧ.Часть = "ПОСЛЕ"; нс = ТЗ_Товары.Найти(Выборка.Номенклатура, "Номенклатура"); КолТовар = нс.Количество; Если КолТовар = Выборка.Количество Тогда НоваяСтрокаТЧ.Сумма = Выборка.Сумма; Иначе НоваяСтрокаТЧ.Сумма = Окр(Выборка.Сумма / Выборка.Количество * КолТовар, 2, 1); КонецЕсли; НоваяСтрокаТЧ.СуммаРуб = НоваяСтрокаТЧ.Сумма * НоваяСтрокаТЧ.Курс; НоваяСтрокаТЧ.СуммаУпр = _обПересчет(НоваяСтрокаТЧ.Сумма, НоваяСтрокаТЧ.Валюта, НоваяСтрокаТЧ.Курс, Константы.ВалютаУправленческогоУчетаКомпании.Получить(), ?(ЗначениеЗаполнено(ПоступлениеТоваровИмпорт.Дата), ПоступлениеТоваровИмпорт.Дата, ТекущаяДата())); КонецЦикла; ДопРасходыИмпортДокументы.Свернуть("Содержание,Контрагент,Договор,Валюта,Курс,Часть", "Сумма,СуммаРуб,СуммаУпр"); ДопРасходыИмпортДокументы.Сортировать("Содержание,Часть"); |
|||
1
Волшебник
04.03.25
✎
12:56
|
Меня всё устраивает
|
|||
2
Мультук
гуру
04.03.25
✎
13:02
|
(1)
+1 1) Если "взрослые" придираются, то можно вынести подзапросы во временные таблицы, но так как строк там "кот наплакал", толку особо не будет. 2) Данные которые выбираются в "ОБЪЕДИНИТЬ ВСЕ" можно заранее выбрать в ВТ, а затем выбирать из неё. Но это всё "бантики". Поэтому вопрос -- а ради чего оптимизация ? Нет индекса по полю "ДокументОснование" ? ГТДИмпортТовары.Ссылка.ДокументОснование = &Основание |
|||
3
Garykom
гуру
04.03.25
✎
13:05
|
(0) использовать ВТ
и добавить сразу в запрос код обработки который после запроса |
|||
4
Гипервизор
04.03.25
✎
13:19
|
С такой фамилией и про запросы спрашивать..
https://v8.1c.ru/metod/books/193205.htm |
|||
5
lucky_
04.03.25
✎
13:31
|
Константу в цикле получаешь, дату в цикле получаешь, текдату в цикле получаешь.
это первое, от чего кровь брызгает. по запросу согласен с (3) |
|||
6
oleg_km
04.03.25
✎
14:49
|
А что не устраивает? Если просто долго и хочется понять где, то есть эмпирический способ: пошагово добавляешь в запрос подзапросы, на котором споткнулся, тот и начинаешь оптимизировать. А так оптимизировать сферического коня можно долго
|
|||
7
TormozIT
гуру
04.03.25
✎
15:29
|
(4) Возможно это не он. Пол то не совпадает.
|
|||
8
Галахад
гуру
04.03.25
✎
15:14
|
Ну например, для чего первые три таблицы подзапроса, когда данные можно получить одной?
Зачем таблица ЗаполнитьНаОснованииАвизоИсходящее? |
|||
9
ILM
гуру
05.03.25
✎
07:04
|
1. Включить Справочник.ДоговорыКОнтаргентов в запрос, чтобы не получать "ВалютаВзаиморасчетов".
2. Сделать запрос таблицы содержания из 3-х строк и соединить его с запросом к таблице "Документ.ГТДИмпорт.Товары", чтобы 3 раза не обращаться к таблице 3. С параметрами бы ещё разобраться. Может стоит по основанию выбрать и отобрать то, что нужно. Думаю есть куда покопать в сторону улучшения. |
|||
10
SleepyHead
гуру
05.03.25
✎
07:17
|
(5) Плюс к этому проиндексировать таблицу значений по колонке "Номенклатура", поиск будет быстрее.
|
|||
11
lucky_
05.03.25
✎
08:26
|
(10) ох уж эти любители рисовать индексы, там где не надо)
|
|||
12
АнализДанных
05.03.25
✎
13:09
|
(0) Соединение с вложенной таблицей "ЗаказПоставщикуОтгруженный" сделать соединением с временной таблицей. Предварительно "ЗаказПоставщикуОтгруженный" положить во временную таблицу.
|
|||
13
mikecool
05.03.25
✎
13:31
|
(11) аргументируй
|
|||
14
mikecool
05.03.25
✎
13:32
|
(12) а это уже зависит от кол-ва строк в документе, может вырасти время за счет создания-индексирования ВТ
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |