Битрикс – наличие на разных складах

Когда наличие разбивается по разным складам, эту информацию нужно где-то хранить. Но как можно её вывести на той же карточке товара?

Как узнать наличие товара на складах в Битриксе?

Для этого нам понадобится CCatalogStoreProduct::GetList. Рассмотрим сначала пример как посчитать общее количество:

$amount = 0;
$rsStore = CCatalogStoreProduct::GetList(
	array(),
	array('PRODUCT_ID' => $productID),
	false,
	false,
	array('AMOUNT')
);
while ($arStore = $rsStore->Fetch()) {
	$amount += $arStore['AMOUNT'];
}

В переменной $amount хранится количество на всех складах. Вообще есть следующие поля:

Поля Описание
ID ID записи
PRODUCT_ID ID элемента
AMOUNT количество
STORE_ID ID склада
STORE_NAME название склада
STORE_ADDR адрес склада
STORE_DESCR описание склада
STORE_GPS_N широта
STORE_GPS_S долгота
STORE_IMAGE картинка склада

Вся информация находится в:

Рабочий стол -> Магазин -> Складской учет -> Склады

Битрикс – пишем функцию по наличию товара на конкретном складе

Для того чтобы написать такую функцию возьмем пример выше, и немного допишем:

function getStorageExistByID($productID) {
	$region = $_COOKIE['REGIONALITY_REGION_ID'];
	$arStorage = [
		1 => [122], //Moskva
		2 => [123],// Sankt-Peterburg
		3 => [114, 129], //Irkutsk
		4 => [132], //Ekaterinburg
		5 => [124], //Krasnodar
		6 => [117], //Krasnoiarsk
		8 => [125], //Sochi
		9 => [130], //Novosibirsk
		10 => [126], //Kazan
		11 => [127], //Kaliningrad
		12 => [128], //Simferopol
	];
	$arStore = $arStorage[$region];
	$amount = 0;
	$rsStore = CCatalogStoreProduct::GetList(
		array(),
		array('PRODUCT_ID' => $productID, 'STORE_ID' => $arStore),
		false,
		false,
		array('AMOUNT')
	);
	while ($arStore = $rsStore->Fetch()) {
		$amount += $arStore['AMOUNT'];
	}
	return $amount;
}

Что делает данный код? Мы передаем ID товара, и по куки смотрим какие склады соответствуют региону. Затем, собираем наличие из полученных складов, т.к. их может быть несколько, то всё храним в массивах.

Вот собственно и всё, благодаря этому коду можно не только выводить информацию по наличию на конкретном складе, но и дополнительную информацию – адрес, описание и т.д.

Стандартно в Битриксе наличие хранится в 1 поле – Доступное количество. Если немного дописать код компонентов, можно выводить информацию о наличие товара, либо скрывать кнопку купить уже исходя из параметра склада.

автор: Dmitriy

З 2011 року займаюся веб-розробкою. Зараз я – PHP Full Stack Developer.
Обговорити ваш проект, а також дізнатися більше про мене ви можете на цьому сайті:
dev.forwww.com

Email: dmitriyribka@gmail.com

Залишити відповідь