Это кейс про мобильное приложение для автосервиса на 1С. Клиент — автотехцентр: мастер-приёмщик встречает автомобиль на территории, а не за стойкой. Задача — дать ему приложение на телефоне и планшете, чтобы прямо у машины оформить приёмку, собрать заявку с работами и запчастями и отправить её в центральную 1С, не возвращаясь к компьютеру.
Приложение «СпрингАвтодилер» сделано на мобильной платформе 1С:Предприятие — это автономная база на устройстве с собственными справочниками и документами, которая обменивается с центральной учётной базой по HTTP. Работает офлайн: связь с сервером нужна только в момент синхронизации.
Что внутри приложения
На устройстве живёт своя конфигурация: справочники Автомобили, Автоработы, Номенклатура, Сотрудники, Цеха, СкладыКомпании и документ Заявка — мобильный аналог заказ-наряда. Приёмщик выбирает автомобиль и клиента, добавляет работы и запчасти, при необходимости сканирует QR-код номенклатуры камерой телефона. Формы документа сделаны отдельно под iOS и Android (ФормаДокумента_Phone_iOS и _Android), чтобы интерфейс был родным для каждой платформы.
Обмен с центральной 1С по HTTP
Мобильное приложение не имеет прямого доступа к базе автосервиса — оно общается с ней через HTTP-сервис. Пакет обмена сериализуется в хранилище значений и уходит POST-запросом на сервер, ответ так же десериализуется обратно:
Функция HTTPServer_POST(ПакетДляОтправкиНаСервер, ВидЗапроса, СтекОшибок) Экспорт
Соединение = ПолучитьСоединениеHTTP();
Запрос = Новый HTTPЗапрос(
Константы.СтрокаПодключенияHTTP.Получить()
+ Перечисления.ВидыPostЗапросов.ПолучитьФункциюДляPOSTЗапроса(ВидЗапроса));
Запрос.УстановитьТелоИзСтроки(ПоместитьПакетВХранилище(ПакетДляОтправкиНаСервер));
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
Если Ответ.КодСостояния = 200 Тогда
Возврат ПолучитьПакетИзХранилища(Ответ.ПолучитьТелоКакСтроку());
КонецЕсли;
КонецФункции
Виды запросов (создать заказ-наряд, синхронизация, push) вынесены в перечисление — сервер по ним понимает, какую операцию выполнить. При каждом обмене приложение передаёт системную информацию устройства (версия ОС и приложения, процессор, память) и данные регистрации изменений, а флаг «идёт обмен» защищает от параллельного запуска синхронизации.
Синхронизация справочников и заявок
Ответ сервера — пакет обмена, разложенный по типам данных. Приложение проходит его и грузит справочники и документы. Состав реквизитов для загрузки определяется динамически из метаданных, поэтому добавление нового поля в справочник не ломает обмен:
Для Каждого ЭлСтр Из СтрОтвета Цикл
ТипДанных = Метаданные.НайтиПоТипу(ЭлСтр.Ключ);
Если ЭлСтр.Ключ = Тип("СправочникСсылка.Автоработы")
Или ЭлСтр.Ключ = Тип("СправочникСсылка.Номенклатура")
// ... прочие справочники
Тогда
ЗагрузкаСправочников(ЭлСтр.Значение, ТипДанных.Имя, СтрРеквизитов);
ИначеЕсли ЭлСтр.Ключ = Тип("ДокументСсылка.Заявка") Тогда
ЗагрузкаДокументовБезПроведения(ЭлСтр.Значение, ТипДанных);
КонецЕсли;
КонецЦикла;
Заказ-наряд из мобильной заявки создаётся в центральной базе отдельными командами — «Создать», «Создать с закрытием», «Обновить», — каждая уходит своим HTTP-запросом. Синхронизацию можно запускать вручную или фоновым заданием; результат каждого обмена пишется в журнал, а дата последней синхронизации хранится в константе.
Push-уведомления на iOS и Android
Чтобы приёмщик узнавал о событиях (например, готовности запчасти или назначении заявки), приложение получает push. Уведомления складываются в очередь — регистр PushУведомления — и рассыльщик отправляет их по платформе устройства: Android напрямую через сервис Google, iOS — через собственный серверный шлюз к APNs. После доставки сообщение удаляется из очереди:
Для каждого PushСообщение Из СписокСообщений Цикл
Если PushСообщение.МобильнаяОС = Перечисления.МобильныеОС.Android Тогда
Ответ = ОтправитьPUSH_Android(PushСообщение.Идентификатор, PushСообщение.Данные, PushСообщение.ТекстСообщения);
ИначеЕсли PushСообщение.МобильнаяОС = Перечисления.МобильныеОС.iOS Тогда
Ответ = ОтправитьPUSH_IOS(PushСообщение.Идентификатор, PushСообщение.Данные, PushСообщение.ТекстСообщения);
КонецЕсли;
Если Ответ = 200 Тогда
УдалитьСообщениеИзСпискаОтправки(PushСообщение);
КонецЕсли;
КонецЦикла;
Ещё в приложении
Авторизация и регистрация устройства, разграничение доступа по ролям, версионирование обмена, обработка и журналирование ошибок клиента, подбор номенклатуры и уведомления пользователю. Всё это — стандартный «обвес» промышленного мобильного решения на 1С, который делает приложение пригодным для ежедневной работы смены приёмщиков.
Итог
Автосервис получил мобильный инструмент приёмки: заявки оформляются у автомобиля и уходят в центральную 1С заказ-нарядами, справочники приезжают на устройство обменом, а push держат приёмщика в курсе. Это часть общего проекта автоматизации автотехцентра — там же настроена интеграция 1С с Битрикс24 для отдела продаж. Разбор серверной части обмена — в статье HTTP-сервис 1С для мобильного приложения, а реализация push под iOS — в статье Push-уведомления на мобильной 1С под iOS. Полный маршрут разработки и защиты мобильных решений на 1С — на курсе Защита мобильного клиента 1С.