Столкнулся давеча с задачей: есть печатная форма с макетом табличного документа (далее макет), из которого собирается результирующий ТабДок (далее результат). В макете задана сложная иерархия группировок колонок, при этом количество колонок результата не увеличивается, т.е. результат растёт только в длину (например, добавляются строки табличной части), а ширина ограничена шириной заранее нарисованного макета. В связи с этим стоит логичный вопрос о том, как вывести в результат заданные в макете группировки. Если просто выводить области макета в результат, то группировки, будут теряться. А программно прописывать уровни для каждой колонки и выводить их по отдельности в цикле, в данном случае абсолютно лишено необходимости.
Значит, пришло время стряхивать пыль с бубна и каким-то образом задабривать богов 1С.
Не найдя ответа в СП у коллег и у яндекса, пришлось попотеть и методом научного тыка найти-таки заветное решение.
Далее работающий код с подробными комментариями. Во вложении обработка с примерами макетов и этим самым кодом.
Процедура КнопкаВыполнитьНажатие(Кнопка)
Макет = ПолучитьМакет("Макет");
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ТабДок =новый ТабличныйДокумент;
//После вывода в ТабДок макета с группировками, в ТабДоке устанавливаются все группировки макета
//Если выводить не макет, а область макета, то группировки не переносятся
//Т.е. при применении метода "ПолучитьОбласть" группировки в данной области не учитываются, как будто их не было
//
//Группировки колонок в новом табличном документе устанавливаются ПЕРВЫМ выведенным в него табдоком,
//в котором есть хотябы одна строка, поэтому выводить макет с группировками обязательно нужно в самом начале
//и в макете помимо самой группировки должны быть строки
ТабДок.Вывести(ПолучитьМакет("СохраненныеГрупировкиКолонок"));
ТабДок.Вывести(ОбластьШапка);
//удалим строки макета "СохраненныеГрупировкиКолонок", т.к. они нам нужны были только для того,
//чтобы установить в новом табдоке нужную нам группировку колонок
//
//Важно! - если после удаления строк из документа удалить все строки, то группировка колонок тоже очистится,
//поэтому удаляем "лишние" строки, только после того, как вывели в табдок, хотя бы одну "не лишнюю" строку
//
//обязательно указываем тип смещения отличный от "БезСмещения" иначе очищенная от текста область останется в нашем табдоке
ТабДок.УдалитьОбласть(ТабДок.Область(1,,1,), ТипСмещенияТабличногоДокумента.ПоГоризонтали);
КонецПроцедуры
------------------------------------
ИНТЕРЕСНЫХ ВАМ ЗАДАЧ, ПЛОДОТВОРНОЙ РАБОТЫ И ОРИГИНАЛЬНЫХ/ОПТИМАЛЬНЫХ РЕШЕНИЙ!!