Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
30 сен 2024, 12:32

1С 8.3. Как оптимизировать данный код? Долго грузится

Автор gulnyr, 14 мар 2023, 16:14

0 Пользователей и 1 гость просматривают эту тему.

gulnyr

Есть такой код:

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

|     ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровКомпании.ОстаткиИОбороты(&НачПериодаНеделя,&КонецПериодаНеделя) КАК ПартииТоваровКомпанииОстаткиИОборотыНеделя
    |     ПО ПартииТоваровКомпанииОстаткиИОборотыНеделя.Номенклатура.Артикул = РегистрНакопленияПартииТоваров.Номенклатура.Артикул

    |ГДЕ РегистрНакопленияПартииТоваров.Период МЕЖДУ НАЧАЛОПЕРИОДА(&НачалоДаты) И КОНЕЦПЕРИОДА(&КонецДаты) И
|РегистрНакопленияПартииТоваров.ХозОперация = &ХозОперация

|СГРУППИРОВАТЬ ПО РегистрНакопленияПартииТоваров.Номенклатура";
   
    Запрос.УстановитьПараметр("НачалоДаты",ДатаНачала);
    Запрос.УстановитьПараметр("КонецДаты",ДатаОкончания);
   
    Запрос.УстановитьПараметр("НачПериода", ДобавитьМесяц(ТекущаяДата(), -12) );
    Запрос.УстановитьПараметр("КонецПериода",ТекущаяДата());
Запрос.УстановитьПараметр("ХозОперация",Справочники.ХозОперации.НайтиПоНаименованию("Перемещение товаров в производство"));

Запрос.УстановитьПараметр("НачПериодаНеделя", ТекущаяДата()-60*60*24*7 );
Запрос.УстановитьПараметр("КонецПериодаНеделя",ТекущаяДата());

   
    ТаблицаОтчета = Запрос.Выполнить().Выбрать();

Код начал долго грузиться после добавления еще одного левого соединения:

ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровКомпании.ОстаткиИОбороты(&НачПериодаНеделя,&КонецПериодаНеделя) КАК ПартииТоваровКомпанииОстаткиИОборотыНеделя
    ПО ПартииТоваровКомпанииОстаткиИОборотыНеделя.Номенклатура.Артикул = РегистрНакопленияПартииТоваров.Номенклатура.Артикул

Как оптимизировать данный код?

Точнее вот эти две левые соединении (можно ли их как-то объединить, но чтобы параметры периодов были разными):

     ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровКомпании.ОстаткиИОбороты(&НачПериода,&КонецПериода) КАК ПартииТоваровКомпанииОстаткиИОбороты
    ПО ПартииТоваровКомпанииОстаткиИОбороты.Номенклатура.Артикул = РегистрНакопленияПартииТоваров.Номенклатура.Артикул

ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровКомпании.ОстаткиИОбороты(&НачПериодаНеделя,&КонецПериодаНеделя) КАК ПартииТоваровКомпанииОстаткиИОборотыНеделя
    ПО ПартииТоваровКомпанииОстаткиИОборотыНеделя.Номенклатура.Артикул = РегистрНакопленияПартииТоваров.Номенклатура.Артикул

LexaK

gulnyr, да там много чего
1.не надо соединять исходную таблицу с виртуальными остатками, и после этого ее агргировать!
2.в виртуальные таблицы передать как можно больше параметров
3 вот такую конструкцию не используют
ПО ПартииТоваровКомпанииОстаткиИОбороты.Номенклатура.Артикул = РегистрНакопленияПартииТоваров.Номенклатура.Артикул
вместо нее попробуйте так
ПО ПартииТоваровКомпанииОстаткиИОбороты.Номенклатура = РегистрНакопленияПартииТоваров.Номенклатура
4.проверить индексирование нужных реквизитов
если помогло нажмите: Спасибо!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск