Как организовать выбор файлов на iOS в мобильном приложении 1С?

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

При разработке мобильных решений на платформе 1С:Предприятие часто возникает задача работы с файлами, расположенными вне «песочницы» приложения. В то время как на Android взаимодействие с файловой системой реализовано достаточно гибко, операционная система iOS накладывает строгие ограничения безопасности. Давайте разберем, как правильно реализовать выбор и чтение документов в мобильном приложении на устройствах Apple.

Понимание ограничений файловой системы iOS

Прежде чем приступать к написанию кода, важно уяснить фундаментальный принцип работы iOS. Каждое приложение запускается в собственном изолированном контейнере (песочнице). Это означает, что прямое обращение к путям файловой системы, таким как /, невозможно. Попытки выйти за пределы разрешенной директории приложения будут заблокированы системой безопасности.

Для решения задачи доступа к документам (например, PDF-файлам или сканам), которые хранятся вне 1С, необходимо использовать штатные механизмы взаимодействия, предусмотренные мобильной платформой.

Решение через системный диалог выбора файлов

Наиболее надежным способом получить файл на iOS является использование метода ПоместитьФайлНаСерверАсинх. Этот метод вызывает системный диалог, который позволяет пользователю выбрать документ из приложения «Файлы» (Files) или других доступных облачных хранилищ. Система, в свою очередь, предоставляет 1С временный доступ к выбранному объекту.

Рассмотрим пример реализации кода для получения файла:


Попытка
    ОписаниеПомещенногоФайла = Ждать ПоместитьФайлНаСерверАсинх(,,,, УникальныйИдентификатор);
    Если Не ОписаниеПомещенногоФайла = Неопределено Тогда
        #Если МобильныйКлиент Тогда
            ИмяФайла = ОписаниеПомещенногоФайла.СсылкаНаФайл.Файл.ПолучитьПредставлениеФайлаБиблиотекиМобильногоУстройства;
        #Иначе
            ИмяФайла = ПолучитьИмяФайла(ОписаниеПомещенногоФайла.СсылкаНаФайл.Имя);
        #КонецЕсли
    КонецЕсли;
Исключение
    Ждать ПредупреждениеАсинх(НСтр("ru='Ошибка помещения файла на сервер'", "ru"));
    Возврат;
КонецПопытки;

Этот подход позволяет избежать нарушения политик безопасности Apple, так как файл выбирается пользователем вручную, и приложение получает права на чтение конкретного объекта.

Использование приложения «Файлы» (Files)

Еще один путь — интеграция с приложением Файлы. Если вы разрешите доступ в настройках приватности iOS, 1С сможет видеть специализированный каталог, создаваемый системой для обмена данными между приложениями. Сохраняя или считывая документы из этого каталога, вы сможете организовать полноценный обмен файлами на устройстве без использования сторонних облачных сервисов.

Специфика работы на Android через Intent

Хотя ваш основной вопрос касается iOS, стоит упомянуть, что для Android задача выбора файлов решается через объект ЗапускПриложенияМобильногоУстройства. Это позволяет вызвать системный файловый менеджер и получить путь к нужному документу. Посмотрим, как это выглядит в коде:


НовВз = Новый ЗапускПриложенияМобильногоУстройства;
НовВз.Действие = "android.intent.action.GET_CONTENT";
НовВз.Тип = "file/*";
НовВз.ДополнительныеДанные.Добавить("android.intent.extra.LOCAL_ONLY", Истина);

РезультатРаботы = НовВз.Запустить(Истина);
Если НЕ РезультатРаботы Тогда
    Возврат;
КонецЕсли;
ПутьКФайлу = НовВз.Данные;

Основные рекомендации по разработке

  1. Не пытайтесь пробиться за пределы контейнера. Любые попытки работы с файловой системой «напрямую» через абсолютные пути будут безуспешны на iOS.
  2. Используйте актуальную версию платформы. Современные версии 1С (начиная с 8.3.18 и выше) содержат значительно больше встроенных механизмов для работы с системными диалогами iOS.
  3. Проверяйте настройки разрешений. Убедитесь, что в файле Info.plist, который используется при сборке мобильного приложения, прописаны все необходимые ключи для доступа к файловым ресурсам.
  4. Применяйте асинхронные методы. В мобильной среде выполнение длительных операций блокирует интерфейс, поэтому использование методов с суффиксом Асинх является стандартом качественной разработки.

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

← На главную