|
Помогите оптимизировать запрос ! | ☑ | ||
---|---|---|---|---|
0
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. |
|||
1
xXeNoNx
15.08.18
✎
07:45
|
(0) шото мне подсказывает что выбор когда в секции ГДЕ - хреновое решение, а еще обращение через 10точек к реквизиту.
|
|||
2
xXeNoNx
15.08.18
✎
07:52
|
(0) перепиши запрос и возвращайся
|
|||
3
Borteg
15.08.18
✎
07:56
|
8 обходов по группировкам, а итоговых полей 7
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |