Как настроить работу ТСД через веб-клиент и мобильный клиент 1С без RDP?

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

При автоматизации складского учета перед разработчиками часто встает задача: организовать быструю и стабильную работу терминалов сбора данных (ТСД) напрямую с информационной базой 1С. Первой и самой очевидной идеей кажется запуск стандартного веб-клиента через обычный браузер ТСД на Android. Однако на практике разработчики сталкиваются с серьезным ограничением — обычные мобильные браузеры (такие как Google Chrome или Safari) не поддерживают внешние компоненты 1С и работу с аппаратным сканером «из коробки».

В этой статье мы подробно разберем, почему стандартная схема эмуляции клавиатуры (Keyboard Wedge) в браузере не подходит для промышленной эксплуатации, и проанализируем современные, стабильные альтернативные архитектурные решения: специализированные контейнеры-браузеры, мобильный клиент 1С с обработкой широковещательных сообщений (Broadcast Intents), а также разработку легковесных интерфейсов на базе HTTP-сервисов.

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

Если запустить веб-клиент в обычном мобильном браузере, аппаратный сканер ТСД сможет работать только в режиме эмуляции клавиатуры (Keyboard Wedge). При сканировании штрихкод будет вставляться в текущее активное поле ввода, имитируя быстрый ввод символов пользователем. Рассмотрим, почему этот подход неприменим на реальном складе:

  1. Обязательный фокус на поле ввода: Если кладовщик случайно нажмет на экран и уберет фокус с поля ввода штрихкода, отсканированные данные просто уйдут «в пустоту» или вызовут неконтролируемое поведение интерфейса.
  2. Постоянное появление экранной клавиатуры: Система Android считает, что пользователь вводит текст вручную, из-за чего на половину экрана постоянно всплывает виртуальная клавиатура, перекрывая интерфейс формы.
  3. Зависимость от раскладки клавиатуры: Если на ТСД установлена русская раскладка, штрихкоды, содержащие латинские буквы (например, в маркировке «Честный Знак» или DataMatrix), будут искажаться при вводе.
  4. Медленная скорость передачи данных: Символы передаются последовательно, что приводит к задержкам при обработке длинных кодов маркировки.

Для решения этих проблем мы разберем более продвинутые и надежные технологии интеграции.

Решение 1. Специализированные браузеры-контейнеры для Веб-клиента

Для обхода ограничений стандартных веб-обозревателей используются специализированные Android-приложения (браузеры-контейнеры), разработанные специально под ТСД (например, утилиты класса 1Scan и аналогичные WebView-оболочки).

Проанализируем принцип работы данной технологии:

  1. Внутри специализированного Android-приложения запускается кастомизированный компонент WebView, в котором открывается опубликованная на веб-сервере база 1С.
  2. Приложение работает в фоновом режиме и нативно перехватывает сигналы от аппаратного лазерного сканера ТСД через системные широковещательные сообщения (Broadcast Intents) или SDK производителя оборудования (Zebra, Honeywell, Urovo, АТОЛ).
  3. После успешного считывания штрихкода приложение конвертирует его в формат JSON и передает напрямую в сессию веб-клиента 1С, используя стандартный механизм API веб-содержимого.

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


&НаКлиенте
Процедура ПриОткрытии(Отказ)
    // Подключаем встроенный обработчик сообщений от внешнего сайта (контейнера WebView)
    ПодключитьОбработчикСообщений("ПриПолученииДанныхОтТСД");
КонецПроцедуры

&НаКлиенте
Процедура ПриПолученииДанныхОтТСД(Сообщение, Источник)
    // Получаем строковые данные, переданные специализированным контейнером ТСД
    Если ПустаяСтрока(Сообщение) Тогда
        Возврат;
    КонецЕсли;
    
    // Проанализируем содержимое сообщения. Предположим, контейнер отправляет JSON-строку
    Попытка
        Чтение = Новый ЧтениеJSON;
        Чтение.УстановитьСтроку(Сообщение);
        ДанныеСканирования = ПрочитатьJSON(Чтение);
        Чтение.Закрыть();
        
        Если ДанныеСканирования.Свойство("Barcode") Тогда
            Штрихкод = СокрЛП(ДанныеСканирования.Barcode);
            ТипШтрихкода = ?(ДанныеСканирования.Свойство("Type"), ДанныеСканирования.Type, "");
            
            // Запускаем нашу логику обработки полученного штрихкода
            ОбработатьСканирование(Штрихкод, ТипШтрихкода);
        КонецЕсли;
    Исключение
        // Обработка возможных ошибок разбора данных
        ЗаписатьЛогОшибки(ОписаниеОшибки());
    КонецПопытки;
КонецПроцедуры

Этот способ позволяет использовать всю мощь обычного веб-клиента, не требуя разработки мобильного приложения, и при этом гарантирует стабильное асинхронное получение штрихкодов без потери фокуса на форме.

Решение 2. Мобильный клиент 1С и широковещательные сообщения (Broadcast Intents)

Если у вас современная платформа 1С (начиная с версии 8.3.12+), наиболее технологичным решением является использование Мобильного клиента 1С. Мобильный клиент динамически транслирует формы вашей рабочей базы на экран мобильного устройства, поддерживая полноценное асинхронное сканирование.

