При обновлении прошивок фискальных регистраторов под новые требования законодательства (например, переход с ФФД 1.0 на ФФД 1.05 или 1.1) разработчики и системные администраторы часто сталкиваются со странным поведением кассовых аппаратов. Наиболее распространенный симптом — «съезжание» налоговых ставок в чеке. Вместо привычной ставки 18% (или 20%) на печать выводится расчетная ставка 10/110, либо вместо НДС 0% касса упрямо печатает НДС 10%.
В этой статье мы подробно разберем, почему возникает подобный сбой при работе из устаревших конфигураций на платформе 1С 7.7, проанализируем внутренние механизмы взаимодействия ККТ АТОЛ с драйвером торгового оборудования (ДТО) и найдем пошаговые пути решения этой проблемы.
Главная причина рассинхронизации налогов кроется в изменении внутренней структуры таблиц ККТ и логики работы драйверов АТОЛ при переходе на новые форматы фискальных документов.
В старых прошивках под ФФД 1.0 порядок налоговых ставок во внутренней памяти ККТ (Таблица 10 «Налоги») мог настраиваться произвольно. Каждая строка таблицы соответствовала определенному налогу, и разработчики настраивали эти строки под нужды конкретной организации.
С переходом на ФФД 1.05 и ФФД 1.1 производитель АТОЛ жестко стандартизировал индексы налоговых ставок для свойства TaxTypeNumber в ДТО 8. Они приобрели следующий фиксированный вид:
Когда кассу перепрошивают в сервисном центре, программисты ККТ иногда забывают выполнить критически важную процедуру — технологическое обнуление и инициализацию таблиц ККТ. В результате старая разметка налогов из памяти кассы накладывается на новые требования микрокода прошивки и драйвера. Передача из 1С параметра TaxTypeNumber = 1 (который по новой спецификации должен отвечать за НДС 0%) заставляет кассу печатать НДС 10% или 18/118, поскольку индексы во внутренней памяти устройства смещены.
Проанализируем действия, которые необходимо выполнить со стороны самой онлайн-кассы. Если программный код в 1С 7.7 не менялся, но после прошивки ставки стали выводиться некорректно, проблему следует решать на уровне железа и таблиц.
Рекомендуется обратиться в сервисный центр или самостоятельно через утилиту «Тест драйвера ККТ» выполнить следующие шаги:
В процессе обсуждения проблемы на форуме было замечено, что использование старых версий драйверов (например, ДТО 8.12) приводит к некорректной интерпретации команд на новых прошивках. Переход на версию драйвера АТОЛ 8.16 мгновенно решает проблему некорректной печати налогов (например, ставка 0% снова начинает печататься правильно без изменения кода в 1С).
Поэтому обязательно выполните обновление локального драйвера на рабочем месте кассира:
FPrnM8.dll или аналогичная регистрируется автоматически при установке драйвера).Рассмотрим, как правильно передавать информацию о налогах непосредственно из кода 1С 7.7. В зависимости от выбранной стратегии интеграции, у нас есть два пути программирования взаимодействия с драйвером.
Вариант А. Прямое указание свойства TaxTypeNumber
В коде обработки обслуживания чеков (обычно это внешняя обработка ККТ, например, frATOL54_comm.ert) найдем фрагмент кода, отвечающий за регистрацию позиции товара. Мы должны явно сопоставить ставку НДС из справочника 1С с жестко заданными индексами драйвера АТОЛ 8.16 под ФФД 1.1.
Разберем пример реализации такого кода:
// Создаем объект драйвера ККТ АТОЛ
Попытка
СоздатьОбъект("AddIn.FPrnM45");
Исключение
Предупреждение("Не удалось загрузить драйвер ККТ!");
Возврат;
КонецПопытки;
// При регистрации позиции товара устанавливаем налог:
СтавкаНДС = СокрЛП(ТаблицаТоваров.Номенклатура.СтавкаНДС.Получить(ДатаОперации));
Если (СтавкаНДС = "18%") Или (СтавкаНДС = "20%") Тогда
// Индекс 3 жестко привязан к ставке 18% (20% на новых прошивках)
Объект.TaxTypeNumber = 3;
ИначеЕсли СтавкаНДС = "10%" Тогда
// Индекс 2 привязан к ставке 10%
Объект.TaxTypeNumber = 2;
ИначеЕсли (СтавкаНДС = "0%") Или (СтавкаНДС = "0") Тогда
// Индекс 1 отвечает за ставку 0%
Объект.TaxTypeNumber = 1;
Иначе
// Индекс 4 используется для позиций "Без НДС"
Объект.TaxTypeNumber = 4;
КонецЕсли;
// Передаем команду регистрации позиции
Объект.Name = ТаблицаТоваров.ТоварНаименование;
Объект.Price = ТаблицаТоваров.Цена;
Объект.Quantity = ТаблицаТоваров.Количество;
Объект.Department = 1; // Указываем секцию по умолчанию
Объект.Registration();
Вариант Б. Печать налогов через привязку к отделам (метод Department)
Если прямое управление свойством TaxTypeNumber по каким-то причинам сбоит (например, особенности прошивки конкретного аппарата не позволяют корректно сопоставить индексы), мы можем использовать обходной путь через секции (отделы) ККТ.
Для этого в параметрах ККТ через тест драйвера предварительно настраивается жесткая привязка налогов к секциям:
После этого в коде 1С 7.7 мы указываем кассе брать налог из параметров секции, передавая TaxTypeNumber = 0, и динамически меняем номер отдела Department:
// Альтернативный метод распределения налога через секции ККТ
Объект.TaxTypeNumber = 0; // Налог определяется настройками секции в кассе
Если (СтавкаНДС = "18%") Или (СтавкаНДС = "20%") Тогда
Объект.Department = 1; // Направляем в Секцию 1 (НДС 20%)
ИначеЕсли СтавкаНДС = "10%" Тогда
Объект.Department = 2; // Направляем в Секцию 2 (НДС 10%)
ИначеЕсли (СтавкаНДС = "0%") Тогда
Объект.Department = 3; // Направляем в Секцию 3 (НДС 0%)
Иначе
Объект.Department = 4; // Направляем в Секцию 4 (Без НДС)
КонецЕсли;
// Регистрация позиции товара
Объект.Name = ТаблицаТоваров.ТоварНаименование;
Объект.Price = ТаблицаТоваров.Цена;
Объект.Quantity = ТаблицаТоваров.Количество;
Объект.Registration();
Стоит отметить важный нюанс: если на ККТ АТОЛ активирована опция "Использовать как ЕНВД" (актуально для организаций на патенте или ЕНВД, которые освобождены от уплаты НДС), редактировать настройки налогообложения и распределения ставок зачастую приходится через 4-ю секцию драйвера. Проверьте эту галочку в параметрах ККТ, если ставки продолжают вести себя непредсказуемо.
Рассматриваемое семейство драйверов АТОЛ 8.х (ДТО 8) на сегодняшний день официально признано устаревшим и снято с поддержки производителем. ДТО 8 не способно полноценно работать с новыми требованиями законодательства, такими как обязательная маркировка товаров (ФФД 1.2), разрешительный режим на кассах, а также новые точечные ставки НДС 5% и 7%, введенные с 2025 года.
В современном драйвере десятого поколения (ДТО 10) разработчики АТОЛ полностью отказались от использования ненадежных числовых индексов TaxTypeNumber, которые зависели от внутренней памяти конкретного фискального регистратора. Вместо этого в ДТО 10 передача налогов осуществляется через именованные константы:
LIBFPTR_TAX_VAT20 — ставка НДС 20%LIBFPTR_TAX_VAT10 — ставка НДС 10%LIBFPTR_TAX_VAT0 — ставка НДС 0%LIBFPTR_TAX_NO — без НДСИспользование ДТО 10 полностью решает проблему «съезжающих налогов» раз и навсегда. Для работы из 1С 7.7 с драйвером ДТО 10 потребуется обновить внешнюю компоненту интеграции (например, использовать современные Native-компоненты или сторонние ВК, разработанные сообществом для связи 1С 7.7 с ДТО 10 через COM-соединение).