Отчёт в 1С своими руками: запрос, настройки и вывод

· 9 мин

Содержание

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

Создать отчёт в 1С можно двумя способами. Первый — встроенный в конфигурацию, его делают в конфигураторе или расширении. Второй — внешний отчёт (*.erf), который подключают к базе без изменения самой конфигурации. Механизм один и тот же — СКД, разница только в способе хранения.

Ниже — как построить отчёт от первого запроса до печати, как добавить расчёты кодом и что делать, когда отчёт на большой базе работает минутами.

Что такое система компоновки данных и зачем она

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

Схема компоновки описывает три вещи:

  • 📥 Наборы данных — откуда брать данные. Чаще всего это запрос, но бывает набор-объект (значение из кода) и набор-объединение.
  • 🧮 Ресурсы — поля, по которым считаются итоги: Сумма, Количество, Среднее.
  • ⚙️ Настройки — что видит пользователь: выбранные поля, группировки, отборы, сортировка, оформление.

Главный плюс подхода в том, что одна схема даёт пользователю гибкость. Он сам меняет отбор, добавляет группировку, сохраняет свой вариант настроек — а код при этом трогать не нужно.

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

Создаём схему и первый запрос в конструкторе

Порядок действий в конфигураторе:

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

В конструкторе запроса выбираете таблицы (регистры, справочники, документы), перетаскиваете нужные поля в правую панель, задаёте связи и условия. Для оборотов и остатков берите не основную таблицу регистра, а её виртуальную таблицу — например, Остатки, Обороты, ОстаткиИОбороты. Платформа посчитает агрегаты оптимально.

После закрытия конструктора запрос появится текстом. На закладке Ресурсы отметьте суммовые поля и выберите функцию — обычно Сумма(). Без ресурсов отчёт покажет строки, но не посчитает итоги по группировкам.

Поле, которое должно суммироваться по группам, обязано быть ресурсом. Частая ошибка новичка — забыть ресурс и получить отчёт, где в итоговой строке пусто.

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

Настраиваем поля, группировки и отборы

Сам по себе запрос ничего не выведет — нужны настройки на одноимённой закладке. Здесь описывается то, что увидит пользователь.

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

Выбранные поля. На закладке Выбранные поля перетащите то, что показываем в колонках. Ресурсы добавляйте сюда же — иначе суммы не выведутся.

Отбор и сортировка. На закладках Отбор и Сортировка задаёте условия и порядок. Если поставить у элемента отбора признак Показывать и режим быстрого доступа, пользователь сможет менять его прямо в шапке отчёта.

Условное оформление. Отдельная закладка, где цвет, шрифт или фон назначаются по условию. Типичный приём — подсветить красным строки, где остаток отрицательный: условие ОстатокКоличество < 0, оформление — красный текст.

Таблица-подсказка, что где настраивается:

Что нужноГде настроить
Колонки отчётаВыбранные поля
Разбивка по уровнямСтруктура → Группировки
Фильтры для пользователяОтбор (с признаком «Показывать»)
Порядок строкСортировка
Цвет и шрифт по условиюУсловное оформление
Подзаголовки, период в шапкеПользовательские поля / Параметры

Варианты отчёта. Готовый набор настроек можно сохранить как вариант. Пользователь делает это командой Ещё → Сохранить вариант прямо из формы отчёта — так он не настраивает группировки и отборы каждый раз заново. Разработчик вправе задать несколько предопределённых вариантов на закладке Настройки схемы: например, «по складам», «по номенклатуре», «только остатки с дефицитом». Пользователь переключается между ними выбором из списка в шапке. Это сильно снижает нагрузку на поддержку: вместо десятка похожих отчётов вы держите один с набором вариантов.

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

Пользовательские поля и расчёты без программирования

Часто кажется, что без кода не обойтись, хотя задача решается настройками. Два инструмента закрывают большинство случаев.

Вычисляемые поля (закладка схемы Вычисляемые поля) — выражение на языке выражений СКД, которое считается для каждой записи. Например, поле Маржа как ВыручкаБезНДС - Себестоимость. Такое поле ведёт себя как обычное и может стать ресурсом.

Пользовательские поля (в настройках) бывают двух видов: поле-выражение и поле-выбор. Поле-выбор удобно для «раскраски» категорий: по условию вернуть «Крупный», «Средний», «Мелкий» в зависимости от суммы. Код при этом не пишется вообще.

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

