SAP-ABAP-普通OOALV,OOALV分屏展示,发送邮件excel附件合并单元格,附件带框线,附件居中。

功能展示

1.三个可拖动变换大小的屏幕

2.普通OOALV

 3.带格式的邮件附件,三个表格,合并居中,单元格带框线,指定列宽。

代码如下,复制可直接激活,没有include,创建程序后还有一些其他步骤,详情见后文

*&---------------------------------------------------------------------*
*& Report ZLQT_OOALV_SPLIT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZLQT_OOALV_SPLIT.
TABLES : t001,BKPF,SSCRFIELDS." ---TODO
TYPE-POOLS:icon.

DATA: ok_code LIKE sy-ucomm.


CLASS lcl_event_receiver DEFINITION DEFERRED.
DATA: event_receiver TYPE REF TO lcl_event_receiver.

DATA: gt_fieldcat          TYPE lvc_t_fcat,
      gt_fieldcat1         TYPE lvc_t_fcat,
      gt_fieldcat2         TYPE lvc_t_fcat,
      gt_fieldcat3         TYPE lvc_t_fcat,
      gs_layout            TYPE lvc_s_layo,
      gs_variant           TYPE disvariant,
      gt_t_f4              TYPE lvc_t_f4,
      GT_SELCELL           TYPE LVC_T_CELL,
      it_toolbar_excluding TYPE ui_functions.

DATA: stbl TYPE lvc_s_stbl. "鼠标游标位置
DATA: et_filtered TYPE lvc_t_fidx.
DATA: gv_code TYPE sy-tcode .

DATA alv_grid TYPE REF TO cl_gui_alv_grid. "后面要用到CL_GUI_ALV_GRID类中的方法
"SET_TABLE_FIRST_DISPLAY,这个方法基于实例存在,必须
"为这个类创建一个对象。在此处声明。
DATA gs_parent TYPE REF TO cl_gui_custom_container . "定义容器
DATA gt_select TYPE lvc_t_cell . "定義選中單元格方法參數
DATA gt_selrow TYPE lvc_t_row  . "定義選中行方法參數

*DATA: gr_table TYPE REF TO cl_salv_table.
*DATA: lr_functions TYPE REF TO cl_salv_functions.


"$. Region 此处定义改为需要用到的定义-TODO
TYPES : BEGIN OF ty_item ,
    XH       TYPE C LENGTH 3,
    SUM      TYPE C LENGTH 3,
    YUE01    TYPE C LENGTH 3,
    YUE02    TYPE C LENGTH 3,
    YUE03    TYPE C LENGTH 3,
    YUE04    TYPE C LENGTH 3,
    YUE05    TYPE C LENGTH 3,
    YUE06    TYPE C LENGTH 3,
    YUE07    TYPE C LENGTH 3,
    YUE08    TYPE C LENGTH 3,
    YUE09    TYPE C LENGTH 3,
    YUE10    TYPE C LENGTH 3,
    YUE11    TYPE C LENGTH 3,
    YUE12    TYPE C LENGTH 3,
 END OF ty_item .
DATA gt_item TYPE TABLE OF ty_item .

TYPES : BEGIN OF TY_HB1 ,
    XH       TYPE C LENGTH 3,
    SUM      TYPE C LENGTH 3,
    YUE01    TYPE C LENGTH 3,
    YUE02    TYPE C LENGTH 3,
    YUE03    TYPE C LENGTH 3,
    YUE04    TYPE C LENGTH 3,
    YUE05    TYPE C LENGTH 3,
    YUE06    TYPE C LENGTH 3,
    YUE07    TYPE C LENGTH 3,
    YUE08    TYPE C LENGTH 3,
    YUE09    TYPE C LENGTH 3,
    YUE10    TYPE C LENGTH 3,
    YUE11    TYPE C LENGTH 3,
    YUE12    TYPE C LENGTH 3,
END OF TY_HB1 .
DATA gt_HB1 TYPE TABLE OF TY_HB1 .
DATA gS_HB1 TYPE  TY_HB1 .
DATA gt_HB1S TYPE TABLE OF TY_HB1 .
DATA gS_HB1S TYPE  TY_HB1 .

TYPES : BEGIN OF TY_HB2 ,
    XH       TYPE C LENGTH 3,
    SUM      TYPE C LENGTH 3,
    YC01     TYPE C LENGTH 3,
    YC02     TYPE C LENGTH 3,
    YC03     TYPE C LENGTH 3,
    YC04     TYPE C LENGTH 3,
END OF TY_HB2 .
DATA gt_HB2 TYPE TABLE OF TY_HB2 .
DATA gS_HB2 TYPE  TY_HB2 .
DATA gS_HB2S TYPE  TY_HB2 .

TYPES : BEGIN OF TY_HB3 ,
    XH       TYPE C LENGTH 3,
    SUM      TYPE C LENGTH 3,
    YUE01    TYPE C LENGTH 3,
    YUE02    TYPE C LENGTH 3,
    YUE03    TYPE C LENGTH 3,
    YUE04    TYPE C LENGTH 3,
    YUE05    TYPE C LENGTH 3,
    YUE06    TYPE C LENGTH 3,
    YUE07    TYPE C LENGTH 3,
    YUE08    TYPE C LENGTH 3,
    YUE09    TYPE C LENGTH 3,
    YUE10    TYPE C LENGTH 3,
    YUE11    TYPE C LENGTH 3,
    YUE12    TYPE C LENGTH 3,
END OF TY_HB3 .
DATA gt_HB3 TYPE TABLE OF TY_HB3 .
DATA gS_HB3 TYPE  TY_HB3 .
DATA gS_HB3S TYPE  TY_HB3 .

DATA: gt_xml_table_forecast   TYPE TABLE OF x255.
"拆分屏幕定义
DATA: g_doc_cont   TYPE REF TO cl_gui_docking_container.
DATA: g_grid_left   TYPE REF TO cl_gui_alv_grid.
DATA: g_grid_right  TYPE REF TO cl_gui_alv_grid.
DATA: g_grid2       TYPE REF TO cl_gui_alv_grid.
"$. Endregion 此处定义改为需要用到的定义-TODO

*&---------------------------------------------------------------------*
*&       Class LCL_EVENT_RECEIVER
*&---------------------------------------------------------------------*
*        Text
*----------------------------------------------------------------------*
CLASS lcl_event_receiver DEFINITION.
  PUBLIC SECTION.

    METHODS handle_double_click FOR EVENT double_click OF cl_gui_alv_grid    "定义类中的方法---双击
      IMPORTING e_row e_column es_row_no.                                    "
    "                                                 "
    METHODS handle_onf4 FOR EVENT onf4 OF cl_gui_alv_grid                    "定义类中的方法---F4帮助
      IMPORTING e_fieldname es_row_no er_event_data .                        "
    "
    METHODS handle_toolbar      FOR EVENT toolbar OF cl_gui_alv_grid         "定义类中的方法---ALV状态栏按钮
      IMPORTING e_object e_interactive .                                     "
    "
    METHODS handle_user_command FOR EVENT user_command OF cl_gui_alv_grid    "定义类中的方法---按钮触发方法
      IMPORTING e_ucomm .                                                    "
    "
    METHODS handle_data_changed FOR EVENT data_changed OF cl_gui_alv_grid    "定义类中的方法---数据修改时的方法
      IMPORTING er_data_changed e_onf4 e_onf4_before e_onf4_after e_ucomm.   "

    METHODS  handle_data_changed_finished FOR EVENT data_changed_finished OF cl_gui_alv_grid
      IMPORTING e_modified et_good_cells.
