Система компоновки данных в 1С: собираем отчёт с нуля
Содержание
Система компоновки данных (СКД) — это механизм платформы 1С 8.3, который строит отчёт из запроса и набора настроек, а не из кода вывода на макет. Вы описываете, что показать (поля, ресурсы, группировки), а платформа сама формирует табличный документ, итоги, группировки и условное оформление.
Чтобы начать, в Конфигураторе добавьте объект Отчёт и на его закладке Основные нажмите ссылку Открыть схему компоновки данных. Откроется конструктор схемы — дальше вся работа идёт в нём: наборы данных, поля, ресурсы, параметры, настройки. Пользователю отчёт потом доступен в режиме 1С:Предприятие как обычный отчёт с кнопками Сформировать и Настройки.
Ниже — как устроена схема, как наполнить её данными и как отдать пользователю гибкие настройки без правки конфигурации.
Из чего состоит схема компоновки данных
Схема компоновки данных (СКД) — это контейнер с несколькими закладками. По ним и строится отчёт:
- 📦 Наборы данных — источник строк. Чаще всего это запрос, реже — объект или объединение нескольких наборов.
- 🔗 Связи наборов данных — как соединить несколько наборов между собой (аналог левого соединения).
- 🧮 Вычисляемые поля — поля, которых нет в запросе, но которые считаются выражением (например, цена с НДС).
- Σ Ресурсы — поля, по которым считаются итоги:
Сумма,Количество,Максимум. - ⚙️ Параметры — значения на входе: период, организация, склад.
- 🎨 Макеты — своё оформление для конкретных полей или группировок (нужно редко).
- 🧩 Вложенные схемы — отдельная СКД внутри поля (для сложных случаев).
- 🪄 Настройки — то, что увидит пользователь: группировки, выбранные поля, отбор, сортировка, оформление.
Разделение ответственности простое: закладки до Настроек описывают, откуда брать данные, а Настройки — как их показать. Один и тот же набор данных можно вывести десятком разных способов, не трогая запрос.
Главное отличие СКД от «ручного» отчёта: вывод формирует платформа. Процессор компоновки сам расставит итоги по группировкам, сам применит отбор и оформление. Вам остаётся корректно описать схему.
Набор данных: откуда отчёт берёт строки
Начинают с набора данных. На одноимённой закладке нажмите зелёный плюс и выберите тип:
- Запрос — основной вариант. Внутри работает обычный конструктор запроса 1С.
- Объект — данные приходят из внешнего источника (например, из параметра типа «таблица значений»), который заполняет код.
- Объединение — несколько наборов складываются «друг под друга».
Для запроса нажмите Конструктор запроса и соберите выборку как обычно: таблицы из регистров и справочников, поля, условия, итоги не задавайте — их посчитает СКД через ресурсы.
Запрос может быть пакетным: несколько запросов через точку с запятой, где промежуточные результаты складываются во временные таблицы. Для СКД набором данных становится последний запрос пакета — он и даёт поля. Временные таблицы полезны, когда нужно сначала собрать остатки, а потом соединить их с оборотами: так платформа читает большие регистры один раз, а не на каждую строку.
После того как запрос готов, на закладке Наборы данных автоматически появится список полей. Для каждого поля доступны флажки и свойства:
| Свойство поля | Что делает |
|---|---|
Поле | внутреннее имя (из запроса) |
Заголовок | как поле назовётся в отчёте |
Ограничение доступа | запрет на использование поля в отборе/группировке/выводе |
Роль | помечает поле как период, измерение, реквизит — для связей и автозаполнения |
Если поле не появилось в настройках, проверьте флажок видимости на закладке набора и права роли. Часто «пропавшее» поле просто скрыто галочкой Ограничение доступа.
Когда наборов несколько, их соединяют на закладке Связи наборов данных: указываете набор-источник, набор-приёмник и поле связи. Это аналог левого соединения — приёмник подтягивается к источнику по ключу.
Поля, ресурсы и группировки
Ресурс — это поле, по которому СКД считает итог. Перейдите на закладку Ресурсы, перенесите числовые поля (Сумма, Количество) и задайте выражение агрегации, например Сумма(СуммаОборот). Без ресурсов отчёт покажет строки, но не даст итогов по группировкам и общего итога.
Выражение ресурса — это не только Сумма. Доступны Количество, Среднее, Максимум, Минимум, а также условное суммирование. Для каждого ресурса можно отдельно указать, по каким группировкам он рассчитывается, в колонке Рассчитывать по. Это нужно, когда, например, остаток должен считаться только по складу, а оборот — по всем уровням.
Вычисляемое поле пригодится, когда нужного значения нет в запросе. На закладке Вычисляемые поля задайте имя и выражение на языке выражений СКД — например, долю строки в общем итоге или текстовую метку по условию через ВЫБОР КОГДА … ТОГДА … КОНЕЦ. В выражениях вычисляемых полей и ресурсов работают агрегатные функции СКД Вычислить и ВычислитьВыражение — ими считают проценты от итога, нарастающий итог и значения из соседних группировок.
Есть и обратная задача — скрыть поле. Флажок Роль и свойство Ограничение доступа управляют тем, можно ли выводить поле, использовать его в отборе и группировке. Поле-ключ, нужное только для связи наборов, обычно закрывают от вывода, чтобы оно не мешало пользователю.
Дальше настраивается вывод. На закладке Настройки слева стоит дерево структуры. Правой кнопкой по корню → Новая группировка:
- группировка по полю (например,
Номенклатура) собирает строки и считает по ним ресурсы; - группировка без поля («Детальные записи») выводит строки как есть, без свёртки;
- вложенные группировки дают многоуровневые итоги (Склад → Номенклатура).
Группировки бывают не только по строкам, но и по колонкам — так получается перекрёстная (кросс-) таблица: номенклатура по строкам, месяцы по колонкам.
На закладке Выбранные поля (внутри Настроек) перетащите поля, которые реально нужны в выводе. Не тащите в выбранные поля всё подряд: лишние поля замедляют отчёт и загромождают результат. Отдельными полями можно вывести и «Авто» — тогда состав колонок подстроится под группировку.
Отборы, сортировка и условное оформление
Отбор ограничивает строки. В Настройках откройте закладку Отбор и добавьте условие: поле, вид сравнения (Равно, В списке, Больше), значение. Отбор по СКД работает и на уровне запроса (если поле туда попадает), и на уровне готовой выборки — платформа выбирает оптимально сама.
Разница с условием в запросе: отбор в настройках пользователь может менять сам, не заходя в Конфигуратор. Условие прямо в тексте запроса жёсткое и пользователю недоступно.
Сортировка задаётся на закладке Сортировка: перенесите поле и выберите направление (по возрастанию/убыванию). Сортировку можно задать и внутри конкретной группировки — тогда она действует только там.
Условное оформление раскрашивает отчёт по правилам. Закладка Условное оформление → добавить элемент, в нём три части:
- Оформление — что меняем: цвет текста, фон, шрифт, формат числа.
- Условие — когда применяем: например,
ОстатокКоличество Меньше 0. - Оформляемые поля — к каким колонкам/строкам применить (если не указать — ко всей строке).
Типичный приём — подсветить красным отрицательные остатки или выделить жирным строки с итогами выше порога. Несколько элементов оформления применяются сверху вниз, поэтому более частные правила ставьте ниже общих.
Через условное оформление решается и более тонкая задача — управление видимостью. Если в оформлении выставить свойство Видимость в значение «ложь» с нужным условием, строки или колонки просто не покажутся в готовом отчёте. Так прячут нулевые строки или служебные колонки, не убирая их из схемы.
Отдельно стоит макет оформления. На закладке Макеты можно задать своё представление для конкретного поля или группировки — например, вывести не число, а картинку-индикатор. Это нужно редко; в большинстве отчётов хватает условного оформления из настроек.
Параметры и варианты отчёта
Параметр — это значение, которое отчёт запрашивает на входе: период, организация, вид номенклатуры. На закладке Параметры для каждого параметра задайте тип, заголовок и, при желании, значение по умолчанию.
Чтобы параметр появился у пользователя в шапке отчёта, в Настройках на закладке Параметры включите флажок Включать в пользовательские настройки. Иначе параметр будет, но пользователь его не увидит и не изменит.
Для периода удобно использовать стандартный параметр типа СтандартныйПериод — тогда пользователь получит привычный выбор «Эта неделя / Этот месяц / Произвольный период» одной кнопкой.
Вариант отчёта — это сохранённый набор настроек. В одном отчёте можно хранить несколько вариантов: «По номенклатуре», «По складам», «Сводный по месяцам». Пользователь переключает их в режиме 1С:Предприятие кнопкой Выбрать вариант.
Пользовательские настройки стоит разделять по уровню:
- 📌 быстрые настройки (период, организация) — выводите прямо в шапку, флажок «быстрого доступа»;
- 🔧 остальное — в полное окно настроек по кнопке
Ещё → Изменить вариант отчёта; - 🧷 служебные настройки, которые пользователю трогать не нужно, оставляйте без флажка видимости.
Выбрать вариант, конфигурацию менять не нужно.Ещё → Изменить вариант отчёта: там доступно дерево настроек целиком. Изменённый вариант можно сохранить как пользовательский.Расширенные приёмы и ускорение отчёта
Когда базовый отчёт готов, в ход идут приёмы посложнее.
Вызов СКД из кода. В модуле объекта отчёта обычно работают четыре объекта: СхемаКомпоновкиДанных, КомпоновщикНастроекКомпоновкиДанных, МакетКомпоновкиДанных (его собирает КомпоновщикМакетаКомпоновкиДанных) и ПроцессорКомпоновкиДанных. Процессор инициализируют макетом и выводят результат процессором вывода в табличный документ. Это нужно, когда отчёт формируется нестандартно — например, по данным, собранным кодом в таблицу значений.
Макет = Компоновщик.Выполнить(СхемаКомпоновки, Настройки, , , Тип("МакетКомпоновкиДанных"));
Процессор = Новый ПроцессорКомпоновкиДанных;
Процессор.Инициализировать(Макет);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ТабДок);
ПроцессорВывода.Вывести(Процессор);
Отладка без Конфигуратора. Чтобы проверить схему быстро, многие используют внешнюю обработку «Консоль компоновки данных» (консоль отчётов). Она позволяет вставить текст схемы и посмотреть результат с любыми настройками, не меняя конфигурацию.
Теперь про скорость. СКД сама по себе не тормозит — тормозит обычно запрос за ней. Что помогает:
- 🚫 не выбирать лишние поля в запросе и в выбранных полях — каждое поле это память и время;
- 🎯 отбор по индексируемым полям (период, организация) — чтобы запрос не читал весь регистр;
- 📊 итоги считать ресурсами, а не выбирать «сырые» строки и сворачивать их вручную;
- 🔁 избегать вложенных запросов в цикле — лучше одно соединение, чем запрос в запросе;
- 🧱 для больших регистров — виртуальные таблицы (
Остатки,Обороты) вместо чтения основной таблицы движений.
Прежде чем оптимизировать схему, проверьте план запроса в технологическом журнале или замерьте время на реальном объёме данных. Часто «виноват» один неиндексированный отбор, а не вся СКД.
Частые вопросы
Чем отчёт на СКД лучше отчёта, написанного кодом?
Можно ли сделать отчёт на СКД без программирования?
Отчёт всё равно создаётся в Конфигураторе, поэтому полностью без него обойтись нельзя. Менять же готовый отчёт (Изменить вариант отчёта) пользователь может сам.Почему в отчёте нет итогов по группам?
Ресурсы и перенесите числовые поля с функцией Сумма или Количество — тогда СКД начнёт считать итоги по каждой группировке и общий итог.