Как организовать доступ к сетевым папкам (SMB) в мобильном приложении 1С на Android?

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

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

Анализ проблемы: почему 1С «не видит» сетевой путь

Для начала проанализируем, как работают стандартные файловые операции в 1С. В десктопной версии Windows мы привыкли использовать пути формата \\server\share\file.txt. Однако в мобильной платформе 1С функции КопироватьФайл(), НайтиФайлы() или объект Файл работают исключительно с локальной файловой системой устройства.

В ОС Android сетевые ресурсы не являются частью единого дерева каталогов по умолчанию. Чтобы сетевая папка стала доступна как обычный путь, ее необходимо «примонтировать» на уровне ядра системы, что чаще всего требует наличия прав суперпользователя (Root). Без этого мобильная платформа 1С просто не имеет механизмов для авторизации в сети SMB и передачи данных по этому протоколу. Рассмотрим наиболее эффективные способы решения этой задачи, начиная от самых простых и заканчивая профессиональными программными методами.

Решение №1: Использование HTTP-сервисов (рекомендуемый способ)

Как показывает практика практикующих разработчиков, наиболее стабильным и безопасным методом является отказ от прямого доступа к SMB в пользу HTTP-сервисов. Вместо того чтобы заставлять мобильное устройство «стучаться» в сетевую папку, мы создаем на стороне основной базы 1С (или отдельной веб-службы) шлюз.

Рассмотрим алгоритм реализации этого метода:

  1. На стороне сервера 1С создается HTTP-сервис с методом GET или POST.
  2. В коде метода на сервере описывается логика чтения файла из сетевой папки средствами серверной ОС (Windows/Linux), где доступ к SMB настроен штатно.
  3. Мобильное приложение обращается к этому сервису через объект HTTPСоединение, получает двоичные данные файла и сохраняет их в свою локальную временную папку.

Проанализируем пример кода для мобильного приложения:


// Пример получения файла с сервера через HTTP
Сервер = "192.168.1.100";
Порт = 8080;
Соединение = Новый HTTPСоединение(Сервер, Порт, "Пользователь", "Пароль");

Запрос = Новый HTTPЗапрос("/v1/get_file?name=price.pdf");
Результат = Соединение.Получить(Запрос);

Если Результат.КодСостояния = 200 Тогда
    ИмяФайлаПриемника = КаталогВременныхФайлов() + "price.pdf";
    Результат.ПолучитьТелоКакДвоичныеДанные().Записать(ИмяФайлаПриемника);
    Сообщить("Файл успешно загружен в: " + ИмяФайлаПриемника);
КонецЕсли;

Преимущества: не требуются права Root, высокая скорость работы, возможность работы через интернет (не только в локальной сети Wi-Fi).

Решение №2: Использование WebDAV как альтернатива SMB

Если специфика проекта требует именно работы с файловым хранилищем, рекомендуется рассмотреть протокол WebDAV. Это расширение протокола HTTP, которое позволяет работать с файлами на сервере так же, как с локальным диском.

Выясним причину, почему это удобнее: мобильная платформа 1С нативно поддерживает HTTP/HTTPS запросы. Если поднять на сервере IIS или Apache с модулем WebDAV, мобильное приложение сможет отправлять стандартные PUT и GET запросы для передачи файлов. Это гораздо надежнее, чем пытаться заставить Android работать с устаревающим и тяжеловесным протоколом SMB в закрытой среде 1С.

Решение №3: Внешние компоненты (Native Components)

Для продвинутых разработчиков существует путь использования внешних компонент, написанных на Java или Kotlin. Существуют готовые библиотеки, такие как jCIFS-ng, которые реализуют клиент SMB полностью внутри приложения.

Процесс выглядит следующим образом:

Этот метод позволяет работать с сетевыми папками напрямую без Root-прав, но требует серьезных навыков разработки под Android.

Решение №4: Монтирование через сторонние приложения (Root-метод)

Рассмотрим ситуацию, упомянутую в обсуждении на форуме: использование CifsManager или аналогичных утилит. Этот способ позволяет «обмануть» систему и 1С. Приложение-посредник монтирует сетевой ресурс //server/share в локальную папку на Android, например, в /mnt/cifs/share.

В этом случае код в 1С будет выглядеть как работа с обычным файлом:


// Работа с примонтированной папкой (требует Root на Android)
ПутьКФайлу = "/mnt/cifs/share/data.xml";
ФайлОбмена = Новый Файл(ПутьКФайлу);
Если ФайлОбмена.Существует() Тогда
    // Обработка данных
КонецЕсли;

Важное предостережение: данный метод крайне не рекомендуется для корпоративных систем, так как получение Root-прав лишает устройство гарантии и создает огромную дыру в безопасности данных предприятия.

Настройка разрешений и нюансы компиляции

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

В свойствах конфигурации, в разделе Используемые разрешения мобильного устройства, необходимо обязательно отметить пункты:

  1. Чтение внешнего хранилища (Read external storage)
  2. Запись во внешнее хранилище (Write external storage)

Для современных версий Android (API 30+) может потребоваться разрешение MANAGE_EXTERNAL_STORAGE (Доступ ко всем файлам), которое прописывается в дополнительных свойствах сборки. Без этих настроек даже локально сохраненный из сети файл может быть недоступен для чтения кодом 1С из-за политики Scoped Storage.

Также обратим внимание на ошибку компиляции при добавлении дополнительных свойств. Если сборщик мобильных приложений выдает ошибку, убедитесь, что у вас установлен корректный Android SDK, соответствующий версии ОС вашего устройства. Часто проблема решается обновлением Android Build Tools до актуальной версии в SDK Manager.

Итоги и рекомендации

Подводя итог нашему анализу, можно сделать следующие выводы:

1. Прямого доступа к \\server\share в 1С на Android не существует.

2. Самый стабильный и современный путь — использование HTTP-сервисов на стороне сервера 1С. Это избавляет от проблем с сетевыми протоколами на мобильном устройстве и обеспечивает безопасность.

3. Если необходимо именно файловое взаимодействие, используйте WebDAV.

4. Использование сторонних программ для монтирования дисков оправдано только в исключительных случаях на контролируемом парке устройств с Root-доступом.

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

← На главную