Ошибка "Выход за пределы диапазона"

отредактировано 03:30 Раздел: FastReport 3.0
При построении отчета временами выдается указанная ошибка. С чем это связано установить не смог. Может кто-нибудь сталкивался с подобной проблемой?

Комментарии

  • отредактировано 03:30
    Ilya написал: »
    При построении отчета временами выдается указанная ошибка. С чем это связано установить не смог. Может кто-нибудь сталкивался с подобной проблемой?
    В данном случае отчет ничего не скажет.
    Данное исключение обычно генерируется при переполнении, т.е. значение превысило диапазон и записывается в новый участок памяти(который может быть занят... ).

    простой пример
    {$R+}
    var
     i:word;
     d:dword;
    begin
      i := d;
    ....
    end
    

    При каких условиях воспроизводится ошибка, какая версия FR ?


  • отредактировано 03:30
    Возможно, у вас при подсчеты суммы происходит переполнение типа.

    К примеру, вы подсчитываете сумму по целым числам, и у вас получается сумма больше 4х миллионов с хвостиком. Т.к. фастрепорт использует глючный vcl'ный тип variant для записи своих внутренних значений, то вылетит как раз такая ошибка.

    Как от этого можно избавится.
    Первый вариант и самый простой - это вернуть из базы данные в формате с плавающей точкой (желательно double), а можно и денежный тип. Следовательно, сумма будет подсчитываться и приводить свой тип к формату с плавающей точкой. Этого диапазона чисел вам должно хватить для подсчета финансовых операций всех алегархов мира.

    Второй вариант, когда нет возможности внести изменения в базу - подсчитывать сумму в событии OnAfterPrint мастердаты и хранить ее в уже в типе, который точно вместит в себя вашу сумму.

    Возможны и другие варианты, но сейчас мне думать не очень хочется.
  • отредактировано 03:30
    У всех числовых данных денежный тип, так что переполнение мало вероятно (сумма получается равной 4 - 6 миллионам).
  • отредактировано 03:30
    Пробовали удалить сумму?
  • отредактировано 03:30
    Разобрался. Оказалось проблема в данных из базы. Спасибо всем за помощь.

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.