Вывод отчета через команды печати

От заказчика поступило пожелание, чтобы доработанный отчет реестр документов выводился через меню Печать из списка документов требования-накладные:

Отчет был внешним:

Решено было написать небольшое расширение модуля менеджера документа Требование-накладная:


&После("ДобавитьКомандыПечати")
Процедура дор_ДобавитьКомандыПечати(КомандыПечати)
	
	// Реестр документов
	КомандаПечати = КомандыПечати.Добавить();
	КомандаПечати.Идентификатор = "Реестр";
	КомандаПечати.Представление = НСтр("ru = 'Реестр документов (доработанный)'");
	КомандаПечати.ЗаголовокФормы= НСтр("ru = 'Реестр документов ""Требование-накладная""'");
	КомандаПечати.Обработчик    = "дор_К.ВыполнитьКомандуОткрытияРеестраДокументов";
	КомандаПечати.СписокФорм    = "ФормаСписка";
	КомандаПечати.Порядок       = 120;

КонецПроцедуры

Сами процедуры я взял из форума, немного адаптировав.

Клиентский модуль дор_К:

Функция ВыполнитьКомандуОткрытияРеестраДокументов(ОписаниеКоманды) Экспорт                                                                                
	ОткрытьВнешнийОтчетОбработку("РеестрТребованийДоработанный", Новый Структура(), "erf");
КонецФункции   

&НаКлиенте
Процедура ОткрытьВнешнийОтчетОбработку(ИмяОтчетаОбработки, ПараметрыОтчетаОбработки, Расширение = "epf") Экспорт
    ИмяВременногоФайла = ПолучитьИмяВременногоФайла(Расширение);
    УИД = Новый УникальныйИдентификатор;
    Адрес = дор_С.ПолучитьАдресВнешнейОбработкиНаСервере(УИД, ИмяОтчетаОбработки, Расширение);
    ИмяОбработки = дор_С.ПодключитьВнешнююОбработку(Адрес, Расширение);                              
	Если Расширение = "epf" Тогда
    	ОткрытьФорму("ВнешняяОбработка."+ ИмяОбработки +".Форма", ПараметрыОтчетаОбработки, , УИД);
	Иначе
    	ОткрытьФорму("ВнешнийОтчет."+ ИмяОбработки +".Форма", ПараметрыОтчетаОбработки, , УИД);
	КонецЕсли;
КонецПроцедуры

Серверный модуль дор_С:

&НаСервере
Функция ПолучитьАдресВнешнейОбработкиНаСервере(УИД, ИмяОтчетаОбработки, Расширение = "epf") Экспорт
    СпрСсылка = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоРеквизиту("ИмяОбъекта", ИмяОтчетаОбработки);
	Если Не ЗначениеЗаполнено(СпрСсылка) Тогда
		ВызватьИсключение "Не найден внешний отчет/обработка с именем объекта: " + ИмяОтчетаОбработки;
	КонецЕсли;
    ХранилищеОбработки = СпрСсылка.ХранилищеОбработки.Получить();
    ИмяВременногоФайла = ПолучитьИмяВременногоФайла(Расширение);
    ХранилищеОбработки.Записать(ИмяВременногоФайла);
    
    Двоичное = Новый ДвоичныеДанные(ИмяВременногоФайла);
    Адрес = ПоместитьВоВременноеХранилище(Двоичное, УИД);
    Возврат Адрес;
    
КонецФункции

&НаСервере
Функция ПодключитьВнешнююОбработку(АдресХранилища, Расширение = "epf") Экспорт

 	Если Расширение = "epf" Тогда
	   Возврат ВнешниеОбработки.Подключить(АдресХранилища);
	Иначе
		Возврат ВнешниеОтчеты.Подключить(АдресХранилища);
	КонецЕсли;

КонецФункции

Из недостатков — при открытии внешнего отчета в первый раз ругается, но потом открывает нормально.

Среда: 3.1.29.38 Объем: 0.7 час

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *