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