gifts2017

Макет табличного документа с заранее заданными группировками

Опубликовал Александр Полтава (Патриот) в раздел Программирование - Практика программирования

Как вывести макет табличного документа, сохранив при этом группировки колонок

         Столкнулся давеча с проблемой: есть печатная форма с макетом табличного документа (далее макет), из которого собирается результирующий ТабДок (далее результат). В макете задана сложная иерархия группировок колонок, при этом количество колонок результата не увеличивается, т.е. результат растёт только в длину (например,  добавляются строки табличной части), а ширина ограничена шириной заранее нарисованного макета. В связи с этим стоит логичный вопрос о том, как вывести в результат заданные в макете группировки. Наверняка многие знают, что если просто выводить области макета в результат, то группировки, будут теряться. А программно прописывать уровни для каждой колонки и выводить их по отдельности в цикле, в данном случае абсолютно лишено необходимости.

Значит, пришло время стряхивать пыль с бубна и каким-то образом задабривать богов 1С.

         Не найдя ответа в СП у коллег и у яндекса, пришлось попотеть и методом научного тыка найти-таки заветное решение.

         Далее работающий код с подробными комментариями. Во вложении обработка с примерами макетов и этим самым кодом.

Процедура КнопкаВыполнитьНажатие(Кнопка)

            Макет = ПолучитьМакет("Макет");

            ОбластьШапка = Макет.ПолучитьОбласть("Шапка");

            ТабДок =новый ТабличныйДокумент;

            //После вывода в ТабДок макета  с группировками, в ТабДоке устанавливаются все группировки макета

            //Если выводить не макет, а область макета, то группировки не переносятся

            //Т.е. при применении метода "ПолучитьОбласть" группировки в данной области не учитываются, как будто их не было

            //

            //Группировки колонок в новом табличном документе устанавливаются ПЕРВЫМ выведенным в него табдоком,

            //в котором есть хотябы одна строка, поэтому выводить макет с группировками обязательно нужно в самом начале

            //и в макете помимо самой группировки должны быть строки

            ТабДок.Вывести(ПолучитьМакет("СохраненныеГрупировкиКолонок"));

            ТабДок.Вывести(ОбластьШапка);

            //удалим строки макета "СохраненныеГрупировкиКолонок", т.к. они нам нужны были только для того,

            //чтобы установить в новом табдоке нужную нам группировку колонок

            //

            //Важно! - если после удаления строк из документа удалить все строки, то группировка колонок тоже очистится,

            //поэтому удаляем "лишние" строки, только после того, как вывели в табдок, хотя бы одну "не лишнюю" строку

            //

            //обязательно указываем тип смещения отличный от "БезСмещения" иначе очищенная от текста область останется в нашем табдоке

            ТабДок.УдалитьОбласть(ТабДок.Область(1,,1,), ТипСмещенияТабличногоДокумента.ПоГоризонтали);

           

            //на всякий случай проверим что с группировкой строк тоже всё в порядке           

            ТабДок.НачатьАвтогруппировкуСтрок();

            ТабДок.Вывести(Макет.ПолучитьОбласть("Строка"),0);

            ТабДок.Вывести(Макет.ПолучитьОбласть("Строка"),1);

            ТабДок.ЗакончитьАвтогруппировкуСтрок();

            ТабДок.Показать();

КонецПроцедуры

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
МакетСГруппировками.epf
.epf 9,24Kb
18.03.14
16
.epf 9,24Kb 16 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Евгений Череапнов (lordworld17) 27.03.15 09:36
2. Александр Полтава (Патриот) 27.03.15 11:59
(1) lordworld17, "сэнкс" сам на плюс в статье не нажмёт =)))
3. Андрей Махно (delat) 06.04.16 14:10
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа