Разработка мобильного приложения для экосистемы 1С часто сталкивает разработчиков с серьезной дилеммой, особенно когда речь идет о сильно доработанных и устаревших конфигурациях. Ярким примером является 1С:Управление торговлей ред. 10.3 (УТ 10.3). Эта конфигурация работает на обычных формах, что делает невозможным прямое использование современного мобильного клиента 1С «из коробки».
В этой статье мы подробно разберем, какой путь разработки выбрать, проанализируем архитектурные варианты, сравним технологии интеграции и выясним, как построить безопасную и быструю систему взаимодействия мобильного приложения с исторической базой данных.
Основная проблема заключается в технологическом разрыве между платформой мобильных приложений 1С и архитектурой обычных форм. Давайте выделим ключевые препятствия:
Разберем по шагам три основных архитектурных сценария решения этой задачи, их плюсы, минусы и особенности реализации.
---
Этот вариант по праву считается «золотым стандартом» при интеграции старых конфигураций с мобильным миром. Мы создаем промежуточную (буферную) базу данных на современной версии платформы 1С 8.3, которая будет выступать в роли шлюза.
Рассмотрим структуру этого решения подробнее:
Номенклатура, Контрагенты, документы ЗаказПокупателя).Посмотрим на схему взаимодействия систем:
[Мобильный клиент] <--> (Мобильный интернет) <--> [Буферная база (УФ)] <--> (Локальная сеть / HTTP) <--> [Рабочая УТ 10.3 (Обычные формы)]
Преимущества подхода:
---
Если специфика бизнеса требует работы исключительно в режиме реального времени (онлайн), и данные на мобильном устройстве должны обновляться мгновенно (например, актуальные остатки товаров на складе, которые меняются каждую секунду), лучшим выбором будет использование HTTP-сервисов.
Некоторые разработчики по старой привычке пытаются использовать для связи COM-соединение (V83.Application). Давайте разберем, почему делать этого категорически нельзя:
Вместо устаревшего COM мы спроектируем легковесные HTTP-сервисы на стороне УТ 10.3. HTTP-сервисы в 1С работают на пуле веб-серверов (IIS или Apache), не требуют создания тяжелых сеансов под каждый запрос и отрабатывают за сотые доли секунды.
Рассмотрим пример создания простого HTTP-запроса для получения остатков товаров из основной базы УТ 10.3. Ниже представлен пример кода серверной функции, обрабатывающей GET-запрос от мобильного приложения:
Функция ПолучитьОстаткиТовара(Запрос)
// Получаем параметры из URL-запроса
Артикул = Запрос.ПараметрыЗапроса.Получить("Артикул");
Если Не ЗначениеЗаполнено(Артикул) Тогда
Ответ = Новый HTTPСервисОтвет(400); // Bad Request
Ответ.УстановитьТелоИзСтроки("Не указан артикул товара");
Возврат Ответ;
КонецЕсли;
// Формируем запрос к базе данных УТ 10.3
ЗапросБД = Новый Запрос;
ЗапросБД.Текст =
"ВЫБРАТЬ
| ТоварыНаСкладахОстатки.Номенклатура.Наименование КАК Наименование,
| ТоварыНаСкладахОстатки.КоличествоОстаток КАК Остаток
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(, Номенклатура.Артикул = &Артикул) КАК ТоварыНаСкладахОстатки";
ЗапросБД.УстановитьПараметр("Артикул", Артикул);
Результат = ЗапросБД.Выполнить();
// Формируем структуру ответа в формате JSON
ДанныеОтвета = Новый Структура;
Если Не Результат.Пустой() Тогда
Выборка = Результат.Выбрать();
Выборка.Следующий();
ДанныеОтвета.Вставить("Успех", Истина);
ДанныеОтвета.Вставить("Товар", Выборка.Наименование);
ДанныеОтвета.Вставить("Остаток", Выборка.Остаток);
Иначе
ДанныеОтвета.Вставить("Успех", Ложь);
ДанныеОтвета.Вставить("Сообщение", "Товар не найден или отсутствует на складе");
КонецЕсли;
// Сериализуем данные в JSON
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, ДанныеОтвета);
СтрокаJSON = ЗаписьJSON.Закрыть();
Ответ = Новый HTTPСервисОтвет(200); // OK
Ответ.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
Ответ.УстановитьТелоИзСтроки(СтрокаJSON, КодировкаТекста.UTF8);
Возврат Ответ;
КонецФункции
Использование JSON в качестве формата обмена обеспечивает минимальный объем передаваемого трафика, что критически важно при работе через нестабильный мобильный интернет (3G/4G).
---
Этот сценарий необходим, если мобильные сотрудники работают в условиях отсутствия связи (например, на подземных паркингах, загородных трассах или экранированных железобетонных складах). Здесь нам потребуется полноценное мобильное приложение 1С с локальной базой данных на самом устройстве.
Для реализации синхронизации мы применим типовой механизм платформы — Планы обмена. Проанализируем, как правильно организовать этот процесс:
ПланОбменаМобильныеУстройства).Регистрацию изменений объектов можно тонко настраивать в модуле плана обмена, чтобы не передавать лишние данные. Например, курьеру должны выгружаться только те заказы, в которых он назначен ответственным лицом. Посмотрим на пример кода фильтрации регистрации изменений при записи документа:
Процедура ПриЗаписиДокументаДляМобильного(Источник, Отказ) Экспорт
// Проверим, что документ проводится и не является помеченным на удаление
Если Источник.ПометкаУдаления Тогда
Возврат;
КонецЕсли;
// Получаем список активных мобильных сотрудников
ВыборкаУзлов = ПланыОбмена.ПланОбменаМобильныеУстройства.Выбрать();
Пока ВыборкаУзлов.Следующий() Цикл
// Фильтруем отправку документов: отправляем заказ только ответственному курьеру
Если ВыборкаУзлов.Курьер = Источник.Экспедитор Тогда
ПланыОбмена.ЗарегистрироватьИзменения(ВыборкаУзлов.Ссылка, Источник);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
При таком подходе объем передаваемых данных сокращается в десятки раз, исключая избыточную нагрузку на мобильную базу данных и каналы связи.
---
Проанализируем крайне важный аспект, который часто упускают из виду начинающие разработчики — безопасность информационной системы предприятия. Публикация HTTP-сервисов напрямую из рабочей базы УТ 10.3 «в инет» крайне опасна. Если злоумышленники проведут успешную атаку на опубликованный веб-сервер, под угрозой окажется вся операционная деятельность компании.
Для минимизации этих рисков мы настоятельно рекомендуем внедрять архитектурный паттерн Middleware (промежуточный слой):
---
В ходе проектирования мобильной инфраструктуры важно сразу отказаться от бесперспективных технологий. В частности, речь идет об операционной системе Windows CE (WinCE). Несмотря на то, что на складах до сих пор можно встретить старые терминалы сбора данных (ТСД) на этой ОС, развивать под нее новые решения бессмысленно:
---
Подведем итог нашего анализа. Выбор архитектурного решения зависит от конкретных задач вашего бизнеса: