Gambas France BETA


Pas de compte ? Incription

GB.Report2 :

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 :



====================