Налаштування інтеграції інтернет-магазину та оффлайн-касл 1С-Bitrix
Клієнт оформляє замовлення онлайн і вибирає «оплата при отриманні». Кур'єр доставляє замовлення, пробиває чек на мобільній касі. Фіскальний чек виданий, але в Bitrix замовлення й досі в статусі «очікує оплати». Склад не списав позиції, бухгалтерія не бачить факту оплати. Інтеграція інтернет-магазину з оффлайн-касою — це не тільки про фіскалізацію, але й про синхронізацію стану замовлень.
Схема фіскалізації платежів
За 54-ФЗ кожний факт розрахунку має супроводжуватись чеком. У Bitrix модуль salescenter та компонент bitrix:salescenter.cashbox реалізують інтеграцію з онлайн-касами через ОФД. Для оффлайн-касл схема інша: чек видається касовим апаратом (АТОЛ, Эвотор, Штрих-М), а Bitrix має дізнатись про цей факт.
Два напрями передачі даних:
- Bitrix → каса: дані замовлення (позиції, суми, ПДВ) для формування чека
- Каса → Bitrix: підтвердження проведення чека з номером та фіскальною ознакою
Інтеграція через API касового програмного забезпечення
Більшість сучасних касових систем мають REST API або webhook. Эвотор надає Cloud API, АТОЛ — власний API для хмарної касл.
На стороні Bitrix при зміні статусу замовлення (наприклад, «передано кур'єру»):
AddEventHandler('sale', 'OnSaleStatusOrderChange', function(\Bitrix\Main\Event $event) {
$order = $event->getParameter('ENTITY');
$status = $order->getField('STATUS_ID');
if ($status !== 'DE') { // 'DE' = delivered, за вашою схемою статусів
return;
}
// Формуємо дані для касл
$items = [];
foreach ($order->getBasket() as $item) {
$items[] = [
'name' => $item->getField('NAME'),
'quantity' => $item->getQuantity(),
'price' => $item->getPrice(),
'vat' => getVatTag($item->getField('VAT_RATE')),
];
}
// Відправляємо в касову систему (приклад для Эвотор)
$evotorApi->sendReceipt($order->getId(), $items, $order->getPrice());
});
Отримання підтвердження від касл
Каса надсилає webhook при успішному проведенні чека. Endpoint у Bitrix:
// /local/ajax/cashbox-callback.php
$data = json_decode(file_get_contents('php://input'), true);
if ($data['event'] === 'receipt.created') {
$orderId = $data['external_id'];
$fiscalSign = $data['fiscal_document_number'];
$order = \Bitrix\Sale\Order::load($orderId);
if ($order) {
// Фіксуємо оплату
$payment = $order->getPaymentCollection()->current();
$payment->setField('PAID', 'Y');
$payment->setField('EXTERNAL_PAYMENT', $fiscalSign);
// Переводимо замовлення в потрібний статус
$order->setField('STATUS_ID', 'F'); // Finalized
$order->save();
}
}
Синхронізація залишків
Продаж через оффлайн-касу без прив'язки до онлайн-замовлення — наприклад, хтось купив у магазині товар, який одночасно очікується для онлайн-замовлення — має зменшити залишки в b_catalog_product або b_catalog_store_product.
Два підходи:
- Через 1С: 1С враховує всі продажі (онлайн + оффлайн) та синхронізує залишки в Bitrix за розписанням
-
Пряма інтеграція касл з Bitrix: каса при кожній продажі викликає API Bitrix для списання залишків через
CCatalogProduct::Update()або REST APIcatalog.product.update
ПДВ та тег ставки
Помилка у ставці ПДВ при відправленні на касу — це порушення 54-ФЗ. Ставки ПДВ у Bitrix зберігаються в b_catalog_vat та b_sale_tax. При формуванні даних для чека маппінг:
-
VAT_RATE = 20→ тег 1105 (ПДВ 20%) -
VAT_RATE = 10→ тег 1104 (ПДВ 10%) -
VAT_RATE = 0→ тег 1106 (ПДВ 0%) -
VAT_INCLUDE = N(без ПДВ) → тег 1107
Що налаштовуємо
- Обробник
OnSaleStatusOrderChangeдля відправлення даних у касову систему - Webhook-endpoint для отримання підтвердження фіскалізації
- Маппінг ставок ПДВ між Bitrix та касовою системою
- Оновлення статусу оплати та поля з фіскальною ознакою в
b_sale_payment - Механізм синхронізації залишків при оффлайн-продажах
- Логування всіх звертань до касового API для діагностики







