Скрипт для запуска в ручную, по крону или на событие в init.php:
Cmodule::IncludeModule('iblock');
Cmodule::IncludeModule('catalog');
$iblockId = 6;
$updateElements = CIBlockElement::GetList(
Array("ID" => "ASC"),
Array("IBLOCK_ID" => $iblockId),
false,
false,
Array(
'ID',
'PROPERTY_FASOFKA_KRATNOST'
)
);
while ($arFields = $updateElements->GetNext()) {
$coeff = $arFields['PROPERTY_FASOFKA_KRATNOST'];
$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 - получили элементы инфоблока с ИД 6.
Нам нужны только ID элементов и значение свойства, куда передаем коэффициент единицы измерения PROPERTY_FASOFKA_KRATNOST
Для правильной работы CIBlockElement::GetLis в качестве одного из полей группировки необходимо указать PROPERTY_<PROPERTY_CODE>, где PROPERTY_CODE - ID или символьный код свойства (в нашем случаи это FASOFKA_KRATNOST)
Значение коэффициента загнали в переменную $coeff
Внутри цикла (каждого элемента), с помощью CCatalogMeasureRatio::getList получили ID коэффициента конкретного товара (элемента) и загнали в переменную $ratioId
С помощью CCatalogMeasureRatio::update перезаписали/установили коэффициенты для конкретного товара
PS: Если коэффициентов еще не было (пустые). Можно их создать, тут же в цикле, методом CCatalogMeasureRatio::add с любым значением. И тут же перезаписать. Или сразу добавить с нужным значением.