НДС в каталоге и заказах - ставки, цена с налогом и доставка
Разбираемся, откуда берётся налог в цене товара и в итогах заказа и почему он расходится с суммами из учётной системы.
Решение
Смотрим справочник ставок:
$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'] ?: 'не задана');// у доставки своя ставка: от ставок товаров в заказе она не зависитУ доставки собственная ставка, заданная в настройках службы. Незаданная ставка означает доставку без налога, и в чеке она уходит с признаком, который учётная система потом не принимает.
При обмене заказами ставка приезжает из учётной системы вместе с каждой позицией заказа. Расхождение почти всегда означает разные справочники: на сайте ставка задана одной записью, в учётной системе - другой, и сопоставляются они по проценту.
Смена процента у существующей записи справочника задним числом меняет расчёт у всех товаров. Старые заказы при этом остаются с прежними суммами: налог в них сохранён в момент оформления, а не пересчитывается при просмотре.
Типичные проблемы
Итог заказа отличается от суммы товаров.
У товаров выключен признак включения налога в цену. Тогда налог добавляется к цене сверху, а не выделяется из неё при подсчёте итога.
В заказе налог нулевой при заданной ставке.
Ставка назначена элементу каталога, но не торговому предложению. В корзину попадает торговое предложение, и в расчёт идёт именно его собственная ставка.
Налог доставки не попадает в чек.
У службы доставки не задана своя ставка налога. Она задаётся в настройках самой службы доставки и не наследуется от товаров заказа.
Суммы налога расходятся с учётной системой.
Ставки в двух справочниках заведены по-разному, с разными процентами. Сопоставление ставок при обмене идёт по проценту, а не по названию записи справочника.
После смены процента старые заказы не изменились.
Налог в заказе сохранён в момент его оформления. Пересчёт задним числом делается только пересозданием заказа целиком, вручную и по одному.
Частые вопросы
Где задаётся ставка: у товара или у типа цены?
У товара, записью справочника ставок. Тип цены отвечает за величину цены, а не за налог на неё.
Как продавать часть товаров без налога?
Отдельной записью справочника с нулевым процентом. Пустая ставка и нулевая ставка в отчётности означают разное.
Почему в карточке цена одна, а в корзине другая?
В карточке показана цена без добавленного налога, а корзина добавляет его сверху. Разница уходит после включения признака у товара.
Считается ли налог на скидку?
Скидка применяется к цене, а налог считается уже от неё. Порядок обратный даёт расхождение в копейках.
Смежное
- Цены, скидки и купоны - оглавление подтемы
- Цена в другой валюте неверная: разбор причин - соседний источник расхождений в копейках
- Типы цен: розница и опт, права групп, цена по количеству - откуда берётся сама цена
- Скидка на отдельную позицию в корзине - что происходит с ценой до налога
- Не выгружаются цены и остатки из 1С - когда цены не приезжают вовсе
- Каталог и продажи - устройство магазина целиком
- Онлайн-касса: подключение, состав чека, очередь и ошибки - куда попадает ставка налога