Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / FastReport необычный подсчет количества страниц / 25 сообщений из 34, страница 1 из 2
02.11.2018, 08:38
    #39726935
dartveider13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport необычный подсчет количества страниц
Доброго времени суток уважаемые форумчане!

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

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

Код: pascal
1.
2.
3.
frxReport.PrepareReport(True);
ShowMessage(IntToStr(frxReport.PreviewPages.Count));
frxReport.ShowPreparedReport;



А вот можно ли каким-нибудь образом посчитать отдельно количество Page2 и Page3?
...
Рейтинг: 0 / 0
02.11.2018, 08:49
    #39726942
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport необычный подсчет количества страниц
dartveider13А вот можно ли каким-нибудь образом посчитать отдельно количество Page2 и Page3?
В Page1 сбрасывать счетчик/переменную скриптом, в Page2 и Page3 увеличивать.
...
Рейтинг: 0 / 0
02.11.2018, 08:55
    #39726945
dartveider13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport необычный подсчет количества страниц
wadman, что то пока не понял мысль... Мне нужно отдельно посчитать сколько страниц заняло page2 и отдельно сколько страниц заняло page3.
...
Рейтинг: 0 / 0
02.11.2018, 09:09
    #39726949
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport необычный подсчет количества страниц
dartveider13Мне нужно отдельно посчитать сколько страниц заняло page2 и отдельно сколько страниц заняло page3.
Ок, придется завести две переменных, которые будут считаться скриптом. :)
dartveider13что то пока не понял мысль...
Что именно?
Как объявлять переменные в отчете?
Как скрипты в отчете писать в событиях объектов отчета?
Или как получить к ним доступ из программы?
...
Рейтинг: 0 / 0
02.11.2018, 09:15
    #39726955
dartveider13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport необычный подсчет количества страниц
wadman, ну да я с переменными не пробовал еще работать. Сейчас конечно мануал посмотрю. В коде помоему через FindObject можно найти то что хочется. Наверное остается вопрос какое событие в отчете использовать?
...
Рейтинг: 0 / 0
02.11.2018, 09:18
    #39726959
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport необычный подсчет количества страниц
dartveider13Наверное остается вопрос какое событие в отчете использовать?
AfterPrint у любого элемента, который всегда попадает в отчет. Заголовок данных, например.
...
Рейтинг: 0 / 0
02.11.2018, 09:24
    #39726966
dartveider13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport необычный подсчет количества страниц
wadman, ага примерно начинаю понимать ход мыслей. Еще маленький вопрос. В мануале написано что изменение значения переменной делается через функцию Set. Получается, чтобы добавить к переменной единицу нужно сделать вот так?

Код: pascal
1.
Set('MyVariable', <MyVariable> + 1)
...
Рейтинг: 0 / 0
02.11.2018, 09:33
    #39726975
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport необычный подсчет количества страниц
Не помню точно...

Есть Get и есть Set.
...
Рейтинг: 0 / 0
02.11.2018, 09:37
    #39726980
dartveider13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport необычный подсчет количества страниц
wadman, сейчас пробую, отпишусь по результату
...
Рейтинг: 0 / 0
02.11.2018, 10:04
    #39727006
dartveider13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport необычный подсчет количества страниц
wadman, с переменными в отчете получилось считать количество. В код пока не получилось передать. Пытаюсь так:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
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, хотя в самом отчете выводил переменные - циферки правильные. Получается как то неправильно пытаюсь получить
...
Рейтинг: 0 / 0
02.11.2018, 10:08
    #39727010
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport необычный подсчет количества страниц
dartveider13циферки правильные
Когда делфи научился складывать строки с числами?
...
Рейтинг: 0 / 0
02.11.2018, 10:36
    #39727032
dartveider13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport необычный подсчет количества страниц
wadman, мм я так понимаю лучше использовать типизированные переменные?
...
Рейтинг: 0 / 0
02.11.2018, 11:05
    #39727061
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport необычный подсчет количества страниц
dartveider13я так понимаю лучше использовать типизированные переменные?
Даже с ними такой код не будет работать, но хотя-бы ошибка будет на этапе компиляции:
dartveider13
Код: pascal
1.
ShowMessage(p1 + ' ' + p2);
...
Рейтинг: 0 / 0
02.11.2018, 11:12
    #39727075
dartveider13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport необычный подсчет количества страниц
wadman, нет ошибки на этапе компиляции при замене варианта на integer нет но ошибка та же

Could not convert variant of type null into type integer

А как вообще правильно выцепить эти переменные в код делфи?
...
Рейтинг: 0 / 0
02.11.2018, 11:15
    #39727079
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport необычный подсчет количества страниц
dartveider13нет ошибки на этапе компиляции
Нельзя строку складывать с числом. И компилятор такого не может позволить.
Ошибка будет "E2008 Incompatible types".
...
Рейтинг: 0 / 0
02.11.2018, 11:22
    #39727086
dartveider13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport необычный подсчет количества страниц
wadman,

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
var
p1,p2: Integer;
begin
// подготовка отчета

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

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



Код компилится... Возможно неправильно обращаюсь к переменным?
...
Рейтинг: 0 / 0
02.11.2018, 11:40
    #39727108
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport необычный подсчет количества страниц
dartveider13Возможно неправильно обращаюсь к переменным?
Они добавлены в отчете? Через диалоговое окно с переменными?
...
Рейтинг: 0 / 0
02.11.2018, 11:45
    #39727113
dartveider13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport необычный подсчет количества страниц
wadman, да. В списке переменных я добавил группу MyVariables и 2 переменные Page2Count и Page3Count. В скрипте описал счетчик. Для проверки вывел значения переменных на последней странице. Они посчитали правильно. Вот теперь как их передать в код до вывода отчета на предпросмотр?
...
Рейтинг: 0 / 0
02.11.2018, 11:45
    #39727117
zinpub
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport необычный подсчет количества страниц
dartveider13,

Обработчик Report.OnGetValue написал?
...
Рейтинг: 0 / 0
02.11.2018, 11:47
    #39727120
dartveider13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport необычный подсчет количества страниц
zinpub, ээээ нет. А что там надо написать?
...
Рейтинг: 0 / 0
02.11.2018, 11:52
    #39727125
zinpub
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport необычный подсчет количества страниц
dartveider13zinpub, ээээ нет. А что там надо написать?

Что-типа:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
procedure TForm1.frxReport1GetValue(const VarName: String;
var Value: Variant);
begin
  if VarName='MyVariableName' then
   Value := 'test'
end;
 
...
Рейтинг: 0 / 0
02.11.2018, 11:53
    #39727126
zinpub
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport необычный подсчет количества страниц
Ааа... пардон... вам в обратную сторону надо
...
Рейтинг: 0 / 0
02.11.2018, 11:53
    #39727130
dartveider13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport необычный подсчет количества страниц
zinpub, а зачем? Мне не надо передавать в отчет данные, а наоборот из него данные в код делфи забрать
...
Рейтинг: 0 / 0
02.11.2018, 11:54
    #39727132
dartveider13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport необычный подсчет количества страниц
zinpub, да да))) Именно туда, через черный ход)))
...
Рейтинг: 0 / 0
02.11.2018, 12:13
    #39727148
dartveider13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport необычный подсчет количества страниц
Я попробовал из мануала немножко по другому сделать

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
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?
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / FastReport необычный подсчет количества страниц / 25 сообщений из 34, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]