Как исправить ошибку, когда ККТ-онлайн печатает чеки только со ставкой «Без НДС» в 1С?

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

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

Анализ причин возникновения проблемы на стыке 1С и ККТ

Для начала давайте разберемся, как вообще происходит общение программы 1С с кассовым аппаратом. В современных версиях интеграции 1С не отправляет напрямую текстовое название ставки или произвольные числа. Вместо этого программа формирует специальный XML-пакет (так называемый XML-пакет фискализации), который передается драйверу ККТ. Драйвер, в свою очередь, парсит этот пакет и переводит его во внутренние команды кассового аппарата.

Согласно форматам фискальных документов (ФФД 1.05 и ФФД 1.2), для каждой товарной позиции в чеке должен передаваться определенный налоговый признак. В XML-пакете за это отвечает атрибут Tax (в некоторых версиях БПО — VATRate). Этот параметр должен принимать строго стандартизированные строковые значения:

Если в формируемом XML-пакете данный атрибут отсутствует вовсе, передается с некорректным типом данных (например, передается ссылка на перечисление 1С ПеречислениеСсылка.СтавкиНДС вместо текстовой строки) или содержит пустое значение, драйвер ККТ АТОЛ по умолчанию считает, что товар продается без налога. В результате на чеке печатается «Без НДС», а в ОФД уходят неверные данные.

Шаг 1: Диагностика проблемы с помощью эмулятора и тест-драйвера

Прежде чем вносить изменения в программный код, выясним точную причину сбоя. Для этого проведем диагностику по шагам:

  1. Проверка через эмулятор ККТ. Перейдем в настройки подключаемого оборудования в 1С и временно подключим встроенный эмулятор фискального регистратора. Попробуем пробить тестовый чек. Если на эмуляторе НДС рассчитывается и выводится корректно, значит, сама учетная система 1С видит ставки НДС в документе, но проблема возникает именно в момент передачи данных на физическое устройство или драйвер АТОЛ.
  2. Анализ чека в личном кабинете ОФД. Посмотрим на отправленный чек в ОФД. Если там также значится «Сумма без НДС», это подтверждает, что касса физически не получает информацию о ставке от 1С.
  3. Сопоставление таблиц налогов в ККТ. ККТ АТОЛ имеет внутреннюю таблицу налогов (обычно Таблица №6), где каждому типу налога соответствует определенный индекс (код). В старых прошивках и драйверах порядок ставок отличался. Например, ставка «Без НДС» могла соответствовать коду 4, а НДС 18% — коду 1. Если учетная система пытается управлять ККТ старым методом (напрямую передавая номер налоговой секции через свойство драйвера TaxTypeNumber), возникает путаница. Касса получает код, который в ее новой прошивке означает «Без НДС», и печатает его. Поэтому использование XML-пакетов через БПО является более надежным методом.

Шаг 2: Программное исправление XML-пакета в 1С

Выяснив причину, перейдем к исправлению кода. В старых конфигурациях, таких как «Управление торговлей 10.3», за подготовку данных для чека отвечает модуль документа ЧекККМ или общий модуль интеграции. Наша задача — найти, где формируется XML-пакет, и убедиться, что атрибут Tax корректно записывается для каждой строки товара.

Рассмотрим подробнее этот процесс. Откроем конфигуратор 1С и найдем общий модуль МенеджерОборудованияВызовСервера (в зависимости от релиза БПО это также может быть модуль МенеджерОборудованияКлиентСервер). Найдем функцию, отвечающую за генерацию XML-пакета (например, СформироватьXMLПакетДляФискализацииЧека).

Проанализируем цикл, в котором происходит обход строк табличной части документа и запись XML. Нам необходимо принудительно передавать строковое представление ставки НДС в атрибут Tax. Разберем по шагам, какой код нам необходимо добавить или изменить:


