Четыре способа создать отчёт в 1С 8.2

· 9 мин

Содержание

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

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

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

Готовые отчёты 8.2: где их открыть

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

В 1С 8.2 уживаются два интерфейса, и отчёты открываются по-разному:

  • 🖥 Обычное приложение (толстый клиент, обычные формы — например, старые редакции «Бухгалтерии 7.7»-стиля и ранние 8.x): главное меню Отчёты, а весь перечень — через Операции → Отчёт....
  • 🧩 Управляемое приложение (например, «Бухгалтерия предприятия 2.0», «Управление торговлей 11.0», «ЗУП 2.5»): сверху панель разделов, внутри раздела команда Отчёты открывает список отчётов этого раздела.

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

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

Какой способ выбрать

Чтобы не браться за код там, где хватит мышки, сверьтесь с таблицей.

СпособНужен КонфигураторКодКогда применять
Готовый отчёт + настройкаНетНетДанные уже есть в типовом отчёте, не хватает разреза
Конструктор выходной формыДаГенерируетсяРазовый простой отчёт по одному запросу
Схема компоновки данных (СКД)ДаПочти нетЛюбой постоянный отчёт: группировки, итоги, настройки пользователем
Запрос в кодеДаДаНестандартный вывод, печать по макету, вызов из обработки

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

Конструктор выходной формы: отчёт без ручного кода

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

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

  1. В дереве конфигурации выделите ветку Отчёты и добавьте новый отчёт (зелёный плюс или Insert).
  2. Задайте имя, например ПродажиЗаПериод, откройте у отчёта форму.
  3. В модуле формы по правой кнопке мыши вызовите Конструкторы → Конструктор выходной формы.
  4. В открывшемся окне нажмите кнопку конструктора запроса, выберите таблицы (справочники, документы, регистры) и поля.
  5. Конструктор сам создаст макет табличного документа и процедуру, которая заполняет его результатом запроса.

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

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

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

Отчёт на системе компоновки данных (СКД)

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

Создание отчёта на СКД:

  1. Добавьте новый объект в ветку Отчёты, дайте имя.
  2. На закладке Основные нажмите Открыть схему компоновки данных и создайте новую схему.
  3. Перейдите на закладку Наборы данных, добавьте набор типа Запрос и соберите текст в конструкторе запроса.
  4. На закладке Ресурсы отметьте числовые поля, которые надо суммировать (сумма, количество) — это итоги.
  5. На закладке Настройки соберите структуру: добавьте группировку (например, по номенклатуре), вынесите нужные поля в колонки, задайте отбор по периоду и сортировку.
  6. Закройте схему. Если отдельная форма не нужна, не создавайте её — платформа сама построит форму с кнопкой Сформировать и панелью Настройки.

Отдельный вопрос — откуда брать данные в запросе. От правильного источника зависит и скорость, и корректность цифр:

  • 📦 Регистр накопления — для оборотов и остатков (продажи, остатки товаров, взаиморасчёты). Берите его виртуальные таблицы Остатки, Обороты, ОстаткиИОбороты, а не основную таблицу движений.
  • 📊 Регистр сведений — для срезов на дату (курсы валют, цены, график работы). Используйте СрезПоследних или СрезПервых.
  • 📄 Таблицы документов и справочников — когда нужны реквизиты самих объектов или табличных частей, а не итоги по регистрам.
  • 🧮 Регистр бухгалтерии — для отчётов по счетам и проводкам, через виртуальные таблицы оборотов и остатков по счетам.

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

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

Главное преимущество: пользователь меняет настройки отчёта сам, без правки конфигурации. Можно сохранить несколько вариантов (по складам, по месяцам), настроить условное оформление — подсветить красным отрицательные остатки — и вывести отчёт сразу в нескольких разрезах.

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

Отчёт на СКД, сделанный в 8.2, без переделок открывается и в 8.3 — формат схемы между версиями совместим снизу вверх.

Отчёт запросом в коде

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

Простой случай — пройти по результату запроса:

