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

Однако стандартные настройки СКД не всегда интуитивно понятны: параметры свертывания могут быть скрыты в неочевидных разделах макета, а их поведение зависит от версии платформы и типа отчета. В этой статье разберем все способы настройки свернутых группировок — от ручного редактирования макета до программного управления через код. Особый акцент сделаем на типичные ошибки, которые приводят к тому, что группировки отказываются сворачиваться, и покажем, как их избежать.

Материал будет полезен как начинающим разработчикам , так и опытным специалистам, которые хотят оптимизировать работу с отчетами. Все примеры приведены для актуальных версий платформы 8.3.20+, но с указанием особенностей для более ранних релизов.

Почему группировки не сворачиваются: основные причины

Прежде чем переходить к настройке, важно понять, почему группировки могут игнорировать параметры свертывания. Чаще всего проблема кроется в одном из следующих факторов:

  • 🔹 Неправильный тип группировки: в СКД существуют иерархические и неиерархические группировки. Только иерархические поддерживают свертывание/развертывание.
  • 🔹 Отсутствие флага "Разрешить свертывание" в настройках группировки. Этот параметр часто сбрасывается при редактировании макета вручную.
  • 🔹 Конфликт с настройками отображения: если в макете установлен параметр АвтоРазвертываниеГруппировок, он может перекрывать индивидуальные настройки.
  • 🔹 Ограничения версии платформы: в версиях ниже 8.3.10 некоторые параметры свертывания работают некорректно.

Еще одна распространенная ошибка — попытка свернуть группировку, которая содержит только одну запись. В этом случае СКД автоматически развернет ее, так как свертывание теряет смысл. Также стоит проверять, не переопределены ли настройки свертывания в ПараметрахОтчета или в коде модуля.

⚠️ Внимание: Если вы работаете с отчетом, который был создан в конфигураторе более ранней версии , обязательно обновите его макет через Конфигуратор → Открыть макет СКД → Обновить. В противном случае некоторые параметры могут не сохраняться.

Настройка свертывания через конструктор макета СКД

Самый простой способ настроить свернутые группировки — использовать встроенный конструктор макета. Для этого:

  1. Откройте отчет в режиме 1С:Предприятие и перейдите в Настройки → Изменить вариант отчета.
  2. В окне настроек выберите вкладку Группировки.
  3. Найдите нужную группировку в дереве и кликните по ней правой кнопкой мыши. В контекстном меню выберите Свойства группировки.
  4. На вкладке Дополнительно установите флаг Разрешить свертывание и выберите начальное состояние: Свернуто или Развернуто.

Если группировка не отображается в списке, проверьте, что она добавлена в Структуру отчета на вкладке Настройки. Также убедитесь, что в свойствах отчета на вкладке Другие настройки не установлен флаг Игнорировать настройки пользователя — он может блокировать применение изменений.

Установлен флаг "Разрешить свертывание"|Выбран начальный статус "Свернуто"|Группировка добавлена в структуру отчета|Отсутствует флаг "Игнорировать настройки пользователя"-->

После сохранения настроек отчет автоматически обновится. Если группировки по-прежнему не сворачиваются, попробуйте очистить кэш отчетов через Файл → Открыть → Кэш метаданных (в конфигураторе).

Программное управление свертыванием группировок

В некоторых случаях требуется динамически управлять состоянием группировок — например, сворачивать их в зависимости от прав пользователя или условий формирования отчета. Для этого в модуле отчета можно использовать следующие методы:

// Пример: свернуть все группировки при открытии отчета

Процедура ПриОткрытии()

КомпоновщикМакета = Отчет.КомпоновщикМакета;

Настройки = Отчет.КомпоновщикНастроек.ПолучитьНастройки();

Для Каждого Группировка Из Настройки.Структура.Элементы Цикл

Если Группировка.Тип = Тип("ГруппировкаКомпоновкиДанных") Тогда

Группировка.Свернуто = Истина;

КонецЕсли;

КонецЦикла;

Отчет.КомпоновщикНастроек.УстановитьНастройки(Настройки);

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

Для более гибкого управления можно использовать событие ПередВыводомРезультата:

Процедура ПередВыводомРезультата(Результат, ПараметрыВывода)

// Свернуть группировки с определенным именем

Для Каждого Группировка Из Результат.Структура.Группировки Цикл

Если Найти(Группировка.Имя, "Контрагенты") > 0 Тогда

Группировка.Свернуто = Истина;

КонецЕсли;

КонецЦикла;

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

Обратите внимание, что программное свертывание может конфликтовать с настройками пользователя, если они сохранены в варианте отчета. В этом случае приоритет будут иметь пользовательские настройки. Чтобы этого избежать, используйте метод КомпоновщикНастроек.ОчиститьНастройкиПользователя() перед применением своих параметров.

