Имя: Пароль:
1C
1С v8
Проблемы при оптимизации типового запроса
0 dark_avenger
 
11.10.14
01:33
Уважаемые коллеги, не могли бы вы ткнуть меня носом, куда мне ещё глянуть в сторону оптимизации выполнения запроса.
Ситуация следующая: Есть два запроса - 1 типовой, перекочевал ещё с 8.1 и использует вложенные запросы, собственно вот он:

Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ВложенныйЗапрос.Сумма КАК Стоимость,
    |    ВложенныйЗапрос.СуммаНУ КАК СтоимостьНУ,
    |    ВложенныйЗапрос.СуммаПР КАК СтоимостьПР,
    |    ВложенныйЗапрос.СуммаВР КАК СтоимостьВР,
    |    ВложенныйЗапрос.Количество,
    |    ВложенныйЗапрос.СчетКт КАК Счет,
    |    ВложенныйЗапрос.СчетДт КАК Счет" + Префикс + ",
    |    ВложенныйЗапрос.ПодразделениеКт КАК Подразделение,
    |    ВложенныйЗапрос.ПодразделениеДт КАК Подразделение" + Префикс + ",
    |    ВложенныйЗапрос.СубконтоКт1 КАК Субконто1,
    |    ВложенныйЗапрос.СубконтоКт2 КАК Субконто2,
    |    ВложенныйЗапрос.СубконтоКт3 КАК Субконто3,
    |    ВложенныйЗапрос.СубконтоДт1 КАК Субконто1" + Префикс + ",
    |    ВложенныйЗапрос.СубконтоДт2 КАК Субконто2" + Префикс + ",
    |    ВложенныйЗапрос.СубконтоДт3 КАК Субконто3" + Префикс + "
    |ИЗ
    |    (ВЫБРАТЬ
    |        ХозрасчетныйОбороты.СчетКт КАК СчетКт,
    |        ЕСТЬNULL(ХозрасчетныйОбороты.ПодразделениеКт, ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяСсылка)) КАК ПодразделениеКт,
    |        ВЫБОР КОГДА ХозрасчетныйОбороты.СубконтоКт1 ССЫЛКА Справочник.Номенклатура ТОГДА ХозрасчетныйОбороты.СубконтоКт1 КОГДА ХозрасчетныйОбороты.СубконтоКт2 ССЫЛКА Справочник.Номенклатура ТОГДА ХозрасчетныйОбороты.СубконтоКт2 КОГДА ХозрасчетныйОбороты.СубконтоКт3 ССЫЛКА Справочник.Номенклатура ТОГДА ХозрасчетныйОбороты.СубконтоКт3 ИНАЧЕ Неопределено КОНЕЦ КАК НоменклатураКт,
    |        ВЫБОР КОГДА ХозрасчетныйОбороты.СубконтоДт1 ССЫЛКА Справочник.Номенклатура ТОГДА ХозрасчетныйОбороты.СубконтоДт1 КОГДА ХозрасчетныйОбороты.СубконтоДт2 ССЫЛКА Справочник.Номенклатура ТОГДА ХозрасчетныйОбороты.СубконтоДт2 КОГДА ХозрасчетныйОбороты.СубконтоДт3 ССЫЛКА Справочник.Номенклатура ТОГДА ХозрасчетныйОбороты.СубконтоДт3 ИНАЧЕ NULL КОНЕЦ КАК НоменклатураДт,
    |        ВЫБОР КОГДА СуммовойУчетКт.Субконто1 ТОГДА ХозрасчетныйОбороты.СубконтоКт1 ИНАЧЕ Неопределено КОНЕЦ КАК СубконтоКт1,
    |        ВЫБОР КОГДА СуммовойУчетКт.Субконто2 ТОГДА ХозрасчетныйОбороты.СубконтоКт2 ИНАЧЕ Неопределено КОНЕЦ КАК СубконтоКт2,
    |        ВЫБОР КОГДА СуммовойУчетКт.Субконто3 ТОГДА ХозрасчетныйОбороты.СубконтоКт3 ИНАЧЕ Неопределено КОНЕЦ КАК СубконтоКт3,
    |        ХозрасчетныйОбороты.СчетДт КАК СчетДт,
    |        ЕСТЬNULL(ХозрасчетныйОбороты.ПодразделениеДт, ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяСсылка)) КАК ПодразделениеДт,
    |        ВЫБОР КОГДА СуммовойУчетДт.Субконто1 ТОГДА ХозрасчетныйОбороты.СубконтоДт1 ИНАЧЕ Неопределено КОНЕЦ КАК СубконтоДт1,
    |        ВЫБОР КОГДА СуммовойУчетДт.Субконто2 ТОГДА ХозрасчетныйОбороты.СубконтоДт2 ИНАЧЕ Неопределено КОНЕЦ КАК СубконтоДт2,
    |        ВЫБОР КОГДА СуммовойУчетДт.Субконто3 ТОГДА ХозрасчетныйОбороты.СубконтоДт3 ИНАЧЕ Неопределено КОНЕЦ КАК СубконтоДт3,
    |        СУММА(ВЫБОР КОГДА ХозрасчетныйОбороты.СуммаОборот ЕСТЬ NULL  ТОГДА 0 ИНАЧЕ ХозрасчетныйОбороты.СуммаОборот КОНЕЦ) КАК Сумма,
    |        СУММА(ВЫБОР КОГДА ХозрасчетныйОбороты.СуммаНУОборотДт ЕСТЬ NULL  ТОГДА 0 ИНАЧЕ ХозрасчетныйОбороты.СуммаНУОборотДт КОНЕЦ) КАК СуммаНУ,
    |        СУММА(ВЫБОР КОГДА ХозрасчетныйОбороты.СуммаПРОборотДт ЕСТЬ NULL  ТОГДА 0 ИНАЧЕ ХозрасчетныйОбороты.СуммаПРОборотДт КОНЕЦ) КАК СуммаПР,
    |        СУММА(ВЫБОР КОГДА ХозрасчетныйОбороты.СуммаВРОборотДт ЕСТЬ NULL  ТОГДА 0 ИНАЧЕ ХозрасчетныйОбороты.СуммаВРОборотДт КОНЕЦ) КАК СуммаВР,
    |        СУММА(ВЫБОР КОГДА ХозрасчетныйОбороты.КоличествоОборотКт ЕСТЬ NULL  ТОГДА 0 ИНАЧЕ ХозрасчетныйОбороты.КоличествоОборотКт КОНЕЦ) КАК Количество
    |    ИЗ
    |        РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(&ДатаНач, &ДатаКон, , СчетДт В ИЕРАРХИИ (&СписокСчетов), , СчетКт В ИЕРАРХИИ (&СписокСчетов), , Организация = &Организация) КАК ХозрасчетныйОбороты
    |            ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    |                Хозрасчетный.Ссылка КАК Счет,
    |                МАКСИМУМ(ВЫБОР КОГДА ХозрасчетныйВидыСубконто.НомерСтроки = 1 ТОГДА ХозрасчетныйВидыСубконто.Суммовой ИНАЧЕ ЛОЖЬ КОНЕЦ) КАК Субконто1,
    |                МАКСИМУМ(ВЫБОР КОГДА ХозрасчетныйВидыСубконто.НомерСтроки = 2 ТОГДА ХозрасчетныйВидыСубконто.Суммовой ИНАЧЕ ЛОЖЬ КОНЕЦ) КАК Субконто2,
    |                МАКСИМУМ(ВЫБОР КОГДА ХозрасчетныйВидыСубконто.НомерСтроки = 3 ТОГДА ХозрасчетныйВидыСубконто.Суммовой ИНАЧЕ ЛОЖЬ КОНЕЦ) КАК Субконто3
    |            ИЗ
    |                ПланСчетов.Хозрасчетный.ВидыСубконто КАК ХозрасчетныйВидыСубконто
    |                    ЛЕВОЕ СОЕДИНЕНИЕ ПланСчетов.Хозрасчетный КАК Хозрасчетный
    |                    ПО ХозрасчетныйВидыСубконто.Ссылка = Хозрасчетный.Ссылка
    |            
    |            ГДЕ
    |                Хозрасчетный.Ссылка В ИЕРАРХИИ(&СписокСчетов)
    |            
    |            СГРУППИРОВАТЬ ПО
    |                Хозрасчетный.Ссылка) КАК СуммовойУчетКт
    |            ПО ХозрасчетныйОбороты.СчетКт = СуммовойУчетКт.Счет
    |            ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    |                Хозрасчетный.Ссылка КАК Счет,
    |                МАКСИМУМ(ВЫБОР КОГДА ХозрасчетныйВидыСубконто.НомерСтроки = 1 ТОГДА ХозрасчетныйВидыСубконто.Суммовой ИНАЧЕ ЛОЖЬ КОНЕЦ) КАК Субконто1,
    |                МАКСИМУМ(ВЫБОР КОГДА ХозрасчетныйВидыСубконто.НомерСтроки = 2 ТОГДА ХозрасчетныйВидыСубконто.Суммовой ИНАЧЕ ЛОЖЬ КОНЕЦ) КАК Субконто2,
    |                МАКСИМУМ(ВЫБОР КОГДА ХозрасчетныйВидыСубконто.НомерСтроки = 3 ТОГДА ХозрасчетныйВидыСубконто.Суммовой ИНАЧЕ ЛОЖЬ КОНЕЦ) КАК Субконто3
    |            ИЗ
    |                ПланСчетов.Хозрасчетный.ВидыСубконто КАК ХозрасчетныйВидыСубконто
    |                    ЛЕВОЕ СОЕДИНЕНИЕ ПланСчетов.Хозрасчетный КАК Хозрасчетный
    |                    ПО ХозрасчетныйВидыСубконто.Ссылка = Хозрасчетный.Ссылка
    |            
    |            ГДЕ
    |                Хозрасчетный.Ссылка В ИЕРАРХИИ(&СписокСчетов)
    |            
    |            СГРУППИРОВАТЬ ПО
    |                Хозрасчетный.Ссылка) КАК СуммовойУчетДт
    |            ПО ХозрасчетныйОбороты.СчетДт = СуммовойУчетДт.Счет
    |    
    |    СГРУППИРОВАТЬ ПО
    |        ХозрасчетныйОбороты.СчетКт,
    |        ХозрасчетныйОбороты.СчетДт,
    |        ЕСТЬNULL(ХозрасчетныйОбороты.ПодразделениеКт, ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяСсылка)),
    |        ЕСТЬNULL(ХозрасчетныйОбороты.ПодразделениеДт, ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяСсылка)),
    |        ВЫБОР КОГДА ХозрасчетныйОбороты.СубконтоКт1 ССЫЛКА Справочник.Номенклатура ТОГДА ХозрасчетныйОбороты.СубконтоКт1 КОГДА ХозрасчетныйОбороты.СубконтоКт2 ССЫЛКА Справочник.Номенклатура ТОГДА ХозрасчетныйОбороты.СубконтоКт2 КОГДА ХозрасчетныйОбороты.СубконтоКт3 ССЫЛКА Справочник.Номенклатура ТОГДА ХозрасчетныйОбороты.СубконтоКт3 ИНАЧЕ Неопределено КОНЕЦ,
    |        ВЫБОР КОГДА ХозрасчетныйОбороты.СубконтоДт1 ССЫЛКА Справочник.Номенклатура ТОГДА ХозрасчетныйОбороты.СубконтоДт1 КОГДА ХозрасчетныйОбороты.СубконтоДт2 ССЫЛКА Справочник.Номенклатура ТОГДА ХозрасчетныйОбороты.СубконтоДт2 КОГДА ХозрасчетныйОбороты.СубконтоДт3 ССЫЛКА Справочник.Номенклатура ТОГДА ХозрасчетныйОбороты.СубконтоДт3 ИНАЧЕ NULL КОНЕЦ,
    |        ВЫБОР КОГДА СуммовойУчетКт.Субконто1 ТОГДА ХозрасчетныйОбороты.СубконтоКт1 ИНАЧЕ Неопределено КОНЕЦ,
    |        ВЫБОР КОГДА СуммовойУчетКт.Субконто2 ТОГДА ХозрасчетныйОбороты.СубконтоКт2 ИНАЧЕ Неопределено КОНЕЦ,
    |        ВЫБОР КОГДА СуммовойУчетКт.Субконто3 ТОГДА ХозрасчетныйОбороты.СубконтоКт3 ИНАЧЕ Неопределено КОНЕЦ,
    |        ВЫБОР КОГДА СуммовойУчетДт.Субконто1 ТОГДА ХозрасчетныйОбороты.СубконтоДт1 ИНАЧЕ Неопределено КОНЕЦ,
    |        ВЫБОР КОГДА СуммовойУчетДт.Субконто2 ТОГДА ХозрасчетныйОбороты.СубконтоДт2 ИНАЧЕ Неопределено КОНЕЦ,
    |        ВЫБОР КОГДА СуммовойУчетДт.Субконто3 ТОГДА ХозрасчетныйОбороты.СубконтоДт3 ИНАЧЕ Неопределено КОНЕЦ) КАК ВложенныйЗапрос
    |
    |ГДЕ
    //|    ВЫБОР КОГДА ВложенныйЗапрос.СубконтоКт1 ССЫЛКА Документ.ОтчетПроизводстваЗаСмену ТОГДА ВложенныйЗапрос.СубконтоКт1.Дата КОГДА ВложенныйЗапрос.СубконтоКт2 ССЫЛКА Документ.ОтчетПроизводстваЗаСмену ТОГДА ВложенныйЗапрос.СубконтоКт2.Дата КОГДА ВложенныйЗапрос.СубконтоКт3 ССЫЛКА Документ.ОтчетПроизводстваЗаСмену ТОГДА ВложенныйЗапрос.СубконтоКт3.Дата ИНАЧЕ (&ДатаНач) КОНЕЦ >= &ДатаНач И
    |    (ВложенныйЗапрос.НоменклатураКт = ВложенныйЗапрос.НоменклатураДт) И ";
    //|    (НЕ (ВложенныйЗапрос.НоменклатураДт) ЕСТЬ NULL) И ";
    
    Если ТаблицаТоваров <> Неопределено Тогда
        Запрос.Текст = Запрос.Текст + "
        |        (ВложенныйЗапрос.НоменклатураКт В (&СписокТоваров)) И";
    КонецЕсли;
    
    Запрос.Текст = Запрос.Текст + "
    |    (ВложенныйЗапрос.СчетДт <> ВложенныйЗапрос.СчетКт ИЛИ ВложенныйЗапрос.СубконтоКт1 <> ВложенныйЗапрос.СубконтоДт1 ИЛИ ВложенныйЗапрос.СубконтоКт2 <> ВложенныйЗапрос.СубконтоДт2 ИЛИ ВложенныйЗапрос.СубконтоКт3 <> ВложенныйЗапрос.СубконтоДт3 ИЛИ ВложенныйЗапрос.ПодразделениеДт <> ВложенныйЗапрос.ПодразделениеКт)";
    Запрос.Текст = Запрос.Текст + "
    |УПОРЯДОЧИТЬ ПО
    |    ВложенныйЗапрос.СчетКт,
    |    ВложенныйЗапрос.СчетДт,
    |    ВложенныйЗапрос.ПодразделениеКт,
    |    ВложенныйЗапрос.ПодразделениеДт";
    
    
    Запрос.УстановитьПараметр("ДатаНач", ДатаНач);
    Запрос.УстановитьПараметр("ДатаКон", ДатаКон);
    Запрос.УстановитьПараметр("Организация", СтруктураДопПараметров.Организация);
    Запрос.УстановитьПараметр("СписокСчетов", СписокСчетовУчетаНоменклатуры(СтруктураДопПараметров.Организация, ДатаКон));
    Запрос.УстановитьПараметр("СписокТоваров", ТаблицаТоваров);
        
    Таб = Запрос.Выполнить().Выгрузить();


