Отчёт на схеме компоновки данных: от пустого объекта до готовой таблицы

· 10 мин

Содержание

Чтобы сделать отчёт в Конфигураторе 1С 8.3, создайте объект «Отчёт» в ветке Отчеты дерева метаданных (или внешний отчёт через Файл → Новый → Внешний отчет), нажмите «Открыть схему компоновки данных», добавьте набор данных-запрос и настройте вариант: группировки, отборы, ресурсы. Код писать не обязательно: отчёт на схеме компоновки данных (СКД) формируется платформой сам, с отборами, сортировкой и выгрузкой в Excel.

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

1. Где создать отчёт и как не сломать типовую конфигурацию

Сначала решите, куда класть отчёт. От этого зависит, переживёт ли он следующее обновление.

ВариантКогда подходитРиски
Отчёт в своей конфигурацииСамописная база, конфигурация без поддержкиНет
Отчёт в расширенииТиповая БП, ЗУП, УТ на поддержкеМинимальные: расширение подключается поверх и обновлению не мешает
Внешний отчёт (файл .erf)Разовая задача, отладка, передача другому бухгалтеруФайл живёт отдельно, его легко потерять
Отчёт прямо в типовой конфигурацииПочти никогдаСнятие с поддержки, тяжёлые обновления

Не снимайте типовую конфигурацию с поддержки ради одного отчёта. Расширения появились в платформе 8.3.6, и сейчас это стандартный способ доработки типовых баз.

Создание объекта метаданных

  1. Откройте Конфигуратор, затем Конфигурация → Открыть конфигурацию (для расширения — Конфигурация → Расширения конфигурации, добавьте расширение и откройте его).
  2. В дереве найдите ветку Отчеты, правой кнопкой — «Добавить».
  3. На вкладке «Основные» задайте имя латиницей или кириллицей без пробелов, например ПродажиПоМенеджерам, и синоним — его увидит пользователь.
  4. Нажмите «Открыть схему компоновки данных». Конфигуратор предложит создать макет с именем ОсновнаяСхемаКомпоновкиДанных — согласитесь.

Чтобы отчёт увидели пользователи

Объект без прав и подсистемы никто, кроме администратора, не найдёт.

  • 🗂 На вкладке «Подсистемы» отметьте раздел, где отчёт появится, например «Продажи».
  • 🔑 Добавьте право «Просмотр» в роль, которая есть у нужных пользователей. В расширении роль создаётся в самом расширении.
  • 🧩 Для внешнего отчёта в типовых конфигурациях на БСП предусмотрена регистрация в справочнике дополнительных отчётов. Для этого в модуле объекта нужна экспортная функция СведенияОВнешнейОбработке(). Без неё файл можно открыть только через Файл → Открыть при наличии прав.

2. Схема компоновки и запрос: настройка макета

Схема компоновки данных — это макет с несколькими вкладками. Главная — «Наборы данных».

  1. Нажмите зелёный плюс и выберите «Добавить набор данных - запрос».
  2. Откройте «Конструктор запроса» или впишите текст вручную.
  3. Оставьте включённым флаг «Автозаполнение»: поля запроса сами попадут в список полей схемы.

Пример запроса для отчёта по продажам. Имя регистра и его измерения подставьте из своей конфигурации:

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

Параметры &НачалоПериода и &КонецПериода схема создаст сама — они появятся на вкладке «Параметры».

Ресурсы: что суммировать

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

💡 Поле, не отмеченное ресурсом, итогов по группировкам не получит. Это самая частая причина пустых строк «Итого».

Роли и оформление полей

На вкладке «Наборы данных» у каждого поля есть колонки:

  • 📝 «Заголовок» — как поле подписано в шапке отчёта;
  • 🔢 «Оформление» — формат числа, например ЧДЦ=2 для двух знаков после запятой;
  • 🚫 «Ограничение поля» и «Ограничение реквизитов» — флажки «Поле», «Условие», «Группировка», «Порядок» запрещают пользователю использовать поле в соответствующей роли.

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

3. Параметры отчёта и отборы данных

Пользователь не должен вводить начало и конец периода в двух полях. Типовой приём — один параметр-период.

  1. На вкладке «Параметры» добавьте параметр Период с типом «Стандартный период».
  2. Для параметра НачалоПериода в колонке «Выражение» впишите &Период.ДатаНачала.
  3. Для КонецПериода — &Период.ДатаОкончания.
  4. У НачалоПериода и КонецПериода поставьте флажок «Ограничение доступности» — пользователь их не увидит.

