Как получить количество строк внутренней таблицы в abap? - PullRequest
32 голосов
/ 27 декабря 2008

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

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

Ответы [ 9 ]

69 голосов
/ 05 января 2009

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

variable = lines( itab_name ).

Так же, как и «чистый» синтаксис ABAP, описанный IronGoofy , функция «lines ()» записывает количество строк таблицы itab_name в переменную.

47 голосов
/ 27 декабря 2008

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

 DESCRIBE TABLE <itab-Name> LINES <variable>

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

10 голосов
/ 18 сентября 2015

рядом с рекомендуемым

DESCRIBE TABLE <itab-Name> LINES <variable>

есть также системная переменная SY-TFILL.

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

После операторов DESCRIBE TABLE, LOOP AT и READ TABLE - количество строк доступной внутренней таблицы.

Пример сценария:

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-й записи: SY-TFILL не обновляется с каждым шагом, только после первого цикла.

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

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

3 голосов
/ 06 февраля 2014
  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

0 голосов
/ 30 августа 2017

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

0 голосов
/ 29 ноября 2013

Вы также можете использовать OPEN Sql для определения количества строк с помощью предложения COUNT Grouping, а также есть системное поле SY-LINCT для подсчета строк (ROWS) вашей таблицы.

0 голосов
/ 24 ноября 2011
data: vcnt(4).

clear vcnt.

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

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

0 голосов
/ 23 апреля 2011

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

LOOP AT intTab.

  AT END OF value.

    result = sy-tabix.

    write result.  

  ENDAT.

ENDLOOP.
0 голосов
/ 07 марта 2009

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

Пример:

LOOP AT itab INTO workarea
        WHERE tablefield = value.

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

ENDLOOP.
...