Отчеты и Аналитика · 8 мин
Как получить объект отчета в 1С
Как получить объект отчета в 1С: метод Создать(), работа с внешними отчетами, СКД, типичные ошибки и проверка результата. Примеры кода и пошаговые инструкции.
Фраза «получить отчет объект» чаще всего означает одну из двух задач: программно создать объект отчета во встроенном языке 1С, чтобы сформировать его без открытия формы, либо открыть сам отчет в пользовательском режиме и получить готовый табличный документ. Обе задачи решаются штатными средствами платформы, но подход и код различаются.
Для программного получения объекта отчета используется менеджер Отчеты и метод Создать(), а для внешних отчетов — метод ВнешниеОтчеты.Создать() с указанием пути к файлу. После создания объекта доступны компоновщик настроек, схема компоновки данных и метод формирования результата.
Ниже разобраны оба сценария: работа в конфигураторе и встроенном языке, а также пользовательский путь через интерфейс «1С:Предприятия». Отдельно рассмотрены типичные ошибки, ограничения прав и способы проверить, что отчет сформирован корректно.
Что такое объект отчета в 1С и когда он нужен
Объект отчета — это экземпляр отчета, созданный в памяти сервера или клиента, через который доступны схема компоновки данных (СКД), настройки, параметры и методы формирования. В отличие от простого открытия формы отчета, объект позволяет управлять формированием полностью программно: задать отборы, сформировать результат и сохранить его в файл или отправить по почте без участия пользователя.
Типовые ситуации, когда нужен именно объект: регламентное задание, рассылающее отчеты руководству; печатная форма, собирающая данные через СКД; интеграция, где результат отчета выгружается в файл; тестирование настроек отчета из кода.
Как получить объект встроенного отчета программно
Для отчета, добавленного в конфигурацию, используется менеджер отчетов. Базовый вызов выглядит так:
ОтчетОбъект = Отчеты.ПродажиЗаПериод.Создать();
После создания объекта доступны его свойства: СхемаКомпоновкиДанных, КомпоновщикНастроек, реквизиты отчета. Чтобы сформировать результат в табличный документ, используется компоновщик макета:
ОтчетОбъект = Отчеты.ПродажиЗаПериод.Создать();
Настройки = ОтчетОбъект.КомпоновщикНастроек.Настройки;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
Макет = КомпоновщикМакета.Выполнить(ОтчетОбъект.СхемаКомпоновкиДанных, Настройки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(Макет);
ТабДок = Новый ТабличныйДокумент;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ТабДок);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
Этот код выполняется на сервере, поэтому его размещают в серверной процедуре общего модуля или в модуле объекта. Вызов из клиентской процедуры потребует серверного вызова через &НаСервере или общий модуль с признаком «Сервер».
- 1Создайте объект: Отчеты.ИмяОтчета.Создать()
- 2Получите настройки из КомпоновщикНастроек и задайте параметры и отборы
- 3Выполните компоновку макета через КомпоновщикМакетаКомпоновкиДанных
- 4Инициализируйте ПроцессорКомпоновкиДанных и выведите результат в ТабличныйДокумент
- 5Проверьте, что ТабДок содержит строки, и сохраните или покажите его
Как получить объект внешнего отчета (.erf)
Внешний отчет хранится в файле с расширением .erf и не входит в конфигурацию. Его объект создается методом ВнешниеОтчеты.Создать():
ОтчетОбъект = ВнешниеОтчеты.Создать("C:\Отчеты\АнализПродаж.erf");
На сервере путь должен быть доступен именно с сервера 1С, а не с клиентского компьютера. Если код выполняется на клиенте в тонком клиенте, файл сначала передают на сервер через временное хранилище, иначе метод завершится ошибкой «файл не найден».
В управляемых формах типовых конфигураций внешние отчеты часто подключаются через подсистему «Дополнительные отчеты и обработки» (БСП). В этом случае объект получают через программный интерфейс подсистемы, а не напрямую по пути к файлу.
Как задать параметры и отборы перед формированием
После создания объекта настройки доступны через свойство КомпоновщикНастроек.Настройки. Параметры СКД устанавливаются поиском по имени:
Настройки = ОтчетОбъект.КомпоновщикНастроек.Настройки;
Параметр = Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("НачалоПериода"));
Если Параметр <> Неопределено Тогда
Параметр.Значение = НачалоМесяца(ТекущаяДатаСеанса());
Параметр.Использование = Истина;
КонецЕсли;
Отборы добавляются в коллекцию Настройки.Отбор.Элементы с указанием поля, вида сравнения и значения. Важно использовать именно те имена полей, которые определены в схеме компоновки, иначе элемент отбора будет проигнорирован или вызовет ошибку компоновки.
Как открыть отчет в пользовательском режиме
Если задача — не программная работа, а просто получить готовый отчет, в «1С:Предприятии» отчеты открываются через раздел меню «Отчеты» соответствующей подсистемы или через «Ещё — Отчеты» в форме списка. Внешний отчет открывается через «Файл — Открыть» с выбором файла .erf, если у пользователя есть право интерактивного открытия внешних отчетов.
Программно открыть форму отчета с заданными параметрами можно так:
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("СформироватьПриОткрытии", Истина);
ОткрытьФорму("Отчет.ПродажиЗаПериод.Форма", ПараметрыФормы);
Признак результата: форма открылась, отчет сформировался автоматически, в табличном документе видны данные за выбранный период. Если форма открылась пустой — проверьте обязательные параметры периода и права на данные.
Типичные ошибки и ограничения
Самая частая ошибка — обращение Отчеты.ИмяОтчета к отчету, которого нет в конфигурации: это внешний отчет или обработка. Платформа в этом случае сообщает, что объект метаданных не найден. Вторая распространенная проблема — вызов серверного кода формирования из клиентского контекста без серверной процедуры.
Ограничения, о которых стоит помнить: формирование тяжелого отчета на сервере блокирует сеанс на время выполнения; у пользователя без права «Использование» на отчет вызов Создать() завершится ошибкой нарушения прав; в файловой базе длительное формирование может вызывать блокировки у других пользователей.
Как проверить результат
Переменная содержит объект типа ОтчетОбъект
Ошибка «Метаданные не найдены» или нарушение прав
В заголовке результата виден заданный период и отборы
Отчет сформирован по всем данным без ограничений
ТабДок.ВысотаТаблицы больше нуля и есть строки данных
Пустой документ при наличии данных в базе
Частые вопросы
Чем объект отчета отличается от формы отчета?
Форма — это визуальное представление для пользователя. Объект отчета — программный экземпляр, через который формируется результат без интерфейса. Форма внутри себя использует тот же объект, но не наоборот.
Можно ли сформировать отчет в фоне и не блокировать интерфейс?
Да, через механизм длительных операций или фоновые задания. Отчет формируется на сервере в отдельном сеансе, а результат возвращается в виде табличного документа или адреса временного хранилища.
Почему ВнешниеОтчеты.Создать() возвращает ошибку прав?
Для создания внешнего отчета нужно право «Интерактивное открытие внешних отчетов и обработок» или соответствующие настройки профиля безопасности на сервере. Проверьте роли пользователя и настройки кластера.
Как получить результат отчета в Excel или PDF?
Сформируйте результат в ТабличныйДокумент, затем вызовите метод Записать() с типом файла: ТипФайлаТабличногоДокумента.XLSX или PDF. Путь должен быть доступен с той стороны, где выполняется код.
Можно ли получить объект отчета из другой конфигурации через COM?
Да, через COM-соединение (V83.COMConnector) объект отчета создается так же — через менеджер Отчеты внешнего соединения. Учтите, что COM-соединение работает только на Windows и требует совместимости версий платформы.
Что важно запомнить
Встроенный отчет создается через Отчеты.ИмяОтчета.Создать(), внешний — через ВнешниеОтчеты.Создать(путь). Параметры задаются через КомпоновщикНастроек, результат формируется связкой компоновщика макета, процессора компоновки и процессора вывода в табличный документ. Код формирования выполняйте на сервере и проверяйте права доступа.