Второй запрос - моя версия оптимизации (переделал на вт), весь запрос не пишу, публикую только проблемную часть:

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


Собственно проблема в следующем: первый запрос в консоли исполняется от 10 сек до 2 минут (20 раз выполнял).

Второй в консоли: 2-7 секунд.

Но когда дело доходит до запуска выполнения второго запроса в составе конфигурации, он выполняется от получаса до полутора часов!!! Первый же стабильно от 10сек до 2 минут...

Т.е. проблема возникает именно тогда, когда я вставляю код в конфигурацию. А вот в консоли проблемы нет...

В чем подвох?

База на MS SQL 2008. Платформа 8.2.18
Дописанная БСХП 2.0, объем базы около 4гб, записи в регистре хозрасчетный с 2012 года.
1 DGorgoN
 
11.10.14
01:57
Чудес не бывает. Впихни запрос в универсальный отчет и посмотри выполнение.
2 Эмбеддер
 
11.10.14
06:11
сюда
РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(&ДатаНач, &ДатаКон, , СчетДт В ИЕРАРХИИ (&СписокСчетов), , СчетКт В ИЕРАРХИИ (&СписокСчетов), , Организация = &Организация) КАК ХозрасчетныйОбороты

надо добавить отбор номенклатуры, т.к. существует такой список
3 Escander
 
