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

Событие сборки фильтра запроса к МойСклад

[OnBuildImportFilter] Изменение фильтра выборки из МойСклад

Событие OnBuildImportFilter вызывается в последней точке сборки строки filter=..., которая уходит в запрос к API МойСклад. Обработчик получает фильтр разобранным на части и может добавить свои части, выбросить части модуля или заменить их.

Событие даёт изменить состав выборки, не трогая код модуля: например, отсечь товары-ТП по значению доп. поля, ограничить импорт своим набором групп или добавить любое условие, которого нет в настройках.

к сведению

Событие срабатывает всегда, даже когда обработчиков нет. Если ни один обработчик не вернул массив, фильтр остаётся ровно таким, каким его собрал модуль.

В каких пайплайнах срабатывает

ПайплайнЗначение contextГде вызывается
Импорт сущностей (товары, модификации, услуги, комплекты) — агент и разовый импортentityCRbsMoyskladStocks::buildAgentFilterStringForEntity()
Импорт цен — агент и разовый импортpricesCRbsMoyskladStocks::getFilterString()
Деактивация — агент и разовый импортdeactivateCRbsMoyskladStocks::buildAgentFilterStringForEntity()
Остатки комплектовbundlestocksCRbsMoyskladStocks::buildAgentFilterStringForEntity()
Проверка количества сущностей в настройках модуляcheckCRbsMoyskladStocks::getFilterString()
Диагностика: выборка ассортиментаdiagnosticCRbsMoyskladStocks::getFilterString()
Где событие не срабатывает

Не все запросы модуля к МойСклад строят фильтр через эти два метода. Событие не вызывается для:

  • импорта остатков по складам и текущих остатков — там фильтр собирает Config::getFilterStocksString();
  • импорта групп товаров (productfolder) агентом — там фильтр задан константой archived=true;archived=false;
  • разового импорта групп товаров и разового импорта ассортимента в диагностике — там фильтр тоже задан константой;
  • импорта скидок — запрос идёт без фильтра.

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

ПараметрТипОписание
entitystringСущность МойСклад, для которой собирается фильтр: product, variant, bundle, service, productfolder
contextstringПайплайн, который запросил фильтр: entity, prices, deactivate, bundlestocks, check, diagnostic
filterarrayЧасти фильтра. После обработки склеиваются через ; и уходят в запрос

Возвращаемое значение

\Bitrix\Main\EventResult с параметром filter — новым массивом частей.

return new \Bitrix\Main\EventResult(
\Bitrix\Main\EventResult::SUCCESS,
['filter' => $filter]
);

Что модуль считает ответом «не меняю»

Любой из этих вариантов оставляет фильтр модуля нетронутым:

  • обработчик ничего не вернул;
  • вернул EventResult с типом ERROR;
  • вернул EventResult без параметров;
  • в параметрах нет ключа filter либо в нём лежит не массив.

Части, которые не являются непустой строкой, из ответа обработчика отбрасываются.