|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : octobre 2009 Messages : 57 ![]() |
bonjour, j'aimerais afficher le contenu de ma table interne itab, j'ai fait le code ci-joint et je vois pas du tout ce qui pourrait bien ne pas marcher, à l'affichage cela n'affiche rien du tout et même en laissant une trace dans la boucle cela n'affiche rien, ce serait vraiment sympa q'il y a quelqu'un qui pourrait m'aider à avancer.
merci d'avance. Code :
|
||
|
|
00
|
|
|
#2 |
|
Membre expérimenté
![]() |
Salut,
Essaie d'enlever le test sur SY-SUBRC, je pense qu'il contient le code retour de la dernière requête effectuée et si rien n'est trouvé en base, alors il y a de très grandes chances que la valeur reste indéfiniment différente de 0 jusqu'à la prochaine mise à jour de cette variable. Il n'y a pas besoin de tester le code retour (SY-SUBRC) dans une boucle car elle n'est pas mise à jour à chaque nouveau tour de boucle. Essaie pour voir.
__________________
Boaf...signature <= ça suffira ça ?? |
|
|
00
|
|
|
#3 |
|
Candidat au titre de Membre du Club
![]() Inscription : octobre 2009 Messages : 57 ![]() |
j'avais déjà essayé sans le test mais ça n'a pas marché, et là je l'ai enlevé et donc même résultat ==> ça m'affiche absolument rien, par contre si je fait un write: / itab-orgacom. ça affiche bien la première valeur contenue dans itab.
et moi je veux en fait afficher toutes les valeurs qui sont dans itab. merci pour ton retour. |
|
|
00
|
|
|
#4 | ||||
|
Membre expérimenté
![]() |
Mmmmh ok, laisse tomber, c'est la méthode employée pour alimenter ta table interne qui n'est pas bonne.
Si tu rentres en débogage et que tu regardes le contenu de ta table interne, tu comprendras. Je pense que tu débutes donc je vais t'expliquer ce qui ne va pas. Tu utilises l'instruction SELECT. ENDSELECT. pour récupérer tes données, seulement le fonctionnement du SELECT ENDSELECT est similaire à une boucle LOOP, c'est à dire que la base de données va être requêtée autant de fois qu'il y a de correspondances dans la table de BD, et chaque entrée requêtée va être mise provisoirement dans la variable de réception entre le SELECT et le ENDSELECT. Donc si tu utilises cette méthode, il va falloir faire des APPEND à l'intérieur du bloc SELECT pour alimenter ta table interne. Seulement, je ne recommande pas cette méthode pour des raisons de performances. Il est préférable que tu fasses des SELECT INTO TABLE pour, en une seule requête, alimenter ta table interne. Exemple : Code :
Dans mon exemple, on part du principe que la table interne T_TCUSTOMER ne possède qu'un champ CUSTOMER. Voila pour le début. Pour la suite, il faut utiliser le complément d'instruction FOR ALL ENTRIES IN dans tes SELECT suivants pour pouvoir ajouter des conditions en fonctions des valeurs récupérées depuis la requête précédente, en veillant à ce que la table interne servant à la comparaison ne contienne pas de doublons. Exemple qui ne reflète pas forcement la réalité : Code :
Au final, quand t'auras toutes tes données, il faudra que tu les croises pour alimenter ta table interne ITAB, c'est-à-dire que tu parcours ta table de données principale qui est souvent la première remplie, et que tu fasses des lectures sur les autres pour retrouver les bonnes valeurs et ainsi remplir ta table ITAB avec les bonnes valeurs. Pour finir, une autre méthode consiste à faire des jointures en ABAP, qui permettent de croiser directement tes tables via des liens définis dans l'instruction. Mais il faut rester dans la limite du raisonnable, il ne faut pas croiser 10 tables entre-elles, 3 maximum est recommandé. C'est une méthode que je n'aime pas trop donc je ne vais pas la détailler plus étant donné que je n'ai pas assez de détails en tête à te donner. Tu peux trouver des exemples dans l'aide. (ABAP Keyword Documentation - SELECT - Join) Bon ben, bon courage.
__________________
Boaf...signature <= ça suffira ça ?? |
||||
|
|
00
|
|
|
#5 |
|
Membre actif
![]() Marianne ABAP Inscription : novembre 2008 Messages : 203 ![]() |
Question bête combien as-tu d'entrées dans ta table?
Car j'ai l'impression que dans ton select - endselect tu ne récupère qu'une seule valeur qui écrase la précédente s'il n'y a pas d'append ITAB
__________________
Pensez à récompenser les réponses utiles et au tag .
|
|
|
00
|
|
|
#6 |
|
Candidat au titre de Membre du Club
![]() Inscription : octobre 2009 Messages : 57 ![]() |
effectivement, ça va à chaque fois écraser ce que contient ma table interne, j'ai une quantité considérables de données.
Merci pour toutes ces explications ça m'a été d'une grande aide. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com