Телеграм: @camouf_ru Почта: mihail@bazarow.ru Заказать разработку проекта

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

Задачка: Каталог наполняется из 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' => $arFields['ID']),
false, false); while ($arRatio = $curElementRatio->GetNext()) { $ratioId = $arRatio['ID']; } CCatalogMeasureRatio::update($ratioId, Array( 'PRODUCT_ID' => $arFields['ID'],
'RATIO' => $coeff) ); }

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

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

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

Просмотров: 2756 | Комментариев: 4

Комментарии

Внимание! все сообщения проходят премодерацию. Ваше сообщение появится после проверки
 
Текст сообщения*
Загрузить файл или картинкуПеретащить с помощью Drag'n'drop
Перетащите файлы
Ничего не найдено
Защита от автоматических сообщений
Загрузить файл
Нажимая кнопку "Отправить", Вы принимаете условия
Политики конфиденциальности и обработки персональных данных
База Таймень
почему-то не работает. блин очень нужно сделать, но не пашет. выполнял в админке в PHP командной строке
Имя Цитировать
Михаил Базаров
Цитата
База Таймень написал:
почему-то не работает. блин очень нужно сделать, но не пашет. выполнял в админке в PHP командной строке

Оттуда не сработеат, нужно модифицировать. Киньте скрипт на любую страницу и откройте ее
Имя Цитировать
Юрий Аликов
не работает,потому что используются данные массива $ar_fields,а нужно $arFields
Имя Цитировать
Михаил Базаров
Цитата
Юрий Аликов пишет:
не работает,потому что используются данные массива $ar_fields,а нужно $arFields
Да, поправил
Имя Цитировать
Поделиться страницей Спасибо, это помогает развивать сайт.
Мой youtube канал. C 1-го сентября начнется выход видеокурса по разработке доски объявлений с мобильным приложением.
Перейти на канал Подписывайтесь и будьте в курсе:
Заметки разработчика

Примерно с 2013-го года пишу, короткие и не очень, заметки по разработке сайтов на Битрикс. Возможно, будут полезны кому-то еще. Во всех заметках есть возможность комментирования и обсуждения. Вы можете задавать уточняющие вопросы прямо там- отвечаю или дополняю заметки по возможности.

attention