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

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

Как написать отчет на СКД в 1С

Пошаговое руководство по созданию отчета на СКД в 1С: запрос, наборы данных, настройки, группировки, отборы, ресурсы и типичные ошибки разработчика.

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

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

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

Что такое СКД и когда её использовать

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

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

Создание отчета и написание запроса набора данных

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

Добавьте набор данных типа «Запрос» и напишите текст запроса. Используйте стандартный язык запросов 1С: виртуальные таблицы регистров (Обороты, ОстаткиИОбороты), соединения со справочниками, параметры периода. Например, для отчета по продажам логично взять виртуальную таблицу оборотов регистра накопления с измерениями «Номенклатура» и «Контрагент».

После написания запроса платформа автоматически заполнит список полей на одноименной закладке. Проверьте, что роли полей определены корректно: измерения, ресурсы, поля периода. От этого зависит, какие группировки и итоги будут доступны в настройках.

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

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

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

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

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

Настройка структуры отчета: группировки, отборы, сортировка

Закладка «Настройки» определяет внешний вид отчета по умолчанию. Добавьте группировку верхнего уровня (например, «Контрагент»), внутрь нее вложенную группировку «Номенклатура», а на уровне детальных записей выберите выводимые поля. Группировка «Детальные записи» выводит строки без итоговой агрегации.

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

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

Несколько наборов данных и связи

Когда данных одного запроса недостаточно — например, нужно объединить продажи и плановые показатели из разных регистров — добавляются дополнительные наборы данных. Их можно связать на закладке «Связи наборов данных» по ключевым полям (аналог левого соединения), либо объединить в одном запросе через ОБЪЕДИНИТЬ ВСЕ.

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

Способы объединения данных

ОБЪЕДИНИТЬ в одном запросе

Быстрее на больших объемах, но требует одинаковой структуры полей и усложняет текст запроса

Связь наборов данных

Проще в сопровождении, подходит для разнородных источников, но медленнее и ограничена левым соединением

Набор «Объект» с кодом

Максимальная гибкость для произвольных источников, но требует программной передачи таблицы значений

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

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

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

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

Проверка результата и типичные ошибки

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

Частые проблемы имеют узнаваемые признаки. Пустой отчет при заведомо имеющихся данных обычно означает незаполненный обязательный параметр или слишком жесткий отбор в настройках. Задвоенные строки — следствие лишнего соединения в запросе или неправильной связи наборов. Неверные итоги чаще всего связаны с отсутствующим ресурсом или неверно указанными группировками расчета ресурса.

Типичные ошибки
01
Отбор через ГДЕ вместо параметров виртуальной таблицы — отчет работает в разы медленнее на больших базах
02
Ресурс не добавлен на закладке «Ресурсы» — поле выводится, но итоги по группировкам не считаются
03
Обязательный параметр без значения по умолчанию — пользователь видит пустой отчет и считает его сломанным
04
Левое соединение без отбора по периоду в присоединяемой таблице — раздувание выборки и неверные суммы
05
Изменение настроек по умолчанию в схеме вместо создания варианта отчета — пользователи теряют свои настройки при обновлении
Контрольные точки

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

Итог по отчету
Норма

Совпадает с контрольным запросом или типовым отчетом по тем же данным

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

Расхождение — проверяйте ресурсы, соединения и отборы

Скорость формирования
Норма

Отчет формируется за секунды на рабочем объеме данных

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

Минуты ожидания — отборы не переданы в виртуальные таблицы

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

Изменение отбора меняет результат без доработки кода

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

Отбор игнорируется — поле не включено в доступные поля отбора

Ограничения СКД и альтернативы

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

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

Итог

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

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

Частые вопросы

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

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

Почему отчет формируется очень долго?

Чаще всего отборы заданы в секции ГДЕ вместо параметров виртуальной таблицы, из-за чего СУБД выбирает все записи регистра. Перенесите условия по периоду и измерениям в параметры виртуальной таблицы и проверьте наличие лишних соединений.

Как дать пользователю несколько вариантов одного отчета?

Используйте варианты отчета: в модуле объекта или через настройки в режиме предприятия создаются варианты с разной структурой группировок и отборами на базе одной схемы компоновки. Дублировать сам отчет не нужно.

Чем СКД отличается от обычного макета табличного документа?

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

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

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

Можно ли использовать СКД во внешнем отчете?

Да, внешний отчет (файл .erf) поддерживает схему компоновки данных так же, как встроенный объект конфигурации. Это стандартный способ добавлять отчеты в типовые конфигурации без снятия их с поддержки.