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

Вниз

QReport и геморой   Найти похожие ветки 

 
Valeriya   (2003-04-03 11:55) [0]

Подскажите, плиз, как сделать так. чтобы можно было регулировать число столбцов. Есть несколько постоянных столбцов (обязательных) и надо к ним ещё добавить n столбцов одинаковой ширины. При этом нужно ещё как-то разобраться чтобы это всё разместилось на странице...


 
Leran2002   (2003-04-03 12:12) [1]

Такие отчеты я предпочетаю выводить в любимый всеми Word...
Вот кусок кода из рабочей проги:

uses ..., OleServer, Word97;

procedure TReitFrm.BitBtn1Click(Sender: TObject);
var
WordDoc:_Document;
WordTbl:Table;
RowNum:integer;
TmpS:string;
StartR,EndR:OleVariant;

pSeparator,pNumRows,pNumColumns:OleVariant;

Check1,Check2:boolean;
begin
WordApp.Connect;

Check1:=WordApp.Options.CheckSpellingAsYouType; {*} Check2:=WordApp.Options.CheckGrammarAsYouType;
WordApp.Options.CheckSpellingAsYouType:=false; {*} WordApp.Options.CheckGrammarAsYouType:=false;
WordApp.Visible:=false;

WordDoc:=WordApp.Documents.Add(EmptyParam,EmptyParam);

With WordDoc.PageSetup do begin
Orientation := wdOrientPortrait; {wdOrientLandscape;}
LeftMargin := 28.35;
RightMargin := LeftMargin;
TopMargin := LeftMargin;
BottomMargin := LeftMargin;
End;

WordDoc.Paragraphs.Add(EmptyParam);

With WordDoc.Paragraphs.First do begin
Range.Font.Bold := 1;
Range.Font.Size := 14;
Range.Text := "Результаты обработки статических данных";
Format.Alignment := wdAlignParagraphCenter;
End;

WordDoc.Paragraphs.Add(EmptyParam);

TmpS:="№"#9"Ф. И. О."#9"Должность"#9"Кафедра"#9"Балл";

WordDoc.Paragraphs.Add(EmptyParam);

// начало диапозона
StartR:=WordDoc.Paragraphs.Get_Last.Range.Start;

ReportQuery.Parameters.ParamValues["[Год]"]:= SelYear;
ReportQuery.Open;
ReportQuery.First;
RowNum:=0;
while not ReportQuery.Eof do begin
inc(RowNum);
TmpS:=TmpS +#9+ IntToStr(RowNum) +
#9+ ReportQueryFIO.AsString +
#9+ ReportQueryDolz.AsString +
#9+ ReportQueryKafed.AsString +
#9+ ReportQuerySumBall.AsString ;
ReportQuery.Next;
end;

ReportQuery.Close;

WordDoc.Paragraphs.Get_Last.Range.InsertAfter(TmpS);

EndR:=WordDoc.Paragraphs.Get_Last.Range.End_;

WordDoc.Range(StartR,EndR).Select;

pSeparator:=wdSeparateByTabs;
pNumRows:=EmptyParam;
pNumColumns:=5;

WordDoc.Range(StartR,EndR).ConvertToTable(
pSeparator, pNumRows, pNumColumns,
EmptyParam, EmptyParam, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, EmptyParam);


WordTbl:=WordDoc.Tables.Item(1);
WordTbl.Range.Paragraphs.Alignment := wdAlignParagraphLeft;
WordTbl.Rows.Alignment := wdAlignRowCenter;
WordTbl.Range.Font.Bold:=0;
WordTbl.Range.Font.Size:=12;

WordTbl.Columns.Item(1).Width := 20;
WordTbl.Columns.Item(2).Width := 170;
WordTbl.Columns.Item(3).Width := 140;
WordTbl.Columns.Item(4).Width := 140;
WordTbl.Columns.Item(5).Width := 40;

WordTbl.Range.Font.Size := 10;

WordTbl.Rows.SpaceBetweenColumns := 0;


WordTbl.Rows.Item(1).Range.Font.Bold:=1;
WordTbl.Rows.Item(1).Range.Paragraphs.Alignment := wdAlignParagraphCenter;



WordTbl.Borders.Item(wdBorderTop).LineStyle := wdLineStyleSingle;
WordTbl.Borders.Item(wdBorderLeft).LineStyle := wdLineStyleSingle;
WordTbl.Borders.Item(wdBorderBottom).LineStyle := wdLineStyleSingle;
WordTbl.Borders.Item(wdBorderRight).LineStyle := wdLineStyleSingle;
WordTbl.Borders.Item(wdBorderHorizontal).LineStyle := wdLineStyleSingle;
WordTbl.Borders.Item(wdBorderVertical).LineStyle := wdLineStyleSingle;


WordTbl.Columns.Item(1).Select;
WordApp.Selection.ParagraphFormat.Alignment := wdAlignParagraphCenter;

WordTbl.Columns.Item(5).Select;
WordApp.Selection.ParagraphFormat.Alignment := wdAlignParagraphCenter;

WordApp.Selection.Collapse(EmptyParam);

WordApp.Options.CheckSpellingAsYouType:=Check1;
WordApp.Options.CheckGrammarAsYouType:=Check2;

WordApp.Visible:=true;
// активизировать приложение
WordApp.Activate;
// максимизировать приложение
WordApp.WindowState:=wdWindowStateMaximize;



WordApp.Disconnect;

end;

Если что обрашайся постараюсь помочь...


 
SanteR   (2003-04-03 12:53) [2]

Отчет делаешь со всеми полями, а при печати проверяешь некую булеву переменную bOptionalField, например

QRLabelOptional1->Enabled = bOptionalField;


Возможно пригодятся обработчики событий
QuickRep1BeforePrint и QRLabelPrint.



 
Valeriya   (2003-04-03 13:07) [3]

2 SanterR: поподробнее, как обработчики написать, пожалуйста.


 
Johnmen   (2003-04-03 13:18) [4]

Обработчики пишутся примерно так : C:\Program Files\Borland\Delphi...\Demos\QuickRpt

И писать в теме "QReport и геморой" по крайней мере некорректно...

По сути вопроса :
коротко - все делается динамически,
подробно - большие пространства и значительное время для ответа


 
SanteR   (2003-04-03 13:20) [5]

Если bOptinal будет false, то столбец
будет с пустыми ячейками.


void __fastcall TQuickReport1::QuickRep1BeforePrint(
TCustomQuickRep *Sender, bool &PrintReport)
{
QRLabelOptional1->Enabled = bOptional;
QRExprOptional1->Enabled = bOptional;
}
//---------------------------------------------------------------------------


 
SanteR   (2003-04-03 13:25) [6]

Следующий код возможно подскажет как убрать также и рамки ячеек


void __fastcall TQuickReport1::QRLabelOptional1Print(TObject *sender, AnsiString &Value)
{
((TQRLabel*)sender)->Frame->DrawBottom = bDrawBottom;
}
//---------------------------------------------------------------------------




 
Valeriya   (2003-04-03 13:49) [7]

Ещё вопрос: а если много столбцов получится?


 
SanteR   (2003-04-03 14:07) [8]

Если столбцы уже не помещаются по ширине страницы, то возможно поможет использование одного и того же столбца для вывода разной информации в разное время. В обработчике QRLabelPrint, например, можно подменять значение, которое будет напечатано:


void __fastcall TQuickReport1::QRLabelOptional1Print(TObject *sender, AnsiString &Value)
{
if(bOther) Value = ValueOther;
}
//---------------------------------------------------------------------------


А вообще у меня был только один последний столбец, который я печатал только по требованию. (21-я графа в индивидуальной карточке ЕСН)

Привет славному городу Подольску от программистов из Пущино!


 
Valeriya   (2003-04-03 15:02) [9]

Спасибочки, я не подольчанка правда, но программистам из Пущино благодарна искренне :)


 
Ozone   (2003-04-04 06:15) [10]

To Johnmen ©
".."QReport и геморой"..."

Тавталогия получается ..........





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

Форум: "Базы";
Текущий архив: 2003.04.21;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.009 c
1-67246
[diesel]
2003-04-11 09:09
2003.04.21
событие прокрутки на TListView


4-67643
Andrew2
2003-02-21 16:11
2003.04.21
Загрузка процессора


1-67324
Berzercer
2003-04-09 12:34
2003.04.21
как задать переменной TTime конкретное значение


14-67533
DaemonDZK
2003-04-04 13:53
2003.04.21
Векторная графика


1-67250
Val
2003-04-10 15:54
2003.04.21
Не закрывается Excel. Почему?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский