Le principe de cet exemple est d’aller remplir le tableau des commandes.
Pour se faire, nous avons placé un signet à la première cellule de donnée (deuxième ligne, car la première est l’entête du tableau).
Donc, le programme créé un document à partir du modèle, va inscrire les données de l’entête, puis remplit le tableau (à l’aide de la commande WSETLINE).
Le tableau ne contient qu’une seule ligne de données, parce que Word ajoute automatiquement une ligne suivante lorsque, une fois que vous êtes en fin de ligne et que vous passez à la colonne suivante (par Tab. par exemple).
Ce qui fait que l’on aura pas de ligne vide.
La zone de texte qui suit le tableau se décalera au fur et à mesure que le tableau grandit.
Source du programme RPG pour Word
*******************************************************************
* Fichiers utilisés: SP_CUST --> Fichier clients *
* SP_ORD_ID --> Fichier commandes (ORDERS) LF*
* SP_DET_OR --> Fichier détail (DETAIL) LF *
*******************************************************************
FSP_CUST if e k disk
FSP_ORD_ID if e k disk
FSP_DET_OR if e k disk
*******************************************************************
* Déclaration des variables utilisées par LAUNCHER Office. *
* Voir le chapitre 5. *
*******************************************************************
DHANDLE s 50 inz('*ONLY')
DSVRADDR s 30 inz('*DEV')
DCCSID s 10 inz('*JOB')
DLNCCMD s 10 inz(*blanks)
DLNCPARM1 s 512 inz(*blanks)
DLNCPARM2 s 1024 inz(*blanks)
DLNCOPT s 1 inz(*blanks)
DLNCRESULT s 512 inz(*blanks)
*******************************************************************
* Variables utilisées par le programme *
*******************************************************************
DPREMIER s 9 inz(*blanks)
DDATECMD s d datfmt(*EUR)
DDATECMDS s 10 inz(*blanks)
DPRIXUP s 8p 0 inz(0)
DPRIXTP s 8p 0 inz(0)
DPRIXU s 8 inz(*blanks)
DPRIXT s 8 inz(*blanks)
DQTE s 10 inz(*blanks)
DRECORD s 9
*******************************************************************
* Point d’entrée du programme *
*******************************************************************
c *ENTRY PLIST
c premier PARM record
*******************************************************************
* Chaînage sur le client voulu *
*******************************************************************
c PREMIER chain SP_CUST 90
*
* Connexion à LAUNCHER Office. Le serveur est adressé par la variable
* SVRADDR. *DEV signifie que l’on travaille sur le serveur qui émule
* l’écran courant (utilisation du écran 5250).
*
c call 'LNCOPEN'
c parm handle
c parm svraddr
c parm ccsid
*------------------------------------------------------------------
* Edits a sales document that will be sent by e-mail
*------------------------------------------------------------------
c eval lnccmd='WORDOPEN'
c exsr CALLLNC
c eval lnccmd='WMINIMIZE'
c exsr CALLLNC
* Création d’un nouveau document sur la base d’un modèle existant
c eval lnccmd='WNEWFILE'
c eval lncparm1='%LNCDIR%\Samples' +
c '\Letter.dot'
c exsr CALLLNC
c eval lnccmd='WMINIMIZE'
c exsr CALLLNC
* A l’aide des signets, les données sont affectées
c eval lnccmd='WBOOKMARK'
c eval lncparm1='FNAME'
c eval lncparm2=
c exsr CALLLNC
c eval lncparm1='LNAME'
c eval lncparm2=
c exsr CALLLNC
c eval lncparm1='ADDRESS'
c eval lncparm2=
c exsr CALLLNC
c eval lncparm1='ZIP'
c eval lncparm2=
c exsr CALLLNC
c eval lncparm1='CITY'
c eval lncparm2=
c exsr CALLLNC
c eval lncparm1='STATE'
c eval lncparm2=
c exsr CALLLNC
c eval lncparm1='PHONE'
c eval lncparm2=
c exsr CALLLNC
c eval lncparm1='FAX'
c eval lncparm2=
c exsr CALLLNC
c eval lncparm1='EMAIL'
c eval lncparm2=
c exsr CALLLNC
* Routine qui va lire toutes les commandes du client.
* Travail sur le fichier de commandes
c cust_id setll sp_ord_id
c cust_id reade sp_ord_id 91
c 91 goto Fin
* Déplacement vers la table
c eval lnccmd='WBOOKMARK'
c eval lncparm1='TABLE'
c eval lncparm2=
c exsr CALLLNC
c loop_order tag
c move ORDER_DATE datecmd
c movel datecmd datecmds
* Lecture du détail de la commande
c order_id setll sp_det_or
c order_id reade sp_det_or 92
c 92 goto Suite
c loop_detail tag
c eval lnccmd='WSETLINE'
c eval lncparm1=datecmds + '%SEP%' +
c PART_DESC
c exsr CALLLNC
c eval PRIXUP=
c movel prixup prixu
c eval lnccmd='WBOOKMARK'
c eval lncparm1='''*RIGHT'' ''NUMFMT(0)'' '
c eval lncparm2=
c exsr CALLLNC
c movel(p) QUANTITY QTE
c eval lncparm2=
c exsr CALLLNC
c eval PRIXTP=
c movel prixtp prixt
c eval lncparm2=
c exsr CALLLNC
* Détail suivant
c order_id reade sp_det_or 92
c N92 eval lncparm1='*RIGHT'
c N92 eval lncparm2=
c N92 exsr CALLLNC
c N92 goto loop_detail
c Suite tag
* Commande suivante
c cust_id reade sp_ord_id 93
c N93 eval lncparm1='*RIGHT'
c N93 eval lncparm2=
c N93 exsr CALLLNC
c N93 goto loop_order
* Sauvegarde, et envoi
c Fin tag
c eval lnccmd='WSAVEAS'
c eval lncparm1='%LNCDIR%\samples\' +
c firstname + '.doc'
c eval lncparm2=
c exsr CALLLNC
c eval lnccmd='WSENDTO'
c eval lncparm1=
* La ligne suivante n’est pas exécutée
* c exsr CALLLNC
c eval lnccmd='WMAXIMIZE'
c exsr CALLLNC
* Quitte le serveur LAUNCHER Office
c eval lnccmd='END'
c exsr CALLLNC
c call 'LNCCLOSE'
c parm HANDLE
c seton lr
*------------------------------------------------------------------
* SUB CALLLNC : Cette sous-routine envoie la commande à LAUNCHER Office.
* Les différents paramètres sont déjà affectés.
* Voir le chapitre 5 pour leur utilisation
*--------------------------------------------------------------------
c CALLLNC BEGSR
c call 'LNCCMD'
c parm HANDLE
c parm LNCCMD
c parm LNCOPT
c parm LNCPARM1
c parm LNCPARM2
c parm LNCRESULT
c ENDSR