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

Просмотров: 494 | Комментариев: 0

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

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

Скрипт для запуска в ручную, по крону или на событие в init.php:

Cmodule::IncludeModule('iblock');
Cmodule::IncludeModule('catalog');
$iblockId = 4;
$updateElements = CIBlockElement::GetList(
   Array("ID" => "ASC"),
   Array("IBLOCK_ID" => $iblockId),
   false,
   false,
   Array(
       'ID',
       'PROPERTY_ATT_COEFFFICIENT'
   )
);
while ($arFields = $updateElements->GetNext()) {
 
   $coeff = $arFields['PROPERTY_ATT_COEFFFICIENT_VALUE'];
   
   $curElementRatio = CCatalogMeasureRatio::getList(
         Array(),
         array('IBLOCK_ID' => $iblockId, 'PRODUCT_ID' => $ar_fields['ID']),
         false, false);
         while ($arRatio = $curElementRatio->GetNext()) {
              $ratioId = $arRatio['ID'];
         }

   CCatalogMeasureRatio::update($ratioId, Array(
          'PRODUCT_ID' => $ar_fields['ID'],
          'RATIO' => $coeff)
    );
}

Пояснения:
C помощью CIBlockElement::GetLis - получили элементы инфоблока с ИД 4.
Нам нужны только ID элементов и значение свойства PROPERTY_ATT_COEFFFICIENT
Значение коэффициента загнали в переменную $coeff

Внутри цикла (каждого элемента), с помощью CCatalogMeasureRatio::getList получили ID коэффициента конкретного товара (элемента) и загнали в переменную $ratioId
С помощью CCatalogMeasureRatio::update перезаписали/установили коэффициенты для конкретного товара

PS: Если коэффициентов еще не было (пустые). Можно их создать, тут же в цикле, методом CCatalogMeasureRatio::add с любым значением. И тут же перезаписать. Или сразу добавить с нужным значением.

Необходимо войти что бы оставить комментарий:
Михаил Базаров
Цитата
База Таймень написал:
почему-то не работает. блин очень нужно сделать, но не пашет. выполнял в админке в PHP командной строке

Оттуда не сработеат, нужно модифицировать. Киньте скрипт на любую страницу и откройте ее

Авторизация

На сайте работает вход через социальные сети. Просто, выберите наиболее удобную сеть и авторизация произойдет автоматически:
Проходя авторизацию, Вы безоговорочно принимаете условия политики конфеденциальности