December 14, 2024

Примеры работы с НДС 5% и 7% для разработчиков

Прошивки

Вкратце

Старые команды Sale (Продажа), ReturnSale (Возврат продажи) 2003 года для Фискальных Регистраторов , которые работали только на прошивке С.1 для ФФД 1.05, не будут работать на прошивках 2025 года, а следовательно не будут поддерживать ставки НДС 5% и 7% даже с маппингом!

Необходимо перейти на новую команду 2016 года FNOperation.

Необходимо и достаточно добавить новые значения для свойства Tax1 у метода FNOperation, а суммы НДС аппарат уж и сам посчитает

Значение Tax1 - Налоговая ставка

0 - БЕЗ НДС

1 - НДС 20%

2 - НДС 10%

3 - НДС 0%

4 - БЕЗ НДС

5 - НДС 20/120

6 - НДС 10/110

7 - НДС 5%

8 - НДС 7%

9 - НДС 5/105

10 - НДС 7/107

В команды "Закрытие чека" и "Закрытие чека v2" не нужно добавлять новые ставки для работы.

Да, появилась команда "Закрытие чека v3" FNCloseCheckEx3 (76h), но и ей заморачиваться не нужно. Она нужна для случаев, если нужно указать иную сумму НДС за чек, отличную от правильной. Это для редких случаев когда это надо.

Можно использовать старые команды FNCloseCheck и FNCloseCheckEx и НДС 5% и 7% будет работать.

Напоминаем, что если в таблице 1 поле 14 стоит значение 0 (по умолчанию), то все налоги считаются правильно онлайн-кассой и никаких проблем нет.

Если в таблице 1 поле 14 кассовая программа или пользователь установит значение 1, то все налоги считаются так, как будет указано программой в команде FNCloseCheck(Ex(3)), и часто неправильно.

Команды Теста Драйвера

Без комментариев:

FNOperationEx:

Set_TaxValueEnabled: False
Set_Summ1Enabled: False
Set_CheckType: 1
Set_TaxValue: 0
Set_Tax1: 8
Set_Summ1: 0
Set_PaymentTypeSign: 4
Set_PaymentItemSign: 1
Set_Department: 0
Set_Price: 100
Set_Quantity: 1
Set_StringForPrinting: Пример
Set_MeasureUnit: 0
Set_DivisionalQuantity: False
Set_Numerator: 1
Set_Denominator: 1
FNOperation: 0
Get_ResultCode: 0
Set_Summ1: 100
Set_Summ2: 0
Set_Summ3: 0
Set_Summ4: 0
Set_Summ5: 0
Set_Summ6: 0
Set_Summ7: 0
Set_Summ8: 0
Set_Summ9: 0
Set_Summ10: 0
Set_Summ11: 0
Set_Summ12: 0
Set_Summ13: 0
Set_Summ14: 0
Set_Summ15: 0
Set_Summ16: 0
Set_TaxValue1: 0
Set_TaxValue2: 0
Set_TaxValue3: 0
Set_TaxValue4: 0
Set_TaxValue5: 0
Set_TaxValue6: 0
Set_RoundingSumm: 0
Set_TaxType: 2
Set_StringForPrinting:
FNCloseCheckEx: 0

FNOperationEx3:

Set_CheckType: 0
OpenCheck: 0
Get_ResultCode: 0
Set_TaxValueEnabled: False
Set_Summ1Enabled: False
Set_CheckType: 1
Set_TaxValue: 0
Set_Tax1: 7
Set_Summ1: 0
Set_PaymentTypeSign: 4
Set_PaymentItemSign: 1
Set_Department: 0
Set_Price: 100
Set_Quantity: 1
Set_StringForPrinting: Пример
Set_MeasureUnit: 0
Set_DivisionalQuantity: False
Set_Numerator: 1
Set_Denominator: 1
FNOperation: 0
Get_ResultCode: 0
Set_Summ1: 100
Set_Summ2: 0
Set_Summ3: 0
Set_Summ4: 0
Set_Summ5: 0
Set_Summ6: 0
Set_Summ7: 0
Set_Summ8: 0
Set_Summ9: 0
Set_Summ10: 0
Set_Summ11: 0
Set_Summ12: 0
Set_Summ13: 0
Set_Summ14: 0
Set_Summ15: 0
Set_Summ16: 0
Set_TaxValue1: 0
Set_TaxValue2: 0
Set_TaxValue3: 0
Set_TaxValue4: 0
Set_TaxValue5: 0
Set_TaxValue6: 0
Set_TaxValue7: 0
Set_TaxValue8: 0
Set_TaxValue9: 0
Set_TaxValue10: 0
Set_RoundingSumm: 0
Set_TaxType: 2
Set_StringForPrinting:
FNCloseCheckEx3: 0

С комментариями:

