Задать вопрос
CheshireCat
@CheshireCat
full-stack developer

Как массово добавить цену всем товарам в инфоблоке в Битрикс?

Привет! У меня есть инфоблок с разделами товаров. Задача - нужно всем товарам в каждой категории заданного инфоблока добавить (не изменить, сейчас цены вообще нет) одинаковую цену (BASE). Чтобы не делать это вручную для сотни позиций.

Как это можно сделать?
Я вижу, что есть следующий метод CPrice::Add, но так как Битрикс совсем что-то новое для меня, не знаю как его адаптировать под весь каталог товаров.
Может это вообще SQL запросом можно сделать?
Допустим, сделать всем цену 1 руб.
  • Вопрос задан
  • 799 просмотров
Подписаться 1 Простой 3 комментария
Пригласить эксперта
Ответы на вопрос 1
@haramba
Почему вопросы о про битрикс такие тупые?
Оформите самостоятельно, я с мобилки.
Можно также CPrice::GetList опустить с апдейтом или вынести вне цикла, предварительно собрав ID элементов.

Если много элементов, то разбить на части выполнение, либо 4-й параметр nPageSize, iNumPage. либо один раз считать idшники в сессию/файл,

$PRICE_TYPE_ID = 1;
$IBLOCK_ID = 8;


$res = CIBlockElement::GetList([], ["IBLOCK_ID" => $IBLOCK_ID], false, false, ["ID"]);
while ($item = $res->Fetch())
{
$PRODUCT_ID = $item["ID"];
$arFields = Array(
    "PRODUCT_ID" => $PRODUCT_ID,
    "CATALOG_GROUP_ID" => $PRICE_TYPE_ID,
    "PRICE" => 1,
    "CURRENCY" => "RUB",
);

$res = CPrice::GetList(
        array(),
        array(
                "PRODUCT_ID" => $PRODUCT_ID,
                "CATALOG_GROUP_ID" => $PRICE_TYPE_ID
            )
    );

if ($arr = $res->Fetch())
{
    CPrice::Update($arr["ID"], $arFields);
}
else
{
    CPrice::Add($arFields);
}
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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