Телеграм: @camouf_ru Почта: mihail@bazarow.ru
Лето Осень Зима Весна

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

Просмотров: 4581

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

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

Оттуда не сработеат, нужно модифицировать. Киньте скрипт на любую страницу и откройте ее
Юрий Аликов30.08.2020
не работает,потому что используются данные массива $ar_fields,а нужно $arFields
Михаил Базаров30.08.2020
Цитата
Юрий Аликов пишет:
не работает,потому что используются данные массива $ar_fields,а нужно $arFields
Да, поправил
Sergey K.24.08.2021
А на какое событие данный скрипт надо вешать? OnAfterIblockUpdate не подходит, MeasureRatio::OnBeforeUpdate срабатывает не по всем товарам. Можно повесить на событие OnCompleteCatalogImport1C в принципе или да, отрабатывать по крону. Еще есть варианты?
Михаил Базаров24.08.2021
Цитата
Sergey K. пишет:
А на какое событие данный скрипт надо вешать? OnAfterIblockUpdate не подходит, MeasureRatio::OnBeforeUpdate срабатывает не по всем товарам. Можно повесить на событие OnCompleteCatalogImport1C в принципе или да, отрабатывать по крону. Еще есть варианты?
Да, я думаю по крону вполне оптимально. Запускать раз в сутки.

На события элементов или импорт, не очень хорошо, так как увеличивается время импорта.
При небольшом каталоге еще туда сюда.

Еще есть событие очистки кеша, после завершения импорта, то есть скрипт можно запускать в самом конце обмена с 1С, когда она уже завершила работу.
В документации этого события нет и сейчас сходу не найду.

Если не забуду, добавлю в заметку, как подвернется такая задача.

Цены и сроки на разработку проекта

Кроме того, готов взяться за разработку проектов любой сложности или выполнить доработки, корректировки и расширение функционала на уже работающих проектах.

Опросник на разработку:

Вы можете скачать развернутый опросник на разработку, заполнить и выслать на электронную почту.

Скачать опросник.doc

После ознакомления, я смогу задать уточняющие вопросы и оценить проект по стоимости и срокам разработки.

Заказать разработку