PANTHEON™ manual

 Categories
 PANTHEON Ajutor - Bun venit
[Collapse]PANTHEON
 [Collapse]Ghiduri pentru PANTHEON
  [Collapse]Ghid pentru PANTHEON
   [Collapse]Setări
    [Expand]Subiecte
    [Expand]Articole
    [Expand]POS
    [Expand]Fabricare
    [Expand]Personal
     Calendar
    [Expand]Financiare
    [Expand]Vamă
    [Collapse]Program
     [Expand]Tipuri de Documente
     [Collapse]Rapoarte în PANTHEON
       Setări în Panoul de Administrare
      [Expand]Registrul Raporturilor
       Previzualizare imprimare
      [Expand]Designer de rapoarte
      [Expand]Crearea Raportelor
      [Expand]Grupuri și Agregate
      [Expand]Formatare și Evidențiere
       Rapoarte Încapsulate (Subrapoarte)
      [Expand]Specificațiilor printurilor în PANTHEON
      [Collapse]Script
        "Bună, lume!" Script
        Folosind variabile, câmpuri de bază de date și funcții agregate
        Folosind Obiecte de Raport în Script
        Evenimente
        Exemplu de utilizare a evenimentului "OnBeforePrint"
        Tipărirea unei sume de grup în antetul grupului
        Totalul acumulat
        "OnAfterData" Eveniment
        Obiecte de Serviciu
        Folosind obiectul "Motor"
       [Expand]FUNCȚII PANTHEON pentru FastReport
       [Expand]Exemple cu Tabele și Interogări
       Considerații privind designul raportului
      Texte Document
      Metode de livrare
     [Expand]Cărți de fidelitate
     [Expand]Panoul de Administrare
     [Expand]Componente Dashboard
      Rapoarte de tabloul de bord
      Analiză ad-hoc
     [Expand]ARES
      SQL editor
    [Expand]Documentație
    [Expand]Schimbă utilizatorul
   [Expand]Comenzi
   [Expand]Produse
   [Expand]Fabricare
   [Expand]POS
   [Expand]Serviciu
   [Expand]Financiare
   [Expand]Personal
   [Expand]Analitică
   [Expand]Desktop
   [Expand]Ajutor
   [Expand]Mesaje și Avertizări
   [Expand]Programe suplimentare
   [Expand]Produse vechi
  [Expand]Ghid pentru PANTHEON Retail
  [Expand]Ghid pentru PANTHEON Vet
  [Expand]Ghid pentru PANTHEON Fermă
 [Expand]Manuale de utilizare pentru PANTHEON
[Expand]PANTHEON Web
[Expand]PANTHEON Granule
[Expand]Site utilizator

Load Time: 781,2598 ms
print   |
Label

Tipărirea unei sume de grup în antetul grupului

Tipărirea unei sume de grup în antetul grupului

Această metodă este folosită destul de des și necesită utilizarea unui script deoarece valoarea unei sume de grup este cunoscută doar după ce toate înregistrările din grup au fost procesate. Pentru a afișa suma în antetul grupului (adică înainte ca grupul să fie ieșit în raport) se folosește următorul algoritm:

- activați opțiunea de raportare în două treceri (“Raport > Opțiuni...” element de meniu)

- în prima trecere, calculați sumele pentru fiecare grup și salvați-le într-un array

- în a doua trecere, extrageți valorile din array și afișați-le în anteturile grupului

 Să arătăm două metode pentru a efectua această sarcină. Mai întâi creați un clonă a raportului '147 - Stoc la data de către depozite și articole'​ care poate fi găsit în meniul programului 'Bunuri | Rapoarte de stoc | Stoc curent'.

Activați dublu-pas în setările raportului (“Raport > Opțiuni...” element de meniu). În editorul benzii “GroupHeader”, introduceți tbIzpisTrenZaloga."acWarehouse" câmp de date. Conectați banda de date la sursa de date “Group” și apoi aranjați câteva obiecte în următoarea manieră:

Pentru a afișa suma, folosim obiectele colorate în design. Le-am numit "Sum1" și "Sum2".

În obiectul numit "Sum1" rezultatul primei metode va fi afișat și în in obiectul numit "Sum2" rezultatul celei de-a doua metode va fi afișat.

Prima metodă.

Vom folosi clasa "TStringList" ca un array pentru stocarea sumelor - vom stoca valorile numerice ca șiruri. Primul element din StringList va corespunde sumei primului grup, și așa mai departe. O variabilă întreagă (pe care o vom incrementa după ce tipărim fiecare grup) este folosită pentru a calcula numărul de index al grupului.

Așadar, scriptul nostru va arăta astfel:

var

   List: TStringList;

   i: Integer;

procedure OnStartReport(Sender: TfrxComponent);

