PDA

Просмотр полной версии : Расчет цены по формуле



nekrasov
28.09.2015, 17:22
есть следующая задача на определенную категорию рассчитывать цену по формуле: Цена(Основная)=Себест. умножить кофэ.наценки убираем копейки и округляем до десятичных. Получилось все кроме округления до десятичных.

Идея такова, чтобы основная цена за коктейли складывалась из себестоимости:
Завели ценовую константу она же наценка.
В типе цены добавили правило расчета для категории коктейли след. формулу:
Price:=Round(Price2*Const1);
Получили следующее
Цена=10,49*3=31р
это пример. бармену не удобно работать с мелочью поэтому хотим получить округленный результат а именно 40. На сколько мне известно это делает функция RoundTo(цена, 1) округлит до десятых
Но увы эта функция не отрабатывает как и МАХ и МIN значение пробовал на 2 версиях(7.5.3.479). Вроде не сложная задача не хочется в скрипты лезть. Есть идеи?

sibgaba
28.09.2015, 17:44
На вскидку:
Завести отдельный тип цен (Себестоимость). Настроить импорт себестоимости из SH. Для нужных блюд Основную цену просто не заполнять (пустая) в использовании типов цен приоритет поставить у Основной. Если ее не будет, то начнет работать Вторая цена (себестоимость).

satan
28.09.2015, 17:59
Для нужных блюд Основную цену просто не заполнять (пустая) в использовании типов цен приоритет поставить у Основной. Если ее не будет, то начнет работать Вторая цена (себестоимость).
Настолько удивился услышать это от Александра что полез проверять. Не будет так работать.
В заказе всегда будет использоваться один тип цены. А вот какой - можно задать через использование. Таким образом если в заказе используется тип цены основная, а этот тип цены у блюда не задан, то блюдо будет недоступно.

nekrasov
28.09.2015, 18:07
"всегда будет использоваться один тип цены" совершенно верно. Типы цен отрабатывают как надо заводить вторую не имеет смысла , добавлен расчет второй для типа цены остновная. Себестоимость подтянута. проблема в самой формуле там не работают функции. Не знаю как из результата 31 получить округление до целого 40 . Из 159 получить 160 и т.д. Округление есть у Валюты но это не выход так как только на определенную категорию нужно округлять (коктейли)

satan
28.09.2015, 18:21
Не знаю как из результата 31 получить округление до целого 40 . Из 159 получить 160 и т.д.
Очевидно же: Price:=Round(Price1+5);

nekrasov
28.09.2015, 18:32
Price:=Round(Price1+5);
Себестоимость 12,56
переведу вашу формулу (и проверил)
Цена=убрать копейки(12,56+5)
Результат 18 а не 20! идея в том чтобы были только целые 10,50,100 без размена (мелочью)

satan
28.09.2015, 18:42
идея в том чтобы были только целые 10,50,100 без размена (мелочью)
Тогда так:
Price:=Round(Price1/10+0.5)*10;
Видимо все-таки не очевидно, раз сам только с 3-го раза без опечаток написал

nekrasov
28.09.2015, 18:53
о уже ближе=)
при себестоимости 54р результат отпускной цены 50р ) добавил +10 и наценку
Price:=Round((Price2*Const1+0.5)/10)*10+10;
12,56себ = 50 отпускная, вроде все так. Спасибо огромное. Можно ли добавить условие если цена по нашей формуле меньше 150р то цена основная равна 150р, функция MIN и Мах не отрабатывает? может синтаксис не верный задаю.

satan
28.09.2015, 19:04
Я там вверху исправил, вроде как то что надо
функции MIN и MAX скорее всего выберут минимальную или максимальную из двух цен.
В Вашем случае, подозреваю нужно обойтись банальным if... else...

sibgaba
28.09.2015, 19:24
Настолько удивился услышать это от Александра что полез проверять. Не будет так работать.
Да, чет я на сегодня в php пересидел немного...
С чистой совестью подумал что если переменная (основная цена) не определена, но есть условие для использования второй (себестоимость), то автоматом сработает вторая.

nekrasov
28.09.2015, 21:22
"банальным if... else... " в самую точку, а я с функцией мучался (все равно мах и min у меня не заработали из 2 чисел)
Спасибо еще раз. Результат получен:). Радует когда самые изощренные идеи реализуются.

okis
29.09.2015, 11:43
На самом деле для решения задачи округления цен у типа цены есть свойство "Правило округления".

nekrasov
29.09.2015, 13:09
это рабочий вариант если нужно ВСЕ цены округлять , тут же речь шла об определенной категории "Коктейли". Округление и у валюты есть.

okis
29.09.2015, 14:26
это рабочий вариант если нужно ВСЕ цены округлять.

Не правда. Через использование типов цен все можно настроить.

nekrasov
29.09.2015, 14:45
В использованиии нет параметра "Категория" то что в меню, есть "категория заказа" а это уже не то.

SergeTh
29.09.2015, 19:22
В свойствах Основная выставил округление до 10 рублей Распространяется как на правило Default так и на категорию. При себестоимости до рубля округляет в меньшую. Больше рубля до 10 в большу. Например 10.7 округлит до 30, 11.7 округлит до 40, при наценке 3.

okis
29.09.2015, 21:50
QUOTE=nekrasov;88884]В использованиии нет параметра "Категория" то что в меню, есть "категория заказа" а это уже не то.[/QUOTE]

Зато есть "Торговая группа". Как раз то, что нужно.

satan
29.09.2015, 21:53
okis (http://www.carbis.ru/forum/member.php?u=1274), ты видимо не до конца понял задачу.
ТГ в заказе тоже может быть только одна

okis
29.09.2015, 22:27
В свойствах Основная выставил округление до 10 рублей Распространяется как на правило Default так и на категорию. При себестоимости до рубля округляет в меньшую. Больше рубля до 10 в большу. Например 10.7 округлит до 30, 11.7 округлит до 40, при наценке 3.


Если нужно, чтобы округлялось всегда в большую сторону, то нужно прибавить к результату цены 5:

Price:=Price2*Const1+5

---------- Добавлено в 21:27 ---------- Предыдущее сообщение было размещено в 20:54 ----------


okis (http://www.carbis.ru/forum/member.php?u=1274), ты видимо не до конца понял задачу.
ТГ в заказе тоже может быть только одна

Да, если условия такие, то только через правила расчета.

pixnet
13.12.2018, 19:30
Есть скидка 3% которая начисляет 100% бонус по заказу, но начисление бонуса происходит от суммы всех блюд без учета скидки. Например заказ на сумму 60р, к нему прикрепляется скидка 3% итого по заказу 58р, но бонус начисляет 60р. Если для скидки 3% сделать, начисление бонуса 97%, то бонус идет с копейками 58,20. Возможно ли с помощью формулы округлить до 1 рубля начисляемый на заказ бонус? :duma: