Заполнить коэффициент единицы измерения (MEASURE_RATIO) из свойства элемента

Задачка: Каталог наполняется из 1С, но 1С не передает коэффициент единицы измерения (особенность конкретной 1С, а вообще она умеет). У товара в 1С есть свойство "Количество в упаковке". Необходимо коэффициент сделать равным этому показателю

Для нормальной работы каталога и корзины (ввод количества товара по коэффициенту), дабы не городить огород и не переписывать, по отдельности шаблоны каталога (списка, топа, карточки) и корзины - просто скопируем коэффициенты из свойства в поле торгового каталога.

Скрипт для запуска в ручную, по крону или на событие в 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 с любым значением. И тут же перезаписать. Или сразу добавить с нужным значением.

Денис Бунаков

C 2012 года разрабатываю и поддерживаю сайты на 1С Битрикс. У меня вы можете заказать услуги по разработки или поддержке сайта на битриксе

Заполнить коэффициент единицы измерения (MEASURE_RATIO) из свойства элемента