ENDCLASS. "LCL_EVENT_RECEIVER
"$. Endregion 定义

"$. Region 选择屏幕-TODO

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
  PARAMETERS : P_ZYEAR TYPE BKPF-GJAHR DEFAULT SY-DATUM(4) .
  SELECTION-SCREEN SKIP 1 .

  PARAMETERS : P_MX RADIOBUTTON GROUP G1 DEFAULT 'X'.  "明细数据
  PARAMETERS : P_HZ1 RADIOBUTTON GROUP G1 .            "责任部门与异常零件点数统计"
"  PARAMETERS : P_HZ2 RADIOBUTTON GROUP G1.            "责任部门与延迟天数统计汇总
"  PARAMETERS : P_HZ3 RADIOBUTTON GROUP G1.            "责任部门与责任人异常零件点数统计TOP10

SELECTION-SCREEN END OF BLOCK b1 .

SELECTION-SCREEN FUNCTION KEY 1. "
"$. Endregion 选择屏幕-TODO
INITIALIZATION.
  stbl-row = 'X'.
  stbl-col = 'X'.
  SSCRFIELDS-FUNCTXT_01 = '维护邮箱'.


AT SELECTION-SCREEN.

  "$. Region 权限-TODO

* SELECT T001~BUKRS FROM T001 WHERE T001~BUKRS IN @S_BUKRS INTO TABLE @DATA(GT_BUKRS) .
*
* LOOP AT GT_BUKRS INTO DATA(GS_BUKRS).
*  AUTHORITY-CHECK OBJECT 'F_BKPF_BUK'
*              ID 'BUKRS' FIELD GS_BUKRS-BUKRS
*               ID 'ACTVT' FIELD '03'.
*  IF SY-SUBRC <> 0.
*      MESSAGE '您没有公司代码' && GS_BUKRS-BUKRS  && '的操作权限!'   TYPE 'E' .
*
*  ENDIF.
*
* ENDLOOP.

  "$. Endregion 权限-TODO

  CASE SSCRFIELDS-UCOMM.          "处理按钮命令
    WHEN'FC01'.

      CALL FUNCTION 'VIEW_MAINTENANCE_CALL'
        EXPORTING
          ACTION    = 'U'
          VIEW_NAME = 'ZTMM200_MAIL'.  "改成自己维护邮箱的表或者删掉在后面写死
    WHEN OTHERS.

  ENDCASE.

START-OF-SELECTION.
  PERFORM frm_get_data.
  IF P_MX = 'X'.
    CALL SCREEN 9000.
  ELSEIF P_HZ1 = 'X' .
    CALL SCREEN 8000.
  ENDIF.

  "$. Region FORM
MODULE status_9000 OUTPUT.
  SET PF-STATUS '9000'.
  SET TITLEBAR '9000'.
  DATA(gv_frist) = 'X' . "判断是不是第一次运行,自添加按钮需要刷新才能显示

  PERFORM prepare_field_catalog USING 0 CHANGING gt_fieldcat.
  PERFORM prepare_field_catalog USING 1 CHANGING gt_fieldcat1.
  PERFORM prepare_field_catalog USING 2 CHANGING gt_fieldcat2.
  PERFORM prepare_field_catalog USING 3 CHANGING gt_fieldcat3.
  PERFORM prepare_layout        CHANGING gs_layout.
  IF P_MX = 'X'.
    PERFORM frm_display_alv .
  ELSEIF P_HZ1 = 'X' .
    PERFORM frm_display_alv_SPLIT .
  ENDIF.
  IF gv_frist = 'X' AND alv_grid IS NOT INITIAL.
    CALL METHOD alv_grid->refresh_table_display  "增加按钮需要刷新才会显示出来,否则无法显示。
      EXPORTING
        is_stable = stbl.
    gv_frist = '0' ."判断是否为第一次,为第一次则刷新
  ENDIF.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_9000  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_9000 INPUT.
  gv_code = ok_code .
  CASE ok_code.
    WHEN 'BACK'.
      CLEAR: gt_item.
      LEAVE TO SCREEN 0.
    WHEN 'EXIT'.
      LEAVE PROGRAM.
    WHEN 'CANCEL'.
      CLEAR: gt_item.
      LEAVE TO SCREEN 0.
    WHEN 'MAIL'.
      PERFORM frm_process_xml_data.
      PERFORM frm_send_email .
  ENDCASE.
ENDMODULE.

*----------------------------------------------------------------------*
*       CLASS LCL_EVENT_RECEIVER IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_event_receiver IMPLEMENTATION.

  METHOD handle_double_click.
    MESSAGE  '双击' TYPE 'S'. "  e_row  e_column  es_row_no
    CALL METHOD alv_grid->get_selected_cells
      IMPORTING
        et_cell = GT_SELCELL
        .

  ENDMETHOD.                    "HANDLE_DOUBLE_CLICK双击后触发该段代码,可接T-CODE跳转等功能

  METHOD handle_onf4.

    DATA: ls_modi    TYPE lvc_s_modi,
          lt_ret_tab TYPE TABLE OF ddshretval.
    IF e_fieldname = 'REPTEXT'.
      READ TABLE gt_item INDEX es_row_no-row_id ASSIGNING FIELD-SYMBOL(<fs_item>).
*      CHECK sy-subrc = 0.
      IF sy-subrc = 0.
        .
        CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
          EXPORTING
            retfield   = 'DDTEXT'
            value_org  = 'S'
          TABLES
            value_tab  = gt_item
            return_tab = lt_ret_tab.
        IF sy-subrc = 0.
          READ TABLE lt_ret_tab INDEX 1 ASSIGNING FIELD-SYMBOL(<fs_ret>).
          IF sy-subrc = 0.
          ENDIF.
        ENDIF.
        er_event_data->m_event_handled = 'X'.
        CALL METHOD alv_grid->refresh_table_display
          EXPORTING
            is_stable = stbl.
      ENDIF .
    ENDIF .
  ENDMETHOD.                    "需在ALV中调用触发一般与filedcat中的 f4availabl 参数同用

  METHOD handle_toolbar.    "在ALV状态栏增加按钮,一般是汇总按钮,新增后的按钮可触发HANDLE_USER_COMMAND方法

    DATA: ls_toolbar        TYPE stb_button.
    CLEAR ls_toolbar.
    MOVE 3                  TO ls_toolbar-butn_type.      "分隔符
    APPEND ls_toolbar       TO e_object->mt_toolbar.

