В result_modifier.php шаблона компонента catalog.element добавить это:
if(empty($arSKUPropList)){
foreach($arResult["OFFERS"] as $arOffer){
foreach($arOffer["PROPERTIES"] as $propName=>$arProp){
if(in_array($propName,$arParams['OFFER_TREE_PROPS']) && $arProp["PROPERTY_TYPE"]=="S"){
if($arProp["VALUE"]!=""){
$arProp["VALUE"] = str_replace("_"," ",$arProp["VALUE"]);//javascript разбивает массив по _
$arResult["OFFERS"][$keyOffer]["PROPERTIES"][$propName]["VALUE"] = $arProp["VALUE"];
$arResult["OFFERS"][$keyOffer]["DISPLAY_PROPERTIES"][$propName]["VALUE"] = $arProp["VALUE"];//свойство строковое, так что все ОК if(!isset($arSKUPropList[$propName]["ID"])){
$arSKUPropList[$propName]["ID"] = $arProp["ID"];
}
if(!isset($arSKUPropList[$propName]["CODE"])){
$arSKUPropList[$propName]["CODE"] = $arProp["CODE"];
}
if(!isset($arSKUPropList[$propName]["NAME"])){
$arSKUPropList[$propName]["NAME"] = $arProp["NAME"];
}
if(!isset($arSKUPropList[$propName]["SORT"])){
$arSKUPropList[$propName]["SORT"] = $arProp["SORT"];
}
if(!isset($arSKUPropList[$propName]["PROPERTY_TYPE"])){
$arSKUPropList[$propName]["PROPERTY_TYPE"] = $arProp["PROPERTY_TYPE"];
}
if(!isset($arSKUPropList[$propName]["LINK_IBLOCK_ID"])){
$arSKUPropList[$propName]["LINK_IBLOCK_ID"] = $arProp["LINK_IBLOCK_ID"];
}
$arSKUPropList[$propName]["VALUES"][$arProp["VALUE"]] = array(//$arSKUPropList[$propName]["VALUES"][$arProp["PROPERTY_VALUE_ID"]] = array(
"ID"=>$arProp["VALUE"],
"NAME"=>$arProp["VALUE"],
"OFFER_ID"=>$arOffer["ID"],
);
if(!isset($arSKUPropList[$propName]["SHOW_MODE"])){
$arSKUPropList[$propName]["SHOW_MODE"] = "TEXT";
}
if(!isset($arSKUPropList[$propName]["VALUES_COUNT"])){
$arSKUPropList[$propName]["VALUES_COUNT"] = 0;
}
$arSKUPropList[$propName]["VALUES_COUNT"]+=1;
}
}
}
}
foreach($arSKUPropList as $propName=>$arProp){
$values = $arSKUPropList[$propName]["VALUES"];
ksort($values);
$arSKUPropList[$propName]["VALUES"] = $values;
}
$arSKUPropIDs = array_keys($arSKUPropList);
}
И добавить следующий фрагмент туда, где заполняется $arMatrix, между elseif (‘L’ == $arSKUPropList[$strOneCode][‘PROPERTY_TYPE’]) и elseif (‘E’ == $arSKUPropList[$strOneCode][‘PROPERTY_TYPE’])
elseif ('S' == $arSKUPropList[$strOneCode]['PROPERTY_TYPE'])
{
$currentSku[$keyOffer][] = $arOffer['DISPLAY_PROPERTIES'][$strOneCode];
$arCell['VALUE'] = $arOffer['DISPLAY_PROPERTIES'][$strOneCode]['VALUE'];
//$arCell['PROPERTY_VALUE_ID'] = (int)$arOffer['DISPLAY_PROPERTIES'][$strOneCode]['PROPERTY_VALUE_ID'];
}
Выбор предложений идет по значению свойства, а не ID сохраненного значения; т.е. если будет два полностью одинаковых предложения с разной ценой — выбор не сработает; значения должны быть разными. Для нескольких свойств все также работает хорошо.