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


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


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

#1 wondertalik

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

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

Отправлено 09 Июль 2013 - 11:14

В какой последовательности работают вычисления?

#2 Analitic

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

  • Пользователи
  • PipPipPip
  • 700 сообщений
  • Пол:Мужчина

Отправлено 09 Июль 2013 - 11:31

Не однократно отвечали по поводу последовательности - последовательность не определена.

Пример:
1. data_update меняет два поля Количество и Описание.
2. у вас два РАЗНЫХ вычисления которые срабатывают отдельно при изменении Количество и отдельно Описания. Но вам важно чтобы обрабатывалась сначала Количество, а потом Описание, т.к. вычисление Описание опирается на поля из вычисления Количество (например поле Цена).

Верный вариант: Объедините два вычисления в одно с двойным условием срабатывания: изменение Количество, изменение Описание. И уже в нем пропишите явный порядок действий опираясь на $event['changed'].
Ленивый вариант: Добавить в условия срабатывания вычисления Описание, изменения поля Цена. Но таким образом ваше вычисление Описание - будет срабатывать дважды, первый раз при вызове data_update, второй раз при изменении поля Цена.

#3 Analitic

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

  • Пользователи
  • PipPipPip
  • 700 сообщений
  • Пол:Мужчина

Отправлено 09 Июль 2013 - 11:42

Лучше и проще не создавать 2 вычисления:
изменение количество:
$line['Цена']=$line['Количество']*$line['Сумма'];
изменение описания, изменение цены:
$line['Результат']=$line['Описание'].$line['Цена'];

А создать 1 вычисление:
изменение количество, изменение описание, изменение цены

$line['Цена']=$line['Количество']*$line['Сумма'];
$line['Результат']=$line['Описание'].$line['Цена'];

Сохранение в базу происходит только измененных полей, если результат вычисления поля Цена совпал с существующим значением, сохранения поля не происходит.
Накладные расходы от установки значения поля Цена в вычислении намного меньше чем вызов отдельного вычисления с отдельным условием.





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

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