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

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

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

Способы программно получить ссылку на отчет в 1С: навигационная ссылка, ВариантыОтчетов в БСП, ссылка на внешний отчет. Примеры кода и типичные ошибки.

Под «ссылкой на отчет» в 1С обычно понимают три разные вещи: навигационную ссылку вида e1cib/..., которую можно вставить в браузер или письмо; ссылку на элемент справочника «Варианты отчетов» в конфигурациях на БСП; ссылку на файл внешнего отчета. Способ получения зависит от того, какая именно ссылка нужна и как устроена конфигурация.

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

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

Какие виды ссылок на отчет существуют в 1С

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

Навигационная ссылка — строка вида e1cib/app/Отчет.Продажи или полная, с указанием сервера и базы. Она открывает отчет в клиенте 1С или веб-клиенте. Подходит для рассылок, уведомлений, кнопок в других системах.

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

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

Получение навигационной ссылки на отчет

Самый простой способ — встроенная функция ПолучитьНавигационнуюСсылку(). Для отчета в составе конфигурации передайте объект метаданных:

НавигационнаяСсылка = ПолучитьНавигационнуюСсылку(Метаданные.Отчеты.Продажи);

// Результат: e1cib/app/Отчет.Продажи

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

НавигационнаяСсылка = ПолучитьНавигационнуюСсылку(СсылкаНаВариант);

// Результат: e1cib/data/Справочник.ВариантыОтчетов?ref=...

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

ПолныйURL = "https://server/base/#" + НавигационнаяСсылка;

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

bsl
НавСсылка = ПолучитьНавигационнуюСсылку(Метаданные.Отчеты.Продажи);
Сообщить(НавСсылка); // e1cib/app/Отчет.Продажи

Ссылка на вариант отчета в конфигурациях на БСП

В конфигурациях на базе БСП (УТ, ERP, БП, ЗУП и другие) варианты отчетов хранятся в справочнике «Варианты отчетов». Программный интерфейс — общий модуль ВариантыОтчетов.

Для отчета из состава конфигурации ссылку на вариант получают по ключу варианта:

ОтчетСсылка = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(

Метаданные.Отчеты.Продажи);

ВариантСсылка = ВариантыОтчетов.ПолучитьСсылку(ОтчетСсылка, "ПродажиЗаПериод");

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

Для дополнительных (внешних) отчетов, подключенных через «Дополнительные отчеты и обработки», в качестве ключа отчета используется ссылка на элемент соответствующего справочника. Метод ПолучитьСсылку принимает её напрямую:

ВариантСсылка = ВариантыОтчетов.ПолучитьСсылку(

ДополнительныйОтчетСсылка, "Основной");

Ссылка на внешний отчет

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

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

ВнешнийОтчет.СкомпоноватьРезультат(ТабличныйДокумент);

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

Запрос = Новый Запрос(

"ВЫБРАТЬ ПЕРВЫЕ 1 Т.Ссылка

|ИЗ Справочник.ДополнительныеОтчетыИОбработки КАК Т

|ГДЕ Т.ИмяОбъекта = &ИмяОбъекта");

Запрос.УстановитьПараметр("ИмяОбъекта", "МойОтчет");

Результат = Запрос.Выполнить().Выбрать();

Если Результат.Следующий() Тогда

СсылкаНаОтчет = Результат.Ссылка;

КонецЕсли;

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

Программное формирование отчета и получение результата

Частая задача, стоящая за формулировкой «получить ссылку на отчет», — сформировать отчет программно и отправить результат. Здесь ссылка нужна как промежуточный шаг для подключения отчета.

Типовая последовательность для отчета на СКД из состава конфигурации:

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

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

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

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

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

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

Параметр.Значение = Новый СтандартныйПериод(ВариантСтандартногоПериода.ЭтотМесяц);

// Формирование

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

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

// Сохранение во временное хранилище — получаем адрес-ссылку

АдресРезультата = ПоместитьВоВременноеХранилище(ТабДок, УникальныйИдентификаторФормы);

Адрес во временном хранилище — тоже своего рода ссылка: по ней результат можно забрать на клиенте, прикрепить к письму или выгрузить в файл. Учтите, что хранилище живет ограниченное время: вне сеанса или после очистки адрес становится недействительным.

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

Проверка результата и типичные ошибки

После получения ссылки убедитесь, что она рабочая. Для навигационной ссылки — откройте её через «Перейти по ссылке» в клиенте. Для ссылки на вариант — проверьте, что ссылка не пустая и объект существует:

Если Не ЗначениеЗаполнено(ВариантСсылка)

Или Не ОбщегоНазначения.СсылкаСуществует(ВариантСсылка) Тогда

ВызватьИсключение "Вариант отчета не найден";

КонецЕсли;

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

Типичные ошибки
01
Поиск варианта по наименованию: пользователь может переименовать вариант, и поиск перестанет работать. Используйте ключ варианта — он стабилен.
02
Обращение к ВариантыОтчетов в конфигурации без БСП: модуля не существует, код выдает ошибку компиляции. Проверьте состав конфигурации.
03
Использование клиентского пути к внешнему отчету в серверной процедуре: файл недоступен, формирование падает. Передавайте двоичные данные на сервер или храните файл на сервере.
04
Рассылка чистой навигационной ссылки e1cib/... пользователям веб-клиента: ссылка не откроется в браузере без адреса публикации базы.

Выбор способа под задачу

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

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

Навигационная ссылка

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

Ссылка на вариант (БСП)

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

Путь к файлу / доп. отчеты

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

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

Итог

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

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

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

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

Получите ссылку на вариант через ВариантыОтчетов.ПолучитьСсылку(), затем постройте навигационную ссылку на неё и передайте в метод ПерейтиПоНавигационнойСсылке() на клиенте. Отчет откроется с настройками именно этого варианта.

Почему ПолучитьНавигационнуюСсылку возвращает пустую строку?

Чаще всего передан некорректный объект: например, имя отчета строкой вместо объекта метаданных. Передавайте Метаданные.Отчеты.ИмяОтчета или существующую ссылку на объект базы.

Можно ли получить ссылку на отчет в обычном приложении (8.2)?

Навигационные ссылки появились с управляемым приложением платформы 8.2. В обычном приложении их нет — там отчет открывают через Отчеты.ИмяОтчета.ПолучитьФорму().Открыть().

Как узнать ключ варианта отчета?

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

Работает ли навигационная ссылка у пользователя без прав на отчет?

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

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

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