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


Помогите с вычислением


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

#1 Arsplus

    Новичок

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

Отправлено 10 Июнь 2014 - 20:27

Здравствуйте.
Пытаюсь реализовать ABC-анализ, но столкнулся с проблемой. Таблица анализа состоит из 5 полей - Клиент, Стоимость сделки, доля в %, накопительный % и оценка.
В поле "стоимость сделки" поставил галочку считать итоговую сумму, сумма то считается, но не могу понять как это значение применить в формуле на нахождение %

					
					<br />
					
				</div>
				
<script type= ipb.global.registerReputation( 'rep_post_24294', { domLikeStripId: 'like_post_24294', app: 'forums', type: 'pid', typeid: '24294' }, parseInt('0') );

#2 CbCoder

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

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

Отправлено 14 Июнь 2014 - 14:01

В переменной $line содержится только текущая строка, там нет итогов. Сумму по таблице нужно считать с помощью запросов к таблице. Примеры ищите на форуме или в документации.


То, что вы включили опцию подсчета итоговой суммы в настройках поля - влияет только на ее отображение на странице, вычисления от этого абсолютно никак не зависят. Это не Excel.

#3 Arsplus

    Новичок

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

Отправлено 15 Июнь 2014 - 23:40

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

$sqlQuery = "SELECT sum(f2621) as summa FROM ".DATA_TABLE."181
WHERE status=0 AND f2791='".$line['Номер']."'";

$res = mysql_query($sqlQuery);
$row = mysql_fetch_array($res);
$line['Итоговая сумма'] = $row['summa'];


где f2621 - номер строки которую надо суммировать
181 - номер таблицы
f2791 - номер строки "Номер"

Сообщение отредактировал Arsplus: 15 Июнь 2014 - 23:43


#4 CbCoder

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

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

Отправлено 16 Июнь 2014 - 08:37

1. Что за ошибка выходит?
2. Не совсем понял, зачем вам поле Номер в условии. Если вам нужна сумма по всем активным записям (т.е. кроме архива и удаленных), достаточно условия "status=0"
3. Не совсем понял, зачем идет присвоение в $line['Итоговая сумма'], выше у вас вроде такого поля нет (и из-за этого может быть ошибка), итоговая сумма у вас используется в расчетной формуле, туда собственно и нужно подставить $row['summa'].
4. Синтаксис вычисления в целом верный, но устарел, сейчас в КБ рекомендуется писать sql_query вместо mysql_query и sql_fetch_array вместо mysql_fetch_array. В частности, sql_query позволит вывести ошибки запроса, если таковые есть.

#5 Arsplus

    Новичок

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

Отправлено 16 Июнь 2014 - 18:48

Подправил код, теперь ошибки нет и вычисление работает.
Но теперь не знаю как сосчитать накопительный %, нужно что бы туда в первую строку вводилось первое значение из поля "%", а дальше это значение складывалось бы со вторым значением из поля "%" и т.д.

#6 CbCoder

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

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

Отправлено 17 Июнь 2014 - 11:53

Для накопительного можно использовать тот же алгоритм, но с дополнительным условием в запросе "поле такое-то меньше определенного значения".

Поясню: допустим у вас сделки идут по порядку нумерации (в поле Номер), тогда в условии должно быть "поле Номер в запросе меньше значения поля Номер в текущей строке". В этом случае в запрос для подсчета попадут все сделки с номером меньше текущего, т.е. предыдущие по номеру. Если текущая строка тоже должна попадать, то ставите "меньше или равно".

У вас даже выше это практически есть, только "равно" поменять на знак "меньше" или "меньше или равно".





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

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