Заказать звонок
Логин
Пароль
Логин
Пароль

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

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


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

#События
#1С
#Bitrix