"    CLEAR ls_toolbar.
"    MOVE 'MAIL'            TO ls_toolbar-function.        "功能码
"    MOVE '发送邮件'         TO ls_toolbar-quickinfo.
"    MOVE '发送邮件'         TO ls_toolbar-text.            "显示名称
"    MOVE ' '                TO ls_toolbar-disabled.
"    APPEND ls_toolbar       TO e_object->mt_toolbar.

  ENDMETHOD.                    "在ALV状态栏增加按钮,一般是汇总按钮

  METHOD handle_user_command.
    CASE e_ucomm.
      WHEN 'MAIL'.
      WHEN OTHERS.
    ENDCASE.
    CALL METHOD alv_grid->set_frontend_layout
      EXPORTING
        is_layout = gs_layout.
    CALL METHOD alv_grid->refresh_table_display
      EXPORTING
        is_stable = stbl.
  ENDMETHOD.                    "一般与HANDLE_TOOLBAR同用

  METHOD handle_data_changed.   "er_data_changed e_onf4 e_onf4_before e_onf4_after e_ucomm.
"用途在于检查这行是否能修改,数据是否合法
    LOOP AT er_data_changed->mt_good_cells  ASSIGNING FIELD-SYMBOL(<ls_good>).
    ENDLOOP .
  ENDMETHOD.                    "数据修改后触发,一般用在数据联动修改如数量字段修改,同时联动修改金额字段


  METHOD handle_data_changed_finished.
    "用途在于修改后的数据联动,
    DATA: ls_et_good_cell  TYPE lvc_s_modi.
      LOOP AT et_good_cells INTO ls_et_good_cell.
        READ TABLE gt_item ASSIGNING FIELD-SYMBOL(<fs_item>) INDEX ls_et_good_cell-row_id.
        IF sy-subrc = '0'.
          IF ls_et_good_cell-fieldname = 'SCRTEXT_L'.
          ENDIF.
        ENDIF.
      ENDLOOP.

      CALL METHOD alv_grid->refresh_table_display
        EXPORTING
          is_stable = stbl.
  ENDMETHOD.


ENDCLASS. "LCL_EVENT_RECEIVER IMPLEMENTATION

*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY_ALV
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_display_alv  .
 " CLEAR: gt_fieldcat,gt_fieldcat1,gt_fieldcat2,gt_fieldcat3,gs_layout,it_toolbar_excluding.
  gs_variant-report = sy-repid.
  gs_variant-handle = '0001'.
******实例化 容器
    CREATE OBJECT gs_parent
      EXPORTING
        container_name = 'ALV'. " 界面中的一个CUNSTOMER CONTROL控件 用于存放类对象。
    "使用这个控件把名称赋值给CONTAINER_NAME

******将alv植入到容器中
    CREATE OBJECT alv_grid
      EXPORTING
        i_parent = gs_parent.
    PERFORM toolbar_excluding_item     CHANGING it_toolbar_excluding.  "ALV按钮排除
        CALL METHOD alv_grid->set_table_for_first_display
          EXPORTING
            is_layout            = gs_layout
            i_save               = 'A'
            i_default            = 'X'
            is_variant           = gs_variant
            it_toolbar_excluding = it_toolbar_excluding
          CHANGING
            it_outtab            = gt_item
            it_fieldcatalog      = gt_fieldcat.

    CREATE OBJECT event_receiver. "创建事件
    SET HANDLER event_receiver->handle_double_click          FOR alv_grid. "双击事件
*    SET HANDLER event_receiver->handle_onf4                  FOR alv_grid. "F4帮助事件
    SET HANDLER event_receiver->handle_toolbar               FOR alv_grid. "ALV状态栏
    SET HANDLER event_receiver->handle_user_command          FOR alv_grid. "按钮事件
    SET HANDLER event_receiver->handle_data_changed          FOR alv_grid. "修改事件
    SET HANDLER event_receiver->handle_data_changed_finished FOR alv_grid. "数据修改后触发事件


"    gt_t_f4 = VALUE #( BASE gt_t_f4 ( fieldname = 'REPTEXT'  register = 'X' getbefore = 'X' chngeafter = 'X' ) ) .
"    CALL METHOD alv_grid->register_f4_for_fields "注册F4帮助事件
"      EXPORTING
"        it_f4 = gt_t_f4.

    CALL METHOD alv_grid->register_edit_event "注册编辑事件,否则不会触发更新事件
      EXPORTING
        i_event_id = cl_gui_alv_grid=>mc_evt_modified.

    CALL METHOD alv_grid->set_frontend_layout
      EXPORTING
        is_layout = gs_layout.

    CALL METHOD alv_grid->SET_FRONTEND_FIELDCATALOG
      EXPORTING
        IT_FIELDCATALOG = gt_fieldcat.

    CALL METHOD cl_gui_control=>set_focus
      EXPORTING
        control = alv_grid.
    CALL METHOD cl_gui_cfw=>flush.
"  IF  alv_grid IS INITIAL .
"  ELSE.
"    CALL METHOD alv_grid->set_frontend_layout
"      EXPORTING
"        is_layout = gs_layout.
"    CALL METHOD alv_grid->refresh_table_display
"      EXPORTING
"        is_stable = stbl.
"  ENDIF.
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  PREPARE_FIELD_CATALOG
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--P_GT_FIELDCAT  text
*----------------------------------------------------------------------*
FORM prepare_field_catalog USING I CHANGING p_gt_fieldcat TYPE lvc_t_fcat.
  DATA ls_fcat TYPE lvc_s_fcat.
  DEFINE set_fcat.
    CLEAR ls_fcat.
    ls_fcat-fieldname = &1.   "字段
    ls_fcat-outputlen = &2.   "列的字符宽度
    ls_fcat-key       = &3.   "主键
    ls_fcat-edit      = &4.   "可编辑
    ls_fcat-ref_table = &5.   "参考表
    ls_fcat-ref_field = &6.   "参考字段
    ls_fcat-icon      = &7.   "以圖標輸出
