Телеграм: @camouf_ru Почта: mihail@bazarow.ru

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

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

Задачка: Каталог наполняется из 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С, когда она уже завершила работу.
В документации этого события нет и сейчас сходу не найду.

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

Записная книжка разработчика

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

Фиксированная корзина с обновлением, без перезагрузки страницы. Просмотров: 17499 Иногда нужно сделать так, чтобы корзина в интернет магазине, созданном на Битрикс, была по... Подключение SSL на Битрикс виртуальная машина Просмотров: 11929 С первого января 2017 года, наличие безопасного соединения HTTPS становится практически об... Заполнить картинки разделов каталога из картинок товаров Просмотров: 338 Задача: в каталоге, разделы и подразделы выводятся в виде плитки над товарами, с картинкам... Memcached на сайте под управлением битрикс, при использовании Веб Окр... Просмотров: 6940 Если вам важна скорость отдачи сайта, а у вашего сервера медленный диск для использования ... Прятать или показывать описание раздела каталога Просмотров: 598 В новых компонентах и шаблонах catalog.section есть не документированный и не выводимый па... Менять большую картинку, при клике на маленькую, в детальной карточке Просмотров: 1764 Мини скриптик, может кому пригодится для каталога товаров или новостей при использовании д... Отфильтровать новости в Битрикс за заданный период Просмотров: 15590 Иногда, нужно отфильтровать элементы (новости например) по дате в Битрикс, с помощью компо... Постраничная навигация в списке разделов Битрикс- catalog.section.lis... Просмотров: 8719 Если в магазине очень много разделов и хочется вывести их с постраничной навигацией: можно... Смена вида карточек товаров в catalog.section с иммитацией AJAX Просмотров: 818 Смену вида карточек товаров, в разделе каталога, можно реализовать с помощью сессии, запис... Ajax форма обратной связи, реализация в битрикс Просмотров: 7580 Иногда, на сайте требуется создать форму обратной связи, которая будет писать все данные в... Очистка корзины в 1С-Битрикс одним нажатием Просмотров: 27754 В стандартной корзине Битрикс не хватает кнопки для полной очистки корзины одним нажатием... Создание мобильного приложения на cordova, для любого сайта. Просмотров: 14192 Если стоит задача разработки мобильного приложения для сайта, можете воспользоваться данно... Ссылка и название раздела в списке новостей Битрикс Просмотров: 10517 Если нужно вывести название раздела инфоблока в котором находится конкретный элемент/новос... Изменить размер картинок на лету в битрикс Просмотров: 46794 Встала задачка: на собственном сайте, уменьшить размер превьюшек картинок у анонсов раздел... Определить местоположение пользователя и показать на карте Просмотров: 3270 Задача определить местоположение текущего пользователя и показать его на карте, с меткой. ... Снять ограничение на количество символов в комментарии к заказу магаз... Просмотров: 11554 Как многим известно, в интернет-магазине на Битрикс имеется ограничение на количество симв... Получить множественное пользовательское поле раздела. Значения множес... Просмотров: 357 Задача: У разделов инфоблока есть множественное поле типа список. Зная ID раздела, нужно п... Умный фильтр на главной странице Битрикс Просмотров: 20882 Редкая но востребованная задачка- это вывести компонент "умный фильтр" на главную страницу... Установка веб-сервера LAMP на ubuntu 20.04 LTS, оптимизированный под ... Просмотров: 11425 В последнее время, плотно пересел c macOS на ubuntu, и решил настроить себе полноценное ра... Вывод даты создания элемента в правильном формате в Битрикс Просмотров: 21668 Если нужно вывести дату создания новости, статьи или товара в каталоге, в принципе любого ...