Как разработать мобильное приложение для 1С:ERP без изменения типовой конфигурации?

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

При внедрении мобильных рабочих мест на складе или производстве часто возникает жесткое требование: основная конфигурация 1С:ERP должна оставаться на полной поддержке. Изменять типовой код конфигурации категорически нельзя, чтобы не усложнять последующие обновления системы. При этом перед разработчиком стоит задача реализовать мобильное приложение для ТСД (терминалов сбора данных) или смартфонов, которое позволит кладовщику по штрихкоду мгновенно получать актуальную информацию о товаре: его остаток, склад, ячейку хранения, характеристики и другие реквизиты.

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

Постановка проблемы и анализ исходных данных

Вводные данные задачи следующие: база 1С:ERP, около 2500–3000 активных позиций номенклатуры (с дополнительными свойствами и реквизитами), адресное хранение (склады и ячейки). Требуется обеспечить быстрый вывод информации о товаре при сканировании штрихкода.

В ходе обсуждения участники форума пришли к выводу, что объем данных в 2500 позиций — это крайне малый объем для современных мобильных устройств и платформы 1С. Однако ключевой вопрос заключается в архитектуре взаимодействия мобильного клиента/приложения и центральной базы 1С:ERP. Нам необходимо передавать данные оперативно, не перегружая мобильное устройство и не внося изменений в метаданные основной конфигурации.

Рассмотрим четыре основных технических подхода к реализации данной задачи.


Вариант 1. Мобильный клиент 1С вместо автономного мобильного приложения

В исходном запросе автор планировал создавать отдельное «Мобильное приложение» (автономную базу данных на мобильном устройстве с синхронизацией). Однако для задачи оперативного получения остатков и ячеек хранения автономный режим (офлайн) малоэффективен. Остатки на адресных складах ERP меняются непрерывно. Выгруженная даже полчаса назад информация о ячейках и свободных остатках быстро теряет актуальность.

Оптимальным решением здесь выступает Мобильный клиент 1С:

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

Вариант 2. HTTP-сервисы в расширении (Архитектура с мобильным приложением)

Если специфика работы склада требует наличия автономного мобильного приложения (например, при слабом покрытии Wi-Fi), нам потребуется механизм передачи данных. Лучшим современным решением для интеграции мобильного приложения с 1С:ERP является использование собственного HTTP-сервиса, созданного внутри расширения.

Вопреки старым заблуждениям, платформа 1С:Предприятие полностью поддерживает создание и публикацию HTTP-сервисов и Web-сервисов внутри расширений конфигурации. Это позволяет передавать данные в легком и быстром формате JSON.

Разберем алгоритм взаимодействия по шагам:

  1. Мобильное приложение считывает штрихкод товара.
  2. Мобильное устройство отправляет GET-запрос к веб-серверу, на котором опубликована база ERP, передавая штрихкод в параметрах запроса.
  3. HTTP-сервис, расположенный в расширении ERP, принимает запрос, выполняет быстрый запрос к регистру сведений ШтрихкодыНоменклатуры и остаткам товаров, после чего формирует ответ в формате JSON.
  4. Мобильное приложение мгновенно отображает полученные данные на экране.

Проанализируем пример кода для HTTP-сервиса в расширении 1С:ERP, который обрабатывает запрос штрихкода и возвращает данные о товаре и его остатках:


Функция ПолучитьДанныеПоШтрихкоду(Запрос)
    
    Штрихкод = Запрос.ПараметрыЗапроса.Получить("barcode");
    
    Если Не ЗначениеЗаполнено(Штрихкод) Тогда
        Ответ = Новый HTTPСервисОтвет(400);
        Ответ.УстановитьТелоИзСтроки("Не указан штрихкод в параметрах запроса");
        Возврат Ответ;
    КонецЕсли;
    
    // Выполняем поиск номенклатуры и остатков по штрихкоду
    ЗапросКБД = Новый Запрос;
    ЗапросКБД.Текст = 
        "ВЫБРАТЬ РАЗРЕШЕННЫЕ
        |   Штрихкоды.Номенклатура КАК Номенклатура,
        |   Штрихкоды.Номенклатура.Наименование КАК Наименование,
        |   Штрихкоды.Номенклатура.Код КАК Код,
        |   ЕСТЬNULL(ТоварыНаСкладахОстатки.ВНаличииОстаток, 0) КАК Остаток,
        |   ЕСТЬNULL(ТоварыВЯчейкахОстатки.Ячейка.Код, ""Не указана"") КАК Ячейка
        |ИЗ
        |   РегистрСведений.ШтрихкодыНоменклатуры КАК Штрихкоды
        |   ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
        |       ПО Штрихкоды.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура
        |   ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВЯчейках.Остатки КАК ТоварыВЯчейкахОстатки
        |       ПО Штрихкоды.Номенклатура = ТоварыВЯчейкахОстатки.Номенклатура
        |ГДЕ
        |   Штрихкоды.Штрихкод = &Штрихкод";
        
    ЗапросКБД.УстановитьПараметр("Штрихкод", Штрихкод);
    Выборка = ЗапросКБД.Выполнить().Выбрать();
    
    ДанныеТовара = Новый Структура;
    Если Выборка.Следующий() Тогда
        ДанныеТовара.Вставить("Success", Истина);
        ДанныеТовара.Вставить("Name", Выборка.Наименование);
        ДанныеТовара.Вставить("Code", Выборка.Код);
        ДанныеТовара.Вставить("Stock", Выборка.Остаток);
        ДанныеТовара.Вставить("Cell", Выборка.Ячейка);
    Иначе
        ДанныеТовара.Вставить("Success", Ложь);
        ДанныеТовара.Вставить("Message", "Товар не найден");
    EndIf;
    
    // Сериализуем данные в JSON
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку();
    ЗаписатьJSON(ЗаписьJSON, ДанныеТовара);
    СтрокаJSON = ЗаписьJSON.Закрыть();
    
    Ответ = Новый HTTPСервисОтвет(200);
    Ответ.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
    Ответ.УстановитьТелоИзСтроки(СтрокаJSON, КодировкаТекста.UTF8);
    
    Возврат Ответ;
    
