При оформлении розничных продаж или пробитии чеков из документов оплаты (например, «Приходный кассовый ордер» или «Поступление наличных») пользователи часто сталкиваются с неприятной проблемой: в документе 1С ставка НДС указана корректно (20%), однако на бумажном чеке ККТ выводится «Без НДС». В дополнение к этому могут сыпаться ошибки связи с ККТ, программа зависает, а кассовая смена не закрывается в штатном режиме.
В этой статье мы подробно разберем причины возникновения такой ошибки в различных конфигурациях («1С:Управление производственным предприятием», «1С:Бухгалтерия предприятия 3.0», «1С:Бухгалтерия государственного учреждения» и «1С:Управление торговлей») и рассмотрим пошаговые инструкции по их устранению — от настройки кассового аппарата Штрих-М до программных доработок кода.
---
Первое, что необходимо проанализировать — это взаимодействие торгового оборудования с учетной системой. Очень часто кассовый аппарат физически отвергает ставку 20%, присылая в 1С ошибку вроде «Invalid Tax Value: 20» или код ошибки FFFFFF8h. Система 1С, не получив подтверждения от ККТ, может зависнуть, аварийно завершить работу или принудительно распечатать чек по дефолтной ставке («Без НДС»).
Для решения этой проблемы выполним следующие действия:
2000 (что означает 20.00%). Если там содержатся устаревшие данные (например, 18.00% или нули), ККТ не сможет обработать команду из 1С.%userprofile%\AppData\Roaming\1C\1cv8\ExtCompT\
smDrvFR1CLib24.dll).ShtrihM_KKT.xml). Проверим наличие этого файла в каталоге установки шаблонов или в папке с базой данных и убедимся, что секция сопоставления содержит корректные индексы:
<TaxRates>
<TaxRate Value="20" TaxIndex="1" />
<TaxRate Value="10" TaxIndex="2" />
<TaxRate Value="0" TaxIndex="3" />
<TaxRate Value="None" TaxIndex="4" />
</TaxRates>
---
Если проблема со ставкой НДС 20% и некорректным количеством (когда во всех позициях чека принудительно ставится количество «1», а цена приравнивается к общей стоимости строки) наблюдается в современных управляемых конфигурациях, таких как «1С:Бухгалтерия 3.0» или «1С:БизнесСтарт», причиной является специфическая настройка интеграции.
Проанализируем работу константы ПодготовитьДанныеКПередачеВОФД. Эта опция предназначена для оптимизации отправки чеков через облачные кассовые сервисы, однако при локальном подключении ККТ она начинает искажать пакет данных, передаваемый на фискализацию:
Решение: необходимо отключить эту константу. Сделать это можно через меню «Функции для технического специалиста» (ранее — «Все функции»), найдя в списке констант Подготовить данные к передаче в ОФД и сняв соответствующий флаг. Если доступ к функциям ограничен, воспользуемся стандартной обработкой «Групповое изменение реквизитов» для изменения значения данной константы на Ложь.
---
Рассмотрим ситуацию, когда НДС 20% пропадает только при пробитии чеков на получение доплаты или окончательный расчет, когда способ расчета классифицируется как «Оплата кредита».
Выясним методологическую причину такого поведения системы. Согласно разъяснениям налоговых органов (в частности, Письму ФНС России от 04.02.2019 № ЕД-4-20/1812@), при передаче товаров в кредит формируется первый чек (признак способа расчета — «Передача в кредит»), в котором указывается полная номенклатура и рассчитывается НДС 20%. Когда клиент вносит денежные средства в счет погашения этого кредита, формируется второй чек (с признаком «Оплата кредита»). В этом втором чеке ставка НДС не должна выделяться (выводится «Без НДС» или «НДС не облагается»), чтобы избежать двойного начисления налога в ОФД и учетной системе.
В конфигурациях 1С для реализации этого требования заложен жесткий алгоритм. В общем модуле ФорматноЛогическийКонтрольКлиентСервер в процедуре ПривестиДанныеКТребуемомуФормату система программно очищает ставку НДС для платежей по кредиту.
Если в вашей организации принято решение (несмотря на рекомендации ФНС) выводить ставку НДС в чеках постоплаты для информативности покупателей, этот алгоритм придется скорректировать. Посмотрим на пример кода, который отвечает за это поведение:
// Фрагмент процедуры ПривестиДанныеКТребуемомуФормату
Для Каждого СтрокаПозиции Из ПараметрыЧека.ПозицииЧека Цикл
Если СтрокаПозиции.ПризнакСпособаРасчета = ПредопределенноеЗначение("Перечисление.ПризнакиСпособовРасчета.ОплатаКредита") Тогда
// Код 1С по умолчанию затирает ставку НДС:
// СтрокаПозиции.СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.БезНДС");
// Для сохранения ставки НДС эту строку можно закомментировать в расширении
КонецЕсли;
КонецЦикла;
Важное предупреждение: любое изменение типовой логики контроля ФНС должно быть согласовано с вашей бухгалтерией и аудиторами, так как это может повлечь за собой расхождения в отчетах ОФД.
---
В более старых программных продуктах (например, «1С:Бухгалтерия государственного учреждения 2.0» ранних релизов или «1С:Управление производственным предприятием 1.3») поддержка ставки 20% в коде интеграции с оборудованием может полностью отсутствовать или работать со сбоями.
Разберем, как точечно доработать общий модуль МенеджерОборудованияВызовСервера для корректного сопоставления новой ставки НДС. Нам нужно найти функцию, которая подготавливает XML-пакет для передачи в драйвер ККТ, и добавить туда явное преобразование ставки 20%.
Проанализируем пример доработки кода:
// В общем модуле МенеджерОборудованияВызовСервера найдем процедуру ПодготовитьДанныеДляЧекаККМ
// Добавим обработку ставки НДС 20% в блок сопоставления:
Если СтавкаНДС = Перечисления.СтавкиНДС.НДС20
Или СтавкаНДС = Перечисления.СтавкиНДС.НДС20_120 Тогда
// Передаем драйверу ККТ ставку 20%
СтрокаЧека.Налог = 1; // Индекс налога 20% в таблице ККТ Штрих-М
СтрокаЧека.СтавкаНДС = 20;
ИначеЕсли СтавкаНДС = Перечисления.СтавкиНДС.НДС10
Или СтавкаНДС = Перечисления.СтавкиНДС.НДС10_110 Тогда
СтрокаЧека.Налог = 2;
СтрокаЧека.СтавкаНДС = 10;
Иначе
// Для всех остальных случаев устанавливаем "Без НДС"
СтрокаЧека.Налог = 4;
СтрокаЧека.СтавкаНДС = 0;
КонецЕсли;
После внесения этих изменений в программный код (лучше выполнять это через механизм расширений конфигурации, чтобы сохранить базу на поддержке) обязательно перезапустите сеанс 1С и проведите тестовый чек. Ставка НДС 20% должна корректно отобразиться как на бумажной ленте, так и в электронном документе, отправляемом в ОФД.