• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/controller/shipmentitem.php
  • Класс: BitrixSaleControllerShipmentItem
  • Вызов: ShipmentItem::getPrimaryAutoWiredParameter
public function getPrimaryAutoWiredParameter()
{
	return new ExactParameter(
		SaleShipmentItem::class,
		'shipmentItem',
		function($className, $id) {

			$registry = SaleRegistry::getInstance(SaleRegistry::REGISTRY_TYPE_ORDER);

			/** @var SaleShipmentItem $shipmentItemClass */
			$shipmentItemClass = $registry->getShipmentItemClassName();

			$si = $shipmentItemClass::getList([
				'select'=>['ORDER_DELIVERY_ID'],
				'filter'=>['ID'=>$id]
			]);

			if($siRow = $si->fetch())
			{
				/** @var SaleShipment $shipmentClass */
				$shipmentClass = $registry->getShipmentClassName();

				$r = $shipmentClass::getList([
					'select'=>['ORDER_ID'],
					'filter'=>['ID'=>$siRow['ORDER_DELIVERY_ID']]
				]);

				if($row = $r->fetch())
				{
					/** @var SaleOrder $orderClass */
					$orderClass = $registry->getOrderClassName();

					$order = $orderClass::load($row['ORDER_ID']);
					/** @var BitrixSaleShipment $shipment */
					$shipment = $order->getShipmentCollection()->getItemById($siRow['ORDER_DELIVERY_ID']);
					$shipmentItem = $shipment->getShipmentItemCollection()->getItemById($id);

					if ($shipmentItem)
					{
						return $shipmentItem;
					}
				}
			}

			$this->addError(new Error('shipment item is not exists', 201240400001));
			return null;
		}
	);
}