Как получить количество строк внутренней таблицы? Наверное, я могу зациклиться на нем. Но должен быть более здравый путь.
Я не знаю, имеет ли это значение, но код должен работать на версии 4.6c.
Как получить количество строк внутренней таблицы? Наверное, я могу зациклиться на нем. Но должен быть более здравый путь.
Я не знаю, имеет ли это значение, но код должен работать на версии 4.6c.
Вы можете использовать следующую функцию:
DESCRIBE TABLE <itab-Name> LINES <variable>
После вызова переменная содержит количество строк внутренней таблицы.
Для этой задачи также есть встроенная функция:
variable = lines( itab_name ).
Так же, как "чистый" синтаксис ABAP, описанный IronGoofy, функция "lines()" записывает количество строк таблицы itab_name в переменную.
Рядом с рекомендуемым
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) или описать таблицу.
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
Функциональный модуль EM_GET_NUMBER_OF_ENTRIES также будет содержать количество строк. Он принимает 1 параметр - имя таблицы.
вы также можете использовать OPEN Sql для поиска количества строк, используя предложение COUNT Grouping, а также системное поле SY-LINCT для подсчета строк (ROWS) вашей таблицы.
Если я правильно понял ваш вопрос, вы хотите знать номер строки во время условного цикла над внутренней таблицей. Системную переменную sy-tabix можно использовать, если вы работаете с внутренними таблицами. Пожалуйста, обратитесь к документации ABAP, если вам нужна дополнительная информация (особенно глава внутренняя обработка таблицы).
Пример:
LOOP AT itab INTO workarea
WHERE tablefield = value.
WRITE: 'This is row number ', sy-tabix.
ENDLOOP.
data: vcnt(4).
clear vcnt.
LOOP at itab WHERE value = '1'.
add 1 to vcnt.
ENDLOOP.
Ответ будет 3. (vcnt = 3).
Я не думаю, что для такого результата есть параметр SAP. Хотя код ниже будет поставляться.
LOOP AT intTab.
AT END OF value.
result = sy-tabix.
write result.
ENDAT.
ENDLOOP.