💡

Если вам нужно свернуть группировки только для определенной роли пользователей, проверяйте права через Пользователь.Роли.Найти("Администратор") в коде модуля.

Особенности работы со свернутыми группировками в разных версиях 1С

Поведение свернутых группировок может отличаться в зависимости от версии платформы. Ниже приведена таблица с ключевыми особенностями:

Версия платформы Поддержка свертывания Ограничения Рекомендации
8.3.8–8.3.10 Частичная Не работает для вложенных группировок глубиной более 3 уровней Используйте программное управление через ПередВыводомРезультата
8.3.11–8.3.15 Полная При большом количестве записей возможны зависания при развертывании Ограничивайте количество строк в группировке через ОграничениеКоличестваЗаписей
8.3.16+ Полная + оптимизации Нет значительных ограничений Используйте АсинхронноеФормирование для больших отчетов
8.3.20+ Расширенная Поддержка свертывания в Диаграммах и Сводных таблицах Настройте АвтоОбновлениеПриРазвертывании для динамических данных

В версиях ниже 8.3.11 свертывание группировок может работать нестабильно при использовании ОбъединениеДанных или Иерархия. Если вы поддерживаете устаревшие конфигурации, тестируйте отчеты на всех целевых версиях платформы.

⚠️ Внимание: В 1С:Управление торговлей 11.4 и 1С:ERP 2.4 некоторые стандартные отчеты (например, "Анализ продаж") имеют жестко заданные настройки свертывания. Их можно переопределить только через расширения конфигурации.

Работа со свернутыми группировками в управляемых формах

Если отчет выводится в управляемой форме, для управления свертыванием можно использовать элементы формы. Например, чтобы добавить кнопку для массового свертывания всех группировок:

  1. Откройте форму отчета в конфигураторе.
  2. Добавьте команду СвернутьВсеГруппировки и свяжите ее с кнопкой на форме.
  3. В обработчике команды используйте следующий код:
    Процедура СвернутьВсеГруппировки(Команда)
    

    Отчет = ЭтотОбъект.Отчет;

    Результат = Отчет.СкомпоноватьРезультат();

    Для Каждого Группировка Из Результат.Структура.Группировки Цикл

    Группировка.Свернуто = Истина;

    КонецЦикла;

    ЭтотОбъект.ОбновитьОтображение();

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

Для динамического обновления состояния группировок при изменении параметров отчета используйте событие ПриИзмененииПараметров:

Процедура ПараметрыОтчетаПриИзменении(Элемент)

Если Элемент.Имя = "Период" Тогда

// При изменении периода свернуть все группировки

Отчет.КомпоновщикНастроек.ОчиститьНастройкиПользователя();

Отчет.СкомпоноватьРезультат();

КонецЕсли;

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

В управляемых формах также доступен программный доступ к текущему состоянию группировок через РезультатКомпоновкиДанных.Структура. Это позволяет, например, сохранять состояние свернутых группировок между сеансами работы.

Через конструктор макета СКД|Программно в модуле отчета|Через управляемую форму|Не использую свертывание-->

Оптимизация производительности при работе со свернутыми группировками

Свернутые группировки могут значительно замедлять формирование отчета, если в них содержится большое количество данных. Чтобы избежать тормозов, следуйте этим рекомендациям:

  • 🚀 Ограничивайте глубину вложенности: старайтесь не использовать более 4 уровней вложенных группировок. Каждый дополнительный уровень увеличивает время формирования в геометрической прогрессии.
  • 📊 Используйте отборы: применяйте Отбор в настройках компоновки, чтобы уменьшить объем обрабатываемых данных. Например, отбирайте данные только за текущий месяц, если пользователю не нужна история.
  • 🔄 Настройте асинхронное формирование: в версиях 8.3.16+ включите параметр АсинхронноеФормирование = Истина в настройках отчета. Это позволит пользователю продолжать работу, пока отчет формируется в фоновом режиме.
  • 🗑️ Очищайте кэш: регулярно очищайте кэш компоновки данных через КомпоновщикМакета.ОчиститьКэш(), особенно если отчет часто изменяется.

Критическая ошибка многих разработчиков — игнорирование параметра ОграничениеКоличестваЗаписей. Если в свернутой группировке содержится более 10 000 записей, развертывание может занять несколько минут или даже привести к падению клиента. Всегда устанавливайте разумные ограничения, например:

Настройки.ОграничениеКоличестваЗаписей = 5000;

