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

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

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

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

Вывести производителей на сайте с отбором его товаров из каталога Просмотров: 19598 Достаточно частая задачка для каталога или интернет-магазина: вывести список производителе... Создание скидки на общую сумму покупки в Битрикс корзине Просмотров: 28299 Функционал интернет-магазина, работающего под управлением 1С Битрикс, позволяет задавать м... Заполнить свойство инфоблока ценой из торгового каталога Просмотров: 5090 Если вам по какой-то причине нужно скопировать цену товара в свойство этого же инфоблока. ... Оптимизация jpeg и png картинок на cron, с помощью jpegoptim и optipn... Просмотров: 2278 Задача: на сайт каждый день проходит выгрузка из 1С с обновлением картинок. Нужно оптимиз... Как вывести свойства инфоблока по отдельности и немного плюшек не в т... Просмотров: 108813 Если у инфоблока несколько свойств- то при выводе их всех, скажем в детальном описании нов... Вывести артикул в печатную форму бланка заказа Просмотров: 1073 Задача: в печатную форму бланка заказа добавить артикулы товаров и данные о пользователе. ... Список новостей с автопрокруткой через overflow:scroll Просмотров: 6137 Простенький javascript позволит сделать автопрокрутку в шаблоне списка новостей. Достаточн... Как подобрать редакцию Битрикс под задачи Просмотров: 7019 Последнее время, все чаще, при общении с заказчиками, сталкиваюсь с вопросом "— К... Как работает система сертификации партнеров 1С-Битрикс, уровни партне... Просмотров: 4472 Сертификация от «1С-Битрикс» – это объективная оценка знаний и практических навыков разраб... Вывести минимальную цену торговых предложений в Битрикс Просмотров: 28102 Если у товара несколько торговых предложений и у каждого предложения разные цены, иногда т... Установка вебсервера на Apple M1 (нативный ARM стек), оптимизированны... Просмотров: 7405 Появилась задачка, установить стек MAMP (macOS, Apache, MYSQL, PHP) на рабочий ноутбук с п... AJAX корзина с отправкой количества из раздела каталога Просмотров: 20153 Столкнулся с задачкой: нужно было на одном сайте реализовать интерактивный прайс лист. При... Самодельная форма добавления элемента на API Битрикс Просмотров: 45278 Компонент iblock.element.add.form написан таким образом, что вы не сможете (не попотев изр... Дополнительные параметры в меню Битрикс Просмотров: 20770 Иногда нужно присвоить какой-то функционал к конкретному пункту меню в битрикс. Например о... Создание мобильного приложения на cordova, для любого сайта. Просмотров: 15874 Если стоит задача разработки мобильного приложения для сайта, можете воспользоваться данно... Скопировать номер телефона из поля пользователя в телефон для регистр... Просмотров: 2800 Задача, на конкретном сайте: раньше все пользователи регистрировались по стандартному режи... Вывести новости из конкретного раздела инфоблока Битрикс Просмотров: 55238 Бывает что требуется вывести конкретные новости или статьи из одного раздела инфоблока в Б... Подключение jquery из ядра битрикс и объединение своих скриптов в оди... Просмотров: 20892 Если используете большое количество js скриптов на сайте. Например: фансибокс, всяческие г... Малая корзина Битрикс, упрощенный шаблон Просмотров: 13606 Шаблон малой корзины битрикс, который можно вывести в боковом разделе шаблона или в шапке ... Пошагово получить информацию о заказах и сохранить как Excel (xls) Просмотров: 1684 Задача: Нужно получить информацию о заказах с возможностью указания даты создания "от"" и ...