Перенос данных между стационарной базой 1С и мобильным приложением (МП) — задача, с которой сталкивается каждый разработчик при создании мобильных решений. Ситуация осложняется, когда между системами нет прямой постоянной связи. В данной статье мы подробно разберем, как организовать передачу справочника, минимизировав затраты на разработку и обеспечив надежность данных.
Рассмотрим наиболее бюджетный способ, который не требует наличия публичного веб-сервера. Если база самописная и связь не предполагается, мы можем использовать промежуточный канал связи, например, электронную почту или облачное хранилище.
Суть метода заключается в выгрузке справочника в файл формата XML. Для этого в основной базе создается обработка, которая перебирает элементы справочника. Проанализируем процесс: при выгрузке иерархического справочника важно передавать не только данные элементов, но и их структуру (принадлежность к группам).
Для реализации выгрузки в 1С удобно использовать объекты ЗаписьXML и СериализаторXDTO. Посмотрим на пример кода для выгрузки:
Запись = Новый ЗаписьXML;
Запись.ОткрытьФайл("C:\temp\catalog_export.xml");
Запись.ЗаписатьОбъявлениеXML();
Запись.ЗаписатьНачалоЭлемента("ДанныеСправочника");
Выборка = Справочники.Номенклатура.Выбрать();
Пока Выборка.Следующий() Цикл
СериализаторXDTO.ЗаписатьXML(Запись, Выборка.ПолучитьОбъект());
КонецЦикла;
Запись.ЗаписатьКонецЭлемента();
Запись.Закрыть();
В мобильном приложении нам потребуется написать обратную процедуру, которая будет использовать ЧтениеXML. Главный минус этого способа — необходимость ручной передачи файла. Однако для разового переноса или редких обновлений это решение является самым дешевым.
Разберем более продвинутый и автоматизированный метод. Если у нас есть возможность опубликовать базу на веб-сервере (например, через Apache или IIS), стоит использовать программные интерфейсы.
HTTP-сервисы и формат JSON на сегодняшний день являются стандартом для мобильной разработки. В отличие от тяжеловесного XML, формат JSON более компактен, что критично для мобильного интернета. Выясним преимущества: мобильная платформа 1С нативно поддерживает работу с JSON, а парсинг таких данных происходит значительно быстрее.
Алгоритм работы выглядит следующим образом:
HTTP-сервис.GET, который при запросе формирует массив структур из данных справочника.JSON и возвращаем в теле ответа.HTTPСоединение.Пример формирования JSON в основной базе:
Функция ПолучитьДанныеСправочника(Запрос)
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
МассивДанных = Новый Массив;
Выборка = Справочники.Контрагенты.Выбрать();
Пока Выборка.Следующий() Цикл
СтруктураОбъекта = Новый Структура("Код, Наименование, ИНН", Выборка.Код, Выборка.Наименование, Выборка.ИНН);
МассивДанных.Добавить(СтруктураОбъекта);
КонецЦикла;
ЗаписатьJSON(ЗаписьJSON, МассивДанных);
СтрокаJSON = ЗаписьJSON.Закрыть();
Ответ = Новый HTTPСервисОтвет(200);
Ответ.УстановитьТелоИзСтроки(СтрокаJSON);
Возврат Ответ;
КонецФункции
Если мы хотим перенести справочник с минимальными затратами на программирование, нам поможет стандартный интерфейс OData. Это встроенный механизм 1С, который позволяет получить доступ к данным базы по HTTP без написания кода сервисов.
Проанализируем шаги для настройки:
http://server/base/odata/standard.odata/Catalog_Номенклатура.Этот способ позволяет не только получать данные, но и фильтровать их прямо в запросе, что экономит трафик.
При переносе иерархических справочников часто возникает проблема: как правильно восстановить дерево групп в мобильном приложении? Если просто переносить элементы в цикле, можно столкнуться с ситуацией, когда у элемента еще не создан Родитель.
Выясним правильную последовательность действий:
УникальныйИдентификатор. Это позволит избежать дублей и надежно связать объекты.ЭтоГруппа = Истина). На втором этапе загружаем элементы, привязывая их к уже созданным группам.Ссылка, Наименование, Родитель и ЭтоГруппа, а затем выгрузить её в макет или файл.Для мобильных приложений, разработанных на платформе 1С, существует механизм автономной работы. Рассмотрим этот вариант как наиболее архитектурно верный для регулярной синхронизации.
Создав ПланОбмена и включив в него справочник, мы получаем возможность выполнять инкрементальную выгрузку. Система будет сама отслеживать, какие элементы изменились с момента последнего обмена, и передавать только их, а не весь справочник целиком.
Если справочник невелик (до 100 позиций) и настройка серверов невозможна, рассмотрим экзотический, но эффективный метод — QR-коды. Данные справочника упаковываются в JSON, сжимаются и выводятся в виде одного или нескольких QR-кодов в основной базе. Пользователь мобильного приложения просто сканирует их камерой. Это полностью снимает вопросы сетевой связности.
Также не стоит забывать про использование Telegram-ботов. База 1С может отправлять файл со справочником в чат, а мобильное приложение, используя API Telegram, будет автоматически забирать его оттуда при запуске.
Важно помнить, что процесс загрузки большого справочника может "заморозить" интерфейс мобильного приложения. Чтобы обеспечить комфортную работу пользователя, всегда выносите процедуру загрузки и обработки данных в фоновое задание. Это позволит приложению оставаться отзывчивым, пока данные записываются в локальную базу данных мобильного устройства.
Подводя итог, выбор метода зависит от частоты обновлений и технических условий. Для разового переноса достаточно выгрузки в XML через макет, а для постоянной работы лучше настроить HTTP-сервис с передачей JSON.