Некоторый нюанс в сведениях о внешней печатной обработке в облаках

Столкнулся с неприятной проблемой — печатная внешняя обработка прекрасно работала в 1С, но не работала в облачной базе на разделителях (42 Cloud), выдавала ошибку:

В обработчике печати не был сформирован табличный документ для: ***

Я сразу заподозрил, что проблема в названиях команды печати, поэтому добавил трассировку.

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

Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт

	ПараметрыВывода.ДоступнаПечатьПоКомплектно = Истина;
	
	ТекКоманды = СведенияОВнешнейОбработке().Команды;

	СообщитьЖР("Количество команды: " + ТекКоманды.Количество());
	
	Для Каждого Строка ИЗ КоллекцияПечатныхФорм Цикл
		СообщитьЖР("ПФ в начале: " + Строка.ИмяМакета + " (" + Строка.ТабличныйДокумент + ")");
	КонецЦикла;
	
	
	Для Каждого ТекКоманда ИЗ ТекКоманды Цикл
		
		Идентификатор = ТекКоманда.Идентификатор;
		Представление = ТекКоманда.Представление;
		ИдентификаторВР = ВРЕГ(Идентификатор);
		
		СообщитьЖР("Команда: " + Идентификатор + " (" + Представление + ")");
		
		Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, ИдентификаторВР) Тогда
			ПодготовленныйТабДок = ПечатьДокумента(МассивОбъектов, ОбъектыПечати, ИдентификаторВР);
			УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, ИдентификаторВР, Представление, ПодготовленныйТабДок);
		КонецЕсли;
		
		Для Каждого Строка ИЗ КоллекцияПечатныхФорм Цикл
			СообщитьЖР("ПФ в конце: " + Строка.ИмяМакета + " (" + Строка.ТабличныйДокумент + ")");
		КонецЦикла;
		
	КонецЦикла;
	
КонецПроцедуры  

Процедура СообщитьЖР(Сообщение)    
	Сообщить(Сообщение);
	ЗаписьЖурналаРегистрации("Отладка.ПечатнаяФормаКомитента",,,, Сообщение);
КонецПроцедуры

И увидел следующую картину:

Видно, что у команды вместо идентификатора ПечатнаяФормаОтчетаКомитентуРасширенная используется GUID.

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

Функция СведенияОВнешнейОбработке() Экспорт
	
	МД = Метаданные();

	
	ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке(СтандартныеПодсистемыСервер.ВерсияБиблиотеки()); 
	
	МассивНазначений = Новый Массив; //Массив объектов метаданных, для которых будут определены печатная форма
	МассивНазначений.Добавить("Документ.ОтчетКомитенту");
	
	Представление = МД.Синоним;
	
	ПараметрыРегистрации.Вид 			 = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();
	ПараметрыРегистрации.Версия 		 = ЭтотОбъект.Метаданные().Комментарий; //Версия печатной формы, можно устанавливать в ручную
	ПараметрыРегистрации.Назначение      = МассивНазначений;
    ПараметрыРегистрации.Наименование	 = Представление;
	ПараметрыРегистрации.Информация		 = СтрСоединить(МассивНазначений, ", "); //Перечисление объектов для печати
	
	НоваяКоманда 						 = ПараметрыРегистрации.Команды.Добавить();
	НоваяКоманда.Представление 			 = Представление;
	НоваяКоманда.Идентификатор 			 = МД.Имя;
	НоваяКоманда.Использование 			 = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
	НоваяКоманда.ПоказыватьОповещение 	 = Истина;
	
	Разрешение = РаботаВБезопасномРежиме.РазрешениеНаИспользованиеПривилегированногоРежима("Печать накладной без контроля прав доступа ее реквизитов");
    ПараметрыРегистрации.Разрешения.Добавить(Разрешение);



	
	Возврат ПараметрыРегистрации;
	
КонецФункции

На облаке, видимо, формируют временную внешнюю обработку, где в качестве идентификатора используется GUID и эта конструкция не работает. Поэтому надо прописывать идентификатор в явном виде:

	НоваяКоманда 						 = ПараметрыРегистрации.Команды.Добавить();
	НоваяКоманда.Представление 			 = Представление;
	НоваяКоманда.Идентификатор 			 = "ПечатнаяФормаОтчетаКомитентуРасширенная"; //МД.Имя; //На облаке так нельзя, это может быть временная обработка
	НоваяКоманда.Использование 			 = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
	НоваяКоманда.ПоказыватьОповещение 	 = Истина;

Среда: УНФ 3.0.4.88. Объем 1.5 час. Облако: 42 Cloud

fixin

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

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

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

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