При разработке мобильного решения для торговых агентов («сбор заказов в полях») перед разработчиком встает ключевой вопрос архитектуры: как связать центральную учетную систему (например, УТ, КА, ERP, УТП или УПП) и мобильное устройство. Основные сложности заключаются в обеспечении автономной работы при нестабильном интернете, оптимизации структуры данных и минимизации нагрузки на центральную базу.
Разберем оптимальные архитектурные подходы, особенности проектирования мобильной конфигурации и правила организации обмена данными через HTTPСервисы.
Попытка использовать механизм распределенных информационных баз (РИБ) напрямую между сервером и мобильным приложением не подходит, так как создание полноценного образа РИБ для мобильной платформы не поддерживается. Перегружать мобильное устройство тяжелой структурой метаданных из центральной базы также нельзя из-за ограничений встроенной СУБД SQLite и ресурсов смартфона.
Оптимальная архитектура состоит из трех основных компонентов:
ПланОбмена (без признака РИБ) для фиксации изменений и публикуются HTTPСервисы для взаимодействия с устройствами.Проанализируем структуру объектов мобильного приложения. Справочники в МП создаются с теми же именами, что и в центральной базе (например, Справочник.Номенклатура, Справочник.Контрагенты), однако состав их реквизитов сокращается до минимума.
Для мобильного приложения важны следующие правила проектирования:
УникальныйИдентификатор (UUID), который хранится в базе или сопоставляется на этапе сериализации.Чтобы не выгружать всю базу целиком при каждом сеансе связи, в центральной конфигурации используется механизм планов обмена. Для каждого мобильного устройства регистрируется отдельный узел обмена.
Рассмотрим, как устроен процесс обмена по шагам:
ВыборкаИзменений, формирует JSON-пакет и возвращает его мобильному клиенту.УдалитьРегистрациюИзменений().Посмотрим на пример обработки изменений в коде HTTP-сервиса на стороне центральной базы:
Функция ПолучитьИзменения(УзелОбмена, НомерСообщения) Экспорт
ПакетДанных = Новый Массив;
Выборка = ПланыОбмена.ВыбратьИзменения(УзелОбмена, НомерСообщения);
Пока Выборка.Следующий() Цикл
ДанныеОбъекта = Выборка.Получить();
Если ТипЗнч(ДанныеОбъекта) = Тип("СправочникОбъект.Номенклатура") Тогда
СтруктураТовара = Новый Структура;
СтруктураТовара.Вставить("ИД", Строка(ДанныеОбъекта.Ссылка.УникальныйИдентификатор()));
СтруктураТовара.Вставить("Наименование", ДанныеОбъекта.Наименование);
СтруктураТовара.Вставить("Артикул", ДанныеОбъекта.Артикул);
ПакетДанных.Добавить(СтруктураТовара);
КонецЕсли;
КонецЦикла;
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, ПакетДанных);
Возврат ЗаписьJSON.Закрыть();
КонецФункции
Когда торговый агент оформляет заказ в автономном режиме, документ сохраняется в локальной базе смартфона. При появлении интернет-соединения мобильное приложение отправляет накопленные заказы на HTTP-сервис центральной базы.
Рассмотрим важные рекомендации по обработке входящих заказов в ЦБ:
200 OK.ЗаказПокупателя / ЗаказКлиента, выполняет валидацию остатков и проводит его.Пример структуры входящего HTTP-сервиса для регистрации заказа:
Функция ПринятьЗаказ(ЗапросHTTP)
ТелоСтрокой = ЗапросHTTP.ПолучитьТелоКакСтроку();
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(ТелоСтрокой);
ДанныеЗаказа = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();
// Запись во входящую очередь без мгновенного проведения
ЗаписьОчереди = РегистрыСведений.ОчередьВходящихЗаказов.СоздатьМенеджерЗаписи();
ЗаписьОчереди.ИдентификаторЗаказа = ДанныеЗаказа.ИД;
ЗаписьОчереди.ДатаПолучения = ТекущаяДатаСеанса();
ЗаписьОчереди.ДанныеJSON = ТелоСтрокой;
ЗаписьОчереди.Статус = Перечисления.СтатусыОбработкиЗаказов.ВХранилище;
ЗаписьОчереди.Записать();
ОтветHTTP = Новый HTTPСервисОтвет(200);
ОтветHTTP.УстановитьТелоИзСтроки("{""Статус"": ""Принято""}");
Возврат ОтветHTTP;
КонецФункции
При первичной инициализации приложения объем номенклатурного справочника может составлять десятки тысяч позиций. Для стабильной работы мобильного устройства необходимо внедрить следующие механизмы:
Страница или Смещение. Это предотвращает нехватку оперативной памяти на мобильном устройстве.Если нет необходимости разрабатывать собственную конфигурацию с нуля и вручную настраивать сериализацию через HTTP-сервисы, можно рассмотреть технологию Мобильный клиент с автономным режимом. В этом случае используется основная конфигурация предприятия (например, 1С:Управление торговлей 11), для которой адаптируются мобильные формы. Платформа 1С берет на себя автоматическое переключение в автономный режим при потере связи и последующую фоновую синхронизацию данных встроенными механизмами.