Преобразователь свойства CML2_TRAITS (из 1С) в 1С-Битрикс

Разработка
Преобразователь свойства CML2_TRAITS (из 1С) в 1С-Битрикс Обработчик выполняет небольшую, но очень важную функцию - он преобразует характеристики из множественного свойства типа 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]);
                }
            }
        }
    }
}

Похожие статьи

Сергей Эсауленко
Сергей Эсауленко

Руководитель

01.10.2025
Разработка
Как правильно дорабатывать продукты Аспро, чтобы они оставались обновляемыми
Сергей Эсауленко
Сергей Эсауленко

Руководитель

07.12.2023
Разработка
Автоматические перенаправление со штатной системы оплат Битрикса
Сергей Эсауленко
Сергей Эсауленко

Руководитель

02.11.2023
Разработка
Переопределить единицу измерения Битрикс в момент обмена с 1С
Сергей Эсауленко
Сергей Эсауленко

Руководитель

08.09.2023
Разработка
Обмен с 1С по http когда сайт работает по https
Сергей Эсауленко
Сергей Эсауленко

Руководитель

02.05.2023
Разработка
Как исправить отображение картинок в соцсетях