Как вызвать обработку 1с
Перейти к содержимому

Как вызвать обработку 1с

  • автор:

Как открыть (выполнить) внешнюю обработку программно ?

День добрый. Не подскажите, можно ли обратиться(вызвать, открыть) внешнюю обработку, нажатием на кнопку или ссылку в интерфейсе ?
1С 8.1.
Есть справочник Внешние Обработки (да думаю он у всех есть)), в нем отчеты, выполненные в виде внешних обработок. Открываю, нажимаю Выполнить, открывается форма (уже собственно Обработки), выбираю что надо и т.д.
Вот как можно обратиться к обьекту (это же обьект, да ?) справочника Внешние Обработки, с указаением нужной (например по Наименованию), и без всяких "Выполнить", сразу ее запустить ?
Пыталась вот так:

НаименованиеЭлемента = "Отчет по видам услуг";
Спр = Справочники.ВнешниеОбработки.Выбрать();
//Спр.ПолучитьФорму("ФормаЭлемента",НаименованиеЭлемента).Открыть();
Пока Спр.Следующий() Цикл
//.
спр.ПолучитьОбъект().ПолучитьФорму("ФормаЭлемента",НаименованиеЭлемента).Открыть();
КонецЦикла;

Но не хочет. Все варианты — или норовит СоздатьНовый Обьект Справочника, или упирается в — Выполнить .

спрВО = Справочники.ВнешниеОбработки;
ВидОбработки = Перечисления.ВидыДополнительныхВнешнихОбработок.Отчет;

ВыбраннаяСтрока = спрВО.НайтиПоКоду(Код);
Если ВыбраннаяСтрока = Неопределено Тогда
Предупреждение ("Дополнительный отчет код ‘" + Код + "’ не найден.");
Возврат;
КонецЕсли;

ЭтоОбработка = ?(ВыбраннаяСтрока.ВидОбработки = Перечисления.ВидыДополнительныхВнешнихОбработок.Обработка, Истина, Ложь);
ЭтоОтчет = ?(ВыбраннаяСтрока.ВидОбработки = Перечисления.ВидыДополнительныхВнешнихОбработок.Отчет, Истина, Ложь);

Если Не ЭтоОбработка и Не ЭтоОтчет Тогда
Предупреждение ("Внешний модуль код ‘" + Код + "’ не является дополнительным отчетом или обработкой.");
Возврат;
КонецЕсли;

ИмяФайла = ПолучитьИмяВременногоФайла();
ДвоичныеДанные = ВыбраннаяСтрока.ХранилищеВнешнейОбработки.Получить();
ДвоичныеДанные.Записать(ИмяФайла);

Если ЭтоОбработка Тогда

Если Не Форма = Неопределено Тогда

Если ЭтоОбработка Тогда
ВнешняяОбработка = ВнешниеОбработки.Создать(ИмяФайла);
Иначе
ВнешнийОтчет = ВнешниеОтчеты.Создать(ИмяФайла);
Форма = ВнешнийОтчет.ПолучитьФорму();
Если Форма <> Неопределено Тогда
Форма.Открыть();
КонецЕсли;
КонецЕсли;

Если ЭтоОбработка Тогда

Предупреждение("Выбранный файл не является внешней обработкой.
|Либо, данная обработка не предназначена для
|запуска в этой конфигурации.");
Иначе
Предупреждение("Выбранный файл не является внешним отчетом.
|Либо, данный отчет не предназначена для
|запуска в этой конфигурации.");
КонецЕсли;

1С 8.2 УП : Как программно открыть обработку с передачей параметра?

А вот открыть форму обработки с передачей параметров:

А в форме обработки, которую открыли, эта ссылка будет доступна через коллекцию "Параметры".
Т.е. так: Код 1C v 8.2 УП

В обработчике ПриСозданииНаСервере() можно проверить наличие переданных параметров с помощью
Код 1C v 8.2 УП

Внимание! : Параметры формы доступны только в событии формы "ПриСозданииНаСервере". Т.е. в других процедурах ты с этой ссылкой работать не получится!

Тут два варианта:
1) Создать реквизит формы, допустим, с именем "СсылкаНаДокумент". И в событии "ПриСозданииНаСервере" заполнить этот реквизит.
Код 1C v 8.2 УП
И дальше уже работать с ним.

2) Создать не реквизит формы, а параметр (закладка "Параметры" — там же рядом с закладками "Реквизиты" и "Команды"). Назвать его надо будет так же, как ключ структуры, используемый в коде открытия формы (в моем примере — "ДокСсылка"). И в свойствах этого параметра установить флаг "Ключевой параметр". Тогда к этому параметру можно будет обращаться так, как я писал выше — Параметры.ДокСсылка
Но уже не только в событии "ПриСозданииНаСервере", а в любой процедуре модуля формы.

Программный запуск зарегистрированной внешней обработки или отчёта

Если у вас в базе имеются зарегистрированные внешние обработки или отчёты, то иногда может возникнуть необходимость запускать их программно. Например, открыть внешний отчёт при нажатии на кнопку в интерфейсе пользователя.

Предлагаю универсальную процедуру для открытия внешних обработок/отчетов по коду элемента справочника ВнешниеОбработки.

Данную процедуру можно поместить в общий модуль и вызывать при необходимости из любого модуля конфигурации.

Как программно открыть внешнюю обработку?

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

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

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

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

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

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

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

Для открытия формы внешней обработки используется функция ОткрытьФорму(), в которую передается имя формы в виде следующей строки: «ВнешняяОбработка.»+ ИмяОбработки +».Форма». В приведенном варианте открывается основная форма обработки. Можно открыть также и неосновную форму обработки — об этом рассказывается в вопросе Как получить неосновную форму обработки? .

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

Подробнее о режиме безопасного исполнения программного кода можно прочитать в документации:

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

Глобальный контекст — Процедуры и функции работы с файлами.

Подробнее об использовании метода Подключить() можно прочитать в синтакс-помощнике:

Прикладные объекты — Внешние обработки и отчеты — ВнешниеОбработкиМенеджер — Методы.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *