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