Cómo conseguir recuento de filas de la tabla interna en abap?

¿Cómo puedo obtener el número de filas de una tabla interna? Supongo que puedo bucle en él. Pero debe haber una manera más sana.

No sé si se hace una diferencia, pero el código se debe ejecutar en 4.6 c versión.

InformationsquelleAutor Igal Serban | 2008-12-26

9 Kommentare

  1. 48

    Puede utilizar la siguiente función:

     DESCRIBE TABLE <itab-Name> LINES <variable>
    

    Después de la llamada, la variable contiene el número de filas de la tabla interna .

  2. 70

    También hay una función incorporada de esta tarea:

    variable = lines( itab_name ).
    

    Igual que el de «puro» ABAP sintaxis descrita por IronGoofy, la función de «líneas ( )», escribe el número de líneas de la tabla itab_name en la variable.

    • Esta es muy superior a la de describe debido al hecho de que usted puede utilizar como una línea de operación. Por ejemplo: If lines ( itab ) > 0. itab[ 1 ]-text = 'Potato'. endif. o coeff = lines( lt_relevant ) / lines( lt_all ).
  3. 10

    Junto a la recomendada

    DESCRIBE TABLE <itab-Name> LINES <variable>
    

    también existe la variable de sistema SY-TFILL.

    De documentación:

    Después de las declaraciones DESCRIBIR TABLA, BUCLE y LEER la TABLA, el número de filas de la accedido tabla interna.

    Script de ejemplo:

    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.
    

    El resultado:

    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
    

    Por favor, llamar la atención de el valor 0 para la 2ª entrada: SY-TFILL no se actualiza con cada paso, sólo después de que el primer bucle.

    Recomiendo el uso de SY-TFILL sólo, si usted lo necesita directa después de la READ(1)… Si hay otros comandos entre el READ y el uso de SY-TFILL, siempre existe el peligro de un cambio de la variable de sistema.

    (1) o describir tabla.

  4. 0

    El módulo funcional EM_GET_NUMBER_OF_ENTRIES también proporcionará el número de filas. Toma parámetro 1 – el nombre de la tabla.

  5. -1
    data: vcnt(4).
    
    clear vcnt.
    
    LOOP at itab WHERE value = '1'.
      add 1 to vcnt.
    ENDLOOP.
    

    La respuesta será 3. (vcnt = 3).

    • -1, esta es la CPU y mucho peor que el uso de DESCRIBE o lines( ).
  6. -1

    también puede utilizar OPEN Sql para encontrar el número de filas con el RECUENTO de la Agrupación de la cláusula y también hay campo sistema SY-LINCT para contar las líneas(FILAS) de la tabla.

    • Esto no funciona en tablas internas. -1
    • scn.sap.com/thread/699033 @tomdemuyt esta es la forma de agrupación de la Cláusula se utilizan
    • Chicos, una tabla interna ( por la pregunta ), no es una tabla de base de datos. El RECUENTO es para el conteo de líneas en una tabla de base de datos ( por lo tanto no es pertinente a la cuestión ).
  7. -2

    si entiendo tu pregunta correctamente, usted quiere saber el número de fila durante una condición de bucle a través de una tabla interna.
    Usted puede utilizar la variable del sistema sy-tabix si usted trabaja con tablas internas. Por favor refiérase a la ABAP documentación si necesita más información (en especial el capítulo sobre tabla interna de procesamiento de).

    Ejemplo:

    LOOP AT itab INTO workarea
            WHERE tablefield = value.
    
         WRITE: 'This is row number ', sy-tabix.
    
    ENDLOOP.
    
    • El uso de sy-tabix cuidadosamente, se actualiza en cada llamada al BUCLE de LECTURA de la TABLA… y a veces puede tener un valor inesperado.
  8. -3

    No creo que hay un SAP parámetro para ese tipo de resultados. A pesar de que el código de abajo va a entregar.

    LOOP AT intTab.
    
      AT END OF value.
    
        result = sy-tabix.
    
        write result.  
    
      ENDAT.
    
    ENDLOOP.
    
    • -1, esta es la CPU y mucho peor que el uso de DESCRIBE o lines( ).

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea