Документация для разработчиков
Темная тема

checkProductsInStore

\Bitrix\Sale\Result public
\Bitrix\Catalog\Product\CatalogProvider::checkProductsInStore(
	array $products
);

Метод проверяет складские данные товаров перед списанием: наличие подходящего склада, корректность штрихкодов и достаточность количества. Остатки метод не изменяет. Нестатический метод.

Параметры

ПараметрОписание
$productsПодготовленный массив товаров с идентификаторами товаров в ключах.

Для каждого товара нужны PRODUCT_ID, данные PRODUCT и CATALOG, код позиции BASKET_CODE, количества QUANTITY_LIST, резервы RESERVED_QUANTITY_LIST и складские позиции STORE_DATA_LIST.

Формат складских позиций: код позиции => [идентификатор склада => данные позиции].
В позиции укажите PRODUCT_ID, STORE_ID, положительное QUANTITY, массив BARCODE и признак IS_BARCODE_MULTI

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

Метод возвращает объект \Bitrix\Sale\Result. Ключ PRODUCTS_LIST_IN_STORE содержит логический результат проверки по товарам. Ошибки описывают отсутствующие склады, штрихкоды или недостаточное количество.

Особенности

Метод принимает внутренний формат провайдера. Получить поля PRODUCT и CATALOG можно через getCatalogData, как показано в примере.

Исключения

При складской проверке метод выбрасывает \Bitrix\Main\ArgumentNullException, если в контексте провайдера отсутствует непустой SITE_ID.

Пример

<?php
use Bitrix\Catalog\Config\State;
use Bitrix\Catalog\Product\CatalogProvider;
use Bitrix\Main\Loader;

if (!Loader::includeModule('catalog') || !Loader::includeModule('sale'))
{
	throw new RuntimeException('Не удалось подключить модули catalog и sale');
}

if (!State::isUsedInventoryManagement())
{
	echo 'Для примера нужен включенный складской учет';
	return;
}

// Существующий товар без поэкземплярного учета и активный склад текущего сайта
$productId = 123;
$storeId = 1;
$basketCode = 'basket-item-1';
$products = [
	$productId => [
		'PRODUCT_ID' => $productId,
		'BASKET_CODE' => $basketCode,
		'QUANTITY_LIST' => [$basketCode => 1],
		'RESERVED_QUANTITY_LIST' => [$basketCode => 0],
		'STORE_DATA_LIST' => [
			$basketCode => [
				$storeId => [
					'PRODUCT_ID' => $productId,
					'STORE_ID' => $storeId,
					'QUANTITY' => 1,
					// Для товара без поэкземплярного учета штрихкод не проверяется
					'BARCODE' => [''],
					'IS_BARCODE_MULTI' => false,
				],
			],
		],
	],
];
$provider = new CatalogProvider(['SITE_ID' => SITE_ID]);
$catalogResult = $provider->getCatalogData($products);

if (!$catalogResult->isSuccess())
{
	echo implode(PHP_EOL, $catalogResult->getErrorMessages());
	return;
}

$catalogRow = $catalogResult->getData()['CATALOG_DATA_LIST'][$productId] ?? null;
if (!is_array($catalogRow) || !isset($catalogRow['PRODUCT']))
{
	echo 'Данные товара не найдены';
	return;
}

if (empty($catalogRow['PRODUCT']['USED_STORE_INVENTORY']))
{
	echo 'Для выбранного товара складской учет не используется';
	return;
}

$products[$productId]['PRODUCT'] = $catalogRow['PRODUCT'];
unset($catalogRow['PRODUCT']);
$products[$productId]['CATALOG'] = $catalogRow;

$result = $provider->checkProductsInStore($products);
if (!$result->isSuccess())
{
	echo implode(PHP_EOL, $result->getErrorMessages());
	return;
}

$checked = $result->getData()['PRODUCTS_LIST_IN_STORE'][$productId] ?? false;
echo $checked ? 'Складская проверка пройдена' : 'Проверка товара не подтверждена';


Была ли эта страница полезна?

Пользовательские комментарии

Помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
© «Битрикс», 2001-2026, «1С-Битрикс», 2026
Наверх