[ Pobierz całość w formacie PDF ]
.Po utworzeniu obiektu Raport funkcja przejdzie do umieszczenia wsekcjach raportu formantów oraz związaniu ich ze zródłem danych.Ponieważ Access numeruje formanty w kolejności ichtworzenia, sprawowanie kontroli nad tym, czy formanty następują po sobie w tej samej kolejności co etykiety, wydaje siębyć ułatwione.Aby to osiągnąć, funkcja tworzy etykiety i wiąże formanty w osobnych pętlach.Stopka raportu tworzonajest przy użyciu procedury RunCommand obiektu DoCmd, a następnie jej właściwość Widoczny (Visible) zmieniana jest na181Rozdział 10.f& Tworzenie raportówTrue.Osobna pętla tworzy i rozmieszcza formanty zawierające funkcję Suma().Ustawiana jest wysokość sekcji Szczegóły(Detail), przydzielane jest zródło rekordów, by na końcu otworzyć raport.Wydruk 10.5.Tworzenie raportu przy użyciu koduPublic Function PrepareCrosstabReport(datFrom As Date, datTo As Date) As BooleanOn Error GoTo PrepareCrosstabReport_ErrDim db As DatabaseDim DocName As StringDim rs As RecordsetDim rpt As ReportDim i As IntegerDim x As IntegerSet db = CurrentDb()'Wyzeruj kwerendę, by używać nowych danych i otwórz jąMakeCrosstabQuery datFrom, datToSet rs = db.OpenRecordset("Ilość dostarczona według regionów")' Utwórz obiekt RaportSet rpt = CreateReport("", "")rpt.Caption = " Ilość dostarczona według regionów Between " & _datFrom & " and " & datTo' Teraz musisz utworzyć formantyDim ctlNew As Control' Do wypełnienia jest dziewięć formantów, więc.If rs.Fields.Count - 1 > 9 Thenx = 9Elsex = rs.Fields.Count - 1End If' Utwórz, rozmieść, zwiąż i sformatuj formantyFor i = 0 To xSet ctlNew = CreateReportControl(rpt.Name, acTextBox, acDetail)With ctlNew.Height = 270.Width = 1080.Top = 0.Left = (60 +.Width) * irpt("text" & i).ControlSource = rs.Fields(i).NameEnd WithNextFor i = 0 To xSet ctlNew = CreateReportControl(rpt.Name, acLabel, acPageHeader)With ctlNew.Height = 270.Width = 1080.Top = 0.Left = (60 +.Width) * i' Indeksy przyznawane są bez twojego udziału, więc' kontroluj je!rpt("label" & i + x + 1).Caption = rs.Fields(i).NameEnd WithNextDoCmd.RunCommand acCmdReportHdrFtrrpt.Section(acFooter).Visible = TrueFor i = 0 To xSet ctlNew = CreateReportControl(rpt.Name, acTextBox, acFooter)With ctlNew.Height = 270.Width = 1080.Top = 0.Left = (60 +.Width) * i' Indeksy przyznawane są bez twojego udziału, więc' kontroluj je!If i = 0 Thenrpt("text" & i + (2 * x) + 2).ControlSource = "='Suma'"Elserpt("text" & i + (2 * x) + 2).ControlSource = _"=sum([" & rs.Fields(i).Name & "])"End IfEnd WithNextrpt.Section("detail").Height = 0rpt.RecordSource = " Ilość dostarczona według regionów"DoCmd.OpenReport rpt.Name, acViewPreview'Normalnie, to zostałoby wydrukowanePrepareCrosstabReport = TruePrepareCrosstabReport_Exit:Set rpt = Nothing182Część III f& Interfejs użytkownikars.CloseExit FunctionPrepareCrosstabReport_Err:PrepareCrosstabReport = FalseMsgBox Error$Resume PrepareCrosstabReport_ExitEnd FunctionMamy teraz raport oparty na kwerendzie krzyżowej, który jest dynamicznie tworzony za każdym razem, gdy tegozażądamy.Ponieważ raport korzysta z wybranego zródła rekordów, nie jest nigdy problemem zmiana nagłówka kolumnyczy ilości regionów, których raport dotyczy (w ramach jego wewnętrznych ograniczeń).Tworzenie sekcjiSekcje również mogą być tworzone programowo, jednakże nie wszystkie sekcje tworzone są w ten sam sposób.Abyutworzyć nagłówki i stopki grup, Access posiada funkcję CreateGroupLevel.Ponieważ pięć standardowych sekcji(Nagłówek/Stopka raportu, Nagłówek/Stopka strony i Szczegóły) nie jest częścią schematu grupowania raportu, tworzone sąw inny sposób.Funkcja CreategroupLevel posiada cztery argumenty:u StrReport ciąg identyfikujący raport, który chcesz modyfikować.u StrExpr wyrażenie poziomu grupy, zazwyczaj nazwa pola, rodzaj obiektu lub data.u FHeader/FFooter wartości logiczne, służące do tworzenia dodatkowego nagłówka lub stopki sekcji.WartośćTrue sekcja jest tworzona, False nie.createGroupLevel "_Kategorie i produkty" , "newGroupsection" , 1, 1lubintSection=createGroupLevel ("_Kategorie i produkty" ,"newGroupSection" , 1, 1)Aby utworzyć nagłówki i stopki raportu lub strony, skorzystaj z metody RunCommand obiektu DoCmd:DoCmd.RunCommand acCmdReportHdrFtrWskazówkiWiększość aplikacji posiada co najmniej jeden raport, który przysparza wielu problemów.Aby umożliwić Ci radzeniesobie przynajmniej z częścią z nich, damy teraz kilka wskazówek związanych z raportami.Tworzenie grupowania dwutygodniowegoJeśli grupujesz dane na dany dzień i chcesz uzyskać grupowanie dwutygodniowe (na przykład podczas tworzenia listypłac), w oknie dialogowym Sortowanie i grupowanie ustaw właściwość Grupuj według na Interwał, a właściwość Przedziałgrupowania na 2.Ukryj powtarzające się daneMoże zdarzyć się, że w prostym raporcie tabelarycznym informacja powtarza się w kolejnych wierszach.Aby tego uniknąć,ustaw właściwość Ukryj Duplikaty danego formantu na Tak.Umożliwi Ci to uzyskanie wyglądu przypominającegogrupowanie, jednak bez użycia sekcji oraz drukowanie danych określających grupę i pierwszej linii szczegółów w tymsamym wierszu.Alfabetyczne grupowanie danychW raporcie wyświetlającym listę klientów według pola NazwiskoKlienta możesz, wykonując poniższe kroki,alfabetycznie podzielić klientów na grupy:183Rozdział 10.f& Tworzenie raportów56.W oknie dialogowym Sortowanie i grupowanie ustaw właściwość Grupuj według na Pierwsze znaki.57.Właściwość Przedział grupowania ustaw na 1 ( rysunek 10.16).Jest to ważne, gdyż stąd właśnie Access wie, iluznaków ma użyć, dzieląc klientów na grupy.W takim przypadku, będzie zwracał uwagę na pierwszą literęnazwiska klienta.Rysunek 10.16.Ustawieniagrupowania58
[ Pobierz całość w formacie PDF ]