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

05.02.22

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

            //

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

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

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

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

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

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

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

            //

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

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

            //

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

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

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

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

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

См. также

Поинтегрируем: сервисы интеграции – новый стандарт или просто коннектор?

Обмен между базами 1C Администрирование СУБД Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

В платформе 8.3.17 появился замечательный механизм «Сервисы интеграции». Многие считают, что это просто коннектор 1С:Шины. Так ли это?

11.03.2024    4525    dsdred    53    

72

Как готовить и есть массивы

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

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

24.01.2024    5294    YA_418728146    25    

63

Планы обмена VS История данных

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

Вы все еще регистрируете изменения только на Планах обмена и Регистрах сведений?

11.12.2023    6409    dsdred    36    

111

1С-ная магия

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

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

06.10.2023    18473    SeiOkami    46    

118

Дефрагментация и реиндексация после перехода на платформу 8.3.22

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

Начиная с версии платформы 8.3.22 1С снимает стандартные блокировки БД на уровне страниц. Делаем рабочий скрипт, как раньше.

14.09.2023    12088    human_new    27    

74

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    8821    YA_418728146    6    

141

Внешние компоненты Native API на языке Rust - Просто!

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

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

20.08.2023    6279    sebekerga    54    

94

Все скопируем и вставим! (Буфер обмена в 1С 8.3.24)

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

Рассмотрим новую возможность 8.3.24 и как её можно эффективно использовать

27.06.2023    15986    SeiOkami    31    

103
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. lordworld17 20 27.03.15 09:36 Сейчас в теме
2. Патриот 450 27.03.15 11:59 Сейчас в теме
(1) lordworld17, "сэнкс" сам на плюс в статье не нажмёт =)))
3. delat 30 06.04.16 14:10 Сейчас в теме
4. Volfy 65 13.11.17 10:34 Сейчас в теме
5. Volfy 65 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. Патриот 450 11.12.19 21:23 Сейчас в теме
(8) 1. Не уверен, что этот метод был доступен пять лет назад, возможно и не на последней на тот момент платформе.
2. Это инструмент как выполнить конкретное действие - взять интерактивно настроенную группировку из макета, где она была добавлена интерактивно конструктором. Об этом понятным языком написано в описании статьи из десяти слов. Нет такой задачи - можно идти мимо.
3. Если хочешь задавать группировку программно, то о возможности этого в статье написано.
4. За пример спасибо, но проверять я его конечно не буду, пока нет такой задачи.
12. 7OH 69 29.11.21 16:56 Сейчас в теме
(8)А как получить эти самые области для свёртки то ?
Вот например - надо присоединить несколько периодов.
В каждой из длинных колонок по 2-3 области, которые надо свернуть.
10. Linx-p 12.08.20 10:42 Сейчас в теме
А как вывести заранее заданные группировки строк?
У меня в таб.док. не выводятся группировки строк из области макета.
11. Student1C 57 12.01.21 17:54 Сейчас в теме
Хотел еще спросить как вывести кнопки группировки, но понял что для этого достаточно выводить Заголовки )
13. 7OH 69 29.11.21 16:57 Сейчас в теме
Я верно понимаю, что если свертка нужная в присоединенных областях - такой фокус, увы, не пройдёт ?
14. Патриот 450 01.12.21 10:04 Сейчас в теме
(13) Не пройдёт, т.к. в описанном коде, группировки устанавливаются при первом выводе, а присоединение, это уже второй вывод.
//Группировки колонок в новом табличном документе устанавливаются ПЕРВЫМ выведенным в него табдоком,

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

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

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