Créer un rapport avec gb.Report2 :
Ne pas oublier de cocher gb.report2 dans les composants du projet.
Dans les Sources du projet, cliquer droit, Nouveau puis Etat. Nommer le, par exemple RptDBase.
Ici, lecture d'une base de Données (supposée préexistante) et récupération des informations à imprimer.
Les déclarations de début de Class
1
2
| PUBLIC hResultat AS Result PUBLIC frm AS STRING = "##0.0##"
|
Alimentation des champs du Report par lecture de la base de données :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
| PUBLIC SUB RptLblNUMERO_Data(Index AS INTEGER) 'alimentation du premier champ, ici le Numéro
hResultat.MoveTo(Index) 'on passe d'enregistrement en enregistrement en bougeant l'index RptLblNUMERO.Data = hResultat!numero 'on alimente le champ avec les données correspondantes de l'enregistrement
END 'fini pour le premier champ, on passe au suivant et ainsi de suite jusqu'à alimenter tous les champs à imprimer
PUBLIC SUB RptLblMARQUE_Data(Index AS INTEGER) 'l'évènement _Data permet d'attribuer au champ considéré ce que l'on veut
hResultat.MoveTo(Index) 'on se déplace dans la base, d'enregistrement en enregistrement selon l'index RptLblMARQUE.Data = hResultat!marque 'l'expression NomDuChamp.Data permet de récupérer l'information à imprimer
END
PUBLIC SUB RptLblREFERENCE_Data(Index AS INTEGER)
hResultat.MoveTo(Index) RptLblREFERENCE.Data = hResultat!reference
END
PUBLIC SUB RptLblMMS_Data(Index AS INTEGER)
hResultat.MoveTo(Index) RptLblMMS.Data = Format(CStr(hResultat!mms), frm)
END
PUBLIC SUB RptLblSD_Data(Index AS INTEGER)
hResultat.MoveTo(Index) RptLblSD.Data = Format(CStr(hResultat!sd), frm)
END
PUBLIC SUB RptLblFR_Data(Index AS INTEGER)
hResultat.MoveTo(Index) RptLblFR.Data = Format(CStr(hResultat!fr), frm)
END
PUBLIC SUB RptLblQT_Data(Index AS INTEGER)
hResultat.MoveTo(Index) RptLblQT.Data = Format(CStr(hResultat!qt), frm)
END
PUBLIC SUB RptLblQM_Data(Index AS INTEGER)
hResultat.MoveTo(Index) RptLblQM.Data = Format(CStr(hResultat!qm), frm)
END
PUBLIC SUB RptLblRCC_Data(Index AS INTEGER)
hResultat.MoveTo(Index) RptLblRCC.Data = Format(CStr(hResultat!rcc), frm)
END
'Alimentation des différents champs calculés avec les éléments de la base de données 'Idem que pour les champs de la base de données sauf qu'ici on calcule le champ avec les données de la base.
PUBLIC SUB RptLblQTD_Data(Index AS INTEGER)
hResultat.MoveTo(Index) FMain.rMMS = hResultat!mms 'champ mms de la base FMain.rSD = hResultat!sd 'champ sd de la base FMain.rFR = hResultat!fr 'champ fr de la base FMain.rQT = hResultat!qt 'champ qt de la base FMain.rQM = hResultat!qm 'champ qm de la base FMain.rRCC = hResultat!rcc 'champ rcc de la base
FMain.cQTD = 2 * 3.1416 * FMain.rFR * FMain.rMMS / (1.18 * 344 * FMain.rSD) 'calcul du champ à imprimer
RptLblQTD.Data = Format(CStr(FMain.cQTD), frm) 'l'expression NomDuChamp.Data permet de récupérer l'information à imprimer selon le format désiré
END
PUBLIC SUB RptLblCHP_Data(Index AS INTEGER)
hResultat.MoveTo(Index) FMain.rMMS = hResultat!mms FMain.rSD = hResultat!sd FMain.rFR = hResultat!fr FMain.rQT = hResultat!qt FMain.rQM = hResultat!qm FMain.rRCC = hResultat!rcc
FMain.cQTD = 2 * 3.1416 * FMain.rFR * FMain.rMMS / (1.18 * 344 * FMain.rSD) FMain.cQE = FMain.rQM / ((FMain.rQM / FMain.rQT) - 1) FMain.cCHP = FMain.rFR / FMain.cQE
RptLblCHP.Data = Format(CStr(FMain.cCHP), frm)
END
PUBLIC SUB RptLblFA_Data(Index AS INTEGER)
hResultat.MoveTo(Index) FMain.rMMS = hResultat!mms FMain.rSD = hResultat!sd FMain.rFR = hResultat!fr FMain.rQT = hResultat!qt FMain.rQM = hResultat!qm FMain.rRCC = hResultat!rcc
FMain.cQTD = 2 * 3.1416 * FMain.rFR * FMain.rMMS / (1.18 * 344 * FMain.rSD) FMain.cQE = FMain.rQM / ((FMain.rQM / FMain.rQT) - 1) FMain.cCHP = FMain.rFR / FMain.cQE FMain.cBL = Sqr(2 * 3.1416 * FMain.rRCC * FMain.rFR * FMain.rMMS / FMain.cQE) FMain.cFA = FMain.cBL / FMain.rMMS
RptLblFA.Data = Format(CStr(FMain.cFA), frm)
END
PUBLIC SUB RptLblEFF_Data(Index AS INTEGER)
hResultat.MoveTo(Index) FMain.rMMS = hResultat!mms FMain.rSD = hResultat!sd FMain.rFR = hResultat!fr FMain.rQT = hResultat!qt FMain.rQM = hResultat!qm FMain.rRCC = hResultat!rcc
FMain.cQTD = 2 * 3.1416 * FMain.rFR * FMain.rMMS / (1.18 * 344 * FMain.rSD) FMain.cQE = FMain.rQM / ((FMain.rQM / FMain.rQT) - 1) FMain.cCHP = FMain.rFR / FMain.cQE FMain.cBL = Sqr(2 * 3.1416 * FMain.rRCC * FMain.rFR * FMain.rMMS / FMain.cQE) FMain.cFA = FMain.cBL / FMain.rMMS FMain.cMAS = FMain.rMMS / FMain.rSD ^ 2 FMain.cVAS = 1.18 * 344 ^ 2 / ((2 * 3.1416 * FMain.rFR) ^ 2 * FMain.cMAS) FMain.cRend = FMain.rFR ^ 3 * FMain.cVAS * 0.00000096 * 100 / FMain.cQE FMain.cEFF = 10 * Log10(FMain.cRend / 0.065) + 80
RptLblEFF.Data = Format(CStr(FMain.cEFF), frm)
END
|
Le Report lui-même :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
| PUBLIC SUB Report_Open()
IF db.Current.Opened = FALSE THEN 'on vérifie que la base est ouverte db.Current.Open ENDIF
hResultat = DB.Current.Exec(FMain.triBase) 'on lit la base en envoyant les enregistrements dans le Result
IF hResultat.Available = TRUE THEN RptHBox1.DataCount = hResultat.Count 'ici, on compte simplement le nombre d'enregistrements ENDIF
SELECT CASE FMain.flag 'en fonction de la valeur d'un drapeau boolean (ici Fmain.flag) CASE FALSE ReportLabel1.Text = ("Sélection de Haut-Parleur du " & datedujour() & (" Triés par : ") & FMain.leTri 'voir l'image de l'impression résultante, plus bas CASE TRUE ReportLabel1.Text = (" Impression du Fichier de Haut-Parleur en date du : ") & datedujour() & " " END SELECT
ReportLabel2.Text = "CopyRight Pil Valaquarus©2018 " hResultat.Movefirst 'tout est prêt, on demarre la lecture avec le premier enregistrement
END
PRIVATE SUB datedujour() AS STRING
RETURN Format(Now, "dddd dd mmmm yyyy @ hh:nn:ss")
END
|
Les propriétés dans l'IDE
Ici le Report nommé RptDBase :
Class=Report
Name=RptDBase
Count=1
Expand=false
Fixed=false
Font=10
ForceNewPage=false
Ignore=false
Margin=Left:1cm;Right:1cm
OnePiece=false
Orientation=Landscape
Padding=Top:15mm;Bottom:15mm;Left:15mm;Right:15mm
Paper=A4
Text=section 1
Translate=True
Visible=True
Le premier champ à imprimer : RptLblNUMERO
Class = ReportLabel
Name = RptLblNUMERO
Alignment = Center
Autoresize = False
Border = Top:1px #000000;Bottom:1px #000000;Left:1px #000000;Right:1px #000000
Brush = #3F3F3F
Expand = False
Fixed = False
Height = 4.75mm
Ignore = False
Margin = Top:1px;Bottom:1px;Left:1px;Right:1px
Public = False
Translate = True
UseField = False
Visible = True
Width = 15mm
Les autres champs sont identiques.
sauf le nom.
La fenêtre dans l'IDE, correspondante au code ci-dessus
La première ligne de rectangles correspond aux labels des champs à imprimer. Le premier, ici étant Numéro.
La seconde ligne de rectangles correspond aux champs de la base de données elle-même.
Cette ligne va être alimentée d'enregistrement en enregistrement par le Report qui va gérer, lui-même, le nombre d'enregistrements par page
puisque nous avons défini la longeur de page et son orientation, pas besoin d'autre chose.
Ce sont les lignes de code suivant les mentions qui permettent cette alimentation :
"Alimentation des champs du Report par lecture de la base de données"
et
"Alimentation des différents champs calculés avec les éléments de la base de données"
pour les quatre derniers champs.
L'image de l'impression en PDF
====================
Commandes utilisées :
DatabaseSqlite
DB
Result
Message
Select case
Return ====================
Navigation :
<-- Liens du Wiki : <--<-- Accueil du WIKI : <-- <-- États de sortie <--====================
Documentation :
====================