MM-模具与产品对应管理表维护程序

*&---------------------------------------------------------------------*
*& Report ZMMR114_B
*&---------------------------------------------------------------------*
*& Author              :  NathanSun
*& Create Date         :  2019-07-08
*& Program Type        :  Report
*& Description         :  模具与产品对应管理表维护程序
*&---------------------------------------------------------------------*
REPORT ZMMR114_B.

*&---------------------------------------------------------------------*
*& 包含               ZMMR112_TOP
*&---------------------------------------------------------------------*
TABLES:ZTMJCP.
TYPE-POOLS:SLIS,T001W,ICON.

*OOALV-DEFINITION
DATA GO_ALV_GRID     TYPE REF TO CL_GUI_ALV_GRID.
DATA GO_ALV_GRID_SUB TYPE REF TO CL_GUI_ALV_GRID.
DATA LO_CONTAINER    TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
DATA OK_CODE         TYPE SY-UCOMM.
DATA OK_SAVE         TYPE SY-UCOMM.

*global fields
DATADRAGDROP_TREE      TYPE REF TO CL_DRAGDROP,
      DRAGDROP_ALV       TYPE REF TO CL_DRAGDROP,
      FLG_NEW,
      GRID               TYPE REF TO CL_GUI_ALV_GRID,
      GS_LAYOUT_ALV      TYPE LVC_S_LAYO,
      GS_TOOLBAR         TYPE STB_BUTTON,
      G_CUSTOM_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
      G_CONTAINER_OBJECT TYPE REF TO CL_GUI_DOCKING_CONTAINER,
      G_DROPEFFECT       TYPE I,
      G_HANDLE_TREE      TYPE I,
      G_HANDLE_ALV       TYPE I,
      G_HIERARCHY_HEADER TYPE TREEV_HHDR,
      G_REPID            LIKE SY-REPID,
      CONTROLS_CREATED1,
      TREE1              TYPE REF TO CL_GUI_ALV_TREE,
      IT_NODE_KEY        TYPE  LVC_T_NKEY.
DATACONTROLS_CREATED.
DATAGT_DATA TYPE TABLE OF ZTMJCP WITH HEADER LINE.

SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME.
PARAMETERS:     S_WERKS  TYPE  ZTMJCP-WERKS      MODIF ID C1 OBLIGATORY.              "工厂
SELECT-OPTIONSS_MATNR  FOR   ZTMJCP-MATNR_MJ   MODIF ID C1 .                        "磨具编码
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS:
      R1 RADIOBUTTON GROUP RAD2 .
