Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

 DESCRIBE TABLE <itab-Name> LINES <variable>

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

Ответ 2

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

variable = lines( itab_name ).

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

Ответ 3

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

DESCRIBE TABLE <itab-Name> LINES <variable>

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

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

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

Пример 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.

Результат:

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

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

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

Ответ 5

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

Ответ 6

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

Ответ 7

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

Пример:

LOOP AT itab INTO workarea
        WHERE tablefield = value.

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

ENDLOOP.

Ответ 8

data: vcnt(4).

clear vcnt.

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

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

Ответ 9

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

LOOP AT intTab.

  AT END OF value.

    result = sy-tabix.

    write result.  

  ENDAT.

ENDLOOP.