Как исправить некорректную печать ставок НДС из 1С 7.7 на ККТ АТОЛ при переходе на ФФД 1.1?

Программист 1С v7.7 Налоговый учет IT и автоматизация бизнеса
← На главную

При обновлении прошивок фискальных регистраторов под новые требования законодательства (например, переход с ФФД 1.0 на ФФД 1.05 или 1.1) разработчики и системные администраторы часто сталкиваются со странным поведением кассовых аппаратов. Наиболее распространенный симптом — «съезжание» налоговых ставок в чеке. Вместо привычной ставки 18% (или 20%) на печать выводится расчетная ставка 10/110, либо вместо НДС 0% касса упрямо печатает НДС 10%.

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

Выясняем причину: почему «съезжают» налоги при переходе на ФФД 1.1?

Главная причина рассинхронизации налогов кроется в изменении внутренней структуры таблиц ККТ и логики работы драйверов АТОЛ при переходе на новые форматы фискальных документов.

В старых прошивках под ФФД 1.0 порядок налоговых ставок во внутренней памяти ККТ (Таблица 10 «Налоги») мог настраиваться произвольно. Каждая строка таблицы соответствовала определенному налогу, и разработчики настраивали эти строки под нужды конкретной организации.

С переходом на ФФД 1.05 и ФФД 1.1 производитель АТОЛ жестко стандартизировал индексы налоговых ставок для свойства TaxTypeNumber в ДТО 8. Они приобрели следующий фиксированный вид:

Когда кассу перепрошивают в сервисном центре, программисты ККТ иногда забывают выполнить критически важную процедуру — технологическое обнуление и инициализацию таблиц ККТ. В результате старая разметка налогов из памяти кассы накладывается на новые требования микрокода прошивки и драйвера. Передача из 1С параметра TaxTypeNumber = 1 (который по новой спецификации должен отвечать за НДС 0%) заставляет кассу печатать НДС 10% или 18/118, поскольку индексы во внутренней памяти устройства смещены.

Решение 1. Технологическое обнуление и проверка таблиц ККТ

Проанализируем действия, которые необходимо выполнить со стороны самой онлайн-кассы. Если программный код в 1С 7.7 не менялся, но после прошивки ставки стали выводиться некорректно, проблему следует решать на уровне железа и таблиц.

Рекомендуется обратиться в сервисный центр или самостоятельно через утилиту «Тест драйвера ККТ» выполнить следующие шаги:

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

Решение 2. Обновление версии драйвера АТОЛ

В процессе обсуждения проблемы на форуме было замечено, что использование старых версий драйверов (например, ДТО 8.12) приводит к некорректной интерпретации команд на новых прошивках. Переход на версию драйвера АТОЛ 8.16 мгновенно решает проблему некорректной печати налогов (например, ставка 0% снова начинает печататься правильно без изменения кода в 1С).

Поэтому обязательно выполните обновление локального драйвера на рабочем месте кассира:

  1. Удалите старую версию драйвера АТОЛ 8.12 (или более раннюю).
  2. Установите ДТО версии 8.16.х.
  3. Заново зарегистрируйте OLE-компоненту в системе (как правило, библиотека FPrnM8.dll или аналогичная регистрируется автоматически при установке драйвера).

Решение 3. Корректировка кода обработки обслуживания в 1С 7.7

Рассмотрим, как правильно передавать информацию о налогах непосредственно из кода 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-ю секцию драйвера. Проверьте эту галочку в параметрах ККТ, если ставки продолжают вести себя непредсказуемо.

Взгляд в будущее: переход на современный драйвер ДТО 10

Рассматриваемое семейство драйверов АТОЛ 8.х (ДТО 8) на сегодняшний день официально признано устаревшим и снято с поддержки производителем. ДТО 8 не способно полноценно работать с новыми требованиями законодательства, такими как обязательная маркировка товаров (ФФД 1.2), разрешительный режим на кассах, а также новые точечные ставки НДС 5% и 7%, введенные с 2025 года.

В современном драйвере десятого поколения (ДТО 10) разработчики АТОЛ полностью отказались от использования ненадежных числовых индексов TaxTypeNumber, которые зависели от внутренней памяти конкретного фискального регистратора. Вместо этого в ДТО 10 передача налогов осуществляется через именованные константы:

Использование ДТО 10 полностью решает проблему «съезжающих налогов» раз и навсегда. Для работы из 1С 7.7 с драйвером ДТО 10 потребуется обновить внешнюю компоненту интеграции (например, использовать современные Native-компоненты или сторонние ВК, разработанные сообществом для связи 1С 7.7 с ДТО 10 через COM-соединение).

← На главную