Как адаптировать обработки и расширения для работы в 1С:Фреш

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

Переход из локальной версии 1С (on-premise) в облачный сервис 1С:Фреш — это не просто выгрузка информационной базы. Для разработчика это, прежде всего, серьезное изменение правил игры. Если в локальной базе вы вольны использовать любые системные вызовы, то в облаке ваш код попадает в жестко контролируемую среду. Рассмотрим подробно, как подготовить ваши разработки к успешному прохождению аудита и бесперебойной работе в сервисе.

Понятие и этапы аудита в 1С:Фреш

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

Процесс проверки делится на два ключевых этапа:

  1. Автоматизированная проверка: Как только вы загружаете файл, его анализирует специальный робот. Он ищет «запрещенные приемы» в коде: использование опасных функций, обращение к файловой системе сервера и прочее. Если робот находит критические нарушения, вы получите автоматический отказ с протоколом ошибок практически мгновенно.
  2. Ручной технический аудит: После успешного прохождения робота за дело принимается живой специалист. Он оценивает логику приложения, его влияние на производительность всей системы (так как в облаке вы делите ресурсы сервера с другими компаниями) и безопасность данных. Именно на этом этапе чаще всего возникают вопросы к архитектуре решения.

Нужно быть готовым к тому, что с первого раза аудит проходят единицы. Это нормальная практика. Важно внимательно изучить замечания техподдержки и оперативно их исправить.

Технологические ограничения: что нельзя использовать

Для обеспечения безопасности и стабильности всех пользователей облака, 1С накладывает ряд жестких запретов. Проанализируем основные моменты, которые гарантированно приведут к отклонению вашей обработки.

Прямое обращение к файловой системе. В облаке у вас нет доступа к диску C:\ или любым другим локальным путям сервера. Забудьте о коде вида:


// Так делать нельзя!
Текст = Новый ТекстовыйДокумент;
Текст.Прочитать("C:\temp\data.txt");

Вместо этого мы должны использовать ПоместитьФайлВоВременноеХранилище и работать с файлами через диалоги на стороне клиента или временные хранилища на сервере.

Использование методов Выполнить() и Вычислить(). Эти методы позволяют исполнять произвольный код в обход синтаксического контроля. Для облака это «дыра» в безопасности. Если ваша логика построена на динамическом исполнении кода, ее придется полностью пересмотреть. Подобные конструкции — главная причина, по которой универсальные обработки (консоли запросов, универсальные обмены) никогда не проходят аудит во Фреше.

Внешние компоненты и COM-объекты. В облаке нельзя зарегистрировать свою DLL. Популярные методы работы с Excel через Новый COMОбъект("Excel.Application") работать не будут. Для работы с офисными документами следует использовать встроенные средства платформы 1С или библиотеки, не требующие регистрации COM (например, чтение через ТабличныйДокумент).

Работа в безопасном режиме и профили безопасности

По умолчанию все расширения и обработки во Фреше запускаются в безопасном режиме. Это накладывает ограничения на использование привилегированных методов и доступ к внешним ресурсам. Рассмотрим, как с этим работать.

Выясним причину, почему ваша обработка может не работать, даже если она прошла аудит. Чаще всего это связано с попыткой обращения к интернету. Если ваша разработка должна обмениваться данными со сторонним сайтом или API, вам необходимо:

  1. При регистрации обработки явно указать список URL-адресов, к которым требуется доступ.
  2. Система создаст запрос на разрешение использования профиля безопасности.
  3. Аудиторы проверят правомерность этих запросов и одобрят их.

Если в коде используется метод УстановитьПривилегированныйРежим(Истина), помните, что в безопасном режиме он игнорируется, если только вы не вызываете код из модуля, специально помеченного как доверенный (что в рамках внешних обработок практически невозможно).

Практические рекомендации по адаптации кода

Разберем по шагам, как подготовить код, чтобы минимизировать количество итераций с аудитом:

Используйте БСП. Библиотека стандартных подсистем (БСП) содержит множество функций, адаптированных для работы в облаке. Например, вместо прямой работы с файлами используйте подсистему РаботаСФайлами.

Оптимизируйте запросы. Аудиторы внимательно следят за нагрузкой на СУБД. Запрос в цикле — это 100% гарантия отказа. Перепишите такие участки кода, используя временные таблицы и пакетные запросы. Рассмотрим пример правильного подхода:


// Вместо запроса в цикле по массиву ссылок
Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |   Номенклатура.Наименование
    |ИЗ
    |   Справочник.Номенклатура КАК Номенклатура
    |ГДЕ
    |   Номенклатура.Ссылка В (&МассивСсылок)";
Запрос.УстановитьПараметр("МассивСсылок", СписокСсылок);
Результат = Запрос.Выполнить().Выгрузить();

Проверка на совместимость. Перед отправкой обязательно используйте встроенный инструмент платформы: Конфигурация -> Проверка конфигурации. В настройках установите флаг "Проверять совместимость с ифнраструктурой сервиса". Это позволит отловить большинство ошибок еще до обращения в техподдержку Фреша.

Особенности расширений

При работе с расширениями во Фреше действуют дополнительные правила. Главное из них — минимальное изменение структуры данных. Добавление новых реквизитов в существующие справочники или документы крайне не приветствуется. Если это необходимо, будьте готовы предоставить детальное обоснование, почему нельзя использовать механизм "Дополнительных сведений и реквизитов".

Также важно помнить, что расширение не должно блокировать стандартные механизмы обновления конфигурации специалистами фирмы «1С». Код должен быть написан максимально автономно, с использованием перехвата событий через &После или &Вместо (хотя &Вместо также требует веских причин при аудите).

В завершение отметим, что хотя процесс адаптации может показаться трудоемким, он дисциплинирует разработчика, приучая писать безопасный, быстрый и качественный код, соответствующий современным стандартам разработки 1С.

← На главную