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


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


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

#1 Сергей321

    Новичок

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

Отправлено 12 Февраль 2015 - 02:19

Таблица счет. В ней сделал поле "Затраты по счету"
Сделал подтаблицу Затраты по счету. (сумма затрат суммируется по строкам по полю "Сумма" с помощью флага Считать итоговую сумму)

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

#2 serg499

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

  • Пользователи
  • PipPipPip
  • 109 сообщений
  • Пол:Мужчина
  • Город:Москва

Отправлено 12 Февраль 2015 - 23:43

По идее, вот пример из справки КБ (цитата):

Также может возникнуть ситуация, когда необходимо подсчитать результат определенного выражения в подтаблице, а затем внести его в родительскую таблицу. Таким примером в стандартной конфигурации является ситуация, когда в поле "Сумма" таблицы "Счета" необходимо внести результат сложения сумм из "Позиций счета". Это вычисление выглядит следующим образом:
// Получаем сумму содержимого полей "Сумма" таблицы "Позиции счета", где поле "Счет" равно номеру счета.
$sqlQuery = "SELECT sum(f810) as summa FROM ".DATA_TABLE."74 WHERE status=0 AND f807='".$line['Счет']['ID']."'";
$res = sql_query($sqlQuery);
$row = sql_fetch_array($res);
$summa = $row['summa'];
// Заносим полученную сумму в поле "Сумма" родительской таблицы, обращаясь через поле связи "Счет"
$line['Счет']['Сумма'] = $summa ;

В этом вычислении:
f810 — поле "Сумма" в таблице "Позиции счета",
74 — id таблицы "Позиции счета",
f807 — поле связь указывающее на счет в таблице "Позиции счета".

см. п.3 - http://clientbase.ru...6/calculations/

Я бы настроил в подченненой, тогда при изменении какого-либо значения в подчиненной, сумма будет автоматич. пересчитываться.

Сообщение отредактировал serg499: 12 Февраль 2015 - 23:46


#3 Александр Пономарев

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

  • Пользователи
  • PipPipPip
  • 435 сообщений
  • Пол:Мужчина
  • Город:Таганрог

Отправлено 18 Февраль 2015 - 18:41

Есть альтернативный вариант. Мне он полюбился больше. Не надо запоминать номера полей и таблиц.

$s=0; // Суммирующее поле. Можно суммировать по любым полям. Для каждой суммы своя переменная
$kl=$line['ID']; // Значение ключевого поля в перебираемой подчиненной таблице, по которому она связана с основной
$objects = data_table ("Позиции счета", "`status`=0 AND `Счет`=$kl ", "all");
foreach ($objects as $object){
$s=$s+object['Сумма в позиции']; // Суммируемое поле
}
$line['Сумма всего счета']=$s;

#4 serg499

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

  • Пользователи
  • PipPipPip
  • 109 сообщений
  • Пол:Мужчина
  • Город:Москва

Отправлено 19 Февраль 2015 - 15:17

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

#5 Александр Пономарев

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

  • Пользователи
  • PipPipPip
  • 435 сообщений
  • Пол:Мужчина
  • Город:Таганрог

Отправлено 23 Февраль 2015 - 10:58

Просмотр сообщенияserg499 (19 Февраль 2015 - 15:17) писал:

Согласен, в минусах метода из справки - необходимость запоминать коды полей. Минус альтернативного метода в подводном камне - невозможность переименования полей без внесения изменений в вычисления - точнее, если забыть это сделать, то вычисление работать не будет.
Мне кажется, вы не правы.
Дело в том, что сама система при сохранении заменяет русские имена на fxxxx и так обрабатывает. А при запросе на редактирование снова декодирует. Если вы измените название поля в таблице, то при следующей загрузке вам выдадут уже новое название для редактирования алгоритма. Не работает это, как мне кажется, только в полях типа список, когда ты проверяешь на == по конкретному значению, а потом в таблице его меняешь без внесения изменений в алгоритм. А с названиями полей в таблицах у них полный ажур!

#6 CbCoder

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

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

Отправлено 24 Февраль 2015 - 13:50

С функцией data_table это не работает, она достаточно старая. Поэтому и не рекомендуем ее для серьезных вычислений. Это скорее облегченный вариант для непрограммистов.

Возможно вы путаете с переменной $line - там действительно работает автозамена и смена имен не влияет на работу.





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

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