alv

*&---------------------------------------------------------------------*
*& REPORT  ZMMR238
*&
*&---------------------------------------------------------------------*
*& 需求描述:設備進機明細系統化
*& 需求單號:HB17050029
*& 開發人員:ZXK
*& 開發日期:20170919
*&
*&---------------------------------------------------------------------*
*----------DRAGON BE HERE!----------/
*    ┏┓   ┏┓
*   ┏┛┻━━━┛┻┓
*   ┃       ┃
*   ┃   ━   ┃
*   ┃ ┳┛ ┗┳ ┃
*   ┃       ┃
*   ┃   ┻   ┃
*   ┃       ┃
*   ┗━┓   ┏━┛
*     ┃   ┃神兽保佑
*     ┃   ┃代码无BUG!
*     ┃   ┗━━━┓
*     ┃       ┣┓
*     ┃       ┏┛
*     ┗┓┓┏━┳┓┏┛
*      ┃┫┫ ┃┫┫
*      ┗┻┛ ┗┻┛
* ━━━━━━神兽出没━━━━━━

REPORT  ZMMR238.

TABLES :MARA,EKPO,EBAN,T023,EKKO,ZMMT190.

CLASS LCL_ALV_EVENT_HANDLER DEFINITION.
   PUBLIC SECTION.
     METHODS :HANDLE_DATA_CHANGED
     FOR  EVENT DATA_CHANGED  OF CL_GUI_ALV_GRID
     IMPORTING ER_DATA_CHANGED.

ENDCLASS.

DATA: CON_SPLITTER  TYPE  REF  TO CL_GUI_SPLITTER_CONTAINER,
      ALV_TABLES  TYPE  REF  TO CL_GUI_ALV_GRID,
      CON_ALV_TABLES  TYPE  REF  TO CL_GUI_CONTAINER,
      ALV_DATA_CHAGNED  TYPE  REF  TO LCL_ALV_EVENT_HANDLER.

DATA:  GT_FIELDCAT    TYPE LVC_T_FCAT,
       GS_FIELDCAT    TYPE LVC_S_FCAT,
       GS_LAYOUT      TYPE LVC_S_LAYO,
       GT_EXCLUDE     TYPE UI_FUNCTIONS.

DATA: WA_EQUIP  LIKE ZMMT190,
      GT_EQUIP  LIKE ZMMT190  OCCURS  WITH  HEADER LINE,
      GT_EQUIP_A  LIKE ZMMT190  OCCURS  WITH  HEADER LINE,
      GT_EQUIP_X  LIKE ZMMT190  OCCURS  WITH  HEADER LINE,
      GT_MBLNR  LIKE ZMMT190  OCCURS  WITH  HEADER LINE,
      GT_ENMBLNR  LIKE ZMMT190  OCCURS  WITH  HEADER LINE.

DATA:BEGIN  OF GT_ANLC  OCCURS 0,
     KANSW  LIKE ANLC-KANSW,
     KNAFA  LIKE ANLC-KNAFA,
     NAFAG  LIKE ANLC-NAFAG,
     ANSWL  LIKE ANLC-ANSWL,
     NAFAV  LIKE ANLC-NAFAV,
     NAFAL  LIKE ANLC-NAFAL,
     GJAHR  LIKE ANLC-GJAHR,
   END  OF GT_ANLC.


DATA: G_LINES(4)  TYPE  ,
      G_ANSWER  TYPE C,
      G_INDATE(15)  TYPE C,
      G_INDATE2  LIKE SY-DATUM,
      G_DAYS_OUT(5)  TYPE I.

DATA: PROXY  TYPE  REF  TO ZMMCO_BO_REAT,
      PROXY2  TYPE  REF  TO ZMMCO_BO_REAT_ITEM,
      LSERROR  TYPE STRING ,
      CLOREF  TYPE  REF  TO CX_ROOT.

DATA: WS_INPUT_REAT  TYPE ZMMFIND_REAT_BY_PAPER_NUMS,
      WS_PAPER_NUM  TYPE ZMMQUERY_FILTER_TAB  WITH  HEADER LINE,
      WS_OUTPUT_REAT  TYPE ZMMFIND_REAT_BY_PAPER_NUMS_RES,
      WS_OUTPUT  TYPE ZMMBO_REAT_TAB  WITH  HEADER LINE,
      WS_INPUT_REAT_ITEM  TYPE ZMMFIND_REAT_ITEM_BY_SER_NOS,
      WS_SER_NO  TYPE ZMMQUERY_FILTER_TAB1  WITH  HEADER LINE,
      WS_OUTPUT_REAT_ITEM  TYPE ZMMFIND_REAT_ITEM_BY_SER_NOS_R,
      WS_OUTPUT_ITEM  TYPE ZMMBO_REAT_ITEM_TAB  WITH  HEADER LINE.

