Računari i Galaksija

Access – Dinamičko formatiranje izveštaja

Mogućnost sortiranja i grupisanja podataka čini Access‑ove izveštaje veoma korisnim. U poslovnom okruženju zadatak programera je da isti skup podataka prilagodi različitim korisnicima i njihovim potrebama – neki žele da vide izveštaj prodaje po regionima, neki po proizvodima, dok treći iste podatke posmatraju po zaposlenima. U ovom slučaju se čini da je najlakše da se napravi onoliko izveštaja koliko zahteva postoji. No, kako te izveštaje kasnije održavati i prilagođavati – ako se nešto promeni u strukturi baze, programer mora da promeni sve izveštaje.

Slika 1. Upit kojim se grupišu podaci različitih tabela
Slika 1. Upit kojim se grupišu podaci različitih tabela

Takva loša praksa se može pronaći u najvećem broju baza. Programerima je lakše da brzo urade posao tako što kopiraju postojeći objekat – upit, formu ili izveštaj, načine sitne izmene i sačuvaju objekat pod novim nazivom. U opisanom slučaju govorimo o tri izveštaja, a ako se zahteva različito sortiranje, onda o šest različitih izveštaja. Bolje reći: govorimo o jednom izveštaju gde se podaci prikazuju na šest različita načina.

U narednom primeru pokazaćemo kako se dinamički može formatirati jedan izveštaj tako da prikazuje podatke na različite načine i to upotrebom baze primera Northwind.

Slika 2. Jedan od mogućih načina prikaza podataka
Slika 2. Jedan od mogućih načina prikaza podataka

Formirajte upit kao na prvoj slici. On grupiše podatke iz šest tabela, koje se odnose na podatke prodaje po proizvodima, računima i zaposlenima. Od ovog upita se ili kreira drugi upit kojim se grupišu i sabiraju podaci, ili se on koristi kao izvor podataka za SQL strukturu koja će se programski formirati. U prvom slučaju, upit je prikazan na slici 2. Kada koristite ovakav pristup dinamičkog formatiranja izveštaja, napravićete onoliko upita koliko različitih načina prikazivanja želite da dobijete. Konkretni upit sumira podatke prodaje po nazivu proizvoda i zemlji isporuke.

Primetite da se koristi alias, pseudonaziv polja, Grupa:. Niz karaktera iza koje sledi dvotačka je naziv polja upita koji se prikazuje bez obzira na stvarni naziv polja. Alias naziv se može koristiti kod prikazivanja polja tabele pod drugim nazivom, ali se mora koristiti kod kalkulacija. Drugi upit možete, ali i ne morate sačuvati – ono što vam je potrebno je njegov SQL iskaz kojeg ćete kasnije programski generisati i modifikovati, a najlakši i najbrži način da dođete do ispravnog SQL iskaza je upravo kreiranjem upita. Pređite u njegov SQL pogled i iskopirajte iskaz (recimo) u Notepad.

Formirajte i izveštaj baziran na drugom upitu. Možete koristiti čarobnjaka za to – u tom slučaju na koraku za izbor grupisanja podataka iskoristite polje upita Grupa. Ako sami formirate izveštaj, na oknu Sorting and Grouping dodajte prvo polje Grupa (Group Header: Yes) i zatim ProductName. Izveštaj na ovom koraku možete prilagoditi govornom području (slika 3).

Slika 3. Formatiran izveštaj o prodaji
Slika 3. Formatiran izveštaj o prodaji

Do sada je postupak manje‑više potpuno isti kao i kod formiranje statičkog izveštaja. Sada ćete napraviti malu formu koje će korisniku ponuditi različite načine formatiranja izveštaja, a koja će se učitavati zajedno sa izveštajem. Predloženi oblik vidite takođe na slici 3, u uglu. Upotrebljena kontrola ListBox ima svojstvo RowSourceType postavljeno na Value List, gde je upisano (zajedno s navodnicima): „Zemlja“; „Kategorija“; „Zaposleni“; „{bez grupisanja}“. Isključite prikazivanje svih nepotrebnih kontrola – selektora zapisa, tastera za navigaciju, oba klizača, razdeonih linija… Postavite i osobine PopUp na Yes (objekat je uvek prikazan iznad ostalih objekata) i Border na Thin (veličina objekta ne može da se menja).

Trik za dinamičko formatiranje izveštaja se sastoji u tome da se pomoćnim objektom (formom) odabira način grupisanja izveštaja, ona zatim formira SQL iskaz na kojeg se izveštaj bazira, to smesti u javnu promenljivu i zatim zatvori i ponovo otvori isti izveštaj. Kako izveštaj grupiše podatke na polju pod alias nazivom Grupa, u SQL iskazu možete koristiti različita polja tabele za grupisanje podataka bez potrebe da menjate sam izveštaj.

Kontroli otvaranja i zatvaranje forme morate pridružiti i nešto logike – recimo, da se ona otvori po prvom otvaranju izveštaja, ali da se ne zatvori kada korisnik odabere drugi način prikaza podataka i, konačno, da se ona takođe zatvori po konačnom zatvaranju izveštaja.

Na slici 4 je dat program koji pokreće dinamički formatiran izveštaj. Prva sekcija je program izveštaja, druga sekcija je program forme. Ovaj savet može poslužiti kao osnova za dalje unapređenje programiranog izveštaja – neke od ideja su izmena naziva izveštaja po odabiru grupe, izmena načina sortiranja, dodavanje/uklanjanje grupa, čuvanje postavki prikaza tako da se po ponovnom učitavanju prikaže prethodno grupisanje/sortiranje…

Slika 4: VBA program za dinamičko formatiranje izveštaja

‑‑‑1‑‑‑

Public blnCloseForm As Boolean

Private Sub Report_Close()

If blnCloseForm Then

DoCmd.Close acForm,_

“frmSortOptions”

End If

End Sub

Private Sub Report_Open_

(Cancel As Integer)

If CurrentProject._

AllForms(“frmSortOptions”)._

IsLoaded = False Then

DoCmd.OpenForm _

“frmSortOptions”, acNormal,_

OpenArgs:=Me.Name

Else

Me.RecordSource = _

Forms(“frmSortOptions”)._

strNoviRecordSource

End If

blnCloseForm = True

End Sub

‑‑‑2‑‑‑

Public strNoviRecordSource _As String

Private Sub cmdPrikazi_Click()

Dim strSQL As String

If Len(Nz(lstGroup,””))>0 Then

strSQL=”SELECT ProductName,_

Sum(Quantity) AS Kol, ” & _

“Sum([Quantity]*[UnitPrice])_

AS Iznos, ” & Me.lstGroup &_

” AS Grupa ” & _

“FROM qrySales GROUP BY _

qrySales.ProductName, ” & _

Me.lstGroup

Else

strSQL = vbNullString

End If

If Len(strSQL) > 0 And _

Len(Me.OpenArgs) > 0 Then

Reports(Me.OpenArgs)._

blnCloseForm = False

strNoviRecordSource = strSQL

Application.Echo False

DoCmd.Close acReport,_

Me.OpenArgs

DoCmd.OpenReport _

Me.OpenArgs, acViewPreview

Application.Echo True

End If

End Sub

Slika 1. Upit kojim se grupišu podaci različitih tabela

Slika 2. Jedan od mogućih načina prikaza podataka

Slika 3. Formatiran izveštaj o prodaji

Ladislav Struharik

(Objavljeno u časopisu PC#198)

Facebook komentari:
SBB

Tagovi: