При доработке нетиповых конфигураций или адаптации устаревших версий конфигураций (например, УПП 1.2 на платформе 8.1) под требования 54-ФЗ разработчики часто сталкиваются со специфической ошибкой: на бумажной ленте печатного чека налог не отображается, но в фискальных данных оператора (ОФД) каждой позиции чека присваивается ставка «НДС 0%» вместо «Без НДС».
Разберем детально, почему возникает такая ситуация, как взаимодействуют драйверы торгового оборудования с форматами фискальных документов и как правильно скорректировать код в 1С.
С точки зрения налогового законодательства и стандартов ФФД значения «0%» и «Без НДС» принципиально отличаются:
Когда кассовая программа передает в драйвер ККТ числовое значение 0, драйвер или прошивка кассового аппарата интерпретирует его буквально как ставку 0% (тег 1199 со значением 5). Чтобы касса зарегистрировала признак «Без НДС» (тег 1199 со значением 6), в структуру XML-пакета чека или в параметры метода драйвера необходимо передавать специальный строковый маркер либо пустое значение.
Рассмотрим, как формируется ставка налога в кодовой базе. Во многих типовых и самописных модулях расчет ставки сводится к вызову типовой функции общего модуля:
Функция ПолучитьСтавкуНДС(СтавкаНДС) Экспорт
Если СтавкаНДС = Перечисления.СтавкиНДС.НДС20 ИЛИ СтавкаНДС = Перечисления.СтавкиНДС.НДС20_120 Тогда
Возврат 20;
ИначеЕсли СтавкаНДС = Перечисления.СтавкиНДС.НДС10 ИЛИ СтавкаНДС = Перечисления.СтавкиНДС.НДС10_110 Тогда
Возврат 10;
ИначеЕсли СтавкаНДС = Перечисления.СтавкиНДС.НДС18 ИЛИ СтавкаНДС = Перечисления.СтавкиНДС.НДС18_118 Тогда
Возврат 18;
КонецЕсли;
Возврат 0;
КонецФункции
Проанализируем этот код: если в документе выбрано перечисление Перечисления.СтавкиНДС.БезНДС, условие нигде не срабатывает, и функция по умолчанию возвращает число 0. Это число попадает в атрибут ставки налога фискальной строки, из-за чего касса отправляет в ОФД признак 0%.
В зависимости от версии требований «1С:Совместимо» и используемого драйвера ККТ (например, интеграционных компонент «Штрих-М» или «АТОЛ»), для обозначения позиции без налога в атрибут Tax или VATRate должна передаваться либо пустая строка "", либо строковое значение "none".
Чтобы исключить неверную регистрацию ставок, разберем по шагам правильную организацию логики.
Шаг 1. Проверка общих модулей. Не следует менять стандартную функцию УчетНДС.ПолучитьСтавкуНДС, так как она может использоваться в расчетах сумм других документов бухгалтерского и налогового учета, где требуется именно числовое значение. Лучше реализовать отдельную функцию подготовки ставки для чека ККТ.
Шаг 2. Формирование строкового значения для кассы. Посмотрим на пример корректного получения значения ставки для фискализации:
Функция ПолучитьСтавкуНДСДляЧека(СтавкаНДС, ПорядокНалогообложения = "") Экспорт
Если СтавкаНДС = Перечисления.СтавкиНДС.БезНДС
ИЛИ СтавкаНДС = Перечисления.СтавкиНДС.ПустаяСсылка()
ИЛИ ВРег(ПорядокНалогообложения) = "ЕНВД"
ИЛИ ВРег(ПорядокНалогообложения) = "УСН" Тогда
Возврат ""; // Для некоторых драйверов может потребоваться "none"
ИначеЕсли СтавкаНДС = Перечисления.СтавкиНДС.НДС0 Тогда
Возврат 0;
Иначе
Возврат УчетНДС.ПолучитьСтавкуНДС(СтавкаНДС);
КонецЕсли;
КонецФункции
Обратим внимание на синтаксис при переносе механизмов из современных типовых конфигураций (например, УПП 1.3 или БП 3.0) в базы на платформе 8.1. Функция ПредопределенноеЗначение() была добавлена только в платформе 8.2. Попытка вызвать ее в 8.1 приведет к синтаксической ошибке. В платформе 8.1 обращение к элементам перечислений выполняется напрямую через менеджер:
// В платформе 8.1 используем:
Перечисления.СтавкиНДС.БезНДС
// Конструкция ниже в 8.1 вызовет ошибку:
// ПредопределенноеЗначение("Перечисление.СтавкиНДС.БезНДС")
Если после исправления кода касса по-прежнему ведет себя некорректно при прямом обращении через DTO, проанализируем настройки ККТ:
Tax1–Tax4, убедимся, что при отсутствии налога в метод регистрации передается признак нулевого налога или параметр отключения начисления налога.Организации на спецрежимах не имеют права пробивать чеки со ставкой «НДС 0%». Ошибочно сформированные документы необходимо скорректировать в соответствии с форматом фискальных документов: