Массово изменить коэффициент единицы измерения в каталоге

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

Задача: всем товарам каталога или товарам определённого раздела изменить коэффициент единицы измерения.

Получение элементов инфоблока через D7 и обновление коэффициента

Данная заметка является дополнением к статье Коэффициент единицы измерения из свойства элемента.

Этот код можно выполнить в командной строке PHP или добавить в агента/cron-задание, если требуется регулярно менять коэффициент по расписанию.

use Bitrix\Main\Loader;
use Bitrix\Iblock\ElementTable;
use Bitrix\Catalog\MeasureRatioTable;

Loader::includeModule('iblock');
Loader::includeModule('catalog');

$arElements = ElementTable::getList([
    'filter' => [
        'IBLOCK_ID' => 3, // Идентификатор инфоблока
        'SECTION_ID' => 15 // Раздел 15 или удалите, чтобы изменить все товары
    ],
    'select' => [
        'ID'
    ],
])->fetchAll();

foreach ($arElements as $item) {
    // Получаем ID коэффициента для этого товара
    $curElementRatio = MeasureRatioTable::getList([
        'filter' => [
            '=PRODUCT_ID' => $item['ID'],
        ],
        'limit' => 1, // Не обязательно, так как обычно один
        'select' => [
            'ID'
        ],
    ])->fetch();

    // Обновляем коэффициент
    MeasureRatioTable::update($curElementRatio['ID'], [
        'RATIO' => 1.7, // Можно указать float или int
    ]);
}

Этот скрипт выбирает все товары из инфоблока с ID 3 внутри раздела 15 (если раздел указан). Для каждого товара получает текущий коэффициент единицы измерения и устанавливает новый значение 1.7.

Менять коэффициент при обмене с 1С-Предприятие

Если у вас нет возможности указывать коэффициент прямо в 1С, что бы она передавала его на сайт. Можно перехватывать событие измненеия элемента и принудительно менять коэффициент. Код добавляем в /local/php_interface/init.php (или в /bitrix/php_interface/init.php)

use Bitrix\Main\EventManager;
use Bitrix\Main\Loader;

EventManager::getInstance()->addEventHandler("iblock", "OnBeforeIBlockElementUpdate", "changeMeasureRatio");

function changeMeasureRatio(&$arFields) {
    if ($_REQUEST['mode'] == 'import') {
        Loader::includeModule('catalog');

        // Получаем ID коэффициента для этого товара
        $curElementRatio = \Bitrix\Catalog\MeasureRatioTable::getList([
            'filter' => [
                '=PRODUCT_ID' => $arFields['ID'],
            ],
            'limit' => 1,
            'select' => ['ID'],
        ])->fetch();

        if ($curElementRatio) {
            // Обновляем коэффициент
            \Bitrix\Catalog\MeasureRatioTable::update($curElementRatio['ID'], [
                'RATIO' => 1.7, // Можно указать float или int
            ]);
        }
    }
}

Стоимость разработки на 1С-Битрикс:

Индивидуальная разработка магазина

от 400 000 руб. от 5-ти недель

Разработка магазина на 1С-Битрикс с нуля. Дизайн, сборка и оптимизация производительности под конкретный проект и требования. Реализация любого функционала без ограничений готовых решений.

Запуск сайта на готовом решении

от 100 000 руб. от 7-ми дней

Вариант для тех, кто не хочет тратить много средств на индивидуальный проект, и не имеет серьезных требований к сайту. Магазин, быстро запускается на базе одного из 200-та готовых решений.

Мобильное приложение

от 400 000 руб. от 1-го месяца

Разработка кроссплатформенного мобильного приложения, которое не уступает нативным решениям как в производительности, так и пользовательском опыте. Публикуется в AppStore, GooglePlay и RuStore

Сайт компании

от 250 000 руб. от 1-го месяца

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

Инфресурс

от 300 000 руб. от 5-ти недель

Информационный ресурс любой сложности. Сайт для СМИ, городской портал или многопользовательская доска объявлений. Внутренние форумы, блоги- по необходимости.

Лечение сайтов от вирусов

от 30 000 руб. от 2-х дней

Выполню полную проверку сайта и окружения. В случае обнаружения вирусов проведу полный комплекс лечения проекта и закрытия лазеек.