Современная разработка в платформе 1С:Предприятие немыслима без использования мощного инструмента, который позволяет формировать отчеты любой сложности без написания тысяч строк программного кода. Система компоновки данных (часто сокращенно именуемая как СКД) стала фундаментом для построения аналитики в прикладных решениях. Она пришла на смену устаревшему механизму формирования отчетов, обеспечив разработчикам и пользователям гибкость, скорость и унификацию процесса получения информации.
Главная цель этой системы — разделение логики получения данных и логики их представления. Раньше программисту приходилось вручную описывать, как именно данные будут выводиться на экран, как группироваться и как рассчитываться итоговые суммы. Теперь же эта задача делегирована движку платформы. Вам достаточно описать, какие данные нужны, а система сама решит, как оптимально сформировать результат, применив пользовательские настройки.
Понимание того, для чего предназначена система компоновки данных 1С, критически важно не только для разработчиков конфигураций, но и для функциональных консультантов. Ведь именно возможности СКД позволяют конечному пользователю самостоятельно настраивать отборы, группировки и сортировки в стандартных отчетах, не обращаясь каждый раз в отдел разработки за доработками.
Архитектура и основные принципы работы СКД
В основе работы механизма лежит четкое разделение на три уровня: запрос к базе данных, описание структуры результирующего набора и настройка вывода. Запрос выполняется первым и выбирает сырые данные из таблиц информационной базы. На этом этапе происходит первичная фильтрация и соединение таблиц, но о том, как эти данные будут выглядеть для пользователя, система пока не знает.
Далее в дело вступает набор данных. Это описание того, какие поля из запроса будут доступны для использования в отчете. Именно здесь определяются связи между различными выборками, если отчет строится на основе нескольких независимых запросов. Система анализирует метаданные и строит виртуальную таблицу, с которой будет работать пользователь.
Третий уровень — это настройки компоновки. Здесь определяется визуальное представление: какие поля выводить в колонки, по каким полям делать группировку, какие рассчитывать итоги. Ключевая особенность СКД заключается в том, что настройки могут изменяться пользователем прямо в режиме предприятия, перестраивая макет отчета на лету без изменения кода конфигурации.
⚠️ Внимание: При проектировании сложных отчетов избегайте использования в одном наборе данных запросов с принципиально разной структурой полей без явного указания связей. Это может привести к непредсказуемому результату при попытке сгруппировать данные из разных источников.
Разделение логики выборки данных и логики их отображения позволяет создавать универсальные отчеты, которые легко адаптируются под меняющиеся требования бизнеса.
Ключевые объекты системы компоновки данных
Для эффективной работы с механизмом необходимо четко понимать иерархию объектов, из которых он состоит. Основным контейнером является сама Схема компоновки данных. Она хранится в метаданных конфигурации или в файле и содержит полное описание всех элементов отчета. Внутри схемы располагаются наборы данных, параметры и ресурсы.
Параметры играют роль переменных, значения которых пользователь вводит перед запуском отчета. Это могут быть даты начала и конца периода, конкретные контрагенты или склады. В запросе эти параметры используются для фильтрации выборки. Без правильно настроенных параметров отчет будет либо пустым, либо выгрузит всю базу данных, что недопустимо.
Еще один важный элемент — ресурсы. Они предназначены для вычисления выражений, которые используются в условном оформлении или в вычисляемых полях. Ресурсы позволяют выносить сложную логику расчетов из тела запроса, делая его чище и понятнее. Например, расчет процента выполнения плана часто удобнее вынести именно в ресурс.
- 📊 Набор данных — описывает источник информации и доступные поля.
- 🎛️ Параметр — входное значение для фильтрации или расчета (дата, число, ссылка).
- 🧮 Ресурс — вычисляемое выражение для использования в оформлении или полях.
- 🔗 Связь наборов данных — определяет, как объединять результаты разных запросов.
Отличие параметра от поля ввода
Параметр в СКД строго типизирован и передается в запрос до его выполнения. Поле ввода в форме отчета — это элемент интерфейса, который может быть связан с параметром, но не является им по сути.
Процесс создания отчета с использованием СКД
Разработка нового отчета начинается с создания объекта метаданных типа "Отчет". Внутри этого объекта открывается конструктор схемы компоновки данных. Первым шагом всегда является написание запроса. Для этого используется встроенный редактор запросов, который позволяет визуально выбирать таблицы и поля или писать код вручную.
После формирования запроса необходимо описать структуру набора данных. Система автоматически предложит поля, найденные в запросе, но разработчик может скрыть лишние технические поля или добавить вычисляемые поля непосредственно в наборе данных. На этом же этапе настраиваются параметры, которые будут запрашиваться у пользователя.
&НаКлиенте
Процедура СформироватьОтчет()
Схема = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных").ПолучитьТекст();
ДанныеКомпоновки = Новый ДанныеКомпоновкиДанных(Схема);
Отчет = Новый ОтчетКомпоновкиДанных;
Отчет.КомпоновщикНастоек.УстановитьНастройки(ДанныеКомпоновки);
Отчет.Результат = Отчет.КомпоновщикНастоек.ПолучитьМакет();
КонецПроцедуры
Финальный этап — создание макета и привязка его к схеме. Макет определяет, в каком виде (таблица, диаграмма, график) будут представлены данные. В свойствах макета указывается, какая именно схема компоновки данных используется для формирования результата.
☑️ Алгоритм создания отчета
Настройка вариантов отчетов и пользовательский интерфейс
Одним из самых мощных преимуществ СКД является возможность предустановки различных вариантов настроек. Разработчик может создать несколько готовых сценариев использования одного и того же отчета. Например, для отчета по продажам можно сделать вариант "По менеджерам" с группировкой по сотрудникам и вариант "По номенклатуре" с детализацией до товаров.
Пользователь выбирает нужный вариант из выпадающего списка перед формированием. При этом все отборы, сортировки и группировки уже настроены. Однако система не запрещает пользователю изменять эти настройки. Если менеджеру нужно быстро добавить отбор по конкретному городу, он может сделать это через интерфейс настроек, не ломая основной логику отчета.
Интерфейс настройки вызывается кнопкой "Настройки" в форме отчета. Там доступны вкладки "Поля и сортировки", "Отборы", "Параметры" и "Дополнительные настройки". Именно здесь решается для чего предназначена система компоновки данных 1С в контексте удобства пользователя — она дает ему инструменты самообслуживания.
| Элемент настройки | Назначение | Влияние на результат |
|---|---|---|
| Группировки | Определяет иерархию строк отчета | Изменяет структуру таблицы, добавляет итоги |
| Отборы | Фильтрует данные по условиям | Уменьшает количество выводимых записей |
| Сортировка | Упорядочивает строки или колонки | Меняет порядок следования данных |
| Условное оформление | Задает цвет и шрифт ячеек | Визуально выделяет важные значения |
⚠️ Внимание: Слишком большое количество предустановленных вариантов отчетов может запутать пользователя. Рекомендуется создавать не более 3-5 основных сценариев, а остальные потребности закрывать возможностью ручной настройки.
Условное оформление и вычисляемые поля
Для повышения наглядности отчетов в СКД реализован механизм условного оформления. Он позволяет динамически менять внешний вид ячеек в зависимости от их значений. Например, можно сделать так, чтобы все суммы с отрицательным значением окрашивались в красный цвет, а перевыполнение плана подсвечивалось зеленым.
Настройка оформления производится в отдельной вкладке конструктора. Вы задаете условие (например, "Поле 'Сумма' меньше 0") и выбираете стиль оформления (цвет фона, цвет текста, жирный шрифт). Это работает быстрее и эффективнее, чем программное изменение цвета ячеек в коде модуля объекта.
Вычисляемые поля позволяют добавлять в отчет данные, которых нет в исходном запросе. Это могут быть простые арифметические операции (сложение, вычитание) или вызов функций. Такие поля рассчитываются уже после получения данных из базы, на клиенте или сервере, в зависимости от сложности выражения.
Используйте вычисляемые поля для расчета процентов и долей, так как это снижает нагрузку на СУБД по сравнению с расчетом этих значений непосредственно в тексте SQL-запроса.
Оптимизация производительности и работа с большими данными
При работе с большими объемами данных правильная настройка СКД становится вопросом производительности всей системы. Основной bottleneck (узкое место) часто находится в тексте запроса. Необходимо следить за тем, чтобы запрос использовал индексы и не вызывал полные сканирования таблиц.
Важно правильно настраивать виртуальные таблицы и разрезы. Если отчет строится по регистрам накопления, использование стандартных виртуальных таблиц (Остатки, Обороты) обязательно. Попытка выбрать данные из таблиц среза напрямую через обычный запрос в СКД приведет к катастрофическому падению скорости.
Также стоит обратить внимание на параметр "Использовать итоги" в настройках набора данных. Если для отчета не требуются детальные записи, а нужны только агрегированные суммы, включение этого параметра позволит системе использовать предварительно рассчитанные итоги регистров, что ускорит формирование в десятки раз.
- 🚀 Используйте виртуальные таблиц регистров для выборок.
- ⏱️ Включайте использование итогов для сводных отчетов.
- 🗑️ Отключайте ненужные поля в наборе данных для уменьшения трафика.
⚠️ Внимание: Интерфейс и алгоритмы работы СКД могут незначительно меняться в новых релизах платформы 1С. Всегда сверяйте актуальные свойства объектов в справке по конкретной версии конфигурации, если сталкиваетесь с нестандартным поведением.
Часто задаваемые вопросы (FAQ)
Можно ли использовать СКД для вывода данных не из запроса?
Да, в качестве источника данных для набора данных может выступать не только запрос, но и объект метаданных (справочник, документ) или даже результат выполнения другой системы компоновки данных. Однако использование запроса остается наиболее гибким и распространенным способом.
В чем разница между обычным отчетом и отчетом на СКД?
Главное отличие — наличие стандартного интерфейса настроек. Обычный отчет (на основе таблицы значений) требует написания кода для любой смены группировки или отбора. Отчет на СКД предоставляет эти возможности пользователю "из коробки" без вмешательства программиста.
Как передать параметры из внешней обработки в схему компоновки?
Для этого необходимо получить доступ к объекту ДанныеКомпоновкиДанных и установить значения параметров через свойство Параметры перед вызовом метода формирования макета. Имена параметров должны точно совпадать с именами в схеме.
Почему отчет на СКД формируется медленно?
Причин может быть несколько: неоптимальный текст запроса (отсутствие индексов), выборка слишком большого количества детальных записей вместо итогов, сложное условное оформление с большим количеством условий или вычисление тяжелых выражений в ресурсах для каждой строки.