Программное открытие внешней обработки осуществляется с помощью объекта глобального контекста ВнешниеОбработки, который имеет тип ВнешниеОбработкиМенеджер . Для каждого режима работы платформы 1С (режим обычного приложения и режим управляемого приложения) используются различные методы объекта для работы с внешними обработками.

Запуск внешней обработки в режиме обычного приложения

В обычном приложении необходимо использовать метод Создать() объекта ВнешниеОбработки, в который передается полное имя файла внешней обработки. Метод возвращает объект типа ВнешняяОбработка , этот объект и есть открываемая внешняя обработка. Если требуется открыть форму внешней обработки, то у полученного объекта вызываем метод ПолучитьФорму(), который вернет основную форму, а затем вызываем метод Открыть() для её открытия.


Обработка = ВнешниеОбработки.Создать(ПолноеИмяФайла);
Обработка.ПолучитьФорму().Открыть();

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

Запуск внешней обработки в режиме управляемого приложения

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

&НаСервере
Функция ПолучитьИмяВнешнейОбработки(ДвоичныеДанные)
АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные);
Возврат ВнешниеОбработки.Подключить(АдресВоВременномХранилище);
КонецФункции

&НаКлиенте
ПолноеИмяФайла = ""; // Полное имя файла внешней обработки.
ДанныеФайла = Новый ДвоичныеДанные(ПолноеИмяФайла);
ИмяВнешнейОбработки = ПолучитьИмяВнешнейОбработки(ДанныеФайла);
ОткрытьФорму("ВнешняяОбработка." + ИмяВнешнейОбработки + ".Форма");

Безопасный режим для внешних обработок

Методы Создать() и Подключить() объекта ВнешниеОбработки имеют входящий параметр БезопасныйРежим - признак подключения внешней обработки в безопасном режиме. Если параметр не указан, подключение будет осуществлено в безопасном режиме.
Безопасный режим работы предназначен для защиты системы от выполнения на сервере «ненадежного» программного кода. Потенциальную опасность представляют внешние обработки или программный код, вводимый пользователем для использования в методах Выполнить() и Вычислить().
В безопасном режиме накладываются следующие ограничения:
  • привилегированный режим отменяется, если он был установлен;
  • попытки перехода в привилегированный режим игнорируются;
  • запрещены операции с COM-объектами;
  • запрещена загрузка и подключение внешних компонентов;
  • запрещен доступ к файловой системе (кроме временных файлов);
  • запрещен доступ к Интернету.
Обработки, открытые интерактивно, выполняются не в безопасном режиме, поэтому рекомендуется реализация механизма открытия внешних обработок в безопасном режиме, а так же на уровне прав запретить пользователю интерактивное открытие внешних обработок.
Для запрета интерактивного открытия обработок, во всех ролях, назначенных пользователю, необходимо снять право "Интерактивное открытие внешних обработок" (см. рисунок 1).
Рисунок 1. Права интерактивного открытия внешних обработок/отчетов
Право "Интерактивное открытие внешних обработок" никак не влияет на объект ВнешниеОбработки.

Программное открытие внешних отчетов, аналогично внешним обработкам, только следует использовать объект глобального контекста ВнешниеОтчеты, который имеет тип ВнешниеОтчетыМенеджер .

В версии 8.3.9.2170 была усилена безопасность - теперь система запрашивает подтверждение на запуск внешних обработок, расширений и прочее. Видимо после трояна:

Реализован механизм защиты от опасных действий. При выполнении потенциально опасного действия система выдает предупреждение, содержащее информацию о выполняемом действии и потенциальной опасности этого действия. К потенциально опасным действиям относятся:

  • Загрузка внешнего отчета, обработки или расширения конфигурации.
  • Загрузка или обновление конфигурации/расширения.
  • Доступ из внешнего отчета/обработки или расширения к следующим возможностям:
  • Исполнение команды операционной системы.
  • Управление пользователями.

Пользователь имеет возможность разрешить или отклонить потенциально опасное действие. Если действие разрешено, в ряде случаев может потребоваться повторно выполнить разрешенное действие.

Сообщение выглядит так:

Предупреждение безопасности

Открывается "" из файла " C:\.......epf". Рекомендуется обращать внимание на источник, из которого был получен данный файл. Если с источником нет договоренности о разработке дополнительных модулей, или есть сомнения в содержимом файла, то его не рекомендуется открывать, поскольку это может нанести вред компьютеру и данным. Разрешить открывать данный файл. ДА, НЕТ

Решение:

В конфигураторе в свойствах пользователя ИБ убрать флажок "Защита от опасных действий".

Из документации: Отключение механизма защиты от опасных действий

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

1. Выключить флажок Защита от опасных действий (ЗащитаОтОпасныхДействий) в свойствах конкретного пользователя. Это отключит защиту для этого пользователя.

2. Воспользоваться параметром ЗащитаОтОпасныхДействий методов Подключить() менеджеров внешних обработок (отчетов). В этом случае имеется возможность загрузить внешнюю обработку (отчет) без запросов пользователя.

3. Воспользоваться свойством ЗащитаОтОпасныхДействий объекта РасширениеКонфигурации перед вызовом метода Записать() этого объекта.

4. Воспользоваться параметром DisableUnsafeActionProtection файла conf.cfg. В этом случае механизм защиты от опасных действий будет отключаться для всех пользователей информационных баз, строки соединения которых удовлетворяют указанным маскам.

Отключение защиты от опасных действий выполняется по следующим правилам (в указанном порядке):

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

2. Защита считается отключенной, если строка соединения с информационной базой удовлетворяет одному из шаблонов, указанных в параметре DisableUnsafeActionProtection файла conf.cfg.

3. Если внешняя обработка (отчет) подключается с явным образом отключенной защитой с помощью параметра ЗащитаОтОпасныхДействий.

4. Если защита явным образом отключена с помощью свойства расширения ЗащитаОтОпасныхДействий.

Программное открытие внешней обработки осуществляется с помощью объекта глобального контекста ВнешниеОбработки, который имеет тип ВнешниеОбработкиМенеджер . Для каждого режима работы платформы 1С (режим обычного приложения и режим управляемого приложения) используются различные методы объекта для работы с внешними обработками.

Запуск внешней обработки в режиме обычного приложения

В обычном приложении необходимо использовать метод Создать() объекта ВнешниеОбработки, в который передается полное имя файла внешней обработки. Метод возвращает объект типа ВнешняяОбработка , этот объект и есть открываемая внешняя обработка. Если требуется открыть форму внешней обработки, то у полученного объекта вызываем метод ПолучитьФорму(), который вернет основную форму, а затем вызываем метод Открыть() для её открытия.


Обработка = ВнешниеОбработки.Создать(ПолноеИмяФайла);
Обработка.ПолучитьФорму().Открыть();

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

Запуск внешней обработки в режиме управляемого приложения

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

&НаСервере
Функция ПолучитьИмяВнешнейОбработки(ДвоичныеДанные)
АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные);
Возврат ВнешниеОбработки.Подключить(АдресВоВременномХранилище);
КонецФункции

&НаКлиенте
ПолноеИмяФайла = ""; // Полное имя файла внешней обработки.
ДанныеФайла = Новый ДвоичныеДанные(ПолноеИмяФайла);
ИмяВнешнейОбработки = ПолучитьИмяВнешнейОбработки(ДанныеФайла);
ОткрытьФорму("ВнешняяОбработка." + ИмяВнешнейОбработки + ".Форма");

Безопасный режим для внешних обработок

Методы Создать() и Подключить() объекта ВнешниеОбработки имеют входящий параметр БезопасныйРежим - признак подключения внешней обработки в безопасном режиме. Если параметр не указан, подключение будет осуществлено в безопасном режиме.
Безопасный режим работы предназначен для защиты системы от выполнения на сервере «ненадежного» программного кода. Потенциальную опасность представляют внешние обработки или программный код, вводимый пользователем для использования в методах Выполнить() и Вычислить().
В безопасном режиме накладываются следующие ограничения:
  • привилегированный режим отменяется, если он был установлен;
  • попытки перехода в привилегированный режим игнорируются;
  • запрещены операции с COM-объектами;
  • запрещена загрузка и подключение внешних компонентов;
  • запрещен доступ к файловой системе (кроме временных файлов);
  • запрещен доступ к Интернету.
Обработки, открытые интерактивно, выполняются не в безопасном режиме, поэтому рекомендуется реализация механизма открытия внешних обработок в безопасном режиме, а так же на уровне прав запретить пользователю интерактивное открытие внешних обработок.
Для запрета интерактивного открытия обработок, во всех ролях, назначенных пользователю, необходимо снять право "Интерактивное открытие внешних обработок" (см. рисунок 1).
Рисунок 1. Права интерактивного открытия внешних обработок/отчетов
Право "Интерактивное открытие внешних обработок" никак не влияет на объект ВнешниеОбработки.

Программное открытие внешних отчетов, аналогично внешним обработкам, только следует использовать объект глобального контекста ВнешниеОтчеты, который имеет тип ВнешниеОтчетыМенеджер .

При запуске программы Загрузка документов под обычным пользователем возникает ошибка "Установлен безопасный режим. Выполнение операции запрещено".

Эта сложность возникает т.к. для запуска внешней обработки недостаточно прав. Для настройки прав доступа зайдите в базу в режиме 1С Предприятие от имени Администратора и перейдите в раздел Настройки пользователей и прав / Профили групп доступа, нажмите Создать группу.

Введите название группы и отметьте галочками доступные пользователям этой группы роли -

  • Интерактивное открытие внешних отчетов и обработок
  • Использование дополнительных отчетов и обработок

Нажмите Записать и закрыть


Вернитесь в меню Пользователи и выберите из списка сотрудника, который будет работать с программой Загрузка документов. Нажмите Права доступа. В списке профилей отметьте созданный ранее профиль. Нажмите Записать .


Чтобы пользователи могли запустить обработку рекомендуется добавить Загрузку документов к списку внешних обработок. Для этого в меню Администрирование / Печатные формы и обработки / Дополнительные отчеты и обработки создайте новую обработку. Укажите путь к файлу "ЗагрузкаДокументов.epf" и присвойте имя. Укажите размещение обработки в меню, откуда пользователь сможет запустить ее в дальнейшем, например выберите меню Справочники

Нажав на пункт Быстрый доступ вы указываете, кому из пользователей доступна обработка:


После настройки нажмите Записать и закрыть . Для запуска обработки пользователям достаточно будет заново зайти в базу и открыть ее из меню доступа (в примере - Справочники) и нажать Выполнить .


Откройте Меню - Все функции.. . и найдите в списке параметр "Используются профили безопасности" .


Достаточно снять флаг с опции "Используются профили безопасности".


После этого программа будет запускаться успешно.

Печать (Ctrl+P)

Объекты конфигурации

В случае необходимости использования на сервере «ненадежного» программного кода: внешние обработки или программный код, вводимый пользователем для использования в методах Выполнить() и Вычислить(), можно воспользоваться безопасным режимом работы.

В безопасном режиме:

  • Привилегированный режим отменяется .
  • Переход в привилегированный режим игнорируется .
  • Запрещены операции, приводящие к использованию внешних средств по отношению к платформе «1С:Предприятие» (включая неблокирующие аналоги указанных методов):
  • Механизмы COM:
    • COMОбъект();
    • ПолучитьCOMОбъект();
    • ОболочкаHTMLДокумента.ПолучитьCOMОбъект().
  • Загрузка внешних компонентов:
    • ЗагрузитьВнешнююКомпоненту();
    • ПодключитьВнешнююКомпоненту().
  • Доступ к файловой системе:
    • ЗначениеВФайл();
    • КопироватьФайл();
    • ОбъединитьФайлы();
    • ПереместитьФайл();
    • РазделитьФайл();
    • СоздатьКаталог();
    • УдалитьФайлы();
    • Новый Файл;
    • Новый xBase;
    • ЗаписьHTML.ОткрытьФайл();
    • ЧтениеHTML.ОткрытьФайл();
    • ЧтениеXML.ОткрытьФайл();
    • ЗаписьXML.ОткрытьФайл();
    • ЧтениеFastInfoset.ОткрытьФайл();
    • ЗаписьFastInfoset.ОткрытьФайл();
    • КаноническаяЗаписьXML.ОткрытьФайл();
    • ПреобразованиеXSL.ЗагрузитьИзФайла();
    • ЗаписьZipФайла.Открыть();
    • ЧтениеZipФайла.Открыть();
    • Новый ЧтениеТекста(), если первый параметр ‑ строка;
    • ЧтениеТекста.Открыть(), если первый параметр ‑ строка;
    • Новый ЗаписьТекста(), если первый параметр ‑ строка;
    • ЗаписьТекста.Открыть(), если первый параметр ‑ строка;
    • Новый ИзвлечениеТекста();
    • изменение свойства ИзвлечениеТекста.ИмяФайла;
    • ИзвлечениеТекста.Записать();
    • Новый Картинка(), если первый параметр ‑ строка;
    • Картинка.Записать();
    • Новый ДвоичныеДанные();
    • ДвоичныеДанные.Записать();
    • Новый ЗаписьДанных(), если первый параметр ‑ строка;
    • Новый ЧтениеДанных(), есть первый параметр ‑ строка;
    • все методы объекта МенеджерФайловыхПотоков;
    • Новый ФайловыйПоток();
    • ФорматированныйДокумент.Записать();
    • ГеографическаяСхема.Прочитать();
    • ГеографическаяСхема.Записать();
    • ГеографическаяСхема.Напечатать();
    • ТабличныйДокумент.Прочитать();
    • ТабличныйДокумент.Записать();
    • ТабличныйДокумент.Напечатать(); ГрафическаяСхема.Прочитать();
    • ГрафическаяСхема.Записать();
    • ГрафическаяСхема.Напечатать();
    • ТекстовыйДокумент.Прочитать();
    • ТекстовыйДокумент.Записать().
  • Доступ к Интернету:
    • Новый ИнтернетСоединение,
    • Новый ИнтернетПочта,
    • Новый ИнтернетПрокси,
    • Новый HTTPСоединение,
    • Новый FTPСоединение.

