Как разработать мобильное приложение для 1С:Управление торговлей 10.3: выбор архитектуры и реализация обменов

Программист 1С v8.3 (Обычные формы) 1С:Управление торговлей Управленческий учет IT и автоматизация бизнеса
← На главную

Разработка мобильного приложения для экосистемы 1С часто сталкивает разработчиков с серьезной дилеммой, особенно когда речь идет о сильно доработанных и устаревших конфигурациях. Ярким примером является 1С:Управление торговлей ред. 10.3 (УТ 10.3). Эта конфигурация работает на обычных формах, что делает невозможным прямое использование современного мобильного клиента 1С «из коробки».

В этой статье мы подробно разберем, какой путь разработки выбрать, проанализируем архитектурные варианты, сравним технологии интеграции и выясним, как построить безопасную и быструю систему взаимодействия мобильного приложения с исторической базой данных.

В чем сложность интеграции мобильных решений с УТ 10.3?

Основная проблема заключается в технологическом разрыве между платформой мобильных приложений 1С и архитектурой обычных форм. Давайте выделим ключевые препятствия:

  1. Отсутствие управляемого интерфейса. Мобильный клиент 1С требует, чтобы в основной конфигурации все формы и модули были адаптированы под управляемый режим. Перевод крупной, сильно доработанной УТ 10.3 на управляемые формы — это колоссальный объем работы, сопоставимый по стоимости с переходом на 1С:ERP или 1С:КА 2.
  2. Избыточность метаданных. В мобильном приложении пользователю (курьеру, торговому представителю, кладовщику) нужен жестко ограниченный набор функций. Тащить всю структуру метаданных тяжелой УТ в мобильное устройство бессмысленно и вредно для производительности.
  3. Проблемы безопасности. Прямая публикация базы данных, в которой ведется оперативный и финансовый учет компании, во внешнюю сеть несет огромные риски уязвимости и DDoS-атак.

Разберем по шагам три основных архитектурных сценария решения этой задачи, их плюсы, минусы и особенности реализации.

---

Вариант 1. Создание отдельной конфигурации на управляемых формах (Буферная база)

Этот вариант по праву считается «золотым стандартом» при интеграции старых конфигураций с мобильным миром. Мы создаем промежуточную (буферную) базу данных на современной версии платформы 1С 8.3, которая будет выступать в роли шлюза.

Рассмотрим структуру этого решения подробнее:

Посмотрим на схему взаимодействия систем:

[Мобильный клиент] <--> (Мобильный интернет) <--> [Буферная база (УФ)] <--> (Локальная сеть / HTTP) <--> [Рабочая УТ 10.3 (Обычные формы)]

Преимущества подхода:

  1. Рабочая база УТ 10.3 остается в полной безопасности внутри локального контура. Она вообще «не знает» о существовании мобильных клиентов.
  2. Отличная скорость работы мобильного клиента, так как буферная база максимально облегчена.
  3. Разработка интерфейса мобильного приложения ведется на современном стеке 1С без оглядки на ограничения старой платформы.

---

Вариант 2. Интеграция через HTTP-сервисы (Онлайн-режим)

Если специфика бизнеса требует работы исключительно в режиме реального времени (онлайн), и данные на мобильном устройстве должны обновляться мгновенно (например, актуальные остатки товаров на складе, которые меняются каждую секунду), лучшим выбором будет использование 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).

---

Вариант 3. Оффлайн-приложение с планами обмена

Этот сценарий необходим, если мобильные сотрудники работают в условиях отсутствия связи (например, на подземных паркингах, загородных трассах или экранированных железобетонных складах). Здесь нам потребуется полноценное мобильное приложение 1С с локальной базой данных на самом устройстве.

Для реализации синхронизации мы применим типовой механизм платформы — Планы обмена. Проанализируем, как правильно организовать этот процесс:

  1. Создаем специализированный план обмена в основной конфигурации УТ 10.3 (например, ПланОбменаМобильныеУстройства).
  2. Включаем в состав плана обмена только те объекты, изменения которых должны мигрировать на мобильные устройства.
  3. Для каждого мобильного устройства регистрируем свой узел в плане обмена.
  4. При изменении данных в УТ 10.3 платформа автоматически регистрирует изменения для узлов. Раз в определенный период (или по запросу с мобильного устройства) происходит выгрузка пакета изменений.

Регистрацию изменений объектов можно тонко настраивать в модуле плана обмена, чтобы не передавать лишние данные. Например, курьеру должны выгружаться только те заказы, в которых он назначен ответственным лицом. Посмотрим на пример кода фильтрации регистрации изменений при записи документа:


Процедура ПриЗаписиДокументаДляМобильного(Источник, Отказ) Экспорт
    
    // Проверим, что документ проводится и не является помеченным на удаление
    Если Источник.ПометкаУдаления Тогда
        Возврат;
    КонецЕсли;
    
    // Получаем список активных мобильных сотрудников
    ВыборкаУзлов = ПланыОбмена.ПланОбменаМобильныеУстройства.Выбрать();
    Пока ВыборкаУзлов.Следующий() Цикл
        
        // Фильтруем отправку документов: отправляем заказ только ответственному курьеру
        Если ВыборкаУзлов.Курьер = Источник.Экспедитор Тогда
            ПланыОбмена.ЗарегистрироватьИзменения(ВыборкаУзлов.Ссылка, Источник);
        КонецЕсли;
        
    КонецЦикла;
    
КонецПроцедуры

При таком подходе объем передаваемых данных сокращается в десятки раз, исключая избыточную нагрузку на мобильную базу данных и каналы связи.

---

Вопросы безопасности и защита контура данных (Middleware)

Проанализируем крайне важный аспект, который часто упускают из виду начинающие разработчики — безопасность информационной системы предприятия. Публикация HTTP-сервисов напрямую из рабочей базы УТ 10.3 «в инет» крайне опасна. Если злоумышленники проведут успешную атаку на опубликованный веб-сервер, под угрозой окажется вся операционная деятельность компании.

Для минимизации этих рисков мы настоятельно рекомендуем внедрять архитектурный паттерн Middleware (промежуточный слой):

---

Отказ от устаревшего оборудования и операционных систем

В ходе проектирования мобильной инфраструктуры важно сразу отказаться от бесперспективных технологий. В частности, речь идет об операционной системе Windows CE (WinCE). Несмотря на то, что на складах до сих пор можно встретить старые терминалы сбора данных (ТСД) на этой ОС, развивать под нее новые решения бессмысленно:

---

Выводы и рекомендации

Подведем итог нашего анализа. Выбор архитектурного решения зависит от конкретных задач вашего бизнеса:

← На главную