Система компоновки данных в 1С: собираем отчёт с нуля

· 9 мин

Содержание

Система компоновки данных (СКД) — это механизм платформы 1С 8.3, который строит отчёт из запроса и набора настроек, а не из кода вывода на макет. Вы описываете, что показать (поля, ресурсы, группировки), а платформа сама формирует табличный документ, итоги, группировки и условное оформление.

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

Ниже — как устроена схема, как наполнить её данными и как отдать пользователю гибкие настройки без правки конфигурации.

Из чего состоит схема компоновки данных

Схема компоновки данных (СКД) — это контейнер с несколькими закладками. По ним и строится отчёт:

  • 📦 Наборы данных — источник строк. Чаще всего это запрос, реже — объект или объединение нескольких наборов.
  • 🔗 Связи наборов данных — как соединить несколько наборов между собой (аналог левого соединения).
  • 🧮 Вычисляемые поля — поля, которых нет в запросе, но которые считаются выражением (например, цена с НДС).
  • Σ Ресурсы — поля, по которым считаются итоги: Сумма, Количество, Максимум.
  • ⚙️ Параметры — значения на входе: период, организация, склад.
  • 🎨 Макеты — своё оформление для конкретных полей или группировок (нужно редко).
  • 🧩 Вложенные схемы — отдельная СКД внутри поля (для сложных случаев).
  • 🪄 Настройки — то, что увидит пользователь: группировки, выбранные поля, отбор, сортировка, оформление.

Разделение ответственности простое: закладки до Настроек описывают, откуда брать данные, а Настройки — как их показать. Один и тот же набор данных можно вывести десятком разных способов, не трогая запрос.

Главное отличие СКД от «ручного» отчёта: вывод формирует платформа. Процессор компоновки сам расставит итоги по группировкам, сам применит отбор и оформление. Вам остаётся корректно описать схему.

Набор данных: откуда отчёт берёт строки

Начинают с набора данных. На одноимённой закладке нажмите зелёный плюс и выберите тип:

  1. Запрос — основной вариант. Внутри работает обычный конструктор запроса 1С.
  2. Объект — данные приходят из внешнего источника (например, из параметра типа «таблица значений»), который заполняет код.
  3. Объединение — несколько наборов складываются «друг под друга».

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

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

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

Свойство поляЧто делает
Полевнутреннее имя (из запроса)
Заголовоккак поле назовётся в отчёте
Ограничение доступазапрет на использование поля в отборе/группировке/выводе
Рольпомечает поле как период, измерение, реквизит — для связей и автозаполнения

Если поле не появилось в настройках, проверьте флажок видимости на закладке набора и права роли. Часто «пропавшее» поле просто скрыто галочкой Ограничение доступа.

Когда наборов несколько, их соединяют на закладке Связи наборов данных: указываете набор-источник, набор-приёмник и поле связи. Это аналог левого соединения — приёмник подтягивается к источнику по ключу.

Поля, ресурсы и группировки

Ресурс — это поле, по которому СКД считает итог. Перейдите на закладку Ресурсы, перенесите числовые поля (Сумма, Количество) и задайте выражение агрегации, например Сумма(СуммаОборот). Без ресурсов отчёт покажет строки, но не даст итогов по группировкам и общего итога.

Выражение ресурса — это не только Сумма. Доступны Количество, Среднее, Максимум, Минимум, а также условное суммирование. Для каждого ресурса можно отдельно указать, по каким группировкам он рассчитывается, в колонке Рассчитывать по. Это нужно, когда, например, остаток должен считаться только по складу, а оборот — по всем уровням.

Вычисляемое поле пригодится, когда нужного значения нет в запросе. На закладке Вычисляемые поля задайте имя и выражение на языке выражений СКД — например, долю строки в общем итоге или текстовую метку по условию через ВЫБОР КОГДА … ТОГДА … КОНЕЦ. В выражениях вычисляемых полей и ресурсов работают агрегатные функции СКД Вычислить и ВычислитьВыражение — ими считают проценты от итога, нарастающий итог и значения из соседних группировок.

Есть и обратная задача — скрыть поле. Флажок Роль и свойство Ограничение доступа управляют тем, можно ли выводить поле, использовать его в отборе и группировке. Поле-ключ, нужное только для связи наборов, обычно закрывают от вывода, чтобы оно не мешало пользователю.

Дальше настраивается вывод. На закладке Настройки слева стоит дерево структуры. Правой кнопкой по корню → Новая группировка:

  • группировка по полю (например, Номенклатура) собирает строки и считает по ним ресурсы;
  • группировка без поля («Детальные записи») выводит строки как есть, без свёртки;
  • вложенные группировки дают многоуровневые итоги (Склад → Номенклатура).

Группировки бывают не только по строкам, но и по колонкам — так получается перекрёстная (кросс-) таблица: номенклатура по строкам, месяцы по колонкам.

На закладке Выбранные поля (внутри Настроек) перетащите поля, которые реально нужны в выводе. Не тащите в выбранные поля всё подряд: лишние поля замедляют отчёт и загромождают результат. Отдельными полями можно вывести и «Авто» — тогда состав колонок подстроится под группировку.

Минимальный отчёт на СКД — проверьте, что сделали
Выполнено: 0 / 6

Отборы, сортировка и условное оформление

Отбор ограничивает строки. В Настройках откройте закладку Отбор и добавьте условие: поле, вид сравнения (Равно, В списке, Больше), значение. Отбор по СКД работает и на уровне запроса (если поле туда попадает), и на уровне готовой выборки — платформа выбирает оптимально сама.

