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

1С:Предприятие ::

Метки: 

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

Я
   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


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