Страница 1 из 1

Старые значения буфера

Добавлено: 17 сен 2004, 12:39
WiRuc
Есть ли в Галактике возможность получить "старые" значения буфера записи (текущие значения ФИЗИЧЕСКОЙ записи).
Т.е. чтобы можно было написать такой код:

GetFirst spsopr

// Меняем значения в буфере
spsopr.kol := новое_значение

// Получаем текущее значение поля в базе данных, а не в буфере
old_value := Функция_возвращающая_старое_значение(spsopr,kol)

// Если значение изменилось, то надо физически обновить запись
if old_value<>spsopr.kol
update current spsopr

Re: Старые значения буфера

Добавлено: 17 сен 2004, 13:10
ecasoft
Мне кажется надо почитать о событиях табличных в документации.

Когда делает Get... то значение переписывается в буфер записи. Если алгоритм меняет значение оператором SET..то буфер помечается как модифицированный...значит при попытке сойти с записи вызовится событие CheckRecord..а затем событие cmupdaterecord. В последнем и ставится оператор обновления таблицы. Таким образом, нет необходимости отслеживать когда изменили запись, а надо просто ставить операторы в нужные события и по ситуации система сама сделает update.

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

Удачи.

Re: Старые значения буфера

Добавлено: 17 сен 2004, 14:09
WiRuc
Сама операция не интерактивная и синоним заводить нельзя, а в документации ничего не нашел.

Тогда другой вопрос.
Как по уму делать обновление агрегированных значений? Т.е. допустим у нас делается модификация цены в текущей строке спецификации накладной. Вместе с модификацией собственно цены еще необходимо пересчитать и обновить сумму всей накладной.
Если считать сумму путем суммирования всей спецификации, то это плохо для производительности. Какое тут решение?

Re: Старые значения буфера

Добавлено: 17 сен 2004, 14:30
ecasoft
Почему нельзя заводить синоним - таких случаев я не знаю, чтобы нельзя было заводить..его просто объявил и все...хлеба он не просит :) Ну бог с ним.


По второму: Вычесть старую стоимость позиции из суммы накладной и прибавить новую. Налоги тоже не забуть скорректировать.

Re: Старые значения буфера

Добавлено: 17 сен 2004, 14:35
WiRuc
Вот-вот, надо вычесть старую стоимость. А как ее узнать, без заведения второго синонима или использования переменных для хранения старого значения?

Re: Старые значения буфера

Добавлено: 17 сен 2004, 15:20
Goblin
Что-то типа этого ...
handleevent
cmcheckfields:
{
case curfield of
#spsopr.price:
{
Katsopr.summa:=Katsopr.summa - double(OldFieldValue)*spsopr.kol;
KatSopr.summa:=Katsopr.Summa+spsopr.price*spsopr.kol;
update current KatSopr;
}
end;
}
end;