我有一个按发票编号分组数据的报告(使用 VFP 8.0),我需要通过更改发票编号来重置总页数。
我没有这样做,因为 _pagetotal 将始终返回所有选定发票的总页数。
请指教。
我有一个按发票编号分组数据的报告(使用 VFP 8.0),我需要通过更改发票编号来重置总页数。
我没有这样做,因为 _pagetotal 将始终返回所有选定发票的总页数。
请指教。
根据描述,您想要的似乎是我之前的评论...每张发票都有其自己的第 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
然后对正常输出进行报告。