MyTetra Share
Делитесь знаниями!
Программно открыть внешнюю обработку
Время создания: 13.09.2016 19:46
Автор: its
Текстовые метки: 1c.client_server
Раздел: Программирование - 1с - client-server
Запись: xintrea/mytetra_anatolean/raw/master/base/1473785165bhhbsikk6w/text.html на bitbucket.org

В версии 8.2 приложение не работает непосредственно с локальными файлами, расположенными на компьютере. Файлы должны находиться на сервере. 

Поэтому для открытия внешней обработки нужно выполнить следующую последовательность действий:

  • Передать файл внешней обработки на сервер
  • Подключить внешнюю обработку
  • Открыть форму внешней обработки

Чтобы передать файл на сервер, его нужно поместить во временное хранилище. Для этого сначала на клиенте, в обработчике команды открытия внешней обработки, методом глобального контекстаПоместитьФайл() мы помещаем файл из локальной файловой системы во временное хранилище.

В четвертом параметре этого метода указывается признак интерактивного режима выбора файла внешней обработки. Если этот параметр Истина, то появляется диалог выбора файла, в котором можно выбрать файл для помещения в хранилище. В нашем примере этот параметр - Ложь, а путь к файлу, данные из которого будут помещены во временное хранилище, явно задан во втором параметре метода.

При вызове метода ПоместитьФайл() первым его параметром, АдресХранилища, мы указываем пустую строку. После выполнения метода в нее будет помещен путь к файлу внешней обработки во временном хранилище. Этот путь мы используем для того, чтобы подключить внешнюю обработку.

Подключение внешней обработки выполняется на сервере методом Подключить() менеджера внешних обработок. В качестве параметра ему передается путь к файлу внешней обработки во временном хранилище - АдресХранилища. Возвращает этот метод имя подключенной внешней обработки, - ИмяОбработки, - которое мы используем для того, чтобы открыть форму этой обработки.

Для открытия формы внешней обработки используется метод глобального контекста ОткрытьФорму(), в который передается имя формы в виде следующей строки: "ВнешняяОбработка."+ ИмяОбработки +".Форма". В приведенном варианте открывается основная форма обработки. Можно открыть также и неосновную форму обработки - об этом рассказывается ниже.

&НаКлиенте

Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)

//Помещаем обработку во временном хранилище

АдресХранилища = "";

Результат = ПоместитьФайл(АдресХранилища, "C:\ВнешняяОбработка.epf", , Ложь);

ИмяОбработки = ПодключитьВнешнююОбработку(АдресХранилища);

// Откроем форму подключенной внешней обработки

ОткрытьФорму("ВнешняяОбработка."+ ИмяОбработки +".Форма");

КонецПроцедуры

&НаСервере

Функция ПодключитьВнешнююОбработку(АдресХранилища)

Возврат ВнешниеОбработки.Подключить(АдресХранилища);

КонецФункции     

При работе в внешними обработками нужно учитывать, что по-умолчанию они запускаются в безопасном режиме исполнения программного кода. Это значит, что некоторые возможности встроенного языка будут для них недоступны. Если есть уверенность, что внешняя обработка не содержит вредоносного кода, ее можно подключить в обычном режиме исполнения программного кода. Для этого используется третий параметр метода Подключить() менеджера внешних обработок.

Подробнее о режиме безопасного исполнения программного кода можно прочитать в документации: 1С:Предприятие 8.2. Руководство разработчика, Раздел 5.5.4.3: Объекты конфигурации - Ветвь конфигурации «Общие» - Роли и права доступа - Безопасный режим работы.

Подробнее об использовании метода ПоместитьФайл() можно прочитать в синтакс-помощнике: Глобальный контекст - Процедуры и функции работы с файлами.

Подробнее об использовании метода Подключить() можно прочитать в синтакс-помощнике: Прикладные объекты - Внешние обработки и отчеты - ВнешниеОбработкиМенеджер - Методы.

Как получить неосновную форму обработки?

Чтобы во встроенном языке получить форму объекта конфигурации можно использовать метод глобального контекста ПолучитьФорму().

Первым параметром в этот метод передается Имя формы. Оно может быть представлено двумя способами:

  • либо как полный путь к объекту конфигурации Форма (например, "Справочник.Контрагенты.Форма.ФормаОбъекта", "ОбщаяФорма.ФормаСохраненияФайла")
  • либо как полный путь к прикладному объекту конфигурации, дополненный именем формы по умолчанию (например, "Справочник.Товары.ФормаВыбора"). 

Таким образом чтобы получить форму, не назначенную основной для обработки, можно использовать первый способ и явно указывать имя нужной формы:

Копировать в буфер обмена

ФормаОбработки = ПолучитьФорму("Обработка.РасчетДанных.Форма.Форма2");      

В данном примере получается форма с именем Форма2 для обработки РасчетДанных.

Если же нужно получить ту форму, которая назначена основной формой обработки, можно использовать второй способ:

Копировать в буфер обмена

ОсновнаяФормаОбработки = ПолучитьФорму("Обработка.РасчетДанных.Форма"); 

Подробнее об использовании метода ПолучитьФорму() можно прочитать в синтакс-помощнике: Глобальный контекст - Процедуры и функции интерактивной работы.

Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования