При разработке мобильных приложений на платформе 1С разработчики часто сталкиваются с вопросом выбора оптимального механизма обмена данными с центральной базой (ЦБ). На старте проекта многие выбирают простую текстовую сериализацию в JSON, однако с ростом объема передаваемых данных и усложнением структуры этот подход начинает требовать написания громоздких парсеров. Возникает желание использовать стандартизированные пакеты XDTO, но существует распространенное заблуждение, что объектная модель XDTO не поддерживается на мобильных устройствах. Давайте детально разберем эту ситуацию и проанализируем лучшие архитектурные практики для реализации обмена.
Многие разработчики отказываются от использования XDTO, ошибочно полагая, что на мобильной платформе нет возможности работать со схемами XSD, и из-за этого приходится вручную формировать структуру данных при отправке из телефона в центральную базу. Проанализируем возможности мобильной платформы: объектная модель XDTO (включая объекты ФабрикаXDTO, СериализаторXDTO, а также сами типы и значения XDTO) полноценно поддерживается в мобильном приложении.
Проблема "отсутствия схемы", из-за которой не получается удобно формировать пакет данных для отправки обратно на сервер, решается несколькими базовыми путями:
Фабрика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. Разберем причины, почему в архитектуре мобильных приложений от этого стоит категорически отказаться:
Чтобы избежать зависаний и переполнения памяти на смартфонах, обмен обязательно должен строиться через платформенный механизм Планы обмена. Рассмотрим, как это работает на практике:
В ЦБ регистрируются изменения по объектам, которые касаются конкретного мобильного пользователя (например, торгового агента). При сеансе связи по HTTP-сервису центральная база передает на устройство только "дельту" — измененные данные с момента последнего успешного обмена. Обмен должен идти небольшими пакетами с обязательным квитированием (подтверждением), что мобильное приложение успешно загрузило и записало пакет. Только после получения квитанции регистрация изменений в ЦБ снимается.
Если ваша задача — не создание независимого коммерческого приложения, а просто предоставление мобильного рабочего места для сотрудников внутри компании (например, кладовщиков или курьеров), проанализируем новую технологию 1С — Мобильный клиент с автономным режимом.
При использовании этой технологии вам вообще не придется разрабатывать собственную архитектуру HTTP-сервисов, сериализовывать JSON и писать логику двухстороннего обмена. Платформа берет синхронизацию на себя. Пользователь работает с локальной копией нужных данных, когда интернет отсутствует, а при появлении стабильной сети платформа автоматически синхронизирует измененные объекты с центральным сервером через встроенные механизмы маршрутизации.
Подводя итоги: для организации обмена данными с мобильным приложением 1С лучше всего использовать HTTP-сервисы с передачей данных в формате JSON, сериализованном через стандартный СериализаторXDTO. Это обеспечивает оптимальный баланс между скоростью работы сети, экономией заряда батареи и удобством написания программного кода. От использования правил "Конвертации данных" на мобильных устройствах следует полностью отказаться в пользу DTO-структур и порционной передачи данных.