Как исправить ошибку «Некорректная сумма налога» при печати чека из 1С?

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

В процессе работы с конфигурацией 1С:Управление торговлей 11 (начиная с релизов 11.4.13.xxx) многие пользователи сталкиваются с критической ошибкой при попытке пробития чека из документа Реализация товаров и услуг. Ошибка сопровождается сообщением: «При выполнении операции произошла ошибка: Некорректная сумма налога. Чек не напечатан на фискальном устройстве» — есть фискализация и обработка ошибок для ФФД 1.2. Чаще всего это происходит на оборудовании Атол (например, 11Ф) с использованием драйверов версии 10.x.

В данной статье мы подробно разберем, почему возникает эта ситуация, как найти проблемное место в программном коде и какие настройки драйвера ККТ помогут обойти это ограничение без радикальных мер вроде разбиения документа на части. Решить проблему поможет исправление ошибок формирования итогового чека ККМ.

Причины возникновения ошибки

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

При умножении округленной цены на количество товара итоговая сумма строки может не совпасть с той суммой, которую 1С передает как «Итого по позиции». Если разница составляет хотя бы одну копейку, кассовый аппарат блокирует операцию, считая сумму налога некорректной (поможет универсальная обработка обслуживания онлайн-касс с ФФД 1.2). Особенно остро это проявляется при использовании ФФД 1.2, где требования к форматно-логическому контролю стали значительно жестче.

Анализ программного кода 1С

Для того чтобы понять, как 1С формирует данные для отправки на кассу, нам необходимо заглянуть в конфигуратор. Основная логика подготовки XML-пакета для фискализации сосредоточена в общем модуле МенеджерОборудованияВызовСервера. Именно там находится функция СформироватьXMLПакетДляФискализацияЧека.

Рассмотрим фрагмент кода, который отвечает за расчет цены с учетом скидок и формирование XML-атрибутов позиции:


Если ТекущаяПозиция.ЦенаСоСкидками = 0 И ТекущаяПозиция.Сумма > 0 И ТекущаяПозиция.Количество > 0 Тогда
    ЦенаСоСкидками = Окр(ТекущаяПозиция.Сумма / ТекущаяПозиция.Количество, 2);
Иначе
    ЦенаСоСкидками = ТекущаяПозиция.ЦенаСоСкидками;
КонецЕсли;

ЗаписьXML.ЗаписатьНачалоЭлемента("FiscalString");
ЗаписьXML.ЗаписатьАтрибут("Name", XMLСтрока(ТекущаяПозиция.Наименование));
ЗаписьXML.ЗаписатьАтрибут("Quantity", XMLСтрока(ТекущаяПозиция.Количество));
ЗаписьXML.ЗаписатьАтрибут("PriceWithDiscount", XMLСтрока(ЦенаСоСкидками));
ЗаписьXML.ЗаписатьАтрибут("AmountWithDiscount", XMLСтрока(ТекущаяПозиция.Сумма));
ЗаписьXML.ЗаписатьАтрибут("DiscountAmount", XMLСтрока(ТекущаяПозиция.СуммаСкидок));
КонецЦикла;

Обратим внимание на строку ЦенаСоСкидками = Окр(ТекущаяПозиция.Сумма / ТекущаяПозиция.Количество, 2);. Здесь происходит жесткое округление цены до копеек. Если мы умножим полученную ЦенаСоСкидками на ТекущаяПозиция.Количество, результат может не равняться ТекущаяПозиция.Сумма. Касса получает эти данные, пытается перепроверить расчет налога и выдает ошибку.

Решение через настройки драйвера ККТ Атол

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

  1. Запустите утилиту «Тест драйвера ККТ» (обычно это версия 10.x) — для этого подойдёт настройка онлайн-касс АТОЛ и ШТРИХ под ФФД 1.2.
  2. Перейдите в раздел «Свойства» и установите связь с вашей кассой.
  3. Нажмите кнопку «Параметры ККТ».
  4. Найдите раздел «15 Налоги» (в разных версиях прошивок номер раздела может незначительно отличаться).
  5. Найдите параметр «Округлять сумму налога» и установите значение «После каждой позиции» (вместо «На весь чек» или иных вариантов).
  6. Также проверьте параметр «Расчет налога из суммы позиции». Если этот флаг установлен, касса будет приоритетно брать готовую сумму налога, переданную из 1С, а не вычислять ее самостоятельно на основе цены и количества.

Эти манипуляции позволяют кассе более «лояльно» относиться к копеечным расхождениям, возникающим из-за округлений в учетной системе.

Настройка форматно-логического контроля в 1С

Если манипуляции с драйвером не помогли, проанализируем настройки внутри самой 1С. В интерфейсе программы перейдем в раздел «НСИ и администрирование» -> «РМК и оборудование» -> «Подключаемое оборудование».

Откроем настройки нашей кассы ККМ и обратим внимание на следующие параметры:

Использование расширения для обхода проверки

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

В расширении следует реализовать алгоритм «распределения копеек». Если Цена * Количество != Сумма, мы должны программно разделить строку на две. Рассмотрим логику на примере:

Допустим, продается 3 единицы товара на общую сумму 100 рублей со скидкой. Цена за единицу получается 33.3333... При округлении до 33.33 сумма за 3 штуки составит 99.99. Разница в 1 копейку и вызывает ошибку. В расширении мы можем сформировать XML так, чтобы передать 2 единицы по 33.33 и 1 единицу по 33.34. В сумме получится ровно 100.00, и касса примет такой чек без возражений.

Дополнительные проверки

Если ошибка сохраняется, проанализируем следующие моменты:

  1. Версия прошивки: Для Атол 11Ф крайне желательно иметь прошивку платформы 5.0 (версии 5.8.x и выше). Старые прошивки платформы 2.5 часто некорректно обрабатывают налоговые ставки, передаваемые драйвером 10-й серии.
  2. Ставки НДС в кассе: Зайдите в «Тест драйвера» -> «Параметры ККТ» -> «Налоги» и убедитесь, что порядковые номера налоговых ставок (индексы) соответствуют тем, что настроены в 1С. Например, НДС 20% в кассе должен быть именно под тем индексом, который ожидает программа (обычно это индекс 1).
  3. Региональные настройки: Проверьте формат разделителя дробной части в Windows (точка или запятая). Иногда драйвер некорректно парсит XML, если системный разделитель отличается от ожидаемого, что приводит к нулевым суммам налогов в пакете данных.

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

← На главную