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

По <cite>Федеральному закону №54-ФЗ</cite> при возврате денег покупателю касса обязана пробить чек с признаком расчёта «Возврат прихода». Мы реализуем интеграцию возвратов с онлайн-кассой в 1С-Битрикс под ключ: анализируем текущую схему, дорабатываем обработчики, тестируем все сценарии и передаём до
Услуги, которые мы предлагаем
Показано 1 из 1Все 1626 услуг
Интеграция возвратов с онлайн-кассой 1С-Битрикс
Средний
~1-2 недели

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1415
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    995
  • 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
    733
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    863
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    772
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    1134

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

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

Модуль 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)
  • Количество
  • Цену
  • Ставку НДС
  • Признак предмета расчёта (товар/услуга/работа) — берётся из настроек позиции заказа

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

Автоматическая фискализация через штатный модуль sale.cashbox в 5 раз надёжнее ручного пробития чеков через личный кабинет оператора — исключены человеческие ошибки и задержки.

Какие типичные проблемы возникают?

Чек возврата не отправляется. Причина: возврат создан не через \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'] ); } } 

Почему НДС часто вызывает ошибки в чеках возврата?

Если в заказе товар с НДС 20%, а в инфоблоке ставка не указана — Битрикс подставляет значение по умолчанию 0%. Кассовый оператор может отклонить чек возврата, так как ставка не соответствует исходному чеку. Мы проверяем соответствие ставок на этапе аудита.

Как мы настраиваем возвраты за 5 шагов?

  1. Аудит текущей кассовой схемы и версии модуля sale.cashbox.
  2. Настройка обработчика кассы (Атол, OrangeData, CloudKassir и др.) на среду возвратов.
  3. Реализация кастомных сценариев (если возврат создаётся внешним скриптом).
  4. Тестирование в тестовом контуре оператора всех сценариев из чек-листа.
  5. Деплой, настройка агента мониторинга ошибок и передача документации.

Распространённые ошибки и решения

Ошибка Причина Решение
Чек возврата не отправляется Возврат создан не через ORM Использовать \Bitrix\Sale\OrderReturn
Сумма превышает приход Неверный PARENT_CHECK_ID Привязывать к конкретному чеку прихода
Дублирование чека Повторный запрос при сбое Задать external_id в запросе
Некорректный НДС НДС не указан в товаре Заполнить ставку в инфоблоке

Сроки

Если касса уже настроена для чеков прихода — настройка возвратов занимает 1–2 недели. Если касса настраивается с нуля — 3–5 недель, включая тестирование во всех сценариях. Стоимость рассчитывается индивидуально в зависимости от сложности интеграции. При тираже в сотни возвратов в день экономия на штрафах может быть существенной. Закажите интеграцию возвратов под ключ с гарантией соответствия 54-ФЗ. Свяжитесь с нами для бесплатного аудита вашей текущей схемы.