Как открыть программно внешний отчет из справочника прораммно в 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";          
        
        АдХр = ПолучитьСсылкуНаВнешнийОтчетОбработкуПоКодуНаСервере(ВыбСтрока.Код);                
        
        ФайлВоВрХр = новый ОписаниеПередаваемогоФайла;
        ФайлВоВрХр.Имя = ИмяФайла;
        ФайлВоВрХр.Хранение = АдХр;
        
        ПолучаемыйФайл = Новый Массив;
        ПолучаемыйФайл.Добавить(ФайлВоВрХр);
        
        ДополнительныеПараметры = Новый Структура;
        ДополнительныеПараметры.Вставить("ИмяФайла", ИмяФайла);
        ДополнительныеПараметры.Вставить("АдресХранилища", АдресХранилища);
        ДополнительныеПараметры.Вставить("ЭтоОбработка", ЭтоОбработка);
        ДополнительныеПараметры.Вставить("ЭтоОтчет", ЭтоОтчет);
        
        ОбработкаОкончанияПолученияФайла = Новый ОписаниеОповещения("ОбработчикОкончанияПолученияФайлов",ЭтаФорма,ДополнительныеПараметры);
        НачатьПолучениеФайлов(ОбработкаОкончанияПолученияФайла,ПолучаемыйФайл,,Ложь);
        
    КонецЕсли;
    
КонецПроцедуры

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

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

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

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

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

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

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

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

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

Показать
Оставьте свое сообщение

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