При интеграции учётных систем 1С (в частности, Альфа-Авто версии 4.1) с фискальными регистраторами Штрих-М разработчики часто сталкиваются с проблемой несовпадения итоговой суммы чека и суммы документа. Это происходит, когда в системе используется тип цен "НДС сверху". В данной статье мы разберем причины этой проблемы и проанализируем доступные программные способы её решения.
Проанализируем механику работы фискального регистратора. Большинство современных ККМ работают по принципу "Цена включает НДС". Когда мы передаем в кассу цену без налога, касса пытается самостоятельно вычислить сумму налога, а затем прибавить её к стоимости. Однако согласно форматам фискальных данных (ФФД), касса жестко контролирует математическое равенство: Цена * Количество = Сумма.
Разберем конкретный пример. В документе 1С указана позиция: количество 10.8, цена без НДС 1271.19, сумма НДС 2471.19, итоговая сумма 16200.04. Если мы передаем в чек цену без НДС, касса считает: 10.8 * 1271.19 = 13728.85. Затем она выделяет НДС (20%) и получает 2288.14. Итоговая сумма чека составит 13728.85, что в корне неверно. Если же мы попытаемся вычислить цену с НДС в 1С (16200.04 / 10.8 = 1500.0037...), то при округлении до 1500.00 мы получим итоговую сумму 16200.00. Потерянные 4 копейки не позволят кассе закрыть чек или приведут к расхождению с бухгалтерским учетом.
Одним из способов "объяснить" кассе, как работать с налогом, является использование механизма секций (отделов) и предварительная настройка таблиц в самом драйвере Штрих-М. Рассмотрим программную реализацию этого метода. Мы можем назначить каждой налоговой ставке свой номер отдела (Department) и настроить в таблицах ФР тип начисления налога.
Для реализации этого подхода в коде обработки обслуживания ККМ необходимо прописать условия выбора отдела в зависимости от ставки НДС в документе 1С:
// В настройках ФР (через Тест драйвера) предварительно настраиваем:
// Налог 1 = 20% (НДС сверху или включен)
// Налог 2 = 10%
// Налог 4 = без НДС
// Тип налога = 2 (Налог на каждую продажу)
Если НДСЕсть = 1 Тогда
// Определяем номер отдела (секции) в зависимости от ставки
Если СписокТоваров.НДС = 20 Тогда
Объект.Department = 3; // Например, секция 3 настроена на 20%
ИначеЕсли СписокТоваров.НДС = 10 Тогда
Объект.Department = 2;
Иначе
Объект.Department = 4; // Без НДС
КонецЕсли;
КонецЕсли;
Важно понимать, что в современных прошивках Штрих-М под ФФД 1.05 и 1.2 режим "налога на каждую продажу" (НДС сверху) может быть ограничен законодательными требованиями. Налоговая служба требует, чтобы НДС всегда выделялся из конечной цены, поэтому данный метод лучше всего работает на старых версиях оборудования или требует тщательной настройки таблиц налогов в ККМ.
Если переход на тип цен "НДС включен" невозможен по организационным причинам, наиболее стабильным техническим решением будет использование механизма надбавок/скидок на уровне каждой строки чека. Проанализируем, как это работает: мы передаем в кассу цену, максимально приближенную к расчетной, а разницу в копейках передаем как скидку или надбавку.
Рассмотрим алгоритм действий:
ОкругленнаяЦена * Количество.Sale() (или FNПродажа), указывая цену и количество.Этот метод гарантирует, что итоговая сумма по каждой строке в кассе совпадет с точностью до копейки с данными в Альфа-Авто.
Как показывает практика эксплуатации систем Штрих-М и 1С, самым надежным и "чистым" способом является перевод розничных продаж на тип цен "Цена включает НДС". Это полностью исключает математические ошибки при делении и последующем умножении.
Почему это лучше:
Выясним, какие параметры в драйвере Штрих-М влияют на расчет налогов. Откроем "Тест драйвера", перейдем в раздел "Настройка свойств" — "Таблицы".
Обратите внимание на следующие настройки:
Важное замечание: При работе с Альфа-Авто 4.1 и драйвером версии 4.13, убедитесь, что в коде 1С не происходит двойного начисления. Часто типовые обработки сначала передают цену с НДС, а затем еще и номер отдела, в котором также настроено начисление НДС. Это приведет к тому, что сумма налога в чеке будет в два раза больше ожидаемой.
Подводя итог, можно сказать, что проблема "пляшущих копеек" при использовании НДС сверху — это следствие конфликта между точностью хранения данных в 1С и алгоритмами ФН. Если вы не можете изменить тип цен в конфигурации, используйте программное распределение погрешности на сумму позиции через методы скидок/надбавок драйвера или пересмотрите логику заполнения параметра Department. Однако для долгосрочной стабильной работы рекомендуется привести учетную политику розничных продаж к формату "цены с учетом НДС".