Таблица счет. В ней сделал поле "Затраты по счету"
Сделал подтаблицу Затраты по счету. (сумма затрат суммируется по строкам по полю "Сумма" с помощью флага Считать итоговую сумму)
Как эту итоговую сумму из подчиненной таблицы перенести в поле "Затраты по счету" таблицы Счет.
Вычисления нужно настроить в подчиненной таблице или в главной "Счет" и как настроить.
Вроде нужно вписать нужный код в "Редактирование вычисления "Сохранение счета"".
Подскажите куда и какой код вписать.
1
Как вытянуть сумму из подчиненной таблицы в поле основной таблицы
Автор Сергей321, 12 февр. 2015 02:19
Сообщений в теме: 5
#1
Отправлено 12 Февраль 2015 - 02:19
#2
Отправлено 12 Февраль 2015 - 23:43
По идее, вот пример из справки КБ (цитата):
Также может возникнуть ситуация, когда необходимо подсчитать результат определенного выражения в подтаблице, а затем внести его в родительскую таблицу. Таким примером в стандартной конфигурации является ситуация, когда в поле "Сумма" таблицы "Счета" необходимо внести результат сложения сумм из "Позиций счета". Это вычисление выглядит следующим образом:
В этом вычислении:
f810 — поле "Сумма" в таблице "Позиции счета",
74 — id таблицы "Позиции счета",
f807 — поле связь указывающее на счет в таблице "Позиции счета".
см. п.3 - http://clientbase.ru...6/calculations/
Я бы настроил в подченненой, тогда при изменении какого-либо значения в подчиненной, сумма будет автоматич. пересчитываться.
Также может возникнуть ситуация, когда необходимо подсчитать результат определенного выражения в подтаблице, а затем внести его в родительскую таблицу. Таким примером в стандартной конфигурации является ситуация, когда в поле "Сумма" таблицы "Счета" необходимо внести результат сложения сумм из "Позиций счета". Это вычисление выглядит следующим образом:
// Получаем сумму содержимого полей "Сумма" таблицы "Позиции счета", где поле "Счет" равно номеру счета. $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
Отправлено 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;
$s=0; // Суммирующее поле. Можно суммировать по любым полям. Для каждой суммы своя переменная
$kl=$line['ID']; // Значение ключевого поля в перебираемой подчиненной таблице, по которому она связана с основной
$objects = data_table ("Позиции счета", "`status`=0 AND `Счет`=$kl ", "all");
foreach ($objects as $object){
$s=$s+object['Сумма в позиции']; // Суммируемое поле
}
$line['Сумма всего счета']=$s;
#4
Отправлено 19 Февраль 2015 - 15:17
Согласен, в минусах метода из справки - необходимость запоминать коды полей. Минус альтернативного метода в подводном камне - невозможность переименования полей без внесения изменений в вычисления - точнее, если забыть это сделать, то вычисление работать не будет.
#5
Отправлено 23 Февраль 2015 - 10:58
serg499 (19 Февраль 2015 - 15:17) писал:
Согласен, в минусах метода из справки - необходимость запоминать коды полей. Минус альтернативного метода в подводном камне - невозможность переименования полей без внесения изменений в вычисления - точнее, если забыть это сделать, то вычисление работать не будет.
Дело в том, что сама система при сохранении заменяет русские имена на fxxxx и так обрабатывает. А при запросе на редактирование снова декодирует. Если вы измените название поля в таблице, то при следующей загрузке вам выдадут уже новое название для редактирования алгоритма. Не работает это, как мне кажется, только в полях типа список, когда ты проверяешь на == по конкретному значению, а потом в таблице его меняешь без внесения изменений в алгоритм. А с названиями полей в таблицах у них полный ажур!
#6
Отправлено 24 Февраль 2015 - 13:50
С функцией data_table это не работает, она достаточно старая. Поэтому и не рекомендуем ее для серьезных вычислений. Это скорее облегченный вариант для непрограммистов.
Возможно вы путаете с переменной $line - там действительно работает автозамена и смена имен не влияет на работу.
Возможно вы путаете с переменной $line - там действительно работает автозамена и смена имен не влияет на работу.
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных