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

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

Как получить объект отчета в 1С

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

Фраза «получить отчет объект» чаще всего означает одну из двух задач: программно создать объект отчета во встроенном языке 1С, чтобы сформировать его без открытия формы, либо открыть сам отчет в пользовательском режиме и получить готовый табличный документ. Обе задачи решаются штатными средствами платформы, но подход и код различаются.

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

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

Что такое объект отчета в 1С и когда он нужен

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

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

Как получить объект встроенного отчета программно

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

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

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

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

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

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

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

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

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

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

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

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

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

Этот код выполняется на сервере, поэтому его размещают в серверной процедуре общего модуля или в модуле объекта. Вызов из клиентской процедуры потребует серверного вызова через &НаСервере или общий модуль с признаком «Сервер».

Порядок действий
  1. 1
    Создайте объект: Отчеты.ИмяОтчета.Создать()
  2. 2
    Получите настройки из КомпоновщикНастроек и задайте параметры и отборы
  3. 3
    Выполните компоновку макета через КомпоновщикМакетаКомпоновкиДанных
  4. 4
    Инициализируйте ПроцессорКомпоновкиДанных и выведите результат в ТабличныйДокумент
  5. 5
    Проверьте, что ТабДок содержит строки, и сохраните или покажите его

Как получить объект внешнего отчета (.erf)

Внешний отчет хранится в файле с расширением .erf и не входит в конфигурацию. Его объект создается методом ВнешниеОтчеты.Создать():

ОтчетОбъект = ВнешниеОтчеты.Создать("C:\Отчеты\АнализПродаж.erf");

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

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

Как задать параметры и отборы перед формированием

После создания объекта настройки доступны через свойство КомпоновщикНастроек.Настройки. Параметры СКД устанавливаются поиском по имени:

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

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

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

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

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

КонецЕсли;

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

Как открыть отчет в пользовательском режиме

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

Программно открыть форму отчета с заданными параметрами можно так:

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

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

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

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

Типичные ошибки и ограничения

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

Ограничения, о которых стоит помнить: формирование тяжелого отчета на сервере блокирует сеанс на время выполнения; у пользователя без права «Использование» на отчет вызов Создать() завершится ошибкой нарушения прав; в файловой базе длительное формирование может вызывать блокировки у других пользователей.

Типичные ошибки
01
Обращение к внешнему отчету через Отчеты.ИмяОтчета — объект не найден, используйте ВнешниеОтчеты.Создать()
02
Клиентский путь к файлу .erf при серверном вызове — файл не найден, передавайте файл через временное хранилище
03
Не установлено свойство Использование у параметра — параметр игнорируется, отчет формируется без отбора
04
Формирование в клиентской процедуре — ошибка вызова серверных методов, переносите код на сервер
Контрольные точки

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

Объект создан
Норма

Переменная содержит объект типа ОтчетОбъект

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

Ошибка «Метаданные не найдены» или нарушение прав

Параметры применены
Норма

В заголовке результата виден заданный период и отборы

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

Отчет сформирован по всем данным без ограничений

Табличный документ заполнен
Норма

ТабДок.ВысотаТаблицы больше нуля и есть строки данных

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

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

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

Чем объект отчета отличается от формы отчета?

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

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

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

Почему ВнешниеОтчеты.Создать() возвращает ошибку прав?

Для создания внешнего отчета нужно право «Интерактивное открытие внешних отчетов и обработок» или соответствующие настройки профиля безопасности на сервере. Проверьте роли пользователя и настройки кластера.

Как получить результат отчета в Excel или PDF?

Сформируйте результат в ТабличныйДокумент, затем вызовите метод Записать() с типом файла: ТипФайлаТабличногоДокумента.XLSX или PDF. Путь должен быть доступен с той стороны, где выполняется код.

Можно ли получить объект отчета из другой конфигурации через COM?

Да, через COM-соединение (V83.COMConnector) объект отчета создается так же — через менеджер Отчеты внешнего соединения. Учтите, что COM-соединение работает только на Windows и требует совместимости версий платформы.

Итог

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

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