\Bitrix\Main\Loader::includeModule("iblock");
\Bitrix\Main\Loader::includeModule("catalog");
\Bitrix\Main\Loader::includeModule("sale");
$ordersIds = array_column(\Bitrix\Sale\Internals\BasketTable::getList([
"select" => [
"ORDER_ID"
],
"filter" => [
"!ORDER_ID" => false,
"PRODUCT.IBLOCK.IBLOCK_ID" => $IBLOCK_ID//Тут надо задать ID вашего каталога
],
"group" => [
"ORDER_ID"
]
])->fetchAll(), "ORDER_ID");
https://domain.com/rest/1/XXXXXXXXXX/sale.order.get?id=1
<?php
\Bitrix\Main\Loader::includeModule("catalog");
$allProductPrices = \Bitrix\Catalog\PriceTable::getList([
"filter" => [
"PRODUCT_ID" => $productId,
]
])->fetchAll();
$bxEventManager = \Bitrix\Main\EventManager::getInstance();
$bxEventManager->addEventHandler(
'sale',
'OnSaleShipmentEntitySaved',
array(
"\\Gricuk\\Shipment",
"onSaleShipmentSavedHandler"
)
);
<?php
namespace Gricuk;
use Bitrix\Main\Event;
use Bitrix\Main\EventResult;
use Bitrix\Main\Result;
class Shipment
{
public static function onSaleShipmentSavedHandler(\Bitrix\Main\Event $event)
{
/** @var \Bitrix\Sale\Shipment $shipment */
$shipment = $event->getParameter("ENTITY");
$oldValues = $event->getParameter("VALUES");
$shipmentFields = $shipment->getFieldValues();
/**
* Ключ - статус ДОСТАВКИ
* Значение - статус ЗАКАЗА
*/
$statusMap = [
"DR" => "F",
"DB" => "RS"
];
if (isset($statusMap[$shipmentFields["STATUS_ID"]])) {
try {
$orderId = $shipment->getParentOrderId();
$order = \Bitrix\Sale\Order::load($orderId);
$order->setField("STATUS_ID", $statusMap[$shipmentFields["STATUS_ID"]]);
/** @var Result $saveResult */
$saveResult = $order->save();
if (!$saveResult->isSuccess()) {
\Bitrix\Main\Diag\Debug::dumpToFile($saveResult, '$saveResult', 'onSaleShipmentSavedHandler.log');
}
} catch (\Exception $e) {
\Bitrix\Main\Diag\Debug::dumpToFile($e, '$e', 'onSaleShipmentSavedHandler.log');
}
}
}
}
Array
(
[6197] => S1076
[6181] => S1024
[7345] => S1237
[6192] => S1067
[7455] => S1158
[8831] => 7386
[8830] => 7385
[8829] => 7384
[8828] => 7383
)
Примечание №1: для вывода пользовательских свойств обязательно должен быть передан IBLOCK_ID и в arSelect код необходимых свойств UF_XXX. Если необходимо вывести все пользовательские свойства, то в arSelect необходимо передать UF_*.
//$products массив id товаров, которые надо добавить
$basket = $order->getBasket();
$quantity = 1;
foreach ($products as $productId) {
$item = $basket->createItem('catalog', $productId);
$item->setFields(array(
'CURRENCY' => \Bitrix\Currency\CurrencyManager::getBaseCurrency(),
'LID' => \Bitrix\Main\Context::getCurrent()->getSite(),
'PRODUCT_PROVIDER_CLASS' => 'CCatalogProductProvider',
));
$item->setField("QUANTITY", quantity);
$newBasketItems[] = $item;
}
//В этом примере товары добавляются в первую попавшуюся НЕ СИСТЕМНУЮ отгрузку.
$shipmentCollection = $order->getShipmentCollection();
foreach ($shipmentCollection as $shipment) {
if (!$shipment->isSystem()) {
foreach ($newBasketItems as $newBasketItem) {
/** @var \Bitrix\Sale\Shipment $shipment */
$shipmentItemCollection = $shipment->getShipmentItemCollection();
$shipmentItem = $shipmentItemCollection->createItem($newBasketItem);
$shipmentItem->setQuantity($item->getQuantity());
}
break;
}
}
$discount = $order->getDiscount();
\Bitrix\Sale\DiscountCouponsManager::clearApply(true);
\Bitrix\Sale\DiscountCouponsManager::useSavedCouponsForApply(true);
$discount->setOrderRefresh(true);
$discount->setApplyResult(array());
/** @var \Bitrix\Sale\Basket $basket */
if (!($basket = $order->getBasket())) {
throw new \Bitrix\Main\ObjectNotFoundException('Entity "Basket" not found');
}
$basket->refreshData(array('PRICE', 'COUPONS'));
$discount->calculate();
$order->save();