ATOUTFOX
COMMUNAUTÉ FRANCOPHONE DES PROFESSIONNELS FOXPRO
Visual FoxPro : le développement durable

Comment faire "page x de x" à l'intérieur d'un groupe du rapport   



L'auteur

Mike Gagnon
Canada Canada
Membre Simple
# 0000000025
enregistré le 14/10/2004

Gagnon Mike
Pointe Cla H9R 3K8
de la société Carver Technologies Inc.
Fiche personnelle


Note des membres
20/20
1 vote


Contributions > 20 - Trucs et Astuces

Comment faire "page x de x" à l'intérieur d'un groupe du rapport
# 0000000405
ajouté le 20/02/2007 22:12:05 et modifié le 20/02/2007
consulté 9122 fois
Niveau initié

Version(s) Foxpro :
VFP 9.0

Description
Il y a un bug dans VFP dans la plupart des versions. On peut faire 'page x de x ' dans un rapport Foxpro sans groupe en utilisant les variables _pageno et _pagetotal. Mais lorsque l'on fait des groupes (Par example grouper par client - qui nous donnerait un facture par client), la variable _pagetotal est fausse, soit qu'elle donne 1 de 1 (et 2 de 1), ou la variable _pagetotal donne le nombre total de page (et non le nombre de page dans le groupe).
Code source :
&&Solution

1. Dans la bande du groupe, selectionner 'group starts on new page number 1'
2. Mettre deux textbox dans le rapport (pour les numéros de page)
a) Le premier contient:
 "Page: "+alltrim(str(_pageno))+" of"
b) Le deuxieme contient un appel à un fonction:
   alltrim(str(UpdGroupPg(sHeader.code)))  && Sheader.code est le champs sur lequel le groupe est basée.
3. Créer un fonction externe comme ceci.
Function UpdGroupPg(lcGrpTest)
  If !Used("C_GrpPageCnt")
    Create Cursor C_GrpPageCnt ( rptGrp C(20), pgCnt i )
    Index On rptGrp Tag C_GrpPage
  Endif
  Seek lcGrpTest In C_GrpPageCnt
  If Not Found([C_GrpPageCnt])
    Insert Into C_GrpPageCnt (rptGrp) Values (lcGrpTest)
  Endif
  Replace pgCnt With Max( C_GrpPageCnt.pgCnt, _Pageno ) In C_GrpPageCnt
  Return C_GrpPageCnt.pgCnt
Endfunc

4. Il faut passer le rapport deux fois malheureusement (la premiere passe pour remplir le curseur)

Report Form (lcReportForm) To File TestTxt2.TXT Noconsole Nodialog
Erase TestTxt2.TXT
If llPrintReport
  Report Form (lcReportForm) Noconsole To Printer
Else
  Report Form (lcReportForm) Noconsole Preview
Endif




Commentaires
Aucun commentaire enregistré ...

www.atoutfox.org - Site de la Communauté Francophone des Professionnels FoxPro - v3.4.0 - © 2004-2024.
Cette page est générée par un composant COM+ développé en Visual FoxPro 9.0-SP2-HF3