ВНИМАНИЕ! При выполнении запрещенных операций во время выполнения генерирует исключение.

Примечание. Внешние отчеты и обработки, открываемые с помощью меню Файл ‑ Открыть, выполняются в безопасном режиме, если у пользователя отсутствуют административные права доступа.

Количество включений безопасного режима должно совпадать с количеством выключений. Однако если внутри процедуры или функции происходило включение безопасного режима (один раз или более), но не происходило его выключение, то система автоматически выполнит выключение столько раз, сколько незавершенных включений было в покидаемой процедуре или функции.

Если в процедуре или функции вызовов метода УстановитьБезопасныйРежим(Ложь) сделано больше, чем вызовов метода УстановитьБезопасныйРежим(Истина) , то будет вызвано исключение.

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

// Формируется программный код, который следует исполнить // Возможно, что код загружается из внешних источников // или введен вручную ИсполняемыйКод = ПолучитьВыполняемыйКодИзВнешнегоМира(); // Включим безопасный режим УстановитьБезопасныйРежим(Истина); // Выполним потенциально опасный код Выполнить(ИсполняемыйКод); // Выключим безопасный режим УстановитьБезопасныйРежим(Ложь);

В некоторых случаях настройки безопасного режима могут конфликтовать с настройками привилегированного режима. Примером такого конфликта выступает проведение документа, для которого установлено свойство Привилегированный режим при проведении, из кода на встроенном языке, который выполняется в безопасном режиме. В этом случае привилегированный режим отключается, а попытки его включить игнорируются. В результате код на встроенном языке, который «рассчитывает» на включенный привилегированный режим, «сталкивается» с его отсутствием, что приводит к возникновению ошибок с неочевидными причинами появления. Для предотвращения такой ситуации, система «1С:Предприятие» автоматически отключает безопасный режим для обработчиков событий, которые доступны в модуле объекта или модуле менеджера, при условии, что исполняемый код на встроенном языке не располагается в расширении конфигурации. Такие обработчики отмечаются в синтакс-помощнике особым образом.

Также предоставляется возможность отключить безопасный режим из встроенного языка (если программный код, из которого выполняется попытка отключения, не находится в расширении конфигурации). Для отключения безопасного режима предназначен метод УстановитьОтключениеБезопасногоРежима() . Проверить, что безопасный режим в данный момент отключен (автоматически или с помощью вызова метода), можно с помощью метода ПолучитьОтключениеБезопасногоРежима().

В рамках одного метода на встроенном языке не может быть более одного уровня вложенности установки безопасного режима (вызовом метода УстановитьБезопасныйРежим()) и установки отключения безопасного режима (автоматически на время выполнения обработчиков событий объектов метаданных или вызовом метода УстановитьОтключениеБезопасногоРежима()). При попытке увеличить вложенность генерируется исключение:

// Корректное использование Процедура ИмяПроцедуры() УстановитьОтключениеБезопасногоРежима(Истина); УстановитьБезопасныйРежим(Истина); УстановитьБезопасныйРежим(Ложь); УстановитьОтключениеБезопасногоРежима(Ложь); КонецПроцедуры // Некорректное использование Процедура ИмяПроцедуры() УстановитьОтключениеБезопасногоРежима(Истина); УстановитьБезопасныйРежим(Истина); УстановитьОтключениеБезопасногоРежима(Ложь); // Исключение КонецПроцедуры Процедура ИмяПроцедуры() УстановитьБезопасныйРежим(Истина); УстановитьОтключениеБезопасногоРежима(Ложь); // Исключение КонецПроцедуры


Close