Почему в 1С:УТ 10.3 в чеке печатается НДС 20% вместо «Без НДС» и как это исправить?

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

При обновлении конфигурации 1С:Управление торговлей 10.3 и переходе на современную платформу 5.0 от компании АТОЛ многие пользователи сталкиваются с неприятной ситуацией. Несмотря на то, что организация находится на специальном режиме налогообложения (ПСН или ЕНВД) и в настройках учетной политики четко указано «не является плательщиком НДС», в фискальном чеке упорно печатается «НДС 20%». Примечательно, что эта ошибка часто проявляется только в режиме РМК (Интерфейс кассира), в то время как при пробитии чека из полного интерфейса все работает корректно.

В данной статье мы подробно разберем, почему это происходит, проанализируем программный код и найдем способ исправления этой ошибки, чтобы вернуть в чеки законное значение «Без НДС».

Анализируем причину возникновения ошибки

Переход на платформу АТОЛ 5.0 и использование драйверов 10-й версии изменили механизм взаимодействия программы 1С с кассовым аппаратом. Теперь касса более строго требует передачи корректных признаков налогообложения для каждой позиции. Если 1С не передает информацию о налоговой ставке в явном виде или передает ее некорректно, драйвер или сама ККТ могут подставить ставку по умолчанию, которой обычно является НДС 20%.

Проанализируем ситуацию: почему в полном интерфейсе данные передаются верно, а в РМК — нет? Очевидно, что проблема кроется в процедурах формирования структуры данных для фискализации чека. Программа «теряет» информацию об учетной политике организации именно в момент работы кассира.

Шаг 1: Проверка общих модулей формирования ставки НДС

Для начала рассмотрим, как 1С:УТ 10.3 пытается определить ставку НДС для передачи в драйвер. Основная логика сосредоточена в общих модулях. Найдем функцию ПолучитьСтавкуНДСДляФискализацииЧека в модуле МенеджерОборудованияКлиентСервер. Рассмотрим пример кода, который отвечает за сопоставление внутренних ставок 1С и значений для кассы:


Функция ПолучитьСтавкуНДСДляФискализацииЧека(СтавкаНДС, ПорядокНалогообложения = "") Экспорт
    Если СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.БезНДС") 
        ИЛИ СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.ПустаяСсылка") 
        ИЛИ ВРег(ПорядокНалогообложения) = "ЕНВД" 
        ИЛИ ВРег(ПорядокНалогообложения) = "ПСН" Тогда
        Результат = ""; // Для передачи "Без НДС"
    ИначеЕсли СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.НДС10") Тогда
        Результат = 10;
    ИначеЕсли СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.НДС20") Тогда
        Результат = 20;
    // ... другие варианты ставок
    КонецЕсли;
    Возврат Результат;
КонецФункции

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

Шаг 2: Поиск «потерянных» данных в интерфейсе РМК

Разберем, откуда вызываются процедуры фискализации в режиме РМК. Нам необходимо заглянуть в модуль формы регистрации продаж (обработка РМК или форма документа ЧекККМ). Выясним причину, по которой ПорядокНалогообложения оказывается не заполнен.

В процессе отладки можно заметить, что в типовом коде при работе через РМК вызывается функция СтавкаНДСФискальнойОперации из общего модуля РозничныеПродажиКлиентСервер. Посмотрим на ее структуру:


Функция СтавкаНДСФискальнойОперации(СтавкаНДС, ПрименяютсяРасчетныеСтавки = Ложь) Экспорт
    Если СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.БезНДС") 
        ИЛИ СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.ПустаяСсылка") Тогда
        Возврат Неопределено;
    ИначеЕсли СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.НДС20_120") И ПрименяютсяРасчетныеСтавки Тогда
        Возврат Неопределено;
    Иначе
        Возврат ЭлектронныеДокументыПереопределяемый.ПолучитьСтавкуНДСЧислом(СтавкаНДС);
    КонецЕсли;
КонецФункции

Проблема заключается в том, что в режиме РМК программа обращается к этой функции, не учитывая текущую систему налогообложения документа. Она просто берет ставку из карточки товара. Если у товара стоит 20%, а мы на Патенте, касса получит команду печатать 20%.

Шаг 3: Исправление кода фискализации в форме РМК

Чтобы решить проблему, необходимо восстановить передачу дополнительных данных (учетной политики) в процедуру фискализации. Рассмотрим исправление в документе ЧекККМ, в форме ФормаРегистрацииПродаж. Нам нужно найти функцию ФискализироватьЧекВФорме.

В оригинальном (ошибочном) коде вызов формирования параметров чека выглядит так:


// Ошибочный вариант:
ПараметрыЧека = ПараметрыОперацииФискализацииЧека(ВерсияФФД, ФУ, ПараметрыКассыККМ, ПараметрыККТ);

Здесь отсутствует важный аргумент — ДопДанные. Именно в этой переменной содержатся сведения о системе налогообложения и настройках НДС организации. Для исправления ситуации необходимо добавить этот параметр в вызов функции:


// Исправленный вариант:
ПараметрыЧека = ПараметрыОперацииФискализацииЧека(ВерсияФФД, ФУ, ПараметрыКассыККМ, ПараметрыККТ, ДопДанные);

Почему это важно? Когда мы передаем ДопДанные, функция ПараметрыОперацииФискализацииЧека получает доступ к контексту документа и настройкам организации. Это позволяет системе правильно идентифицировать режим «Патент» и применить условие, при котором любая ставка товара будет заменена на «Без НДС» перед отправкой команды на кассовый аппарат.

Дополнительные рекомендации по настройке драйвера

Если после внесения изменений в код проблема сохраняется, проанализируем настройки самого драйвера АТОЛ 10. Иногда в ККТ жестко задана система налогообложения «по умолчанию», которая перекрывает данные из 1С, если они переданы не по стандарту ФФД 1.05/1.2.

  1. Откроем «Тест драйвера ККТ» (версия 10.х).
  2. Перейдем в раздел «Свойства» -> «Параметры ККТ».
  3. Найдем пункт «15 Налоги».
  4. Проверим настройку «СНО по умолчанию». Если ваша деятельность ведется исключительно на Патенте, можно попробовать установить здесь значение «Патентная СН». Это послужит страховкой, если учетная программа вдруг снова не передаст СНО.
  5. Также убедимся, что в таблице налогов индексы соответствуют ожиданиям 1С (обычно индекс 6 соответствует «Без НДС»).

Проанализировав лог-файл драйвера (fptr10.log), мы можем окончательно убедиться, что исправление сработало. Ищем строку taxVariant в логе: для Патента значение должно соответствовать 32. Если передается 1 — это общая система, и касса будет требовать НДС.

Таким образом, восстановив передачу параметра ДопДанные в модуле формы РМК, мы полностью устраняем программную ошибку и обеспечиваем корректную печать чеков в соответствии с законодательством.

← На главную