Обработчик выполняет небольшую, но очень важную функцию - он преобразует характеристики из множественного свойства типа CML2_TRAITS (где указано обычно много различных характеристик в режиме «характеристика-значение») в отдельные обычные свойства, причем делает это с минимальной усилием. Достаточно в переменно $traitsDescription указать по какому полю необходимо вытащить информацию, и указанный xml_id код прописываем в нужном свойстве. В нашем случай свойство было тип "справочник", поэтому дополнительных преобразований нам не требовались. На выходе из 1Ски мы заранее знаем xml_id и просто указываем его в свойстве товара.
Если потребуется присваивать значение просто из "Списка", то скорей всего нужно будет добавлять проверку. Получить из внешнего кода реальный 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]); } } } } }