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

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
WiRuc
Местный житель
Сообщения: 414
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Воронеж

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

Сообщение WiRuc »

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

GetFirst spsopr

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

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

// Если значение изменилось, то надо физически обновить запись
if old_value<>spsopr.kol
update current spsopr
ecasoft
Местный житель
Сообщения: 645
Зарегистрирован: 29 мар 2005, 17:49
Откуда: г.Королев МО ООО "Эффективная Комплексная Автоматизация- СОФТ"

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

Сообщение ecasoft »

Мне кажется надо почитать о событиях табличных в документации.

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

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

Удачи.
Некоммерческое общение в форуме
WiRuc
Местный житель
Сообщения: 414
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Воронеж

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

Сообщение WiRuc »

Сама операция не интерактивная и синоним заводить нельзя, а в документации ничего не нашел.

Тогда другой вопрос.
Как по уму делать обновление агрегированных значений? Т.е. допустим у нас делается модификация цены в текущей строке спецификации накладной. Вместе с модификацией собственно цены еще необходимо пересчитать и обновить сумму всей накладной.
Если считать сумму путем суммирования всей спецификации, то это плохо для производительности. Какое тут решение?
ecasoft
Местный житель
Сообщения: 645
Зарегистрирован: 29 мар 2005, 17:49
Откуда: г.Королев МО ООО "Эффективная Комплексная Автоматизация- СОФТ"

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

Сообщение ecasoft »

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


По второму: Вычесть старую стоимость позиции из суммы накладной и прибавить новую. Налоги тоже не забуть скорректировать.
Некоммерческое общение в форуме
WiRuc
Местный житель
Сообщения: 414
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Воронеж

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

Сообщение WiRuc »

Вот-вот, надо вычесть старую стоимость. А как ее узнать, без заведения второго синонима или использования переменных для хранения старого значения?
Goblin
Местный житель
Сообщения: 474
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Сибирь-матушка
Контактная информация:

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

Сообщение 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;
Питаю патологические отвращение и ненависть в особо тяжелой и крайне запущенной формах к семейству программ Microsoft Business Solution !
Восславим господа Кришну за то, что у нас есть ГАЛАКТИКА !
Ответить