Как настроить передачу ставки НДС 20% на ККТ АТОЛ из 1С 7.7 и избежать аннулирования чеков

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

Переход на ставку НДС 20% привел к возникновению множества технических сложностей, особенно у пользователей, работающих на классической платформе 1С:Предприятие 7.7 (например, в конфигурации «Торговля и Склад 7.7»). При отправке чеков на ККТ АТОЛ многие столкнулись с неприятной ситуацией: касса аннулирует чек, сообщая о неверной ставке НДС, либо некорректно отображает налоги.

В этой статье мы подробно разберем причины такого поведения ККТ, рассмотрим быстрый «костыль» для драйверов серии 8.х и изучим правильное системное решение с переходом на драйверы ДТО 10.

Почему ККТ АТОЛ аннулирует чек при передаче ставки 20%

Для начала выясним причину сбоя. В прошивках кассовых аппаратов АТОЛ логика перехода на новую ставку жестко завязана на системное время ККТ. После наступления контрольной даты кассовый аппарат на внутреннем программном уровне начинает автоматически преобразовывать старую ставку НДС 18% в ставку 20%.

Если ваше учетное решение на платформе 1С 7.7 продолжает работать со старым драйвером ККТ АТОЛ (например, версии 8.16), то при попытке явно передать в кассу числовое значение 20 или код новой ставки, драйвер не понимает этой команды. На уровне драйвера 8-й версии таблица ставок не содержит параметров для «прямого» НДС 20%, либо эти параметры конфликтуют со старой структурой данных. В результате касса выдает ошибку «Указан неверный НДС» и аннулирует чек.

Быстрое решение на драйвере АТОЛ 8.х (метод подмены)

Если у вас нет времени на экстренное переписывание обработки обслуживания под 10-й драйвер, существует временный рабочий обходной путь. Поскольку прошивка ККТ сама пересчитывает 18% в 20%, мы можем продолжить отправлять в кассу команду на печать НДС 18%.

Проанализируем этот процесс по шагам:

  1. Откроем конфигуратор 1С 7.7 и найдем обработку обслуживания ККТ (или модуль документа, из которого вызывается печать, например, ПКО или Чек ККМ).
  2. Найдем процедуру формирования и печати чека (обычно это ПечатьЧека()).
  3. Перед отправкой строки чека в кассу принудительно подменим передаваемую ставку на старое значение 18%.

Посмотрим на пример кода, который решает проблему «на лету»:


// В процедуре ПечатьЧека() при заполнении параметров позиции чека
// вместо реальной ставки 20% временно передаем значение 18
СтавкаНДСДляКассы = 18; 

// Передаем параметры в объект драйвера АТОЛ 8.х
Device.AttrNumber = 1102; // Тег НДС
Device.AttrValue = СтавкаНДСДляКассы;
Device.WriteAttribute();

При такой настройке логика отработает следующим образом:

Важное ограничение: этот способ подходит только для прямой продажи. Если вам потребуется сделать возврат товара, проданного по старой ставке 18% до изменения законодательства, этот метод не сработает.

Системное решение: переход на АТОЛ ДТО 10

Для полноценной работы, корректного разделения потоков 18% и 20% (особенно при оформлении возвратов прошлых периодов), необходимо отказаться от устаревших драйверов 8-й и 9-й серий и перейти на ДТО 10 (Драйвер ККТ 10.х).

В 10-м драйвере для разделения ставок используется специальный флаг LIBFPTR_PARAM_USE_VAT18. Если этот флаг установлен в значение Истина, ККТ понимает, что данная операция должна быть проведена именно по старой ставке 18% (что актуально для чеков возврата).

Рассмотрим, как подключить ДТО 10 к 1С 7.7 через COM-соединение. Поскольку 1С 7.7 является 32-битным приложением, на рабочем компьютере обязательно должен быть установлен 32-битный вариант драйвера АТОЛ 10.

Пример инициализации драйвера 10 версии в коде 1С 7.7:


// Создаем объект драйвера версии 10
Попытка
    Касса = СоздатьОбъект("AddIn.Fptr10");
Исключение
    Предупреждение("Не удалось загрузить драйвер АТОЛ ДТО 10!");
    Возврат;
КонецПопытки;

// Настройка связи с аппаратом
Касса.setParam(Касса.LIBFPTR_PARAM_CONNECTION_TYPE, Касса.LIBFPTR_PORT_COM);
Касса.setParam(Касса.LIBFPTR_PARAM_COM_FILE, "COM3"); // Укажите ваш порт
Касса.setParam(Касса.LIBFPTR_PARAM_BAUDRATE, Касса.LIBFPTR_PORT_SPEED_115200);
Касса.open();

Регистрация позиций со ставками 18% и 20% в ДТО 10

При регистрации позиций в 10-м драйвере параметры передаются через вызовы метода setParam(). Разберем пример формирования чека продажи с НДС 20%:


// Открытие чека продажи (Приход)
Касса.setParam(Касса.LIBFPTR_PARAM_RECEIPT_TYPE, Касса.LIBFPTR_RT_SELL);
Касса.openReceipt();

// Регистрация товара с НДС 20%
Касса.setParam(Касса.LIBFPTR_PARAM_COMMODITY_NAME, "Пакет полиэтиленовый");
Касса.setParam(Касса.LIBFPTR_PARAM_PRICE, 10.00);
Касса.setParam(Касса.LIBFPTR_PARAM_QUANTITY, 1);
Касса.setParam(Касса.LIBFPTR_PARAM_TAX_TYPE, Касса.LIBFPTR_TAX_VAT20); // Явно указываем НДС 20%
Касса.registerPosition();

// Закрытие и оплата чека
Касса.setParam(Касса.LIBFPTR_PARAM_PAYMENT_TYPE, Касса.LIBFPTR_PT_CASH);
Касса.setParam(Касса.LIBFPTR_PARAM_PAYMENT_SUM, 10.00);
Касса.closeReceipt();

Если нам необходимо оформить возврат товара, купленного до изменения ставки, мы должны применить флаг LIBFPTR_PARAM_USE_VAT18. Посмотрим, как это реализовать:


// Открытие чека возврата продажи
Касса.setParam(Касса.LIBFPTR_PARAM_RECEIPT_TYPE, Касса.LIBFPTR_RT_SELL_RETURN);
// Включаем использование ставки 18% для этого чека
Касса.setParam(Касса.LIBFPTR_PARAM_USE_VAT18, Истина); 
Касса.openReceipt();

// Регистрация возвращаемого товара со старым НДС 18%
Касса.setParam(Касса.LIBFPTR_PARAM_COMMODITY_NAME, "Старый товар из 2018 года");
Касса.setParam(Касса.LIBFPTR_PARAM_PRICE, 118.00);
Касса.setParam(Касса.LIBFPTR_PARAM_QUANTITY, 1);
Касса.setParam(Касса.LIBFPTR_PARAM_TAX_TYPE, Касса.LIBFPTR_TAX_VAT18); // Указываем НДС 18%
Касса.registerPosition();

// Оплата и закрытие чека
Касса.setParam(Касса.LIBFPTR_PARAM_PAYMENT_TYPE, Касса.LIBFPTR_PT_CASH);
Касса.setParam(Касса.LIBFPTR_PARAM_PAYMENT_SUM, 118.00);
Касса.closeReceipt();

Использование ДТО 10 полностью решает проблему конфликта ставок налогообложения, исключает ошибки округления при расчетах на стороне фискального накопителя и гарантирует корректную передачу фискальных данных вашему оператору ОФД.

← На главную