Как при выводе данных в отчете через компоновку данных выводить одну группировку свернутой

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке сложных отчетов в системе компоновки данных (СКД) мы часто сталкиваемся с ситуацией, когда данных слишком много. Если отчет содержит несколько уровней иерархии, пользователю бывает трудно ориентироваться в «полотне» информации. Особенно это критично, когда отчет автоматически рассылается по электронной почте в формате Excel: получатель хочет видеть итоговые цифры сразу, а детализацию открывать только по необходимости. Рассмотрим подробнее, как реализовать программное сворачивание группировок в 1С.

Метод 1: Сворачивание всех группировок определенного уровня

Самый простой и эффективный способ, который подходит в большинстве случаев — это использование встроенного метода табличного документа ПоказатьУровеньГруппировокСтрок(). Этот метод позволяет одной командой «схлопнуть» все строки отчета до заданного уровня иерархии.

Разберем ситуацию: допустим, у нас есть отчет с тремя уровнями (Организация — Контрагент — Договор). Мы хотим, чтобы при открытии или формировании отчет всегда был свернут до уровня Контрагентов. Проанализируем, где именно нужно разместить код. Если мы работаем в модуле формы отчета, мы можем переопределить стандартную команду формирования.

Посмотрим на пример реализации в обработчике команды:


&НаКлиенте
Процедура Сформировать(Команда)
    // Формируем отчет стандартным механизмом
    СкомпоноватьРезультат(РежимКомпоновкиРезультата.Непосредственно);
    
    // Сворачиваем табличный документ до 3-го уровня
    // Уровни считаются с 0 (общий итог)
    ЭтаФорма.Результат.ПоказатьУровеньГруппировокСтрок(3);
КонецПроцедуры

Важно помнить, что метод ПоказатьУровеньГруппировокСтрок() работает уже с готовым табличным документом. Если вы используете типовые конфигурации на базе БСП, этот код лучше размещать в модуле объекта отчета внутри процедуры ПриКомпоновкеРезультата, после того как процессор вывода закончил свою работу.

Метод 2: Точечное сворачивание конкретной группы через ПоказатьГруппуСтрок

Иногда задача стоит сложнее: нам не нужно сворачивать все группы одного уровня, а требуется скрыть только одну специфическую область. В этом случае нам поможет метод ПоказатьГруппуСтрок(). Для его работы нам необходимо точно знать координаты (строки) группы, которую мы хотим свернуть.

Рассмотрим алгоритм действий:

  1. Выполняем программный вывод отчета через ПроцессорКомпоновкиДанных и ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент.
  2. В процессе вывода или после него определяем границы нужной нам области.
  3. Применяем метод сворачивания к найденной области.

Проанализируем пример кода, который позволяет свернуть конкретный диапазон строк:


// Определяем область, которую нужно свернуть (например, с 10 по 25 строку)
ОбластьДляСворачивания = Результат.Область(10, , 25, );
// Устанавливаем состояние: Ложь - свернуть, Истина - развернуть
Результат.ПоказатьГруппуСтрок(ОбластьДляСворачивания, Ложь);

Этот метод более гибкий, но требует ручного поиска индексов строк. Выясним причину, почему это может быть неудобно: при динамическом изменении данных в отчете номера строк всегда будут разными. Поэтому такой способ лучше комбинировать с поиском текста в табличном документе через метод НайтиТекст().

Метод 3: Полный программный контроль вывода через Процессор Вывода

Для реализации максимально сложной логики (например, сворачивать только те группы, где сумма меньше определенного порога), нам придется отказаться от стандартной кнопки «Сформировать» и написать процедуру вывода вручную. Разберем этот процесс по шагам.

Воспользуемся объектом ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент. В цикле мы можем перехватывать каждый элемент результата компоновки. Это позволяет нам анализировать уровень группировки и тип элемента (начало группы, детальные записи, конец группы).


ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.НачатьВывод();

Пока Истина Цикл
    ЭлементРезультата = ПроцессорКомпоновки.Следующий();
    Если ЭлементРезультата = Неопределено Тогда
        Прервать;
    КонецЕсли;
    
    ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);
    
    // Здесь можно анализировать ЭлементРезультата.ЗначенияПараметров
    // И если это нужная нам группа - запомнить номер строки для последующего сворачивания
КонецЦикла;

ПроцессорВывода.ЗакончитьВывод();

После завершения цикла мы можем применить ПоказатьУровеньГруппировокСтрок() или установить свойство Свернутая для конкретных строк. Выясним важный нюанс: свойство Строка.Свернутая = Истина позволяет скрыть детализацию, сохраняя при этом «плюсик» для пользователя, чтобы он мог развернуть данные самостоятельно.

Особенности экспорта в Excel и отправки по почте

Одной из главных причин сворачивания группировок является последующая рассылка отчета. Как отмечалось в обсуждении, при сохранении табличного документа в формат .xls или .xlsx состояние группировок (свернуто/развернуто) обычно сохраняется, если использовать современные методы записи файла.

Важные моменты при работе с Excel:

Практические советы по оформлению

Чтобы отчет выглядел профессионально, мы рекомендуем также обратить внимание на свойство РасположениеИтоговГруппировокСтрок. Если вы сворачиваете группы, итоги должны быть видны в «шапке» группы (значение Начало), иначе пользователь увидит только пустую строку со знаком «плюс» и не поймет, что внутри, пока не развернет её.

Проанализируем ситуацию с уровнями: помните, что иерархия в 1С начинается с 1 для первой группировки в настройках СКД. Если вы вызываете ПоказатьУровеньГруппировокСтрок(1), вы увидите только самые верхние разделы отчета. Экспериментируйте с этим параметром, чтобы добиться идеального визуального представления для ваших бизнес-пользователей.

← На главную