• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/orderfacade.php
  • Класс: BitrixSaleOrderFacade
  • Вызов: OrderFacade::deductOrder
static function deductOrder($id)
{
	$result = new Result();

	$registry = Registry::getInstance(Registry::REGISTRY_TYPE_ORDER);
	/** @var Order $orderClassName */
	$orderClassName = $registry->getOrderClassName();

	$order = $orderClassName::load($id);
	if (!$order)
	{
		$result->addError(new Error(Loc::getMessage('SALE_GROUP_ACTION_ERR_ORDER_NOT_FOUND')));
		return $result;
	}

	$collection = $order->getShipmentCollection()->getNotSystemItems();

	/** @var Shipment $shipment */
	foreach ($collection as $shipment)
	{
		if (!$shipment->isShipped())
		{
			$r = $shipment->setField('DEDUCTED', 'Y');
			if (!$r->isSuccess())
			{
				$result->addErrors($r->getErrors());
				return $result;
			}
		}
	}

	if (!$order->isShipped())
	{
		$shipment = static::createFinalShipment($order);
		if ($shipment === null)
		{
			$result->addError(
				new Error(
					Loc::getMessage('SALE_GROUP_ACTION_ERR_SHIPMENT_CREATE')
				)
			);
			return $result;
		}
	}

	$r = $order->save();
	if (!$r->isSuccess())
	{
		$result->addErrors($r->getErrors());
	}

	return $result;
}