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