Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.08.25;
Скачать: CL | DM;

Вниз

FastReport   Найти похожие ветки 

 
SPIRIT ©   (2003-07-29 15:06) [0]

не могу разобраться самостоятельно...

есть сформированный запрос готовый его надо в распечатать.
Подсказали, что лучше использовать FastReport. Закидываю на форму компоненты TFrReport и TFrDbDataSet(эту для чего еще не знаю) .Двойным нажатием на FrReport формирую отчет в появляющемся дизайнере. (добавляю поля с помощью "insert DB fields" ).
в "preview report" отчет выглядит отлично...
потом на кнопку пишу
FrReport1.ShowReport;
в итоге никакой реакции


 
SPIRIT ©   (2003-07-29 15:07) [1]

Чего я недоделал то ???


 
TohaNik ©   (2003-07-29 15:25) [2]

Перед ShowReport
LoadFromFile("MyReport.frf")


 
HSolo ©   (2003-07-29 15:33) [3]

В TFrDbDataSet.DataSet / DataSource Ваш запрос указан?
В отчете у Вас бэнд MasterData есть? Ему назначен источник - тот самый TFrDbDataSet?
И где, собственно, находится шаблон Вашего отчета? Скорее всего, у Вас TFrReport.StoreInDFM = false, так? (гляньте в инспекторе). Если это так, то:
1) сохранили ли Вы шаблон в frf-файле (в дизайнере, Файл - Сохранить как);
2) перед FrReport1.ShowReport не забыли ли Вы его загрузить:
FrReport1.LoadFromFile("имя-frf-файла");
А если не хотите держать шаблон в файле, то сперва скажите Вашему TFrReport, что StoreInDFM = true, а потом рисуйте отчет, и тогда шаблон отчета будет сохранен в dfm-ке. Только я так не делаю и другим не советую.


 
SPIRIT ©   (2003-07-29 15:46) [4]

спасибо
ЛоадФромФайл то что надо


 
SPIRIT ©   (2003-07-29 15:53) [5]

пустые значения у меня заполняются на 0 ... а как сделать, чтобы они какой-нибудь строчкой заменялись


 
SPIRIT ©   (2003-07-29 16:05) [6]

а лучше подскажите как динамически формировать отчет без Designer"a. Потому что надо некоторые ячейки раскрашивать в другой цвет в зависимости от значения.


 
HSolo ©   (2003-07-29 16:11) [7]

Все это можно сделать в скрипте. Почитайте в справке по FastReport-у: Встроенные языковые средства - Встроенный интерпретатор.


 
SPIRIT ©   (2003-07-29 16:15) [8]

а из Делфи никак ?


 
HSolo ©   (2003-07-29 16:25) [9]

А чем Вам FastReport не Delphi? :)) Или в дизайнере Вы не хотите? Вам нужно именно в run-time? Пожалуйста:

var FRObj: TfrMemoView;
...
FRObj := TfrMemoView(frReport1.FindObject("Memo1"));
if что-то-там = 0
then FRObj.Memo.Text := "а тута ноль";

Красить - аналогично


 
Zacho ©   (2003-07-30 08:45) [10]

Скачай и почитай http://www.vibe.ru/files/free/fre232ru.zip


 
SPIRIT ©   (2003-07-31 09:28) [11]

var FRObj: TfrMemoView;
begin
FrReport1.LoadFromFile("FR_end.frf");
FRObj := TfrMemoView(frReport1.FindObject("Memo1"));
if FRObj.Memo.text = "0"
then FRObj.Memo.Text := "а тута ноль";


не работает ........
за то работает это

if FRObj<>nil
then FRObj.Memo.Text := "а тута ноль";

заполняются все записи на "а тута ноль"

как я понимаю сначала выполняется скрипт, а потом заполнение MasterData (на котором мое мемо и находится) из БД.
т.е. все что я напишу в скрипте очиститься и заполниться "0" если передается пустое значение. Можно конечно поставить HIDE ZEROS но мне это не подходит. Поэтому пишу на событие frReport1BeginDoc... еще .. передается из бд значение и по умолчанию конвертируется в строку. вот я и обращаюсь как строке.. но нифига... руководство разработчика прочитал два раза никаких новых идей по этому поводу ... пробовал даже
if FRObj.Memo[0]="0"
then FRObj.Memo.Text := "а тута ноль";

тоже нифига... мозги уже опухли.. помогите пжста..


 
HSolo ©   (2003-07-31 09:43) [12]

> пишу на событие frReport1BeginDoc
И выполняется у Вас этот код 1 раз. Независимо от того, сколько записей в выборке и что в них содержится.
Попробуйте в TFrDbDataSet.OnFirst / OnNext или TFrReport.OnBeginBand


 
SPIRIT ©   (2003-07-31 09:58) [13]

пишу на кнопку, которая перед FrReport1.ShowReport;

if FRObj<>nil
then FRObj.Memo.Text := "а тута ноль";


все мемки заполняются на "а тута ноль", так что он даже там пробегается по всем записям.


 
SPIRIT ©   (2003-07-31 10:14) [14]

и на BeginDoc
if FRObj.Memo.Text="0"
then FRObj.Memo.Text := "а тута ноль"
else FRObj.Memo.Text := "а тута НЕ ноль";

