Как вызвать отчет из формы документа в 1С?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет IT и автоматизация бизнеса
← На главную

При разработке и доработке типовых конфигураций (таких как 1С:Управление торговлей, 1С:ERP или 1С:Комплексная автоматизация) часто возникает задача вывести отчет непосредственно в командную панель или панель навигации конкретного документа — например, в форму документа ЗаказПоставщику. Разберем основные способы реализации этого механизма: через стандартные команды платформы «1С:Предприятие 8», с помощью механизмов Библиотеки стандартных подсистем (БСП) и для подключаемых внешних отчетов.

Способ 1. Использование параметризуемой команды отчета (механизм платформы)

Платформа «1С:Предприятие 8» позволяет привязать отчет к определенному типу данных через параметризованные команды. В этом случае при открытии формы документа система автоматически добавит кнопку вызова отчета в командный интерфейс.

Разберем по шагам, как настроить такую команду в конфигураторе:

  1. Откроем ветку метаданных Отчеты и найдем нужный отчет (или создадим новый).
  2. Развернем дерево отчета, перейдем в ветку Команды и добавим новую команду.
  3. В палитре свойств созданной команды заполним следующие параметры:
    • Тип параметра команды: укажем тип ссылки документа, например ДокументСсылка.ЗаказПоставщику.
    • Группа: выберем подходящую группу размещения (например, Панель навигации формы.См. также или Командная панель формы.Важное).
    • Режим изменения данных: установим значение Не изменяет.
  4. Откроем модуль команды и пропишем алгоритм передачи ссылки текущего документа в качестве отбора при открытии формы отчета.

Рассмотрим пример кода в модуле команды:


&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
	
	ПараметрыОткрытия = Новый Структура;
	ПараметрыОткрытия.Вставить("Отбор", Новый Структура("Документ", ПараметрКоманды));
	ПараметрыОткрытия.Вставить("КлючНазначенияИспользования", "КонтекстДокумента");
	
	ОткрытьФорму("Отчет.ИмяОтчета.Форма", ПараметрыОткрытия, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Окно);
	
КонецПроцедуры

Способ 2. Использование механизмов БСП (Варианты отчетов)

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

Проанализируем, как связать отчет с документом средствами БСП:

  1. Откроем модуль менеджера отчета.
  2. Найдем или создадим экспортную процедуру НастроитьВариантыОтчета(Настройки, НастройкиОтчета).
  3. В настройках варианта отчета определим свойство Назначение, указав тип целевого документа.

Посмотрим на пример регистрации назначения варианта отчета в модуле менеджера:


Процедура НастроитьВариантыОтчета(Настройки, НастройкиОтчета) Экспорт
	
	Вариант = НастройкиОтчета.Варианты.Добавить();
	Вариант.Имя = "ОсновнойКонтекстный";
	Вариант.Наименование = НСтр("ru = 'Движения по заказу поставщику'");
	
	// Указываем пустую ссылку документа в качестве назначения
	Вариант.Назначение.Добавить(Документы.ЗаказПоставщику.ПустаяСсылка());
	
КонецПроцедуры

При таком подходе БСП сама включит отчет в выпадающее меню «Отчеты» на форме соответствующего документа и передаст контекст текущего объекта.

Способ 3. Создание общей команды

Если один и тот же отчет должен вызываться из множества разных документов, удобно использовать глобальную общую команду:

  1. В дереве метаданных перейдем в ветку Общие -> Общие команды и добавим новую команду.
  2. В свойстве Тип параметра команды укажем составной тип данных (выберем все необходимые документы).
  3. В модуле команды опишем открытие отчета с передачей параметра ПараметрКоманды.

Способ 4. Подключение внешнего отчета

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

  1. В модуле внешнего отчета в экспортной функции СведенияОВнешнейОбработке() зададим вид обработки ДополнительныйОтчет или Отчет.
  2. Заполним массив Назначение именами метаданных документов:
    
    Функция СведенияОВнешнейОбработке() Экспорт
    	
    	ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();
    	ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительныйОтчет();
    	ПараметрыРегистрации.Версия = "1.0";
    	ПараметрыРегистрации.Назначение.Добавить("Документ.ЗаказПоставщику");
    	
    	Команда = ПараметрыРегистрации.Команды.Добавить();
    	Команда.Представление = "Анализ заказа поставщику (внешний)";
    	Команда.Идентификатор = "ОткрытьАнализЗаказа";
    	Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
    	
    	Возврат ПараметрыРегистрации;
    	
    КонецФункции
    
  3. Загрузим отчет в базу данных через раздел НСИ и администрирование -> Печатные формы, отчеты и обработки -> Дополнительные отчеты и обработки. Кнопка вызова появится в меню отчетов на форме документа.

Важные особенности и ограничения

При настройке вызова отчетов из форм документов обратим внимание на следующие нюансы:

  1. Несохраненные объекты: если пользователь создал новый документ и еще не записал его, ссылка отсутствует (Ссылка.Пустая()). При вызове контекстного отчета система либо потребует предварительно записать объект, либо отчет откроется без фильтрации по текущему документу.
  2. Права доступа: чтобы команда отображалась, у роли пользователя должны быть установлены права на просмотр самого отчета и право на интерактивное выполнение команды.
  3. Функциональные опции: если команда или отчет включены в функциональную опцию, которая отключена в константах программы, кнопка будет скрыта.
  4. Свойство «Автозаполнение»: параметризованные команды платформы выводятся автоматически только в том случае, если для командной панели или панели навигации формы включено свойство Автозаполнение. Если командная панель настроена вручную, команду необходимо перетащить в состав элементов формы явным образом.
← На главную