Системная переменная SY-DBCNT должна указывать количество выбранных строк, но только после завершения выбора.
Альтернативой SELECT-ENDSELECT является выбор всех строк одновременно с помощью SELECT INTO TABLE ввнутренняя таблица (при условии, что вы не выбираете слишком много сразу!).
Например:
data: lt_t000 type table of t000.
select * from t000 into table lt_t000.
Это выберет все из этой таблицы за один раз и войдет во внутреннюю таблицу.Итак, что вы можете сделать, это объявить внутреннюю таблицу со всеми полями в настоящее время в вашем предложении INTO, а затем указать INTO TABLE для вашей внутренней таблицы.
После выполнения SELECT SY-DBCNT будет содержать число выбранныхСтроки.
Вот полный пример, построенный вокруг оператора SELECT в вашем вопросе, который я не проверял на здравомыслие, поэтому я надеюсь, что он работает!
tables: spfli.
select-options: s_carrid for spfli-carrid.
* Definition of the line/structure
data: begin of ls_dat,
carrid type s_carr_id,
carrname type s_carrname,
planetype type s_planetye,
fldate type s_date,
price type s_price,
cityfrom type s_from_cit,
cityto type s_to_city,
end of ls_dat.
* Definition of the table:
data: lt_dat like table of ls_dat.
* Select data
select spfli~carrid scarr~carrname sflight~planetype sflight~fldate sflight~price spfli~cityfrom spfli~cityto
into table lt_dat
from spfli
inner join sflight
on spfli~carrid = sflight~carrid and spfli~connid = sflight~connid
inner join scarr
on scarr~carrid = spfli~carrid
where spfli~carrid = s_carrid-low.
* Output data
write: 'Total records selected', sy-dbcnt.
loop at lt_dat into ls_dat.
write: / ls_dat-carrid, ls_dat-carrname, ls_dat-planetype, ls_dat-fldate, ls_dat-price, ls_dat-cityfrom, ls_dat-cityto.
endloop.
Примечание: Отчет (Тип 1) программы все еще поддерживают идею объявления внутренних таблиц со строками заголовков для обратной совместимости, но это не приветствуется!Надеюсь, что это работает!