begin

  List := TStringList.Create;

end;

procedure OnStopReport(Sender: TfrxComponent);

begin

  List.Free;

end;

procedure Page1OnBeforePrint(Sender: TfrxComponent);

begin

  i := 0;

end;

procedure  hSkladOnBeforePrint(Sender: TfrxComponent);

begin

  if Engine.FinalPass then

    Sum1.Text := 'Sum: ' + List[i];

end;

procedure fSkladOnBeforePrint(Sender: TfrxComponent);

begin

  if not Engine.FinalPass then

    List.Add(FormatFloat('#,##0.00',SUM(<tbIzpisTrenZaloga."ZALVREDNOST">, Detail)));

  Inc(i);

end;

begin

 

end.

Numele procedurilor din script arată ce evenimente am folosit. Acestea sunt: “Raport.OnStartReport”, “Raport.OnStopReport”, "Page1.OnBeforePrint", "hSkladHeader1.OnBeforePrint" și "fSklad.OnBeforePrint". Primele două evenimente sunt apelate la începutul și la sfârșitul raportului, respectiv. Pentru a crea handleri pentru aceste două evenimente, selectați obiectul “Raport” din lista derulantă a inspectorului de obiecte și proprietățile sale vor apărea în inspectorul de obiecte. Apoi, comutați la tab-ul “Evenimente” al inspectorului de obiecte și creați handlerii.

De ce nu am creat variabila “List” în procedura principală a scriptului? Am creat-o în evenimentul "OnStartReport" deoarece variabilele create dinamic ar trebui distruse după ce raportul a fost finalizat. Este logic să creăm variabile dinamice în evenimentul “OnStartReport” și să le distrugem în evenimentul “OnStopReport”. În alte cazuri (când memoria nu trebuie eliberată la finalizarea scriptului) se poate folosi procedura principală a scriptului pentru inițializarea variabilelor.

Crearea și distrugerea variabilei “List” este simplă. Acum să vedem cum funcționează scriptul. La începutul paginii, contorul pentru grupul curent (variabila “i”) este resetat la zero și este incrementat după ce fiecare grup a fost tipărit (în evenimentul “GroupFooter1.OnBeforePrint”). Suma calculată este adăugată la “List” în acest eveniment înainte ca contorul să fie incrementat. Evenimentul “GroupHeader1.OnBeforePrint” nu face nimic în timpul primei treceri (dacă condiția “Engine.FinalPass”) dar în timpul celei de-a doua treceri (când “List” a fost umplut cu valori) suma corespunzătoare grupului curent este recuperată din “List” și este ieșită în obiectul "Sum1" pentru a afișa suma în antetul grupului. În raportul finalizat, apare astfel:

Acest algoritm este destul de simplu. Cu toate acestea, poate fi simplificat.

A doua metodă.

Vom folosi colecția de variabile de raport ca un array pentru stocarea sumelor de grup. Amintiți-vă că variabilele de raport sunt accesate prin funcțiile “Get” și “Set”. Utilizarea acestor funcții ne scutește de a crea și distruge explicit aceste variabile. Scriptul nostru va arăta astfel:

procedure  hSkladOnBeforePrint(Sender: TfrxComponent);

begin

  if Engine.FinalPass then

    Sum2.Text := 'Sum: ' + FormatFloat('#,##0.00', Get(<tbIzpisTrenZaloga."acWarehouse">));

end;

procedure GroupFooter1OnBeforePrint(Sender: TfrxComponent);

begin

  Set(<tbIzpisTrenZaloga."acWarehouse">, SUM(<tbIzpisTrenZaloga."ZALVREDNOST">, Detail));

end;

begin

 

end.

După cum puteți vedea, acest script este oarecum mai simplu. Codul din handlerul “fSklad.OnBeforePrint” setează valoarea unei variabile având un nume derivat din numărul clientului (sau orice alt identificator care identifică fără ambiguitate clientul ar putea fi folosit, de exemplu <tbIzpisTrenZaloga."acWarehouse">). Dacă nu există deja o variabilă cu acel nume, atunci scriptul o creează automat; altfel, dacă există, atunci valoarea sa este actualizată. În handlerul “hSklad.OnBeforePrint” valoarea variabilei corespunzătoare este recuperată.

Raportul finalizat apare astfel:

A doua metodă nu funcționează pentru grupări multiple și pentru afișarea mai multor sume de câmpuri în antetul grupului.

Un exemplu de mai multe sume de câmpuri în antetul grupului se află în raportul '32A - Plăți întârziate - După documente legate' care se află în meniul programului 'Finanțe | Rapoarte | Plăți întârziate'.



Rate this topic
Was this topic usefull?
Comments
Comment will also bo visible in forum!