При разработке мобильного приложения на платформе 1С перед разработчиком встает ключевая архитектурная задача: как правильно и надежно связать мобильное устройство с центральной информационной базой. Рассмотрим основные подходы к проектированию обмена данными, проанализируем выбор протоколов и разберем правила работы с изменениями объектов.
Использование файловых выгрузок или резервных копий (выгрузок dt) через облачные диски не подходит для промышленной эксплуатации из-за высоких накладных расходов, отсутствия гибкости и невозможности гранулярного контроля ошибок. Классическая и наиболее надежная схема строится на взаимодействии по принципу клиент-сервер:
ПланОбмена, в состав которого включаются справочники, документы или регистры, подлежащие выгрузке. При модификации объектов платформа автоматически регистрирует изменения для узла обмена.Выясним, какие протоколы и форматы наиболее эффективны в мобильной среде. Традиционные веб-сервисы (SOAP) и универсальный формат EnterpriseData на базе XML создают значительную избыточную нагрузку на мобильный процессор и оперативную память из-за сложной валидации XML-схем. Для мобильной разработки предпочтительны следующие решения:
ЗаписьJSON и ЧтениеJSON выполняются значительно быстрее парсинга XML и требуют меньше оперативной памяти устройства.Критически важный аспект надежного обмена — подтверждение успешной обработки данных (квитирование). Нельзя снимать объекты с регистрации в плане обмена сразу в момент формирования пакета на мобильном устройстве, так как при сбое связи данные будут утеряны для последующих выгрузок.
Разберем правильный алгоритм взаимодействия по шагам:
ПланыОбмена.УдалитьРегистрациюИзменений().Посмотрим на пример процедуры формирования пакета изменений на стороне мобильного приложения с использованием потоковой записи JSON:
Процедура ВыгрузитьИзмененияНаСервер(УзелОбмена, АдресСервиса)
Выборка = ПланыОбмена.ВыбратьИзменения(УзелОбмена, 1);
ЗаписьJSON = Новый ЗаписьJSON;
ПараметрыЗаписи = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто);
ИмяВременногоФайла = ПолучитьИмяВременногоФайла("json");
ЗаписьJSON.ОткрытьФайл(ИмяВременногоФайла);
ЗаписьJSON.ЗаписатьНачалоМассива();
Пока Выборка.Следующий() Цикл
ДанныеОбъекта = Выборка.Получить();
ЗаписьJSON.ЗаписатьНачалоОбъекта();
ЗаписьJSON.ЗаписатьИмяСвойства("UUID");
ЗаписьJSON.ЗаписатьЗначение(Строка(ДанныеОбъекта.Ссылка.УникальныйИдентификатор()));
ЗаписьJSON.ЗаписатьИмяСвойства("Наименование");
ЗаписьJSON.ЗаписатьЗначение(ДанныеОбъекта.Наименование);
ЗаписьJSON.ЗаписатьКонецОбъекта();
КонецЦикла;
ЗаписьJSON.ЗаписатьКонецМассива();
ЗаписьJSON.Закрыть();
// Отправка файла через HTTP-соединение
Если ОтправитьФайлНаСервер(ИмяВременногоФайла, АдресСервиса) Тогда
// Снимаем переданные данные с регистрации только после подтверждения
ПланыОбмена.УдалитьРегистрациюИзменений(УзелОбмена, 1);
КонецЕсли;
УдалитьФайлы(ИмяВременногоФайла);
КонецПроцедуры
При проектировании синхронизации важно учитывать специфику работы мобильных операционных систем (Android, iOS):
УникальныйИдентификатор (UUID). Центральная база при создании нового объекта принимает этот UUID в качестве базового идентификатора.