DEFINE: ADD_FIELD.
  CLEAR:GS_FIELDCAT.
  GS_FIELDCAT-FIELDNAME = &1.
  GS_FIELDCAT-COLTEXT = &2.
  GS_FIELDCAT-REF_TABLE =  'ZMMT190'"ALV編輯時長度受限,需要參照字段
  GS_FIELDCAT-REF_FIELD = &1.
   IF SY-TCODE =  'ZMM321E'.
     IF &1 =  'ANTAG'  OR &1 =  'ANTBG'  OR &1 =  'EBELN_TW'  OR &1 =  'LIFNR_TW'  OR &1 =  'NAME1_TW'  OR
        &1 =  'RUDAT'  OR &1 =  'CABIN'  OR &1 =  'PERSO'  OR &1 =  'CONTA'  OR &1 =  'POSIT'  OR &1 =  'SPARE' .
      GS_FIELDCAT-EDIT =  'X'.
    ENDIF.
  ENDIF.
   APPEND GS_FIELDCAT  TO GT_FIELDCAT.
END-OF-DEFINITION.


CLASS LCL_ALV_EVENT_HANDLER IMPLEMENTATION.
   METHOD HANDLE_DATA_CHANGED.
     PERFORM HANDLE_DATA_CHANGED  USING ER_DATA_CHANGED.
  ENDMETHOD.
ENDCLASS.

SELECTION-SCREEN  BEGIN  OF  BLOCK T1  WITH  FRAME .
SELECT-OPTIONS: S_EBELN  FOR EKPO-EBELN,
                S_BANFN  FOR EBAN-BANFN,
                S_MATKL  FOR MARA-MATKL,
                S_AEDAT  FOR EKKO-AEDAT,
                S_ERNAM  FOR EKKO-ERNAM,
                S_BUKRS  FOR EKKO-BUKRS,
                S_RUDAT  FOR ZMMT190-RUDAT,
                S_ANTAG  FOR ZMMT190-ANTAG.
SELECTION-SCREEN  END  OF  BLOCK T1.

AT  SELECTION-SCREEN  ON  VALUE-REQUEST  FOR S_MATKL-LOW.
   PERFORM F4_MATKL.

AT  SELECTION-SCREEN  ON  VALUE-REQUEST  FOR S_MATKL-HIGH.
   PERFORM F4_MATKL.

AT  SELECTION-SCREEN OUTPUT.
*  LOOP AT SCREEN.
*    IF SCREEN-NAME EQ 'S_ANTAG-LOW' OR SCREEN-NAME EQ 'S_ANTAG-HIGH' OR SCREEN-NAME EQ '%_S_ANTAG_%_APP_%-TEXT' OR SCREEN-NAME EQ '%_S_ANTAG_%_APP_%-VALU_PUSH'.
*      SCREEN-ACTIVE = 0.
*    ENDIF.
*    MODIFY SCREEN.
*  ENDLOOP.

START-OF-SELECTION.

   PERFORM GET_AND_PROCESS_DATA.
   CALL  SCREEN  2000.

END-OF-SELECTION.
*&---------------------------------------------------------------------*
*&      MODULE  STATUS_2000  OUTPUT
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
MODULE STATUS_2000 OUTPUT.
   SET  PF-STATUS  'PS_2000'.
*  SET TITLEBAR 'XXX'.

   PERFORM SET_ALV_FIELDS.
   PERFORM SET_ALV_LAYOUT  CHANGING GS_LAYOUT.
   IF SY-TCODE =  'ZMM321E'.
     PERFORM ALV_PREPARE_TOOLBAR  TABLES GT_EXCLUDE.
  ENDIF.



   CHECK CON_SPLITTER  IS INITIAL.
   "創建容器
   CREATE OBJECT CON_SPLITTER
     EXPORTING
      PARENT  = CL_GUI_CONTAINER=>SCREEN0
       ROWS    1
      COLUMNS =  1.
   "創建ALV控件
  CON_ALV_TABLES = CON_SPLITTER->GET_CONTAINER( ROW =  COLUMN =  ).
   CREATE OBJECT ALV_TABLES
     EXPORTING
      I_PARENT = CON_ALV_TABLES.

   "事件响应
   CREATE OBJECT ALV_DATA_CHAGNED .

   SET  HANDLER ALV_DATA_CHAGNED->HANDLE_DATA_CHANGED  FOR ALV_TABLES.

   CALL  METHOD ALV_TABLES->REGISTER_EDIT_EVENT(  EXPORTING I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_MODIFIED ).



   CALL  METHOD ALV_TABLES->SET_TABLE_FOR_FIRST_DISPLAY
     EXPORTING
*     I_BUFFER_ACTIVE               =
*     I_BYPASSING_BUFFER            =
*     I_CONSISTENCY_CHECK           =
*     I_STRUCTURE_NAME              =
*     IS_VARIANT                    =
      I_SAVE                        =  'X'
*     I_DEFAULT                     = 'X'
      IS_LAYOUT                     = GS_LAYOUT
*     IS_PRINT                      =
*     IT_SPECIAL_GROUPS             =
      IT_TOOLBAR_EXCLUDING          = GT_EXCLUDE
*     IT_HYPERLINK                  =
*     IT_ALV_GRAPHICS               =
*     IT_EXCEPT_QINFO               =
*     IR_SALV_ADAPTER               =
     CHANGING
      IT_OUTTAB                     = GT_EQUIP_A[]
      IT_FIELDCATALOG               = GT_FIELDCAT
*     IT_SORT                       =
*     IT_FILTER                     =
     EXCEPTIONS
      INVALID_PARAMETER_COMBINATION =  1
      PROGRAM_ERROR                 =  2
      TOO_MANY_LINES                =  3
       OTHERS                        4.
   IF SY-SUBRC <>  0.
     MESSAGE  ID SY-MSGID  TYPE SY-MSGTY  NUMBER SY-MSGNO
                WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.


   IF LSERROR  IS   NOT  INITIAL .
     MESSAGE W000(ZMM03)  WITH   '連接錯誤,無法取得進機天數及驗收狀態'  LSERROR .
  ENDIF.


ENDMODULE.                  " STATUS_2000  OUTPUT
*&---------------------------------------------------------------------*
*&      MODULE  USER_EXIT  INPUT
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
MODULE USER_EXIT INPUT.
   CASE SY-UCOMM.
     WHEN  'EXIT'  OR  'BACK' .
       LEAVE  TO  SCREEN  0.
     WHEN  'CANCEL'.
       LEAVE PROGRAM.
  ENDCASE.
ENDMODULE.                  " USER_EXIT  INPUT
*&---------------------------------------------------------------------*
*&      FORM  GET_AND_PROCESS_DATA
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
*  -->  P1        TEXT
*  <--  P2        TEXT
*----------------------------------------------------------------------*
FORM GET_AND_PROCESS_DATA .
   IF S_MATKL[]  IS INITIAL.
    S_MATKL-SIGN =  'I'.
    S_MATKL-OPTION =  'BT'.
    S_MATKL-LOW =  'A001'.
    S_MATKL-HIGH =  'A007'.
     APPEND S_MATKL.
  ENDIF.

   SELECT *
   INTO CORRESPONDING  FIELDS  OF  TABLE GT_EQUIP
   FROM ZMMT190  AS T1
   JOIN EKKO  AS T2
   ON T1~EBELN = T2~EBELN
     WHERE T1~EBELN  IN S_EBELN
     AND T1~BANFN  IN S_BANFN
     AND T2~ERNAM  IN S_ERNAM
     AND T2~AEDAT  IN S_AEDAT
     AND T2~BUKRS  IN S_BUKRS
     AND T1~RUDAT  IN S_RUDAT
     AND T1~ANTAG  IN S_ANTAG
    .
   IF S_RUDAT[]  IS  INITIAL  AND S_ANTAG[]  IS INITIAL.
     SELECT T1~BANFN T1~BNFPO T1~EBELN T1~EBELP T1~TXZ01 T1~MENGE T1~MEINS T3~ANLN1 T4~KOSTL  AS KOSTL_REQ
     INTO CORRESPONDING  FIELDS  OF  TABLE GT_EQUIP_X
     FROM EKPO  AS T1
     JOIN EBAN  AS T2
     ON T1~BANFN = T2~BANFN
     AND T1~BNFPO = T2~BNFPO
     JOIN EKKN  AS T3
     ON T1~EBELN = T3~EBELN
     AND T1~EBELP = T3~EBELP
     JOIN ANLZ  AS T4
     ON T4~ANLN1 = T3~ANLN1
     AND T4~BUKRS = T1~BUKRS
     JOIN EKKO  AS T5
     ON T1~EBELN = T5~EBELN
     WHERE T1~EBELN  IN S_EBELN
       AND T2~BANFN  IN S_BANFN
       AND T1~MATKL  IN S_MATKL
       AND T5~ERNAM  IN S_ERNAM
       AND T5~AEDAT  IN S_AEDAT
       AND T5~BUKRS  IN S_BUKRS.

     LOOP  AT GT_EQUIP_X.
       SELECT  SINGLE KTEXT
         INTO GT_EQUIP_X-KTEXT_REQ
       FROM CSKT
         WHERE KOSTL = GT_EQUIP_X-KOSTL_REQ
           AND SPRAS =  'M'.

       SELECT  SINGLE LIFNR
         INTO GT_EQUIP_X-LIFNR
       FROM EKKO
         WHERE EBELN = GT_EQUIP_X-EBELN.

       SELECT  SINGLE EBELN
         INTO GT_EQUIP_X-EBELN_TW
       FROM EKPO
         WHERE BEDNR = GT_EQUIP_X-BANFN.

       SELECT  SINGLE LIFNR
        INTO GT_EQUIP_X-LIFNR_TW
      FROM EKKO
        WHERE EBELN = GT_EQUIP_X-EBELN_TW.

       SELECT  SINGLE NAME1
         INTO GT_EQUIP_X-NAME1
       FROM LFA1
         WHERE LIFNR = GT_EQUIP_X-LIFNR.

       SELECT  SINGLE NAME1
         INTO GT_EQUIP_X-NAME1_TW
       FROM LFA1
         WHERE LIFNR = GT_EQUIP_X-LIFNR_TW.

       MODIFY GT_EQUIP_X.
    ENDLOOP.

     IF GT_EQUIP_X[]  IS  NOT INITIAL.
       SORT GT_EQUIP_X  BY BANFN BNFPO EBELN EBELP.
       LOOP  AT GT_EQUIP_X  INTO WA_EQUIP.

         READ  TABLE GT_EQUIP  WITH  KEY EBELN = WA_EQUIP-EBELN
                                     EBELP = WA_EQUIP-EBELP
                                     BANFN = WA_EQUIP-BANFN
                                     BNFPO = WA_EQUIP-BNFPO.
         IF SY-SUBRC  NE  0.
           APPEND WA_EQUIP  TO GT_EQUIP.
          CLEAR:WA_EQUIP.
        ENDIF.
      ENDLOOP.
    ENDIF.
  ENDIF.

   LOOP  AT GT_EQUIP.
     SELECT  SINGLE ENMBLNR MBLNR BPM_STATUS
     INTO (GT_EQUIP-ENMBLNR,GT_EQUIP-MBLNR,GT_EQUIP-BPM_STATUS)
   FROM EKBE  AS T1
   JOIN ZMMT006  AS T2
     ON T1~BELNR = T2~MBLNR
     AND T1~GJAHR = T2~MJAHR
