8.х медленно работает запрос из отчета на сервере

Тема в разделе "Общие вопросы "1С:Предприятие 8"", создана пользователем bukinaav875, 10 июн 2019.

  1. TopicStarter Overlay
    bukinaav875
    Offline

    bukinaav875

    Регистрация:
    29 мар 2019
    Сообщения:
    2
    Симпатии:
    0
    Баллы:
    1
    Добрый день! Есть отчет, в нем 3 запроса в функции, на локальной машине отчет формируется в программе 1с 8.3 (платформа 8.3.14...) за секунд 20. Пробую его формировать на сервере на рабочей базе, формируется 10 минут. Подскажите, пожалуйста, в чем может быть проблема?
    код запроса:
    Функция ЗапросДанных(НачалоПериода, КонецПериода, Потребитель, Транзит)

    МенеджерВТ = Новый МенеджерВременныхТаблиц;

    Запрос1 = Новый Запрос;
    Запрос1.МенеджерВременныхТаблиц = МенеджерВТ;

    Запрос1.Текст = "
    | ВЫБРАТЬ
    | ПередачаСетьОбороты.ДоговорЭнергоснабжения
    | ,ПередачаСетьОбороты.ТочкаУчета.Код
    | ,ПередачаСетьОбороты.ТочкаУчета
    | ,ПередачаСетьОбороты.СПООборот
    | ,ПередачаСетьОбороты.МощностьОборот
    | ПОМЕСТИТЬ ТочкиВнеСхемы
    | ИЗ
    | РегистрНакопления.ПередачаСеть.Обороты(&НачалоПериода, &КонецПериода, Период, ) КАК ПередачаСетьОбороты
    |
    | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СхемыДолевыхТочек СДТ1
    | ПО СДТ1.Владелец = ПередачаСетьОбороты.ТочкаУчета
    | И НЕ СДТ1.Владелец.Наименование ПОДОБНО ""%потери%""
    | И СДТ1.ПометкаУдаления = Ложь
    |
    | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СхемыДолевыхТочек СДТ2
    | ПО СДТ2.ТочкаУчета = ПередачаСетьОбороты.ТочкаУчета
    | И НЕ СДТ2.Владелец.Наименование ПОДОБНО ""%потери%""
    | И СДТ2.ПометкаУдаления = Ложь
    |
    | ГДЕ 1 = 1
    | " + ?(Транзит = Справочники.ТранспортирующиеОрганизацииNEW.ПустаяСсылка(), "", "И ПередачаСетьОбороты.ТочкаУчета.ТранспортирующаяОрганизацияNEW В Иерархии(&сеть)") + "
    | " + ?(Потребитель = Справочники.Контрагенты.ПустаяСсылка(), "", "И ПередачаСетьОбороты.ДоговорЭнергоснабжения.Владелец В Иерархии(&Потребитель)") + "
    | И ЕСТЬNULL(СДТ1.Владелец, СДТ2.Владелец) ЕСТЬ NULL;
    | ";

    Запрос1.УстановитьПараметр("НачалоПериода", НачалоПериода);
    Запрос1.УстановитьПараметр("КонецПериода", КонецПериода);
    Запрос1.УстановитьПараметр("Потребитель", Потребитель);
    Запрос1.УстановитьПараметр("сеть", Транзит);

    Результат = Запрос1.Выполнить();

    Запрос2 = Новый Запрос();
    Запрос2.МенеджерВременныхТаблиц = МенеджерВТ;

    Запрос2.Текст = "
    | ВЫБРАТЬ
    | ТочкиИтогов.ДоговорЭнергоснабжения
    | ,ТочкиИтогов.Владелец.Код
    | ,ТочкиИтогов.Владелец
    | ,ЕСТЬNULL(СПОРег.СПООборот, ПередачаСетьОбороты.СПООборот) КАК СПООборот
    | ,ЕСТЬNULL(СПОРег.МощностьОборот, ПередачаСетьОбороты.МощностьОборот) КАК МощностьОборот
    | ПОМЕСТИТЬ ТочкиСхемы
    | ИЗ
    | (ВЫБРАТЬ
    | ПередачаСетьОбороты.ДоговорЭнергоснабжения
    | ,ЕСТЬNULL(СДТ1.Владелец, СДТ2.Владелец) КАК Владелец
    | ИЗ
    | РегистрНакопления.ПередачаСеть.Обороты(&НачалоПериода, &КонецПериода, Период, ) КАК ПередачаСетьОбороты
    |
    | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СхемыДолевыхТочек СДТ1
    | ПО СДТ1.Владелец = ПередачаСетьОбороты.ТочкаУчета
    | И НЕ СДТ1.Владелец.Наименование ПОДОБНО ""%потери%""
    | И СДТ1.ПометкаУдаления = Ложь
    |
    | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СхемыДолевыхТочек СДТ2
    | ПО СДТ2.ТочкаУчета = ПередачаСетьОбороты.ТочкаУчета
    | И НЕ СДТ2.Владелец.Наименование ПОДОБНО ""%потери%""
    | И СДТ2.ПометкаУдаления = Ложь
    |
    | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОтключенияТочекУчета.СрезПоследних(&КонецПериода) КАК ОтклТУ
    | ПО ЕСТЬNULL(СДТ1.Владелец, СДТ2.Владелец) = ОтклТУ.ТочкаУчета
    |
    | ГДЕ 1 = 1
    | " + ?(Транзит = Справочники.ТранспортирующиеОрганизацииNEW.ПустаяСсылка(), "", "И ПередачаСетьОбороты.ТочкаУчета.ТранспортирующаяОрганизацияNEW В Иерархии(&сеть)") + "
    | " + ?(Потребитель = Справочники.Контрагенты.ПустаяСсылка(), "", "И ПередачаСетьОбороты.ДоговорЭнергоснабжения.Владелец В Иерархии(&Потребитель)") + "
    | И НЕ ЕСТЬNULL(СДТ1.Владелец, СДТ2.Владелец) ЕСТЬ NULL
    | И ОтклТУ.Состояние = Истина

    | СГРУППИРОВАТЬ ПО
    | ПередачаСетьОбороты.ДоговорЭнергоснабжения
    | ,ЕСТЬNULL(СДТ1.Владелец, СДТ2.Владелец)
    | ) КАК ТочкиИтогов

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

    Запрос2.УстановитьПараметр("НачалоПериода", НачалоПериода);
    Запрос2.УстановитьПараметр("КонецПериода", КонецПериода);
    Запрос2.УстановитьПараметр("Потребитель", Потребитель);
    Запрос2.УстановитьПараметр("сеть", Транзит);

    Результат = Запрос2.Выполнить();

    Запрос3 = Новый Запрос();
    Запрос3.МенеджерВременныхТаблиц = МенеджерВТ;

    Запрос3.Текст = "
    | ВЫБРАТЬ
    | ТочкаУчета.ТранспортирующаяОрганизацияNEW.Код КАК ТочкаУчетаТранспортирующаяОрганизацияNEWКод
    | ,ТочкаУчета.ТранспортирующаяОрганизацияNEW КАК ТочкаУчетаТранспортирующаяОрганизацияNEW
    | ,ДоговорЭнергоснабжения КАК ТочкаУчетаДоговорЭнергоснабженияНаименование
    | ,ДоговорЭнергоснабжения.Владелец.Код КАК ТочкаУчетаДоговорЭнергоснабженияВладелецКод
    | ,ДоговорЭнергоснабжения.Владелец КАК ТочкаУчетаДоговорЭнергоснабженияВладелецНаименование

    | ,ТочкаУчета.Фидер.Владелец КАК ТочкаУчетаПодстанция
    | ,ТочкаУчета.Фидер КАК ТочкаУчетаФидер
    | ,ТочкаУчета.КТП КАК ТочкаУчетаКТП

    | ,ТочкаУчета.Код
    | ,ТочкаУчета
    |
    | ,ЕСТЬNULL(КоррОтчета.ВН + КоррОтчета.СН1 + КоррОтчета.СН2 + КоррОтчета.НН, СПООборот) КАК ПО_ВСЕГО
    |
    | ,ВЫБОР
    | КОГДА ТочкаУчета.НапряжениеСеть.Класс = ЗНАЧЕНИЕ(Перечисление.КлассыНапряжений.ВысокоеНапряжение)
    | ТОГДА ЕСТЬNULL(КоррОтчета.ВН, ТочкиДляОтчета.СПООборот)
    | ИНАЧЕ 0
    | КОНЕЦ КАК ПО_ВН
    |
    | ,ВЫБОР
    | КОГДА ТочкаУчета.НапряжениеСеть.Класс = ЗНАЧЕНИЕ(Перечисление.КлассыНапряжений.СреднееНапряжение1)
    | ТОГДА ЕСТЬNULL(КоррОтчета.СН1, ТочкиДляОтчета.СПООборот)
    | ИНАЧЕ 0
    | КОНЕЦ КАК ПО_СН1
    |
    | ,ВЫБОР
    | КОГДА ТочкаУчета.НапряжениеСеть.Класс = ЗНАЧЕНИЕ(Перечисление.КлассыНапряжений.СреднееНапряжение2)
    | ТОГДА ЕСТЬNULL(КоррОтчета.СН2, ТочкиДляОтчета.СПООборот)
    | ИНАЧЕ 0
    | КОНЕЦ КАК ПО_СН2
    |
    | ,ВЫБОР
    | КОГДА ТочкаУчета.НапряжениеСеть.Класс = ЗНАЧЕНИЕ(Перечисление.КлассыНапряжений.НизкоеНапряжение)
    | ТОГДА ЕСТЬNULL(КоррОтчета.НН, ТочкиДляОтчета.СПООборот)
    | ИНАЧЕ 0
    | КОНЕЦ КАК ПО_НН
    |
    | ,ЕСТЬNULL(КоррОтчета.СетМощность, ТочкиДляОтчета.МощностьОборот) КАК Мощность
    | ИЗ
    | (
    | ВЫБРАТЬ * ИЗ ТочкиВнеСхемы
    | ОБЪЕДИНИТЬ ВСЕ
    | ВЫБРАТЬ * ИЗ ТочкиСхемы
    | ) КАК ТочкиДляОтчета

    | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КорректировкаОтчетаТранспортировка КАК КоррОтчета
    | ПО КоррОтчета.Договор = ТочкиДляОтчета.ДоговорЭнергоснабжения И КоррОтчета.Период = &НачалоПериода
    | И ТочкиДляОтчета.ТочкаУчета = КоррОтчета.ТУ

    | ГДЕ 1 = 1
    //| " + ?(Транзит = Справочники.ТранспортирующиеОрганизацииNEW.ПустаяСсылка(), "", "И ПередачаСетьОбороты.ТочкаУчета.ТранспортирующаяОрганизацияNEW В Иерархии(&сеть)") + "
    //| " + ?(Потребитель = Справочники.Контрагенты.ПустаяСсылка(), "", "И ДоговорЭнергоснабжения.Владелец В Иерархии(&Потребитель)") + "

    | ИТОГИ
    | СУММА(ПО_Всего)
    | ,СУММА(ПО_ВН)
    | ,СУММА(ПО_СН1)
    | ,СУММА(ПО_СН2)
    | ,СУММА(ПО_НН)
    | ,СУММА(Мощность)
    | ПО
    | ОБЩИЕ,
    | ТочкаУчетаТранспортирующаяОрганизацияNEW ИЕРАРХИЯ,
    | ТочкаУчетаДоговорЭнергоснабженияНаименование
    | АВТОУПОРЯДОЧИВАНИЕ
    |";

    Запрос3.УстановитьПараметр("НачалоПериода", НачалоПериода);
    Запрос3.УстановитьПараметр("КонецПериода", КонецПериода);
    Запрос3.УстановитьПараметр("Потребитель", Потребитель);
    Запрос3.УстановитьПараметр("сеть", Транзит);

    Выборка = Запрос3.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

    Возврат Выборка;

    КонецФункции
  2. ТехБухПривет
    Offline

    ТехБухПривет Профессионал в 1С Команда форума

    Регистрация:
    25 июн 2013
    Сообщения:
    780
    Симпатии:
    86
    Баллы:
    54
    Оформляйте через upload_2019-6-10_11-33-30.png КОД очень сложно читать!

    Если отладчиком проходите, именно на этих запросах зависает?
    По хорошему "Подобно" лучше не использовать или отбирать заранее эти значения в временную и оттуда уже присоединять!

    Отладка запроса делается просто - Консоль запросов и проверяете по времени выполнение от сложного к простому отслеживая по времени...

    Вложения:

  3. TopicStarter Overlay
    bukinaav875
    Offline

    bukinaav875

    Регистрация:
    29 мар 2019
    Сообщения:
    2
    Симпатии:
    0
    Баллы:
    1
    Спасибо за ответ!