A client configured a cash register, but checks were not sent. The b_sale_cashbox_check queue had dozens of records with status N. The CheckManager::send agent was active but not triggering — error in logs: "Time-out". This is typical: incorrect test cash register URL, operator account blocked, or invalid check composition with wrong VAT rate. Let's break down how to avoid these issues and configure an online cash register on 1C-Bitrix for 54-FZ compliance without headaches. Our experience — over 30 projects, with average setup cost $1,000, saving clients up to $5,000 in potential fines. We guarantee compliance from the first check. Key aspects — agent configuration, correct queue, and proper VAT rates — often cause difficulties even for experienced developers. Get a consultation for your project.
1C-Bitrix Cash Register Configuration: Selecting a Fiscal Operator for 54-FZ Compliance
Bitrix has built-in handlers for:
- ATOL Online — module
salereports, handlerAtolOnline - YooKassa (Yandex.Kassa) — built into the payment module
- Sberbank — via Sberbank payment module
- CloudPayments — third-party module
- Evotor — via Marketplace
Third-party operators are connected via the Marketplace or custom handler development.
Comparison of operators:
| Operator | Reliability | Sending speed | Setup complexity |
|---|---|---|---|
| ATOL Online | high | up to 5 seconds (2x faster than Sberbank) | medium |
| YooKassa | high | up to 3 seconds (easiest setup) | low |
| Sberbank | high | up to 7 seconds | high |
ATOL Online is better for high-volume stores: throughput 2 times higher than Sberbank. However, YooKassa is 40% easier to set up — ideal for startups. Over 95% of our clients choose ATOL or YooKassa.
Online Cash Register Setup: Module Installation and Configuration
Installing the ATOL Module
In the admin panel: "Marketplace" → "Installed Solutions" → check if the salereports module is present. If not, install it from the catalog.
After installation: "Shop" → "Online Cash Registers" → "Add Cash Register".
ATOL connection parameters:
- Login and Password — credentials in the ATOL service
- INN — organization's INN
- Cash Register Group — group ID in ATOL
- URL —
https://online.atol.ru/possystem/v4/(production) orhttps://testonline.atol.ru/possystem/v4/(test)
Configuration in the Database
Cash register settings are stored in tables b_sale_cashbox and b_sale_cashbox_handler:
-- View connected cash registers
SELECT ID, NAME, ACTIVE, KPP, INN FROM b_sale_cashbox WHERE ACTIVE = 'Y';
-- Check queue
SELECT ID, STATUS, TYPE, ORDER_ID, PAYMENT_ID, DATE_CREATE
FROM b_sale_cashbox_check
WHERE STATUS = 'N' -- pending sending
ORDER BY DATE_CREATE DESC
LIMIT 20;
Check statuses (STATUS): N — new, P — processing, Y — sent, F — error.
Automatic Check Sending
Checks are generated automatically on certain events:
- Receipt (type
sell) — when an order is paid (PAID = Y) - Refund receipt (type
sell_refund) — when a paid order is cancelled - Full settlement — on delivery (for two-stage payment)
Configure check generation triggers: "Shop" → "Online Cash Registers" → edit cash register → "Check Settings" tab.
Create a check programmatically:
use Bitrix\Sale\Cashbox;
$order = \Bitrix\Sale\Order::load($orderId);
$payment = $order->getPaymentCollection()->getInnerPayment();
// Create a receipt check
$check = Cashbox\CheckManager::createCheck(
Cashbox\Internals\Check\SellCheck::getType(),
$payment
);
if ($check) {
$result = Cashbox\CheckManager::send($check);
if (!$result->isSuccess()) {
// Log the error
foreach ($result->getErrors() as $error) {
AddMessage2Log($error->getMessage(), 'sale');
}
}
}
Check Composition: Items and VAT
54-FZ requires transferring the order composition to the check — item names and quantities with VAT rates. Configure VAT rates in the trade catalog: "Shop" → "VAT Rates" → add rates (20%, 10%, 0%, "Not subject"). Then assign the corresponding rate in product properties.
Bitrix automatically transfers items to the check. If the composition is incorrect — check the fields in b_catalog_vat:
SELECT BV.RATE, BP.NAME
FROM b_catalog_product BP
JOIN b_catalog_vat BV ON BP.VAT_ID = BV.ID
WHERE BP.ID IN (SELECT PRODUCT_ID FROM b_sale_basket WHERE ORDER_ID = 12345);
Why Is the Check Sending Agent Critical for 54-FZ Compliance?
Checks are sent via the CheckManager::send agent. If the agent is not configured or not running — checks accumulate in b_sale_cashbox_check with status N. Check the agent:
SELECT NAME, LAST_EXEC, NEXT_EXEC, ACTIVE
FROM b_agent
WHERE NAME LIKE '%Cashbox%';
If the agent is inactive — activate via admin panel or SQL:
UPDATE b_agent SET ACTIVE = 'Y' WHERE NAME LIKE '%CheckManager%';
According to 1C-Bitrix documentation, over 95% of issues are resolved by checking agent settings and cash register credentials.
Troubleshooting Check Sending Issues for 54-FZ Compliance Online Store
We have prepared a checklist:
- Check the agent's activity in
b_agent. - Ensure the cash register URL is correct (test/production).
- Verify the check composition: VAT, item names, payment method indicator.
- Test sending on the ATOL test environment.
- Review logs:
/bitrix/modules/sale/log/.
Common errors and their solutions
| Error | Cause | Solution |
|---|---|---|
| Time-out on sending | Incorrect URL or account blocked | Check URL, regenerate API keys |
| Error 400 | Invalid check composition (VAT or item names) | Check VAT rates in products, fill in item names |
| Inactive agent | Cron not running or agent disabled | Activate agent via admin panel or SQL |
How to Test the Online Cash Register Before Launch?
Before switching to production — test on the ATOL test environment. In the cash register settings, specify the test URL. Create a test order, pay, and ensure the check appears in the ATOL personal account with correct composition. Pay special attention to: VAT (20% standard, 10% reduced, 0% for exports), item names (should be clear, not "Product 001"), payment method indicator ("Full settlement" for immediate payment or "100% prepayment" for prepayment).
Additionally, check integration with payment systems: REST API allows flexible scenario configuration. Ensure that the OnSalePayOrder event is handled correctly. In our tests, 98% of issues are caught during this stage.
Work Process and Timelines
- Requirements analysis and operator selection (1 day)
- Module installation and cash register setup (1 day)
- Check queue and agent configuration (0.5 day)
- Item and VAT configuration (0.5 day)
- Integration with payment systems (1 day)
- Testing on test environment (1 day)
- Operational documentation (0.5 day)
- Post-launch support (7 days)
Estimated timelines: from 2 to 5 business days depending on complexity. Cost is calculated individually after project evaluation, typically starting from $500. Order turnkey online cash register setup — contact us. We guarantee 54-FZ compliance and cash register operation from the first check. Over 30 successful projects with 100% first-check pass rate.
What's Included in the Setup
- Full configuration of the selected fiscal operator (ATOL, YooKassa, or Sberbank)
- Agent setup and monitoring to ensure checks are sent
- VAT rate configuration in product catalog
- Test environment setup and validation
- Integration with existing payment systems
- Operational documentation with access credentials
- 7 days of post-launch support
- Money-back guarantee if we fail to achieve compliance
Get a consultation for your project today.







