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


Очередность выполнения операций

очередность

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

#1 serg63rus

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

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

Отправлено 25 Декабрь 2014 - 13:23

Здравствуйте!
Подскажите, пожалуйста, как или где можно регулировать очередность выполнения операций?

Опишу ситуацию: имеется таблица 1 с кучей полей, в которой одно поле вычисляемое. Условно назовем его "Основная сумма". Его вычисление настроено на изменение зависящий полей, сохранение, удаление и т.п.
Также есть таблица 2 с общей сводкой, в которой в одном из полей вычисляется Общая сумма Основных сумм (из предыдущей таблицы). Расчет данного поля выполнен в таблице 1, также при сохранении или изменении поля "Основная Сумма".
Проблема в том, что при сохранении или изменении какого-либо поля, которое входит в расчет Основной суммы сначала вычисляется общая сумма Основных сумм (при сохранении, к примеру), а потом уже меняется эта основная сумма. В итого по факту получается что в поле общая сумма Основных сумм заносится сумма предыдущих значений Основных сумм, а потом уже меняется основная сумма, но пересчета не происходит.

так вот можно ли как-то сделать, чтобы сначала именно выполнялось вычисление Основной суммы, записывалось это значение, а потом уже выполнялся общий подсчет этих сумм?

Надеюсь, понятно отписал. Если нет - скажите.

#2 CbCoder

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

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

Отправлено 25 Декабрь 2014 - 15:12

Прямой очередности задать нельзя, очередность вычислений в программе задается только косвенно, последовательностью событий на изменение (т.е. если вычисление 1 меняет некое поле, а вычисление 2 настроено на событие изменения этого поля, то оно выполнится только после вычисления 1)

#3 serg63rus

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

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

Отправлено 25 Декабрь 2014 - 15:19

Да у меня ситуация такая, что вычисление 2 настроено и на изменение этого поля и на сохранение (т.к. если не ставить на сохранение - при добавлении позиций я так понимаю вычисления не будет?). И вот получается, что у меня вычисление 2 выполняется раньше 1, в итоге значение вычисления 2 всегда соответствует предыдущим (до изменения) значениям вычисления 1. И как сделать чет не соображу никак..

#4 wondertalik

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

  • Пользователи
  • PipPipPip
  • 1 159 сообщений
  • Пол:Мужчина
  • Город:Кривой Рог, Украина

Отправлено 09 Январь 2015 - 02:41

Просмотр сообщенияserg63rus (25 Декабрь 2014 - 15:19) писал:

Да у меня ситуация такая, что вычисление 2 настроено и на изменение этого поля и на сохранение (т.к. если не ставить на сохранение - при добавлении позиций я так понимаю вычисления не будет?). И вот получается, что у меня вычисление 2 выполняется раньше 1, в итоге значение вычисления 2 всегда соответствует предыдущим (до изменения) значениям вычисления 1. И как сделать чет не соображу никак..
Через $event определяет какое событие происходит(сохр или изм), определяете какое поле было изменено и регулируете очередность и что выполнять.

#5 Riddick

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

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

Отправлено 13 Март 2015 - 18:49

У меня проблема немного с другой стороны. Стоит вычисление "при изменении поля", но оно также срабатывает при создании новой записи, даже если это поле не заполнять, чего быть по-хорошему не должно. Я допускаю, что возможно система считает, что пустое значение поля есть тоже изменение. Но все же, как заставить вычисление срабатывать ТОЛЬКО при изменении поля?

#6 arsenal

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

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

Отправлено 13 Март 2015 - 20:37

У меня тоже самое, только при удалении записи

#7 CbCoder

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

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

Отправлено 14 Март 2015 - 14:05

Просмотр сообщенияRiddick (13 Март 2015 - 18:49) писал:

Я допускаю, что возможно система считает, что пустое значение поля есть тоже изменение. Но все же, как заставить вычисление срабатывать ТОЛЬКО при изменении поля?

Да, именно так и считает, т.к. до этого значение поля было вообще неопределенным. Чтобы исключить случай новой записи проверяйте значение переменной $event['is_new_line'].

#8 Riddick

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

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

Отправлено 14 Март 2015 - 16:22

Спасибо за наводку. А где можно посмотреть список значений массива $event? В мануале не нашел.

#9 CbCoder

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

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

Отправлено 15 Март 2015 - 14:42

Целиком - нигде нельзя. Про $event['is_new_line'] писалось на форуме по крайней мере, про документацию не помню.





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

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