WHERE T1~EBELN = GT_EQUIP-EBELN
     AND T1~EBELP = GT_EQUIP-EBELP
     AND ( T2~BPM_STATUS <>  ''  AND T2~BPM_STATUS <>  '40' ).
     MODIFY GT_EQUIP.
  ENDLOOP.
*---------WEBSERVICE 進機日期
   LOOP  AT GT_EQUIP.
     IF GT_EQUIP-MBLNR  IS  NOT  INITIAL.
      GT_MBLNR-MBLNR = GT_EQUIP-MBLNR.
       APPEND GT_MBLNR.
    ENDIF.
     IF GT_EQUIP-ENMBLNR  IS  NOT  INITIAL.
      GT_ENMBLNR-ENMBLNR = GT_EQUIP-ENMBLNR.
       APPEND GT_ENMBLNR.
    ENDIF.
  ENDLOOP.


  TRY.
       CREATE OBJECT PROXY
         EXPORTING
          LOGICAL_PORT_NAME =  'ZMMCO_BO_REAT'.

       CREATE OBJECT PROXY2
         EXPORTING
          LOGICAL_PORT_NAME =  'ZMMCO_BO_REAT_ITEM'.
     CATCH CX_AI_SYSTEM_FAULT .
  ENDTRY.


   LOOP  AT GT_MBLNR.
    WS_PAPER_NUM-VALUE = GT_MBLNR-MBLNR.
    WS_PAPER_NUM-CONDITION =  'EQ'.
     APPEND WS_PAPER_NUM.
    WS_SER_NO-VALUE = GT_ENMBLNR-ENMBLNR.
    WS_SER_NO-CONDITION =  'EQ'.
     APPEND WS_SER_NO.
  ENDLOOP.
  WS_INPUT_REAT-PAPER_NUM = WS_PAPER_NUM[].
  WS_INPUT_REAT_ITEM-SER_NO = WS_SER_NO[].

  TRY.
       CALL  METHOD PROXY->FIND_REAT_BY_PAPER_NUMS
         EXPORTING
           INPUT  = WS_INPUT_REAT
         IMPORTING
           OUTPUT = WS_OUTPUT_REAT.
       CALL  METHOD PROXY2->FIND_REAT_ITEM_BY_SER_NOS
         EXPORTING
           INPUT  = WS_INPUT_REAT_ITEM
         IMPORTING
           OUTPUT = WS_OUTPUT_REAT_ITEM.

     CATCH CX_AI_SYSTEM_FAULT  INTO CLOREF.
       CALL  METHOD CLOREF->IF_MESSAGE~GET_TEXT
        RECEIVING
          RESULT = LSERROR.
     CATCH ZMMCX_CAFFIND_EXCEPTION  INTO CLOREF.
       CALL  METHOD CLOREF->IF_MESSAGE~GET_TEXT
        RECEIVING
          RESULT = LSERROR.
     CATCH CX_AI_APPLICATION_FAULT  INTO CLOREF.
       CALL  METHOD CLOREF->IF_MESSAGE~GET_TEXT
        RECEIVING
          RESULT = LSERROR.
  ENDTRY.

  WS_OUTPUT[] = WS_OUTPUT_REAT-OUTPUT.
  WS_OUTPUT_ITEM[] = WS_OUTPUT_REAT_ITEM-OUTPUT.
   SORT WS_OUTPUT  BY PAPER_NUM VERSION DESCENDING.

   LOOP  AT GT_EQUIP.
     IF GT_EQUIP-MBLNR  IS  NOT  INITIAL  AND GT_EQUIP-IN_DATE  EQ  0.
       READ  TABLE WS_OUTPUT  WITH  KEY PAPER_NUM = GT_EQUIP-MBLNR.
       IF SY-SUBRC =  0.
        CLEAR: G_INDATE,G_INDATE2.
        G_INDATE = WS_OUTPUT-IN_DATE.
        G_INDATE = G_INDATE+0(8).
        G_INDATE2 = G_INDATE.
         CALL  FUNCTION  'HR_99S_INTERVAL_BETWEEN_DATES'
           EXPORTING
            BEGDA = G_INDATE2
            ENDDA = SY-DATUM
           IMPORTING
            DAYS  = G_DAYS_OUT.
        GT_EQUIP-IN_DATE = G_DAYS_OUT.
      ENDIF.
    ENDIF.
     IF GT_EQUIP-ENMBLNR  IS  NOT  INITIAL  AND GT_EQUIP-DEPTTYPE  IS INITIAL.
       LOOP  AT WS_OUTPUT_ITEM  WHERE SER_NO = GT_EQUIP-ENMBLNR.
         CONCATENATE GT_EQUIP-DEPTTYPE WS_OUTPUT_ITEM-DEPT_TYPE  INTO GT_EQUIP-DEPTTYPE  SEPARATED  BY  '-'.
      ENDLOOP.
    ENDIF.
     SELECT  SINGLE LOEKZ
       INTO GT_EQUIP-LOEKZ
     FROM EKPO
       WHERE EBELN = GT_EQUIP-EBELN
       AND EBELP = GT_EQUIP-EBELP.

     MODIFY GT_EQUIP.
  ENDLOOP.



   LOOP  AT GT_EQUIP  INTO WA_EQUIP.
     IF WA_EQUIP-ACTID  EQ  0.
       DO WA_EQUIP-MENGE TIMES.
        WA_EQUIP-MENGE =  1.
        WA_EQUIP-ACTID = WA_EQUIP-ACTID +  1.
         APPEND WA_EQUIP  TO GT_EQUIP_A.
      ENDDO.
      CLEAR:WA_EQUIP.
    ELSE.
       APPEND WA_EQUIP  TO GT_EQUIP_A.
      CLEAR:WA_EQUIP.
    ENDIF.
  ENDLOOP.