*    ls_fcat-NO_ZERO   = &8.   "前导0
    ls_fcat-coltext   = &9.   "描述
    ls_fcat-f4availabl = &8.
    APPEND ls_fcat TO p_gt_fieldcat.
  END-OF-DEFINITION.

  CLEAR :p_gt_fieldcat[],ls_fcat .
  CASE I.
    WHEN 0.
      set_fcat 'ZSYSTEM'   ''   ''   ''    'ZTMM200_LOG'    'ZSYSTEM'       ''       ''      '订单发送外围系统'.
      set_fcat 'EKGRP'     ''   ''   ''    'ZTMM200_LOG'    'EKGRP'         ''       ''      '采购组'.
      set_fcat 'VERKF'     ''   ''   ''    'ZTMM200_LOG'    'VERKF'         ''       ''      '卖方业务伙伴订单'.
      set_fcat 'TELF1'     ''   ''   ''    'ZTMM200_LOG'    'TELF1'         ''       ''      '订购用途'.
      set_fcat 'LIFNR'     ''   ''   ''    'ZTMM200_LOG'    'LIFNR'         ''       ''      '供应商或债权人的帐号'.
      set_fcat 'UNSEZ'     ''   ''   ''    'ZTMM200_LOG'    'UNSEZ'         ''       ''      '出货地'.
      set_fcat 'MATNR'     ''   ''   ''    'ZTMM200_LOG'    'MATNR'         ''       ''      '物料编号'.
      set_fcat 'MENGE'     ''   ''   ''    'ZTMM200_LOG'    'MENGE'         ''       ''      '采购订单数量'.
      set_fcat 'ZSTATUS'   ''   ''   ''    'ZTMM200_LOG'    'ZSTATUS'       ''       ''      '采购状态'.
      set_fcat 'WERKS'     ''   ''   ''    'ZTMM200_LOG'    'WERKS'         ''       ''      '工厂'.
      set_fcat 'LGORT'     ''   ''   ''    'ZTMM200_LOG'    'LGORT'         ''       ''      '库存地点'.
      set_fcat 'EEIND'     ''   ''   ''    'ZTMM200_LOG'    'EEIND'         ''       ''      '交货日期'.
      set_fcat 'ZDATE'     ''   ''   ''    'ZTMM200_LOG'    'ZDATE'         ''       ''      '接口传输日期'.
      set_fcat 'ZTIME'     ''   ''   ''    'ZTMM200_LOG'    'ZTIME'         ''       ''      '接口传输时间'.
      set_fcat 'UNAME'     ''   ''   ''    'ZTMM200_LOG'    'UNAME'         ''       ''      '用户名'.
      set_fcat 'EBELN'     ''   ''   ''    'ZTMM200_LOG'    'EBELN'         ''       ''      '采购凭证编号'.
      set_fcat 'EBELP'     ''   ''   ''    'ZTMM200_LOG'    'EBELP'         ''       ''      '采购凭证的项目编号'.
      set_fcat 'TEXT2'     ''   ''   ''    'ZTMM200_LOG'    'TEXT2'         ''       ''      '参考字段'.
      set_fcat 'NAME1'     ''   ''   ''    'ZTMM200_LOG'    'NAME1'         ''       ''      '名称'.
      set_fcat 'MAKTX'     ''   ''   ''    'ZTMM200_LOG'    'MAKTX'         ''       ''      '物料描述'.
      set_fcat 'ZDATE1'    ''   ''   ''    'ZTMM200_LOG'    'ZDATE1'        ''       ''      '重处理日期'.
      set_fcat 'ZTIME1'    ''   ''   ''    'ZTMM200_LOG'    'ZTIME1'        ''       ''      '重处理时间'.
    WHEN 1.
      set_fcat ' XH   '   ''   ''   ''    ''    ''       ''       ''      '序号'.
      set_fcat ' ZRESD'   ''   ''   ''    ''    ''       ''       ''      '责任部门'.
      set_fcat ' SUM  '   ''   ''   ''    ''    ''       ''       ''      '年度累计'.
      set_fcat ' YUE01'   ''   ''   ''    ''    ''       ''       ''      '1月'.
      set_fcat ' YUE02'   ''   ''   ''    ''    ''       ''       ''      '2月'.
      set_fcat ' YUE03'   ''   ''   ''    ''    ''       ''       ''      '3月'.
      set_fcat ' YUE04'   ''   ''   ''    ''    ''       ''       ''      '4月'.
      set_fcat ' YUE05'   ''   ''   ''    ''    ''       ''       ''      '5月'.
      set_fcat ' YUE06'   ''   ''   ''    ''    ''       ''       ''      '6月'.
      set_fcat ' YUE07'   ''   ''   ''    ''    ''       ''       ''      '7月'.
      set_fcat ' YUE08'   ''   ''   ''    ''    ''       ''       ''      '8月'.
      set_fcat ' YUE09'   ''   ''   ''    ''    ''       ''       ''      '9月'.
      set_fcat ' YUE10'   ''   ''   ''    ''    ''       ''       ''      '10月'.
      set_fcat ' YUE11'   ''   ''   ''    ''    ''       ''       ''      '11月'.
      set_fcat ' YUE12'   ''   ''   ''    ''    ''       ''       ''      '12月'.
    WHEN 2.
      set_fcat 'XH   '   ''   ''   ''    ''    ''       ''       ''      '序号'.
      set_fcat 'ZRESD'   ''   ''   ''    ''    ''       ''       ''      '责任部门'.
      set_fcat 'SUM  '   ''   ''   ''    ''    ''       ''       ''      '年度累计'.
      set_fcat 'YC01 '   ''   ''   ''    ''    ''       ''       ''      '1-3天'.
      set_fcat 'YC02 '   ''   ''   ''    ''    ''       ''       ''      '4-7天'.
      set_fcat 'YC03 '   ''   ''   ''    ''    ''       ''       ''      '8-14天'.
      set_fcat 'YC04 '   ''   ''   ''    ''    ''       ''       ''      '15天以上'.
    WHEN 3.
      set_fcat ' XH   '   ''   ''   ''    ''    ''       ''       ''      '序号'.
      set_fcat ' ZRESD'   ''   ''   ''    ''    ''       ''       ''      '责任部门'.
      set_fcat ' ZRESP'   ''   ''   ''    ''    ''       ''       ''      '责任人'.
      set_fcat ' SUM  '   ''   ''   ''    ''    ''       ''       ''      '年度累计'.
      set_fcat ' YUE01'   ''   ''   ''    ''    ''       ''       ''      '1月'.
      set_fcat ' YUE02'   ''   ''   ''    ''    ''       ''       ''      '2月'.
      set_fcat ' YUE03'   ''   ''   ''    ''    ''       ''       ''      '3月'.
      set_fcat ' YUE04'   ''   ''   ''    ''    ''       ''       ''      '4月'.
      set_fcat ' YUE05'   ''   ''   ''    ''    ''       ''       ''      '5月'.
      set_fcat ' YUE06'   ''   ''   ''    ''    ''       ''       ''      '6月'.
      set_fcat ' YUE07'   ''   ''   ''    ''    ''       ''       ''      '7月'.
      set_fcat ' YUE08'   ''   ''   ''    ''    ''       ''       ''      '8月'.
      set_fcat ' YUE09'   ''   ''   ''    ''    ''       ''       ''      '9月'.
      set_fcat ' YUE10'   ''   ''   ''    ''    ''       ''       ''      '10月'.
      set_fcat ' YUE11'   ''   ''   ''    ''    ''       ''       ''      '11月'.
      set_fcat ' YUE12'   ''   ''   ''    ''    ''       ''       ''      '12月'.
    WHEN OTHERS.
  ENDCASE.

ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  PREPARE_LAYOUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM prepare_layout CHANGING p_gs_layout TYPE lvc_s_layo.
  p_gs_layout-zebra      = 'X'.      "斑馬紋顯示
  p_gs_layout-sel_mode   = 'A'.      "選擇模式
  p_gs_layout-cwidth_opt = 'X'.      "最佳列寬
