Почему в 1С:Бухгалтерия 3.0 не удается открыть и полноценно использовать внешнюю обработку через меню Файл — Открыть?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия IT и автоматизация бизнеса
← На главную

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

Причина возникновения проблемы: «Неявный» безопасный режим

Начиная с версий платформы 8.3.15 и выше, компания «1С» существенно ужесточила политику безопасности. Теперь, если пользователь, не обладающий правами Администрирование (полными правами), открывает внешний файл обработки или отчета через стандартное меню Файл — Открыть, платформа автоматически включает для этого сеанса безопасный режим.

Проанализируем ситуацию: платформа видит, что запускается «недоверенный» код из внешнего источника. Чтобы защитить систему от потенциально вредоносных действий, она ограничивает выполнение следующих операций:

  1. Любые манипуляции с файловой системой (запись, чтение, удаление файлов), за исключением работы с временными файлами в специально отведенных каталогах.
  2. Использование COM-объектов и внешних компонент.
  3. Запросы к интернет-ресурсам.
  4. Запуск команд системной оболочки (Shell).

Даже если у пользователя в профиле установлена галочка Интерактивное открытие внешних обработок, это дает лишь право «увидеть» форму, но не снимает программные ограничения безопасного режима. Именно поэтому при попытке выполнить команду ТекстовыйФайл.Записать(Объект.ПутьКФайлу); система выдает исключение.

Различие между защитой от опасных действий и безопасным режимом

Важно не путать эти два механизма. Рассмотрим их подробнее:

Защита от опасных действий — это интерактивное предупреждение («Вы доверяете этому поставщику?»), которое появляется перед запуском. Его можно отключить в карточке пользователя или программно. Однако его отключение никак не влияет на безопасный режим работы кода.

Безопасный режим — это внутреннее состояние контекста исполнения кода. Если платформа установила его «сверху» при открытии файла, вы не сможете отключить его изнутри самой обработки командой УстановитьБезопасныйРежим(Ложь). Система выдаст ошибку, так как понижение уровня безопасности запрещено.

Правильное решение: Регистрация в справочнике «Дополнительные отчеты и обработки»

Чтобы предоставить пользователю возможность работать с обработкой без ограничений, мы должны сделать её «доверенной» для системы. В современных конфигурациях (БП 3.0, УТ 11, ERP) для этого используется подсистема БСП (Библиотека стандартных подсистем).

Разберем процесс регистрации по шагам. Сначала убедимся, что в модуле объекта нашей обработки присутствует экспортная функция СведенияОВнешнейОбработке(). Рассмотрим пример правильного наполнения этой функции:


Функция СведенияОВнешнейОбработке() Экспорт
    
    ДанныеДляРег = Новый Структура;
    ДанныеДляРег.Вставить("Наименование", "Выгрузка накладных (специальная форма)");
    // Указываем БезопасныйРежим = Ложь, чтобы разрешить запись файлов
    ДанныеДляРег.Вставить("БезопасныйРежим", Ложь); 
    ДанныеДляРег.Вставить("Версия", "1.0.0.1");
    ДанныеДляРег.Вставить("Вид", "ДополнительнаяОбработка");
    
    ТабЗнКоманды = Новый ТаблицаЗначений;
    ТабЗнКоманды.Колонки.Добавить("Идентификатор");
    ТабЗнКоманды.Колонки.Добавить("Использование");
    ТабЗнКоманды.Колонки.Добавить("Представление");
    
    НовСтрока = ТабЗнКоманды.Добавить();
    НовСтрока.Идентификатор = "ОткрытьФормуВыгрузки";
    НовСтрока.Использование = "ОткрытиеФормы";
    НовСтрока.Представление = "Запустить выгрузку накладных";
    
    ДанныеДляРег.Вставить("Команды", ТабЗнКоманды);
    
    Возврат ДанныеДляРег;
    
КонецФункции

После подготовки кода выполним следующие действия в интерфейсе программы:

  1. Зайдем в раздел Администрирование — Печатные формы, отчеты и обработки.
  2. Убедимся, что флаг Дополнительные отчеты и обработки включен.
  3. Перейдем в одноименную ссылку и нажмем Добавить из файла.
  4. Загрузим нашу обработку. Система прочитает функцию СведенияОВнешнейОбработке и поймет, что обработка требует работы в небезопасном режиме.
  5. Настроим Размещение (укажем разделы интерфейса, где она будет видна пользователю) и определим Быстрый доступ для нужных сотрудников.

Настройка прав доступа для пользователей

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

Проанализируем необходимые роли, которые нужно добавить в профиль групп доступа пользователя:

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

Альтернативный метод: Использование временных файлов

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

Рассмотрим, как можно изменить логику сохранения файла:

  1. Программа записывает данные во временный файл.
  2. Затем используется метод ПолучитьФайл() (или НачатьПолучениеФайлаССервера в асинхронном варианте).
  3. Это инициирует стандартный диалог 1С, где сам пользователь выбирает место на диске. Поскольку действие инициировано интерактивно, платформа его разрешает.

Пример кода для обхода ограничения:


ПутьВоВременномКаталоге = КаталогВременныхФайлов() + "export.txt";
ТекстовыйФайл.Записать(ПутьВоВременномКаталоге);

// Передаем файл пользователю для сохранения в любое место
Описание = Новый ОписаниеПередаваемогоФайла(ПутьВоВременномКаталоге);
ПередаваемыеФайлы = Новый Массив;
ПередаваемыеФайлы.Добавить(Описание);

НачатьПолучениеФайловССервера( , ПередаваемыеФайлы);

Резюме

Для стабильной работы в 1С 8.3 забудьте о методе Файл — Открыть для рядовых пользователей. Это путь, предназначенный исключительно для разработчиков и администраторов. Для повседневной эксплуатации всегда используйте справочник Дополнительные отчеты и обработки. Это не только решает проблемы с безопасным режимом, но и позволяет централизованно обновлять обработки у всех пользователей сразу, не рассылая файлы по почте.

← На главную