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

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

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

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

Пошагово получить информацию о заказах и сохранить как Excel (xls) Просмотров: 1702 Задача: Нужно получить информацию о заказах с возможностью указания даты создания "от"" и ... Отсортировать элементы в Битрикс по свойству привязка к разделам Просмотров: 29016 При создании достаточно сложных интернет-магазинов на Битрикс, иногда встает задача помимо... Самодельная форма добавления элемента на API Битрикс Просмотров: 45376 Компонент iblock.element.add.form написан таким образом, что вы не сможете (не попотев изр... Автогенерация символьных кодов разделов и элементов Битрикс Просмотров: 16169 Иногда нужно создать символьные коды для разделов и элементов. Например: если сайт создан ... Обновление цен и остатков, в каталоге 1C-Битрикс, из текстового файла... Просмотров: 75 Задача: прочитать txt-файл с ценами и остатками, который выгружает программа учета по FTP,... Добавление своих полей в почтовые шаблоны Битрикс Просмотров: 45844 Иногда нужно внести свои поля в почтовые шаблоны битрикс. Например: добавить имя и номе... Минимальная сумма заказа в корзине и оформлении заказа в 1С-Битрикс Просмотров: 9832 В этой заметке добавим возможность установки минимальной суммы заказа, в новом шаблоне кор... Малая корзина Битрикс, упрощенный шаблон Просмотров: 13624 Шаблон малой корзины битрикс, который можно вывести в боковом разделе шаблона или в шапке ... Ajax форма обратной связи, реализация в битрикс Просмотров: 8704 Иногда, на сайте требуется создать форму обратной связи, которая будет писать все данные в... Установка веб-сервера LAMP на ubuntu 20.04 LTS, оптимизированный под ... Просмотров: 12793 В последнее время, плотно пересел c macOS на ubuntu, и решил настроить себе полноценное ра... Многосайтовость битрикс на разных доменах и поддоменах Просмотров: 63231 Часто спрашивают "как настроить многосайтовость Битрикс на разных доменах", решил записать... Проверка на наличие элементов, текущего пользователя, в заданном инфо... Просмотров: 6184 Если стоит задача, определить наличие элементов созданных пользователем на сайте. Можно во... Скопировать номер телефона из поля пользователя в телефон для регистр... Просмотров: 2840 Задача, на конкретном сайте: раньше все пользователи регистрировались по стандартному режи... Как подобрать редакцию Битрикс под задачи Просмотров: 7029 Последнее время, все чаще, при общении с заказчиками, сталкиваюсь с вопросом "— К... Очистить брошенные корзины с помощью API 1С-Битрикс Просмотров: 1183 Задача: в интернет-магазине накапливается большое количество брошенных корзин, нужно их оч... AJAX корзина с отправкой количества из раздела каталога Просмотров: 20192 Столкнулся с задачкой: нужно было на одном сайте реализовать интерактивный прайс лист. При... Заполнение габаритов товара, после обмена с 1С, из свойств элемента и... Просмотров: 11880 Если Ваш интернет-магазин интегрирован с 1С, скорее всего столкнулись с такой проблемой: 1... Основные функции вывода в шаблонах Битрикс Просмотров: 158419 Знаю, что все их знают. Но иногда не бывает лишним собрать все самое используемое в одну к... Вывести минимальную и максимальную цену в разделе каталога Битрикс. Просмотров: 3689 Что бы вывести минимальную и максимальную стоимость товаров, из каталога 1С-Битрикс, доста... Вывести все разделы в которых находится элемент инфоблока Просмотров: 14986 Если нужно вывести все разделы, со всей доступной информацией о них, внутри элемента инфоб...