Когда товара нет на складе, покупатель не должен уходить с пустыми руками. Механизм «Сообщить о поступлении» в 1С-Битрикс собирает e-mail заинтересованных и автоматически рассылает письма, как только остаток снова станет положительным. Разберём, где это включается, какое почтовое событие срабатывает и как вывести кнопку в шаблоне карточки товара.
Как работает механизм подписки на наличие
За функцию отвечает модуль Каталог (catalog) в связке с модулем Подписка на товары (sale, объект CCatalogProductSubscribe). Логика простая: пользователь, увидев в карточке товар с нулевым или отрицательным остатком, оставляет свой e-mail. Битрикс сохраняет запись подписки, привязанную к PRODUCT_ID и пользователю (авторизованному или анонимному).
Когда остаток товара пересекает порог доступности (появляется количество либо снимается флаг «нет в наличии»), срабатывает обработчик, который формирует почтовое событие и помечает подписку как отработанную, чтобы письмо не ушло повторно.
- подписка хранится в таблице
b_catalog_product2subscribe; - отправка выполняется не мгновенно, а через агент — фоновую задачу Битрикса;
- после успешной рассылки запись деактивируется (поле
ACTIVE).
Где включается в админке
Базовая настройка — в параметрах модуля каталога: Настройки → Настройки продукта → Настройки модулей → Торговый каталог. Проверьте два условия работы механизма:
- у товара включён учёт количества либо флаг наличия — иначе система не понимает, когда товар «поступил»;
- в настройках каталога разрешена подписка на уведомление о поступлении.
Далее сам вывод формы задаётся на уровне комплексного компонента bitrix:catalog или отдельного catalog.element. В параметрах компонента карточки есть группа настроек подписки — ключевой параметр USE_PRODUCT_QUANTITY и флаг показа блока подписки для отсутствующих товаров.
Почтовое событие и шаблон письма
За текст уведомления отвечает почтовое событие типа CATALOG_PRODUCT_SUBSCRIBE. Настраивается оно в разделе Настройки → Настройки продукта → Почтовые события — там же задаётся шаблон письма, привязанный к нужному сайту.
В шаблоне доступны почтовые макросы-поля события:
| Поле | Назначение |
|---|---|
#EMAIL_TO# | адрес получателя подписки |
#NAME# | название товара |
#PAGE_URL# | ссылка на карточку товара |
#CHECKOUT_URL# | ссылка на оформление / отписку |
Убедитесь, что для шаблона указан корректный отправитель (#DEFAULT_EMAIL_FROM# из настроек главного модуля) и что письмо привязано к LID нужного сайта — иначе рассылка на многосайтовой конфигурации уйдёт не по тому шаблону.
Агент рассылки уведомлений
Проверку поступления и постановку писем в очередь выполняет агент модуля каталога CCatalogProductSubscribe::checkProducts() (в старых версиях — CCatalogProduct::ProductSubscription()). Список активных агентов — в Настройки → Настройки продукта → Агенты.
- агент должен быть активен и иметь адекватный интервал (обычно 300–600 секунд);
- если сайт работает на кроне (
define("BX_CRON", true)), убедитесь, что задачаcron_events.phpреально запускается по расписанию; - сами письма ставятся в очередь
b_eventи разбираются почтовым агентом отправки.
b_event при большом объёме разгребается порциями. На боевых магазинах переводите агенты и почту на крон.Вывод кнопки в шаблоне карточки
Чтобы кнопка появилась, шаблон компонента карточки должен проверять доступность товара и при её отсутствии показывать форму подписки. В типовом шаблоне catalog.element это блок, работающий с массивом $arResult["CATALOG_CAN_BUY"] и параметрами количества.
Форма отправляет данные на компонент bitrix:catalog.product.subscribe, который принимает PRODUCT_ID и e-mail. Минимальный вызов из шаблона:
$APPLICATION->IncludeComponent("bitrix:catalog.product.subscribe", "", array("PRODUCT_ID" => $arResult["ID"], "NOTIFY_USE_CAPTCHA" => "N", "NOTIFY_OK_TEXT" => "Мы сообщим о поступлении"));
- условие показа:
if (!$arResult["CATALOG_CAN_BUY"] && $arResult["CATALOG_SUBSCRIBE"] == "Y"); - для товаров с торговыми предложениями кнопку вешают на конкретный выбранный SKU, а не на родителя;
- после доработки не забудьте очистить кэш компонента карточки.
Диагностика и типовые ошибки
Если механизм ведёт себя не так, проверяйте по цепочке — от подписки до письма:
| Симптом | Где искать |
|---|---|
| Кнопка не выводится | наличие товара, CATALOG_SUBSCRIBE, кэш шаблона |
| Подписка не сохраняется | вызов catalog.product.subscribe, права, капча |
| Письмо не уходит | активность агента, крон, очередь b_event |
| Письмо приходит повторно | деактивация подписки после отправки |
Полезно временно включить журнал ошибок отправки почты и посмотреть таблицу b_event на предмет застрявших писем со статусом N. Для отладки удобно вызвать проверку поступления вручную из консоли или через tools/-скрипт с правами администратора.
Итог
«Сообщить о поступлении» — это связка из четырёх звеньев: учёт наличия в каталоге, компонент подписки в карточке, почтовое событие CATALOG_PRODUCT_SUBSCRIBE и агент рассылки на кроне. Ошибка в любом из них ломает всю цепочку, поэтому диагностировать её нужно последовательно.
Если механизм нужно встроить в нестандартный шаблон, связать с торговыми предложениями или гарантировать доставку писем на нагруженном магазине — мы в B2Bsite настраиваем подписку на наличие под ваш каталог и складской учёт, включая корректный обмен остатками с 1С.
Частые вопросы
Какой модуль отвечает за «Сообщить о поступлении»?
Механизм работает на модуле «Торговый каталог» в связке с подпиской на товары. За проверку поступления отвечает объект CCatalogProductSubscribe.
Где хранятся подписки на наличие?
Записи лежат в таблице b_catalog_product2subscribe и привязаны к идентификатору товара и e-mail подписчика. После отправки письма подписка деактивируется.
Какое почтовое событие настраивать?
Тип события — CATALOG_PRODUCT_SUBSCRIBE. Шаблон письма и отправителя задают в разделе «Почтовые события», обязательно привязав шаблон к нужному сайту.
Почему письма о поступлении не приходят?
Чаще всего неактивен агент рассылки или сайт работает на хитах вместо крона. Проверьте активность агента и разбор очереди b_event почтовым агентом.
Как вывести кнопку в карточке товара?
В шаблоне карточки при недоступности товара подключают компонент bitrix:catalog.product.subscribe с параметром PRODUCT_ID. После правки шаблона нужно очистить кэш.
Можно ли подписаться неавторизованному пользователю?
Да, подписка сохраняется по указанному e-mail даже для анонимного посетителя. Для защиты от спама в компоненте можно включить капчу.
Работает ли механизм с торговыми предложениями?
Да, но кнопку подписки следует привязывать к конкретному выбранному SKU, а не к родительскому товару, чтобы уведомление касалось нужного предложения.
Как связать наличие с остатками из 1С?
Наличие обновляется при обмене остатками между 1С и Битриксом. Как только импорт вернёт положительный остаток, агент подхватит изменение и разошлёт письма подписчикам.
Поможем с настройкой и поддержкой 1С-Битрикс: Управление сайтом
Поможем с настройкой, доработкой и поддержкой 1С-Битрикс: Управление сайтом.