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

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

Система компоновки данных 1С: что это и как с ней работать

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

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

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

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

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

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

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

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

Как создать отчёт на СКД: базовый порядок

Простейший отчёт на СКД создаётся без единой строки кода. Достаточно добавить в конфигурацию объект «Отчёт» и заполнить его основную схему компоновки через конструктор.

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

На закладке «Настройки» работает визуальный конструктор: в левой части — структура отчёта (группировки, таблицы, диаграммы), в правой — параметры выбранного элемента. Для большинства аналитических отчётов достаточно одной-двух группировок и таблицы с пересечением строк и колонок.

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

Наборы данных и связи между ними

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

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

Альтернатива связям — собрать всё в одном запросе с левыми соединениями. Это предпочтительнее, когда данные лежат в одной базе: запрос обрабатывается СУБД целиком, а платформа может дополнительно оптимизировать его при компоновке. Связи наборов оправданы, когда один из источников — объект (например, данные, рассчитанные в коде), или когда запросы принципиально разные по структуре.

Ресурсы, вычисляемые поля и параметры

Ресурсы — поля, по которым СКД считает агрегаты (сумму, среднее, количество, минимум, максимум). Если поле не отмечено как ресурс, итоги по нему в группировках не появятся, а в самой группировке вывести его нельзя — только в детальных записях. Это одна из самых частых причин вопроса «почему поле не выводится».

Вычисляемые поля задаются выражением на языке выражений СКД — например, Цена * Количество или условный расчёт через Выбор Когда ... Тогда ... Конец. Они вычисляются уже после получения данных, поэтому в отборе на уровне запроса участвовать не могут. Если условие можно перенести в запрос — переносите: это быстрее и позволяет фильтровать данные до компоновки.

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

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

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

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

Когда пользовательские настройки «ломают» отчёт

Если пользователь добавил группировку по полю, которое не является ресурсом и не входит в детальные записи, результат может оказаться пустым или неожиданным. В таких случаях проверьте состав доступных полей в схеме и при необходимости ограничьте доступные для выбора поля на закладке настроек конкретной группировки.

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

СКД против ручного программирования отчёта

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

КритерийСКДРучное программирование
Скорость разработкиМинуты–часы, без кодаЧасы–дни, код обхода и вывода
Настройка пользователемПолная: отборы, группировки, вариантыТолько то, что запрограммировано
РасшифровкаВстроенная, из коробкиТребуется отдельная реализация
Гибкость выводаОграничена структурами СКДЛюбая, включая нестандартные макеты
ПоддержкаИзменения в схеме без переписывания кодаЛюбое изменение — правка кода
Маршрут решения

Как выбрать подход

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

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

Большинство проблем с отчётами на СКД сводится к нескольким повторяющимся причинам. Их стоит проверять в первую очередь, прежде чем углубляться в отладку компоновки.

Типичные ошибки
01
Поле не отмечено как ресурс — итоги по нему пустые, в группировке поле недоступно.
02
Отбор по складу/организации наложен в настройках, а не параметром виртуальной таблицы — остатки посчитаны по всей базе и итоги неверны.
03
Связь наборов по неуникальному полю — строки перемножились, суммы завышены.
04
Вычисляемое поле используется в отборе до компоновки — платформа не может применить его на уровне запроса, отчёт тормозит или отбор не работает как ожидалось.
05
В запросе выбраны лишние поля «про запас» — лишняя нагрузка на СУБД и медленное формирование на больших базах.
06
Период задан двумя отдельными параметрами дат без стандартного периода — пользователь путается, границы периода считаются неправильно (конец дня не учтён).

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

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

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

Итог по сумме/количеству
Норма

Совпадает со стандартным отчётом конфигурации или суммой документов за период

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

Расхождение — проверяйте связи наборов и параметры виртуальных таблиц

Количество строк детальных записей
Норма

Соответствует числу документов/записей в выборке

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

Строк больше — вероятно перемножение при связи наборов

Время формирования
Норма

Секунды на типовом объёме данных

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

Десятки секунд и больше — анализируйте запрос и индексы

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

Отбор сужает результат корректно, итоги пересчитываются

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

После отбора итоги не меняются или обнуляются — отбор применён не на том уровне

Программная работа с СКД

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

bsl
Схема = Отчеты.ПродажиПоМесяцам.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
Настройки = Схема.НастройкиПоУмолчанию;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
Макет = КомпоновщикМакета.Выполнить(Схема, Настройки);
Процессор = Новый ПроцессорКомпоновкиДанных;
Процессор.Инициализировать(Макет);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ТабДок);
ПроцессорВывода.Вывести(Процессор);

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

Ограничения и границы применимости

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

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

Итог

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

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

Частые вопросы о системе компоновки данных

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

Запрос только извлекает данные из базы. СКД включает запрос как один из этапов, но дополнительно управляет группировками, итогами, отборами, оформлением и выводом результата. Один и тот же запрос внутри СКД может давать разные отчёты в зависимости от настроек пользователя.

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

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

Почему поле есть в запросе, но недоступно в настройках отчёта?

Наиболее вероятные причины: поле не добавлено в список выбранных полей настройки, отключено на закладке «Поля» схемы (снят флаг доступности) или это числовое поле, не отмеченное как ресурс, — тогда оно доступно только в детальных записях, но не в группировках.

Как пользователю сохранить свой вариант отчёта?

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

Подходит ли СКД для печатных форм документов?

Как правило, нет. Печатные формы (счета, акты, ТОРГ-12) требуют точного расположения элементов по образцу, и их делают через макеты табличного документа с программным выводом. СКД оптимальна для аналитических отчётов, где важны группировки и итоги, а не жёсткая структура листа.

Отчёт на СКД формируется медленно — что проверить в первую очередь?

Сначала выполните запрос набора данных отдельно (в консоли запросов) с теми же параметрами. Если он медленный сам по себе — проблема в запросе: проверьте индексы, параметры виртуальных таблиц и соединения. Если запрос быстрый, а отчёт тормозит — смотрите на объём данных, вычисляемые поля и сложность структуры настроек.