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