При регистрации продаж в 1С 7.7 через фискальные регистраторы (в частности, оборудование линейки «Штрих-М») нередко возникает ситуация, когда в одном документе присутствуют позиции с разными ставками налога (например, 18%/20% и 10%). Если передавать параметры налогообложения некорректно, кассовый аппарат либо рассчитывает налог только по одной ставке с ошибочной суммой, либо вовсе не выводит разбивку по налогам в подвале чека.
Разберем детально механизм работы драйвера ККМ, выясним причину возникновения ошибки и настроим код обработки обслуживания для корректного расчета и печати НДС.
Проанализируем типовую ошибку при попытке передать признак налога в процедуре регистрации позиции. Зачастую в коде устанавливается фиксированное значение свойства Tax1 = 1 для каждой строки чека. В результате драйвер относит все позиции к одной и той же налоговой группе, зарегистрированной в ККМ под номером 1.
Важно понимать внутреннюю структуру работы драйвера «Штрих-М»:
Tax1 принимает не флаг активности (0 или 1), а порядковый номер налоговой ставки (от 0 до 4), настроенной во внутренней таблице кассового аппарата.Tax2, Tax3, Tax4 предназначены исключительно для случаев, когда к одной товарной позиции применяется одновременно несколько налогов (например, федеральный и региональный). Они не служат для распределения разных ставок по разным строкам чека.Tax2, Tax3, Tax4 необходимо обнулять, а в Tax1 передавать индекс требуемой ставки.Рассмотрим правильную реализацию функции регистрации позиции в обработке обслуживания (например, shtrihfr_comm.ert). Для того чтобы касса правильно рассчитала налог по каждой позиции и вывела итоги в подвале чека при вызове метода CloseCheck(), необходимо передавать номер ставки НДС в качестве параметра.
Доработаем функцию регистрации позиции, добавив в нее передачу ставки налога:
Функция РегистрацияПозиции(Отдел, Сумма, Количество, Объект, СтавкаНДС)
Пока "на экране окно вопроса" = "на экране окно вопроса" Цикл
Объект.StringForPrinting = "";
Объект.Price = Сумма;
Объект.Quantity = Количество;
Объект.Department = Отдел;
// Очищаем дополнительные налоги
Объект.Tax2 = 0;
Объект.Tax3 = 0;
Объект.Tax4 = 0;
// Передаем индекс налоговой ставки из таблицы ККМ
Если (СтавкаНДС = 18) Или (СтавкаНДС = 20) Тогда
Объект.Tax1 = 1; // 1-я налоговая ставка в кассе
ИначеЕсли СтавкаНДС = 10 Тогда
Объект.Tax1 = 2; // 2-я налоговая ставка в кассе
ИначеЕсли (СтавкаНДС = 0) Или (ПустоеЗначение(СтавкаНДС) = 1) Тогда
Объект.Tax1 = 0; // Без налога / ставка 0%
Иначе
Объект.Tax1 = 0;
КонецЕсли;
Объект.Sale();
Результат = ОбработкаОшибокПриПечати(Объект);
Если Результат = "Отмена" Тогда
Объект.CancelCheck();
Возврат 0;
ИначеЕсли Результат = 0 Тогда
Возврат 1;
КонецЕсли;
КонецЦикла;
КонецФункции
В месте вызова функции в цикле обхода строк документа передаем актуальную ставку НДС из реквизитов строки или справочника номенклатуры. В этом случае фискальный регистратор самостоятельно накапливает суммы по каждой налоговой группе и при закрытии чека методом CloseCheck() формирует итоговый блок по ставкам.
Если используется старая модель кассы или конфигурация настроена без фискального разделения налогов, иногда применяют вывод расчетной суммы отдельными текстовыми строками перед вызовом закрытия чека.
Посмотрим на пример такого кода:
// Печать текстовых строк с расшифровкой НДС
Если СуммаНДС18 > 0 Тогда
СтрокаПечати = "В ТОМ ЧИСЛЕ НДС 18%: " + СокрЛП(Формат(СуммаНДС18, "Ч15.2"));
Объект.StringForPrinting = СтрокаПечати;
Объект.PrintString();
КонецЕсли;
Если СуммаНДС10 > 0 Тогда
СтрокаПечати = "В ТОМ ЧИСЛЕ НДС 10%: " + СокрЛП(Формат(СуммаНДС10, "Ч15.2"));
Объект.StringForPrinting = СтрокаПечати;
Объект.PrintString();
КонецЕсли;
Обратите внимание: вывод через PrintString() печатает только произвольный текст. Данные суммы не накапливаются в налоговых счетчиках фискального накопителя и не отправляются в налоговые органы и ОФД как фискальные теги.
Чтобы фискальный регистратор корректно сопоставлял переданный индекс со ставкой и выводил ее в чек, необходимо проверить настройки ККМ через утилиту «Тест драйвера ККТ»:
2. При значении 0 печать налогового блока в чеке отключается.Правильное указание индекса ставки в Tax1 и корректная настройка таблиц кассы обеспечивают автоматический и точный расчет налогов по каждой товарной строке и корректное закрытие чека.