<?
\Bitrix\Main\Loader::includeModule("sale");
\Bitrix\Main\Loader::includeModule("catalog");
\Bitrix\Sale\Order::load($orderId);
$basket = $order->getBasket();
$shipmentCollection = $order->getShipmentCollection();
$products = [1, 2, 3];
$quantity = 1;
$newBasketItems = [];
//Добавляем новые товары в корзину
foreach ($products as $productId) {
$item = $basket->createItem('catalog', $productId);
$item->setFields(array(
'QUANTITY' => $quantity,
'CURRENCY' => \Bitrix\Currency\CurrencyManager::getBaseCurrency(),
'LID' => $order->getSiteId(),
'PRODUCT_PROVIDER_CLASS' => 'CCatalogProductProvider',
));
$item->setField("QUANTITY", $quantity);
$newBasketItems[] = $item;
}
//Теперь эти товары надо добавить в отгрузку. В примере добавляю в первую попавшуюся
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();
$result = new \Bitrix\Main\Result();
\Bitrix\Sale\DiscountCouponsManager::clearApply(true);
\Bitrix\Sale\DiscountCouponsManager::useSavedCouponsForApply(true);
$discount->setOrderRefresh(true);
$discount->setApplyResult(array());
$res = $basket->refreshData(array('PRICE', 'COUPONS'));
if (!$res->isSuccess())
$result->addErrors($res->getErrors());
$res = $discount->calculate();
if (!$res->isSuccess())
$result->addErrors($res->getErrors());
if (!$order->isCanceled() && !$order->isPaid()) {
/** @var \Bitrix\Sale\PaymentCollection $paymentCollection */
if (($paymentCollection = $order->getPaymentCollection()) && count($paymentCollection) == 1) {
/** @var \Bitrix\Sale\Payment $payment */
if (($payment = $paymentCollection->rewind()) && !$payment->isPaid()) {
$payment->setFieldNoDemand('SUM', $order->getPrice());
}
}
}
//Сохраняем заказ, а не корзину
//Если обработка идет в каком то событии заказа, то метод save вызывать не надо
$order->save();
public function sendMessageAction(): string
{
$i = 0;
if ($i === 0) {
throw new Exception('Ошибка');
}
}
if (
is_array($this->arParams['RESTRICT_CHANGE_PAYSYSTEM'])
&& in_array($orderFields['STATUS_ID'], $this->arParams['RESTRICT_CHANGE_PAYSYSTEM'])
)
{
$orderFields['LOCK_CHANGE_PAYSYSTEM'] = 'Y';
}
AddEventHandler("iblock", "OnBeforeIBlockElementDelete", Array("MyClass", "OnBeforeIBlockElementDeleteHandler"));
class MyClass
{
function OnBeforeIBlockElementDeleteHandler($ID)
{
$res = CIBlockElement::GetByID($ID);
if($arItem = $res->GetNext()){
\Bitrix\Main\Diag\Debug::dumpToFile($arItem, 'arItem');
}
}
}
Bitrix\Main\Page\Asset::getInstance()->addCss("/path/to/css/style.css");
Bitrix\Main\Page\Asset::getInstance()->addJs("/path/to/js/script.js");
Mysql query error: (2006) MySQL server has gone away (400)
<?
array(
"IBLOCK_ID" => $iblock_ids,
"ACTIVE" => "Y",
array(
"LOGIC" => "OR",
array(
"SECTION_ACTIVE" => "Y",
"SECTION_GLOBAL_ACTIVE" => "Y"
),
array(
"IBLOCK_SECTION_ID" => 0,
)
),
)
[Bitrix\Main\NotImplementedException]
(140)
/bitrix/modules/sale/lib/orderbase.php:2069
#0: Bitrix\Sale\OrderBase::getList(array)
/bitrix/modules/sale/lib/orderbase.php:363
#1: Bitrix\Sale\OrderBase::loadFromDb(array)
/bitrix/modules/sale/lib/orderbase.php:292
#2: Bitrix\Sale\OrderBase::loadByFilter(array)
/test/index.php:7
$order = \Bitrix\Sale\Order::loadByFilter([
'filter' => ['XML_ID' => $xml]
]);
"PAYMENT_DATE_INSERT" => array(
"NAME" => Loc::getMessage("SALE_HPS_BILL_DATE"),
"SORT" => 100,
'GROUP' => 'PAYMENT',
"DESCRIPTION" => Loc::getMessage("SALE_HPS_BILL_DATE_DESC"),
'DEFAULT' => array(
"PROVIDER_VALUE" => "DATE_BILL_DATE",
"PROVIDER_KEY" => "PAYMENT"
)
),
"PAYMENT_DATE_PAY_BEFORE" => array(
"NAME" => Loc::getMessage("SALE_HPS_BILL_PAY_BEFORE"),
"DESCRIPTION" => Loc::getMessage("SALE_HPS_BILL_PAY_BEFORE_DESC"),
"SORT" => 300,
'GROUP' => 'PAYMENT',
'DEFAULT' => array(
"PROVIDER_VALUE" => "DATE_PAY_BEFORE",
"PROVIDER_KEY" => "ORDER"
)
),
use \Bitrix\Main\Data\Cache;
$cache = Cache::createInstance(); // получаем экземпляр класса
if ($cache->initCache(7200, "cache_key")) { // проверяем кеш и задаём настройки
$vars = $cache->getVars(); // достаем переменные из кеша
}
elseif ($cache->startDataCache()) {
// некоторые действия...
$cache->endDataCache(array("key" => "value")); // записываем в кеш
}