Как получить количество строк внутренней таблицы в abap?

Как получить количество строк внутренней таблицы? Я предполагаю, что я могу сделать цикл на ней. Но должен быть более разумный способ.

Не знаю, имеет ли это значение, но код должен работать на версии 4.6c.

Для этой задачи также существует встроенная функция:

variable = lines( itab_name ).

Подобно "чистому" синтаксису ABAP, описанному в IronGoofy, функция "lines( )" записывает в переменную количество строк таблицы itab_name.

Комментарии (1)
Решение

Вы можете использовать следующую функцию:

 DESCRIBE TABLE  LINES 

После вызова переменная содержит количество строк внутренней таблицы .

Комментарии (0)

Помимо рекомендованного

DESCRIBE TABLE  LINES 

существует также системная переменная сы-TFILL.

Из документации:

после утверждения описывают таблицы, петли и читать таблицы, число строк доступ к внутренней таблице.

Пример скрипта:

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.

Результат:

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

Обратите внимание на значение 0 для 2-го запись: сы-TFILL не обновлялась с каждым шагом, только после первого цикла.

Я рекомендую использование сы-TFILL только, если вам это нужно непосредственно после "читать" (1)... Если есть другие команды между "читать" и использование сы-TFILL, всегда существует опасность изменения системной переменной.

(1) или описать таблицу.

Комментарии (0)
  DATA : V_LINES TYPE I. "declare variable
  DESCRIBE TABLE  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

Комментарии (0)

Функциональные EM_GET_NUMBER_OF_ENTRIES модуль также обеспечивает подсчет строк. Он принимает 1 параметр - имя таблицы.

Комментарии (0)

вы также можете использовать откройте SQL, чтобы найти количество строк, используя граф П. группирование и также есть поле системы СИ-LINCT для подсчета строк(строк) таблицы.

Комментарии (3)
data: vcnt(4).

clear vcnt.

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

Ответ будет 3. (vcnt = 3).`

Комментарии (1)

если я правильно понял ваш вопрос, вы хотите узнать номер строки во время условного цикла над внутренней таблицей. При работе с внутренними таблицами вы можете использовать системную переменную sy-tabix. Пожалуйста, обратитесь к документации ABAP, если вам нужна дополнительная информация (особенно к главе Обработка внутренних таблиц).

Пример:

LOOP AT itab INTO workarea
        WHERE tablefield = value.

     WRITE: 'This is row number ', sy-tabix.

ENDLOOP.
Комментарии (1)

Я не'т думаю, что есть параметр SAP для такого результата. Хотя код ниже будет доставлять.

LOOP AT intTab.

  AT END OF value.

    result = sy-tabix.

    write result.  

  ENDAT.

ENDLOOP.
Комментарии (1)