Forum iSeries, hébergé par xdocs400.com

As400, iSeries, i5, System i, une machine qui évolue pour être de plus en plus puissante.

Vous n'êtes pas identifié(e).

Annonce

ATTENTION : Le système anti-spam est à nouveau opérationnel. Nous avons réactivé les inscriptions.

#1 2009-12-04 15:37:38

aawoopy56
Membre
Inscription : 2009-10-16
Messages : 721

[Résolu] Parametrage d'un CL

Bonjour,

Dans un cl j'ai besoin de passer plusieurs variables une qui sera passer au lancement et une autre charger par mon code

exemple

PGM PARM(&NUM)

DCL        VAR(&NUM)        TYPE(*DEC)     LEN(2)
DCL        VAR(&VARTOT)     TYPE(*CHAR)    LEN(10)
DCL        VAR(&VARDAT)     TYPE(*CHAR)    LEN(6)

[...]
RTVSYSVAL  SYSVAL(QDATE) RTNVAR(&DATE)                         
                                                               
CVTDAT     DATE(&DATE) TOVAR(&VARDAT) FROMFMT(*SYSVAL) +       
             TOFMT(*YMD) TOSEP(*NONE)                         
                                                                                 
CHGVAR     VAR(&VARTOT) VALUE('SR' *CAT &NUM *CAT &VARDAT)
[...]

ENDPGM

Je but sur la concaténation des variables &NUM et &VARDAT

Pour lancer mon cl je dois bien faire CALL MABIB/PGM PARM(12)

Dernière modification par aawoopy56 (2009-12-09 11:14:43)

Hors ligne

#2 2009-12-04 15:39:51

fred_crrm
Membre
Lieu : Belfort
Inscription : 2007-03-02
Messages : 516
Site Web

Re : [Résolu] Parametrage d'un CL

bonjour,

Essaye avec &NUM en *CHAR

FRED

Hors ligne

#3 2009-12-04 15:50:41

aawoopy56
Membre
Inscription : 2009-10-16
Messages : 721

Re : [Résolu] Parametrage d'un CL

Bonjour fred

Ben ça marche pas mieux

Hors ligne

#4 2009-12-04 16:19:49

highvalue.fr
Membre
Lieu : MEAUX
Inscription : 2009-03-13
Messages : 399
Site Web

Re : [Résolu] Parametrage d'un CL

salut,

le passage de paramètres numériques  est toujours un peu délicat.

Si tu veux passer une valeur numérique, tu devras déclarer &NUM *dec (2 0)

mais...  il y a un mais...

si tu appelles le programme en interactif sur la ligne de commande...  CALL Monpgm parm(12) çà sera probablement caca-boudin..

çà marchera mieux avec parm(X'012F')   

par contre un appel dans un autre CL call Monpgm parm(&var) avec &var *dec (2 0) sera OK

tu pourrais garder &num *char 2 et appeler call .. parm('12')

en plus çà et permettrait de pouvoir utiliser &NUM directement avec *cat ce que tu ne peux pas faire avec  une variable *DEC

ff

Hors ligne

#5 2009-12-04 16:20:22

aawoopy56
Membre
Inscription : 2009-10-16
Messages : 721

Re : [Résolu] Parametrage d'un CL

Heu fred la commande suivante est elle bonne pour le lancement de mon code avec le param car lorsque je regarde le dump je vois la variable vartot avec la valeur <<&VARTOT                  *CHAR           10       'SR  091204'   >>  c bizarre


Ma commande:

CALL MABIB/MONPGM PARM(12)

Hors ligne

#6 2009-12-04 19:43:07

k2r400
Membre
Lieu : Montpellier (34)
Inscription : 2007-05-07
Messages : 1 807
Site Web

Re : [Résolu] Parametrage d'un CL

highvalue.fr a écrit :

salut,
le passage de paramètres numériques  est toujours un peu délicat.
Si tu veux passer une valeur numérique, tu devras déclarer &NUM *dec (2 0)
mais...  il y a un mais...
si tu appelles le programme en interactif sur la ligne de commande...  CALL Monpgm parm(12) çà sera probablement caca-boudin..
çà marchera mieux avec parm(X'012F')

Excepté si c'est un dec de 15,5 tu peux l'appeler directement sur une ligne de commande.

CALL MONPGM parm(1)

D'ailleurs on recommande toujours de déclarer les champs numériques paramètres en 15,5 pour pouvoir les passer directement en ligne de commande.

Dernière modification par k2r400 (2009-12-04 19:44:23)


Patrick

Hors ligne

#7 2009-12-06 16:11:29

aawoopy56
Membre
Inscription : 2009-10-16
Messages : 721

Re : [Résolu] Parametrage d'un CL

Slt K2r400

Dac alors si je met dans mon pgm <<DCL        VAR(&NUM)        TYPE(*DEC)     LEN(15 5) ça devrait fonctionner c'est quand même curieux comme fonctionnement d'être obligé de forcer la longueur de ma variable mais bon je vais tester lundi matin je vous tiens au courant

Hors ligne

#8 2009-12-07 10:15:55

aawoopy56
Membre
Inscription : 2009-10-16
Messages : 721

Re : [Résolu] Parametrage d'un CL

Slt K2R400

Bon j'ai essayé ta solution, le résultat c'est que lors de la compile il y a plantage ci-joint le message aurais tu une solution

   8900-              CHGVAR     VAR(&VARTOT) VALUE('SR' *CAT &NUM *CAT &VARDAT) 
* CPD0712 30  Operand  does not have valid type for operator.                     
* CPD0711 30  Operands in expression not same type.   

Mon CL:

PGM

[...]

           DCL        VAR(&NUM)        TYPE(*DEC)     LEN(15 5)
           DCL        VAR(&VARDAT)     TYPE(*CHAR)    LEN(6)
           DCL        VAR(&VARTOT)     TYPE(*CHAR)    LEN(10)

[...]

          CHGVAR     VAR(&VARTOT) VALUE('SR' *CAT &NUM *CAT &VARDAT)

[...]

ENDPGM

Dernière modification par aawoopy56 (2009-12-07 10:16:24)

Hors ligne

#9 2009-12-07 10:50:00

aawoopy56
Membre
Inscription : 2009-10-16
Messages : 721

Re : [Résolu] Parametrage d'un CL

Bon la question va peut être vous surprendre mais bon je la pose quand même est-il possible de forcer une convertion d'une variable de type *DEC en *CHAR

Je sais qu'on peut le faire avec la date mais pour mon cas je ne sais pas si c'est possible

Hors ligne

#10 2009-12-07 13:28:29

k2r400
Membre
Lieu : Montpellier (34)
Inscription : 2007-05-07
Messages : 1 807
Site Web

Re : [Résolu] Parametrage d'un CL

On ne peut pas concaténer des numérique, fred te l'a montré en début de post.
Tu déclares une variable Alpha de la même longueur que ton numérique et tu fais un
CHGVAR(&MONALPHA) VALUE(&MONUMERIQUE).
Ainsi tu peux concaténer ton alpha avec d'autres alpha

Dernière modification par Philippe (2009-12-07 16:54:08)


Patrick

Hors ligne

#11 2009-12-07 13:29:59

macounet
Membre
Lieu : Oise
Inscription : 2007-07-17
Messages : 519

Re : [Résolu] Parametrage d'un CL

Un truc tout simple c'est de déclarer 2 variables, une décimale et une autre de même longueur mais alpha.
Tu fais un &varCHAR = &varNUM et tu peux utiliser ta variable &varCHAR dans ta chaine de concaténation.

grillé smile

Dernière modification par macounet (2009-12-07 13:30:39)

Hors ligne

#12 2009-12-07 14:20:35

aawoopy56
Membre
Inscription : 2009-10-16
Messages : 721

Re : [Résolu] Parametrage d'un CL

Un truc curieux lorsque j'associe la valeur de la variable en dur dans le CL il n'y a pas de pbl
Ce n'est que lorsque je passe la valeur de ma variable dans ma ligne de commande et que je retire la valeur en dur de mon CL qu'il y a un pbl

POURQUOI???????   AU SECOUR HELP !!!!!!!

K2R400 j'ai fait ce test mais le prog ce plante  <<MCH1202             40        ESC     Decimal data error.>> qd il fait le chargement de la variable numérique dans l'alpha et je l'avais indiqué a Fred

que puis-je faire de plus pour que cela fonctionne ce n'est qd même pas une nouveauté ce type de manipe comment concaténer ????

Dernière modification par aawoopy56 (2009-12-07 15:44:21)

Hors ligne

#13 2009-12-07 15:44:30

macounet
Membre
Lieu : Oise
Inscription : 2007-07-17
Messages : 519

Re : [Résolu] Parametrage d'un CL

