Отчёт в 1С своими руками: запрос, настройки и вывод
Содержание
Отчёт в 1С создаётся как объект метаданных Отчёт на основе схемы системы компоновки данных (СКД). Самый короткий путь без программирования: добавить отчёт, в его основную схему вставить запрос через конструктор, настроить поля
и группировки — и форма готова. Открывается в режиме 1С:Предприятие обычно из раздела Отчёты.
Создать отчёт в 1С можно двумя способами. Первый — встроенный в конфигурацию, его делают в конфигураторе или расширении. Второй — внешний отчёт (*.erf), который подключают к базе без изменения самой конфигурации. Механизм один и тот же — СКД, разница только в способе хранения.
Ниже — как построить отчёт от первого запроса до печати, как добавить расчёты кодом и что делать, когда отчёт на большой базе работает минутами.
Что такое система компоновки данных и зачем она
СКД — это конструктор, который по описанию «что выбрать и как показать» сам строит запрос, применяет отборы, считает итоги и выводит результат в табличный документ. Разработчику не нужно вручную писать вывод строк и расчёт промежуточных сумм — это делает платформа.
Схема компоновки описывает три вещи:
- 📥 Наборы данных — откуда брать данные. Чаще всего это запрос, но бывает набор-объект (значение из кода) и набор-объединение.
- 🧮 Ресурсы — поля, по которым считаются итоги:
Сумма,Количество,Среднее. - ⚙️ Настройки — что видит пользователь: выбранные поля, группировки, отборы, сортировка, оформление.
Главный плюс подхода в том, что одна схема даёт пользователю гибкость. Он сам меняет отбор, добавляет группировку, сохраняет свой вариант настроек — а код при этом трогать не нужно.
Если задача разовая и нужна просто таблица «что лежит в регистре», не делайте отчёт. В типовых конфигурациях есть Универсальный отчёт — он строится по любому регистру или справочнику прямо в пользовательском режиме.
Создаём схему и первый запрос в конструкторе
Порядок действий в конфигураторе:
- В дереве конфигурации правой кнопкой на ветке
Отчёты→Добавить. Задайте имя, напримерПродажиЗаПериод. - На закладке
ОсновныенажмитеОткрыть схему компоновки данныхи подтвердите создание макетаОсновнаяСхемаКомпоновкиДанных. - На закладке
Наборы данныхдобавьте набор типаЗапроси нажмитеКонструктор запроса.
В конструкторе запроса выбираете таблицы (регистры, справочники, документы), перетаскиваете нужные поля в правую панель, задаёте связи и условия. Для оборотов и остатков берите не основную таблицу регистра, а её виртуальную таблицу — например, Остатки, Обороты, ОстаткиИОбороты. Платформа посчитает агрегаты оптимально.
После закрытия конструктора запрос появится текстом. На закладке Ресурсы отметьте суммовые поля и выберите функцию — обычно Сумма(). Без ресурсов отчёт покажет строки, но не посчитает итоги по группировкам.
Поле, которое должно суммироваться по группам, обязано быть ресурсом. Частая ошибка новичка — забыть ресурс и получить отчёт, где в итоговой строке пусто.
Параметры запроса (период, организация, склад) заводятся на закладке Параметры. Для периода удобен один параметр типа СтандартныйПериод — пользователь выберет «этот месяц», «прошлый квартал» и т. п., а платформа сама подставит даты начала и конца.
Настраиваем поля, группировки и отборы
Сам по себе запрос ничего не выведет — нужны настройки на одноимённой закладке. Здесь описывается то, что увидит пользователь.
Группировки. В структуре настроек добавьте группировку и перетащите в неё поле, например Номенклатура. Вложенные группировки строят иерархию: Склад → внутри Номенклатура. Пустая группировка (без поля) даёт «детальные записи» — построчный список без свёртки.
Выбранные поля. На закладке Выбранные поля перетащите то, что показываем в колонках. Ресурсы добавляйте сюда же — иначе суммы не выведутся.
Отбор и сортировка. На закладках Отбор и Сортировка задаёте условия и порядок. Если поставить у элемента отбора признак Показывать и режим быстрого доступа, пользователь сможет менять его прямо в шапке отчёта.
Условное оформление. Отдельная закладка, где цвет, шрифт или фон назначаются по условию. Типичный приём — подсветить красным строки, где остаток отрицательный: условие ОстатокКоличество < 0, оформление — красный текст.
Таблица-подсказка, что где настраивается:
| Что нужно | Где настроить |
|---|---|
| Колонки отчёта | Выбранные поля |
| Разбивка по уровням | Структура → Группировки |
| Фильтры для пользователя | Отбор (с признаком «Показывать») |
| Порядок строк | Сортировка |
| Цвет и шрифт по условию | Условное оформление |
| Подзаголовки, период в шапке | Пользовательские поля / Параметры |
Варианты отчёта. Готовый набор настроек можно сохранить как вариант. Пользователь делает это командой Ещё → Сохранить вариант прямо из формы отчёта — так он не настраивает группировки и отборы каждый раз заново. Разработчик вправе задать несколько предопределённых вариантов на закладке Настройки схемы: например, «по складам», «по номенклатуре», «только остатки с дефицитом». Пользователь переключается между ними выбором из списка в шапке. Это сильно снижает нагрузку на поддержку: вместо десятка похожих отчётов вы держите один с набором вариантов.
Пользовательские поля и расчёты без программирования
Часто кажется, что без кода не обойтись, хотя задача решается настройками. Два инструмента закрывают большинство случаев.
Вычисляемые поля (закладка схемы Вычисляемые поля) — выражение на языке выражений СКД, которое считается для каждой записи. Например, поле Маржа как ВыручкаБезНДС - Себестоимость. Такое поле ведёт себя как обычное и может стать ресурсом.
Пользовательские поля (в настройках) бывают двух видов: поле-выражение и поле-выбор. Поле-выбор удобно для «раскраски» категорий: по условию вернуть «Крупный», «Средний», «Мелкий» в зависимости от суммы. Код при этом не пишется вообще.
Для процентов и долей не считайте их в запросе построчно — используйте в выражении ресурса функцию Вычислить() с указанием группировки. Так процент считается от итога нужного уровня, а не от строки.
Добавляем логику кодом: обработчик компоновки результата
Когда настроек мало — например, нужно получить данные из внешнего источника или вмешаться в готовую таблицу, — отчёт выводят программно. За это отвечает процедура ПриКомпоновкеРезультата в модуле объекта отчёта.
Стандартная схема вывода выглядит так:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ДокументРезультат.Очистить();
Настройки = КомпоновщикНастроек.ПолучитьНастройки();
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(
СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);
ПроцессорВывода = Новый
ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
КонецПроцедуры
Строка СтандартнаяОбработка = Ложь отключает автоматический вывод — иначе платформа выведет отчёт сама, и ваш код будет лишним. Дальше вы получаете настройки, собираете макет, прогоняете через процессор и выводите в табличный документ.
Эта же процедура — место, где можно дозаполнить ДокументРезультат после вывода: добавить строку с подписью, вставить примечание, объединить ячейки
. Главное — не менять данные компоновки в цикле построчно, это убивает производительность (об этом ниже).
Прежде чем писать код, проверьте, нельзя ли закрыть задачу настройками или вычисляемым полем. Отчёт целиком на СКД без модуля — это норма, а не признак слабого разработчика. Код усложняет поддержку.
Оформление и вывод на печать
Результат компоновки — это табличный документ, тот же объект, что у печатных форм. Поэтому печать отчёта ничем не отличается от печати накладной: Файл → Печать или Ctrl+P, предварительно — Предварительный просмотр.
Что настраивается для печати:
- 📄 Ориентация и поля — свойства табличного документа или через
Файл→Параметры страницы. - 🔁 Повтор шапки на каждой странице — свойства области
Печатать на каждой странице(верхние/левые повторяющиеся строки). - 🧷 Фиксация шапки на экране при прокрутке — отдельная настройка от печати, не путайте.
- 📏 Масштаб — чтобы широкий отчёт влез по ширине листа, задайте
Автомасштабили процент вручную.
Для оформления именно вывода (заголовок отчёта, подписи, логотип) используют макеты оформления и настройки на закладке схемы, а не ручную дорисовку в коде. Пользователь может выбрать свой стиль из списка готовых макетов оформления, если вы их подключили.
Выгрузка результата в Excel или PDF делается из того же табличного документа: Файл → Сохранить как, выбор формата. Для PDF — формат «Документ PDF (.pdf)». Таблица сохранит группировки как сворачиваемые уровни, если включён соответствующий режим.
Ускоряем сложные отчёты на больших базах
Когда отчёт на тестовой базе летает, а на рабочей считается минуту, дело почти всегда в запросе, а не в компоновке. Разберём рабочие приёмы.
Отбор — в параметры виртуальной таблицы, а не в ГДЕ. Условие по периоду и аналитике передавайте в скобках виртуальной таблицы: Остатки(&КонецПериода, Склад = &Склад). Тогда платформа отфильтрует данные до расчёта итогов. Отбор через ГДЕ сначала поднимает всё, потом режет — на регистрах это дорого.
Временные таблицы вместо вложенных запросов. Пакетный запрос с помещением промежуточных выборок во временные таблицы (ПОМЕСТИТЬ) читается и выполняется быстрее, чем нагромождение подзапросов в соединениях. Соединение с подзапросом — классический тормоз.
Индексируйте временные таблицы по полям, по которым идёт соединение: ИНДЕКСИРОВАТЬ ПО Номенклатура. Без индекса соединение больших временных таблиц деградирует.
Не тащите лишние поля. Каждое поле в выборке — это данные, которые читаются, передаются и сортируются. Уберите то, что не выводится и не участвует в условиях.
Соединения только по индексированным полям. Соединение по строковому полю или по выражению почти всегда означает полный перебор.
Вывод по частям для гигантских выборок. Если отчёт в принципе возвращает сотни тысяч строк, включите режим получения данных по частям — память не будет забиваться всей выборкой сразу.
Прежде чем оптимизировать, замерьте. Включите технологический журнал или замер производительности в конфигураторе и найдите самый долгий запрос. Переписывать весь отчёт вслепую — потеря времени.
Подключаем внешний отчёт к базе
Внешний отчёт удобен, когда менять конфигурацию нельзя: его создают в конфигураторе как «Внешний отчёт», сохраняют в файл *.erf и подключают к рабочей базе. Способов два.
Через механизм дополнительных отчётов. В типовых конфигурациях на библиотеке стандартных подсистем путь такой: Администрирование → Печатные формы, отчёты и обработки. Там включите флажок Дополнительные отчёты и обработки, затем в одноимённом списке нажмите Создать и загрузите файл *.erf. В карточке укажите, в каких разделах интерфейса отчёт будет виден, и права доступа
. После этого он появляется у пользователей в меню Ещё соответствующего раздела — без обновления конфигурации.
Открытием файла напрямую. Если механизм дополнительных отчётов недоступен, отчёт открывают как файл: Файл → Открыть в режиме 1С:Предприятие. Для этого у пользователя должно быть право на открытие внешних отчётов и обработок, иначе платформа заблокирует загрузку — это защита от запуска непроверенного кода.
Внешний отчёт — это исполняемый код. Загружайте только файлы из доверенного источника: в модуле отчёта может быть что угодно, вплоть до изменения данных базы.
Частые вопросы
Чем внешний отчёт отличается от встроенного?
*.erf, его подключают к базе без снятия с поддержки и изменения конфигурации. Схема СКД внутри одинаковая.Можно ли сделать отчёт без конфигуратора?
Универсальный отчёт в пользовательском режиме — он строится по регистру или справочнику и сохраняет варианты настроек. Для своей структуры данных всё же нужен конфигуратор или расширение.Почему в отчёте пустые итоги по группам?
Ресурсы, отметьте поле и выберите функцию Сумма().Как дать пользователю менять отбор прямо в отчёте?
Отбор добавьте условие и включите признак Показывать с быстрым доступом. Поле появится в шапке формы отчёта.