Delphi生成ページ(html)レポート
2753 ワード
ハードディスク(HDD)を整理していたら、突然この小物を見つけて、何年も前に永恩グループ(ダフニ)にPOSシステムをチェーンしていたときに作ったDELPHIでHTMLレポートを生成するテスト(私はもう5年もDELPHIを使っていません)を思い出しました.どうしてこんなに変態を要求したの?
私は当初ダフニにfastreportでレポートを作って、フォーマットとデータの展示は完全に要求を満たしていましたが、最終的に拒否されました.その理由は、oracle erpの印刷がHTMLのウェブページ形式で印刷されていたからです.私はとても崩壊して、oracleの中のreport builderも強いことを覚えています.どうして使いませんか.実は今まで私は依然としてfastreportでするのが正しいことを堅持して、しかしその時、人は取引先で、htmlを使わなければならなくて、あなたも仕方がなくて、人はブラウザの中で右ボタンをクリックして印刷するのが好きで、ああ、この年、どんな需要があります.
当時、このチームは調査研究に行かなかったので、私は夜の暇な時間を割いて、資料を見て、この問題を解決しました.実は簡単で、体力的な仕事でした.
delphiにはwebbrowserコントロールがあり、この上にhtmlコードを直接出力すればいいです.htmlでテンプレートを作ってから、中にデータを記入すればいいです.
このレポートは複雑で、グループ化、集約の要約に関連しています.分類要約、明細などは1つのレポートに記載されています.つまり、複雑な構造のhtmlページです.構造の複雑さ、はっきり言って体力の仕事で、その肝心な点:
htmlテンプレートの生成
簡単な例を挙げると、頭部:
データベースからデータをクエリーし、結果を取得し、入力します.
これでhtmlコードを生成し、webbrowserにどのように表示しますか?
なお注意
私は当初ダフニにfastreportでレポートを作って、フォーマットとデータの展示は完全に要求を満たしていましたが、最終的に拒否されました.その理由は、oracle erpの印刷がHTMLのウェブページ形式で印刷されていたからです.私はとても崩壊して、oracleの中のreport builderも強いことを覚えています.どうして使いませんか.実は今まで私は依然としてfastreportでするのが正しいことを堅持して、しかしその時、人は取引先で、htmlを使わなければならなくて、あなたも仕方がなくて、人はブラウザの中で右ボタンをクリックして印刷するのが好きで、ああ、この年、どんな需要があります.
当時、このチームは調査研究に行かなかったので、私は夜の暇な時間を割いて、資料を見て、この問題を解決しました.実は簡単で、体力的な仕事でした.
delphiにはwebbrowserコントロールがあり、この上にhtmlコードを直接出力すればいいです.htmlでテンプレートを作ってから、中にデータを記入すればいいです.
このレポートは複雑で、グループ化、集約の要約に関連しています.分類要約、明細などは1つのレポートに記載されています.つまり、複雑な構造のhtmlページです.構造の複雑さ、はっきり言って体力の仕事で、その肝心な点:
htmlテンプレートの生成
簡単な例を挙げると、頭部:
{ ,6 }
HTML_LZS_HEAD_ONE=
'<TABLE cellSpacing=0 border=0> '
+'<TBODY> '
+'<TR> '
+'<TD align=right> :</TD> '
+'<TD align=left>%s</TD></TR> '
+'<TR> '
+'<TD align=right> :</TD> '
+'<TD align=left>%s</TD></TR> '
+'<TR> '
+'<TD align=right> :</TD> '
+'<TD align=left>%s</TD></TR>'
+'<TR>'
+'<TD align=right> :</TD> '
+'<TD align=left>%s</TD></TR> '
+'<TR> '
+'<TD align=right> :</TD> '
+'<TD align=left>%s</TD></TR> '
+'<TR> '
+'<TD align=right> :</TD> '
+'<TD align=left>%s</TD></TR> '
+'</TBODY> '
+'</TABLE> ';
データベースからデータをクエリーし、結果を取得し、入力します.
F_HEAD_ONE:=Format(HTML_LZS_HEAD_ONE,
[aqryPublic.FieldByName('SUBCOMPANY_ID').AsString,
aqryPublic.FieldByName('WORKING_GROUP').AsString,
aqryPublic.FieldByName('SHOP_ID').AsString,
aqryPublic.FieldByName('REFERENCE_YEAR').AsString,
aqryPublic.FieldByName('REFERENCE_MONTH').AsString,Fstate]);
これでhtmlコードを生成し、webbrowserにどのように表示しますか?
procedure TFrmReport.ShowHtml(content: widestring);
var
v: Variant;
HTMLDocument: IHTMLDocument2;
begin
v := VarArrayCreate([0, 0], varVariant);
v[0] := content;
HTMLDocument := WebBrowser1.Document as IHTMLDocument2;
HTMLDocument.write(PSafeArray(TVarData(v).VArray));
HTMLDocument.close;
HTMLDocument := nil;
end;
なお注意
initialization
OleInitialize(nil);
finalization
OleUninitialize;