Как установить ставку НДС всем товарам в интернет-магазине на 1С Bitrix? Этот вопрос возник у многих пользователей данного магазина в период смены размера ставки НДС с 18% на 20%. Битрикс предлагает заходить в каждый товар, выбирать НДС и ставить галочку «НДС включен в цену», но что делать, если у Вас много товаров?
Создаем ставку НДС 20%
Для начала нам необходимо создать ставку НДС 20%. Для этого заходим в Панель администрирования Битрикс в раздел «Магазин» — «Налоги» — «Ставки НДС» или, просто, переходим по ссылке https://[ВАШ ДОМЕН]/bitrix/admin/cat_vat_admin.php
Если нужная ставка отсутствует, то ее необходимо создать. Нажимаем «Добавить». Заполняем поля «Наименование» и «Ставка», затем сохраняем.
Теперь у нас создана ставка НДС 20%, которую мы будем привязывать к товарам. Из данного скриншота нам надо запомнить ID ставки 20%, он равен четырем (4). На скриншоте виден еще один интересный момент - ставка 20% для НДС 18%. Это сделано для того, чтобы при сбое ставок она рассчитывалась правильно, а название оставлено старым, для идентификации неправильного назначения ставки (такое бывает при синхронизации ставок с 1С и ошибок менеджеров при введении товара).
Установить галочку «НДС включен в цену» всем товарам и назначить новую ставку НДС 20%
Включен или не включен НДС в цену хранится в переменной "VAT_INCLUDED", которая может быть "N" (не включен) или "Y" (включен). Данная переменная записывается в поле "VAT_INCLUDED" таблицы "b_catalog_product".
На просторах интернет чаще всего предлагают воспользоваться PHP-скриптом, который по событию "добавление товара" заменяет параметр "VAT_INCLUDED" на "Y" и меняет ставку НДС на 20% (указывается ID ставки, которое, в нашем случае, равно "4").
AddEventHandler("catalog", "OnProductAdd", "OnProductAdd");
function OnProductAdd($ID,$Fields){
$res=Array("VAT_INCLUDED"=>'Y');
$res=Array("VAT_ID"=>'4');
CCatalogProduct::Update($ID,$res);
}
Но события в Битрикс штука не предсказуемая и данного события недостаточно (ставка может быть сменена при синхронизации или обновлении товара). Поэтому мы плюем на битрикс и жестко записываем ставку в SQL без возможности ее смены. Для этого выполним SQL-запрос из панели администрирования Bitrix («Настройки» — «Инструменты» — «SQL-запрос» или https:// [ВАШ ДОМЕН] /bitrix/admin/sql.php ).
Для начала добавим таблице "b_catalog_product" два триггера на момент срабатывания до вставки нового товара и до обновления товара, которые будут подменять ставку НДС на 20% и устанавливать чекбокс "НДС включен в цену". В данном коде замените [ЛОГИН БАЗЫ ДАННЫХ] на свой. Его можно найти в файле "bitrix/php_interface/dbconn.php" в строке
$DBLogin = "[ЛОГИН БАЗЫ ДАННЫХ]";
Заменяем в нижеприведенном коде [ЛОГИН БАЗЫ ДАННЫХ] на свой и вставляем в окно битрикс «SQL-запрос»:
# Триггер на обновление товара
CREATE DEFINER = '[ЛОГИН БАЗЫ ДАННЫХ]'@'localhost'
TRIGGER VAT_UPDATE_TRIGGER BEFORE UPDATE ON b_catalog_product
FOR EACH ROW
BEGIN
SET NEW.VAT_INCLUDED = 'Y'; SET NEW.VAT_ID = 4;
END
# Триггер на добавление товара
CREATE DEFINER = '[ЛОГИН БАЗЫ ДАННЫХ]'@'localhost'
TRIGGER VAT_UPDATE_TRIGGER BEFORE INSERT ON b_catalog_product
FOR EACH ROW
BEGIN
SET NEW.VAT_INCLUDED = 'Y'; SET NEW.VAT_ID = 4;
END
Жмем "Выполнить запрос". Теперь при любом обновлении или добавлении товара у нас НДС будет подменяться на 20% и устанавливаться параметр "НДС включен в цену".
UPDATE b_catalog_product SET VAT_INCLUDED = 'Y', VAT_ID = 4;
В результате выполнения данного запросы мы установим всем товарам в базе НДС 20% и включим чекбокс "НДС включен в цену".
Если одновременно указана ставка НДС для товара и ставка для всего каталога, то для данного товара будет действовать только его персональная ставка НДС, а ставка НДС для всего каталога учитываться не будет.