К статье
Практический материал

Отчеты и Аналитика · 9 мин

Как написать отчет в 1С кодом

Как создать отчет в 1С программно: СКД, компоновка данных, программный вывод результата. Примеры кода, типичные ошибки и проверка результата.

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

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

Ниже разобран полный цикл: от создания макета СКД до программного формирования, передачи параметров, вывода результата и типичных ошибок, из-за которых отчет «не считается» или падает с ошибкой.

Какие способы программного формирования отчета существуют

Прежде чем писать код, важно выбрать подходящий механизм. От этого зависит объем работы, гибкость настроек и удобство поддержки.

СКД (система компоновки данных) — стандартный способ. Запрос и структура описаны в схеме, пользовательские настройки можно менять без изменения кода. Подходит для большинства аналитических отчетов: продажи, остатки, взаиморасчеты.

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

Внешние источники и консоль отчетов используются для отладки, а не для прикладного решения, поэтому в рабочем коде на них полагаться не стоит.

Сравнение подходов

СКД программно

Гибкие настройки, стандартный механизм, легко менять отборы. Требует понимания объектов компоновки.

Запрос + табличный документ

Полный контроль вывода, простой код. Нет пользовательских настроек, сложно поддерживать при изменениях.

Построитель отчета

Быстрый старт для простых списков. Устаревший подход, уступает СКД по возможностям.

Создание схемы компоновки данных

Первый шаг — схема компоновки. В конфигураторе создайте новый отчет (или внешний отчет), откройте основную схему компоновки данных и добавьте набор данных типа «Запрос».

Напишите запрос к нужным таблицам. Например, для отчета по продажам — обороты регистра накопления «Продажи» с измерениями «Номенклатура», «Контрагент» и ресурсами «Количество», «Сумма». На закладке «Настройки» задайте группировки и выбранные поля — это будет вариант отчета по умолчанию.

Обязательно определите параметры: период, организацию, склад. Параметры типа «Дата» для виртуальных таблиц лучше передавать через стандартный период, чтобы СКД корректно подставляла их в запрос.

Базовый код программного формирования

Классическая последовательность вызова СКД из кода выглядит так:

// Получаем схему и настройки

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

Настройки = СхемаКомпоновки.НастройкиПоУмолчанию;

// Устанавливаем параметры

ПараметрПериод = Настройки.ПараметрыДанных.Элементы.Найти("НачалоПериода");

ПараметрПериод.Значение = НачалоМесяца(ТекущаяДатаСеанса());

ПараметрПериод.Использование = Истина;

// Компонуем макет

КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

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

// Формируем результат

ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;

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

Результат = Новый ТабличныйДокумент;

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

ПроцессорВывода.УстановитьДокумент(Результат);

ПроцессорВывода.Вывести(ПроцессорКомпоновки);

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

Вывод результата: форма, файл, почта

Табличный документ — универсальный контейнер результата. Дальнейшие действия зависят от сценария.

Показать пользователю. Присвойте табличный документ реквизиту формы типа «ТабличныйДокумент» или используйте Результат.Показать() в толстом клиенте. В управляемом приложении стандартно — реквизит формы.

Сохранить в файл. Метод Результат.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.XLSX) сохраняет отчет в Excel, PDF, MXL и другие форматы. Это основа для рассылок и выгрузок.

Отправить по почте. Сохраните файл во временный каталог, сформируйте письмо через ИнтернетПочтовоеСообщение и вложите файл. Перед этим убедитесь, что у учетной записи почты настроены параметры и есть права у пользователя, от имени которого выполняется код.

Проверка результата и отладка

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

Для отладки удобно вывести текст итогового запроса. В макете компоновки после выполнения компоновщика доступны наборы данных с уже подставленными параметрами — это помогает понять, какой запрос реально ушел в СУБД.

Также проверьте поведение при пустых данных: корректный отчет должен вывести шапку и пустой результат, а не падать с ошибкой. Если используется RLS (ограничение доступа на уровне записей), формируйте отчет под пользователем с ограниченными правами, чтобы убедиться в отсутствии утечки данных.

Контрольные точки

Как проверить результат

Итоги отчета
Норма

Совпадают с контрольным отчетом или ОСВ за тот же период

Тревожный признак

Расхождения — проверяйте отборы, параметры периода и виртуальные таблицы

Поведение при пустых данных
Норма

Выводится шапка без строк, ошибок нет

Тревожный признак

Исключение или пустое окно без пояснений

Время формирования
Норма

Укладывается в несколько секунд на типовом объеме

Тревожный признак

Минуты ожидания — нужен фоновый режим и оптимизация запроса

Ответы на частые вопросы

Можно ли сформировать отчет СКД без создания объекта отчета в конфигурации?

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

Как сформировать отчет по расписанию?

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

Почему параметр установлен, а отчет его игнорирует?

Наиболее частая причина — не установлено свойство Использование = Истина у элемента параметра. Вторая причина: параметр задан в настройках, но в схеме запрос не использует его (нет связи через &ИмяПараметра в тексте запроса).

Как вывести отчет не в табличный документ, а в дерево или коллекцию?

Используйте ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений вместо вывода в табличный документ. Результат будет деревом значений, которое удобно обходить программно — например, для последующей обработки данных без визуализации.

Что делать, если отчет в клиент-серверном режиме работает, а в файловом падает (или наоборот)?

Проверьте директивы компиляции: код формирования должен выполняться там, где доступны нужные объекты. В клиент-серверном варианте формирование обычно выполняют на сервере (метод с директивой &НаСервере), а на клиент возвращают только готовый табличный документ или адрес временного хранилища.

Итог

Что важно запомнить

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