С переходом на формат фискальных данных (ФФД) версии 1.05 многие разработчики столкнулись с проблемой: старые механизмы передачи типов оплат в ККТ перестали работать корректно. Если раньше в ФФД 1.0 мы могли использовать универсальные индексы электронных оплат (например, CashLessType1, CashLessType2, CashLessType3), то в версии 1.05 требования к типизации платежей ужесточились. Особенно это касается подарочных сертификатов, которые с точки зрения закона 54-ФЗ являются авансовыми платежами.
В данной статье мы разберем, как модернизировать код формирования XML-пакета для кассового аппарата, какие атрибуты использовать для сертификатов и почему важно правильно выбрать тип оплаты, чтобы избежать претензий со стороны налоговой и задвоения выручки.
Проанализируем ситуацию: в старых редакциях протоколов 1С и драйверов ККТ блок оплат Payments содержал перечисление типов электронных платежей. Кассир или программист настраивали в таблицах ККТ, что тип 1 — это карта, тип 2 — бонус, тип 3 — сертификат. В XML это выглядело следующим образом:
// Старый формат ФФД 1.0
ЗаписьXML.ЗаписатьНачалоЭлемента("Payments");
ЗаписьXML.ЗаписатьАтрибут("Cash", XMLСтрока(СуммаНаличными));
ЗаписьXML.ЗаписатьАтрибут("CashLessType1", XMLСтрока(СуммаКартой));
ЗаписьXML.ЗаписатьАтрибут("CashLessType2", XMLСтрока(0));
ЗаписьXML.ЗаписатьАтрибут("CashLessType3", XMLСтрока(СуммаСертификатом));
ЗаписьXML.ЗаписатьКонецЭлемента();
В ФФД 1.05 структура полностью изменилась. Теперь вместо абстрактных "типов" используются именованные атрибуты, жестко соответствующие тегам ФНС. Рассмотрим обновленный код, который необходимо внедрить в модуль обработки обслуживания ККТ или в код формирования чека:
// Актуальный формат ФФД 1.05
ЗаписьXML.ЗаписатьНачалоЭлемента("Payments");
Если ВерсияФФД > 0 Тогда // Проверяем, что используется ФФД 1.0.5 или выше
// Наличные (тег 1031)
ЗаписьXML.ЗаписатьАтрибут("Cash", XMLСтрока(СуммаНаличными));
// Безналичные/Электронные (тег 1081)
ЗаписьXML.ЗаписатьАтрибут("ElectronicPayment", XMLСтрока(СуммаЭлектронными));
// Постоплата / Кредит (тег 1216)
ЗаписьXML.ЗаписатьАтрибут("Credit", XMLСтрока(СуммаПостоплатой));
// Зачет аванса / Предоплата (тег 1215)
ЗаписьXML.ЗаписатьАтрибут("AdvancePayment", XMLСтрока(СуммаПредоплатой));
// Встречное предоставление (тег 1217)
ЗаписьXML.ЗаписатьАтрибут("CashProvision", XMLСтрока(СуммаПредоставлением));
Иначе
// Режим совместимости с ФФД 1.0
ЗаписьXML.ЗаписатьАтрибут("Cash", XMLСтрока(СуммаНаличными));
ЗаписьXML.ЗаписатьАтрибут("ElectronicPayment", XMLСтрока(СуммаЭлектронными + СуммаПредоплатой + СуммаПредоставлением));
КонецЕсли;
ЗаписьXML.ЗаписатьКонецЭлемента();
Выясним, какой из новых атрибутов подходит для подарочного сертификата. В профессиональном сообществе часто возникают споры между использованием AdvancePayment (Зачет аванса) и CashProvision (Встречное предоставление). Разберем по шагам:
Важный нюанс: Если мы продолжим пробивать оплату сертификатом как "Безналичные" (ElectronicPayment), в ОФД и налоговую уйдут данные о новом приходе денежных средств. Это приведет к задвоению выручки: первый раз налог будет исчислен при продаже самого сертификата, а второй раз — при продаже товара за этот сертификат.
Для полной корректности по ФФД 1.05 мы должны реализовать две разные операции в программе:
В этом чеке мы принимаем деньги. Признак способа расчета должен быть ПРЕДОПЛАТА или АВАНС. В блоке Payments указывается атрибут Cash или ElectronicPayment (смотря как клиент платит за сам пластик).
В этом чеке признак способа расчета — ПОЛНЫЙ РАСЧЕТ. Однако в блоке Payments сумма номинала сертификата должна передаваться именно в атрибут AdvancePayment. Рассмотрим пример кода для формирования комбинированной оплаты (часть наличными, часть сертификатом):
// Пример формирования комбинированного платежа
СуммаВсего = 1000;
СуммаСертификата = 500;
СуммаНаличные = 500;
ЗаписьXML.ЗаписатьНачалоЭлемента("Payments");
ЗаписьXML.ЗаписатьАтрибут("Cash", XMLСтрока(СуммаНаличные));
ЗаписьXML.ЗаписатьАтрибут("AdvancePayment", XMLСтрока(СуммаСертификата));
ЗаписьXML.ЗаписатьКонецЭлемента();
Проанализируем ситуацию с программным обеспечением. Даже если мы напишем идеальный код формирования XML, старый драйвер ККТ может его "не понять". Для успешной работы с ФФД 1.05 необходимо:
AdvancePayment и печатать в чеке "Электронными" по умолчанию.SmDrvFR1C22.dll для Штриха) поддерживает ревизию интерфейса 2.2 или выше.Рассмотрев все нюансы, мы можем сделать вывод: переход на ФФД 1.05 требует от программиста 1С не просто замены одной строки кода, а понимания логики движения денежных средств. Для корректной работы подарочных сертификатов выполним следующие действия:
Payments на использование именованных атрибутов.AdvancePayment.Соблюдение этих правил обеспечит корректную передачу данных в ОФД, правильное отображение типов оплат в чеке (строка "Зачет аванса" вместо "Электронными") и отсутствие проблем с налоговой отчетностью.