Интеграция 1С-Битрикс со сканерами штрихкодов
Сканер штрихкода — самое простое периферийное устройство: он эмулирует клавиатуру и вводит считанный код в активное поле ввода. Проблема в другом — что система делает с этим кодом: ищет товар, добавляет в заказ, проверяет позицию при сборке. Настройка интеграции — это прежде всего правильная обработка сканирования на стороне Битрикс, а не настройка самого сканера.
Типы сканеров и способы подключения
| Тип | Подключение | Эмуляция клавиатуры | Применение |
|---|---|---|---|
| USB HID | USB | Да | Касса, приёмка |
| Bluetooth HID | Bluetooth | Да | Мобильная точка |
| COM-port | RS-232 | Нет, прямая работа с портом | Legacy оборудование |
| 2D-имиджер (Honeywell, Symbol) | USB/BT | Да | QR + штрихкод |
| Встроенный в ТСД | USB/WiFi | Через API устройства | Склад |
Для большинства задач в Битрикс: сканер с эмуляцией клавиатуры подключается без драйверов. Специальной настройки на стороне Битрикс не нужно — достаточно правильно обрабатывать ввод в форме.
Поиск товара по штрихкоду
Штрихкоды хранятся в Битрикс в таблице b_catalog_product_barcode. Каждый товар может иметь несколько штрихкодов (например, разные упаковки: 1 шт и блок 12 шт с разными EAN).
public static function findByBarcode(string $barcode): ?array
{
$result = \Bitrix\Catalog\EO_ProductBarcode_Collection::wakeUp(
\Bitrix\Catalog\ProductBarcodeTable::getList([
'filter' => ['=BARCODE' => $barcode],
'select' => ['PRODUCT_ID', 'BARCODE'],
])
);
$row = $result->fetch();
if (!$row) return null;
// Загружаем данные товара из каталога
$product = \CIBlockElement::GetByID($row['PRODUCT_ID'])->GetNext();
return [
'product_id' => $row['PRODUCT_ID'],
'name' => $product['NAME'],
'sku' => $product['PROPERTY_ARTICLE_VALUE'],
'price' => \CCatalogProduct::GetOptimalPrice($row['PRODUCT_ID'])['PRICE']['PRICE'] ?? 0,
'stock' => \CCatalogProduct::GetByID($row['PRODUCT_ID'])['QUANTITY'],
];
}
Если штрихкод не найден в b_catalog_product_barcode — ищем в свойстве PROPERTY_BARCODE инфоблока (некоторые проекты хранят штрихкод как свойство). Унифицируем через единый метод поиска.
Добавление в корзину по штрихкоду
Компонент быстрого добавления товара для кассы или B2B-раздела:
// Обработчик ввода в поле поиска
const barcodeInput = document.getElementById('barcode-input');
barcodeInput.addEventListener('keydown', (e) => {
if (e.key === 'Enter') {
const barcode = e.target.value.trim();
if (!barcode) return;
fetch('/api/catalog/by-barcode/', {
method: 'POST',
headers: {'Content-Type': 'application/json', 'X-Bitrix-Csrf-Token': BX.bitrix_sessid()},
body: JSON.stringify({barcode})
})
.then(r => r.json())
.then(data => {
if (data.error) {
showError('Товар не найден: ' + barcode);
return;
}
addToCart(data.product_id, 1);
barcodeInput.value = '';
barcodeInput.focus();
});
}
});
Ключевой момент: поле ввода штрихкода должно быть всегда в фокусе. Для касс реализуем автофокус с setInterval — сканер вводит код в любой момент.
Проверка позиции при сборке заказа
При комплектации заказа на складе: менеджер открывает заказ в административной панели Битрикс, сканирует штрихкод каждой позиции. Система подсвечивает найденную строку в заказе и ставит галочку «собрано».
Кастомная страница в /bitrix/admin/order_assembly.php:
// AJAX-обработчик сканирования
if ($_REQUEST['action'] === 'scan_barcode') {
$barcode = trim($_REQUEST['barcode']);
$orderId = (int)$_REQUEST['order_id'];
$product = BarcodeService::findByBarcode($barcode);
if (!$product) {
echo json_encode(['status' => 'not_found', 'barcode' => $barcode]);
exit;
}
// Ищем товар в позициях заказа
$order = \Bitrix\Sale\Order::load($orderId);
$basket = $order->getBasket();
foreach ($basket as $item) {
if ($item->getProductId() === $product['product_id']) {
// Обновляем счётчик собранных
AssemblyProgressTable::increment($orderId, $product['product_id']);
echo json_encode(['status' => 'ok', 'item_id' => $item->getId()]);
exit;
}
}
echo json_encode(['status' => 'not_in_order', 'product' => $product['name']]);
exit;
}
Инвентаризация через USB-сканер
Для офисной инвентаризации без ТСД: специальная страница с таблицей, куда менеджер сканирует штрихкоды с фиксическим подсчётом. Каждый скан — AJAX-запрос, который увеличивает счётчик позиции. В конце сессии — сравнение с остатками в b_catalog_store_product и экспорт расхождений.
Настройка суффиксов и префиксов сканера
Некоторые сканеры по умолчанию добавляют символы после штрихкода (Tab, Enter + Carriage Return). Настройки сканера обычно меняются сканированием конфигурационного штрихкода из мануала производителя. Для Bitrix рекомендуем: суффикс = Enter, без префикса, без CR.
Сроки
| Этап | Срок |
|---|---|
| API поиска товара по штрихкоду | 1 день |
| Компонент быстрого добавления в корзину | 1–2 дня |
| Интерфейс сборки заказа со сканером | 2–3 дня |
| Инвентаризационный модуль | 2 дня |
| Тестирование с реальным сканером | 1 день |
| Итого | 7–9 дней |







