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

1С:Предприятие :: 1С:Предприятие 8 общая

Проблема с запросом.

Проблема с запросом.
Я
   antihacker
 
10.04.18 - 14:22
Всем привет ! Вот запрос

        
    Макет = Документы.ИзмененияПланаФинансированияПоРасходам.ПолучитьМакет("Приложение33");
    
    ТабДок = Новый ТабличныйДокумент;
    ТабДок.АвтоМасштаб = Истина;
    ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
    
    //Шапка отчета

    ШапкаОтчета = Макет.ПолучитьОбласть("Шапка");

    ШапкаОтчета.Параметры.ВидБюджета       =  ЭтотОбъект.ОрганизацияГУ.ВидБюджета;
    ШапкаОтчета.Параметры.НомерПриложении  =  "Приложение 33";
    ШапкаОтчета.Параметры.Организация      =  ЭтотОбъект.ОрганизацияГУ;
    ШапкаОтчета.Параметры.ВидБюджета       =  ЭтотОбъект.ОрганизацияГУ.ВидБюджета;
                          
    ТабДок.Вывести(ШапкаОтчета);
    
    //ДатаЗаголовок отчета

    ДатаЗаголовок = Макет.ПолучитьОбласть("ДатаЗаголовок");
    ДатаЗаголовок.Параметры.ДатаСправки    =  ТекущаяДата();
    ТабДок.Вывести(ДатаЗаголовок);
     
    //Уровень детализации   Подпрограмма Специфика    

    Если ЭтотОбъект.УровеньДетализации = "Программа" Тогда
         вхПоПрограмме    = Истина;
         вхПоПодпрограмме = Ложь;
         вхПоСпецифике    = Ложь;    
         
        //ЗаголовокКБКПрограмма отчета

         ЗаголовокКБКПрограмма = Макет.ПолучитьОбласть("ЗаголовокКБКПрограмма");
         ТабДок.Вывести(ЗаголовокКБКПрограмма);
    
        //Строки

         СтрокаПР = Макет.ПолучитьОбласть("СтрокаПР");

        //Поля для итог

         ПоляДляИтог = "ПР";
         
    ИначеЕсли ЭтотОбъект.УровеньДетализации = "Подпрограмма" Тогда
         
         вхПоПрограмме    = Истина;
         вхПоПодпрограмме = Истина;
         вхПоСпецифике    = Ложь;
         
        //ЗаголовокКБКПодпрограмма отчета

         ЗаголовокКБКПрограмма = Макет.ПолучитьОбласть("ЗаголовокКБКПодпрограмма");
         ТабДок.Вывести(ЗаголовокКБКПрограмма);
    
        //Строки

         СтрокаПР = Макет.ПолучитьОбласть("СтрокаППР");
         
        //Поля для итог

         ПоляДляИтог = "ПР,ППР";

    ИначеЕсли ЭтотОбъект.УровеньДетализации = "Специфика" Тогда
         
         вхПоПрограмме    = Истина;
         вхПоПодпрограмме = Истина;
         вхПоСпецифике    = Истина;        
                  
        //ЗаголовокКБКСП отчета

         ЗаголовокКБКПрограмма = Макет.ПолучитьОбласть("ЗаголовокКБКСП");
         ТабДок.Вывести(ЗаголовокКБКПрограмма);
    
        //Строки

         СтрокаПР = Макет.ПолучитьОбласть("СтрокаСП");         
        //Поля для итог

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

    //| Данные.ФКР.Подпрограмма,    

    //| Данные.ЭКР,        

    //| 

    |     ВЫБОР
    |         КОГДА &вхПоПрограмме  
    |             ТОГДА Данные.ФКР.ПрограммыРасходов
    |         ИНАЧЕ NULL
    |     КОНЕЦ,
    | 
    |     ВЫБОР
    |         КОГДА &вхПоПодпрограмме
    |             ТОГДА Данные.ФКР.Подпрограмма
    |         ИНАЧЕ NULL
    |     КОНЕЦ,
    | 
    |     ВЫБОР
    |         КОГДА &вхПоСпецифике
    |             ТОГДА Данные.ЭКР
    |         ИНАЧЕ NULL
    |     КОНЕЦ   
    | УПОРЯДОЧИТЬ ПО
    |     Организация,
    |     ФГ,
    |     АБП,
    |    ПР,
    |    ППР,
    |    СП    
    | ИТОГИ
    |     СУММА(СуммаГод),
    |     СУММА(Январь),
    |     СУММА(Февраль),
    |     СУММА(Март),
    |     СУММА(Апрель),
    |     СУММА(Май),
    |     СУММА(Июнь),
    |     СУММА(Июль),
    |     СУММА(Август),
    |     СУММА(Сентябрь),
    |     СУММА(Октябрь),
    |     СУММА(Ноябрь),
    |     СУММА(Декабрь)
    | ПО 
    |   ОБЩИЕ,
    |   Организация,
    |     ФГ,АБП,"+ПоляДляИтог+"";
    //|     АБП,ПР,ППР,СП"; 

    //|     ПР,

    //|     ППР

    //|     ";


    Запрос.Параметры.Вставить("вхСсылка"    ,      ЭтотОбъект.ТекДокумент);
    Запрос.Параметры.Вставить("вхОрганизация"    , ЭтотОбъект.ОрганизацияГУ);
    
    Запрос.Параметры.Вставить("вхПоПрограмме"    ,вхПоПрограмме);
    Запрос.Параметры.Вставить("вхПоПодпрограмме" ,вхПоПодпрограмме);
    Запрос.Параметры.Вставить("вхПоСпецифике"    ,вхПоСпецифике);
    

    //Строка по программе

    ИтогоПоПрограмме = Макет.ПолучитьОбласть("ИтогоПоПрограмме");

    //БюджетополучательПР

    БюджетополучательПР = Макет.ПолучитьОбласть("БюджетополучательПР");

    //ИтогоПоСправке

    ИтогоПоСправке      = Макет.ПолучитьОбласть("ИтогоПоСправке"); 
    
    
    ОбщийРезВыборки2 = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    
    Пока ОбщийРезВыборки2.Следующий() Цикл
        
         ИтогоПоСправке.Параметры.Заполнить(ОбщийРезВыборки2);
        
         ОбщийРезВыборки1 = ОбщийРезВыборки2.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    
    
    Пока ОбщийРезВыборки1.Следующий() Цикл
        
         БюджетополучательПР.Параметры.Заполнить(ОбщийРезВыборки1);
        
         ОбщийРезВыборки = ОбщийРезВыборки1.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
        
    Пока ОбщийРезВыборки.Следующий() Цикл
        
         СтрокаПР.Параметры.Заполнить(ОбщийРезВыборки);
         ИтогоПоПрограмме.Параметры.Заполнить(ОбщийРезВыборки);
         
         СтрокаПР.Параметры.Заполнить(ОбщийРезВыборки);
         СтрокаПР.Параметры.Наименование = ОбщийРезВыборки.ФГ.Наименование;
         СтрокаПР.Параметры.ФГ           = ОбщийРезВыборки.ФГ.Код;
         СтрокаПР.Параметры.АБП          = "";
         СтрокаПР.Параметры.КодГУ        = "";
         СтрокаПР.Параметры.ПР             = "";
         
         попытка СтрокаПР.Параметры.ППР             = ""; исключение конецпопытки;
         попытка СтрокаПР.Параметры.СП             = ""; исключение конецпопытки;
         
         ТабДок.Вывести(СтрокаПР);
         
         ВыборкаПоУчреждению = ОбщийРезВыборки.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
            
         Пока ВыборкаПоУчреждению.Следующий() Цикл

              //сообщить(ВыборкаПоУчреждению.ФГ);

              //сообщить(ВыборкаПоУчреждению.Январь);

               
              СтрокаПР.Параметры.Заполнить(ВыборкаПоУчреждению);
             
              СтрокаПР.Параметры.Наименование = ВыборкаПоУчреждению.АБП.НаименованиеАдминистратора;
              СтрокаПР.Параметры.ФГ           = "";
              СтрокаПР.Параметры.АБП           = ВыборкаПоУчреждению.АБП.КодАдминистратораБюджетныхПрограмм;
              СтрокаПР.Параметры.КодГУ        = "";
              СтрокаПР.Параметры.ПР           = "";

              попытка СтрокаПР.Параметры.ППР  = ""; исключение конецпопытки;
              попытка СтрокаПР.Параметры.СП   = ""; исключение конецпопытки;
         
              ТабДок.Вывести(СтрокаПР);

               Выборка0 = ВыборкаПоУчреждению.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
            
              Пока Выборка0.Следующий() Цикл
                    
                   СтрокаПР.Параметры.Заполнить(Выборка0);
                   
                   СтрокаПР.Параметры.Наименование = Выборка0.Организация.Наименование;
                   СтрокаПР.Параметры.ФГ           = "";
                   СтрокаПР.Параметры.АБП            = "";
                   СтрокаПР.Параметры.КодГУ        = Выборка0.Организация.КодУчреждения;
                   СтрокаПР.Параметры.ПР           = "";

                   попытка СтрокаПР.Параметры.ППР  = ""; исключение конецпопытки;
                   попытка СтрокаПР.Параметры.СП   = ""; исключение конецпопытки;
                   
                   ТабДок.Вывести(СтрокаПР);
                     
                   Выборка1 = Выборка0.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
                 
                   Пока Выборка1.Следующий() Цикл
       
                        СтрокаПР.Параметры.Заполнить(Выборка1);
                       
                        СтрокаПР.Параметры.Наименование = Выборка1.ПР.НаименованиеПрограммы;
                        СтрокаПР.Параметры.ФГ           = "";
                        СтрокаПР.Параметры.АБП             = "";
                        СтрокаПР.Параметры.КодГУ        = "";
                        СтрокаПР.Параметры.ПР            = Выборка1.ПР.КодПрограммы;

                        попытка СтрокаПР.Параметры.ППР  = ""; исключение конецпопытки;
                        попытка СтрокаПР.Параметры.СП   = ""; исключение конецпопытки;
                        
                        ТабДок.Вывести(СтрокаПР);

                         Выборка2 = Выборка1.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
                 
                         Пока Выборка2.Следующий() Цикл
                            
                              СтрокаПР.Параметры.Заполнить(Выборка2);                          
                             
                             Если Выборка2.ППР.НаименованиеПодпрограммы = "" Тогда
                                  НаименованиеПодпрограммы = Выборка2.ППР.Наименование;
                                  КодПодпрограммы = "000";
                             Иначе
                                  НаименованиеПодпрограммы = Выборка2.ППР.НаименованиеПодпрограммы;
                                  КодПодпрограммы = Выборка2.ППР.КодПодпрограммы;
                             КонецЕсли;
                              
                             СтрокаПР.Параметры.Наименование = НаименованиеПодпрограммы;
                              СтрокаПР.Параметры.ФГ           = "";
                             СтрокаПР.Параметры.АБП          = "";
                             СтрокаПР.Параметры.КодГУ        = "";
                             СтрокаПР.Параметры.ПР             = "";
                              СтрокаПР.Параметры.ППР             = КодПодпрограммы;
                                 
                             попытка СтрокаПР.Параметры.СП   = ""; исключение конецпопытки;
                             
                             ТабДок.Вывести(СтрокаПР);
                             
                                 Выборка3 = Выборка2.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

                                    //сообщить("111");

                                     
                                 Пока Выборка3.Следующий() Цикл
                                         
                                        //сообщить("222222");

                                          СтрокаПР.Параметры.Заполнить(Выборка3);                          
                                                                   
                                          СтрокаПР.Параметры.Наименование = Выборка3.СП.Наименование;
                                           СтрокаПР.Параметры.ФГ           = "";
                                          СтрокаПР.Параметры.АБП          = "";
                                          СтрокаПР.Параметры.КодГУ        = "";
                                          СтрокаПР.Параметры.ПР             = "";
                                          СтрокаПР.Параметры.ППР             = "";
                                           СтрокаПР.Параметры.СП             = Выборка3.СП.Код;
                                 
                                          ТабДок.Вывести(СтрокаПР);
                                                    
                                    КонецЦикла;

                        КонецЦикла;
                        
                   КонецЦикла;     

              КонецЦикла;

          КонецЦикла;
          ТабДок.Вывести(ИтогоПоПрограмме);
        КонецЦикла;
        
    ТабДок.Вывести(БюджетополучательПР);    
    КонецЦикла;
    
    ТабДок.Вывести(ИтогоПоСправке);
    КонецЦикла;
    
    Возврат ТабДок;

Когда срабатывает условие ПоляДляИтог = "ПР,ППР,СП" , то почему то, данные удваиваются ?  Где косяк ?
 
 
   antihacker
 
1 - 10.04.18 - 14:26
такое ощущение что не может сгруппировать по ППР. Хотя запрос проверилв консоле. Все нормально.
   tesseract
 
2 - 10.04.18 - 16:49
(1) По null суммирование и не проходит. Используй Значение(ЧегоТамУтебя.ПустаяССылка)
   antihacker
 
3 - 11.04.18 - 06:05
Тема закрыта !

Надо было так

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


И 

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

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