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







