Добавление свойств товара в корзину Битрикс

Как добавить свойства товара в заказ Bitrix перед отправкой в 1С

При интеграции интернет-магазина на Bitrix с 1С нередко возникает необходимость передавать дополнительные данные о товарах в заказе. Например, это может быть номенклатура товара, артикул, специальные свойства, изменение цены в корзине или работа со складами перед оформлением заказа.

В этой статье рассмотрим, как добавить свойства товара в заказ Bitrix перед его созданием с помощью события OnSaleComponentOrderResultPrepared.

Когда это может понадобиться

Событие OnSaleComponentOrderResultPrepared удобно использовать в следующих случаях:
  • передача дополнительных свойств товаров в 1С;
  • изменение цены товара в корзине;
  • пересчет скидок;
  • изменение количества товара;
  • работа с остатками и складами;
  • добавление служебных данных в заказ;
  • кастомизация оформления заказа в Bitrix.

Создание обработчика события в Bitrix

Для начала необходимо создать файл:

/local/php_interface/init.php

Если файл уже существует — просто добавьте в него следующий код.

Код добавления свойства товара в корзину Bitrix

use Bitrix\Main\Diag\Debug;
use Bitrix\Main\EventManager;
use Bitrix\Sale\Location\LocationTable;
use Bitrix\Sale\Order;
use Bitrix\Sale;

$eventManager = EventManager::getInstance();

$eventManager->addEventHandler(
'sale',
'OnSaleComponentOrderResultPrepared',
'OnSaleComponentOrderResultPrepared'
);

function OnSaleComponentOrderResultPrepared(
&$order,
&$arUserResult,
$request,
&$arParams,
&$arResult
)
{
// Получаем корзину текущего пользователя
$basket = Sale\Basket::loadItemsForFUser(
Sale\Fuser::getId(),
Bitrix\Main\Context::getCurrent()->getSite()
);

foreach ($basket as $basketItem) {

// Получаем данные товара из инфоблока
$els = CIBlockElement::GetList(
array(),
array("ID" => $basketItem->GetProductID()),
false,
false,
array("ID", "IBLOCK_ID", "PROPERTY_CODE")
);

if ($el = $els->GetNext()) {

// Получаем коллекцию свойств товара в корзине
$basketPropertyCollection = $basketItem->getPropertyCollection();

// Добавляем новое свойство
$basketPropertyCollection->setProperty(array(
array(
'NAME' => 'Номенклатура',
'CODE' => 'CODE',
'VALUE' => $el['PROPERTY_CODE_VALUE'],
'SORT' => 100,
),
));

// Сохраняем свойства
$basketPropertyCollection->save();
}
}
}


Как работает событие OnSaleComponentOrderResultPrepared

Событие OnSaleComponentOrderResultPrepared вызывается после подготовки всех данных компонента оформления заказа в Bitrix, но до фактического создания заказа.

На этом этапе:

  • объект заказа уже существует;
  • ID заказа еще отсутствует;
  • можно изменять содержимое корзины;
  • доступны товары заказа и их свойства.

Это позволяет гибко модифицировать заказ перед его сохранением и отправкой в 1С.

Что делает данный код

В приведенном примере:

  1. Получается корзина текущего пользователя;
  2. Перебираются все товары корзины;
  3. Для каждого товара запрашивается свойство PROPERTY_CODE;
  4. Создается новое свойство корзины — «Номенклатура»;
  5. Значение свойства сохраняется в заказе.

После оформления заказа это свойство будет передано в 1С вместе с остальными данными заказа.

Какие данные можно изменять через событие

Через OnSaleComponentOrderResultPrepared можно:
  • изменять свойства товаров;
  • менять цену товара;
  • изменять количество;
  • добавлять кастомные параметры;
  • работать со складами;
  • добавлять данные для CRM и 1С;
  • выполнять дополнительные проверки перед оформлением заказа.

Заключение

Событие OnSaleComponentOrderResultPrepared в Bitrix — мощный инструмент для кастомизации оформления заказа и интеграции с 1С. С его помощью можно передавать дополнительные свойства товаров, изменять параметры корзины и реализовывать сложную бизнес-логику без изменения ядра системы.

Такой подход особенно полезен для проектов с нестандартной интеграцией Bitrix и 1С, где требуется гибкое управление данными заказа перед его созданием.



Статьи на тему: Оставить комментарий
x
Комментарий успешно отправлен и будет доступен после проверки модератором!