我有一份报告(使用VFP 8.0),其中包含按发票编号进行的数据分组,我需要通过更改发票编号来重置总页数。
我没有这样做,因为_pagetotal将始终返回所有选定发票的总页数。
请指教。
答案 0 :(得分:2)
根据描述,根据我之前的评论显示您想要的内容......每张发票都有其自己的Y页面X,其中某些“组”的页面数量多于其他页面。要做你想做的事情通常需要生成TWICE报告。一旦运行并捕获每组末尾的页数。第二个例子是“最终”。以下是关于如何执行此操作的简单示例。
创建您的查询结果,但添加一个额外的列“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组中,在底部添加一个文本框控件(就像任何其他数据字段输出一样),并使用可重复参数设置其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
然后将报告正常输出。