При обновлении конфигурации 1С:Управление торговлей 10.3 и переходе на современную платформу 5.0 от компании АТОЛ многие пользователи сталкиваются с неприятной ситуацией. Несмотря на то, что организация находится на специальном режиме налогообложения (ПСН или ЕНВД) и в настройках учетной политики четко указано «не является плательщиком НДС», в фискальном чеке упорно печатается «НДС 20%». Примечательно, что эта ошибка часто проявляется только в режиме РМК (Интерфейс кассира), в то время как при пробитии чека из полного интерфейса все работает корректно.
В данной статье мы подробно разберем, почему это происходит, проанализируем программный код и найдем способ исправления этой ошибки, чтобы вернуть в чеки законное значение «Без НДС».
Переход на платформу АТОЛ 5.0 и использование драйверов 10-й версии изменили механизм взаимодействия программы 1С с кассовым аппаратом. Теперь касса более строго требует передачи корректных признаков налогообложения для каждой позиции. Если 1С не передает информацию о налоговой ставке в явном виде или передает ее некорректно, драйвер или сама ККТ могут подставить ставку по умолчанию, которой обычно является НДС 20%.
Проанализируем ситуацию: почему в полном интерфейсе данные передаются верно, а в РМК — нет? Очевидно, что проблема кроется в процедурах формирования структуры данных для фискализации чека. Программа «теряет» информацию об учетной политике организации именно в момент работы кассира.
Для начала рассмотрим, как 1С:УТ 10.3 пытается определить ставку НДС для передачи в драйвер. Основная логика сосредоточена в общих модулях. Найдем функцию ПолучитьСтавкуНДСДляФискализацииЧека в модуле МенеджерОборудованияКлиентСервер. Рассмотрим пример кода, который отвечает за сопоставление внутренних ставок 1С и значений для кассы:
Функция ПолучитьСтавкуНДСДляФискализацииЧека(СтавкаНДС, ПорядокНалогообложения = "") Экспорт
Если СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.БезНДС")
ИЛИ СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.ПустаяСсылка")
ИЛИ ВРег(ПорядокНалогообложения) = "ЕНВД"
ИЛИ ВРег(ПорядокНалогообложения) = "ПСН" Тогда
Результат = ""; // Для передачи "Без НДС"
ИначеЕсли СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.НДС10") Тогда
Результат = 10;
ИначеЕсли СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.НДС20") Тогда
Результат = 20;
// ... другие варианты ставок
КонецЕсли;
Возврат Результат;
КонецФункции
Как мы видим, функция должна возвращать пустую строку (что интерпретируется драйвером как «Без НДС»), если ПорядокНалогообложения соответствует значению «ПСН» (Патент). Однако, если в эту функцию передается пустое значение порядка налогообложения, а сама номенклатура в справочнике имеет ставку «НДС 20%» (что часто бывает при ведении смешанного учета), функция вернет число 20.
Разберем, откуда вызываются процедуры фискализации в режиме РМК. Нам необходимо заглянуть в модуль формы регистрации продаж (обработка РМК или форма документа ЧекККМ). Выясним причину, по которой ПорядокНалогообложения оказывается не заполнен.
В процессе отладки можно заметить, что в типовом коде при работе через РМК вызывается функция СтавкаНДСФискальнойОперации из общего модуля РозничныеПродажиКлиентСервер. Посмотрим на ее структуру:
Функция СтавкаНДСФискальнойОперации(СтавкаНДС, ПрименяютсяРасчетныеСтавки = Ложь) Экспорт
Если СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.БезНДС")
ИЛИ СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.ПустаяСсылка") Тогда
Возврат Неопределено;
ИначеЕсли СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.НДС20_120") И ПрименяютсяРасчетныеСтавки Тогда
Возврат Неопределено;
Иначе
Возврат ЭлектронныеДокументыПереопределяемый.ПолучитьСтавкуНДСЧислом(СтавкаНДС);
КонецЕсли;
КонецФункции
Проблема заключается в том, что в режиме РМК программа обращается к этой функции, не учитывая текущую систему налогообложения документа. Она просто берет ставку из карточки товара. Если у товара стоит 20%, а мы на Патенте, касса получит команду печатать 20%.
Чтобы решить проблему, необходимо восстановить передачу дополнительных данных (учетной политики) в процедуру фискализации. Рассмотрим исправление в документе ЧекККМ, в форме ФормаРегистрацииПродаж. Нам нужно найти функцию ФискализироватьЧекВФорме.
В оригинальном (ошибочном) коде вызов формирования параметров чека выглядит так:
// Ошибочный вариант:
ПараметрыЧека = ПараметрыОперацииФискализацииЧека(ВерсияФФД, ФУ, ПараметрыКассыККМ, ПараметрыККТ);
Здесь отсутствует важный аргумент — ДопДанные. Именно в этой переменной содержатся сведения о системе налогообложения и настройках НДС организации. Для исправления ситуации необходимо добавить этот параметр в вызов функции:
// Исправленный вариант:
ПараметрыЧека = ПараметрыОперацииФискализацииЧека(ВерсияФФД, ФУ, ПараметрыКассыККМ, ПараметрыККТ, ДопДанные);
Почему это важно? Когда мы передаем ДопДанные, функция ПараметрыОперацииФискализацииЧека получает доступ к контексту документа и настройкам организации. Это позволяет системе правильно идентифицировать режим «Патент» и применить условие, при котором любая ставка товара будет заменена на «Без НДС» перед отправкой команды на кассовый аппарат.
Если после внесения изменений в код проблема сохраняется, проанализируем настройки самого драйвера АТОЛ 10. Иногда в ККТ жестко задана система налогообложения «по умолчанию», которая перекрывает данные из 1С, если они переданы не по стандарту ФФД 1.05/1.2.
Проанализировав лог-файл драйвера (fptr10.log), мы можем окончательно убедиться, что исправление сработало. Ищем строку taxVariant в логе: для Патента значение должно соответствовать 32. Если передается 1 — это общая система, и касса будет требовать НДС.
Таким образом, восстановив передачу параметра ДопДанные в модуле формы РМК, мы полностью устраняем программную ошибку и обеспечиваем корректную печать чеков в соответствии с законодательством.