ENDFORM.



FORM toolbar_excluding_item CHANGING pt_exclude TYPE ui_functions.
  DATA ls_exclude TYPE ui_func.
  ls_exclude = cl_gui_alv_grid=>mc_fc_loc_delete_row.
  APPEND ls_exclude TO pt_exclude.
  ls_exclude = cl_gui_alv_grid=>mc_fc_loc_insert_row.
  APPEND ls_exclude TO pt_exclude.
  ls_exclude = cl_gui_alv_grid=>mc_fc_loc_append_row.
  APPEND ls_exclude TO pt_exclude.
  ls_exclude = cl_gui_alv_grid=>mc_fc_loc_copy_row.
  APPEND ls_exclude TO pt_exclude.
  ls_exclude = cl_gui_alv_grid=>mc_fc_loc_copy.
  APPEND ls_exclude TO pt_exclude.
  ls_exclude = cl_gui_alv_grid=>mc_fc_loc_paste_new_row.
  APPEND ls_exclude TO pt_exclude.
  ls_exclude = cl_gui_alv_grid=>mc_fc_loc_move_row.
  APPEND ls_exclude TO pt_exclude.
  ls_exclude = cl_gui_alv_grid=>mc_fc_loc_paste.
  APPEND ls_exclude TO pt_exclude.
  ls_exclude = cl_gui_alv_grid=>mc_fc_loc_cut.
  APPEND ls_exclude TO pt_exclude.
  ls_exclude = cl_gui_alv_grid=>mc_fc_loc_undo.
  APPEND ls_exclude TO pt_exclude.
ENDFORM.

*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_get_data .
ENDFORM.

FORM frm_display_alv_SPLIT .
  IF g_doc_cont IS INITIAL.
    CREATE OBJECT g_doc_cont
      EXPORTING
        ratio = '95'
        side  = cl_gui_docking_container=>dock_at_left.  " 1

    PERFORM frm_alv_global_splitter_object
              USING g_doc_cont
              CHANGING g_grid_left g_grid_right g_grid2.

  ENDIF.
ENDFORM .

*&---------------------------------------------------------------------*
*&      Form  ALV_GLOBAL_SPLITTER_OBJECT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->PA_DCON    text
*      -->PA_TOP     text
*      -->PA_BOTTOM  text
*      -->PV_HEIGHT  text
*----------------------------------------------------------------------*
FORM frm_alv_global_splitter_object USING
                      pv_dcont  TYPE REF TO cl_gui_docking_container
                                    CHANGING
                      cv_grid1   TYPE REF TO cl_gui_alv_grid
                      cv_grid2   TYPE REF TO cl_gui_alv_grid
                      cv_grid3   TYPE REF TO cl_gui_alv_grid.

  DATA: lv_split  TYPE REF TO cl_gui_splitter_container.
  DATA: lv_split2 TYPE REF TO cl_gui_splitter_container.

*-- 分开
  DATA: lv_t1 TYPE i VALUE 1.
  DATA: lv_t2 TYPE i VALUE 2.

  PERFORM frm_split_cont  USING pv_dcont 2 1     CHANGING lv_split.
  PERFORM frm_split_cont2 USING lv_split 1 1 1 2 CHANGING lv_split2.

  PERFORM frm_split_set_grid USING lv_split2 1 1 1 CHANGING cv_grid1.
  PERFORM frm_split_set_grid USING lv_split2 1 2 2 CHANGING cv_grid2.
  PERFORM frm_split_set_grid USING lv_split  2 1 3 CHANGING cv_grid3.

  lv_split->set_row_height( id = 1 height = 50 ).
  lv_split2->set_column_width( id = 1 width = 50 ).

ENDFORM. "alv_splitter_object

*&---------------------------------------------------------------------*
*&      Form  FRM_SPLIT_CONT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_G_SPLITTER1PA_DCON  text
*      -->P_1      text
*      -->P_2      text
*----------------------------------------------------------------------*
FORM frm_split_cont
        USING    pv_dco_cont TYPE REF TO cl_gui_docking_container
                 pv_c1 pv_c2
        CHANGING pv_splitter TYPE REF TO cl_gui_splitter_container.

  IF pv_dco_cont IS NOT INITIAL.

    CREATE OBJECT pv_splitter
      EXPORTING
        parent  = pv_dco_cont
        rows    = pv_c1
        columns = pv_c2.
  ENDIF.


ENDFORM.                    " FRM_SPLIT_CONT
*&---------------------------------------------------------------------*
*&      Form  frm_split_cont2
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->PV_SPLIT     text
*      -->PV_P1        text
*      -->PV_P2        text
*      -->PV_C1        text
*      -->PV_C2        text
*      <--PV_SPLITTER  text
*----------------------------------------------------------------------*
FORM frm_split_cont2
          USING   pv_split    TYPE REF TO cl_gui_splitter_container
                  pv_p1 pv_p2 pv_c1 pv_c2
         CHANGING pv_splitter TYPE REF TO cl_gui_splitter_container.

  IF pv_split IS NOT INITIAL.
    CREATE OBJECT pv_splitter
      EXPORTING
        parent  = pv_split->get_container( row = pv_p1 column = pv_p2 )
        rows    = pv_c1
        columns = pv_c2.
  ENDIF.


