Перейти к основному содержимому

Событие перед записью свойств товара

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

image_1

Здесь видно, что нужно выбрать хотя бы 1 свойство для соответствия при импорте. Далее галочкой отметить что нужно импортировать эти свойства в новые или существующие товары. Работает на выделенных вкладках скриншота.

[OnSetPropsForItem] Событие перед записью свойств товара​

Когда вызывается:

  • при создании — для каждого созданного элемента, если включён импорт свойств и сопоставлено хотя бы одно свойство;
  • при обновлении — для каждого элемента порции, если включена опция обновления свойств и список сопоставления непуст. Список к этому моменту мог заменить обработчик OnBeforeGetPropsValues.

CIBlockElement::SetPropertyValuesEx() модуль вызывает, только если итоговый arPropsSets непуст. Для нового элемента он передаётся с флагом NewElement => 'Y'.

Как модуль читает ответ
  • Исключение из обработчика модуль не перехватывает — оно обрывает шаг импорта. Оборачивайте код в try/catch.
  • Параметры последнего обработчика, вернувшего EventResult::SUCCESS, целиком заменяют arPropsSets. Ответы не сливаются: каждый обработчик получает исходный массив модуля.
  • EventResult::ERROR игнорируется. Чтобы ничего не записывать, верните SUCCESS с пустым массивом.
  • SUCCESS без параметров даёт null, который модуль передаёт в count() — на PHP 8 это TypeError. Всегда возвращайте полный массив, а если менять нечего — не возвращайте ничего.

Параметры события

ПараметрТипОписание
itemBxarrayЭлемент инфоблока Битрикс. Для нового элемента — только ID и IBLOCK_ID
itemMsobjectЭлемент из МойСклад (объект)
propListarrayМассив соответствий свойств (ID свойства БУС => доп. поле или стандартное поле МС)
arAllPropsValuesarrayТекущие значения сопоставленных свойств товара в БУС. Для нового элемента — всегда []
arPropsSetsarrayМассив свойств для записи через CIblockElement::SetPropertyValuesEx()
isNewboolФлаг нового товара (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().