При разработке мобильных решений на платформе 1С часто возникает задача стандартизированного ввода контактной информации клиентов или контрагентов. В типовых конфигурациях для настольной платформы за это отвечает подсистема адресного классификатора из состава БСП (Библиотеки стандартных подсистем), оперирующая базами ГАР и ФИАС. Однако прямое перенесение этого механизма в автономное мобильное приложение невозможно из-за ограничений мобильной платформы. Разберем причины этих ограничений и проанализируем основные архитектурные варианты реализации адресного классификатора на мобильных устройствах.
Попытка загрузить полноценный адресный классификатор напрямую в мобильное приложение сталкивается со следующими барьерами:
Рассмотрим рабочие способы интеграции классификатора в зависимости от требований к онлайн-доступу и автономности.
Если мобильное приложение имеет стабильный доступ к интернету или корпоративной сети, наиболее эффективным и бесплатным решением является вынос поиска адресов на сторону центральной информационной базы. В настольной базе уже развернут и регулярно обновляется стандартный классификатор БСП.
Разберем логику работы по шагам:
HTTPСервис с шаблоном URL (например, /get_address).АвтоПодбор или ОкончаниеВводаТекста поля ввода отправляется асинхронный HTTP-запрос к серверу (обычно при вводе от 3 символов).Посмотрим на пример отправки запроса и обработки результата на стороне мобильного приложения:
Соединение = Новый HTTPСоединение("server.company.ru", 443, , , , 10, Новый ЗащищенноеСоединениеOpenSSL);
Запрос = Новый HTTPЗапрос("/base/hs/address/search?query=" + КодироватьСтроку(СтрокаПоиска, СпособКодированияСтроки.КодировкаURL));
Ответ = Соединение.Получить(Запрос);
Если Ответ.КодСостояния = 200 Тогда
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
Результат = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();
СписокАдресов.Очистить();
Для Каждого СтрАдрес Из Результат Цикл
СписокАдресов.Добавить(СтрАдрес.Представление, СтрАдрес.ЗначениеJSON);
КонецЦикла;
КонецЕсли;
Когда нет возможности постоянно держать открытым доступ к собственной центральной базе 1С из внешней сети, можно использовать облачные сервисы подсказок и стандартизации адресов (например, DaData и аналогичные API).
Особенности данного подхода:
Для сценариев, когда мобильное приложение должно работать без постоянного подключения к интернету, классификатор переносится локально, но в существенно сокращенном виде.
Проанализируем правила оптимизации локальной адресной базы:
Если задача находится на этапе проектирования архитектуры, стоит рассмотреть технологию Мобильного клиента вместо классического автономного Мобильного приложения:
Независимо от выбранного способа подбора адреса, для корректной последующей синхронизации с центральной базой адресные данные в мобильном приложении рекомендуется хранить не простой текстовой строкой, а сериализованной JSON-структурой, содержащей канонические поля и идентификаторы ГАР/ФИАС (GUID адресных объектов, почтовый индекс, коды ОКАТО, ОКТМО и структурированные элементы адреса).