Введение и базовые концепции

Модуль Торговый каталог добавляет к элементам инфоблоков инструменты для продажи товаров.

  • Инфоблок хранит карточку товара.

  • Каталог хранит торговые данные товара.

Торговый каталог не заменяет модуль Информационные блоки. Для работы с товарами нужны оба модуля: iblock отвечает за структуру контента, а catalog добавляет данные, которые нужны для продажи и складского учета.

Подробнее о модуле Информационные блоки

Модуль Торговый каталог работает вместе с модулем Интернет-магазин. Каталог хранит товары, цены и остатки, а Интернет-магазин использует эти данные в корзине и заказах.

Основные термины

Инфоблок товаров — инфоблок, в котором хранятся карточки товаров: названия, описания, изображения, свойства и разделы.

Каталог — инфоблок товаров, подключенный к модулю catalog. После подключения элементы инфоблока можно продавать как товары. К товарам можно добавлять цены, остатки, НДС, единицы измерения и другие параметры для продажи.

Товар — элемент инфоблока, у которого есть данные для продажи: цена, остаток, доступность и другие параметры.

Тип товара — признак, который показывает, как товар продается. Например, товар с торговыми предложениями продается через варианты, комплект состоит из нескольких товаров, услуга не требует складского остатка.

Торговое предложение — вариант товара со своим размером, цветом или комплектацией. У каждого предложения могут быть свои цена, остаток и доступность.

Цена — стоимость товара или торгового предложения. Цена относится к типу цены и валюте.

Тип цены — категория цены, например розничная или оптовая. Права на тип цены задают, кто может видеть эту цену и покупать по ней.

НДС — налоговая ставка. В товаре указывают ставку и признак, который показывает, входит ли НДС в цену.

Единица измерения — способ измерить товар: штука, упаковка, метр или другое значение.

Склад — место хранения товара. Модуль хранит общий остаток товара и остатки по конкретным складам.

Складской документ — документ движения товара: приход, списание, перемещение, возврат или корректировка.

Скидка и купон — правила изменения цены и коды, по которым покупатель получает скидку. Скидки можно привязать к товарам, разделам, группам пользователей и другим условиям.

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

Простые товары и торговые предложения

Простой товар продается как один элемент инфоблока. У него есть собственные цены, остатки и параметры доступности.

Для товаров с вариантами создавайте торговые предложения. Товар с торговыми предложениями использует два инфоблока. Родительский товар хранит общее описание, а инфоблок предложений хранит варианты товара. Каждое предложение имеет собственные цены и остатки, поэтому покупатель добавляет в корзину конкретное предложение.

Как устроены данные

Товар состоит из двух связанных частей.

  1. Элемент инфоблока хранит контент и пользовательские свойства.

  2. Запись в таблицах модуля Торговый каталог хранит торговые параметры.

Идентификатор товара совпадает с идентификатором элемента инфоблока. Например, поле ID в таблице b_catalog_product ссылается на элемент инфоблока, а поле PRODUCT_ID в b_catalog_price ссылается на тот же товар.

Где хранится

Данные

Инфоблок

Название, символьный код, изображения, описания, разделы, пользовательские свойства

Торговый каталог

Тип товара, цены, остатки, доступность, НДС, единицы измерения, склады, скидки, связь с торговыми предложениями

Подробнее в статье Схема работы торгового каталога и основные объекты.

Настройки в интерфейсе продукта

Настройки модуля находятся в разделе Настройки > Настройки продукта > Настройки модулей > Торговый каталог. На странице задают общее поведение каталога:

  • настройки карточки товара: сохранение товаров без цен, работу с диапазонами цен, показ вкладки Торговый каталог,

  • значения товарных параметров по умолчанию: количественный учет, покупку при отсутствии товара, подписку на отсутствующий товар,

  • складской учет и резервирование,

  • хранение просмотренных товаров,

  • поведение формы выбора товаров,

  • параметры подписки на товары,

  • настройки экспорта и импорта,

  • связь инфоблоков с торговым каталогом и инфоблоками предложений,

  • права доступа к модулю.

Модель каталога строится вокруг элемента инфоблока и товарных записей. Определите структуру инфоблоков и настройте торговые каталоги. После этого добавляйте товары, цены и остатки.

Данные каталогов настраивают на отдельных страницах административного интерфейса.

  • Инфоблок товаров, свойства, разделы и элементы — в разделе Контент.

  • Торговые предложения — в связанном инфоблоке предложений в разделе Контент.

  • Типы цен, НДС, единицы измерения, склады — в разделе Магазин.