Параметр или отбор

Это разные вещи, и путают их постоянно.

МеханизмГде работаетКогда использовать
Параметр (&Склад)Внутри запроса, до выборкиЗначение нужно в параметрах виртуальной таблицы, обязательный фильтр
Отбор вариантаСхема сама добавляет условие в запросПользователь фильтрует по любому полю
Условие ГДЕ в тексте запросаВсегдаЖёсткое ограничение, которое пользователь менять не должен

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

ИЗ
	РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, ,
		{(Контрагент).* КАК Контрагент, (Номенклатура).* КАК Номенклатура}) КАК Продажи

Быстрые настройки для пользователя

Чтобы отбор показывался прямо в шапке формы отчёта:

  1. Откройте вариант настроек (кнопка «Открыть конструктор настроек» или вкладка «Настройки» внизу схемы).
  2. В отборе добавьте поле, например Контрагент.
  3. Правой кнопкой — «Свойства элемента пользовательских настроек», включите «Включать в пользовательские настройки» и режим «Быстрый доступ».

То же делается для параметра Период на вкладке «Параметры данных» варианта.

4. Структура отчёта: группировки и итоги

Структура — дерево на вкладке «Настройки». Сюда добавляют элементы: группировку, таблицу, диаграмму.

Простая группировка

  1. Правой кнопкой по корню «Отчет» — «Новая группировка».
  2. Выберите поле Контрагент. Получится первый уровень.
  3. Внутри неё снова «Новая группировка» — Номенклатура.
  4. Пустая группировка без полей означает «Детальные записи»: строки запроса как есть.

У группировки по справочнику есть тип: «Элементы», «Иерархия», «Только иерархия». Для номенклатуры с папками выбирайте «Иерархия» — итоги соберутся по группам.

Таблица со строками и колонками

Если нужна шахматка «контрагенты × месяцы», добавьте элемент «Таблица».

  • В «Строки» положите группировку Контрагент.
  • В «Колонки» — группировку по полю периода. Для этого в запросе берите Обороты(..., Месяц, ...) и поле Период.

Где выводить итоги

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

Перед первым запуском отчёта
Выполнено: 0 / 5

5. Условное оформление, диаграммы и варианты

Условное оформление раскрашивает строки по условию. Задаётся в варианте настроек, на вкладке «Условное оформление».

  1. Добавьте новый элемент.
  2. В колонке «Условие» задайте отбор, например Сумма Меньше 0.
  3. В «Оформлении» выберите цвет текста или фона, шрифт, формат.
  4. В «Оформляемых полях» укажите, к каким колонкам применять. Пусто — ко всей строке.

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

Диаграмма

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

Несколько вариантов в одном отчёте

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

💡 Один отчёт с тремя вариантами проще поддерживать, чем три отчёта с одинаковым запросом.

6. Код в модуле объекта отчёта

Модуль объекта открывается на вкладке «Прочее» карточки отчёта, кнопка «Модуль объекта». Чаще всего код пишут в обработчике ПриКомпоновкеРезультата.

Он нужен, когда:

  • 🧮 данные готовятся программно (таблица значений из внешнего файла, расчёт, которого нет в запросе);
  • 📅 параметр надо установить принудительно, без участия пользователя;
  • 🧾 результат нужно дополнить шапкой или подвалом из обычного макета.

Шаблон обработчика с полным выводом в табличный документ:

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)

	СтандартнаяОбработка = Ложь;

	Схема = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
	Настройки = КомпоновщикНастроек.ПолучитьНастройки();

	// Пример: принудительная установка параметра
	Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("Период",
		Новый СтандартныйПериод(НачалоГода(ТекущаяДатаСеанса()), КонецДня(ТекущаяДатаСеанса())));

	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	МакетКомпоновки = КомпоновщикМакета.Выполнить(Схема, Настройки, ДанныеРасшифровки);

	ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Истина);

	ДокументРезультат.Очистить();
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
	ПроцессорВывода.Вывести(ПроцессорКомпоновки);

КонецПроцедуры

Строка СтандартнаяОбработка = Ложь отключает штатное формирование. Если вы её поставили, весь вывод — на вашем коде. Без ДанныеРасшифровки в Выполнить и Инициализировать перестанет работать расшифровка по двойному клику.

