заказ звонка

Частичный возврат в 1С-Битрикс: как выбить чек на часть заказа

Штатно 1С-Битрикс пробивает чек возврата только на весь заказ, но частичный возврат можно сделать отдельным модулем, не трогая ядро. Разбираем, почему так устроено, какие есть варианты и как мы решаем эту задачу для магазинов с облачной кассой АТОЛ Онлайн.

Коротко

  1. Штатно Битрикс пробивает чек возврата только на всю оплату и всю отгрузку заказа. Документация это признаёт: «на текущий момент система не поддерживает частичные возвраты».
  2. Причина в устройстве. Чек всегда собирается из целой оплаты и целой отгрузки, а сумма чека обязана совпасть с суммой оплаты.
  3. Ядро Битрикса править нельзя: обновления сотрут правки. Но у платформы есть официальные точки подключения своего кода, и их достаточно.
  4. Решение — отдельный модуль «Чеки частичного возврата»: своя страница в админке, журнал, права доступа, два новых типа чека и надстройка над штатным обработчиком АТОЛ. Печать идёт штатным механизмом, чеки видны в «Чеки за день» со ссылками на ОФД.
  5. Встраивать выбор товаров в штатное окно «Добавить чек» или в страницу заказа не стоит. Почему, объясняем ниже.

В чём задача

Когда покупатель возвращает часть товаров из заказа, магазин по 54-ФЗ обязан пробить чек «возврат прихода». В нём должны быть только возвращённые товары и та сумма, которую вернули покупателю. Через оператора фискальных данных (ОФД) чек уходит в налоговую и покупателю.

В Битриксе чек возврата пробивается только «на всё»: на всю оплату и всю отгрузку заказа, и выбрать часть товаров негде. А магазину нужно, чтобы менеджер пробивал чек возврата именно по возвращённым товарам, прямо из панели администратора.

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

Как Битрикс собирает чек

Сайт на Битриксе ничего не «пробивает» сам: он составляет черновик чека и отдаёт его облачной кассе. Касса регистрирует чек, ОФД передаёт его в налоговую и покупателю. Для маркированных товаров в чек попадает код «Честного знака» на каждую штуку.

Товары и суммы в чек кладёт сайт, поэтому и частичный возврат решается на стороне сайта, а не кассы.

Из чего состоит чек

В каждом заказе Битрикс хранит две «половинки». Оплата — сколько денег и каким способом. Отгрузка — какие товары и сколько штук уехали покупателю, плюс стоимость доставки.

Чек состоит из типа («приход», «возврат прихода», «аванс» и так далее), оплаты и отгрузки. Товары всегда берутся из отгрузки целиком, сумма — из оплаты целиком. Понятия «часть отгрузки» в Битриксе нет.

Что проверяется перед отправкой

  • Сумма всех строк чека (товары плюс доставка) совпадает с суммой оплаты, иначе чек не уйдёт.
  • У покупателя есть телефон или электронная почта: чек нужно кому-то отправить.
  • У маркированного товара есть код маркировки на каждую штуку.

Маркировка в чеках

Для маркированных товаров Битрикс печатает в чеке отдельную строку на каждую штуку, и у каждой строки свой код. Коды приходят на сайт со склада при сборке заказа и хранятся вместе с отгрузкой. Поэтому чек возврата на часть товаров должен указывать не «2 штуки», а какие именно штуки, то есть какие коды, вернулись.

Почему штатно не получается

Окно «Добавить чек» позволяет выбрать только оплату и привязать к ней отгрузки целиком. В курсе «Торговый день магазина. Продажи и возвраты» Битрикс пишет прямо: «на текущий момент система не поддерживает частичные возвраты». На форумах Битрикса с 2017 по 2020 год ответ тот же, а в обновлениях модуля «Интернет-магазин» за 2023–2026 годы тема так и не появилась.

Почему так устроено

  • Чек строится из целых «половинок» заказа: целой оплаты и целой отгрузки.
  • Действует правило равенства сумм. Если просто убрать товары из чека, сумма перестанет совпадать с оплатой, и чек не пройдёт проверку.
  • Оплату нельзя «вернуть частично»: отметка «возвращена» ставится на всю оплату сразу.

Официальный обходной путь и его минусы

Документация предлагает сделать полный возврат, скопировать заказ и убрать из копии лишние позиции. Затем копию оплачивают заново и пробивают новый чек прихода. У этого пути четыре минуса:

  • два лишних чека (возврат всего и приход остатка) и лишние движения денег;
  • покупатель видит непонятные операции по своей карте;
  • ломается статистика продаж;
  • появляются дубли заказов во всех связанных системах: программе лояльности, складе, доставке, личном кабинете покупателя.

Готовых решений нет

