Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2      [все]
 FastReport необычный подсчет количества страниц  [new]
dartveider13
Member

Откуда: Омск
Сообщений: 628
Доброго времени суток уважаемые форумчане!

У меня имеется шаблон отчета FR. В нем создано 4 страницы (вкладки Page1, Page2, Page3, Page4). В идеале заполненный шаблон должен умещаться на эти 4 страницы, но естественно если данных на какой-либо странице много, то они переходят на следующую страницу.

Общее количество страниц перед предпросмотром я могу посчитать вот так:

frxReport.PrepareReport(True);
ShowMessage(IntToStr(frxReport.PreviewPages.Count));
frxReport.ShowPreparedReport;


А вот можно ли каким-нибудь образом посчитать отдельно количество Page2 и Page3?
2 ноя 18, 08:38    [21722104]     Ответить | Цитировать Сообщить модератору
 Re: FastReport необычный подсчет количества страниц  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 24502
dartveider13
А вот можно ли каким-нибудь образом посчитать отдельно количество Page2 и Page3?

В Page1 сбрасывать счетчик/переменную скриптом, в Page2 и Page3 увеличивать.
2 ноя 18, 08:49    [21722112]     Ответить | Цитировать Сообщить модератору
 Re: FastReport необычный подсчет количества страниц  [new]
dartveider13
Member

Откуда: Омск
Сообщений: 628
wadman, что то пока не понял мысль... Мне нужно отдельно посчитать сколько страниц заняло page2 и отдельно сколько страниц заняло page3.
2 ноя 18, 08:55    [21722117]     Ответить | Цитировать Сообщить модератору
 Re: FastReport необычный подсчет количества страниц  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 24502
dartveider13
Мне нужно отдельно посчитать сколько страниц заняло page2 и отдельно сколько страниц заняло page3.

Ок, придется завести две переменных, которые будут считаться скриптом. :)
dartveider13
что то пока не понял мысль...

Что именно?
Как объявлять переменные в отчете?
Как скрипты в отчете писать в событиях объектов отчета?
Или как получить к ним доступ из программы?
2 ноя 18, 09:09    [21722122]     Ответить | Цитировать Сообщить модератору
 Re: FastReport необычный подсчет количества страниц  [new]
dartveider13
Member

Откуда: Омск
Сообщений: 628
wadman, ну да я с переменными не пробовал еще работать. Сейчас конечно мануал посмотрю. В коде помоему через FindObject можно найти то что хочется. Наверное остается вопрос какое событие в отчете использовать?
2 ноя 18, 09:15    [21722131]     Ответить | Цитировать Сообщить модератору
 Re: FastReport необычный подсчет количества страниц  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 24502
dartveider13
Наверное остается вопрос какое событие в отчете использовать?

AfterPrint у любого элемента, который всегда попадает в отчет. Заголовок данных, например.
2 ноя 18, 09:18    [21722138]     Ответить | Цитировать Сообщить модератору
 Re: FastReport необычный подсчет количества страниц  [new]
dartveider13
Member

Откуда: Омск
Сообщений: 628
wadman, ага примерно начинаю понимать ход мыслей. Еще маленький вопрос. В мануале написано что изменение значения переменной делается через функцию Set. Получается, чтобы добавить к переменной единицу нужно сделать вот так?

Set('MyVariable', <MyVariable> + 1)
2 ноя 18, 09:24    [21722145]     Ответить | Цитировать Сообщить модератору
 Re: FastReport необычный подсчет количества страниц  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 24502
Не помню точно...

Есть Get и есть Set.
2 ноя 18, 09:33    [21722155]     Ответить | Цитировать Сообщить модератору
 Re: FastReport необычный подсчет количества страниц  [new]
dartveider13
Member

Откуда: Омск
Сообщений: 628
wadman, сейчас пробую, отпишусь по результату
2 ноя 18, 09:37    [21722160]     Ответить | Цитировать Сообщить модератору
 Re: FastReport необычный подсчет количества страниц  [new]
dartveider13
Member

Откуда: Омск
Сообщений: 628
wadman, с переменными в отчете получилось считать количество. В код пока не получилось передать. Пытаюсь так:

var
p1,p2: Variant;
begin

// ... Загрузка отчета из файла

frxReport.PrepareReport(True);
p1 := frxReport.Variables['Page2Count'];
p2 := frxReport.Variables['Page3Count'];
ShowMessage(p1 + ' ' + p2);

end;


Пишет Could not Convert null into type OleStr, хотя в самом отчете выводил переменные - циферки правильные. Получается как то неправильно пытаюсь получить
2 ноя 18, 10:04    [21722192]     Ответить | Цитировать Сообщить модератору
 Re: FastReport необычный подсчет количества страниц  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 24502
dartveider13
циферки правильные

