Есть ли в Галактике возможность получить "старые" значения буфера записи (текущие значения ФИЗИЧЕСКОЙ записи).
Т.е. чтобы можно было написать такой код:
GetFirst spsopr
// Меняем значения в буфере
spsopr.kol := новое_значение
// Получаем текущее значение поля в базе данных, а не в буфере
old_value := Функция_возвращающая_старое_значение(spsopr,kol)
// Если значение изменилось, то надо физически обновить запись
if old_value<>spsopr.kol
update current spsopr
Старые значения буфера
Модераторы: m0p3e, edward_K, Модераторы
-
- Местный житель
- Сообщения: 645
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: г.Королев МО ООО "Эффективная Комплексная Автоматизация- СОФТ"
Re: Старые значения буфера
Мне кажется надо почитать о событиях табличных в документации.
Когда делает Get... то значение переписывается в буфер записи. Если алгоритм меняет значение оператором SET..то буфер помечается как модифицированный...значит при попытке сойти с записи вызовится событие CheckRecord..а затем событие cmupdaterecord. В последнем и ставится оператор обновления таблицы. Таким образом, нет необходимости отслеживать когда изменили запись, а надо просто ставить операторы в нужные события и по ситуации система сама сделает update.
Если проблема другая...и просто Вы модифицировали запись, а хотели бы посмотреть что было до модификации в поле, то нужно просто завести синоним этой таблицы..в буфере синонима будет всегда старое значение.
Удачи.
Когда делает Get... то значение переписывается в буфер записи. Если алгоритм меняет значение оператором SET..то буфер помечается как модифицированный...значит при попытке сойти с записи вызовится событие CheckRecord..а затем событие cmupdaterecord. В последнем и ставится оператор обновления таблицы. Таким образом, нет необходимости отслеживать когда изменили запись, а надо просто ставить операторы в нужные события и по ситуации система сама сделает update.
Если проблема другая...и просто Вы модифицировали запись, а хотели бы посмотреть что было до модификации в поле, то нужно просто завести синоним этой таблицы..в буфере синонима будет всегда старое значение.
Удачи.
Некоммерческое общение в форуме
Re: Старые значения буфера
Сама операция не интерактивная и синоним заводить нельзя, а в документации ничего не нашел.
Тогда другой вопрос.
Как по уму делать обновление агрегированных значений? Т.е. допустим у нас делается модификация цены в текущей строке спецификации накладной. Вместе с модификацией собственно цены еще необходимо пересчитать и обновить сумму всей накладной.
Если считать сумму путем суммирования всей спецификации, то это плохо для производительности. Какое тут решение?
Тогда другой вопрос.
Как по уму делать обновление агрегированных значений? Т.е. допустим у нас делается модификация цены в текущей строке спецификации накладной. Вместе с модификацией собственно цены еще необходимо пересчитать и обновить сумму всей накладной.
Если считать сумму путем суммирования всей спецификации, то это плохо для производительности. Какое тут решение?
-
- Местный житель
- Сообщения: 645
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: г.Королев МО ООО "Эффективная Комплексная Автоматизация- СОФТ"
Re: Старые значения буфера
Почему нельзя заводить синоним - таких случаев я не знаю, чтобы нельзя было заводить..его просто объявил и все...хлеба он не просит Ну бог с ним.
По второму: Вычесть старую стоимость позиции из суммы накладной и прибавить новую. Налоги тоже не забуть скорректировать.
По второму: Вычесть старую стоимость позиции из суммы накладной и прибавить новую. Налоги тоже не забуть скорректировать.
Некоммерческое общение в форуме
Re: Старые значения буфера
Вот-вот, надо вычесть старую стоимость. А как ее узнать, без заведения второго синонима или использования переменных для хранения старого значения?
-
- Местный житель
- Сообщения: 474
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Сибирь-матушка
- Контактная информация:
Re: Старые значения буфера
Что-то типа этого ...
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;
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 !
Восславим господа Кришну за то, что у нас есть ГАЛАКТИКА !
Восславим господа Кришну за то, что у нас есть ГАЛАКТИКА !