• Модуль: catalog
  • Путь к файлу: ~/bitrix/modules/catalog/lib/grid/productaction.php
  • Класс: BitrixCatalogGridProductAction
  • Вызов: ProductAction::checkInventoryDocumentByProducts
static function checkInventoryDocumentByProducts(array $elementIds): MainResult
{
	$result = new MainResult();
	if (!CatalogConfigState::isUsedInventoryManagement())
	{
		$result->setData(['PRODUCT_IDS' => $elementIds]);

		return $result;
	}

	$validList = array_fill_keys($elementIds, true);
	$errorList = [];

	$query = new ORMQueryQuery(CatalogStoreDocumentElementTable::getEntity());
	$query->setDistinct(true);
	$query->setSelect([
		'ELEMENT_ID',
		'NAME' => 'ELEMENT.NAME'
	]);
	$query->setFilter(['=DOCUMENT.STATUS' => 'Y']);

	foreach (array_chunk($elementIds, 500) as $pageIds)
	{
		$query->addFilter('@ELEMENT_ID', $pageIds);
		$iterator = $query->exec();
		while ($row = $iterator->fetch())
		{
			$id = (int)$row['ELEMENT_ID'];
			unset($validList[$id]);
			$errorList[] = '[' . $row['ELEMENT_ID'] . '] ' . $row['NAME'];
		}
		unset($row, $iterator);
	}
	unset($pagesIds);
	unset($query);

	$result->setData(['PRODUCT_IDS' => array_keys($validList)]);
	if (!empty($errorList))
	{
		$result->addError(new MainError(
			Loc::getMessage(
				'BX_CATALOG_PRODUCT_ACTION_ERR_SELECTED_INVENTORY_PRODUCTS',
				['#NAMES#' => implode(', ', $errorList)]
			)
		));
	}

	return $result;
}