Search  
Tuesday, May 22, 2012 ..:: Forum ::.. Register  Login
 Forum Minimize
Pentru a putea posta mesaje trebuie să vă înregistraţi.
Notă: Mesajele cu conţinut jignitor sau ilegal (inclusiv cereri de soft piratat) nu sunt acceptate şi vor fi şterse imediat .

Pentru a primi raspunsuri rapide si corecte, scrieti in mesaj ce intentionati sa faceti, ce mesaj de eroare primiti, in ce context si in urma caror actiuni. De asemenea, mentionati versiunea de FoxPro in care lucrati!
Dacă nu specificați versiunea, se consideră VFP 9.0 SP2.

SearchForum Home
  Visual FoxPro  Rapoarte si generatoare de rapoarte  Cum aflu ultima...
 Cum aflu ultima inregistrare de pe pagina unui raport ?
 
 10/16/2009 11:51:18 AM
User is offlinePetre Popescu
253 posts
4th


Cum aflu ultima inregistrare de pe pagina unui raport ?
 (N/A)
Cum aflu ultima inregistrare de pe pagina unui raport ?

Am avut de facut un raport in care aveam un tabel mai complicat.
Cand o sectiune a tabelului era intrerupta de sfarsitul paginii si continua pe pagina urmatoare tabelul neterminat arata urat. De aceea am avut nevoie sa stiu care este ultima inregistrare de pe pagina pentru a trage niste linii sub ea si sa fac astfel tabelul sa arate ok.

Am rezolvat asta astfel:
- rulez raportul de 2 ori, prima data invisibil
- in "Page Footer OnEntry()": _VFP.SetVar("pLastOnPage",pLastOnPage +"," + alltrim(cursor.PK))
- la linii "Print when...": OCCURS(alltrim(cursor.PK),pLastOnPage)>0
 
La prima rulare variabila "pLastOnPage" este populate cu id-urile inregistrarilor care sunt pe ultima pozitie in pagina.
La a 2-a rulare sunt afisate si liniile adaugate la tabel.
Dupa vreo 2 ore de incercari renuntasem, dar mi-a venit ideea asta cu rularea raportului de 2 ori ca atunci cand faceam asta ca sa aflu numarul de pagini din raport.

Alta varianta ar fi ?

 10/16/2009 12:50:32 PM
User is offlineDaniel Buduru
2331 posts
1st




Re: Cum aflu ultima inregistrare de pe pagina unui raport ?
 (N/A)
Daca am inteles bine problema:
- in raport exista un grup
- in group header se deseneaza capul de tabel
- in group footer se inchide tabelul
- daca grupul se intinde pe mai multe pagini, se doreste tiparirea unei linii in page footer.

In acest caz, ar fi o solutie destul de simpla:

In Group Header, OnEntry:
   _vfp.SetVar('crtgrup',cursor.grup_id)
In Group Footer, OnExit
   _vfp.SetVar('crtgrup',null)
Linii PrintWhen
   cursor.grup_id=crtgrup





Daniel Buduru
 10/16/2009 3:19:49 PM
User is offlinePetre Popescu
253 posts
4th


Re: Cum aflu ultima inregistrare de pe pagina unui raport ?
 (Romania)
Initial asa am facut, dar era tiparita decalat fata de tabel (ea fiind aliniata la pagina si nu la inregistrarea din tabel).
Apoi am adaugat aceasta linie in Banda Detail de unde este tiparita conditionat doar daca este ultima inregistrare de pe pagina.

Formatul tabelului este de forma:
----------------------
| P1       | Tip1     |
|            |-----------|
|            |Tip2      |
|            |-----------|
|            |Tip3      |
-----------------------
| P2       | Tipx     |
|            |-----------|
|            |Tipy      |
|            |-----------|
|            |Tipz      |
-----------------------

----------------------
| P1       | Tip1     |
|            |-----------|
|            |Tip2      |
|---------------------| Sfarsit de pagina - linie tiparita in Detail Band cu conditia "Print When..." explicata initial.

Pe pagina urmatoare:
----------------------
| P1       | Tip3     |
-----------------------
| P2       | Tipx     |
|            |-----------|
|            |Tipy      |
|            |-----------|
|            |Tipz      |
-----------------------
Liniile orizontale scurte sunt tiparite in DetailBand, iar cele lungi in Group Footer.
Cand tabelul este intrerupt de sfarsitul paginii, linia orizontala lunga este desenata de Banda Detail.

 10/16/2009 4:19:32 PM
User is offlineDaniel Buduru
2331 posts
1st




Re: Cum aflu ultima inregistrare de pe pagina unui raport ?
 (N/A)
Pentru linia in detail, nu vad alta solutie decat doua rulari.
Daca e VFP 9, iar raportul  contine _pagetotal  intr-un camp sau intr-o expresie, raportul este rulat intern o data pentr a determina _pagetotal si inca o data pentru vizualizare/imprimare.
Se poate pune asta in report.dataEnvironment.BeforeOpenTables:

IF VARTYPE(gnrun)<>"N" OR gnrun>0
    PUBLIC pLastOnPage, gnRun
    pLastOnPage=''
    gnrun=0
ELSE
    gnrun=gnrun+1
ENDIF

in report.datavironment.AfterCloseTables:

if VARTYPE(gnrun)="N" AND gnrun>0
    RELEASE pLastOnPage, gnrun
ENDIF

Page header OnExit ramane la fel, iar in linii PrintWhen:

alltrim(cursor.PK)$pLastOnPage) and _pageno<_pagetotal
Aceasta referire la _pagetotal este suficienta pentru a forta dubla rulare a raportului.


Daniel Buduru
 10/16/2009 5:06:41 PM
User is offlinePetre Popescu
253 posts
4th


Re: Cum aflu ultima inregistrare de pe pagina unui raport ?
 (N/A)
Multumesc.
Cele 2 idei: folosirea evenimentele din dataEnvironment si folosirea lui "_pagetotal" sunt excelente.
  Visual FoxPro  Rapoarte si generatoare de rapoarte  Cum aflu ultima...

Search  Forum Home         

 Google Ads Minimize

    

Copyright 2002-2010 Profox   Terms Of Use  Privacy Statement