Lecture de table passée en paramètre

Lecture de table passée en paramètre

Messagede karim69140 » 06 Février 2012, 11:55

Bonjour,

Je suis débutant sur SAP, et je souhaitais m'entrainer sur ABAP.
Je voulais créer un programme qui me permette de renseigner une table en paramètre, et d'afficher son contenu.

Je bloque au niveau de l'affichage du contenu, je ne sais pas ce qu'il faut mettre dans le WRITE.

Voici le code basique :

Code: Tout sélectionner
field-symbols <champs>   type standard table.
PARAMETERS:p_table TYPE tabname16 OBLIGATORY.


select * from (p_table) into table <champs>.
WRITE <champs>.
ENDSELECT.


Lorsque je check ce code, cela bloque au niveau du write avec le message suivant:
"<CHAMPS>" cannot be converted to a character-type field.

Quelqu'un pourrait m'aider pour afficher le contenu de la table mis en paramètre ?
Merci d'avance
karim69140
Posteur débutant
Posteur débutant
 
Messages: 1
Inscription: 06 Février 2012, 11:47

Re: Lecture de table passée en paramètre

Messagede thoul » 07 Février 2012, 15:05

Bonjour,

Voici les points problématiques:

-Instruction WRITE:
Le field-symbol <CHAMPS> est supposément une table interne. L'instruction ne permet pas de faire WRITE itab.
Il faut faire une boucle sur la table interne et faire un WRITE / à chaque passage de boucle (le "/" sert à faire un saut de ligne)
du type
Code: Tout sélectionner
FIELD-SYMBOLS <table> TYPE STANDARD TABLE.
FIELD-SYMBOLS <structure> TYPE ANY.
...
SELECT * FROM (p_table) INTO TABLE <table>.
LOOP AT <table> ASSIGNING <structure>.
  WRITE / <structure>.
ENDLOOP.


-Instruction SELECT:
Le SELECT ... INTO TABLE ... correspond au chargement direct d'une table interne avec les données de sélection retournées.
L'instruction SELECT ne représente ici pas une boucle. Ainsi, le ENDSELECT est inutile.
Si on utilise un SELECT... INTO ..., on a bien une boucle devant se terminer par un ENDSELECT
On peut donc imaginer les 2 codes suivants
Code: Tout sélectionner
FIELD-SYMBOLS <table> TYPE STANDARD TABLE.
FIELD-SYMBOLS <structure> TYPE ANY.
...
SELECT * FROM (p_table) INTO TABLE <table>.
LOOP AT <table> ASSIGNING <structure>.
  WRITE / <structure>.
ENDLOOP.

ou

DATA s_structure TYPE REF TO data.
...
CREATE DATA s_structure TYPE (p_table).
ASSIGN s_structure->* TO <structure>.
SELECT * FROM (p_table) INTO <structure>.
  WRITE / <structure>.
ENDSELECT.


-Définition du field-symbol
Avant de pouvoir utiliser le field-symbol pour recevoir des données en tant que table interne, il faut affecter le field-symbol, le faire pointer sur l'objet auquel il doit faire référence. Avant cette étape la, le field-symbol n'est pas typé.
L'étape précédent les 2 pré-cités est donc celle-ci
Code: Tout sélectionner
...
FIELD-SYMBOLS <table> TYPE STANDARD TABLE.
FIELD-SYMBOLS <structure> TYPE ANY.
DATA t_table TYPE REF TO data.
...
CREATE DATA t_table TYPE TABLE OF (p_table).
ASSIGN t_table->* TO <table>.

SELECT * FROM (p_table) INTO TABLE <table>.
...


Voici donc la totalité du code correspondant à l'objectif
Code: Tout sélectionner
*declarations
FIELD-SYMBOLS <table> TYPE STANDARD TABLE.
FIELD-SYMBOLS <structure> TYPE ANY.
DATA t_table TYPE REF TO data.

*ecran de selection
PARAMETERS p_table TYPE tabname16 OBLIGATORY.

*1)declaration dynamique du type de table et affectation au field-symbol
CREATE DATA t_table TYPE TABLE OF (p_table).
ASSIGN t_table->* TO <table>.

*2)chargement de la table interne (représentée par le field symbol)
SELECT * FROM (p_table) INTO TABLE <table>.
*3)boucle sur la table interne et affichage des données.
LOOP AT <table> ASSIGNING <structure>.
  WRITE / <structure>.
ENDLOOP.


Une dernière remarque: L'affichage du contenu de table via le WRITE n'est pas idéal car un peu indigeste à lire. De plus, je ne sais pas comment se comporte le traitement en cas de structure de table un peu "particulière" (deep stucture, zones de type string)... amon avis, pas très bien.
on pourrait envisager un affichage sous forme ALV (dynamique, évidemment ;) )

Enfin, tu trouveras sur un de mes précédents post un sujet se rapprochant pas mal de ton sujet http://www.sap-quest.com/topic215.html
thomas
'si il n'y a pas de solution, c'est qu'il n'y a pas de problème'
Avatar de l’utilisateur
thoul
Posteur confirmé
Posteur confirmé
 
Messages: 62
Inscription: 26 Juillet 2010, 10:56


Retourner vers ABAP

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités