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