![]() |
|
Вывод данных по группировкам запроса. | ☑ | ||
---|---|---|---|---|
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
|
Нашел косяк.
Вопрос закрыт |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |