Перейти к содержимому


Как в таблице вычислять сумму используя разные аргументы


Сообщений в теме: 32

#1 totalcolor

    Участник

  • Пользователи
  • PipPip
  • 13 сообщений

Отправлено 16 Февраль 2014 - 18:42

как в одной таблице использовать 2 формулы в зависимости от выбранного Вида изделия: печать и постпечать
печать - сумма=S*цена*кол-во, постпечать-Сумма=P*цена*кол-во

Прикрепленные изображения

  • Прикрепленное изображение: Рисунок1.jpg


#2 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 761 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 17 Февраль 2014 - 10:05

Используете стандартный условный оператор PHP:

if ($line['Вид']=="печать") $line['Сумма'] = $line['S'] * $line['Цена'] * $line['Кол-во'];
if ($line['Вид']=="Постпечатная обработка") $line['Сумма'] = $line['P'] * $line['Цена'] * $line['Кол-во'];


#3 totalcolor

    Участник

  • Пользователи
  • PipPip
  • 13 сообщений

Отправлено 17 Февраль 2014 - 16:28

Спасибо! Вроде также писал, но не работало, щас Ваш скопирую.

#4 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 761 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 17 Февраль 2014 - 16:35

Обратите внимание на имена полей и значения поля $line['Вид']. Я их написал по вашему скриншоту, но в 100%-й точности не уверен, лучше перепроверьте.

#5 totalcolor

    Участник

  • Пользователи
  • PipPip
  • 13 сообщений

Отправлено 17 Февраль 2014 - 16:47

Не работает, что-то не так?

Прикрепленные изображения

  • Прикрепленное изображение: 2.jpg


#6 totalcolor

    Участник

  • Пользователи
  • PipPip
  • 13 сообщений

Отправлено 17 Февраль 2014 - 16:52

Кол-во с маленькой буквы я исправил на маленькую

if ($line['Вид']=="печать") $line['Сумма'] = $line['S'] * $line['Цена'] * $line['кол-во'];
if ($line['Вид']=="Постпечатная обработка") $line['Сумма'] = $line['P'] * $line['Цена'] * $line['кол-во'];

Прикрепленные изображения

  • Прикрепленное изображение: 3.jpg

Сообщение отредактировал totalcolor: 17 Февраль 2014 - 17:09


#7 totalcolor

    Участник

  • Пользователи
  • PipPip
  • 13 сообщений

Отправлено 17 Февраль 2014 - 17:18

Там на самом деле должно быть 3 формулы или больше, еще вот такая:
$line['Сумма'] = $line['Цена'] * $line['кол-во'];

#8 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 761 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 17 Февраль 2014 - 17:30

А эта формула при каком условии должна быть?

#9 totalcolor

    Участник

  • Пользователи
  • PipPip
  • 13 сообщений

Отправлено 18 Февраль 2014 - 10:43

Просмотр сообщенияCbCoder (17 Февраль 2014 - 17:30) писал:

А эта формула при каком условии должна быть?
Если "Вид" ==Дизайн, то $line['Сумма'] = $line['Цена'] * $line['кол-во'];
Если "Вид" ==Полиграфия, то $line['Сумма'] = $line['Цена'] * $line['кол-во'];
Если "Вид" ==Монтаж, то $line['Сумма'] = $line['Цена'] * $line['кол-во']*$line['P'];
Если "Вид" ==печать, то $line['Сумма'] = $line['Цена'] * $line['кол-во']*$line['S'];
Если "Вид" ==Постпечатная обработка, то $line['Сумма'] = $line['Цена'] * $line['кол-во']*$line['P'];

Сообщение отредактировал totalcolor: 18 Февраль 2014 - 10:45


#10 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 761 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 18 Февраль 2014 - 10:50

Ну собственно тогда не проблема дополнить код еще на 3 строчки по аналогии.

#11 totalcolor

    Участник

  • Пользователи
  • PipPip
  • 13 сообщений

Отправлено 18 Февраль 2014 - 11:34

Просмотр сообщенияCbCoder (18 Февраль 2014 - 10:50) писал:

Ну собственно тогда не проблема дополнить код еще на 3 строчки по аналогии.
Только не работает по этому коду, мне в тех. поддержку заявку отправить?

#12 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 761 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 18 Февраль 2014 - 11:59

Т.е. не работает в том числе и первоначальный мой код, с вашим исправлением имени поля?

