Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Вывод данных по группировкам запроса.

Вывод данных по группировкам запроса.
Я
   lg2marvel
 
03.06.19 - 11:13
Добрый день. Есть запрос:

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

Затем вывожу в табличный документ шапку:

    ВыборкаНачисленияУдержанияИтог = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "ГруппаНачисленияУдержанияВыплаты");
    Пока ВыборкаНачисленияУдержанияИтог.Следующий() Цикл
        ВыборкаНачисленияУдержания = ВыборкаНачисленияУдержанияИтог.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "НачислениеУдержание", );
        Пока ВыборкаНачисленияУдержания.Следующий() Цикл
                                                                                                
            Если СокрЛП(ВыборкаНачисленияУдержания.НачислениеУдержаниеКраткое) = "" Тогда                                                        
                ОбластьНачисленияУдержанияШапка.Параметры.НачислениеУдержаниеПредставление = ВыборкаНачисленияУдержания.НачислениеУдержание;
            Иначе
                ОбластьНачисленияУдержанияШапка.Параметры.НачислениеУдержаниеПредставление = ВыборкаНачисленияУдержания.НачислениеУдержаниеКраткое;
            КонецЕсли;    
            ТабДок.Присоединить(ОбластьНачисленияУдержанияШапка);
        КонецЦикла;        
        ОбластьВсегоНачисленияУдержанияШапка.Параметры.ВсегоНачисленияУдержанияПредставление = "Всего "+ВыборкаНачисленияУдержанияИтог.ГруппаНачисленияУдержанияВыплаты;
        ТабДок.Присоединить(ОбластьВсегоНачисленияУдержанияШапка);
    КонецЦикла;

Шапка выводится идеально, в зависимости от количества в периоде начислений создаются колонки и в конце выводится по каждой группе итог. Но это только шапка.

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

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

Но неправильно выводит сумму - вся сумма без группировки по подразделениям и сотрудникам.
Подскажите как правильно сделать вывод группировки?
 
 
   lg2marvel
 
1 - 03.06.19 - 11:20
Потерял одну группировку по ГруппаНачисленияУдержанияВыплаты,  добавил - ничего не поменялось

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

                    ВыборкаНачисленияУдержания = ВыборкаНачисленияУдержанияИтог.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "НачислениеУдержание", );
                    Пока ВыборкаНачисленияУдержания.Следующий() Цикл 
                        ОбластьСтрокаНУФизЛицо.Параметры.Сумма = ""+ВыборкаПодразделения.СуммаНУ + " "+ВыборкаПодразделения.НачислениеУдержание;    
                        ТабДок.Присоединить(ОбластьСтрокаНУФизЛицо);            
                    КонецЦикла;    
                    ОбластьСтрокаНУИтогоФизЛицо.Параметры.Сумма = ВыборкаПодразделения.СуммаНУ;    
                    ТабДок.Присоединить(ОбластьСтрокаНУИтогоФизЛицо);                
                КонецЦикла;    
            КонецЦикла;
        КонецЦикла;
            
    КонецЦикла;
   lg2marvel
 
2 - 03.06.19 - 11:56
похожим образом предлагает конструктор, но все равно вывод одну итуже итоговую сумму во все ячейки с суммой
    ВыборкаПодразделения = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам)// "Подразделение",);

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

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

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

                Пока ВыборкаНачисленияУдержания.Следующий() Цикл 
                    ОбластьСтрокаНУФизЛицо.Параметры.Сумма = ВыборкаПодразделения.СуммаНУ;    
                    ТабДок.Присоединить(ОбластьСтрокаНУФизЛицо);            
                КонецЦикла;    
                ОбластьСтрокаНУИтогоФизЛицо.Параметры.Сумма = ВыборкаПодразделения.СуммаНУ;    
                ТабДок.Присоединить(ОбластьСтрокаНУИтогоФизЛицо);                
            КонецЦикла;
        КонецЦикла;        
    КонецЦикла;
   lg2marvel
 
3 - 03.06.19 - 12:21
Нашел косяк.
Вопрос закрыт

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