Четыре способа создать отчёт в 1С 8.2
Содержание
Сделать отчёт в 1С 8.2 можно четырьмя способами: открыть готовый отчёт из меню конфигурации, собрать простой отчёт конструктором выходной формы, построить гибкий отчёт на системе компоновки данных (СКД) или вывести данные запросом прямо в коде. Речь именно о платформе 8.2 с её Конфигуратором дотакси-интерфейса — в 8.3 часть окон выглядит иначе, но сама логика создания отчёта та же.
Какой способ выбрать, зависит от задачи. Если нужная цифра уже есть в типовой конфигурации — ищите готовый отчёт, программировать ничего не надо. Если данных нет ни в одном стандартном отчёте — придётся добавлять свой объект в Конфигураторе, и здесь почти всегда выигрывает СКД.
Ниже разберём каждый путь по шагам, покажем код для нетиповых случаев и соберём типичные причины, по которым отчёт получается пустым или медленным.
Готовые отчёты 8.2: где их открыть
Первым делом проверьте, нет ли нужного отчёта в самой конфигурации — в типовых базах их десятки.
В 1С 8.2 уживаются два интерфейса, и отчёты открываются по-разному:
- 🖥 Обычное приложение (толстый клиент, обычные формы — например, старые редакции «Бухгалтерии 7.7»-стиля и ранние 8.x): главное меню
Отчёты, а весь перечень — черезОперации → Отчёт.... - 🧩 Управляемое приложение (например, «Бухгалтерия предприятия 2.0», «Управление торговлей 11.0», «ЗУП 2.5»): сверху панель разделов, внутри раздела команда
Отчётыоткрывает список отчётов этого раздела.
Многие готовые отчёты уже построены на СКД, поэтому их можно настроить под себя без Конфигуратора: нажмите Настройка (или Настройки...) в форме отчёта, добавьте отбор, группировку, новое поле — и сохраните вариант. Это самый быстрый способ «сделать отчёт», когда базовый набор данных вас устраивает, а не хватает только разреза.
Отдельно стоит Универсальный отчёт — он есть почти во всех типовых конфигурациях и позволяет вывести данные любого справочника, документа или регистра с группировками и отборами. Часто он закрывает задачу без единой строки кода.
Какой способ выбрать
Чтобы не браться за код там, где хватит мышки, сверьтесь с таблицей.
| Способ | Нужен Конфигуратор | Код | Когда применять |
|---|---|---|---|
| Готовый отчёт + настройка | Нет | Нет | Данные уже есть в типовом отчёте, не хватает разреза |
| Конструктор выходной формы | Да | Генерируется | Разовый простой отчёт по одному запросу |
| Схема компоновки данных (СКД) | Да | Почти нет | Любой постоянный отчёт: группировки, итоги, настройки пользователем |
| Запрос в коде | Да | Да | Нестандартный вывод, печать по макету, вызов из обработки |
Правило простое: для постоянного отчёта всегда начинайте с СКД. Конструктор выходной формы и ручной вывод запросом оставьте для разовых задач и нестандартной печати — их тяжелее сопровождать при обновлениях.
Конструктор выходной формы: отчёт без ручного кода
Это классический путь из ранних версий платформы. Он подходит, когда нужен простой табличный отчёт по одному запросу и возиться со СКД не хочется.
Порядок действий в Конфигураторе:
- В дереве конфигурации выделите ветку
Отчётыи добавьте новый отчёт (зелёный плюс илиInsert). - Задайте имя, например
ПродажиЗаПериод, откройте у отчёта форму. - В модуле формы по правой кнопке мыши вызовите
Конструкторы → Конструктор выходной формы. - В открывшемся окне нажмите кнопку конструктора запроса, выберите таблицы (справочники, документы, регистры) и поля.
- Конструктор сам создаст макет табличного документа и процедуру, которая заполняет его результатом запроса.
На выходе получится рабочая форма с кнопкой формирования — пользователю останется нажать её и увидеть таблицу. Сгенерированный код и макет остаются в конфигурации, их можно дорабатывать руками: добавить колонку, поменять заголовок , вставить итоговую строку. Это удобно, когда базовый результат почти подходит и нужна лишь косметика.
Есть и промежуточный вариант — Конструктор запроса с обработкой результата: он вызывается так же, по правой кнопке в модуле, но вставляет в код готовый цикл обхода выборки. Дальше вы сами решаете, выводить данные в табличный документ, в дерево значений или просто в сообщения.
Минус способа: отбор, сортировку и группировки пользователь менять не сможет — всё зашито в запрос. Чуть изменились требования — правьте запрос в Конфигураторе заново. Поэтому для отчёта, которым будут пользоваться постоянно, конструктор выходной формы проигрывает СКД.
Отчёт на системе компоновки данных (СКД)
СКД — основной инструмент построения отчётов на платформе 8.2. Один раз описываете, откуда брать данные и какие итоги считать, а пользователь дальше сам крутит группировки и отборы.
Создание отчёта на СКД:
- Добавьте новый объект в ветку
Отчёты, дайте имя. - На закладке
ОсновныенажмитеОткрыть схему компоновки данныхи создайте новую схему. - Перейдите на закладку
Наборы данных, добавьте набор типаЗапроси соберите текст в конструкторе запроса. - На закладке
Ресурсыотметьте числовые поля, которые надо суммировать (сумма, количество) — это итоги. - На закладке
Настройкисоберите структуру: добавьте группировку (например, по номенклатуре), вынесите нужные поля в колонки, задайте отбор по периоду и сортировку. - Закройте схему. Если отдельная форма не нужна, не создавайте её — платформа сама построит форму с кнопкой
Сформироватьи панельюНастройки.
Отдельный вопрос — откуда брать данные в запросе. От правильного источника зависит и скорость, и корректность цифр:
- 📦 Регистр накопления — для оборотов и остатков (продажи, остатки товаров, взаиморасчёты). Берите его виртуальные таблицы
Остатки,Обороты,ОстаткиИОбороты, а не основную таблицу движений. - 📊 Регистр сведений
— для срезов на дату (курсы валют, цены, график работы). Используйте
СрезПоследнихилиСрезПервых. - 📄 Таблицы документов и справочников — когда нужны реквизиты самих объектов или табличных частей, а не итоги по регистрам.
- 🧮 Регистр бухгалтерии — для отчётов по счетам и проводкам, через виртуальные таблицы оборотов и остатков по счетам.
Выбор источника — главная развилка при создании отчёта. Частая ошибка новичка: считать остатки, суммируя движения из таблицы регистра вручную, тогда как виртуальная таблица Остатки отдаёт готовый результат в разы быстрее.
В одну схему компоновки можно добавить несколько наборов данных и связать их — например, продажи из одного регистра и план из другого, чтобы вывести отклонение в одной таблице.
Главное преимущество: пользователь меняет настройки отчёта сам, без правки конфигурации. Можно сохранить несколько вариантов (по складам, по месяцам), настроить условное оформление — подсветить красным отрицательные остатки — и вывести отчёт сразу в нескольких разрезах.
Отбор по периоду правильно делать параметром схемы (ДатаНачала, ДатаОкончания), а не фиксированной датой в запросе. Тогда поле периода появится в настройках, и отчёт станет универсальным.
Отчёт на СКД, сделанный в 8.2, без переделок открывается и в 8.3 — формат схемы между версиями совместим снизу вверх.
Отчёт запросом в коде
Когда вывод нестандартный (сложный макет, печать, выгрузка во внешний файл) или отчёт формируется внутри обработки, данные берут запросом и выводят вручную.
Простой случай — пройти по результату запроса:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Наименование КАК Наименование,
| ОстаткиНаСкладах.КоличествоОстаток КАК Количество
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки КАК ОстаткиНаСкладах
|ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура
| ПО ОстаткиНаСкладах.Номенклатура = Номенклатура.Ссылка";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить(Выборка.Наименование + ": " + Формат(Выборка.Количество, "ЧГ=0"));
КонецЦикла;
Для печатной формы данные раскладывают по областям макета. Схема обычная: в макете табличного документа заводят области Шапка, Строка, Подвал, в коде получают их через Макет.ПолучитьОбласть("Строка"), заполняют параметры области из выборки и выводят в итоговый документ методом ТабДок.Вывести(Область). Так строят накладные, счета и любые отчёты с фиксированным видом, где СКД избыточна.
А если отчёт уже описан схемой компоновки, её можно скомпоновать и программно — это удобно для рассылок и фоновых заданий:
СхемаКомпоновки = Отчеты.ПродажиЗаПериод.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
Компоновщик = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = Компоновщик.Выполнить(СхемаКомпоновки, СхемаКомпоновки.НастройкиПоУмолчанию);
Процессор = Новый ПроцессорКомпоновкиДанных;
Процессор.Инициализировать(МакетКомпоновки);
ТабДок = Новый ТабличныйДокумент;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ТабДок);
ПроцессорВывода.Вывести(Процессор);
ТабДок.Показать();
Никогда не ставьте Запрос.Выполнить() внутрь цикла по строкам. Это главная причина отчётов, которые висят минутами. Соберите все нужные данные одним запросом с соединениями, а цикл оставьте только для вывода.
Рассылка отчётов по расписанию
Чтобы отчёт приходил сам — например, остатки на почту каждое утро — в 8.2 есть два слоя.
Регламентное задание. В Конфигураторе создаётся объект РегламентноеЗадание с расписанием; в заданный момент платформа запускает его модуль, где отчёт компонуется кодом (см. пример со СКД выше) и отправляется по почте через объект ИнтернетПочта.
В файловой базе регламентные задания сами по расписанию не выполняются. Им нужен либо клиент-серверный вариант (задания идут на сервере 1С:Предприятия), либо постоянно открытый отдельный сеанс, который их запускает. Это ключевое ограничение файловой 8.2 — учитывайте его, прежде чем обещать «автоматическую рассылку».
Готовый механизм рассылки. В типовых конфигурациях на Библиотеке стандартных подсистем есть подсистема рассылки отчётов — обычно в разделе Администрирование (точное название пункта зависит от релизации конфигурации). Там рассылка настраивается без кода: выбираете отчёт, получателей, расписание и формат вложения (.mxl, .xls, PDF).
Для любого варианта предварительно настройте учётную запись электронной почты в базе — без неё отправка не уйдёт. Расписание задавайте с запасом: тяжёлый отчёт лучше формировать ночью, когда база свободна, иначе утренняя рассылка затормозит работу пользователей. И проверьте, что у сеанса или учётной записи, от имени которой идёт задание, есть права на сам отчёт и на все данные в нём — иначе в письмо уйдёт пустой файл.
Почему отчёт пустой или медленный: разбор ошибок
Два самых частых обращения по отчётам — «ничего не показывает» и «формируется бесконечно». Причины у них разные.
Пустой отчёт:
- ❌ Неверный период — данные есть, но за другие даты. Проверьте параметры
ДатаНачала/ДатаОкончания. - ❌ Лишний отбор остался в настройках от прошлого запуска.
- ❌ У пользователя ограничены права на уровне записей (RLS): он просто не видит чужие данные.
Медленный отчёт:
- 🐌 Запрос внутри цикла — переделайте на один запрос с соединениями.
- 🐌 Отбор делается уже после выборки, в коде, а не в запросе. Фильтруйте в тексте запроса.
- 🐌 Соединение с вложенным запросом по большой таблице — вынесите промежуточные данные во временную таблицу и проиндексируйте поле соединения.
- 🐌 Для остатков и оборотов берите виртуальные таблицы регистра (
.Остатки,.Обороты), а не считайте движения вручную по основной таблице регистра.
Перед правкой структуры отчёта в рабочей базе делайте выгрузку информационной базы — откатиться к рабочему варианту будет на чём.
Частые вопросы
Чем СКД лучше конструктора выходной формы?
Откроется ли отчёт из 8.2 в 1С 8.3?
Нужен ли Конфигуратор, чтобы сделать отчёт?
Настройка, без Конфигуратора.Как сохранить готовый отчёт в Excel?
Файл → Сохранить как и укажите тип .xls или .xlsx. Родной формат 1С — .mxl, его открывают только в 1С.