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);