Добавляем логику кодом: обработчик компоновки результата

Когда настроек мало — например, нужно получить данные из внешнего источника или вмешаться в готовую таблицу, — отчёт выводят программно. За это отвечает процедура ПриКомпоновкеРезультата в модуле объекта отчёта.

Стандартная схема вывода выглядит так:

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

    СтандартнаяОбработка = Ложь;
    ДокументРезультат.Очистить();

    Настройки = КомпоновщикНастроек.ПолучитьНастройки();

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

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

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

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

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

Эта же процедура — место, где можно дозаполнить ДокументРезультат после вывода: добавить строку с подписью, вставить примечание, объединить ячейки . Главное — не менять данные компоновки в цикле построчно, это убивает производительность (об этом ниже).

Прежде чем писать код, проверьте, нельзя ли закрыть задачу настройками или вычисляемым полем. Отчёт целиком на СКД без модуля — это норма, а не признак слабого разработчика. Код усложняет поддержку.

Оформление и вывод на печать

Результат компоновки — это табличный документ, тот же объект, что у печатных форм. Поэтому печать отчёта ничем не отличается от печати накладной: Файл → Печать или Ctrl+P, предварительно — Предварительный просмотр.

Что настраивается для печати:

  • 📄 Ориентация и поля — свойства табличного документа или через Файл → Параметры страницы.
  • 🔁 Повтор шапки на каждой странице — свойства области Печатать на каждой странице (верхние/левые повторяющиеся строки).
  • 🧷 Фиксация шапки на экране при прокрутке — отдельная настройка от печати, не путайте.
  • 📏 Масштаб — чтобы широкий отчёт влез по ширине листа, задайте Автомасштаб или процент вручную.

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

Выгрузка результата в Excel или PDF делается из того же табличного документа: Файл → Сохранить как, выбор формата. Для PDF — формат «Документ PDF (.pdf)». Таблица сохранит группировки как сворачиваемые уровни, если включён соответствующий режим.

Ускоряем сложные отчёты на больших базах

Когда отчёт на тестовой базе летает, а на рабочей считается минуту, дело почти всегда в запросе, а не в компоновке. Разберём рабочие приёмы.

Отбор — в параметры виртуальной таблицы, а не в ГДЕ. Условие по периоду и аналитике передавайте в скобках виртуальной таблицы: Остатки(&КонецПериода, Склад = &Склад). Тогда платформа отфильтрует данные до расчёта итогов. Отбор через ГДЕ сначала поднимает всё, потом режет — на регистрах это дорого.

Временные таблицы вместо вложенных запросов. Пакетный запрос с помещением промежуточных выборок во временные таблицы (ПОМЕСТИТЬ) читается и выполняется быстрее, чем нагромождение подзапросов в соединениях. Соединение с подзапросом — классический тормоз.

Индексируйте временные таблицы по полям, по которым идёт соединение: ИНДЕКСИРОВАТЬ ПО Номенклатура. Без индекса соединение больших временных таблиц деградирует.

Не тащите лишние поля. Каждое поле в выборке — это данные, которые читаются, передаются и сортируются. Уберите то, что не выводится и не участвует в условиях.

Соединения только по индексированным полям. Соединение по строковому полю или по выражению почти всегда означает полный перебор.

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

Проверьте себя
Куда правильнее поместить отбор по складу в отчёте на регистре остатков?
- В секцию `ГДЕ` основного запроса
Что обязательно нужно, чтобы по группировке считался итог суммы?
- Добавить поле в сортировку
Чем отключают автоматический вывод в программном отчёте?
- Очисткой табличного документа

Прежде чем оптимизировать, замерьте. Включите технологический журнал или замер производительности в конфигураторе и найдите самый долгий запрос. Переписывать весь отчёт вслепую — потеря времени.

Подключаем внешний отчёт к базе

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

Через механизм дополнительных отчётов. В типовых конфигурациях на библиотеке стандартных подсистем путь такой: Администрирование → Печатные формы, отчёты и обработки. Там включите флажок Дополнительные отчёты и обработки, затем в одноимённом списке нажмите Создать и загрузите файл *.erf. В карточке укажите, в каких разделах интерфейса отчёт будет виден, и права доступа . После этого он появляется у пользователей в меню Ещё соответствующего раздела — без обновления конфигурации.

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

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

Частые вопросы

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