Для того чтобы сканер ТСД работал как физическое устройство ввода, а не как клавиатура, настроим интеграцию через механизм Broadcast Receiver (широковещательный прием сообщений в ОС Android). Разберем этот процесс по шагам:

Шаг 1. Настройка утилиты сканирования на самом ТСД

В зависимости от бренда ТСД зайдем в системную утилиту управления сканером (например, Datawedge у Zebra, ScanWedge у Honeywell, Scaner у Urovo или АТОЛ) и настроим профиль сканирования:

  1. Установим режим вывода данных (Data Output) в значение Intent (вещание намерений) вместо Keyboard.
  2. Зададим параметр Intent Action. Это уникальное имя события, которое будет вещать система при сканировании. Например: android.intent.action.BARCODE.
  3. Зададим параметр Intent Category (если требуется по спецификации ТСД).
  4. Укажем переменную, в которой передается штрихкод (обычно это параметр Intent Delivery или Intent String Extra, например, barcode_string или data).

Шаг 2. Настройка конфигурации 1С и подключение БПО

В конфигурации 1С на базе БПО (Библиотеки подключаемого оборудования) для мобильных платформ выполним следующие действия:

  1. Перейдем в справочник «Подключаемое оборудование» и добавим новое устройство с типом Сканеры штрихкода.
  2. Выберем сертифицированный драйвер «1С:Сканеры штрихкода (NativeApi)».
  3. В параметрах подключения драйвера укажем созданный нами на Шаге 1 режим работы: выберем тип интеграции Широковещательный приемник (Broadcast Receiver).
  4. В поле настроек драйвера Action пропишем строку android.intent.action.BARCODE, а в поле Extra укажем системную переменную передачи штрихкода — barcode_string.

Шаг 3. Обработка событий в модуле управляемой формы

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


&НаКлиенте
Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
    // Проверим, что событие инициировано сканером штрихкодов
    Если Найти(Источник, "BarcodeScanner") > 0 ИЛИ Событие = "Barcode" Тогда
        
        // Полученные данные содержат считанный штрихкод
        ПолученныйШтрихкод = СокрЛП(Данные);
        
        // Выполняем поиск номенклатуры или документа в базе данных
        ОбработатьШтрихкодНаСервере(ПолученныйШтрихкод);
        
    КонецЕсли;
КонецПроцедуры

Преимущества данного метода: Сканирование происходит мгновенно, фокус ввода на форме не имеет значения, экранная клавиатура не появляется, а раскладка символов (русская/английская) не влияет на результат.

Решение 3. Легковесный нативный интерфейс и HTTP-сервисы 1С

Если ваши терминалы сбора данных морально устарели (работают на старых версиях Android или Windows Mobile), а мобильный клиент работает медленно из-за высоких требований к оперативной памяти, целесообразно использовать связку: легковесное мобильное приложение + HTTP-сервисы 1С.

Вы можете написать простейшее приложение на Android или использовать готовые конструкторы мобильных интерфейсов (например, Simple UI). Это приложение будет мгновенно считывать штрихкод аппаратным лазером и отправлять его по HTTP-протоколу в базу 1С.

Разберем пример создания HTTP-сервиса на стороне 1С для обработки таких запросов от ТСД:


// Функция HTTP-сервиса для обработки сканирования
Функция ОбработатьСканированиеPOST(Запрос)
    
    Ответ = Новый HTTPСервисОтвет(200);
    Ответ.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
    
    // Получаем тело запроса от ТСД
    СтрокаЗапроса = Запрос.ПолучитьТелоКакСтроку("UTF-8");
    
    Попытка
        Чтение = Новый ЧтениеJSON;
        Чтение.УстановитьСтроку(СтрокаЗапроса);
        ДанныеТсд = ПрочитатьJSON(Чтение);
        Чтение.Закрыть();
        
        Штрихкод = СокрЛП(ДанныеТсд.Штрихкод);
        ИдентификаторДокумента = ДанныеТсд.ИдентификаторДокумента;
        
        // Выполняем поиск и добавление товара в документ на стороне сервера
        РезультатОбработки = ДобавитьТоварВДокументПоШтрихкоду(Штрихкод, ИдентификаторДокумента);
        
        // Формируем структуру ответа для отправки обратно на ТСД
        СтруктураОтвета = Новый Структура;
        СтруктураОтвета.Вставить("Успешно", Истина);
        СтруктураОтвета.Вставить("НоменклатураНаименование", РезультатОбработки.Наименование);
        СтруктураОтвета.Вставить("НовоеКоличество", РезультатОбработки.Количество);
        
    Исключение
        СтруктураОтвета = Новый Структура;
        СтруктураОтвета.Вставить("Успешно", Ложь);
        СтруктураОтвета.Вставить("Ошибка", ОписаниеОшибки());
        Ответ.КодСостояния = 500;
    КонецПопытки;
    
    // Записываем ответ в тело сообщения
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку();
    ЗаписатьJSON(ЗаписьJSON, СтруктураОтвета);
    Ответ.УстановитьТелоИзСтроки(ЗаписьJSON.Закрыть(), "UTF-8");
    
    Возврат Ответ;
    
КонецФункции

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

Резюме и рекомендации по выбору архитектуры

Выясним, какое архитектурное решение лучше всего выбрать для вашего проекта:

← На главную