Как правильно оформить и пробить чек ККТ со 100% скидкой в 1С

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

При разработке и адаптации самописных документов или доработке типовых конфигураций 1С (например, старых редакций «1С:Управление торговлей 10.3») программисты часто сталкиваются со следующей проблемой: при попытке пробить чек со 100% скидкой на выходе получается фискальный документ, в котором цена и сумма товара равны нулю (Количество = 1, Цена = 0, Сумма = 0). При этом бухгалтерия и руководство компании настойчиво требуют, чтобы в чеке отображалась исходная цена товара, размер скидки и итоговый нулевой результат (Цена = 50, Скидка = 50, Сумма = 0).

В этой статье мы подробно разберем, почему ККТ ведет себя именно так, рассмотрим требования законодательства (54-ФЗ) и особенности форматов фискальных данных (ФФД), а также предложим конкретные технические решения для реализации этой задачи в коде 1С.

Законодательный аспект: почему цена со скидкой должна быть равна нулю

Для начала давайте обратимся к нормативной базе и выясним, насколько законно пробивать чек с нулевыми позициями. Согласно пункту 1 статьи 4.7 Федерального закона № 54-ФЗ, кассовый чек должен содержать ряд обязательных реквизитов, среди которых:

«наименование товаров, работ, услуг, их количество, цена (в валюте Российской Федерации) за единицу с учетом скидок и наценок, стоимость с учетом скидок и наценок...»

Из этой формулировки четко следует, что закон требует указывать в чеке цену товара уже с учетом предоставленной скидки. Если скидка составляет 100%, то фактическая цена за единицу и итоговая стоимость предмета расчета равны 0 рублей. Пробивать исходную цену (без скидки) в качестве фискальной цены товара в данном случае является нарушением закона.

Федеральная налоговая служба (ФНС) в своих официальных разъяснениях подтверждает эту позицию. При оформлении чеков со 100% скидкой (например, при расчете бонусами или в рамках маркетинговых акций) должны заполняться следующие теги:

  1. Тег 1079 («Цена за единицу предмета расчета с учетом скидок и наценок») — указывается как 0 руб.
  2. Тег 1043 («Стоимость предмета расчета с учетом скидок и наценок») — указывается как 0 руб.
  3. Тег 1217 («Сумма по чеку встречным предоставлением») — также может принимать значение 0 руб. (в зависимости от учетной политики).

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

Различия в форматах фискальных данных (ФФД 1.0, 1.05 и 1.2)

Давайте проанализируем, как менялся подход к передаче скидок в ККТ на уровне кода 1С. Ранее, при использовании устаревшего формата ФФД 1.0, структура XML-пакета, отправляемого в драйвер кассы, позволяла передавать исходную цену и сумму скидки отдельно. В коде это выглядело следующим образом:


ЗаписьXML.ЗаписатьНачалоЭлемента("FiscalString");
ЗаписьXML.ЗаписатьАтрибут("Name"      , Наименование);
ЗаписьXML.ЗаписатьАтрибут("Quantity"  , XMLСтрока(ТекущаяПозиция.Количество));
ЗаписьXML.ЗаписатьАтрибут("Price"     , XMLСтрока(ТекущаяПозиция.Цена));
ЗаписьXML.ЗаписатьАтрибут("Amount"    , XMLСтрока(ТекущаяПозиция.Сумма));
ЗаписьXML.ЗаписатьАтрибут("Department", XMLСтрока(ТекущаяПозиция.НомерСекции));

При переходе на формат ФФД 1.05 и более современные версии (включая ФФД 1.2) логика работы изменилась. Реквизит «Цена без учета скидки» перестал быть обязательным и во многих драйверах вообще перестал передаваться в ОФД. Вместо этого ККТ ожидает только итоговые показатели. Код формирования XML-данных стал выглядеть так:


ЗаписьXML.ЗаписатьНачалоЭлемента("FiscalString");
ЗаписьXML.ЗаписатьАтрибут("Name"             , XMLСтрока(ТекущаяПозиция.Наименование));
ЗаписьXML.ЗаписатьАтрибут("Quantity"         , XMLСтрока(ТекущаяПозиция.Количество));
ЗаписьXML.ЗаписатьАтрибут("PriceWithDiscount", XMLСтрока(ТекущаяПозиция.ЦенаСоСкидками));
ЗаписьXML.ЗаписатьАтрибут("SumWithDiscount"  , XMLСтрока(ТекущаяПозиция.Сумма));
ЗаписьXML.ЗаписатьАтрибут("DiscountSum"      , XMLСтрока(ТекущаяПозиция.СуммаСкидок));
ЗаписьXML.ЗаписатьАтрибут("Department"       , XMLСтрока(ТекущаяПозиция.НомерСекции));

При 100% скидке переменная ТекущаяПозиция.ЦенаСоСкидками равна 0. Соответственно, атрибут PriceWithDiscount получает нулевое значение, и ККТ печатает в фискальной строке нулевую цену.

Настройка самой ККТ (Атол, Штрих-М и др.)

Довольно часто при попытке пробить чек с нулевой ценой разработчики сталкиваются с аппаратной ошибкой ККТ или ошибкой драйвера («Недопустимая цена», «Сумма чека равна нулю» и т.д.).

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

Чтобы решить эту проблему, выполним следующие шаги:

  1. Откроем утилиту настройки драйвера ККТ (например, «Тест драйвера ККТ Атол» или «Тест драйвера Штрих-М») с правами администратора.
  2. Перейдем в параметры ККТ (раздел «Свойства» -> «Параметры ККТ» или таблицы параметров).
  3. Найдем флаг (опцию) под названием «Разрешить нулевые цены» (или аналогичную по смыслу настройку в таблицах ККТ).
  4. Установим значение этого параметра в «Да» или «Разрешено» и сохраним настройки.

После активации этой опции кассовый аппарат без проблем начнет принимать чеки, в которых цена позиций равна нулю.

Решение задачи: Вывод исходной цены через текстовые строки

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

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

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


// Создаем структуру параметров фискальной строки
ПараметрыСтроки = Новый Структура;
ПараметрыСтроки.Вставить("Наименование"     , Товар.Наименование);
ПараметрыСтроки.Вставить("Количество"       , 1);
ПараметрыСтроки.Вставить("Цена"             , 50); // Исходная цена
ПараметрыСтроки.Вставить("ЦенаСоСкидками"   , 0);  // Итоговая цена для ФФД
ПараметрыСтроки.Вставить("Сумма"            , 0);  // Итоговая сумма для ФФД
ПараметрыСтроки.Вставить("СуммаСкидок"      , 50);

// Если цена со скидкой равна 0, формируем дополнительную текстовую строку для печати
Если ПараметрыСтроки.ЦенаСоСкидками = 0 Тогда
    ТекстДляПечати = "Базовая цена: " + СокрЛП(ПараметрыСтроки.Цена) + " руб. Скидка: 100%";
    
    // В зависимости от используемой БПО (Библиотеки подключаемого оборудования)
    // добавляем нефискальную текстовую строку в массив позиций чека
    НоваяСтрокаТекста = Новый Структура;
    НоваяСтрокаТекста.Вставить("Текст", ТекстДляПечати);
    // Отправляем на печать методом вывода текстовых строк драйвера
КонецЕсли;

Для отправки произвольного текста на ККТ обычно используется метод драйвера PrintText (или метод ПечатьТекста в интеграционных модулях 1С). Таким образом, покупатель увидит на бумажном носителе всю историю скидки, а фискальные требования контролирующих органов будут строго соблюдены.

Налоговые риски: маркетинговая акция или безвозмездная передача

Разберем еще один важный нюанс, который волнует бухгалтеров при проведении чеков со 100% скидкой — это риск квалификации операции как безвозмездной передачи товаров или услуг. При безвозмездной передаче у компании возникает обязанность начислить НДС с рыночной стоимости переданного имущества за счет собственных средств.

Чтобы избежать подобных рисков, необходимо четко разграничивать эти понятия:

  1. Маркетинговые акции и программы лояльности (расчет встречным предоставлением). Если клиент получает скидку 100% за выполнение определенных условий (например, «купи две услуги, третья в подарок», «приведи друга», «оплата ранее накопленными баллами»), то эта операция является частью возмездного договора. Для подтверждения этого факта у предприятия обязательно должно быть утверждено Положение о маркетинговой политике или Правила программы лояльности. В этом случае у налоговых органов не возникнет оснований признать сделку дарением.
  2. Безусловное дарение. Если товар или услуга отдаются клиенту просто так, без каких-либо условий с его стороны. В такой ситуации ККТ применять не нужно, так как отсутствует факт расчета в понимании 54-ФЗ. Однако здесь в полной мере возникают обязательства по уплате НДС с рыночной стоимости.

Будущие изменения ККТ

Разработчикам, поддерживающим самописные решения на базе 1С, следует учитывать долгосрочные планы развития ФНС. Планируется постепенный и полный вывод из обращения устаревших форматов ФФД 1.05 и 1.1. Согласно текущим проектам нормативных актов, поддержка этих форматов будет полностью прекращена к **1 марта 2027 года**.

Все налогоплательщики будут обязаны использовать ФФД 1.2. При адаптации и написании новых алгоритмов взаимодействия с кассовым оборудованием в 1С рекомендуется изначально ориентироваться на требования стандарта ФФД 1.2, исключая любые попытки передавать старые параметры (такие как `Price` вместо `PriceWithDiscount`). Отрабатывайте сценарии со 100% скидками через передачу нулевых фискальных сумм и вывод информационных сообщений через нефискальные строки печати.

← На главную