Компоненты каталога

Для вывода каталога на сайте используйте компоненты. Компонент получает данные из инфоблоков и торгового каталога, применяет параметры показа и передает результат в шаблон.

Компоненты позволяют вывести список разделов, список товаров, детальную страницу товара, торговые предложения, цены, доступность и элементы корзины. Конкретный набор данных зависит от параметров компонента и шаблона.

Подробнее о работе компонентов читайте в статье Компоненты.

API модуля

Перед использованием API подключите модули iblock и catalog.

\Bitrix\Main\Loader::includeModule('iblock');
        \Bitrix\Main\Loader::includeModule('catalog');
        

В модуле торгового каталога нет универсального API. Выбор зависит от задачи.

  • D7-модели каталога используйте для операций, которые меняют товарные данные. Для товарных параметров применяйте \Bitrix\Catalog\Model\Product, для цен — \Bitrix\Catalog\Model\Price. Модели проверяют данные, вызывают события модуля и возвращают результат с ошибками, если операция не выполнена.

  • D7 ORM-классы *Table используйте для чтения данных и работы со справочниками каталога. С помощью этих классов можно получить типы цен, НДС, единицы измерения, склады, остатки и подписки. Прямая запись в таблицы каталога может нарушить связи между товаром, ценами, остатками и доступностью.

  • Классическое API используйте там, где для сценария нет полной D7-замены. Например, через классические методы создают связь инфоблока с каталогом, настраивают связь с торговыми предложениями и проводят складские документы.

Пример. Подключим модули, зарегистрируем инфоблок как простой торговый каталог, получим базовый тип цены, добавим товарные параметры к элементу инфоблока и создадим цену.

// Перед запуском примера подготовьте:
        // $productIblockId — идентификатор инфоблока товаров
        // $productId — идентификатор элемента инфоблока, который станет товаром
        
        // Подключить модули для работы с инфоблоками и торговым каталогом
        \Bitrix\Main\Loader::includeModule('iblock');
        \Bitrix\Main\Loader::includeModule('catalog');
        
        // Зарегистрировать инфоблок как простой торговый каталог без торговых предложений
        $catalogCreated = \CCatalog::Add([
            'IBLOCK_ID'         => $productIblockId,
            'YANDEX_EXPORT'     => 'N',
            'SUBSCRIPTION'      => 'Y',
            'VAT_ID'            => 0,
            'PRODUCT_IBLOCK_ID' => 0,
            'SKU_PROPERTY_ID'   => 0,
        ]);
        
        if (!$catalogCreated)
        {
            throw new \RuntimeException('Не удалось создать торговый каталог');
        }
        
        // Получить базовый тип цены для добавления цены товара
        $basePriceType = \Bitrix\Catalog\GroupTable::getBasePriceType();
        
        if (!$basePriceType)
        {
            throw new \RuntimeException('Базовый тип цен не найден');
        }
        
        $basePriceTypeId = (int)$basePriceType['ID'];
        
        // Добавить товарные параметры к элементу инфоблока
        $productResult = \Bitrix\Catalog\Model\Product::add([
            'ID'             => $productId,
            'TYPE'           => \Bitrix\Catalog\ProductTable::TYPE_PRODUCT,
            'QUANTITY'       => 15,
            'QUANTITY_TRACE' => 'Y',
            'CAN_BUY_ZERO'   => 'N',
            'SUBSCRIBE'      => 'Y',
        ]);
        
        // Проверить результат создания товара
        if (!$productResult->isSuccess())
        {
            throw new \RuntimeException(implode('; ', $productResult->getErrorMessages()));
        }
        
        // Добавить базовую цену товара
        $priceResult = \Bitrix\Catalog\Model\Price::add([
            'PRODUCT_ID'       => $productId,
            'CATALOG_GROUP_ID' => $basePriceTypeId,
            'PRICE'            => 1250.00,
            'CURRENCY'         => 'RUB',
        ]);
        
        // Проверить результат создания цены
        if (!$priceResult->isSuccess())
        {
            throw new \RuntimeException(implode('; ', $priceResult->getErrorMessages()));
        }
        

Подробнее про устройство каталога читайте в статье Схема работы торгового каталога и основные объекты.

Практические сценарии описаны в статьях Как выбрать API торгового каталога, Базовые настройки каталога и Работа с товарами и торговыми предложениями.