Обучаю битриксу программистов, интеграторов. Подробнee ⇒

Поиск в каталоге crm по артикулу для коробки



В каталоге CRM не работает фильтр по артикулу.
Ниже решение для коробки с правкой ядра

Если править ядро не хотите, то можно добавить артикул в наименование:
[*]можно обработчиком на события OnBeforeIBlockElementAdd, OnBeforeIBlockElementUpdate.
[*]если товары из 1С льются, то лучше в настройках модуля на стороне 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;
         }
      }
Если блог был полезным, можете угостить меня "чашечкой кофе" :)

Сбер по номеру телефона +7 (953) 585-13-09 Вероника.
Спасибо!