SELECTION-SCREEN COMMENT 03(10TEXT-001.  "*单选按钮的名称
PARAMETERS:
      R2 RADIOBUTTON GROUP RAD2 .
SELECTION-SCREEN COMMENT 16(20TEXT-002.  "*单选按钮的名称
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK B1.
*&---------------------------------------------------------------------*
*& 包含               ZMMR112_CLASS
*&---------------------------------------------------------------------*
*----------------------------------------------------------------------*
*       CLASS cl_event_receiver DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS CL_EVENT_RECEIVER DEFINITION.
  PUBLIC SECTION.
    声明单击事件的方法
    METHODS HANDLE_HOTSPOT_CLICK
                  
FOR EVENT HOTSPOT_CLICK OF CL_GUI_ALV_GRID
      
IMPORTING E_ROW_ID E_COLUMN_ID.
    声明双击事件方法
    METHODS HANDLE_DOUBLE_CLICK
                  
FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID
      
IMPORTING E_ROW E_COLUMN.
    声明TOOLBAR事件方法
    METHODS HANDLE_TOOLBAR
                  
FOR EVENT TOOLBAR OF CL_GUI_ALV_GRID
      
IMPORTING E_OBJECT E_INTERACTIVE.
    声明USER-COMMAND 事件方法
    METHODS HANDLE_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.
    " ENTE时触发
    METHODS HANDLE_ENTER
                  
FOR EVENT DATA_CHANGED_FINISHED OF CL_GUI_ALV_GRID
      
IMPORTING E_MODIFIED ET_GOOD_CELLS.
    "Drag
    METHODS HANDLE_ONDRAG
                  
FOR EVENT ONDRAG OF CL_GUI_ALV_GRID
      
IMPORTING E_ROW
                  E_COLUMN
                  ES_ROW_NO
                  E_DRAGDROPOBJ
.
    "Drop
    METHODS HANDLE_ONDROP
                  
FOR EVENT ONDROP OF CL_GUI_ALV_GRID
      
IMPORTING E_ROW
                  E_COLUMN
                  E_DRAGDROPOBJ
.
  PRIVATE SECTION.
ENDCLASS.                    "CL_EVENT_RECEIVER DEFINITION
*----------------------------------------------------------------------*
*       CLASS cl_event_receiver IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS CL_EVENT_RECEIVER IMPLEMENTATION.
  单击事件方法的实现
  METHOD HANDLE_HOTSPOT_CLICK.

  ENDMETHOD.                    "HANDLE_HOTSPOT_CLICK
  双击事件方法的实现
  METHOD HANDLE_DOUBLE_CLICK.

    GO_ALV_GRID_SUB->REFRESH_TABLE_DISPLAY( ).
  ENDMETHOD.                    "HANDLE_DOUBLE_CLICK
  实现TOOLBAR事件方法
  METHOD HANDLE_TOOLBAR.
    DATALS_TOOLBAR TYPE STB_BUTTON.
    DELETE E_OBJECT->MT_TOOLBAR WHERE FUNCTION '&PRINT_BACK'.
    CLEARLS_TOOLBAR.
    LS_TOOLBAR-BUTN_TYPE 3分隔符
    APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.
    CLEARLS_TOOLBAR.
    LS_TOOLBAR-FUNCTION 'SAVE'.    "功能码
    LS_TOOLBAR-ICON ICON_SYSTEM_SAVE.  图标名称
    LS_TOOLBAR-TEXT '保存数据'.    按钮上显示的文本
    LS_TOOLBAR-QUICKINFO '保存数据'.   图标的提示信息
    LS_TOOLBAR-BUTN_TYPE 0.        " 0表示正常按钮
    LS_TOOLBAR-DISABLED ''.        " X表示灰色,不可用
    APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.
  ENDMETHOD.                    "HANDLE_TOOLBAR
  实现USER-COMMAND 事件方法
  METHOD HANDLE_COMMAND.
*  DATA: REF TYPE REF TO CL_GUI_ALV_GRID.
*  DATA : LV_STABLE TYPE LVC_S_STBL.   "刷新稳定性
**  RANGES: L_WERKS FOR T001W-WERKS.
**  RANGES: L_MATNR FOR MARA-MATNR.
*  DATA:L_BUKRS TYPE T001K-BUKRS.
*
*  LV_STABLE-ROW = '1'.
*  LV_STABLE-COL = '1'.
*
*  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
*    IMPORTING
*      E_GRID = REF.
*  CALL METHOD REF->CHECK_CHANGED_DATA.

    CASE E_UCOMM.
      WHEN 'SAVE'.
*        DEMO=>MAIN( ).
*        SORT gt_data[] BY bedat.
*        CALL METHOD go_alv_grid->refresh_table_display "内表改变时刷新ALV
*          EXPORTING
*            is_stable = lv_stable.

        PERFORM FOM_SAVEDATA .
      WHEN OTHERS.
    ENDCASE.

*  CALL METHOD REF->REFRESH_TABLE_DISPLAY
*    EXPORTING
*      IS_STABLE = LV_STABLE.


  ENDMETHOD.                    "HANDLE_COMMAND
  实现DATA_CHANGED 事件方法
  METHOD HANDLE_DATA_CHANGED.
    DATA GS_LAYOUT_ALV TYPE LVC_S_LAYO.
    DATA LV_STABLE TYPE LVC_S_STBL.

    LV_STABLE-ROW '1'.
    LV_STABLE-COL '1'.

    GS_LAYOUT_ALV-CWIDTH_OPT 'X'.

    CALL METHOD GO_ALV_GRID_SUB->SET_FRONTEND_LAYOUT
      
EXPORTING
        IS_LAYOUT GS_LAYOUT_ALV.

    CALL METHOD GO_ALV_GRID_SUB->REFRESH_TABLE_DISPLAY
      
EXPORTING
        IS_STABLE LV_STABLE.

    CALL METHOD CL_GUI_CONTROL=>SET_FOCUS
      
EXPORTING
        CONTROL GO_ALV_GRID_SUB.
    CALL METHOD CL_GUI_CFW=>FLUSH.

  ENDMETHOD.                    "handle_data_changed
  METHOD HANDLE_ENTER.
    DATA GS_LAYOUT_ALV TYPE LVC_S_LAYO.
    DATA LV_STABLE TYPE LVC_S_STBL.

    LV_STABLE-ROW '1'.
    LV_STABLE-COL '1'.

    GS_LAYOUT_ALV-GRID_TITLE '模具主档表配置表维护程序'."标题栏文本
    GS_LAYOUT_ALV-SEL_MODE   'D'.      "选择方式
    GS_LAYOUT_ALV-CWIDTH_OPT 'X'.    "优化列宽

    CALL METHOD GO_ALV_GRID_SUB->SET_FRONTEND_LAYOUT
      
EXPORTING
        IS_LAYOUT GS_LAYOUT_ALV.

    CALL METHOD GO_ALV_GRID_SUB->REFRESH_TABLE_DISPLAY
      
EXPORTING
        IS_STABLE LV_STABLE.

    CALL METHOD CL_GUI_CONTROL=>SET_FOCUS
      
EXPORTING
        CONTROL GO_ALV_GRID_SUB.
    CALL METHOD CL_GUI_CFW=>FLUSH.

  ENDMETHOD.                    "HANDLE_MODIFY
* Drag & Drop
  METHOD HANDLE_ONDRAG.
    CHECK NOT E_ROW IS INITIAL.

*    PERFORM DISPLAY_FLIGHTS USING NODE_KEY.
*    CALL METHOD CL_GUI_CFW=>SET_NEW_OK_CODE EXPORTING NEW_CODE =
*    FCODE_ENTR.
  ENDMETHOD.
* Drag & Drop
  METHOD HANDLE_ONDROP.
    CHECK NOT E_ROW IS INITIAL.
*
  ENDMETHOD.
ENDCLASS.                    "cl_event_receiver IMPLEMENTATION
*&---------------------------------------------------------------------*
*& 包含               ZMMR112_FOM
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form GET_MONTH_LASTDAY
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM GET_MONTH_LASTDAY .

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

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FOM_GETDATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FOM_GETDATA .
  CLEAR GT_DATA[] .
  SELECT INTO CORRESPONDING FIELDS OF TABLE GT_DATA[] FROM ZTMJCP
    
WHERE WERKS     S_WERKS
      
AND MATNR_MJ IN S_MATNR
      
.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form CREATETREECONTROL
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM CREATETREECONTROL .

  DATA L_FCAT_CACHE    TYPE LVC_T_FCAT.
  DATA WA_LAYOUT_CACHE TYPE LVC_S_LAYO.
  DATA WA_FIELD        TYPE LVC_S_FCAT.
  DATA LO_EVENT        TYPE REF TO CL_EVENT_RECEIVER.

  CREATE OBJECT LO_CONTAINER
    
EXPORTING
      CONTAINER_NAME 'CONT01'.

  CREATE OBJECT GO_ALV_GRID_SUB
    
EXPORTING
      I_PARENT LO_CONTAINER.

  CALL METHOD GO_ALV_GRID_SUB->REGISTER_EDIT_EVENT
    
EXPORTING
      I_EVENT_ID CL_GUI_ALV_GRID=>MC_EVT_ENTER
    
EXCEPTIONS
      ERROR      1
      OTHERS     2.

  DEFINE FILL_FIELD.
    wa_field-fieldname &1.
    wa_field-coltext &2.

    IF wa_field-fieldname 'MATNR_MJ'
      or wa_field-fieldname 'MATNR_CP'
      .
      wa_field-ref_table 'MARA'.
      wa_field-REF_FIELD 'MATNR'.
    ENDIF.
    IF wa_field-fieldname 'WERKS' .
      wa_field-ref_table 'ZTMJZD'.
      wa_field-REF_FIELD 'WERKS'.
    ENDIF.

    IF wa_field-fieldname 'MSMRQ'
        or wa_field-fieldname 'MSMRQ1'
        or wa_field-fieldname 'MSMRQ2'
        or wa_field-fieldname 'MSMRQ3'
         .
      wa_field-ref_table 'ZTMJZD'.
      wa_field-REF_FIELD 'MSMRQ'.
    ENDIF.

    IF R1 IS NOT INITIAL.
      IF wa_field-fieldname 'ZMJDM'
        OR wa_field-fieldname 'ZMCQS'
        OR wa_field-fieldname 'ZMCCN'
        OR wa_field-fieldname 'ZCNDW'
        .
        wa_field-edit 'X'.
      ENDIF.
    ELSE .
      wa_field-edit 'X'.
    ENDIF.

    APPEND wa_field TO l_fcat_cache .
    CLEAR wa_field.
  END-OF-DEFINITION.

  FILL_FIELD :

        'WERKS'    '工厂',
        'MATNR_MJ' '模具编号',
        'MATNR_CP' '产品物料编码',
        'ZMJDM'    '模具简码',
        'ZMCQS'    '模具针对该产品的腔数',
        'ZMCCN'    '模具针对该产品的产能',
        'ZCNDW'    '产能单位'.

  CREATE OBJECT LO_EVENT.
  SET HANDLER LO_EVENT->HANDLE_TOOLBAR FOR GO_ALV_GRID_SUB.
  SET HANDLER LO_EVENT->HANDLE_COMMAND FOR GO_ALV_GRID_SUB.
  SET HANDLER LO_EVENT->HANDLE_ONDROP  FOR GO_ALV_GRID_SUB.
*  SET HANDLER LO_EVENT->HANDLE_DATA_CHANGED  FOR GO_ALV_GRID_SUB.
  SET HANDLER LO_EVENT->HANDLE_ENTER  FOR GO_ALV_GRID_SUB.
  WA_LAYOUT_CACHE-GRID_TITLE '模具与产品对应管理表维护程序'."标题栏文本
  WA_LAYOUT_CACHE-SEL_MODE   'D'.      "选择方式
  WA_LAYOUT_CACHE-CWIDTH_OPT 'X'.    "优化列宽
*   handle for D'n'D
*  WA_LAYOUT_CACHE-S_DRAGDROP-ROW_DDID = G_HANDLE_ALV.

  CALL METHOD GO_ALV_GRID_SUB->SET_TABLE_FOR_FIRST_DISPLAY
    
EXPORTING
      IS_LAYOUT       WA_LAYOUT_CACHE
    
CHANGING
      IT_FIELDCATALOG L_FCAT_CACHE
      IT_OUTTAB       
GT_DATA[].

*    CLEAR GT_DATA_D[].
  GO_ALV_GRID_SUB->REFRESH_TABLE_DISPLAY( ).

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FOM_SAVEDATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FOM_SAVEDATA .
  DATA:CHECK1 TYPE C .
  DATA:CHECK2 TYPE C .
  DATA:CHECK3 TYPE C .
  SORT GT_DATA BY WERKS MATNR_MJ MATNR_CP .
  DELETE GT_DATA[] WHERE WERKS IS INITIAL AND MATNR_MJ IS INITIAL AND MATNR_CP IS INITIAL.
  LOOP AT GT_DATA.
    SELECT SINGLE INTO @DATA(GT_MARCFROM MARC
      
WHERE WERKS @GT_DATA-WERKS
        
AND MATNR @GT_DATA-MATNR_MJ
        
.
    CLEAR CHECK1 .
    CLEAR CHECK2 .
    IF SY-SUBRC <> 0.
      DATA(LV_WERKS) = GT_DATA-WERKS .
      DATA(LV_MATNR1) = GT_DATA-MATNR_MJ .
      CHECK1 'X'.
      EXIT.
    ENDIF.

    SELECT SINGLE INTO @DATA(GT_MARAFROM MARA
      
WHERE MATNR @GT_DATA-MATNR_MJ
        
AND MTART 'Z005'
        .
    IF SY-SUBRC <> 0.
      DATA(LV_MATNR2) = GT_DATA-MATNR_MJ .
      CHECK2 'X'.
      EXIT.
    ENDIF.

    SELECT SINGLE INTO @DATA(GT_MARC1FROM MARC
      
WHERE MATNR @GT_DATA-MATNR_CP
        
.
    IF SY-SUBRC <> 0.
      DATA(LV_MATNR3) = GT_DATA-MATNR_CP .
      CHECK3 'X'.
      EXIT.
    ENDIF.
    CLEAR GT_DATA .
  ENDLOOP.
  IF CHECK1 IS INITIAL AND CHECK2 IS INITIAL.
    MODIFY ZTMJCP FROM TABLE GT_DATA[] .
    COMMIT WORK .
    MESSAGE '保存村成功!'TYPE 'S' .
    CLEAR GT_DATA[] .
  ELSEIF CHECK1 IS NOT INITIAL .
    MESSAGE '模具&& LV_MATNR1 && '在工厂&& LV_WERKS && '&& '无主档数据TYPE 'S' DISPLAY LIKE 'E'.
  ELSEIF CHECK2 IS NOT INITIAL .
    MESSAGE '模具&& LV_MATNR2 && '的类型并非Z005' TYPE 'S' DISPLAY LIKE 'E'.
  ELSEIF CHECK3 IS NOT INITIAL .
    MESSAGE '产品&& LV_MATNR3 && '无主档数据TYPE 'S' DISPLAY LIKE 'E'.
  ELSE.
  ENDIF.

*    CLEAR GT_DATA_D[].
  GO_ALV_GRID_SUB->REFRESH_TABLE_DISPLAY( ).
ENDFORM.
*&---------------------------------------------------------------------*
*& 包含               ZMMR112_PBO
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
  SET PF-STATUS 'PF_0100'.
  SET TITLEBAR  'TITLE_0100'.
  CHECK CONTROLS_CREATED IS INITIAL.
  CALL METHOD CL_GUI_CFW=>FLUSH."触发SAP GUI更新界面
  PERFORM CREATETREECONTROL.  "实例化ALV_GRID
  CONTROLS_CREATED 'X'.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module TREE_AND_DOCKING OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE TREE_AND_DOCKING OUTPUT.
* SET PF-STATUS 'xxxxxxxx'.
* SET TITLEBAR 'xxx'.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module SCREEN_SETTING_0100 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE SCREEN_SETTING_0100 OUTPUT.
* SET PF-STATUS 'xxxxxxxx'.
* SET TITLEBAR 'xxx'.
ENDMODULE.
*&---------------------------------------------------------------------*
*& 包含               ZMMR112_PAI
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Module  CANCEL  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE CANCEL INPUT.
  LEAVE PROGRAM .
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
  OK_SAVE SY-UCOMM .
  CLEAR SY-UCOMM .
  CLEAR OK_CODE .
  CASE  OK_SAVE.
    WHEN 'BACK'  .
      LEAVE TO SCREEN .
*    WHEN 'BT_8'  .
*      demo=>main( ).
    WHEN OTHERS .
  ENDCASE .
ENDMODULE.

INITIALIZATION .
  PERFORM GET_MONTH_LASTDAY.

AT SELECTION-SCREEN OUTPUT.

AT SELECTION-SCREEN.
  PERFORM SCREEN_SETTING.

START-OF-SELECTION.
  IF R1 IS NOT INITIAL.
    PERFORM FOM_GETDATA .
  ELSE.
    DO 50 TIMES.
      APPEND INITIAL LINE TO GT_DATA[] .
    ENDDO.
  ENDIF.
  CALL SCREEN 100.

 

PROCESS BEFORE OUTPUT.
  MODULE STATUS_0100.
  MODULE TREE_AND_DOCKING.
  MODULE SCREEN_SETTING_0100.

PROCESS AFTER INPUT.
  MODULE CANCEL AT EXIT-COMMAND.

  MODULE USER_COMMAND_0100.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值