En gros tu fais ça (par rapport à ton exemple du début, tu rajoute ce que j'ai mis en gras)

PGM PARM(&NUM)

DCL        VAR(&NUM)        TYPE(*DEC)     LEN(2)
DCL        VAR(&NUMA)     TYPE(*CHAR)   LEN(2)

DCL        VAR(&VARTOT)     TYPE(*CHAR)    LEN(10)
DCL        VAR(&VARDAT)     TYPE(*CHAR)    LEN(6)

[...]
CHGVAR     VAR(&NUMA) VALUE(&NUM)                       
                                                                                 
CHGVAR     VAR(&VARTOT) VALUE('SR' *CAT &NUMA *CAT &VARDAT)

ça devrait passer sans problème ...

Hors ligne

#14 2009-12-07 15:47:24

macounet
Membre
Lieu : Oise
Inscription : 2007-07-17
Messages : 519

Re : [Résolu] Parametrage d'un CL

aawoopy56 a écrit :

Un truc curieux lorsque j'associe la valeur de la variable en dur dans le CL il n'y a pas de pbl
Ce n'est que lorsque je passe la valeur de ma variable dans ma ligne de commande et que je retire la valeur en dur de mon CL qu'il y a un pbl

POURQUOI???????   AU SECOUR HELP !!!!!!!

Là c'est peut-être la valeur de ton paramètre qui n'est pas bonne.
Tu fais comment le call de ton prog ?

Hors ligne

#15 2009-12-07 15:48:55

aawoopy56
Membre
Inscription : 2009-10-16
Messages : 721

Re : [Résolu] Parametrage d'un CL

Merci Macounet mais ça ne marche pas j'ai l'erreur suivante dans le dump

MCH1202             40        ESC     Decimal data error.

Et j'ai bien fait comme tu me la dit

call MABIB/MONPROG PARM(34)

Dernière modification par aawoopy56 (2009-12-07 15:49:47)

Hors ligne

#16 2009-12-07 16:01:59

macounet
Membre
Lieu : Oise
Inscription : 2007-07-17
Messages : 519

Re : [Résolu] Parametrage d'un CL

Regarde un peu plus haut ce que highvalue.fr te dit concernant les paramètres numériques en ligne de commande.
Si tu veux passer 34 dans un paramètre numérique il faut que tu saisisses

CALL MABIB/MONPROG PARM(X'034F')

Dernière modification par macounet (2009-12-07 16:06:59)

Hors ligne

#17 2009-12-07 16:16:39

aawoopy56
Membre
Inscription : 2009-10-16
Messages : 721

Re : [Résolu] Parametrage d'un CL

Quoi mais c'est quoi que cette codif on peut pas passer directement du numérique en paramètre du pgm alors la j'suis sidéré

J'ai exécuté le programme avec le X'034F' et oui cela fonctionne

pourquoi il est impossible de passer la valeur 34 directement la je ne comprends pas

Hors ligne

#18 2009-12-07 16:27:33

macounet
Membre
Lieu : Oise
Inscription : 2007-07-17
Messages : 519

Re : [Résolu] Parametrage d'un CL

Je ne connais pas exactement la raison. (vue la syntaxe je dirais qu'il les passe en héxa et pas en numérique étendu)

Il y a certainement sur ce forum des personnes plus calées que moi pour te l'expliquer.

Sinon je pense qu'en créant une commande tu devrait solutionner ton problème.

Hors ligne

#19 2009-12-07 16:46:05

aawoopy56
Membre
Inscription : 2009-10-16
Messages : 721

Re : [Résolu] Parametrage d'un CL

Tu la verrais comment cette commande toi

Hors ligne

#20 2009-12-07 16:52:39

max
Membre
Inscription : 2007-02-08
Messages : 198

Re : [Résolu] Parametrage d'un CL

Il y a déja un post la-dessus : http://forum.xdocs400.com/viewtopic.php?id=848

Pour la commande "call" les parametres décimaux sont passés en Packé et avec une longueur de (15  5) donc 15 chifres de long dont 5 décimales.
Si le paramètre 12345 est passé, le programme receveur doit déclarer le champ décimal comme (15 5), le paramètre recu sera 1234500000 (ce qui est 12,345.00000).
Si tu veux appeler avec call MABIB/MONPROG PARM(34), change ta définition de variable en 15 5 et ca passera.
PS:
N'oublie pas de changer ton &numa (longueur 15)
ainsi que ton CHGVAR     VAR(&VARTOT) VALUE('SR' *CAT &NUMA *CAT &VARDAT) pour ne prendre que la partie de &numa qui t'intéresse (%SST(&numa 9 2) par exemple.

Hors ligne

#21 2009-12-07 16:59:22

aawoopy56
Membre
Inscription : 2009-10-16
Messages : 721

Re : [Résolu] Parametrage d'un CL

Max merci mais il me semble que j'ai déjà testé cette solution mais ça ne passe pas

Je vais quand même re-tester pour être sur car avec tous ces tests je mis perd un peut

Hors ligne

#22 2009-12-07 17:12:35

max
Membre
Inscription : 2007-02-08
Messages : 198

Re : [Résolu] Parametrage d'un CL

Essaie :
PGM PARM(&NUM)                                                       
DCL        VAR(&NUM)        TYPE(*DEC)     LEN(15 5)                 
DCL        VAR(&NUMA)       TYPE(*CHAR)    LEN(15)                   
DCL        VAR(&VARTOT)     TYPE(*CHAR)    LEN(10)                   
DCL        VAR(&VARDAT)     TYPE(*CHAR)    LEN(6)                     
DCL        VAR(&DATE) TYPE(*CHAR) LEN(6)                             
RTVSYSVAL  SYSVAL(QDATE) RTNVAR(&DATE)                               
CVTDAT     DATE(&DATE) TOVAR(&VARDAT) FROMFMT(*SYSVAL) +             
             TOFMT(*YMD) TOSEP(*NONE)                                 
CHGVAR     VAR(&NUMA) VALUE(&NUM)                                     
CHGVAR     VAR(&VARTOT) VALUE('SR' *CAT %SST(&NUMA 8 2) *CAT &VARDAT)
SNDMSG     MSG(&VARTOT) TOUSR(MAX)                                   
ENDPGM                                                               
si je fais call tst001 17
cela donne :
From  . . . :   MAX            07/12/09   17:06:00   
SR17091207                                           
Personnellement, j'aime pas cela, j'évite toujours les param numériques.
Si tu as besoin de 2 positions numériques , passe un char de 2.
c'est franchement pas plus compliqué à la ligne de commande que d'ajouter les quotes :
call tst001 '17' C'est pas si pénalisant que cela.
Le petit test ci-dessus lorsque tu l'appellera avec
"call tst001 617" ignorera completement ton 6. C'est pas top...

Hors ligne

#23 2009-12-07 17:15:54

Philippe
Modérateur
Lieu : Région parisienne
Inscription : 2007-01-24
Messages : 2 783
Site Web

Re : [Résolu] Parametrage d'un CL

Convention IBM : longueur par défaut des variables

*DEC (15 5) pour les variables de type décimal condensé ("packé").
*CHAR (32) pour les variables de type caractère.
*INT (4) et *UINT (4) pour les variables de type binaire signé et non signé.

Ce qui veut dire que si on ne précise pas la longueur lors de la définition/déclaration des variables en CL, le compilateur prendra en compte la longueur par défaut selon le type de la variable. Ceci vaut également pour les constantes passées "en dur" dans les paramètres des commandes CALL. Donc, dans la mesure du possible et comme déjà indiqué, définis tes variables de type décimal condensé avec une longueur de (15 5) et tu n'auras alors plus de problème pour passer les valeurs en dur directement sur les commandes CALL. L'autre solution est de faire une commande "maison".

Hors ligne

#24 2009-12-07 17:35:21

macounet
Membre
Lieu : Oise
Inscription : 2007-07-17
Messages : 519

Re : [Résolu] Parametrage d'un CL

aawoopy56 a écrit :

Tu la verrais comment cette commande toi

Par exemple

La commande

CMD        PROMPT('TEST PARAM NUMERIQUE')           
PARM       KWD(NUM) TYPE(*DEC) LEN(2) RANGE(01 99) +
             PROMPT('Paramètre numérique')

la compilation de la commande

CRTCMD CMD(LGLIB/TST03) PGM(LGLIB/TST03) SRCFILE(LGLIB/QSRC) ALLOW(*INTERACT)

Tu adaptes avec tes noms de programme et de bib

Hors ligne

#25 2009-12-09 10:40:33

aawoopy56
Membre
Inscription : 2009-10-16
Messages : 721

Re : [Résolu] Parametrage d'un CL

Merci à tous ça fonctionne nickel

Bonne journée

Hors ligne

Pied de page des forums