При переходе на онлайн-кассы и интеграции торгового оборудования с решениями на платформе 1С предприятия часто сталкиваются с аппаратными и программными сбоями. Один из самых распространенных и неприятных моментов — некорректный вывод ставки НДС на бумажном чеке и в отправляемых данных ОФД. Ситуация, когда организация применяет упрощенную систему налогообложения (УСН) или патент (ПСН) и должна пробивать чеки без НДС, но кассовый аппарат упорно печатает базовую ставку 18% или 20%, может повлечь за собой серьезные налоговые риски и штрафы.
В этой статье мы подробно разберем, почему возникает данная проблема при работе с фискальными регистраторами марки Штрих-М в конфигурациях 1С (на примере «1С:Комплексная автоматизация 1.1» и аналогичных решений на обычных формах), и рассмотрим эффективные способы ее решения как на уровне настроек самой системы, так и путем внесения изменений в программный код фискализации.
Мы проанализируем ситуацию совместно и пошагово разберем все возможные уровни исправления ошибки — от простых манипуляций со справочниками до низкоуровневой настройки таблиц драйвера кассового аппарата.
Прежде чем приступать к изменению программного кода или перепрошивке ККТ, нам необходимо локализовать проблему. Зачастую корень зла кроется в банальном несоответствии реквизитов внутри самой информационной базы. Кассовый модуль 1С при формировании пакета данных для фискализации обращается к свойствам продаваемых позиций.
Выясним логику работы типового механизма формирования чека. В большинстве конфигураций ставка налога для конкретной товарной позиции в чеке ККМ определяется напрямую из карточки номенклатуры. Если у вас две разные организации работают в одной базе данных, но одна из них находится на ОСНО (с НДС), а вторая на УСН (без НДС), использование одной и той же карточки номенклатуры с заполненным реквизитом СтавкаНДС равным "18%" или "20%" неизбежно приведет к ошибке.
Проанализируем последовательность действий для устранения этой проблемы стандартными средствами:
Однако этот способ подходит только в том случае, если разные юридические лица не продают один и тот же товар. Если же номенклатурная база общая, изменение ставки в карточке товара под нужды "упрощенца" приведет к тому, что у организации на общей системе налогообложения чеки начнут пробиваться некорректно. В таком случае нам потребуется программная доработка алгоритма фискализации.
Рассмотрим, где именно в конфигурации происходит формирование данных перед их отправкой на кассовый аппарат. В типовых решениях за этот процесс отвечает общий модуль или модуль менеджера оборудования. Нам интересна процедура под названием ПодготовитьДанныеДляФискализацииЧека.
Проанализируем стандартный фрагмент кода, который отвечает за получение ставки налога для строки чека:
СтрокаЧека.СтавкаНДС = МенеджерОборудованияКлиентСервер.ПолучитьСтавкуНДСДляФискализацииЧека(СтрокаТовара.Номенклатура.СтавкаНДС, ПорядокНалогообложения); // Ставка НДС в %
В данном случае система берет ставку непосредственно из номенклатуры. Чтобы сделать поведение программы более гибким и зависящим от реальной учетной политики конкретной организации, нам необходимо модифицировать этот участок кода.
Давайте напишем алгоритм, который будет динамически определять систему налогообложения для организации, по которой пробивается чек ККМ, и автоматически подставлять правильную ставку НДС, игнорируя жестко заданное значение в карточке товара. Нам потребуется обратиться к регистру сведений учетной политики.
Внедрите в процедуру ПодготовитьДанныеДляФискализацииЧека следующий вариант программного кода:
// Сначала определим параметры учетной политики для организации, совершающей продажу
УчетнаяПолитика = ОбщегоНазначения.ПолучитьПараметрыУчетнойПолитикиРегл(Дата, Организация, Ложь);
Если ЗначениеЗаполнено(УчетнаяПолитика) Тогда
// Проверяем текущую систему налогообложения организации
Если УчетнаяПолитика.СистемаНалогообложения = Перечисления.СистемыНалогообложения.Упрощенная Тогда
// Если фирма работает по УСН, принудительно устанавливаем ставку "Без НДС"
СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
ИначеЕсли УчетнаяПолитика.СистемаНалогообложения = Перечисления.СистемыНалогообложения.Общая Тогда
// Для общей системы налогообложения можно оставить дефолтное значение или жестко задать базовую ставку
СтавкаНДС = СтрокаТовара.Номенклатура.СтавкаНДС;
Иначе
// Резервный вариант на случай иных систем налогообложения (например, ЕНВД, Патент)
СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
КонецЕсли;
Иначе
// Если учетная политика по какой-то причине не найдена, берем данные из номенклатуры
СтавкаНДС = СтрокаТовара.Номенклатура.СтавкаНДС;
КонецЕсли;
// Теперь передаем вычисленную ставку в стандартную функцию формирования строки фискального чека
СтрокаЧека.СтавкаНДС = МенеджерОборудованияКлиентСервер.ПолучитьСтавкуНДСДляФискализацииЧека(СтавкаНДС, ПорядокНалогообложения);
Этот подход гарантирует, что даже при ошибочно заполненной карточке товара организация на УСН никогда не отправит в ОФД сведения о выделенном налоге 18% или 20%. Вся информация будет автоматически отфильтрована на уровне проведения документа в 1С перед непосредственной фискализацией.
Иногда даже после внесения изменений в код или изменения номенклатуры кассовый аппарат продолжает печатать налог. Почему так происходит? Выясним внутреннее устройство работы фискального регистратора Штрих-М.
Кассовый аппарат не оперирует текстовыми понятиями вроде "Без НДС" или "НДС 20%". Он получает от управляющей программы (в данном случае от 1С) числовой индекс налога. Традиционно в таблице налоговых ставок драйвера Штрих-М (Таблица 6 "Налоговые ставки") индексы распределены следующим образом:
Проанализируем стандартную функцию 1С ПолучитьСтавкуНДСДляФискализацииЧека:
Функция ПолучитьСтавкуНДСДляФискализацииЧека(СтавкаНДС, ПорядокНалогообложения = "") Экспорт
Если СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.БезНДС")
ИЛИ СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.ПустаяСсылка")
ИЛИ ВРег(ПорядокНалогообложения) = "ЕНВД" Тогда
Результат = "";
ИначеЕсли СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.НДС10") Тогда
Результат = 10;
ИначеЕсли СтавкаНДС = ...
// Код продолжается для остальных ставок
КонецЕсли;
Возврат Результат;
КонецФункции
Обратим внимание на критически важную деталь: для значения "Без НДС" функция возвращает пустую строку "". Когда драйвер кассы "Штрих-М" получает пустую строку вместо конкретного индекса налога, он трактует это как отсутствие переданного параметра и по умолчанию применяет к операции Налог №1 из своих внутренних настроек (то есть ту самую базовую ставку 18% или 20%). Это и есть причина, по которой "упрощенцы" неожиданно видят налог в чеках.
Как решить эту техническую нестыковку?
Если программные методы в 1С применили, но результат не изменился, нам придется заглянуть во внутренние таблицы самого фискального регистратора через утилиту "Тест драйвера ККТ" от компании Штрих-М.
Важное предупреждение: Работа с внутренними таблицами кассового аппарата требует предельной осторожности. Неправильное изменение параметров может заблокировать работу кассы или привести к рассинхронизации данных с ОФД. Ни в коем случае не пытайтесь обнулять или хаотично менять местами строки в Таблице 6 (Налоги) — это нарушит структуру фискальных документов!
Вместо этого мы проверим системные опции печати налогов. Выполним следующие шаги:
Rus печать налога в операции или Печать налога в чеке.Также обратим внимание на параметр "Автокоррекция ставок НДС" в той же 17-й таблице драйвера. Если этот флаг включен, кассовый аппарат будет самостоятельно корректировать любые приходящие из 1С некорректные ставки на дефолтную ставку ОСНО. Рекомендуется установить этот параметр в значение 0 (выключено), чтобы касса послушно выполняла команды, отправляемые из вашей учетной системы.
Рассматривая проблему управления ставками НДС из 1С, мы не можем обойти стороной актуальные законодательные изменения. Жесткое "зашивание" ставок в коде (как это делали разработчики в прошлом, приравнивая любые продажи по УСН к полному отсутствию налога) уходит в прошлое.
В связи с масштабными изменениями в налоговом законодательстве (в частности, введением НДС для плательщиков УСН при превышении лимитов по выручке со ставками 5% и 7% начиная с 2025 года), "костыли" в коде фискализации могут стать причиной серьезных штрафов. Если вы просто принудительно замените передачу ставки на БезНДС, как показано в некоторых простых примерах, ваша система потеряет гибкость.
Поэтому при доработке конфигураций уровня Комплексная автоматизация 1.1 или УПП 1.3 мы рекомендуем:
Применяя данные методы последовательно — от проверки номенклатуры до точечной настройки драйвера ККТ Штрих-М и модификации кода фискализации с учетом учетной политики организации, мы сможем гарантировать полную юридическую чистоту и корректность каждого пробитого чека.