Вопрос интеграции программ лояльности с кассовым оборудованием часто вызывает затруднения у разработчиков 1С. Основная дилемма заключается в том, как именно передать информацию о бонусах в фискальный накопитель: как скидку, уменьшающую цену товара, или как отдельный вид оплаты. В этой статье мы подробно разберем технические и юридические нюансы регистрации чеков с бонусными баллами при работе через драйвер Атол 8.16 и выше.
Для начала проанализируем терминологию, которую часто путают при программировании. В протоколе ККТ существует два разных понятия: PaymentMode (Признак способа расчета) и PaymentMethod (Тип оплаты).
Признак способа расчета (Тег 1214) определяет, в какой момент происходит расчет относительно передачи товара. Если клиент пришел в магазин, выбрал товар и тут же оплатил его часть бонусами, а часть деньгами — это всегда полный расчет (значение 4). Бонусы никак не превращают продажу в кредит или аванс в момент выдачи товара.
Тип оплаты (Тег 1081) определяет, чем именно платит клиент. Обычно это "Наличные" (0) или "Безналичные" (1). Существует также тип "Встречное предоставление" (часто №4), который некоторые используют для бонусов. Однако этот путь таит в себе налоговые риски, так как налоговая база в этом случае считается от полной стоимости товара, без учета бонусного снижения.
Рассмотрим наиболее безопасный и распространенный вариант, к которому пришли участники обсуждения. Бонусы, которые накоплены клиентом в рамках маркетинговой акции (подарены магазином), юридически должны трактоваться как скидка.
Это означает, что перед отправкой данных в драйвер Атол мы должны пересчитать цену каждой позиции в чеке. Проанализируем алгоритм распределения бонусов:
Выясним причину, по которой это решение является приоритетным: при таком подходе в чеке фиксируется реальная выручка, с которой будут уплачены налоги. Если товар стоил 100 рублей, а 20 рублей оплачено бонусами как скидкой, то в фискальных данных пройдет продажа за 80 рублей. Это исключает претензии ФНС по занижению налоговой базы.
При программировании распределения скидки крайне важно следить за "лишней копейкой", которая может возникнуть из-за округления. Драйвер Атол не примет чек, если сумма позиций не совпадет с итогом. Разберем пример кода на языке 1С для пропорционального распределения:
// Пример распределения суммы бонусов по позициям чека
ВсегоБонусовКРаспределению = 500; // Сумма, которую тратит клиент
ВсегоСуммаЧека = ТаблицаТоваров.Итог("Сумма");
ОстатокБонусов = ВсегоБонусовКРаспределению;
Для Каждого СтрокаТовара Из ТаблицаТоваров Цикл
// Для последней строки забираем весь остаток, чтобы избежать ошибок округления
Если ТаблицаТоваров.Индекс(СтрокаТовара) = ТаблицаТоваров.Количество() - 1 Тогда
ТекущаяСкидка = ОстатокБонусов;
Иначе
ТекущаяСкидка = Окр(СтрокаТовара.Сумма / ВсегоСуммаЧека * ВсегоБонусовКРаспределению, 2);
ОстатокБонусов = ОстатокБонусов - ТекущаяСкидка;
КонецЕсли;
// Передаем в драйвер цену за вычетом скидки
СтрокаТовара.ЦенаРегистрации = (СтрокаТовара.Сумма - ТекущаяСкидка) / СтрокаТовара.Количество;
КонецЦикла;
Проанализируем ситуацию, когда клиент хочет оплатить бонусами 100% стоимости товара. В типовых конфигурациях, таких как 1С:Розница, часто стоит запрет на продажу товара с нулевой ценой. И это обосновано законодательством.
Важный нюанс: Полная оплата бонусами (бесплатная передача) может быть расценена как дарение. Для юридических лиц дарение физическим лицам свыше определенной суммы (3000 руб. по ГК РФ) требует особого оформления, а с точки зрения НДС — начисления налога с рыночной стоимости.
Рекомендация: Всегда оставляйте к оплате "живыми" деньгами хотя бы 1 рубль (или 1 копейку) на каждую позицию или на чек в целом. Это переводит операцию из разряда "дарения" в разряд "купли-продажи со скидкой".
Автор исходного вопроса предлагал использовать ItemType = 10 (платеж/выплата). Давайте разберем, почему это не совсем корректно. Согласно ФФД, ItemType (Тег 1212) со значением 1 используется для товаров, 10 — для платежей, не связанных напрямую с передачей товара в этот момент (например, погашение кредита или аванс).
Если вы продаете конкретный товар (хлеб, одежду, запчасть), вы обязаны использовать признак 1 (Товар). Бонусы здесь — лишь условие формирования цены. Использование значения 10 приведет к тому, что в ОФД уйдет информация о приеме платежа, но факт реализации конкретной товарной позиции не будет зафиксирован должным образом, что критично для систем учета, таких как "Честный ЗНАК".
Посмотрим на ситуацию со стороны закона. Если в вашей компании нет утвержденных правил программы лояльности (публичной оферты), вы рискуете столкнуться с потребительским экстремизмом. Покупатель может заявить, что бонусы — это его имущество или авансовые деньги, и потребовать их возврата в рублях.
Чтобы этого избежать, в правилах обязательно должно быть прописано:
В самом чеке полезно выводить дополнительный нефискальный текст через методы драйвера Атол (например, PrintText), информирующий клиента об остатке баллов. Это не влияет на налоги, но снимает вопросы у покупателя.
Подводя итог, при регистрации чека с частичной оплатой бонусами через Атол, мы рекомендуем:
PaymentMode = 4 (Полный расчет).ItemType = 1 для товаров (или соответствующий тип для услуг).Соблюдение этих правил позволит вам корректно настроить обмен между 1С и кассовым аппаратом, минимизируя риски как со стороны налоговой инспекции, так и со стороны покупателей.