J'ai une variable qui devrait déterminer quel champ d'une structure que j'utilise dans des compilations supplémentaires. Supposez donc que ma variable est nommée monnaie et peut avoir les valeurs «K», 'T' et 'H'. Après avoir vérifié quelle valeur il s'agit, je souhaite utiliser des champs de structure correspondants, par exemple. mystructure-fieldk, mystructure-fittt, mystructure-fieli.
Comme pour l'instant, j'utilise simplement si..quen pour vérifier la valeur de ma devise variable, puis utilisez simplement le champ correspondant de la structure, mais je dois donc faire Répétez le codage de ma boucle 3 fois ce qui est juste laid. p> existe une façon de pouvoir utiliser la boucle avec un champ dynamique? Un péché:
Si la devise = 'k'.
Données (MyDynamicfield) = Fieldk.
FIN SI.
puis utilisez MyDynamicfield dans la boucle: p> ou autre chose? Merci beaucoup! P> p>
3 Réponses :
Utilisez la pièce de code ci-dessous espère que cela clarifie. p> Disons que vous souhaitez calculer en fonction d'un autre champ de la même structure P> < Pré> xxx pré> Remarque: le code est écrit pour donner une idée sur la manière de procéder plus loin dans ce numéro. Comme Sandra a souligné cela peut entraîner des problèmes de compilation s'il vous plaît corriger si nécessaire. J'ai essayé de répondre à la question émettant un appareil mobile uniquement. Je n'ai pas accès à un compilateur / système actuellement. P> p>
Tout d'abord, merci! Voulez-vous dire que j'utilise mystructure-
Oh, je pense que je sais, je viens d'utiliser les champsymbol dans ma boucle! Avez-vous une idée de la manière dont je peux utiliser cela pour la construction
Je n'ai pas compris l'utilisation d'un autre symbole de terrain? Est-ce un champ de la même structure? Ou un autre?
Désolé, je n'ai pas précisé. C'est un champ de l'iTAB qui est bouclé dans les champsymol
Attribuer le champ code> ne compile pas
D'autres choses ne compilent pas. Peut-être qu'il est préférable que vous vérifiez que vous vous vérifiez compilez le code avec un compilateur ou précisez que c'est pseudo-code et que votre code ressemble à un pseudo code.
Il y a une meilleure performance avec une référence statique aux composants:
LOOP AT itab ASSIGNING FIELD-SYMBOL(<fs>). DEFINE m_add. IF currency = 'K'. ADD <fs>-field&1 TO mystructure-field&1. ENDIF. END-OF-DEFINITION. m_add : K, T, H. ENDLOOP.
J'ai créé un exemple de travail avec des données. Je crois que cela vous aidera certainement. Les valeurs de champ dynamiques sont calculées et le résultat est affiché à la fin.
TYPES: BEGIN OF ty_itab, currency TYPE c, fieldk TYPE i, fieldt TYPE i, fieldh TYPE i, END OF ty_itab. TYPES: BEGIN OF ty_structure, fieldk TYPE i, fieldt TYPE i, fieldh TYPE i, END OF ty_structure. DATA: itab TYPE TABLE OF ty_itab, ls_structure TYPE ty_structure. itab = VALUE #( ( currency = 'H' fieldk = 10 fieldt = 20 fieldh = 30 ) ( currency = 'H' fieldk = 50 fieldt = 60 fieldh = 70 ) ( currency = 'T' fieldk = 100 fieldt = 120 fieldh = 150 ) ( currency = 'K' fieldk = 300 fieldt = 400 fieldh = 500 ) ). LOOP AT itab ASSIGNING FIELD-SYMBOL(<fs>). CASE <fs>-currency. WHEN 'K'. ADD <fs>-fieldk TO ls_structure-fieldk. WHEN 'T'. ADD <fs>-fieldt TO ls_structure-fieldt. WHEN 'H'. ADD <fs>-fieldh TO ls_structure-fieldh. ENDCASE. ENDLOOP. cl_demo_output=>display( ls_structure ).