Вход | Регистрация
 

Помогите оптимизировать запрос !

Помогите оптимизировать запрос !
Я
   antihacker
 
15.08.18 - 07:11
Всем привет !

Вот  код !

Если НЕ ВРазрезеБюджета Тогда
ПоляДляИтога = "НомерРаздела,Код1,Код2,Код3,Код4,Код5,Код6";
Иначе
ПоляДляИтога = "НомерРаздела,Бюджет,Код1,Код2,Код3,Код4,Код5";
КонецЕсли;    

       |ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИмпортФорма127 КАК Бюджеты
    |ПО ИмпортФорма127.Бюджет = Бюджеты.Бюджет  ГДЕ

    Запрос = Новый Запрос;
    Запрос.Текст = "
    |ВЫБРАТЬ
     |    ИмпортФорма127.Бюджет     КАК Бюджет,
    |    ИмпортФорма127.НомерРаздела     КАК НомерРаздела,                
    |    0 КАК Код1,
    |    0 КАК Код2,
    |    ВЫБОР
    |        КОГДА &вхПоКатегория
    |            ТОГДА ИмпортФорма127.КПиКР.КатегорияПоступления
    |        ИНАЧЕ NULL
    |    КОНЕЦ КАК Код3,                
    |    ВЫБОР
    |        КОГДА &вхПоКласс
    |            ТОГДА ИмпортФорма127.КПиКР.КлассПоступления
    |        ИНАЧЕ NULL
    |    КОНЕЦ КАК Код4,
    |    ВЫБОР
    |        КОГДА &вхПоПодкласс
    |            ТОГДА ИмпортФорма127.КПиКР.ПодклассПоступления
    |        ИНАЧЕ NULL
    |    КОНЕЦ КАК Код5,
    |    ВЫБОР
    |        КОГДА &вхПоСпецифике
    |            ТОГДА ИмпортФорма127.КПиКР.СпецификаПоступления
    |        ИНАЧЕ NULL
    |    КОНЕЦ КАК Код6,
    |                
    |    ИмпортФорма127.УтвержденныйБюджет  КАК УтвержденныйБюджет,
    |    ИмпортФорма127.УточненныйБюджет  КАК УточненныйБюджет,
    |    ИмпортФорма127.СкорректированныйБюджет  КАК СкорректированныйБюджет,
    |    ИмпортФорма127.СводныйПланПоступленийПоПлатежам  КАК СводныйПланПоступленийПоПлатежам,
    |    ИмпортФорма127.СводныйПланПоОбязательствам  КАК СводныйПланПоОбязательствам,
    |    ИмпортФорма127.ПринятыеОбязательства  КАК ПринятыеОбязательства,
    |    ИмпортФорма127.НеоплаченныеОбязательства  КАК НеоплаченныеОбязательства,
    |    ИмпортФорма127.ОбщееИсполнение  КАК ОбщееИсполнение
    //|    ((ИмпортФорма127.ОбщееИсполнение*100)/ИмпортФорма127.СкорректированныйБюджет)  КАК ИсполнениеПроцентПоле12
    |    
    |   ПОМЕСТИТЬ ВТ_ИмпортФормаКПиКР
    |    
    |   ИЗ
    |    РегистрСведений.ИмпортФорма127 КАК ИмпортФорма127 ГДЕ ИмпортФорма127.Регистратор В (&вхРегистраторы)  И ИмпортФорма127.НомерРаздела = &НомерРаздела1   И
    |   ВЫБОР
    |   КОГДА &ОтборПоКатегорий
    |      ТОГДА ИмпортФорма127.КПиКР.КатегорияПоступления В (&СписокКатегорий)
    |   ИНАЧЕ ИСТИНА
    |КОНЕЦ
    |И ВЫБОР
    |КОГДА &ОтборПоКлассов
    |      ТОГДА    ИмпортФорма127.КПиКР.КлассПоступления В (&СписокКлассов)
    |ИНАЧЕ ИСТИНА
    |КОНЕЦ
    |И ВЫБОР
    |КОГДА &ОтборПоПодКлассов
    |      ТОГДА    ИмпортФорма127.КПиКР.ПодклассПоступления В (&СписокПодКлассов)
    |ИНАЧЕ ИСТИНА
    |КОНЕЦ
    |И ВЫБОР
    |КОГДА &ОтборПоСпецификеПоступлений
    |      ТОГДА    ИмпортФорма127.КПиКР.СпецификаПоступления В (&СписокСпецификПоступлений)
    |ИНАЧЕ ИСТИНА
    |КОНЕЦ
    |
    |ОБЪЕДИНИТЬ ВСЕ
    |    
    |    ВЫБРАТЬ
     |    ИмпортФорма127.Бюджет                                 КАК Бюджет,
    |    ИмпортФорма127.НомерРаздела                           КАК НомерРаздела,        
    |    ИмпортФорма127.КПиКР.ФКР.АБП.ФункциональнаяГруппа     КАК Код1,
    |    ИмпортФорма127.КПиКР.ФКР.АБП.ФункциональнаяПодгруппа  КАК Код2,
    |    ВЫБОР
    |        КОГДА &вхПоАБП
    |            ТОГДА ИмпортФорма127.КПиКР.ФКР.АБП
    |        ИНАЧЕ NULL
    |    КОНЕЦ КАК Код3,                
    |    ВЫБОР
    |        КОГДА &вхПоПР
    |            ТОГДА ИмпортФорма127.КПиКР.ФКР.Программа
    |        ИНАЧЕ NULL
    |    КОНЕЦ КАК Код4,
    |    ВЫБОР
    |        КОГДА &вхПоППР
    |            ТОГДА ИмпортФорма127.КПиКР.ФКР.Подпрограмма
    |        ИНАЧЕ NULL
    |    КОНЕЦ КАК Код5,
    |    ВЫБОР
    |        КОГДА &вхПоСП
    |            ТОГДА ИмпортФорма127.КПиКР.ЭКР
    |        ИНАЧЕ NULL
    |    КОНЕЦ КАК Код6,
    |                
    |    ИмпортФорма127.УтвержденныйБюджет  КАК УтвержденныйБюджет,
    |    ИмпортФорма127.УточненныйБюджет  КАК УточненныйБюджет,
    |    ИмпортФорма127.СкорректированныйБюджет  КАК СкорректированныйБюджет,
    |    ИмпортФорма127.СводныйПланПоступленийПоПлатежам  КАК СводныйПланПоступленийПоПлатежам,
    |    ИмпортФорма127.СводныйПланПоОбязательствам  КАК СводныйПланПоОбязательствам,
    |    ИмпортФорма127.ПринятыеОбязательства  КАК ПринятыеОбязательства,
    |    ИмпортФорма127.НеоплаченныеОбязательства  КАК НеоплаченныеОбязательства,
    |    ИмпортФорма127.ОбщееИсполнение  КАК ОбщееИсполнение
    //|    ((ИмпортФорма127.ОбщееИсполнение*100)/ИмпортФорма127.СкорректированныйБюджет)  КАК ИсполнениеПроцентПоле12    
    |            
    |    ИЗ
    |    РегистрСведений.ИмпортФорма127 КАК ИмпортФорма127 ГДЕ ИмпортФорма127.Регистратор В (&вхРегистраторы) И ИмпортФорма127.НомерРаздела = &НомерРаздела2  И
    |    ВЫБОР
    |    КОГДА &ОтборПоАБП
    |          ТОГДА ИмпортФорма127.КПиКР.ФКР.АБП В (&СписокАБП)
    |    ИНАЧЕ ИСТИНА
    |    КОНЕЦ
    |    И ВЫБОР
    |    КОГДА &ОтборПоПР
    |      ТОГДА    ИмпортФорма127.КПиКР.ФКР.Программа В (&СписокПР)
    |    ИНАЧЕ ИСТИНА
    |    КОНЕЦ
    |    И ВЫБОР
    |    КОГДА &ОтборПоППР
    |      ТОГДА    ИмпортФорма127.КПиКР.ФКР.ПодПрограмма В (&СписокППР)
    |    ИНАЧЕ ИСТИНА
    |    КОНЕЦ
    |    И ВЫБОР
    |    КОГДА &ОтборПоСП
    |      ТОГДА    ИмпортФорма127.КПиКР.ЭКР В (&СписокСП)
    |    ИНАЧЕ ИСТИНА
    |    КОНЕЦ
    |    ;
    |    ВЫБРАТЬ
     |    ВТ_ИмпортФормаКПиКР.Бюджет     КАК Бюджет,                
    |    ВТ_ИмпортФормаКПиКР.НомерРаздела     КАК НомерРаздела,
    |    ВТ_ИмпортФормаКПиКР.Код1     КАК Код1,
    |    ВТ_ИмпортФормаКПиКР.Код2     КАК Код2,
    |    ВТ_ИмпортФормаКПиКР.Код3     КАК Код3,
    |    ВТ_ИмпортФормаКПиКР.Код4     КАК Код4,
    |    ВТ_ИмпортФормаКПиКР.Код5     КАК Код5,
    |    ВТ_ИмпортФормаКПиКР.Код6     КАК Код6,                
    |    ВТ_ИмпортФормаКПиКР.УтвержденныйБюджет  КАК УтвержденныйБюджет,
    |    ВТ_ИмпортФормаКПиКР.УточненныйБюджет  КАК УточненныйБюджет,
    |    ВТ_ИмпортФормаКПиКР.СкорректированныйБюджет  КАК СкорректированныйБюджет,
    |    ВТ_ИмпортФормаКПиКР.СводныйПланПоступленийПоПлатежам  КАК СводныйПланПоступленийПоПлатежам,
    |    ВТ_ИмпортФормаКПиКР.СводныйПланПоОбязательствам  КАК СводныйПланПоОбязательствам,
    |    ВТ_ИмпортФормаКПиКР.ПринятыеОбязательства  КАК ПринятыеОбязательства,
    |    ВТ_ИмпортФормаКПиКР.НеоплаченныеОбязательства  КАК НеоплаченныеОбязательства,
    |    ВТ_ИмпортФормаКПиКР.ОбщееИсполнение  КАК ОбщееИсполнение,
    |    ВЫБОР
    |   КОГДА ВТ_ИмпортФормаКПиКР.СкорректированныйБюджет <> 0
    |   ТОГДА (ВТ_ИмпортФормаКПиКР.ОбщееИсполнение * 100) / ВТ_ИмпортФормаКПиКР.СкорректированныйБюджет
    |   ИНАЧЕ 0
    |   КОНЕЦ КАК ИсполнениеПроцентПоле11,    
    |    ВЫБОР
    |   КОГДА ВТ_ИмпортФормаКПиКР.СводныйПланПоступленийПоПлатежам <> 0
    |   ТОГДА (ВТ_ИмпортФормаКПиКР.ОбщееИсполнение * 100) / ВТ_ИмпортФормаКПиКР.СводныйПланПоступленийПоПлатежам
    |   ИНАЧЕ 0
    |   КОНЕЦ КАК ИсполнениеПроцентПоле12    
    |    
    |    ИЗ  ВТ_ИмпортФормаКПиКР
    |
    |    УПОРЯДОЧИТЬ ПО
    |    ВТ_ИмпортФормаКПиКР.Бюджет,
    |    ВТ_ИмпортФормаКПиКР.НомерРаздела,        
    |    ВТ_ИмпортФормаКПиКР.Код3.КодКатегории,    
    |    ВТ_ИмпортФормаКПиКР.Код4.КодКласса,
    |    ВТ_ИмпортФормаКПиКР.Код5.КодПодкласса,
    |    ВТ_ИмпортФормаКПиКР.Код6.КодСпецифики,
    |    ВТ_ИмпортФормаКПиКР.Код3.КодАБП,
    |    ВТ_ИмпортФормаКПиКР.Код4.Код,
    |   ВТ_ИмпортФормаКПиКР.Код5.Код,
    |   ВТ_ИмпортФормаКПиКР.Код6.Код
    |    
    |    ИТОГИ
    |    СУММА(УтвержденныйБюджет),
    |    СУММА(УточненныйБюджет),
    |    СУММА(СкорректированныйБюджет),
    |    СУММА(СводныйПланПоступленийПоПлатежам),
    |    СУММА(СводныйПланПоОбязательствам),
    |    СУММА(ПринятыеОбязательства),
    |    СУММА(НеоплаченныеОбязательства),
    |    СУММА(ОбщееИсполнение),    
    |    ВЫБОР
    |   КОГДА СУММА(СводныйПланПоступленийПоПлатежам) <> 0
    |   ТОГДА СУММА(ОбщееИсполнение)/СУММА(СводныйПланПоступленийПоПлатежам)*100
    |   ИНАЧЕ 0
    |   КОНЕЦ КАК ИсполнениеПроцентПоле11,    
    |    ВЫБОР
    |   КОГДА СУММА(СкорректированныйБюджет) <> 0    
    |    ТОГДА СУММА(ОбщееИсполнение)/СУММА(СкорректированныйБюджет)*100
    |   ИНАЧЕ 0
    |   КОНЕЦ КАК ИсполнениеПроцентПоле12    
    |    ПО " + ПоляДляИтога;



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