ENDFORM.                     " GET_AND_PROCESS_DATA
*&---------------------------------------------------------------------*
*&      FORM  SET_ALV_FIELDS
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
*  -->  P1        TEXT
*  <--  P2        TEXT
*----------------------------------------------------------------------*
FORM SET_ALV_FIELDS .
  ADD_FIELD  'BANFN'  '請購單'.
  ADD_FIELD  'BNFPO'  '請購單項次'.
  ADD_FIELD  'EBELN'  '訂單'.
  ADD_FIELD  'EBELP'  '訂單項次'.
  ADD_FIELD  'LOEKZ'  '刪除標記'.
  ADD_FIELD  'ACTID'  '拆分編號'.
  ADD_FIELD  'ANLN1'  '待驗資產編碼'.
  ADD_FIELD  'ANTAG'  '財產標籤-主資產'.
  ADD_FIELD  'ANTBG'  '財產標籤-子資產'.
  ADD_FIELD  'TXZ01'  '設備品名'.
  ADD_FIELD  'MENGE'  '數量'.
  ADD_FIELD  'MEINS'  '單位'.
  ADD_FIELD  'KOSTL'  '現行成本中心'.
  ADD_FIELD  'KTEXT'  '成本中心名稱'.
  ADD_FIELD  'KOSTL_REQ'  '訂單成本中心'.
  ADD_FIELD  'KTEXT_REQ'  '訂單成本中心名稱'.
  ADD_FIELD  'CBZMJ'  '財報帳面淨值'.
  ADD_FIELD  'SBZMJ'  '稅報帳面淨值'.
  ADD_FIELD  'AKTIV'  '資本化日期'.
  ADD_FIELD  'LIFNR'  '廠商'.
  ADD_FIELD  'NAME1'  '廠商名稱'.
  ADD_FIELD  'EBELN_TW'  '台灣訂單'.
  ADD_FIELD  'LIFNR_TW'  '原始廠商'.
  ADD_FIELD  'NAME1_TW'  '原始廠商代碼'.
  ADD_FIELD  'CUSTNO'  '報關單號'.
  ADD_FIELD  'IMDAT'  '進口日期'.
  ADD_FIELD  'JGDAT'  '海關監管到期日'.
  ADD_FIELD  'RUDAT'  '入廠時間'.
  ADD_FIELD  'CABIN'  '柜量/柜型'.
  ADD_FIELD  'PERSO'  '接機人'.
  ADD_FIELD  'CONTA'  '聯繫方式'.
  ADD_FIELD  'POSIT'  '搬運定位需求'.
  ADD_FIELD  'SPARE'  '備品'.
  ADD_FIELD  'INDETERMINATE1'  '裝機完成時間'.
  ADD_FIELD  'IN_DATE'  '進機天數'.
  ADD_FIELD  'DEPTTYPE'  '驗收狀態'.
  ADD_FIELD  'ENMBLNR'  'BPM單號'.
  ADD_FIELD  'MBLNR'  '驗收單號'.
  ADD_FIELD  'BPM_STATUS'  '單據狀態'.


ENDFORM.                     " SET_ALV_FIELDS
*&---------------------------------------------------------------------*
*&      FORM  SET_ALV_LAYOUT
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
*      <--P_GS_LAYOUT  TEXT
*----------------------------------------------------------------------*
FORM SET_ALV_LAYOUT   CHANGING P_GS_LAYOUT  TYPE LVC_S_LAYO.
  P_GS_LAYOUT-ZEBRA =  'X'.
  P_GS_LAYOUT-SMALLTITLE =  'X'.
  P_GS_LAYOUT-SEL_MODE =  'A'.
  P_GS_LAYOUT-GRID_TITLE =  '進機明細'.
  P_GS_LAYOUT-CWIDTH_OPT =  'X'.
ENDFORM.                     " SET_ALV_LAYOUT
*&---------------------------------------------------------------------*
*&      FORM  ALV_PREPARE_TOOLBAR
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
*      -->P_GT_EXCLUDE  TEXT
*----------------------------------------------------------------------*
FORM ALV_PREPARE_TOOLBAR   TABLES   PT_EXCLUDE  TYPE UI_FUNCTIONS.
  REFRESH: PT_EXCLUDE.
*  APPEND CL_GUI_ALV_GRID=>MC_FC_MAXIMUM TO PT_EXCLUDE.
*  APPEND CL_GUI_ALV_GRID=>MC_FC_MINIMUM TO PT_EXCLUDE.
*  APPEND CL_GUI_ALV_GRID=>MC_FC_SUBTOT TO PT_EXCLUDE.
*  APPEND CL_GUI_ALV_GRID=>MC_FC_SUM TO PT_EXCLUDE.
*  APPEND CL_GUI_ALV_GRID=>MC_FC_AVERAGE TO PT_EXCLUDE.
*  APPEND CL_GUI_ALV_GRID=>MC_MB_SUM TO PT_EXCLUDE.
*  APPEND CL_GUI_ALV_GRID=>MC_MB_SUBTOT TO PT_EXCLUDE.
*  APPEND CL_GUI_ALV_GRID=>MC_FC_SORT_ASC TO PT_EXCLUDE.
*  APPEND CL_GUI_ALV_GRID=>MC_FC_SORT_DSC TO PT_EXCLUDE.
*  APPEND CL_GUI_ALV_GRID=>MC_FC_FIND TO PT_EXCLUDE.
*  APPEND CL_GUI_ALV_GRID=>MC_FC_FILTER TO PT_EXCLUDE.
*  APPEND CL_GUI_ALV_GRID=>MC_FC_PRINT TO PT_EXCLUDE.
*  APPEND CL_GUI_ALV_GRID=>MC_FC_PRINT_PREV TO PT_EXCLUDE.
*  APPEND CL_GUI_ALV_GRID=>MC_MB_EXPORT TO PT_EXCLUDE.
*  APPEND CL_GUI_ALV_GRID=>MC_FC_GRAPH TO PT_EXCLUDE.
*  APPEND CL_GUI_ALV_GRID=>MC_MB_EXPORT TO PT_EXCLUDE.
*  APPEND CL_GUI_ALV_GRID=>MC_MB_VIEW TO PT_EXCLUDE.
*  APPEND CL_GUI_ALV_GRID=>MC_FC_DETAIL TO PT_EXCLUDE.
*  APPEND CL_GUI_ALV_GRID=>MC_FC_HELP TO PT_EXCLUDE.
*  APPEND CL_GUI_ALV_GRID=>MC_FC_INFO TO PT_EXCLUDE.
*  APPEND CL_GUI_ALV_GRID=>MC_MB_VARIANT TO PT_EXCLUDE.
*  APPEND CL_GUI_ALV_GRID=>MC_FC_REFRESH TO PT_EXCLUDE.
*  APPEND CL_GUI_ALV_GRID=>MC_FC_CHECK TO PT_EXCLUDE.
*  APPEND CL_GUI_ALV_GRID=>MC_FC_LOC_COPY TO PT_EXCLUDE.
   APPEND CL_GUI_ALV_GRID=>MC_FC_LOC_INSERT_ROW  TO PT_EXCLUDE.
   APPEND CL_GUI_ALV_GRID=>MC_FC_LOC_DELETE_ROW  TO PT_EXCLUDE.
   APPEND CL_GUI_ALV_GRID=>MC_FC_LOC_COPY_ROW  TO PT_EXCLUDE.
   APPEND CL_GUI_ALV_GRID=>MC_FC_LOC_APPEND_ROW  TO PT_EXCLUDE.
*  APPEND CL_GUI_ALV_GRID=>MC_FC_LOC_UNDO TO PT_EXCLUDE.
*  APPEND CL_GUI_ALV_GRID=>MC_FC_LOC_CUT TO PT_EXCLUDE.
*  APPEND CL_GUI_ALV_GRID=>MC_MB_PASTE TO PT_EXCLUDE.

ENDFORM.                     " ALV_PREPARE_TOOLBAR
*&---------------------------------------------------------------------*
*&      FORM  F4_MATKL
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
*  -->  P1        TEXT
*  <--  P2        TEXT
*----------------------------------------------------------------------*
FORM F4_MATKL .
   DATA BEGIN  OF LT_MATKL  OCCURS  0  ,
  MATKL  LIKE MARA-MATKL,
  WGBEZ  LIKE T023T-WGBEZ,
END  OF LT_MATKL.
   SELECT MATKL WGBEZ
     INTO CORRESPONDING  FIELDS  OF  TABLE LT_MATKL
   FROM T023T
   WHERE ( MATKL =  'A001'  OR MATKL =  'A002' OR  MATKL =  'A003'  OR
     MATKL =  'A004'  OR   MATKL =  'A005'  OR   MATKL =  'A006'  OR MATKL =  'A007' )
     AND SPRAS =  'M'.

   CALL  FUNCTION  'F4IF_INT_TABLE_VALUE_REQUEST'
     EXPORTING
      RETFIELD        =  'MATKL'         "  大写,可选值内表的字段名
      VALUE_ORG       =  'S'            "          就写'S'
      DYNPPROG        = SY-REPID       "  返回的输入框所在的MAIN PROGRAM
      DYNPNR          = SY-DYNNR         "   返回的输入框所在屏幕
      DYNPROFIELD     =  'S_MATKL'   "  返回的输入框名
                                                                                                               "   CALLBACK_PROGRAM = SY-REPID
                                                                                                                "   CALLBACK_FORM    =  "F4 帶出多個值到頁面上
     TABLES
      VALUE_TAB       = LT_MATKL     "   可选值的内表
                                                                                                                 "  RETURN_TAB       = LT_RETURN
     EXCEPTIONS
      PARAMETER_ERROR =  1
      NO_VALUES_FOUND =  2
       OTHERS          3.
   IF SY-SUBRC <>  0.
     MESSAGE  ID SY-MSGID  TYPE SY-MSGTY  NUMBER SY-MSGNO
     WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
