Рассмотрим распространенную и крайне неприятную проблему, с которой часто сталкиваются пользователи и администраторы при изменении системы налогообложения (например, при переходе на УСН) или после очередного обновления конфигурации. Вы изменили настройки организации, установили во всех справочниках и документах ставку "Без НДС", получили прошитый под УСН кассовый аппарат, но при печати чека из документа "Приходный кассовый ордер" (ПКО) или "Эквайринговая операция" касса упорно выводит НДС 20%.
Особенно часто этот сбой проявляется при использовании внешних обработок обслуживания ККТ, устаревших версий БПО (Библиотеки подключаемого оборудования) или в связке с фискальными регистраторами АТОЛ. В этой статье мы подробно разберем, почему программа игнорирует настройки документов, и пошагово выясним, как вернуть правильное отображение налоговой ставки на чеке.
Проанализируем сначала поведение самой платформы. В типовых конфигурациях 1С (ERP, Комплексная автоматизация, Управление торговлей, Бухгалтерия предприятия) существует известная системная ошибка. Ее суть заключается в следующем: если в документе оплаты ставка НДС по какой-то причине не заполнена или ее не удалось определить программно, система по умолчанию подставляет ставку 20% без учета действующей системы налогообложения организации.
Давайте посмотрим, где именно в коде конфигурации это происходит. За формирование позиций чека отвечает общий модуль ДенежныеСредстваСервер. В процедуре ЗаполнитьПозицииИТаблицуОплатЧека разработчики оставили жесткую инициализацию дефолтной ставки:
// СтавкаНДСПоДокументу = Перечисления.СтавкиНДС.НДС20_120; // Исходный ошибочный код 1С
СтавкаНДСПоДокументу = Перечисления.СтавкиНДС.БезНДС; // Наш временный "костыль" для исправления ситуации
ВыборкаСтавкиНДС = РезультатЗапроса[4].Выбрать();
Если ВыборкаСтавкиНДС.Следующий() Тогда
Если ЗначениеЗаполнено(ВыборкаСтавкиНДС.СтавкаНДС) Тогда
СтавкаНДСПоДокументу = ВыборкаСтавкиНДС.СтавкаНДС;
КонецЕсли;
КонецЕсли;
Если в выборке запроса значение ставки оказывается пустым (например, для платежей, не привязанных напрямую к товарной спецификации), переменная СтавкаНДСПоДокументу сохраняет свое первоначальное значение. В ошибочном коде это было 20%, что приводило к неверному налогу на чеке. Для исправления этой проблемы установите официальный патч 1С EF_00_00272155 или внесите соответствующие корректировки в модуль через расширение конфигурации.
Выясним, почему ставка НДС может оказаться незаполненной в самом документе оплаты, даже если в "Реализации товаров и услуг" (РТУ) жестко выставлено "Без НДС". Это часто связано с логикой проведения расчетов и распределения сумм:
Чтобы избежать подобных ситуаций, всегда проверяйте структуру подчиненности документов по цепочке "Счет - Реализация - ПКО" и контролируйте, чтобы суммы оплат строго соответствовали суммам отгрузок без образования нераспределенных авансов.
Если печать чеков выполняется с помощью внешней обработки, корень проблемы может скрываться в механизме трансляции ставок. Кассовый аппарат не принимает текстовые названия вроде "Без НДС". Вместо этого программа передает в драйвер ККТ цифровой код (индекс) налоговой ставки.
При обновлении прошивок ККТ АТОЛ (переход на платформу 5.0) и переходе на драйвер версии 10.х таблицы налогов изменились:
Если ваша внешняя обработка была написана под старый стандарт интеграции, она может по-прежнему отправлять в кассу код 1, рассчитывая получить "Без НДС". Однако новый драйвер АТОЛ обрабатывает этот код как команду начислить НДС 20%.
Разберем пример кода во внешней обработке, который осуществляет маппинг (сопоставление) ставок для ККТ:
// Пример некорректного сопоставления в старом стиле:
Если СтавкаНДС1С = Перечисления.СтавкиНДС.БезНДС Тогда
НомерСтавкиДляККТ = 1; // Ошибка! В новых драйверах АТОЛ под этим кодом идет 20%
ИначеЕсли СтавкаНДС1С = Перечисления.СтавкиНДС.НДС20 Тогда
НомерСтавкиДляККТ = 3;
КонецЕсли;
Для исправления необходимо переписать алгоритм сопоставления под требования актуальной версии используемого драйвера. Сверьте таблицы налогов в вашей кассе через "Тест драйвера ККТ" и пропишите корректные соответствия номеров ставок в обработке.
Когда внешняя обработка формирует XML-пакет для передачи в БПО (Библиотеку подключаемого оборудования), для каждой товарной позиции генерируется узел с указанием ставки. Посмотрим на структуру тегов:
<Position Name="Оплата по договору" Quantity="1" Price="1500" Amount="1500" Tax="none" />
Для корректного вывода ставки "Без НДС" атрибут Tax должен содержать строковое значение "none". Если обработка формирует XML-строку вручную и допускает ошибку (например, оставляет атрибут пустым, передает числовое значение 0 или некорректный идентификатор), драйвер ККТ не сможет распознать ставку. В этом случае касса применит ставку по умолчанию, прописанную в её собственной энергонезависимой памяти.
По умолчанию на заводах во все ККТ АТОЛ записывается резервная ставка "НДС 20%". Мы можем изменить это поведение непосредственно в аппаратных настройках кассы. Разберем этот процесс по шагам:
После этого, даже если внешняя обработка 1С передаст в ККТ некорректный или пустой XML-код налога, кассовый аппарат подставит внутреннюю настройку по умолчанию и успешно напечатает в чеке "Без НДС".
Напоследок проанализируем еще один нюанс. Если организация перешла с ОСН на УСН, ККТ должна быть перерегистрирована под новую систему налогообложения. Но помимо этого, код СНО должен передаваться в каждом чеке из 1С. В XML-пакете за это отвечает тег TaxVariant (или TaxSystem):
<Receipt TaxVariant="1" ... >
Если внешняя обработка жестко передает код 0 (Общая СНО), касса может автоматически принудительно пересчитывать налог позиций под 20%, игнорируя указанную ставку "Без НДС". Убедитесь, что ваша внешняя обработка динамически определяет систему налогообложения организации и передает корректный код (например, 1 для УСН "Доход" или 2 для УСН "Доход-Расход") в формируемый XML-пакет. Если чеки уже были ошибочно пробиты, для их исправления в УТ 11.5 подойдёт обработка для массовой корректировки кассовых чеков.