При разработке мобильных решений на платформе 1С:Предприятие часто возникает задача работы с файлами, расположенными вне «песочницы» приложения. В то время как на Android взаимодействие с файловой системой реализовано достаточно гибко, операционная система iOS накладывает строгие ограничения безопасности. Давайте разберем, как правильно реализовать выбор и чтение документов в мобильном приложении на устройствах Apple.
Прежде чем приступать к написанию кода, важно уяснить фундаментальный принцип работы iOS. Каждое приложение запускается в собственном изолированном контейнере (песочнице). Это означает, что прямое обращение к путям файловой системы, таким как /, невозможно. Попытки выйти за пределы разрешенной директории приложения будут заблокированы системой безопасности.
Для решения задачи доступа к документам (например, PDF-файлам или сканам), которые хранятся вне 1С, необходимо использовать штатные механизмы взаимодействия, предусмотренные мобильной платформой.
Наиболее надежным способом получить файл на iOS является использование метода ПоместитьФайлНаСерверАсинх. Этот метод вызывает системный диалог, который позволяет пользователю выбрать документ из приложения «Файлы» (Files) или других доступных облачных хранилищ. Система, в свою очередь, предоставляет 1С временный доступ к выбранному объекту.
Рассмотрим пример реализации кода для получения файла:
Попытка
ОписаниеПомещенногоФайла = Ждать ПоместитьФайлНаСерверАсинх(,,,, УникальныйИдентификатор);
Если Не ОписаниеПомещенногоФайла = Неопределено Тогда
#Если МобильныйКлиент Тогда
ИмяФайла = ОписаниеПомещенногоФайла.СсылкаНаФайл.Файл.ПолучитьПредставлениеФайлаБиблиотекиМобильногоУстройства;
#Иначе
ИмяФайла = ПолучитьИмяФайла(ОписаниеПомещенногоФайла.СсылкаНаФайл.Имя);
#КонецЕсли
КонецЕсли;
Исключение
Ждать ПредупреждениеАсинх(НСтр("ru='Ошибка помещения файла на сервер'", "ru"));
Возврат;
КонецПопытки;
Этот подход позволяет избежать нарушения политик безопасности Apple, так как файл выбирается пользователем вручную, и приложение получает права на чтение конкретного объекта.
Еще один путь — интеграция с приложением Файлы. Если вы разрешите доступ в настройках приватности iOS, 1С сможет видеть специализированный каталог, создаваемый системой для обмена данными между приложениями. Сохраняя или считывая документы из этого каталога, вы сможете организовать полноценный обмен файлами на устройстве без использования сторонних облачных сервисов.
Хотя ваш основной вопрос касается iOS, стоит упомянуть, что для Android задача выбора файлов решается через объект ЗапускПриложенияМобильногоУстройства. Это позволяет вызвать системный файловый менеджер и получить путь к нужному документу. Посмотрим, как это выглядит в коде:
НовВз = Новый ЗапускПриложенияМобильногоУстройства;
НовВз.Действие = "android.intent.action.GET_CONTENT";
НовВз.Тип = "file/*";
НовВз.ДополнительныеДанные.Добавить("android.intent.extra.LOCAL_ONLY", Истина);
РезультатРаботы = НовВз.Запустить(Истина);
Если НЕ РезультатРаботы Тогда
Возврат;
КонецЕсли;
ПутьКФайлу = НовВз.Данные;
Info.plist, который используется при сборке мобильного приложения, прописаны все необходимые ключи для доступа к файловым ресурсам.Асинх является стандартом качественной разработки.Следуя этим рекомендациям и используя встроенные механизмы ПоместитьФайлНаСерверАсинх, вы сможете обеспечить стабильную работу вашего приложения с документами на любом мобильном устройстве.