11.10.14
06:56
(0) с теми-же параметрами?
4 alle68
 
11.10.14
07:32
(0) А что дальше происходит с этими тремя ВТ?
Совет: исследовать 5-й и 7-й параметры ВТ "ОборотыДтКт".
5 guevara74
 
11.10.14
07:48
Конкретно в вашем случае проблема скорее всего в конструкции " В ИЕРАРХИИ (&СписокСчетов)".

Сделайте временную таблицу из Плана счетов с отбором по счетам и индексированием а условия замените на что то подобное
" В Выбрать ТаблицаСчетов.Счет Из ТаблицаСчетов"
6 dark_avenger
 
11.10.14
09:11
(2) Нельзя, выщеукзанный участок вызывается более 170 раз, для оптимизации я виртуальную таблицу ОборотыДтКт закинул в ВТ и держу в менеджере, т.к. из параметров меняется только состав номенклатуры.

(3) Да параметры одни и те - же, в данном случае это месяц август, одна организация и список из 34 счетов в том числе с группами.

(4) Дальше я их использую в другой ВТ, делаю связь, группировки, отборы, но то что происходит дальше выполняется мгновенно.

(5) А вот это интересный совет, спасибо, сегодня попробую!

Кстати сегодня обнаружил ещё одну особенность. Если вызывать запрос через отладчик запроса (Инструменты разработчика, конструкция от(Запрос)), то он тоже выполняется пол часа...

Кстати, кому интересно - выполняю оптимизацию процедуры ПолучитьТаблицуПеремещений. На данный момент даже с таким запросом добился оптимизации в 8 раз. На всякий случай, ниже полный код процедуры:


