Работа в облачном сервисе 1С:Фреш накладывает на разработчика ряд серьезных ограничений. Одно из самых главных — принудительное использование безопасного режима для всех расширений. Это означает, что привычные методы разработки могут перестать работать сразу после загрузки в облако. В данной статье мы разберем по шагам, как адаптировать ваше расширение, чтобы оно успешно прошло аудит и стабильно функционировало в безопасном режиме.
Проанализируем ситуацию: когда вы разрабатываете расширение локально, вы можете отключить флаг Безопасный режим в свойствах расширения. Однако в 1С:Фреш этот флаг игнорируется или принудительно устанавливается в значение Истина. Это делается для защиты данных других пользователей облака. В безопасном режиме платформой блокируются любые потенциально опасные действия: работа с файловой системой сервера, COM-объекты, запуск внешних приложений и прямые запросы к интернет-ресурсам.
Рассмотрим основные причины, по которым код может не выполняться (включая особенности того, как работают фоновые задания для новичков):
&Вместо для переопределения логики типовых модулей.Выясним причину, по которой использование &Вместо считается плохой практикой для облачных систем. Директива &Вместо полностью замещает типовой код. Если фирма «1С» обновит конфигурацию и добавит в этот метод важную проверку безопасности или новый расчет, ваше расширение просто «затрет» эти изменения, что приведет к критическим ошибкам или уязвимостям. Специалисты аудита 1С:Фреш крайне неохотно пропускают такие расширения.
Посмотрим на пример правильного изменения кода через &ИзменениеИКонтроль. Эта директива позволяет менять только нужный фрагмент, сохраняя контроль над остальной частью метода:
&ИзменениеИКонтроль("РассчитатьСуммуДокумента")
Процедура Расш1_РассчитатьСуммуДокумента(Параметры)
// Весь типовой код остается неизменным
#Вставка
// Наша доработка: добавим учет специфической скидки
Если Параметры.СкидкаСпециальная Тогда
Параметры.Сумма = Параметры.Сумма * 0.9;
КонецЕсли;
#КонецВставки
// Продолжение типового кода
КонецПроцедуры
Если же логика требует полной замены, попробуйте использовать подписки на события. Это наиболее безопасный способ расширения функционала, так как он не зависит от структуры конкретных процедур внутри модулей.
Если ваше расширение должно выполнять операции, выходящие за рамки стандартных (например, отправлять HTTP-запросы), нам необходимо программно запросить разрешения — в этом поможет инструмент для отладки и мониторинга HTTP-запросов. В Библиотеке стандартных подсистем (БСП) предусмотрен специальный механизм взаимодействия с профилями безопасности.
Разберем, как это реализовать. В модуле объекта вашего расширения необходимо добавить обработчик, который будет регистрировать необходимые разрешения. Рассмотрим пример запроса доступа к интернет-ресурсу:
Процедура ПриОпределенииПрофилейБезопасности(Профили) Экспорт
// Создаем массив для хранения разрешений
Разрешения = Новый Массив;
// Запрашиваем разрешение на использование конкретного URL
Разрешения.Добавить(РаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса(
"https://api.myservice.ru", 443
));
// Формируем описание профиля для нашего расширения
ОписаниеПрофиля = РаботаВБезопасномРежиме.ОписаниеПрофиляБезопасности(
"РасширениеДляИнтеграции",
Разрешения
);
Профили.Добавить(ОписаниеПрофиля);
КонецПроцедуры
Помните, что во Фреше вы не можете запрашивать доступ ко всей файловой системе или любым сайтам. Разрешения должны быть максимально точечными и обоснованными.
Проанализируем функции, которые чаще всего требуются разработчикам в безопасном режиме. Все они сосредоточены в общем модуле РаботаВБезопасномРежиме. Рассмотрим основные из них:
РазрешениеНаИспользованиеКаталогаВременныхФайлов() — если нужно сохранять временные данные.РазрешениеНаИспользованиеВнешнейКомпоненты() — для работы с оборудованием или специфическими библиотеками (например, если вы используете СКДБилдер для создания схем).РазрешениеНаИспользованиеПривилегированногоРежима() — требует особого внимания при аудите, так как дает расширению неограниченные права в рамках кода, например, когда строится конвейер обработки задач — для контроля разрешений подойдёт анализ прав доступа и профилей безопасности.Пример запроса на использование временного каталога:
Разрешение = РаботаВБезопасномРежиме.РазрешениеНаИспользованиеКаталогаВременныхФайлов(
Истина, // Разрешить запись
Истина // Разрешить чтение
);
Перед тем как отправлять расширение на аудит, убедитесь, что в дереве метаданных установлены правильные флаги. Разберем основные настройки:
Истина. Это позволит вам еще на этапе разработки увидеть ошибки доступа к ресурсам — для этой задачи есть инструмент отладки кода в режиме Предприятие.Сервер и Вызов сервера, если вы планируете обращаться к нему с клиента.Если вам нужно изменить логику общего модуля, который не предоставляет точек расширения, рассмотрим стратегию «Своего модуля». Вместо того чтобы перегружать типовой модуль через &Вместо, создайте в расширении новый общий модуль. Перенесите туда свою логику и вызывайте её из тех мест, где это необходимо (например, через подписки на события объектов или небольшие вставки &После в модулях форм).
Проанализируем преимущества такого подхода: Во-первых, ваш код изолирован от типового. Во-вторых, риск того, что обновление конфигурации «сломает» вашу доработку, сводится к минимуму. В-третьих, такое расширение гораздо быстрее проходит проверку со стороны администрации 1С:Фреш.
Для успешной работы во Фреше мы должны следовать правилам: всегда включать безопасный режим при тестировании, минимизировать использование директивы &Вместо в пользу &ИзменениеИКонтроль и программно описывать все требуемые разрешения через механизмы БСП. Соблюдение этих стандартов не только обеспечит работу в облаке, но и сделает ваше решение более надежным и легким в поддержке.