Разработка для облачных сервисов, таких как 1С:Предприятие через интернет (1C:Fresh), существенно отличается от работы с локальными информационными базами. Основное ограничение связано с безопасностью: в облаке ваш код выполняется в изолированной среде, где прямой доступ к файловой системе сервера или небезопасные операции жестко ограничены. Разберем на конкретном примере, как адаптировать расширение для разбивки файлов выгрузки клиент-банка под требования Фреша.
Рассмотрим стандартную ситуацию: программисту необходимо доработать конфигурацию 1С:Бухгалтерия (БП 3.0), чтобы при выгрузке платежных поручений файл 1c_to_kl.txt автоматически разбивался на части по 300 платежек. В локальной версии достаточно написать процедуру на сервере, которая считывает текст и записывает новые файлы на диск. Однако при попытке загрузить такое расширение во Фреш возникают сложности:
Безопасный режим, сервис просто не позволит его опубликовать без специального сложного аудита.C: или D:.Первым и самым важным шагом является отказ от манипуляций с файлами непосредственно на сервере. Проанализируем правильную архитектуру процесса: сервер должен заниматься только обработкой данных (подготовкой текста), а клиент — сохранением этих данных в файлы на компьютер пользователя. Разберем по шагам, как это реализовать.
Вместо того чтобы записывать файлы на диск сервера через ТекстовыйДокумент.Записать(), мы должны сформировать массив структур или текстов на сервере и передать его на клиент. Посмотрим на примерную логику кода:
// На сервере подготавливаем порции данных
&НаСервере
Функция ПодготовитьПорцииДанных(ИсходныйТекст)
МассивПорций = Новый Массив;
// Логика разбиения текста на части по 300 платежек
// ...
МассивПорций.Добавить(ТекстЧасти1);
МассивПорций.Добавить(ТекстЧасти2);
Возврат МассивПорций;
КонецФункции
// На клиенте инициируем сохранение
&НаКлиенте
Процедура ПослеВыгрузкиНаКлиенте(ПутьКФайлу)
ДанныеФайлов = ПодготовитьПорцииДанных(ТекстИзФайла);
Для Каждого ТекстПорции Из ДанныеФайлов Цикл
// Используем асинхронные методы для сохранения
ПараметрыДиалога = Новый ПараметрыДиалогаПомещенияФайлов;
// Код сохранения файла на диск пользователя
КонецЦикла;
КонецПроцедуры
При таком подходе расширение может работать в безопасном режиме, так как операции на клиенте инициируются самим пользователем и не угрожают стабильности сервера.
Для успешной публикации во Фреше ваше расширение должно быть «чище», чем типовые конфигурации. Проанализируем основные причины, по которым аудит может быть отклонен:
Попытка — Исключение.Вопрос() или Предупреждение(). Необходимо использовать ПоказатьВопрос() или ПоказатьПредупреждение() с описанием оповещения.Если ваша задача принципиально требует «небезопасных» действий (например, обращение к стороннему веб-сервису для валидации платежек), вам придется настраивать запросы разрешений. Выясним, как это работает:
В свойствах расширения в конфигураторе есть пункт «Профили безопасности». Там необходимо четко прописать, к каким ресурсам требуется доступ. Например:
При загрузке расширения в «Менеджер приложения» Фреш проанализирует эти запросы. Будьте готовы к тому, что такое расширение попадет на ручной аудит, который может длиться несколько рабочих дней.
Для минимизации ошибок и упрощения прохождения аудита рекомендуется максимально использовать методы Библиотеки Стандартных Подсистем. Рассмотрим функции, которые полезны при работе с файлами в облаке:
Использование общего модуля РаботаСФайламиКлиент позволяет стандартизировать выбор и сохранение файлов. Вместо написания собственного велосипеда, проанализируем возможности метода РаботаСФайламиКлиент.СохранитьФайлНаДиск(). Это гарантирует, что механизмы взаимодействия с браузером или тонким клиентом будут отработаны корректно и не вызовут нареканий у аудиторов 1С.
Разберем алгоритм действий программиста после того, как код приведен в соответствие с требованиями:
.cfe в разделе «Адаптация» (Расширения).Выполнить()).Важный совет: Если доработка разовая и простая, рассмотрите возможность использования Дополнительных отчетов и обработок вместо расширения. Процесс аудита для них схож, но их внедрение иногда проходит проще, если не требуется менять экранные формы типовой конфигурации.
Таким образом, работа во Фреше требует от разработчика дисциплины и перехода на современные асинхронные методы платформы 1С:Предприятие 8.3. Следуя правилам выноса кода на клиент и используя механизмы БСП, вы сможете успешно внедрять даже сложные расширения в облачный сервис.