Для отчетов с большим объемом данных рассмотрите возможность использования виртуальных таблиц или регистров накопления вместо прямых запросов к документам. Это снизит нагрузку на базу данных и ускорит свертывание/развертывание.

Как проверить производительность отчета?

Используйте Тестирование и исправление → Профилировщик производительности в конфигураторе. Запустите отчет в режиме профилирования и обратите внимание на узкие места:

- Длительные запросы к базе (более 1 секунды)

- Большое количество временных таблиц

- Частые обращения к КомпоновщикМакета.СкомпоноватьРезультат()

Оптимизируйте сначала самые "тяжелые" операции.

Типичные ошибки и их решения

Даже опытные разработчики сталкиваются с проблемами при работе со свернутыми группировками. Вот наиболее распространенные ошибки и способы их исправления:

Ошибка Причина Решение
Группировки не сворачиваются при открытии отчета Не установлен флаг Разрешить свертывание в макете Откройте макет СКД и проверьте настройки каждой группировки
Свертывание работает только для первых двух уровней Ограничение версии платформы (до 8.3.10) Обновите платформу или используйте программное управление
При развертывании группировки отчет "подвисает" Слишком много данных в группировке (более 10 000 строк) Установите ОграничениеКоличестваЗаписей или оптимизируйте запрос
Настройки свертывания сбрасываются после сохранения Конфликт с настройками пользователя или вариантом отчета Очистите настройки пользователя через КомпоновщикНастроек.ОчиститьНастройкиПользователя()
Свертывание не работает в веб-клиенте Ограничения тонкого клиента или браузера Используйте толстый клиент или обновлите браузер

Если ни одно из решений не помогло, проверьте, не переопределены ли настройки свертывания в расширениях конфигурации. Для этого откройте отчет в режиме предприятия и посмотрите, какие расширения к нему подключены через Все функции → Расширения.

⚠️ Внимание: В 1С:Бухгалтерия 3.0 некоторые отчеты (например, "Оборотно-сальдовая ведомость") имеют жестко заданную логику свертывания, которая не поддается стандартной настройке. В этом случае придется создавать копию отчета с собственным макетом.
💡

Всегда тестируйте отчеты со свернутыми группировками на реальных данных — поведение может отличаться от тестов на небольших выборках.

FAQ: Частые вопросы по свертыванию группировок в 1С СКД

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

Да, это можно реализовать программно. В модуле отчета проверяйте права пользователя через Пользователь.Роли.Найти("ИмяРоли") и устанавливайте свойство Свернуто в зависимости от результата. Например:

Если НЕ Пользователь.Роли.Найти("Администратор") Тогда

Для Каждого Группировка Из Настройки.Структура.Элементы Цикл

Группировка.Свернуто = Истина;

КонецЦикла;

КонецЕсли;

Почему после обновления платформы перестали работать настройки свертывания?

Это типичная проблема при переходе с версий 8.3.10–8.3.14 на 8.3.15+. В новых версиях изменился механизм хранения настроек макета. Решение:

  1. Откройте отчет в конфигураторе.
  2. Перейдите в макет СКД и сохраните его без изменений (это обновит внутреннюю структуру).
  3. Проверьте, не сбросились ли флаги Разрешить свертывание.
Как свернуть группировки по умолчанию в отчете, который открывается из обработки?

Если отчет вызывается из внешней обработки, используйте следующий код:

Отчет = Отчеты.ВашОтчет.Создать();

Настройки = Отчет.КомпоновщикНастроек.ПолучитьНастройки();

Для Каждого Группировка Из Настройки.Структура.Элементы Цикл

Группировка.Свернуто = Истина;

КонецЦикла;

Отчет.КомпоновщикНастроек.УстановитьНастройки(Настройки);

Отчет.СкомпоноватьИВывести();

Убедитесь, что обработка имеет права на модификацию настроек отчета.

Можно ли сохранить состояние свернутых группировок между сеансами?

Да, для этого используйте механизм вариантов отчета. При закрытии отчета сохраняйте текущие настройки:

Процедура ПриЗакрытии()

Настройки = Отчет.КомпоновщикНастроек.ПолучитьНастройки();

ВариантОтчета = Отчет.ВариантОтчета;

ВариантОтчета.Настройки = Настройки;

ВариантОтчета.Записать();

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

При следующем открытии отчета состояние группировок восстановится автоматически.

Почему в отчете с диаграммой не работают свернутые группировки?

В версиях ниже 8.3.20 свертывание группировок в диаграммах не поддерживалось. Обновите платформу или используйте альтернативный подход:

  1. Создайте отдельную таблицу с данными.
  2. Настройте свертывание в таблице.
  3. Свяжите диаграмму с таблицей через параметры компоновки.