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

tryShip

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

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

Параметры

ПараметрОписание
$productsМассив товаров с идентификаторами товаров в ключах. Для списания передавайте отрицательные значения в QUANTITY_LIST в формате код позиции корзины => количество.

Метод исключает положительные значения и меняет знак оставшихся значений перед проверкой. При складском учете нужны складские данные отгрузки

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

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

Исключения

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

В текущей реализации ветка с QUANTITY <= 0 пытается умножить массив товара на число и приводит к ошибке. Для проверки списания используйте QUANTITY_LIST без поля QUANTITY. Ключ TRY_SHIP_PRODUCTS_LIST может отсутствовать при ошибке или содержать результаты только части товаров.

Пример

<?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;
$provider = new CatalogProvider(['SITE_ID' => SITE_ID]);
$result = $provider->tryShip([
	$productId => [
		'PRODUCT_ID' => $productId,
		'BASKET_CODE' => 'basket-item-1',
		'QUANTITY_LIST' => ['basket-item-1' => -1],
	],
]);

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

print_r($result->getData()['TRY_SHIP_PRODUCTS_LIST'][$productId] ?? false);


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

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

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

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