Отчёт на схеме компоновки данных: от пустого объекта до готовой таблицы
Содержание
Чтобы сделать отчёт в Конфигураторе 1С 8.3, создайте объект «Отчёт» в ветке Отчеты дерева метаданных (или внешний отчёт через Файл → Новый → Внешний отчет), нажмите «Открыть схему компоновки данных», добавьте набор данных-запрос и настройте вариант: группировки, отборы, ресурсы. Код писать не обязательно: отчёт на схеме компоновки данных (СКД) формируется платформой сам, с отборами, сортировкой и выгрузкой в Excel.
Создание отчётов в 1С через Конфигуратор — это настройка, а не программирование с нуля. Код нужен в двух случаях: когда данные невозможно получить одним запросом и когда результат надо обработать до вывода. Ниже — порядок, в котором отчёт собирает практик, и места, где обычно ошибаются.
1. Где создать отчёт и как не сломать типовую конфигурацию
Сначала решите, куда класть отчёт. От этого зависит, переживёт ли он следующее обновление.
| Вариант | Когда подходит | Риски |
|---|---|---|
| Отчёт в своей конфигурации | Самописная база, конфигурация без поддержки | Нет |
| Отчёт в расширении | Типовая БП, ЗУП, УТ на поддержке | Минимальные: расширение подключается поверх и обновлению не мешает |
Внешний отчёт (файл .erf) | Разовая задача, отладка, передача другому бухгалтеру | Файл живёт отдельно, его легко потерять |
| Отчёт прямо в типовой конфигурации | Почти никогда | Снятие с поддержки, тяжёлые обновления |
Не снимайте типовую конфигурацию с поддержки ради одного отчёта. Расширения появились в платформе 8.3.6, и сейчас это стандартный способ доработки типовых баз.
Создание объекта метаданных
- Откройте Конфигуратор, затем
Конфигурация → Открыть конфигурацию(для расширения —Конфигурация → Расширения конфигурации, добавьте расширение и откройте его). - В дереве найдите ветку
Отчеты, правой кнопкой — «Добавить». - На вкладке «Основные» задайте имя латиницей или кириллицей без пробелов, например
ПродажиПоМенеджерам, и синоним — его увидит пользователь. - Нажмите «Открыть схему компоновки данных». Конфигуратор предложит создать макет с именем
ОсновнаяСхемаКомпоновкиДанных— согласитесь.
Чтобы отчёт увидели пользователи
Объект без прав и подсистемы никто, кроме администратора, не найдёт.
- 🗂 На вкладке «Подсистемы» отметьте раздел, где отчёт появится, например «Продажи».
- 🔑 Добавьте право «Просмотр» в роль, которая есть у нужных пользователей. В расширении роль создаётся в самом расширении.
- 🧩 Для внешнего отчёта в типовых конфигурациях на БСП предусмотрена регистрация в справочнике дополнительных отчётов. Для этого в модуле объекта нужна экспортная функция
СведенияОВнешнейОбработке(). Без неё файл можно открыть только черезФайл → Открытьпри наличии прав.
2. Схема компоновки и запрос: настройка макета
Схема компоновки данных — это макет с несколькими вкладками. Главная — «Наборы данных».
- Нажмите зелёный плюс и выберите «Добавить набор данных - запрос».
- Откройте «Конструктор запроса» или впишите текст вручную.
- Оставьте включённым флаг «Автозаполнение»: поля запроса сами попадут в список полей схемы.
Пример запроса для отчёта по продажам. Имя регистра и его измерения подставьте из своей конфигурации:
ВЫБРАТЬ
Продажи.Контрагент КАК Контрагент,
Продажи.Номенклатура КАК Номенклатура,
Продажи.КоличествоОборот КАК Количество,
Продажи.СуммаОборот КАК Сумма
ИЗ
РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, , ) КАК Продажи
Параметры &НачалоПериода и &КонецПериода схема создаст сама — они появятся на вкладке «Параметры».
Ресурсы: что суммировать
На вкладке «Ресурсы» перенесите числовые поля — Количество и Сумма. Для каждого выберите выражение: Сумма(Сумма), Максимум, Среднее, Количество(Различные ...).
💡 Поле, не отмеченное ресурсом, итогов по группировкам не получит. Это самая частая причина пустых строк «Итого».
Роли и оформление полей
На вкладке «Наборы данных» у каждого поля есть колонки:
- 📝 «Заголовок» — как поле подписано в шапке отчёта;
- 🔢 «Оформление» — формат числа, например
ЧДЦ=2для двух знаков после запятой; - 🚫 «Ограничение поля» и «Ограничение реквизитов» — флажки «Поле», «Условие», «Группировка», «Порядок» запрещают пользователю использовать поле в соответствующей роли.
Последнее полезно, когда в запросе есть служебные поля: их не стоит показывать в настройках.
3. Параметры отчёта и отборы данных
Пользователь не должен вводить начало и конец периода в двух полях. Типовой приём — один параметр-период.
- На вкладке «Параметры» добавьте параметр
Периодс типом «Стандартный период». - Для параметра
НачалоПериодав колонке «Выражение» впишите&Период.ДатаНачала. - Для
КонецПериода—&Период.ДатаОкончания. - У
НачалоПериодаиКонецПериодапоставьте флажок «Ограничение доступности» — пользователь их не увидит.
Параметр или отбор
Это разные вещи, и путают их постоянно.
| Механизм | Где работает | Когда использовать |
|---|---|---|
Параметр (&Склад) | Внутри запроса, до выборки | Значение нужно в параметрах виртуальной таблицы, обязательный фильтр |
| Отбор варианта | Схема сама добавляет условие в запрос | Пользователь фильтрует по любому полю |
Условие ГДЕ в тексте запроса | Всегда | Жёсткое ограничение, которое пользователь менять не должен |
Отбор в СКД не всегда «после запроса». Если поле есть в параметрах виртуальной таблицы, схема сама подставит условие внутрь — для этого в тексте запроса используют фигурные скобки:
ИЗ
РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, ,
{(Контрагент).* КАК Контрагент, (Номенклатура).* КАК Номенклатура}) КАК Продажи
Быстрые настройки для пользователя
Чтобы отбор показывался прямо в шапке формы отчёта:
- Откройте вариант настроек (кнопка «Открыть конструктор настроек» или вкладка «Настройки» внизу схемы).
- В отборе добавьте поле, например
Контрагент. - Правой кнопкой — «Свойства элемента пользовательских настроек», включите «Включать в пользовательские настройки» и режим «Быстрый доступ».
То же делается для параметра Период на вкладке «Параметры данных» варианта.
4. Структура отчёта: группировки и итоги
Структура — дерево на вкладке «Настройки». Сюда добавляют элементы: группировку, таблицу, диаграмму.
Простая группировка
- Правой кнопкой по корню «Отчет» — «Новая группировка».
- Выберите поле
Контрагент. Получится первый уровень. - Внутри неё снова «Новая группировка» —
Номенклатура. - Пустая группировка без полей означает «Детальные записи»: строки запроса как есть.
У группировки по справочнику есть тип: «Элементы», «Иерархия», «Только иерархия». Для номенклатуры с папками выбирайте «Иерархия» — итоги соберутся по группам.
Таблица со строками и колонками
Если нужна шахматка «контрагенты × месяцы», добавьте элемент «Таблица».
- В «Строки» положите группировку
Контрагент. - В «Колонки» — группировку по полю периода. Для этого в запросе берите
Обороты(..., Месяц, ...)и полеПериод.
Где выводить итоги
В свойствах группировки и всего отчёта на вкладке «Другие настройки» есть «Расположение общих итогов»: «Начало», «Конец», «Нет». Для длинных отчётов удобнее итог сверху — его видно без прокрутки.
5. Условное оформление, диаграммы и варианты
Условное оформление раскрашивает строки по условию. Задаётся в варианте настроек, на вкладке «Условное оформление».
- Добавьте новый элемент.
- В колонке «Условие» задайте отбор, например
Сумма Меньше 0. - В «Оформлении» выберите цвет текста или фона, шрифт, формат.
- В «Оформляемых полях» укажите, к каким колонкам применять. Пусто — ко всей строке.
Оформление можно ограничить областью: только группировки, только итоги, только заголовки. Это делается флажками в нижней части элемента.
Диаграмма
В структуру добавьте элемент «Диаграмма». В «Точки» положите группировку, например Номенклатура, в «Серии» — при необходимости вторую. Значения берутся из ресурсов. Тип диаграммы (гистограмма, круговая, линии) выбирается на вкладке «Другие настройки» элемента.
Несколько вариантов в одном отчёте
На вкладке «Варианты» схемы создайте второй вариант: например, «По контрагентам» и «По номенклатуре». Структура у них своя, запрос общий. Пользователь переключает варианты кнопкой в форме отчёта.
💡 Один отчёт с тремя вариантами проще поддерживать, чем три отчёта с одинаковым запросом.
6. Код в модуле объекта отчёта
Модуль объекта открывается на вкладке «Прочее» карточки отчёта, кнопка «Модуль объекта». Чаще всего код пишут в обработчике ПриКомпоновкеРезультата.
Он нужен, когда:
- 🧮 данные готовятся программно (таблица значений из внешнего файла, расчёт, которого нет в запросе);
- 📅 параметр надо установить принудительно, без участия пользователя;
- 🧾 результат нужно дополнить шапкой или подвалом из обычного макета.
Шаблон обработчика с полным выводом в табличный документ:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Схема = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
Настройки = КомпоновщикНастроек.ПолучитьНастройки();
// Пример: принудительная установка параметра
Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("Период",
Новый СтандартныйПериод(НачалоГода(ТекущаяДатаСеанса()), КонецДня(ТекущаяДатаСеанса())));
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(Схема, Настройки, ДанныеРасшифровки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Истина);
ДокументРезультат.Очистить();
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
КонецПроцедуры
Строка СтандартнаяОбработка = Ложь отключает штатное формирование. Если вы её поставили, весь вывод — на вашем коде. Без ДанныеРасшифровки в Выполнить и Инициализировать перестанет работать расшифровка по двойному клику.
Данные из таблицы значений
Если источник — не база, а таблица значений:
- В схеме добавьте «Набор данных - объект», в свойстве «Имя объекта, содержащего данные» укажите
Данные. - Вручную создайте поля с теми же именами, что колонки таблицы.
- Во втором параметре
Инициализироватьпередайте структуру:
ВнешниеНаборы = Новый Структура("Данные", ТаблицаДанных);
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборы, ДанныеРасшифровки, Истина);
Имя в структуре и имя объекта в наборе должны совпадать буква в букву.
7. Вывод результата и выгрузка в Excel
Отчёт на СКД формируется в табличный документ. Штатно пользователь сохраняет его через меню формы: команда «Сохранить как» (значок дискеты или меню «Ещё»), формат «Лист Microsoft Excel 2007» (.xlsx), PDF, .mxl и другие.
Программно табличный документ записывают методом Записать:
ДокументРезультат.Записать("C:\Отчеты\Продажи.xlsx", ТипФайлаТабличногоДокумента.XLSX);
Путь здесь — на той стороне, где выполняется код. В клиент-серверной базе серверный код пишет файл на диск сервера 1С, а не на компьютер бухгалтера.
Если нужна выгрузка без форматирования
Для дальнейшей обработки в Excel удобнее плоская таблица:
- 📋 сделайте отдельный вариант только с детальными записями;
- 🧹 уберите итоги и условное оформление;
- 🔁 или выведите результат в таблицу значений через
ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений.
Печать и расшифровка
Двойной клик по ячейке открывает расшифровку — по сути, тот же отчёт с отбором по этой ячейке. Работает автоматически, пока в коде передаются ДанныеРасшифровки. Параметры печати (ориентация, масштаб) задаются в форме отчёта перед печатью или в табличном документе свойствами ОриентацияСтраницы и АвтоМасштаб.
8. Как ускорить медленный отчёт
Отчёт, который «думает» минуту, почти всегда тормозит из-за запроса, а не из-за СКД.
| Приём | Что даёт |
|---|---|
Условия в параметрах виртуальных таблиц, а не в ГДЕ | Платформа отбирает данные до соединений, а не после |
| Временные таблицы вместо вложенных запросов | Оптимизатор СУБД строит план предсказуемее |
Меньше разыменований через точку (Контрагент.ГоловнойКонтрагент.ИНН) | Каждая точка — неявное соединение с таблицей |
| Убрать из выбранных полей лишнее | Схема не тянет поля, которые не выводятся |
| Не вызывать запросы в цикле в модуле | Один пакетный запрос вместо тысяч мелких |
Как найти узкое место:
- В режиме Конфигуратора включите
Отладка → Замер производительностии сформируйте отчёт в режиме отладки. - Найдите строку с наибольшим временем — обычно это
ПроцессорКомпоновки.Инициализироватьили выборка запроса. - Скопируйте текст запроса, который построила схема, и прогоните его в консоли запросов с теми же параметрами.
💡 Посмотреть итоговый запрос, который собрала СКД, можно в отладчике: в переменной МакетКомпоновки откройте НаборыДанных, у нужного набора — свойство Запрос.
Для отчётов по регистрам с большим объёмом данных проверьте, включены ли итоги регистра. Виртуальная таблица остатков без итогов считается по всем движениям с начала учёта.
9. Частые ошибки при создании отчёта
Можно ли сделать отчёт в 1С без программирования?
Чем внешний отчёт отличается от отчёта в конфигурации?
.erf и не требует изменения конфигурации. Его удобно отлаживать и передавать. Встроенный отчёт или отчёт в расширении всегда под рукой у пользователей и управляется правами.