Как отразить оплату бонусами в онлайн-чеке на кассах Атол в 1С?

Программист 1С v7.7 1С:Комплексная автоматизация Налоговый учет Торговля и дистрибуция
← На главную

При внедрении программ лояльности и списании бонусных баллов часто возникает задача: как правильно отобразить списание бонусов в кассовом чеке онлайн-ККТ (например, на фискальных регистраторах Атол 55Ф), чтобы покупатель видел списание баллов, а у налоговых органов не возникало претензий по выручке и расхождениям с банковскими выписками. Проанализируем технические и учетные способы реализации этой задачи.

Законодательные ограничения и форматы фискальных документов

В форматах фискальных документов (ФФД 1.05, 1.1, 1.2) не существует отдельного фискального реквизита под названием «Оплата бонусами». Все типы оплат строго стандартизированы. В чек могут быть переданы только следующие виды расчетов:

  1. Наличными (тег 1031).
  2. Безналичными (электронными средствами, тег 1081).
  3. Предварительной оплатой / авансом (тег 1215).
  4. Последующей оплатой / в кредит (тег 1216).
  5. Встречным предоставлением / иными (тег 1217).

Разберем частую ошибку: программисты пытаются использовать свободные безналичные секции драйвера (например, CashLessType1, CashLessType2, CashLessType3), переименовывая их в драйвере ККМ в «Оплата бонусами». При таком подходе текст на бумажной ленте действительно меняется, однако в фискальный накопитель и в ОФД передается тег 1081 («Безналичными»). Налоговая инспекция автоматически сравнивает суммы по тегу 1081 с фактическими поступлениями по эквайрингу на расчетный счет организации. В результате возникает завышение налогооблагаемой базы и автоматические требования налоговой объяснить расхождения между данными ОФД и банковской выпиской.

Вариант 1. Оформление бонусов в виде скидки на товар

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

Рассмотрим правила передачи данных в ККТ при таком сценарии:

  1. Реквизит «цена за единицу» (тег 1079) и «стоимость предмета расчета» (тег 1043) передаются в чек уже с учетом скидки (за вычетом бонусов).
  2. Сумма чека к оплате наличными или безналичными формируется только на фактически уплаченные покупателем деньги.
  3. Если происходит 100% списание бонусов, цена и сумма позиции передаются со значением 0.00 руб. (если прошивка ККТ поддерживает нулевые позиции) либо товар пробивается с символической стоимостью (например, 1 рубль), а остальная часть списывается скидкой.

Чтобы покупатель видел исходную стоимость товара, размер предоставленной скидки (бонусов) и остаток баллов на счете, используем вывод нефискальных текстовых строк. Текстовый блок формируется перед фискальными строками, между ними или в подвале чека (клише) до момента закрытия чека.

Вариант 2. Использование встречного предоставления (тег 1217)

Если маркетинговая программа организации утверждена положением о лояльности или договором публичной оферты, где списание бонусов трактуется как погашение встречных обязательств компании перед клиентом, используется реквизит «встречное предоставление» (тег 1217).

В этом случае порядок формирования данных следующий:

  1. Позиции товаров пробиваются по их полной стоимости без уменьшения цены.
  2. Сумма, оплачиваемая деньгами (наличные или карта), передается в соответствующие реквизиты (тег 1031 или тег 1081).
  3. Сумма, закрываемая бонусами, передается в реквизит «встречное предоставление» (тег 1217).
  4. При 100% оплате бонусами вся итоговая сумма чека относится на тег 1217, а оплата наличными и безналичными равна нулю.

Техническая реализация формирования пакета данных в 1С

Посмотрим на пример формирования XML-пакета чека для драйвера ККТ. При передаче данных через XML-структуру определяются параметры чека, состав товарных позиций и распределение сумм по видам оплат:


XMLДанныеЧека = XMLАнализатор.СоздатьДокумент();
XMLДанныеЧека.Кодировка = "UTF-8";

XMLCheckPackage = XMLДанныеЧека.СоздатьПодчиненныйЭлемент("CheckPackage");
XMLParameters = XMLCheckPackage.СоздатьПодчиненныйЭлемент("Parameters");
Атрибут(XMLParameters, "PaymentType", ТипРасчета);
Атрибут(XMLParameters, "TaxVariant", СистемаНалогообложения);

XMLPositions = XMLCheckPackage.СоздатьПодчиненныйЭлемент("Positions");
СписокТоваров.ВыбратьСтроки();
Пока СписокТоваров.ПолучитьСтроку() = 1 Цикл
    XMLFiscalString = XMLPositions.СоздатьПодчиненныйЭлемент("FiscalString");
    Атрибут(XMLFiscalString, "Name", СписокТоваров.ТовНаим);
    Атрибут(XMLFiscalString, "Quantity", СписокТоваров.Количество);
    // Передаем итоговую цену и сумму с учетом скидки (бонусов)
    Атрибут(XMLFiscalString, "Price", СписокТоваров.Цена);
    Атрибут(XMLFiscalString, "Amount", СписокТоваров.Сумма);
    Атрибут(XMLFiscalString, "Tax", 0);
КонецЦикла;

XMLPayments = XMLCheckPackage.СоздатьПодчиненныйЭлемент("Payments");
// Передача фактической оплаты деньгами
Атрибут(XMLPayments, "Cash", СуммаНаличные);
Атрибут(XMLPayments, "CashLessType1", СуммаБезналичные);

// При использовании встречного предоставления сумма передается в соответствующий тип:
// Атрибут(XMLPayments, "CashLessType4", СуммаБонусовВстречное);

XMLДанныеЧека.Записать(КаталогПользователя() + "FRAtol_001.xml");

Партнерские бонусные программы

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

  1. В момент продажи покупатель получает товар со скидкой на сумму бонусов, чек пробивается на уменьшенную сумму.
  2. По итогам отчетного периода организация-партнер компенсирует сумму предоставленных скидок на основании акта сверки.
  3. Полученная компенсация отражается в бухгалтерском и налоговом учете как внереализационный доход или оплата от третьего лица, минуя кассовый аппарат.
← На главную