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

    技术2022-05-19  20

     

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

    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 parametersDATA 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_CATLOGFORM 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_DISPLAYFORM f_status_set USING rt_extab TYPE slis_t_extab.  SET PF-STATUS 'STATUS001' EXCLUDING rt_extab.ENDFORM.                    "SET_PF_STATUSFORM 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_COMMANDFORM f_print .CALL FUNCTION '/1BCDWB/SF00000413'.ENDFORM.                    " F_PRINT

     


    最新回复(0)