Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

FastReport: нужен ваш совет [D6]


Explorer ©   (2002-07-30 07:31:00) 

Здравствуйте!

Сделал документ: ReportTitle и MasterData.
Проблемка в том, что мне надо в ReportTitle вывести не повторяющиеся даты, которым соответствуют записи в MasterData.

Например, в MasterData выводятся такие строки:

1. | 15456,00 | 6523,56 | Приход | 27.07.2002
2. | 56565,00 | 456,56 | Приход | 26.07.2002
3. | 58985,00 | 4444,56 | Приход | 26.07.2002
4. | 78748,00 | 4484,56 | Приход | 26.07.2002
5. | 98292,00 | 6523,56 | Приход | 28.07.2002

A, в ReportTitle что вроде этого:

Данные за 26.07.2002, 27.07.2002, 28.07.2002

Подскажите, как мне можно это реализовать?


Eugene Lachinov   (2002-07-30 14:38:00) [1]

Не тогда напиши преобразование списка строк (Memo) к требуемой строке (S) и Memo.Text := S


Explorer   (2002-07-30 14:16:00) [2]

Запятые перед первой датой и последней остаются.


Eugene Lachinov   (2002-07-30 14:09:00) [3]

Попробуй так:

if (S <> "") and (Memo.IndexOf(S) = -1) then
Memo.Add(S);

...
Memo.Delimiter := ",";
Memo.QuoteChar := " ";
Memo.Text := Memo.DelimitedText



Explorer   (2002-07-30 13:50:00) [4]

Просто, данные выводятся в таком виде:

,"24.07.2002","25.07.2002", "29.07.2002

Можно ли это справить (убрать запятую в начале и добавить кавычку в конце!) или привести к такому виду
24.07.2002, 25.07.2002, 29.07.2002 ?


Eugene Lachinov   (2002-07-30 13:35:00) [5]

Memo.Text := Memo.CommaText


Explorer   (2002-07-30 13:31:00) [6]

Получилось!
Только, я не понял, а как расставляются запятые и кавычки?


Eugene Lachinov   (2002-07-30 12:26:00) [7]

procedure TFRCoreDialog.frReportBeforePrint(Memo: TStringList;
View: TfrView);
var
B, S : string;
begin
if View.Name = "MyName" then begin
with Memo do begin
BeginUpdate;
try
with Имя источника данных (от TDataSet) do begin
B := Bookmark;
try
First;
while not EOF do begin
S := FieldByName("Имя поля").DisplayText;
if Memo.IndexOf(S) = -1 then
Memo.Add(S);
Next
end
finally
if B <> "" then Bookmark := B
end
end;
Memo.Text := Memo.CommaText
finally
EndUpdate
end
end
end
end;


Explorer   (2002-07-30 12:01:00) [8]

Вот:

procedure TFormReports.frReportSprRoubGetValue(const ParName: String;
var ParValue: Variant);
var
s: string;
begin
S := S + QuerySpr.FieldByName("Date").AsString + ",";
if ParName = "S" then
ParValue := S;
end;


Я понимаю, что он берет только первую дату.
А вот, как сделать, чтобы перебрать все неповторяющиеся даты (а то мозгов не хватает!)?


Eugene Lachinov   (2002-07-30 11:53:00) [9]

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


Explorer   (2002-07-30 11:34:00) [10]

Что-то я поспешил...
Пытался программно сделать, но... не получилось.



Explorer   (2002-07-30 10:58:00) [11]

программно я сделал.

Думал, что это можно сделать в дизайнере (еще не изучил возможностей FastReport).

Еще раз, большое спасибо.


Eugene Lachinov   (2002-07-30 10:45:00) [12]

У TfrReport есть полезные события, например OnBeforePrint, требуемую строку можно подготовить программно, заранее, или все хотелось бы в Дизайнере ?


Explorer   (2002-07-30 10:38:00) [13]

>Eugene Lachinov ©

А если, сделать тоже самое ( в ReportTitle вывести не повторяющиеся даты), только не используя MasterData?


Explorer   (2002-07-30 10:05:00) [14]

>Eugene Lachinov ©
Спасибо! Сейчас попробую.


Eugene Lachinov   (2002-07-30 09:45:00) [15]

В Дизайнере - Файл - Параметры отчета - Делать два прохода
Свойства ReportTitle, свойство
OnBeforePrint
if not FinalPass then S := "";
Свойства MasterData, свойство
OnBeforePrint
if not FinalPass then begin
if Pos([Имя поля], S) = 0 then
S := S + [Имя поля] + ", ";
end
Там где нужно вывести даты [S]


Explorer   (2002-07-30 08:31:00) [16]

А можно по подробней?(не давно стал пользоваться FastReport!)


Eugene Lachinov   (2002-07-30 08:26:00) [17]

Сделать двухпроходный отчет, накапливать даты в строковой переменной.


Наверх

Титульная страница Поиск, карта сайта Написать письмо