С 14 версии ядра битрикса появился очень полезный для маркетологов механизма: наборов и комплектов.
Набор – это предложенный магазином список (рекомендованный список) до трёх товаров, которые отображаются в публичной части магазина, к основному товару для которого набор и создаётся.
Комплект – это список товаров, которые содержатся внутри комплекта и будут списаны с вашего склада при покупке. Сам комплект не имеет физического остатка, его остаток зависит от товаров, которые входят в этот комплект. Удобно применять, например мебельщикам. Для нас, как для клиента интернет-магазина, стол - это товар законченный и целый, а для них - это 4 ножки, столешница, болтики и т.д. Вы покупаете стол, а со склада списываются необходимые комплектующие, из которых состоит этот стол. Примеров применения комплектов можно найти массу.
Более подробно о данных типах товарных предложений можно почитать в презентационной статье от Юрия Волошина, поэтому останавливаться на полезностях данного механизма не буду.
В карточке каждого товара, который состоит в том или ином наборе или комплекте, логично было бы показывать наборы и комплекты, в которых данный товар состоит (в типовом интернет-магазине e-shop от 1С-Битрикс данный функционал отлично уже реализован). Для этого можно воспользоваться такой функцией:
\Bitrix\Main\Loader::includeModule('catalog');
$rsElem = CCatalogProductSet::GetList(
array(),
array(
array(
'LOGIC' => 'OR',
'TYPE' => CCatalogProductSet::TYPE_GROUP,
'TYPE' => CCatalogProductSet::TYPE_SET
),
'ITEM_ID' => $arResult['ID']),
false,
false,
array('SET_ID', 'OWNER_ID', 'ITEM_ID', 'TYPE')
);
while ($set = $rsElem->Fetch()) {
print_r($set);
}
Данная функция выберет и наборы и комплекты. Если вам нужно получить только один тип товарного предложения - оставьте нужный тип.
Для получения содержимого каждого из товарных предложений, можно воспользоваться функцией:
$arSets = CCatalogProductSet::GetList(
array(), array( "TYPE" => 1, "OWNER_ID" => $set["OWNER_ID"] ), false, false, array()
);
while( $set2 = $arSets->Fetch() ){
if( $set2["OWNER_ID"]!=$set2["ITEM_ID"] ){
echo $set2["ITEM_ID"];
}
}
Вот такой полезный механизм.

