0

我有一个按发票编号分组数据的报告(使用 VFP 8.0),我需要通过更改发票编号来重置总页数。

我没有这样做,因为 _pagetotal 将始终返回所有选定发票的总页数。

请指教。

4

1 回答 1

2

根据描述,您想要的似乎是我之前的评论...每张发票都有其自己的第 X 页,共 Y 上下文,其中某些“组”的页面比其他组多。要执行您想要的操作,通常需要生成两次报告。一次运行并捕获每组末尾的页数。第二个实例是“最终”。以下是有关如何执行此操作的简单示例。

创建您的查询结果,但将附加列“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 和光标的“ofPages”列,而不是使用 _pageno 和 _pagetotal 执行 y 的第 x 页...因为第一遍将通过上面的函数调用更新其正确的值,并且第一次生成报告时设置,但没有输出窗口或打印机,只在后台运行。

现在,在组 FOOTER 的底部,添加一个文本框控件(就像任何其他数据字段输出一样),并设置其 Expression = 具有可敬参数的函数调用...例如:

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 回答