Скрипт который создаст и сразу удалит 10 000 заказов. Нужно было на одном из проектов, начать отсчет...

Михаил Базаров

Дата последнего входа: вчера в 19:42
Дата регистрации: 7 февраля 2012 21:17
День рождения: 7 ноября
Пол: Мужской
показать полностью
Михаил Базаров -> Всем
декабря 1, 2020 11:53 am
Скрипт который создаст и сразу удалит 10 000 заказов.
Нужно было на одном из проектов, начать отсчет ID заказов (не номеров а именно ID)
с 10 000  (ох уж эти 1С ники).

После удаления заказов, даже всех, отсчет ID продолжается с последнего созданого.
Потому, просто создаем и сразу удаляем 10 000 заказов.
PS: Скрипт удалит все заказы. Если нужны те- которые созданы до запуска скрипта, доработайте цикл - на удаление именно созданного им заказа.
Вариант "в лоб" - поменять ID прямо в базе, меня не устраивал.

Bitrix\Main\Loader::includeModule('sale');
Bitrix\Main\Loader::includeModule('catalog');

for ($i=0; $i<10000; $i++) {   // ПОМЕНЯТЬ НА СВОЮ ЦИФРУ - если нужно больше/меньше заказов
   $products = array(
       array('PRODUCT_ID' => 1811, 'NAME' => 'Товар 1', 'PRICE' => 500, 'CURRENCY' => 'RUB', 'QUANTITY' => 5)
   );

   $basket = Bitrix\Sale\Basket::create(SITE_ID);

   foreach ($products as $product) {
       $item = $basket->createItem("catalog", $product["PRODUCT_ID"]);
       unset($product["PRODUCT_ID"]);
       $item->setFields($product);
   }

   $order = Bitrix\Sale\Order::create(SITE_ID, 1);
   $order->setPersonTypeId(2);
   $order->setBasket($basket);

   $shipmentCollection = $order->getShipmentCollection();
   $shipment = $shipmentCollection->createItem(
       Bitrix\Sale\Delivery\Services\Manager::getObjectById(1)
   );

   $shipmentItemCollection = $shipment->getShipmentItemCollection();

   /** @var Sale\BasketItem $basketItem */

   foreach ($basket as $basketItem) {
       $item = $shipmentItemCollection->createItem($basketItem);
       $item->setQuantity($basketItem->getQuantity());
   }

   $paymentCollection = $order->getPaymentCollection();
   $payment = $paymentCollection->createItem(
       Bitrix\Sale\PaySystem\Manager::getObjectById(1)
   );
   $payment->setField("SUM", $order->getPrice());
   $payment->setField("CURRENCY", $order->getCurrency());

   $result = $order->save();
   if (!$result->isSuccess()) {
       //$result->getErrors();
   }
}

// УДАЛЕНИЕ ВСЕХ ЗАКАЗОВ - можно перенести в цикл на создание и сразу удаление именно этого заказа
$orders = CSaleOrder::GetList(array("ID" => "DESC"), array(), false, false, array('ID'));
   while ($order = $orders->Fetch()) {
        $result = CSaleOrder::Delete($order['ID']);
   }


Авторизация

На сайте работает вход через социальные сети. Просто, выберите наиболее удобную сеть и авторизация произойдет автоматически:
Проходя авторизацию, Вы безоговорочно принимаете условия политики конфеденциальности