Исходя из описания, кажется, что вы хотите, чтобы это было в моем предыдущем комментарии ... Каждый счет имеет свой СОБСТВЕННЫЙ контекст страницы 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)
Далее, в вашей программе есть функция, чтобы «поймать» номер страницы в нижнем колонтитуле группы для любого текущего идентификатора.
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
Теперь уловка. В вашем отчете укажите свою группу данных на основе идентификатора счета. В заголовке группы вместо выполнения страницы x of y с использованием _pageno и _pagetotal вы будете использовать _pageno и столбец «ofPages» курсора ... Поскольку первый проход получит правильное значение, обновленное с помощью вызова функции выше и устанавливается при первом создании отчета, но без окна вывода или принтера, просто запустите в фоновом режиме.
Теперь, в группе FOOTER, внизу, добавьте элемент управления textbox (как и любой другой вывод поля данных) и установите его Expression = вызов функции с соответствующими параметрами ... например:
CatchOfPages( YourIDGroup, _PageNo )
Он выполнит обновление временного курсора (или вашей таблицы результатов) с тем, какой у него будет фактический номер страницы для этой последней страницы в группе, и обновит все записи для связанной группы идентификаторов счетов, чтобы даже страница 1 знала свое OfPages = 2, 3, 4 или что-то еще.
Чтобы скрыть / замаскировать первый экземпляр отчета от просмотра, спрячьте его в ДРУГОМ окне, например
DEFINE WINDOW WinTempReport FROM 0, 0 TO 1, 1
REPORT FORM YourReport IN WINDOW WinTempReport
RELEASE WINDOWS WinTempReport
ПОТОМ создайте отчет для нормального вывода.