Notifications 
Reti­rer tout

Pro­blème de trans­mis­sion de don­nées packed entre un CLLE et un RPGLE

Posts
Uti­li­sa­teurs
Reac­tions
92  Vu
0
Début du sujet

Le pro­blème qui se pose, lors d’une sou­mis­sion de pro­gramme, les variables d’ap­pel numé­rique packées sont perdues.

A l’in­té­rieure nous avons 0, elle vient d’un écran, le pro­gramme qui gère l’é­cran appelle un CLLE dans lequel il passe cette variable CODUEX correctement.

Pro­to­ty­page

dcl-pr statistiques_temperature extpgm('BAMP306C');
  p_jour_semaine like(r_jour_sem) const; // Jour de référence fin de priode
  p_nbr_sous_periode packed(3:0) const;
  p_typ_sous_period char(1) const;
  p_date_reference char(10) const;
  p_code_clientf like(r_code_client) const;
  p_code_unite_exploit like(r_code_unite_exploit) const;
END-PR;

En déci­male :

00000000

En hexa :

000000000F

Dans le CLLE appe­lé, nous avons les variables suivantes :

PGM PARM(&JOURSEM &NBPERIODE &TYPPERIOD &DATE &CODCLI +
&CODUEX)

DCL VAR(&CODUEX) TYPE(*DEC) LEN(8 0)
DCL VAR(&CODCLI) TYPE(*CHAR) LEN(8)
DCL VAR(&JOURSEM) TYPE(*CHAR) LEN(8)
DCL VAR(&NBPERIODE) TYPE(*DEC) LEN(3 0)
DCL VAR(&TYPPERIOD) TYPE(*CHAR) LEN(1)
DCL VAR(&DATE) TYPE(*CHAR) LEN(10)

Valeurs des variables de départ dans le pro­gramme RPG :

P_JOUR_SEMAINE = Dimanche
P_NBR_SOUS_PERIODE = 001.
P_TYP_SOUS_PERIOD = W
G_CODCLI = 1121168

En hexa­dé­ci­mal :

P_JOUR_SEMAINE = C489948195838885
P_NBR_SOUS_PERIODE = 001F
P_TYP_SOUS_PERIOD = E6
G_CODCLI = F1F1F2F1F1F6F840
 

Si on regarde la valeur hexa dans le CLLE nous avons ‘000000000F’X :

&JOURSEM = Dimanche
&NBPERIODE = 001.
&TYPPERIOD = W
&DATE = 2016-11-08
&CODCLI = 1121168
&CODUEX = 00000000.

et en hexadécimal :

&JOURSEM = C489948195838885
&NBPERIODE = 001F
&TYPPERIOD = E6
&DATE = F2F0F1F660F1F160F0F8
&CODCLI = F1F1F2F1F1F6F840
&CODUEX = 000000000F

dans le CLLE puis la sou­mis­sion est faite avec cette commande :

SBMJOB CMD(CALL PGM(BAMP304R) PARM(&JOURSEM &NBPERIODE +
&TYPPERIOD &DATE &CODCLI &CODUEX)) +
JOB(EXTRC_SOND)

Le pro­to­type du BAMP304R est :

dcl-pr statistiques_temperature extpgm('BAMP304R');
  p_jour_semaine like(r_jour_sem) const; // Jour de référence fin de période
  p_nbr_sous_periode packed(3:0) const;
  p_typ_sous_period char(1);
  p_date_reference char(10) const;
  p_code_client like(r_code_client) const;
  p_code_unite_exploit like(r_code_unite_exploit) const;
END-PR;

dcl-pi statistiques_temperature;
  p_jour_semaine like(r_jour_sem) const; // Jour de référence fin de période
  p_nbr_sous_periode packed(3:0) const;
  p_typ_sous_period char(1);
  p_date_reference char(10) const;
  p_code_client like(r_code_client) const;
  p_code_unite_exploit like(r_code_unite_exploit) const;
end-pi;

Les zones p_nbr_sous_periode et p_code_unite_exploit ne sont pas trans­mises cor­rec­te­ment, elles sont égales en à :

P_JOUR_SEMAINE = Dimanche
P_NBR_SOUS_PERIODE = 000.
P_TYP_SOUS_PERIOD = W
P_DATE_REFERENCE = 2016-11-08
P_CODE_CLIENT = 1121168
P_CODE_UNITE_EXPLOIT = 00000000.

Le F en hexa­dé­ci­mal qui, je pense, est le signe a disparu :

P_JOUR_SEMAINE = C489948195838885
P_NBR_SOUS_PERIODE = 0000
P_TYP_SOUS_PERIOD = E6
P_DATE_REFERENCE = F2F0F1F660F1F160F0F8
P_CODE_CLIENT = F1F1F2F1F1F6F840
P_CODE_UNITE_EXPLOIT = 0000000000

Com­ment cor­ri­ger le problème ?

1 Réponse 
0

A pre­mière vue, c’est comme si on lan­çait la com­mande CALL sur une ligne de commande.

Dans ce cas, les valeur numé­rique sont consi­dé­rées comme étant packées 15p 5.

En chan­geant les pro­to­ty­page du pro­gramme appe­lé, cela a fonctionné :

      dcl-pr statistiques_temperature extpgm('BAMP304R');
         p_jour_semaine like(r_jour_sem) const;   // Jour de référence fin de priode
         p_nbr_sous_periode packed(15:5) const;
         p_typ_sous_period char(1);
         p_date_reference char(10) const;
         p_code_client like(r_code_client) const;
         p_code_unite_exploit packed(15:5) const;
       END-PR;

       dcl-pi statistiques_temperature;
         p_jour_semaine like(r_jour_sem) const;   // Jour de référence fin de période
         p_nbr_sous_periode packed(15:5) const;
         p_typ_sous_period char(1);
         p_date_reference char(10) const;
         p_code_client like(r_code_client) const;
         p_code_unite_exploit packed(15:5) const;
       end-pi;   

Share :