Настройка связки онлайн-магазина и оффлайн-кассы 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Настройка связки онлайн-магазина и оффлайн-кассы 1С-Битрикс
Простая
~1 рабочий день
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1181
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    813
  • 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-ФЗ каждый факт расчёта должен сопровождаться чеком. В Битрикс модуль salescenter и компонент bitrix:salescenter.cashbox реализуют интеграцию с онлайн-кассами через ОФД. Для оффлайн-кассы схема другая: чек выдаётся кассовым аппаратом (АТОЛ, Эвотор, Штрих-М), а Битрикс должен узнать об этом факте.

Два направления данных:

  1. Битрикс → касса: данные заказа (позиции, суммы, НДС) для формирования чека
  2. Касса → Битрикс: подтверждение проведения чека с номером и фискальным признаком

Интеграция через API кассового программного обеспечения

Большинство современных кассовых систем имеют REST API или webhook. Эвотор предоставляет Cloud API, АТОЛ — собственный API для облачной кассы.

Со стороны Битрикс при смене статуса заказа (например, «передан курьеру»):

AddEventHandler('sale', 'OnSaleStatusOrderChange', function(\Bitrix\Main\Event $event) {
    $order  = $event->getParameter('ENTITY');
    $status = $order->getField('STATUS_ID');

    if ($status !== 'DE') { // 'DE' = delivered, по вашей схеме статусов
        return;
    }

    // Формируем данные для кассы
    $items = [];
    foreach ($order->getBasket() as $item) {
        $items[] = [
            'name'     => $item->getField('NAME'),
            'quantity' => $item->getQuantity(),
            'price'    => $item->getPrice(),
            'vat'      => getVatTag($item->getField('VAT_RATE')),
        ];
    }

    // Отправляем в кассовую систему (пример для Эвотор)
    $evotorApi->sendReceipt($order->getId(), $items, $order->getPrice());
});

Получение подтверждения от кассы

Касса присылает webhook при успешном проведении чека. Endpoint в Битрикс:

// /local/ajax/cashbox-callback.php
$data = json_decode(file_get_contents('php://input'), true);

if ($data['event'] === 'receipt.created') {
    $orderId    = $data['external_id'];
    $fiscalSign = $data['fiscal_document_number'];

    $order = \Bitrix\Sale\Order::load($orderId);
    if ($order) {
        // Фиксируем оплату
        $payment = $order->getPaymentCollection()->current();
        $payment->setField('PAID', 'Y');
        $payment->setField('EXTERNAL_PAYMENT', $fiscalSign);

        // Переводим заказ в нужный статус
        $order->setField('STATUS_ID', 'F'); // Finalized
        $order->save();
    }
}

Синхронизация остатков

Продажа через оффлайн-кассу без привязки к онлайн-заказу — например, кто-то купил в магазине товар, который одновременно ожидается для онлайн-заказа — должна уменьшать остатки в b_catalog_product или b_catalog_store_product.

Два подхода:

  • Через 1С: 1С учитывает все продажи (онлайн + оффлайн) и синхронизирует остатки в Битрикс по расписанию
  • Прямая интеграция кассы с Битрикс: касса при каждой продаже вызывает API Битрикс для списания остатков через CCatalogProduct::Update() или REST API catalog.product.update

НДС и тег ставки

Ошибка в ставке НДС при отправке на кассу — это нарушение 54-ФЗ. Ставки НДС в Битрикс хранятся в b_catalog_vat и b_sale_tax. При формировании данных для чека маппинг:

  • VAT_RATE = 20 → тег 1105 (НДС 20%)
  • VAT_RATE = 10 → тег 1104 (НДС 10%)
  • VAT_RATE = 0 → тег 1106 (НДС 0%)
  • VAT_INCLUDE = N (без НДС) → тег 1107

Что настраиваем

  • Обработчик OnSaleStatusOrderChange для отправки данных в кассовую систему
  • Webhook-endpoint для получения подтверждения фискализации
  • Маппинг ставок НДС между Битрикс и кассовой системой
  • Обновление статуса оплаты и поля с фискальным признаком в b_sale_payment
  • Механизм синхронизации остатков при оффлайн-продажах
  • Логирование всех обращений к кассовому API для диагностики