#13 totalcolor

    Участник

  • Пользователи
  • PipPip
  • 13 сообщений

Отправлено 18 Февраль 2014 - 15:30

Просмотр сообщенияCbCoder (18 Февраль 2014 - 11:59) писал:

Т.е. не работает в том числе и первоначальный мой код, с вашим исправлением имени поля?
Нет, не работает, скрин прилагал

#14 totalcolor

    Участник

  • Пользователи
  • PipPip
  • 13 сообщений

Отправлено 19 Февраль 2014 - 06:23

Просмотр сообщенияtotalcolor (18 Февраль 2014 - 15:30) писал:

Нет, не работает, скрин прилагал
Поле "Вид" имеет тип "связь" и по нему фильтруется поле "Категория", если выбрать тип "список" то код работает и сумма считается, можно ли сделать код, чтобы поле "Вид" имело тип "связь"?

#15 totalcolor

    Участник

  • Пользователи
  • PipPip
  • 13 сообщений

Отправлено 20 Февраль 2014 - 21:53

?

Просмотр сообщенияCbCoder (18 Февраль 2014 - 11:59) писал:

Т.е. не работает в том числе и первоначальный мой код, с вашим исправлением имени поля?
Можно ли написать код, чтобы поле "Вид" имело тип "связь" и работала формула с разными аргументами, а то этот код
if ($line['Вид']=="печать") $line['Сумма'] = $line['S'] * $line['Цена'] * $line['Кол-во'];
if ($line['Вид']=="Постпечатная обработка") $line['Сумма'] = $line['P'] * $line['Цена'] * $line['Кол-во'];
работает только при условии что поле "Вид" тип "список"?

#16 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 761 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 22 Февраль 2014 - 15:58

Если поле "Вид" имеет тип "связь", то код разумеется должен быть другой. Поле связь в переменной $line представляет из себя массив с полями из связанной таблицы. Т.е. в коде должно быть: $line['Вид']['Поле с видом печати из связанной таблицы']=="печать", к примеру.

#17 totalcolor

    Участник

  • Пользователи
  • PipPip
  • 13 сообщений

Отправлено 23 Февраль 2014 - 16:25

Просмотр сообщенияCbCoder (22 Февраль 2014 - 15:58) писал:

Если поле "Вид" имеет тип "связь", то код разумеется должен быть другой. Поле связь в переменной $line представляет из себя массив с полями из связанной таблицы. Т.е. в коде должно быть: $line['Вид']['Поле с видом печати из связанной таблицы']=="печать", к примеру.
Спасибо, но уже не актуально, методом тыка сам сделал

#18 f-jeka

    Активный участник

  • Пользователи
  • PipPipPip
  • 196 сообщений

Отправлено 27 Июнь 2015 - 19:06

А как сделать вычисление, если результат переносится в другую таблицу?
Мне нужно считать сумму позиций в счете, только если тип равен Услуга. Сделал по аналогии с вычислением записывающим сумму позиций счета в сам счет:
if ($line['Тип'] == 'Услуга')
{
$sqlQ = "SELECT SUM(`f812`) AS sum FROM ".DATA_TABLE."74 WHERE `f807`=".$line['Счет']['raw']." and status=0 and `id`<>".$ID;
$pre = sql_query($sqlQ) or die(mysql_error());
$row = sql_fetch_assoc($pre);

if ($row['sum']===NULL)
   {
	 $line['Счет']['Услуги']=$line['Услуги'];
   }
   else
   {
	 $line['Счет']['Услуги']=$row['sum']+$line['Услуги'];
   }
}
Но сумма считается неправильно. Считается сумма не только тех полей где Тип=Услуга, а вообще всех полей. Как исправить вычисление?

#19 f-jeka

    Активный участник

  • Пользователи
  • PipPipPip
  • 196 сообщений

Отправлено 30 Июнь 2015 - 11:59

Никто не поможет с вопросом? Уже перепробовал много вариантов. Так и не вычисляет по условию.

#20 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 761 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 30 Июнь 2015 - 12:25

Я отвечал вам, но видимо забыл нажать на кнопку Отправить... Суть в том что у вас в самом запросе нет условия "поле Тип равно Услуга", разумеется что считаться будет результат по всем строкам.





Количество пользователей, читающих эту тему: 9

0 пользователей, 9 гостей, 0 анонимных