![]() |
|
Вывод в табличный документ. Динамическое формирование таблицы | ☑ | ||
---|---|---|---|---|
0
lg2marvel
05.06.19
✎
14:30
|
Добрый день. Нужна ваша помощь, 2-й день думаю как надурить судьбу и сделать все красиво. Вывожу результат следующей процедурой, но выводится не совсем корректно. Например:
Начисление Премия Итого начислено ФизЛицо1 10000 10000 (итог) ФизЛицо2 10000 5000 15000 (итого) А хотелось бы чтоб было как-то так: Начисление Премия Итого начислено ФизЛицо1 10000 10000 (итог) ФизЛицо2 10000 5000 15000 (итого) Как правильнее это лучше сделать? Делать массив при заполнении шапки и потом сравнивать выводимые данные? ВыборкаПодразделения = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаПодразделения.Следующий() Цикл Если ВыборкаПодразделения.ТипЗаписи() = ТипЗаписиЗапроса.ИтогПоИерархии Тогда Область1 = ОбластьПодразделениеИерархия1; Область2 = ОбластьПодразделениеИерархия2; Область3 = ОбластьПодразделениеИерархия3; Иначе Область1 = ОбластьПодразделение1; Область2 = ОбластьПодразделение2; Область3 = ОбластьПодразделение3; КонецЕсли; Область1.Параметры.Заполнить(ВыборкаПодразделения); ТабДок.Вывести(Область1, ВыборкаПодразделения.Уровень()); ВыборкаФизлицо = ВыборкаПодразделения.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаФизлицо.Следующий() Цикл ОбластьФизЛицо1.Параметры.Заполнить(ВыборкаФизлицо); ТабДок.Вывести(ОбластьФизЛицо1, ВыборкаФизлицо.Уровень()); ТабДок.Присоединить(ОбластьФизЛицо2, ВыборкаФизлицо.Уровень()); ТабДок.Присоединить(ОбластьФизЛицо3, ВыборкаФизлицо.Уровень()); ВыборкаНачисленияУдержанияИтог = ВыборкаФизлицо.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаНачисленияУдержанияИтог.Следующий() Цикл ТабДок.НачатьАвтогруппировкуКолонок(); ВыборкаНачисленияУдержания = ВыборкаНачисленияУдержанияИтог.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаНачисленияУдержания.Следующий() Цикл ОбластьФизЛицо4.Параметры.Сумма = ВыборкаНачисленияУдержания.СуммаНУ; ТабДок.Присоединить(ОбластьФизЛицо4, ВыборкаНачисленияУдержания.Уровень()); КонецЦикла; ОбластьФизЛицо5.Параметры.Сумма = ВыборкаНачисленияУдержанияИтог.СуммаНУ; ТабДок.Присоединить(ОбластьФизЛицо5, ВыборкаНачисленияУдержанияИтог.Уровень()); ТабДок.ЗакончитьАвтогруппировкуКолонок(); КонецЦикла; КонецЦикла; КонецЦикла; Данные получаю следующим запросом (да, можно было скд, но в дальнейшем будет дорабатываться и там много условий которые в скд трудно реализовать): Запрос.Текст = "ВЫБРАТЬ | НачисленияУдержанияПоСотрудникам.ФизическоеЛицо КАК ФизическоеЛицо, | НачисленияУдержанияПоСотрудникам.Подразделение КАК Подразделение, | НачисленияУдержанияПоСотрудникам.Сумма КАК СуммаНУ, | НачисленияУдержанияПоСотрудникам.ГруппаНачисленияУдержанияВыплаты КАК ГруппаНачисленияУдержанияВыплаты, | НачисленияУдержанияПоСотрудникам.НачислениеУдержание КАК НачислениеУдержание, | НачисленияУдержанияПоСотрудникам.НачислениеУдержание.КраткоеНаименование КАК НачислениеУдержаниеКраткое |ИЗ | РегистрНакопления.НачисленияУдержанияПоСотрудникам КАК НачисленияУдержанияПоСотрудникам |ГДЕ | НачисленияУдержанияПоСотрудникам.Период МЕЖДУ НАЧАЛОПЕРИОДА(&Нач, ДЕНЬ) И КОНЕЦПЕРИОДА(&Кон, ДЕНЬ) | И (НЕ &ОтборПоПодразделению | ИЛИ НачисленияУдержанияПоСотрудникам.Подразделение В ИЕРАРХИИ (&Подразделение)) | И (НЕ &ОтборПоФизЛицу | ИЛИ НачисленияУдержанияПоСотрудникам.ФизическоеЛицо = &ФизическоеЛицо) |ИТОГИ | СУММА(СуммаНУ) |ПО | Подразделение ИЕРАРХИЯ, | ФизическоеЛицо, | ГруппаНачисленияУдержанияВыплаты, | НачислениеУдержание |АВТОУПОРЯДОЧИВАНИЕ"; |
|||
1
Юрий Лазаренко
06.06.19
✎
13:10
|
(0) Результат запроса выгрузить в таблицу значений и скормить ее построителю отчета.
Процедура ПоказатьТаблицуЗначений(РезультатТЗ ) Построитель = Новый ПостроительОтчета; Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(РезультатТЗ); Построитель.МакетОформления = ПолучитьМакетОформления(СтандартноеОформление.Асфальт); Построитель.Выполнить(); Построитель.ВыводитьЗаголовокОтчета = Истина; Построитель.ТекстЗаголовка = "Данные таблицы значений"; Для каждого Колонка Из Построитель.ВыбранныеПоля Цикл Колонка.Представление = РезультатТЗ.Колонки[Колонка.Имя].Заголовок; КонецЦикла; МакетТД = Новый ТабличныйДокумент; Построитель.Вывести(МакетТД); ОбластьТД = МакетТД.Область(); ОбластьТД.ШиринаКолонки = 20; МакетТД.ТолькоПросмотр = Истина; МакетТД.ФиксацияСверху = 4; МакетТД.ОтображатьЗаголовки = Истина; МакетТД.Показать(); КонецПроцедуры |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |