База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как подключить внешнюю обработку в 1С при ошибке «Действие недоступно в безопасн › Ответ в теме: Как подключить внешнюю обработку в 1С при ошибке «Действие недоступно в безопасн
Ошибка возникает при подключении файла, еще до его регистрации в списке дополнительных обработок. Поэтому проблема находится не в записи документа, а в коде, который выполняется при загрузке внешней обработки:
— в модуле объекта;
— в функции СведенияОВнешнейОбработке();
— в разделе переменных модуля;
— в обработчике инициализации модуля;
— в общем модуле, который вызывается из этих мест.
Сообщение:
|
1 |
Действие недоступно в безопасном режиме |
означает, что 1С загрузила обработку в безопасном режиме и обнаружила запрещенное действие.
## Что проверить в первую очередь
Откройте файл ITC_ЗагрузкаПоступлений_Розница.epf в конфигураторе и проверьте модуль объекта.
В функции:
|
1 |
Функция СведенияОВнешнейОбработке() Экспорт |
найдите строку:
|
1 |
ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина); |
и замените на:
|
1 2 3 |
ПараметрыРегистрации.Вставить( "БезопасныйРежим", Ложь); |
Минимальная функция регистрации должна выглядеть примерно так:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
Функция СведенияОВнешнейОбработке() Экспорт ПараметрыРегистрации = Новый Структура; ПараметрыРегистрации.Вставить( "Вид", "ДополнительнаяОбработка"); ПараметрыРегистрации.Вставить( "Наименование", "Загрузка поступлений Розница"); ПараметрыРегистрации.Вставить( "Версия", "1.0"); ПараметрыРегистрации.Вставить( "БезопасныйРежим", Ложь); ПараметрыРегистрации.Вставить( "Информация", "Загрузка поступлений"); Возврат ПараметрыРегистрации; КонецФункции |
Но если ошибка появляется даже после такой замены, значит запрещенное действие выполняется до возврата из этой функции.
## Что нельзя выполнять при инициализации обработки
Проверьте модуль объекта и удалите из верхнего уровня модуля любые вызовы вроде:
|
1 |
Соединение = Новый COMОбъект(...); |
|
1 |
ЗапуститьПриложение(...); |
|
1 |
Файл = Новый Файл(...); |
|
1 |
Чтение = Новый ЧтениеТекста(...); |
|
1 |
Запись = Новый ЗаписьТекста(...); |
|
1 |
HTTPСоединение = Новый HTTPСоединение(...); |
|
1 |
ВнешниеКомпоненты.Подключить(...); |
|
1 |
Выполнить(ТекстКода); |
|
1 |
УстановитьПривилегированныйРежим(Истина); |
Также опасны обращения к внешним файлам, COM-объектам, интернету, внешним компонентам и запуску программ операционной системы.
Особенно важно проверить переменные модуля. Например, такой код выполняется уже во время загрузки обработки:
|
1 2 3 |
Перем Подключение; Подключение = Новый COMОбъект("V83.COMConnector"); |
Его нужно заменить на создание объекта внутри команды обработки:
|
1 2 3 4 5 6 7 8 9 |
&НаКлиенте Процедура Загрузить(Команда) Подключение = Новый COMОбъект( "V83.COMConnector"); // Дальнейшая работа КонецПроцедуры |
Но если обработка зарегистрирована с безопасным режимом, даже вызов внутри команды может быть запрещен. В таком случае обработку нужно регистрировать как небезопасную или переделывать механизм работы.
## Важный момент по функции регистрации
Функция СведенияОВнешнейОбработке() должна только формировать параметры регистрации. В ней не должно быть загрузки файлов, подключения к другой базе, создания COM-объекта или записи данных.
Плохой вариант:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
Функция СведенияОВнешнейОбработке() Экспорт Подключение = Новый COMОбъект( "V83.COMConnector"); Настройки = ПолучитьНастройкиИзФайла(); ПараметрыРегистрации = Новый Структура; Возврат ПараметрыРегистрации; КонецФункции |
Правильный вариант:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Функция СведенияОВнешнейОбработке() Экспорт ПараметрыРегистрации = Новый Структура; ПараметрыРегистрации.Вставить( "Наименование", "Загрузка поступлений Розница"); ПараметрыРегистрации.Вставить( "БезопасныйРежим", Ложь); Возврат ПараметрыРегистрации; КонецФункции |
## Если обработка подключается через БСП
В современных конфигурациях для дополнительных обработок может использоваться БСП. Тогда регистрация обычно выглядит примерно так:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
Функция СведенияОВнешнейОбработке() Экспорт ПараметрыРегистрации = ДополнительныеОтчетыИОбработки .СведенияОВнешнейОбработке(); ПараметрыРегистрации.Вставить( "Вид", ДополнительныеОтчетыИОбработкиКлиентСервер .ВидОбработкиДополнительнаяОбработка()); ПараметрыРегистрации.Вставить( "Наименование", "Загрузка поступлений Розница"); ПараметрыРегистрации.Вставить( "БезопасныйРежим", Ложь); Возврат ПараметрыРегистрации; КонецФункции |
Точный код зависит от версии БСП и конфигурации. Если в вашей конфигурации используется механизм разрешений безопасного режима, одной строки БезопасныйРежим = Ложь может быть недостаточно.
## Проверьте настройки пользователя
Есть два разных механизма, их часто путают.
### Безопасный режим
Ограничивает выполнение отдельных действий внешней обработки. Именно с ним связано ваше сообщение:
|
1 |
Действие недоступно в безопасном режиме |
### Защита от опасных действий
Выдает предупреждение вида:
|
1 2 |
Предупреждение безопасности. Открывается внешняя обработка... |
Это другая настройка.
Если после исправления файла появляется именно предупреждение безопасности, а не ошибка безопасного режима, тогда можно проверить пользователя в конфигураторе:
1. Откройте конфигуратор.
2. Откройте список пользователей информационной базы.
3. Откройте пользователя.
4. Проверьте настройку Защита от опасных действий.
Но отключать ее для всех пользователей не рекомендуется. Сначала нужно убедиться, что файл действительно доверенный.
## После изменения файл нужно зарегистрировать заново
Порядок такой:
1. Сделайте резервную копию базы.
2. Откройте .epf в конфигураторе.
3. Исправьте СведенияОВнешнейОбработке().
4. Удалите опасный код из верхнего уровня модуля.
5. Сохраните обработку.
6. Закройте конфигуратор.
7. Удалите старую обработку из списка дополнительных обработок.
8. Загрузите исправленный файл заново.
9. Перезапустите клиент 1С.
Если обработка уже была зарегистрирована, изменение файла на диске само по себе не обновит обработку в базе.
## Как быстро найти запрещенную строку
В конфигураторе выполните поиск по модулю обработки по словам:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
COMОбъект ЗапуститьПриложение ВнешниеКомпоненты УстановитьПривилегированныйРежим Выполнить ЧтениеТекста ЗаписьТекста ПолучитьФайл ПоместитьФайл HTTPСоединение FTPСоединение Файл Записать Удалить |
Проверьте не только СведенияОВнешнейОбработке(), но и:
— объявления переменных модуля;
— основной модуль объекта;
— формы обработки;
— вызываемые общие модули;
— процедуры, выполняемые при открытии формы.
## Если исходник обработки закрыт
Если .epf не открывается в конфигураторе или модуль защищен паролем, самостоятельно исправить обработку невозможно. В таком случае варианты только такие:
1. запросить у разработчика новую версию обработки;
2. запросить исходный файл без защиты;
3. попросить разработчика убрать выполнение запрещенных действий из инициализации;
4. проверить совместимость версии платформы и конфигурации.
Фраза 1С:
|
1 |
Возможно, она не подходит для этой версии приложения |
в данном случае может быть стандартным общим текстом. Реальная причина указана ниже:
|
1 |
Действие недоступно в безопасном режиме |
То есть сначала нужно исправить безопасный режим и код инициализации, а уже потом проверять совместимость версии приложения.