Автоматизация складской логистики с помощью терминалов сбора данных (ТСД) — классическая задача для торговых предприятий. Однако когда учетная система построена на старой конфигурации 1С (например, самописной «Управлении торговлей» версии 11 или 10.3) с обычными формами и платформой 8.3.12, у разработчиков возникает серьезная дилемма. Традиционный тонкий или мобильный клиент «из коробки» запустить не удастся, поскольку они жестко требуют управляемых форм. Использование RDP на маленьких экранах Android-устройств превращается в кошмар для кладовщиков.
В этой статье мы подробно разберем, какие архитектурные подходы существуют для решения этой задачи, детально проанализируем их плюсы и минусы, а также рассмотрим практические примеры интеграции ТСД на Android с 1С через HTTP-сервисы и технологию системных событий Android Broadcast Intents.
---
Самый очевидный и наименее затратный с точки зрения разработки путь — запустить сессию удаленного рабочего стола прямо на ТСД. Мы просто пишем специализированный АРМ (автоматизированное рабочее место) в виде обычной обработки 1С, оптимизированной под маленькое разрешение экрана.
Проблемы этого подхода:
Вердикт: Подходит только как временное или ультрабюджетное решение для небольших складов со стабильным бесшовным покрытием Wi-Fi.
---
Мобильная платформа 1С позволяет создавать полноценные автономные приложения для Android. Поскольку основная база работает на обычных формах, напрямую подключить ТСД как «Мобильный клиент» нельзя. Поэтому мы создаем отдельную конфигурацию для мобильного приложения на управляемых формах.
Эта конфигурация будет содержать минимально необходимый набор справочников (Номенклатура, Штрихкоды, Ячейки) и документов (Отбор, Приходный ордер, Инвентаризация). Связь с центральной базой 1С реализуется через HTTP-сервисы, развернутые на стороне основной базы.
Рассмотрим структуру организации HTTP-сервиса на стороне основной базы 1С для обмена данными с ТСД. Создадим HTTP-сервис TSDExchange с шаблоном URL /gettask/{TSDID}.
Разберем по шагам код обработчика GET-запроса, который возвращает список задач для конкретного ТСД в формате JSON:
Функция ПолучитьСписокЗадачGET(Запрос)
ПараметрыПути = Запрос.ПараметрыПути;
ИдентификаторТСД = ПараметрыПути.Получить("TSDID");
// Формируем структуру ответа
СтруктураОтвета = Новый Структура;
СтруктураОтвета.Вставить("Успешно", Истина);
СтруктураОтвета.Вставить("Задачи", Новый Массив);
// Запрос к базе данных для получения невыполненных задач по ТСД
ЗапросБД = Новый Запрос;
ЗапросБД.Текст =
"ВЫБРАТЬ
| ЗадачиСклада.Ссылка КАК Ссылка,
| ЗадачиСклада.Номер КАК Номер,
| ЗадачиСклада.ТипОперации КАК ТипОперации
|ИЗ
| Документ.ЗадачиСклада КАК ЗадачиСклада
|ГДЕ
| ЗадачиСклада.ИсполнительТСД = &ТСД
| И ЗадачиСклада.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыЗадач.ВРаботе)";
ЗапросБД.УстановитьПараметр("ТСД", ИдентификаторТСД);
РезультатЗапроса = ЗапросБД.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
ДанныеЗадачи = Новый Структура;
ДанныеЗадачи.Вставить("ID", Строка(Выборка.Ссылка.УникальныйИдентификатор()));
ДанныеЗадачи.Вставить("Number", Выборка.Номер);
ДанныеЗадачи.Вставить("Type", Строка(Выборка.ТипОперации));
СтруктураОтвета.Задачи.Добавить(ДанныеЗадачи);
КонецЦикла;
КонецЕсли;
// Сериализация в JSON
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, СтруктураОтвета);
СтрокаОтвета = ЗаписьJSON.Закрыть();
// Формируем HTTP-ответ
Ответ = Новый HTTPСервисОтвет(200);
Ответ.УстановитьТелоИзСтроки(СтрокаОтвета, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
Ответ.Заголовки.Вставить("Content-Type", "application/json");
Возврат Ответ;
КонецФункции
Преимущества мобильной платформы 1С:
---
Еще один крайне эффективный и быстрый в реализации подход — разработка легковесного веб-приложения (например, на HTML5 + JavaScript / Vue.js / React), которое запускается внутри встроенного компонента WebView на Android или в обычном браузере Chrome на ТСД.
Интерфейс рисуется верстальщиком и идеально адаптируется под любые типы экранов ТСД. Логика приложения общается с опубликованными HTTP-сервисами 1С напрямую. Мы получаем полностью интерактивный и реактивный интерфейс, который мгновенно обновляется при сканировании.
Для реализации push-уведомлений и постоянного опроса событий можно использовать веб-сокеты (WebSockets) или технологию Long Polling через HTTP-сервисы 1С.
Преимущества веб-приложения:
---
Одной из главных проблем при разработке собственного софта под ТСД является перехват аппаратного сканера. Если использовать режим «разрыва клавиатуры», система часто теряет первый или последний символ, а также критически зависит от фокуса ввода.
Правильное архитектурное решение: Использование системных широковещательных сообщений Android (Broadcast Intents).
Большинство современных ТСД на Android (Zebra, Honeywell, Honeywell Urovo, Chainway) имеют встроенное сервисное приложение (например, *Barcode Utility* или *Scanner Settings*). В настройках этого приложения необходимо переключить режим передачи данных с "Keyboard Wedge" на "Send Intent" и указать имя действия (Action name), например, android.intent.ACTION_DECODE_DATA.
В мобильном приложении на 1С перехват этого намерения (Intent) настраивается с помощью системных событий. Рассмотрим пример интеграции в модуле мобильного приложения управляемой формы ТСД:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
#Если МобильноеПриложениеКлиент Тогда
// Подключаем перехват системных уведомлений Android
ДобавитьОбработчикОповещенияСистемы("ПолучитьШтрихкодИзИнтента");
#КонецЕсли
КонецПроцедуры
&НаКлиенте
Процедура ПолучитьШтрихкодИзИнтента(ИмяСобытия, ПараметрыСобытия)
// Проверяем, что событие пришло от сканера штрихкодов
Если ИмяСобытия = "android.intent.ACTION_DECODE_DATA" Тогда
// Извлекаем строку штрихкода из параметров интента
Штрихкод = ПараметрыСобытия.Получить("barcode_string");
Если ЗначениеЗаполнено(Штрихкод) Тогда
ОбработатьСчитанныйШтрихкод(Штрихкод);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбработатьСчитанныйШтрихкод(Штрихкод)
// Наша бизнес-логика поиска товара/ячейки на ТСД
ПоказатьОповещениеПользователя("Сканирование",, "Обработан штрихкод: " + Штрихкод, БиблиотекаКартинок.Информация);
// Отправка данных на HTTP-сервис 1С в реальном времени
ВыполнитьОтправкуНаСервер1С(Штрихкод);
КонецПроцедуры
Использование этого метода гарантирует, что штрихкод будет успешно считан и обработан конфигурацией независимо от того, в каком поле ввода сейчас стоит курсор кладовщика и открыта ли форма в данный момент.
---
Проанализируем все варианты по ключевым критериям, чтобы принять взвешенное решение:
| Критерий | RDP-доступ | Мобильное приложение 1С | Web-приложение (PWA) | Готовое решение (Клеверенс/DataMobile) |
|---|---|---|---|---|
| Скорость разработки | Очень быстро (1–3 дня) | Средне (2–4 недели) | Средне (2–4 недели) | Быстро (настройка интеграции) |
| Зависимость от Wi-Fi | Критическая (100% онлайн) | Отсутствует (полный офлайн/гибрид) | Средняя (поддерживает кэш) | Гибридная (в зависимости от настроек) |
| Удобство UI/UX | Низкое | Высокое (мобильные стандарты 1С) | Максимальное (любой дизайн) | Высокое (готовые шаблоны) |
| Лицензирование 1С | RDP-лицензии + 1С | Мобильные лицензии 1С на каждый ТСД | Лицензии только на пул веб-сервера | Лицензии ПО ТСД + лицензии 1С |
---
Выбор оптимальной технологии зависит от бюджета, времени и квалификации ваших разработчиков:
Если в штате компании есть сильный 1С-разработчик, не имевший ранее дела с веб-технологиями, лучшим решением будет создание выделенного мобильного приложения на платформе 1С с интеграцией по HTTP-сервисам с основной базой. Это гарантирует автономию ТСД при обрывах связи и привычную среду разработки.
Если у вас есть специалисты по веб-разработке (JS/HTML), настоятельно рекомендуем посмотреть в сторону Web-приложения (WebView). Оно позволит создать максимально динамичный интерфейс, избежать затрат на лицензирование мобильных рабочих мест 1С и обновлять логику ТСД за секунды без переустановки APK-файлов на терминалах.