Как организовать перерасчет весов товаров в заказе CMS Bitrix?
Опишу проблематику:
Есть магазин на Bitrix, который занимается продажей продуктов питания. Вес продуктов питания не является константой, что означает, если вы купили 1 кг картошки, то в итоговом чеке мы можете получить 0.93 кг. Проблема не нова и в подобных магазинах всегда пишут, что итоговый чек может отличаться в меньшую сторону, поэтому хочется понять архитектурный аспект и не изобретать велосипед на пустом месте.
Сейчас знания о том, какой реальный вес товаров мы можем получить хранится в 1с. И как мне видится существует 2 варианта решения.
Вариант №1
Перед созданием заказа, ловить событие, состояние корзины отправлять в 1с, получать актуальные веса, изменять их в корзине и создавать заказ. В данном решении я не знаю сможет ли Битрикс корректно отрабатывать, ведь получается, что надо пересоздать корзину с новыми весами, перерасчитать стоимость. И всплывает множество проблем:
1. Если у товара Коэффициент единицы измерения 0.3, а продать можем только 0.2, сможет ли он рассчитать стоимость.
2. Если человек набрал товаров на 500р, применил скидку, которая срабатывает от 500р, а в итоге при перерасчете корзины, оказалось, что стоимость её составляет 499р, как быть?
Вариант №2
Создается кастомная платёжная система, которая в момент создания оплаты, обращается в 1с. 1с перерасчитвает стоимость заказа и создает его в эквайринге и возвращает магазину, а магазин клиенту ссылку на оплату.
Как по мне данный вариант самый правильный и красивый, но требует большой доработки на стороне магазина и 1с.
Возможно существует какая-то реальная практика для подобных систем, как быть?
пересоздавать не надо, надо загрузить, обновить позиции и сохранить. Мне кажется, должны отработать обработчики и пересчитать всё. Там в API даже какой-то костыльный флаг был "не пересчитывать", насколько помню - то есть по дефолту должен идти перерасчёт.
Если у товара Коэффициент единицы измерения 0.3, а продать можем только 0.2
- значит, что-то у Вас не так. Если кратность 0.3, то из 1С должно приходить тоже кратно 0.3 .