Как подключить ТСД АТОЛ Smart.Slim к мобильной платформе 1С и настроить передачу штрихкодов?

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

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

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

Подход 1: Использование нативной компоненты 1С (1С.НАТИВ / InputDevice) через эмуляцию клавиатуры

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

Принцип работы

В этом сценарии, когда оператор сканирует товар, ТСД преобразует штрихкод в последовательность символов и "вводит" их в то место, где в данный момент установлен курсор в мобильном приложении 1С. Ключевым требованием для успешной работы является добавление специального символа в конце штрихкода, обычно это символ возврата каретки (Enter), который в ASCII-кодировке обозначается как #13. Этот символ сигнализирует приложению 1С о завершении ввода и позволяет автоматически обработать полученный штрихкод.

Шаги настройки

  1. Настройка программного обеспечения ТСД (Barcode Utility или аналогичное):

    Прежде всего, нам необходимо убедиться, что встроенная утилита для сканера на вашем АТОЛ Smart.Slim (например, Barcode Utility) настроена на добавление символа #13 после каждого отсканированного штрихкода. Изначально многие пользователи сталкиваются с тем, что эта настройка неочевидна или отсутствует. Однако, как показывает опыт, такая опция, как правило, присутствует, но может быть скрыта глубоко в настройках или требовать "танцев с бубнами", как отмечали другие пользователи. Внимательно изучите все параметры, касающиеся суффиксов, префиксов или завершающих символов сканирования в настройках Barcode module setting. Возможно, потребуется несколько попыток, чтобы найти правильную комбинацию.

    Если вам кажется, что настройка #13 отсутствует, обратитесь к документации производителя ТСД или в техническую поддержку АТОЛ. В некоторых случаях, обновление прошивки ТСД может добавить необходимые функциональные возможности.

  2. Настройка в мобильном приложении 1С:

    Как только вы убедитесь, что ТСД корректно отправляет штрихкод с завершающим символом #13, следующим шагом будет настройка мобильного приложения 1С:

    1. Запустите ваше мобильное приложение 1С.
    2. Перейдите в раздел Подключаемое оборудование.
    3. Создайте новое устройство типа Сканер штрихкодов.
    4. В качестве драйвера выберите 1С:Сканеры штрихкодов (1С.НАТИВ). Этот драйвер является частью нативной компоненты 1С InputDevice, которая уже встроена в любое мобильное приложение, собранное на платформе 1С:Предприятие.
    5. В параметрах драйвера выберите тип подключения Клавиатура. Также полезно изучить пример реализации работы сканера штрихкода через БПО, если планируется использовать стандартные библиотеки.
    6. Установите флажок Используется.
    7. После сохранения настроек сканер должен начать работать.

Особенности и потенциальные проблемы

Подход 2: Разработка внешней компоненты для перехвата Android Broadcast Intents

Этот подход является более гибким, но и более сложным, требующим навыков Android-разработки. Он основан на том, что сканеры, встроенные в ТСД, часто генерируют широковещательные сообщения (broadcast intents) в операционной системе Android при каждом успешном сканировании. Мы можем написать внешнюю компоненту для мобильной платформы 1С, которая будет "слушать" эти сообщения и передавать их в 1С как внешние события.

Принцип работы

Внешняя компонента представляет собой небольшую программу, написанную на языке Java или Kotlin, которая компилируется под Android. Эта компонента регистрирует BroadcastReceiver, который подписывается на определенные intent actions, генерируемые сканером АТОЛ Smart.Slim. Когда сканер отправляет штрихкод, операционная система Android рассылает соответствующий intent, компонента его перехватывает, извлекает данные штрихкода и передает их в мобильное приложение 1С как внешнее событие. Главное преимущество этого метода в том, что для него не требуется, чтобы какое-либо поле ввода в приложении 1С было в фокусе.

Шаги реализации

  1. Идентификация Broadcast Intents:

    Первым и одним из самых сложных шагов является определение того, какие именно broadcast intents генерирует сканер АТОЛ Smart.Slim. Разные модели ТСД и даже разные прошивки могут использовать различные actions и содержать данные штрихкода в разных полях intent-сообщения. Нам придется использовать инструменты Android SDK (например, adb logcat) или специализированные приложения для разработчиков на ТСД, чтобы "поймать" эти intents и проанализировать их структуру.

    Как отмечалось, для АТОЛ Smart Lite уже была реализована подобная конфигурация с внешней компонентой, что подтверждает принципиальную возможность такого подхода. Возможно, блоки сканеров у Smart.Slim и Smart Lite аналогичны, и broadcasts будут похожи.

  2. Разработка внешней компоненты:

    Нам потребуется разработать внешнюю компоненту на Java или Kotlin. Вот общий план действий:

    1. Создайте Android-проект.
    2. Реализуйте класс, который расширяет BroadcastReceiver.
    3. В методе onReceive() этого класса, который вызывается при получении intent, нам нужно будет:
      • Проверить action полученного intent на соответствие тому, что генерирует сканер.
      • Извлечь данные штрихкода из intent.getExtras(). Как правило, штрихкод содержится в одном из строковых полей, например, по ключу "data", "barcode_data", "scanner_data" и т.п.
      • Передать полученный штрихкод в 1С. Для этого необходимо использовать механизм внешних событий 1С. Компонента будет вызывать метод AddExternalEvent() мобильной платформы 1С.
    4. Определите в AndroidManifest.xml фильтр для вашего BroadcastReceiver, чтобы указать, на какие intent actions он должен реагировать.
    5. Скомпилируйте проект в APK или AAR файл.

    Пример структуры кода для BroadcastReceiver может выглядеть так:

    
    public class MyBarcodeReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (action != null && action.equals("com.atol.smart.slim.BARCODE_SCAN")) { // Пример action
                String barcode = intent.getStringExtra("barcode_data"); // Пример ключа для данных
                if (barcode != null && !barcode.isEmpty()) {
                    // Здесь будет код для передачи в 1С
                    // Например, через специальный API внешней компоненты
                    // Или напрямую через JNI, если компонента построена таким образом
                    // AddExternalEvent("BarcodeScanner", "Scanned", barcode);
                }
            }
        }
    }
    

    И в AndroidManifest.xml:

    
    <receiver android:name=".MyBarcodeReceiver" android:enabled="true" android:exported="true">
        <intent-filter>
            <action android:name="com.atol.smart.slim.BARCODE_SCAN" /> <!-- Тоже пример -->
        </intent-filter>
    </receiver>
    
  3. Интеграция компоненты в 1С:

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

    1. Загрузите скомпилированный файл компоненты (обычно в формате .jar или .aar) в конфигурацию 1С (или расширение).
    2. В модуле управляемого приложения или в модуле формы, где необходимо ловить события сканирования, нам нужно будет создать экземпляр этой компоненты.
    3. Подпишитесь на событие, которое компонента будет генерировать. В 1С это делается через обработчик ВнешнееСобытие().

    Пример кода 1С для обработки внешнего события:

    
    // В модуле формы или управляемого приложения
    Процедура ВнешнееСобытие(Источник, Событие, Данные)
        Если Источник = "BarcodeScanner" И Событие = "Scanned" Тогда
            // Данные содержит отсканированный штрихкод
            Штрихкод = Данные;
            Сообщить("Отсканирован штрихкод: " + Штрихкод);
            // Здесь ваша логика обработки штрихкода: поиск товара, добавление в список и т.д.
        КонецЕсли;
    КонецПроцедуры
    

    Таким образом, внешняя компонента будет перехватывать intents от сканера, а мобильное приложение 1С будет обрабатывать их как обычные внешние события, что значительно упрощает логику работы с данными.

Преимущества и недостатки

Преимущества:

Недостатки:

Интеграция с 1С:Розница и передача данных

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

Мы будем использовать HTTP-сервисы, как наиболее универсальный и гибкий механизм для обмена данными между мобильной платформой и серверной базой 1С:Предприятия. HTTP-сервисы позволяют создать на стороне основной базы 1С точки входа (API), к которым мобильное приложение может обращаться с HTTP-запросами (GET, POST), передавая данные (например, штрихкоды, информацию о товаре, данные о заказе) и получая ответы.

Пример логики обмена:

  1. На стороне 1С:Розница (сервер):

    Создадим HTTP-сервис, например, ЗаказыТСД, который будет иметь один или несколько шаблонов URL для обработки запросов от мобильного приложения. Например, метод ОбработатьШтрихкод.

    
    // В модуле HTTP-сервиса
    Функция ОбработатьШтрихкод(Запрос)
        // Извлекаем штрихкод из тела запроса или параметров URL
        Штрихкод = Запрос.ПолучитьТелоКакСтроку(); // Если штрихкод передается в теле запроса
    
        // Находим товар по штрихкоду
        Номенклатура = Справочники.Номенклатура.НайтиПоРеквизиту("Штрихкод", Штрихкод);
    
        Если Номенклатура <> Неопределено Тогда
            // Возвращаем информацию о товаре в формате JSON
            Ответ = Новый Соответствие();
            Ответ.Вставить("Успех", Истина);
            Ответ.Вставить("Наименование", Номенклатура.Наименование);
            Ответ.Вставить("Цена", Номенклатура.ПолучитьЦену(ТипЦен, Дата)); // Пример
            // ... другая информация о товаре
    
            Возврат Новый HTTPСервисОтвет(200, "application/json", Сериализаторы.JSON.Записать(Ответ));
        Иначе
            Ответ = Новый Соответствие();
            Ответ.Вставить("Успех", Ложь);
            Ответ.Вставить("Сообщение", "Товар со штрихкодом " + Штрихкод + " не найден.");
            Возврат Новый HTTPСервисОтвет(404, "application/json", Сериализаторы.JSON.Записать(Ответ));
        КонецЕсли;
    КонецФункции
    
  2. На стороне мобильного приложения 1С:

    После того как мобильное приложение получило штрихкод (либо через нативную компоненту, либо через внешнюю), мы формируем HTTP-запрос к нашему опубликованному HTTP-сервису.

    
    // В модуле мобильного приложения 1С
    Процедура ОбработатьСканированныйШтрихкод(Штрихкод)
        АдресСервиса = "http://вашсервер/base/hs/ЗаказыТСД/ОбработатьШтрихкод"; // Пример адреса
        HTTPЗапрос = Новый HTTPЗапрос(АдресСервиса);
        HTTPЗапрос.УстановитьТелоИзСтроки(Штрихкод);
    
        Попытка
            HTTPСоединение = Новый HTTPСоединение("вашсервер"); // IP или домен сервера
            HTTPОтвет = HTTPСоединение.Отправить(HTTPЗапрос);
    
            Если HTTPОтвет.КодСостояния = 200 Тогда
                // Успешно, разбираем JSON-ответ
                JSONReader = Новый ЧтениеJSON();
                JSONReader.УстановитьСтроку(HTTPОтвет.ПолучитьТелоКакСтроку());
                ДанныеТовара = Сериализаторы.JSON.Прочитать(JSONReader);
                // Добавляем товар в документ заказа на мобильном устройстве
                Сообщить("Товар " + ДанныеТовара.Наименование + " добавлен в заказ.");
            Иначе
                Сообщить("Ошибка при обработке штрихкода: " + HTTPОтвет.КодСостояния + " " + HTTPОтвет.ПолучитьТелоКакСтроку());
            КонецЕсли;
        Исключение
            Сообщить("Ошибка соединения с сервером: " + ОписаниеОшибки());
        КонецПопытки;
    КонецПроцедуры
    

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

Дополнительные рекомендации и советы

  1. Актуальность платформы 1С: Всегда используйте самые свежие версии мобильной платформы 1С:Предприятие. С каждой новой версией, особенно начиная с 8.3.18, 1С вносит значительные улучшения в работу с мобильными устройствами, подключаемым оборудованием и автономными режимами. Это может существенно упростить задачу интеграции.
  2. Прошивка ТСД: Проверьте наличие обновлений прошивки для вашего АТОЛ Smart.Slim. Производители часто выпускают апдейты, которые улучшают стабильность работы сканера, добавляют новые функции (например, опции для завершающих символов) или расширяют возможности интеграции. Обновление прошивки может решить множество проблем совместимости.
  3. Тщательная проверка настроек Barcode Utility: Внимательно изучите все настройки утилиты сканера на ТСД. Иногда опции, влияющие на формат вывода данных или способ их передачи в сторонние приложения, могут быть неочевидными или скрытыми. Пробуйте различные комбинации, если что-то не работает сразу. Не исключено, что производитель предоставляет расширенные настройки через специальные конфигурационные файлы или сервисные приложения.
  4. Альтернативные внешние компоненты: Если самостоятельная разработка внешней компоненты кажется слишком сложной или занимает много времени, рассмотрите возможность поиска готовых платных или бесплатных решений. На специализированных форумах 1С (например, Инфостарт) и в сообществах разработчиков часто можно найти уже разработанные компоненты для различных моделей ТСД, которые предлагают гибкие настройки и поддержку разных протоколов обмена.
  5. Автономный режим: Если ваше мобильное приложение предполагает работу в автономном режиме (без постоянного подключения к серверу), рассмотрите возможности платформы 1С по работе с автономными формами. Это позволит собирать заказы даже без сети, а затем синхронизировать данные при появлении соединения.
  6. Тестирование: Проводите тщательное тестирование на всех этапах интеграции, чтобы выявить возможные проблемы на ранних стадиях. Тестируйте как онлайн, так и (если применимо) оффлайн режимы работы.

Подключение ТСД АТОЛ Smart.Slim к мобильной платформе 1С — это решаемая, но многогранная задача, которая требует системного подхода и готовности к экспериментам с настройками как на стороне ТСД, так и в 1С. Мы рассмотрели два основных подхода: эмуляция клавиатуры с помощью 1С.НАТИВ и разработка внешней компоненты для перехвата broadcast intents. Выбирая подходящий метод и следуя предложенным рекомендациям, вы сможете успешно подружить ваше оборудование с мобильной платформой 1С и оптимизировать процессы сбора заказов.

← На главную