Как решить проблему с сохранением отчетов в файл в мобильной версии 1С?

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

Разработка и эксплуатация мобильных приложений на платформе 1С часто сопряжена с трудностями при взаимодействии с файловой системой мобильного устройства. Одной из наиболее распространенных проблем является невозможность сохранения сформированного отчета или табличного документа в файл напрямую. Пользователи часто сталкиваются с ситуацией, когда при нажатии кнопки «Сохранить» приложение выдает ошибку или просто закрывает диалог без результата, даже если в настройках устройства предоставлены все необходимые разрешения.

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

Выясним причину: почему стандартное сохранение не работает?

Проанализируем ситуацию с точки зрения безопасности мобильных ОС. Начиная с Android 11, компания Google ввела концепцию Scoped Storage (изолированное хранилище). Это означает, что каждое приложение имеет доступ только к своей изолированной «песочнице». Попытка записать файл в произвольную папку (например, в корень внутренней памяти или в папку другого приложения) блокируется системой на корневом уровне.

Рассмотрим основные факторы, препятствующие сохранению:

  1. Ограничения прав доступа: Даже если вы программно запрашиваете разрешение WRITE_EXTERNAL_STORAGE, в новых версиях Android оно не дает права писать куда угодно. Требуется специальное разрешение «Доступ ко всем файлам», которое пользователь должен включить вручную в глубоких настройках системы (раздел «Специальный доступ»).
  2. Несовместимость стандартных диалогов: Стандартная команда «Сохранить как», привычная нам по десктопной версии 1С, на мобильной платформе может пытаться вызвать системное окно, которое не всегда корректно обрабатывается платформой или блокируется политиками безопасности.
  3. Особенности Мобильного клиента: Если вы используете мобильный клиент, а не автономное приложение, то сеанс работает на сервере, и прямое сохранение на клиентское устройство требует использования специальных асинхронных методов и расширений для работы с файлами.

Решение 1: Использование системного механизма «Поделиться» (Workaround)

Как показывает практика и опыт участников обсуждения, наиболее надежным и быстрым способом является использование штатной функции «Печать». Разберем, как это работает. Вместо того чтобы пытаться сохранить файл в память телефона, мы инициируем процесс печати табличного документа.

В мобильной платформе 1С при нажатии на кнопку печати открывается системное окно предварительного просмотра. В этом окне практически всегда присутствует кнопка «Отправить» или «Поделиться» (иконка со стрелочкой или тремя точками). При нажатии на нее операционная система формирует временный PDF-файл и предлагает передать его в другие приложения: WhatsApp, Telegram, электронную почту или облачное хранилище (Google Drive/OneDrive).

Преимущества этого метода:

Решение 2: Программное сохранение в доступные директории

Если нам все же необходимо сохранить файл именно в локальную память устройства программным путем, мы должны использовать только те пути, которые разрешены платформой 1С. Проанализируем программный метод сохранения. Для успешной записи файла следует использовать функцию КаталогДокументов() или КаталогВременныхФайлов().

Посмотрим на пример кода, который позволяет сохранить отчет во внутреннюю память приложения, откуда его потом можно извлечь:


// Пример сохранения табличного документа в PDF во внутреннее хранилище
ПутьКФайлу = КаталогДокументов() + "ОтчетПродажи.pdf";
ТабличныйДокумент.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.PDF);
Сообщить("Файл успешно сохранен в: " + ПутьКФайлу);

Важно помнить, что файлы, сохраненные в КаталогДокументов(), обычно не видны пользователю через стандартный файловый менеджер (Проводник), так как они находятся внутри защищенной области приложения 1С. Чтобы пользователь мог их увидеть, необходимо использовать методы экспорта.

Решение 3: Работа с файлами в Мобильном клиенте

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

Рассмотрим последовательность действий для программиста:

  1. Проверить подключение расширения с помощью метода НачатьПодключениеРасширенияРаботыСФайлами().
  2. Использовать асинхронные методы для передачи файла с сервера на мобильное устройство.
  3. Использовать метод НачатьПомещениеФайлаНаСервер (или его аналоги для получения файла), который вызывает нативный диалог выбора папки в ОС Android/iOS.

Проанализируем пример вызова диалога сохранения:


ПараметрыДиалога = Новый ПараметрыДиалогаПомещенияФайлов;
ПараметрыДиалога.Заголовок = "Выберите место для сохранения отчета";

// Для мобильных платформ рекомендуется использовать PDF или XLSX
ОписаниеЗаписываемогоФайла = Новый ОписаниеПередаваемогоФайла(ПутьКФайлуНаСервере);
НачатьПолучениеФайлаССервера(Новый ОписаниеОповещения("ЗавершитьСохранение", ЭтотОбъект), ОписаниеЗаписываемогоФайла, ПараметрыДиалога);

Рекомендации по форматам файлов

При работе на мобильной платформе выбор формата файла критичен для стабильности. Проанализируем доступные варианты:

  1. PDF: Самый стабильный формат. Платформа 1С отлично формирует его на мобильных устройствах, и он открывается любым встроенным просмотрщиком.
  2. XLSX (Excel): Может вызывать ошибки на старых версиях мобильной платформы или при отсутствии установленных офисных приложений. Рекомендуется использовать только в случае крайней необходимости, когда пользователю обязательно нужно редактировать цифры.
  3. ANSITXT / HTML: Работают стабильно, но редко подходят для полноценных отчетов из-за потери форматирования.

Итоги и контрольный список для проверки

Если отчет в мобильной версии 1С не сохраняется, выполните следующие шаги для диагностики:

Шаг 1: Попробуйте вместо кнопки «Сохранить» использовать кнопку «Печать» и далее функцию «Поделиться». Это самый надежный способ «слить» информацию вовне без конфликтов с правами доступа ОС.

Шаг 2: Если вы разработчик, убедитесь, что в сборщике мобильного приложения (Mobile App Builder) установлены галочки разрешений на чтение и запись внешнего хранилища (хотя для новых Android это лишь частичное решение).

Шаг 3: Проверьте, не пытаетесь ли вы записать файл по прямому пути типа "C:\storage\report.xlsx" (что невозможно в мобильной ОС). Используйте только системные функции получения путей (КаталогДокументов()).

Шаг 4: При использовании Мобильного клиента обязательно переходите на асинхронные методы работы с файлами (Начать...), так как синхронные методы заблокированы или работают нестабильно.

Таким образом, мы разобрали основные причины возникновения ошибок и нашли способы их обхода. Понимание специфики работы мобильных операционных систем позволяет создавать более отказоустойчивые решения для пользователей 1С на смартфонах и планшетах.

← На главную