1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
|
*- Données globales
*-- Table internes
DATA : t_dyntab TYPE TABLE OF dntab,
t_fcat TYPE lvc_t_fcat,
*-- Structure de table
s_fcat TYPE lvc_s_fcat,
s_dyntab LIKE LINE OF t_dyntab,
*-- Pointeur (Références)
o_reftab TYPE REF TO data.
*-- Field symbols
FIELD-SYMBOLS : <t_tab> TYPE table,
<s_tab> TYPE ANY,
<field> TYPE ANY.
*- Sélection
PARAMETERS p_tabnam TYPE dntab-tabname
DEFAULT 'SPFLI'. "Nom de table db
START-OF-SELECTION.
*Création de la table interne
*Récupération de la structure de la table DB
CALL FUNCTION 'NAMETAB_GET'
EXPORTING
langu = sy-langu
tabname = p_tabnam
TABLES
nametab = t_dyntab. "Contient la liste des champs
*Création du field catalog correspondant à la structure de la table
LOOP AT t_dyntab INTO s_dyntab.
s_fcat-fieldname = s_dyntab-fieldname.
s_fcat-ref_field = s_dyntab-fieldname.
s_fcat-ref_table = s_dyntab-tabname.
APPEND s_fcat TO t_fcat .
ENDLOOP. "AT t_dyntab INTO s_dyntab.
*Création d'une référence (pointeur) sur la table interne
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = t_fcat
IMPORTING
ep_table = o_reftab.
*Référencement du pointeur sur la table interne
ASSIGN o_reftab->* TO <t_tab>.
CHECK sy-subrc IS INITIAL.
*Sélection des données.
SELECT * FROM (p_tabnam)
INTO CORRESPONDING FIELDS OF TABLE <t_tab>
UP TO 25 ROWS. "(test = récup les 25 1ère lignes de SPFLI)
*- Affichage brut pour le test...
* Pour une récupération des infos plus précise, utiliser le ASSIGN
* COMPONENT ... OF STRUCTURE ...
LOOP AT <t_tab> ASSIGNING <s_tab>.
DO.
ASSIGN COMPONENT sy-index OF STRUCTURE <s_tab> TO <field>.
IF NOT sy-subrc IS INITIAL.
WRITE :/ ''.
EXIT.
ELSE.
WRITE : <field>.
ENDIF.
ENDDO.
ENDLOOP. "AT <t_tab> ASSIGNING <s_tab>. |
Partager