Интеграция терминалов сбора данных (ТСД), таких как АТОЛ Smart.Slim, с мобильной платформой 1С:Предприятие является одной из часто возникающих задач для автоматизации бизнес-процессов, в частности, для сбора заказов в конфигурации 1С:Розница. Мы рассмотрим различные подходы к решению этой задачи, проанализируем сложности, с которыми вы можете столкнуться, и предложим пошаговые инструкции для успешного подключения.
Задача заключается в том, чтобы корректно настроить передачу штрихкода со встроенного сканера ТСД непосредственно в мобильное приложение 1С, запущенное на этом же устройстве. Существует несколько ключевых методов, каждый из которых обладает своими особенностями и требует внимательной настройки.
1С.НАТИВ / InputDevice) через эмуляцию клавиатурыОдин из самых распространенных и относительно простых способов подключения сканера — это использование его в режиме эмуляции клавиатуры совместно с нативной компонентой 1С. Этот метод предполагает, что сканер ТСД будет работать как обычная клавиатура, передавая отсканированный штрихкод в активное поле ввода мобильного приложения 1С.
В этом сценарии, когда оператор сканирует товар, ТСД преобразует штрихкод в последовательность символов и "вводит" их в то место, где в данный момент установлен курсор в мобильном приложении 1С. Ключевым требованием для успешной работы является добавление специального символа в конце штрихкода, обычно это символ возврата каретки (Enter), который в ASCII-кодировке обозначается как #13. Этот символ сигнализирует приложению 1С о завершении ввода и позволяет автоматически обработать полученный штрихкод.
Barcode Utility или аналогичное):
Прежде всего, нам необходимо убедиться, что встроенная утилита для сканера на вашем АТОЛ Smart.Slim (например, Barcode Utility) настроена на добавление символа #13 после каждого отсканированного штрихкода. Изначально многие пользователи сталкиваются с тем, что эта настройка неочевидна или отсутствует. Однако, как показывает опыт, такая опция, как правило, присутствует, но может быть скрыта глубоко в настройках или требовать "танцев с бубнами", как отмечали другие пользователи. Внимательно изучите все параметры, касающиеся суффиксов, префиксов или завершающих символов сканирования в настройках Barcode module setting. Возможно, потребуется несколько попыток, чтобы найти правильную комбинацию.
Если вам кажется, что настройка #13 отсутствует, обратитесь к документации производителя ТСД или в техническую поддержку АТОЛ. В некоторых случаях, обновление прошивки ТСД может добавить необходимые функциональные возможности.
Как только вы убедитесь, что ТСД корректно отправляет штрихкод с завершающим символом #13, следующим шагом будет настройка мобильного приложения 1С:
1С.НАТИВ). Этот драйвер является частью нативной компоненты 1С InputDevice, которая уже встроена в любое мобильное приложение, собранное на платформе 1С:Предприятие.Некоторые разработчики пытались решить эту проблему, используя многострочные поля ввода или другие обходные пути, но они не всегда оказывались идеальными. Именно поэтому многие склоняются к методу с использованием внешних компонент и перехватом широковещательных сообщений.
Этот подход является более гибким, но и более сложным, требующим навыков Android-разработки. Он основан на том, что сканеры, встроенные в ТСД, часто генерируют широковещательные сообщения (broadcast intents) в операционной системе Android при каждом успешном сканировании. Мы можем написать внешнюю компоненту для мобильной платформы 1С, которая будет "слушать" эти сообщения и передавать их в 1С как внешние события.
Внешняя компонента представляет собой небольшую программу, написанную на языке Java или Kotlin, которая компилируется под Android. Эта компонента регистрирует BroadcastReceiver, который подписывается на определенные intent actions, генерируемые сканером АТОЛ Smart.Slim. Когда сканер отправляет штрихкод, операционная система Android рассылает соответствующий intent, компонента его перехватывает, извлекает данные штрихкода и передает их в мобильное приложение 1С как внешнее событие. Главное преимущество этого метода в том, что для него не требуется, чтобы какое-либо поле ввода в приложении 1С было в фокусе.
Broadcast Intents:
Первым и одним из самых сложных шагов является определение того, какие именно broadcast intents генерирует сканер АТОЛ Smart.Slim. Разные модели ТСД и даже разные прошивки могут использовать различные actions и содержать данные штрихкода в разных полях intent-сообщения. Нам придется использовать инструменты Android SDK (например, adb logcat) или специализированные приложения для разработчиков на ТСД, чтобы "поймать" эти intents и проанализировать их структуру.
Как отмечалось, для АТОЛ Smart Lite уже была реализована подобная конфигурация с внешней компонентой, что подтверждает принципиальную возможность такого подхода. Возможно, блоки сканеров у Smart.Slim и Smart Lite аналогичны, и broadcasts будут похожи.
Нам потребуется разработать внешнюю компоненту на Java или Kotlin. Вот общий план действий:
BroadcastReceiver.onReceive() этого класса, который вызывается при получении intent, нам нужно будет:
action полученного intent на соответствие тому, что генерирует сканер.intent.getExtras(). Как правило, штрихкод содержится в одном из строковых полей, например, по ключу "data", "barcode_data", "scanner_data" и т.п.AddExternalEvent() мобильной платформы 1С.AndroidManifest.xml фильтр для вашего BroadcastReceiver, чтобы указать, на какие intent actions он должен реагировать.Пример структуры кода для 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>
Созданную и скомпилированную внешнюю компоненту нам необходимо включить в конфигурацию 1С или в расширение. Для этого:
.jar или .aar) в конфигурацию 1С (или расширение).ВнешнееСобытие().Пример кода 1С для обработки внешнего события:
// В модуле формы или управляемого приложения
Процедура ВнешнееСобытие(Источник, Событие, Данные)
Если Источник = "BarcodeScanner" И Событие = "Scanned" Тогда
// Данные содержит отсканированный штрихкод
Штрихкод = Данные;
Сообщить("Отсканирован штрихкод: " + Штрихкод);
// Здесь ваша логика обработки штрихкода: поиск товара, добавление в список и т.д.
КонецЕсли;
КонецПроцедуры
Таким образом, внешняя компонента будет перехватывать intents от сканера, а мобильное приложение 1С будет обрабатывать их как обычные внешние события, что значительно упрощает логику работы с данными.
Преимущества:
Недостатки:
Broadcast intents могут отличаться для разных моделей ТСД или версий прошивок, что может потребовать адаптации компоненты.После того как мы настроили получение штрихкодов в мобильном приложении 1С, следующим шагом является интеграция этих данных с базой 1С:Розница 2.2 для сбора заказов или инвентаризации с маркировкой.
Мы будем использовать HTTP-сервисы, как наиболее универсальный и гибкий механизм для обмена данными между мобильной платформой и серверной базой 1С:Предприятия. HTTP-сервисы позволяют создать на стороне основной базы 1С точки входа (API), к которым мобильное приложение может обращаться с HTTP-запросами (GET, POST), передавая данные (например, штрихкоды, информацию о товаре, данные о заказе) и получая ответы.
Создадим HTTP-сервис, например, ЗаказыТСД, который будет иметь один или несколько шаблонов URL для обработки запросов от мобильного приложения. Например, метод ОбработатьШтрихкод.
// В модуле HTTP-сервиса
Функция ОбработатьШтрихкод(Запрос)
// Извлекаем штрихкод из тела запроса или параметров URL
Штрихкод = Запрос.ПолучитьТелоКакСтроку(); // Если штрихкод передается в теле запроса
// Находим товар по штрихкоду
Номенклатура = Справочники.Номенклатура.НайтиПоРеквизиту("Штрихкод", Штрихкод);
Если Номенклатура <> Неопределено Тогда
// Возвращаем информацию о товаре в формате JSON
Ответ = Новый Соответствие();
Ответ.Вставить("Успех", Истина);
Ответ.Вставить("Наименование", Номенклатура.Наименование);
Ответ.Вставить("Цена", Номенклатура.ПолучитьЦену(ТипЦен, Дата)); // Пример
// ... другая информация о товаре
Возврат Новый HTTPСервисОтвет(200, "application/json", Сериализаторы.JSON.Записать(Ответ));
Иначе
Ответ = Новый Соответствие();
Ответ.Вставить("Успех", Ложь);
Ответ.Вставить("Сообщение", "Товар со штрихкодом " + Штрихкод + " не найден.");
Возврат Новый HTTPСервисОтвет(404, "application/json", Сериализаторы.JSON.Записать(Ответ));
КонецЕсли;
КонецФункции
После того как мобильное приложение получило штрихкод (либо через нативную компоненту, либо через внешнюю), мы формируем 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Ответ.ПолучитьТелоКакСтроку());
КонецЕсли;
Исключение
Сообщить("Ошибка соединения с сервером: " + ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
Библиотека стандартных подсистем (БСП): При работе с подключаемым оборудованием на мобильной платформе, особенно если вы используете типовые конфигурации или основываетесь на БСП, мы можем рассмотреть адаптацию существующих обработок обслуживания торгового оборудования. БСП содержит развитый функционал для работы с подключаемым оборудованием, который может быть адаптирован для мобильных решений, особенно при синхронизации данных или использовании готовых обработок. АТОЛ активно сертифицирует свое оборудование для работы с этой библиотекой, что может упростить интеграцию при определенных условиях.
Barcode Utility: Внимательно изучите все настройки утилиты сканера на ТСД. Иногда опции, влияющие на формат вывода данных или способ их передачи в сторонние приложения, могут быть неочевидными или скрытыми. Пробуйте различные комбинации, если что-то не работает сразу. Не исключено, что производитель предоставляет расширенные настройки через специальные конфигурационные файлы или сервисные приложения.
Подключение ТСД АТОЛ Smart.Slim к мобильной платформе 1С — это решаемая, но многогранная задача, которая требует системного подхода и готовности к экспериментам с настройками как на стороне ТСД, так и в 1С. Мы рассмотрели два основных подхода: эмуляция клавиатуры с помощью 1С.НАТИВ и разработка внешней компоненты для перехвата broadcast intents. Выбирая подходящий метод и следуя предложенным рекомендациям, вы сможете успешно подружить ваше оборудование с мобильной платформой 1С и оптимизировать процессы сбора заказов.