Отчеты и Аналитика · 11 мин
Как работает СКД в 1С: устройство системы компоновки данных
Как работает система компоновки данных в 1С: схема, наборы данных, запросы, настройки отчёта, ресурсы и типичные ошибки при разработке отчётов на СКД.
Система компоновки данных (СКД) — встроенный механизм платформы 1С:Предприятие, который берёт на себя формирование отчётов: выполнение запроса, группировку, отбор, сортировку, итоги и вывод результата в табличный документ. Разработчик описывает не алгоритм, а декларативную схему — откуда брать данные и как их можно компоновать, — а платформа сама строит итоговый текст запроса и макет вывода.
Главное отличие СКД от «ручного» отчёта на запросе в том, что пользователь получает гибкие настройки без изменения кода: он может менять отборы, группировки, порядок колонок и состав показателей прямо в режиме предприятия. Поэтому в типовых конфигурациях практически все отчёты построены именно на СКД.
Чтобы уверенно работать со схемой компоновки, нужно понимать её жизненный цикл: как из схемы и пользовательских настроек получается готовый отчёт, какие элементы участвуют в этом процессе и где искать причину, когда результат не совпадает с ожиданиями.
Из чего состоит схема компоновки данных
Схема компоновки данных — это макет типа «Схема компоновки данных», который хранится в отчёте или в общих макетах. Она открывается визуальным конструктором и содержит несколько взаимосвязанных разделов: наборы данных, связи между ними, вычисляемые поля, ресурсы, параметры, макеты и настройки по умолчанию.
Набор данных — это источник информации. Чаще всего используется набор типа «Запрос» с текстом на встроенном языке запросов 1С. Также доступны наборы типа «Объект» (например, таблица значений, сформированная кодом) и «Объединение», объединяющее несколько наборов в один. Если данных одним запросом получить нельзя, наборы связываются на закладке «Связи наборов данных» по ключевым полям.
Ресурсы — это числовые поля, по которым считаются итоги: сумма, количество, среднее, минимум, максимум. Без указания ресурса поле будет выводиться только в детальных записях, а в группировках итог по нему отсутствует. Ресурсу можно задать выражение агрегирования и ограничить, по каким группировкам он рассчитывается.
Как СКД формирует отчёт: этапы выполнения
Понимание этапов помогает отлаживать отчёты. Процесс идёт последовательно: сначала компоновщик настроек объединяет схему и пользовательские настройки, затем компоновщик макета строит макет компоновки — промежуточное описание с финальным текстом запроса, в котором уже учтены все отборы и группировки. Важно: платформа не выполняет исходный запрос «как есть», а переписывает его, добавляя отборы и отбрасывая невыбранные поля.
Далее процессор компоновки данных выполняет запрос, обходит результат, вычисляет ресурсы и иерархию группировок, а процессор вывода превращает это в табличный документ, диаграмму или сводную таблицу. Если в схеме есть набор «Объект» или события вроде «ПриКомпоновкеРезультата», на этих этапах подключается код на встроенном языке.
- 1Создайте объект «Отчёт» в конфигураторе и откройте основную схему компоновки данных
- 2На закладке «Наборы данных» добавьте набор типа «Запрос» и напишите текст запроса к нужным таблицам
- 3На закладке «Ресурсы» отметьте числовые поля, по которым нужны итоги
- 4На закладке «Настройки» добавьте группировку, выбранные поля и отборы по умолчанию
- 5Сохраните конфигурацию, откройте отчёт в режиме предприятия и проверьте итоги сверкой с исходными данными
Наборы данных и запросы: как писать правильно
Запрос в СКД подчиняется особым правилам. Поля, доступные пользователю для отбора, описываются в конструкции ГДЕ либо через фигурные скобки — расширение языка запросов для СКД. Например, условие {ГДЕ (Продажи.Организация = &Организация)} будет применено только если пользователь заполнил соответствующий отбор. Аналогично работают конструкции {ВЫБРАТЬ} и {СОЕДИНЕНИЕ} — платформа включает их в финальный запрос только при необходимости.
Параметры виртуальных таблиц (период, отборы регистров) следует задавать через параметры СКД, а не жёстко в тексте. Для параметров типа «Дата» часто используют выражения &НачалоПериода и &КонецПериода, при этом на закладке «Параметры» для дат удобно включать флажок «Включать в доступные поля» и ограничивать доступность, чтобы пользователь не видел служебные параметры.
Когда использовать набор «Объект»
Набор «Объект» применяют, когда данные нельзя получить запросом: результат обращения к веб-сервису, сложный расчёт кодом, данные внешней таблицы значений. В этом случае в модуле отчёта программно формируют таблицу значений и передают её процессору компоновки через объект внешнего набора данных. Минус подхода — отборы и группировки СКД работают уже поверх готовой таблицы, поэтому фильтрацию на уровне источника придётся делать вручную.
Настройки отчёта: группировки, отборы и варианты
Закладка «Настройки» схемы определяет вариант отчёта по умолчанию. Структура строится из группировок: каждая группировка — это поле, по которому данные сворачиваются (например, «Контрагент», внутри него «Номенклатура»). Для каждой группировки задаются выбранные поля, отбор, сортировка и условное оформление. Детальные записи — особая группировка без поля, показывающая строки без свёртки.
Варианты отчёта позволяют сохранить несколько разных представлений одной схемы: например, «Продажи по менеджерам» и «Продажи по товарам» на одной схеме. В типовых конфигурациях варианты хранятся в справочнике вариантов отчётов и доступны пользователям через панель отчётов; разработчик может добавить предопределённые варианты прямо в схеме.
Отборы бывают жёсткие (заданные в настройках схемы и скрытые от пользователя) и пользовательские. Если отбор должен быть обязательным, задайте его в настройках и уберите поле из доступных для отбора у пользователя — иначе он сможет снять фильтр и получить чрезмерно тяжёлый отчёт по всей базе.
Проверьте параметры периода и отборы; временно отключите все отборы
Проверьте закладку «Ресурсы» и связи наборов данных
Перенесите условия в параметры виртуальных таблиц запроса
Программная работа с СКД
Отчёт на СКД можно сформировать из кода, что нужно для рассылок, печатных форм и фоновых заданий. Типовая последовательность: получить схему, загрузить настройки в компоновщик настроек, при необходимости изменить параметры программно, создать компоновщик макета, затем процессор компоновки и процессор вывода.
Схема = Отчеты.ПродажиПоМесяцам.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
Настройки = Схема.НастройкиПоУмолчанию;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(Схема, Настройки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);
Результат = Новый ТабличныйДокумент;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(Результат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);Параметры удобно менять через коллекцию настроек: найти параметр по имени в Настройки.ПараметрыДанных, установить значение и флаг использования. Если отчёт открывается в форме, обычно достаточно свойства формы «КомпоновщикНастроек» и события «ПриЗагрузкеПользовательскихНастроекНаСервере» — вручную компоновать в форме не требуется.
События модуля отчёта
В модуле объекта отчёта доступны обработчики «ПриКомпоновкеРезультата» и «ОбработкаПроверкиЗаполнения». Первый позволяет полностью взять формирование на себя: стандартную обработку отключают, инициализируют процессор вручную и передают внешние наборы данных. Это стандартный способ отладки СКД-отчётов в конфигураторе — точка останова в этом обработчике срабатывает при каждом формировании.
Типичные ошибки и ограничения
Большинство проблем с СКД сводится к нескольким повторяющимся причинам. Их знание сокращает отладку с часов до минут.
Из ограничений стоит помнить: СКД не умеет напрямую обращаться к внешним источникам без набора «Объект» или внешних источников данных, сложные рекурсивные расчёты лучше выносить в код, а очень большие выборки без отборов могут привести к превышению памяти на сервере. Для тяжёлых отчётов обязательно задавайте обязательные параметры периода.
Проверка результата и FAQ
Как проверить результат
Совпадают с контрольным запросом или сверкой по регистру
Итоги завышены или занижены — проверяйте соединения и связи наборов
При установке отбора данные фильтруются, запрос выполняется быстро
Отбор не влияет на результат или отчёт «зависает»
Каждый вариант открывается без ошибок и показывает свою структуру
Ошибка «Поле не найдено» при открытии варианта
Надёжный способ проверки — сравнить итог отчёта с результатом того же запроса, выполненного в консоли запросов с теми же параметрами. Если цифры сходятся, а в отчёте нет — проблема в настройках компоновки: ресурсах, связях или отборах варианта.
Что важно запомнить
СКД строит отчёт декларативно: схема описывает данные и возможности, платформа сама формирует запрос и вывод. Ключевые точки контроля — наборы данных и связи, ресурсы, параметры и настройки вариантов. Тяжёлые отчёты ограничивайте обязательными параметрами и проверяйте на копии базы.
Частые вопросы
Чем СКД отличается от обычного запроса с выводом в табличный документ?
Запрос с ручным выводом требует кода для каждой группировки, отбора и колонки. СКД делает это декларативно: пользователь сам меняет структуру отчёта, а платформа перестраивает запрос и макет. Ручной подход оправдан только для простых фиксированных печатных форм.
Почему отчёт на СКД формируется очень долго?
Чаще всего отборы применяются на уровне компоновки, а не в параметрах виртуальных таблиц, поэтому из базы выбирается лишнее. Перенесите условия в параметры виртуальных таблиц регистров, добавьте обязательный период и проверьте индексацию полей соединений.
Можно ли использовать СКД без создания объекта «Отчёт»?
Да. Схему можно хранить в общем макете и формировать программно из любого места — обработки, фонового задания, команды. Также динамические списки в формах работают на механизме, близком к СКД, и поддерживают произвольный запрос с отборами.
Как отладить, какой запрос реально выполняет СКД?
Установите точку останова в обработчике «ПриКомпоновкеРезультата» модуля отчёта и посмотрите макет компоновки — он содержит финальный текст запроса после применения настроек. В типовых конфигурациях также доступен вывод запроса через расширенные настройки или журнал регистрации при включённом технологическом журнале.
Как дать пользователю отбор, но запретить его снятие?
Задайте условие в настройках схемы и на закладке «Отбор» в режиме настроек отметьте элемент как недоступный для редактирования, либо вынесите поле из доступных полей отбора. Альтернатива — жёсткое условие в тексте запроса через параметр, который заполняется программно.
Когда вместо СКД лучше выбрать другой инструмент?
Для простых печатных форм с фиксированным макетом проще табличный документ и запрос. Для аналитики в реальном времени по большим объёмам рассмотрите внешние BI-инструменты или агрегатные таблицы. СКД оптимальна для интерактивных отчётов внутри 1С с пользовательскими настройками.