Задать вопрос
  • Битрикс заглавные буквы в sitemap.xml?

    начните с проверки символьного кода "молчуна"
    Написано
  • Как отловить событие изменения остатка у товара?

    kikher
    @kikher Автор вопроса
    Максим Ткачев, спасибо. А не знаете как понять какой товар изменился после обмена?
    Написано
  • Почему возникает JSON error: Syntax error [4]?

    kikher
    @kikher Автор вопроса
    все проще, ссылка была на http а сайт на https
  • Почему возникает JSON error: Syntax error [4]?

    kikher
    @kikher Автор вопроса
    Алексей Уколов, в том то и прикол, все JSON валидаторы пишут что все ок, php json_last_error тоже пишет что ок
  • Как получить значение объекта CML2_ARTICLE и REGION_1?

    kikher
    @kikher Автор вопроса
    просто есть 2 свойства типа список, и одно работает, другое нет
  • Как получить значение объекта CML2_ARTICLE и REGION_1?

    kikher
    @kikher Автор вопроса
    Алексей Емельянов, хм, а почему тогда если записать свойсто через +.ITEM к примеру свойсво COLOR, пишем как COLOR.ITEM и он работает, дает нужный цвет, а это свойство и список, а строка CML2_ARTICLE не катит

    $elements = \Bitrix\Iblock\Elements\ElementCatalogTable::getList([
        'select' => ['ID', 'NAME','IBLOCK_SECTION_ID', 'REGION_1', 'IBLOCK_SECTION_ID',  'CML2_ARTICLE', 'BRAND_REF', 'COUNTRY', 'CML2_BAR_CODE', 'COLOR.ITEM'],
        'filter' => ['=ACTIVE' => 'Y', 'ID' => 25050],
    ])->fetchCollection();
    
    foreach ($elements as $element) {
        echo $element->getColor()->getItem()->getValue(); // дает нужный ццет
    }


    за мысль спасибо!
  • Как поулчить XML выгрузку на Битрикс с вложенными атрибутами?

    kikher
    @kikher Автор вопроса
    думал проще есть вариант, спасибо! реализовал что нужно!
  • Как расчитать цену по купону?

    kikher
    @kikher Автор вопроса
    Алексей Емельянов, нет, там post запрос.

    история проще чем я думаю, но пока не могу понять.
    Есть код, где я в тупую ставлю все ID.

    $coupon = array("CUPON");
    $externalUserIdArray = ['3','4','8','2'];
    $prices = CCatalogProduct::GetOptimalPrice(1099647, 1, $externalUserIdArray, 'N', '', SITE_ID, $coupon);
    echo "<h3> СО СКИДКОЙ ".$prices['DISCOUNT_PRICE']."</h3>";


    Код дает разный результат для авторизованных и не для авторизованных.
    К базовой цене есть доступ у всех, доступ к правилу и промокоду тоже у всех.

    не пойму в чем дело блин :/
  • Как расчитать цену по купону?

    kikher
    @kikher Автор вопроса
    Алексей Емельянов, не получатеся

    дописал ваш код в конец, убрал добавления купонов, оставил в одном месте

    $order = Order::create($siteId, $userID);
        $order->setPersonTypeId(4);
        //$order->setField('PRICE_DELIVERY', 770);
        $order->setField('CURRENCY', $currencyCode);
    
        // содаем корзину
        $basket = Bitrix\Sale\Basket::create($siteId);
        // применяем купон
      //  Bitrix\Sale\DiscountCouponsManager::add('CUPON');
    
        foreach ($products as $k => $product) {
    
        
            $item = $basket->createItem('catalog', $product['id']);
    
    
            $item->setFields([
                'QUANTITY' => $product['quantity'],
                'CURRENCY' => \Bitrix\Currency\CurrencyManager::getBaseCurrency(),
                'LID' => \Bitrix\Main\Context::getCurrent()->getSite(),
    
                'PRODUCT_PROVIDER_CLASS' => 'CCatalogProductProvider',
            ]);
    
        }
        $order->setBasket($basket);
    
        // Создаём одну отгрузку и устанавливаем способ доставки
        $shipmentCollection = $order->getShipmentCollection();
        $shipment = $shipmentCollection->createItem(
            \Bitrix\Sale\Delivery\Services\Manager::getObjectById($deliveryID)
        );
        $shipmentItemCollection = $shipment->getShipmentItemCollection();
    
        // наполняем корзину
        foreach ($order->getBasket() as $item) {
            $shipmentItem = $shipmentItemCollection->createItem($item);
            $shipmentItem->setQuantity($item->getQuantity());
        }
    
    // Создаём оплату
        $paymentCollection = $order->getPaymentCollection();
        $payment = $paymentCollection->createItem();
        $paySystemService = PaySystem\Manager::getObjectById($paymentID);
        $payment->setFields(array(
            'PAY_SYSTEM_ID' => $paySystemService->getField("PAY_SYSTEM_ID"),
            'PAY_SYSTEM_NAME' => $paySystemService->getField("NAME"),
        ));
    
        \Bitrix\Sale\DiscountCouponsManager::add('CUPON');
        $discount = $order->getDiscount();
    
        \Bitrix\Sale\DiscountCouponsManager::clearApply(true);
        \Bitrix\Sale\DiscountCouponsManager::useSavedCouponsForApply(true);
    
        $discount->setOrderRefresh(true);
        $discount->setApplyResult(array());
    
        /** @var \Bitrix\Sale\Basket $basket */
        $basket = $order->getBasket();
    
        $saveOrderResult = $basket->refresh(
            \Bitrix\Sale\Basket\RefreshFactory::create(
                \Bitrix\Sale\Basket\RefreshFactory::TYPE_FULL
            )
        );
    
        if (!$saveOrderResult->isSuccess()) {
            var_dump($saveOrderResult->getErrors());
        }
    
    
        $saveOrderResult = $discount->calculate();
        if (!$saveOrderResult->isSuccess()) {
            var_dump($saveOrderResult->getErrors());
        }
        $order->doFinalAction(true);
        foreach ($basket as $basketItem) {
            echo $basketItem->getField('NAME') . ' - ' . $basketItem->getQuantity() . '  цена ' . $basketItem->getPrice() . " итого " . $basketItem->getFinalPrice() . ' <br />';
        }
        
    }

    В вардампе ничего нет, ошибок нет : /
  • Как расчитать цену по купону?

    kikher
    @kikher Автор вопроса
    Роман Грицук,
    Убрал вообще цену из наполнения корзины.
    Проубю применить купон в раных местах, не выходит

    $order = Order::create($siteId, $userID);
        $order->setPersonTypeId(4);
        $order->setField('CURRENCY', $currencyCode);
    
        // содаем корзину
        $basket = Bitrix\Sale\Basket::create($siteId);
        // проубю тут применянить купон
        Bitrix\Sale\DiscountCouponsManager::add('CUPON');
    
        foreach ($products as $k => $product) {
    
           $optimalPrice = CCatalogProduct::GetOptimalPrice($product['id'], $product['quantity'], 8, 'N', '', SITE_ID,
                $promocode);
            $item = $basket->createItem('catalog', $product['id']);
    
            $item->setFields([
                'QUANTITY' => $product['quantity'],
                'CURRENCY' => \Bitrix\Currency\CurrencyManager::getBaseCurrency(),
                'LID' => \Bitrix\Main\Context::getCurrent()->getSite(),
    // тут убрал цену
                'PRODUCT_PROVIDER_CLASS' => 'CCatalogProductProvider',
            ]);
    
               }
        $order->setBasket($basket);
    
        // Создаём одну отгрузку и устанавливаем способ доставки
        $shipmentCollection = $order->getShipmentCollection();
        $shipment = $shipmentCollection->createItem(
            \Bitrix\Sale\Delivery\Services\Manager::getObjectById($deliveryID)
        );
        $shipmentItemCollection = $shipment->getShipmentItemCollection();
    
        // проубю тут применянить купон
        // инициирую и добавляю промокод
        Bitrix\Sale\DiscountCouponsManager::init();
        Bitrix\Sale\DiscountCouponsManager::add($promocode);
    
        // наполняем корзину
        foreach ($order->getBasket() as $item) {
            $shipmentItem = $shipmentItemCollection->createItem($item);
            $shipmentItem->setQuantity($item->getQuantity());
        }
    
    // Создаём оплату
        $paymentCollection = $order->getPaymentCollection();
        $payment = $paymentCollection->createItem();
        $paySystemService = PaySystem\Manager::getObjectById($paymentID);
        $payment->setFields(array(
            'PAY_SYSTEM_ID' => $paySystemService->getField("PAY_SYSTEM_ID"),
            'PAY_SYSTEM_NAME' => $paySystemService->getField("NAME"),
        ));
    
    
    /*
    // получаем объект скидок для корзины
        $oDiscounts = Bitrix\Sale\Discount::loadByBasket($basket);
    
    // обновляем поля в корзине
        $basket->refreshData(['PRICE','COUPONS']);
    
    // пересчёт скидок для корзины
        $oDiscounts->calculate();
    
    // получаем результаты расчёта скидок для корзины
        $result = $oDiscounts->getApplyResult();*/
    
    
    // хочу посмотреть товары со скидкой
        // проубю тут применянить купон
        \Bitrix\Sale\DiscountCouponsManager::init(
            \Bitrix\Sale\DiscountCouponsManager::MODE_ORDER,
            [
                "userId" => "78215"
            ]
        );
        \Bitrix\Sale\DiscountCouponsManager::add('CUPON');
        $discounts = $order->getDiscount();
        $discounts->calculate();
    
        foreach ($basket as $basketItem) {
            echo $basketItem->getField('NAME') . ' - ' . $basketItem->getQuantity() . '  цена ' . $basketItem->getPrice() . " итого " . $basketItem->getFinalPrice() . ' <br />';
        }
    
        $order->doFinalAction(true);


    но на выходе все так же
  • Как скрыть не активные элементы в фильтре по свойству ИБ "Привязка к элементам"?

    kikher
    @kikher Автор вопроса
    для чего? вы о чем?

    Фильтр а фильтре? копия свойства для чего?

    В фильтре есть не активные элементы, их нужно скрыть.
  • Как правильно отфильтровать доступные доставки в Битрикс?

    kikher
    @kikher Автор вопроса
    Роман Грицук, свойство было, но не было помечено "Использовать как почтовый индекс", оно системногое и используется "для расчета стоимости доставки". Галочку поставил, но ничего не изменилось, ошибка та же.

    У меня еще поле LOCATION используется "для расчета стоимости доставки"
  • Как правильно отфильтровать доступные доставки в Битрикс?

    kikher
    @kikher Автор вопроса
    $arLocation = \Bitrix\Sale\Location\LocationTable::getByCode($locationId)->fetch();
            $propertyCollection = $order->getPropertyCollection();
            $locationProperty = $propertyCollection->getDeliveryLocation();
            $locationProperty->setValue($arLocation["CODE"]);
           // $zipProperty = $propertyCollection->getDeliveryLocationZip();
            //$zipProperty->setValue("101000");
    // по ID LOCATION в свойствах заказа
            $somePropValue = $propertyCollection->getItemByOrderPropertyId(4);
    	//	пробую установить 
            $somePropValue->setValue("101000");


    на выходе еще больше доставок
  • Как правильно отфильтровать доступные доставки в Битрикс?

    kikher
    @kikher Автор вопроса
    Роман Грицук, добавил вес, добавил ZIP

    <?
            $products = [1 => ["id" => 226256, "quantity" => 1]];
    
            // есть код местоположения, Москва
            $locationId = '0000073738';
    
            // офорлеем
            $siteId = Context::getCurrent()->getSite();
            $currencyCode = CurrencyManager::getBaseCurrency();
    
            // содаем корзину
            $basket = Bitrix\Sale\Basket::create($siteId);
            foreach ($products as $product) {
                $item = $basket->createItem('catalog', $product['id']);
                unset($product["id"]);
                $item->setFields([
                    'QUANTITY' => $product['quantity'],
                    'CURRENCY' => \Bitrix\Currency\CurrencyManager::getBaseCurrency(),
                    'LID' => \Bitrix\Main\Context::getCurrent()->getSite(),
                    'PRODUCT_PROVIDER_CLASS' => 'CCatalogProductProvider',
                    'WEIGHT' => 5000,
                ]);
            }
    
            // пока пишем тестового пользвателя
            $order = Bitrix\Sale\Order::create($siteId, 67020);
            $order->setPersonTypeId(1);
            $order->setBasket($basket);
    
            // дополняем заказ метоположением заказа
    
            $arLocation = \Bitrix\Sale\Location\LocationTable::getByCode($locationId)->fetch();
            $propertyCollection = $order->getPropertyCollection();
            $locationProperty = $propertyCollection->getDeliveryLocation();
            $locationProperty->setValue($arLocation["CODE"]);
            $zipProperty = $propertyCollection->getDeliveryLocationZip();
            $zipProperty->setValue("101000");
    
    
            // Создаём одну отгрузку и получаем доставки
            $shipmentCollection = $order->getShipmentCollection();
            $shipment = $shipmentCollection->createItem();
            $shipmentItemCollection = $shipment->getShipmentItemCollection();
            $shipment->setField('CURRENCY', $order->getCurrency());
            foreach ($order->getBasket() as $item) {
                $shipmentItem = $shipmentItemCollection->createItem($item);
                $shipmentItem->setQuantity($item->getQuantity());
            }
    
            //проверка доступности отгрузки и получение списка доставок
            $mode = \Bitrix\Sale\Services\Base\RestrictionManager::MODE_CLIENT;
            $deliveryList = \Bitrix\Sale\Delivery\Services\Manager::getRestrictedList($shipment, $mode);
    
            $resultDelivery = [];
            $restrictionParams = ['ID' => 'ID'];
    
            // дополнительно фильтрую отгрузки по доступности города
            foreach ($deliveryList as $delivery) {
                if (Bitrix\Sale\Delivery\Restrictions\ByLocation::check($locationId, $restrictionParams, $delivery['ID'])) {
                    $resultDelivery[] = $delivery;
                    echo "<br>";
                    print_r($delivery);
    
                }
            }
    
            ?>


    но на выходе 2023-11-08 11:43:25 - UNCAUGHT_EXCEPTION - [Error]
    Call to a member function setValue() on null (0)

    без
    $zipProperty = $propertyCollection->getDeliveryLocationZip();
            $zipProperty->setValue("101000");


    отрабатывает но с ошибкой по прежнему.

    Может нужно принудительно с свойство заказа "местоположение" записывать?
  • Почему не корректно работает фильтр в Bitrix?

    а по умолчанию какой параметр стоит?
    покажите как фильтруете
  • Как правильно отфильтровать доступные доставки в Битрикс?

    kikher
    @kikher Автор вопроса
    Роман Грицук, спасибо, видел, но что то не вышло, пробую еще
  • Возможно ли передать адреса из сделок на карту стороннего сервиса?

    может есть смысл создать поле в битриксе с картой куда поставить эти точки? там есть поле адрес
  • Как исправить create_function на php 8?

    by_steris, выше же напсиали. замените create_function на static function