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

05.02.22

Разработка - Механизмы платформы 1С

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
МакетСГруппировками.epf
.epf 9,24Kb
48
48 Скачать (1 SM) Купить за 1 850 руб.

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

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

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

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

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

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

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

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

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

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

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

            //

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

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

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

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

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

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

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

            //

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

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

            //

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

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

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

------------------------------------
ИНТЕРЕСНЫХ ВАМ ЗАДАЧ, ПЛОДОТВОРНОЙ РАБОТЫ И ОРИГИНАЛЬНЫХ/ОПТИМАЛЬНЫХ РЕШЕНИЙ!!

Табличный документ

См. также

Механизмы платформы 1С Программист Платформа 1С v8.3 Бесплатно (free)

В платформе 8.3.27 появилась возможность использовать WebSocket-клиент. Давайте посмотрим, как это все устроено и чем оно нам полезно.

14.01.2025    5581    dsdred    40    

91

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 1C:Бухгалтерия Бесплатно (free)

Эта небольшая статья - некоторого рода шпаргалка по файловым потокам: как и зачем с ними работать, какие преимущества это дает.

23.06.2024    9914    bayselonarrend    21    

160

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 1C:Бухгалтерия Бесплатно (free)

Пример использования «Сервисов интеграции» без подключения к Шине и без обменов.

13.03.2024    7150    dsdred    18    

81

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 Бесплатно (free)

Все мы используем массивы в своем коде. Это один из первых объектов, который дают ученикам при прохождении обучения программированию. Но умеем ли мы ими пользоваться? В этой статье я хочу показать все методы массива, а также некоторые фишки в работе с массивами.

24.01.2024    23024    YA_418728146    28    

73

Механизмы платформы 1С Программист Бесплатно (free)

Язык программирования 1С содержит много нюансов и особенностей, которые могут приводить к неожиданным для разработчика результатам. Сталкиваясь с ними, программист начинает лучше понимать логику платформы, а значит, быстрее выявлять ошибки и видеть потенциальные узкие места своего кода там, где позже можно было бы ещё долго медитировать с отладчиком в поисках источника проблемы. Мы рассмотрим разные примеры поведения кода 1С. Разберём результаты выполнения и ответим на вопросы «Почему?», «Как же так?» и «Зачем нам это знать?». 

06.10.2023    25298    SeiOkami    48    

136
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. lordworld17 21 27.03.15 09:36 Сейчас в теме
2. Патриот 458 27.03.15 11:59 Сейчас в теме
(1) lordworld17, "сэнкс" сам на плюс в статье не нажмёт =)))
3. delat 32 06.04.16 14:10 Сейчас в теме
4. Volfy 69 13.11.17 10:34 Сейчас в теме
5. Volfy 69 13.11.17 12:52 Сейчас в теме
У меня получилось =) Спас коллегу, молодец!
Патриот; +1 Ответить
6. avu2002 5 05.12.17 17:52 Сейчас в теме
7. maxis33 45 05.04.18 18:06 Сейчас в теме
8. KaidzenBusiness 10.12.19 17:36 Сейчас в теме
Для чего все эти танцы с бубнами. Выделяешь нужные колонки в макете для группировки, копируешь область из свойств и вставляешь в метод Область(), затем вызываешь другой метод Сгруппировать() и всё - колонки сгруппированы. Вот пример, ТабДок.Область("C13:C21").Сгруппировать()
unknown181538; AnddnA; +2 Ответить
9. Патриот 458 11.12.19 21:23 Сейчас в теме
(8) 1. Не уверен, что этот метод был доступен пять лет назад, возможно и не на последней на тот момент платформе.
2. Это инструмент как выполнить конкретное действие - взять интерактивно настроенную группировку из макета, где она была добавлена интерактивно конструктором. Об этом понятным языком написано в описании статьи из десяти слов. Нет такой задачи - можно идти мимо.
3. Если хочешь задавать группировку программно, то о возможности этого в статье написано.
4. За пример спасибо, но проверять я его конечно не буду, пока нет такой задачи.
12. 7OH 70 29.11.21 16:56 Сейчас в теме
(8)А как получить эти самые области для свёртки то ?
Вот например - надо присоединить несколько периодов.
В каждой из длинных колонок по 2-3 области, которые надо свернуть.
10. Linx-p 12.08.20 10:42 Сейчас в теме
А как вывести заранее заданные группировки строк?
У меня в таб.док. не выводятся группировки строк из области макета.
11. Student1C 59 12.01.21 17:54 Сейчас в теме
Хотел еще спросить как вывести кнопки группировки, но понял что для этого достаточно выводить Заголовки )
13. 7OH 70 29.11.21 16:57 Сейчас в теме
Я верно понимаю, что если свертка нужная в присоединенных областях - такой фокус, увы, не пройдёт ?
14. Патриот 458 01.12.21 10:04 Сейчас в теме
(13) Не пройдёт, т.к. в описанном коде, группировки устанавливаются при первом выводе, а присоединение, это уже второй вывод.
//Группировки колонок в новом табличном документе устанавливаются ПЕРВЫМ выведенным в него табдоком,

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

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

            ТабДок.Вывести(ПолучитьМакет("СохраненныеГрупировкиКолонок"));
Возможно этот способ можно доработать, но если это разовая задача, то быстрее будет сделать группировку программно, чем разбираться с недокументированными возможностями.
Оставьте свое сообщение