Разработка и эксплуатация мобильных приложений на платформе 1С часто сопряжена с трудностями при взаимодействии с файловой системой мобильного устройства. Одной из наиболее распространенных проблем является невозможность сохранения сформированного отчета или табличного документа в файл напрямую. Пользователи часто сталкиваются с ситуацией, когда при нажатии кнопки «Сохранить» приложение выдает ошибку или просто закрывает диалог без результата, даже если в настройках устройства предоставлены все необходимые разрешения.
В этой статье мы подробно разберем, почему возникают такие сложности, проанализируем механизмы работы современных мобильных операционных систем и найдем эффективные способы решения задачи сохранения данных.
Проанализируем ситуацию с точки зрения безопасности мобильных ОС. Начиная с Android 11, компания Google ввела концепцию Scoped Storage (изолированное хранилище). Это означает, что каждое приложение имеет доступ только к своей изолированной «песочнице». Попытка записать файл в произвольную папку (например, в корень внутренней памяти или в папку другого приложения) блокируется системой на корневом уровне.
Рассмотрим основные факторы, препятствующие сохранению:
WRITE_EXTERNAL_STORAGE, в новых версиях Android оно не дает права писать куда угодно. Требуется специальное разрешение «Доступ ко всем файлам», которое пользователь должен включить вручную в глубоких настройках системы (раздел «Специальный доступ»).Как показывает практика и опыт участников обсуждения, наиболее надежным и быстрым способом является использование штатной функции «Печать». Разберем, как это работает. Вместо того чтобы пытаться сохранить файл в память телефона, мы инициируем процесс печати табличного документа.
В мобильной платформе 1С при нажатии на кнопку печати открывается системное окно предварительного просмотра. В этом окне практически всегда присутствует кнопка «Отправить» или «Поделиться» (иконка со стрелочкой или тремя точками). При нажатии на нее операционная система формирует временный PDF-файл и предлагает передать его в другие приложения: WhatsApp, Telegram, электронную почту или облачное хранилище (Google Drive/OneDrive).
Преимущества этого метода:
Если нам все же необходимо сохранить файл именно в локальную память устройства программным путем, мы должны использовать только те пути, которые разрешены платформой 1С. Проанализируем программный метод сохранения. Для успешной записи файла следует использовать функцию КаталогДокументов() или КаталогВременныхФайлов().
Посмотрим на пример кода, который позволяет сохранить отчет во внутреннюю память приложения, откуда его потом можно извлечь:
// Пример сохранения табличного документа в PDF во внутреннее хранилище
ПутьКФайлу = КаталогДокументов() + "ОтчетПродажи.pdf";
ТабличныйДокумент.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.PDF);
Сообщить("Файл успешно сохранен в: " + ПутьКФайлу);
Важно помнить, что файлы, сохраненные в КаталогДокументов(), обычно не видны пользователю через стандартный файловый менеджер (Проводник), так как они находятся внутри защищенной области приложения 1С. Чтобы пользователь мог их увидеть, необходимо использовать методы экспорта.
Если задача стоит в контексте Мобильного клиента, нам необходимо убедиться, что подключено расширение для работы с файлами. Без него мобильное устройство не сможет принять поток данных от сервера и интерпретировать его как файл для сохранения.
Рассмотрим последовательность действий для программиста:
НачатьПодключениеРасширенияРаботыСФайлами().НачатьПомещениеФайлаНаСервер (или его аналоги для получения файла), который вызывает нативный диалог выбора папки в ОС Android/iOS.Проанализируем пример вызова диалога сохранения:
ПараметрыДиалога = Новый ПараметрыДиалогаПомещенияФайлов;
ПараметрыДиалога.Заголовок = "Выберите место для сохранения отчета";
// Для мобильных платформ рекомендуется использовать PDF или XLSX
ОписаниеЗаписываемогоФайла = Новый ОписаниеПередаваемогоФайла(ПутьКФайлуНаСервере);
НачатьПолучениеФайлаССервера(Новый ОписаниеОповещения("ЗавершитьСохранение", ЭтотОбъект), ОписаниеЗаписываемогоФайла, ПараметрыДиалога);
При работе на мобильной платформе выбор формата файла критичен для стабильности. Проанализируем доступные варианты:
Если отчет в мобильной версии 1С не сохраняется, выполните следующие шаги для диагностики:
Шаг 1: Попробуйте вместо кнопки «Сохранить» использовать кнопку «Печать» и далее функцию «Поделиться». Это самый надежный способ «слить» информацию вовне без конфликтов с правами доступа ОС.
Шаг 2: Если вы разработчик, убедитесь, что в сборщике мобильного приложения (Mobile App Builder) установлены галочки разрешений на чтение и запись внешнего хранилища (хотя для новых Android это лишь частичное решение).
Шаг 3: Проверьте, не пытаетесь ли вы записать файл по прямому пути типа "C:\storage\report.xlsx" (что невозможно в мобильной ОС). Используйте только системные функции получения путей (КаталогДокументов()).
Шаг 4: При использовании Мобильного клиента обязательно переходите на асинхронные методы работы с файлами (Начать...), так как синхронные методы заблокированы или работают нестабильно.
Таким образом, мы разобрали основные причины возникновения ошибок и нашли способы их обхода. Понимание специфики работы мобильных операционных систем позволяет создавать более отказоустойчивые решения для пользователей 1С на смартфонах и планшетах.