Как открыть программно внешний отчет из справочника прораммно в web-интерфейсе?

1. abrams_n 24.08.19 16:26 Сейчас в теме
Как открыть программно внешний отчет из справочника программно в web-интерфейсе?
Конфигурация самописная.


Через тонкий клиент запускаю - все Ок.
Через браузер ругается "Асинхронные методы запрещены!"

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


&НаСервере
Функция ПодключитьВнешнийОтчет(АдресХранилища)
	Возврат ВнешниеОтчеты.Подключить(АдресХранилища);
КонецФункции	

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

&НаКлиенте
Процедура ПоместитьФайлОтчетаВХранилище(Рез, ДополнительныеПараметры) Экспорт 
	
	
	ИмяФайла      = ДополнительныеПараметры.ИмяФайла;
	АдресХранилища      = ДополнительныеПараметры.АдресХранилища;
	

	ИмяОбработки = ПодключитьВнешнийОтчет(АдресХранилища);			
	ОткрытьФорму("ВнешнийОтчет."+ИмяОбработки+".Форма"); 
	
	
	
КонецПроцедуры
Показать


Просьба большая, помогите разобраться :(
Найденные решения
5. abrams_n 30.08.19 11:12 Сейчас в теме
(4) Сделал без БСП (лишний код в моей конфигурации).


Привожу пример кода, может кому пригодится.

&НаСервере
Функция ПодключитьВнешнююОбработку(АдресХранилища)
	Возврат ВнешниеОбработки.Подключить(АдресХранилища);
КонецФункции	

&НаСервере
Функция ПодключитьВнешнийОтчет(АдресХранилища)
	Возврат ВнешниеОтчеты.Подключить(АдресХранилища);
КонецФункции	

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

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

	
	Если ЭтоОбработка Тогда
			
			ДополнительныеПараметры = Новый Структура;
			ДополнительныеПараметры.Вставить("ИмяФайла", ИмяФайла);
			ДополнительныеПараметры.Вставить("АдресХранилища", АдресХранилища);
			
			ОбработкаОкончанияПомещения = Новый ОписаниеОповещения("ОбработчикОкончанияПомещенияОбр", ЭтаФорма,ДополнительныеПараметры);
			НачатьПомещениеФайла(ОбработкаОкончанияПомещения, АдресХранилища, ИмяФайла, Ложь);

			
			  			
		ИначеЕсли ЭтоОтчет Тогда
			
			ДополнительныеПараметры = Новый Структура;
			ДополнительныеПараметры.Вставить("ИмяФайла", ИмяФайла);
			ДополнительныеПараметры.Вставить("АдресХранилища", АдресХранилища);
			
			ОбработкаОкончанияПомещения = Новый ОписаниеОповещения("ОбработчикОкончанияПомещения", ЭтаФорма,ДополнительныеПараметры);
			НачатьПомещениеФайла(ОбработкаОкончанияПомещения, АдресХранилища, ИмяФайла, Ложь);
		КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПоместитьФайлОтчетаВХранилище(Рез, ДополнительныеПараметры) Экспорт 
	
	ИмяФайла      = ДополнительныеПараметры.ИмяФайла;
	АдресХранилища      = ДополнительныеПараметры.АдресХранилища;

	ИмяОбработки = ПодключитьВнешнийОтчет(АдресХранилища);			
	ОткрытьФорму("ВнешнийОтчет."+ИмяОбработки+".Форма"); 
	
КонецПроцедуры

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

&НаКлиенте
Процедура ОбработчикОкончанияПомещения(Результат, АдресХранилища, ИмяФайла, ДополнительныеПараметры) Экспорт

	Если Результат Тогда
		ИмяОбработки = ПодключитьВнешнийОтчет(АдресХранилища);			
		ОткрытьФорму("ВнешнийОтчет."+ИмяОбработки+".Форма");
	Иначе
		Сообщить("Отчет не открыт!");
	КонецЕсли 
КонецПроцедуры

&НаКлиенте
Процедура ОбработчикОкончанияПомещенияОбр(Результат, АдресХранилища, ИмяФайла, ДополнительныеПараметры) Экспорт
	
	Если Результат Тогда
		ИмяОбработки = ПодключитьВнешнююОбработку(АдресХранилища);
		ОткрытьФорму("ВнешняяОбработка."+ИмяОбработки+".Форма");
	Иначе
		Сообщить("Отчет не открыт!");
	КонецЕсли 
КонецПроцедуры
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. independ 1556 24.08.19 17:43 Сейчас в теме
3. abrams_n 25.08.19 16:02 Сейчас в теме
(2) эту статью читал ранее, не помогло к сожалению.
Работаю без БСП - конфигурация самописная. Все работает если запускать через тонкого клиента.
А вот в браузере - "Асинхронные методы запрещены"
4. nikivr 25.08.19 18:01 Сейчас в теме
(3) Стоит задуматься о подключении модулей БСП в Вашу конфигурацию. Не придется изобретать велосипеды сейчас и возможно в будущем.
5. abrams_n 30.08.19 11:12 Сейчас в теме
(4) Сделал без БСП (лишний код в моей конфигурации).


Привожу пример кода, может кому пригодится.

&НаСервере
Функция ПодключитьВнешнююОбработку(АдресХранилища)
	Возврат ВнешниеОбработки.Подключить(АдресХранилища);
КонецФункции	

&НаСервере
Функция ПодключитьВнешнийОтчет(АдресХранилища)
	Возврат ВнешниеОтчеты.Подключить(АдресХранилища);
КонецФункции	

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

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

	
	Если ЭтоОбработка Тогда
			
			ДополнительныеПараметры = Новый Структура;
			ДополнительныеПараметры.Вставить("ИмяФайла", ИмяФайла);
			ДополнительныеПараметры.Вставить("АдресХранилища", АдресХранилища);
			
			ОбработкаОкончанияПомещения = Новый ОписаниеОповещения("ОбработчикОкончанияПомещенияОбр", ЭтаФорма,ДополнительныеПараметры);
			НачатьПомещениеФайла(ОбработкаОкончанияПомещения, АдресХранилища, ИмяФайла, Ложь);

			
			  			
		ИначеЕсли ЭтоОтчет Тогда
			
			ДополнительныеПараметры = Новый Структура;
			ДополнительныеПараметры.Вставить("ИмяФайла", ИмяФайла);
			ДополнительныеПараметры.Вставить("АдресХранилища", АдресХранилища);
			
			ОбработкаОкончанияПомещения = Новый ОписаниеОповещения("ОбработчикОкончанияПомещения", ЭтаФорма,ДополнительныеПараметры);
			НачатьПомещениеФайла(ОбработкаОкончанияПомещения, АдресХранилища, ИмяФайла, Ложь);
		КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПоместитьФайлОтчетаВХранилище(Рез, ДополнительныеПараметры) Экспорт 
	
	ИмяФайла      = ДополнительныеПараметры.ИмяФайла;
	АдресХранилища      = ДополнительныеПараметры.АдресХранилища;

	ИмяОбработки = ПодключитьВнешнийОтчет(АдресХранилища);			
	ОткрытьФорму("ВнешнийОтчет."+ИмяОбработки+".Форма"); 
	
КонецПроцедуры

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

&НаКлиенте
Процедура ОбработчикОкончанияПомещения(Результат, АдресХранилища, ИмяФайла, ДополнительныеПараметры) Экспорт

	Если Результат Тогда
		ИмяОбработки = ПодключитьВнешнийОтчет(АдресХранилища);			
		ОткрытьФорму("ВнешнийОтчет."+ИмяОбработки+".Форма");
	Иначе
		Сообщить("Отчет не открыт!");
	КонецЕсли 
КонецПроцедуры

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

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот