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

Товары и суммы в чек кладёт сайт, поэтому и частичный возврат решается на стороне сайта, а не кассы.
Из чего состоит чек
В каждом заказе Битрикс хранит две «половинки». Оплата — сколько денег и каким способом. Отгрузка — какие товары и сколько штук уехали покупателю, плюс стоимость доставки.
Чек состоит из типа («приход», «возврат прихода», «аванс» и так далее), оплаты и отгрузки. Товары всегда берутся из отгрузки целиком, сумма — из оплаты целиком. Понятия «часть отгрузки» в Битриксе нет.
Что проверяется перед отправкой
- Сумма всех строк чека (товары плюс доставка) совпадает с суммой оплаты, иначе чек не уйдёт.
- У покупателя есть телефон или электронная почта: чек нужно кому-то отправить.
- У маркированного товара есть код маркировки на каждую штуку.
Маркировка в чеках
Для маркированных товаров Битрикс печатает в чеке отдельную строку на каждую штуку, и у каждой строки свой код. Коды приходят на сайт со склада при сборке заказа и хранятся вместе с отгрузкой. Поэтому чек возврата на часть товаров должен указывать не «2 штуки», а какие именно штуки, то есть какие коды, вернулись.
Почему штатно не получается
Окно «Добавить чек» позволяет выбрать только оплату и привязать к ней отгрузки целиком. В курсе «Торговый день магазина. Продажи и возвраты» Битрикс пишет прямо: «на текущий момент система не поддерживает частичные возвраты». На форумах Битрикса с 2017 по 2020 год ответ тот же, а в обновлениях модуля «Интернет-магазин» за 2023–2026 годы тема так и не появилась.
Почему так устроено
- Чек строится из целых «половинок» заказа: целой оплаты и целой отгрузки.
- Действует правило равенства сумм. Если просто убрать товары из чека, сумма перестанет совпадать с оплатой, и чек не пройдёт проверку.
- Оплату нельзя «вернуть частично»: отметка «возвращена» ставится на всю оплату сразу.
Официальный обходной путь и его минусы
Документация предлагает сделать полный возврат, скопировать заказ и убрать из копии лишние позиции. Затем копию оплачивают заново и пробивают новый чек прихода. У этого пути четыре минуса:
- два лишних чека (возврат всего и приход остатка) и лишние движения денег;
- покупатель видит непонятные операции по своей карте;
- ломается статистика продаж;
- появляются дубли заказов во всех связанных системах: программе лояльности, складе, доставке, личном кабинете покупателя.
Готовых решений нет
В Маркетплейсе Битрикса нет модуля «чек возврата на часть товаров» для штатной кассы АТОЛ. Частичный возврат умеют только некоторые платёжные модули со своей встроенной кассой: ЮKassa, «Долями», PayKeeper. Если в магазине другие способы оплаты и своя касса, они не помогут.
Какие точки расширения даёт Битрикс
Частичный возврат собирается из официальных точек подключения, без единой правки ядра. Ядро (файлы самого Битрикса) править нельзя: при следующем обновлении правки сотрутся, а поддержка перестанет помогать. Доработки через точки подключения обновления не затрагивают.
| Точка подключения | Что позволяет | Используем? |
| Свои типы чеков | Зарегистрировать новый тип, например «Частичный возврат безналичными». Он появится в списках Битрикса под своим названием | Да, два новых типа |
| Своё правило сборки чека | Новый тип наследует штатный, оставляет только выбранные штуки и пересчитывает сумму. Товары и сумма уменьшаются согласованно, и штатная проверка проходит | Да, основа решения |
| Свой обработчик кассы | Обработчик переводит чек с языка Битрикса на язык конкретной кассы. Можно написать свой или унаследовать штатный | Да: наследник штатного обработчика АТОЛ |
| Событие «подготовка данных чека» | Изменить состав любого чека перед проверкой и отправкой | Нет: инструмент не знает, какой именно чек правит |
| Свои страницы и модули в админке | Своя страница, журнал, права доступа, пункт меню | Да |
| Свой блок на странице заказа | Добавить собственный блок на страницу просмотра заказа | Нет, см. ниже |
| Программный запуск печати | Создать и отправить чек из своего кода тем же путём, что и кнопка «Добавить чек»: статусы, повторы, ссылки на ОФД штатные | Да |
Чего Битрикс не даёт: серверных зацепок в само окно «Добавить чек» (оно рисуется скриптом в браузере) и частичного учёта оплаты вида «возвращено 3 000 из 10 000».
Почему не дорабатываем штатные экраны
Первое желание — добавить выбор товаров прямо в окно «Добавить чек» или на страницу заказа. Мы от этого отказались: такие доработки ломаются при обновлениях и не дают ни журнала, ни нормальных прав доступа.
Окно «Добавить чек»
- Окно целиком рисуется скриптом Битрикса в браузере, и на стороне сервера у него нет точек подключения. Само в него попадает только название нового типа чека.
- Чтобы добавить выбор товаров, пришлось бы вклиниваться в чужой скрипт и перехватывать кнопку «Сохранить». Это держится на внутренних деталях, которые Битрикс не обещает сохранять, и после обновления может тихо перестать работать.
- Таких окон в Битриксе три: в «Чеках за день», у оплаты и у отгрузки на странице заказа. Все устроены по-разному, дорабатывать пришлось бы все три.
- Окно узкое, около 500 пикселей: список штук с кодами маркировки, отметки «уже возвращено» и итог туда не помещаются.
Вместо этого при выборе нового типа в штатном окне мы показываем подсказку «Частичный возврат оформляется в разделе «Чеки частичного возврата»» и блокируем сохранение. Это одна точка касания с окном, ломаться в ней нечему. И менеджер не сможет пробить «частичный» чек без выбора товаров.
Страница заказа
Технически свой блок на странице заказа добавить можно, и даже через официальную точку подключения. Но у этого пути четыре минуса:
- страница заказа часто и так перегружена, а каждая доработка чужой страницы добавляет риск при обновлениях;
- блок увидит любой сотрудник, который открывает заказы, а пробивать фискальные чеки должна ограниченная группа;
- нет журнала: на странице заказа видно только текущий заказ, а бухгалтерии нужен список всех чеков возврата за период;
- места для списка штук с кодами всё равно мало.
Отдельная страница даёт всё это сразу. Ссылку на неё из карточки заказа при желании можно добавить позже, это одна строка.
Как мы решаем задачу: модуль «Чеки частичного возврата»
Решение — небольшой отдельный модуль со своей страницей в админке. Внутри два новых типа чека и надстройка над штатным обработчиком кассы АТОЛ. Печать идёт через штатный механизм, поэтому чеки видны в обычном списке «Чеки за день» со ссылками на ОФД.
Как это выглядит для менеджера
- Магазин → Кассы ККМ → «Чеки частичного возврата» → «Оформить».
- Менеджер вводит номер заказа. Страница показывает покупателя, оплату, отгрузку и состав по штукам, для маркированных товаров с кодом каждой штуки. Если по заказу уже был частичный возврат, видна отметка «уже возвращено».
- Если покупатель оформил заявку на возврат в личном кабинете, её товары подставляются кнопкой «Заполнить по заявке».
- Менеджер отмечает возвращаемые штуки, при необходимости доставку, и выбирает способ возврата денег: безналичными или наличными. Итоговая сумма считается сама по ценам чека прихода и вручную не меняется.
- Кнопка «Пробить чек» отправляет чек в АТОЛ штатным механизмом. На странице появляются статус и ссылка на чек в ОФД, а сам чек виден в «Чеках за день».
- В журнале собраны все чеки частичного возврата за период: заказ, товары, сумма, способ, статус, кто и когда пробил.
Защита от ошибок: одну и ту же штуку нельзя вернуть дважды, вернуть больше отгруженного нельзя, сумму чека нельзя ввести произвольно.
Как это устроено внутри
| Часть решения | Что делает | Как сделано |
| Два новых типа чека | «Частичный возврат безналичными» и «Частичный возврат наличными». Берут данные штатного чека возврата, оставляют только выбранные штуки и пересчитывают сумму | PHP-классы-наследники через точку «свои типы чеков» |
| Надстройка над обработчиком АТОЛ | Добавляет знание о новых типах и признак «товар возвращён» для маркированных позиций. Логин и настройки кассы остаются прежними | PHP-класс через точку «свой обработчик кассы», переключается в карточке кассы один раз |
| Таблица учёта | Хранит чек, заказ, штуки и коды, суммы, доставку, кто и когда. Даёт отметки «уже возвращено» и защиту от повторов | Отдельная таблица в базе данных сайта |
| Страницы в админке | Журнал и форма оформления | Стандартные страницы административного раздела |
| Права доступа | Кто видит журнал, кто может пробивать | Штатные права модуля Битрикса |
| Подсказка в окне «Добавить чек» | При выборе нового типа показывает подсказку и блокирует сохранение | Небольшой скрипт на странице «Чеки за день» |
| Печать и статусы | Создание, отправка в АТОЛ, повтор при сбое, статус и ссылка ОФД | Штатный механизм Битрикса без изменений |
Что это даёт
- Законный чек на часть заказа: только возвращённые товары и возвращённая сумма, с кодами маркировки.
- Заказ, оплата, статистика и интеграции не трогаются.
- Ядро Битрикса не правится, обновления безопасны.
- Чеки видны в штатном списке, ссылки на ОФД штатные.
- Журнал и права доступа для бухгалтерии и контроля.
Чего решение не делает
- Не возвращает деньги покупателю: это по-прежнему делает бухгалтерия или эквайринг. Чек только фиксирует возврат.
- Не меняет заявки на возврат и их статусы: связь только в подстановке товаров и записи номера чека в заявку.
- Не печатает чеки автоматически: чек пробивает менеджер.
Что решить до начала разработки
Перед стартом магазину нужно ответить на несколько вопросов по правилам возврата и получить тестовый доступ к кассе. От ответов зависит, как будет работать форма оформления.
- Какая штука вернулась. Если в позиции несколько одинаковых товаров с разными кодами, кто указывает код: менеджер в форме или склад при приёмке? Часто склад коды при возврате не передаёт. Тогда код выбирает менеджер по «хвосту», а по умолчанию подставляется первая ещё не возвращённая штука.
- Доставка. Включать ли стоимость доставки в частичный возврат? Обычно нет.
- Сумма. Чек всегда равен сумме отмеченных товаров по ценам чека прихода, уже со скидками. Если магазин возвращает иную сумму, правило нужно согласовать заранее.
- Способ возврата денег. Безналичными или наличными: обычно выбор оставляем менеджеру.
- Повторные возвраты и возврат остатка. Только через модуль: штатный «Полный возврат» после частичного вернёт всё повторно.
- Текущие чеки. Проверить на рабочем сайте, как печатаются чеки прихода и есть ли в них коды. И принимала ли касса раньше полные возвраты с маркированными товарами.
- Тестовая среда АТОЛ. Нужна тестовая группа касс с тестовыми логином и паролем, её запрашивают у АТОЛ.
Что требует закон
- При возврате части заказа пробивается чек «возврат прихода» только на возвращаемые позиции и возвращённую сумму. Так рекомендуют АТОЛ и операторы фискальных данных.
- Ссылаться на исходный чек прихода в чеке возврата не требуется.
- Для маркированных товаров в чек возврата передаётся код возвращённой штуки: по правилам ОФД код при возврате сканируется заново. По разъяснениям АТОЛ чек возврата допустим и без кода, если установить его невозможно, но это запасной вариант, а не норма.
- Способ возврата денег в чеке соответствует тому, как вернули: на карту — «безналичными», из кассы — «наличными».
Нужен частичный возврат в вашем магазине?
Мы делаем такие доработки для интернет-магазинов на 1С-Битрикс: через официальные точки расширения, без правки ядра и с учётом маркировки. Напишите нам: разберём вашу схему оплаты, кассы и склада, ответим на вопросы из раздела «Что решить до начала разработки» и предложим план работ со сроками и стоимостью.
