Добрый день
UPD:
проблема в корзине оказалась как я и подозревал поначалу.
Поскольку я все равно передаю все данные о товарах в метод создания заказа, оказалось достаточно в начало метода поместить:
CSaleBasket::DeleteAll(CSaleBasket::GetBasketUserID());
Симптом вылечил, осталось найти саму причину...
В общем спасибо за уделенное время
--------
Заказы на сайте создавались через d7, на основе методики, описанной в доке (https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&LESSON_ID=8409 )
Все работало без проблем, обновили сайт (до версии БУС 18.5.180) и товары при создании заказа стали дублироваться.
Так же добавляется системная отгрузка "Без отгрузки". Но у нее стоит галочка "не показывать в административном разделе" и ее не должно быть видно.
Из консоли php код отрабатывает нормально, а если из корзины вызывать этот же код, то эта проблема снова проявляется.
Я проводил такой эксперимент: на сайте закинул 2 единицы товара, а в коде из консоли захардкодил 3 единицы того же товара. Добавилось 3 единицы кодом из консоли и еще 2 единицы непонятно чем. Причем для этих двух единиц название товара подтянулось из предложения (они отличаются немного). И так же дополнительно создалась отгрузка "Без доставки".
Это получается где-то повесился слушатель на событие создания заказа. В смысле добавился новый Но не понятно как его найти.
Кто-нибудь сталкивался с подобным? Что тут вообще можно сделать?
Буду сильно благодарен за советы
Вот сам код, который используется для создания заказа:
UPD:
проблема в корзине оказалась как я и подозревал поначалу.
Поскольку я все равно передаю все данные о товарах в метод создания заказа, оказалось достаточно в начало метода поместить:
CSaleBasket::DeleteAll(CSaleBasket::GetBasketUserID());
Симптом вылечил, осталось найти саму причину...
В общем спасибо за уделенное время
--------
Заказы на сайте создавались через d7, на основе методики, описанной в доке (
Все работало без проблем, обновили сайт (до версии БУС 18.5.180) и товары при создании заказа стали дублироваться.
Так же добавляется системная отгрузка "Без отгрузки". Но у нее стоит галочка "не показывать в административном разделе" и ее не должно быть видно.
Из консоли php код отрабатывает нормально, а если из корзины вызывать этот же код, то эта проблема снова проявляется.
Я проводил такой эксперимент: на сайте закинул 2 единицы товара, а в коде из консоли захардкодил 3 единицы того же товара. Добавилось 3 единицы кодом из консоли и еще 2 единицы непонятно чем. Причем для этих двух единиц название товара подтянулось из предложения (они отличаются немного). И так же дополнительно создалась отгрузка "Без доставки".
Это получается где-то повесился слушатель на событие создания заказа. В смысле добавился новый Но не понятно как его найти.
Кто-нибудь сталкивался с подобным? Что тут вообще можно сделать?
Буду сильно благодарен за советы
Вот сам код, который используется для создания заказа:
Код |
---|
Bitrix\Main\Loader::includeModule('sale'); Bitrix\Main\Loader::includeModule('catalog'); global $USER; $user_id = $USER->GetID(); $siteId = 's2' ; $basket_data['ITEMS'] = array( array('PRODUCT_ID' => 29091, 'NAME' => 'Убер-плюшка', 'PRICE' => 554, 'CURRENCY' => 'RUB', 'QUANTITY' => 3) ); $currencyCode = 'RUB'; $basket = Bitrix\Sale\Basket::create($siteId); $count = 0; foreach ($basket_data['ITEMS'] as $item) { $productID = $item['PRODUCT_ID']; $basket_item = $basket->createItem("catalog", $productID); unset($item["PRODUCT_ID"]); $fieldArray = array( 'QUANTITY' => (int) $item['QUANTITY'], 'CURRENCY' => $currencyCode, 'LID' => $siteId, 'NAME' => (string) $item['NAME'], 'PRICE' => (string) $item['PRICE'], ); $basket_item->setFields($fieldArray); $count += (int) $item['QUANTITY']; } $order = Bitrix\Sale\Order::create($siteId, $user_id); $order->setPersonTypeId(1); # физ.лицо $order->setField('CURRENCY', $currencyCode); $order->setField('STATUS_ID','NP'); $order->setBasket($basket); $order->save(); #отгрузка $shipmentCollection = $order->getShipmentCollection(); $shipment = $shipmentCollection->createItem( Bitrix\Sale\Delivery\Services\Manager::getObjectById(2) ); $shipmentItemCollection = $shipment->getShipmentItemCollection(); # вся корзина в одной отгрузке foreach ($basket as $basketItem) { $item = $shipmentItemCollection->createItem($basketItem); $item->setQuantity($basketItem->getQuantity()); } # оплаты $paymentCollection = $order->getPaymentCollection(); $payment = $paymentCollection->createItem( Bitrix\Sale\PaySystem\Manager::getObjectById(8) ); $payment->setField("SUM", $order->getPrice()); $payment->setField("CURRENCY", $order->getCurrency()); // $order->doFinalAction(true); $result = $order->save(); |