Обработчик выполняет небольшую, но очень важную функцию - он преобразует характеристики из множественного свойства типа CML2_TRAITS (где указано обычно много различных характеристик в режиме «характеристика-значение») в отдельные обычные свойства, причем делает это с минимальной усилием. Достаточно в переменно $traitsDescription указать по какому полю необходимо вытащить информацию, и указанный xml_id код прописываем в нужном свойстве. В нашем случай свойство было тип "справочник", поэтому дополнительных преобразований нам не требовались. На выходе из 1Ски мы заранее знаем xml_id и просто указываем его в свойстве товара.Если потребуется присваивать значение просто из "Списка", то скорей всего нужно будет добавлять проверку. Получить из внешнего кода реальный ID значения, и присвоить его к списку.
/** для кастомизации логики из 1Ски **/
$eventManager->addEventHandler('iblock', 'OnAfterIBlockElementAdd', 'eventOnUpdate');
$eventManager->addEventHandler('iblock', 'OnAfterIBlockElementUpdate', 'eventOnUpdate');
function eventOnUpdate($fields)
{
$requestParams = \Bitrix\Main\Context::getCurrent()->getRequest()->toArray();
//получаем свойства
$props = [];
\CIBlockElement::GetPropertyValuesArray($props, $fields['IBLOCK_ID'], ['ID' => $fields['ID']], ['CODE' => ['CML2_TRAITS', 'AKTSIYA', 'NOVINKA', 'SOVETUEM', 'KHIT', 'HIT']]);
if ($requestParams['type'] == 'catalog' && $requestParams['mode'] == 'import') {
//ставим пометку о доступности товара на главную страницу
\CIBlockElement::SetPropertyValueCode($fields['ID'], 'SHOW_ON_INDEX_PAGE', [["VALUE" => 381]]);
//проставляем из реквизитов данные
if(!empty($props[$fields['ID']]['CML2_TRAITS']['VALUE'])){
//выдергиваем информацию
foreach ($props[$fields['ID']]['CML2_TRAITS']['DESCRIPTION'] as $keyDescription=>$traitsDescription){
//разделяем на массив полученную информацию
$traitsValue = explode(',', $props[$fields['ID']]['CML2_TRAITS']['VALUE'][$keyDescription]);
if($traitsDescription === 'Сегменты номенклатуры'){
\CIBlockElement::SetPropertyValuesEx($fields['ID'], $fields['IBLOCK_ID'], ['SEGMENTS_NOMENCLATURE' => $traitsValue]);
}
if($traitsDescription === 'Ценовая группа'){
\CIBlockElement::SetPropertyValuesEx($fields['ID'], $fields['IBLOCK_ID'], ['PRICE_GROUP' => $traitsValue]);
}
}
}
}
}