Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Проблема зацикливания в отчетном инструменте Nevrona Rave

Delphi , Синтаксис , Циклы

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

Эта проблема была ранее сообщена в различных группах новостей, но, к сожалению, от Nevrona не поступало никаких ответов или решений. Однако, есть несколько рабочих решений, которые были найдены разработчиками сообщества.

Одно из решений заключается в следующем:

  1. Определите максимальное количество строк на страницу для вашей конкретной компоновки отчета. Например, это может быть 40 строк.
  2. Установите счетчик для подсчета строк на странице (а не строк во всем отчете). Это можно сделать либо с помощью скрипта события, либо с помощью компонента CalcTotal.
  3. Определите скриптованное событие OnBeforePrint для основной полосы данных.
  4. В этом обработчике событий установите свойство FinishNewPage основной полосы данных в значение True, когда счетчик строк на странице равен одному или двум меньше макс (в нашем примере это будет 38). И установите его в False во всех других случаях. Эффект от этого состоит в том, что каждой странице дается ненулевое количество строк-сирот (в нашем случае от 1 до 38), тем самым избегая условие, которое приводит к проблеме бесконечного цикла Rave.

Другое решение заключается в использовании свойства MaxHeightLeft для полосы данных. Все, что вам нужно сделать, это измерить высоту вашей полосы данных, умножить ее на 2 и установить это значение в свойстве MaxHeightLeft. Это заставит 1 или 2 записи перейти на следующую страницу, если она заполнится настолько.

Еще одно решение заключается в установке свойства MinHeightLeft в значение 0,500. Это заставляет Rave.generate заканчиваться, даже если страница не заполнена.

Важно помнить, что эти решения являются workaround, а не настоящими решениями, и надеюсь, что Nevrona уделит это issue серьезное внимание в ближайшем будущем.

Пример кода на Object Pascal (Delphi) для установки свойства MinHeightLeft:

procedure TForm1.Button1Click(Sender: TObject);
begin
  with RaveReport1.DataBand1 do
    MinHeightLeft := 0.500;
  RaveReport1.Print;
end;

Пример кода на Object Pascal (Delphi) для установки свойства FinishNewPage в обработчике OnBeforePrint:

procedure TForm1.RaveReport1BeforePrint(Sender: TObject);
var
  RowCount: Integer;
begin
  RowCount := RaveReport1.DataSet1.RecordCount mod 40; // 40 - максимальное количество строк на странице
  if RowCount <= 38 then
    RaveReport1.DataBand1.FinishNewPage := True
  else
    RaveReport1.DataBand1.FinishNewPage := False;
end;

Надеюсь, это поможет вам решить проблему зацикливания в отчетном инструменте Nevrona Rave.

Создано по материалам из источника по ссылке.

Проблема зацикливания в отчетном инструменте Nevrona Rave может быть решена, установив определенные свойства полосы данных или используя скриптованные события.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




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


:: Главная :: Циклы ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 17:59:10/0.0032329559326172/0