Abap 如何使用cl_salv_bs_runtime_info

Abap 如何使用cl_salv_bs_runtime_info,abap,alv,Abap,Alv,我正在尝试检索程序RFKSLD00生成的ALV表,但无法使cl\u salv\u bs\u runtime\u info正常工作。以下是我所拥有的: REPORT ZSAM3. TYPES: BEGIN OF ty_report, rec_acc TYPE skont, vendor TYPE LFA1-LIFNR, jan_deb TYPE BSEG-WRBTR, jan_cred TYPE BSEG-WRBT

我正在尝试检索程序
RFKSLD00
生成的ALV表,但无法使
cl\u salv\u bs\u runtime\u info
正常工作。以下是我所拥有的:

REPORT  ZSAM3.
 TYPES: BEGIN OF ty_report,
          rec_acc TYPE skont,
          vendor TYPE LFA1-LIFNR,
          jan_deb TYPE BSEG-WRBTR,
          jan_cred TYPE BSEG-WRBTR,
          feb_deb TYPE BSEG-WRBTR,
          feb_cred TYPE BSEG-WRBTR,
          mar_deb TYPE BSEG-WRBTR,
          mar_cred TYPE BSEG-WRBTR,
          apr_deb TYPE BSEG-WRBTR,
          apr_cred TYPE BSEG-WRBTR,
          may_deb TYPE BSEG-WRBTR,
          may_cred TYPE BSEG-WRBTR,
          jun_deb TYPE BSEG-WRBTR,
          jun_cred TYPE BSEG-WRBTR,
          jul_deb TYPE BSEG-WRBTR,
          jul_cred TYPE BSEG-WRBTR,
          aug_deb TYPE BSEG-WRBTR,
          aug_cred TYPE BSEG-WRBTR,
          sep_deb TYPE BSEG-WRBTR,
          sep_cred TYPE BSEG-WRBTR,
          oct_deb TYPE BSEG-WRBTR,
          oct_cred TYPE BSEG-WRBTR,
          nov_deb TYPE BSEG-WRBTR,
          nov_cred TYPE BSEG-WRBTR,
          dec_deb TYPE BSEG-WRBTR,
          dec_cred TYPE BSEG-WRBTR,
          acc_bal_deb TYPE BSEG-WRBTR,
          acc_bal_cred TYPE BSEG-WRBTR,
        END OF ty_report,
        tt_report TYPE TABLE OF ty_report.
DATA:  lt_report TYPE tt_report,
       lv_ukurs type tcurr-ukurs,
       Tcurr1 type tcurr,
       fieldname(4) type c,
       fnamedebit(20) type c,
       fnamecredit(20) type c.
FIELD-SYMBOLS: <fs_rep> LIKE LINE OF lt_report.
 select single ukurs from tcurr
        into lv_ukurs
        where fcurr = 'EUR'
        and   tcurr = 'AUD'. "<- your  local currency
FIELD-SYMBOLS: <lt_pay_data>   TYPE ANY TABLE,
               <pos_data> TYPE ANY.
DATA lr_pay_data              TYPE REF TO data.
  cl_salv_bs_runtime_info=>set(
    EXPORTING display  = abap_false
              metadata = abap_false
              structure = ''
              data     = abap_true ).
SUBMIT RFKSLD00 via SELECTION-SCREEN and return.
TRY.
      cl_salv_bs_runtime_info=>get_data(
        IMPORTING t_data = lr_pay_data ).
      ASSIGN lr_pay_data->* TO <lt_pay_data>.
    CATCH cx_salv_bs_sc_runtime_info.
      MESSAGE `Unable to retrieve ALV data` TYPE 'E'.
  ENDTRY.
LOOP AT <lt_pay_data> ASSIGNING <pos_data>.
 APPEND INITIAL LINE to lt_report ASSIGNING <fs_rep>.
 MOVE-CORRESPONDING <pos_data> TO <fs_rep>.
 CASE <pos_data>-monat. "<- your period
  WHEN '01'.
   <fs_rep>-jan_deb = w_tab-debit.
   <fs_rep>-jan_cred = w_tab-credit.
   fieldname = 'jan'.
  WHEN '02'.
   <fs_rep>-feb_deb = w_tab-debit.
   <fs_rep>-feb_cred = w_tab-credit.
   fieldname = 'feb'.
  WHEN '03'.
   <fs_rep>-mar_deb = w_tab-debit.
   <fs_rep>-mar_cred = w_tab-credit.
   fieldname = 'mar'.
   WHEN '04'.
   <fs_rep>-apr_deb = w_tab-debit.
   <fs_rep>-apr_cred = w_tab-credit.
   fieldname = 'apr'.
   WHEN '05'.
   <fs_rep>-may_deb = w_tab-debit.
   <fs_rep>-may_cred = w_tab-credit.
   fieldname = 'may'.
   WHEN '06'.
   <fs_rep>-jun_deb = w_tab-debit.
   <fs_rep>-jun_cred = w_tab-credit.
   fieldname = 'jun'.
   WHEN '07'.
   <fs_rep>-jul_deb = w_tab-debit.
   <fs_rep>-jul_cred = w_tab-credit.
   fieldname = 'jul'.
   WHEN '08'.
   <fs_rep>-aug_deb = w_tab-debit.
   <fs_rep>-aug_cred = w_tab-credit.
   fieldname = 'aug'.
   WHEN '09'.
   <fs_rep>-sep_deb = w_tab-debit.
   <fs_rep>-sep_cred = w_tab-credit.
   fieldname = 'sep'.
   WHEN '10'.
   <fs_rep>-oct_deb = w_tab-debit.
   <fs_rep>-oct_cred = w_tab-credit.
   fieldname = 'oct'.
   WHEN '11'.
   <fs_rep>-nov_deb = w_tab-debit.
   <fs_rep>-nov_cred = w_tab-credit.
   fieldname = 'nov'.
   WHEN '12'.
   <fs_rep>-dec_deb = w_tab-debit.
   <fs_rep>-dec_cred = w_tab-credit.
   fieldname = 'dec'.
 ENDCASE.
