Question

Comment puis-je obtenir le nombre de lignes d'une table interne? Je suppose que je peux boucle sur elle. Mais il doit y avoir une façon plus saine.

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

Était-ce utile?

La solution

Vous pouvez utiliser la fonction suivante:

 DESCRIBE TABLE <itab-Name> LINES <variable>

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

Autres conseils

Il y a aussi une fonction intégrée pour cette tâche:

variable = lines( itab_name ).

Tout comme la « pure » syntaxe ABAP décrit par IronGoofy , la fonction « lignes () », écrit le nombre de les lignes du tableau itab_name dans la variable.

A côté de la recommandation

DESCRIBE TABLE <itab-Name> LINES <variable>

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

De la documentation:

  

Après les déclarations DÉCRIVENT TABLE, LOOP AT et table de lecture, le nombre de lignes de la table interne accessible.

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

S'il vous plaît attirer l'attention de la valeur 0 pour la 2ème entrée: SY-TFILL est pas mis à jour à chaque étape, seulement après la première boucle

.

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

(1) ou décrire table.

  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 / table-travail interne area.html

Les EM_GET_NUMBER_OF_ENTRIES de modules fonctionnels fourniront également le nombre de lignes. Il faut 1 paramètre -. Le nom de la table

data: vcnt(4).

clear vcnt.

LOOP at itab WHERE value = '1'.
  add 1 to vcnt.
ENDLOOP.

La réponse sera 3. (vcnt = 3).

vous pouvez également utiliser pour trouver OUVERT Sql le nombre de lignes en utilisant la clause COUNT regroupement et aussi il y a champ système SY-LINCT pour compter les lignes (lignes) de votre table.

si je comprends bien votre question, vous voulez connaître le numéro de la ligne au cours d'une boucle conditionnelle sur une table interne. Vous pouvez utiliser la variable système sy-tabix si vous travaillez avec des tables internes. S'il vous plaît se référer à la documentation ABAP si vous avez besoin de plus amples informations (en particulier le chapitre sur

Je ne pense pas qu'il y ait un paramètre de SAP pour ce genre de résultat. Bien que le code ci-dessous livrera.

LOOP AT intTab.

  AT END OF value.

    result = sy-tabix.

    write result.  

  ENDAT.

ENDLOOP.
scroll top