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