| В каталоге CRM не работает фильтр по артикулу. Ниже решение для коробки с правкой ядра Если править ядро не хотите, то можно добавить артикул в наименование: [*]можно обработчиком на события OnBeforeIBlockElementAdd, OnBeforeIBlockElementUpdate. [*]если товары из 1С льются, то лучше в настройках модуля на стороне 1С через Свой Алгоритм |

/bitrix/components/bitrix/catalog.product.search/class.php
скопировать в папку /local/components/bitrix/catalog.product.search/ весь компонент
метод getMixedList
стр. 402 заменяем выборку элементов на такое, где CML2_ARTICLE - наш код свойства
$obElement = new \CIBlockElement;
if(!empty($_REQUEST['QUERY']) && ($_REQUEST['caller']=='crm_entity_product_list')){
$arNewFilter = [
"LOGIC"=>"OR",
$arElementFilter,
["IBLOCK_ID"=>$arElementFilter["IBLOCK_ID"],"%PROPERTY_CML2_ARTICLE"=>$_REQUEST['QUERY'],'ACTIVE'=>"Y"]
];
}
else{
$arNewFilter = $arElementFilter;
}
$rsElement = $obElement->GetList($arOrder, $arNewFilter, false, false, $arSelectedFields);
while ($arElement = $rsElement->Fetch()){
$arElement["TYPE"] = "E";
$arResult[] = $arElement;
}
unset($arElement, $rsElement, $obElement); |
2. для поиска напрямую в списке товаров во вкладе

/bitrix/modules/catalog/lib/v2/Integration/UI/EntitySelector/ProductProvider
метод getProductsBySearchString
примерно стр. 335
немного меняем код
if ($searchString !== '')
{
$simpleProductFilterTemp = [
'LOGIC' => 'OR',
'*SEARCHABLE_CONTENT' => $searchString,
'PRODUCT_BARCODE' => $searchString . '%',
];
if($iblockInfo->getProductIblockId() == 25){ //вместо 25 ваш iblockId
$simpleProductFilterTemp["%PROPERTY_CML2_ARTICLE"]=$searchString; // CML2_ARTICLE - ваш код свойства
}
$simpleProductFilter = [$simpleProductFilterTemp];
if ($iblockInfo->canHaveSku())
{
$productFilterTemp = [
'LOGIC' => 'OR',
'*SEARCHABLE_CONTENT' => $searchString,
'=ID' => \CIBlockElement::SubQuery('PROPERTY_' . $iblockInfo->getSkuPropertyId(), [
'CHECK_PERMISSIONS' => 'Y',
'MIN_PERMISSION' => 'R',
'ACTIVE' => 'Y',
'ACTIVE_DATE' => 'Y',
'IBLOCK_ID' => $iblockInfo->getSkuIblockId(),
'*SEARCHABLE_CONTENT' => $searchString,
]),
'PRODUCT_BARCODE' => $searchString . '%',
];
if($iblockInfo->getProductIblockId() == 25){ //вместо 25 ваш iblockId
$productFilterTemp["%PROPERTY_CML2_ARTICLE"]=$searchString; // CML2_ARTICLE - ваш код свойства
}
$productFilter[] = $productFilterTemp;
$offerFilter = $simpleProductFilter;
}
else
{
$productFilter[] = $simpleProductFilter;
}
} |