Il ne s'agit pas d'un problème au sens propre du terme, mais juste une proposition de solution plus professionnelle. Je m'explique:
J'ai l'habitude, dans mes programmes de gestion, d'utiliser une même méthode pour imprimer mes états. En général, ce sont des listIconGadget qui contiennent les données à imprimer, avec un titre de l'état à imprimer et parfois une date ou une période en haut de la page. Pour définir le nombre et les dimensions de mes colonnes, j'utilise C1, C2, C3 etc... C(x) représente la ligne verticale du début de la colonne (x), la largeur de la 1ère colonne est égale à c2-c1, celle de la 2ème colonne est égale à c3-c2 et ainsi de suite. Pour des raisons évidentes, l'unité de mesure utilisée est le cm et le format des pages est A4. Dans chaque procédure d'édition, je dois donc fournir:
Le titre de la page, le sous-titre (éventuellement), la date ou la période (du.... au...), le nombre de colonnes (nombre de lignes verticales), la taille de chaque colonne (largeur en cm), le titre de chaque colonne.
Je récupère alors les données de ma ListIconGadget (ligne par ligne), puis je commence à imprimer (de gauche à droite, de c1 à cn)
Dès que je termine l'impression, je ferme le cadre global du tableau (lignes horizontales du haut et du bas)
Parfois, j'ajoute : DATE ET SIGNATURE (en bas de page)
Il y a un point important à souligner: Tous les champs numériques sont alignés à droite.
Voilà. Je fais ça pour chaque Etat différent à imprimer. Ce que je souhaite: Créer UNE SEULE PROCEDURE D'IMPRESSION en passant des paramètres (au lieu de copier-coller la procédure en changeant ce qu'il y a lieu de changer).
Dans ce cas, les paramètres à passer sont :
. Le nombre de colonnes
. La taille de chaque colonne
. Le titre de chaque colonne
. Le titre de la page et sous titre
. La date ou période
. Le type du champs (numérique ou pas)
Qu'en pensez-vous? Avez-vous une proposition à me faire?
Merci d'avance
Exemple de procédure d'impression:
Code : Tout sélectionner
;-------------------------------------------------------------------------------------------------------
;------------ x,y sur imprimante --------------------------------------------------------
Procedure xcm(x.f)
result = x * (PrinterPageWidth()/21) ; 21cm A4
ProcedureReturn result
EndProcedure
;--------------------------------------------------------------------------------------------------
Procedure ycm(x.f)
result = x * (PrinterPageHeight()/29.7) ; 29,7cm A4
ProcedureReturn result
EndProcedure
;
Procedure Entete_blF()
;Afficher_entete()
wrow=ycm(4)
c1=xcm(1.2): c2=xcm(4.5) : c3=xcm(13.5): c4=xcm(15): c5=xcm(17.5) : c6=xcm(20) : c7=xcm(20)
DrawingFont(FontID(80))
DrawText(c1, wrow, "BON DE LIVRAISON N° " + numdoc$,printcol1,printcol2)
DrawingFont(FontID(74))
DrawText(c1, wrow+ycm(1), "(VENTE PAR FACILITE)",printcol1,printcol2)
DrawingFont(FontID(81))
DrawText(c4, wrow, "DATE : ",printcol1,printcol2)
DrawText(c4-xcm(1), wrow+ycm(0.5), "Code Client:",printcol1,printcol2)
DrawingFont(FontID(56))
DrawText(c4+xcm(1.5), wrow,date$,printcol1,printcol2)
DrawText(c4+xcm(1.5), wrow+ycm(0.5),codeclient$,printcol1,printcol2)
wrow=wrow+ycm(2)
Box(c1, wrow, c6-c1,ycm(0.2),RGB(211, 211, 211))
wrow=wrow+ycm(0.5)
DrawText(c1, wrow, "CLIENT:",printcol1,printcol2)
DrawText(c3-xcm(4), wrow, "ADR.:",printcol1,printcol2)
DrawText(c5-xcm(2), wrow, "N° TEL.:",printcol1,printcol2)
DrawingFont(FontID(56))
DrawText(c2-xcm(1.5), wrow,client$,printcol1,printcol2)
DrawText(c4-xcm(4), wrow,ad$,printcol1,printcol2)
DrawText(c6-xcm(3), wrow,tel$,printcol1,printcol2)
wrow=wrow+ycm(0.6)
DrawingFont(FontID(81))
DrawText(c1, wrow, "TYPE DE VERS.:",printcol1,printcol2)
DrawText(c3-xcm(4), wrow, "FONC.:",printcol1,printcol2)
DrawText(c5-xcm(2), wrow, "N° CCP :",printcol1,printcol2)
DrawingFont(FontID(56))
DrawText(c2, wrow,Typever$,printcol1,printcol2)
DrawText(c4-xcm(4), wrow,fonc$,printcol1,printcol2)
DrawText(c6-xcm(3), wrow,ccp$,printcol1,printcol2)
wrow=wrow+ycm(1)
L1=wrow : L2=l1+ycm(0.8)
Box(c1, l1, c6-c1, l2-l1,RGB(211, 211, 211))
wrow=l1+ycm(0.3)
DrawingFont(FontID(81))
DrawText(c1+xcm(1.2), wrow, "REF.",RGB(69, 69, 69),RGB(211, 211, 211))
DrawText(c2+xcm(2.7), wrow, "DESIGNATION",RGB(69, 69, 69),RGB(211, 211, 211))
DrawText(c3+xcm(0.4), wrow, "QTE",RGB(69, 69, 69),RGB(211, 211, 211))
DrawText(c4+xcm(0.8), wrow, "P. U",RGB(69, 69, 69),RGB(211, 211, 211))
DrawText(c5+xcm(0.5), wrow, "MONTANT",RGB(69, 69, 69),RGB(211, 211, 211))
Wrow=L2+ycm(0.4)
EndProcedure
;-------------------------------------------------------------------,
Procedure Print_blF()
numdoc$=GetGadgetText(#blf_numdoc)
If numdoc$=""
MessageRequester("Erreur","N° de BL incorrect !")
Goto fin_Printblf
EndIf
If CountGadgetItems(#Blf_GridProd)<=0 And CountGadgetItems(#Blf_GridVer)<=0
MessageRequester("Erreur","Il n'y a rien à imprimer ! ")
Goto fin_Printblf
EndIf
date$=GetGadgetText(#blf_date)
client$=GetGadgetText(#blf_client)
ad$=GetGadgetText(#blf_ad)
tel$=GetGadgetText(#blf_tel)
ccp$=GetGadgetText(#blf_ccp)
totblf$=GetGadgetText(#Blf_TotBlf)
firstver$=GetGadgetText(#Blf_FirstVer)
nbremois$=GetGadgetText(#blf_nbremois)
firstdateR$=GetGadgetText(#Blf_FirstdateR)
reste$=GetGadgetText(#blf_reste)
If PrintRequester()
If StartPrinting("Print-Doc")
load_printfonts()
If StartDrawing(PrinterOutput())
Wlig=0
Entete_blf ()
DrawingFont(FontID(54))
For wlig=0 To CountGadgetItems(#Blf_GridProd)-1
code$=GetGadgetItemText(#Blf_GridProd,wlig,0)
prod$=GetGadgetItemText(#Blf_GridProd,wlig,1)
qte$=GetGadgetItemText(#Blf_GridProd,wlig,2)
pu$=GetGadgetItemText(#Blf_GridProd,wlig,3)
mnt$=GetGadgetItemText(#Blf_GridProd,wlig,4)
DrawText(c1+xcm(0.2), wrow, code$,printcol1,printcol2)
DrawText(c2+xcm(0.2), wrow, prod$,printcol1,printcol2)
wpos=c4-xcm(0.4)
For wcar=Len (qte$) To 1 Step -1
DrawText(wpos, wrow, Mid(qte$,wcar,1),printcol1,printcol2)
wpos=wpos-xcm(0.18)
Next wcar
wpos=c5-xcm(0.4)
For wcar=Len (pu$) To 1 Step -1
DrawText(wpos, wrow, Mid(pu$,wcar,1),printcol1,printcol2)
wpos=wpos-xcm(0.18)
Next wcar
wpos=c6-xcm(0.4)
For wcar=Len (mnt$) To 1 Step -1
DrawText(wpos, wrow, Mid(mnt$,wcar,1),printcol1,printcol2)
wpos=wpos-xcm(0.18)
Next wcar
Wrow=Wrow+ycm(0.6)
Next wlig
lfin=wrow
wcoul=RGB(0, 0, 0)
;1ère ligne horizontale
LineXY(c1, l1, c6, l1,wcoul)
;2ème ligne horizontale
LineXY(c1, l2, c6, l2,wcoul)
;dernière ligne horizontale
LineXY(c1, lfin, c6, lfin,wcoul)
;Lignes verticales
LineXY(c1, l1, c1, lfin,wcoul)
LineXY(c2, l1, c2, lfin,wcoul)
LineXY(c3, l1, c3, lfin,wcoul)
LineXY(c4, l1, c4, lfin,wcoul)
LineXY(c5, l1, c5, lfin,wcoul)
LineXY(c6, l1, c6, lfin,wcoul)
wrow=lfin+ycm(0.1)
DrawingFont(FontID(82))
DrawText(c4+xcm(0.4), wrow,"T O T A L",printcol1,printcol2)
wpos=c6-xcm(0.4)
For wcar=Len (totblf$) To 1 Step -1
DrawText(wpos, wrow, Mid(totblf$,wcar,1),printcol1,printcol2)
wpos=wpos-xcm(0.18)
Next wcar
Wrow=Wrow+ycm(0.6)
lfin=wrow
;dernière ligne horizontale
LineXY(c4, lfin, c6, lfin,wcoul)
;Lignes verticales
LineXY(c4, l1, c4, lfin,wcoul)
LineXY(c5, l1, c5, lfin,wcoul)
LineXY(c6, l1, c6, lfin,wcoul)
l1=lfin+ycm(0.5)
;Affichage des échéances
xcm(1.2): c2=xcm(3.5) : c3=xcm(6): c4=xcm(8.5): c5=xcm(11.5) : c6=xcm(14): c7=xcm(17): c8=xcm(20)
L2=l1+ycm(0.8)
Box(c1, l1, c8-c1, l2-l1,RGB(211, 211, 211))
wrow=l1+ycm(0.3)
DrawingFont(FontID(84))
DrawText(c1+xcm(0.4), wrow, "TRANCHE",RGB(69, 69, 69),RGB(211, 211, 211))
DrawText(c2+xcm(0.2), wrow, "VERS. PREVU",RGB(69, 69, 69),RGB(211, 211, 211))
DrawText(c3+xcm(0.2), wrow, "DATE PREVUE",RGB(69, 69, 69),RGB(211, 211, 211))
DrawText(c4+xcm(0.2), wrow, "TYPE DE VERS.",RGB(69, 69, 69),RGB(211, 211, 211))
DrawText(c5+xcm(0.2), wrow, "VERSEMENT",RGB(69, 69, 69),RGB(211, 211, 211))
DrawText(c6+xcm(0.2), wrow, "DATE VERS.",RGB(69, 69, 69),RGB(211, 211, 211))
DrawText(c7+xcm(0.2), wrow, "CAISSE/CPTE",RGB(69, 69, 69),RGB(211, 211, 211))
Wrow=L2+ycm(0.4)
DrawingFont(FontID(56))
For wlig=0 To CountGadgetItems(#Blf_GridVer)-1
tranche$=GetGadgetItemText(#Blf_GridVer,wlig,0)
mens$=GetGadgetItemText(#Blf_GridVer,wlig,1)
datePrev$=GetGadgetItemText(#Blf_GridVer,wlig,2)
TypeV$=GetGadgetItemText(#Blf_GridVer,wlig,3)
Ver$=GetGadgetItemText(#Blf_GridVer,wlig,4)
DateVer$=GetGadgetItemText(#Blf_GridVer,wlig,5)
cpte$=GetGadgetItemText(#Blf_GridVer,wlig,6)
If Trim(tranche$)="TOTAUX"
tranche$=Trim(tranche$)
lfin=wrow
;1ère ligne horizontale
LineXY(c1, l1, c8, l1,wcoul)
;2ème ligne horizontale
LineXY(c1, l2, c8, l2,wcoul)
;dernière ligne horizontale
LineXY(c1, lfin, c8, lfin,wcoul)
;Lignes verticales
LineXY(c1, l1, c1, lfin,wcoul)
LineXY(c2, l1, c2, lfin,wcoul)
LineXY(c3, l1, c3, lfin,wcoul)
LineXY(c4, l1, c4, lfin,wcoul)
LineXY(c5, l1, c5, lfin,wcoul)
LineXY(c6, l1, c6, lfin,wcoul)
LineXY(c7, l1, c7, lfin,wcoul)
LineXY(c8, l1, c8, lfin,wcoul)
DrawingFont(FontID(82))
l1=lfin
Wrow=l1+ycm(0.4)
EndIf
If Trim(tranche$)="TOTAUX"
DrawText(c1+xcm(0.4), wrow, tranche$,printcol1,printcol2)
Else
DrawText(c1+xcm(1.1), wrow, tranche$,printcol1,printcol2)
EndIf
DrawText(c3+xcm(0.2), wrow, dateprev$,printcol1,printcol2)
DrawText(c6+xcm(0.2), wrow, datever$,printcol1,printcol2)
DrawText(c4+xcm(0.2), wrow, typeV$,printcol1,printcol2)
DrawText(c7+xcm(0.2), wrow, cpte$,printcol1,printcol2)
wpos=c3-xcm(0.4)
For wcar=Len (Mens$) To 1 Step -1
DrawText(wpos, wrow, Mid(Mens$,wcar,1),printcol1,printcol2)
wpos=wpos-xcm(0.18)
Next wcar
wpos=c6-xcm(0.4)
For wcar=Len (Ver$) To 1 Step -1
DrawText(wpos, wrow, Mid(Ver$,wcar,1),printcol1,printcol2)
wpos=wpos-xcm(0.18)
Next wcar
Wrow=Wrow+ycm(0.6)
Next wlig
DrawText(c6+xcm(0.5), wrow-ycm(0.6),"RESTE >>",printcol1,printcol2)
wpos=c8-xcm(0.4)
For wcar=Len (Reste$) To 1 Step -1
DrawText(wpos, wrow-ycm(0.6), Mid(reste$,wcar,1),printcol1,printcol2)
wpos=wpos-xcm(0.18)
Next wcar
lfin=wrow
wcoul=RGB(0, 0, 0)
;1ère ligne horizontale
LineXY(c1, l1, c8, l1,wcoul)
;2ème ligne horizontale
LineXY(c1, l2, c8, l2,wcoul)
;dernière ligne horizontale
LineXY(c1, lfin, c8, lfin,wcoul)
;Lignes verticales
LineXY(c1, l1, c1, lfin,wcoul)
LineXY(c2, l1, c2, lfin,wcoul)
LineXY(c3, l1, c3, lfin,wcoul)
LineXY(c4, l1, c4, lfin,wcoul)
LineXY(c5, l1, c5, lfin,wcoul)
LineXY(c6, l1, c6, lfin,wcoul)
LineXY(c7, l1, c7, lfin,wcoul)
LineXY(c8, l1, c8, lfin,wcoul)
StopDrawing()
EndIf
StopPrinting()
EndIf
EndIf
fin_Printblf:
load_winfonts()
EndProcedure