Программное открытие внешней обработки осуществляется с помощью объекта глобального контекста ВнешниеОбработки, который имеет тип ВнешниеОбработкиМенеджер . Для каждого режима работы платформы 1С (режим обычного приложения и режим управляемого приложения) используются различные методы объекта для работы с внешними обработками.
Запуск внешней обработки в режиме обычного приложения
В обычном приложении необходимо использовать метод Создать() объекта ВнешниеОбработки, в который передается полное имя файла внешней обработки. Метод возвращает объект типа ВнешняяОбработка , этот объект и есть открываемая внешняя обработка. Если требуется открыть форму внешней обработки, то у полученного объекта вызываем метод ПолучитьФорму(), который вернет основную форму, а затем вызываем метод Открыть() для её открытия.Обработка = ВнешниеОбработки.Создать(ПолноеИмяФайла);
Обработка.ПолучитьФорму().Открыть();
Во внешних обработках основной формой всегда должна быть обычная, а управляемая дополнительной, иначе не будет работать метод ПолучитьФорму() в режиме обычном приложения.
Запуск внешней обработки в режиме управляемого приложения
В режиме управляемых форм появляется разделение алгоритма по контексту выполнения. На клиенте получаем двоичные данные по полному имени файла внешней обработки. Передаем полученные двоичные данные на сервер и помещаем их во временное хранилище. Далее необходимо вызвать метод Подключить() объекта ВнешниеОбработки, в который передается адрес на временное хранилище. Метод возвращает имя подключенной внешней обработки. Возвращаем имя внешней обработки на клиент, формируем строковый путь к форме обработки и с помощью метода ОткрытьФорму() открываем форму внешней обработки.
&НаСервере
Функция ПолучитьИмяВнешнейОбработки(ДвоичныеДанные)
АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные);
Возврат ВнешниеОбработки.Подключить(АдресВоВременномХранилище);
КонецФункции
&НаКлиенте
ПолноеИмяФайла = ""; // Полное имя файла внешней обработки.
ДанныеФайла = Новый ДвоичныеДанные(ПолноеИмяФайла);
ИмяВнешнейОбработки = ПолучитьИмяВнешнейОбработки(ДанныеФайла);
ОткрытьФорму("ВнешняяОбработка." + ИмяВнешнейОбработки + ".Форма");
Безопасный режим для внешних обработок
Методы Создать() и Подключить() объекта ВнешниеОбработки имеют входящий параметр БезопасныйРежим - признак подключения внешней обработки в безопасном режиме. Если параметр не указан, подключение будет осуществлено в безопасном режиме.Безопасный режим работы предназначен для защиты системы от выполнения на сервере «ненадежного» программного кода. Потенциальную опасность представляют внешние обработки или программный код, вводимый пользователем для использования в методах Выполнить() и Вычислить().
В безопасном режиме накладываются следующие ограничения:
- привилегированный режим отменяется, если он был установлен;
- попытки перехода в привилегированный режим игнорируются;
- запрещены операции с COM-объектами;
- запрещена загрузка и подключение внешних компонентов;
- запрещен доступ к файловой системе (кроме временных файлов);
- запрещен доступ к Интернету.
Для запрета интерактивного открытия обработок, во всех ролях, назначенных пользователю, необходимо снять право "Интерактивное открытие внешних обработок" (см. рисунок 1).
Рисунок 1. Права интерактивного открытия внешних обработок/отчетов |
Программное открытие внешних отчетов, аналогично внешним обработкам, только следует использовать объект глобального контекста ВнешниеОтчеты, который имеет тип ВнешниеОтчетыМенеджер .
Дело в том что при использовании клиент-серверного варианта работы 1С внешние обработки/отчеты открываются в безопасном режиме, в котором запрещено использование привилегированного режима. А привилегированный режим используется очень часто в типовых конфигурациях: формирование печатных форм, различные служебные проверки (регистрация обменов) и т.д. В результате, даже используя обычный отчет на СКД без формы (по умолчанию используется общая форма "ФормаОтчета") и сохраняя пользовательские настройки отчета (в соответствующий справочник), вы получите ошибку о недостаточности прав доступа на различные константы и параметры сеанса, используемые в служебных целях после строки УстановитьПривилегированныйРежим(Истина) ;
"Правильным" решением будет подключение внешних обработок и отчетов через механизмы БСП "Дополнительные отчеты и обработки" с отключением безопасного режима либо добавлением разрешений (по-моему, с версии БСП 2.2.2.1). Но если по каким-то причинам необходимо использование именно внешних файлов отчетов/обработок, то можно настроить профиль безопасности кластера, используемого в качестве профиля безопасности безопасного режима для конкретной информационной базы.
Хотел бы сразу заметить, что такой вариант не является предпочтительным, но в силу разных обстоятельств можно его использовать в таком упрощенном виде. Например, у меня несколько баз в разных городах, общая локальная сесть с жёстко ограниченными правами, закрытыми USB и т.п., где-то используется Бухгалтерия 2.0, а где-то 3.0, почти все отчеты делаю средствами СКД без форм, что бы они открывались в обоих версиях. Обслуживать все эти отчеты для разных версий и разных баз дело трудоёмкое и бесперспективное, т.к. в планах есть переход на единую конфигурацию и базу...
Создаем профиль.
В консоли кластера создаём профиль безопасности, в котором устанавливаем флаги "Может использоваться как профиль безопасности безопасного режима"
и " в разделе "Разрешен полный доступ:" "к привилегированному режиму".
Во многих случаях использования отчетов и простых обработок данный метод будет применим. Для более сложных ситуаций описывать процесс нет смысла, т.к. он изложен в документации (возможность в настраивать профили безопасности для конкретных внешних файлов через указание его хеш-суммы и т.п.).
P.S. Думал что профили безопасности функционируют только при использовании лицензий на платформу и сервер уровня КОРП, но данный функционал отрабатывает и на платформе 1С:Предприятие 8.3 (условно можно назвать ПРОФ по аналогии с типовыми конфигурациями Базовая/ПРОФ/КОРП)
Дело в том что при использовании клиент-серверного варианта работы 1С внешние обработки/отчеты открываются в безопасном режиме, в котором запрещено использование привилегированного режима. А привилегированный режим используется очень часто в типовых конфигурациях: формирование печатных форм, различные служебные проверки (регистрация обменов) и т.д. В результате, даже используя обычный отчет на СКД без формы (по умолчанию используется общая форма "ФормаОтчета") и сохраняя пользовательские настройки отчета (в соответствующий справочник), вы получите ошибку о недостаточности прав доступа на различные константы и параметры сеанса, используемые в служебных целях после строки УстановитьПривилегированныйРежим(Истина) ;
"Правильным" решением будет подключение внешних обработок и отчетов через механизмы БСП "Дополнительные отчеты и обработки" с отключением безопасного режима либо добавлением разрешений (по-моему, с версии БСП 2.2.2.1). Но если по каким-то причинам необходимо использование именно внешних файлов отчетов/обработок, то можно настроить профиль безопасности кластера, используемого в качестве профиля безопасности безопасного режима для конкретной информационной базы.
Хотел бы сразу заметить, что такой вариант не является предпочтительным, но в силу разных обстоятельств можно его использовать в таком упрощенном виде. Например, у меня несколько баз в разных городах, общая локальная сесть с жёстко ограниченными правами, закрытыми USB и т.п., где-то используется Бухгалтерия 2.0, а где-то 3.0, почти все отчеты делаю средствами СКД без форм, что бы они открывались в обоих версиях. Обслуживать все эти отчеты для разных версий и разных баз дело трудоёмкое и бесперспективное, т.к. в планах есть переход на единую конфигурацию и базу...
Создаем профиль.
В консоли кластера создаём профиль безопасности, в котором устанавливаем флаги "Может использоваться как профиль безопасности безопасного режима"
и " в разделе "Разрешен полный доступ:" "к привилегированному режиму".
Во многих случаях использования отчетов и простых обработок данный метод будет применим. Для более сложных ситуаций описывать процесс нет смысла, т.к. он изложен в документации (возможность в настраивать профили безопасности для конкретных внешних файлов через указание его хеш-суммы и т.п.).
P.S. Думал что профили безопасности функционируют только при использовании лицензий на платформу и сервер уровня КОРП, но данный функционал отрабатывает и на платформе 1С:Предприятие 8.3 (условно можно назвать ПРОФ по аналогии с типовыми конфигурациями Базовая/ПРОФ/КОРП)
Программное открытие внешней обработки осуществляется с помощью объекта глобального контекста ВнешниеОбработки, который имеет тип ВнешниеОбработкиМенеджер . Для каждого режима работы платформы 1С (режим обычного приложения и режим управляемого приложения) используются различные методы объекта для работы с внешними обработками.
Запуск внешней обработки в режиме обычного приложения
В обычном приложении необходимо использовать метод Создать() объекта ВнешниеОбработки, в который передается полное имя файла внешней обработки. Метод возвращает объект типа ВнешняяОбработка , этот объект и есть открываемая внешняя обработка. Если требуется открыть форму внешней обработки, то у полученного объекта вызываем метод ПолучитьФорму(), который вернет основную форму, а затем вызываем метод Открыть() для её открытия.Обработка = ВнешниеОбработки.Создать(ПолноеИмяФайла);
Обработка.ПолучитьФорму().Открыть();
Во внешних обработках основной формой всегда должна быть обычная, а управляемая дополнительной, иначе не будет работать метод ПолучитьФорму() в режиме обычном приложения.
Запуск внешней обработки в режиме управляемого приложения
В режиме управляемых форм появляется разделение алгоритма по контексту выполнения. На клиенте получаем двоичные данные по полному имени файла внешней обработки. Передаем полученные двоичные данные на сервер и помещаем их во временное хранилище. Далее необходимо вызвать метод Подключить() объекта ВнешниеОбработки, в который передается адрес на временное хранилище. Метод возвращает имя подключенной внешней обработки. Возвращаем имя внешней обработки на клиент, формируем строковый путь к форме обработки и с помощью метода ОткрытьФорму() открываем форму внешней обработки.
&НаСервере
Функция ПолучитьИмяВнешнейОбработки(ДвоичныеДанные)
АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные);
Возврат ВнешниеОбработки.Подключить(АдресВоВременномХранилище);
КонецФункции
&НаКлиенте
ПолноеИмяФайла = ""; // Полное имя файла внешней обработки.
ДанныеФайла = Новый ДвоичныеДанные(ПолноеИмяФайла);
ИмяВнешнейОбработки = ПолучитьИмяВнешнейОбработки(ДанныеФайла);
ОткрытьФорму("ВнешняяОбработка." + ИмяВнешнейОбработки + ".Форма");
Безопасный режим для внешних обработок
Методы Создать() и Подключить() объекта ВнешниеОбработки имеют входящий параметр БезопасныйРежим - признак подключения внешней обработки в безопасном режиме. Если параметр не указан, подключение будет осуществлено в безопасном режиме.Безопасный режим работы предназначен для защиты системы от выполнения на сервере «ненадежного» программного кода. Потенциальную опасность представляют внешние обработки или программный код, вводимый пользователем для использования в методах Выполнить() и Вычислить().
В безопасном режиме накладываются следующие ограничения:
- привилегированный режим отменяется, если он был установлен;
- попытки перехода в привилегированный режим игнорируются;
- запрещены операции с COM-объектами;
- запрещена загрузка и подключение внешних компонентов;
- запрещен доступ к файловой системе (кроме временных файлов);
- запрещен доступ к Интернету.
Для запрета интерактивного открытия обработок, во всех ролях, назначенных пользователю, необходимо снять право "Интерактивное открытие внешних обработок" (см. рисунок 1).
Рисунок 1. Права интерактивного открытия внешних обработок/отчетов |
Программное открытие внешних отчетов, аналогично внешним обработкам, только следует использовать объект глобального контекста ВнешниеОтчеты, который имеет тип ВнешниеОтчетыМенеджер .