// В цикле формирования позиций чека (XML-пакета)
// Проверяем ставку НДС текущей строки чека и сопоставляем ее со строковым форматом ККТ
СтавкаНДСЧислом = "";
Если ЗначениеЗаполнено(ТекСтрока.СтавкаНДС) Тогда
    // Преобразуем ставку из перечисления 1С в строковый формат для кассы
    Если ТекСтрока.СтавкаНДС = Перечисления.СтавкиНДС.НДС20 
        Или ТекСтрока.СтавкаНДС = Перечисления.СтавкиНДС.НДС18 Тогда
        СтавкаНДСЧислом = "20"; // Передаем актуальную ставку для ККТ
    ИначеЕсли ТекСтрока.СтавкаНДС = Перечисления.СтавкиНДС.НДС10 Тогда
        СтавкаНДСЧислом = "10";
    ИначеЕсли ТекСтрока.СтавкаНДС = Перечисления.СтавкиНДС.НДС0 Тогда
        СтавкаНДСЧислом = "0";
    ИначеЕсли ТекСтрока.СтавкаНДС = Перечисления.СтавкиНДС.НДС20_120 
        Или ТекСтрока.СтавкаНДС = Перечисления.СтавкиНДС.НДС18_118 Тогда
        СтавкаНДСЧислом = "20/120";
    Иначе
        СтавкаНДСЧислом = "none";
    КонецЕсли;
Иначе
    СтавкаНДСЧислом = "none";
КонецЕсли;

// Записываем атрибут Tax в структуру XML товарной позиции
ЗаписьXML.ЗаписатьАтрибут("Tax", СтавкаНДСЧислом);

Внедрение этого кода гарантирует, что драйвер ККТ получит четкую строковую команду (например, Tax="20"), которую он сможет однозначно сопоставить со своей внутренней таблицей налогов и распечатать правильный НДС на чеке.

Шаг 3: Настройка параметров пользователя и обновление драйверов

Если после изменения кода касса все еще продолжает печатать «Без НДС», необходимо проверить сопутствующие настройки в самой базе и на стороне операционной системы:

  1. Права и настройки пользователя в 1С. В некоторых конфигурациях (особенно в «Управлении торговлей 10.3») существует настройка пользователя «Печатать НДС в чеках ККМ». Если эта галочка снята в настройках дополнительных прав пользователя, программа будет автоматически подменять все ставки на «none» перед отправкой XML драйверу. Обязательно проверьте наличие этой настройки для текущего кассира.
  2. Обновление драйвера АТОЛ. Устаревшие версии драйверов (например, ранние версии 8.х или 9.х) могут некорректно обрабатывать XML-пакеты новых форматов ФФД. Рекомендуется установить актуальную версию драйвера АТОЛ ДТО 10 и обновить соответствующую интеграционную компоненту в справочнике «Драйверы оборудования» внутри 1С.
  3. Прошивка кассового аппарата. Убедитесь, что прошивка вашего ККТ АТОЛ поддерживает текущие требования законодательства. Старая прошивка может не знать о ставке 20% (воспринимая ее как ошибочную) и автоматически заменять ее на ставку по умолчанию («Без НДС»).

Рекомендации по отладке и тестированию

Для того чтобы быстро диагностировать подобные проблемы в будущем, мы рекомендуем использовать лог-файлы драйвера ККТ АТОЛ. В файле лога (обычно fptr10.log для десятой версии драйвера) записываются все входящие XML-пакеты, которые приходят из 1С.

Откройте этот лог-файл во время печати чека и найдите блок данных, отправленный системой 1С. Найдите в нем тег товарной позиции (например, <Item...) и посмотрите, присутствует ли там атрибут Tax или VATRate. Если атрибут равен "none" или отсутствует вовсе, проблему нужно решать в коде 1С. Если же в логе зафиксирована передача Tax="20", но на чеке все равно печатается «Без НДС» — проблема на стороне ККТ (требуется настройка таблиц налогов или обновление прошивки).

← На главную