Интеграция 1С-Битрикс с терминалами сбора данных (ТСД)
ТСД — это ручной сканер со встроенным компьютером под Android или Windows CE/Mobile, который складские сотрудники используют для приёмки, инвентаризации, сборки заказов и перемещения товаров. Проблема без интеграции с Битрикс: сотрудник сканирует штрихкоды на ТСД, данные остаются на устройстве, потом кто-то вручную переносит их в систему. Задержка, ошибки ввода, расхождения остатков.
Архитектура взаимодействия
ТСД не обращается напрямую к БД Битрикс — это нарушение безопасности и технически нереализуемо в большинстве случаев. Правильная архитектура: ТСД ↔ REST API на стороне Битрикс ↔ модуль catalog / sale.
На стороне Битрикс реализуем набор API-эндпоинтов, ТСД с ними работает по WiFi склада. Для офлайн-работы ТСД хранит задание локально и синхронизируется при появлении соединения.
REST API для ТСД
Создаём контроллер /api/tsd/v1/ с методами:
Получение задания на сборку:
GET /api/tsd/v1/tasks/{task_id}
Authorization: Bearer {token}
Ответ содержит список позиций заказа: product_id, barcode, name, qty_required, location (место на складе из свойства товара WAREHOUSE_LOCATION).
Подтверждение сканирования позиции:
POST /api/tsd/v1/tasks/{task_id}/scan
{
"barcode": "4601234567890",
"qty_scanned": 1,
"location": "A-02-05"
}
Контроллер проверяет штрихкод через \Bitrix\Catalog\ProductTable (поле BARCODE или связанная таблица b_catalog_product_barcode), находит соответствующую позицию задания, обновляет счётчик.
Завершение задания:
POST /api/tsd/v1/tasks/{task_id}/complete
При завершении задания сборки: все позиции собраны → заказ переходит в статус «Готов к отгрузке», отправляется уведомление менеджеру.
Инвентаризация через ТСД
Для инвентаризации создаём задание типа inventory:
class TsdInventoryTask
{
public function create(int $warehouseId, array $productIds = []): array
{
// Создаём запись в bl_tsd_inventory_task
$taskId = InventoryTaskTable::add([
'WAREHOUSE_ID' => $warehouseId,
'STATUS' => 'pending',
'CREATED_BY' => $GLOBALS['USER']->GetID(),
])->getId();
// Загружаем ожидаемые остатки из b_catalog_store_product
$expected = \Bitrix\Catalog\StoreProductTable::getList([
'filter' => ['STORE_ID' => $warehouseId],
'select' => ['PRODUCT_ID', 'AMOUNT'],
]);
while ($row = $expected->fetch()) {
InventoryItemTable::add([
'TASK_ID' => $taskId,
'PRODUCT_ID' => $row['PRODUCT_ID'],
'QTY_SYSTEM' => $row['AMOUNT'],
'QTY_ACTUAL' => null, // заполнит ТСД
]);
}
return ['task_id' => $taskId];
}
}
ТСД загружает задание, сотрудник сканирует штрихкоды и вводит количество. API принимает результаты по одной позиции. После завершения — отчёт о расхождениях (qty_system vs qty_actual) доступен в административной части.
Приёмка товара через ТСД
При приёмке поставки сотрудник сканирует каждую единицу. API-обработчик /api/tsd/v1/receipt/scan сопоставляет штрихкод с позицией поставки (через таблицу поставщиков b_catalog_docs_element или кастомную таблицу закупок) и увеличивает счётчик принятых единиц.
По завершении приёмки автоматически:
- Обновляются остатки в
b_catalog_store_product - Создаётся документ прихода через
\Bitrix\Catalog\Document\StoreAPI - При расхождении с заказом — создаётся задача менеджеру в CRM
Авторизация ТСД
Каждый ТСД получает при настройке персональный API-токен (bl_tsd_tokens). Токен жёстко привязан к warehouse_id — устройство не может видеть задания другого склада. Токены не имеют срока истечения, но могут быть отозваны через интерфейс администратора.
Популярные ТСД и совместимость
| Устройство | ОС | Протокол | Статус |
|---|---|---|---|
| Honeywell CK65 | Android 8+ | REST/JSON | Полная поддержка |
| Zebra TC52/TC57 | Android 8+ | REST/JSON | Полная поддержка |
| Urovo DT50 | Android | REST/JSON | Полная поддержка |
| Datalogic Memor 20 | Android | REST/JSON | Полная поддержка |
| Motorola MC9200 | Windows CE 7 | REST через HTTPPOST | Ограниченная |
Для Windows CE устройств REST/JSON реализуется через нативные HTTP-библиотеки; рекомендуем ограничить функциональность только сборкой заказов.
Сроки
| Этап | Срок |
|---|---|
| Проектирование API и схемы БД | 2 дня |
| API-контроллеры (сборка, приёмка, инвентаризация) | 5–6 дней |
| Административный интерфейс управления заданиями | 3 дня |
| Тестирование с реальным ТСД | 2–3 дня |
| Итого | 12–15 дней |







