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