Как организовать онлайн-оплату заказов и задолженности в оптовой торговле с учетом ограничений 54-ФЗ и длинных чеков

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

В оптовой торговле организация онлайн-платежей через сайт сталкивается с рядом специфических проблем, которые редко встречаются в рознице. Основные сложности — это огромные заказы (более 200 позиций), необходимость передачи данных о ГТД и стране происхождения, а также оплата уже существующей задолженности по накладным, данных о которых может не быть в корзине сайта. В данной статье мы проанализируем ситуацию, разберем технические ограничения и предложим надежную схему реализации на базе 1С:Управление торговлей 11.4 и интеграции с интернет-эквайрингом.

Проблема «длинных» чеков и лимиты фискальных данных

При оплате заказа в корзине, содержащего сотни позиций, мы неизбежно сталкиваемся с техническим ограничением протокола обмена с ОФД. Рассмотрим подробнее, почему это происходит. Каждый фискальный документ имеет ограничение по объему данных (обычно около 32 Кб). Если в чеке указано 200 позиций, и для каждой позиции передаются дополнительные реквизиты, такие как СтранаПроисхождения, НомерГТД или коды маркировки («Честный ЗНАК»), объем данных возрастает лавинообразно. Такой чек просто не будет принят фискальным накопителем или сервером ОФД.

Разберем по шагам решение этой проблемы:

  1. Разделение процессов оплаты и фискализации. Не следует использовать автоматическую фискализацию, встроенную в модули эквайринга банков на стороне сайта. При такой схеме банк пытается сформировать чек сразу после списания денег, имея на руках только данные корзины сайта, которые могут быть неполными или избыточными для одного чека.
  2. Использование схемы «Аванс». Если клиент оплачивает заказ на сайте до его фактической сборки и отгрузки в 1С, наиболее юридически корректным и технически простым способом является пробитие чека с признаком способа расчета Предоплата 100% или Аванс. В этом случае в чеке можно указать одну строку «Оплата по заказу №...» без детального перечисления 200 позиций с их ГТД.
  3. Второй чек при отгрузке. Полная детализация позиций с кодами ГТД и марками происходит в момент оформления документа Реализация товаров и услуг в 1С. Именно тогда печатается второй чек на «Полный расчет», который закрывает аванс. В 1С:УТ 11 этот процесс автоматизирован.

Оплата произвольной задолженности клиента через личный кабинет

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

Оптимальный алгоритм действий выглядит следующим образом:

  1. Сайт предоставляет интерфейс для ввода произвольной суммы или выбора суммы долга из данных, подтянутых из 1С.
  2. Клиент совершает платеж через интернет-эквайринг.
  3. Сайт фиксирует только факт успешной транзакции и передает в 1С ID транзакции, сумму и ID контрагента.
  4. В 1С создается документ Эквайринговая операция. На этом этапе необходимо программно распределить оплату по документам задолженности (по методу ФИФО или по конкретным счетам).

Для автоматизации распределения в 1С:УТ можно использовать следующий подход в коде:


// Пример логики распределения оплаты по накладным
Процедура РаспределитьОплатуПоДолгу(ТекущийКонтрагент, СуммаОплаты)
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   РасчетыСКлиентамиОстатки.ЗаказКлиента КАК ДокументОбъект,
        |   РасчетыСКлиентамиОстатки.СуммаОстаток КАК Долг
        |ИЗ
        |   РегистрНакопления.РасчетыСКлиентами.Остатки(, Контрагент = &Контрагент) КАК РасчетыСКлиентамиОстатки
        |УПОРЯДОЧИТЬ ПО
        |   РасчетыСКлиентамиОстатки.ЗаказКлиента.Дата ВОЗРАСТАНИЕ";
    
    Запрос.УстановитьПараметр("Контрагент", ТекущийКонтрагент);
    Результат = Запрос.Выполнить().Выбрать();
    
    ОстатокКРаспределению = СуммаОплаты;
    Пока Результат.Следующий() И ОстатокКРаспределению > 0 Цикл
        СуммаКПогашению = Мин(Результат.Долг, ОстатокКРаспределению);
        // Логика создания документов оплаты и привязки к накладной
        ОстатокКРаспределению = ОстатокКРаспределению - СуммаКПогашению;
    КонецЦикла;
КонецПроцедуры

Фискализация на стороне 1С: использование очереди чеков

Чтобы избежать зависимости от работоспособности сайта и модулей банка, проанализируем ситуацию с использованием локальной или облачной кассы, подключенной непосредственно к 1С. В 1С:УТ 11.4 реализован механизм «Очередь чеков».

Когда оплата подтверждена эквайером, сайт через API или регулярный обмен передает данные в 1С. В учетной системе создается документ оплаты. Если в настройках ККТ указано «Автоматическая фискализация», 1С сама сформирует чеки. При этом, если товаров слишком много, 1С позволяет программно разбить оплату на несколько чеков в рамках одной операции. Это критически важно для соблюдения лимитов фискального накопителя.

Важный нюанс по 54-ФЗ: Согласно закону, при расчетах в сети интернет чек должен быть сформирован не позднее следующего рабочего дня после оплаты. Это дает нам «окно» для исправления технических сбоев обмена между сайтом и 1С. Однако касса должна быть зарегистрирована должным образом. Если вы используете одну и ту же кассу для офиса и сайта, в заявлении на регистрацию ККТ в ФНС не нужно ставить галочку «Используется только для расчетов в сети Интернет». Это позволит использовать устройство в смешанном режиме.

Рекомендации по реализации на Битрикс

Многие разработчики сайтов утверждают, что «отвязать» эквайринг от чека невозможно. Рассмотрим подробнее, как это обойти:

  1. В настройках модуля эквайринга (например, Сбербанк или Тинькофф) отключите опцию «Отправлять данные для чека».
  2. Настройте передачу уведомлений об успешном платеже (Callback) в 1С.
  3. В 1С создайте регламентное задание, которое опрашивает сайт на предмет новых транзакций, по которым еще не пробит чек.

Такой подход делает 1С «мастер-системой» для фискализации. 1С видит реальные остатки, актуальные цены, данные о ГТД и маркировке, что гарантирует соответствие чека требованиям законодательства. При оплате задолженности признак способа расчета будет Оплата кредита, а при оплате заказа в корзине — Аванс или Предоплата, что снимает проблему переполнения чека данными.

Посмотрим на пример структуры данных, передаваемых с сайта в 1С для идентификации платежа:

Внедрение данной схемы потребует доработки модуля обмена 1С и сайта, но в долгосрочной перспективе это избавит компанию от штрафов за некорректные чеки и позволит менеджерам не отвлекаться на ручное распределение платежей по накладным.

← На главную