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

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

Метки: 

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

Я
   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.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,,"ВСЕ");


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