Событие импорта цен
Доступно с версии 3.3.0
[OnPriceStepImported] Событие после шага импорта цен
Событие OnPriceStepImported срабатывает после завершения очередного шага импорта цен из МойСклад. Событие вызывается в классе Rbs\MoyskladStocks\Import\Type\Prices после обработки каждой порции товаров.
- Описание события
- Пример вызова события
Когда срабатывает
При автоматическом импорте цен через агент, при ручном запуске импорта цен из админки, при импорте цен из объекта МойСклад (webhook и т.д.).
Также событие срабатывает, когда цены загружаются внутри импорта сущностей:
- при импорте товаров — для только что созданных на шаге строк, у которых в МойСклад есть цены (если включён импорт цен сущности);
- при импорте модификаций по вебхуку — для всех строк шага, если включён импорт цен модификаций;
- при совместимом (устаревшем) импорте сущностей по API-запросу — для строк шага, если включён импорт цен сущности.
Событие не вызывается, если ни у одной строки шага нет цен в МойСклад или внешнего кода: обработка шага прерывается раньше, с сообщением в логе.
Параметры события
| Параметр | Тип | Описание |
|---|---|---|
entity | string | Тип сущности: product, variant, bundle, service |
changedProductsIds | array | Массив ID товаров (b_iblock_element.ID), у которых изменились цены на текущем шаге |
productInfoArray | array | Ассоциативный массив с информацией о ценах из МойСклад для всех товаров шага |
Важные замечания
changedProductsIds может быть пустым — если массив пуст, значит на текущем шаге не было изменений цен (цены уже актуальны).
Обработчик вызывается на каждом шаге импорта. При большом каталоге это может быть много вызовов. Избегайте тяжёлых операций в обработчике.
productInfoArray содержит все товары текущего шага, не только изменённые. Для фильтрации используйте changedProductsIds.
Какие ID попадают в ключи productInfoArray, зависит от настройки «Тип обработки дублей» на вкладке цен, когда одному внешнему коду соответствует несколько элементов:
[ASC]/[DESC]— только первый элемент: найденные модулем упорядочены по возрастанию или убыванию ID, добавленные событием идут после них;[ALL]— все элементы;[SKIP]— внешний код с дублями отбрасывается целиком.
В этот набор входят и элементы, добавленные обработчиками события OnAfterFindElementsForStocks.
ID валют и типов цен — это UUID из МойСклад, не ID из Битрикс. Для маппинга используйте настройки модуля.
//Пример кода нужно вставить в файл init.php
\Bitrix\Main\EventManager::getInstance()->addEventHandler(
'rbs.moyskladstocks',
'OnPriceStepImported',
'OnPriceStepImportedHandler'
);
function OnPriceStepImportedHandler(\Bitrix\Main\Event $event)
{
$eventParams = $event->getParameters();
$entity = $eventParams['entity']; // Тип сущности: product, variant, bundle, service
$changedProductsIds = $eventParams['changedProductsIds']; // Массив ID товаров с изменёнными ценами
// $productInfoArray — ассоциативный массив с информацией о ценах из МойСклад
// Структура:
// [
// 47520 => [ // ID товара в Битрикс
// 'MS_PRICES' => [
// 'cbb10056-e0aa-11f0-0a80-182a000a50bc' => [ // ID типа цены в МойСклад
// 'PRICE' => 3887.24,
// 'CURRENCY' => 'cbb0bdeb-e0aa-11f0-0a80-182a000a50bb' // ID валюты в МойСклад
// ],
// 'minPrice' => [
// 'PRICE' => 0,
// 'CURRENCY' => 'cbb0bdeb-e0aa-11f0-0a80-182a000a50bb'
// ],
// 'buyPrice' => [
// 'PRICE' => 0,
// 'CURRENCY' => 'cbb0bdeb-e0aa-11f0-0a80-182a000a50bb'
// ]
// ]
// ],
// // ... другие товары
// ]
$productInfoArray = $eventParams['productInfoArray'];
if (!empty($changedProductsIds)) {
#WORK_AREA#
// здесь работаем с массивом изменённых товаров
}
}