Set_CheckType: 0
//Открываем чек. Это можно, но не обязательно делать, так как он
OpenCheck: 0
// 0 - открыть чек прихода
// 1 - открыть чек возврата прихода
// 2 - открыть чек расхода
// 3 - открыть чек возврата расхода
Get_ResultCode: 0
//ошибок нет
Set_TaxValueEnabled: False
//False - так как тег 1200 "сумма НДС за позицию" необязательный, то и не нужно
//True - если очень нужен необязательный тег 1200 "сумма НДС за позицию".
//При Т1П14=0 он считается аппаратом и значение, поданное программой,
//игнорируется. Если Т1П14=1, то будет записано значение, поданное программой.
//Возможно, даже правильное.
Set_Summ1Enabled: False
//False - кассовый аппарат считает сумму позиции, умножая количество на цену
//True - кассовая программа может сместить результат умножения
//цены на количество на одну копейку.
//2 рубля умножить на 2 штуки равно
//либо 3 рубля 99 копеек
//либо 4 рубля
//либо 4 рубля и 1 копейка
//Иное значение - ошибка 55 (37h) Команда не поддерживается в данной
//реализации ККТ
Set_CheckType: 1
//1 - добавить позицию прихода
//2 - добавить позицию возврата прихода
//3 - добавить позицию расхода
//4 - добавить позицию возврата расхода
Set_TaxValue: 0
//У нас задано Set_TaxValueEnabled: False, поэтому значение TaxValue
//игнорируется
Set_Tax1: 7
//Здесь новые значения
//0 - БЕЗ НДС
//1 - НДС 20%
//2 - НДС 10%
//3 - НДС 0%
//4 - БЕЗ НДС
//5 - НДС 20/120
//6 - НДС 10/110
//7 - НДС 5%
//8 - НДС 7%
//9 - НДС 5/105
//10 - НДС 7/107
Set_Summ1: 0
//Summ1Enabled: False, поэтому значение игнорируется
Set_PaymentTypeSign: 4
//Признак способа расчета
//4 - полный расчет. Иные значения - отдельная наука
Set_PaymentItemSign: 1
//Признак предмета расчета
//Основные значения:
//1 - товар
//2 - подакцизный товар
//4 - услуга
//31 - подакцизный маркированный товар
//33 - маркированный товар
Set_Department: 0
//номер секции. Для внутреннего подсчета разных категорий проданных товаров
Set_Price: 100
//сумма предмета расчета
Set_Quantity: 1
//количество
Set_StringForPrinting: Пример
//наименование предмета расчета
Set_MeasureUnit: 0
//Мера количества предмета расчета. Основные значения:
//0 - штуки
//11 - килограмм
//22 - метр
//41 - литр
Set_DivisionalQuantity: False
//дробное количество маркированного товара.
//в основном, при продаже блистеров из пачки
Set_Numerator: 1
//DivisionalQuantity: False, поэтому значение игнорируется
Set_Denominator: 1
//DivisionalQuantity: False, поэтому значение игнорируется
FNOperation: 0
//ошибок нет
Set_Summ1: 100
//сумма наличными
Set_Summ2: 0
Set_Summ3: 0
Set_Summ4: 0
Set_Summ5: 0
Set_Summ6: 0
Set_Summ7: 0
Set_Summ8: 0
Set_Summ9: 0
Set_Summ10: 0
Set_Summ11: 0
Set_Summ12: 0
Set_Summ13: 0
//суммы 2-13 - суммы безналичными по разным неофициальным счетчикам
//нужно чтобы для себя выяснить, например, сколько сумм проходит по СБП, сколько картой, а сколько по QR-коду
Set_Summ14: 0
//сумма предоплатой
Set_Summ15: 0
//сумма постоплатой
Set_Summ16: 0
//иные способы оплаты
Set_TaxValue1: 0
Set_TaxValue2: 0
Set_TaxValue3: 0
Set_TaxValue4: 0
Set_TaxValue5: 0
Set_TaxValue6: 0
Set_TaxValue7: 0
Set_TaxValue8: 0
Set_TaxValue9: 0
Set_TaxValue10: 0
//TaxValueEnabled: False поэтому значения игнорируются
Set_RoundingSumm: 0
//Сумму чека можно округлить в меньшую сторону, по модулю, так как копейки
//сейчас не в ходу. Если сумма чека равна 100 рублей 99 копеек наличными, то
//можно выставить summ1 равной 100 рублей и RoundingSumm 99. Тогда сумма
//чека будет ровно 100 рублей. Возникает проблема с суммой НДС, так как она не
//округляется. Нужно высчитывать TaxValue. Но с 2020 года в прошивках есть
//значения таблицы 14 поле 1 значение 3. С ней НДС читается с учетом
//округления
Set_TaxType: 2
//Система Налогообложения
//1 - Общая
//2 - УСН
//4 - УСНДМР
//16 - ЕСХН
//32 - ПСН
Set_StringForPrinting:
//Произвольный текст не более 32 символа
FNCloseCheckEx3: 0
//Ошибок нет

Команды нижнего уровня

FF 46 1E 00 00 00 01 40 42 0F 00 00 00 10 27 00 00 00 FF FF FF FF FF FF FF FF FF FF XX 00 04 01 CF F0 E8 EC E5 F0

00 - БЕЗ НДС
01 - НДС 20%
02 - НДС 10%
04 - НДС 0%
08 - БЕЗ НДС
10 - НДС 20/120
20 - НДС 10/110
81 - НДС 5%
82 - НДС 7%
84 - НДС 5/105
88 - НДС 7/107

Маппинг налогов

Так как существует много кассовых программ, у которых нет более поддержки или разработка занимает много времени, то была добавлена опция маппинга налогов.

Требуется подписка на 1 квартал 2025 года

Таблица 17 поле 64 Маппирование налогов

0 - (по умолчанию) маппинг отключен

1 - формировать позиции вместо "НДС 20%" по "НДС 5%"

2 - формировать позиции вместо "НДС 20%" по "НДС 7%"

3 - формировать позиции вместо "БЕЗ НДС" по "НДС 5%"

4 - формировать позиции вместо "БЕЗ НДС" по "НДС 7%"

5 - формировать позиции вместо "БЕЗ НДС" по "НДС 20%"