Gambas France BETA


Pas de compte ? Incription

incrément de ligne d'impression

Ce sujet est résolu.

12
AuteurMessages
valaquarus#1 Posté le 8/3/2018 à 08:26:52
-- Unus Ex Altera --Bonjour à tous,
je m'attaque à l'impression sous Gambas grâce au report2. Je voudrais imprimer certains champs de ma base de données, ligne par ligne. je ne réussis qu'à imprimer la dernière ligne (Row) de ma base. Voici le bout de code :
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
Row = 0
FMain.triBase = "SELECT * FROM hautparleur ORDER BY numero;"
FMain.Resultat = DB.Current.Exec(FMain.triBase)

IF FMain.Resultat.Available = TRUE THEN

FOR EACH FMain.Resultat
'***************champs de la base*************************
FMain.rNumero = FMain.Resultat!numero
FMain.rMarque = FMain.Resultat!marque
FMain.rReference = FMain.Resultat!reference
FMain.rMMS = FMain.Resultat!mms
FMain.rSD = FMain.Resultat!sd
FMain.rFR = FMain.Resultat!fr
FMain.rQT = FMain.Resultat!qt
FMain.rQM = FMain.Resultat!qm
FMain.rRCC = FMain.Resultat!rcc
'************champs calculés****************************
FMain.cQTD = 2 * 3.1416 * FMain.rFR * FMain.rMMS / (1.18 * 344 * FMain.rSD)
FMain.cCHP = FMain.rFR / FMain.cQE
FMain.cFA = FMain.cBL / FMain.rMMS
FMain.cEFF = 10 * Log10(FMain.cRend / 0.065) + 80
'*******impression ici****************
RptLblNUMERO.Text = CStr(FMain.rNumero)
RptLblMARQUE.Text = CStr(FMain.rMarque)
RptLblREFERENCE.Text = CStr(FMain.rReference)
RptLblMMS.Text = Format(CStr(FMain.rMMS), FMain.frmt1)
RptLblSD.Text = Format(CStr(FMain.rSD), FMain.frmt1)
RptLblFR.Text = Format(CStr(FMain.rFR), FMain.frmt1)
RptLblQT.Text = Format(CStr(FMain.rQT), FMain.frmt1)
RptLblQM.Text = Format(CStr(FMain.rQM), FMain.frmt)
RptLblRCC.Text = Format(CStr(FMain.rRCC), FMain.frmt1)
RptLblQTD.Text = Format(CStr(FMain.cQTD), FMain.frmt1)
RptLblCHP.Text = Format(CStr(FMain.cCHP), FMain.frmt1)
RptLblFA.Text = Format(CStr(FMain.cFA), FMain.frmt1)
RptLblEFF.Text = Format(CStr(FMain.cEFF), FMain.frmt1)
Row = Row + 1

NEXT

FMain.Resultat.MoveNext

ENDIF

Comment dire par code au report d'alimenter une ligne puis une autre jusqu'à remplir la page puis alimenter une autre page jusqu'à la consommation de toutes les données de la base.
Philippe, merci de votre aide.

J'ai bien rajouté ceci dans la boucle:
1
ReportHBox1.DataCount = FMain.Resultat.Count

j'ai maintenant le nombre de page mais les lignes contiennent uniquement le dernier enregistrement répété plusieurs fois j'en déduit que ma boucle n'est pas bonne mais je suis coincé dedans.
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.3
Patrick#2 Posté le 8/3/2018 à 17:06:30
Bonjour,
Effectivement dans le ReportHBox1 il faut y mettre les reportlabel puis affecter les valeurs avec les événements :
1
2
3
4
PUBLIC SUB RptLblNUMERO_data(index AS INTEGER)
FMain.Resultat.MoveTo(Index)
RptLblNUMERO.data=CStr(FMain.Resultat!numero)
END
valaquarus#3 Posté le 8/3/2018 à 21:01:39
-- Unus Ex Altera --Merci Patrick pour cette réponse.
Effectivement dans le ReportHBox1 j'ai placé les reportlabel puis affecter les valeurs à chaque label par son événement mais comment se déclenchent-ils ces événements.Si je les appelle directement dans la boucle je n'ai que le dernier enregistrement qui est répété autant de fois que de lignes dans la base de données si je ne les appelle pas directement c'est le libellé "de construction" qui s'affiche autant de fois que de lignes dans la base. Voici le code modifié :

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
FMain.triBase = "SELECT * FROM hautparleur ORDER BY numero;"
FMain.Resultat = DB.Current.Exec(FMain.triBase)

IF FMain.Resultat.Available = TRUE THEN

FOR EACH FMain.Resultat

Row = FMain.Resultat.Index
'***************champs de la base*************************
FMain.rNumero = FMain.Resultat!numero
FMain.rMarque = FMain.Resultat!marque
FMain.rReference = FMain.Resultat!reference
FMain.rMMS = FMain.Resultat!mms
FMain.rSD = FMain.Resultat!sd
FMain.rFR = FMain.Resultat!fr
FMain.rQT = FMain.Resultat!qt
FMain.rQM = FMain.Resultat!qm
FMain.rRCC = FMain.Resultat!rcc
'************champs calculés****************************
FMain.cQTD = 2 * 3.1416 * FMain.rFR * FMain.rMMS / (1.18 * 344 * FMain.rSD)
FMain.cFA = FMain.cBL / FMain.rMMS
FMain.cEFF = 10 * Log10(FMain.cRend / 0.065) + 80
'************Appel des événements *******************************
RptLblNUMERO_Data(Row)
RptLblMARQUE_Data(Row)
RptLblREFERENCE_Data(Row)
RptLblMMS_Data(Row)
RptLblSD_Data(Row)
RptLblFR_Data(Row)
RptLblQT_Data(Row)
RptLblQM_Data(Row)
RptLblRCC_Data(Row)
RptLblQTD_Data(Row)
RptLblCHP_Data(Row)
RptLblFA_Data(Row)
RptLblEFF_Data(Row)
'***************************************************************
NEXT
FMain.Resultat.MoveNext
ENDIF
ReportHBox1.DataCount = FMain.Resultat.Count
ReportLabel1.Text = (" Impression du Fichier de Haut-Parleur en date du : ") & datedujour() & " "
ReportDataBase.Preview


et un des champs, les autres sont semblables :
1
2
3
4
5
PUBLIC SUB RptLblNUMERO_Data(Index AS INTEGER)

RptLblNUMERO.Data = CStr(FMain.rNumero)

END