ENDFORM.                                                     " F4_MATKL
*&---------------------------------------------------------------------*
*&      MODULE  USER_COMMAND_2000  INPUT
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
MODULE USER_COMMAND_2000 INPUT.


   CASE SY-UCOMM.
     WHEN  'SAVE'.
       IF SY-TCODE =  'ZMM321E'.
         CALL  METHOD ALV_TABLES->CHECK_CHANGED_DATA( ).  "此方法將畫面上更改的數據更新至內表中去,貌似CHECK_CHANGED_DATA會自動調用我修改後的DATA_CHAGNED EVENT事件
         "  CALL METHOD ALV_DATA_CHAGNED->HANDLE_DATA_CHANGED.
         PERFORM SAVE_DATA .
      ENDIF.
     WHEN OTHERS.
*           CALL METHOD CL_GUI_CFW=>DISPATCH.
*
** FORCE ALV TO COPY THE DATA FROM GRID TO THE INTERNAL TABLE
**(EVENTS DATA_CHANGED AND DATA_CHANGED_FINISHED)
*   CALL METHOD ALV_TABLES->CHECK_CHANGED_DATA.
  ENDCASE.
ENDMODULE.                  " USER_COMMAND_2000  INPUT
*&---------------------------------------------------------------------*
*&      FORM  HANDLE_DATA_CHANGED
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
*      -->P_ER_DATA_CHANGED  TEXT
*----------------------------------------------------------------------*
FORM HANDLE_DATA_CHANGED   USING  DATA_CHANGED  TYPE  REF  TO CL_ALV_CHANGED_DATA_PROTOCOL.
  DATA:MOD_DATA  TYPE LVC_T_MODI ,
       MOD_DATA_WA  TYPE LVC_S_MODI.

  DATA:G_KANSW  LIKE ANLC-KANSW,
       G_KNAFA  LIKE ANLC-KNAFA,
       G_NAFAG  LIKE ANLC-NAFAG,
       G_ANSWL  LIKE ANLC-ANSWL,
       G_NAFAV  LIKE ANLC-NAFAV,
       G_NAFAL  LIKE ANLC-NAFAL,
       G_BUKRS  LIKE EKKO-BUKRS,
       G_ANTAG  LIKE ZMMT190-ANTAG,
       G_ANTBG  LIKE ZMMT190-ANTBG,
       G_AKTIV  LIKE ZMMT190-AKTIV.

  MOD_DATA = DATA_CHANGED->MT_MOD_CELLS.
   DESCRIBE  TABLE MOD_DATA  LINES G_LINES.

   LOOP  AT MOD_DATA  INTO MOD_DATA_WA.
    CLEAR:G_ANTAG,G_ANTBG.
     IF MOD_DATA_WA-FIELDNAME =  'ANTAG'  OR MOD_DATA_WA-FIELDNAME =  'ANTBG' .
       IF MOD_DATA_WA-FIELDNAME =  'ANTAG'.
        G_ANTAG = MOD_DATA_WA-VALUE.
        G_ANTBG =  0000.
       ELSEIF MOD_DATA_WA-FIELDNAME =  'ANTBG'.
         READ  TABLE GT_EQUIP_A  INDEX MOD_DATA_WA-ROW_ID.
         IF SY-SUBRC =  0.
          G_ANTAG = GT_EQUIP_A-ANTAG.
        ENDIF.
        G_ANTBG = MOD_DATA_WA-VALUE.
      ENDIF.



       READ  TABLE GT_EQUIP_A  INDEX MOD_DATA_WA-ROW_ID.
       IF SY-SUBRC =  0.
         SELECT  SINGLE CUSTNO IMDAT JGDAT
           INTO (GT_EQUIP_A-CUSTNO,GT_EQUIP_A-IMDAT,GT_EQUIP_A-JGDAT)
         FROM ZMMT064
         WHERE ANLN1 = G_ANTAG.
         IF GT_EQUIP_A-CUSTNO  IS INITIAL.
           CALL  FUNCTION  'CONVERSION_EXIT_ALPHA_INPUT'
             EXPORTING
               INPUT  = G_ANTAG
             IMPORTING
               OUTPUT = G_ANTAG.

           SELECT  SINGLE CUSTNO IMDAT JGDAT
           INTO (GT_EQUIP_A-CUSTNO,GT_EQUIP_A-IMDAT,GT_EQUIP_A-JGDAT)
         FROM ZMMT064
         WHERE ANLN1 = G_ANTAG.
        ENDIF.

        CLEAR:G_BUKRS.
         SELECT  SINGLE BUKRS
           INTO G_BUKRS
         FROM EKKO
           WHERE EBELN = GT_EQUIP_A-EBELN.
      ENDIF.

       CALL  FUNCTION  'CONVERSION_EXIT_ALPHA_INPUT'
         EXPORTING
           INPUT  = G_ANTAG
         IMPORTING
           OUTPUT = G_ANTAG.

       CALL  FUNCTION  'CONVERSION_EXIT_ALPHA_INPUT'
         EXPORTING
           INPUT  = G_ANTBG
         IMPORTING
           OUTPUT = G_ANTBG.

