Страница 1 из 2

Зависимые значения

Добавлено: 12 мар 2018, 16:00
Serdobolniy
Как создать такой функционал:

Есть "Масса" письма, есть "Тариф" на эту массу. Что хочу сделать - выбрав массу, автоматически подставлялся тариф. Т.е. не вбивать руками этот тариф каждый раз, при выборе массы, а после выбора массы тариф сам выбирался из заранее подготовленного списка.
При помощи "Раскрывающегося списка" осуществить это не получается. Можно разбить Массу и Тариф на два "раскрывающихся списка", а хочется иметь зависимость от Массы. Сейчас сделано при помощи разбивки, что не очень удобно -
Screenshot.png
При помощи Зависимые значения в полях типа "Выпадающий список" тоже не сильно красиво

Re: Зависимые значения

Добавлено: 13 мар 2018, 09:46
aik
Если я правильно понял, вы предлагаете такое же: viewtopic.php?f=3&t=1324

Да такого функционала не хватает.

Re: Зависимые значения

Добавлено: 13 мар 2018, 10:47
Serdobolniy
Да, именно это мне и нужно. У вас получилось лучше описать суть. Попробую осуществить задуманное при помощи "Формулы"

UPD: При помощи формул тоже не выходит. Нет зависимости

Вот эта формула: if([11] in (15,16,17),([36]+[54])/2,0) что-то вроде похожее выполняет, но как только подставляешь ID поля "Тарифа" с идентификатором его значений (например - in (115,116,117)), то всё валится с ошибками

Re: Зависимые значения

Добавлено: 14 мар 2018, 03:12
Евгений
Сколько всего этих соотношений "Масса письма - Тариф"? Если табличка небольшая, строк на 4-5, тогда можно использовать несколько вложенных IF в формуле.

if([ИД поля Масса]=<ИД элемента 1 списка Масса>, <Тариф 1>, if([ИД поля Масса]=<ИД элемента 2 списка Масса>, <Тариф 2>, if(... 'тариф не найден') ) )

Re: Зависимые значения

Добавлено: 14 мар 2018, 11:02
Serdobolniy
Спасибо. Но так тоже не работает. Полей всего 5-ть:
if([642]=<341>, <22.00>,
if([642]=<342>, <24.50>,
if([642]=<343>, <75.00>,
if([642]=<344>, <72.50>,
if([642]=<345>, <67.50>,
if([642]=<346>, 'тариф не найден'))))))

642 - Масса
341, 342... - ID элемента - Массы
22.00, 24.50 - Тариф

Выскакивает:
Database Error: 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '=<341>, <22.00>, if(e.field_642=<342>, <24.50>, if(e.field_642=<343>, <75.00>,' at line 1
Query: select e.* , (e.field_643*e.field_644) as field_645, ((e.field_643*e.field_644)*0.18) as field_646, (if(e.field_642=<341>, <22.00>, if(e.field_642=<342>, <24.50>, if(e.field_642=<343>, <75.00>, if(e.field_642=<344>, <72.50>, if(e.field_642=<345>, <67.50>, if(e.field_642=<346>, 'тариф не найден'))))))) as field_647 from app_entity_53 e where e.id>0 and e.parent_item_id='7' limit 0, 15
Page: /rukovoditel/index.php?module=items/listing

Re: Зависимые значения

Добавлено: 14 мар 2018, 12:29
Евгений
Всё правильно, только уберите угловые скобочки. Они были только для шаблона, вместо них должны быть реальные значения.

Вместо "if([642]=<341>, <22.00>," нужно написать просто "if([642]=341, 22.00,..."

Re: Зависимые значения

Добавлено: 14 мар 2018, 13:21
Serdobolniy
Стало лучше
Database Error: 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '))))))) as field_647 from app_entity_53 e where e.id>0 and e.parent_item_id='7' at line 6
Query: select e.* , (e.field_643*e.field_644) as field_645, ((e.field_643*e.field_644)*0.18) as field_646, (if(e.field_642=341, 22.00, if(e.field_642=342, 24.50, if(e.field_642=343, 75.00, if(e.field_642=344, 72.50, if(e.field_642=345, 67.50, if(e.field_642=346, 'тариф не найден'))))))) as field_647 from app_entity_53 e where e.id>0 and e.parent_item_id='7' limit 0, 15
Page: /rukovoditel/index.php?module=items/listing
Screenshot.png
И выяснилось, что "раскрывающий список" не может взаимодействовать с "числовым полем", при математических операциях. В моём случае: "числовое поле" должно умножаться на элемент в "раскрывающимся списке" (указываю ID элемента), так умножение производится не с элементом, а с его ID (допустим ID элемента 341, а сам элемент 0.02, так умножение производится не на 0.02, а на 341)
Ещё маленькая погрешность - это к исправлению - в раскрывающимся списке, вместо &quot;Действие&quot; написано &quot;Action&quot;
Ещё маленькая погрешность - это к исправлению - в раскрывающимся списке, вместо "Действие" написано "Action"

Re: Зависимые значения

Добавлено: 14 мар 2018, 13:34
Евгений
А для чего умножение? Получается что стоимость вычисляется как (масса * тариф), при этом тариф приходится не на одно конкретное значение массы, а на диапазон? То есть от 1 до 100 гр. - 100 руб, от 101 до 200 гр. - 500 руб и так далее, правильно?

Re: Зависимые значения

Добавлено: 14 мар 2018, 14:00
Serdobolniy
Хочу количество * на тариф (т.е. если разложить, то - количество писем * на массу письма, в котором забит тариф).
Наглядно это выглядит так
Screenshot.png
Хочу выбрать массу письма, и ввести количество. Тариф не прописывать (на скриншоте зачеркнут)

Тариф приходится на конкретное значение массы, т.е. 20 гр = 22.00 рубля, а 180 гр = 50.00 рублей. Тариф установлен

Re: Зависимые значения

Добавлено: 15 мар 2018, 02:01
Евгений
Сделал на своей пробной базе, вот моя формула для поля Тариф:

Код: Выделить всё

if([382]=93, 22.0, if([382]=98, 23.0, if([382]=94, 24.5, if([382]=97, 67.5, 'нет тарифа'))))
где [382] - ИД поля "Вес отправления гр." типа выпадающий список. Значения 93, 98, 94, 97 это ИД элементов списка, которым соответствуют тарифы 22.0, 23.0, 24.5 и 67.5 рублей.

Поле "Общая сумма" типа формула, в которой стоит "[383]*[386]" то есть произведение полей "Кол-во отправлений" и "Тариф".

Считает нормально:
tar1.jpg
Может быть у вас формула неправильно набрана? Как вариант, можно вынести расчёт тарифа в хранимую функцию на стороне СУБД, передавая в нее ИД элемента "Вес отправления". В этом случае желательно прямо в название элемента добавлять числовое значение тарифа, чтобы выдергивать его в хранимке.

ДОП.
Нашел ошибку в вашей формуле - в самом конце вы пропустили выражение для ИСТИНА в последнем IF. Вам надо написать так:

if(e.field_642=346, 55.12, 'тариф не найден')))))))