КонецФункции

Вариант 3. Использование стандартного интерфейса OData (REST API)

Выясним, как решить задачу вообще без написания кода на стороне 1С:ERP и без использования расширений. Для этого идеально подходит стандартный программный интерфейс OData, предоставляемый платформой 1С из коробки.

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

  1. При публикации информационной базы ERP на веб-сервере (Apache или IIS) в окне публикации установить флажок «Публиковать стандартный интерфейс OData».
  2. Настроить доступ к объектам метаданных через встроенный стандартный механизм (например, программно разрешить доступ к справочнику Номенклатура и регистру ШтрихкодыНоменклатуры с помощью метода ПолучитьСоставСтандартногоИнтерфейсаOData()).

После публикации мобильное приложение сможет выполнять прямые HTTP-запросы к базе ERP. Например, для поиска номенклатуры по штрихкоду мобильное приложение выполняет GET-запрос к регистру сведений штрихкодов:

http://[АдресСервера]/[ИмяБазы]/odata/standard.odata/InformationRegister_ШтрихкодыНоменклатуры?$filter=Штрихкод eq '1234567890123'&$format=json

Платформа 1С мгновенно вернет JSON-пакет, содержащий ссылку (GUID) найденной номенклатуры. Вторым быстрым запросом к виртуальной таблице остатков мобильное приложение получает информацию по складам и ячейкам. Этот способ полностью безопасен для обновлений ERP, так как использует штатный функционал платформы.


Вариант 4. Планы обмена в расширении для офлайн-режима

Если на складе отсутствует стабильное беспроводное подключение к сети, придется использовать полноценное мобильное приложение с собственной локальной базой данных СУБД SQLite (или мобильной версией 1С). Чтобы синхронизировать 2500 позиций номенклатуры, нам понадобится механизм регистрации изменений — План обмена.

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

Разберем схему реализации офлайн-синхронизации:

  1. Создаем новое расширение конфигурации.
  2. В расширении создаем План обмена (например, _МОбменМобильныеУстройства).
  3. В состав плана обмена включаем только необходимые объекты: справочник Номенклатура, ХарактеристикиНоменклатуры, регистр сведений ШтрихкодыНоменклатуры.
  4. При изменении или добавлении товара в ERP платформа автоматически регистрирует изменения для узла мобильного устройства.
  5. При синхронизации мобильное приложение запрашивает только измененные данные по зарегистрированным номерам сообщений плана обмена. Начальная синхронизация для 2500 товаров займет не более 1–2 минут, а последующие инкрементальные обмены будут выполняться за доли секунды.

Реализация сканирования штрихкодов на мобильном устройстве

При проектировании мобильного приложения важно правильно выбрать способ считывания штрихкодов. Рассмотрим два основных сценария работы под управлением ОС Android:

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


&НаКлиенте
Процедура СчитатьШтрихкодКамерой()
    
    #Если МобильноеПриложениеКлиент Тогда
        Если СредстваМультимедиа.ПоддерживаетсяСканированиеШтрихкодов() Тогда
            СредстваМультимедиа.ПоказатьСканированиеШтрихкодов("Отсканируйте штрихкод товара", 
                Новый ОписаниеОповещения("ОбработкаСканированияЗавершение", ЭтотОбъект));
        Иначе
            ПоказатьПредупреждение(,"Сканирование штрихкодов не поддерживается на данном устройстве.");
        КонецЕсли;
    #КонецЕсли
    
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаСканированияЗавершение(Результат, ДополнительныеПараметры) Экспорт
    
    Если Результат.ИмяСобытия = "Сканирование" Тогда
        Штрихкод = Результат.Значение;
        // Отправляем штрихкод на сервер ERP для получения остатков
        ПолучитьДанныеТовараССервера(Штрихкод);
    КонецЕсли;
    
КонецПроцедуры

2. Аппаратный сканер ТСД (Broadcast Intent). Для профессиональных терминалов сбора данных использование камеры неэффективно и неудобно. На ТСД сканирование настраивается через перехват системных Android-событий (Intents) от встроенного лазерного или светодиодного сканера. Для интеграции в 1С используется внешняя компонента, например, входящая в состав БСП (Библиотеки стандартных подсистем) — Драйвер1СУстройствоВводаNative. При нажатии физической кнопки сканирования на корпусе ТСД данные штрихкода мгновенно передаются в предопределенную процедуру формы ВнешнееСобытие(), что обеспечивает максимальную скорость работы кладовщика.


Резюме и рекомендации

Проанализировав все технические возможности интеграции мобильного приложения с 1С:ERP без изменения типовой конфигурации, можно дать следующие рекомендации разработчикам:

← На главную