Работа с отчетами в 1С:Предприятие часто требует гибкой настройки отображения данных — особенно когда речь идет о больших объемах информации, разбитых на группировки. Одним из ключевых инструментов для этого служит Система Компоновки Данных (СКД), которая позволяет не только структурировать данные, но и управлять их визуальным представлением. Частая задача — вывод группировок в свернутом виде, чтобы пользователь видел только заголовки групп, а детализировать данные мог по запросу.
Однако стандартные настройки СКД не всегда интуитивно понятны: параметры свертывания могут быть скрыты в неочевидных разделах макета, а их поведение зависит от версии платформы и типа отчета. В этой статье разберем все способы настройки свернутых группировок — от ручного редактирования макета до программного управления через код. Особый акцент сделаем на типичные ошибки, которые приводят к тому, что группировки отказываются сворачиваться, и покажем, как их избежать.
Материал будет полезен как начинающим разработчикам 1С, так и опытным специалистам, которые хотят оптимизировать работу с отчетами. Все примеры приведены для актуальных версий платформы 8.3.20+, но с указанием особенностей для более ранних релизов.
Почему группировки не сворачиваются: основные причины
Прежде чем переходить к настройке, важно понять, почему группировки могут игнорировать параметры свертывания. Чаще всего проблема кроется в одном из следующих факторов:
- 🔹 Неправильный тип группировки: в СКД существуют иерархические и неиерархические группировки. Только иерархические поддерживают свертывание/развертывание.
- 🔹 Отсутствие флага "Разрешить свертывание" в настройках группировки. Этот параметр часто сбрасывается при редактировании макета вручную.
- 🔹 Конфликт с настройками отображения: если в макете установлен параметр
АвтоРазвертываниеГруппировок, он может перекрывать индивидуальные настройки. - 🔹 Ограничения версии платформы: в версиях ниже 8.3.10 некоторые параметры свертывания работают некорректно.
Еще одна распространенная ошибка — попытка свернуть группировку, которая содержит только одну запись. В этом случае СКД автоматически развернет ее, так как свертывание теряет смысл. Также стоит проверять, не переопределены ли настройки свертывания в ПараметрахОтчета или в коде модуля.
⚠️ Внимание: Если вы работаете с отчетом, который был создан в конфигураторе более ранней версии 1С, обязательно обновите его макет через Конфигуратор → Открыть макет СКД → Обновить. В противном случае некоторые параметры могут не сохраняться.
Настройка свертывания через конструктор макета СКД
Самый простой способ настроить свернутые группировки — использовать встроенный конструктор макета. Для этого:
- Откройте отчет в режиме
1С:Предприятиеи перейдите вНастройки → Изменить вариант отчета. - В окне настроек выберите вкладку
Группировки. - Найдите нужную группировку в дереве и кликните по ней правой кнопкой мыши. В контекстном меню выберите
Свойства группировки. - На вкладке
Дополнительноустановите флагРазрешить свертываниеи выберите начальное состояние:СвернутоилиРазвернуто.
Если группировка не отображается в списке, проверьте, что она добавлена в Структуру отчета на вкладке Настройки. Также убедитесь, что в свойствах отчета на вкладке Другие настройки не установлен флаг Игнорировать настройки пользователя — он может блокировать применение изменений.
Установлен флаг "Разрешить свертывание"|Выбран начальный статус "Свернуто"|Группировка добавлена в структуру отчета|Отсутствует флаг "Игнорировать настройки пользователя"-->
После сохранения настроек отчет автоматически обновится. Если группировки по-прежнему не сворачиваются, попробуйте очистить кэш отчетов через Файл → Открыть → Кэш метаданных (в конфигураторе).
Программное управление свертыванием группировок
В некоторых случаях требуется динамически управлять состоянием группировок — например, сворачивать их в зависимости от прав пользователя или условий формирования отчета. Для этого в модуле отчета можно использовать следующие методы:
// Пример: свернуть все группировки при открытии отчета
Процедура ПриОткрытии()
КомпоновщикМакета = Отчет.КомпоновщикМакета;
Настройки = Отчет.КомпоновщикНастроек.ПолучитьНастройки();
Для Каждого Группировка Из Настройки.Структура.Элементы Цикл
Если Группировка.Тип = Тип("ГруппировкаКомпоновкиДанных") Тогда
Группировка.Свернуто = Истина;
КонецЕсли;
КонецЦикла;
Отчет.КомпоновщикНастроек.УстановитьНастройки(Настройки);
КонецПроцедуры
Для более гибкого управления можно использовать событие ПередВыводомРезультата:
Процедура ПередВыводомРезультата(Результат, ПараметрыВывода)
// Свернуть группировки с определенным именем
Для Каждого Группировка Из Результат.Структура.Группировки Цикл
Если Найти(Группировка.Имя, "Контрагенты") > 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 некоторые стандартные отчеты (например, "Анализ продаж") имеют жестко заданные настройки свертывания. Их можно переопределить только через расширения конфигурации.
Работа со свернутыми группировками в управляемых формах
Если отчет выводится в управляемой форме, для управления свертыванием можно использовать элементы формы. Например, чтобы добавить кнопку для массового свертывания всех группировок:
- Откройте форму отчета в конфигураторе.
- Добавьте команду
СвернутьВсеГруппировкии свяжите ее с кнопкой на форме. - В обработчике команды используйте следующий код:
Процедура СвернутьВсеГруппировки(Команда)Отчет = ЭтотОбъект.Отчет;
Результат = Отчет.СкомпоноватьРезультат();
Для Каждого Группировка Из Результат.Структура.Группировки Цикл
Группировка.Свернуто = Истина;
КонецЦикла;
ЭтотОбъект.ОбновитьОтображение();
КонецПроцедуры
Для динамического обновления состояния группировок при изменении параметров отчета используйте событие ПриИзмененииПараметров:
Процедура ПараметрыОтчетаПриИзменении(Элемент)
Если Элемент.Имя = "Период" Тогда
// При изменении периода свернуть все группировки
Отчет.КомпоновщикНастроек.ОчиститьНастройкиПользователя();
Отчет.СкомпоноватьРезультат();
КонецЕсли;
КонецПроцедуры
В управляемых формах также доступен программный доступ к текущему состоянию группировок через РезультатКомпоновкиДанных.Структура. Это позволяет, например, сохранять состояние свернутых группировок между сеансами работы.
Через конструктор макета СКД|Программно в модуле отчета|Через управляемую форму|Не использую свертывание-->
Оптимизация производительности при работе со свернутыми группировками
Свернутые группировки могут значительно замедлять формирование отчета, если в них содержится большое количество данных. Чтобы избежать тормозов, следуйте этим рекомендациям:
- 🚀 Ограничивайте глубину вложенности: старайтесь не использовать более 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+. В новых версиях изменился механизм хранения настроек макета. Решение:
- Откройте отчет в конфигураторе.
- Перейдите в макет СКД и сохраните его без изменений (это обновит внутреннюю структуру).
- Проверьте, не сбросились ли флаги
Разрешить свертывание.
Как свернуть группировки по умолчанию в отчете, который открывается из обработки?
Если отчет вызывается из внешней обработки, используйте следующий код:
Отчет = Отчеты.ВашОтчет.Создать();
Настройки = Отчет.КомпоновщикНастроек.ПолучитьНастройки();
Для Каждого Группировка Из Настройки.Структура.Элементы Цикл
Группировка.Свернуто = Истина;
КонецЦикла;
Отчет.КомпоновщикНастроек.УстановитьНастройки(Настройки);
Отчет.СкомпоноватьИВывести();
Убедитесь, что обработка имеет права на модификацию настроек отчета.
Можно ли сохранить состояние свернутых группировок между сеансами?
Да, для этого используйте механизм вариантов отчета. При закрытии отчета сохраняйте текущие настройки:
Процедура ПриЗакрытии()
Настройки = Отчет.КомпоновщикНастроек.ПолучитьНастройки();
ВариантОтчета = Отчет.ВариантОтчета;
ВариантОтчета.Настройки = Настройки;
ВариантОтчета.Записать();
КонецПроцедуры
При следующем открытии отчета состояние группировок восстановится автоматически.
Почему в отчете с диаграммой не работают свернутые группировки?
В версиях ниже 8.3.20 свертывание группировок в диаграммах не поддерживалось. Обновите платформу или используйте альтернативный подход:
- Создайте отдельную таблицу с данными.
- Настройте свертывание в таблице.
- Свяжите диаграмму с таблицей через параметры компоновки.