Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.08.25;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.013 c
1-81804
titnn
2003-08-13 21:38
2003.08.25
Сохраняется поток в файл бинар, как сразу в тексте сохранять


3-81530
stud
2003-07-31 17:57
2003.08.25
группировка записей


1-81667
Mishenka
2003-08-11 21:40
2003.08.25
Символ акселератор в меню...


4-81994
Del
2003-06-21 23:43
2003.08.25
Как по хэндлу главного окна узнать ExeName?


14-81959
Ruf
2003-07-25 18:37
2003.08.25
Сегодня день сисадмина!!!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский