При интеграции кассовой техники АТОЛ с конфигурациями 1С по требованиям 54-ФЗ разработчики нередко сталкиваются с ситуацией, когда необлагаемые налогом позиции (например, реализация программного обеспечения без НДС по ст. 149 НК РФ или услуги на спецрежимах) печатаются в чеке со ставкой НДС 0% вместо обязательной формулировки Без НДС.
Разберем природу возникновения этой ошибки, разницу между понятиями в фискальном законодательстве и рассмотрим практические способы настройки передачи данных в ККТ.
С точки зрения математического расчета налога сумма в обоих случаях равна нулю, однако с точки зрения налогового учета и форматов фискальных данных (ФФД) последствия различаются кардинально:
Если организация на общей системе налогообложения реализует необлагаемую продукцию и выбивает в чеке ставку 0%, с точки зрения налоговых органов это трактуется как ошибка фискализации и неправомерное применение ставки, что ведет к требованию пояснений и доначислениям.
Проанализируем механизм передачи параметров в компоненту интеграции (например, AddIn.ATOL_KKM_1C82_54FZ или библиотеку FprnM1C82_54FZ.dll). В ранних версиях стандарта интеграции БПО (Библиотеки подключаемого оборудования) ставка налога передавалась в виде целочисленного значения:
СтрокаПозицииЧека.Вставить("СтавкаНДС", 0);
Поскольку числовой эквивалент для ставки 0% и признака Без НДС одинаков (число 0), драйвер не мог однозначно определить намерение учетной системы. На ОСНО драйвер по умолчанию транслировал ноль как фискальный тег 1199 со ставкой «НДС 0%».
Фирма 1С совместно с производителями кассовой техники переработала требования к драйверам и формат XML-пакета фискализации чека. В современных стандартах БПО ставка НДС передается не числом, а строковым идентификатором.
Рассмотрим соответствие строковых кодов ставкам налога:
"none" — Без НДС;"vat0" или "0" — ставка НДС 0%;"vat10" / "vat20" — ставки 10% и 20%;"vat110" / "vat120" — расчетные ставки 10/110 и 20/120.Для устранения проблемы рекомендуется обновить конфигурацию 1С (или отдельно подсистему БПО) до актуальной версии и установить современный драйвер ККТ АТОЛ (ДТО 10.х). В этом случае 1С автоматически передаст строковый признак none в фискальный пакет.
Если конфигурация снята с поддержки или оперативно обновить БПО невозможно, скорректируем модуль формирования XML-пакета фискализации чека вручную. Найдем место заполнения данных фискальной строки и убедимся, что для необлагаемых позиций передается строковый тег.
Посмотрим на пример адаптации кода формирования пакета:
Если СтрокаТЧ.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС Тогда
СтрокаПозицииЧека.Вставить("СтавкаНДС", "none");
ИначеЕсли СтрокаТЧ.СтавкаНДС = Перечисления.СтавкиНДС.НДС0 Тогда
СтрокаПозицииЧека.Вставить("СтавкаНДС", "vat0");
ИначеЕсли СтрокаТЧ.СтавкаНДС = Перечисления.СтавкиНДС.НДС20 Тогда
СтрокаПозицииЧека.Вставить("СтавкаНДС", "vat20");
ИначеЕсли СтрокаТЧ.СтавкаНДС = Перечисления.СтавкиНДС.НДС10 Тогда
СтрокаПозицииЧека.Вставить("СтавкаНДС", "vat10");
КонецЕсли;
При передаче строкового идентификатора драйвер корректно сопоставляет операцию с тегом ФФД 1199 со значением «Без НДС» и выводит правильный текст в печатную форму и электронный чек для ОФД.
Если печать чека реализована через прямое обращение к методам драйвера ККТ (низкоуровневый протокол), ставка налога задается через специальное свойство объекта драйвера.
Разберем пример передачи параметров налога через объект драйвера:
// Для драйверов АТОЛ старых ревизий:
// 1 - НДС 0%, 2 - НДС 10%, 3 - НДС 18%/20%, 4 - Без НДС
ДрайверККМ.НомерНалога = 4;
// Для драйверов АТОЛ ДТО 10 (через константы интерфейса):
ДрайверККМ.setParam(ДрайверККМ.LIBFPTR_PARAM_TAX_TYPE, ДрайверККМ.LIBFPTR_TAX_NO);
ДрайверККМ.registration();
Выясним частую причину путаницы со ставками налога при совмещении режимов (например, ОСНО + Патент):
none.