*-----財報

      CLEAR:GT_ANLC,GT_ANLC[].
       SELECT  KANSW KNAFA NAFAG ANSWL NAFAV NAFAL GJAHR
         INTO CORRESPONDING  FIELDS  OF  TABLE GT_ANLC
       FROM ANLC
       WHERE ANLN1 = G_ANTAG
         AND ANLN2 = G_ANTBG
         AND BUKRS = G_BUKRS
         AND AFABE =  1.
       SORT GT_ANLC  BY GJAHR DESCENDING.
       READ  TABLE GT_ANLC  INDEX  1.
      GT_EQUIP_A-CBZMJ = GT_ANLC-KANSW + GT_ANLC-KNAFA + GT_ANLC-NAFAG + GT_ANLC-ANSWL + GT_ANLC-NAFAV + GT_ANLC-NAFAL.
*-----稅報
      CLEAR:GT_ANLC,GT_ANLC[].
       SELECT  KANSW KNAFA NAFAG ANSWL NAFAV NAFAL GJAHR
         INTO CORRESPONDING  FIELDS  OF  TABLE GT_ANLC
       FROM ANLC
       WHERE ANLN1 = G_ANTAG
         AND ANLN2 = G_ANTBG
         AND BUKRS = G_BUKRS
         AND AFABE =  20.
       SORT GT_ANLC  BY GJAHR DESCENDING.
       READ  TABLE GT_ANLC  INDEX  1.
      GT_EQUIP_A-SBZMJ =  GT_ANLC-KANSW + GT_ANLC-KNAFA + GT_ANLC-NAFAG + GT_ANLC-ANSWL + GT_ANLC-NAFAV + GT_ANLC-NAFAL.
*-----資本化日期
      CLEAR:G_AKTIV.
       SELECT  SINGLE AKTIV
         INTO G_AKTIV
       FROM ANLA
       WHERE ANLN1 = G_ANTAG
         AND ANLN2 = G_ANTBG
         AND BUKRS = G_BUKRS.

      GT_EQUIP_A-AKTIV = G_AKTIV.

*-----现行成本中心
       SELECT  SINGLE KOSTL
         INTO GT_EQUIP_A-KOSTL
       FROM ANLZ
         WHERE BUKRS = G_BUKRS
         AND ANLN1 = G_ANTAG
         AND ANLN2 = G_ANTBG
         AND BDATU >= SY-DATUM.

       SELECT  SINGLE KTEXT
             INTO GT_EQUIP_A-KTEXT
           FROM CSKT
             WHERE KOSTL = GT_EQUIP_A-KOSTL
               AND SPRAS =  'M'.

       MODIFY GT_EQUIP_A  INDEX MOD_DATA_WA-ROW_ID.
    ENDIF.
     CALL  METHOD ALV_TABLES->REFRESH_TABLE_DISPLAY
*     EXPORTING
*       IS_STABLE      =
*       I_SOFT_REFRESH =
*     EXCEPTIONS
*       FINISHED       = 1
*       OTHERS         = 2
            .
     IF SY-SUBRC <>  0.
       MESSAGE  ID SY-MSGID  TYPE SY-MSGTY  NUMBER SY-MSGNO
                  WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.






  ENDLOOP.
ENDFORM.                     " HANDLE_DATA_CHANGED
*&---------------------------------------------------------------------*
*&      FORM  SAVE_DATA
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
*  -->  P1        TEXT
*  <--  P2        TEXT
*----------------------------------------------------------------------*
FORM SAVE_DATA .


   IF G_LINES  NE  0.
     CALL  FUNCTION  'POPUP_TO_CONFIRM'
       EXPORTING
         TITLEBAR              'SAVE'
        TEXT_QUESTION         =  '是否儲存'
        TEXT_BUTTON_1         =  'YES'
        ICON_BUTTON_1         =  'ICON_OKAY'
        TEXT_BUTTON_2         =  'NO'
        ICON_BUTTON_2         =  'ICON_CANCEL'
        DEFAULT_BUTTON        =  '1'
        DISPLAY_CANCEL_BUTTON =  ''
        START_COLUMN          =  25
        START_ROW             =  8
        POPUP_TYPE            =  'ICON_MESSAGE_WARNING'
       IMPORTING
        ANSWER                = G_ANSWER.  " 1= YES, 2= NO, A= CANCEL
     IF G_ANSWER =  1.
       MODIFY ZMMT190  FROM  TABLE GT_EQUIP_A.
       IF SY-SUBRC  NE  0.
         ROLLBACK WORK.
         MESSAGE E000(ZMM03)  WITH  '儲存資料發生失敗'.
      ELSE.
         COMMIT  WORK  AND WAIT.
         MESSAGE S000(ZMM03)  WITH  '儲存資料成功!'.
      ENDIF.
    ENDIF.
  ELSE.
     MESSAGE S000(ZMM03)  WITH  '無修改數據'.
  ENDIF.
ENDFORM.                     " SAVE_DATA
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值