Имя: Пароль:
1C
1С v8
Проблема с запросом.
0 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.СП.Код;
                                
                                          ТабДок.Вывести(СтрокаПР);
                                                    
                                    КонецЦикла;

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

              КонецЦикла;

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

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

Надо было так

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


И

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