Налаштування контрактних цін для дилерів 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

Налаштування контрактних цін для дилерів в 1С-Bitrix

Контрактна ціна — це зафіксована в договорі ціна на конкретний артикул для конкретного дилера. Вона не залежить від групових скидок та актуальна строго в період дії договору. Завдання — реалізувати саме цей пріоритет: контрактна ціна перекриває всі інше, але тільки для тих позицій та тільки в строк дії.

Чому стандартні скидки не підходять

Модуль catalog надає скидки (CCatalogDiscount) та типи цін (b_catalog_group). Скидки задаються в процентах або фіксованою сумою, застосовуються до типу ціни. Для контрактних цін це не підходить: договірна ціна — це абсолютне значення, не похідне від базової. Якщо базова ціна змінилась, контрактна повинна залишитись колишньою.

Зберігання контрактних цін

Створюємо Highload-блок dealer_contract_prices. Таблиця генерується автоматично по імені блока. Поля:

Поле Тип Опис
UF_DEALER_ID Integer ID дилерської компанії
UF_PRODUCT_ID Integer ID товару в інфоблоці
UF_XML_ID String Артикул (для синхронізації з 1С)
UF_PRICE Double Контрактна ціна
UF_CURRENCY String Валюта
UF_DATE_FROM DateTime Початок дії
UF_DATE_TO DateTime Кінець дії
UF_ACTIVE Boolean Активність

Індекс по (UF_DEALER_ID, UF_PRODUCT_ID, UF_ACTIVE) — обов'язковий, інакше вибірка при великому обсязі буде повільною.

Логіка застосування ціни

Реалізується через кастомний провайдер цін, підключений до події OnSaleBasketBeforeSaved або через розширення Bitrix\Catalog\v2\Price. Алгоритм:

  1. Визначаємо дилерську компанію поточного користувача з сеансу
  2. Шукаємо в dealer_contract_prices запис з UF_DEALER_ID = компанія, UF_PRODUCT_ID = товар, UF_DATE_FROM ≤ сьогодні ≤ UF_DATE_TO, UF_ACTIVE = true
  3. Якщо запис знайдено — використовуємо UF_PRICE як остаточну ціну, ігноруємо тип ціни групи
  4. Якщо не знайдено — відкатуємось до стандартного типу ціни дилера по його групі в b_catalog_price

Результат кешується в memcached/Redis по ключу contract_price_{dealerId}_{productId} на 1 годину. Інвалідація — при оновленні запису в Highload-блоці через обробник події OnAfterHLBlockElementUpdate.

Завантаження контрактних цін з 1С

Контрактні ціни ведуться в 1С. Синхронізація через агент:

  1. 1С виключає XML з контрактними позиціями: дилер (код в 1С), артикул, ціна, період
  2. Агент Bitrix читає файл, знаходить дилера по UF_1C_ID у Highload-блоці компаній
  3. Знаходить товар по XML_ID в b_iblock_element
  4. Створює/оновлює запис в dealer_contract_prices
  5. Істекші записи помічає UF_ACTIVE = false

Частота синхронізації — при оновленні прайсів в 1С (подійково) або по крону 2 рази на добу.

Відображення в каталозі

Для авторизованого дилера рядом з ціною показуємо мітку «Контрактна» або «По договору №...». Це дає впевненість, що ціна застосована коректно. Реалізується в result_modifier.php компонента каталога: до даних товару додаємо прапорець IS_CONTRACT_PRICE та номер договору.

Налаштування хранилища та логіки застосування контрактних цін: 1–2 тижні. Включаючи інтеграцію з виключенням з 1С — 2–3 тижні.