Пока ОбщийРезВыборкиНомеруРаздела.Следующий() Цикл

     ОбщийРезВыборкиПоБюджету = ОбщийРезВыборкиНомеруРаздела.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

     Пока ОбщийРезВыборкиПоБюджету .Следующий() Цикл
           Код1 = ОбщийРезВыборкиПоБюджету.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
                  Пока Код1.Следующий() Цикл  
           Код2 = Код1.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
                  Пока Код2.Следующий() Цикл  
           Код3 = Код2.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
                  Пока Код3.Следующий() Цикл  
           Код4 = Код3.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
                  Пока Код4.Следующий() Цикл  
           Код5 = Код4.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
                  Пока Код5.Следующий() Цикл  
           Код6 = Код5.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
                  Пока Код6.Следующий() Цикл  
                  КонецЦикла;
                  КонецЦикла;
                  КонецЦикла;
                  КонецЦикла;
                  КонецЦикла;
                  КонецЦикла;
       КонецЦикла;
     КонецЦикла;
КонецЦикла;

Когда ПоляДляИтога = "НомерРаздела,Бюджет,Код1,Код2,Код3,Код4,Код5" все работает прекрасно, а когда ПоляДляИтога = "НомерРаздела,Код1,Код2,Код3,Код4,Код5,Код6"
То

Цикл

                  Пока Код6.Следующий() Цикл  
                  КонецЦикла

не выводит итоги, а детали. Если убрать цикл

Пока Код2.Следующий() Цикл  
           Код3 = Код2.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

То все работает прекрасно. Почему ? Ведь уровень группировки в обоих случаях равно на 7.
 
 
   xXeNoNx
 
1 - 15.08.18 - 07:45
(0) шото мне подсказывает что выбор когда в секции ГДЕ - хреновое решение, а еще обращение через 10точек к реквизиту.
   xXeNoNx
 
2 - 15.08.18 - 07:52
(0) перепиши запрос и возвращайся
   Borteg
 
3 - 15.08.18 - 07:56
8 обходов по группировкам, а итоговых полей 7

Список тем форума
Рекламное место пустует  Рекламное место пустует
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует