При интеграции 1С с фискальными регистраторами по требованиям 54-ФЗ разработчики самописных и типовых конфигураций нередко сталкиваются с ситуацией, когда сумма НДС на напечатанном чеке оказывается меньше ожидаемой. Например, при передаче позиции стоимостью 10 рублей и указании ставки НДС 18%, касса выводит сумму налога 1,53 рубля (что составляет примерно 15,25% от итоговой суммы), вместо ожидаемых 1,80 рубля.
Рассмотрим, почему возникает расхождение и как работает механизм расчета налога в современных ККТ.
Согласно требованиям форматов фискальных документов (ФФД) и закону 54-ФЗ, итоговая стоимость позиции (Amount) и цена (Price) в кассовом чеке всегда указываются с учетом всех налогов. Фискальный накопитель и прошивка кассового аппарата не начисляют НДС «сверху» на переданную сумму. Вместо этого касса всегда выделяет налог из итоговой суммы позиции по расчетной формуле:
СуммаНДС = ИтоговаяСумма * Ставка / (100 + Ставка)
Проанализируем математику этого расчета на конкретном примере:
10 * 18 / 118 = 1.5254... рублей (округляется до 1,53 руб.).1.5254 / 10 = 15.25%. Это и воспринимается как «неправильный» расчет кассового аппарата.Таким образом, касса АТОЛ 30Ф считает НДС абсолютно корректно. Ошибка заключается в том, что в 1С цена товара была рассчитана без учета НДС, либо не была правильно оформлена перед отправкой в XML-пакет.
Разберем пример XML-пакета, передаваемого в обработку фискализации:
<?xml version="1.0" encoding="UTF-8"?>
<CheckPackage>
<Parameters PaymentType="1" TaxVariant="1" SenderEmail="" CustomerEmail="" CustomerPhone=""/>
<Positions>
<FiscalString Name="Гильза бронзовая к.12" Quantity="1" Price="10" Amount="10" Tax="18"/>
</Positions>
<Payments Cash="10" CashLessType1="0" CashLessType2="0" CashLessType3="0"/>
</CheckPackage>
В данном пакете атрибут Tax="18" сообщает кассе, что к позиции применяется основная ставка 18%. Касса принимает итоговую сумму Amount="10" и выделяет из нее 18/118.
Для исправления ситуации определимся с типом ценообразования в учетной системе. Выделим два сценария решения задачи:
Если в 1С цена товара ведется без налога (например, 10 рублей без НДС), необходимо перед формированием пакета фискализации пересчитать стоимость товаров, добавив к ней налог. В кассу должны уходить итоговые суммы с уже включенным НДС.
Посмотрим на пример кода 1С для пересчета сумм перед вызовом процедуры ПолучитьXMLПакетДляФискализацияЧека:
// Пересчет суммы и цены позиции с учетом НДС 18%
СтавкаНДСЧисло = 18;
ЦенаБезНДС = СтрокаТовара.Цена;
Количество = СтрокаТовара.Количество;
// Вычисляем НДС сверху
СуммаНДС = Округлить(ЦенаБезНДС * Количество * СтавкаНДСЧисло / 100, 2);
СуммаСНДС = (ЦенаБезНДС * Количество) + СуммаНДС;
ЦенаСНДС = Округлить(СуммаСНДС / Количество, 2);
// В XML-пакет передаем только итоговые значения С НДС
FiscalString.Price = ЦенаСНДС;
FiscalString.Amount = СуммаСНДС;
FiscalString.Tax = "18"; // Касса выделит из СуммаСНДС нужные 18% (18/118)
Проверим настройки подсистемы «Подключаемое оборудование» в 1С. В параметрах экземпляра ККТ АТОЛ существует таблица сопоставления ставок НДС 1С и кодов налоговых групп драйвера АТОЛ.
18% из 1С должна соответствовать коду налога 1 (НДС 18%) или 3 (НДС 18/118%) в драйвере KКТ в зависимости от версии драйвера ДТО.TaxVariant) совпадает с зарегистрированной в ФН кассового аппарата.Выполнение этих шагов позволит обеспечить корректное формирование кассовых чеков с правильным выделением НДС в соответствии с требованиями 54-ФЗ.