Перейти к содержимому

Чек не уходит в кассу - разбор причин

Заказ оплачен, а чек не пробит: очередь стоит или чек висит в состоянии печати. Разбираем причины по убыванию частоты, начиная с очереди чеков.

С чего начать

Смотрим очередь чеков заказа:

\Bitrix\Main\Loader::includeModule('sale');
$rows = \Bitrix\Sale\Cashbox\Internals\CashboxCheckTable::getList([
'select' => ['ID', 'TYPE', 'STATUS', 'SUM', 'DATE_CREATE', 'ORDER_ID'],
'filter' => ['=ORDER_ID' => $orderId],
])->fetchAll();
print_r($rows);
// пусто - чек не создавался, значит дело не в кассе, а в самом заказе
// STATUS показывает состояние: в очереди, в печати, пробит, ошибка

Пустая очередь и зависший чек - разные истории. В первом случае разбирают оплату и отгрузку заказа, во втором - настройки кассы и ответы её сервиса.

Сверяем суммы оплаты и отгрузки:

$order = \Bitrix\Sale\Order::load($orderId);
printf("заказ=%.2f оплаты=%.2f\n", $order->getPrice(), $order->getSumPaid());
foreach ($order->getShipmentCollection() as $shipment) {
if ($shipment->isSystem()) { continue; } // системную отгрузку пропускаем
printf("отгрузка=%.2f\n", $shipment->getPrice());
}

Чек прихода не формируется, когда сумма отгрузки расходится с суммой оплаты. Товары и доставка в отгрузке должны в сумме давать ровно ту сумму, которую покрывает платёж.

Проверяем настройки кассы:

$cashboxes = \Bitrix\Sale\Cashbox\Manager::getListFromCache();
print_r(array_map(static fn ($row) => [
$row['NAME'], $row['ACTIVE'], $row['HANDLER'],
], $cashboxes));
// у части обработчиков обязательны внешний идентификатор кассы и код группы
// поддержка маркировки включается выбором обработчика, а не сама собой

Незаполненные обязательные поля обработчика - типовая причина молчания. Касса активна, заказ оплачен, а чек не уходит, потому что сервису не с чем работать.

Причины

  1. Суммы оплаты и отгрузки не сходятся примерно 30% случаев

    ПризнакЗаказ оплачен, отгрузка есть, а чек в очереди не появился.

    ПроверкаСравниваем сумму платежа с суммой отгрузки вместе с доставкой.

    Что делатьПриводим документы в соответствие: каждой оплате - своя отгрузка на ту же сумму.

  2. Не заполнены обязательные поля кассы примерно 25% случаев

    ПризнакЧеки не уходят ни по одному заказу, очередь копится или пуста.

    ПроверкаСмотрим настройки обработчика кассы: идентификаторы, коды и реквизиты.

    Что делатьЗаполняем обязательные поля обработчика: без них сервис кассы запрос не примет.

  3. Чек завис в состоянии печати примерно 20% случаев

    ПризнакЧек висит в очереди с состоянием печати и не меняется сутками.

    ПроверкаСмотрим запись чека и ответ сервиса кассы в журнале обмена.

    Что делатьУдаляем зависшую запись кодом: из интерфейса такой чек не убирается.

  4. Суммы в чеке без копеек или с расхождением примерно 15% случаев

    ПризнакЧек уходит, но сумма отличается от заказа на копейки.

    ПроверкаСмотрим формат валюты сайта: число знаков после запятой и округление.

    Что делатьВозвращаем два знака после запятой: при нуле знаков суммы печатаются без копеек.

  5. Не заданы признаки расчёта позиций примерно 10% случаев

    ПризнакСервис кассы отвечает отказом с указанием на реквизиты позиции.

    ПроверкаСмотрим признаки способа и предмета расчёта у товаров и доставки.

    Что делатьЗаполняем признаки расчёта: они обязательны и проверяются на стороне кассы.

Частые вопросы

Сколько чеков должно быть на заказ?

Обычно два: на поступление денег и на передачу товара. Оба события фиксируются отдельно, и настройка магазина должна приводить к обоим.

Можно ли исправить уже пробитый чек?

Нет, данные ушли в налоговую. Ошибку исправляют только новым чеком - возвратом или коррекцией, а не правкой прежнего.

Как удалить зависший чек?

Записью через код: интерфейс такие чеки не удаляет. Перед удалением стоит убедиться, что чек действительно не пробит на стороне кассы.

Есть ли тестовый режим у кассы?

У зарегистрированной кассы нет: тестовый чек становится реальным чеком в налоговой. Проверяют на отдельной тестовой кассе, а не на боевой.

Почему НДС в чеке отличается от заказа?

Налог считается по-разному в разных типах чеков и округляется при скидках на доставку. Расхождение в копейки разбирают вместе с бухгалтерией.

Смежное

Первоисточник