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.5 |
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.5 |
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 .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. PhilippeSystème d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5 |
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. PhilippeSystème d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5 |
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.5 |
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.5 |
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.previewSystème d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.5 |
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.5 |
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.5 |