Добрый день, уважаемые коллеги!
Начну сразу с плохих новостей, по какой-то причине на моем горячо любимом сайте частично отъехал обмен с 1С.
Вот допустим, у товара есть свойство кратность, передаваемое из 1С. Ранее после обмена у товара менялось свойство из раздела "Торговый каталог" "Коэффициент единицы измерения". Теперь, вероятно по той причине, что на планете Альфа-Центавра местные подняли бунт, коэффициент единицы измерения более не меняется в автоматическом режиме.
Весь каталог у меня на сайте работает с параметром кратность передаваемым из 1с, но корзина работает с параметром коэффициент единицы измерения.
Получаем, что при заходе в каталог мы можем купить товар с шагом, скажем, 150 единиц. А после отправки товара в корзину и перехода на страницу корзины можем менять количество товара с шагом в 1.
Попытался сделать временное решение.
Код, написанный в функции BXIBlockAfterSave работает, но только при ручной корректировке карточек товаров в админке.
Единица измерения обновляется с помощью Bitrix\Catalog\MeasureRatioTable::update.
Попытался написать ровно тот же самый код, только в обработчиках событий OnAfterIBlockElementUpdate и OnAfterIBlockElementAdd. Но не тут то было!!!! Даже при ручном обновлении данных в карточке товара из админки коэффициент измерения не меняется!!!!
Вот мой код в обработчике события:
Пробовал также метод CCatalogMeasureRatio::update(), но результата 0.
96 - id свойства товара KRATNOST_PRODAZH, импортируемого из 1с.
Помогите, пожалуйста, добрые люди!
Начну сразу с плохих новостей, по какой-то причине на моем горячо любимом сайте частично отъехал обмен с 1С.
Вот допустим, у товара есть свойство кратность, передаваемое из 1С. Ранее после обмена у товара менялось свойство из раздела "Торговый каталог" "Коэффициент единицы измерения". Теперь, вероятно по той причине, что на планете Альфа-Центавра местные подняли бунт, коэффициент единицы измерения более не меняется в автоматическом режиме.
Весь каталог у меня на сайте работает с параметром кратность передаваемым из 1с, но корзина работает с параметром коэффициент единицы измерения.
Получаем, что при заходе в каталог мы можем купить товар с шагом, скажем, 150 единиц. А после отправки товара в корзину и перехода на страницу корзины можем менять количество товара с шагом в 1.
Попытался сделать временное решение.
Код, написанный в функции BXIBlockAfterSave работает, но только при ручной корректировке карточек товаров в админке.
Единица измерения обновляется с помощью Bitrix\Catalog\MeasureRatioTable::update.
Попытался написать ровно тот же самый код, только в обработчиках событий OnAfterIBlockElementUpdate и OnAfterIBlockElementAdd. Но не тут то было!!!! Даже при ручном обновлении данных в карточке товара из админки коэффициент измерения не меняется!!!!
Вот мой код в обработчике события:
Скрытый текст |
---|
function krat(&$arFields) { $idProduct = $arFields["ID"]; $measureNew = $arFields["PROPERTY_VALUES"][96]; $key = array_keys($measureNew); $measureNew = $arFields["PROPERTY_VALUES"][96][$key[0]]['VALUE']; if (empty($measureNew)) { $measureNew = 1; } Bitrix\Main\Loader::includeModule("catalog"); CModule::IncludeModule("catalog"); $measureNew = str_replace(",", ".", $measureNew) * 1; $MEASURE_RATIO = array( 'PRODUCT_ID' => $idProduct, 'RATIO' => $measureNew ); Bitrix\Main\Loader::includeModule("catalog"); $ratioArr = CCatalogMeasureRatio::getList( $arOrder = array(), $arFilter = array("PRODUCT_ID" => $idProduct), $arGroupBy = false, $arNavStartParams = false, $arSelectFields = array("ID") ); $infoRatio = $ratioArr->fetch(); //CCatalogMeasureRatio::update(); // dump(Bitrix\Catalog\MeasureRatioTable::update( // $infoRatio["ID"], $MEASURE_RATIO // )); $res = CCatalogMeasureRatio::update($infoRatio["ID"], $MEASURE_RATIO); } |
96 - id свойства товара KRATNOST_PRODAZH, импортируемого из 1с.
Помогите, пожалуйста, добрые люди!