Перейти к содержимому

НДС в каталоге и заказах - ставки, цена с налогом и доставка

Разбираемся, откуда берётся налог в цене товара и в итогах заказа и почему он расходится с суммами из учётной системы.

Решение

Смотрим справочник ставок:

$res = CCatalogVat::GetList([], [], false, false, ['ID', 'NAME', 'RATE', 'ACTIVE']);
while ($vat = $res->Fetch()) {
printf("%d %-16s ставка=%s%% активна=%s\n",
$vat['ID'], $vat['NAME'], $vat['RATE'], $vat['ACTIVE']);
}
// ставка «Без НДС» тоже заводится записью, а не пустым значением

Ставки хранятся отдельным справочником модуля каталога. Товар ссылается на запись справочника, поэтому смена процента в одной записи меняет налог сразу у всех товаров с этой ставкой.

Назначаем ставку и признак включения товару:

CCatalogProduct::Update($elementId, [
'VAT_ID' => 2, // запись справочника ставок
'VAT_INCLUDED' => 'Y', // цена уже содержит налог
]);
// у торгового предложения ставка своя: товару-владельцу она не наследуется

Признак включения решает, как считается итог. При включённом налоге цена остаётся прежней, а налог из неё выделяется; при выключенном он добавляется сверху, и покупатель видит другую сумму.

Проверяем, что получилось в корзине:

$basket = \Bitrix\Sale\Basket::loadItemsForFUser(
\Bitrix\Sale\Fuser::getId(), \Bitrix\Main\Context::getCurrent()->getSite());
foreach ($basket as $item) {
printf("%-30s цена=%8.2f ставка=%s налог=%8.2f\n",
$item->getField('NAME'), $item->getPrice(), $item->getVatRate(), $item->getVat());
}

Налог считается по позициям, а не на итог заказа целиком. Именно поэтому сумма налога в заказе с несколькими ставками не равна итогу, умноженному на одну из них, и расхождение в копейках здесь обычное дело.

Смотрим налог доставки отдельно:

$service = \Bitrix\Sale\Delivery\Services\Manager::getById($deliveryId);
printf("%s ставка=%s\n", $service['NAME'], $service['VAT_ID'] ?: 'не задана');
// у доставки своя ставка: от ставок товаров в заказе она не зависит

У доставки собственная ставка, заданная в настройках службы. Незаданная ставка означает доставку без налога, и в чеке она уходит с признаком, который учётная система потом не принимает.

При обмене заказами ставка приезжает из учётной системы вместе с каждой позицией заказа. Расхождение почти всегда означает разные справочники: на сайте ставка задана одной записью, в учётной системе - другой, и сопоставляются они по проценту.

Смена процента у существующей записи справочника задним числом меняет расчёт у всех товаров. Старые заказы при этом остаются с прежними суммами: налог в них сохранён в момент оформления, а не пересчитывается при просмотре.

Типичные проблемы

Итог заказа отличается от суммы товаров.

У товаров выключен признак включения налога в цену. Тогда налог добавляется к цене сверху, а не выделяется из неё при подсчёте итога.

В заказе налог нулевой при заданной ставке.

Ставка назначена элементу каталога, но не торговому предложению. В корзину попадает торговое предложение, и в расчёт идёт именно его собственная ставка.

Налог доставки не попадает в чек.

У службы доставки не задана своя ставка налога. Она задаётся в настройках самой службы доставки и не наследуется от товаров заказа.

Суммы налога расходятся с учётной системой.

Ставки в двух справочниках заведены по-разному, с разными процентами. Сопоставление ставок при обмене идёт по проценту, а не по названию записи справочника.

После смены процента старые заказы не изменились.

Налог в заказе сохранён в момент его оформления. Пересчёт задним числом делается только пересозданием заказа целиком, вручную и по одному.

Частые вопросы

Где задаётся ставка: у товара или у типа цены?

У товара, записью справочника ставок. Тип цены отвечает за величину цены, а не за налог на неё.

Как продавать часть товаров без налога?

Отдельной записью справочника с нулевым процентом. Пустая ставка и нулевая ставка в отчётности означают разное.

Почему в карточке цена одна, а в корзине другая?

В карточке показана цена без добавленного налога, а корзина добавляет его сверху. Разница уходит после включения признака у товара.

Считается ли налог на скидку?

Скидка применяется к цене, а налог считается уже от неё. Порядок обратный даёт расхождение в копейках.

Смежное

Первоисточник