Настройка отображения количества покупок товара 1С-Битрикс

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

Настройка отображения количества покупок товара 1С-Битрикс

Счётчик покупок на карточке товара — инструмент социального доказательства. «Куплено 847 раз» работает лучше любого баннера со скидкой. В Битрикс эти данные есть в базе, но по умолчанию нигде не выводятся — нужно извлечь их из таблиц заказов и подключить вывод в шаблоне.

Где хранятся данные о покупках

Каждая позиция заказа записывается в таблицу b_sale_basket. Ключевые поля:

  • PRODUCT_ID — ID элемента инфоблока
  • QUANTITY — количество единиц в заказе
  • ORDER_ID — привязка к заказу

Таблица b_sale_order содержит статусы заказов. Для подсчёта реальных покупок (не брошенных корзин) нужна фильтрация по статусу: поле STATUS_ID в b_sale_order. Обычно учитываются заказы со статусами 'N', 'P', 'F' — в зависимости от настроек магазина.

Запрос для подсчёта

Прямой SQL для получения количества покупок конкретного товара:

SELECT SUM(b.QUANTITY) AS total_purchased
FROM b_sale_basket b
INNER JOIN b_sale_order o ON b.ORDER_ID = o.ID
WHERE b.PRODUCT_ID = :product_id
  AND o.CANCELED = 'N'
  AND o.STATUS_ID IN ('N', 'P', 'F');

Запрос к b_sale_basket через API: CSaleBasket::GetList() с фильтром по PRODUCT_ID, но этот метод не фильтрует по статусу заказа — придётся джойнить вручную или использовать прямой запрос через $DB->Query().

Кэширование счётчика

Считать покупки при каждом просмотре карточки товара — плохая идея при нагруженном магазине. Данные кэшируются в b_iblock_element_prop через пользовательское свойство PURCHASE_COUNT с типом «Число». Агент обновляет значения по расписанию — раз в час или раз в сутки:

CIBlockElement::SetPropertyValuesEx(
    $elementId,
    $iblockId,
    ['PURCHASE_COUNT' => $totalPurchased]
);

Альтернатива — хранить счётчик в b_catalog_element через отдельное поле или в b_iblock_element через UF-поле UF_PURCHASE_COUNT.

Вывод в шаблоне

В шаблоне компонента bitrix:catalog.element (файл template.php) добавляется вывод:

$purchaseCount = (int)$arResult["PROPERTIES"]["PURCHASE_COUNT"]["VALUE"];
if ($purchaseCount > 0) {
    echo '<span class="purchase-count">Куплено ' . $purchaseCount . ' раз</span>';
}

Для более гибкого вывода (например, «237 покупок», «1 покупка», «5 покупок» с правильными окончаниями) используется функция склонения числительных.

Вариант с реальным временем

Если нужен актуальный счётчик без задержки агента — данные загружаются AJAX-запросом при открытии карточки. Компонент возвращает только структуру страницы, а счётчик подтягивается отдельным запросом к контроллеру, который выполняет SQL и возвращает JSON. Это позволяет кэшировать основной HTML-контент карточки независимо от счётчика.

Масштаб каталога Рекомендуемое обновление Метод хранения
до 1000 товаров каждый час (агент) свойство инфоблока
1000–10 000 товаров раз в сутки UF-поле
более 10 000 товаров AJAX при открытии прямой SQL + Redis

Что входит в настройку

  • Анализ статусов заказов и определение «учётных» статусов для подсчёта
  • Создание UF-свойства PURCHASE_COUNT в инфоблоке каталога
  • Написание агента для периодического пересчёта всех товаров
  • Добавление вывода счётчика в шаблон карточки товара
  • Настройка правильных окончаний для числительных