Інтеграція 1С-Бітрікс зі сканерами штрих-кодів
Сканер штрих-коду — найпростіший периферійний пристрій: він емулює клавіатуру і вводить зчитаний код у активне поле введення. Проблема в іншому — що система робить із цим кодом: шукає товар, додає в замовлення, перевіряє позицію при комплектації. Налаштування інтеграції — це насамперед правильна обробка сканування на стороні 1С-Бітрікс, а не налаштування самого сканера.
Типи сканерів і способи підключення
| Тип | Підключення | Емуляція клавіатури | Застосування |
|---|---|---|---|
| USB HID | USB | Так | Каса, приймання |
| Bluetooth HID | Bluetooth | Так | Мобільна точка |
| COM-port | RS-232 | Ні, пряма робота з портом | Застаріле обладнання |
| 2D-імеджер (Honeywell, Symbol) | USB/BT | Так | QR + штрих-код |
| Вбудований у ТЗД | USB/WiFi | Через API пристрою | Склад |
Для більшості завдань у 1С-Бітрікс: сканер з емуляцією клавіатури підключається без драйверів. Спеціального налаштування на стороні 1С-Бітрікс не потрібно — достатньо правильно обробляти введення у формі.
Пошук товару за штрих-кодом
Штрих-коди зберігаються в 1С-Бітрікс у таблиці 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 — сканер вводить код у будь-який момент.
Перевірка позиції при комплектації замовлення
При комплектації замовлення на складі: менеджер відкриває замовлення в адміністративній панелі 1С-Бітрікс, сканує штрих-код кожної позиції. Система підсвічує знайдений рядок у замовленні і ставить галочку «зібрано».
Кастомна сторінка в /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). Налаштування сканера зазвичай змінюються скануванням конфігураційного штрих-коду з посібника виробника. Для 1С-Бітрікс рекомендуємо: суфікс = Enter, без префікса, без CR.
Терміни
| Етап | Термін |
|---|---|
| API пошуку товару за штрих-кодом | 1 день |
| Компонент швидкого додавання в кошик | 1–2 дні |
| Інтерфейс комплектації замовлення зі сканером | 2–3 дні |
| Інвентаризаційний модуль | 2 дні |
| Тестування з реальним сканером | 1 день |
| Разом | 7–9 днів |







