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