1. Überblick Viele Konfigurationsverwaltungsprogramme bieten Berichtsfunktionen, die jedoch oft nicht den vielfältigen Berichtsanforderungen verschiedener Kunden gerecht werden, was zwangsläufig zu einer großen Vielfalt an Berichten führt. Die meisten Konfigurationsprogramme unterstützen mittlerweile das Einbetten von VB-Programmen, sodass Berichte erstellt und direkt in das Konfigurationsprogramm integriert werden können. Grundsätzlich gibt es zwei Möglichkeiten, Berichte in VB zu erstellen: die Verwendung des integrierten Datenbericht-Steuerelements oder die Verwendung von Drittanbietersoftware. Die Verwendung des Datenbericht-Steuerelements hat zwei Einschränkungen: Erstens sind die von Datenbericht selbst bereitgestellten Steuerelemente begrenzt und bieten nur eine geringe Funktionalität. Sie sind zudem zu stark an die Datenumgebung gebunden. Zweitens bietet Datenbericht keine komplexen Druckfunktionen wie Spaltenlayout. Die Verwendung von Drittanbietersoftware umfasst komplexe und vielfältige Funktionen, deren Verständnis und Beherrschung Zeit und Einarbeitung erfordern. Die integrierten Steuerelemente von VB ermöglichen außerdem die einfache Gestaltung komplexer Berichte und bieten Einfachheit und Übersichtlichkeit, die sowohl für einfache als auch für komplexe Berichte geeignet sind. Dies wird später noch genauer erläutert. 2. Gestaltung von Berichtsblättern Der Berichtsblatt-Container (Formular) ist im Wesentlichen ein leeres Blatt Papier. Er verfügt über die Funktion Form.PrintForm, mit der Autoren Berichte frei gestalten können. Alles, was auf dem Formular angezeigt wird, kann gedruckt werden, wodurch ein WYSIWYG-Bericht entsteht. Wie bekannt, lassen sich alle von VB bereitgestellten Steuerelemente wie Label, TextBox, Line, Image, MSHFGrid usw. auf einem Formular platzieren. Durch die programmgesteuerte Bearbeitung dieser Steuerelemente und das Befüllen des MSHFGrid mit Daten aus einer Datenbank kann ein Bericht mit Text und Grafiken erstellt werden. Festlegen des Berichtspapierformats (Form4): Fügen Sie dem Projekt ein Form4-Formular hinzu. Legen Sie die Formulargröße, Vordergrundfarbe, Hintergrundfarbe, Rahmenstil, Steuerelemente, Scrollleisten, Titel usw. auf das Druckpapierformat fest, sodass das Formular wie ein leeres Blatt Papier angezeigt wird. Das Programm sieht wie folgt aus: Private Sub Form4_Load() With Form4 .Appearance = 0 Flat .AutoRedraw = 1 True .BackColor = &H80000005 Hintergrundfarbe: weiß.BorderStyle = 0 None .Height = 15000 Legt die Seitengröße, d. h. das Papierformat, fest. .Width = 11760 15000, 11760 entspricht A3. .Top = 0 .Left = 0 .ClipControls = 0 False .FillStyle = 0 Solid .Caption = "paper" End With End Sub 3. Tabellenkopf-Design Tabellenkopfzeilen umfassen den Berichtskopf, die Fußzeile, den Seitentitel, das Datum, unregelmäßige Kopfzeilen usw. Verwenden Sie das Label-Steuerelement, um den Berichtstitel zu gestalten. Verwenden Sie das Line-Steuerelement, um die unregelmäßige Kopfzeile auf dem Papier zu zeichnen. Verwenden Sie Label, TextBox und Image, um den Kopfzeileninhalt zu füllen, und wählen Sie alle ähnlichen Steuerelemente innerhalb der Kopfzeile aus, um einheitliche Eigenschaften festzulegen. Kopfzeilen, Fußzeilen, Seitentitel und Datumsangaben können alle mit dem TextBox-Steuerelement gestaltet werden. Der Anzeigeinhalt des Steuerelements wird zur Laufzeit gesteuert, wodurch die Erstellung komplexer Tabellenkopfzeilen ermöglicht wird. 4. Tabellenkörper-Design: Fügen Sie das MSHFlexGrid-Steuerelement (Microsoft Hierarchical FlexGrid) zum Formular hinzu. Ziehen Sie die Rahmen mit der Maus, um sie den erforderlichen Bereich des Tabellenkörpers einnehmen zu lassen. Legen Sie die Eigenschaften fest: Rahmen, Vordergrundfarbe, Hintergrundfarbe, feste Zeilenanzahl, feste Spaltenanzahl, Bildlaufleiste und Zeilenbreite (falls die Höhe der einzelnen Zeilen unterschiedlich ist, kann sie im Programm festgelegt werden). Legen Sie die Breite jeder Spalte im Programm fest. Das MSHFlexGrid-Steuerelement zeigt Recordset-Daten in einem Rasterformat an. Text, Bilder oder beides können in jeder Zelle des MSHFlexGrid platziert werden. Die Eigenschaften „Zeile“ und „Spalte“ geben die aktuelle Zelle im MSHFlexGrid an. Sie können die Zelle im Code vor der Order platzieren oder die aktuelle Zelle zur Laufzeit mit der Maus oder den Pfeiltasten auswählen. Die Eigenschaft „Text“ verweist auf den Inhalt der aktuellen Zelle. Leider verfügt das MSHFlexGrid-Steuerelement über keine Druckfunktion; Berichte können nur über die Druckfunktion des Formular-Steuerelements gedruckt werden. Beginnen Sie mit MSHierarchicalFlexGridLib.MSHFlexGrid. MSHFlexGrid1 Height = 10305. Legen Sie die Höhe so fest, dass alle Zeilen auf einer Seite Platz finden. Links = 300 TabIndex = 0 Oben = 780 Breite = 4755 Legt die Breite so fest, dass alle Spalten auf einer Seite Platz finden. _ExtentX = 8387 _ExtentY = 18177 _Version = 393216 Zeilen = 26 Legt die Anzahl der Zeilen pro Seite fest. FixedCols = 0 BackColorFixed = 255 BackColorBkg = -2147483639 GridColor = 8454016 GridColorFixed = 8454143 GridColorUnpopulated = 8421631 GridLines = 1 GridLinesUnpopulated = 3 MergeCells = 4 BorderStyle = 1 Legt den Rahmen fest: mit Rahmen. Appearance = 0 GridLineWidthFixed = 1 BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851} Name = "SimSun" Size = 12 Legt die Schriftgröße fest, die Zeilenbreite wird automatisch angepasst. Charset = 134 Weight = 400 Unterstrichen = 0 Falsch Kursiv = 0 Falsch Durchgestrichen = 0 Falsch EndProperty _NumberOfBands = 1 _Band(0).Cols = 2 _Band(0).GridLineWidthBand= 1 End Der obige Code wird beim Festlegen der Eigenschaften des MSHFlexGrid-Steuerelements automatisch generiert und dient als Referenz. Sub MsgdWidth(ci As Integer, ccwidth() As Integer, Msgd As MSHFlexGrid) Legt die Breite der Spalte ci fest Anzahl der Spalten ccwidth() Array zur Speicherung der Spaltenbreite, Verwendung der Standardeinheit Dim i As Integer For i = 0 To ci - 1 msgrd.ColWidth(i) = ccwidth(i) Next i End Sub 5. Daten für MSHFlexGrid vorbereiten MSHFlexGrid kann an verschiedene Datenbereiche gebunden werden und Daten automatisch lesen. Beim Berichtsdruck verwenden wir keine Datenbindung; Stattdessen verwenden wir Programmcode, um das Füllen jeder Zelle im MSHFlexGrid-Steuerelement zu steuern. Wir verwenden ein Recordset eines ADO-Objekts, um die Datenquelle vorzubereiten, oder ähnliche Methoden, um einen Zeiger auf die Datenquelle zu erhalten. Sub opendata(t As String, restdata As adodb.Recordset) Dim constring, sqlstring As String Dim recon As adodb.Connection constring="Provider=SQLOLEDB.4;server=Datacenter;database=zbmis;uid=;pwd=" Datenquellen-Verbindungszeichenfolge sqlstring = "select stid,sbbatchid,stlong from tn_stinfo where ckroundnum=" & ""_ & Trim(t) & "" & "order by stid" Datenfilterbefehl, t ist die Datenfilterbedingung restdata.Open sqlstring, constring, adOpenKeyset, adLockReadOnly Öffnet den Datensatz und ruft das Datensatzset ab End Sub 6. Füllen Sie die Zellen von MSHFlexGrid. Füllen Sie mithilfe der geöffneten Datenquelle jede Zeile und Spalte von MSHFlexGrid. Wenn die letzte Seite nicht ausgefüllt ist, füllen Sie sie mit "". Wenn ein Farbdrucker verwendet wird, kann die Farbe jeder Zelle gesteuert werden, um farbige Berichte zu erstellen. Seitenzahl, Gesamtsumme, Seriennummer und weitere Daten können den Zellen der Tabelle hinzugefügt werden. Sub inputmsfh(ri As Integer, ci As Integer, restdata As adodb.Recordset, msgrd As MSHFlexGrid) ri und ci sind die Anzahl der Zeilen und Spalten im MSHFlexGrid. Dim rk, ck As Integer msgrd.Rows = ri + 1 Fügt eine Kopfzeile hinzu msgrd.Cols = ci For rk = 1 To ri With msgrd .Row = rk For ck = 0 To ci - 1 .Col = ck If restdata.EOF Or IsNull(restdata(ck)) Then .Text = "" Else .Text = Trim(restdata(ck)) End If Next ck If restdata.EOF = False Then restdata.MoveNext Steuert das Füllen jeder Datensatzzeile. Wenn der Datensatz das Dateiende erreicht oder der Spalteninhalt des Datensatzes null ist, wird er mit "" aufgefüllt. Ende Mit Nächste rk Ende Sub Füllen der Kopfzeile Sub msgrdname(ci As Integer, ccstring() As String, msgrd As MSHFlexGrid) ci: Anzahl der Spalten ccstring(): Array zur Aufnahme der Spaltenüberschriften Dim i As Integer With msgrd msgrd.Cols = ci msgrd.Rows = 1 .Row = 0 For i = 0 To ci - 1 .Col = i .Text = ccstring(i) Next i Ende Mit Ende Sub 7. Bezüglich Paginierung und Spalten: Ermitteln Sie zunächst die Anzahl der Spalten. Wenn keine Spalten verwendet werden, fügen Sie der Form4-Seite nur ein Steuerelement, MSHFlexGrid1, hinzu; wenn zwei Spalten verwendet werden, fügen Sie der Form4-Seite zwei parallele Steuerelemente, MSHFlexGrid1 und MSHFlexGrid2, hinzu; und so weiter. Das folgende Programm unterstützt Formate mit drei oder weniger Spalten. Der Abstand zwischen den Spalten kann direkt im Formular festgelegt werden. Anschließend wird die Anzahl der Berichtsseiten berechnet, um die Druckreihenfolge zu steuern. Private Sub Command1_Click() Dim restdata As New adodb.Recordset Dim t As String Datenfilterbedingungen Dim ccstring() As String Array von Spaltenüberschriften Dim ccwidth() As Integer Spaltenbreite Dim cc, rc As Integer Anzahl der Zeilen pro Seite rc, Anzahl der Seiten cc Dim prc, plc As Integer Anzahl der Seiten prc, Anzahl der Spalten plc Dim rctotal As Integer Gesamtzahl der Zeilen Dim prc1, I As Integer t = Form1.TextBox1.Text Abfragebedingungen aus Form1.TextBox1.Text eingeben Call opendata(t, restdata) Datenquelle öffnen und Recordset abrufen rctotal = restdata.RecordCount Gesamtzahl der Zeilen abrufen Print rctotal If rctotal > 0 Then cc = restdata.Fields.Count Gesamtzahl der Spalten abrufen ReDim ccstring(3) As String ReDim ccWidth(3) As String plc = 2 Zwei Spalten festlegen rc = 30, 30 Zeilen pro Seite ccwidth(0) = 600 Spaltenbreiten-Array initialisieren, Spaltenbreite entsprechend der Zeichenbreite der Spalte festlegen ccwidth(1) = 1600 ccwidth(2) = 1800 ccstring(0) = "Rohrnummer" Spaltenkopfzeilen-Array initialisieren ccstring(1) = "Ofenchargennummer" ccstring(2) = "Meterlänge" prc = Int(rctotal / (rc * plc)) Gesamtseitenzahl berechnen prc1 = rctotal Mod (rc * plc) Wenn prc1 > 0 Dann prc = prc + 1 restdata.MoveFirst Für i = 1 bis prc Form4.Text1 = rctotal Select Case plc Case 1 Keine Spalten Call MsgdWidth(Msgd1 As MSHFlexGrid1) Call msgrdname(cc, ccstring(), Form4.MSHFlexGrid1) Call inputmsfh(rc, cc, restdata, Form4.MSHFlexGrid1) Form4.MSHFlexGrid2.Visible = False Form4.MSHFlexGrid3.Visible = False Fall 2 Zwei Spalten Call MsgdWidth(Msgd1 As MSHFlexGrid1) Breite der ersten Spalte Call MsgdWidth(Msgd1 As MSHFlexGrid2) Breite der zweiten Spalte Call msgrdname(cc, ccstring(), Form4.MSHFlexGrid1) Überschrift der ersten Spalte Call msgrdname(cc, ccstring(), Form4.MSHFlexGrid2) Überschrift der zweiten Spalte Call inputmsfh(rc, cc, restdata, Form4.MSHFlexGrid1) Inhalt der ersten Spalte Call inputmsfh(rc, cc, restdata, Form4.MSHFlexGrid2) Inhalt der zweiten Spalte Form4.MSHFlexGrid3.Visible = False Fall 3 Drei Spalten Call MsgdWidth(Msgd1 As MSHFlexGrid1) Call MsgdWidth(Msgd1 As MSHFlexGrid2) Call MsgdWidth(Msgd1 As MSHFlexGrid3) Call msgrdname(cc, ccstring(), Form4.MSHFlexGrid1) Call msgrdname(cc, ccstring(), Form4.MSHFlexGrid2) Call msgrdname(cc, ccstring(), Form4.MSHFlexGrid3) Call inputmsfh(rc, cc, restdata, Form4.MSHFlexGrid1) Call inputmsfh(rc, cc, restdata, Form4.MSHFlexGrid2) Call inputmsfh(rc, cc, restdata, Form4.MSHFlexGrid3) End Select Form4.Show MsgBox ("Seite " & i & " drucken") Form4.PrintForm Ausgabe auf Systemstandarddrucker Next i Else MsgBox "Kein Datensatz gefunden" End If restdata.Close Close record set restdata = Nothing Release buffer End Sub 8. Fazit Alle Programme wurden erfolgreich mit Microsoft Visual Basic 6.0 debuggt. Viele Debugging-Befehle wurden aus Platzgründen entfernt. Benutzer können diese Befehle in der Praxis hinzufügen, um die Robustheit der Programme zu verbessern. Bitte kontaktieren Sie uns, falls Sie Fehler feststellen. Kontaktinformationen: Tel.: 0546-8850085 E-Mail: [email protected] Adresse: Shengli Steel Pipe Co., Ltd., Zhongbu Town, Zhangdian District, Zibo City, Shandong Province, 255082, China