Работа в облачном сервисе 1С:Предприятие через интернет (1С:Фреш) кардинально отличается от работы с локальными информационными базами. Одной из первых проблем, с которой сталкиваются разработчики и продвинутые пользователи, является невозможность открыть внешнюю обработку или отчет привычным способом через меню Файл — Открыть. В этой статье мы подробно разберем, почему это происходит, как обойти данные ограничения в рамках регламента сервиса и как правильно подготовить программный код для успешного прохождения аудита.
Проанализируем архитектуру сервиса. 1С:Фреш использует технологию разделения данных (Multi-tenancy), при которой множество клиентов (абонентов) работают в одной физической информационной базе, но видят только свои данные благодаря разделителям. В такой среде запуск произвольного кода через Файл — Открыть представляет огромную угрозу безопасности. Если бы пользователь мог запустить любую обработку, он теоретически мог бы получить доступ к данным других компаний в этой же базе или нарушить работу всего сервера.
Именно поэтому стандартная возможность открытия внешних обработок программно и интерфейсно полностью отключена. Любая кастомизация функционала должна проходить через строгий контроль — аудит.
Вместо прямого открытия нам необходимо использовать механизм дополнительных отчетов и обработок. Рассмотрим этот процесс по шагам:
Разберем подробнее, что такое безопасный режим. Все внешние обработки во Фреше запускаются в контексте, который ограничивает доступ к «опасным» методам платформы. Например, вы не сможете просто так создать объект ЗаписьТекста по произвольному пути на сервере или использовать ЗапуститьПриложение.
Однако часто задачи требуют взаимодействия с внешним миром: отправку почты, загрузку данных из API или работу с временными файлами. Для этого в БСП предусмотрен механизм запроса разрешений. Выясним, как это реализовать в коде.
В модуле объекта внешней обработки обязательно должна присутствовать функция СведенияОВнешнейОбработке(). В этой функции, помимо описания команды, мы должны сформировать массив разрешений. Рассмотрим на примере:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияВнешнейОбработки("2.2.2.1");
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();
ПараметрыРегистрации.Наименование = "Загрузка данных из внешнего источника";
// Определение разрешений для работы в безопасном режиме
Разрешения = Новый Массив;
// Пример запроса разрешения на доступ к интернет-ресурсу
Разрешения.Добавить(РаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса("HTTPS", "api.example.com", , "Взаимодействие с внешним API"));
// Пример запроса разрешения на использование временного каталога
Разрешения.Добавить(РаботаВБезопасномРежиме.РазрешениеНаИспользованиеКаталогаВременныхФайлов(Истина, Истина));
ПараметрыРегистрации.Вставить("Разрешения", Разрешения);
Возврат ПараметрыРегистрации;
КонецФункции
Проанализируем основные функции программного интерфейса РаботаВБезопасномРежиме, которые могут понадобиться при подготовке обработки для аудита:
РазрешениеНаИспользованиеВнешнегоМодуля — если ваша обработка должна обращаться к другим внешним модулям.РазрешениеНаИспользованиеИнтернетРесурса — для выполнения HTTP/HTTPS запросов. Важно: адрес должен быть указан явно, использование масок или параметров часто вызывает вопросы у аудиторов.РазрешениеНаИспользованиеКаталогаФайловойСистемы — если требуется чтение или запись в конкретные папки (редко одобряется для облака, лучше использовать временные файлы).РазрешениеНаИспользованиеПривилегированногоРежима — позволяет выполнять код без проверки прав доступа (требует веского обоснования при аудите).РазрешениеНаСозданиеCOMКласса — если необходимо взаимодействие с объектами типа Excel.Application (хотя в облаке рекомендуется использовать нативную работу с XLSX).Посмотрим на ситуацию со стороны веб-клиента. 1С:Фреш часто работает через браузер. Платформа 1С в веб-клиенте не поддерживает синхронные вызовы, которые блокируют поток исполнения. Это означает, что привычные методы Вопрос(), Предупреждение() или ВыбратьФайл() работать не будут и ваша обработка не пройдет автоматический аудит.
Необходимо переписывать взаимодействие с пользователем на асинхронную модель. Вместо Вопрос() используем ПоказатьВопрос(), передавая в него описание оповещения о завершении. Это обязательное условие для всех разработок под Фреш.
Если специфика вашего бизнеса требует использования обработок, которые принципиально не могут пройти аудит (например, работа со специфическим оборудованием через прямые драйверы), рассмотрим вариант Автономного рабочего места (АРМ).
АРМ — это локальная копия базы (РИБ-узел), которая создается на вашем компьютере. Вы можете работать в ней локально, запускать любые внешние обработки без ограничений безопасного режима, а затем выполнять синхронизацию с облаком. В этом случае данные, измененные обработкой, попадут во Фреш в виде стандартных пакетов обмена, что безопасно для сервиса.
Чтобы сэкономить время, проанализируем типичные ошибки разработчиков:
Выполнить() или Вычислить() крайне нежелательно в контексте внешней обработки.Таким образом, работа во Фреше требует от разработчика дисциплины и следования стандартам 1С:Совместимо. Несмотря на кажущуюся сложность, механизм аудита гарантирует стабильность системы и сохранность ваших данных.