ENDFORM.                    " FRM_SPLIT_CONT
*&---------------------------------------------------------------------*
*&      Form  FRM_SPLIT_CONT_SET
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_G_SPLITTER1  text
*      -->P_1      text
*      -->P_1      text
*      <--P_PA_TOP1  text
*----------------------------------------------------------------------*
FORM frm_split_set_grid
                  USING pv_split TYPE REF TO cl_gui_splitter_container
                                  p_v1
                                  p_v2
                                  I
                         CHANGING cv_grid TYPE REF TO cl_gui_alv_grid.

  DATA: pv_cont TYPE REF TO cl_gui_container.

  CALL METHOD pv_split->get_container
    EXPORTING
      row       = p_v1
      column    = p_v2
    RECEIVING
      container = pv_cont.
  IF sy-subrc = 0.
    CREATE OBJECT cv_grid  "创建第一个ALV,并放在容器中
      EXPORTING
        i_parent = pv_cont.
    CASE I.
      WHEN 1.
        gs_layout-GRID_TITLE = '责任部门与异常零件点数统计' .
        CALL METHOD cv_grid->set_frontend_layout
          EXPORTING
            is_layout = gs_layout.

        CALL METHOD cv_grid->set_table_for_first_display
          EXPORTING
            is_layout       = gs_layout
          CHANGING
            it_outtab       = gt_HB1[]
            it_fieldcatalog = gt_fieldcat1[].
      WHEN 2.
        gs_layout-GRID_TITLE = '责任部门与延迟天数统计' .
        CALL METHOD cv_grid->set_frontend_layout
          EXPORTING
            is_layout = gs_layout.
        CALL METHOD cv_grid->set_table_for_first_display
          EXPORTING
            is_layout       = gs_layout
          CHANGING
            it_outtab       = gt_HB2[]
            it_fieldcatalog = gt_fieldcat2[].
      WHEN 3.
        gs_layout-GRID_TITLE = '责任部门与责任人异常零件点数统计TOP10' .
        CALL METHOD cv_grid->set_frontend_layout
          EXPORTING
            is_layout = gs_layout.
        CALL METHOD cv_grid->set_table_for_first_display
          EXPORTING
            is_layout       = gs_layout
          CHANGING
            it_outtab       = gt_HB3[]
            it_fieldcatalog = gt_fieldcat3[].
      WHEN OTHERS.
    ENDCASE.

  ENDIF.
ENDFORM.                    " FRM_SPLIT_CONT_SET
        " FRM_FORECAST_COLUMN_FORMAT
*&---------------------------------------------------------------------*
*&      Form  FRM_SEND_EMAIL
*&---------------------------------------------------------------------*
*       发邮件
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_send_email .
  DATA:ls_solix          TYPE solix,
       lc_xls_type       TYPE so_obj_tp VALUE 'XLS', "文件格式
       lr_sender         TYPE REF TO if_sender_bcs, "发送者对象
       lt_binary_content TYPE solix_tab,
       lv_mailto         TYPE ad_smtpadr,
       lt_binary         TYPE solix_tab,
       lv_sent_to_all    TYPE os_boolean,
       lt_main_text      TYPE bcsy_text,
       lr_send_req       TYPE REF TO cl_bcs,
       lr_document       TYPE REF TO cl_document_bcs,
       lr_recipient      TYPE REF TO if_recipient_bcs,
       lr_bcs_exception  TYPE REF TO cx_bcs.

* - 获取发送的邮箱

  "二进制文件
  LOOP AT gt_xml_table_forecast INTO ls_solix-line.
    APPEND ls_solix TO lt_binary.
    CLEAR ls_solix.
  ENDLOOP.

  TRY .
      "创建发送请求
      lr_send_req = cl_bcs=>create_persistent( ).

      "创建和设置带有附件的文档
      "从带有文本的内部表创建文档对象
      APPEND '邮件正文!' TO lt_main_text.
      lr_document = cl_document_bcs=>create_document(
      i_type = 'HTM'
      i_text = lt_main_text
      i_subject = '邮件标题' ).

      "将电子表格作为附件添加到文档对象
      lr_document->add_attachment(
      i_attachment_type = lc_xls_type
      i_attachment_subject = '邮件附件名称'
      i_att_content_hex = lt_binary ).

      "添加文档对象以发送请求
      lr_send_req->set_document( lr_document ).

      "取得发送者
      lr_sender = cl_sapuser_bcs=>create( 'BASIS').
      lr_send_req->set_sender( lr_sender ).

      "添加收件人(电子邮件地址)
      lv_mailto = '979621537@qq.com'. ""测试邮箱,需要修改为自己的邮箱,不要给博客作者发邮件
      "创建接收对象
      lr_recipient = cl_cam_address_bcs=>create_internet_address( lv_mailto ).

      "添加接收对象以发送请求
      lr_send_req->add_recipient( lr_recipient ).


      "立即发送
      CALL METHOD lr_send_req->set_send_immediately( 'X' ).
      lr_send_req->set_status_attributes( i_requested_status = 'E' i_status_mail = 'R' ).
      lv_sent_to_all = lr_send_req->send( i_with_error_screen = 'X' ).

      COMMIT WORK.

      IF lv_sent_to_all IS INITIAL.
        MESSAGE i500(sbcoms) WITH lv_mailto.
      ELSE.
        MESSAGE s022(so).
      ENDIF.

      "异常处理
    CATCH cx_bcs INTO lr_bcs_exception.
      MESSAGE i865(so) WITH lr_bcs_exception->error_type.
  ENDTRY.
ENDFORM.                    " FRM_SEND_EMAIL

*&---------------------------------------------------------------------*
*&      Form  FRM_PROCESS_XML_DATA
*&---------------------------------------------------------------------*
*       附件xml
*----------------------------------------------------------------------*
*      -->P_1      text
*----------------------------------------------------------------------*
FORM frm_process_xml_data.
  DATA: l_ixml          TYPE REF TO if_ixml,
        l_streamfactory TYPE REF TO if_ixml_stream_factory,
        l_ostream       TYPE REF TO if_ixml_ostream,
        l_renderer      TYPE REF TO if_ixml_renderer,
        l_document      TYPE REF TO if_ixml_document.

  DATA: l_element_root TYPE REF TO if_ixml_element,
        r_element      TYPE REF TO if_ixml_element,
        r_worksheet    TYPE REF TO if_ixml_element,
        r_table        TYPE REF TO if_ixml_element,
        r_column       TYPE REF TO if_ixml_element,
        r_row          TYPE REF TO if_ixml_element,
        r_cell         TYPE REF TO if_ixml_element,
        r_data         TYPE REF TO if_ixml_element,
        l_xml_size     TYPE i,
        lv_rc          TYPE i,
        l_value        TYPE string.

*  create a ixml factory
  l_ixml = cl_ixml=>create( ).

*  create the DOM object model
  l_document = l_ixml->create_document( ).

*  create workbook
  PERFORM create_workbook USING l_document r_worksheet r_table.

*  column formatting
  PERFORM frm_forecast_column_format USING l_document r_table.


* XML作为二进制数据流保存到内表
*   creating a stream factory
  l_streamfactory = l_ixml->create_stream_factory( ).

*   connect internal xml table to stream factory
  l_ostream = l_streamfactory->create_ostream_itable( table = gt_xml_table_forecast ).

*   rendering the document
  l_renderer = l_ixml->create_renderer( ostream = l_ostream document = l_document ).
  lv_rc = l_renderer->render( ).

* saving the xml document
  l_xml_size = l_ostream->get_num_written_raw( ).
ENDFORM.             " FRM_PROCESS_XML_DATA
             " FRM_PROCESS_XML_DATA
