Как исправить ошибку «Сумма налога больше суммы регистраций...» при печати чеков с НДС 20% из 1С на ККТ АТОЛ?

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

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

В этой статье мы подробно разберем природу данной ошибки, рассмотрим логику взаимодействия платформы 1С с драйверами АТОЛ различных версий и предоставим пошаговые инструкции по решению этой технической проблемы.

---

Физический смысл ошибки и маппинг налоговых ставок

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

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

Ситуация осложняется тем, как именно АТОЛ реализовал переход на НДС 20% в своих драйверах:

---

Решение 1. Модернизация программного кода 1С (для разработчиков)

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

Шаг 1. Откроем конфигурацию в режиме «Конфигуратор».

Шаг 2. Перейдем в общий модуль МенеджерОборудованияКлиентСервер.

Шаг 3. Найдем экспортную функцию ПолучитьСтавкуНДСДляФискализацииЧека.

Шаг 4. Проанализируем исходный код. Скорее всего, в нем полностью отсутствуют условия для ставок НДС 20% и 20/120. Перепишем функцию, добавив необходимую логику сопоставления.

Ниже представлен корректный вариант функции для систем, работающих со свежими драйверами (АТОЛ ДТО 10.х) и актуальными прошивками ККТ:


Функция ПолучитьСтавкуНДСДляФискализацииЧека(СтавкаНДС, ПорядокНалогообложения = "") Экспорт

    Если СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.БезНДС") 
       ИЛИ СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.ПустаяСсылка") 
       ИЛИ ВРег(ПорядокНалогообложения) = "ЕНВД" Тогда
        Результат = "";
    ИначеЕсли СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.НДС10") Тогда
        Результат = 10;
    ИначеЕсли СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.НДС18") Тогда
        Результат = 18;
    ИначеЕсли СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.НДС20") Тогда
        Результат = 20; // Добавлено условие для ставки 20%
    ИначеЕсли СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.НДС10_110") Тогда
        Результат = 110;
    ИначеЕсли СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.НДС18_118") Тогда
        Результат = 118;
    ИначеЕсли СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.НДС20_120") Тогда
        Результат = 120; // Добавлено условие для расчетной ставки 20/120
    КонецЕсли;

    Возврат Результат;

КонецФункции

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


// Альтернативный маппинг для старых версий драйверов АТОЛ
ИначеЕсли СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.НДС20") Тогда
    Результат = 18; // Передаем 18, касса напечатает 20
ИначеЕсли СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.НДС20_120") Тогда
    Результат = 118; // Передаем 118, касса напечатает 20/120

---

Решение 2. Обновление интеграционной компоненты в 1С (для АТОЛ 9.х)

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

  1. Откроем 1С в режиме Предприятия и выгрузим в файл внешнюю обработку обслуживания ККТ АТОЛ (версии 2.50 или 2.60) из справочника «Обработки обслуживания ТО».
  2. Запустим «Конфигуратор», выберем Файл -> Открыть и откроем выгруженную внешнюю обработку .epf.
  3. В дереве метаданных обработки перейдем в раздел Макеты и найдем макет с именем ИнтеграционнаяКомпонента.
  4. Заменим содержимое макета актуальным двоичным файлом из поставки драйвера АТОЛ. В зависимости от разрядности вашей платформы 1С, этот файл находится по пути:
    • Для 32-битной версии: C:\Program Files (x86)\ATOL\Drivers9\KKT\1Cv83
    • Для 64-битной версии: C:\Program Files\ATOL\Drivers9\KKT\1Cv83
  5. Сохраним внешнюю обработку обслуживания в конфигураторе и загрузим её обратно в информационную базу 1С.

---

Решение 3. Полный переход на ДТО АТОЛ 10.х

Рассмотрим наиболее надежный и современный вариант решения проблемы, который исключает ручную правку интеграционных компонент. Это переход на 10-ю версию драйверов АТОЛ.

Для успешной настройки связки выполним следующие действия:

  1. Установим на рабочий компьютер актуальный драйвер ККТ АТОЛ 10.х (например, версию 10.4.3 и выше).
  2. Обновим метаданные торгового оборудования в нашей конфигурации 1С. Для этого необходимо перенести модули работы с торговым оборудованием из актуального релиза конфигурации-донора (например, для УТ 10.3 переносим модули из релиза не ниже 10.3.50.1).
  3. Скачаем с сайта обновлений 1С самую свежую обработку обслуживания ККТ АТОЛ (рекомендуется версия 2.80 и выше).
  4. В настройках торгового оборудования в 1С выберем новую обработку обслуживания и укажем драйвер 10-й версии.
  5. Выполним тест устройства. При правильной настройке система автоматически определит корректные таблицы налоговых ставок.

---

Аппаратные требования и сброс таблиц ККТ

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

Шаг 1. Аппаратные Коды Защиты (КЗ). Убедитесь, что ККТ прошита под работу с НДС 20% (версия прошивки на платформе 2.5 должна быть не ниже 10-7629). Также проверьте, введен ли в кассу Код защиты №10. Без этого кода кассовый аппарат будет аппаратно игнорировать программные команды на печать НДС 20%.

Шаг 2. Технологическое обнуление. Для сброса зависших таблиц ставок:

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

---

Взгляд в будущее: Готовимся к НДС 5% и 7%

Описанная уязвимость архитектуры функции ПолучитьСтавкуНДСДляФискализацииЧека в старых конфигурациях 1С снова становится критически важной из-за введения пониженных ставок НДС 5% и 7% для некоторых категорий налогоплательщиков.

Чтобы ваша система не заблокировала работу ККТ при переходе на новые ставки, рекомендуем заранее дополнить разобранную нами функцию ПолучитьСтавкуНДСДляФискализацииЧека поддержкой новых значений:


// Шаблон расширения функции для новых ставок НДС 5% и 7%
ИначеЕсли СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.НДС5") Тогда
    Результат = 5;
ИначеЕсли СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.НДС7") Тогда
    Результат = 7;
ИначеЕсли СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.НДС5_105") Тогда
    Результат = 105;
ИначеЕсли СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.НДС7_107") Тогда
    Результат = 107;

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

← На главную