Запрос = Новый Запрос;
Запрос.Текст =
    "ВЫБРАТЬ
    |    Номенклатура.Наименование КАК Наименование,
    |    ОстаткиНаСкладах.КоличествоОстаток КАК Количество
    |ИЗ
    |    РегистрНакопления.ТоварыНаСкладах.Остатки КАК ОстаткиНаСкладах
    |ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура
    |    ПО ОстаткиНаСкладах.Номенклатура = Номенклатура.Ссылка";

Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
    Сообщить(Выборка.Наименование + ": " + Формат(Выборка.Количество, "ЧГ=0"));
КонецЦикла;

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

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

СхемаКомпоновки = Отчеты.ПродажиЗаПериод.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");

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

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

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

ТабДок.Показать();

Никогда не ставьте Запрос.Выполнить() внутрь цикла по строкам. Это главная причина отчётов, которые висят минутами. Соберите все нужные данные одним запросом с соединениями, а цикл оставьте только для вывода.

Рассылка отчётов по расписанию

Чтобы отчёт приходил сам — например, остатки на почту каждое утро — в 8.2 есть два слоя.

Регламентное задание. В Конфигураторе создаётся объект РегламентноеЗадание с расписанием; в заданный момент платформа запускает его модуль, где отчёт компонуется кодом (см. пример со СКД выше) и отправляется по почте через объект ИнтернетПочта.

В файловой базе регламентные задания сами по расписанию не выполняются. Им нужен либо клиент-серверный вариант (задания идут на сервере 1С:Предприятия), либо постоянно открытый отдельный сеанс, который их запускает. Это ключевое ограничение файловой 8.2 — учитывайте его, прежде чем обещать «автоматическую рассылку».

Готовый механизм рассылки. В типовых конфигурациях на Библиотеке стандартных подсистем есть подсистема рассылки отчётов — обычно в разделе Администрирование (точное название пункта зависит от релизации конфигурации). Там рассылка настраивается без кода: выбираете отчёт, получателей, расписание и формат вложения (.mxl, .xls, PDF).

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

Почему отчёт пустой или медленный: разбор ошибок

Два самых частых обращения по отчётам — «ничего не показывает» и «формируется бесконечно». Причины у них разные.

Пустой отчёт:

  • ❌ Неверный период — данные есть, но за другие даты. Проверьте параметры ДатаНачала/ДатаОкончания.
  • ❌ Лишний отбор остался в настройках от прошлого запуска.
  • ❌ У пользователя ограничены права на уровне записей (RLS): он просто не видит чужие данные.

Медленный отчёт:

  • 🐌 Запрос внутри цикла — переделайте на один запрос с соединениями.
  • 🐌 Отбор делается уже после выборки, в коде, а не в запросе. Фильтруйте в тексте запроса.
  • 🐌 Соединение с вложенным запросом по большой таблице — вынесите промежуточные данные во временную таблицу и проиндексируйте поле соединения.
  • 🐌 Для остатков и оборотов берите виртуальные таблицы регистра (.Остатки, .Обороты), а не считайте движения вручную по основной таблице регистра.
Диагностика: выберите симптом

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

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

Чем СКД лучше конструктора выходной формы?
СКД отдаёт настройки пользователю: он сам меняет группировки, отборы и сортировку, сохраняет варианты. Конструктор выходной формы зашивает всё в запрос — любое изменение требует правки конфигурации.
Откроется ли отчёт из 8.2 в 1С 8.3?
Да. Платформа совместима снизу вверх, схема компоновки данных и макеты переносятся без переделок. Отличаться будет только внешний вид Конфигуратора и формы.
Нужен ли Конфигуратор, чтобы сделать отчёт?
Для нового объекта — да. Но если готовый отчёт построен на СКД, его настраивают прямо в режиме 1С:Предприятия через кнопку Настройка, без Конфигуратора.
Как сохранить готовый отчёт в Excel?
В сформированном табличном документе выберите Файл → Сохранить как и укажите тип .xls или .xlsx. Родной формат 1С — .mxl, его открывают только в 1С.
Почему рассылка отчёта не работает в файловой базе?
Регламентные задания в файловом варианте не запускаются по расписанию сами. Нужен клиент-серверный вариант или отдельный постоянно открытый сеанс, выполняющий задания.