Page 1 sur 1

(sujet non précisé)

Posté : ven. 30 janv. 2015, 09:02:43
par Le Manach
Bonjour,

j'aimerais savoir si on peut dans un fm saisir un décimal négatif de façon "normal" c'est à dire -1,2.

Saisi de cette manière, le signe moins n'est pas interprété. Je peux mettre le signe que derrière le nombre pour qu'il soit interprété (ou alors gérer le signe avec un autre champ devant le champ décimal).

merci pour vos réponses.

EDTCDE

Posté : ven. 30 janv. 2015, 09:06:41
par cmasse
Les EDTCDE J,K,L,M prévoient le signe - à droite, N,O,P,Q à gauche.

(sujet non précisé)

Posté : lun. 02 févr. 2015, 10:17:18
par Le Manach
je suis d'accord sur le rendu visuel avec l'application de l'edit code. Mon souci est au niveau de la saisi : le signe - n'est pas interprété lorsque je le mets à gauche du nombre.

(sujet non précisé)

Posté : mar. 03 févr. 2015, 15:26:10
par Philippe S
Les EDTCDE J,K,L,M fonctionnent bien si on veut le signe à droite, les EDTCDE N,O,P,Q qui sont sensés définir le signe à gauche de la valeur ne fonctionnent pas sur les écrans mais semblent toutefois fonctionner sur les spécifs O de RPG ( sic ). Il y a comme qui dirait un petit bug ici de la part de Rochester et il est loin d'être nouveau. Il semble qu'il ne sera désormais pas corrigé compte tenu des évolutions peu probables des DDS écran.

L'astuce que j'ai utilisée pour résoudre ce cas, c'est de définir la zone de saisie de la valeur en alphanumérique avec 2 caractères de plus que la zone numérique d'origine pour y placer le signe moins, ou plus le cas échéant et la virgule ou le point.
Ensuite dans le programme, je convertis cette zone alphanumérique en numérique condensé ou étendu par la fonction intégrée %DEC().

Exemple:
Soit ma DDS écran qui comporte la zone de saisie définie en 7 dont 2 décimales. Je la supprime et définis à la place une zone de saisie en alphanumérique de longueur 9, soit 2 caractères de plus que la zone numérique d'origine pour pouvoir y mettre le signe et la virgule.
Ensuite, dans mon programme RPG, je convertis cette zone en numérique avec la fonction intégrée %DEC() et place le résultat dans une zone dont le définition correspond à la zone numérique d'origine (7 dont 2 décimales).

Ma DDS écran

Code : Tout sélectionner

A            VALEUR         9   B 15 45 
Mon programme RPG IV

Code : Tout sélectionner

D NumVal           s              7p 2 inz  
   
    /free                               
   monitor;                         
    NumVal = %dec(VALEUR : 5 : 2); // conversion en numérique
    on-error;                       
      // Ecrire ici le traitement d'erreur;                    
   endmon;     


Remarques
La fonction %DEC() offre beaucoup de souplesse pour la saisie des zones numériques:
  • Le signe est optionnel et peut être '+' ou '-'. Il peut précéder ou suivre la donnée.
    Le point ou la virgule décimale est optionnel.
    Des blancs sont permis n'importe où dans la donnée.
    S'il y a erreur, on peut récupérer l'exception code statut 105
Ainsi, '-1.2' ou '-1,2' est correct.
'- 1. 2' ou '- 1 . 2 ' ou ' + 1 . 2 ' l'est également.

C'est le prix à payer si on tient absolument à avoir le signe à gauche.

il faudra en retour utiliser la fonction %CHAR() pour afficher la donnée numérique sur l'écran :

Code : Tout sélectionner

VALEUR = %CHAR(NumVal);   // signe à gauche dans tous les cas

(sujet non précisé)

Posté : mer. 04 févr. 2015, 08:48:23
par Le Manach
Merci pour vos explications.
Pour conclure : le signe - à gauche c'est un vrais sport !

Cdt

EDTCDE

Posté : mer. 04 févr. 2015, 13:55:35
par cmasse
je ne comprend pas, j'ai testé le DSPF suivant :

Code : Tout sélectionner

     A          R RECORD1
     A                                  3 13'TEST saisie négatif'
     A            Z1             9  0B  6 10
     A            Z2             9Y 0B  8 10EDTCDE(Q)
     A            Z3             9N 0B 10 10                    
pour les champs Z2 et Z3 je peux bien saisir -45

(sujet non précisé)

Posté : mer. 04 févr. 2015, 14:24:44
par Philippe S
Oui, en SAISIE, on peut mettre le signe à gauche mais le programme va recevoir 45 (X'F4F5') et non -45 (X'F4D5'). En revanche, si on met le signe à droite, le programme recevra bien -45.


J'en profite au passage pour te dire que la prévisualisation ne marche pas, je n'obtiens pas ce que j'ai tapé mais des blancs dans la textbox.

EDIT CODE

Posté : mer. 04 févr. 2015, 15:33:33
par ctalhouet
en 36 on avait déja le probleme et on passait aussi par des zones alpha!