Настройка чеков по 54-ФЗ на 1С-Битрикс
Чек по 54-ФЗ — это не просто отправка данных в кассу. Это конкретный формат JSON с обязательными полями: признак расчёта, признак способа расчёта, НДС по каждой позиции, данные агента если расчёт через посредника, данные покупателя если сумма превышает 100 000 рублей. Ошибка в любом поле — чек не фискализируется, а ФНС это фиксирует.
Структура чека в контексте Битрикс
Битрикс формирует чек через класс \Bitrix\Sale\Cashbox\Check и его наследников:
-
Sell— чек прихода (первая оплата) -
SellCorrection— чек коррекции прихода -
Refund— чек возврата прихода -
RefundCorrection— чек коррекции возврата -
AdvancePayment— аванс (предоплата без привязки к номенклатуре) -
AdvancePaymentReturn— возврат аванса -
Full— полный расчёт (для двухстадийной оплаты)
Тип чека определяется автоматически по событию. Для двухстадийной оплаты нужны два чека: первый при холдировании (аванс), второй при подтверждении (полный расчёт).
Обязательные поля чека по FFD 1.2
С 2023 года обязателен формат ФФД 1.2 для новых ККТ. В нём добавлены поля:
Признак предмета расчёта (PAYMENT_OBJECT) — что продаётся:
-
COMMODITY— товар -
EXCISE— подакцизный товар -
JOB— работа -
SERVICE— услуга -
PAYMENT— платёж (аванс без номенклатуры)
Признак способа расчёта (PAYMENT_METHOD):
-
FULL_PAYMENT— полная оплата -
ADVANCE— аванс -
PREPAYMENT— предоплата -
CREDIT— постоплата -
CREDIT_PAYMENT— оплата кредита
Настройка в свойствах товара через административный интерфейс или через b_catalog_product.PAYMENT_OBJECT.
Конфигурация НДС для позиций чека
Неправильный НДС — самая частая причина отказа фискализации. Проверить связку НДС:
-- Все ставки НДС в системе
SELECT ID, NAME, RATE FROM b_catalog_vat WHERE ACTIVE = 'Y';
-- Товары без привязки к НДС (VAT_ID IS NULL)
SELECT ID, NAME FROM b_catalog_product WHERE VAT_ID IS NULL LIMIT 20;
-- Обновить VAT для всех товаров одного инфоблока
UPDATE b_catalog_product cp
JOIN b_iblock_element ie ON cp.ID = ie.ID
SET cp.VAT_ID = 3 -- ID ставки НДС 20%
WHERE ie.IBLOCK_ID = 7 AND cp.VAT_ID IS NULL;
Данные покупателя в чеке
Если сумма расчёта превышает 100 000 рублей, чек должен содержать данные покупателя (ФИО, ИНН или email/телефон). Для B2B заказов — ИНН организации.
Настройка свойств заказа для передачи данных в чек:
// Свойство EMAIL покупателя должно называться EMAIL или иметь флаг IS_EMAIL = Y
// Проверить:
$res = \Bitrix\Sale\Internals\OrderPropsTable::getList([
'filter' => ['IS_EMAIL' => 'Y'],
'select' => ['ID', 'NAME', 'CODE']
]);
В чеке передаётся автоматически если свойство заказа помечено флагом «Email покупателя» или «Телефон покупателя» в настройках модуля продаж.
Отладка формирования чека
Включить логирование кассового модуля:
// /bitrix/php_interface/init.php
define('CASHBOX_DEBUG', true);
Лог пишется в bitrix/modules/sale/cashbox/log/. Формат JSON — можно проверить структуру чека до отправки.
Программно получить тело чека без отправки:
$order = \Bitrix\Sale\Order::load($orderId);
$payment = $order->getPaymentCollection()->getInnerPayment();
$check = \Bitrix\Sale\Cashbox\CheckManager::createCheck(
\Bitrix\Sale\Cashbox\Internals\Check\SellCheck::getType(),
$payment
);
// Получить данные чека до отправки
$checkData = $check->getDataForCheck();
var_dump($checkData);
Обработка ошибок и повторная отправка
Чеки с ошибками (статус F в b_sale_cashbox_check) — частая проблема при первоначальной настройке:
-- Чеки с ошибками
SELECT ID, ORDER_ID, PAYMENT_ID, ERROR_TEXT, DATE_CREATE
FROM b_sale_cashbox_check
WHERE STATUS = 'F'
ORDER BY DATE_CREATE DESC;
Повторная отправка через административную панель: «Магазин» → «Онлайн-кассы» → «Очередь чеков» → выбрать чек → «Отправить повторно».
Программная повторная отправка:
$check = \Bitrix\Sale\Cashbox\CheckManager::getCheckById($checkId);
if ($check) {
$check->setField('STATUS', \Bitrix\Sale\Cashbox\Internals\Check::STATUS_NEW);
$check->save();
}
Чек при возврате заказа
При отмене оплаченного заказа Битрикс должен автоматически сформировать чек возврата. Это происходит при снятии статуса оплаты:
$payment->setField('PAID', 'N');
$order->save();
// Чек возврата формируется через обработчик события OnSalePaymentEntitySaved
Убедиться что в настройках кассы включена опция «Формировать чек возврата при отмене оплаты».







