Sumy w stopce strony na raporcie

To chyba klasyk, każdy kto robił raporty w Accessie kiedyś zmagał się z problemem podsumowań w ramach strony. Microsoft wypuszcza kolejne wersje Office’a, a funkcjonalność pod względem sum pozostaje niezmiennie ta sama. Jest klika sposobów na obejście tego problemu, ja zaprezentuje taki który mi wydaje się do osiągnięcia najmniejszym nakładem pracy.

Wykonanie

Tworzymy raport dokładnie tak jak to robimy zawsze:

Projekt Raportu

W naszym przykładzie chcemy podsumować kolumnę identyfikator w ramach stron. Kolumna jest obrazowana poprzez pole tekstowe [Identyfikator]. Dodatkowo w sekcji stopki strony tworzymy pole tekstowe o nazwie [psIdentyfikator]. Źródło tej kontrolki pozostawiamy puste.

Nawet jeżeli nie zamierzamy używać programowo jakiejś kontrolki, warto nadać jej własną nazwę, pracę w to włożoną docenimy podczas rozbudowy. Szczególnie ważne jest to podczas pisania kodu VBA. To oczywiste, że bardziej zrozumiale jest:
Me.txtUser = “Programista Access”
od
Me.Pole1 = “programista Access”

Do dzieła:

Właściwie to już wszystko od strony projektowej, teraz wchodzimy w moduł raportu i na samej górze deklarujemy zmienną lngPsIdentyfikator w której będziemy liczyli sumę strony:

Dim lngPsIdentyfikator as Long

Zanim omówię dalszy kod, należy chwilę zatrzymać się nad tematem przetwarzania raportu przez samego Access-a, w naszym wypadku wykorzystamy zdarzenia Print nagłówka/stopki strony i szczegółów. Dla wybranych przez nas zdarzeń kolejność jest logiczna, czyli:

  1. Nagłówek Strony
  2. Szczegóły (wywoływane dla każdego rekordu)
  3. Stopka Strony
Sekcja: Nagłówek Strony
W tym miejscu musimy wyzerować sumę strony, skoro jesteśmy na początku(górze) więc wiadomo, że suma jest równa 0.

Private Sub SekcjaNagłówkaStrony_Print(Cancel As Integer, PrintCount As Integer)
    lngPsIdentyfikator = 0
End Sub
Sekcja: Szczegóły
Przy wejściu do nowego rekordu, musimy dodać wartość sumowanego pola. Ważne jest, aby to zrobić tylko jeden raz, stąd instrukcja warunkowa, która zapobiegnie zsumowaniu klika razy tej samej wartości.

Private Sub Szczegóły_Print(Cancel As Integer, PrintCount As Integer)
    If PrintCount = 1 Then
        lngPsIdentyfikator = lngPsIdentyfikator + Me.Identyfikator
    End If
End Sub
Sekcja: Stopka Strony
W tym momencie jesteśmy już na końcu(dole) strony, więc nie pozostaje nic innego jak pokazać to co policzyliśmy:

Private Sub SekcjaStopkiStrony_Print(Cancel As Integer, PrintCount As Integer)
    Me.psIdentyfikator = lngPsIdentyfikator
End Sub

Na zakończenie link do przykładowej bazy danych w formacie Access 2010, jak to mówią “jeden obraz wart, więcej niż 1000 słów

Leave a Comment

NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

WordPress SEO fine-tune by Meta SEO Pack from Poradnik Webmastera
Skip to toolbar