Отчеты и Аналитика · 11 мин
Как получить ссылку на отчет в 1С программно
Способы программно получить ссылку на отчет в 1С: навигационная ссылка, ВариантыОтчетов в БСП, ссылка на внешний отчет. Примеры кода и типичные ошибки.
Под «ссылкой на отчет» в 1С обычно понимают три разные вещи: навигационную ссылку вида e1cib/..., которую можно вставить в браузер или письмо; ссылку на элемент справочника «Варианты отчетов» в конфигурациях на БСП; ссылку на файл внешнего отчета. Способ получения зависит от того, какая именно ссылка нужна и как устроена конфигурация.
Навигационная ссылка формируется функцией ПолучитьНавигационнуюСсылку() и работает для любого объекта метаданных, включая отчеты и их варианты. Ссылку на вариант отчета в БСП получают через программный интерфейс общего модуля ВариантыОтчетов. Для внешних отчетов ссылкой служит путь к файлу или элемент справочника «Дополнительные отчеты и обработки».
Ниже разобраны все три сценария с примерами кода, проверкой результата и типичными ошибками. Примеры применимы к управляемым формам на платформе 8.3 и конфигурациям с библиотекой стандартных подсистем.
Какие виды ссылок на отчет существуют в 1С
Прежде чем писать код, определите, какая ссылка нужна. От этого зависит и метод получения, и то, где ссылка будет работать.
Навигационная ссылка — строка вида e1cib/app/Отчет.Продажи или полная, с указанием сервера и базы. Она открывает отчет в клиенте 1С или веб-клиенте. Подходит для рассылок, уведомлений, кнопок в других системах.
Ссылка на вариант отчета — ссылка на элемент справочника «Варианты отчетов» (в БСП) или «Хранилище вариантов отчетов». Нужна, когда требуется программно открыть конкретный вариант, подставить его в настройки, назначить права или включить в рассылку отчетов.
Ссылка на внешний отчет — путь к файлу .erf на диске либо ссылка на элемент справочника «Дополнительные отчеты и обработки», если отчет подключен через механизм БСП. Используется для программного формирования внешних отчетов без их включения в конфигурацию.
Получение навигационной ссылки на отчет
Самый простой способ — встроенная функция ПолучитьНавигационнуюСсылку(). Для отчета в составе конфигурации передайте объект метаданных:
НавигационнаяСсылка = ПолучитьНавигационнуюСсылку(Метаданные.Отчеты.Продажи);
// Результат: e1cib/app/Отчет.Продажи
Такая ссылка открывает основную форму отчета с вариантом по умолчанию. Если нужно открыть конкретный вариант, сначала получите ссылку на вариант (см. следующий раздел), а затем постройте навигационную ссылку на него:
НавигационнаяСсылка = ПолучитьНавигационнуюСсылку(СсылкаНаВариант);
// Результат: e1cib/data/Справочник.ВариантыОтчетов?ref=...
Для веб-клиента и рассылок навигационную ссылку нужно дополнить адресом публикации базы. Полный URL собирается вручную: адрес веб-сервера плюс навигационная часть после символа #:
ПолныйURL = "https://server/base/#" + НавигационнаяСсылка;
Проверить результат просто: вставьте ссылку в команду «Перейти по ссылке» в главном меню клиента 1С. Если открывается нужный отчет — ссылка сформирована корректно.
НавСсылка = ПолучитьНавигационнуюСсылку(Метаданные.Отчеты.Продажи);
Сообщить(НавСсылка); // e1cib/app/Отчет.ПродажиСсылка на вариант отчета в конфигурациях на БСП
В конфигурациях на базе БСП (УТ, ERP, БП, ЗУП и другие) варианты отчетов хранятся в справочнике «Варианты отчетов». Программный интерфейс — общий модуль ВариантыОтчетов.
Для отчета из состава конфигурации ссылку на вариант получают по ключу варианта:
ОтчетСсылка = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(
Метаданные.Отчеты.Продажи);
ВариантСсылка = ВариантыОтчетов.ПолучитьСсылку(ОтчетСсылка, "ПродажиЗаПериод");
Если ключ варианта неизвестен, найдите его в справочнике запросом по наименованию или откройте отчет в режиме предприятия и посмотрите ключ через «Еще — Изменить вариант» либо в настройках. Ключ указывается разработчиком в схеме компоновки данных и не меняется при переименовании варианта пользователем.
Для дополнительных (внешних) отчетов, подключенных через «Дополнительные отчеты и обработки», в качестве ключа отчета используется ссылка на элемент соответствующего справочника. Метод ПолучитьСсылку принимает её напрямую:
ВариантСсылка = ВариантыОтчетов.ПолучитьСсылку(
ДополнительныйОтчетСсылка, "Основной");
Ссылка на внешний отчет
Внешний отчет, не подключенный к базе, не имеет ссылки в терминах 1С — у него есть только путь к файлу. Программно такой отчет открывают через ВнешниеОтчеты.Создать(ПутьКФайлу):
ВнешнийОтчет = ВнешниеОтчеты.Создать("C:\Отчеты\МойОтчет.erf");
ВнешнийОтчет.СкомпоноватьРезультат(ТабличныйДокумент);
Если внешний отчет подключен через механизм «Дополнительные отчеты и обработки», ссылкой служит элемент одноименного справочника. Найдите его по имени файла или наименованию запросом, а затем используйте для формирования:
Запрос = Новый Запрос(
"ВЫБРАТЬ ПЕРВЫЕ 1 Т.Ссылка
|ИЗ Справочник.ДополнительныеОтчетыИОбработки КАК Т
|ГДЕ Т.ИмяОбъекта = &ИмяОбъекта");
Запрос.УстановитьПараметр("ИмяОбъекта", "МойОтчет");
Результат = Запрос.Выполнить().Выбрать();
Если Результат.Следующий() Тогда
СсылкаНаОтчет = Результат.Ссылка;
КонецЕсли;
Полученную ссылку можно передавать в ДополнительныеОтчетыИОбработки.ПодключитьВнешнююОбработку() и далее создавать объект отчета для программного формирования.
Программное формирование отчета и получение результата
Частая задача, стоящая за формулировкой «получить ссылку на отчет», — сформировать отчет программно и отправить результат. Здесь ссылка нужна как промежуточный шаг для подключения отчета.
Типовая последовательность для отчета на СКД из состава конфигурации:
ОтчетОбъект = Отчеты.Продажи.Создать();
Компоновщик = ОтчетОбъект.КомпоновщикНастроек;
// Установка параметров
Параметр = Компоновщик.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(
Новый ПараметрКомпоновкиДанных("Период"));
Параметр.Использование = Истина;
Параметр.Значение = Новый СтандартныйПериод(ВариантСтандартногоПериода.ЭтотМесяц);
// Формирование
ТабДок = Новый ТабличныйДокумент;
ОтчетОбъект.СкомпоноватьРезультат(ТабДок);
// Сохранение во временное хранилище — получаем адрес-ссылку
АдресРезультата = ПоместитьВоВременноеХранилище(ТабДок, УникальныйИдентификаторФормы);
Адрес во временном хранилище — тоже своего рода ссылка: по ней результат можно забрать на клиенте, прикрепить к письму или выгрузить в файл. Учтите, что хранилище живет ограниченное время: вне сеанса или после очистки адрес становится недействительным.
- 1Получите ссылку на вариант отчета через ВариантыОтчетов.ПолучитьСсылку()
- 2Создайте объект отчета и установите параметры периода и отборов
- 3Сформируйте результат в табличный документ
- 4Сохраните табличный документ в файл (XLSX, PDF) или поместите во временное хранилище
- 5Вложите файл в письмо или опубликуйте навигационную ссылку на отчет для ручного открытия
Проверка результата и типичные ошибки
После получения ссылки убедитесь, что она рабочая. Для навигационной ссылки — откройте её через «Перейти по ссылке» в клиенте. Для ссылки на вариант — проверьте, что ссылка не пустая и объект существует:
Если Не ЗначениеЗаполнено(ВариантСсылка)
Или Не ОбщегоНазначения.СсылкаСуществует(ВариантСсылка) Тогда
ВызватьИсключение "Вариант отчета не найден";
КонецЕсли;
Наиболее частые проблемы связаны не с самим получением ссылки, а с контекстом выполнения. Навигационная ссылка, сформированная на сервере, корректна, но полный URL для веб-клиента нужно собирать отдельно. Ссылка на вариант может не находиться, если отчет не размещен ни в одной подсистеме командного интерфейса — БСП регистрирует варианты только доступных отчетов.
Выбор способа под задачу
Единого «правильного» способа нет — выбирайте по сценарию использования. Для уведомлений пользователям с возможностью открыть отчет вручную достаточно навигационной ссылки. Для автоматических рассылок и регламентных заданий нужна ссылка на вариант плюс программное формирование. Для разовых внешних отчетов — путь к файлу или справочник дополнительных отчетов.
Сравнение вариантов
Подходит для ссылок в письмах и сообщениях, когда пользователь сам откроет отчет. Не формирует результат и требует прав у пользователя.
Подходит для рассылок, регламентных заданий и открытия конкретного варианта. Работает только в конфигурациях на БСП.
Подходит для внешних отчетов без изменения конфигурации. Требует контроля источника файла и доступности пути на сервере.
Если сомневаетесь, начните с навигационной ссылки — это самый быстрый способ проверить, что отчет доступен и открывается. Затем, при необходимости автоматизации, переходите к ссылке на вариант и программному формированию.
Что важно запомнить
Навигационную ссылку дает ПолучитьНавигационнуюСсылку(), ссылку на вариант в БСП — ВариантыОтчетов.ПолучитьСсылку() по ключу варианта, внешний отчет адресуется путем к файлу или справочником дополнительных отчетов. Всегда проверяйте ссылку на существование и учитывайте контекст выполнения — клиент или сервер.
Частые вопросы
Как открыть отчет программно с конкретным вариантом?
Получите ссылку на вариант через ВариантыОтчетов.ПолучитьСсылку(), затем постройте навигационную ссылку на неё и передайте в метод ПерейтиПоНавигационнойСсылке() на клиенте. Отчет откроется с настройками именно этого варианта.
Почему ПолучитьНавигационнуюСсылку возвращает пустую строку?
Чаще всего передан некорректный объект: например, имя отчета строкой вместо объекта метаданных. Передавайте Метаданные.Отчеты.ИмяОтчета или существующую ссылку на объект базы.
Можно ли получить ссылку на отчет в обычном приложении (8.2)?
Навигационные ссылки появились с управляемым приложением платформы 8.2. В обычном приложении их нет — там отчет открывают через Отчеты.ИмяОтчета.ПолучитьФорму().Открыть().
Как узнать ключ варианта отчета?
Откройте отчет в режиме предприятия, перейдите в изменение варианта — ключ виден в свойствах. Либо найдите вариант в справочнике «Варианты отчетов» и посмотрите реквизит «Ключ варианта». Также ключ задан в схеме компоновки данных в конфигураторе.
Работает ли навигационная ссылка у пользователя без прав на отчет?
Ссылка формируется независимо от прав, но при переходе по ней пользователь без прав получит сообщение о нарушении прав доступа. Перед рассылкой ссылок проверяйте роли получателей.
Как передать ссылку на сформированный отчет другому пользователю?
Адрес временного хранилища для этого не подходит — он привязан к сеансу. Сохраните табличный документ в файл (XLSX, PDF, MXL) и отправьте файл, либо передайте навигационную ссылку на сам отчет с описанием нужных настроек.