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

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

Как программно запустить отчет 1С

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

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

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

Ниже разобраны основные сценарии: запуск из кода в управляемом приложении, фоновое формирование, установка параметров СКД, работа с внешними отчетами и запуск по расписанию. Примеры приведены на встроенном языке 1С и подходят для платформы 8.3.

Какие способы запуска отчета существуют

Выбор способа зависит от того, нужно ли показывать результат пользователю, где выполняется код (клиент или сервер) и как построен отчет. Основных вариантов четыре.

Первый — интерактивный: открыть форму отчета с переданными параметрами, чтобы пользователь увидел сформированный результат или настройки. Второй — программный: сформировать табличный документ на сервере и сохранить его в файл, отправить по почте или вывести в нужный реквизит. Третий — фоновый: запустить формирование через регламентное задание или механизм длительных операций. Четвертый — внешний: запуск через COM-соединение или HTTP-сервис из другой системы.

Сравнение способов запуска

ОткрытьФорму с параметрами

Подходит, когда пользователь должен увидеть отчет на экране. Ограничение: работает только на клиенте, требует интерактивного сеанса.

Объект отчета + СкомпоноватьРезультат()

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

Регламентное задание

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

COM / HTTP-сервис

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

Как открыть форму отчета с параметрами

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

В типовых конфигурациях на БСП (Библиотека стандартных подсистем) удобнее использовать программный интерфейс, но базовый вариант выглядит так:

&НаКлиенте

Процедура ОткрытьОтчет(Команда)

ПараметрыФормы = Новый Структура;

ПараметрыФормы.Вставить("СформироватьПриОткрытии", Истина);

ОткрытьФорму("Отчет.ПродажиЗаПериод.Форма", ПараметрыФормы);

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

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

Как сформировать отчет программно без открытия формы

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

Базовый пример для отчета на СКД

&НаСервере

Процедура СформироватьНаСервере()

ОтчетОбъект = Отчеты.ПродажиЗаПериод.Создать();

Компоновщик = ОтчетОбъект.КомпоновщикНастроек;

Настройки = Компоновщик.Настройки;

// Установка параметра периода

ПараметрНачало = Настройки.ПараметрыДанных.НайтиЗначениеПараметра(

Новый ПараметрКомпоновкиДанных("НачалоПериода"));

Если ПараметрНачало <> Неопределено Тогда

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

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

КонецЕсли;

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

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

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

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

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

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

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

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

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

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

Результат.Записать("C:\Temp\Продажи.xlsx", ТипФайлаТабличногоДокумента.XLSX);

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

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

Порядок программного формирования
  1. 1
    Создайте объект отчета через Отчеты.<Имя>.Создать()
  2. 2
    Получите настройки компоновщика и установите параметры и отборы
  3. 3
    Получите схему компоновки и выполните компоновку макета
  4. 4
    Инициализируйте процессор компоновки и выведите результат в табличный документ
  5. 5
    Сохраните документ в файл или используйте его дальше — и проверьте, что данные в результате соответствуют ожиданиям

Как установить параметры и отборы СКД

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

Отборы добавляются в коллекцию Настройки.Отбор.Элементы. Для каждого элемента указывается поле компоновки, вид сравнения и значение:

НовыйОтбор = Настройки.Отбор.Элементы.Добавить(

Тип("ЭлементОтбораКомпоновкиДанных"));

НовыйОтбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Организация");

НовыйОтбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;

НовыйОтбор.ПравоеЗначение = ВыбраннаяОрганизация;

НовыйОтбор.Использование = Истина;

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

Типичные ошибки при работе с параметрами
01
Параметр установлен, но Использование = Ложь — отчет игнорирует значение без сообщения об ошибке.
02
Имя параметра в коде не совпадает с именем в схеме СКД — НайтиЗначениеПараметра возвращает Неопределено, и настройка молча пропускается.
03
Параметры устанавливаются после вызова компоновки макета — изменения не попадают в результат.
04
Передается значение неверного типа (строка вместо ссылки) — отбор не срабатывает или возникает ошибка компоновки.

Как запустить внешний отчет из файла

Внешние отчеты (файлы .erf) подключаются через менеджер внешних отчетов. В файловой базе достаточно вызвать ВнешниеОтчеты.Создать с указанием пути к файлу. В клиент-серверном режиме файл должен быть доступен на сервере, либо его нужно передать во временное хранилище.

&НаСервере

Функция СформироватьВнешнийОтчет(ПутьКФайлу)

ВнешнийОтчет = ВнешниеОтчеты.Создать(ПутьКФайлу);

Компоновщик = ВнешнийОтчет.КомпоновщикНастроек;

// дальше — та же логика установки параметров и формирования

Возврат ВнешнийОтчет;

КонецФункции

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

Как запускать отчет по расписанию

Для автоматического формирования — например, ежедневной рассылки сводки руководству — используется регламентное задание. В конфигураторе создается объект метаданных «Регламентное задание», указывается метод общего модуля и расписание. Метод должен быть экспортным, серверным и не принимать параметров (или принимать параметры задания).

Внутри метода размещается тот же код программного формирования: создается объект отчета, устанавливаются параметры, результат сохраняется в файл или отправляется по почте через ИнтернетПочта. В типовых конфигурациях для рассылки отчетов есть готовый механизм «Рассылка отчетов», который часто закрывает задачу без написания кода.

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

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

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

Регламентное задание отработало
Норма

В консоли заданий статус «Выполнено», файл отчета создан в указанном каталоге

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

Статус «Ошибка», файл отсутствует или имеет нулевой размер

Данные в отчете
Норма

Период и отборы соответствуют заданным параметрам, итоги совпадают с ручным формированием

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

Пустой отчет или данные за неверный период — параметры не применились

Журнал регистрации
Норма

Нет ошибок за время выполнения задания

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

Ошибки компоновки данных или доступа к файлу

Ограничения и практические нюансы

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

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

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

Итог

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

Интерактивный запуск — через ОткрытьФорму с ключом СформироватьПриОткрытии. Серверное формирование — через объект отчета, настройку компоновщика СКД и вывод в табличный документ. Автоматический запуск — через регламентные задания или рассылку отчетов БСП. Главные причины проблем — непримененные параметры, права доступа и неверные пути к файлам на сервере.

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

Можно ли запустить отчет 1С из командной строки?

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

Как передать период в отчет на СКД программно?

Найдите параметры данных с именами, заданными в схеме (например, НачалоПериода и КонецПериода), установите значения дат и включите флаг Использование. Если в схеме используется параметр типа СтандартныйПериод, передайте значение соответствующего типа.

Почему программно сформированный отчет пустой, а вручную формируется нормально?

Чаще всего параметры или отборы установлены без флага Использование, либо применен не тот вариант настроек. Также проверьте права пользователя, под которым выполняется код, и совпадение периодов.

Как отправить сформированный отчет по электронной почте из кода?

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

Можно ли сформировать отчет на клиенте без вызова сервера?

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

Как запустить отчет из другой базы 1С?

Используйте COM-соединение (V83.COMConnector) или HTTP-сервис, опубликованный в целевой базе. Через соединение вызывается тот же код программного формирования, а результат передается файлом или в виде данных.