Налаштування податкових ставок по регіонам 1С-Бітрікс

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Налаштування податкових ставок по регіонам 1С-Бітрікс
Проста
~1 робочий день
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Налаштування податкових ставок за регіонами у 1C-Bitrix

Магазин працює на Беларусь та Росію з різними ставками ПДВ. Або продає цифрові товари в ЄС, де ПДВ залежить від країни покупця. Стандартна одна ставка на весь каталог тут не працює — потрібна регіональна логіка.

Групи платників податків

Bitrix реалізує регіональні ставки через механізм груп платників податків (tax groups). Таблиця b_sale_tax зберігає податкові групи, b_sale_tax_rate — ставки всередину груп з привʼязкою до регіону.

Структура b_sale_tax_rate: TAX_ID (посилання на групу), COUNTRY_ID, REGION, CITY, RATE, IS_PERCENT (Y/N), IS_IN_PRICE (Y/N — аналог VAT_INCLUDED), ACTIVE.

Створення податкової групи з регіональними ставками:

// Створити групу
$taxResult = \Bitrix\Sale\Tax::add([
    'NAME' => 'ПДВ',
    'ACTIVE' => 'Y',
    'LID' => 's1',
]);
$taxId = $taxResult->getId();

// Ставка для Беларуси
\Bitrix\Sale\TaxRate::add([
    'TAX_ID' => $taxId,
    'COUNTRY_ID' => 'BY',
    'RATE' => 20,
    'IS_PERCENT' => 'Y',
    'IS_IN_PRICE' => 'Y',
    'ACTIVE' => 'Y',
]);

// Ставка для Росії
\Bitrix\Sale\TaxRate::add([
    'TAX_ID' => $taxId,
    'COUNTRY_ID' => 'RU',
    'RATE' => 20,
    'IS_PERCENT' => 'Y',
    'IS_IN_PRICE' => 'Y',
    'ACTIVE' => 'Y',
]);

Привʼязка податків до властивостей замовлення

Визначення застосовуваної ставки відбувається в момент розрахунку кошика. Bitrix читає адресу покупця з властивостей замовлення (b_sale_order_props_value) — шукає властивість з типом LOCATION або TEXT з кодом країни/регіону.

Привʼязка податкової групи до магазину — налаштування в /bitrix/admin/sale_tax.php. Кожна група може бути активна для конкретного сайту (LID). При розрахунку кошика модуль sale викликає \Bitrix\Sale\Tax::getList() з фільтром за LID та застосовує першу відповідну ставку за країною/регіоном з адреси.

Визначення регіону покупця

Проблема механізму: покупець не завжди заповнює адресу до розрахунку кошика. Для автоматичного визначення регіону за IP використовується модуль seo — клас \Bitrix\Seo\Ip2Location. Він опитує сервіс геолокації та повертає країну/регіон.

Обробник для автопідстановки країни в кошик:

AddEventHandler('sale', 'OnSaleBasketBeforeSaved', function($basket) {
    $order = $basket->getOrder();
    if (!$order) return;

    $ip = $_SERVER['REMOTE_ADDR'];
    $location = \Bitrix\Seo\Ip2Location::getLocationByIp($ip);

    if ($location && $location['COUNTRY_CODE']) {
        // встановити властивість замовлення з кодом країни
        $propertyCollection = $order->getPropertyCollection();
        $prop = $propertyCollection->getItemByOrderPropertyCode('COUNTRY');
        if ($prop) {
            $prop->setValue($location['COUNTRY_CODE']);
        }
    }
});

Податки та ціни: відображення

Якщо у каталозі ціни з ПДВ (VAT_INCLUDED = Y), а регіональна ставка нижча (наприклад, 0% для експорту), кошик має перерахувати ціни. Bitrix це робить автоматично через механізм податків модуля sale, але лише якщо IS_IN_PRICE = Y у b_sale_tax_rate та VAT_INCLUDED = Y у b_catalog_product узгоджені.

Невідповідність цих полів — головне джерело неправильного ПДВ при регіональних ставках. Перевірочний запит для пошуку неузгоджених товарів:

SELECT cp.IBLOCK_ELEMENT_ID, cp.VAT_INCLUDED, cv.RATE
FROM b_catalog_product cp
LEFT JOIN b_catalog_vat cv ON cp.VAT_ID = cv.ID
WHERE cp.VAT_ID IS NOT NULL
AND cp.VAT_INCLUDED != 'Y';

Усі знайдені позиції потрібно привести до єдиного правила перед налаштуванням регіональних ставок.