Покупатель принимает решение о заказе в карточке товара, и корректный показ наличия здесь напрямую влияет на конверсию и на число отменённых заказов. Разберём, откуда Битрикс берёт данные об остатках, как настроить их вывод в компоненте карточки и как не показать точные цифры конкурентам.
Откуда берётся наличие
Наличие товара в 1С-Битрикс складывается из двух независимых механизмов. Первый — количественный учёт: поле CATALOG_QUANTITY в таблице b_catalog_product, единая цифра остатка по товару. Второй — складской учёт: остатки хранятся в разрезе складов в таблице b_catalog_store_product, а поле CATALOG_QUANTITY становится суммой по всем складам.
Для карточки это принципиально: если складской учёт выключен, вы можете показать только общий остаток; если включён — доступен вывод «по складам» и «в наличии в вашем городе». Проверить режим можно в Магазин → Настройки → Настройки модуля, вкладка «Товары»: флаги «Использовать количественный учёт» и «Использовать складской учёт».
CATALOG_QUANTITY и остатки по складам приходят из учётной системы. Ручное редактирование в админке будет затёрто при следующей выгрузке.Где включается вывод в карточке
Карточку товара в типовых решениях (Аспро, «1С-Битрикс: Аспект», собственные шаблоны) рисует комплексный компонент bitrix:catalog.element. Показ наличия управляется его параметрами. Ключевые из них:
SHOW_MAX_QUANTITY— режим показа остатка:N(не показывать),M(показывать только «много/мало»),Y(показывать точную цифру);MESS_SHOW_MAX_QUANTITY— подпись «Осталось», выводимая перед количеством;RELATIVE_QUANTITY_FACTOR— порог, ниже которого товар считается «мало» при режимеM;MESS_RELATIVE_QUANTITY_MANY/MESS_RELATIVE_QUANTITY_FEW— тексты «В наличии» и «Мало».
Параметры задаются либо в визуальном редакторе компонента (кнопка «Настроить»), либо прямо в подключении компонента в файле шаблона. Само свойство остатка обязательно должно быть в списке PRODUCT_PROPERTIES / выгружаемых полей, иначе компонент его не получит.
Точное число, «мало/много» или статус
Выбор режима — это баланс между информативностью и коммерческой тайной. Точная цифра успокаивает покупателя, но раскрывает обороты конкурентам и провоцирует претензии, когда после автосписания остаток «прыгает». Относительный показ («В наличии» / «Осталось мало») снимает эти риски.
| Режим | Что видит покупатель | Когда уместно |
|---|---|---|
| Точное количество | «Осталось 7 шт.» | Штучные, дорогие или дефицитные товары |
| Относительный (M) | «В наличии» / «Мало» | Массовый ассортимент, розница |
| Только статус | «В наличии» / «Под заказ» | Когда остаток неточен или синхронизация с задержкой |
Порог «мало» задаётся через RELATIVE_QUANTITY_FACTOR: например, значение 5 покажет «Мало» при остатке 1–5 и «В наличии» при большем. Для торговых предложений (SKU) наличие считается по конкретному предложению, а не по родительскому товару, — это важно учитывать в шаблоне выбора цвета/размера.
Показ остатков по складам
Когда включён складской учёт, в карточке можно вывести таблицу «Наличие в магазинах». За это отвечает компонент bitrix:catalog.store.amount (или блок внутри catalog.element, использующий его логику). Он показывает остаток по каждому активному складу, его адрес, телефон и график из настроек склада в Магазин → Склады.
- склады, у которых снят флаг «Показывать в публичной части», в карточку не попадают;
- можно ограничить вывод только складами с ненулевым остатком параметром компонента;
- для точек самовывоза адрес и координаты берутся из карточки склада — они же используются на схеме проезда.
QUANTITY − QUANTITY_RESERVED, а не голый CATALOG_QUANTITY.Кастомизация вывода в шаблоне
Стандартных подписей часто недостаточно — нужен свой бейдж «В наличии», кнопка «Уведомить о поступлении» или текст «Доставим за 2 дня». Правьте это в шаблоне компонента, скопировав его в /local/templates/ваш_шаблон/components/bitrix/catalog.element/.default/. Никогда не редактируйте оригинал в /bitrix/components/ — обновление затрёт изменения.
В файле template.php остаток доступен в массиве $arResult: общий — в $arResult['CATALOG_QUANTITY'], а для предложений — в $arResult['OFFERS'][n]['CATALOG_QUANTITY']. Для JS-логики (пересчёт статуса при смене SKU без перезагрузки) значения прокидываются в JCatalogElement через $arResult['JS_OFFERS']. Тексты и пороги удобно вынести в языковой файл lang/ru/template.php, а не хардкодить в разметке.
Кэш, задержки и типовые ошибки
Карточка кэшируется компонентом, и это первая причина «неправильных» остатков: покупатель видит вчерашнее число, потому что кэш ещё не сбросился. Битрикс сбрасывает кэш каталога по тегированному кэшу при изменении товара, но при обмене с 1С и при автосписании теги не всегда инвалидируются вовремя.
- проверьте, что включён управляемый кэш (тегированный) в настройках главного модуля;
- при композитном сайте наличие часто выносят в динамическую область или подгружают AJAX-запросом, иначе композит покажет «замороженный» остаток;
- после массовой выгрузки из 1С полезно сбрасывать кэш каталога агентом или событием
OnAfterIBlockElementUpdate.
Вторая частая ошибка — показ точного числа при неточном учёте. Если склад ведётся в 1С с интервальной синхронизацией, честнее показывать статус, а не цифру, которая отстаёт на несколько часов.
Итог
Показ наличия — это связка из трёх решений: какой учёт включён (количественный или складской), в каком режиме выводить остаток (точное число, «мало/много» или статус) и как учесть резерв и кэш, чтобы цифра не врала. Всё настраивается параметрами bitrix:catalog.element и правкой копии его шаблона в /local/, а данные приходят из полей каталога или обмена с 1С.
Если нужно вывести наличие «по-человечески» — с резервом, порогами, бейджами и корректным сбросом кэша на композитном сайте, — мы настраиваем это под ваш каталог и связываем с обменом 1С, чтобы остатки в карточке совпадали с реальным складом.
Частые вопросы
Где включить показ количества в карточке товара?
В настройках компонента bitrix:catalog.element, параметр SHOW_MAX_QUANTITY. Значение Y выводит точную цифру, M — относительный статус «мало/много», N скрывает остаток.
Можно ли показывать «В наличии» без точного числа?
Да, для этого выберите режим M и задайте порог RELATIVE_QUANTITY_FACTOR. Покупатель увидит «В наличии» или «Мало», а конкретная цифра остатка останется скрытой.
Как вывести остатки по нескольким складам?
Нужен включённый складской учёт и компонент bitrix:catalog.store.amount. В публичную часть попадают только склады с флагом «Показывать в публичной части».
Почему в карточке остаток не совпадает с реальным?
Чаще всего из-за кэша каталога или композита, который показывает старое значение, либо из-за резерва под неоплаченные заказы. Проверьте тегированный кэш и учитывайте QUANTITY_RESERVED.
Как показывать наличие для торговых предложений?
Остаток считается по конкретному SKU из массива OFFERS, а не по родительскому товару. При смене цвета или размера статус пересчитывается на стороне JS через JS_OFFERS.
Откуда брать доступное к заказу количество?
Из разницы QUANTITY минус QUANTITY_RESERVED. Голое поле CATALOG_QUANTITY не учитывает зарезервированный под другие заказы товар.
Как изменить текст «Осталось» на свой бейдж?
Скопируйте шаблон компонента catalog.element в /local/templates/ и правьте template.php, вынося тексты в языковой файл. Оригинал в /bitrix/components/ трогать нельзя — обновление его перезапишет.
Что показывать, если остаток из 1С приходит с задержкой?
Безопаснее выводить статус «В наличии/Под заказ», а не точную цифру. Число, отстающее на несколько часов, чаще приводит к отменённым заказам и претензиям.
Поможем с настройкой и поддержкой 1С-Битрикс: Управление сайтом
Поможем с настройкой, доработкой и поддержкой 1С-Битрикс: Управление сайтом.