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