Разработка мобильных решений на платформе 1С часто сталкивается с ситуациями, когда устройства должны обмениваться данными в условиях полного отсутствия интернета — например, на удаленных складах, в полевых условиях или в защищенных контурах предприятий. Традиционные методы обмена через Firebase Push или облачные веб-сервисы в таких случаях не работают. В данной статье мы подробно разберем, как построить надежную систему обмена, используя только локальную сеть (Wi-Fi).
Первым делом нам необходимо определиться с архитектурой взаимодействия. Разберем два основных варианта:
Рассмотрим подробнее реализацию через HTTP-сервисы, так как это наиболее стандартный и быстрый способ для платформы 1С.
Поскольку мобильная платформа 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.
Чтобы избежать конфликтов и дублирования при обмене, крайне важно правильно формировать пакеты данных. Разберем шаги подготовки сообщения:
УникальныйИдентификатор. Это гарантирует, что даже если два пользователя создадут документы одновременно, их ID не совпадут.POST на найденный IP-адрес сервера.Проанализируем структуру обмена "лайт-версии":
Устройство-сервер хранит список файлов с именами, соответствующими ID документа. Клиент запрашивает список имен файлов, сравнивает их со своими и скачивает только отсутствующие. Это минимизирует трафик и ускоряет работу.
Если нам нужна мгновенная реакция (аналог Push-уведомлений), стоит рассмотреть протокол MQTT. Разберем по шагам:
На "главном" устройстве запускается локальный брокер (например, Mosquitto под Termux). Устройства подписываются на топик /exchange/new_data. Как только на одном устройстве появляется документ, оно публикует сообщение в топик, и все остальные устройства мгновенно получают сигнал к началу синхронизации.
Еще один надежный вариант — использование Syncthing. Это Open Source решение для P2P синхронизации файлов. Посмотрим на алгоритм работы: 1. Устанавливаем Syncthing на оба Android-устройства. 2. Настраиваем общую папку. 3. В мобильном 1С при сохранении документа записываем его в эту папку. 4. Syncthing в фоновом режиме (через локальный Wi-Fi) перебрасывает файл на другое устройство. 5. Мобильное 1С на втором устройстве при запуске или по таймеру проверяет наличие новых файлов в папке и загружает их.
При децентрализованном обмене важно понимать ситуацию, когда один и тот же справочник был изменен на двух устройствах. Рассмотрим подробнее способы решения:
Векторные часы: Каждому объекту присваивается метка версии. При обмене побеждает та версия, у которой номер правки выше. Если номера равны, можно использовать приоритет устройства (например, изменения с "планшета бригадира" важнее изменений с "телефона рабочего").
Для реализации качественного обмена без интернета рекомендуем следующий стек технологий:
NanoHTTPD или сторонний веб-сервер.УникальныйИдентификатор для всех объектов.Такой подход обеспечит автономность работы ваших мобильных сотрудников и высокую скорость передачи данных внутри локальной сети предприятия.