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

Здесь видно, что нужно выбрать хотя бы 1 свойство для соответствия при импорте. Далее галочкой отметить что нужно импортировать эти свойства в новые или существующие товары. Работает на выделенных вкладках скриншота.
[OnSetPropsForItem] Событие перед записью свойств товара
Когда вызывается:
- при создании — для каждого созданного элемента, если включён импорт свойств и сопоставлено хотя бы одно свойство;
- при обновлении — для каждого элемента порции, если включена опция обновления свойств и список сопоставления непуст. Список к этому моменту мог заменить обработчик
OnBeforeGetPropsValues.
CIBlockElement::SetPropertyValuesEx() модуль вызывает, только если итоговый arPropsSets непуст. Для нового элемента он передаётся с флагом NewElement => 'Y'.
Как модуль читает ответ
- Исключение из обработчика модуль не перехватывает — оно обрывает шаг импорта. Оборачивайте код в
try/catch. - Параметры последнего обработчика, вернувшего
EventResult::SUCCESS, целиком заменяютarPropsSets. Ответы не сливаются: каждый обработчик получает исходный массив модуля. EventResult::ERRORигнорируется. Чтобы ничего не записывать, вернитеSUCCESSс пустым массивом.SUCCESSбез параметров даётnull, который модуль передаёт вcount()— на PHP 8 этоTypeError. Всегда возвращайте полный массив, а если менять нечего — не возвращайте ничего.
- Описание события
- Пример кода
Параметры события
| Параметр | Тип | Описание |
|---|---|---|
itemBx | array | Элемент инфоблока Битрикс. Для нового элемента — только ID и IBLOCK_ID |
itemMs | object | Элемент из МойСклад (объект) |
propList | array | Массив соответствий свойств (ID свойства БУС => доп. поле или стандартное поле МС) |
arAllPropsValues | array | Текущие значения сопоставленных свойств товара в БУС. Для нового элемента — всегда [] |
arPropsSets | array | Массив свойств для записи через CIblockElement::SetPropertyValuesEx() |
isNew | bool | Флаг нового товара (true — товар создаётся, false — обновляется) |
Структура itemBx
// при создании элемента:
[
'ID' => 1234,
'IBLOCK_ID' => 5,
]
// при обновлении — элемент из выборки модуля:
[
'ID' => 1234,
'IBLOCK_ID' => 5,
'NAME' => 'Название товара',
'XML_ID' => 'abc123externalcode',
// ... CODE, ACTIVE, SORT, тексты и картинки; строки экранированы (GetNext), исходные — под ключами '~NAME' и т.д.
]
Структура propList
[
123 => 'msAttrUUID1', // ID свойства Битрикс => UUID доп. поля МойСклад
456 => 'msAttrUUID2',
789 => 'field_article', // стандартное поле МойСклад: префикс field_ + имя поля
// при обновлении с загрузкой картинок в свойство ещё:
321 => '', // свойство для дополнительных картинок, значение — пустая строка
]
Структура arAllPropsValues (только при обновлении)
[
123 => [ // ID свойства Битрикс
'VALUE' => 'Текущее значение',
'VALUE_ENUM' => null, // текст значения для свойства-списка
'VALUE_XML_ID' => null, // XML_ID значения для свойства-списка
'DESCRIPTION' => '',
'PROPERTY_VALUE_ID' => 5678
],
456 => [
'VALUE' => '42',
'VALUE_ENUM' => null,
'VALUE_XML_ID' => null,
'DESCRIPTION' => '',
'PROPERTY_VALUE_ID' => 5679
],
// ... другие свойства
]
Структура arPropsSets
[
123 => 'Новое значение строки', // строковое свойство
456 => 42.5, // числовое свойство
789 => 15, // ID значения списка (свойство типа "Список")
790 => '01.02.2026', // дата — строкой в формате сайта
791 => false, // очистка значения
792 => [ // файл
'VALUE' => [...], // результат CFile::MakeFileArray()
'DESCRIPTION' => 'uuid-файла-мс',
],
// ...
]
Возвращаемое значение
Верните 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);
}