• ABAP DEMO ALVtree显示BOM层级


    展示效果:

    *&---------------------------------------------------------------------*
    *& Report YCX_015
    *&---------------------------------------------------------------------*
    *&
    *&---------------------------------------------------------------------*
    REPORT ycx_015 MESSAGE-ID zpp01.
    
    TABLES: stpox.
    INCLUDE <icon>.
    CLASS: cl_gui_column_tree DEFINITION LOAD,
           cl_gui_cfw DEFINITION LOAD .
    DATA: tree1      TYPE REF TO cl_gui_alv_tree,
          mr_toolbar TYPE REF TO cl_gui_toolbar.
    DATA: gs_stpox        TYPE stpox,
          gt_stpox        TYPE stpox OCCURS 0,
          gt_fieldcatalog TYPE lvc_t_fcat,
          gt_item_layout  TYPE lvc_t_laci,
          gs_item_layout  TYPE lvc_s_laci,
          okcode          LIKE sy-ucomm.
    TYPES: BEGIN OF gs_f.
             INCLUDE STRUCTURE stpox.
             TYPES: node_key TYPE lvc_nkey,
           END   OF gs_f.
    DATA: gs_xstpox TYPE gs_f,
          gt_xstpox TYPE gs_f OCCURS 0.
    
    DATA: l_custom_container TYPE REF TO cl_gui_custom_container.
    
    DATA: wa_topmat TYPE cstmat,
          wa_dstst  TYPE csdata-xfeld.
    DATA: it_matcat TYPE STANDARD TABLE OF cscmat.
    
    
    
    PARAMETERS:p_matnr LIKE mast-matnr  OBLIGATORY,
               p_werks LIKE mast-werks  OBLIGATORY,
               p_stlal LIKE mast-stlal  OBLIGATORY DEFAULT '01',   "可选的 BOM
               p_capid LIKE rc29l-capid OBLIGATORY DEFAULT 'PP01'. "BOM应用程序
    
    *PARAMETERS: p_matnr LIKE mara-matnr, "DEFAULT 'YW25K',
    *            p_werks LIKE ekpo-werks. "DEFAULT '1010' .
    
    START-OF-SELECTION.
      PERFORM getdata.
      CALL SCREEN 9000.
    
    
    *&---------------------------------------------------------------------*
    *&      Form  getdata
    *&---------------------------------------------------------------------*
    FORM getdata.
    
    *&bom explosion
    *  CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'
    **   EXPORTING
    **     FTREL                       = ' '
    **     ALEKZ                       = ' '
    **     ALTVO                       = ' '
    **     AUFSW                       = ' '
    **     AUMGB                       = ' '
    **     AUMNG                       = 0
    **     AUSKZ                       = ' '
    **     AMIND                       = ' '
    **     BAGRP                       = ' '
    **     BEIKZ                       = ' '
    **     BESSL                       = ' '
    **     BGIXO                       = ' '
    **     BREMS                       = ' '
    **     CAPID                       = 'STD1'
    **     CHLST                       = ' '
    **     COSPR                       = ' '
    **     CUOBJ                       = 000000000000000
    **     CUOVS                       = 0
    **     CUOLS                       = ' '
    **     DATUV                       = 00000000
    **     DELNL                       = ' '
    **     DRLDT                       = ' '
    **     EHNDL                       = ' '
    **     EMENG                       = 0
    **     ERSKZ                       = ' '
    **     ERSSL                       = ' '
    **     FBSTP                       = ' '
    **     KNFBA                       = ' '
    **     KSBVO                       = ' '
    **     MBWLS                       = ' '
    **     MKTLS                       = 'X'
    **     MDMPS                       = ' '
    **     MEHRS                       = ' '
    **     MKMAT                       = ' '
    **     MMAPS                       = ' '
    **     SALWW                       = ' '
    **     SPLWW                       = ' '
    **     MMORY                       = ' '
    **     MTNRV                       = ' '
    **     NLINK                       = ' '
    **     POSTP                       = ' '
    **     RNDKZ                       = ' '
    **     RVREL                       = ' '
    **     SANFR                       = ' '
    **     SANIN                       = ' '
    **     SANKA                       = ' '
    **     SANKO                       = ' '
    **     SANVS                       = ' '
    **     SCHGT                       = ' '
    **     STKKZ                       = ' '
    **     STLAL                       = ' '
    **     STLAN                       = ' '
    **     STPST                       = 0
    **     SVWVO                       = 'X'
    **     WERKS                       = ' '
    **     NORVL                       = ' '
    **     MDNOT                       = ' '
    **     PANOT                       = ' '
    **     QVERW                       = ' '
    **     VERID                       = ' '
    **     VRSVO                       = 'X'
    **   IMPORTING
    **     TOPMAT                      =
    **     DSTST                       =
    *    TABLES
    *      STB                         =
    **     MATCAT                      =
    **   EXCEPTIONS
    **     ALT_NOT_FOUND               = 1
    **     CALL_INVALID                = 2
    **     MATERIAL_NOT_FOUND          = 3
    **     MISSING_AUTHORIZATION       = 4
    **     NO_BOM_FOUND                = 5
    **     NO_PLANT_DATA               = 6
    **     NO_SUITABLE_BOM_FOUND       = 7
    **     CONVERSION_ERROR            = 8
    **     OTHERS                      = 9
    
      CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'
        EXPORTING
          capid                 = p_capid  "'CAD1'
          datuv                 = sy-datum
          emeng                 = '1'      "基本用量
          mtnrv                 = p_matnr
          werks                 = p_werks
          mktls                 = 'X' "p_key
          mehrs                 = 'X'       "p_mehrs
          stlal                 = p_stlal     "可选BOM
          stlan                 = '1'      "BOM 用途
    *     emeng                 = 1
        IMPORTING
          topmat                = wa_topmat
          dstst                 = wa_dstst
        TABLES
          stb                   = gt_stpox
          matcat                = it_matcat
        EXCEPTIONS
          alt_not_found         = 1
          call_invalid          = 2
          material_not_found    = 3
          missing_authorization = 4
          no_bom_found          = 5
          no_plant_data         = 6
          no_suitable_bom_found = 7
          conversion_error      = 8
          OTHERS                = 9.
    *  CASE sy-subrc .
    *    WHEN 1 .
    *      MESSAGE e899(fi) WITH 'alt_not_found'.
    *    WHEN 2 .
    *      MESSAGE e899(fi) WITH 'call_invalid '.
    *    WHEN 3 .
    *      MESSAGE e899(fi) WITH 'material_not_found'.
    *    WHEN 4 .
    *      MESSAGE e899(fi) WITH 'missing_authorization'.
    *    WHEN 5 .
    *      MESSAGE e899(fi) WITH 'no_bom_found'.
    *    WHEN 6 .
    *      MESSAGE e899(fi) WITH 'no_plant_data'.
    *    WHEN 7 .
    *      MESSAGE e899(fi) WITH 'no_suitable_bom_found'.
    *    WHEN 8 .
    *      MESSAGE e899(fi) WITH 'conversion_error'.
    *    WHEN 9 .
    *      MESSAGE e899(fi) WITH 'OTHERS Error'.
    *  ENDCASE.
      LOOP AT gt_stpox INTO gs_stpox.
        MOVE-CORRESPONDING gs_stpox TO gs_xstpox .
        APPEND gs_xstpox TO gt_xstpox.
      ENDLOOP.
    ENDFORM.                    "getdata
    *----------------------------------------------------------------------*
    *  MODULE status_9000 OUTPUT
    *----------------------------------------------------------------------*
    MODULE status_9000 OUTPUT.
      SET PF-STATUS 'MAIN'.
      SET TITLEBAR 'TITLE'.
      IF tree1 IS INITIAL.
        PERFORM init_tree.
      ENDIF.
      CALL METHOD cl_gui_cfw=>flush.
    ENDMODULE.                 " PBO_9000  OUTPUT
    *----------------------------------------------------------------------*
    *  MODULE user_command_9000 INPUT
    *----------------------------------------------------------------------*
    MODULE user_command_9000 INPUT.
      CASE okcode.
        WHEN '&F03'  OR '&F15' OR '&F12'."'EXIT' OR 'BACK' OR 'CANC'.
          CALL METHOD tree1->free.
          LEAVE PROGRAM .
        WHEN OTHERS.
          CALL METHOD cl_gui_cfw=>dispatch.
      ENDCASE.
      CLEAR okcode.
      CALL METHOD cl_gui_cfw=>flush.
    ENDMODULE.                 " okcode  INPUT
    *&---------------------------------------------------------------------*
    *&      Module  EXIT  INPUT
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    MODULE exit INPUT.
      CASE okcode.
        WHEN '&F03'  OR '&F15' OR '&F12'."'EXIT' OR 'BACK' OR 'CANC'.
          CALL METHOD tree1->free.
          LEAVE PROGRAM .
        WHEN OTHERS.
    *      CALL METHOD cl_gui_cfw=>dispatch.
      ENDCASE.
      CLEAR okcode.
      CALL METHOD cl_gui_cfw=>flush.
    
    ENDMODULE.
    *&---------------------------------------------------------------------*
    *&      Form  init_tree
    *&---------------------------------------------------------------------*
    FORM init_tree .
      PERFORM build_fieldcatalog.
      IF sy-batch IS INITIAL.
        CREATE OBJECT l_custom_container
          EXPORTING
            container_name              = 'TREE1'
          EXCEPTIONS
            cntl_error                  = 1
            cntl_system_error           = 2
            create_error                = 3
            lifetime_error              = 4
            lifetime_dynpro_dynpro_link = 5.
        IF sy-subrc <> 0.
          MESSAGE e000(00) WITH '创建容器:TREE1 错误'.
        ENDIF.
      ENDIF.
      CREATE OBJECT tree1
        EXPORTING
          parent                      = l_custom_container
    *     parent                      = cl_gui_container=>d0
          node_selection_mode         = cl_gui_column_tree=>node_sel_mode_single
          item_selection              = 'X'
          no_html_header              = 'X'
          no_toolbar                  = ' '
        EXCEPTIONS
          cntl_error                  = 1
          cntl_system_error           = 2
          create_error                = 3
          lifetime_error              = 4
          illegal_node_selection_mode = 5
          failed                      = 6
          illegal_column_name         = 7.
      IF sy-subrc <> 0.
        MESSAGE e000 WITH '创建TREE错误'.
      ENDIF.
      DATA l_hierarchy_header TYPE treev_hhdr.
      PERFORM build_hierarchy_header CHANGING l_hierarchy_header.
      DATA: ls_variant TYPE disvariant.
      ls_variant-report = sy-repid.
      CALL METHOD tree1->set_table_for_first_display
        EXPORTING
          is_hierarchy_header = l_hierarchy_header
          i_background_id     = 'ALV_BACKGROUND'
          i_save              = 'A'
          is_variant          = ls_variant
        CHANGING
          it_outtab           = gt_stpox "table must be emty !!
          it_fieldcatalog     = gt_fieldcatalog.
      DATA: l1         TYPE lvc_nkey,l2 TYPE lvc_nkey,l3 TYPE lvc_nkey,l4 TYPE lvc_nkey,
            l5         TYPE lvc_nkey,l6 TYPE lvc_nkey,l7 TYPE lvc_nkey,l8 TYPE lvc_nkey,
            l_key      TYPE lvc_nkey,
            l_last_key TYPE lvc_nkey,
            added .
      LOOP AT gt_xstpox INTO gs_xstpox .
        MOVE-CORRESPONDING gs_xstpox TO gs_stpox.
        CASE gs_stpox-stufe .
          WHEN '1'.
            l_key = ''.
          WHEN '2'.
            l_key = l1.
          WHEN '3'.
            l_key = l2.
          WHEN '4'.
            l_key = l3.
          WHEN '5'.
            l_key = l4.
          WHEN '6'.
            l_key = l5.
        ENDCASE.
        PERFORM add_complete_line USING  gs_stpox l_key
                                CHANGING l_last_key.
        gs_xstpox-node_key = l_last_key.
        CASE gs_stpox-stufe .
          WHEN '1'.
            l1 = l_last_key.
          WHEN '2'.
            l2 = l_last_key.
          WHEN '3'.
            l3 = l_last_key.
          WHEN '4'.
            l4 = l_last_key.
          WHEN '5'.
            l5 = l_last_key.
          WHEN '6'.
            l6 = l_last_key.
        ENDCASE.
        MODIFY gt_xstpox FROM gs_xstpox .
      ENDLOOP.
      CALL METHOD tree1->update_calculations.
      CALL METHOD tree1->frontend_update.
    ENDFORM.                    " init_tree
    *&---------------------------------------------------------------------*
    *&      Form  build_fieldcatalog
    *&---------------------------------------------------------------------*
    FORM build_fieldcatalog.
      CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
        EXPORTING
          i_structure_name = 'STPOX'
        CHANGING
          ct_fieldcat      = gt_fieldcatalog.
      DATA: ls_fieldcatalog TYPE lvc_s_fcat.
      LOOP AT gt_fieldcatalog INTO ls_fieldcatalog.
    *    CASE ls_fieldcatalog-fieldname.
    *      WHEN 'CARRID' OR 'CONNID' OR 'FLDATE'.
    *        ls_fieldcatalog-no_out = 'X'.
    *        ls_fieldcatalog-key    = ''.
    *      WHEN 'PRICE' OR 'SEATSOCC' OR 'SEATSMAX' OR 'PAYMENTSUM'.
    **        ls_fieldcatalog-do_sum = 'X'.
    *      WHEN 'PLANETYPE'.
    *        ls_fieldcatalog-edit = 'X'.
    *        ls_fieldcatalog-style = cl_gui_alv_grid=>mc_style_enabled .
    *    ENDCASE.
        MODIFY gt_fieldcatalog FROM ls_fieldcatalog.
      ENDLOOP.
    ENDFORM.                               " build_fieldcatalog
    *&---------------------------------------------------------------------*
    *&      Form  build_hierarchy_header
    *&---------------------------------------------------------------------*
    FORM build_hierarchy_header CHANGING
                                   p_hierarchy_header TYPE treev_hhdr.
    *
      p_hierarchy_header-heading = 'BOM层次'.
      p_hierarchy_header-tooltip = 'ToolTip'.
      p_hierarchy_header-width = 30.
      p_hierarchy_header-width_pix = ''.
    *
    ENDFORM.                               " build_hierarchy_header
    *&---------------------------------------------------------------------*
    *&      Form  add_complete_line
    *&---------------------------------------------------------------------*
    FORM add_complete_line USING  ps_stpox TYPE stpox
                                   p_relat_key TYPE lvc_nkey
                         CHANGING  p_node_key TYPE lvc_nkey.
      DATA: l_node_text TYPE lvc_value.
    * set item-layout
      DATA: lt_item_layout TYPE lvc_t_layi,
            ls_item_layout TYPE lvc_s_layi.
      DATA: stufe_num(2) TYPE n.
      ls_item_layout-fieldname = tree1->c_hierarchy_column_name.
      ls_item_layout-class     = cl_gui_column_tree=>item_class_text.
    *  ls_item_layout-editable  = 'X'.
    *  ls_item_layout-chosen    = 'X'.  " 设置为选中状态
      APPEND ls_item_layout TO lt_item_layout.
    *  l_node_text =  ps_stpox-ojtxp.
      stufe_num = ps_stpox-stufe.
      CONCATENATE stufe_num ',' ps_stpox-ojtxp INTO l_node_text.
      CALL METHOD tree1->add_node
        EXPORTING
          i_relat_node_key = p_relat_key
          i_relationship   = cl_gui_column_tree=>relat_last_child
          is_outtab_line   = ps_stpox
          i_node_text      = l_node_text
          it_item_layout   = lt_item_layout
        IMPORTING
          e_new_node_key   = p_node_key.
    ENDFORM.                               " add_complete_line

    GUI状态:

    SCREEN 9000  最简单的方式创建屏幕

     

  • 相关阅读:
    有几种不同类型的自动代理?
    使用 Spring 通过什么方式访问 Hibernate?
    单片,SOA 和微服务架构有什么区别?
    如何给 Spring 容器提供配置元数据?
    在 Spring AOP 中,关注点和横切关注的区别是什么?
    Java Concurrency API 中的 Lock 接口(Lock interface) 是什么?对比同步它有什么优势?
    移动文件用哪个命令?改名用哪个命令?
    synchronized 的作用?
    “a==b”和”a.equals(b)”有什么区别?
    什么是 Spring beans?
  • 原文地址:https://www.cnblogs.com/rainysblog/p/11980391.html
Copyright © 2020-2023  润新知