Вычисление при удалении
#1
Отправлено 07 Октябрь 2012 - 23:31
Но при удалении строки подчиненной таблицы "итого" в родительской не пересчитывается, что очень печально. Как быть? В вычислении проверяю на 'status' = '0', пробовал на вычисление добавить событие "удаление в таблице" и изменение поля status. Не пересчитывает. В стандартной конфигурации у вас та же ситуация.
#2 Гость_Roman_*
Отправлено 08 Октябрь 2012 - 09:56
WHERE `id`<>$ID
#3
Отправлено 08 Октябрь 2012 - 10:56
$line['Итого'] = $line['Количество'] * $line['Стоимость']; $sqlQuery = "SELECT SUM(`f187`) AS `materials_amount` FROM `".DATA_TABLE."23` WHERE `status`='0' AND `f161`='".$line['Заказ']['raw']."' AND `id`<>'$ID'"; $result = sql_query($sqlQuery) or user_error(mysql_error()."<br>".$sqlQuery."<br>", E_USER_ERROR); $row = mysql_fetch_assoc($result); if ($row['materials_amount'] == NULL) $materials_amount = $line['Итого']; else $materials_amount = $row['materials_amount'] + $line['Итого']; $line['Заказ']['Стоимость материалов'] = $materials_amount;
я имел ввиду, что при удалении вообще ничего не пересчитывается, а, судя по вашему ответу, вы поняли, что пересчитывается с учетом удаляемой строки.
Сообщение отредактировал nk: 08 Октябрь 2012 - 12:11
#4
Отправлено 10 Октябрь 2012 - 23:21
#5 Гость_Roman_*
Отправлено 11 Октябрь 2012 - 07:14
#6
Отправлено 11 Октябрь 2012 - 10:18
"Сохранение в таблице" + "Удаление в таблице" ?
#7 Гость_Roman_*
Отправлено 11 Октябрь 2012 - 10:21
#8
Отправлено 14 Октябрь 2012 - 15:56
так и не срабатывает пересчет при удалении записи подчиненной таблицы (из формы записи родительской)
Сообщение отредактировал nk: 14 Октябрь 2012 - 17:12
#9 Гость_Roman_*
Отправлено 15 Октябрь 2012 - 09:37
#10
Отправлено 15 Октябрь 2012 - 09:58
Проверил на вашей демке. Событие "Удаление в таблице" обрабатывается при полном удалении (из удаленных), при нажатии крестика в подчиненной таблице вычисление не срабатывает. Но срабатывает оно, если повесить его на событие "Изменение поля статус" (пусть так, ведь подчиненные таблицы обычно скрыты и удалить из удаленных не получится, т.к. таблицы не видно). При этом (обработка изменения поля статус) через phpmyadmin видно, что вычисление отработало и сумма в родительской пересчиталась, но на самой форме подчиненная строка пропала, а в родительской отображение не поменялось. F5 не катит, ведь при ДОБАВЛЕНИИ подчиненной строки в родительской все пересчитывается и тут же обновляется на форме без F5. Надеюсь, понятно объяснил.
Суть - надо чтобы при событии "изменение поля статус" (а лучше - и при других) в подч. таблице не только отрабатывал пересчет, но и обновлялись поля на форме (в т.ч. и родительской таблицы) - так же как они обновляются при добавлении подч. строки.
Сообщение отредактировал nk: 15 Октябрь 2012 - 09:59
#11 Гость_Roman_*
Отправлено 15 Октябрь 2012 - 11:18
#12
Отправлено 16 Октябрь 2012 - 02:26
Вычисление при удалении не срабатывает, если удалять из подчиненной таблице (нажимая на красный крестик). Раньше работало. При удалении из таблицы (обычной) вычисление срабатывает. Код такой:
if (time() - strtotime(($line['Время добавления'])) > 3600) { global $cancel_delete; $cancel_delete=1; } if ($line['Кто добавил'] != $user[id]) { global $cancel_delete; $cancel_delete=1; }Хочу сделать, чтобы по прошествии определенного времени после создания нельзя было удалять записи.
#13
Отправлено 16 Октябрь 2012 - 06:51
#14 Гость_Roman_*
Отправлено 16 Октябрь 2012 - 08:22
Institor (16 Октябрь 2012 - 02:26) писал:
Вычисление при удалении не срабатывает, если удалять из подчиненной таблице (нажимая на красный крестик). Раньше работало. При удалении из таблицы (обычной) вычисление срабатывает. Код такой:
if (time() - strtotime(($line['Время добавления'])) > 3600) { global $cancel_delete; $cancel_delete=1; } if ($line['Кто добавил'] != $user[id]) { global $cancel_delete; $cancel_delete=1; }Хочу сделать, чтобы по прошествии определенного времени после создания нельзя было удалять записи.
Проверим Вашу проблему в ближайшее время.
arsenal (16 Октябрь 2012 - 06:51) писал:
#15 Гость_Roman_*
Отправлено 16 Октябрь 2012 - 09:15
Institor (16 Октябрь 2012 - 02:26) писал:
Вычисление при удалении не срабатывает, если удалять из подчиненной таблице (нажимая на красный крестик). Раньше работало. При удалении из таблицы (обычной) вычисление срабатывает. Код такой:
if (time() - strtotime(($line['Время добавления'])) > 3600) { global $cancel_delete; $cancel_delete=1; } if ($line['Кто добавил'] != $user[id]) { global $cancel_delete; $cancel_delete=1; }Хочу сделать, чтобы по прошествии определенного времени после создания нельзя было удалять записи.
Отмена удаления исправлена. Ревизия выйдет сегодня.
#16
Отправлено 16 Октябрь 2012 - 09:34
#17
Отправлено 17 Октябрь 2012 - 10:08
Roman (16 Октябрь 2012 - 09:15) писал:
Я все же не понимаю как это должно работать, или вы не понимаете, чего я от вас хочу. Вот смотрите:
На demo.clientbase.ru открываю счет, добавляю позицию, и тут же "на лету" обновляются поля в родительской таблице.
Затем удаляю эту строку, а поля родительской остаются как есть. Обновляю страницу - пересчет происходит. Но этот пересчет происходит другим вычислением - при отображении "Всего" в родительской.
Вы можете сделать, чтобы при удалении подч. строки "на лету" обновлялись поля родительской, так же как они это делают при добавлении. Иначе юзеры просто не понимают, почему позиция удалена, а в счете "по-прежнему" старая сумма.
оффтоп: честно говоря, немного удивляет ваше решение вешать вычисления с запросами к БД на события отображения данных, такие вещи должны происходить при изменении логически связанных данных, зачем
Сообщение отредактировал nk: 17 Октябрь 2012 - 10:20
#18 Гость_Roman_*
Отправлено 17 Октябрь 2012 - 12:55
nk (17 Октябрь 2012 - 10:08) писал:
На demo.clientbase.ru открываю счет, добавляю позицию, и тут же "на лету" обновляются поля в родительской таблице.
Затем удаляю эту строку, а поля родительской остаются как есть. Обновляю страницу - пересчет происходит. Но этот пересчет происходит другим вычислением - при отображении "Всего" в родительской.
Вы можете сделать, чтобы при удалении подч. строки "на лету" обновлялись поля родительской, так же как они это делают при добавлении. Иначе юзеры просто не понимают, почему позиция удалена, а в счете "по-прежнему" старая сумма.
оффтоп: честно говоря, немного удивляет ваше решение вешать вычисления с запросами к БД на события отображения данных, такие вещи должны происходить при изменении логически связанных данных, зачем
Исправление было, пересчёт в родительской записи происходит "на лету" при удалении строки в подтаблице. Если у Вас это не работает, значит что-то было сделано не так.
Вычисления на отображении тоже используются, не всегда получается вычислить данные вычислениями на сохранение/изменение данных.
#19
Отправлено 17 Октябрь 2012 - 17:16
#20
Отправлено 23 Октябрь 2012 - 18:14
Roman (16 Октябрь 2012 - 08:22) писал:
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных