Общее количество страниц в отчете VFP 8.0 можно сбросить путем группировки данных? - PullRequest
0 голосов
/ 29 марта 2010

У меня есть отчет (с использованием VFP 8.0) с группировкой данных по номеру счета-фактуры, мне нужно сбросить общее количество страниц путем изменения номера счета-фактуры.

Мне не удалось этого сделать, поскольку _pagetotal всегда будет возвращать общее количество страниц всех выбранных счетов.

Пожалуйста, совет.

1 Ответ

2 голосов
/ 29 марта 2010

Исходя из описания, кажется, что вы хотите, чтобы это было в моем предыдущем комментарии ... Каждый счет имеет свой СОБСТВЕННЫЙ контекст страницы 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

ПОТОМ создайте отчет для нормального вывода.

...