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

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

При разработке мобильных приложений на платформе 1С разработчики часто сталкиваются с вопросом выбора оптимального механизма обмена данными с центральной базой (ЦБ). На старте проекта многие выбирают простую текстовую сериализацию в JSON, однако с ростом объема передаваемых данных и усложнением структуры этот подход начинает требовать написания громоздких парсеров. Возникает желание использовать стандартизированные пакеты XDTO, но существует распространенное заблуждение, что объектная модель XDTO не поддерживается на мобильных устройствах. Давайте детально разберем эту ситуацию и проанализируем лучшие архитектурные практики для реализации обмена.

Развеиваем миф: поддержка XDTO в мобильном приложении

Многие разработчики отказываются от использования XDTO, ошибочно полагая, что на мобильной платформе нет возможности работать со схемами XSD, и из-за этого приходится вручную формировать структуру данных при отправке из телефона в центральную базу. Проанализируем возможности мобильной платформы: объектная модель XDTO (включая объекты ФабрикаXDTO, СериализаторXDTO, а также сами типы и значения XDTO) полноценно поддерживается в мобильном приложении.

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

  1. Использование WS-ссылок (SOAP-обмен). При подключении к веб-сервису центральной базы из мобильного приложения, платформа автоматически считывает WSDL-описание. В этом описании уже заложены необходимые XDTO-пакеты. Как только вы создаете WS-ссылку, вам становятся доступны ее XDTO-пакеты, и вы можете использовать их для программного создания объектов на мобильном клиенте.
  2. Импорт XSD-схем на лету. Если вы используете HTTP-сервисы, схему можно предварительно выгрузить из центральной базы (например, сохранить как макет в конфигурации или передать в виде файла) и программно загрузить в мобильное приложение. На основании прочитанной схемы с помощью метода ФабрикаXDTO.Создать() можно генерировать структурированные объекты.

Симбиоз JSON и XDTO: избавляемся от ручного парсинга

Использование "чистого" JSON отлично подходит для простых обменов, но когда приходит структура с вложенными массивами структур (например, документ с табличными частями), описывать отправку и приемку каждого реквизита на обеих сторонах становится тяжело. Это приводит к лишней работе в 4-х разных функциях и увеличивает риск ошибок при изменении реквизитного состава.

Посмотрим на современный стандарт обмена — это связка легковесного формата JSON (который идеально подходит для мобильных сетей) и мощи XDTO-сериализации. Платформа 1С позволяет не формировать строки JSON вручную.

Разберем по шагам этот механизм. Мы можем использовать методы платформы для автоматической конвертации прикладных объектов (справочников, документов) в JSON и обратно:


// Пример сериализации объекта (документа или структуры) в JSON
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
СериализаторXDTO.ЗаписатьJSON(ЗаписьJSON, ОбъектДанных);
СтрокаJSON = ЗаписьJSON.Закрыть();

// Передаем СтрокаJSON через HTTP-сервис на мобильное устройство

// На стороне мобильного приложения читаем JSON обратно в объект
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(СтрокаJSON);
ПолученныйОбъект = СериализаторXDTO.ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();

При таком подходе данные по сети летят в компактном формате JSON (дополнительно поток можно сжимать в ZIP для экономии трафика), но в программном коде мы оперируем готовыми объектами. Платформа берет на себя всю рутину по сопоставлению полей.

Почему "Конвертация данных" (КД) для мобильного приложения — это антипаттерн?

Часто возникает соблазн использовать привычную "Конвертацию данных" (КД) или универсальный обмен в формате XML. Разберем причины, почему в архитектуре мобильных приложений от этого стоит категорически отказаться:

  1. Избыточная нагрузка на устройство. Обработка правил КД требует серьезных вычислительных ресурсов. Если в центральной базе сотни тысяч объектов (партнеры, соглашения, цены, остатки), мобильное устройство просто "захлебнется" при разборе тяжеловесного XML-файла с правилами.
  2. Проблема версионирования. В корпоративной среде у разных пользователей могут быть установлены разные версии мобильного приложения (кто-то обновился, кто-то нет). В итоге структура метаданных (реквизитов) у них различается. Поддерживать зоопарк правил КД под каждую версию на стороне ЦБ — это путь к бесконечным ошибкам и невозможности нормальной отладки.
  3. Избыточность данных. Мобильное приложение по своей концепции должно быть максимально "тонким" клиентом. В нем должно храниться минимум данных. Вся сложная логика, расчеты цен и проверка задолженностей должны происходить в онлайн-режиме на мощном сервере центральной базы, если есть связь.

Оптимизация: Планы обмена и порционная выгрузка

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

В ЦБ регистрируются изменения по объектам, которые касаются конкретного мобильного пользователя (например, торгового агента). При сеансе связи по HTTP-сервису центральная база передает на устройство только "дельту" — измененные данные с момента последнего успешного обмена. Обмен должен идти небольшими пакетами с обязательным квитированием (подтверждением), что мобильное приложение успешно загрузило и записало пакет. Только после получения квитанции регистрация изменений в ЦБ снимается.

Альтернативный вариант: Мобильный клиент с автономным режимом

Если ваша задача — не создание независимого коммерческого приложения, а просто предоставление мобильного рабочего места для сотрудников внутри компании (например, кладовщиков или курьеров), проанализируем новую технологию 1С — Мобильный клиент с автономным режимом.

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

Подводя итоги: для организации обмена данными с мобильным приложением 1С лучше всего использовать HTTP-сервисы с передачей данных в формате JSON, сериализованном через стандартный СериализаторXDTO. Это обеспечивает оптимальный баланс между скоростью работы сети, экономией заряда батареи и удобством написания программного кода. От использования правил "Конвертации данных" на мобильных устройствах следует полностью отказаться в пользу DTO-структур и порционной передачи данных.

← На главную