Как настроить корректное отображение НДС в чеке ККТ в 1С:Управление торговлей 10.3

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

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

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

Анализ программной установки ставки НДС в чеке

Первым делом рассмотрим, где именно в коде формируются данные для чека. В типовой УТ 10.3 за это отвечает модуль обработки обслуживания или общие модули интеграции с БПО. Основная точка входа для подготовки данных — процедура ПодготовитьДанныеДляФискализацииЧека. Выясним, как принудительно установить нужную систему налогообложения (СНО) и ставку НДС.

Часто автоматическое определение СНО из учетной политики срабатывает некорректно. Чтобы гарантированно передать ОСН, мы можем модифицировать структуру параметров:


// Принудительная установка ОСН для чека
ОбщиеПараметры.СистемаНалогообложения = ПредопределенноеЗначение("Перечисление.ТипыСистемНалогообложенияККТ.ОСН");

Далее проанализируем заполнение строк чека. Если данные из номенклатуры подтягиваются неверно, мы можем переопределить ставку непосредственно в цикле формирования товарных позиций. Рассмотрим пример кода:


Для Каждого СтрокаТовара Из ЧекККМ.Товары Цикл
    СтрокаЧека = НоваяСтруктура("Наименование, Количество, Цена, Сумма, СтавкаНДС, НомерСекции");
    СтрокаЧека.Наименование = СтрокаТовара.Номенклатура.Наименование;
    СтрокаЧека.Количество   = СтрокаТовара.Количество;
    СтрокаЧека.Цена         = СтрокаТовара.Цена;
    СтрокаЧека.Сумма        = СтрокаТовара.Сумма;
    
    // Явное указание ставки НДС 18% (или 20% для актуальных релизов)
    СтрокаЧека.СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.НДС18");
    
    // Номер секции также может влиять на налоги в старых моделях ККТ
    СтрокаЧека.НомерСекции = 1; 
    
    ОбщиеПараметры.ПозицииЧека.Добавить(СтрокаЧека);
КонецЦикла;

Исследование формирования XML-пакета (Тег Tax)

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

Найдем фрагмент кода, где выполняется запись атрибута Tax. Проанализируем логику:


Если НЕ ПустаяСтрока(ТекущаяПозиция.СтавкаНДС) Тогда 
    Если ТекущаяПозиция.СтавкаНДС = 118 ИЛИ ТекущаяПозиция.СтавкаНДС = "18/118" Тогда
        ЗначениеСтавкаНДС = "18"; // Или "18/118" в зависимости от требований драйвера
    ИначеЕсли ТекущаяПозиция.СтавкаНДС = 110 Тогда
        ЗначениеСтавкаНДС = "10";
    Иначе
        ЗначениеСтавкаНДС = ТекущаяПозиция.СтавкаНДС;
    КонецЕсли;
Иначе
    ЗначениеСтавкаНДС = "none";
КонецЕсли;

ЗаписьXML.ЗаписатьАтрибут("Tax", XMLСтрока(ЗначениеСтавкаНДС));

Важный момент: драйверы разных производителей (АТОЛ, Штрих-М) по-разному интерпретируют значение атрибута Tax. Для некоторых версий БПО значение должно быть строковым идентификатором (например, vat18), для других — числовым индексом из таблицы налогов ККТ. Если передать «18%» вместо «18», касса может сбросить налог в значение по умолчанию.

Проблема «Сумма налога больше допустимой»

Рассмотрим ситуацию, когда при явном указании суммы НДС касса выдает ошибку. Это происходит из-за расхождений в алгоритмах округления 1С и прошивки ККТ. Выясним причину:

  1. 1С рассчитывает НДС: Окр(Сумма * 18 / 118, 2).
  2. Касса получает цену, количество и ставку, после чего делает свой внутренний расчет.
  3. Если результат 1С отличается от результата кассы хотя бы на 1 копейку, фискальный накопитель блокирует операцию.

Решение: В современных протоколах ФФД (1.05 и выше) рекомендуется передавать только ставку налога, не передавая рассчитанную сумму в каждую строку, если драйвер позволяет это сделать. В этом случае касса сама рассчитает итоговый налог, и математического конфликта не возникнет.

Взаимодействие с драйверами ККТ

Проанализируем влияние версии драйвера на результат. Использование 8-й версии драйвера АТОЛ с новыми прошивками под ФФД 1.05 часто приводит к тому, что налоги не передаются корректно через XML-интерфейс 1С. Рассмотрим рекомендации по обновлению:

Настройка таблиц налогов в самой кассе

Иногда корень проблемы лежит вне кода 1С. Рассмотрим внутренние настройки ККТ. У каждой кассы есть внутренняя Таблица налогов. Если в 1С мы передаем «Налог №1», а в кассе в первой строке таблицы запрограммировано «Без НДС», то в чеке мы увидим отсутствие налога.

Посмотрим, как это проверить:

  1. Запустите «Тест драйвера ККТ».
  2. Перейдите в раздел «Программирование» или «Таблицы».
  3. Найдите таблицу ставок налога и убедитесь, что индексы (1, 2, 3...) соответствуют тем значениям, которые ожидает 1С (обычно 1 — 20%, 2 — 10%, 3 — 0%, 4 — без НДС).

Если вы внесли изменения в код и настройки, но НДС все равно 0%, проанализируйте лог драйвера ККТ. Там можно увидеть «чистый» XML-пакет, который уходит из 1С. Если в теге Tax стоит правильное значение, значит, проблему нужно искать исключительно в настройках самой кассы или в совместимости версии драйвера с ФФД.

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

← На главную