В Маркетплейсе Битрикса нет модуля «чек возврата на часть товаров» для штатной кассы АТОЛ. Частичный возврат умеют только некоторые платёжные модули со своей встроенной кассой: ЮKassa, «Долями», PayKeeper. Если в магазине другие способы оплаты и своя касса, они не помогут.

Какие точки расширения даёт Битрикс

Частичный возврат собирается из официальных точек подключения, без единой правки ядра. Ядро (файлы самого Битрикса) править нельзя: при следующем обновлении правки сотрутся, а поддержка перестанет помогать. Доработки через точки подключения обновления не затрагивают.

Точка подключенияЧто позволяетИспользуем?
Свои типы чековЗарегистрировать новый тип, например «Частичный возврат безналичными». Он появится в списках Битрикса под своим названиемДа, два новых типа
Своё правило сборки чекаНовый тип наследует штатный, оставляет только выбранные штуки и пересчитывает сумму. Товары и сумма уменьшаются согласованно, и штатная проверка проходитДа, основа решения
Свой обработчик кассыОбработчик переводит чек с языка Битрикса на язык конкретной кассы. Можно написать свой или унаследовать штатныйДа: наследник штатного обработчика АТОЛ
Событие «подготовка данных чека»Изменить состав любого чека перед проверкой и отправкойНет: инструмент не знает, какой именно чек правит
Свои страницы и модули в админкеСвоя страница, журнал, права доступа, пункт менюДа
Свой блок на странице заказаДобавить собственный блок на страницу просмотра заказаНет, см. ниже
Программный запуск печатиСоздать и отправить чек из своего кода тем же путём, что и кнопка «Добавить чек»: статусы, повторы, ссылки на ОФД штатныеДа

Чего Битрикс не даёт: серверных зацепок в само окно «Добавить чек» (оно рисуется скриптом в браузере) и частичного учёта оплаты вида «возвращено 3 000 из 10 000».

Почему не дорабатываем штатные экраны

Первое желание — добавить выбор товаров прямо в окно «Добавить чек» или на страницу заказа. Мы от этого отказались: такие доработки ломаются при обновлениях и не дают ни журнала, ни нормальных прав доступа.

Окно «Добавить чек»

  • Окно целиком рисуется скриптом Битрикса в браузере, и на стороне сервера у него нет точек подключения. Само в него попадает только название нового типа чека.
  • Чтобы добавить выбор товаров, пришлось бы вклиниваться в чужой скрипт и перехватывать кнопку «Сохранить». Это держится на внутренних деталях, которые Битрикс не обещает сохранять, и после обновления может тихо перестать работать.
  • Таких окон в Битриксе три: в «Чеках за день», у оплаты и у отгрузки на странице заказа. Все устроены по-разному, дорабатывать пришлось бы все три.
  • Окно узкое, около 500 пикселей: список штук с кодами маркировки, отметки «уже возвращено» и итог туда не помещаются.

Вместо этого при выборе нового типа в штатном окне мы показываем подсказку «Частичный возврат оформляется в разделе «Чеки частичного возврата»» и блокируем сохранение. Это одна точка касания с окном, ломаться в ней нечему. И менеджер не сможет пробить «частичный» чек без выбора товаров.

Страница заказа

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

  • страница заказа часто и так перегружена, а каждая доработка чужой страницы добавляет риск при обновлениях;
  • блок увидит любой сотрудник, который открывает заказы, а пробивать фискальные чеки должна ограниченная группа;
  • нет журнала: на странице заказа видно только текущий заказ, а бухгалтерии нужен список всех чеков возврата за период;
  • места для списка штук с кодами всё равно мало.

Отдельная страница даёт всё это сразу. Ссылку на неё из карточки заказа при желании можно добавить позже, это одна строка.

Как мы решаем задачу: модуль «Чеки частичного возврата»

Решение — небольшой отдельный модуль со своей страницей в админке. Внутри два новых типа чека и надстройка над штатным обработчиком кассы АТОЛ. Печать идёт через штатный механизм, поэтому чеки видны в обычном списке «Чеки за день» со ссылками на ОФД.

Как это выглядит для менеджера

  1. Магазин → Кассы ККМ → «Чеки частичного возврата» → «Оформить».
  2. Менеджер вводит номер заказа. Страница показывает покупателя, оплату, отгрузку и состав по штукам, для маркированных товаров с кодом каждой штуки. Если по заказу уже был частичный возврат, видна отметка «уже возвращено».
  3. Если покупатель оформил заявку на возврат в личном кабинете, её товары подставляются кнопкой «Заполнить по заявке».
  4. Менеджер отмечает возвращаемые штуки, при необходимости доставку, и выбирает способ возврата денег: безналичными или наличными. Итоговая сумма считается сама по ценам чека прихода и вручную не меняется.
  5. Кнопка «Пробить чек» отправляет чек в АТОЛ штатным механизмом. На странице появляются статус и ссылка на чек в ОФД, а сам чек виден в «Чеках за день».
  6. В журнале собраны все чеки частичного возврата за период: заказ, товары, сумма, способ, статус, кто и когда пробил.

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