Когда делфи научился складывать строки с числами?
2 ноя 18, 10:08    [21722197]     Ответить | Цитировать Сообщить модератору
 Re: FastReport необычный подсчет количества страниц  [new]
dartveider13
Member

Откуда: Омск
Сообщений: 628
wadman, мм я так понимаю лучше использовать типизированные переменные?
2 ноя 18, 10:36    [21722229]     Ответить | Цитировать Сообщить модератору
 Re: FastReport необычный подсчет количества страниц  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 24502
dartveider13
я так понимаю лучше использовать типизированные переменные?

Даже с ними такой код не будет работать, но хотя-бы ошибка будет на этапе компиляции:
dartveider13
ShowMessage(p1 + ' ' + p2);
2 ноя 18, 11:05    [21722268]     Ответить | Цитировать Сообщить модератору
 Re: FastReport необычный подсчет количества страниц  [new]
dartveider13
Member

Откуда: Омск
Сообщений: 628
wadman, нет ошибки на этапе компиляции при замене варианта на integer нет но ошибка та же

Could not convert variant of type null into type integer

А как вообще правильно выцепить эти переменные в код делфи?
2 ноя 18, 11:12    [21722285]     Ответить | Цитировать Сообщить модератору
 Re: FastReport необычный подсчет количества страниц  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 24502
dartveider13
нет ошибки на этапе компиляции

Нельзя строку складывать с числом. И компилятор такого не может позволить.
Ошибка будет "E2008 Incompatible types".
2 ноя 18, 11:15    [21722290]     Ответить | Цитировать Сообщить модератору
 Re: FastReport необычный подсчет количества страниц  [new]
dartveider13
Member

Откуда: Омск
Сообщений: 628
wadman,

var
p1,p2: Integer;
begin
// подготовка отчета

frxReport.PrepareReport(True);
p1 := frxReport.Variables['Page2Count']; // Здесь происходит ошибка в отладчике
p2 := frxReport.Variables['Page3Count'];

ShowMessage('Page2 = ' + IntToStr(p1) + ' Page3 = ' + IntToStr(p2));
end;


Код компилится... Возможно неправильно обращаюсь к переменным?
2 ноя 18, 11:22    [21722300]     Ответить | Цитировать Сообщить модератору
 Re: FastReport необычный подсчет количества страниц  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 24502
dartveider13
Возможно неправильно обращаюсь к переменным?

Они добавлены в отчете? Через диалоговое окно с переменными?
2 ноя 18, 11:40    [21722325]     Ответить | Цитировать Сообщить модератору
 Re: FastReport необычный подсчет количества страниц  [new]
dartveider13
Member

Откуда: Омск
Сообщений: 628
wadman, да. В списке переменных я добавил группу MyVariables и 2 переменные Page2Count и Page3Count. В скрипте описал счетчик. Для проверки вывел значения переменных на последней странице. Они посчитали правильно. Вот теперь как их передать в код до вывода отчета на предпросмотр?
2 ноя 18, 11:45    [21722332]     Ответить | Цитировать Сообщить модератору
 Re: FastReport необычный подсчет количества страниц  [new]
zinpub
Member

Откуда:
Сообщений: 273
dartveider13,

Обработчик Report.OnGetValue написал?
2 ноя 18, 11:45    [21722337]     Ответить | Цитировать Сообщить модератору
 Re: FastReport необычный подсчет количества страниц  [new]
dartveider13
Member

Откуда: Омск
Сообщений: 628
zinpub, ээээ нет. А что там надо написать?
2 ноя 18, 11:47    [21722340]     Ответить | Цитировать Сообщить модератору
 Re: FastReport необычный подсчет количества страниц  [new]
zinpub
Member

Откуда:
Сообщений: 273
dartveider13
zinpub, ээээ нет. А что там надо написать?


Что-типа:

procedure TForm1.frxReport1GetValue(const VarName: String;
var Value: Variant);
begin
  if VarName='MyVariableName' then
   Value := 'test'
end;
 
2 ноя 18, 11:52    [21722353]     Ответить | Цитировать Сообщить модератору
 Re: FastReport необычный подсчет количества страниц  [new]
zinpub
Member

Откуда:
Сообщений: 273
Ааа... пардон... вам в обратную сторону надо
2 ноя 18, 11:53    [21722355]     Ответить | Цитировать Сообщить модератору
 Re: FastReport необычный подсчет количества страниц  [new]
dartveider13
Member

Откуда: Омск
Сообщений: 628
zinpub, а зачем? Мне не надо передавать в отчет данные, а наоборот из него данные в код делфи забрать
2 ноя 18, 11:53    [21722359]     Ответить | Цитировать Сообщить модератору
 Re: FastReport необычный подсчет количества страниц  [new]
dartveider13
Member

