Разработка мобильных приложений на платформе «1С:Предприятие» открывает огромные возможности для автоматизации бизнеса и личного использования. Однако рано или поздно перед каждым разработчиком встает критически важный вопрос: как обеспечить сохранность пользовательских данных? Хранение резервных копий (бэкапов) исключительно в локальной памяти устройства — рискованный шаг. При утере, поломке или сбросе смартфона пользователь безвозвратно потеряет свою базу данных.
В этой статье мы подробно и по шагам разберем, как организовать выгрузку бэкапов из мобильного приложения 1С в облачное хранилище Apple iCloud, а также рассмотрим альтернативные варианты интеграции с популярными облачными сервисами (такими как Google Drive и Яндекс.Диск). Мы проанализируем различные подходы — от самых простых штатных механизмов, не требующих написания сложного кода, до профессиональной интеграции с облачными API.
Начнем с самого простого, но при этом невероятно надежного метода. Разработчику мобильного приложения не обязательно вручную писать выгрузку файлов в облако. Платформа 1С имеет встроенную глубокую интеграцию с механизмами резервного копирования операционной системы iOS.
Рассмотрим, как активировать эту возможность при сборке вашего приложения:
Проанализируем, как эта магия работает под капотом iOS. Когда данное разрешение активно, операционная система Apple автоматически включает файл базы данных мобильного приложения (файл с расширением .1CD), а также все сопутствующие файлы настроек в общий системный бэкап устройства в iCloud. Если пользователь купит новый iPhone или сбросит текущий до заводских настроек, при авторизации в своем Apple ID операционная система автоматически восстановит приложение со всеми сохраненными данными.
Важная техническая деталь для iOS! Сразу после создания новой информационной базы из шаблона операционная система iOS временно исключает ее файл из процесса резервного копирования для экономии облачного пространства пользователя. База автоматически добавится в очередь на бэкап в iCloud только после того, как в ней будет произведена первая запись данных. Это может быть создание любого элемента справочника, проведение документа или запись константы. Учитывайте эту особенность при тестировании приложения.
Что делать, если вам необходимо дать пользователю возможность самостоятельно управлять своими резервными копиями? Например, вручную выгрузить конкретную точку сохранения в файл, отправить ее другу или импортировать файл бэкапа обратно в приложение в любой момент.
Выясним, как это реализовать без написания сложных обработчиков и работы с HTTP-запросами. Для этого мы можем использовать стандартные возможности платформы по работе с файловой системой устройства.
В мобильной платформе 1С объект ДиалогВыбораФайла на операционной системе iOS автоматически интегрируется с нативным системным приложением «Файлы» (Files), которое напрямую связано с iCloud Drive. Таким образом, открывая диалог сохранения файла, мы фактически предоставляем пользователю доступ к его облаку.
Разберем по шагам пример кода для экспорта подготовленного файла бэкапа в iCloud Drive:
// Шаг 1. Формируем локальный файл бэкапа (например, сериализуем данные в XML или ZIP)
ПутьКЛокальномуФайлу = КаталогДокументов() + "my_backup_data.zip";
// [Здесь должна быть ваша логика архивации данных в указанный путь]
// Шаг 2. Инициализируем диалог сохранения файла
ДиалогСохранения = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
ДиалогСохранения.Заголовок = "Выберите папку в iCloud Drive для сохранения бэкапа";
ДиалогСохранения.Фильтр = "Архив данных (*.zip)|*.zip";
ДиалогСохранения.ПолноеИмяФайла = "Backup_" + Формат(ТекущаяДата(), "ДФ=ггггММдд") + ".zip";
// Шаг 3. Показываем диалог пользователю
ОписаниеОповещения = Новый ОписаниеОповещения("ПослеВыбораФайлаДляСохранения", ЭтотОбъект, ПутьКЛокальномуФайлу);
ДиалогСохранения.Показать(ОписаниеОповещения);
Теперь опишем процедуру обработки выбора файла, в которой мы физически перенесем данные из временного локального каталога приложения в выбранную пользователем папку в iCloud Drive:
Процедура ПослеВыбораФайлаДляСохранения(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт
Если ВыбранныеФайлы = Неопределено Тогда
Возврат; // Пользователь отменил выбор
КонецЕсли;
ПутьКЛокальномуФайлу = ДополнительныеПараметры;
ЦелевойПутьВОблаке = ВыбранныеФайлы[0];
// Копируем файл из внутренней директории приложения в облачную папку iCloud Drive
Попытка
КопироватьФайл(ПутьКЛокальномуФайлу, ЦелевойПутьВОблаке);
ПоказатьПредупреждение(, "Резервная копия успешно сохранена в iCloud Drive!");
Исключение
ВызватьИсключение "Ошибка сохранения файла: " + ОписаниеОшибки();
КонецПопытки;
КонецПроцедуры
Аналогичным образом мы можем настроить и обратный процесс — чтение (импорт) файла из облака. При использовании режима РежимДиалогаВыбораФайла.Открытие система покажет пользователю интерфейс выбора файлов, где он сможет перейти в свои папки iCloud Drive, выбрать нужный архив, а наше мобильное приложение скопирует его во внутреннюю память для последующего разбора и восстановления данных.
Если перед вами стоит задача автоматического фонового сохранения бэкапов в облако (без участия пользователя и вызова диалоговых окон), то стандартных диалогов будет недостаточно. В этом случае нам придется работать напрямую с REST API облачных провайдеров.
Для реализации этого механизма можно воспользоваться готовыми примерами интеграции, которые уже реализованы в таких типовых конфигурациях, как «1С:Деньги» или «1С:Управление нашей фирмой» (мобильные версии). В этих решениях встроены модули работы со сторонними облачными дисками по протоколам OAuth 2.0.
Проанализируем базовый пример отправки сформированного файла бэкапа на удаленный сервер с использованием объекта HTTPСоединение. Рассмотрим абстрактный пример отправки POST-запроса:
// Настраиваем защищенное соединение (большинство облаков работают только по HTTPS)
Защита = Новый ЗащищенноеСоединениеOpenSSL();
Соединение = Новый HTTPСоединение("api.cloudservice.com", 443, , , , , Защита);
// Готовим заголовки запроса и авторизационный токен (Bearer token)
Запрос = Новый HTTPЗапрос("/v1/files/upload");
Запрос.Заголовки.Вставить("Authorization", "Bearer " + ТокенДоступа);
Запрос.Заголовки.Вставить("Content-Type", "application/zip");
// Указываем путь к локальному файлу бэкапа, который нужно передать в теле запроса
Запрос.УстановитьИмяФайлаТела(ПутьКЛокальномуФайлу);
// Выполняем отправку данных в облако
Попытка
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
Если Ответ.КодСостояния = 200 Тогда
ЗаписатьЛогСобытий("Бэкап успешно отправлен в облако!");
Иначе
ЗаписатьЛогСобытий("Ошибка сервера. Код: " + Ответ.КодСостояния + ". Ответ: " + Ответ.ПолучитьТелоКакСтроку());
КонецЕсли;
Исключение
ЗаписатьЛогСобытий("Сбой сетевого соединения при отправке бэкапа: " + ОписаниеОшибки());
КонецПопытки;
Использование этого подхода потребует от вас изучения документации конкретного облачного сервиса для получения токенов авторизации (через механизм OAuth 2.0), но это дает полный контроль над процессом резервного копирования в фоновом режиме.
Важно помнить, что любые функции взаимодействия с экосистемой Apple iCloud (будь то автоматические бэкапы всей системы или прямой доступ к хранилищу через диалоги) накладывают строгие обязательства на сборку финального установочного пакета приложения (файла .ipa).
Разберем основные правила подготовки инфраструктуры разработчика:
Применяя данные подходы, вы сможете создать максимально надежное и дружелюбное к пользователю мобильное приложение на платформе 1С с гарантированной сохранностью всех накопленных данных.