submit应用实例全面实现一段代码多次使用(ALV显示然后打印)

来源:互联网 发布:豪华装修知乎 编辑:程序博客网 时间:2024/06/06 01:46

 

调用程序(该程序只是负责取数)

REPORT  ztest_pillar.
*----------------------------------------------------------------------*
*  define internal tables
*  定义内表
*
*----------------------------------------------------------------------*
DATA BEGIN  OF  W_DATA,
  sel_box type c,
  FID1 TYPE  STRING,
  NUM1 TYPE  ,
  NUM2 TYPE  ,
END    OF  W_DATA.
DATA : T_OUT LIKE  W_DATA OCCURS  0  WITH  HEADER  LINE .


*----------------------------------------------------------------------*
*  assign value to internal tables
*  给内表赋值
*
*----------------------------------------------------------------------*
DO  10  TIMES .
IF  SY-INDEX  < .
T_OUT-FID1 = 'A' .
T_OUT-NUM1 = SY-INDEX .
T_OUT-NUM2 = SY-INDEX  + .
ELSEIF  SY-INDEX  < .
T_OUT-FID1 = 'B' .
T_OUT-NUM1 = SY-INDEX  + .
T_OUT-NUM2 = SY-INDEX  + .
ELSE .
T_OUT-FID1 = 'C' .
T_OUT-NUM1 = SY-INDEX .
T_OUT-NUM2 = SY-INDEX  - .
ENDIF .
APPEND  T_OUT.
ENDDO .

*-----------------------------------------------------------------------*
*  call extenral program
*  调用外部程序
*
*-----------------------------------------------------------------------*
***  使用ABAP内存进行数据传递
EXPORT  T_OUT TO  MEMORY  ID  'T_OUT' .

*** 以下两种情况是调用程序被结束,被调用程序开始执行
* SUBMIT ZWRITE_DATA.

***  如果使用这种情况程序之间的数据访问就不能ABAP内存访问了
* LEAVE TO TRANSACTION 'ZGET_DATA'.

*** 以下两种情况是调用程序被打断,当被调用程序执行完毕之后,调用程序继续执行
*   插入一个新的INTERNAL SESSION,被调用程序运行完删除SESSION,继续执行调用程序
SUBMIT  Zwrite_data AND  RETURN .

 

 

 

 

 

被调用程序(负责显示和打印)

 REPORT  zwrite_data.
TYPE-POOLS: slis.
tables sflight.
*----------------------------------------------------------------------*
*  define internal tables
*  定义内表
*
*----------------------------------------------------------------------*
DATA BEGIN  OF  w_data,              "这里定义一个跟调用程序一样的内表结构
sel_box TYPE c,
fid1 TYPE  string,
num1 TYPE  ,
num2 TYPE  ,
END    OF  w_data.
DATA : t_out LIKE  w_data OCCURS  0  WITH  HEADER  LINE .

*alv parameters
DATA gt_fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE.
DATA layout TYPE slis_layout_alv.
*parameters text type sflight-connid.
*----------------------------------------------------------------------*
*  get data from sap memory and write out
*  从SAP内存读取数据然后打印输出
*
*----------------------------------------------------------------------*
START-OF-SELECTION.
REFRESH t_out.
IMPORT  t_out FROM  MEMORY  ID  'T_OUT' .
*t_out-fid1 = 'a'.
*t_out-num1 = '1'.
*t_out-num2 = '2'.
*APPEND t_out.
IF t_out[] IS INITIAL.
  MESSAGE '内表数据为空' TYPE 'I'.
  stop.
ENDIF.
FREE  MEMORY  ID  'T_OUT'.
PERFORM f_build_catlog.
PERFORM f_display.
END-OF-SELECTION.
*write 'love'.
FORM f_build_catlog .
DATA l_count TYPE VALUE 0.
DEFINE build_catlog.
  add to l_count.
  gt_fieldcat-col_pos = l_count.
  gt_fieldcat-fieldname = &1.
  gt_fieldcat-seltext_m = &2.
  append gt_fieldcat.
END-OF-DEFINITION.
build_catlog 'FID1' '变量1'.
build_catlog 'NUM1' '变量2'.
build_catlog 'NUM2' '变量3'.
layout-box_fieldname = 'SEL_BOX'.
ENDFORM.                    " F_BUILD_CATLOG

FORM f_display .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program       = sy-repid
      i_callback_pf_status_set = 'F_STATUS_SET'
      i_callback_user_command  = 'F_USER_COMMAND'
      is_layout                = layout
      it_fieldcat              = gt_fieldcat[]
    TABLES
      t_outtab                 = t_out
    EXCEPTIONS
      program_error            = 1
      OTHERS                   2.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
ENDFORM.                    " F_DISPLAY

FORM f_status_set USING rt_extab TYPE slis_t_extab.
  SET PF-STATUS 'STATUS001' EXCLUDING rt_extab.
ENDFORM.                    "SET_PF_STATUS


FORM f_user_command USING r_comm LIKE sy-ucomm
          rs_selfield TYPE slis_selfield.
  CASE r_comm.
    WHEN 'BACK'.
      LEAVE TO LIST-PROCESSING.
    WHEN 'CANCEL'.
      LEAVE TO TRANSACTION 'SE80'.
    WHEN 'PRINT'.
      PERFORM f_print.
    WHEN OTHERS.
  ENDCASE.
ENDFORM.                    "USER_COMMAND


FORM f_print .
CALL FUNCTION '/1BCDWB/SF00000413'.
ENDFORM.                    " F_PRINT

 

原创粉丝点击