Откуда: Омск
Сообщений: 628
zinpub, да да))) Именно туда, через черный ход)))
2 ноя 18, 11:54    [21722361]     Ответить | Цитировать Сообщить модератору
 Re: FastReport необычный подсчет количества страниц  [new]
dartveider13
Member

Откуда: Омск
Сообщений: 628
Я попробовал из мануала немножко по другому сделать

var
frVariable: TfrxVariable;
Index: Integer;
p1, p2: Variant;
begin

// Загрузка отчета

frxReport.PrepareReport(True);

Index := frxReport.Variables.IndexOf('Page2Count');
if Index <> -1 then
begin
frVariable := frxReport.Variables.Items[Index];
p1 := frVariable.Value;
end;

// Аналогично со второй переменной

frxReport.ShowPreparedReport;

end;


В отладчике видно, что он находит эти переменные. Но в них пусто (NULL).
Не может ли это быть из-за того, что скрипт позже выполняется? Хотя я же пишу ему перед этим PrepareReport?
2 ноя 18, 12:13    [21722385]     Ответить | Цитировать Сообщить модератору
 Re: FastReport необычный подсчет количества страниц  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 24502
В отчете переменные как присваиваются?
2 ноя 18, 12:37    [21722430]     Ответить | Цитировать Сообщить модератору
 Re: FastReport необычный подсчет количества страниц  [new]
dartveider13
Member

Откуда: Омск
Сообщений: 628
wadman, В отчете я использую их только в скрипте. Вот так:

procedure Page1OnAfterPrint(Sender: TfrxComponent);
begin
 Set('Page2Count', 0);
 Set('Page3Count', 0);
end;

procedure PageFooter2OnAfterPrint(Sender: TfrxComponent);
begin
 Set('Page2Count', <Page2Count> + 1);
end;

procedure PageFooter3OnAfterPrint(Sender: TfrxComponent);
begin
 Set('Page3Count', <Page3Count> + 1);
end;
2 ноя 18, 12:45    [21722437]     Ответить | Цитировать Сообщить модератору
 Re: FastReport необычный подсчет количества страниц  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 24502
У меня кончились версии. :)
2 ноя 18, 12:56    [21722450]     Ответить | Цитировать Сообщить модератору
 Re: FastReport необычный подсчет количества страниц  [new]
zinpub
Member

Откуда:
Сообщений: 273
В каком обработчике получать пытаешься? попробуй в OnEndDoc...

Переменные определенны только в момент формирования
2 ноя 18, 12:58    [21722451]     Ответить | Цитировать Сообщить модератору
 Re: FastReport необычный подсчет количества страниц  [new]
dartveider13
Member

Откуда: Омск
Сообщений: 628
wadman, во во, и я о том же))) Самое что смешное. Да в самом отчете если их вывести в какое-нибудь мемо, все прекрасно считается. Я уже попробовал тупо из мемо взять:

Код делфи (не отчета):

var
frPage2, frPage3: TfrxMemoView;
s1, s2: String;
begin

//**

frxReport.PrepareReport(True);

frPage2 := frxReport.FindObject('Page2Count') as TfrxMemoView;
frPage3 := frxReport.FindObject('Page3Count') as TfrxMemoView;

s1 := frPage2.Memo.Text;
s2 := frPage3.Memo.Text;

ShowMessage // Выводит название мемок в квадратных скобках

end;
2 ноя 18, 13:01    [21722456]     Ответить | Цитировать Сообщить модератору
 Re: FastReport необычный подсчет количества страниц  [new]
dartveider13
Member

Откуда: Омск
Сообщений: 628
zinpub, это обработчик нажатия кнопки на форме
2 ноя 18, 13:03    [21722457]     Ответить | Цитировать Сообщить модератору
 Re: FastReport необычный подсчет количества страниц  [new]
dartveider13
Member

Откуда: Омск
Сообщений: 628
zinpub, Слушай ну точно! По отладчику получилось в этом событии получить данные с переменных. Спасибо большое!
wadman, отдельное спасибо за идею и активное участие)))
2 ноя 18, 13:12    [21722469]     Ответить | Цитировать Сообщить модератору
 Re: FastReport необычный подсчет количества страниц  [new]
aleksandr-pro
Member

Откуда: Самара
Сообщений: 178
dartveider13,

можно попробовать еще такой вариант каждой странице назначит поле Tag =1 а второй странице 2

for x:=0 to Report.PreviewPages.Count-1 do
if Report.PreviewPages.Page[x].Tag=1 then 
2 ноя 18, 13:18    [21722475]     Ответить | Цитировать Сообщить модератору
 Re: FastReport необычный подсчет количества страниц  [new]
dartveider13
Member

Откуда: Омск
Сообщений: 628
aleksandr-pro, ну да))) Тоже как вариант... Запомню. Спасибо.
2 ноя 18, 13:20    [21722479]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2      [все]
Все форумы / Delphi Ответить