Переход на ставку НДС 20% привел к возникновению множества технических сложностей, особенно у пользователей, работающих на классической платформе 1С:Предприятие 7.7 (например, в конфигурации «Торговля и Склад 7.7»). При отправке чеков на ККТ АТОЛ многие столкнулись с неприятной ситуацией: касса аннулирует чек, сообщая о неверной ставке НДС, либо некорректно отображает налоги.
В этой статье мы подробно разберем причины такого поведения ККТ, рассмотрим быстрый «костыль» для драйверов серии 8.х и изучим правильное системное решение с переходом на драйверы ДТО 10.
Для начала выясним причину сбоя. В прошивках кассовых аппаратов АТОЛ логика перехода на новую ставку жестко завязана на системное время ККТ. После наступления контрольной даты кассовый аппарат на внутреннем программном уровне начинает автоматически преобразовывать старую ставку НДС 18% в ставку 20%.
Если ваше учетное решение на платформе 1С 7.7 продолжает работать со старым драйвером ККТ АТОЛ (например, версии 8.16), то при попытке явно передать в кассу числовое значение 20 или код новой ставки, драйвер не понимает этой команды. На уровне драйвера 8-й версии таблица ставок не содержит параметров для «прямого» НДС 20%, либо эти параметры конфликтуют со старой структурой данных. В результате касса выдает ошибку «Указан неверный НДС» и аннулирует чек.
Если у вас нет времени на экстренное переписывание обработки обслуживания под 10-й драйвер, существует временный рабочий обходной путь. Поскольку прошивка ККТ сама пересчитывает 18% в 20%, мы можем продолжить отправлять в кассу команду на печать НДС 18%.
Проанализируем этот процесс по шагам:
ПечатьЧека()).Посмотрим на пример кода, который решает проблему «на лету»:
// В процедуре ПечатьЧека() при заполнении параметров позиции чека
// вместо реальной ставки 20% временно передаем значение 18
СтавкаНДСДляКассы = 18;
// Передаем параметры в объект драйвера АТОЛ 8.х
Device.AttrNumber = 1102; // Тег НДС
Device.AttrValue = СтавкаНДСДляКассы;
Device.WriteAttribute();
При такой настройке логика отработает следующим образом:
Важное ограничение: этот способ подходит только для прямой продажи. Если вам потребуется сделать возврат товара, проданного по старой ставке 18% до изменения законодательства, этот метод не сработает.
Для полноценной работы, корректного разделения потоков 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();
При регистрации позиций в 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 полностью решает проблему конфликта ставок налогообложения, исключает ошибки округления при расчетах на стороне фискального накопителя и гарантирует корректную передачу фискальных данных вашему оператору ОФД.