ALV 调用标准程序并获取结果

导语:最近需求需要获取一个函数的结果,但是这个结果是ALV显示的,但是只需要他的数据,不需要他的展示。

需求:获取到函数【K_KKB_KKBCS_ORDER_REPORT】的ALV输出内表得值。

在这里插入图片描述
在这里插入图片描述

实现方法:
调用 cl_salv_bs_runtime_info=>get_data_ref
这里以带有ALV的函数为例,也可以直接通过SUBMIT来获取标准程序的内表

先封装一个程序

REPORT zcor007c.

DATA:ls_time_range  TYPE kkb_time_range.

PARAMETERS: p_aufnr TYPE aufk-aufnr.


START-OF-SELECTION.

  CALL FUNCTION 'K_KKB_KKBCS_ORDER_REPORT'
    EXPORTING
      i_aufnr          = p_aufnr
    EXCEPTIONS
      object_not_found = 1
      no_data          = 2
      no_authority     = 3
      OTHERS           = 4.
  IF sy-subrc <> 0.
* Implement suitable error handling here
  ENDIF.
FIELD-SYMBOLS <lt_data> TYPE STANDARD TABLE. "定义承接数据的动态内表
DATA lcl_data TYPE REF TO data.
DATA(lv_datum) = sy-datum + 1.

"初始设置
cl_salv_bs_runtime_info=>set( EXPORTING display  = abap_false
                                        metadata = abap_false
                                           data  = abap_true ).

"调用封装好的程序
SUBMIT zcor007c WITH p_aufnr = '100000001' AND RETURN.

IF sy-subrc = 0.
  "获取ALV内表的值
  TRY .
      cl_salv_bs_runtime_info=>get_data_ref( IMPORTING r_data = lcl_data ).
    CATCH cx_salv_bs_sc_runtime_info INTO DATA(cx_error).

  ENDTRY.
  "清空所有变量  一定要清,不然可能会对自己的ALV展示会有影响
  cl_salv_bs_runtime_info=>clear_all( ).

  ASSIGN lcl_data->* TO <lt_data>.
  CHECK <lt_data> IS ASSIGNED.
ENDIF.

结果展示:
在这里插入图片描述

说明:如果A程序中SUBMIT一个程序,B程序再继续用上面的方法SUBMIT是不支持的,可以通过程序间调用FORM实现。

*&---------------------------------------------------------------------*
*& Form frm_alv_display
*&---------------------------------------------------------------------*
*& 提供给其他程序调用
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM zcor020 TABLES et_out r_bukrs r_budat r_werks.

  s_bukrs[] = r_bukrs[].
  s_budat[] = r_budat[].
  s_werks[] = r_werks[].

  CLEAR: gt_out,gt_so,gt_pc,gt_pt,gs_so,gt_co020,gt_mara,gt_lfa1,gt_t001l,gt_t023t.
  CLEAR:gs_so,gs_co020,gs_mara,gs_lfa1,gs_t001l,gs_t023t.

  p_t1 = 30.
  p_unit1 = '天'.
  p_t2 = 60.
  p_unit2 = p_unit1.
  p_t3 = 90.
  p_unit3 = p_unit1.
  p_t4 = 180.
  p_unit4 = p_unit1.
  p_t5 = 270.
  p_unit5 = p_unit1.
  p_t6 = 365.
  p_unit6 = p_unit1.

  PERFORM frm_get_data.

  PERFORM frm_deal_data.

  MOVE-CORRESPONDING gt_out[] TO et_out[].

ENDFORM.

作者:小飞猪猪猪猪猪猪猪–CSDN

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
1. 首先,在ALV的程序里面定义一个新的按钮,用于触发打印操作。 2. 在按钮的事件处理中,调用函数 module_name = 'SSF_FUNCTION_MODULE_NAME',获取Smartform的函数模块名。 3. 然后,通过函数 module_name = 'SSF_FUNCTION_MODULE_NAME' 获取的函数模块名,调用函数 module_name,传入需要打印的数据。 4. 最后,调用函数 'SSF_FUNCTION_MODULE_NAME',传入Smartform的函数模块名和需要打印的数据,即可完成打印操作。 以下是示例代码: 1. 定义按钮 DATA: ok_code TYPE sy-ucomm. CASE ok_code. WHEN 'PRINT'. lv_layout-info_fname = 'ZALV_SMARTFORM'. CALL METHOD cl_gui_alv_grid=>get_selected_rows RECEIVING value = lt_sel. LOOP AT lt_sel INTO ls_sel. READ TABLE gt_outtab INTO ls_outtab INDEX ls_sel-index. APPEND ls_outtab TO lt_print. ENDLOOP. CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME' EXPORTING formname = lv_layout-info_fname IMPORTING fm_name = lv_fm_name. CALL FUNCTION lv_fm_name EXPORTING control_parameters = gt_cparams output_options = gt_oparams user_settings = gt_usparams TABLES t_outtab = lt_print. CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME' EXPORTING formname = lv_layout-info_fname IMPORTING fm_name = lv_fm_name EXCEPTIONS no_form = 1 no_function_module = 2 others = 3. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ELSE. CALL FUNCTION lv_fm_name EXPORTING control_parameters = gt_cparams output_options = gt_oparams user_settings = gt_usparams TABLES t_outtab = lt_print. ENDIF. ENDCASE.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小飞猪猪猪猪猪猪猪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值