• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/internals/providerbuilder.php
  • Класс: BitrixSaleInternalsProviderBuilder
  • Вызов: ProviderBuilder::addProductByShipmentItem
public function addProductByShipmentItem(SaleShipmentItem $shipmentItem)
{
	$basketItem = $shipmentItem->getBasketItem();
	$productId = $basketItem->getProductId();

	$fields = [
		'ITEM_CODE' => $productId,
		'BASKET_CODE' => $basketItem->getBasketCode(),
		'PRODUCT_ID' => $productId,
		'QUANTITY' => $shipmentItem->getQuantity(),
		'IS_BARCODE_MULTI' => $basketItem->isBarcodeMulti(),
		'BUNDLE_CHILD' => $basketItem->isBundleChild(),
		'SHIPMENT_ITEM_DATA' => [
			$shipmentItem->getInternalIndex() => $shipmentItem->getQuantity()
		],
		'SHIPMENT_ITEM' => $shipmentItem,
	];

	if (SaleConfiguration::useStoreControl())
	{
		$storeData = SaleInternalsCatalogProvider::createMapShipmentItemStoreData($shipmentItem);

		$reservedQuantity = 0;
		$needReserveByStore = [];
		if ($storeData)
		{
			foreach ($storeData as $item)
			{
				$reservedQuantity += $item['RESERVED_QUANTITY'];

				$needReserveByStore[$item['STORE_ID']] = $item['RESERVED_QUANTITY'] > 0;
			}
		}

		$fields['STORE_DATA'] = array(
			$shipmentItem->getInternalIndex() => $storeData
		);

		$fields['NEED_RESERVE_BY_STORE'] = [
			$shipmentItem->getInternalIndex() => $needReserveByStore
		];
	}
	else
	{
		$reservedQuantity = $basketItem->getReservedQuantity();
	}

	$fields['RESERVED_QUANTITY'] = $reservedQuantity;
	$fields['NEED_RESERVE'] = [
		$shipmentItem->getInternalIndex() => $reservedQuantity > 0
	];

	$this->addItem($productId, $fields);
}