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

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

Как создать сложный отчет в 1С с помощью СКД

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

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

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

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

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

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

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

Уточните у заказчика признак готовности: какие контрольные цифры отчет должен показать. Например, итог по продажам за месяц должен совпасть с оборотом по счету 90.01 в оборотно-сальдовой ведомости. Без такого ориентира проверка отчета превращается в гадание.

Создайте объект отчета и схему компоновки данных

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

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

bsl
ВЫБРАТЬ
	ПродажиОбороты.Номенклатура КАК Номенклатура,
	ПродажиОбороты.Номенклатура.ВидНоменклатуры КАК ВидНоменклатуры,
	ПродажиОбороты.Менеджер КАК Менеджер,
	ПродажиОбороты.КоличествоОборот КАК Количество,
	ПродажиОбороты.СуммаОборот КАК СуммаПродажи
ИЗ
	РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, , ) КАК ПродажиОбороты

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

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

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

Вычисляемые поля добавляются на одноименной закладке и позволяют считать производные показатели: маржу как разность суммы продажи и себестоимости, процент выполнения плана, цену как отношение суммы к количеству. Важно: деление в вычисляемом поле при нулевом знаменателе даст ошибку, поэтому используйте конструкцию ВЫБОР КОГДА для защиты от деления на ноль.

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

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

Постройте структуру отчета: группировки, таблицы и диаграммы

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

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

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

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

Создайте варианты отчета для разных сценариев

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

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

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

Сравнение подходов к созданию отчета

СКД без кода

Подходит для 90% задач: группировки, отборы, итоги, варианты. Ограничение — сложная нестандартная логика получения данных

СКД с программной доработкой

Когда нужны внешние наборы данных (таблицы значений), перехват формирования в модуле объекта через ПриКомпоновкеРезультата

Полностью программный отчет

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

Проверьте результат и производительность

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

Второй контроль — детализация. Разверните группировки до детальных записей и убедитесь, что сумма детальных строк сходится с итогом группировки. Если итог по группе больше суммы строк — в данных дубли из-за соединения; если меньше — часть записей отсекается отбором или типом соединения.

Третий контроль — скорость. Если отчет за месяц формируется дольше нескольких секунд, проверьте: отборы передаются в параметры виртуальных таблиц, в запросе нет соединений с подзапросами по неиндексированным полям, в отчет не вытаскиваются лишние поля «про запас». Каждое лишнее поле в запросе увеличивает объем выборки из СУБД.

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

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

Итог отчета за период
Норма

Совпадает с оборотом по данным регистра или ОСВ

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

Расхождение — ошибка в соединениях или отборах запроса

Сумма детальных строк внутри группировки
Норма

Равна итогу группировки

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

Итог больше суммы строк — дубли от соединения

Время формирования за типовой период
Норма

Секунды на месячном периоде

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

Минуты — отбор не в параметрах виртуальной таблицы или лишние поля

Пустые периоды и нулевые значения
Норма

Строки без движений не выводятся или выводятся осознанно

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

Отчет «рвется» пустыми строками из-за левого соединения с периодами

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

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

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

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

Когда программная доработка неизбежна

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

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

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

Часто задаваемые вопросы

Можно ли создать сложный отчет в 1С без программирования?

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

Чем СКД отличается от консоли отчетов и универсального отчета?

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

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

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

Как дать пользователю возможность менять отборы, но не ломать структуру отчета?

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

Как вывести в отчет все месяцы периода, даже если в каких-то не было движений?

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

Что делать, если данные для отчета лежат в нескольких регистрах?

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

Итог

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

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