*&---------------------------------------------------------------------*
*&      Form  CREATE_WORKBOOK
*&---------------------------------------------------------------------*
*       新建工作区
*----------------------------------------------------------------------*
*      -->P_L_DOCUMENT  text
*      -->P_R_WORKSHEET  text
*      -->P_R_TABLE  text
*----------------------------------------------------------------------*
FORM create_workbook USING l_document  TYPE REF TO if_ixml_document
      r_worksheet TYPE REF TO if_ixml_element
      r_table     TYPE REF TO if_ixml_element.

  DATA: l_element_root       TYPE REF TO if_ixml_element,
        lr_ns_attribute         TYPE REF TO if_ixml_attribute,
        lr_element_properties TYPE REF TO if_ixml_element,
        lr_styles             TYPE REF TO if_ixml_element,
        lr_style              TYPE REF TO if_ixml_element,
        lr_border             TYPE REF TO if_ixml_element,
        lr_format             TYPE REF TO if_ixml_element,
        l_value              TYPE string.

*  create root node 'workbook'
  l_element_root = l_document->create_simple_element( name = 'Workbook' parent = l_document ).
  l_element_root->set_attribute( name = 'xmlns' value = 'urn:schemas-microsoft-com:office:spreadsheet' ).

  lr_ns_attribute = l_document->create_namespace_decl( name = 'ss' prefix = 'xmlns'  uri = 'urn:schemas-microsoft-com:office:spreadsheet' ).
  l_element_root->set_attribute_node( lr_ns_attribute ).

  lr_ns_attribute = l_document->create_namespace_decl( name = 'x'  prefix = 'xmlns'  uri = 'urn:schemas-microsoft-com:office:excel' ).
  l_element_root->set_attribute_node( lr_ns_attribute ).

*  create node for document properties
  lr_element_properties = l_document->create_simple_element( name = 'TEST_REPORT' parent = l_element_root ).
  l_value = sy-uname.
  l_document->create_simple_element( name = 'Author' value = l_value parent = lr_element_properties ).

* Styles(类似css,可以被cell使用)
  lr_styles = l_document->create_simple_element( name = 'Styles' parent = l_element_root ).
* 预定义明细格式格式:Detail
  lr_style = l_document->create_simple_element( name = 'Style' parent = lr_styles ).
  lr_style->set_attribute_ns( name = 'ID'  prefix = 'ss' value = 'Detail' ).
"格式居中
  Lr_format = l_document->create_simple_element( name = 'Alignment' parent = lr_style ).
  Lr_format->set_attribute_ns( name = 'Horizontal' prefix = 'ss' value = 'Center' ).
  Lr_format->set_attribute_ns( name = 'Vertical' prefix = 'ss' value = 'Center' ).
  Lr_format->set_attribute_ns( name = 'WrapText'  prefix = 'ss'  value = '1' ).
  "边框
  lr_border = l_document->create_simple_element( name = 'Borders' parent = lr_style ).

  lr_format = l_document->create_simple_element( name = 'Border' parent = lr_border ).
  lr_format->set_attribute_ns( name = 'Position'  prefix = 'ss'  value = 'Bottom' ).
  lr_format->set_attribute_ns( name = 'LineStyle'  prefix = 'ss'  value = 'Continuous' ).
  lr_format->set_attribute_ns( name = 'Weight'  prefix = 'ss'  value = '2' ).

  lr_format = l_document->create_simple_element( name = 'Border' parent = lr_border ).
  lr_format->set_attribute_ns( name = 'Position'  prefix = 'ss'  value = 'Left' ).
  lr_format->set_attribute_ns( name = 'LineStyle'  prefix = 'ss'  value = 'Continuous' ).
  lr_format->set_attribute_ns( name = 'Weight'  prefix = 'ss'  value = '2' ).

  lr_format = l_document->create_simple_element( name = 'Border' parent = lr_border ).
  lr_format->set_attribute_ns( name = 'Position'  prefix = 'ss'  value = 'Top' ).
  lr_format->set_attribute_ns( name = 'LineStyle'  prefix = 'ss'  value = 'Continuous' ).
  lr_format->set_attribute_ns( name = 'Weight'  prefix = 'ss'  value = '2' ).

  lr_format = l_document->create_simple_element( name = 'Border' parent = lr_border ).
  lr_format->set_attribute_ns( name = 'Position'  prefix = 'ss'  value = 'Right' ).
  lr_format->set_attribute_ns( name = 'LineStyle'  prefix = 'ss'  value = 'Continuous' ).
  lr_format->set_attribute_ns( name = 'Weight'  prefix = 'ss'  value = '2' ).
*  worksheet
  r_worksheet = l_document->create_simple_element( name = 'Worksheet' parent = l_element_root ).
  r_worksheet->set_attribute_ns( name = 'Name' prefix = 'ss' value = 'Sheet1' ).

*  table
  r_table = l_document->create_simple_element( name = 'Table' parent = r_worksheet ).
  r_table->set_attribute_ns( name = 'FullColumns' prefix = 'x' value = '1' ).
  r_table->set_attribute_ns( name = 'FullRows'    prefix = 'x' value = '1' ).
ENDFORM.                    " CREATE_WORKBOOK

*&---------------------------------------------------------------------*
*&      Form  FRM_FORECAST_COLUMN_FORMAT
*&---------------------------------------------------------------------*
*       表头与格式设置
*----------------------------------------------------------------------*
*      -->P_L_DOCUMENT  text
*      -->P_R_TABLE  text
*----------------------------------------------------------------------*
FORM frm_forecast_column_format  USING    l_document TYPE REF TO if_ixml_document
      r_table TYPE REF TO if_ixml_element.

  DATA: l_element_root TYPE REF TO if_ixml_element,
        lr_column       TYPE REF TO if_ixml_element,
        lr_row          TYPE REF TO if_ixml_element,
        lr_cell         TYPE REF TO if_ixml_element,
        r_format        TYPE REF TO if_ixml_element,
        lr_data         TYPE REF TO if_ixml_element,
        l_value        TYPE string.
*  设定列宽
    lr_column = l_document->create_simple_element( name = 'Column' parent = r_table ).
    lr_column->set_attribute_ns( name = 'Width' prefix = 'ss' value = '30' ).

  DO 15 TIMES.
    lr_column = l_document->create_simple_element( name = 'Column' parent = r_table ).
    lr_column->set_attribute_ns( name = 'Width' prefix = 'ss' value = '66' ).
  ENDDO.


*  设定列名
  lr_row = l_document->create_simple_element( name = 'Row' parent = r_table  ).
  lr_cell = l_document->create_simple_element( name = 'Cell' parent = lr_row ).
  lr_cell->set_attribute_ns(  name = 'MergeAcross' prefix = 'ss' value = '14').
  lr_cell->set_attribute_ns(  name = 'StyleID' prefix = 'ss' value = 'Detail').
  lr_data = l_document->create_simple_element( name = 'Data' value = '责任部门与异常零件点数统计'  parent = lr_cell ).
  lr_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ).

  lr_row = l_document->create_simple_element( name = 'Row' parent = r_table ).
  lr_row->set_attribute_ns( name = 'AutoFitHeight' prefix = 'ss' value = '1' ).
  DATA lv_value TYPE string.
