Форум: "Базы";
Текущий архив: 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