СсылкаНаОбъект = Справочники.ВнешниеОбработки.НайтиПоКоду("000000019");
ЭтоОбработка = ?(СсылкаНаОбъект.ВидОбработки = Перечисления.ВидыДополнительныхВнешнихОбработок.Обработка, Истина, Ложь);
ЭтоОтчет = ?(СсылкаНаОбъект.ВидОбработки = Перечисления.ВидыДополнительныхВнешнихОбработок.Отчет, Истина, Ложь);
Если НЕ (ЭтоОбработка ИЛИ ЭтоОтчет) Тогда
Возврат;
КонецЕсли;
ИмяФайла = ПолучитьИмяВременногоФайла();
ДвоичныеДанные = СсылкаНаОбъект.ХранилищеВнешнейОбработки.Получить();
ДвоичныеДанные.Записать(ИмяФайла);
Попытка
Если ЭтоОбработка Тогда
Форма = ВнешниеОбработки.ПолучитьФорму(ИмяФайла);
Иначе
Форма = ВнешниеОтчеты.ПолучитьФорму(ИмяФайла);
КонецЕсли;
Если Не Форма = Неопределено Тогда
Форма.Открыть();
Иначе
Сообщить("Форма открываемой обработки или отчета не определена.", СтатусСообщения.БезСтатуса);
КонецЕсли;
Исключение
Если ЭтоОбработка Тогда
Предупреждение("Выбранный файл не является внешней обработкой.
|Либо, данная обработка не предназначена для
|запуска в этой конфигурации.");
Иначе
Предупреждение("Выбранный файл не является внешним отчетом.
|Либо, данный отчет не предназначена для
|запуска в этой конфигурации.");
КонецЕсли;
КонецПопытки;
УдалитьФайлы(ИмяФайла);
Спасибо alexk-is за Разукрашку на регулярных выражениях.