Свой отчёт на схеме компоновки данных: от пустого объекта до вывода в Excel
Содержание
Отчёт в Конфигураторе 1С 8.3 делают так: в дереве метаданных правой кнопкой по ветке Отчеты → Добавить, затем на вкладке «Основные» нажимают «Открыть схему компоновки данных», пишут запрос и настраивают вывод на вкладке «Настройки». Программировать почти не нужно: форму, отборы, группировки и выгрузку в Excel даёт система компоновки данных (СКД).
Ниже порядок, по которому отчёт собирается быстрее всего и без переделок: объект, схема, параметры, структура, модуль, права и проверка. Пример сквозной — отчёт «Продажи по контрагентам за период» с отбором по организации.
Где создавать отчёт: в конфигурации, расширении или внешним файлом
Прежде чем жать «Добавить», решите, куда отчёт ляжет. От этого зависит, придётся ли потом мучиться с обновлениями типовой.
| Вариант | Когда подходит | Чем платите |
|---|---|---|
| 🧩 Объект в основной конфигурации | Своя (нетиповая) конфигурация или уже снятая с поддержки | В типовой — правка основной конфигурации и сложнее обновления |
| 🔌 Отчёт в расширении | Типовая на поддержке, отчёт нужен всем пользователям | Расширение подключают и обновляют отдельно |
📄 Внешний отчёт .erf | Разовая задача, отладка, отчёт для одного бухгалтера | Файл живёт вне базы, его легко потерять |
Внешний отчёт создают командой Файл → Новый → Внешний отчет. Расширение — через Конфигурация → Расширения конфигурации (механизм появился в платформе 8.3.6). Дальше всё одинаково: схема, настройки и модуль работают в трёх вариантах одинаково.
Для типовой Бухгалтерии или ЗУП на поддержке практики выбирают расширение. Отчёт в нём переживает обновления релизов без объединения конфигураций.
Шаг 1. Добавляем объект «Отчет» в дерево метаданных
Откройте конфигурацию: Конфигурация → Открыть конфигурацию. Если отчёт делаете в расширении — откройте дерево расширения.
- В дереве найдите ветку
Отчеты, щёлкните правой кнопкой →Добавить. - Откроется окно редактирования объекта. На вкладке «Основные» заполните «Имя» латиницей или кириллицей без пробелов, например
ПродажиПоКонтрагентам. - «Синоним» — то, что увидит пользователь: «Продажи по контрагентам».
- На вкладке «Подсистемы» отметьте раздел, где должен появиться отчёт, например «Продажи». Без этого отчёт будет доступен только через «Все функции».
- Нажмите на вкладке «Основные» кнопку «Открыть схему компоновки данных». Конфигуратор предложит создать макет типа «Схема компоновки данных» — согласитесь, кнопка «Готово».
Макет с именем ОсновнаяСхемаКомпоновкиДанных появится на вкладке «Макеты» объекта. Он и есть сердце отчёта.
Если объект создаёте прямо в типовой конфигурации на поддержке, Конфигуратор не даст добавить объект, пока у конфигурации не включена возможность изменения. Это осознанное решение, а не ошибка — для типовых лучше расширение.
Шаг 2. Схема компоновки: набор данных и запрос
Редактор схемы — окно с вкладками слева: «Наборы данных», «Связи наборов данных», «Вычисляемые поля», «Ресурсы», «Параметры», «Макеты», «Вложенные схемы», «Настройки».
Набор данных «Запрос»
На вкладке «Наборы данных» нажмите зелёный плюс → «Добавить набор данных - запрос». Справа откройте «Конструктор запроса» или пишите текст вручную.
Для примера берём регистр накопления продаж. Имя регистра в вашей конфигурации может отличаться — в БП 3.0 это Продажи, его поля видны в конструкторе.
ВЫБРАТЬ
ПродажиОбороты.Организация КАК Организация,
ПродажиОбороты.Контрагент КАК Контрагент,
ПродажиОбороты.Номенклатура КАК Номенклатура,
ПродажиОбороты.КоличествоОборот КАК Количество,
ПродажиОбороты.СтоимостьОборот КАК Сумма
ИЗ
РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, , ) КАК ПродажиОбороты
После нажатия «ОК» в конструкторе поля запроса появятся в таблице полей набора. Там же задайте понятный «Заголовок» каждому полю: его пользователь увидит в шапке отчёта.
Что ещё стоит знать про наборы
- 🔗 Несколько наборов. Если данные из разных источников (продажи и оплаты), заведите два набора и свяжите их на вкладке «Связи наборов данных» по полю
Контрагент. Это проще, чем громоздкий запрос с соединениями. - 🧮 Вычисляемые поля. Наценку, процент, долю считают на вкладке «Вычисляемые поля» выражением языка СКД, например
Сумма - Себестоимость. Запрос при этом не меняется. - 🔒 Ограничение полей. В таблице полей набора у каждого поля есть флажки ограничения. Снимите доступность служебных полей, чтобы пользователь не вытаскивал их в настройки.
Ресурсы
Ресурс — поле, которое суммируется в итогах группировок. На вкладке «Ресурсы» перенесите Количество и Сумма в правую часть. Выражение по умолчанию — Сумма(Сумма). Для подсчёта уникальных клиентов подойдёт Количество(Различные Контрагент).
Без ресурсов отчёт не покажет итоги по группировкам — это самая частая причина вопроса «почему нет промежуточных сумм».
Шаг 3. Параметры и отборы: что пользователь меняет сам
Параметры &НачалоПериода и &КонецПериода система создала сама, когда разобрала запрос. Показывать пользователю две даты неудобно — заведём один параметр-период.
- На вкладке «Параметры» добавьте параметр
Периодс типомСтандартныйПериод. - Параметру
НачалоПериодав колонке «Выражение» укажите&Период.ДатаНачала, параметруКонецПериода—&Период.ДатаОкончания. - У
НачалоПериодаиКонецПериодапоставьте флажок «Ограничение доступности»: пользователь их больше не увидит, толькоПериод.
Теперь в отчёте будет одно поле с выбором периода: «Этот месяц», «Прошлый квартал», произвольные даты.
Параметр или отбор — что выбрать
| Механизм | Где задаётся | Когда применять |
|---|---|---|
| Параметр | Вкладка «Параметры», &Имя в запросе | Значение нужно внутри запроса: период виртуальной таблицы, дата курса |
| Отбор | Вкладка «Настройки» → «Отбор» | Ограничить результат по любому полю: организация, склад, контрагент |
Отбор по организации делается без строчки кода. В «Настройках» на закладке «Отбор» перетащите поле Организация, вид сравнения «Равно», флажок использования снимите — пусть пользователь включает сам.
Чтобы отбор или параметр показывался прямо в шапке формы отчёта, а не только в окне «Настройки», выделите его и в свойствах элемента пользовательских настроек включите режим «Быстрый доступ». Включение делается кнопкой на панели закладки «Отбор» или «Параметры».
Автозаполнение и фигурные скобки
У набора данных есть флажок «Автозаполнение». Пока он включён, СКД сама дописывает в запрос условия из отборов и сама подбирает доступные поля. Если запрос сложный и нужен ручной контроль, автозаполнение снимают и размечают запрос вручную: в фигурных скобках {ГДЕ ...} перечисляют поля, по которым система может накладывать отбор прямо в запросе. Отбор тогда срабатывает при выборке данных, а не на уже готовом результате, и большой регистр читается быстрее.
Шаг 4. Структура отчёта: группировки, поля, оформление
Вкладка «Настройки» — это вариант отчёта, который увидит пользователь. Слева вверху список вариантов: можно сделать «Кратко» и «Подробно» в одном отчёте.
Собираем структуру
- В дереве структуры щёлкните правой кнопкой по элементу «Отчет» → «Новая группировка».
- Поле группировки —
Контрагент. Это верхний уровень. - Внутри неё добавьте вложенную группировку по
Номенклатура. - Внизу на закладке «Выбранные поля» перетащите
КоличествоиСумма. - На закладке «Сортировка» выберите
Сумма, «По убыванию» — крупные клиенты окажутся сверху.
Вместо простой группировки можно добавить «Новую таблицу»: строки — контрагенты, колонки — месяцы. Для колонок по периодам добавьте группировку по полю периода с типом дополнения «Месяц» — тогда пустые месяцы тоже покажутся.
Оформление и «Другие настройки»
- 🎨 Условное оформление. Подсветка строк по условию: например,
Суммабольше 1 000 000 — жирный шрифт. - 📝 Другие настройки. Заголовок отчёта, вывод параметров и отборов в шапке, расположение итогов, макет оформления.
- 📊 Диаграмма. Элемент структуры «Новая диаграмма» рисует график по тем же данным, без кода.
Свой макет вывода
Если стандартный табличный вид не устраивает (нужна шапка как в бумажной форме), на вкладке «Макеты» схемы задают макет для поля или группировки. Это редкая задача: для печатных форм документов обычно делают отдельный макет табличного документа, а не отчёт на СКД.
Шаг 5. Модуль объекта: когда без кода не обойтись
Отчёт на СКД работает вообще без модуля. Код нужен в трёх случаях:
- ⚙️ подставить значение параметра программно (текущая организация пользователя, дата курса);
- 📥 передать в схему данные не из базы, а из таблицы значений (набор типа «Объект»);
- 🛠 вывести результат нестандартно, например в два табличных документа.
Откройте модуль: правой кнопкой по отчёту в дереве метаданных → «Открыть модуль
объекта». Обработчик — ПриКомпоновкеРезультата. Пример полностью ручного вывода с установкой параметра:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Настройки = КомпоновщикНастроек.ПолучитьНастройки();
Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("Период",
Новый СтандартныйПериод(НачалоМесяца(ТекущаяДата()), КонецМесяца(ТекущаяДата())));
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Истина);
ДокументРезультат.Очистить();
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
КонецПроцедуры
Этот пример жёстко ставит текущий месяц и перекрывает выбор пользователя. В рабочем отчёте ставьте значение только если параметр не заполнен.
Набор данных «Объект»
Если данные готовите кодом, в схеме заведите набор типа «Объект» с именем, например, ВнешниеДанные и опишите его поля вручную. В модуле передайте таблицу значений через структуру:
ВнешниеНаборы = Новый Структура("ВнешниеДанные", ТаблицаДанных);
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборы, ДанныеРасшифровки, Истина);
Имя ключа структуры должно совпадать с полем «Имя объекта, содержащего данные» в наборе, а колонки таблицы — с именами полей набора.
Переданная из модуля таблица живёт только на сервере. Процедура ПриКомпоновкеРезультата и так выполняется на сервере, поэтому готовьте таблицу там же, а не на клиенте.
Шаг 6. Права, проверка и отладка
Права доступа
Новый объект по умолчанию никому не доступен, кроме роли с полными правами. Откройте нужную роль (например, роль бухгалтера в вашей конфигурации или свою роль в расширении), найдите отчёт в списке объектов и поставьте права «Использование» и «Просмотр». Без этого пользователь получит «Нарушение прав доступа».
Запуск и первый прогон
- Сохраните конфигурацию и обновите конфигурацию базы данных:
Конфигурация → Обновить конфигурацию базы данных(F7). Для отчёта реструктуризации данных нет, но изменения нужно применить. - Запустите отладку:
Отладка → Начать отладку(F5). Откроется 1С:Предприятие. - Найдите отчёт в разделе, который указали на вкладке «Подсистемы». Если не указали — через главное меню
Все функции → Отчеты. Команду «Все функции» включают вСервис и настройки → Параметры, флажок «Отображать команду «Все функции»». - Выберите период, нажмите «Сформировать».
Внешний отчёт открывают в режиме предприятия через главное меню Файл → Открыть.
Если отчёт пустой или считает не то
Отладка кода и запроса
- 🐞 Точку останова ставят клавишей F9 на строке модуля, например на
КомпоновщикМакета.Выполнить. После «Сформировать» выполнение остановится в Конфигураторе. - 🔍 В табло отладки (
Отладка → Табло) раскройтеНастройкии посмотрите, с какими параметрами и отборами реально строится отчёт. - ⏱ Медленный отчёт проверяют замером производительности:
Отладка → Замер производительности. Чаще всего тормозит не СКД, а запрос с отбором по реквизиту через точку на большой таблице.
Выгрузка в Excel и печать
Результат отчёта — табличный документ. Пользователь сохраняет его через кнопку «Сохранить» на панели отчёта или главное меню Файл → Сохранить как, формат «Лист Excel» (*.xlsx). Печать — Файл → Печать или Ctrl+P. Код для этого писать не нужно.
Частые вопросы
Можно ли сделать отчёт без СКД, на одном табличном макете?
Как сделать, чтобы отчёт открывался сразу сформированным?
ПриОткрытии вызовите метод формы СкомпоноватьРезультат(). Стандартная автоформа так не умеет.Чем вариант отчёта отличается от пользовательских настроек?
Как перенести готовый отчёт в другую базу?
.erf. Отчёт из конфигурации можно сохранить внешним файлом командой из контекстного меню объекта в дереве метаданных или переносить вместе с расширением файлом .cfe.