Как это устроено внутри

Часть решенияЧто делаетКак сделано
Два новых типа чека«Частичный возврат безналичными» и «Частичный возврат наличными». Берут данные штатного чека возврата, оставляют только выбранные штуки и пересчитывают суммуPHP-классы-наследники через точку «свои типы чеков»
Надстройка над обработчиком АТОЛДобавляет знание о новых типах и признак «товар возвращён» для маркированных позиций. Логин и настройки кассы остаются прежнимиPHP-класс через точку «свой обработчик кассы», переключается в карточке кассы один раз
Таблица учётаХранит чек, заказ, штуки и коды, суммы, доставку, кто и когда. Даёт отметки «уже возвращено» и защиту от повторовОтдельная таблица в базе данных сайта
Страницы в админкеЖурнал и форма оформленияСтандартные страницы административного раздела
Права доступаКто видит журнал, кто может пробиватьШтатные права модуля Битрикса
Подсказка в окне «Добавить чек»При выборе нового типа показывает подсказку и блокирует сохранениеНебольшой скрипт на странице «Чеки за день»
Печать и статусыСоздание, отправка в АТОЛ, повтор при сбое, статус и ссылка ОФДШтатный механизм Битрикса без изменений

Что это даёт

  • Законный чек на часть заказа: только возвращённые товары и возвращённая сумма, с кодами маркировки.
  • Заказ, оплата, статистика и интеграции не трогаются.
  • Ядро Битрикса не правится, обновления безопасны.
  • Чеки видны в штатном списке, ссылки на ОФД штатные.
  • Журнал и права доступа для бухгалтерии и контроля.

Чего решение не делает

  • Не возвращает деньги покупателю: это по-прежнему делает бухгалтерия или эквайринг. Чек только фиксирует возврат.
  • Не меняет заявки на возврат и их статусы: связь только в подстановке товаров и записи номера чека в заявку.
  • Не печатает чеки автоматически: чек пробивает менеджер.

Что решить до начала разработки

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

  1. Какая штука вернулась. Если в позиции несколько одинаковых товаров с разными кодами, кто указывает код: менеджер в форме или склад при приёмке? Часто склад коды при возврате не передаёт. Тогда код выбирает менеджер по «хвосту», а по умолчанию подставляется первая ещё не возвращённая штука.
  2. Доставка. Включать ли стоимость доставки в частичный возврат? Обычно нет.
  3. Сумма. Чек всегда равен сумме отмеченных товаров по ценам чека прихода, уже со скидками. Если магазин возвращает иную сумму, правило нужно согласовать заранее.
  4. Способ возврата денег. Безналичными или наличными: обычно выбор оставляем менеджеру.
  5. Повторные возвраты и возврат остатка. Только через модуль: штатный «Полный возврат» после частичного вернёт всё повторно.
  6. Текущие чеки. Проверить на рабочем сайте, как печатаются чеки прихода и есть ли в них коды. И принимала ли касса раньше полные возвраты с маркированными товарами.
  7. Тестовая среда АТОЛ. Нужна тестовая группа касс с тестовыми логином и паролем, её запрашивают у АТОЛ.

Что требует закон

  • При возврате части заказа пробивается чек «возврат прихода» только на возвращаемые позиции и возвращённую сумму. Так рекомендуют АТОЛ и операторы фискальных данных.
  • Ссылаться на исходный чек прихода в чеке возврата не требуется.
  • Для маркированных товаров в чек возврата передаётся код возвращённой штуки: по правилам ОФД код при возврате сканируется заново. По разъяснениям АТОЛ чек возврата допустим и без кода, если установить его невозможно, но это запасной вариант, а не норма.
  • Способ возврата денег в чеке соответствует тому, как вернули: на карту — «безналичными», из кассы — «наличными».

Нужен частичный возврат в вашем магазине?

Мы делаем такие доработки для интернет-магазинов на 1С-Битрикс: через официальные точки расширения, без правки ядра и с учётом маркировки. Напишите нам: разберём вашу схему оплаты, кассы и склада, ответим на вопросы из раздела «Что решить до начала разработки» и предложим план работ со сроками и стоимостью.


С уважением,
Екатерина Щербак
Мы используем cookie-файлы. Cookie помогают нам обеспечивать корректную работу сайта, проводить ретаргетинг, а также собирать статистику и отзывы для улучшения сервиса.
Принять все Подробнее Выбрать
Обратите внимание: ограничение использования cookie может повлиять на работу отдельных функций сайта. Мы рекомендуем отключать их только опытным пользователям.