Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Пересчет/переопределение позиций заказа

00 голосов
4
У нас на сайте обмен с 1с организован след. образом.
Приходит CSV содержащий ID закаса и новые позиции или обновление старых. ВСЕ старые позиции, их количества, свойства и т.д. удаляются из заказа (из корзины, привязанной к заказу). ПОсле этого предполагалось создать
$tempBasket = new CSaleBasket; 
и подабавлять в неё из CSV данных,
потом привязать $tempBasket->OrderBasket($orderID, $fUserID);
$fUserID пользователя получаем зареннее по уже существующим позициям до этого  (которые мы удаляем).

В итоге позиции удаляются, новые позиции в корзину временную добавляются НО корзина НЕ привязывается к заказу. В итоге заказы все остаются без позиций.

Что делать не знаю, уже и так и сяк и наперекосяк сделал.

Как правильно осуществить этот алгоритм? ( Уже в ярости.
спросил 12 Фев, 13 от Eliga (360 баллов)

4 Ответы

00 голосов
Покажите свой код добавления позиций в корзину.
ответил 12 Фев, 13 от Pomnep (13,960 баллов)
00 голосов
Формирование позиций:
Код
foreach($orderPositions as $positionKey => $position)
         {

         
            
         
            //Order properties adding
            $props[] = array(
               "NAME" => "Склад",
               "CODE" => "WAREHOUSE",
               "VALUE"   => $position["WAREHOUSE_ID"],
               "SORT" => "100"
            );
            
            $props[] = array(
               "NAME" => "Статус",
               "CODE" => "STATUS",
               "VALUE"   => $position["STATUS_ID"],
               "SORT" => "200"
            );
            
            $props[] = array(
               "NAME" => "Отгружено",
               "CODE" => "SHIPPED",
               "VALUE"   => $position["SHIPPED"],
               "SORT" => "300"
            );
            $props[] = array(
               "NAME" => "Дата отгрузки",
               "CODE" => "DATE_SHIPPED",
               "VALUE"   => $position["DATE_SHIPPED"],
               "SORT" => "400"
            );
            $props[] = array(
               "NAME" => "ID брака",
               "CODE" => "BRAQUE_ID",
               "VALUE"   => $position["BRAQUE_ID"],
               "SORT" => "500"
            );

            $props[] = array(
               "NAME" => "XML_ID",
               "CODE" => "PRODUCT.XML_ID",
               "VALUE"   => $position["PRODUCT_XML_ID"],
               "SORT" => "9999"
            );
            

               $aF = array(
                        "PRODUCT_ID" => $nomenclature[$position["PRODUCT_XML_ID"]]["ID"],
                        "PRICE" => $position["PRICE"],
                        "CURRENCY" => shiftPriceCode($position["CURRENCY"]),
                        "QUANTITY" =>  $position["QUANTITY"],
                        "LID" => "s1",
                        "NAME" =>  $nomenclature[$position["PRODUCT_XML_ID"]]["NAME"],
                        "DETAIL_PAGE_URL" =>  $nomenclature[$position["PRODUCT_XML_ID"]]["DETAIL_PAGE_URL"],
                        "PROPS" => $props,
                        "MODULE" => "sale",
                        "FUSER_ID" => $fuser_id,

               );
            
            var_dump($aF);
            var_dump($tempOrder->Add($a
ответил 11 Март, 13 от Eliga (360 баллов)
00 голосов
Для начала, MODULE_ID у Вас должен быть catalog, а не sale. Затем, удалять существующие позиции не надо. Метод CSaleBasket::Add ищет в корзине существующий товар и, если находит, обновляет. Задайте Callback-функции. Ну и проверьте, какой FUSER_ID реально записывается в корзину.
ответил 04 Апр, 13 от Pomnep (13,960 баллов)
00 голосов
У нас может быть ситуация когда позиция пропадает (поностью удалена), а другая - совершенно нвая добавляется из 1С. Т.е. по согласованию с менеджером позиция должна полностью обновляться через CSV. Плюс очень большое количество свойств изменяется - (например, статус), и битрикс добавит эту позицию сверху, как отличную от предыдущей (посчитает это как два заказа например одинаковой блузки но разного цвета - а у нас по факту эта позиция одна и та же, просто её статус изменился с "поступила на склад" на "в пути").
ответил 31 Июль, 13 от Eliga (360 баллов)

Похожие вопросы

0 голосов
2 ответов
спросил 29 Сен, 13 от BeHuk (320 баллов)
0 голосов
7 ответов
спросил 27 Май, 13 от AlexSol (240 баллов)
0 голосов
2 ответов
спросил 17 Июль, 13 от Kania (5,180 баллов)
0 голосов
2 ответов
спросил 07 Май, 13 от Mushu (640 баллов)
0 голосов
1 ответ