concatenate '<fs_rep>' fieldname '_deb'into fnamedebit.
concatenate '<fs_rep>' fieldname '_cred'into fnamecredit.
  CALL FUNCTION 'CONVERT_TO_LOCAL_CURRENCY'
   EXPORTING
   DATE                    = sy-datum
   FOREIGN_CURRENCY        = 'EUR'
   LOCAL_CURRENCY          = 'AUD'
   FOREIGN_AMOUNT          = <fnamedebit>
   TYPE_OF_RATE            = 'M'
  IMPORTING
   EXCHANGE_RATE           = lv_ukurs
   LOCAL_AMOUNT            = <w_tab-debit>.
   CALL FUNCTION 'CONVERT_TO_LOCAL_CURRENCY'
   EXPORTING
   DATE                    = sy-datum
   FOREIGN_CURRENCY        = 'EUR'
   LOCAL_CURRENCY          = 'AUD'
   FOREIGN_AMOUNT          = <fnamecredit>
   TYPE_OF_RATE            = 'M'
  IMPORTING
   EXCHANGE_RATE           = lv_ukurs
   LOCAL_AMOUNT            = <w_tab-credit>.
ENDLOOP.
Write: 'Program End!'.
报告ZSAM3。
类型:从ty_报告开始,
rec_acc类型skont,
供应商类型LFA1-LIFNR,
jan_deb型BSEG-WRBTR,
jan_cred类型BSEG-WRBTR,
feb_deb型BSEG-WRBTR,
feb_cred类型BSEG-WRBTR,
mar_deb型BSEG-WRBTR,
mar_cred类型BSEG-WRBTR,
apr_deb型BSEG-WRBTR,
apr_cred类型BSEG-WRBTR,
may_deb型BSEG-WRBTR,
可认证BSEG-WRBTR型,
jun_deb型BSEG-WRBTR,
jun_cred类型BSEG-WRBTR,
jul_deb型BSEG-WRBTR,
7月cred型BSEG-WRBTR,
aug_deb型BSEG-WRBTR,
aug_cred类型BSEG-WRBTR,
sep_deb型BSEG-WRBTR,
sep_cred类型BSEG-WRBTR,
oct_deb型BSEG-WRBTR,
oct_cred类型BSEG-WRBTR,
nov_deb型BSEG-WRBTR,
nov_cred类型BSEG-WRBTR,
dec_deb型BSEG-WRBTR,
dec_cred类型BSEG-WRBTR,
acc_bal_deb型BSEG-WRBTR,
acc_bal_cred类型BSEG-WRBTR,
蒂尤报告结束,
TTU报告的TTU报告类型表。
数据:lt_报告类型tt_报告,
lv_ukurs型tcurr ukurs,
Tcurr1型tcurr,
字段名(4)类型c,
fnamedebit(20)c类,
fnamecredit(20)c类。
字段符号:如lt_报告的行。
从tcurr中选择单个ukurs
进入吕库斯
其中fcurr=‘欧元’
而tcurr='AUD'。“设定(
导出显示=abap\U false
metadata=abap\U false
结构=“”
数据=abap_真)。
通过选择屏幕提交RFKSLD00并返回。
尝试
cl_salv_bs_运行时_info=>get_数据(
导入t_数据=lr_支付数据)。
将lr_pay_数据->*分配给。
捕获cx\u salv\u bs\u sc\u runtime\u信息。
消息`无法检索ALV数据`类型'E'。
结束。
在分配时循环。
将初始行附加到lt_报告。
移动-对应于。

CASE-monat.“参数
T\u DATA
属于
类型,您正试图将
REF传递给DATA

您需要传递一个表变量

在您的示例中,可以这样做

TRY.
    ASSIGN lr_pay_data->* TO <lt_pay_data>.
    cl_salv_bs_runtime_info=>get_data(
      IMPORTING t_data = <lt_pay_data> ).
  CATCH cx_salv_bs_sc_runtime_info.
    MESSAGE `Unable to retrieve ALV data` TYPE 'E'.
ENDTRY.
试试看。
将lr_pay_数据->*分配给。
cl_salv_bs_运行时_info=>get_数据(
导入t_数据=)。
捕获cx\u salv\u bs\u sc\u runtime\u信息。
消息`无法检索ALV数据`类型'E'。
结束。

当然,首先你必须在某个时候初始化
lr\u pay\u数据,因为我在你的代码中看不到它。

如何初始化lr\u pay\u数据?@mj1261829它是由
cl\u salv\u bs\u runtime\u info=>get\u data
方法自动初始化的,如果执行时没有错误,你不需要手动执行。当然,您需要检查这一点(如果有错误),例如使用
if ASSIGNED
,不清楚您的问题是一般性的(如何从提交的程序中提取ALV数据),还是仅仅与此语法错误有关。正如我所知,这是一个非常普遍的问题(根据给定规范创建程序的一般步骤),你应该问另一个问题,解释整个上下文,你搜索了什么,你尝试了什么,你的疑问等等。阅读stackoverflow帮助和meta,了解如何提出此类问题。