Разработка и Конфигурация · 11 мин
Как сгруппировать строки в макете 1С
Как сгруппировать строки в макете табличного документа 1С: именованные области, методы Сгруппировать и Уровень, свёртка групп, примеры кода и типичные ошибки.
Группировка строк в макете 1С — это способ объединить несколько строк табличного документа в сворачиваемый блок, который пользователь может развернуть или свернуть кнопкой «плюс/минус» слева от области. Такой приём применяется в печатных формах и отчётах на табличном документе: например, чтобы скрыть детальные позиции накладной и показать только итоги по группам товаров.
Технически группировка реализуется двумя способами. Первый — интерактивный: пользователь сам выделяет строки в готовом табличном документе и нажимает кнопку группировки. Второй — программный: разработчик вызывает методы табличного документа при формировании макета, и группы создаются автоматически. Ниже разобраны оба варианта, а также работа с уровнями вложенности и типовые ошибки.
Важно понимать, что группировка строк табличного документа — это не то же самое, что группировка в запросе или в СКД. В запросе и СКД группируются данные до вывода, а в табличном документе группируются уже выведенные строки исключительно для удобства просмотра.
Что такое группировка строк и когда она нужна
Группировка — это объединение смежных строк табличного документа в блок с общим заголовком и возможностью сворачивания. Слева от сгруппированных строк появляется полоса с кнопкой, при нажатии на которую блок скрывается, оставляя видимой только первую строку группы. Это удобно для больших документов, где детализация мешает восприятию итогов.
Типичные сценарии применения:
- печатная форма заказа с товарами, сгруппированными по складам или категориям;
- отчёт на табличном документе с детальными записями внутри групп;
- макет, где часть строк носит справочный характер и должна быть скрыта по умолчанию;
- формирование документа, который пользователь будет вручную «раскрывать» по разделам.
Если цель — сгруппировать данные по значению поля (например, все строки одного контрагента), правильнее делать это на уровне запроса или СКД, а не в табличном документе. Группировка в макете работает только с визуальной структурой уже выведенных строк и не выполняет агрегацию данных.
Интерактивная группировка в готовом документе
Самый простой способ — сгруппировать строки вручную в уже сформированном табличном документе. Для этого выделите нужные строки, кликнув по заголовкам строк слева и протянув диапазон, затем нажмите кнопку «Сгруппировать» на панели инструментов табличного документа (иконка с фигурной скобкой) или выберите одноимённый пункт в контекстном меню.
После группировки слева появится полоса уровня с кнопкой свёртки. Повторная группировка внутри уже сгруппированного диапазона создаёт вложенный уровень. Кнопки с цифрами уровней в левом верхнем углу поля группировки позволяют свернуть или развернуть все группы до выбранного уровня одним действием.
Чтобы разгруппировать строки, выделите их и нажмите «Разгруппировать». Учтите: интерактивная группировка существует только в текущем сеансе просмотра документа — при повторном формировании макета она не сохранится, если не реализована программно.
- 1Сформируйте табличный документ и выделите смежные строки за заголовки слева
- 2Нажмите кнопку «Сгруппировать» на панели инструментов или в контекстном меню
- 3Проверьте, что слева появилась полоса уровня с кнопкой свёртки
- 4Для вложенной группы выделите строки внутри существующей группы и повторите действие
- 5Для отмены выделите группу и нажмите «Разгруппировать»
Программная группировка методом Сгруппировать
Для автоматической группировки при выводе макета используется метод табличного документа Сгруппировать(НачальнаяСтрока, КонечнаяСтрока). Метод принимает номера первой и последней строки будущей группы. Номера удобно получать через свойство ВысотаТаблицы до и после вывода области макета.
ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("МакетОтчета");
// Выводим шапку
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ТабДок.Вывести(ОбластьШапка);
// Запоминаем начало группы
НачалоГруппы = ТабДок.ВысотаТаблицы + 1;
// Выводим детальные строки
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
Пока Выборка.Следующий() Цикл
ОбластьСтрока.Параметры.Заполнить(Выборка);
ТабДок.Вывести(ОбластьСтрока);
КонецЦикла;
// Группируем выведенные строки
ТабДок.Сгруппировать(НачалоГруппы, ТабДок.ВысотаТаблицы);Ключевой приём — запоминать ВысотаТаблицы + 1 до вывода строк, а после вывода передавать в метод текущее значение ВысотаТаблицы. Если группировать по именованным областям, можно использовать метод Область() и свойства области Верх и Низ, но вариант с высотой таблицы проще и надёжнее при выводе в цикле.
Метод Сгруппировать вызывается уже после вывода строк, поэтому порядок действий строгий: сначала вывод, потом группировка. Попытка сгруппировать строки, которых ещё нет в документе, приведёт к ошибке или некорректному диапазону.
Вложенные группы и управление уровнями
Табличный документ поддерживает многоуровневую группировку: внутри группы первого уровня можно создать группу второго, внутри неё — третьего и так далее. Для этого вызывайте Сгруппировать сначала для внутреннего диапазона, затем для внешнего, либо просто указывайте вложенные диапазоны — платформа сама определит уровни по вложенности.
Типовой шаблон для двух уровней (например, группа товаров внутри группы склада):
- перед циклом по складам запомните начало внешней группы;
- внутри, перед циклом по товарам склада, запомните начало внутренней группы;
- после вывода товаров вызовите
Сгруппироватьдля внутреннего диапазона; - после завершения склада вызовите
Сгруппироватьдля внешнего диапазона.
Для управления отображением после формирования используется метод Уровень(НомерУровня). Вызов ТабДок.Уровень(1) свернёт документ до первого уровня — пользователь увидит только заголовки групп, а детали сможет раскрыть вручную. Это особенно полезно для объёмных печатных форм, которые по умолчанию должны открываться в компактном виде.
// Вложенная группировка: склад -> товары
Пока ВыборкаСклады.Следующий() Цикл
НачалоСклада = ТабДок.ВысотаТаблицы + 1;
ТабДок.Вывести(ОбластьСклад);
НачалоТоваров = ТабДок.ВысотаТаблицы + 1;
Пока ВыборкаТовары.Следующий() Цикл
ТабДок.Вывести(ОбластьТовар);
КонецЦикла;
ТабДок.Сгруппировать(НачалоТоваров, ТабДок.ВысотаТаблицы);
ТабДок.Сгруппировать(НачалоСклада, ТабДок.ВысотаТаблицы);
КонецЦикла;
// Сворачиваем до первого уровня
ТабДок.Уровень(1);Группировка при выводе через СКД и построитель отчётов
Если макет формируется не вручную методом Вывести, а через систему компоновки данных или построитель отчётов, группировка строк создаётся настройками самой СКД. В схеме компоновки добавьте группировку по нужному полю на закладке «Настройки» — процессор компоновки сам выведет строки с уровнями группировки табличного документа.
Чтобы итоги групп выводились в отдельных строках и группы можно было сворачивать, проверьте расположение итогов в настройках группировки (обычно «Начало и конец» или «Начало»). Расположение «Начало» даёт классический вид: строка заголовка группы, под ней сворачиваемые детальные записи.
Программно уровень свёртки результата СКД задаётся так же — методом Уровень() у итогового табличного документа после вывода результата компоновки. Это позволяет показать пользователю отчёт сразу в свёрнутом виде.
Способы группировки
Подходит для разового анализа готового документа. Не сохраняется при переформировании.
Для печатных форм и макетов, выводимых в цикле. Требует контроля номеров строк.
Для отчётов: группировка задаётся настройками, уровни создаются автоматически.
Проверка результата и типичные ошибки
После формирования документа проверьте результат визуально: слева от сгруппированных строк должна появиться полоса с кнопкой свёртки, а при нажатии на неё строки группы должны скрываться, оставляя видимой первую строку диапазона. Если кнопки нет — группировка не применилась, чаще всего из-за неверных номеров строк.
Как проверить результат
Полоса видна, кнопка свёртки работает
Полосы нет — проверьте номера строк в вызове Сгруппировать
Скрываются все строки диапазона, кроме первой
Скрываются лишние строки — смещены границы диапазона
Кнопки уровней сворачивают группы постепенно
Все группы сворачиваются разом — нарушена вложенность диапазонов
Ограничения и рекомендации
Группировка табличного документа — визуальный механизм, поэтому у неё есть ограничения. Она не влияет на итоги: суммы по группе нужно считать самостоятельно и выводить в строку заголовка или итога группы. При выгрузке табличного документа в Excel группировка обычно переносится как структура строк, но поведение зависит от формата сохранения, поэтому результат стоит проверять на реальном файле.
Практические рекомендации: выводите в первую строку группы осмысленный заголовок (именно она останется видимой при свёртке), не делайте больше трёх-четырёх уровней вложенности — глубокая структура неудобна, и всегда сворачивайте документ методом Уровень() уже после полного формирования, а не в процессе вывода областей.
Что важно запомнить
Группировка строк в макете 1С делается вручную кнопкой «Сгруппировать» или программно методом Сгруппировать(начало, конец) после вывода строк. Границы диапазона фиксируйте через ВысотаТаблицы, вложенность создавайте вложенными диапазонами, а свёртку выполняйте методом Уровень(). Для отчётов на СКД используйте группировки в настройках схемы.
Частые вопросы
Можно ли сгруппировать колонки, а не строки?
Да, механизм группировки в табличном документе работает и для колонок: интерактивно выделяются колонки за заголовки сверху, программно используется перегрузка метода Сгруппировать с координатами по горизонтали. Полоса группировки в этом случае появляется над документом.
Почему метод Сгруппировать не создаёт группу?
Чаще всего причина в неверных номерах строк: диапазон пуст, указывает на ещё не выведенные строки или состоит из одной строки. Проверьте значения ВысотаТаблицы до и после вывода областей и убедитесь, что группируемый диапазон содержит минимум две строки.
Как сделать, чтобы документ открывался свёрнутым?
После полного формирования табличного документа вызовите метод Уровень() с нужным номером уровня, например ТабДок.Уровень(1). Все группы свернутся до указанного уровня, и пользователь увидит только заголовки групп.
Сохранится ли группировка при сохранении в Excel?
При сохранении табличного документа в формат Excel группировка строк обычно переносится как структура (группировка) листа, но результат зависит от формата файла и версии платформы. Проверяйте итоговый файл вручную на реальных данных.
Чем группировка в макете отличается от группировки в запросе?
Группировка в запросе агрегирует данные — считает суммы и объединяет записи до вывода. Группировка в табличном документе лишь визуально объединяет уже выведенные строки и никаких вычислений не выполняет. Для итогов по группам используйте запрос или СКД.
Можно ли разгруппировать строки программно?
Да, используется метод Разгруппировать с теми же параметрами диапазона, что и у Сгруппировать. Он удаляет группировку для указанных строк, не затрагивая сами данные документа.