*&---------------------------------------------------------------------*
*& 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 0 WITH HEADER LINE,
GT_EQUIP_A LIKE ZMMT190 OCCURS 0 WITH HEADER LINE,
GT_EQUIP_X LIKE ZMMT190 OCCURS 0 WITH HEADER LINE,
GT_MBLNR LIKE ZMMT190 OCCURS 0 WITH HEADER LINE,
GT_ENMBLNR LIKE ZMMT190 OCCURS 0 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 C ,
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 = 1 COLUMN = 1 ).
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
*& 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 0 WITH HEADER LINE,
GT_EQUIP_A LIKE ZMMT190 OCCURS 0 WITH HEADER LINE,
GT_EQUIP_X LIKE ZMMT190 OCCURS 0 WITH HEADER LINE,
GT_MBLNR LIKE ZMMT190 OCCURS 0 WITH HEADER LINE,
GT_ENMBLNR LIKE ZMMT190 OCCURS 0 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 C ,
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 = 1 COLUMN = 1 ).
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