• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/basketitem.php
  • Класс: BitrixSaleBasketItem
  • Вызов: BasketItem::save
public function save()
{
	$result = parent::save();
	if (!$result->isSuccess())
	{
		return $result;
	}

	$reserveCollection = $this->getReserveQuantityCollection();
	if ($reserveCollection)
	{
		$r = $reserveCollection->save();
		if (!$r->isSuccess())
		{
			return $result->addErrors($r->getErrors());
		}
	}

	if ($this->isBundleParent())
	{
		$bundleCollection = $this->getBundleCollection();
		$itemsFromDb = [];

		$id = $this->getId();
		if ($id != 0)
		{
			$register = Registry::getInstance(static::getRegistryType());
			/** @var BasketBase $basketClassName */
			$basketClassName = $register->getBasketClassName();

			$itemsFromDbList = $basketClassName::getList(
				[
					'select' => ['ID'],
					'filter' => ['SET_PARENT_ID' => $id],
				]
			);
			while ($itemsFromDbItem = $itemsFromDbList->fetch())
			{
				if ($itemsFromDbItem['ID'] == $id)
					continue;

				$itemsFromDb[$itemsFromDbItem['ID']] = true;
			}
		}

		/** @var BasketItem $bundleItem */
		foreach ($bundleCollection as $bundleItem)
		{
			$parentId = (int)$bundleItem->getField('SET_PARENT_ID');
			if ($parentId <= 0)
				$bundleItem->setFieldNoDemand('SET_PARENT_ID', $id);

			$saveResult = $bundleItem->save();
			if (!$saveResult->isSuccess())
				$result->addErrors($saveResult->getErrors());

			if (isset($itemsFromDb[$bundleItem->getId()]))
				unset($itemsFromDb[$bundleItem->getId()]);
		}

		foreach ($itemsFromDb as $id => $value)
		{
			$this->deleteInternal($id);
		}
	}

	return $result;
}