PANTHEON™ manual

 Kategori
 PANTHEON Ndihmë - Mirësevini
[Collapse]PANTHEON
 [Collapse]Udhëzues për PANTHEON
  [Collapse]Udhëzues për PANTHEON
   [Collapse]Cilësime
    [Expand]Subjektet
    [Expand]Artikuj
    [Expand]POS
    [Expand]Prodhimi
    [Expand]Stafi
     Kalendar
    [Expand]Financat
    [Expand]Dogana
    [Collapse]Programi
     [Expand]Llojet e Dokumenteve
     [Collapse]Raportet në PANTHEON
       Parametrat në Panelin e Administratës
      [Expand]Regjistri i Raporteve
       Paraqitja e Shtypit
      [Expand]Projektuesi i Raporteve
      [Expand]Krijimi i Raporteve
      [Expand]Grupet dhe Agregatet
      [Expand]Formatimi dhe Theksimi
       Raportet e Ngritura (Raportet Nën)
      [Expand]Specifikat e Printimeve në PANTHEON
      [Collapse]Skrypt
        "Përshëndetje, Botë!" Skripti
        Përdorimi i Variablave, Fushave të Bazës së të Dhënave, dhe Funksioneve Agreguese
        Përdorimi i Objekteve të Raportit në Skript
        Ngjarjet
        Shembulli i Përdorimit të Ngjarjes "OnBeforePrint"
        Printimi i një Shume Grupi në Krye të Grupit
        Shuma e Vazhdueshme
        "OnAfterData" Ngjarja
        Objektet e Shërbimit
        Përdorimi i Objektit "Motor"
       [Expand]PANTHEON Funksionet për FastReport
       [Expand]Shembuj me Tabela dhe Kërkesa
       Konsideratat për Dizajnimin e Raportit
      Tekstet e Dokumenteve
      Metodat e Dërgesës
     [Expand]Kartat e Besnikërisë
     [Expand]Paneli i Administratës
     [Expand]Komponentët e Panelit
      Raportet e Panelit
      Analiza ad-hoc
     [Expand]ARES
      SQL urejevalnik
    [Expand]Dokumentacioni
    [Expand]Ndrysho Përdoruesin
   [Expand]Porositë
   [Expand]Mallrat
   [Expand]Prodhimi
   [Expand]POS
   [Expand]Shërbimi
   [Expand]Financat
   [Expand]Stafi
   [Expand]Analitika
   [Expand]Desktop
   [Expand]Ndihmë
   [Expand]Mesazhe dhe Paralajmërime
   [Expand]Programet shtesë
   [Expand]Produkte të vjetra
  [Expand]Udhëzues për PANTHEON Retail
  [Expand]Udhëzues për PANTHEON Vet
  [Expand]Udhëzues për PANTHEON Bujqësi
 [Expand]Manualet e Përdoruesve për PANTHEON
[Expand]PANTHEON Web
[Expand]PANTHEON Granulat
[Expand]Faqja e Përdoruesit

Load Time: 859,4113 ms
print   |
Label

Printimi i një Shume Grupi në Krye të Grupit

Printimi i një Shume Grupi në Krye të Grupit

Kjo metodë përdoret shpesh dhe kërkon përdorimin e një skripti sepse vlera e një shume grupi dihet vetëm pasi të jenë përpunuar të gjitha rekordet në grup. Për të shfaqur shumën në krye të grupit (dmth. para se grupi të dalë në raport) përdoret algoritmi i mëposhtëm:

- aktivizoni opsionin e raportit me dy kalime (“Raporti > Opsionet...” artikulli i menusë)

- në kalimin e parë, llogaritni shumat për secilin grup dhe ruajini ato në një array

- në kalimin e dytë, nxirrni vlerat nga array dhe shfaqini ato në kryet e grupeve

 Le të tregojmë dy metoda për kryerjen e këtij detyre. Së pari krijoni një klon të raportit '147 - Stoku si Datë nga Depo dhe Artikuj'​ që mund të gjendet në menunë e programit 'Mallit | Raportet e Stokut | Stoku Aktual'.

Aktivizoni kalimin e dyfishtë në cilësimet e raportit (“Raporti > Opsionet...” artikulli i menusë). Në redaktorin e bandës “KryeGrupi”, futni tbIzpisTrenZaloga."acWarehouse" fushën e të dhënave. Lidheni bandën e të dhënave me burimin e të dhënave “Grupi” dhe pastaj rregulloni disa objekte në mënyrën e mëposhtme:

Për të shfaqur shumën ne përdorim objektet me ngjyra në dizajn. Ne i quajtëm "Sum1" dhe "Sum2".

Në objektin e quajtur "Sum1" do të shfaqet rezultati i metodës së parë dhe nën objektin e quajtur "Sum2" do të shfaqet rezultati i metodës së dytë.

Metoda e parë.