Разница с условием в запросе: отбор в настройках пользователь может менять сам, не заходя в Конфигуратор. Условие прямо в тексте запроса жёсткое и пользователю недоступно.

Сортировка задаётся на закладке Сортировка: перенесите поле и выберите направление (по возрастанию/убыванию). Сортировку можно задать и внутри конкретной группировки — тогда она действует только там.

Условное оформление раскрашивает отчёт по правилам. Закладка Условное оформление → добавить элемент, в нём три части:

  1. Оформление — что меняем: цвет текста, фон, шрифт, формат числа.
  2. Условие — когда применяем: например, ОстатокКоличество Меньше 0.
  3. Оформляемые поля — к каким колонкам/строкам применить (если не указать — ко всей строке).

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

Через условное оформление решается и более тонкая задача — управление видимостью. Если в оформлении выставить свойство Видимость в значение «ложь» с нужным условием, строки или колонки просто не покажутся в готовом отчёте. Так прячут нулевые строки или служебные колонки, не убирая их из схемы.

Отдельно стоит макет оформления. На закладке Макеты можно задать своё представление для конкретного поля или группировки — например, вывести не число, а картинку-индикатор. Это нужно редко; в большинстве отчётов хватает условного оформления из настроек.

Параметры и варианты отчёта

Параметр — это значение, которое отчёт запрашивает на входе: период, организация, вид номенклатуры. На закладке Параметры для каждого параметра задайте тип, заголовок и, при желании, значение по умолчанию.

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

Для периода удобно использовать стандартный параметр типа СтандартныйПериод — тогда пользователь получит привычный выбор «Эта неделя / Этот месяц / Произвольный период» одной кнопкой.

Вариант отчёта — это сохранённый набор настроек. В одном отчёте можно хранить несколько вариантов: «По номенклатуре», «По складам», «Сводный по месяцам». Пользователь переключает их в режиме 1С:Предприятие кнопкой Выбрать вариант.

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

  • 📌 быстрые настройки (период, организация) — выводите прямо в шапку, флажок «быстрого доступа»;
  • 🔧 остальное — в полное окно настроек по кнопке Ещё → Изменить вариант отчёта;
  • 🧷 служебные настройки, которые пользователю трогать не нужно, оставляйте без флажка видимости.
Как дать пользователю менять отчёт?

Расширенные приёмы и ускорение отчёта

Когда базовый отчёт готов, в ход идут приёмы посложнее.

Вызов СКД из кода. В модуле объекта отчёта обычно работают четыре объекта: СхемаКомпоновкиДанных, КомпоновщикНастроекКомпоновкиДанных, МакетКомпоновкиДанных (его собирает КомпоновщикМакетаКомпоновкиДанных) и ПроцессорКомпоновкиДанных. Процессор инициализируют макетом и выводят результат процессором вывода в табличный документ. Это нужно, когда отчёт формируется нестандартно — например, по данным, собранным кодом в таблицу значений.

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

Отладка без Конфигуратора. Чтобы проверить схему быстро, многие используют внешнюю обработку «Консоль компоновки данных» (консоль отчётов). Она позволяет вставить текст схемы и посмотреть результат с любыми настройками, не меняя конфигурацию.

Теперь про скорость. СКД сама по себе не тормозит — тормозит обычно запрос за ней. Что помогает:

  • 🚫 не выбирать лишние поля в запросе и в выбранных полях — каждое поле это память и время;
  • 🎯 отбор по индексируемым полям (период, организация) — чтобы запрос не читал весь регистр;
  • 📊 итоги считать ресурсами, а не выбирать «сырые» строки и сворачивать их вручную;
  • 🔁 избегать вложенных запросов в цикле — лучше одно соединение, чем запрос в запросе;
  • 🧱 для больших регистров — виртуальные таблицы (Остатки, Обороты) вместо чтения основной таблицы движений.

Прежде чем оптимизировать схему, проверьте план запроса в технологическом журнале или замерьте время на реальном объёме данных. Часто «виноват» один неиндексированный отбор, а не вся СКД.

Частые вопросы

Чем отчёт на СКД лучше отчёта, написанного кодом?
Основную работу (итоги, группировки, отбор, оформление, выгрузку в Excel) берёт на себя платформа, а пользователь может перестраивать отчёт сам, без программиста. Код вывода на макет приходится поддерживать вручную, и гибкости у него меньше.
Можно ли сделать отчёт на СКД без программирования?
Простой — почти да: конструктор запроса собирается мышью, ресурсы и группировки добавляются флажками. Но объект Отчёт всё равно создаётся в Конфигураторе, поэтому полностью без него обойтись нельзя. Менять же готовый отчёт (Изменить вариант отчёта) пользователь может сам.
Почему в отчёте нет итогов по группам?
Чаще всего не заданы ресурсы. Перейдите на закладку Ресурсы и перенесите числовые поля с функцией Сумма или Количество — тогда СКД начнёт считать итоги по каждой группировке и общий итог.
Зачем нужны варианты отчёта, если есть пользовательские настройки?
Вариант хранит готовую структуру целиком (группировки, колонки, оформление) и переключается одной кнопкой. Пользовательские настройки — это точечные правки поверх варианта (период, отбор). Варианты удобны, когда один и тот же отчёт нужен в нескольких «разрезах».
Как вывести данные по строкам и по колонкам одновременно?
Добавьте группировки не только в строки, но и в колонки структуры отчёта. Получится перекрёстная таблица: например, номенклатура по строкам и месяцы по колонкам, на пересечении — ресурс.