Событие перед записью свойств товара
На скриншоте ниже показаны условия при котором это событие сработает.

Здесь видно, что нужно выбрать хотя бы 1 свойство для соответствия при импорте. Далее галочкой отметить что нужно импортировать эти свойства в новые или существующие товары. Работает на выделенных вкладках скриншота.
[OnSetPropsForItem] Событие перед записью свойств товара
- Описание события
- Пример кода
Параметры события
| Параметр | Тип | Описание |
|---|---|---|
itemBx | array | Элемент инфоблока Битрикс |
itemMs | object | Элемент из МойСклад (объект) |
propList | array | Массив соответствий свойств (ID свойства БУС => ID свойства МС) |
arAllPropsValues | array | Все текущие свойства товара в БУС (для существующих товаров) |
arPropsSets | array | Массив свойств для записи через CIblockElement::SetPropertyValuesEx() |
isNew | bool | Флаг нового товара (true — товар создаётся, false — обновляется) |
Структура itemBx
[
'ID' => 1234,
'IBLOCK_ID' => 5,
'NAME' => 'Название товара',
'XML_ID' => 'abc123externalcode',
// ... другие поля элемента инфоблока
]
Структура propList
[
123 => 'msAttrUUID1', // ID свойства Битрикс => UUID свойства МойСклад
456 => 'msAttrUUID2',
789 => 'msAttrUUID3',
// ...
]
Структура arAllPropsValues
[
123 => [ // ID свойства Битрикс
'VALUE' => 'Текущее значение',
'DESCRIPTION' => '',
'PROPERTY_VALUE_ID' => 5678
],
456 => [
'VALUE' => '42',
'DESCRIPTION' => '',
'PROPERTY_VALUE_ID' => 5679
],
// ... другие свойства
]
Структура arPropsSets
[
123 => 'Новое значение строки', // строковое свойство
456 => 42.5, // числовое свойство
789 => 15, // ID значения списка (свойство типа "Список")
// ...
]
Возвращаемое значение
Верните EventResult::SUCCESS с модифицированным массивом $arPropsSets. Этот массив будет передан в CIBlockElement::SetPropertyValuesEx().
\Bitrix\Main\EventManager::getInstance()->addEventHandler(
'rbs.moyskladstocks',
'OnSetPropsForItem',
'OnSetPropsForItemHandler'
);
function OnSetPropsForItemHandler(\Bitrix\Main\Event $event)
{
$eventParams = $event->getParameters();
//Элемент БУС (массив)
$itemBx = $eventParams['itemBx'];
//Элемент МС (объект)
$itemMs = $eventParams['itemMs'];
//Массив импортируемых свойств модулем (ID Свойства БУС => ID Свойства МС)
$propList = $eventParams['propList'];
//Массив все текущих свойств товара в БУС (если не новый товар), нужно для сравнения
$arAllPropsValues = $eventParams['arAllPropsValues'];
//Флаг нового товара (товар создается или нет)
$isNew = $eventParams['isNew'];
//Массив, который можно менять для установки новых свойств. Данные записываются в метод CIblockElement::SetPropertyValuesEx()
$arPropsSets = $eventParams['arPropsSets'];
//$arPropsSets['PROP_1'] = 'TEST'; //К примеру меняем у свойства с кодом PROP_1 значение на 'TEST'
//Отправляем \Bitrix\Main\EventResult::SUCCESS только в случае, если нужно поменять данные перед отправкой
return new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::SUCCESS, $arPropsSets);
}