При оформлении документов продажи или закупки в программе 1С:Управление торговлей 11 пользователи часто сталкиваются с ситуацией, когда сумма без НДС рассчитывается путем «выкручивания» налога из общей суммы с НДС по формуле (ЦенаСНДС * Количество) / 1.1 (или 1.2 в зависимости от ставки). Из-за построчного округления до копеек итоговая стоимость без НДС может отличаться на несколько копеек от варианта, когда цена изначально задана без налога и умножается на количество: ЦенаБезНДС * Количество.
Рассмотрим, как устроена методика расчета табличной части в УТ 11, какими штатными настройками можно изменить логику начисления НДС и как при необходимости перехватить пересчет программно.
Проанализируем, от чего зависит математика расчета табличных частей документов в типовых конфигурациях. Главным регулятором выступает признак «Цена включает НДС».
Разберем два варианта работы системы:
Сначала рассчитывается общая сумма с учетом налога: Сумма = Окр(Цена * Количество, 2). Затем выделяется налог: СуммаНДС = Окр(Сумма * Ставка / (100 + Ставка), 2). После этого вычисляется стоимость без НДС: СуммаБезНДС = Сумма - СуммаНДС.
Сначала считается чистая стоимость: СуммаБезНДС = Окр(Цена * Количество, 2). Затем сверху начисляется налог: СуммаНДС = Окр(СуммаБезНДС * Ставка / 100, 2). Итоговая сумма складывается из двух величин: Сумма = СуммаБезНДС + СуммаНДС.
Именно разница в последовательности округления промежуточных значений создает расхождения в копейках при расчете больших объемов позиций.
Чтобы программа рассчитывала стоимость без НДС путем прямого умножения цены без НДС на количество, необходимо переключить режим начисления налога в режим «НДС сверху».
Выясним, где находятся эти настройки в интерфейсе:
Цена включает НДС. Если снять этот флаг, цена будет храниться без учета налога.Реализация товаров и услуг или Заказ клиента) перейдем по гиперссылке Цены и скидки в шапке и снимите флаг Цена включает НДС. После подтверждения табличная часть автоматически пересчитается по схеме «НДС сверху».Если штатных настроек недостаточно и требуется кастомизировать процесс пересчета табличной части (например, при вызове собственных обработчиков или создании специфической логики в расширении), используем типовые сервисные модули УТ 11.
В конфигурации 1С:Управление торговлей 11 логика пересчета строк скомпонована в общем модуле ОбработкаТабличнойЧастиКлиент. Посмотрим на пример кода, с помощью которого выполняется перерасчет текущей строки табличной части Товары:
ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
СтруктураДействий = Новый Структура;
ОбработкаТабличнойЧастиКлиент.ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(СтруктураДействий, Объект);
ОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
В этом механизме формируется структура действий, указывающая, какие именно показатели строки подлежат пересчету (количество, цена, сумма, ставка или сумма НДС). Функция ОбработатьСтрокуТЧ вызывает клиент-серверные алгоритмы модуля ОбработкаТабличнойЧастиКлиентСервер, где с учетом текущего флага «Цена включает НДС» производятся математические вычисления.
Важно: При программном изменении алгоритмов расчета НДС следует учитывать риски возникновения расхождений с движением по регистру НДС Продажи, а также при синхронизации данных с программой 1С:Бухгалтерия предприятия, где используются строгие типовые алгоритмы расчета согласно ст. 168 и 169 НК РФ.