Почему в чеке вместо "Без НДС" печатается 20% НДС и как это исправить в 1С

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Налоговый учет Торговля и дистрибуция
← На главную

Рассмотрим распространенную и крайне неприятную проблему, с которой часто сталкиваются пользователи и администраторы при изменении системы налогообложения (например, при переходе на УСН) или после очередного обновления конфигурации. Вы изменили настройки организации, установили во всех справочниках и документах ставку "Без НДС", получили прошитый под УСН кассовый аппарат, но при печати чека из документа "Приходный кассовый ордер" (ПКО) или "Эквайринговая операция" касса упорно выводит НДС 20%.

Особенно часто этот сбой проявляется при использовании внешних обработок обслуживания ККТ, устаревших версий БПО (Библиотеки подключаемого оборудования) или в связке с фискальными регистраторами АТОЛ. В этой статье мы подробно разберем, почему программа игнорирует настройки документов, и пошагово выясним, как вернуть правильное отображение налоговой ставки на чеке.

Причина 1. Зарегистрированная ошибка 1С (EF_00_00272155)

Проанализируем сначала поведение самой платформы. В типовых конфигурациях 1С (ERP, Комплексная автоматизация, Управление торговлей, Бухгалтерия предприятия) существует известная системная ошибка. Ее суть заключается в следующем: если в документе оплаты ставка НДС по какой-то причине не заполнена или ее не удалось определить программно, система по умолчанию подставляет ставку 20% без учета действующей системы налогообложения организации.

Давайте посмотрим, где именно в коде конфигурации это происходит. За формирование позиций чека отвечает общий модуль ДенежныеСредстваСервер. В процедуре ЗаполнитьПозицииИТаблицуОплатЧека разработчики оставили жесткую инициализацию дефолтной ставки:


// СтавкаНДСПоДокументу = Перечисления.СтавкиНДС.НДС20_120; // Исходный ошибочный код 1С
СтавкаНДСПоДокументу = Перечисления.СтавкиНДС.БезНДС; // Наш временный "костыль" для исправления ситуации

ВыборкаСтавкиНДС = РезультатЗапроса[4].Выбрать();
Если ВыборкаСтавкиНДС.Следующий() Тогда
    Если ЗначениеЗаполнено(ВыборкаСтавкиНДС.СтавкаНДС) Тогда
        СтавкаНДСПоДокументу = ВыборкаСтавкиНДС.СтавкаНДС;
    КонецЕсли;
КонецЕсли;

Если в выборке запроса значение ставки оказывается пустым (например, для платежей, не привязанных напрямую к товарной спецификации), переменная СтавкаНДСПоДокументу сохраняет свое первоначальное значение. В ошибочном коде это было 20%, что приводило к неверному налогу на чеке. Для исправления этой проблемы установите официальный патч 1С EF_00_00272155 или внесите соответствующие корректировки в модуль через расширение конфигурации.

Причина 2. Распределение оплаты на авансы и излишки

Выясним, почему ставка НДС может оказаться незаполненной в самом документе оплаты, даже если в "Реализации товаров и услуг" (РТУ) жестко выставлено "Без НДС". Это часто связано с логикой проведения расчетов и распределения сумм:

  1. Если сумма по ПКО превышает сумму документа-основания (РТУ или Счета), программа автоматически разбивает платеж на две части.
  2. Часть суммы закрывает фактическую задолженность по накладной (со ставкой "Без НДС").
  3. Оставшаяся сумма (излишек) относится системой на "Аванс". Для авансовых платежей в структуре взаиморасчетов ставка НДС может остаться неопределенной, если в договоре или настройках параметров учета не заданы правила по умолчанию.
  4. При отправке данных на ККТ неопределенная ставка заменяется дефолтным значением конфигурации — 20%.

Чтобы избежать подобных ситуаций, всегда проверяйте структуру подчиненности документов по цепочке "Счет - Реализация - ПКО" и контролируйте, чтобы суммы оплат строго соответствовали суммам отгрузок без образования нераспределенных авансов.

Причина 3. Несовпадение кодов ставок НДС в 1С и драйвере ККТ АТОЛ

Если печать чеков выполняется с помощью внешней обработки, корень проблемы может скрываться в механизме трансляции ставок. Кассовый аппарат не принимает текстовые названия вроде "Без НДС". Вместо этого программа передает в драйвер ККТ цифровой код (индекс) налоговой ставки.

При обновлении прошивок ККТ АТОЛ (переход на платформу 5.0) и переходе на драйвер версии 10.х таблицы налогов изменились:

Если ваша внешняя обработка была написана под старый стандарт интеграции, она может по-прежнему отправлять в кассу код 1, рассчитывая получить "Без НДС". Однако новый драйвер АТОЛ обрабатывает этот код как команду начислить НДС 20%.

Разберем пример кода во внешней обработке, который осуществляет маппинг (сопоставление) ставок для ККТ:


// Пример некорректного сопоставления в старом стиле:
Если СтавкаНДС1С = Перечисления.СтавкиНДС.БезНДС Тогда
    НомерСтавкиДляККТ = 1; // Ошибка! В новых драйверах АТОЛ под этим кодом идет 20%
ИначеЕсли СтавкаНДС1С = Перечисления.СтавкиНДС.НДС20 Тогда
    НомерСтавкиДляККТ = 3;
КонецЕсли;

Для исправления необходимо переписать алгоритм сопоставления под требования актуальной версии используемого драйвера. Сверьте таблицы налогов в вашей кассе через "Тест драйвера ККТ" и пропишите корректные соответствия номеров ставок в обработке.

Причина 4. Некорректный XML-пакет и настройки драйвера по умолчанию

Когда внешняя обработка формирует XML-пакет для передачи в БПО (Библиотеку подключаемого оборудования), для каждой товарной позиции генерируется узел с указанием ставки. Посмотрим на структуру тегов:


<Position Name="Оплата по договору" Quantity="1" Price="1500" Amount="1500" Tax="none" />

Для корректного вывода ставки "Без НДС" атрибут Tax должен содержать строковое значение "none". Если обработка формирует XML-строку вручную и допускает ошибку (например, оставляет атрибут пустым, передает числовое значение 0 или некорректный идентификатор), драйвер ККТ не сможет распознать ставку. В этом случае касса применит ставку по умолчанию, прописанную в её собственной энергонезависимой памяти.

По умолчанию на заводах во все ККТ АТОЛ записывается резервная ставка "НДС 20%". Мы можем изменить это поведение непосредственно в аппаратных настройках кассы. Разберем этот процесс по шагам:

  1. Закройте программу 1С, чтобы освободить порт подключения к кассе.
  2. Запустите утилиту "Тест драйвера ККТ" (версии 10.х).
  3. Установите флаг "Включено" в правом верхнем углу для связи с аппаратом.
  4. Перейдите в раздел "Свойства" -> кнопка "Параметры ККТ".
  5. В открывшемся дереве настроек найдите раздел "Чек" или "Основные".
  6. Найдите строку "Ставка НДС по умолчанию" (Default tax rate).
  7. Измените значение с "НДС 20%" на "Без НДС" (или соответствующий аналог без налога).
  8. Нажмите кнопку "Сохранить" (Записать) и закройте утилиту тестирования.

После этого, даже если внешняя обработка 1С передаст в ККТ некорректный или пустой XML-код налога, кассовый аппарат подставит внутреннюю настройку по умолчанию и успешно напечатает в чеке "Без НДС".

Причина 5. Неверная Система Налогообложения (СНО) в чеке

Напоследок проанализируем еще один нюанс. Если организация перешла с ОСН на УСН, ККТ должна быть перерегистрирована под новую систему налогообложения. Но помимо этого, код СНО должен передаваться в каждом чеке из 1С. В XML-пакете за это отвечает тег TaxVariant (или TaxSystem):

<Receipt TaxVariant="1" ... >

Если внешняя обработка жестко передает код 0 (Общая СНО), касса может автоматически принудительно пересчитывать налог позиций под 20%, игнорируя указанную ставку "Без НДС". Убедитесь, что ваша внешняя обработка динамически определяет систему налогообложения организации и передает корректный код (например, 1 для УСН "Доход" или 2 для УСН "Доход-Расход") в формируемый XML-пакет. Если чеки уже были ошибочно пробиты, для их исправления в УТ 11.5 подойдёт обработка для массовой корректировки кассовых чеков.

← На главную