Как программно открыть внешнюю обработку?От себя так же хочу добавить, что у объекта ВнешняяОбработкаОбъект, есть свойство ИспользуемоеИмяФайла, доступное в контексте сервера. Тоже может пригодиться.
В версии 8.2 приложение не работает непосредственно с локальными файлами, расположенными на компьютере. Файлы должны находиться на сервере.
Поэтому для открытия внешней обработки нужно выполнить следующую последовательность действий:
- Передать файл внешней обработки на сервер
- Подключить внешнюю обработку
- Открыть форму внешней обработки
Чтобы передать файл на сервер, его нужно поместить во временное хранилище. Для этого сначала на клиенте, в обработчике команды открытия внешней обработки, методом глобального контекста ПоместитьФайл() мы помещаем файл из локальной файловой системы во временное хранилище.
В четвертом параметре этого метода указывается признак интерактивного режима выбора файла внешней обработки. Если этот параметр Истина, то появляется диалог выбора файла, в котором можно выбрать файл для помещения в хранилище. В нашем примере этот параметр - Ложь, а путь к файлу, данные из которого будут помещены во временное хранилище, явно задан во втором параметре метода.
При вызове метода ПоместитьФайл() первым его параметром, АдресХранилища, мы указываем пустую строку. После выполнения метода в нее будет помещен путь к файлу внешней обработки во временном хранилище. Этот путь мы используем для того, чтобы подключить внешнюю обработку.
Подключение внешней обработки выполняется на сервере методом Подключить() менеджера внешних обработок. В качестве параметра ему передается путь к файлу внешней обработки во временном хранилище - АдресХранилища. Возвращает этот метод имя подключенной внешней обработки, - ИмяОбработки, - которое мы используем для того, чтобы открыть форму этой обработки.
Для открытия формы внешней обработки используется метод глобального контекста ОткрытьФорму(), в который передается имя формы в виде следующей строки: "ВнешняяОбработка."+ ИмяОбработки +".Форма". В приведенном варианте открывается основная форма обработки. Можно открыть также и неосновную форму обработки - об этом рассказывается в вопросе "Как получить неосновную форму обработки?"
&НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) //Помещаем обработку во временном хранилище АдресХранилища = ""; Результат = ПоместитьФайл(АдресХранилища, "C:\ВнешняяОбработка.epf", , Ложь); ИмяОбработки = ПодключитьВнешнююОбработку(АдресХранилища); // Откроем форму подключенной внешней обработки ОткрытьФорму("ВнешняяОбработка."+ ИмяОбработки +".Форма"); КонецПроцедуры &НаСервере Функция ПодключитьВнешнююОбработку(АдресХранилища) Возврат ВнешниеОбработки.Подключить(АдресХранилища); КонецФункции
При работе с внешними обработками нужно учитывать, что по-умолчанию они запускаются в безопасном режиме исполнения программного кода. Это значит, что некоторые возможности встроенного языка будут для них недоступны. Если есть уверенность, что внешняя обработка не содержит вредоносного кода, ее можно подключить в обычном режиме исполнения программного кода. Для этого используется третий параметр метода Подключить() менеджера внешних обработок.
- Подробнее о режиме безопасного исполнения программного кода можно прочитать в документации: 1С:Предприятие 8.2. Руководство разработчика, Раздел 5.5.4.3: Объекты конфигурации - Ветвь конфигурации «Общие» - Роли и права доступа - Безопасный режим работы.
- Подробнее об использовании метода ПоместитьФайл() можно прочитать в синтакс-помощнике: Глобальный контекст - Процедуры и функции работы с файлами.
- Подробнее об использовании метода Подключить() можно прочитать в синтакс-помощнике: Прикладные объекты - Внешние обработки и отчеты - ВнешниеОбработкиМенеджер - Методы.
пятница, 3 августа 2012 г.
Открыть форму внешней обработки. Памятка.
Небольшая памятка c ИТС и сайта 1c-galaxy.ru
Подписаться на:
Комментарии к сообщению (Atom)
2 комментария:
Мне как не-1Снику не понятно. Ты здесь описываешь способ как обойти одно из правил в системе (1С). А правило было создано для защиты от "дурака".
Может будет лучше для всех не файл копировать, а выполнить его предварительную обработку, например, разложить текстовый файл по строкам и затолкать его в SQL таблицу? Это будет полезней чем переливание из пустого в порожнее...
Это штатный, прямой способ, рекомендуемый фирмой 1С.
Процедура Подключить() как раз и делает то, что ты описываешь - раскладывает, заталкивает в таблицу (ну условно) и пр. Только лучше, чем это все я сам делал бы руками.
А правило было создано не для "защиты от дурака", а в связи с архитектурой сильно разделившейся на клиент-серверную.
Смысл примерно такой, как если бы сайт позволял выполнять пользовательские PHP-скрипты. Такие скрипты не могли бы быть исполнены на клиенте в броузере, а потребовалось бы сначала залить их на сервер, где есть необходимое окружение, как самого сайта, так и интерпретатора PHP и т.д.
Отправить комментарий
Примечание. Отправлять комментарии могут только участники этого блога.