Переход из локальной версии 1С (on-premise) в облачный сервис 1С:Фреш — это не просто выгрузка информационной базы. Для разработчика это, прежде всего, серьезное изменение правил игры. Если в локальной базе вы вольны использовать любые системные вызовы, то в облаке ваш код попадает в жестко контролируемую среду. Рассмотрим подробно, как подготовить ваши разработки к успешному прохождению аудита и бесперебойной работе в сервисе.
Первое, с чем сталкивается разработчик — это необходимость прохождения аудита. Любое расширение или внешняя обработка перед публикацией проверяется специалистами фирмы «1С». Разберем, как устроен этот процесс, чтобы понимать, к чему готовиться.
Процесс проверки делится на два ключевых этапа:
Нужно быть готовым к тому, что с первого раза аудит проходят единицы. Это нормальная практика. Важно внимательно изучить замечания техподдержки и оперативно их исправить.
Для обеспечения безопасности и стабильности всех пользователей облака, 1С накладывает ряд жестких запретов. Проанализируем основные моменты, которые гарантированно приведут к отклонению вашей обработки.
Прямое обращение к файловой системе. В облаке у вас нет доступа к диску C:\ или любым другим локальным путям сервера. Забудьте о коде вида:
// Так делать нельзя!
Текст = Новый ТекстовыйДокумент;
Текст.Прочитать("C:\temp\data.txt");
Вместо этого мы должны использовать ПоместитьФайлВоВременноеХранилище и работать с файлами через диалоги на стороне клиента или временные хранилища на сервере.
Использование методов Выполнить() и Вычислить(). Эти методы позволяют исполнять произвольный код в обход синтаксического контроля. Для облака это «дыра» в безопасности. Если ваша логика построена на динамическом исполнении кода, ее придется полностью пересмотреть. Подобные конструкции — главная причина, по которой универсальные обработки (консоли запросов, универсальные обмены) никогда не проходят аудит во Фреше.
Внешние компоненты и COM-объекты. В облаке нельзя зарегистрировать свою DLL. Популярные методы работы с Excel через Новый COMОбъект("Excel.Application") работать не будут. Для работы с офисными документами следует использовать встроенные средства платформы 1С или библиотеки, не требующие регистрации COM (например, чтение через ТабличныйДокумент).
По умолчанию все расширения и обработки во Фреше запускаются в безопасном режиме. Это накладывает ограничения на использование привилегированных методов и доступ к внешним ресурсам. Рассмотрим, как с этим работать.
Выясним причину, почему ваша обработка может не работать, даже если она прошла аудит. Чаще всего это связано с попыткой обращения к интернету. Если ваша разработка должна обмениваться данными со сторонним сайтом или API, вам необходимо:
Если в коде используется метод УстановитьПривилегированныйРежим(Истина), помните, что в безопасном режиме он игнорируется, если только вы не вызываете код из модуля, специально помеченного как доверенный (что в рамках внешних обработок практически невозможно).
Разберем по шагам, как подготовить код, чтобы минимизировать количество итераций с аудитом:
Используйте БСП. Библиотека стандартных подсистем (БСП) содержит множество функций, адаптированных для работы в облаке. Например, вместо прямой работы с файлами используйте подсистему РаботаСФайлами.
Оптимизируйте запросы. Аудиторы внимательно следят за нагрузкой на СУБД. Запрос в цикле — это 100% гарантия отказа. Перепишите такие участки кода, используя временные таблицы и пакетные запросы. Рассмотрим пример правильного подхода:
// Вместо запроса в цикле по массиву ссылок
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Наименование
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Ссылка В (&МассивСсылок)";
Запрос.УстановитьПараметр("МассивСсылок", СписокСсылок);
Результат = Запрос.Выполнить().Выгрузить();
Проверка на совместимость. Перед отправкой обязательно используйте встроенный инструмент платформы: Конфигурация -> Проверка конфигурации. В настройках установите флаг "Проверять совместимость с ифнраструктурой сервиса". Это позволит отловить большинство ошибок еще до обращения в техподдержку Фреша.
При работе с расширениями во Фреше действуют дополнительные правила. Главное из них — минимальное изменение структуры данных. Добавление новых реквизитов в существующие справочники или документы крайне не приветствуется. Если это необходимо, будьте готовы предоставить детальное обоснование, почему нельзя использовать механизм "Дополнительных сведений и реквизитов".
Также важно помнить, что расширение не должно блокировать стандартные механизмы обновления конфигурации специалистами фирмы «1С». Код должен быть написан максимально автономно, с использованием перехвата событий через &После или &Вместо (хотя &Вместо также требует веских причин при аудите).
В завершение отметим, что хотя процесс адаптации может показаться трудоемким, он дисциплинирует разработчика, приучая писать безопасный, быстрый и качественный код, соответствующий современным стандартам разработки 1С.