Разработка на 1С-Битрикс Михаил Базаров
Блог-note

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

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

Получение элементов инфоблока через 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С-Битрикс

Стоимость разработки сайта зависит от объёма и сложности проекта. Ниже приведены ориентировочные цены, как правило не выходят за обозначенные рамки. Срок разработки зависит от сложности проекта: как правило называю сроки с запасом.

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

Включено в стоимость разработки

В цену уже заложено всё, что нужно для легального и быстрого запуска. Доплачивать за базовые вещи не придётся.

  • Лицензия и модули

    Лицензия на «1С-Битрикс» нужной редакции, дополнительные модули и видео-инструкции по работе с готовым проектом.

  • Скорость и SEO

    Оптимизация кода и сервера под быструю загрузку, базовая SEO-оптимизация и добавление сайта в поисковые системы.

Блог-note

Заметки по 1С-Битрикс