請求書番号でデータをグループ化したレポート(VFP 8.0を使用)があります。請求書番号を変更してページの合計をリセットする必要があります。
_pagetotalは常に、選択したすべての請求書の合計ページを返すため、これを行うことができませんでした。
ご意見をお聞かせください。
請求書番号でデータをグループ化したレポート(VFP 8.0を使用)があります。請求書番号を変更してページの合計をリセットする必要があります。
_pagetotalは常に、選択したすべての請求書の合計ページを返すため、これを行うことができませんでした。
ご意見をお聞かせください。
説明に基づいて、あなたが望むものは私の以前のコメントによるように見えます...各請求書には、いくつかの「グループ」が他よりも多くのページを持っている独自のページXのYコンテキストがあります。通常、必要な処理を行うには、レポートを2回生成する必要があります。一度実行して、各グループの最後にあるページ数をキャプチャします。2番目のインスタンスは「FINAL」です。以下は、その方法の簡単なサンプルです。
クエリ結果を作成しますが、読み取り/書き込みカーソルに「OfPages」列(または「グループ」ごとのページ数を表したいもの)を追加します。
SELECT YourIDGroup, OtherColumns, 000 as OfPages;
FROM YourTable;
ORDER BY 1;
INTO CURSOR C_YourReportCursor readwrite
REPORT FORM TmpPages
REPORT FORM TmpPages preview (or to printer)
次に、プログラムで、現在のIDが何であれ、グループフッターのページ番号を「キャッチ」する機能を使用します。
FUNCTION CatchOfPages
LPARAMETERS CurrentID, LastPg
UPDATE DBF( "C_YourReportCursor" );
SET OfPages = LastPg;
WHERE YourIDGroup = CurrentID
*/ Return empty space so nothing is actually printed in the report
RETURN ""
ENDFUNC
さて、トリック。レポートでは、請求書のIDに基づいてデータグループを作成します。グループヘッダーでは、_pagenoと_pagetotalを使用してyのページxを実行する代わりに、_pagenoとカーソルの「ofPages」列を使用します...最初のパスは、上記の関数呼び出しを介して適切な値を更新します。レポートが最初に生成されるときに設定されますが、出力ウィンドウやプリンターはなく、バックグラウンドで実行するだけです。
ここで、グループFOOTERの下部に、テキストボックスコントロールを追加し(他のデータフィールド出力と同じように)、その式=適切なパラメーターを使用した関数呼び出しを設定します...例:
CatchOfPages( YourIDGroup, _PageNo )
グループの最終ページの実際のページ番号を使用して一時カーソル(または結果テーブル)を更新し、関連する請求書IDグループのすべてのレコードを更新するため、ページ1でもOfPages=2であることがわかります。 、3、4、または何でも。
レポートの最初のインスタンスが表示されないように非表示/マスクするには、次のような別のウィンドウで非表示にします。
DEFINE WINDOW WinTempReport FROM 0, 0 TO 1, 1
REPORT FORM YourReport IN WINDOW WinTempReport
RELEASE WINDOWS WinTempReport
次に、レポートを通常の出力に戻します。