Имя: Пароль:
1C
1С v8
Вывод данных по группировкам запроса.
0 lg2marvel
 
03.06.19
11:13
Добрый день. Есть запрос:

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

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

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

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

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

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

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

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

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

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