web-dev-qa-db-fra.com

Comment obtenir le nombre de lignes de la table interne dans abap?

Comment puis-je obtenir le nombre de lignes d'une table interne? Je suppose que je peux faire une boucle dessus. Mais il doit y avoir un moyen plus sain.

Je ne sais pas si cela fait une différence, mais le code devrait fonctionner sur la version 4.6c.

31
Igal Serban

Vous pouvez utiliser la fonction suivante:

 DESCRIBE TABLE <itab-Name> LINES <variable>

Après l'appel, la variable contient le nombre de lignes de la table interne.

47
Thorsten

Il existe également une fonction intégrée pour cette tâche:

variable = lines( itab_name ).

Tout comme la syntaxe ABAP "pure" décrite par IronGoofy , la fonction "lines ()" écrit le nombre de lignes de la table nom_lab dans la variable.

67
user51478

A côté du recommandé 

DESCRIBE TABLE <itab-Name> LINES <variable>

il y a aussi la variable système SY-TFILL.

De la documentation:

Après les instructions DESCRIBE TABLE, LOOP AT et READ TABLE, le nombre de lignes de la table interne accédée.

Exemple de script:

REPORT ytest.

DATA pf_exclude TYPE TABLE OF sy-ucomm WITH HEADER LINE.

START-OF-SELECTION.
  APPEND '1' TO pf_exclude.
  APPEND '2' TO pf_exclude.
  APPEND '3' TO pf_exclude.
  APPEND '4' TO pf_exclude.

  WRITE: / 'sy-tfill = ', sy-tfill.

  DESCRIBE TABLE pf_exclude.
  WRITE: / 'sy-tfill = ', sy-tfill, 'after describe table'.

  sy-tfill = 0. "Reset
  READ TABLE pf_exclude INDEX 1 TRANSPORTING NO FIELDS.
  WRITE: / 'sy-tfill = ', sy-tfill, 'after read table'.


  sy-tfill = 0. "Reset
  LOOP AT pf_exclude.
    WRITE: / 'sy-tfill = ', sy-tfill, 'in loop with', pf_exclude.
    sy-tfill = 0. "Reset
  ENDLOOP.

Le résultat:

sy-tfill =           0
sy-tfill =           4  after describe tabl
sy-tfill =           4  after read table
sy-tfill =           4  in loop with 1
sy-tfill =           0  in loop with 2
sy-tfill =           0  in loop with 3
sy-tfill =           0  in loop with 4

Veuillez faire attention à la valeur 0 pour la 2e entrée: SY-TFILL n'est pas mis à jour à chaque étape, uniquement après la première boucle.

Je recommande l'utilisation de SY-TFILL uniquement, si vous en avez besoin directement après la READ (1) ... S'il existe d'autres commandes entre la READ et l'utilisation de SY-TFILL, il y a toujours un risque de changement du système variable.

(1) ou décrire la table.

9
knut
  DATA : V_LINES TYPE I. "declare variable
  DESCRIBE TABLE <ITAB> LINES V_LINES. "get no of rows
  WRITE:/ V_LINES. "display no of rows

Refreance: http://www.sapnuts.com/courses/core-abap/internal-table-work-area.html

3
Ashok Kumar Reddy S

Le module fonctionnel EM_GET_NUMBER_OF_ENTRIES fournira également le nombre de lignes. Il faut 1 paramètre - le nom de la table.

0
Cameron Castillo