К статье
Практический материал

Отчеты и Аналитика · 13 мин

Что такое СКД в 1С и как с ней работать

Что такое СКД в 1С: назначение системы компоновки данных, отличие от запроса, структура настроек, варианты отчётов и типичные ошибки разработчиков.

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

До появления СКД каждый отчёт программировался вручную: запрос, обход выборки, вывод в табличный документ, настройка формы с реквизитами отбора. Такой подход требовал изменения кода при любой просьбе пользователя «добавить ещё один фильтр». СКД решает эту проблему: настройки отчёта отделены от его структуры и доступны конечному пользователю через стандартную форму настроек.

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

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

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

Основные элементы механизма:

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

Ключевая идея: схема описывает «что можно получить», а настройки — «что именно нужно сейчас». Один и тот же отчёт на одной схеме может показывать продажи по менеджерам, по номенклатуре или по периодам — в зависимости от настроек, которые пользователь переключает сам.

Чем СКД отличается от обычного запроса и ручного отчёта

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

КритерийРучной отчёт (запрос + код)Отчёт на СКД
Изменение отборов пользователемТребует доработки формы и кодаДоступно в стандартной форме настроек
Группировки и иерархияПрограммируются обходом выборкиДобавляются перетаскиванием поля
Условное оформлениеКодом при выводе строкНастраивается в отчёте без кода
Расшифровка ( drill-down )Реализуется вручнуюВстроена в платформу
Гибкость нестандартного выводаПолная свободаОграничена возможностями механизма

СКД особенно сильна в оптимизации: компоновщик не выполняет исходный запрос «как есть», а переписывает его, оставляя только те поля и соединения, которые реально используются в текущих настройках. Если пользователь убрал половину колонок, запрос к базе станет легче без вмешательства разработчика.

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

Структура схемы: наборы данных, связи и ресурсы

Набор данных — это источник информации. Чаще всего используется набор типа «Запрос», где текст пишется на языке запросов 1С с расширениями СКД. Также доступны наборы «Объект» (например, готовая таблица значений из кода) и «Объединение» для слияния нескольких наборов.

Если в схеме несколько наборов, их нужно связать на закладке «Связи наборов данных» — указать поля соединения, как в LEFT JOIN. Типичный пример: набор «Продажи» связывается с набором «План» по полю «Номенклатура», чтобы построить отчёт «план-факт». Ошибка в связи — частая причина задвоения строк или пропавших данных.

Ресурсы — это поля, по которым считаются итоги: сумма, количество, среднее. Для ресурса указывается выражение агрегирования (Сумма, Максимум, Количество) и группировки, по которым итог нужен. Если поле не добавлено в ресурсы, в промежуточных итогах группировок оно будет пустым — это нормальное поведение, а не ошибка.

Расширения языка запросов в СКД

В тексте запроса набора данных СКД понимает специальные конструкции в фигурных скобках. Они позволяют сделать поля и отборы «управляемыми» из настроек.

Основные конструкции:

  • {ВЫБРАТЬ ...} — поля, которые пользователь сможет добавлять и убирать в настройках. Если поле не перечислено здесь, в настройках его не будет.
  • {ГДЕ ...} — отборы, доступные пользователю. Условие попадёт в итоговый запрос только если соответствующий отбор включён.
  • {ХАРАКТЕРИСТИКИ ...} — подключение дополнительных реквизитов и сведений (например, свойств номенклатуры) как обычных полей отчёта.
  • Виртуальные таблицы с параметрами периода — СКД умеет автоматически подставлять в них значения стандартных параметров «НачалоПериода» и «КонецПериода».

Пример фрагмента запроса с управляемым отбором:

ВЫБРАТЬ

Продажи.Номенклатура КАК Номенклатура,

СУММА(Продажи.СуммаОборот) КАК Сумма

{ВЫБРАТЬ

Номенклатура,

Сумма}

ИЗ

РегистрНакопления.Продажи.Обороты(

&НачалоПериода,

&КонецПериода, , ) КАК Продажи

{ГДЕ

(Продажи.Номенклатура = &Номенклатура)}

СГРУППИРОВАТЬ ПО

Продажи.Номенклатура

Здесь пользователь сможет включить или отключить отбор по номенклатуре в настройках отчёта, и компоновщик сам добавит условие в запрос или уберёт его. Если бы отбор был «зашит» в текст запроса через обычное ГДЕ, отключить его без изменения схемы было бы нельзя.

Настройки отчёта: что видит и меняет пользователь

Закладка «Настройки» конструктора схемы определяет вариант отчёта по умолчанию. Здесь задаются отборы, группировки строк и колонок (для кросс-таблиц), выбранные поля, сортировка и условное оформление. Всё это пользователь видит в режиме предприятия через кнопку «Настройки» или «Изменить вариант».

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

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

Как создать простой отчёт на СКД
  1. 1
    Создайте объект «Отчёт» и откройте основную схему компоновки данных
  2. 2
    Добавьте набор данных «Запрос» и напишите текст запроса к нужным таблицам
  3. 3
    На закладке «Ресурсы» отметьте поля итогов и укажите агрегатные функции
  4. 4
    На закладке «Настройки» добавьте группировку, выбранные поля и отборы по умолчанию
  5. 5
    Вынесите период и ключевой отбор в быстрые настройки пользователя
  6. 6
    Сформируйте отчёт в режиме предприятия и проверьте итоги по контрольным данным

Типичные ошибки при работе со СКД

Большинство проблем с отчётами на СКД возникает из-за непонимания того, как компоновщик преобразует запрос и настройки. Ниже — ошибки, которые встречаются чаще всего.

Типичные ошибки
01
Отбор записан жёстко в тексте запроса вместо конструкции {ГДЕ} — пользователь не может его отключить, отчёт теряет гибкость
02
Поле не добавлено в ресурсы — в группировочных итогах колонка пустая, хотя в детальных строках значения есть
03
Неверная связь наборов данных — строки задваиваются или пропадают, суммы не сходятся с исходными регистрами
04
Параметр виртуальной таблицы не связан с параметром СКД — период отчёта игнорируется, выводятся данные за всё время
05
Автозаполнение полей отключено, но порядок и роли полей не настроены — отчёт падает с ошибкой компоновки или выводит лишние колонки
06
Сложная логика реализована вычисляемыми полями вместо запроса — резко падает производительность на больших объёмах

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

Где СКД применяется кроме отчётов

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

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

Если отчёт в режиме предприятия показывает не те данные, сначала откройте «Ещё → Изменить вариант» и сбросьте настройки к стандартным. Значительная часть «ошибок отчёта» — это сохранённые пользователем отборы, о которых он забыл.
ПЗ
Практическое замечание

Как проверить, что отчёт на СКД работает правильно

Проверка отчёта — это сопоставление его результатов с независимым источником. Для отчёта по продажам контрольным ориентиром служат обороты регистра, для кадрового отчёта — список сотрудников в справочнике.

Контрольные точки

Как проверить результат

Общий итог по суммовому ресурсу
Норма

Совпадает с оборотом регистра за тот же период

Тревожный признак

Расхождение — проверяйте связи наборов и отборы в настройках

Итоги по группировкам
Норма

Сумма детальных строк равна итогу группы

Тревожный признак

Итог пуст или не сходится — поле не добавлено в ресурсы

Работа параметра периода
Норма

При смене периода данные меняются корректно

Тревожный признак

Данные не зависят от периода — параметр не передан в виртуальную таблицу

Отбор пользователя
Норма

Включённый отбор сужает выборку, отключённый — нет

Тревожный признак

Отбор действует всегда — условие зашито в текст запроса

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

Итог

Что важно запомнить

СКД отделяет структуру отчёта от его настроек: схема описывает данные, пользователь управляет отборами и группировками без кода. Ключевые навыки — правильно писать запрос набора данных, использовать конструкции {ВЫБРАТЬ} и {ГДЕ}, настраивать ресурсы и не зашивать условия в текст запроса.

Частые вопросы о СКД

Нужно ли знать язык запросов, чтобы работать со СКД?

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

Можно ли использовать СКД без конфигуратора, силами пользователя?

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

Почему отчёт на СКД формируется долго?

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

Чем СКД отличается от внешнего отчёта?

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

Как добавить в отчёт поле, которого нет в настройках?

Поле должно присутствовать в запросе набора данных и быть перечисленным в конструкции {ВЫБРАТЬ}. Если его там нет, пользователь не сможет добавить колонку самостоятельно — потребуется доработка схемы разработчиком. Если поле есть в схеме, но не видно, проверьте, не ограничена ли доступность поля в настройках варианта.

Что делать, если типовой отчёт не устраивает, а конфигурацию менять нельзя?

Используйте три варианта в порядке приоритета: сохраните пользовательский вариант отчёта с нужными настройками; создайте внешний отчёт на собственной схеме; при необходимости изменить типовой объект — подключите расширение конфигурации. Прямая правка типовой схемы в конфигураторе приведёт к потере изменений при обновлении.