Запрос = Новый Запрос;
    //Запрос.Текст =
    //"ВЫБРАТЬ
    //|    ВложенныйЗапрос.Сумма КАК Стоимость,
    //|    ВложенныйЗапрос.СуммаНУ КАК СтоимостьНУ,
    //|    ВложенныйЗапрос.СуммаПР КАК СтоимостьПР,
    //|    ВложенныйЗапрос.СуммаВР КАК СтоимостьВР,
    //|    ВложенныйЗапрос.Количество,
    //|    ВложенныйЗапрос.СчетКт КАК Счет,
    //|    ВложенныйЗапрос.СчетДт КАК Счет" + Префикс + ",
    //|    ВложенныйЗапрос.ПодразделениеКт КАК Подразделение,
    //|    ВложенныйЗапрос.ПодразделениеДт КАК Подразделение" + Префикс + ",
    //|    ВложенныйЗапрос.СубконтоКт1 КАК Субконто1,
    //|    ВложенныйЗапрос.СубконтоКт2 КАК Субконто2,
    //|    ВложенныйЗапрос.СубконтоКт3 КАК Субконто3,
    //|    ВложенныйЗапрос.СубконтоДт1 КАК Субконто1" + Префикс + ",
    //|    ВложенныйЗапрос.СубконтоДт2 КАК Субконто2" + Префикс + ",
    //|    ВложенныйЗапрос.СубконтоДт3 КАК Субконто3" + Префикс + "
    //|ИЗ
    //|    (ВЫБРАТЬ
    //|        ХозрасчетныйОбороты.СчетКт КАК СчетКт,
    //|        ЕСТЬNULL(ХозрасчетныйОбороты.ПодразделениеКт, ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяСсылка)) КАК ПодразделениеКт,
    //|        ВЫБОР КОГДА ХозрасчетныйОбороты.СубконтоКт1 ССЫЛКА Справочник.Номенклатура ТОГДА ХозрасчетныйОбороты.СубконтоКт1 КОГДА ХозрасчетныйОбороты.СубконтоКт2 ССЫЛКА Справочник.Номенклатура ТОГДА ХозрасчетныйОбороты.СубконтоКт2 КОГДА ХозрасчетныйОбороты.СубконтоКт3 ССЫЛКА Справочник.Номенклатура ТОГДА ХозрасчетныйОбороты.СубконтоКт3 ИНАЧЕ Неопределено КОНЕЦ КАК НоменклатураКт,
    //|        ВЫБОР КОГДА ХозрасчетныйОбороты.СубконтоДт1 ССЫЛКА Справочник.Номенклатура ТОГДА ХозрасчетныйОбороты.СубконтоДт1 КОГДА ХозрасчетныйОбороты.СубконтоДт2 ССЫЛКА Справочник.Номенклатура ТОГДА ХозрасчетныйОбороты.СубконтоДт2 КОГДА ХозрасчетныйОбороты.СубконтоДт3 ССЫЛКА Справочник.Номенклатура ТОГДА ХозрасчетныйОбороты.СубконтоДт3 ИНАЧЕ NULL КОНЕЦ КАК НоменклатураДт,
    //|        ВЫБОР КОГДА СуммовойУчетКт.Субконто1 ТОГДА ХозрасчетныйОбороты.СубконтоКт1 ИНАЧЕ Неопределено КОНЕЦ КАК СубконтоКт1,
    //|        ВЫБОР КОГДА СуммовойУчетКт.Субконто2 ТОГДА ХозрасчетныйОбороты.СубконтоКт2 ИНАЧЕ Неопределено КОНЕЦ КАК СубконтоКт2,
    //|        ВЫБОР КОГДА СуммовойУчетКт.Субконто3 ТОГДА ХозрасчетныйОбороты.СубконтоКт3 ИНАЧЕ Неопределено КОНЕЦ КАК СубконтоКт3,
    //|        ХозрасчетныйОбороты.СчетДт КАК СчетДт,
    //|        ЕСТЬNULL(ХозрасчетныйОбороты.ПодразделениеДт, ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяСсылка)) КАК ПодразделениеДт,
    //|        ВЫБОР КОГДА СуммовойУчетДт.Субконто1 ТОГДА ХозрасчетныйОбороты.СубконтоДт1 ИНАЧЕ Неопределено КОНЕЦ КАК СубконтоДт1,
    //|        ВЫБОР КОГДА СуммовойУчетДт.Субконто2 ТОГДА ХозрасчетныйОбороты.СубконтоДт2 ИНАЧЕ Неопределено КОНЕЦ КАК СубконтоДт2,
    //|        ВЫБОР КОГДА СуммовойУчетДт.Субконто3 ТОГДА ХозрасчетныйОбороты.СубконтоДт3 ИНАЧЕ Неопределено КОНЕЦ КАК СубконтоДт3,
    //|        СУММА(ВЫБОР КОГДА ХозрасчетныйОбороты.СуммаОборот ЕСТЬ NULL  ТОГДА 0 ИНАЧЕ ХозрасчетныйОбороты.СуммаОборот КОНЕЦ) КАК Сумма,
    //|        СУММА(ВЫБОР КОГДА ХозрасчетныйОбороты.СуммаНУОборотДт ЕСТЬ NULL  ТОГДА 0 ИНАЧЕ ХозрасчетныйОбороты.СуммаНУОборотДт КОНЕЦ) КАК СуммаНУ,
    //|        СУММА(ВЫБОР КОГДА ХозрасчетныйОбороты.СуммаПРОборотДт ЕСТЬ NULL  ТОГДА 0 ИНАЧЕ ХозрасчетныйОбороты.СуммаПРОборотДт КОНЕЦ) КАК СуммаПР,
    //|        СУММА(ВЫБОР КОГДА ХозрасчетныйОбороты.СуммаВРОборотДт ЕСТЬ NULL  ТОГДА 0 ИНАЧЕ ХозрасчетныйОбороты.СуммаВРОборотДт КОНЕЦ) КАК СуммаВР,
    //|        СУММА(ВЫБОР КОГДА ХозрасчетныйОбороты.КоличествоОборотКт ЕСТЬ NULL  ТОГДА 0 ИНАЧЕ ХозрасчетныйОбороты.КоличествоОборотКт КОНЕЦ) КАК Количество
    //|    ИЗ
    //|        РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(&ДатаНач, &ДатаКон, , СчетДт В ИЕРАРХИИ (&СписокСчетов), , СчетКт В ИЕРАРХИИ (&СписокСчетов), , Организация = &Организация) КАК ХозрасчетныйОбороты
    //|            ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    //|                Хозрасчетный.Ссылка КАК Счет,
    //|                МАКСИМУМ(ВЫБОР КОГДА ХозрасчетныйВидыСубконто.НомерСтроки = 1 ТОГДА ХозрасчетныйВидыСубконто.Суммовой ИНАЧЕ ЛОЖЬ КОНЕЦ) КАК Субконто1,
    //|                МАКСИМУМ(ВЫБОР КОГДА ХозрасчетныйВидыСубконто.НомерСтроки = 2 ТОГДА ХозрасчетныйВидыСубконто.Суммовой ИНАЧЕ ЛОЖЬ КОНЕЦ) КАК Субконто2,
    //|                МАКСИМУМ(ВЫБОР КОГДА ХозрасчетныйВидыСубконто.НомерСтроки = 3 ТОГДА ХозрасчетныйВидыСубконто.Суммовой ИНАЧЕ ЛОЖЬ КОНЕЦ) КАК Субконто3
    //|            ИЗ
    //|                ПланСчетов.Хозрасчетный.ВидыСубконто КАК ХозрасчетныйВидыСубконто
    //|                    ЛЕВОЕ СОЕДИНЕНИЕ ПланСчетов.Хозрасчетный КАК Хозрасчетный
    //|                    ПО ХозрасчетныйВидыСубконто.Ссылка = Хозрасчетный.Ссылка
    //|            
    //|            ГДЕ
    //|                Хозрасчетный.Ссылка В ИЕРАРХИИ(&СписокСчетов)
    //|            
    //|            СГРУППИРОВАТЬ ПО
    //|                Хозрасчетный.Ссылка) КАК СуммовойУчетКт
    //|            ПО ХозрасчетныйОбороты.СчетКт = СуммовойУчетКт.Счет
    //|            ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    //|                Хозрасчетный.Ссылка КАК Счет,
    //|                МАКСИМУМ(ВЫБОР КОГДА ХозрасчетныйВидыСубконто.НомерСтроки = 1 ТОГДА ХозрасчетныйВидыСубконто.Суммовой ИНАЧЕ ЛОЖЬ КОНЕЦ) КАК Субконто1,
    //|                МАКСИМУМ(ВЫБОР КОГДА ХозрасчетныйВидыСубконто.НомерСтроки = 2 ТОГДА ХозрасчетныйВидыСубконто.Суммовой ИНАЧЕ ЛОЖЬ КОНЕЦ) КАК Субконто2,
    //|                МАКСИМУМ(ВЫБОР КОГДА ХозрасчетныйВидыСубконто.НомерСтроки = 3 ТОГДА ХозрасчетныйВидыСубконто.Суммовой ИНАЧЕ ЛОЖЬ КОНЕЦ) КАК Субконто3
    //|            ИЗ
    //|                ПланСчетов.Хозрасчетный.ВидыСубконто КАК ХозрасчетныйВидыСубконто
    //|                    ЛЕВОЕ СОЕДИНЕНИЕ ПланСчетов.Хозрасчетный КАК Хозрасчетный
    //|                    ПО ХозрасчетныйВидыСубконто.Ссылка = Хозрасчетный.Ссылка
    //|            
    //|            ГДЕ
    //|                Хозрасчетный.Ссылка В ИЕРАРХИИ(&СписокСчетов)
    //|            
    //|            СГРУППИРОВАТЬ ПО
    //|                Хозрасчетный.Ссылка) КАК СуммовойУчетДт
    //|            ПО ХозрасчетныйОбороты.СчетДт = СуммовойУчетДт.Счет
    //|    
    //|    СГРУППИРОВАТЬ ПО
    //|        ХозрасчетныйОбороты.СчетКт,
    //|        ХозрасчетныйОбороты.СчетДт,
    //|        ЕСТЬNULL(ХозрасчетныйОбороты.ПодразделениеКт, ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяСсылка)),
    //|        ЕСТЬNULL(ХозрасчетныйОбороты.ПодразделениеДт, ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяСсылка)),
    //|        ВЫБОР КОГДА ХозрасчетныйОбороты.СубконтоКт1 ССЫЛКА Справочник.Номенклатура ТОГДА ХозрасчетныйОбороты.СубконтоКт1 КОГДА ХозрасчетныйОбороты.СубконтоКт2 ССЫЛКА Справочник.Номенклатура ТОГДА ХозрасчетныйОбороты.СубконтоКт2 КОГДА ХозрасчетныйОбороты.СубконтоКт3 ССЫЛКА Справочник.Номенклатура ТОГДА ХозрасчетныйОбороты.СубконтоКт3 ИНАЧЕ Неопределено КОНЕЦ,
    //|        ВЫБОР КОГДА ХозрасчетныйОбороты.СубконтоДт1 ССЫЛКА Справочник.Номенклатура ТОГДА ХозрасчетныйОбороты.СубконтоДт1 КОГДА ХозрасчетныйОбороты.СубконтоДт2 ССЫЛКА Справочник.Номенклатура ТОГДА ХозрасчетныйОбороты.СубконтоДт2 КОГДА ХозрасчетныйОбороты.СубконтоДт3 ССЫЛКА Справочник.Номенклатура ТОГДА ХозрасчетныйОбороты.СубконтоДт3 ИНАЧЕ NULL КОНЕЦ,
    //|        ВЫБОР КОГДА СуммовойУчетКт.Субконто1 ТОГДА ХозрасчетныйОбороты.СубконтоКт1 ИНАЧЕ Неопределено КОНЕЦ,
    //|        ВЫБОР КОГДА СуммовойУчетКт.Субконто2 ТОГДА ХозрасчетныйОбороты.СубконтоКт2 ИНАЧЕ Неопределено КОНЕЦ,
    //|        ВЫБОР КОГДА СуммовойУчетКт.Субконто3 ТОГДА ХозрасчетныйОбороты.СубконтоКт3 ИНАЧЕ Неопределено КОНЕЦ,
    //|        ВЫБОР КОГДА СуммовойУчетДт.Субконто1 ТОГДА ХозрасчетныйОбороты.СубконтоДт1 ИНАЧЕ Неопределено КОНЕЦ,
    //|        ВЫБОР КОГДА СуммовойУчетДт.Субконто2 ТОГДА ХозрасчетныйОбороты.СубконтоДт2 ИНАЧЕ Неопределено КОНЕЦ,
    //|        ВЫБОР КОГДА СуммовойУчетДт.Субконто3 ТОГДА ХозрасчетныйОбороты.СубконтоДт3 ИНАЧЕ Неопределено КОНЕЦ) КАК ВложенныйЗапрос
    //|
    //|ГДЕ
    ////|    ВЫБОР КОГДА ВложенныйЗапрос.СубконтоКт1 ССЫЛКА Документ.ОтчетПроизводстваЗаСмену ТОГДА ВложенныйЗапрос.СубконтоКт1.Дата КОГДА ВложенныйЗапрос.СубконтоКт2 ССЫЛКА Документ.ОтчетПроизводстваЗаСмену ТОГДА ВложенныйЗапрос.СубконтоКт2.Дата КОГДА ВложенныйЗапрос.СубконтоКт3 ССЫЛКА Документ.ОтчетПроизводстваЗаСмену ТОГДА ВложенныйЗапрос.СубконтоКт3.Дата ИНАЧЕ (&ДатаНач) КОНЕЦ >= &ДатаНач И
    //|    (ВложенныйЗапрос.НоменклатураКт = ВложенныйЗапрос.НоменклатураДт) И ";
    ////|    (НЕ (ВложенныйЗапрос.НоменклатураДт) ЕСТЬ NULL) И ";
    //
    //Если ТаблицаТоваров <> Неопределено Тогда
    //    Запрос.Текст = Запрос.Текст + "
    //    |        (ВложенныйЗапрос.НоменклатураКт В (&СписокТоваров)) И";
    //КонецЕсли;
    
    //Запрос.Текст = Запрос.Текст + "
    //|    (ВложенныйЗапрос.СчетДт <> ВложенныйЗапрос.СчетКт ИЛИ ВложенныйЗапрос.СубконтоКт1 <> ВложенныйЗапрос.СубконтоДт1 ИЛИ ВложенныйЗапрос.СубконтоКт2 <> ВложенныйЗапрос.СубконтоДт2 ИЛИ ВложенныйЗапрос.СубконтоКт3 <> ВложенныйЗапрос.СубконтоДт3 ИЛИ ВложенныйЗапрос.ПодразделениеДт <> ВложенныйЗапрос.ПодразделениеКт)";
    //Запрос.Текст = Запрос.Текст + "
    //|УПОРЯДОЧИТЬ ПО
    //|    ВложенныйЗапрос.СчетКт,
    //|    ВложенныйЗапрос.СчетДт,
    //|    ВложенныйЗапрос.ПодразделениеКт,
    //|    ВложенныйЗапрос.ПодразделениеДт";
    
    // ============================ {Прокопенко, Начало, 08.10.2014}
    //Оптимизация запроса
    МенВремТаб = Неопределено;
    СоздатьВремТаб = Ложь;
    Если НЕ СтруктураДопПараметров.Свойство("дмнМенеджерВременныхТаблиц",МенВремТаб) Тогда
        СоздатьВремТаб = Истина;
        МенВремТаб = Новый МенеджерВременныхТаблиц;        
    Иначе
        //Проверим не изменились ли параметры для временной таблицы из регистра БУ
        ДатаНачПроверка = Неопределено;
        ДатаКонПроверка = Неопределено;
        Если СтруктураДопПараметров.Свойство("ДатаНач",ДатаНачПроверка) И СтруктураДопПараметров.Свойство("ДатаКон",ДатаКонПроверка) Тогда
            Если ДатаНач<>ДатаНачПроверка или ДатаКон<>ДатаКонПроверка Тогда
                МенВремТаб = Новый МенеджерВременныхТаблиц;
                СоздатьВремТаб = Истина;
            КонецЕсли;
        Иначе
            МенВремТаб = Новый МенеджерВременныхТаблиц;
            СоздатьВремТаб = Истина;
        КонецЕсли;
        
    КонецЕсли;
    
    Запрос.МенеджерВременныхТаблиц = МенВремТаб;        
    
    дмнСписокСчетов = Неопределено;
    Если НЕ СтруктураДопПараметров.Свойство("дмнСписокСчетов",дмнСписокСчетов) Тогда
        дмнСписокСчетов = СписокСчетовУчетаНоменклатуры(СтруктураДопПараметров.Организация, ДатаКон);
        СтруктураДопПараметров.Вставить("дмнСписокСчетов",дмнСписокСчетов);
    КонецЕсли;                
    
    Запрос.УстановитьПараметр("ДатаНач", ДатаНач);
    Запрос.УстановитьПараметр("ДатаКон", ДатаКон);
    Запрос.УстановитьПараметр("Организация", СтруктураДопПараметров.Организация);
    Запрос.УстановитьПараметр("СписокСчетов", дмнСписокСчетов);
    Запрос.УстановитьПараметр("СписокТоваров", ТаблицаТоваров);
    
    Если СоздатьВремТаб Тогда
        Запрос.Текст = "ВЫБРАТЬ
        |    ХозрасчетныйОбороты.СчетДт,
        |    ХозрасчетныйОбороты.СубконтоДт1,
        |    ХозрасчетныйОбороты.СубконтоДт2,
        |    ХозрасчетныйОбороты.СубконтоДт3,
        |    ХозрасчетныйОбороты.СчетКт,
        |    ХозрасчетныйОбороты.СубконтоКт1,
        |    ХозрасчетныйОбороты.СубконтоКт2,
        |    ХозрасчетныйОбороты.СубконтоКт3,
        |    ХозрасчетныйОбороты.Организация,
        |    ХозрасчетныйОбороты.ВалютаДт,
        |    ХозрасчетныйОбороты.ВалютаКт,
        |    ХозрасчетныйОбороты.ПодразделениеДт,
        |    ХозрасчетныйОбороты.ПодразделениеКт,
        |    ХозрасчетныйОбороты.СуммаОборот,
        |    ХозрасчетныйОбороты.ВалютнаяСуммаОборотДт,
        |    ХозрасчетныйОбороты.ВалютнаяСуммаОборотКт,
        |    ХозрасчетныйОбороты.КоличествоОборотДт,
        |    ХозрасчетныйОбороты.КоличествоОборотКт,
        |    ХозрасчетныйОбороты.СуммаНУОборотДт,
        |    ХозрасчетныйОбороты.СуммаНУОборотКт,
        |    ХозрасчетныйОбороты.СуммаПРОборотДт,
        |    ХозрасчетныйОбороты.СуммаПРОборотКт,
        |    ХозрасчетныйОбороты.СуммаВРОборотДт,
        |    ХозрасчетныйОбороты.СуммаВРОборотКт,
        |    ХозрасчетныйОбороты.схКоличествоДопОборотДт,
        |    ХозрасчетныйОбороты.схКоличествоДопОборотКт
        |ПОМЕСТИТЬ ОборотыРегистраБУ
        |ИЗ
        |    РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(&ДатаНач, &ДатаКон, , СчетДт В ИЕРАРХИИ (&СписокСчетов), , СчетКт В ИЕРАРХИИ (&СписокСчетов), , Организация = &Организация) КАК ХозрасчетныйОбороты
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    Хозрасчетный.Ссылка КАК Счет,
        |    МАКСИМУМ(ВЫБОР
        |            КОГДА ХозрасчетныйВидыСубконто.НомерСтроки = 1
        |                ТОГДА ХозрасчетныйВидыСубконто.Суммовой
        |            ИНАЧЕ ЛОЖЬ
        |        КОНЕЦ) КАК Субконто1,
        |    МАКСИМУМ(ВЫБОР
        |            КОГДА ХозрасчетныйВидыСубконто.НомерСтроки = 2
        |                ТОГДА ХозрасчетныйВидыСубконто.Суммовой
        |            ИНАЧЕ ЛОЖЬ
        |        КОНЕЦ) КАК Субконто2,
        |    МАКСИМУМ(ВЫБОР
        |            КОГДА ХозрасчетныйВидыСубконто.НомерСтроки = 3
        |                ТОГДА ХозрасчетныйВидыСубконто.Суммовой
        |            ИНАЧЕ ЛОЖЬ
        |        КОНЕЦ) КАК Субконто3
        |ПОМЕСТИТЬ СуммовойУчетДт
        |ИЗ
        |    ПланСчетов.Хозрасчетный.ВидыСубконто КАК ХозрасчетныйВидыСубконто
        |        ЛЕВОЕ СОЕДИНЕНИЕ ПланСчетов.Хозрасчетный КАК Хозрасчетный
        |        ПО ХозрасчетныйВидыСубконто.Ссылка = Хозрасчетный.Ссылка
        |ГДЕ
        |    Хозрасчетный.Ссылка В ИЕРАРХИИ(&СписокСчетов)
        |
        |СГРУППИРОВАТЬ ПО
        |    Хозрасчетный.Ссылка
        |
        |ИНДЕКСИРОВАТЬ ПО
        |    Счет
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    Хозрасчетный.Ссылка КАК Счет,
        |    МАКСИМУМ(ВЫБОР
        |            КОГДА ХозрасчетныйВидыСубконто.НомерСтроки = 1
        |                ТОГДА ХозрасчетныйВидыСубконто.Суммовой
        |            ИНАЧЕ ЛОЖЬ
        |        КОНЕЦ) КАК Субконто1,
        |    МАКСИМУМ(ВЫБОР
        |            КОГДА ХозрасчетныйВидыСубконто.НомерСтроки = 2
        |                ТОГДА ХозрасчетныйВидыСубконто.Суммовой
        |            ИНАЧЕ ЛОЖЬ
        |        КОНЕЦ) КАК Субконто2,
        |    МАКСИМУМ(ВЫБОР
        |            КОГДА ХозрасчетныйВидыСубконто.НомерСтроки = 3
        |                ТОГДА ХозрасчетныйВидыСубконто.Суммовой
        |            ИНАЧЕ ЛОЖЬ
        |        КОНЕЦ) КАК Субконто3
        |ПОМЕСТИТЬ СуммовойУчетКт
        |ИЗ
        |    ПланСчетов.Хозрасчетный.ВидыСубконто КАК ХозрасчетныйВидыСубконто
        |        ЛЕВОЕ СОЕДИНЕНИЕ ПланСчетов.Хозрасчетный КАК Хозрасчетный
        |        ПО ХозрасчетныйВидыСубконто.Ссылка = Хозрасчетный.Ссылка
        |ГДЕ
        |    Хозрасчетный.Ссылка В ИЕРАРХИИ(&СписокСчетов)
        |
        |СГРУППИРОВАТЬ ПО
        |    Хозрасчетный.Ссылка
        |
        |ИНДЕКСИРОВАТЬ ПО
        |    Счет";
        Запрос.Выполнить();
        МенВремТаб = Запрос.МенеджерВременныхТаблиц;
        СтруктураДопПараметров.Вставить("дмнМенеджерВременныхТаблиц",МенВремТаб);
    КонецЕсли;
    
    Запрос.Текст = "ВЫБРАТЬ
    |    ЕСТЬNULL(ОборотыРегистраБУ.ПодразделениеКт, ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяСсылка)) КАК ПодразделениеКт,
    |    ВЫБОР
    |        КОГДА ОборотыРегистраБУ.СубконтоКт1 ССЫЛКА Справочник.Номенклатура
    |            ТОГДА ОборотыРегистраБУ.СубконтоКт1
    |        КОГДА ОборотыРегистраБУ.СубконтоКт2 ССЫЛКА Справочник.Номенклатура
    |            ТОГДА ОборотыРегистраБУ.СубконтоКт2
    |        КОГДА ОборотыРегистраБУ.СубконтоКт3 ССЫЛКА Справочник.Номенклатура
    |            ТОГДА ОборотыРегистраБУ.СубконтоКт3
    |        ИНАЧЕ НЕОПРЕДЕЛЕНО
    |    КОНЕЦ КАК НоменклатураКт,
    |    ВЫБОР
    |        КОГДА ОборотыРегистраБУ.СубконтоДт1 ССЫЛКА Справочник.Номенклатура
    |            ТОГДА ОборотыРегистраБУ.СубконтоДт1
    |        КОГДА ОборотыРегистраБУ.СубконтоДт2 ССЫЛКА Справочник.Номенклатура
    |            ТОГДА ОборотыРегистраБУ.СубконтоДт2
    |        КОГДА ОборотыРегистраБУ.СубконтоДт3 ССЫЛКА Справочник.Номенклатура
    |            ТОГДА ОборотыРегистраБУ.СубконтоДт3
    |        ИНАЧЕ NULL
    |    КОНЕЦ КАК НоменклатураДт,
    |    ВЫБОР
    |        КОГДА СуммовойУчетКт.Субконто1
    |            ТОГДА ОборотыРегистраБУ.СубконтоКт1
    |        ИНАЧЕ НЕОПРЕДЕЛЕНО
    |    КОНЕЦ КАК СубконтоКт1,
    |    ВЫБОР
    |        КОГДА СуммовойУчетКт.Субконто2
    |            ТОГДА ОборотыРегистраБУ.СубконтоКт2
    |        ИНАЧЕ НЕОПРЕДЕЛЕНО
    |    КОНЕЦ КАК СубконтоКт2,
    |    ВЫБОР
    |        КОГДА СуммовойУчетКт.Субконто3
    |            ТОГДА ОборотыРегистраБУ.СубконтоКт3
    |        ИНАЧЕ НЕОПРЕДЕЛЕНО
    |    КОНЕЦ КАК СубконтоКт3,
    |    ЕСТЬNULL(ОборотыРегистраБУ.ПодразделениеДт, ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяСсылка)) КАК ПодразделениеДт,
    |    ВЫБОР
    |        КОГДА СуммовойУчетДт.Субконто1
    |            ТОГДА ОборотыРегистраБУ.СубконтоДт1
    |        ИНАЧЕ НЕОПРЕДЕЛЕНО
    |    КОНЕЦ КАК СубконтоДт1,
    |    ВЫБОР
    |        КОГДА СуммовойУчетДт.Субконто2
    |            ТОГДА ОборотыРегистраБУ.СубконтоДт2
    |        ИНАЧЕ НЕОПРЕДЕЛЕНО
    |    КОНЕЦ КАК СубконтоДт2,
    |    ВЫБОР
    |        КОГДА СуммовойУчетДт.Субконто3
    |            ТОГДА ОборотыРегистраБУ.СубконтоДт3
    |        ИНАЧЕ НЕОПРЕДЕЛЕНО
    |    КОНЕЦ КАК СубконтоДт3,
    |    СУММА(ВЫБОР
    |            КОГДА ОборотыРегистраБУ.СуммаОборот ЕСТЬ NULL
    |                ТОГДА 0
    |            ИНАЧЕ ОборотыРегистраБУ.СуммаОборот
    |        КОНЕЦ) КАК Сумма,
    |    СУММА(ВЫБОР
    |            КОГДА ОборотыРегистраБУ.СуммаНУОборотДт ЕСТЬ NULL
    |                ТОГДА 0
    |            ИНАЧЕ ОборотыРегистраБУ.СуммаНУОборотДт
    |        КОНЕЦ) КАК СуммаНУ,
    |    СУММА(ВЫБОР
    |            КОГДА ОборотыРегистраБУ.СуммаПРОборотДт ЕСТЬ NULL
    |                ТОГДА 0
    |            ИНАЧЕ ОборотыРегистраБУ.СуммаПРОборотДт
    |        КОНЕЦ) КАК СуммаПР,
    |    СУММА(ВЫБОР
    |            КОГДА ОборотыРегистраБУ.СуммаВРОборотДт ЕСТЬ NULL
    |                ТОГДА 0
    |            ИНАЧЕ ОборотыРегистраБУ.СуммаВРОборотДт
    |        КОНЕЦ) КАК СуммаВР,
    |    СУММА(ВЫБОР
    |            КОГДА ОборотыРегистраБУ.КоличествоОборотКт ЕСТЬ NULL
    |                ТОГДА 0
    |            ИНАЧЕ ОборотыРегистраБУ.КоличествоОборотКт
    |        КОНЕЦ) КАК Количество,
    |    ОборотыРегистраБУ.СчетДт КАК СчетДт,
    |    ОборотыРегистраБУ.СчетКт КАК СчетКт
    |ПОМЕСТИТЬ ОсновнаяВыборка
    |ИЗ
    |    ОборотыРегистраБУ КАК ОборотыРегистраБУ
    |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ СуммовойУчетДт КАК СуммовойУчетДт
    |        ПО ОборотыРегистраБУ.СчетДт = СуммовойУчетДт.Счет
    |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ СуммовойУчетКт КАК СуммовойУчетКт
    |        ПО ОборотыРегистраБУ.СчетКт = СуммовойУчетКт.Счет
    |
    |СГРУППИРОВАТЬ ПО
    |    ВЫБОР
    |        КОГДА СуммовойУчетДт.Субконто1
    |            ТОГДА ОборотыРегистраБУ.СубконтоДт1
    |        ИНАЧЕ НЕОПРЕДЕЛЕНО
    |    КОНЕЦ,
    |    ОборотыРегистраБУ.СчетДт,
    |    ВЫБОР
    |        КОГДА СуммовойУчетДт.Субконто2
    |            ТОГДА ОборотыРегистраБУ.СубконтоДт2
    |        ИНАЧЕ НЕОПРЕДЕЛЕНО
    |    КОНЕЦ,
    |    ВЫБОР
    |        КОГДА СуммовойУчетКт.Субконто2
    |            ТОГДА ОборотыРегистраБУ.СубконтоКт2
    |        ИНАЧЕ НЕОПРЕДЕЛЕНО
    |    КОНЕЦ,
    |    ОборотыРегистраБУ.СчетКт,
    |    ЕСТЬNULL(ОборотыРегистраБУ.ПодразделениеДт, ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяСсылка)),
    |    ЕСТЬNULL(ОборотыРегистраБУ.ПодразделениеКт, ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяСсылка)),
    |    ВЫБОР
    |        КОГДА ОборотыРегистраБУ.СубконтоДт1 ССЫЛКА Справочник.Номенклатура
    |            ТОГДА ОборотыРегистраБУ.СубконтоДт1
    |        КОГДА ОборотыРегистраБУ.СубконтоДт2 ССЫЛКА Справочник.Номенклатура
    |            ТОГДА ОборотыРегистраБУ.СубконтоДт2
    |        КОГДА ОборотыРегистраБУ.СубконтоДт3 ССЫЛКА Справочник.Номенклатура
    |            ТОГДА ОборотыРегистраБУ.СубконтоДт3
    |        ИНАЧЕ NULL
    |    КОНЕЦ,
    |    ВЫБОР
    |        КОГДА ОборотыРегистраБУ.СубконтоКт1 ССЫЛКА Справочник.Номенклатура
    |            ТОГДА ОборотыРегистраБУ.СубконтоКт1
    |        КОГДА ОборотыРегистраБУ.СубконтоКт2 ССЫЛКА Справочник.Номенклатура
    |            ТОГДА ОборотыРегистраБУ.СубконтоКт2
    |        КОГДА ОборотыРегистраБУ.СубконтоКт3 ССЫЛКА Справочник.Номенклатура
    |            ТОГДА ОборотыРегистраБУ.СубконтоКт3
    |        ИНАЧЕ НЕОПРЕДЕЛЕНО
    |    КОНЕЦ,
    |    ВЫБОР
    |        КОГДА СуммовойУчетКт.Субконто3
    |            ТОГДА ОборотыРегистраБУ.СубконтоКт3
    |        ИНАЧЕ НЕОПРЕДЕЛЕНО
    |    КОНЕЦ,
    |    ВЫБОР
    |        КОГДА СуммовойУчетКт.Субконто1
    |            ТОГДА ОборотыРегистраБУ.СубконтоКт1
    |        ИНАЧЕ НЕОПРЕДЕЛЕНО
    |    КОНЕЦ,
    |    ВЫБОР
    |        КОГДА СуммовойУчетДт.Субконто3
    |            ТОГДА ОборотыРегистраБУ.СубконтоДт3
    |        ИНАЧЕ НЕОПРЕДЕЛЕНО
    |    КОНЕЦ
    |
    |ИНДЕКСИРОВАТЬ ПО
    |    СчетКт,
    |    СчетДт,
    |    ПодразделениеКт,
    |    ПодразделениеДт
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    ОсновнаяВыборка.Сумма КАК Стоимость,
    |    ОсновнаяВыборка.СуммаНУ КАК СтоимостьНУ,
    |    ОсновнаяВыборка.СуммаПР КАК СтоимостьПР,
    |    ОсновнаяВыборка.СуммаВР КАК СтоимостьВР,
    |    ОсновнаяВыборка.Количество,
    |    ОсновнаяВыборка.СчетКт КАК Счет,
    |    ОсновнаяВыборка.СчетДт КАК Счет_Префикс,
    |    ОсновнаяВыборка.ПодразделениеКт КАК Подразделение,
    |    ОсновнаяВыборка.ПодразделениеДт КАК Подразделение_Префикс,
    |    ОсновнаяВыборка.СубконтоКт1 КАК Субконто1,
    |    ОсновнаяВыборка.СубконтоКт2 КАК Субконто2,
    |    ОсновнаяВыборка.СубконтоКт3 КАК Субконто3,
    |    ОсновнаяВыборка.СубконтоДт1 КАК Субконто1_Префикс,
    |    ОсновнаяВыборка.СубконтоДт2 КАК Субконто2_Префикс,
    |    ОсновнаяВыборка.СубконтоДт3 КАК Субконто3_Префикс
    |ИЗ
    |    ОсновнаяВыборка КАК ОсновнаяВыборка
    |ГДЕ
    |    ОсновнаяВыборка.НоменклатураКт = ОсновнаяВыборка.НоменклатураДт
    |    И &УсловиеНаТовары
    |    И (ОсновнаяВыборка.СчетДт <> ОсновнаяВыборка.СчетКт
    |            ИЛИ ОсновнаяВыборка.СубконтоКт1 <> ОсновнаяВыборка.СубконтоДт1
    |            ИЛИ ОсновнаяВыборка.СубконтоКт2 <> ОсновнаяВыборка.СубконтоДт2
    |            ИЛИ ОсновнаяВыборка.СубконтоКт3 <> ОсновнаяВыборка.СубконтоДт3
    |            ИЛИ ОсновнаяВыборка.ПодразделениеДт <> ОсновнаяВыборка.ПодразделениеКт)
    |
    |УПОРЯДОЧИТЬ ПО
7 dark_avenger
 
11.10.14
09:17
(4) Отобрать все типы субконто из доступных мне счетов и добавить отбор по типам? Думают это не значительно повлияет на процесс, но я протестирую.
8 Ник второй
 
11.10.14
09:57
Получи план запроса и все станет сразу понятно!