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

Разработка и Конфигурация · 10 мин

Как открыть форму внешнего отчета в 1С

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

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

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

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

Открытие формы внешнего отчета через интерфейс

Самый простой способ, не требующий прав разработчика, — открыть файл отчета напрямую из режима 1С:Предприятие. Для этого в главном меню выберите «Файл» → «Открыть» (сочетание клавиш Ctrl+O) и укажите файл с расширением .erf. Платформа загрузит отчет во временный контекст и сразу отобразит его основную форму, если она определена в файле.

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

В некоторых конфигурациях пункт «Файл» → «Открыть» скрыт настройками интерфейса или правами. В этом случае проверьте, не запрещено ли открытие внешних файлов ролью пользователя, либо попросите администратора подключить отчет штатным механизмом дополнительных отчетов.

Программное открытие формы внешнего отчета

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

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

ФормаОтчета = ОтчетОбъект.ПолучитьФорму("ФормаОтчета");

ФормаОтчета.Открыть();

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

Важно учитывать контекст выполнения. Метод ПолучитьФорму() доступен только в толстом клиенте и в тонком клиенте при определенных условиях; в веб-клиенте и при серверном вызове из управляемого приложения этот подход может не сработать. Для управляемых форм надежнее использовать функцию ПолучитьФорму() глобального контекста с полным именем формы внешней обработки, подключенной через временное хранилище.

Открытие формы с передачей параметров

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

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

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

ПараметрыФормы.Вставить("НачалоПериода", НачалоМесяца(ТекущаяДата()));

ПараметрыФормы.Вставить("КонецПериода", КонецМесяца(ТекущаяДата()));

ФормаОтчета = ОтчетОбъект.ПолучитьФорму("ФормаОтчета", ПараметрыФормы);

ФормаОтчета.Открыть();

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

Открытие отчета, подключенного через дополнительные отчеты и обработки (БСП)

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

Программное открытие такого отчета выполняется через API БСП. Сначала обработка подключается, затем получается имя ее формы:

ИмяОбработки = ДополнительныеОтчетыИОбработки.ПодключитьВнешнююОбработку(СсылкаНаЭлемент);

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

ОткрытьФорму("ВнешнийОтчет." + ИмяОбработки + ".Форма", ПараметрыФормы);

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

Сравнение вариантов

Файл → Открыть

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

Программно через ВнешниеОтчеты.Создать

Подходит для вызова из других обработок. Требует пути к файлу и ограничен в тонком и веб-клиенте.

Через справочник дополнительных отчетов (БСП)

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

Открытие формы в обычном приложении

В старых конфигурациях на обычных формах (платформа 8.2 и режим совместимости 8.3) подход проще: метод ПолучитьФорму() у объекта внешнего отчета работает напрямую в толстом клиенте без дополнительных ограничений. Код идентичен приведенному выше: создается объект, вызывается ПолучитьФорму() с именем формы, затем Открыть().

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

Типичные ошибки и их устранение

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

Вторая распространенная ситуация — ошибка «Форма не найдена» при вызове ПолучитьФорму("ФормаОтчета"). Она означает, что формы с таким именем нет в файле отчета. Откройте файл в конфигураторе и проверьте точное имя формы в дереве объектов: регистр и лишние пробелы имеют значение.

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

Типичные ошибки
01
Указание пути к файлу на компьютере пользователя при выполнении кода на сервере — файл не найден, отчет не открывается.
02
Неверное имя формы в ПолучитьФорму() — проверьте имя в конфигураторе, включая регистр символов.
03
Использование модальных методов в управляемом приложении — вызов будет отклонен; применяйте Открыть() и оповещения.
04
Открытие .epf вместо .erf и наоборот — внешний отчет и внешняя обработка создаются через разные менеджеры: ВнешниеОтчеты и ВнешниеОбработки.

Как проверить, что форма открылась корректно

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

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

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

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

Отображение формы
Норма

Видны поля настроек, кнопка формирования, область результата

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

Пустое окно или форма мгновенно закрывается

Формирование отчета
Норма

Отчет строится, итоги совпадают с контрольными данными

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

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

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

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

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

Ошибки доступа, компиляции или создания формы

FAQ

Чем файл .erf отличается от .epf?

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

Можно ли открыть форму внешнего отчета в веб-клиенте?

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

Почему ПолучитьФорму() возвращает «Неопределено» или ошибку?

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

Как открыть внешний отчет по расписанию без показа формы?

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

Что делать, если платформа выдает предупреждение системы безопасности при открытии файла?

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

Итог

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

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