Данные из таблицы значений

Если источник — не база, а таблица значений:

  1. В схеме добавьте «Набор данных - объект», в свойстве «Имя объекта, содержащего данные» укажите Данные.
  2. Вручную создайте поля с теми же именами, что колонки таблицы.
  3. Во втором параметре Инициализировать передайте структуру:
ВнешниеНаборы = Новый Структура("Данные", ТаблицаДанных);
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборы, ДанныеРасшифровки, Истина);

Имя в структуре и имя объекта в наборе должны совпадать буква в букву.

7. Вывод результата и выгрузка в Excel

Отчёт на СКД формируется в табличный документ. Штатно пользователь сохраняет его через меню формы: команда «Сохранить как» (значок дискеты или меню «Ещё»), формат «Лист Microsoft Excel 2007» (.xlsx), PDF, .mxl и другие.

Программно табличный документ записывают методом Записать:

ДокументРезультат.Записать("C:\Отчеты\Продажи.xlsx", ТипФайлаТабличногоДокумента.XLSX);

Путь здесь — на той стороне, где выполняется код. В клиент-серверной базе серверный код пишет файл на диск сервера 1С, а не на компьютер бухгалтера.

Если нужна выгрузка без форматирования

Для дальнейшей обработки в Excel удобнее плоская таблица:

  • 📋 сделайте отдельный вариант только с детальными записями;
  • 🧹 уберите итоги и условное оформление;
  • 🔁 или выведите результат в таблицу значений через ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений.

Печать и расшифровка

Двойной клик по ячейке открывает расшифровку — по сути, тот же отчёт с отбором по этой ячейке. Работает автоматически, пока в коде передаются ДанныеРасшифровки. Параметры печати (ориентация, масштаб) задаются в форме отчёта перед печатью или в табличном документе свойствами ОриентацияСтраницы и АвтоМасштаб.

8. Как ускорить медленный отчёт

Отчёт, который «думает» минуту, почти всегда тормозит из-за запроса, а не из-за СКД.

ПриёмЧто даёт
Условия в параметрах виртуальных таблиц, а не в ГДЕПлатформа отбирает данные до соединений, а не после
Временные таблицы вместо вложенных запросовОптимизатор СУБД строит план предсказуемее
Меньше разыменований через точку (Контрагент.ГоловнойКонтрагент.ИНН)Каждая точка — неявное соединение с таблицей
Убрать из выбранных полей лишнееСхема не тянет поля, которые не выводятся
Не вызывать запросы в цикле в модулеОдин пакетный запрос вместо тысяч мелких

Как найти узкое место:

  1. В режиме Конфигуратора включите Отладка → Замер производительности и сформируйте отчёт в режиме отладки.
  2. Найдите строку с наибольшим временем — обычно это ПроцессорКомпоновки.Инициализировать или выборка запроса.
  3. Скопируйте текст запроса, который построила схема, и прогоните его в консоли запросов с теми же параметрами.

💡 Посмотреть итоговый запрос, который собрала СКД, можно в отладчике: в переменной МакетКомпоновки откройте НаборыДанных, у нужного набора — свойство Запрос.

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

9. Частые ошибки при создании отчёта

Диагностика: выберите симптом
Можно ли сделать отчёт в 1С без программирования?
Да. Отчёт на СКД собирается в конструкторе: запрос через конструктор запроса, остальное — галочками и перетаскиванием полей. Модуль объекта остаётся пустым.
Чем внешний отчёт отличается от отчёта в конфигурации?
Внешний хранится в отдельном файле .erf и не требует изменения конфигурации. Его удобно отлаживать и передавать. Встроенный отчёт или отчёт в расширении всегда под рукой у пользователей и управляется правами.
Как перенести отчёт из внешнего файла в расширение?
Откройте внешний отчёт в Конфигураторе, скопируйте схему компоновки и модуль, создайте отчёт в расширении и вставьте их. Прямого конвертера нет, но копирование схемы целиком через буфер работает.
Почему пользователь не видит отбор, который я настроил?
Отбор в варианте сохраняется, но в форму выводится только при флажке «Включать в пользовательские настройки». Включите его в свойствах элемента пользовательских настроек.
Сохранятся ли пользовательские настройки отчёта после обновления конфигурации?
Как правило, да: они хранятся в базе отдельно от схемы. Сбиваются, если в новой версии отчёта удалили или переименовали поле, на которое ссылалась настройка.