Для нормальной работы каталога и корзины (ввод количества товара по коэффициенту), дабы не городить огород и не переписывать, по отдельности шаблоны каталога (списка, топа, карточки) и корзины - просто скопируем коэффициенты из свойства в поле торгового каталога.
Скрипт для запуска в ручную, по крону или на событие в init.php:
Cmodule::IncludeModule('iblock'); Cmodule::IncludeModule('catalog'); $iblockId = 29; $updateElements = CIBlockElement::GetList( Array("ID" => "ASC"), Array("IBLOCK_ID" => $iblockId), false, false, Array( 'ID', 'PROPERTY_KOLVO_VALUE' ) ); while ($arFields = $updateElements->GetNext()) { $coeff = $arFields['PROPERTY_KOLVO_VALUE']; $curElementRatio = CCatalogMeasureRatio::getList( Array(), array('IBLOCK_ID' => $iblockId, 'PRODUCT_ID' => $arFields['ID']), false, false); while ($arRatio = $curElementRatio->GetNext()) { $ratioId = $arRatio['ID']; } CCatalogMeasureRatio::update($ratioId, Array( 'PRODUCT_ID' => $arFields['ID'], 'RATIO' => $coeff) ); }
Пояснение
C помощью CIBlockElement::GetLis - получили элементы инфоблока с ИД 29.
Нам нужны только ID элементов и значение свойства PROPERTY_KOLVO_VALUE
Значение коэффициента загнали в переменную $coeff
Внутри цикла (каждого элемента), с помощью CCatalogMeasureRatio::getList получили ID коэффициента конкретного товара (элемента) и загнали в переменную $ratioId
С помощью CCatalogMeasureRatio::update перезаписали/установили коэффициенты для конкретного товара
PS: Если коэффициентов еще не было (пустые). Можно их создать, тут же в цикле, методом CCatalogMeasureRatio::add с любым значением. И тут же перезаписать. Или сразу добавить с нужным значением.