Как организовать обмен данными между мобильными приложениями 1С в локальной сети без доступа к интернету

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

Разработка мобильных решений на платформе 1С часто сталкивается с ситуациями, когда устройства должны обмениваться данными в условиях полного отсутствия интернета — например, на удаленных складах, в полевых условиях или в защищенных контурах предприятий. Традиционные методы обмена через Firebase Push или облачные веб-сервисы в таких случаях не работают. В данной статье мы подробно разберем, как построить надежную систему обмена, используя только локальную сеть (Wi-Fi).

Архитектурный подход: Клиент-Сервер или Peer-to-Peer

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

  1. Выделенное устройство-сервер: Одно из мобильных устройств (или стационарный компьютер в той же сети) берет на себя роль центрального узла. Оно хранит промежуточную базу сообщений, а остальные устройства подключаются к нему.
  2. Полносвязная сеть (Each-to-Each): Каждое мобильное приложение может выступать и как клиент, и как сервер. Это более сложная, но отказоустойчивая схема, где данные синхронизируются между всеми участниками при их появлении в сети.

Рассмотрим подробнее реализацию через HTTP-сервисы, так как это наиболее стандартный и быстрый способ для платформы 1С.

Организация HTTP-сервера на базе Android

Поскольку мобильная платформа 1С сама по себе не может выступать в роли полноценного HTTP-хоста (она умеет только отправлять запросы через HTTPСоединение), нам потребуется "прослойка". Проанализируем способы поднятия сервера на мобильном устройстве:

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

Автоматический поиск устройств в локальной сети

Одной из главных проблем является динамическое назначение IP-адресов роутером (DHCP). Посмотрим, как мобильное приложение может найти партнера для обмена без ручного ввода настроек:

Рассмотрим алгоритм сканирования подсети. Проанализируем ситуацию: наше устройство имеет IP 192.168.1.15. Мы можем программно перебрать все адреса в диапазоне от 192.168.1.1 до 192.168.1.254, опрашивая конкретный порт (например, 8080).

Пример логики поиска на языке 1С:


Для НомерИтератора = 1 По 254 Цикл
    ТекущийIP = "192.168.1." + Формат(НомерИтератора, "ЧГ=0");
    Соединение = Новый HTTPСоединение(ТекущийIP, 8080, , , , 0.5); // Малый таймаут
    Запрос = Новый HTTPЗапрос("/ping");
    Попытка
        Ответ = Соединение.Получить(Запрос);
        Если Ответ.КодСостояния = 200 Тогда
            // Сервер найден, сохраняем IP
            Прервать;
        КонецЕсли;
    Исключение
        // Адрес недоступен, идем дальше
    КонецПопытки;
КонецЦикла;

Более современный метод — использование NSD (Network Service Discovery) или mDNS. Это позволяет устройству "объявить" о себе в сети под определенным именем, а другим устройствам — мгновенно найти его через широковещательный запрос без перебора всех IP.

Обмен данными через JSON и уникальные идентификаторы

Чтобы избежать конфликтов и дублирования при обмене, крайне важно правильно формировать пакеты данных. Разберем шаги подготовки сообщения:

  1. Генерация UUID: Каждый документ или запись должны иметь УникальныйИдентификатор. Это гарантирует, что даже если два пользователя создадут документы одновременно, их ID не совпадут.
  2. Формирование JSON: Сериализуем данные документа в структуру JSON.
  3. Транспорт: Отправляем данные методом POST на найденный IP-адрес сервера.

Проанализируем структуру обмена "лайт-версии": Устройство-сервер хранит список файлов с именами, соответствующими ID документа. Клиент запрашивает список имен файлов, сравнивает их со своими и скачивает только отсутствующие. Это минимизирует трафик и ускоряет работу.

Альтернативные методы: MQTT и Syncthing

Если нам нужна мгновенная реакция (аналог Push-уведомлений), стоит рассмотреть протокол MQTT. Разберем по шагам: На "главном" устройстве запускается локальный брокер (например, Mosquitto под Termux). Устройства подписываются на топик /exchange/new_data. Как только на одном устройстве появляется документ, оно публикует сообщение в топик, и все остальные устройства мгновенно получают сигнал к началу синхронизации.

Еще один надежный вариант — использование Syncthing. Это Open Source решение для P2P синхронизации файлов. Посмотрим на алгоритм работы: 1. Устанавливаем Syncthing на оба Android-устройства. 2. Настраиваем общую папку. 3. В мобильном 1С при сохранении документа записываем его в эту папку. 4. Syncthing в фоновом режиме (через локальный Wi-Fi) перебрасывает файл на другое устройство. 5. Мобильное 1С на втором устройстве при запуске или по таймеру проверяет наличие новых файлов в папке и загружает их.

Борьба с конфликтами и версионность

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

Векторные часы: Каждому объекту присваивается метка версии. При обмене побеждает та версия, у которой номер правки выше. Если номера равны, можно использовать приоритет устройства (например, изменения с "планшета бригадира" важнее изменений с "телефона рабочего").

Резюме и рекомендации

Для реализации качественного обмена без интернета рекомендуем следующий стек технологий:

Такой подход обеспечит автономность работы ваших мобильных сотрудников и высокую скорость передачи данных внутри локальной сети предприятия.

← На главную