Как открыть (выполнить) внешнюю обработку программно ?
День добрый. Не подскажите, можно ли обратиться(вызвать, открыть) внешнюю обработку, нажатием на кнопку или ссылку в интерфейсе ?
1С 8.1.
Есть справочник Внешние Обработки (да думаю он у всех есть)), в нем отчеты, выполненные в виде внешних обработок. Открываю, нажимаю Выполнить, открывается форма (уже собственно Обработки), выбираю что надо и т.д.
Вот как можно обратиться к обьекту (это же обьект, да ?) справочника Внешние Обработки, с указаением нужной (например по Наименованию), и без всяких "Выполнить", сразу ее запустить ?
Пыталась вот так:
НаименованиеЭлемента = "Отчет по видам услуг";
Спр = Справочники.ВнешниеОбработки.Выбрать();
//Спр.ПолучитьФорму("ФормаЭлемента",НаименованиеЭлемента).Открыть();
Пока Спр.Следующий() Цикл
//.
спр.ПолучитьОбъект().ПолучитьФорму("ФормаЭлемента",НаименованиеЭлемента).Открыть();
КонецЦикла;
Но не хочет. Все варианты — или норовит СоздатьНовый Обьект Справочника, или упирается в — Выполнить .
спрВО = Справочники.ВнешниеОбработки;
ВидОбработки = Перечисления.ВидыДополнительныхВнешнихОбработок.Отчет;
ВыбраннаяСтрока = спрВО.НайтиПоКоду(Код);
Если ВыбраннаяСтрока = Неопределено Тогда
Предупреждение ("Дополнительный отчет код ‘" + Код + "’ не найден.");
Возврат;
КонецЕсли;
ЭтоОбработка = ?(ВыбраннаяСтрока.ВидОбработки = Перечисления.ВидыДополнительныхВнешнихОбработок.Обработка, Истина, Ложь);
ЭтоОтчет = ?(ВыбраннаяСтрока.ВидОбработки = Перечисления.ВидыДополнительныхВнешнихОбработок.Отчет, Истина, Ложь);
Если Не ЭтоОбработка и Не ЭтоОтчет Тогда
Предупреждение ("Внешний модуль код ‘" + Код + "’ не является дополнительным отчетом или обработкой.");
Возврат;
КонецЕсли;
ИмяФайла = ПолучитьИмяВременногоФайла();
ДвоичныеДанные = ВыбраннаяСтрока.ХранилищеВнешнейОбработки.Получить();
ДвоичныеДанные.Записать(ИмяФайла);
Если ЭтоОбработка Тогда
Если Не Форма = Неопределено Тогда
Если ЭтоОбработка Тогда
ВнешняяОбработка = ВнешниеОбработки.Создать(ИмяФайла);
Иначе
ВнешнийОтчет = ВнешниеОтчеты.Создать(ИмяФайла);
Форма = ВнешнийОтчет.ПолучитьФорму();
Если Форма <> Неопределено Тогда
Форма.Открыть();
КонецЕсли;
КонецЕсли;
Если ЭтоОбработка Тогда
Предупреждение("Выбранный файл не является внешней обработкой.
|Либо, данная обработка не предназначена для
|запуска в этой конфигурации.");
Иначе
Предупреждение("Выбранный файл не является внешним отчетом.
|Либо, данный отчет не предназначена для
|запуска в этой конфигурации.");
КонецЕсли;
1С 8.2 УП : Как программно открыть обработку с передачей параметра?
А вот открыть форму обработки с передачей параметров:
А в форме обработки, которую открыли, эта ссылка будет доступна через коллекцию "Параметры".
Т.е. так: Код 1C v 8.2 УП
В обработчике ПриСозданииНаСервере() можно проверить наличие переданных параметров с помощью
Код 1C v 8.2 УП
Внимание! : Параметры формы доступны только в событии формы "ПриСозданииНаСервере". Т.е. в других процедурах ты с этой ссылкой работать не получится!
Тут два варианта:
1) Создать реквизит формы, допустим, с именем "СсылкаНаДокумент". И в событии "ПриСозданииНаСервере" заполнить этот реквизит.
Код 1C v 8.2 УП
И дальше уже работать с ним.
2) Создать не реквизит формы, а параметр (закладка "Параметры" — там же рядом с закладками "Реквизиты" и "Команды"). Назвать его надо будет так же, как ключ структуры, используемый в коде открытия формы (в моем примере — "ДокСсылка"). И в свойствах этого параметра установить флаг "Ключевой параметр". Тогда к этому параметру можно будет обращаться так, как я писал выше — Параметры.ДокСсылка
Но уже не только в событии "ПриСозданииНаСервере", а в любой процедуре модуля формы.
Программный запуск зарегистрированной внешней обработки или отчёта
Если у вас в базе имеются зарегистрированные внешние обработки или отчёты, то иногда может возникнуть необходимость запускать их программно. Например, открыть внешний отчёт при нажатии на кнопку в интерфейсе пользователя.
Предлагаю универсальную процедуру для открытия внешних обработок/отчетов по коду элемента справочника ВнешниеОбработки.
Данную процедуру можно поместить в общий модуль и вызывать при необходимости из любого модуля конфигурации.
Как программно открыть внешнюю обработку?
В версии 8.2 приложение не работает непосредственно с локальными файлами, расположенными на компьютере. Файлы должны находиться на сервере.
Поэтому для открытия внешней обработки нужно выполнить следующую последовательность действий:
- передать файл внешней обработки на сервер,
- подключить внешнюю обработку,
- открыть форму внешней обработки.
Чтобы передать файл на сервер, его нужно поместить во временное хранилище. Для этого сначала на клиенте, в обработчике команды открытия внешней обработки, функцией ПоместитьФайл() мы помещаем файл из локальной файловой системы во временное хранилище.
В четвертом параметре этой функции указывается признак интерактивного режима выбора файла внешней обработки. Если этот параметр Истина, то появляется диалог выбора файла, в котором можно выбрать файл для помещения в хранилище. В нашем примере этот параметр — Ложь, а путь к файлу, данные из которого будут помещены во временное хранилище, явно задан во втором параметре функции.
При вызове функции ПоместитьФайл() первым её параметром, АдресХранилища, мы указываем пустую строку. После выполнения функции в эту переменную будет помещен путь к файлу внешней обработки во временном хранилище. Этот путь мы используем для того, чтобы подключить внешнюю обработку.
Подключение внешней обработки выполняется на сервере методом Подключить() менеджера внешних обработок. В качестве параметра ему передается путь к файлу внешней обработки во временном хранилище — АдресХранилища. Возвращает этот метод имя подключенной внешней обработки, — ИмяОбработки, — которое мы используем для того, чтобы открыть форму этой обработки.
Для открытия формы внешней обработки используется функция ОткрытьФорму(), в которую передается имя формы в виде следующей строки: «ВнешняяОбработка.»+ ИмяОбработки +».Форма». В приведенном варианте открывается основная форма обработки. Можно открыть также и неосновную форму обработки — об этом рассказывается в вопросе Как получить неосновную форму обработки? .
При работе в внешними обработками нужно учитывать, что по-умолчанию они запускаются в безопасном режиме исполнения программного кода. Это значит, что некоторые возможности встроенного языка будут для них недоступны. Если есть уверенность, что внешняя обработка не содержит вредоносного кода, ее можно подключить в обычном режиме исполнения программного кода. Для этого используется третий параметр метода Подключить() менеджера внешних обработок.
Подробнее о режиме безопасного исполнения программного кода можно прочитать в документации:
Подробнее об использовании функции ПоместитьФайл() можно прочитать в синтакс-помощнике:
Глобальный контекст — Процедуры и функции работы с файлами.
Подробнее об использовании метода Подключить() можно прочитать в синтакс-помощнике:
Прикладные объекты — Внешние обработки и отчеты — ВнешниеОбработкиМенеджер — Методы.