0

請求書番号でデータをグループ化したレポート(VFP 8.0を使用)があります。請求書番号を変更してページの合計をリセットする必要があります。

_pagetotalは常に、選択したすべての請求書の合計ページを返すため、これを行うことができませんでした。

ご意見をお聞かせください。

4

1 に答える 1

2

説明に基づいて、あなたが望むものは私の以前のコメントによるように見えます...各請求書には、いくつかの「グループ」が他よりも多くのページを持っている独自のページ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

次に、レポートを通常の出力に戻します。

于 2010-03-29T15:19:19.387 に答える