Accueil du site > Les articles > Passage de paramètre avec les listes avec ADELIA 400
Version à imprimer Enregistrer au format PDF

Passage de paramètre avec les listes avec ADELIA 400

samedi 29 mai 2004, par Serge Gomes Visites  1602 Première mise en ligne le lundi 29 mars 2004.

Supposons que vous vouliez développer un guide de sélection multiple, par exemple un écran de sélection sur le fichier article capable de ramener plusieurs codes article, et que votre guide soit capable de ramener un nombre variable de codes avec leurs libellés.

La solution la plus courante est d’appeler notre programme guide avec, en paramètre, un tableau ou une longue chaine de caractère. Par exemple pour un code Article de 10 caractères associé à un libellé de 40 caractères, vous pourrez utiliser un paramètre de 500 caractères, vous permettant de sélectionner jusqu’à 10 articles.

Si vous souhaitez, plus tard, utiliser votre guide pour ramener 20 articles au lieu de 10, vous serez obligé de changer la longueur de la chaine de caractères (ou le tableau le cas échéant) utilisé en paramètre soit, pour notre exemple, 1000 Caractères.

Ensuite, il faudra recompiler tous les programmes utilisant votre guide. De plus, les programmes n’ayant besoin de ramener qu’un article devront quand même utiliser une chaine de 1000 caractères (ce qui peut être pénalisant en terme de performance).

Une solution plus avantageuse consiste à utiliser les listes Adelia.

PGM1 appelle PGM2.

PGM2 alimente une liste contenant un nombre variable de codes (associés à leurs libellés).

PGM1 récupère la liste et alimente l’écran.


LISTE ADELIA

Voici 2 extraits de sources ADELIA400

PGM1 => Ecran de sélection sur lequel on appelle le guide.

PGM2 => Ecran guide permettant la sélection de 500 (P_NB_MAX) codes

PGM1
TRT_GUIDE 01
************
*RANPA1 = 0
*AFFICHER_GUIDE = '0'
P_NB_MAX = 500
DECL LISTE LST_COD W_COD W_LIB
* Guide Sur code
GUIDE Z_CODE
APPELER PGM2 P_NB_MAX LST_COD
SI &NBR_ELT(LST_COD) > 0
* Transfert des zones listes vers écrans...
TRAITER_PROC LSTECR
FIN
FIN_GUIDE
PGM2
*------------------------------------------------------------------*
* Exemple de source manipulant les listes ADELIA *
* Ce programme reçoit 2 paramètres
* Le 1er indique le nombre maximum d'enregistrements à sélectionner*
* Le 2ème est une liste contenant : *
* - 1 code et un libellé (W_COD et W_LIB)
*------------------------------------------------------------------*
* PARAMETRES *
* P_NB_MAX 5N Nombre maximum d'enregistrements à sélectionner *
* LST_SPE 2A + 35A Liste 2A + 35A *
*------------------------------------------------------------------*
* La déclaration de la liste doit ce faire avant son utilisation (donc avant RECEVOIR)
DECL LISTE LST_SPE W_COD W_LIB
RECEVOIR P_NB_MAX LST_SPE
* Mise à blanc de la liste
VIDER_LST LST_SPE
INITIALISER 01
TRAITER 01
**************
TRANSACTION 01
**************
SI *F03 OU *F12
* Fin du programme on vide la liste
VIDER_LST LST_SPE
TERMINER
FIN
SI *PAGAV
PAGINER_AVANT
TRAITER 01
FIN
VERIFIER 01
TERMINER
*****************
INITIALISATION 01
*****************
EFFACER 1
GESTION_SFL 1
LIRE FICHIER
PRESENTER FICHIER
FIN_GESTION_SFL
W_MEM_AFFICH = Z_AFFICH
***************
VERIFICATION 01
***************
W_NBR = 0
GESTION_SFL 1
SI Z_COD_SEL <> *BLANK
TRAITER_PROC ALILST
* Insertion dans la liste
SI W_NBR < P_NB_MAX
W_NBR = W_NBR + 1
W_COD = ZE4_SPEC
W_LIB = ZE4_LIBELLE
INSERER_ELT LST_SPE
SINON
* ERREUR 'Vous ne pouvez pas sélectionner plus de ' // P_NB_MAX
QUITTER_SFL
FIN
FIN
FIN_GESTION_SFL
* ---------------------------------------------------------------- *
DEBUT_PROCEDURE ALILST
* Insertion dans la liste
W_NBR = W_NBR + 1
W_COD = ZE4_SPEC
W_LIB = ZE4_LIBELLE
INSERER_ELT LST_SPE
FIN_PROCEDURE
* ---------------------------------------------------------------- *

P.-S.

Lachez vos tableaux et sautez sur les listes...