Tree Control对象与ALV Grid对象关联实例

来源:互联网 发布:剑三纯阳萝莉捏脸数据 编辑:程序博客网 时间:2024/06/10 21:43

1.程序准备


新建两个结构ZTET_Y008A、ZTET_Y008B



2.新建屏幕和GUI状态


3.程序实现

REPORT ZTEST_Y008B.

TABLESmsegekbeekkot024lfa1,makt.
*功能码返回值
DATAOK_CODE TYPE SY-UCOMM,
      SAVE_OK TYPE SY-UCOMM.


*定制对象
DATAWA_CONTAINER TYPE SCRFNAME VALUE 'TREE',
      WA_CONTAINERALV TYPE SCRFNAME VALUE 'ALV',
*客户对象
      WA_CUSTOM_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
      WA_CUSTOM_CONTAINERALV TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
      WA_TREE TYPE REF TO CL_GUI_SIMPLE_TREE,
      WA_ALV TYPE REF TO CL_GUI_ALV_GRID.

*NODE节点表
DATANODE_TABLE LIKE TABLE OF MTREESNODE,
*节点
      NODE1 TYPE MTREESNODE.

*当双击时取得节点KEY值与节点文本值变量
DATANODEKEY(200VALUE 'NODE',
      NODETEXT(200VALUE 'NODE'.

*DATA: BEGIN OF wa_table ,
*        bukrs  LIKE ekko-bukrs,    "工厂
*        ebeln  LIKE ekko-ebeln,   "采购订单编号
*        ekorg  LIKE ekko-ekorg,   "采购组织
*        ekgrp  LIKE ekko-ekgrp,    "采购组
*        lifnr  LIKE ekko-lifnr,   "供应商帐户号
*        ebelp  LIKE ekpo-ebelp,   "采购订单行项目编号
*        matnr  LIKE ekpo-matnr,   "采购订单行项目物料号
*        BUDAT_MKPF  LIKE ekbe-BUDAT_MKPF,    "过帐日期
*        menge  LIKE ekbe-menge,   "入库数量
*        ernam  LIKE ekbe-ernam,    "创建者
*        etenr  LIKE eket-etenr,  "计划行
*        eindt  LIKE eket-eindt,  "交货日期
*        slfdt  LIKE eket-slfdt,  "相关交货日期
*        wemng  LIKE eket-wemng,  "已交货数量
*        banfn  LIKE eket-banfn,  "采购申请
*
*      END OF wa_table.
*
*DATA WA_SPFLI like table of wa_table WITH HEADER LINE.
*DATA WA_SPFLI TYPE TABLE OF SPFLI WITH HEADER LINE.
DATA WA_SPFLI TYPE TABLE OF ZTET_Y008A WITH HEADER LINE.
*定义内表,变量需要传递,不加HEADER LINE
*DATA: BEGIN OF gw_table ,
*        mjahr  LIKE  mseg-mjahr,  "凭证年度
*        mblnr  LIKE  mseg-mblnr,  "凭证号
*        zeile  LIKE  mseg-zeile,   "凭证项目
*        bwart  LIKE  mseg-bwart,   "移动类型(库存管理)
*        lgort  LIKE  mseg-lgort,    "库存地点
*        menge  LIKE  mseg-menge,  "以输入单位计的数量
*        meins  LIKE  mseg-meins,   "采购订单单位
*        ebeln  LIKE  mseg-ebeln,  "采购订单
*        BUDAT_MKPF_mkpf  LIKE  mseg-BUDAT_MKPF_mkpf, "入库日
*      END OF gw_table.
DATA WA_SFLIGHT TYPE TABLE OF ZTET_Y008B.
*DATA WA_SFLIGHT TYPE TABLE OF SFLIGHT.

*
*SELECTION-SCREEN BEGIN OF BLOCK block1 WITH FRAME TITLE b_title1 .
*PARAMETERS: p_bukrs LIKE ekko-bukrs OBLIGATORY DEFAULT 3500 . "公司代码
*SELECT-OPTIONS: s_lifnr FOR mseg-lifnr MEMORY ID lif ,          "供应商编号
*    s_ebeln FOR mseg-ebeln MEMORY ID bes ,          "采购订单
*    s_matnr FOR mseg-matnr MEMORY ID mat .          "物料代码
*SELECTION-SCREEN END OF BLOCK block1.


*定义对象,定义对象的双击方法,用于将该对象双击方法分配到树双击事件
CLASS LCL_APPLICATION DEFINITION DEFERRED.
DATA EVENT_RECEIVER TYPE REF TO LCL_APPLICATION.



CLASS LCL_APPLICATION DEFINITION.
  PUBLIC SECTION.
*自定义双击方法,参数为节点关键字
  METHODS HANDLE_NODE_DOUBLE_CLICK
      FOR EVENT NODE_DOUBLE_CLICK
       OF CL_GUI_SIMPLE_TREE
       IMPORTING NODE_KEY.
ENDCLASS.

CLASS LCL_APPLICATION IMPLEMENTATION.
  METHOD HANDLE_NODE_DOUBLE_CLICK.
    NODEKEY NODE_KEY.
    READ TABLE NODE_TABLE WITH KEY NODE_KEY NODE_KEY INTO NODE1.
    NODETEXT NODE1-TEXT.

   CLEAR WA_SFLIGHT.
   SELECT ekko~bukrs "工厂
          ekko~ebeln "采购订单编号
          ekko~ekorg "采购组织
          ekko~ekgrp "采购组
          ekko~lifnr "供应商帐户号
          ekpo~ebelp  "采购订单行项目
          ekpo~matnr  "采购订单行项目物料
          ekbe~BUDAT    "过帐日期
          ekbe~menge   "入库数量  ?在工作 不具有相应字段
          ekbe~ernam    "创建者
          eket~etenr  "计划行
          eket~eindt  "交货日期
          eket~slfdt  "相关交货日期
          eket~wemng  "已交货数量
          eket~banfn  "采购申请
          FROM  ekko  "从表里读取数据
         INNER JOIN ekpo ON ekpo~ebeln ekko~ebeln "连接MARC表 ,连接条件是PO号相等
         INNER JOIN ekbe ON ekbe~ebeln ekko~ebeln "连接MARC表 ,连接条件是PO号相等
         INNER JOIN eket ON eket~ebeln ekko~ebeln "连接MARC表 ,连接条件是PO号相等
          INTO CORRESPONDING FIELDS OF TABLE WA_SFLIGHT  "将查询结果放到内表里
    WHERE ekko~bukrs '3500' " 条件是和查询条件里的值相等
    AND   ekko~ebeln  '3500007055'.

  SORT WA_SFLIGHT BY  banfn .
  DELETE ADJACENT DUPLICATES FROM WA_SFLIGHT COMPARING banfn.

*    SELECT * INTO TABLE WA_SFLIGHT FROM SFLIGHT
*      WHERE BUDAT_MKPF = NODE1-NODE_KEY+2(2)
*        AND CONNID = NODE1-NODE_KEY+4(4).

    CALL METHOD WA_ALV->SET_TABLE_FOR_FIRST_DISPLAY
      EXPORTING
        I_STRUCTURE_NAME 'ZTET_Y008B'
      CHANGING
        IT_OUTTAB WA_SFLIGHT.
   ENDMETHOD.
ENDCLASS.

DATA G_APPLICATION TYPE REF TO LCL_APPLICATION.

START-OF-SELECTION.
* SELECT * INTO TABLE WA_SPFLI FROM SPFLI
*    ORDER BY EBELN BUDAT_MKPF ASCENDING.

   SELECT
   ebeln
   mjahr
   mblnr
   zeile
   bwart
   lgort
   meins
   BUDAT_mkpf
   FROM mseg
   INTO CORRESPONDING FIELDS OF TABLE  WA_SPFLI
   WHERE EBELN '3500007055'
   and WERKS '3500'"p_bukrs'
   and bwart '101'."排除不是101的行

  CREATE OBJECT G_APPLICATION.
  SET SCREEN 100.

MODULE STATUS_0100 OUTPUT.
  SET PF-STATUS 'MAIN'.
  IF WA_CUSTOM_CONTAINER IS INITIAL.
    PERFORM CREATE_TREE.
  ENDIF.
ENDMODULE.

MODULE USER_COMMAND_0100 INPUT.
  SAVE_OK OK_CODE.
  CLEAR OK_CODE.
  CASE SAVE_OK.
    WHEN 'BACK' OR 'EXIT' OR 'CANC' .
      LEAVE PROGRAM.
  ENDCASE.
ENDMODULE.

FORM CREATE_TREE.
 DATAEVENTS TYPE CNTL_SIMPLE_EVENTS,
       EVENT1 TYPE CNTL_SIMPLE_EVENT.

*建立定制控制对象
  CREATE OBJECT WA_CUSTOM_CONTAINER
  EXPORTING
    CONTAINER_NAME WA_CONTAINER.

*创建ALV对象
  CREATE OBJECT WA_CUSTOM_CONTAINERALV
  EXPORTING
    CONTAINER_NAME WA_CONTAINERALV.

  CREATE OBJECT WA_ALV
  EXPORTING
    I_PARENT WA_CUSTOM_CONTAINERALV.

*建立树对象
  CREATE OBJECT WA_TREE
  EXPORTING
    PARENT WA_CUSTOM_CONTAINER
    NODE_SELECTION_MODE CL_GUI_SIMPLE_TREE=>NODE_SEL_MODE_SINGLE.

  IF SY-SUBRC <> 0.
  ENDIF.

*  DATA: EBELN LIKE SPFLI-EBELN,
*        BUDAT_MKPF LIKE SPFLI-BUDAT_MKPF.

  DATAmblnr LIKE MSEG-mblnr,
        bwart LIKE MSEG-bwart.

  DATA:STR1(255).

  LOOP AT WA_SPFLI.
    IF mblnr NE WA_SPFLI-mblnr.
      CLEAR NODE1.
      NODE1-NODE_KEY WA_SPFLI-mblnr.
*第一层
      CLEAR NODE1-RELATKEY.
      CLEAR NODE1-RELATSHIP.
*是文件夹
      NODE1-HIDDEN ''.
      NODE1-DISABLED ''.
      NODE1-ISFOLDER 'X'.
*不带ICON
      CLEAR NODE1-N_IMAGE.
      CLEAR NODE1-EXP_IMAGE.
      CLEAR NODE1-EXPANDER.

      NODE1-TEXT WA_SPFLI-mblnr.
      APPEND NODE1 TO NODE_TABLE.
    ENDIF.
*
*    IF ( mblnr NE WA_SPFLI-mblnr ) OR ( bwart <> WA_SPFLI-bwart ).
*      CLEAR NODE1.
*      CONCATENATE WA_SPFLI-mblnr WA_SPFLI-bwart INTO NODE1-NODE_KEY.
**上层关系
*      NODE1-RELATKEY = WA_SPFLI-mblnr.
*      NODE1-RELATSHIP = CL_GUI_SIMPLE_TREE=>RELAT_LAST_CHILD.
*      NODE1-HIDDEN = ''.
*      NODE1-DISABLED = ''.
*      NODE1-ISFOLDER = 'X'.
*      CLEAR NODE1-N_IMAGE.
*      CLEAR NODE1-EXP_IMAGE.
*      CLEAR NODE1-EXPANDER.
**节点显示BUDAT_MKPF
*      NODE1-TEXT = WA_SPFLI-bwart.
*      APPEND NODE1 TO NODE_TABLE.
*    ENDIF.

    mblnr WA_SPFLI-mblnr.
    bwart WA_SPFLI-bwart.
    CLEAR NODE1.
    CONCATENATE WA_SPFLI-mblnr WA_SPFLI-MEINS  INTO NODE1-NODE_KEY.

    NODE1-RELATKEY WA_SPFLI-mblnr.
    NODE1-RELATSHIP CL_GUI_SIMPLE_TREE=>RELAT_LAST_CHILD.
    NODE1-HIDDEN ''.
    NODE1-DISABLED ''.
    NODE1-ISFOLDER 'X'.
    NODE1-N_IMAGE '@5B@'.
    NODE1-EXP_IMAGE '@5B@'.
    CLEAR NODE1-EXPANDER.
    "CONCATENATE WA_SPFLI-mblnr ':' WA_SPFLI-bwart INTO STR1.
    "NODE1-TEXT = STR1.
    NODE1-TEXT WA_SPFLI-BUDAT_MKPF .
    APPEND NODE1 TO NODE_TABLE.
  ENDLOOP.

*按照节点内容添加节点
  CALL METHOD WA_TREE->ADD_NODES
  EXPORTING
    TABLE_STRUCTURE_NAME 'MTREESNODE'
    NODE_TABLE NODE_TABLE.
  IF SY-SUBRC <> 0.
  ENDIF.

*定义双击事件
  EVENT1-EVENTID CL_GUI_SIMPLE_TREE=>EVENTID_NODE_DOUBLE_CLICK.
  EVENT1-APPL_EVENT 'X'.
  APPEND EVENT1 TO EVENTS.

  CALL METHOD WA_TREE->SET_REGISTERED_EVENTS
    EXPORTING
      EVENTS EVENTS.

  IF SY-SUBRC <> 0.
  ENDIF.

*将已定义的双击事件分配至树对象
  SET HANDLER G_APPLICATION->HANDLE_NODE_DOUBLE_CLICK FOR WA_TREE.
ENDFORM.

最后效果图


0 0
原创粉丝点击