Ne do të përdorim klasën "TStringList" si një array për ruajtjen e shumave - ne do të ruajmë vlerat numerike si vargje. Artikulli i parë në StringList do të korrespondonte me shumën e grupit të parë, dhe kështu me radhë. Një variabël e plotë (e cila do të rritet pas printimit të secilit grup) përdoret për të llogaritur numrin e indeksit të grupit.

Pra, skripti ynë do të duket kështu:

var

   List: TStringList;

   i: Integer;

procedura OnStartReport(Sender: TfrxComponent);

fillim

  List := TStringList.Create;

fund;

procedura OnStopReport(Sender: TfrxComponent);

fillim

  List.Free;

fund;

procedura Page1OnBeforePrint(Sender: TfrxComponent);

fillim

  i := 0;

fund;

procedura  hSkladOnBeforePrint(Sender: TfrxComponent);

fillim

  nëse Engine.FinalPass atëherë

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

fund;

procedura fSkladOnBeforePrint(Sender: TfrxComponent);

fillim

  nëse jo Engine.FinalPass atëherë

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

  Inc(i);

fund;

fillim

 

fund.

Emrat e procedurave në skript tregojnë cilat ngjarje kemi përdorur. Ato janë: “Raporti.OnStartReport”, “Raporti.OnStopReport”, "Page1.OnBeforePrint", "hSkladHeader1.OnBeforePrint" dhe "fSklad.OnBeforePrint". Dy ngjarjet e para thirren në fillim dhe në fund të raportit përkatësisht. Për të krijuar menaxherë për këto dy ngjarje zgjidhni objektin “Raporti” në listën e rënies së inspektorit të objekteve dhe pronat e tij do të shfaqen në inspektorin e objekteve. Pastaj kaloni në tabin “Ngjarjet” të inspektorit të objekteve dhe krijoni menaxherët.

Pse nuk e krijuam variablën “List” në procedurën kryesore të skriptit? Ne e krijuam atë në ngjarjen "OnStartReport" sepse variablat e krijuara dinamikisht duhet të shkatërrohen pasi raporti të ketë përfunduar. Është logjike të krijoni variabla dinamike në ngjarjen “OnStartReport” dhe t'i shkatërroni ato në ngjarjen “OnStopReport”. Në raste të tjera (kur memoria nuk ka nevojë të lirohet pas përfundimit të skriptit) mund të përdoret procedura kryesore e skriptit për inicializimin e variablave.

Krijimi dhe shkatërrimi i variablës “List” është i thjeshtë. Tani le të shohim se si funksionon skripti. Në fillim të faqes, numri i numëruesit për grupin aktual (variabla “i”) resetizohet në zero dhe rritet pas çdo grupi që është printuar (në ngjarjen “GroupFooter1.OnBeforePrint”). Shuma e llogaritur shtohet në “List” në këtë ngjarje para se numëruesi të rritet. Ngjarja “GroupHeader1.OnBeforePrint” nuk bën asgjë gjatë kalimit të parë (nëse kushti “Engine.FinalPass”) por gjatë kalimit të dytë (kur “List” është mbushur me vlera) shuma përkatëse për grupin aktual merret nga “List” dhe del në objektin "Sum1" për të shfaqur shumën në krye të grupit. Në raportin e përfunduar, ajo shfaqet si më poshtë:

Ky algoritëm është mjaft i thjeshtë. Megjithatë, ai mund të thjeshtohet.

Metoda e dytë.

Ne do të përdorim koleksionin e variablave të raportit si një array për ruajtjen e shumave të grupeve. Mos harroni se variablat e raportit aksesohen përmes funksioneve “Get” dhe “Set”. Përdorimi i këtyre funksioneve gjithashtu na kursen nga nevoja për të krijuar dhe shkatërruar këto variabla në mënyrë eksplicite. Skripti ynë do të duket si më poshtë:

procedura  hSkladOnBeforePrint(Sender: TfrxComponent);

fillim

  nëse Engine.FinalPass atëherë

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

fund;

procedura GroupFooter1OnBeforePrint(Sender: TfrxComponent);

fillim

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

fund;

fillim

 

fund.

Sikur e shihni, ky skript është disi më i thjeshtë. Kodi në menaxherin “fSklad.OnBeforePrint” vendos vlerën e një variabli me një emër të nxjerrë nga numri i klientit (ose çdo identifikues tjetër që identifikon qartë klientin mund të përdoret, për shembull <tbIzpisTrenZaloga."acWarehouse">). Nëse nuk ka një variabël me atë emër që ekziston tashmë, atëherë skripti automatikisht e krijon atë; përndryshe, nëse ekziston, atëherë vlera e saj përditësohet. Në menaxherin “hSklad.OnBeforePrint” vlera e variablës përkatëse merret.

Raporti i përfunduar shfaqet si më poshtë:

Metoda e dytë nuk funksionon për grupimin e shumëfishtë dhe për shfaqjen e shumave të shumta të fushave në krye të grupit.

Një shembull i disa shumave të fushave në krye të grupit është në raportin '32A - Pagesat e Vonuara - Nga Dokumentet e Lidhura' që është në menunë e programit 'Financat | Raportet | Pagesat e Vonuara'.



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