При оформлении фискальных документов (например, Приходных кассовых ордеров или Эквайринговых операций) в устаревших или сильно кастомизированных конфигурациях 1С (таких как 1С:Управление производственным предприятием 1.3, 1С:Управление торговлей 10.3 или 1С:Комплексная автоматизация 1.1) пользователи часто сталкиваются с аппаратной ошибкой ККТ: «Сумма налога больше суммы регистраций по чеку и/или итога» (код ошибки драйвера -3969). При этом в логах драйвера ККТ АТОЛ видно, что вместо ставки НДС 20% на кассу уходит признак «Без НДС».
В этой статье мы подробно разберем природу данной ошибки, рассмотрим логику взаимодействия платформы 1С с драйверами АТОЛ различных версий и предоставим пошаговые инструкции по решению этой технической проблемы.
---
Для начала выясним причину возникновения ошибки «Сумма налога больше суммы регистраций...». Когда 1С формирует XML-пакет для передачи на фискальный регистратор, она производит расчеты на своей стороне. Если в конфигурации не обновлены механизмы работы с торговым оборудованием, функция сопоставления ставок НДС не находит соответствия для значения НДС 20% или НДС 20/120. В результате в драйвер ККТ передается пустое значение или признак «Без НДС».
Однако при этом 1С продолжает вычислять и отправлять в XML саму физическую сумму налога, рассчитанную по ставке 20% в документе. Фискальный накопитель (ФН) получает некорректную команду: зарегистрировать продажу без налога, но принудительно начислить на нее сумму НДС. Так как для безналоговых операций лимит начисления налога строго равен нулю, ФН блокирует операцию и возвращает ошибку.
Ситуация осложняется тем, как именно АТОЛ реализовал переход на НДС 20% в своих драйверах:
1 соответствовал ставке 18% (которая затем на уровне прошивки была переназначена под 20%), а код 5 — расчетной ставке 18/118 (заменена на 20/120). Поэтому передача значения "20" напрямую могла вызывать сбой, и требовалось передавать старые коды "18" и "118".1 жестко закреплен за НДС 20%, индекс 2 — за НДС 10%, 3 — за НДС 20/120, 4 — за НДС 10/110, 5 — за НДС 0%, а 6 — за «Без НДС».---
Если вы используете нетиповую конфигурацию, которую нельзя или нежелательно полностью обновлять, нам потребуется самостоятельно внести изменения в общий модуль, отвечающий за фискализацию чека. Разберем этот процесс по шагам.
Шаг 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
---
Если ваша инфраструктура завязана на 9-ю версию драйвера АТОЛ (например, АТОЛ 9.12.4) и при передаче верных данных из 1С на чеке все равно печатается «Без НДС», проблема заключается в устаревшей интеграционной компоненте внутри обработки обслуживания. Выполним обновление компоненты вручную:
.epf.ИнтеграционнаяКомпонента.C:\Program Files (x86)\ATOL\Drivers9\KKT\1Cv83C:\Program Files\ATOL\Drivers9\KKT\1Cv83---
Рассмотрим наиболее надежный и современный вариант решения проблемы, который исключает ручную правку интеграционных компонент. Это переход на 10-ю версию драйверов АТОЛ.
Для успешной настройки связки выполним следующие действия:
---
Иногда даже после внесения всех необходимых изменений в код 1С и обновления драйверов касса продолжает выдавать ошибку -3969. Это связано с тем, что в энергонезависимой памяти ККТ зависают старые значения налоговых таблиц. Разберем, как исправить эту аппаратную проблему:
Шаг 1. Аппаратные Коды Защиты (КЗ). Убедитесь, что ККТ прошита под работу с НДС 20% (версия прошивки на платформе 2.5 должна быть не ниже 10-7629). Также проверьте, введен ли в кассу Код защиты №10. Без этого кода кассовый аппарат будет аппаратно игнорировать программные команды на печать НДС 20%.
Шаг 2. Технологическое обнуление. Для сброса зависших таблиц ставок:
---
Описанная уязвимость архитектуры функции ПолучитьСтавкуНДСДляФискализацииЧека в старых конфигурациях 1С снова становится критически важной из-за введения пониженных ставок НДС 5% и 7% для некоторых категорий налогоплательщиков.
Чтобы ваша система не заблокировала работу ККТ при переходе на новые ставки, рекомендуем заранее дополнить разобранную нами функцию ПолучитьСтавкуНДСДляФискализацииЧека поддержкой новых значений:
// Шаблон расширения функции для новых ставок НДС 5% и 7%
ИначеЕсли СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.НДС5") Тогда
Результат = 5;
ИначеЕсли СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.НДС7") Тогда
Результат = 7;
ИначеЕсли СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.НДС5_105") Тогда
Результат = 105;
ИначеЕсли СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.НДС7_107") Тогда
Результат = 107;
При этом сам кассовый аппарат АТОЛ должен быть переведен на платформу 5.0 (версия прошивки не ниже 5.15.0), а драйвер ДТО на компьютерах пользователей должен быть обновлен до версии не ниже 10.10.6.0. Это гарантирует бесперебойную фискализацию любых типов операций в вашей учетной системе.