0
votes

Convertir une référence dynamique en structure de données à statique

J'ai créé une structure avec trois composants, dont l'une est de type REF vers des données et un type de table de cette structure. Comment puis-je ajouter des données à ce tableau?

Il a toujours trois composantes, mais un seul d'entre eux est découvert lors du traitement, je le sais toujours deux. Ainsi, j'utilise toujours tout le type de table REF aux données , puis déterminez le type de cette structure et créez la table sur elle.

Le problème ici est que en faisant cela, même Bien que je sache deux des composants, l'ensemble de l'ITAB sera dynamique, je dois donc l'utiliser dans des méthodes exportant / importation d'un type REF vers des données, qui est gênante.

La méthode ci-dessous retourne toujours une table Tapez Ref to Data, qui est complètement dynamique (type Ref to Data), mais la structure de la table sera toujours comme celle-ci:

  • Composant 1 -> Type PC261.
  • Composant 2 -> Type Pay99_International.
  • Compoment 3 -> Eh bien c'est toujours un mystère hehe xxx

    Mon intention était d'avoir la valeur de retour avec un autre type, un type connu, avec lequel je peux utiliser plus facilement les deux composants connus plus facilement. L'idée que j'avais était de créer un type avec uniquement le champ inconnu comme référence aux données que de y avoir une table.

    De cette façon, je serais en mesure de l'utiliser à l'intérieur des méthodes sans avoir à fonctionner, ce qui fonctionne parfaitement, ce qui fonctionne parfaitement, est un peu difficile à comprendre que en lisant le code. < Pré> xxx

    Le problème est, comment utiliser un iTAB de type gy_t_generic_payroll comme déclaré ci-dessus?

    Je dois en quelque sorte créer le composant 3, mais je Je n'ai aucune idée de la façon de le faire ...

    À la fin, j'ai un symbole de champ générique, c'est-à-dire une table de type, qui comporte les deux composants connus + le troisième découvert lors du traitement de traitement .

    alors comment puis-je transmettre le contenu de ce symbole de champ à un type de table GTY_T_Generic_payroll ? xxx

    après avoir exécuté ce code a toutes les valeurs, mais c'est une table dynamique où je ne peux pas utiliser de composants [1] -inter Comment passer à GTY_T_GENERIC_PAYROLL -TYPED VARIABLE, afin que je puisse accéder à des composants sans beaucoup de dynamique?


7 commentaires

Pourquoi définissez-vous votre symbole de champ de type n'importe quelle table au lieu de type gy_t_generic_payroll ? Si la seule dynamique de votre champ est dans la troisième composante de la structure de la ligne, vous pouvez accéder aux composants comme vous le souhaitez, avec [1] -inter et ainsi de suite. Vous pouvez même accéder au composant NAT , mais il est de type Ref aux données bien sûr. Vous devrez Dereefence et l'attribuer afin d'y accéder.


Vous dites "Comment puis-je utiliser un itab de type GTY_T_Generic_Payroll" mais je ne comprends pas où est votre difficulté. Pouvez-vous montrer un extrait de code pour illustrer comment vous aimeriez l'utiliser?


Bonjour, Rplantiko, je dois utiliser ce symbole de champ comme n'importe quelle table car les valeurs que je reçois proviennent d'un module de fonction standard qui accepte uniquement les tableaux internes comme paramètres exportateurs. De cette façon, est considéré comme une table interne et le module de fonction fonctionne


Bonjour, Sandra ... En effet, mes coments étaient un peu déroutant, mais néanmoins, j'ai pu remplir un type de table GTY_T_Generic_Payroll avec les données de . J'ai mis à jour le poste avec comment je l'ai fait. Notobrey, j'ai perdu la performance, mais je suppose que cela ne peut pas être aidé. Le code devient un peu plus lent mais plus facile à comprendre, ou plus rapide et que vous avez besoin de plus d'attention pour obtenir ce qui se passe.


En utilisant une variable intermédiaire vaut parfois, s'il utilise peu de mémoire, mais ici, je suppose que ce n'est pas le cas, je ne créerais donc pas une variable intermédiaire et que vous n'expliquez pas pourquoi il serait si complexe d'utiliser la variable d'origine directement.


Ce n'est pas une question - c'est un livre! :-RÉ


Bonjour, Sandra, le problème de l'utilisation de toute la table comme dynamique est qu'il doit être utilisé dans de nombreuses autres méthodes que dynamiques. Cela signifie que je dois créer un tas de symboles de champ attribuant des composants à partir de la table, ne peut pas boucler à l'aide de l'endroit où, même la table de lecture doit être effectuée dynamique, qui, à la fin, rend le code moins lisible, tout va bien travailler. Maintenant, avec cette nouvelle table non-dynamique, qui tente de lire le code, le comprendra à première vue, de soutenir, qui déboguer toute la journée, il est extrêmement utile: D


3 Réponses :


2
votes

Compte tenu de votre structure cible et de votre table comme ceci: xxx

Si vous avez maintenant une autre table, dont le type à l'exécution est le suivant: xxx > Vous pouvez déplacer l'une à l'autre avec xxx


1 commentaires

Bonjour, Florian, oui, c'est comme ça que j'ai fini par faire, mais pour le dernier composant, l'inconnu, je l'ai fait légèrement différent: Abap Obtenez une référence dans ls_value-nat. Ajouter ls_value à rt_value. de cette façon, je travaille avec la table de retour à l'aide de ce composant inconnu comme référence (-> *), et les deux autres que je peux travailler avec Normaly, car ils ne sont pas dynamiques, vous pouvez le vérifier dans la dernière. Une partie de la question, j'ai récemment modifié l'ajout de cette solution! Merci!



0
votes

On dirait que je pouvais transmettre les valeurs de la table entièrement générique (type Ref to Data) à une autre table 1/3 générique (type GTY_T_Generic_Payroll): XXX

La fin de la journée, j'ai bien compris ce dont j'avais besoin, mais malheureusement, je perds beaucoup de performances, car je dois boucler deux fois dans les résultats maintenant.

  • peupluler la table non so-dynamique
  • faire le processus réel du rapport (au moins il obtient Pretier LOL)

    C'est le seul moyen car je ne peux pas simplement utiliser Insérer des lignes de dynamic_itab sur no_so_dynamic_itab , car le troisième composant est référence.


1 commentaires

La règle de base ici: Si vous souhaitez une lisibilité dans dans beaucoup d'autres méthodes , vous ne pouvez pas omettre l'enveloppement de la table d'origine en nouveau type. Si vous voulez des performances, utilisez simplement la table d'origine de manière dynamique.



1
votes

La question et les réponses peuvent sembler déroutantes pour les futurs visiteurs (quelle est la question actuelle?), Voici donc mes deux cents.

Résumé de la question:

  • Vous appelez un code externe (1) qui vous donne une table interne générée de manière dynamique, mais vous savez que tous les composants sont toujours les mêmes sauf celui qui varie mais est à la même position, de sorte que vous le souhaitez. Pour faire référence à ses composants statiquement, à l'exception de celui qui varie.

    (1) Donc, vous ne pouvez pas l'adapter.

  • Votre solution de contournement consiste à définir un tableau interne équivalent statiquement et le composant qui varie comme un type de référence de données (pointeur sur n'importe quel objet de données), puis pour l'initialiser en copiant les données de la table interne dynamique .

  • Vous demandez une autre meilleure solution car la vôtre consomme une mémoire supplémentaire (deux tables internes) et diminue la performance (processus de copie).

    Réponse:

    • pas de meilleure solution

0 commentaires