в итоге все поля "а тута НЕ ноль"
..........причина в том, что "ОН" тот 0 который я ему даю на сравнение и 0 который записывается в Мемо, считает неодинаковыми.... но они же оба типа String.....


 
HSolo ©   (2003-07-31 10:19) [15]

Так Вы же ему ясно сказали:
if FRObj<>nil
и никаких дополнительных условий. Он и сделал что сказано :)
Достучитесь до того датасета, который в отчете выводится. Смотрите, что лежит в поле датасета, и в зависимости от этого командуйте отчетом.
Вот еще один способ. Через переменные.
Заведите в отчете переменную. Допустим, myVar. Ее и выводите в отчете, там, где у Вас должно быть число - или какой-то текст вместо 0.
В обработчике FrReport1.OnGetValue напишите:
if ParName = "myVar" then begin
if поле-не-равно-0
then ParValue := значение-поля
else ParValue := "а тута ноль";
end;


 
SPIRIT ©   (2003-07-31 12:52) [16]

[IF(FORMATDATETIME("dd,mm,yyyy", [Query_end."query_per.БЭ СРД"])="0", "Не сдает", [Query_end."query_per.БЭ СРД"])]

Вот такую строчку я соорудил в FastReporte... результат тот же..вместо нуля в кавычки все пробовал пихать (29.07.2003, и просто "")....


 
HSolo ©   (2003-07-31 13:15) [17]

Его родным построителем выражений соорудили?

А что возвращает FORMATDATETIME, если значение поля = 0? (Серьезно - я не знаю, посмотрите).

А то, что у Вас в "dd,mm,yyyy" в качестве разделителя стоит запятая, а не точка - это так надо?

А если убрать FORMATDATETIME и смотреть просто на значение поля, что-то типа:
[IF([Query_end."query_per.БЭ СРД"]=0, "Не сдает", [Query_end."query_per.БЭ СРД"])]



 
SPIRIT ©   (2003-07-31 13:34) [18]

[IF(FORMATDATETIME("dd/mm/yyyy", [Query_end."query_per.БЭ СРД"])="30.12.1899", "Не сдает", [Query_end."query_per.БЭ СРД"])]


если 0 перевести в дату, то получиться 30.12.1899 так ведь ? .. вот и решение этой проблемы.... спасибо за помощь и поддержку


 
HSolo ©   (2003-07-31 16:50) [19]

Да, именно так. А почто Вы 0 в дату пущаете? :)) Почему не null - Access не позволяет или задача?


 
SPIRIT ©   (2003-07-31 17:08) [20]

на Null не реагирует, я его сразу же как дошло что надо к БД полю обращаться пробовал (даже nil писал). Мне кажется, что когда у ФР запрашиваешь поле из БД он его конвертирует под свой лад и если null то выдает ноль, других идей у меня нет по этому поводу. Вот только зачем народ дурить. Хотя, в принципе, разработчики в документации заявили, что все типы у нас теперь в одном: Variant. И если бы ты не подсказал бы проверить, что выведет [FORMATDATETIME("dd/mm/yyyy")....] и если бы я не увидел там интересные даты 30.12.1899 на месте бывших нуликов не знаю, чтобы ща делал.
Так что Access позволяет и дает ФР пустое значение, но ФР не хочет его воспринимать как пустое и записывает туда наш любимый нулик...но обратиться к нему как к "0" или null ,трудно и я не понял как, за то этот нулик можно перевести в дату...и потом уже работать...чего только не выдумаешьс этим делфи....


 
HSolo ©   (2003-07-31 17:31) [21]

Да, в общем-то, ничего интересного в этой дате нет. Help по TDateTime гласит:

Most VCL objects represent date and time values using the TDateTime type. The integral part of a TDateTime value is the number of days that have passed since 12/30/1899. The fractional part of a TDateTime value is fraction of a 24 hour day that has elapsed.

Following are some examples of TDateTime values and their corresponding dates and times:

0 12/30/1899 12:00 am

Но почему у Вас FR трактует null как 0 - не понимаю. Я, правда, работаю не с Access, а с IB - но мне он (FR) такую свинью ни разу не подкладывал. Никого никуда он не конвертит, и там, где дата у меня NULL, честно оставляет пустое место. А у Вас там точно null был, не 0? Чем смотрели?
И вот еще вариант: попробуйте в дизайнере для того memo, куда дату выводите, явно указать, что тип поля - дата. Вместо 0 при этом должна появиться та самая 30.12.1899, а вместо null - пустота.



Страницы: 1 вся ветка

Текущий архив: 2003.08.25;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.017 c
1-81768
LVitaliy
2003-08-14 14:13
2003.08.25
Преобразование


14-81951
Затейник - некрофил (НАСТОЯЩИЙ)
2003-08-06 19:32
2003.08.25
Стоит ли регистрироваться?


14-81898
race1
2003-08-07 15:39
2003.08.25
ntfs vs. boot floppy


3-81540
McSimm2
2003-07-31 09:55
2003.08.25
[Oracle] fields not is null


1-81616
hawkins
2003-08-13 08:09
2003.08.25
В TImage вместо текста появляется черная полоса