Bonsoir
Philippe
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.3
Patrick#4 Posté le 9/3/2018 à 08:12:28
Bonjour,
C'est l'affectation d'une valeur au datacount qui déclenche la boucle d'événement, comme dans un gridview. Il faut donc vraiment travailler avec les résultats de ta requête comme indiqué dans ma première réponse.
valaquarus#5 Posté le 9/3/2018 à 10:55:35
-- Unus Ex Altera --Bonjour Patrick,
chez moi le déclenchement des événements ne se fait pas par l'affectation d'une valeur au datacount, je l'ai vérifié en mettant :
1
RprtHBox1.DataCount = Row
avec Row = FMain.Resultat.Index et en contrôlant l'ouverture de l'événement par un message.info cela ne rentre dans l'événement qui si je l'appelle directement par
1
RptLblNUMERO_Data(Row)
.Sinon cela ne rentre pas dans l'événement.
Effectivement avec un gridview cela fonctionne ainsi, c'est ce que j'utilise et j'avais fait l'analogie pour l'impression mais je n'obtiens toujours que mon dernier enregistrement répété autant de fois qu'il y a d'enregistrements dans ma base de données (cela signifie que déjà l'affectation du datacount est bonne puisque je le fait ligne par ligne ).
Je ne peux pas insérer d'images sinon je t'aurais montré la belle impression de 40 pages (en PDF on s'en fout, on ne gâche pas de papier) bien calibrée avec les titres sur chaque page, le numéro de page en bas à droite..., non, tout marche bien avec le report2, c'est tellement facile sauf que je n'arrive pas à rentrer ligne par ligne mes données. Je sais que je fais une erreur mais je suis coincé dedans.
Philippe
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.3
Patrick#6 Posté le 9/3/2018 à 13:08:38
1
2
3
4
5
6
7
8
9
10
FMain.Resultat = DB.Current.Exec(FMain.triBase)
IF FMain.Resultat.Available = TRUE THEN
ReportHBox1.DataCount = FMain.Resultat.Count 'Fixe le nb de ligne à éditer = nb d'enregistrements
ENDIF

PUBLIC SUB RptLblNUMERO_data(index AS INTEGER)
FMain.Resultat.MoveTo(Index) 'se positionne sur l'enregistrement index
RptLblNUMERO.data = CStr(FMain.Resultat!numero) ' affecte la valeur de l'enregistrement correspondant pas d'une variable
' a priori il s'agit d'une fonction récursive les calculs ne sont donc peut être pas conseillés ici ... Gambix pourrait le confirmer ?
END
valaquarus#7 Posté le 9/3/2018 à 13:49:18
-- Unus Ex Altera --Merci Patrick mais j'insiste parce que j'ai tout fait comme tu me l'as dit et avec ce que j'ai trouvé sur des sites espagnol et hollandais (je ne parle ni l'un ni l'autre, pas facile) pour en être certain j'ai placé un avant data comme ceci :
1
2
3
PUBLIC SUB Report_BeforeData()
Message.Info("Row= " & CStr(FMain.Resultat.Index))
END
et cela ne fait rien donc les événements ne sont pas déclenchés par contre mon nombre de lignes correspond bien au nombres d'enregistrements de la base
1
2
3
IF FMain.Resultat.Available = TRUE THEN
ReportHBox1.DataCount = FMain.Resultat.Count
FOR EACH FMain.Resultat ....

Et j'ai bien au niveau événement ceci :
1
2
3
4
PUBLIC SUB RptLblNUMERO_data(index AS INTEGER)
FMain.Resultat.MoveTo(Index)
RptLblNUMERO.data = CStr(FMain.Resultat!numero)
END

Il doit y avoir un réglage dans l'IDE que je n'ai pas fait. Ce n'est pas logique, la seule chose que j'ai changé c'est gb.qt4 au lieu de gb.gui et gb.gui.qt.
Philippe
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.3
Patrick#8 Posté le 9/3/2018 à 13:58:45
Enlève la boucle for each et surtout les appels des événements.
valaquarus#9 Posté le 9/3/2018 à 14:01:49
-- Unus Ex Altera --En générant l'exécutable avec l'IDE j'ai une erreur à l'exécution qui dit ceci (je ne peux toujours pas insérer d'image) :
This application has raised an unexpected error and must abort
Jusque là j'avais compris, la suite :
[2] Cannot load class'_RepExp':Cannot load parent class : cannot load class 'Expression';Unable to load parent class file. ReportLabel._GetSizeHints.41
That's all folks!
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.3
valaquarus#10 Posté le 9/3/2018 à 14:03:13
-- Unus Ex Altera --j'ai enlevé l'appel aux événements et je teste l’enlèvement de la boucle.
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.3
valaquarus#11 Posté le 9/3/2018 à 19:03:00
-- Unus Ex Altera --Voici une nouvelle mouture (qui ne fonctionne toujours pas) qui correspond à ce que Patrick m'a demandé et ce que j'ai trouvé sur internet :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
PUBLIC SUB Report_Open()
initDB()
ReportHBox1.DataCount = FMain.Resultat.Count
ReportLabel1.Text = (" Impression du Fichier de Haut-Parleur en date du : ") & datedujour() & " "
db.Current.Close
END

PUBLIC SUB initDB()
IF db.Current.Opened = FALSE THEN
db.Current.Open
ENDIF
FMain.triBase = "SELECT * FROM hautparleur ORDER BY numero;"
FMain.Resultat = DB.Current.Exec(FMain.triBase)
END

PUBLIC SUB RptLblNUMERO_Data(Index AS INTEGER) ' tous les autres événements sont similaires
FMain.Resultat.MoveTo(Index)
RptLblNUMERO.Text = CStr(FMain.Resultat!numero)
RptLblNUMERO.Data = RptLblNUMERO.Text
END

PUBLIC SUB Report_BeforeData()
Message.Info("Row= " & CStr(FMain.Resultat.Index))' histoire de voir si les événements se déclenchent
END

Les événements ne se déclenchent pas, j'ai bien le nombres de lignes correspondant aux nombre d'enregistrements de la base grâce à la déclaration du datacount mais avec le titre "de construction" dans chaque champ.
Voilà où j'en suis rendu pour l'instant.
Manque t il quelque chose dans le report?
Philippe

PS : J'ai toujours une erreur d’exécution avec le fichier généré par l'IDE au moment où j'appelle le report.preview
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.3
Patrick#12 Posté le 10/3/2018 à 08:09:08
Bonjour,
Ce n'est pas :
1
2
RptLblNUMERO.Text = CStr(FMain.Resultat!numero)
RptLblNUMERO.Data = RptLblNUMERO.Text

mais :
1
RptLblNUMERO.Data = CStr(FMain.Resultat!numero)
valaquarus#13 Posté le 10/3/2018 à 10:46:34
-- Unus Ex Altera --Bonjour Patrick et merci de répondre.
Je sais mais j'ai déjà essayer ce que tu proposes dans ton dernier message et cela ne marche pas quand même.
Sur un exemple de Fabien Bodar j'ai vu un datagrid.report que je n'ai pas dans les propositions de l'IDE. Est ce une possibilité qui n'existe plus?
philippe

PS : c'est comme la commande Last.Data chez moi il n'en veut pas il m'envoie un message d'erreur : "Type incorrect objet attendu à la place soit de string" ou soit de integer en fonction du type de champ.
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.3
Patrick#14 Posté le 10/3/2018 à 11:32:31
Voila un exemple, j’espère que ça ne sera pas trop long sur le forum. C'est ce sur quoi je travail actuellement, l'édition fonctionne au moins en previous.
Je ne l'ai pas encore poussé sur github parce que ce n'est pas finit (il manque une page et les chiffres ne sont pas tous aussi justes qu'ils le devraient)
mais si ça doit te dépanner je peux le faire.
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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
' Gambas class file

PRIVATE $resreg AS Result
PRIVATE $snumed AS String[]
PRIVATE $tabl AS Collection

PUBLIC SUB _new(tabl AS Collection, nbdec AS STRING, arrondi AS STRING, mois AS STRING, anne AS STRING, edit AS BOOLEAN)

DIM ressoc, respar, res AS Result
DIM i AS INTEGER
DIM dte1, dte2 AS DATE

$tabl = tabl
$snumed = NEW String[]
FOR EACH Caleditcmat.ddcl IN tabl
$snumed.Add(tabl.Key)
NEXT
ReportHlig.DataCount = $snumed.Count

datej.Text = Format(Now, "dd/mm/yyyy")
pg1.Text = "Page : " & ME.PageCount
ressoc = Utils.db.Exec("SELECT * FROM Fiches_Societes")
rs.Text = ressoc!type_sc & " " & ressoc!int_sc

respar = Utils.db.Exec("SELECT * FROM Fiches_Parametres")
IF respar!arrete THEN
dtedeb.Text = respar!arrete
dte1 = Date(Right(respar!arrete, 4), Val(Left(respar!arrete, 2)), 1)
dte1 = DateAdd(dte1, gb.Month, 1)
dte2 = DateAdd(dte1, gb.Month, 11)
Reportnom.Text = ressoc!type_sc & " " & ressoc!int_sc & " " & "Exercice du : " & Format(Month(dte1), "00") & "/" & Format(Year(dte1), "0000") & " au : " & Format(Month(dte2), "00") & "/" & Format(Year(dte2), "0000")
ENDIF
ni.Text = ressoc!ident
lieu.Text = ressoc!burdis_sc
adr1.Text = ressoc!adr1_sc
adr2.Text = ressoc!adr2_sc
cpvil.Text = ressoc!cp_sc & " " & ressoc!burdis_sc
dte1 = Date(anne, Val(mois), 1)
dte2 = Date(anne, Val(mois), Utils.lastday(dte1))
res = Utils.db.Exec("SELECT vignette FROM Fiches_ligregie WHERE dtmouv BETWEEN &1 AND &2 AND cloture=&3 AND vignette IS NOT NULL ORDER BY vignette", Format(dte1, "yyyymmdd"), Format(dte2, "yyyymmdd"), edit)
IF res.Available THEN
res.MoveFirst
vignette.Text = res!vignette & " à "
res.MoveLast
vignette.Text &= res!vignette
ENDIF
dtedecl.Text = Format(dte1, "mmmm yyyy")
periode.Text = mois & "/" & anne




Application.Busy = 0


END

PUBLIC SUB lib_Data(Index AS INTEGER)

DIM res AS Result

res = Utils.db.Exec("SELECT * FROM Fiches_regie WHERE code=&1", $snumed[Index])
lib.Font = font["-4"]
lib.Data = res!nom

END

'vae debut de péridode
PUBLIC SUB vaehldp_Data(Index AS INTEGER)

Caleditcmat.ddcl = $tabl[$snumed[Index]]
vaehldp.Font = font["-4"]
vaehldp.Data = convers(Caleditcmat.ddcl.totvol.vae.vdp, "h")

END

PUBLIC SUB vaeldp_Data(Index AS INTEGER)

Caleditcmat.ddcl = $tabl[$snumed[Index]]
vaeldp.Font = font["-4"]
vaeldp.Data = convers(Caleditcmat.ddcl.totvol.vae.vdp, "l")

END

PUBLIC SUB vaecldp_Data(Index AS INTEGER)

Caleditcmat.ddcl = $tabl[$snumed[Index]]
vaeldp.Font = font["-4"]
vaeldp.Data = convers(Caleditcmat.ddcl.totvol.vae.vdp, "c")

END

'vae entrée
PUBLIC SUB vaehle_Data(Index AS INTEGER)

Caleditcmat.ddcl = $tabl[$snumed[Index]]
vaehle.Font = font["-4"]
vaehle.Data = convers(Caleditcmat.ddcl.totvol.vae.ven, "h")

END

PUBLIC SUB vaele_Data(Index AS INTEGER)

Caleditcmat.ddcl = $tabl[$snumed[Index]]
vaele.Font = font["-4"]
vaele.Data = convers(Caleditcmat.ddcl.totvol.vae.ven, "l")

END

PUBLIC SUB vaecle_Data(Index AS INTEGER)

Caleditcmat.ddcl = $tabl[$snumed[Index]]
vaecle.Font = font["-4"]
vaecle.Data = convers(Caleditcmat.ddcl.totvol.vae.ven, "c")

END

'vae sortie
PUBLIC SUB vaehls_Data(Index AS INTEGER)

Caleditcmat.ddcl = $tabl[$snumed[Index]]
vaehls.Font = font["-4"]
vaehls.Data = convers(Caleditcmat.ddcl.totvol.vae.vso, "h")

END

PUBLIC SUB vaels_Data(Index AS INTEGER)

Caleditcmat.ddcl = $tabl[$snumed[Index]]
vaels.Font = font["-4"]
vaels.Data = convers(Caleditcmat.ddcl.totvol.vae.vso, "l")

END

PUBLIC SUB vaecls_Data(Index AS INTEGER)

Caleditcmat.ddcl = $tabl[$snumed[Index]]
vaecls.Font = font["-4"]
vaecls.Data = convers(Caleditcmat.ddcl.totvol.vae.vso, "c")

END

'vae fin de période
PUBLIC SUB vaehldfp_Data(Index AS INTEGER)

Caleditcmat.ddcl = $tabl[$snumed[Index]]
vaehlfp.Font = font["-4"]
vaehlfp.Data = convers(Caleditcmat.ddcl.totvol.vae.vfp, "h")

END

PUBLIC SUB vaelfp_Data(Index AS INTEGER)

Caleditcmat.ddcl = $tabl[$snumed[Index]]
vaelfp.Font = font["-4"]
vaelfp.Data = convers(Caleditcmat.ddcl.totvol.vae.vfp, "l")

END

PUBLIC SUB vaeclfp_Data(Index AS INTEGER)

Caleditcmat.ddcl = $tabl[$snumed[Index]]
vaeclfp.Font = font["-4"]
vaeclfp.Data = convers(Caleditcmat.ddcl.totvol.vae.vfp, "c")

END

'vap debut période
PUBLIC SUB vaphldp_Data(Index AS INTEGER)

Caleditcmat.ddcl = $tabl[$snumed[Index]]
vaphldp.Font = font["-4"]
vaphldp.Data = convers(Caleditcmat.ddcl.totvol.vap.vdp, "h")

END

PUBLIC SUB vapldp_Data(Index AS INTEGER)

Caleditcmat.ddcl = $tabl[$snumed[Index]]
vapldp.Font = font["-4"]
vapldp.Data = convers(Caleditcmat.ddcl.totvol.vap.vdp, "l")

END

PUBLIC SUB vapcldp_Data(Index AS INTEGER)

Caleditcmat.ddcl = $tabl[$snumed[Index]]
vapldp.Font = font["-4"]
vapldp.Data = convers(Caleditcmat.ddcl.totvol.vap.vdp, "c")

END

'vap entrée
PUBLIC SUB vaphle_Data(Index AS INTEGER)

Caleditcmat.ddcl = $tabl[$snumed[Index]]
vaphle.Font = font["-4"]
vaphle.Data = convers(Caleditcmat.ddcl.totvol.vap.ven, "h")

END

PUBLIC SUB vaple_Data(Index AS INTEGER)

Caleditcmat.ddcl = $tabl[$snumed[Index]]
vaple.Font = font["-4"]
vaple.Data = convers(Caleditcmat.ddcl.totvol.vap.ven, "l")

END

PUBLIC SUB vapcle_Data(Index AS INTEGER)

Caleditcmat.ddcl = $tabl[$snumed[Index]]
vapcle.Font = font["-4"]
vapcle.Data = convers(Caleditcmat.ddcl.totvol.vap.ven, "c")

END

'vap sortie
PUBLIC SUB vaphls_Data(Index AS INTEGER)

Caleditcmat.ddcl = $tabl[$snumed[Index]]
vaphls.Font = font["-4"]
vaphls.Data = convers(Caleditcmat.ddcl.totvol.vap.vso, "h")

END

PUBLIC SUB vapls_Data(Index AS INTEGER)

Caleditcmat.ddcl = $tabl[$snumed[Index]]
vapls.Font = font["-4"]
vapls.Data = convers(Caleditcmat.ddcl.totvol.vap.vso, "l")

END

PUBLIC SUB vapcls_Data(Index AS INTEGER)

Caleditcmat.ddcl = $tabl[$snumed[Index]]
vapcls.Font = font["-4"]
vapcls.Data = convers(Caleditcmat.ddcl.totvol.vap.vso, "c")

END

'vap fin de période
PUBLIC SUB vaphldfp_Data(Index AS INTEGER)

Caleditcmat.ddcl = $tabl[$snumed[Index]]
vaphlfp.Font = font["-4"]
vaphlfp.Data = convers(Caleditcmat.ddcl.totvol.vap.vfp, "h")

END

PUBLIC SUB vaplfp_Data(Index AS INTEGER)

Caleditcmat.ddcl = $tabl[$snumed[Index]]
vaplfp.Font = font["-4"]
vaplfp.Data = convers(Caleditcmat.ddcl.totvol.vap.vfp, "l")

END

PUBLIC SUB vapclfp_Data(Index AS INTEGER)

Caleditcmat.ddcl = $tabl[$snumed[Index]]
vapclfp.Font = font["-4"]
vapclfp.Data = convers(Caleditcmat.ddcl.totvol.vap.vfp, "c")

END

PUBLIC SUB qihl_Data(Index AS INTEGER)

Caleditcmat.ddcl = $tabl[$snumed[Index]]
qihl.Font = font["-4"]
qihl.Data = convers(Caleditcmat.ddcl.qteimp, "h")

END

PUBLIC SUB qil_Data(Index AS INTEGER)

Caleditcmat.ddcl = $tabl[$snumed[Index]]
qil.Font = font["-4"]
qil.Data = convers(Caleditcmat.ddcl.qteimp, "l")

END

PUBLIC SUB qicl_Data(Index AS INTEGER)

Caleditcmat.ddcl = $tabl[$snumed[Index]]
qicl.Font = font["-4"]
qicl.Data = convers(Caleditcmat.ddcl.qteimp, "c")

END

PRIVATE FUNCTION convers(vol AS FLOAT, choix AS STRING) AS STRING

DIM f AS FLOAT

SELECT CASE choix
CASE "h"
vol = vol / 100
vol = Fix(vol)
CASE "l"
IF Abs(vol) < 100 THEN
vol = Fix(vol)
ELSE
f = Abs(vol / 100)
f = Round(Fix(f) * 100)
f = Abs(vol) - f
vol = Fix(f)
ENDIF
CASE "c"
vol = Round(vol, -2)
vol = Frac(vol)
vol = Round(vol * 100)
END SELECT
IF vol = 0 THEN
RETURN " "
ELSE
RETURN Str(vol)
ENDIF
END
valaquarus#15 Posté le 10/3/2018 à 12:17:01
-- Unus Ex Altera --Merci Patrick de ton bout de code. J'avais pensé faire effectivement récolter tout les info dans un tableau puis le faire restituer ligne par ligne au preview, je ne l'ai pas fait à cause de la taille de la base qui commence à dépasser les 1360 articles et qui ne fera que grossir dans le futur, j'ai eu peur de la place occupée en mémoire qui va être conséquente.
l'impression fonctionne chez moi sur une ligne au choix puisqu'il suffit de donner l'index, une ligne avec le datacount et déclencher à la main les événements (_data). Mais dès que je créer une boucle pour lire toute la base ça ne fonctionne pas.

Philippe.

PS : pas d'idée sur l'erreur obtenue avec le fichier exe créer par l'IDE.
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.3
12