Перейти к содержанию

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

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

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

Торговый каталог не заменяет модуль Информационные блоки. Для работы с товарами нужны оба модуля: 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 торгового каталога, Базовые настройки каталога и Работа с товарами и торговыми предложениями.