Налаштування приймання товарів через ТСД у 1С-Bitrix
Терміналами збору даних (ТСД) у зв'язці з Bitrix використовують для складської приймання там, де потрібно сканувати штрихкоди і одразу фіксувати прихід у системі — без дублювання через Excel або паперові накладні. Задача технічно нескладна, але потребує правильного вибору точки інтеграції.
Як це працює у Bitrix
Bitrix не має нативного модуля для ТСД. Інтеграція будується через REST API або прямий доступ до складського обліку модуля catalog. Два основні сценарії:
Сценарій 1 — ТСД працює через браузер. Більшість сучасних ТСД (Honeywell, Zebra, Urovo) мають вбудований браузер. При цьому робите мобільно-адаптований інтерфейс на Bitrix: сторінка приймання з формою сканування штрихкода, AJAX-запит до сервера, фіксація у базі. Штрихкод зчитується вбудованим сканером ТСД у поле input.
Сценарій 2 — ТСД працює з додатком через API. Додаток на ТСД (зазвичай пишеться під Android на Java/Kotlin або використовує готове, наприклад «Клеверенс») звертається до REST-еындпоінтів Bitrix. Це надійніше, але дорожче у розробці.
Ключові таблиці і методи
Приймання товарів у Bitrix — це операція поповнення складських остатків. Дані зберігаються у:
-
b_catalog_store_product— остатки за складами -
b_catalog_store_docs— складські документи (прихід/видаток) -
b_catalog_store_docs_element— позиції документа
Для створення документа прихідної накладної програмно використовується \Bitrix\Catalog\StoreDocumentTable:
$result = \Bitrix\Catalog\StoreDocumentTable::add([
'DOC_TYPE' => \Bitrix\Catalog\StoreDocumentTable::TYPE_ARRIVAL,
'STATUS' => 'N',
'SITE_ID' => 's1',
'CREATED_BY' => $userId,
'DATE_CREATE' => new \Bitrix\Main\Type\DateTime(),
'TITLE' => 'Приймання по ТСД ' . date('d.m.Y'),
]);
$docId = $result->getId();
Позиції документа додаються через \Bitrix\Catalog\StoreDocumentElementTable:
\Bitrix\Catalog\StoreDocumentElementTable::add([
'DOC_ID' => $docId,
'ELEMENT_ID' => $productId, // ID товара в інфоблоці
'STORE_FROM' => null,
'STORE_TO' => $storeId, // ID складу-призначення
'AMOUNT' => $quantity,
'PURCHASING_PRICE' => $price,
'CURRENCY' => 'RUB',
]);
Після додавання всіх позицій документ проводиться — статус змінюється на 'Y', і остатки оновлюються автоматично.
Пошук товара по штрихкоду
ТСД передає штрихкод — потрібно знайти товар. Штрихкоди зберігаються у таблиці b_catalog_product_barcode. Запит через ORM:
$barcode = \Bitrix\Catalog\ProductBarcodeTable::getList([
'filter' => ['=BARCODE' => $scannedCode],
'select' => ['PRODUCT_ID', 'BARCODE'],
'limit' => 1,
])->fetch();
Якщо штрихкоди не налаштовані у каталозі — придеться шукати через властивості інфоблоку (CIBlockElement::GetList з фільтром за властивістю BARCODE або аналогічну).
REST API для додатка на ТСД
Якщо ТСД працює через додаток, виставляйте REST-обробник. У Bitrix найпростіше створити компонент-контролер у /local/ajax/ або використати модуль rest:
POST /local/ajax/tsd-receive.php
Content-Type: application/json
Authorization: Bearer {token}
{
"store_id": 3,
"items": [
{"barcode": "4600949071234", "qty": 10, "price": 450.00},
{"barcode": "4606244001234", "qty": 5, "price": 120.00}
]
}
Авторизацію найпростіше зробити через статичний токен у налаштуваннях модуля або через стандартний механізм \Bitrix\Main\Engine\Controller з перевіркою сесії.
На що обернути увагу
- Одиниці виміру. Упевніться, що у документах прихідної і у остатках використовуються однакові одиниці. Плутанина між штуками і упаковками — часта помилка.
- Множинні склади. Якщо складів кілька, інтерфейс ТСД повинен дозволяти вибрати склад-призначення перед сканованням.
- Дублювання сканування. ТСД може двічі передати один штрихкод при поганому з'єднанні. Потрібна захист від дублів на рівні сесії приймання.
- Проведення документа. Не проводьте документ автоматично одразу при скануванні. Дайте кладовщику переглянути підсумковий список і підтвердити.
| Етап | Час |
|---|---|
| Аналіз поточної схеми складського обліку | 2–4 ч |
| Розробка API-еындпоінту / веб-інтерфейсу | 8–16 ч |
| Настройка пошуку по штрихкоду | 2–4 ч |
| Тестування на реальному ТСД | 4–8 ч |
| Навчання співробітників | 1–2 ч |







