При построении отчета временами выдается указанная ошибка. С чем это связано установить не смог. Может кто-нибудь сталкивался с подобной проблемой?
В данном случае отчет ничего не скажет.
Данное исключение обычно генерируется при переполнении, т.е. значение превысило диапазон и записывается в новый участок памяти(который может быть занят... ).
простой пример
{$R+}
var
i:word;
d:dword;
begin
i := d;
....
end
При каких условиях воспроизводится ошибка, какая версия FR ?
Возможно, у вас при подсчеты суммы происходит переполнение типа.
К примеру, вы подсчитываете сумму по целым числам, и у вас получается сумма больше 4х миллионов с хвостиком. Т.к. фастрепорт использует глючный vcl'ный тип variant для записи своих внутренних значений, то вылетит как раз такая ошибка.
Как от этого можно избавится.
Первый вариант и самый простой - это вернуть из базы данные в формате с плавающей точкой (желательно double), а можно и денежный тип. Следовательно, сумма будет подсчитываться и приводить свой тип к формату с плавающей точкой. Этого диапазона чисел вам должно хватить для подсчета финансовых операций всех алегархов мира.
Второй вариант, когда нет возможности внести изменения в базу - подсчитывать сумму в событии OnAfterPrint мастердаты и хранить ее в уже в типе, который точно вместит в себя вашу сумму.
Возможны и другие варианты, но сейчас мне думать не очень хочется.
Комментарии
Данное исключение обычно генерируется при переполнении, т.е. значение превысило диапазон и записывается в новый участок памяти(который может быть занят... ).
простой пример
При каких условиях воспроизводится ошибка, какая версия FR ?
К примеру, вы подсчитываете сумму по целым числам, и у вас получается сумма больше 4х миллионов с хвостиком. Т.к. фастрепорт использует глючный vcl'ный тип variant для записи своих внутренних значений, то вылетит как раз такая ошибка.
Как от этого можно избавится.
Первый вариант и самый простой - это вернуть из базы данные в формате с плавающей точкой (желательно double), а можно и денежный тип. Следовательно, сумма будет подсчитываться и приводить свой тип к формату с плавающей точкой. Этого диапазона чисел вам должно хватить для подсчета финансовых операций всех алегархов мира.
Второй вариант, когда нет возможности внести изменения в базу - подсчитывать сумму в событии OnAfterPrint мастердаты и хранить ее в уже в типе, который точно вместит в себя вашу сумму.
Возможны и другие варианты, но сейчас мне думать не очень хочется.