SAP ALV OO 选择行打印

&---------------------------------------------------------------------*
*& Report  ZSDF001
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT ZSDF001.
INCLUDE ZSDF001_INC_001.
TABLES:VTTP,LIPS,LIKP,KNA1.
TYPES:BEGIN OF TY_HEADER,
      NAME1 LIKE KNA1-NAME1,"客户名称
      ORT01 LIKE KNA1-ORT01,"城市
      REGIO LIKE KNA1-REGIO,"地区
      STRAS LIKE KNA1-STRAS,"街道
      TELF1 LIKE KUWEV-TELF1,"电话
      VBELN LIKE LIKP-VBELN,"交货单号
      VGBEL LIKE LIPS-VGBEL,"订单号
      BLDAT LIKE LIKP-BLDAT,"日期
      LNUMT LIKE T300T-LNUMT,"仓库
    END OF TY_HEADER.
*单据抬头结束
*单据明细开始
TYPES:BEGIN OF TY_ITEMS,
     GV_NAME  LIKE KNA1-NAME1,"客户名称
     GV_KUNAG LIKE LIKP-KUNAG,"客户编号(售达方)
     GV_MATNR LIKE LIPS-MATNR,"物料编码
     GV_ARKTX LIKE LIPS-ARKTX,"物料描述
     GV_LFIMG LIKE LIPS-LFIMG,"交货数量
    END OF TY_ITEMS.
*单据明细结束
DATA:fm_name TYPE rs38l_fnam.
DATA:itemsname(32TYPE c.
DATA:headername(32TYPE c.
DATA:GT_ITEMS TYPE TY_ITEMS OCCURS 0.
DATA:WA_ITEMS TYPE TY_ITEMS.
DATA:lt_prt_temp TYPE TY_ITEMS OCCURS 0.
*DATA:gs_tab type TY_ITEMS,
*     gt_tab type TABLE OF GT_ITEMS.

DATA: alv  TYPE REF TO cl_salv_table.
DATA columns TYPE REF TO cl_salv_columns_table.
DATA column TYPE REF TO cl_salv_column_table.
data lr_selections TYPE REF TO cl_salv_selections.


START-OF-SELECTION.

SELECT-OPTIONS: P_TKNUM FOR VTTP-TKNUM OBLIGATORY.
PERFORM FRM_GET_DATA.
PERFORM INITIALIZE_ALV.
alv->display).
*PERFORM Z_ALV_PRINT.
*PERFORM FRM_PRINT_DATA.
END-OF-SELECTION.

FORM FRM_GET_DATA.
    SELECT k~NAME1 L1~KUNAG L2~MATNR L2~ARKTX L2~LFIMG
      FROM VTTP AS V
       INNER  JOIN LIKP AS L1
      ON V~VBELN = L1~VBELN
      INNER  JOIN KNA1 AS K
      ON L1~KUNAG = K~KUNNR
      INNER  JOIN LIPS AS L2
      ON L2~VBELN = L1~VBELN
    INTO (WA_ITEMS-GV_NAME,WA_ITEMS-GV_KUNAG,WA_ITEMS-GV_MATNR,WA_ITEMS-GV_ARKTX,
            WA_ITEMS-GV_LFIMG)
      WHERE V~TKNUM IN P_TKNUM .
      APPEND WA_ITEMS TO GT_ITEMS.
    SORT GT_ITEMS BY GV_KUNAG.
    CLEAR WA_ITEMS.
    ENDSELECT.

ENDFORM.




CLASS lcl_handle_events DEFINITION.
  PUBLIC SECTION.
    CLASS-METHODS: on_user_command FOR EVENT added_function OF cl_salv_events_table
                    IMPORTING e_salv_function,
                   on_before_salv_function FOR EVENT before_salv_function OF cl_salv_events_table
                    IMPORTING e_salv_function,
                   on_after_salv_function FOR EVENT after_salv_function OF cl_salv_events_table
                    IMPORTING e_salv_function.
  PRIVATE SECTION.
    CLASS-DATA: g_string TYPE string.
ENDCLASS.                    "lcl_handle_events DEFINITION

*----------------------------------------------------------------------*
*       CLASS lcl_handle_events IMPLEMENTATION
*----------------------------------------------------------------------*
*       事件操作类(实现)
*----------------------------------------------------------------------*
CLASS lcl_handle_events IMPLEMENTATION.

*单击新增功能按钮事件处理方法
  METHOD on_user_command.

    DATA:lines TYPE .
    DATA:MODCOUNT TYPE VALUE 3."一页显示几行
    DATA:COUNT TYPE i.

     CASE e_salv_function.
    WHEN '&PRINT'.
      PERFORM SEL_CHECK.
      DESCRIBE TABLE lt_prt_temp LINES lines.
      COUNT =   lines mod MODCOUNT .
      COUNT = MODCOUNT COUNT.
      DO COUNT TIMES.
          APPEND WA_ITEMS TO lt_prt_temp.
      ENDDO.

      PERFORM FRM_PRINT_DATA.
      CLEAR lt_prt_temp.
      WHEN '&BACK'.
        LEAVE TO SCREEN 0.
  ENDCASE.
  ENDMETHOD.                    "on_user_command


*触发事件之前
  METHOD on_before_salv_function.
    CONCATENATE 'Before Function '
                e_salv_function
           INTO g_string SEPARATED BY space.
    MESSAGE i000(0kWITH g_string.
  ENDMETHOD.                    "on_before_salv_function

*触发事件之后
  METHOD on_after_salv_function.
    CONCATENATE 'After Function '
                e_salv_function
           INTO g_string SEPARATED BY space.
    MESSAGE i000(0kWITH g_string.
  ENDMETHOD.                    "on_after_salv_function
ENDCLASS.                    "lcl_handle_events IMPLEMENTATION

FORM INITIALIZE_ALV .
DATA message TYPE REF TO cx_salv_msg.
data lr_events     TYPE REF TO cl_salv_events_table.

  TRY.
    cl_salv_table=>factory(
      IMPORTING
      r_salv_table = alv
      CHANGING
        t_table = GT_ITEMS ).


"设置GUI Status
    alv->set_screen_status(
      report = sy-repid
      pfstatus 'STANDARD'
      set_functions = alv->c_functions_all
    ).

    "注册事件
    lr_events = alv->get_event).
    SET HANDLER lcl_handle_events=>on_user_command FOR lr_events.
    SET HANDLER lcl_handle_events=>on_before_salv_function FOR lr_events.
    SET HANDLER lcl_handle_events=>on_after_salv_function FOR lr_events.

*    alv->set_screen_status( pfstatus = 'ALV_STANDARD'
*                            report  = lv_repid
*                            set_functions = alv->c_functions_all ).
*
*    PERFORM enalbe_layout_settings. "设置样式
*    PERFORM optimize_column_width."设置行宽度
*    PERFORM hide_client_column.
*    PERFORM set_departure_country_column. "设置列的一些属性
     PERFORM set_toolbar.  "设置工具栏
    PERFORM display_settings"设置显示
*    PERFORM set_aggregations. "设置合计
    PERFORM set_select_mode"设置选择模式

    CATCH cx_salv_msg INTO message.
   ENDTRY.


ENDFORM.                    " INITIALIZE_ALV



FORM SET_TOOLBAR .
DATA functions TYPE REF TO cl_salv_functions_list.
functions = alv->get_functions).
functions->set_all('X').
ENDFORM.

FORM DISPLAY_SETTINGS .   
data lr_display type ref to cl_salv_display_settings.   lr_display 
= alv->get_display_settings).   lr_display
->set_list_header('领料单列表').

ENDFORM.                    " DISPLAY_SETTINGS

FORM SET_SELECT_MODE .     lr_selections 

= alv->get_selections).     
"设置选择模式     lr_selections
->set_selection_mode( if_salv_c_selection_mode=>row_column ).


ENDFORM.                    " SET_SELECT_MODE

FORM SEL_CHECK .   

Data: gi_select_rows type salv_t_row.   
data lw_row  LIKE LINE OF gi_select_rows.   
data l_lines type i.   

data:wa_prt_temp type TY_ITEMS.
*  lt_prt_temp type table of TY_ITEMS.   lr_selections 

= alv->get_selections).   gi_select_rows 
= lr_selections->get_selected_rows).

*  call method alv->get_selected_rows
*   importing
*      et_index_rows = gi_index_rows.   
DESCRIBE TABLE gi_select_rows lines l_lines.   
IF l_lines 0.     
CALL FUNCTION 'POPUP_TO_DISPLAY_TEXT'          
EXPORTING               textline1 
'You must choose a valid line'.     
EXIT.   
ENDIF.   

LOOP AT gi_select_rows into lw_row.      
READ TABLE GT_ITEMS INDEX lw_row INTO wa_prt_temp.      
append wa_prt_temp to lt_prt_temp.   
ENDLOOP.   

clear wa_prt_temp.
ENDFORM.                    " SEL_CHECK


FORM FRM_PRINT_DATA.  

call function 'SSF_FUNCTION_MODULE_NAME'  
EXPORTING    formname 
'ZSDSF001'  
IMPORTING    fm_name 
= fm_name  
EXCEPTIONS    no_form 
1    no_function_module 
2    
OTHERS 3.

CONCATENATE 'ZDDITEMMM' SY-UZEIT INTO itemsname.
*CONCATENATE 'ZDDHEADER' SY-UZEIT INTO headername.  savebuffer lt_prt_temp itemsname

.
* savebuffer GT_HEADER headername.
*调用 smartForms  
call function fm_name  
EXPORTING    PTR_ITEMS 
= itemsname
*   PTR_HEADER = headername  
EXCEPTIONS    formatting_error 
1    internal_error 
2    send_error 
3    user_canceled 
4.  clearbuffer itemsname
.  clearbuffer headername
.
ENDFORM.

原文地址:https://www.cnblogs.com/eagle-dtq/p/5147461.html