Телеграм: @camouf_ru Почта: mihail@bazarow.ru

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

Просмотров: 5584

Рассмотрим как, в магазине работающем на 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

Guest 10.09.2021
а возможно ли установить наценку не процент а допустим плюс 100 р на весь товар
Михаил Базаров 11.09.2021
Цитата
Guest написал:
а возможно ли установить наценку не процент а допустим плюс 100 р на весь товар
Именно через наценки, думаю, не получится
Но можно, просто изменить цену, пробежавшись по всем товарам циклом и этим же методом ( CPrice::Update)  обновить цены.
Эта заметка поможет
https://camouf.ru/blog-note/6554/
Там цена копируется из свойства- вам, вместо получения свойства, достаточно просто получать текущую цену (любую), прибавлять к ней 100 и сохранять в любую другую цену (или эту же)
Guest 29.09.2021
Я правильно понял, можно пустую страницу создать .php закинуть туда код, и открыть в браузере?
Если да, то у меня не срабатывает, показывает код
Михаил Базаров 29.09.2021
Цитата
Guest пишет:
Я правильно понял, можно пустую страницу создать .php закинуть туда код, и открыть в браузере?
Если да, то у меня не срабатывает, показывает код
Да, код не забудте взять в <? тут код ?>
Василий 20.11.2021
Здравствуйте, подскажите, а как применить этот скрипт и для торговых предожений?

спасибо
Михаил Базаров 21.11.2021
Цитата
Василий пишет:
Здравствуйте, подскажите, а как применить этот скрипт и для торговых предожений?

спасибо
В принципе, точно так же- должно сработать. Просто, указывайте ID инфоблока с ТП
Гость 21.11.2021
Цитата
написал:
Цитата
Василий пишет:
Здравствуйте, подскажите, а как применить этот скрипт и для торговых предожений?

спасибо
В принципе, точно так же- должно сработать. Просто, указывайте ID инфоблока с ТП
спасибо сработало!  
Гость 18.11.2022
Добрый день!
Подскажите, а как сделать, если мне нужно для определенного типа цены применить наценку не на все товары, а только для определенного раздела.
Например есть у меня тип цены «ИП Пупкин» и раздел «Тапки». Вот для товаров этого раздела и применить для типа цены «ИП Пупкин» наценку - 100% ?
Михаил Базаров 18.11.2022
Можно в фильтре отобрать товары только нужного раздела

Код
$getElementId = CIBlockElement::GetList(
    Array("ID" => "ASC"),
    Array(
          "IBLOCK_ID" => $IBLOCK_ID,
          'SECTION_ID' => 33 // ID нужного раздела
),
    false, false,
    Array('ID')
);
Гость 21.11.2022
Цитата
написал:
Код
 $getElementId = CIBlockElement::GetList(
    Array("ID" => "ASC"),
    Array(
          "IBLOCK_ID" => $IBLOCK_ID,
          'SECTION_ID' => 33 // ID нужного раздела
),
    false, false,
    Array('ID')
); 

А из-за чего может быть 500 ошибка при обращении к скрипту?

Вот код

Скрытый текст

Записная книжка разработчика

Примерно с 2013-го года пишу заметки по разработке сайтов на Битрикс.
Вы можете задавать уточняющие вопросы в комментариях- отвечаю или дополняю заметки по возможности.

Композитный сайт на 1С-Битрикс Просмотров: 3037 Для новых клиентов: Все новые проекты будут включать в себя применение технологии "Компози... Привязка к разделам в компоненте "Добавления элементов пользователем" Просмотров: 12062 В системе управления 1С Битрикс есть компонент "Форма добавления / редактирования" - котор... Вывести дополнительное пользовательское поле, использование полей в ф... Просмотров: 15479 Если вам нужно вывести дополнительное пользовательское поле типа "Привязка к разделам инфо... Открытие мобильного приложения Apache Cordova по ссылке Просмотров: 683 Достаточно часто нужно реализовывать открытие мобильного приложения по ссылке. Например: п... Удалить товары из корзины, если есть определенные товары. Просмотров: 879 Задача: если в корзину добавлены товары с определенным свойством, нужно удалить из корзины... Вывести множественное свойство типа файл с названием и весом файла в ... Просмотров: 20203 В этой заметке расскажу как красиво вывести множественное свойство типа файл в инфоблоке 1... Свойство: привязка к Яндекс:Картам - вывести из нескольких элементов ... Просмотров: 17737 Предположим, что у вас есть инфоблок со свойством "Привязка к яндекс картам". В этом инфоб... Заполнить поля пользователя из свойства заказа, на примере ФИО Просмотров: 1199 При создании заказа покупатель заполняет поле "ФИО". Необходимо скопировать эти данные в п... Установка вебсервера на Apple M1 (нативный ARM стек), оптимизированны... Просмотров: 6142 Появилась задачка, установить стек MAMP (macOS, Apache, MYSQL, PHP) на рабочий ноутбук с п... Вывести список всех пользователей с необходимой информацией Просмотров: 24096 Если нужно, на какой-либо странице сайта, вывести всех пользователей из группы "Зарегистир... Вывести информацию, только на первом уровне раздела каталога, в 1С-Би... Просмотров: 4253 Задача: на сайте, в каталоге, выводится два фильтра - боковой и верхний. Оба компонента по... Многосайтовость битрикс на разных доменах и поддоменах Просмотров: 61272 Часто спрашивают "как настроить многосайтовость Битрикс на разных доменах", решил записать... Если папка то применяем...в Битрикс Просмотров: 29223 Бывает, стоит задача применить какой-либо стиль или вывести конкретный кусочек кода для ди... Ajax форма обратной связи, реализация в битрикс Просмотров: 7580 Иногда, на сайте требуется создать форму обратной связи, которая будет писать все данные в... Малая корзина Битрикс, упрощенный шаблон Просмотров: 12543 Шаблон малой корзины битрикс, который можно вывести в боковом разделе шаблона или в шапке ... Создание раздела инфоблока при регистрации пользователя в Битрикс Просмотров: 7913 Например вам нужно выводить информацию исключительно для определенного пользователя. Само ... Очистка корзины в 1С-Битрикс одним нажатием Просмотров: 27754 В стандартной корзине Битрикс не хватает кнопки для полной очистки корзины одним нажатием... Вывести производителей на сайте с отбором его товаров из каталога Просмотров: 18244 Достаточно частая задачка для каталога или интернет-магазина: вывести список производителе... Рассылка новинок каталога в автоматическом режиме Просмотров: 1161 Что бы реализовать рассылку новинок каталога на email-ы пользователей, можно воспользовать... Снять ограничение на количество символов в комментарии к заказу магаз... Просмотров: 11554 Как многим известно, в интернет-магазине на Битрикс имеется ограничение на количество симв...