Найти тему
High-Performance Hosting

Установить ставку НДС всем товарам в интернет-магазине на 1С Битрикс

Оглавление

Как установить ставку НДС всем товарам в интернет-магазине на 1С Bitrix? Этот вопрос возник у многих пользователей данного магазина в период смены размера ставки НДС с 18% на 20%. Битрикс предлагает заходить в каждый товар, выбирать НДС и ставить галочку «НДС включен в цену», но что делать, если у Вас много товаров?

Создаем ставку НДС 20%

Для начала нам необходимо создать ставку НДС 20%. Для этого заходим в Панель администрирования Битрикс в раздел «Магазин» — «Налоги» — «Ставки НДС» или, просто, переходим по ссылке https://[ВАШ ДОМЕН]/bitrix/admin/cat_vat_admin.php

Если нужная ставка отсутствует, то ее необходимо создать. Нажимаем «Добавить». Заполняем поля «Наименование» и «Ставка», затем сохраняем.

Добавление ставки НДС 20% в Битрикс
Добавление ставки НДС 20% в Битрикс

Теперь у нас создана ставка НДС 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% и включим чекбокс "НДС включен в цену".

SQL запрос из интерфейса Битрикс
SQL запрос из интерфейса Битрикс

Если одновременно указана ставка НДС для товара и ставка для всего каталога, то для данного товара будет действовать только его персональная ставка НДС, а ставка НДС для всего каталога учитываться не будет.