Доброго времени суток!Есть такая задача:
Дано:
5 типов цен - розничная, спецпредложение, распродажа, склад, заказ
каталог в 170+ тысяч позиций
несколько групп пользователей, на которые забиты определённые скидки от розничной цены
Найти:
для некоторых групп дать наценки на цены склад и заказ на весь каталог.
Пока использую следующее:catalog.section с шаблоном list
необходимо выводить в 1-ом столбце розничную цену (для всех пользователей); во 2-ом столбце (в зависимости от типа пользователя) - цену с учётом скидки, спецпредложение или распродажу (если меньше скидочной), наценку на заказ и склад (если пользователю прописана наценка); в 3-ем столбце прописывается фактическая экономия клиента (в %) или же пометка о спец или распродаже.Со скидками разобрался стандартными средствами, а вот с наценками загвоздка: не хватило мозгов осилить. Так как "отрицательная" скидка не считается Битриксом, сделал следующее - в каталог вывожу вручную посчитанное значение, полученное из формулы - ВЫВОДИМАЯ ЦЕНА = ЦЕНА + ЗНАЧЕНИЕ СКИДКИ. Естественно пришлось прописывать эту абракадабру во все компоненты, до которых смог дотянуться - детальная информация, корзина, оформление заказа...
И вот проблема, с которой столкнулся - в админке в просмотре заказа, в почтовых шаблонах макрос #ORDER_LIST# в случаях заказа по наценке получаю кривые значения (падает цена с объявленной на неё скидкой).
Код вывода цен в catalog.section:
Подскажите - как можно уйти от этой белиберды? А то придётся сейчас ковырять #ORDER_LIST# и пр.
Дано:
5 типов цен - розничная, спецпредложение, распродажа, склад, заказ
каталог в 170+ тысяч позиций
несколько групп пользователей, на которые забиты определённые скидки от розничной цены
Найти:
для некоторых групп дать наценки на цены склад и заказ на весь каталог.
Пока использую следующее:catalog.section с шаблоном list
необходимо выводить в 1-ом столбце розничную цену (для всех пользователей); во 2-ом столбце (в зависимости от типа пользователя) - цену с учётом скидки, спецпредложение или распродажу (если меньше скидочной), наценку на заказ и склад (если пользователю прописана наценка); в 3-ем столбце прописывается фактическая экономия клиента (в %) или же пометка о спец или распродаже.Со скидками разобрался стандартными средствами, а вот с наценками загвоздка: не хватило мозгов осилить. Так как "отрицательная" скидка не считается Битриксом, сделал следующее - в каталог вывожу вручную посчитанное значение, полученное из формулы - ВЫВОДИМАЯ ЦЕНА = ЦЕНА + ЗНАЧЕНИЕ СКИДКИ. Естественно пришлось прописывать эту абракадабру во все компоненты, до которых смог дотянуться - детальная информация, корзина, оформление заказа...
И вот проблема, с которой столкнулся - в админке в просмотре заказа, в почтовых шаблонах макрос #ORDER_LIST# в случаях заказа по наценке получаю кривые значения (падает цена с объявленной на неё скидкой).
Код вывода цен в catalog.section:
Код |
---|
<?$sklad_mark = - ($arElement["PRICES"]["sklad"]["DISCOUNT_VALUE"] - $arElement["PRICES"]["sklad"]["VALUE"]);?> <?$zakaz_mark = - ($arElement["PRICES"]["zakaz"]["DISCOUNT_VALUE"] - $arElement["PRICES"]["zakaz"]["VALUE"]);?> <?$sklad = ($arElement["PRICES"]["sklad"]["VALUE"] + $sklad_mark);?> <?$zakaz = ($arElement["PRICES"]["zakaz"]["VALUE"] + $zakaz_mark);?> <td> <?if ( ($arElement["PRICES"]["sklad"]["VALUE"]) > 0):?> <?echo ($arElement["PRICES"]["roznich"]["PRINT_VALUE"]);?> <td> <?if (($arElement["PRICES"]["sklad"]["VALUE"]) > ($arElement["PRICES"]["sale"]["VALUE"])):?> <?echo ($arElement["PRICES"]["sale"]["PRINT_VALUE"]);?> <td> <b><?=GetMessage("SALE");?></b> </td> <?else:?> <?if (($arElement["PRICES"]["sklad"]["VALUE"]) > ($arElement["PRICES"]["special"]["VALUE"])):?> <b><?echo ($arElement["PRICES"]["special"]["PRINT_VALUE"]);?></b> <td> <?=GetMessage("SPECIAL");?> </td> <?else:?> <?echo number_format($sklad, 2, ',', ' ');?><?=GetMessage("RUB");?> <td> <?echo round(($arElement["PRICES"]["roznich"]["VALUE"]-$sklad)/($arElement["PRICES"]["roznich"]["VALUE"]/100));?><?print_r("%");?> </td> <?endif;?> <?endif;?> </td> <?else:?> <?if (($arElement["PRICES"]["zakaz"]["VALUE"]) > 0):?> <?echo ($arElement["PRICES"]["roznich"]["PRINT_VALUE"]);?> <td> <?if (($arElement["PRICES"]["zakaz"]["VALUE"]) > ($arElement["PRICES"]["sale"]["VALUE"])):?> <?echo ($arElement["PRICES"]["sale"]["PRINT_VALUE"]);?> <td> <?=GetMessage("SALE");?> </td> <?else:?> <?if (($arElement["PRICES"]["zakaz"]["VALUE"]) > ($arElement["PRICES"]["special"]["VALUE"])):?> <?echo ($arElement["PRICES"]["special"]["PRINT_VALUE"]);?> <td> <?=GetMessage("SPECIAL");?> </td> <?else:?> <?echo number_format($zakaz, 2, ',', ' ');?></b><?=GetMessage("RUB");?>< <td> <?echo round(($arElement["PRICES"]["roznich"]["VALUE"]-$zakaz)/($arElement["PRICES"]["roznich"]["VALUE"]/100));?><?print_r("%");?> </td> <?endif;?> <?endif;?> </td> <?else:?> <?echo ($arElement["PRICES"]["roznich"]["PRINT_VALUE"]);?> <td> <?if (($arElement["PRICES"]["roznich"]["VALUE"]) > ($arElement["PRICES"]["sale"]["VALUE"])):?> <?echo ($arElement["PRICES"]["sale"]["PRINT_VALUE"]);?> <td> <?=GetMessage("SALE");?> </td> <?else:?> <?if (($arElement["PRICES"]["roznich"]["VALUE"]) > ($arElement["PRICES"]["special"]["VALUE"])):?> <?echo ($arElement["PRICES"]["special"]["PRINT_VALUE"]);?> <td> <?=GetMessage("SPECIAL");?> </td> <?else:?> <?$discount_value = ($arElement["PRICES"]["roznich"]["DISCOUNT_VALUE"]);?> <?echo number_format($discount_value, 2, ',', ' ');?><?=GetMessage("RUB");?> <td> <?echo round(($arElement["PRICES"]["roznich"]["VALUE"]-$arElement["PRICES"]["roznich"]["DISCOUNT_VALUE"])/($arElement["PRICES"]["roznich"]["VALUE"]/100));?><?print_r("%");?> </td> <?endif;?> <?endif;?> </td> <?endif;?> <?endif;?> </td> |
Подскажите - как можно уйти от этой белиберды? А то придётся сейчас ковырять #ORDER_LIST# и пр.