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