Многие разработчики и администраторы систем на базе 1С:Предприятие 8.3 сталкиваются с ситуацией, когда внешняя обработка, идеально работающая под учетной записью с полными правами, наотрез отказывается выполнять операции (например, запись файла на диск) у обычного пользователя. При этом выдается характерная ошибка: «Установлен безопасный режим. Выполнение операции запрещено». Давайте подробно разберем, почему это происходит и как правильно настроить систему, чтобы функционал стал доступен рядовым сотрудникам.
Начиная с версий платформы 8.3.15 и выше, компания «1С» существенно ужесточила политику безопасности. Теперь, если пользователь, не обладающий правами Администрирование (полными правами), открывает внешний файл обработки или отчета через стандартное меню Файл — Открыть, платформа автоматически включает для этого сеанса безопасный режим.
Проанализируем ситуацию: платформа видит, что запускается «недоверенный» код из внешнего источника. Чтобы защитить систему от потенциально вредоносных действий, она ограничивает выполнение следующих операций:
Даже если у пользователя в профиле установлена галочка Интерактивное открытие внешних обработок, это дает лишь право «увидеть» форму, но не снимает программные ограничения безопасного режима. Именно поэтому при попытке выполнить команду ТекстовыйФайл.Записать(Объект.ПутьКФайлу); система выдает исключение.
Важно не путать эти два механизма. Рассмотрим их подробнее:
Защита от опасных действий — это интерактивное предупреждение («Вы доверяете этому поставщику?»), которое появляется перед запуском. Его можно отключить в карточке пользователя или программно. Однако его отключение никак не влияет на безопасный режим работы кода.
Безопасный режим — это внутреннее состояние контекста исполнения кода. Если платформа установила его «сверху» при открытии файла, вы не сможете отключить его изнутри самой обработки командой УстановитьБезопасныйРежим(Ложь). Система выдаст ошибку, так как понижение уровня безопасности запрещено.
Чтобы предоставить пользователю возможность работать с обработкой без ограничений, мы должны сделать её «доверенной» для системы. В современных конфигурациях (БП 3.0, УТ 11, ERP) для этого используется подсистема БСП (Библиотека стандартных подсистем).
Разберем процесс регистрации по шагам. Сначала убедимся, что в модуле объекта нашей обработки присутствует экспортная функция СведенияОВнешнейОбработке(). Рассмотрим пример правильного наполнения этой функции:
Функция СведенияОВнешнейОбработке() Экспорт
ДанныеДляРег = Новый Структура;
ДанныеДляРег.Вставить("Наименование", "Выгрузка накладных (специальная форма)");
// Указываем БезопасныйРежим = Ложь, чтобы разрешить запись файлов
ДанныеДляРег.Вставить("БезопасныйРежим", Ложь);
ДанныеДляРег.Вставить("Версия", "1.0.0.1");
ДанныеДляРег.Вставить("Вид", "ДополнительнаяОбработка");
ТабЗнКоманды = Новый ТаблицаЗначений;
ТабЗнКоманды.Колонки.Добавить("Идентификатор");
ТабЗнКоманды.Колонки.Добавить("Использование");
ТабЗнКоманды.Колонки.Добавить("Представление");
НовСтрока = ТабЗнКоманды.Добавить();
НовСтрока.Идентификатор = "ОткрытьФормуВыгрузки";
НовСтрока.Использование = "ОткрытиеФормы";
НовСтрока.Представление = "Запустить выгрузку накладных";
ДанныеДляРег.Вставить("Команды", ТабЗнКоманды);
Возврат ДанныеДляРег;
КонецФункции
После подготовки кода выполним следующие действия в интерфейсе программы:
Дополнительные отчеты и обработки включен.СведенияОВнешнейОбработке и поймет, что обработка требует работы в небезопасном режиме.Размещение (укажем разделы интерфейса, где она будет видна пользователю) и определим Быстрый доступ для нужных сотрудников.Часто после регистрации обработки пользователи всё равно не видят её в интерфейсе. Выясним причину: для работы с механизмом дополнительных обработок пользователю недостаточно прав на саму обработку, ему нужны системные роли БСП.
Проанализируем необходимые роли, которые нужно добавить в профиль групп доступа пользователя:
Как показывает практика, добавление ролей Чтение глобальных дополнительных отчетов и обработок и Чтение дополнительных отчетов и обработок часто является финальным штрихом, решающим проблему невидимости меню Сервис в разделах программы.
Если по каким-то причинам вы не можете зарегистрировать обработку в справочнике, существует программный «обходной путь», который разрешен даже в безопасном режиме. Безопасный режим разрешает запись в КаталогВременныхФайлов().
Рассмотрим, как можно изменить логику сохранения файла:
ПолучитьФайл() (или НачатьПолучениеФайлаССервера в асинхронном варианте).Пример кода для обхода ограничения:
ПутьВоВременномКаталоге = КаталогВременныхФайлов() + "export.txt";
ТекстовыйФайл.Записать(ПутьВоВременномКаталоге);
// Передаем файл пользователю для сохранения в любое место
Описание = Новый ОписаниеПередаваемогоФайла(ПутьВоВременномКаталоге);
ПередаваемыеФайлы = Новый Массив;
ПередаваемыеФайлы.Добавить(Описание);
НачатьПолучениеФайловССервера( , ПередаваемыеФайлы);
Для стабильной работы в 1С 8.3 забудьте о методе Файл — Открыть для рядовых пользователей. Это путь, предназначенный исключительно для разработчиков и администраторов. Для повседневной эксплуатации всегда используйте справочник Дополнительные отчеты и обработки. Это не только решает проблемы с безопасным режимом, но и позволяет централизованно обновлять обработки у всех пользователей сразу, не рассылая файлы по почте.