Массово: применить наценку ко всем товарам каталога с пересчетом от базовой.

Просмотров: 96 | Комментариев: 0

Рассмотрим как, в магазине работающем на 1С-Битрикс, массово применить наценку на все товары каталога. Устанавливать будем для не базовой цены. При каждом обновлении базовой цены (например при обновлении товаров импортом), наша цена будет пересчитываться согласно наценке.

Для начала: в настройках магазина, создаем новый тип цены "Цена продажи" и выставляем права на просмотр и покупку нужной группе пользователей (в моем случае для всех). Также, запрещаем всем пользователям просмотр и покупку по Базовой цене

применить наценку ко всем товарам каталога

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

применить наценку ко всем товарам каталога

Запоминаем:
- ID типа цены, на которую нужно установить наценку: в моем случае 4
- ID наценки, которую нужно применить к этому типу цен: у меня опять 1
- ID инфоблока с которым работаем: у меня 5-ый

Применяем наценку методом CPrice::Update

Дальше все просто: нам нужно перебрать все товары каталога методом CIBlockElement::GetList и методом CPrice::Update обновить параметры нужного типа цен.

Запускаем выполнение вот этого кода:
Обратите внимание, в методе CIBlockElement::GetList используем Fetch, вместо GetNext - так как нужны только ID элементов (товаров). Fetch - отрабатывает быстрее, не содержит всех данных о элементе.

Cmodule::IncludeModule('iblock');
Cmodule::IncludeModule('catalog');

$IBLOCK_ID = 5; // Инфоблок
$EXTRA_ID = "1"; // Наценка
$PRICE_ID = "4"; // Тип цены

$getElementId = CIBlockElement::GetList(
    Array("ID" => "ASC"),
    Array("IBLOCK_ID" => $IBLOCK_ID),
    false, false,
    Array('ID',)
);
while ($arID = $getElementId->Fetch()) {
    $arFields = Array(
        "PRODUCT_ID" => $arID['ID'],
        "CATALOG_GROUP_ID" => $PRICE_ID,
        "EXTRA_ID" => $EXTRA_ID,
        "CURRENCY" => "RUB",
    );
    $res = CPrice::GetList(
        array(),
        array(
            "PRODUCT_ID" => $PRODUCT_ID,
            "CATALOG_GROUP_ID" => $PRICE_TYPE_ID
        )
    );
    if ($arr = $res->Fetch()) {
        CPrice::Update($arFields);
    } else {
        CPrice::Add($arFields);
    }
}

И проверяем результат, зайдя в любой товар. Должна установиться наценка на выбранный тип цены и расчитаться сама цена на основе базовой. При изменении цены товара, автоматически пересчитывается наша цена.

применить наценку ко всем товарам каталога

Если потребуется изменить величину наценки. Просто заходите в ее (наценки) настройки, меняете величину и ставите чекбокс на Пересчитать цены. Автоматически перезапишутся цены, с этой наценкой.

применить наценку ко всем товарам каталога

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

Если нужно устанавливать наценку для новых товаров, которых не было до запуска скрипта, можно сделать обработчик в init.php срабатывающий на событие добавление элемента OnAfterIBlockElementAdd

Необходимо войти что бы оставить комментарий:
Решения на битрикс

Магазин, на базе готового решения от 35 900 рублей / от 3 до 5 дней

В стоимость входит: Подбор решения из более 200-от готовых сайтов, под Вашу задачу. Полный запуск сайта на сервере или хостинге, со всеми настройками. Лицензия Битрикс "Малый бизнес". Базовая СЕО оптимизация. Инструкции по работе с сайтом. Небольшие доработки под задачу.
Интернет-магазин от 210 000 рублей / от 5-ти недель Сайт компании от 90 000 рублей / от 4-х недель Инфоресурс от 90 000 рублей / от 5-ти недель Адаптивный сайт от 40 000 рублей / от 2-х недель Персональный сайт от 60 000 рублей / от 3-х недель Мобильное приложение от 180 000 рублей / от 4-х недель
Узнать точную стоимость разработки: Для этого, достаточно, как можно подробнее, заполнить вот этот опросник: Скачать опросник и выслать на электронную почту mihail@bazarow.ru.
Смогу задать уточняющие вопросы и оценить проект по срокам и стоимости.
Поделиться заметкой: Спасибо, это помогает развивать сайт:

Авторизация

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