Интеграция возвратов с онлайн-кассой 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Интеграция возвратов с онлайн-кассой 1С-Битрикс
Средняя
~1-2 недели
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1177
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    747
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Интеграция возвратов с онлайн-кассой 1С-Битрикс

По 54-ФЗ при возврате денег покупателю касса обязана пробить чек с признаком расчёта «Возврат прихода». Если сайт работает с онлайн-кассой через Битрикс — значит, возврат должен автоматически формировать фискальный документ через тот же канал. Без этого возникает нарушение: деньги возвращены, чек не пробит.

Как Битрикс взаимодействует с кассой

Модуль sale.cashbox (bitrix/modules/sale/cashbox/) отвечает за фискализацию. Чеки отправляются через обработчики (handlers), наследующие от \Bitrix\Sale\Cashbox\CashboxPaymaster или \Bitrix\Sale\Cashbox\CashboxAtol. Стандартные обработчики: Атол Онлайн, CloudKassir, OrangeData, ЮKassa и другие.

При оплате заказа Битрикс вызывает \Bitrix\Sale\Cashbox\Manager::sendCheck() с типом чека CHECK_TYPE_SELL (приход). При возврате — CHECK_TYPE_SELL_RETURN (возврат прихода).

Таблицы: b_sale_cashbox_check — история чеков, b_sale_cashbox — настроенные кассы.

Как формируется чек возврата

Чек возврата Битрикс создаёт автоматически при выполнении двух условий:

  1. Возврат переходит в статус COMPLETED
  2. К исходному платежу привязана касса и уже есть подтверждённый фискальный чек прихода

Код, который это запускает — \Bitrix\Sale\Cashbox\Manager::addByReturn():

// Внутри обработчика события OnSaleReturnComplete
\Bitrix\Sale\Cashbox\Manager::addByReturn($return);

Если у вас нестандартный сценарий (возврат создаётся внешним скриптом), нужно вызывать этот метод вручную после сохранения возврата.

Что идёт в чек возврата

Позиции чека формируются из b_sale_order_return_item. Каждая позиция содержит:

  • Наименование товара (из b_iblock_element.NAME через JOIN на b_sale_basket.PRODUCT_ID)
  • Количество
  • Цену
  • Ставку НДС
  • Признак предмета расчёта (товар/услуга/работа) — берётся из настроек позиции заказа

Если в исходном заказе НДС не указан или указан некорректно — в чеке возврата будет ошибка. Это частая проблема при миграции с Битрикс на новую кассовую схему.

Типичные проблемы

Чек возврата не отправляется. Причина: возврат создан не через \Bitrix\Sale\OrderReturn, а напрямую в БД или через неофициальный механизм — событие OnSaleReturnComplete не срабатывает. Решение: всегда используйте ORM-методы.

Ошибка «Сумма возврата превышает сумму прихода». Кассовый оператор отклоняет чек, если сумма возврата больше, чем в исходном чеке прихода. Бывает при частичных возвратах нескольких платежей за один заказ — каждый чек возврата должен быть привязан к конкретному чеку прихода через PARENT_CHECK_ID в b_sale_cashbox_check.

Дублирование чека при повторном запросе. При сбое сети Битрикс может отправить запрос дважды. У Атол Онлайн есть параметр external_id — уникальный идентификатор чека на вашей стороне. Используйте его, чтобы оператор мог определить дубликат.

Частичный возврат нескольких позиций из одного заказа. Чек должен содержать только возвращаемые позиции с правильными количествами. Стандартный Manager::addByReturn() это обеспечивает, если b_sale_order_return_item заполнена корректно.

Тестирование фискализации возвратов

Все кассовые операторы предоставляют тестовое окружение. Атол Онлайн — тестовый URL https://testonline.atol.ru/possystem/v5/. OrangeData — тестовые ключи и сертификаты.

Проверочный список перед запуском в прод:

Сценарий Что проверяем
Полный возврат заказа Чек возврата = сумма чека прихода
Частичный возврат одной позиции В чеке только возвращаемый товар
Возврат заказа с несколькими платежами Чек привязан к правильному платежу
Возврат после корректировки цены НДС пересчитан корректно
Повторная отправка при таймауте Нет дублирующего чека у оператора

Настройка уведомлений об ошибках фискализации

Если чек возврата не прошёл — кассовый оператор вернёт ошибку. Битрикс сохранит её в поле ERROR таблицы b_sale_cashbox_check, но по умолчанию менеджер об этом не узнает. Настройте агент:

// Агент: каждые 30 минут проверяет необработанные ошибки
$checks = \Bitrix\Sale\Cashbox\CheckManager::getList([
    'filter' => [
        'STATUS'  => \Bitrix\Sale\Cashbox\Check::CHECK_STATUS_ERROR,
        '>=DATE_CREATE' => new \Bitrix\Main\Type\DateTime('-1 hour'),
    ],
]);

foreach ($checks as $check) {
    if ($check['TYPE'] === \Bitrix\Sale\Cashbox\SellReturnCheck::TYPE) {
        NotificationService::alertAdmin(
            'Ошибка чека возврата #' . $check['ID'] . ': ' . $check['ERROR']
        );
    }
}

Состав работ

  • Проверка версии модуля sale.cashbox и совместимости с версией кассового оператора
  • Настройка обработчика кассы для среды возвратов (тестовый/боевой URL)
  • Тестирование всех сценариев возвратов в тестовой среде оператора
  • Настройка агента мониторинга ошибок фискализации
  • Проверка корректности НДС в позициях заказа и возврата
  • Документация по ручному пробитию чека в нештатных ситуациях

Сроки: если касса уже настроена для чеков прихода — настройка возвратов занимает 1–2 недели. Если касса настраивается с нуля — 3–5 недель, включая тестирование во всех сценариях.