Настройка контрактных цен для дилеров 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Настройка контрактных цен для дилеров 1С-Битрикс
Простая
~1 рабочий день
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1240
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    844
  • 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 Appointment Booking Widget for a Medical Center
    582
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    749
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    981

Настройка контрактных цен для дилеров 1С-Битрикс

Контрактная цена — это зафиксированная в договоре цена на конкретный артикул для конкретного дилера. Она не зависит от групповых скидок и актуальна строго в период действия договора. Задача — реализовать именно этот приоритет: контрактная цена перекрывает всё остальное, но только для тех позиций и только в срок действия.

Почему стандартные скидки не подходят

Модуль 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. Агент Битрикс читает файл, находит дилера по 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 недели.