*  data table1
  LOOP AT gt_fieldcat1 INTO DATA(ls_fieldcat).
    lr_cell = l_document->create_simple_element( name = 'Cell' parent = lr_row ).
    lv_value =  ls_fieldcat-coltext.
    lr_cell->set_attribute_ns(  name = 'StyleID' prefix = 'ss' value = 'Detail').
    lr_data = l_document->create_simple_element( name = 'Data' value = lv_value  parent = lr_cell ).
    lr_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ).
  ENDLOOP.

  LOOP AT gt_HB1 ASSIGNING FIELD-SYMBOL(<lfs_alv>).
    lr_row = l_document->create_simple_element( name = 'Row' parent = r_table ).
    LOOP AT gt_fieldcat1 INTO ls_fieldcat.
      ASSIGN COMPONENT ls_fieldcat-fieldname OF STRUCTURE <lfs_alv> TO FIELD-SYMBOL(<lfs_value>).
      lr_cell = l_document->create_simple_element( name = 'Cell' parent = lr_row ).
      lv_value = <lfs_value>.
      lr_cell->set_attribute_ns(  name = 'StyleID' prefix = 'ss' value = 'Detail').
      lr_data = l_document->create_simple_element( name = 'Data' value = lv_value parent = lr_cell ).
      lr_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ).
    ENDLOOP.
  ENDLOOP.


  lr_row = l_document->create_simple_element( name = 'Row' parent = r_table ).
  lr_row = l_document->create_simple_element( name = 'Row' parent = r_table ).
  lr_row = l_document->create_simple_element( name = 'Row' parent = r_table ).
  lr_row->set_attribute_ns( name = 'AutoFitHeight' prefix = 'ss' value = '1' ).
  lr_row = l_document->create_simple_element( name = 'Row' parent = r_table  ).
  lr_cell = l_document->create_simple_element( name = 'Cell' parent = lr_row ).
  lr_cell->set_attribute_ns(  name = 'MergeAcross' prefix = 'ss' value = '6').
  lr_cell->set_attribute_ns(  name = 'StyleID' prefix = 'ss' value = 'Detail').
  lr_data = l_document->create_simple_element( name = 'Data' value = '责任部门与延迟天数统计'  parent = lr_cell ).
  lr_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ).

  lr_row = l_document->create_simple_element( name = 'Row' parent = r_table ).
  lr_row->set_attribute_ns( name = 'AutoFitHeight' prefix = 'ss' value = '1' ).
*  data table1
  LOOP AT gt_fieldcat2 INTO ls_fieldcat.
    lr_cell = l_document->create_simple_element( name = 'Cell' parent = lr_row ).
    lv_value =  ls_fieldcat-coltext.
    lr_cell->set_attribute_ns(  name = 'StyleID' prefix = 'ss' value = 'Detail').
    lr_data = l_document->create_simple_element( name = 'Data' value = lv_value  parent = lr_cell ).
    lr_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ).
  ENDLOOP.

  LOOP AT gt_HB2 ASSIGNING FIELD-SYMBOL(<lfs_alv2>) .
    lr_row = l_document->create_simple_element( name = 'Row' parent = r_table ).
    LOOP AT gt_fieldcat2 INTO ls_fieldcat.
      ASSIGN COMPONENT ls_fieldcat-fieldname OF STRUCTURE <lfs_alv2> TO <lfs_value>.
      lr_cell = l_document->create_simple_element( name = 'Cell' parent = lr_row ).
      lv_value = <lfs_value>.
      lr_cell->set_attribute_ns(  name = 'StyleID' prefix = 'ss' value = 'Detail').
      lr_data = l_document->create_simple_element( name = 'Data' value = lv_value parent = lr_cell ).
      lr_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ).
    ENDLOOP.
  ENDLOOP.


  lr_row = l_document->create_simple_element( name = 'Row' parent = r_table ).
  lr_row = l_document->create_simple_element( name = 'Row' parent = r_table ).
  lr_row = l_document->create_simple_element( name = 'Row' parent = r_table ).
  lr_row->set_attribute_ns( name = 'AutoFitHeight' prefix = 'ss' value = '1' ).
  lr_row = l_document->create_simple_element( name = 'Row' parent = r_table  ).
  lr_cell = l_document->create_simple_element( name = 'Cell' parent = lr_row ).
  lr_cell->set_attribute_ns(  name = 'MergeAcross' prefix = 'ss' value = '15').
  lr_cell->set_attribute_ns(  name = 'StyleID' prefix = 'ss' value = 'Detail').
  lr_data = l_document->create_simple_element( name = 'Data' value = '责任部门与责任人异常零件点数统计TOP10'  parent = lr_cell ).
  lr_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ).

  lr_row = l_document->create_simple_element( name = 'Row' parent = r_table ).
  lr_row->set_attribute_ns( name = 'AutoFitHeight' prefix = 'ss' value = '1' ).
*  data table1
  LOOP AT gt_fieldcat3 INTO ls_fieldcat.
    lr_cell = l_document->create_simple_element( name = 'Cell' parent = lr_row ).
    lv_value =  ls_fieldcat-coltext.
    lr_cell->set_attribute_ns(  name = 'StyleID' prefix = 'ss' value = 'Detail').
    lr_data = l_document->create_simple_element( name = 'Data' value = lv_value  parent = lr_cell ).
    lr_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ).
  ENDLOOP.

  LOOP AT gt_HB3 ASSIGNING FIELD-SYMBOL(<lfs_alv3>) .
    lr_row = l_document->create_simple_element( name = 'Row' parent = r_table ).
    LOOP AT gt_fieldcat3 INTO ls_fieldcat.
      ASSIGN COMPONENT ls_fieldcat-fieldname OF STRUCTURE <lfs_alv3> TO <lfs_value>.
      lr_cell = l_document->create_simple_element( name = 'Cell' parent = lr_row ).
      lv_value = <lfs_value>.
      lr_cell->set_attribute_ns(  name = 'StyleID' prefix = 'ss' value = 'Detail').
      lr_data = l_document->create_simple_element( name = 'Data' value = lv_value parent = lr_cell ).
      lr_data->set_attribute_ns( name = 'Type' prefix = 'ss' value = 'String' ).
    ENDLOOP.
  ENDLOOP.

ENDFORM.                    " FRM_FORECAST_COLUMN_FORMAT

分别双击红框中的代码创建屏幕,按钮,标题

双击 CALL SCREEN 9000.中的9000创建9000屏幕,

 屏幕画出表控件,命名为ALV,勾选垂直和水平,然后激活

 元素清单给OK_CODE

双击 CALL SCREEN 8000.中的8000创建8000屏幕,分屏展示的alv不用画屏幕

 双击 SET PF-STATUS '9000'.中的9000 创建按钮

 双击SET TITLEBAR '9000'.中的9000创建标题

 常驻CSDN有什么问题欢迎留言

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值