主要是在data_changed中處理
REPORT ZUBATSDN.
TABLES: VBAK,VBUP,LIKP,VBAP, ZTSDN.
*TYPE-POOLS VRM.
DATA: IT_FIELDCAT1 TYPE LVC_T_FCAT,
TY_FIELDCAT TYPE LVC_S_FCAT.
Data w_style TYPE lvc_s_styl.
Data t_style TYPE lvc_t_styl.
DATA: G_ALV_CHANGE TYPE C LENGTH 1 VALUE ''.
DATA: OK_CODE LIKE SY-UCOMM.
*--SO
DATA: G_SO_HEADERX TYPE BAPISDH1X,
G_SO_HEADER TYPE BAPISDH1,
G_SO_RETURN TYPE BAPIRET2 OCCURS 0 WITH HEADER
LINE,
G_SO_ITEM TYPE BAPISDITM OCCURS 0 WITH HEADER
LINE,
G_SO_ITEMX TYPE BAPISDITMX OCCURS 0 WITH HEADER
LINE.
DATA: BEGIN OF IT_VBELN OCCURS 0,
VBELN LIKE VBAK-VBELN,
END OF IT_VBELN.
DATA: BEGIN OF IT_SO OCCURS 0,
CBOX(1) TYPE C, "CHECK
VBELN LIKE VBAP-VBELN,
POSNR LIKE VBAP-POSNR,
MATNR LIKE VBAP-MATNR,
ARKTX LIKE VBAP-ARKTX,
KWMENG LIKE VBAP-KWMENG,
LIGHT TYPE C LENGTH 1,
MESS TYPE C LENGTH 120,
END OF IT_SO.
data: it_save_data LIKE TABLE OF ZTSDN WITH HEADER LINE.
*--SO
DATA: BEGIN OF IT_DN OCCURS 0,
CBOX(1) TYPE C, "CHECK
VBELN LIKE LIPS-VBELN,
POSNR LIKE LIPS-POSNR,
MATNR LIKE LIPS-MATNR,
LFIMG LIKE LIPS-LFIMG,
VGBEL LIKE LIPS-VGBEL, "SO NUMBER
VGPOS LIKE LIPS-VGPOS, "SO ITEM
LIGHT TYPE C LENGTH 1,
MESS TYPE C LENGTH 120,
END OF IT_DN.
DATA: BEGIN OF IT_BILL OCCURS 0,
VGBEL LIKE VBRP-VGBEL, "dn number
VGPOS LIKE VBRP-VGPOS, "dn item
VBELN LIKE VBRP-VBELN, "billing number
POSNR LIKE VBRP-POSNR, "billing item
END OF IT_BILL.
CLASS lcl_alv_receiver100 DEFINITION DEFERRED.
CLASS lcl_alv_receiver100 DEFINITION .
PUBLIC SECTION.
DATA: L_ITEMNO TYPE I.
METHODS: handle_button_click FOR EVENT button_click OF
cl_gui_alv_grid
IMPORTING ES_COL_ID ES_ROW_NO,
handle_data_changed FOR EVENT data_changed OF
cl_gui_alv_grid
IMPORTING er_data_changed e_onf4
e_onf4_before e_onf4_after
e_ucomm,
HANDLE_DATA_CHANGED_FINISHED FOR EVENT
DATA_CHANGED_FINISHED OF cl_gui_alv_grid
IMPORTING E_MODIFIED ET_GOOD_CELLS.
ENDCLASS. "lcl_event_receiver DEFINITION
CLASS lcl_alv_receiver100 IMPLEMENTATION.
METHOD handle_button_click.
* PERFORM CHECK_SELECT100 USING ES_ROW_NO-ROW_ID.
ENDMETHOD.
METHOD handle_data_changed.
PERFORM handle_data_changed USING er_data_changed.
ENDMETHOD. "handle_data_changed
METHOD HANDLE_DATA_CHANGED_FINISHED.
IF G_ALV_CHANGE = '1'.
G_ALV_CHANGE = '2'.
PERFORM ALV_REFRESH100.
ELSEIF G_ALV_CHANGE = '2'.
G_ALV_CHANGE = '0'.
ENDIF.
ENDMETHOD.
ENDCLASS. "lcl_ALV_event_receiver
DATA: G_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
DATA: LC_ALV_OBJ TYPE REF TO cl_gui_alv_grid.
DATA: LT_EXCLUDE100 TYPE UI_FUNCTIONS.
DATA: L_VAR100 TYPE DISVARIANT.
DATA: GS_LAYOUT100 TYPE LVC_S_LAYO.
DATA: lc_alv_rec_obj TYPE REF TO lcl_alv_receiver100.
data: G_REFRESH TYPE C LENGTH 1 VALUE '1'.
SELECTION-SCREEN SKIP.
PARAMETERS: P_SO RADIOBUTTON GROUP G1 USER-COMMAND GC1 DEFAULT 'X',
P_DN RADIOBUTTON GROUP G1.
SELECTION-SCREEN: BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
* (0)
SELECT-OPTIONS: SP_VKORG FOR VBAK-VKORG OBLIGATORY DEFAULT '3231'.
"?售?? "共用條件
* (A.1)
SELECT-OPTIONS: SP_DN FOR LIKP-VBELN MODIF ID S2.
* (B.1)
SELECT-OPTIONS: SP_VBELN FOR VBAK-VBELN MODIF ID S1,
SP_VTWEG FOR VBAK-VTWEG OBLIGATORY DEFAULT '00'
MODIF ID S1, "分?渠道
SP_SPART FOR VBAK-SPART OBLIGATORY DEFAULT '00'
MODIF ID S1. "?品?
SELECTION-SCREEN SKIP.
* (A.2)
PARAMETERS: P_BILL AS CHECKBOX DEFAULT '' MODIF ID S2.
* (B.2)
PARAMETERS: P_NCLR RADIOBUTTON GROUP G2 DEFAULT 'X' MODIF ID
S1,
P_YCLR RADIOBUTTON GROUP G2 MODIF ID S1.
SELECTION-SCREEN: END OF BLOCK B1.
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF SCREEN-GROUP1 = 'S1'.
IF P_SO = 'X'.
SCREEN-ACTIVE = '1'.
ELSE.
SCREEN-ACTIVE = '0'.
ENDIF.
ELSEIF SCREEN-GROUP1 = 'S2'.
IF P_DN = 'X'.
SCREEN-ACTIVE = '1'.
ELSE.
SCREEN-ACTIVE = '0'.
ENDIF.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
INITIALIZATION.
START-OF-SELECTION.
CASE 'X'.
WHEN P_SO.
PERFORM GET_SO_NUMBER.
PERFORM GET_SO_ITEM.
WHEN P_DN.
if P_BILL <> 'X'.
PERFORM GET_DN_ITEM.
else.
PERFORM GET_DN_BILL.
endif.
WHEN OTHERS.
ENDCASE.
END-OF-SELECTION.
FORM GET_SO_NUMBER.
CLEAR: IT_VBELN, IT_VBELN[].
SELECT VBELN INTO CORRESPONDING FIELDS OF TABLE IT_VBELN
FROM VBAK
WHERE VBELN IN SP_VBELN AND
VKORG IN SP_VKORG AND
VTWEG IN SP_VTWEG AND
SPART IN SP_SPART.
IF IT_VBELN[] IS INITIAL.
MESSAGE TEXT-E01 TYPE 'S' DISPLAY LIKE 'E'.
STOP.
ENDIF.
ENDFORM.
FORM GET_SO_ITEM.
CLEAR: IT_SO, IT_SO[].
CASE 'X'.
WHEN P_NCLR. "未清且未拒絕
SELECT VBAP~VBELN
VBAP~POSNR
VBAP~MATNR
VBAP~ARKTX
VBAP~KWMENG
INTO CORRESPONDING FIELDS OF TABLE IT_SO
FROM VBAP INNER JOIN VBUP ON VBAP~MANDT = VBUP~MANDT AND
VBAP~VBELN = VBUP~VBELN AND
VBAP~POSNR = VBUP~POSNR
FOR ALL ENTRIES IN IT_VBELN
WHERE VBAP~VBELN = IT_VBELN-VBELN AND
VBUP~ABSTA = 'A' AND "未拒絕
VBUP~GBSTA IN ('A','B'). "未清
WHEN P_YCLR. "已清且已拒絕
SELECT VBAP~VBELN
VBAP~POSNR
VBAP~MATNR
VBAP~ARKTX
VBAP~KWMENG
INTO CORRESPONDING FIELDS OF TABLE IT_SO
FROM VBAP INNER JOIN VBUP ON VBAP~MANDT = VBUP~MANDT
AND
VBAP~VBELN = VBUP~VBELN
AND
VBAP~POSNR = VBUP~POSNR
INNER JOIN ZTSDN ON VBAP~MANDT = ZTSDN~MANDT
AND
VBAP~VBELN = ZTSDN~VBELN
AND
VBAP~POSNR = ZTSDN~POSNR
FOR ALL ENTRIES IN IT_VBELN
WHERE VBAP~VBELN = IT_VBELN-VBELN AND
VBUP~ABSTA = 'C' AND "拒絕
VBUP~GBSTA NOT IN ('A','B'). "已
清
WHEN OTHERS.
ENDCASE.
IF IT_SO[] IS NOT INITIAL.
CALL SCREEN 100.
ELSE.
MESSAGE TEXT-E01 TYPE 'S' DISPLAY LIKE 'E'.
STOP.
ENDIF.
ENDFORM.
FORM GET_DN_ITEM.
CLEAR: IT_DN, IT_DN[].
SELECT LIPS~VBELN
LIPS~POSNR
LIPS~MATNR
LIPS~LFIMG
LIPS~VGBEL "SO NUMBER
LIPS~VGPOS "SO ITEM
INTO CORRESPONDING FIELDS OF TABLE IT_DN
FROM VBUK INNER JOIN LIKP ON VBUK~MANDT = LIKP~MANDT AND
VBUK~VBELN = LIKP~VBELN
INNER JOIN LIPS ON VBUK~MANDT = LIPS~MANDT AND
VBUK~VBELN = LIPS~VBELN
WHERE VBUK~VBELN IN SP_DN AND
VBUK~WBSTK = 'A' AND
LIKP~VKORG IN SP_VKORG.
IF IT_DN[] IS NOT INITIAL.
CALL SCREEN 100.
ELSE.
MESSAGE TEXT-E01 TYPE 'S' DISPLAY LIKE 'E'.
STOP.
ENDIF.
ENDFORM.
FORM GET_DN_BILL.
CLEAR: IT_BILL, IT_BILL[].
SELECT VBRP~VGBEL
VBRP~VGPOS
VBRP~VBELN
VBRP~POSNR
INTO CORRESPONDING FIELDS OF TABLE IT_BILL
FROM VBRP INNER JOIN LIKP ON VBRP~MANDT = LIKP~MANDT AND
VBRP~VGBEL = LIKP~VBELN
WHERE LIKP~VKORG IN SP_VKORG.
IF IT_BILL[] IS NOT INITIAL.
CALL SCREEN 100.
ELSE.
MESSAGE TEXT-E01 TYPE 'S' DISPLAY LIKE 'E'.
STOP.
ENDIF.
ENDFORM.
form select_all_entries using pf_sel.
IF P_SO = 'X'.
LOOP AT IT_SO. "-- WHERE CBOX <> pf_sel.
IT_SO-CBOX = pf_sel.
if IT_SO-LIGHT = '3'.
IT_SO-CBOX = ''.
endif.
MODIFY IT_SO.
ENDLOOP.
ENDIF.
IF P_DN = 'X'.
LOOP AT IT_DN. "-- WHERE CBOX <> pf_sel.
IT_DN-CBOX = pf_sel.
if IT_DN-LIGHT = '3'.
IT_DN-CBOX = ''.
endif.
MODIFY IT_DN.
ENDLOOP.
ENDIF.
endform.
form deal_data_so.
CLEAR: it_save_data, it_save_data[].
LOOP AT IT_SO WHERE CBOX = 'X'.
* --表頭參數
G_SO_HEADERX-UPDATEFLAG = 'U'.
G_SO_HEADERX-TAX_CLASS2 = 'X'.
G_SO_HEADER-TAX_CLASS2 = ''.
* --明細參數
CLEAR: G_SO_ITEM, G_SO_ITEM[].
G_SO_ITEM-ITM_NUMBER = IT_SO-POSNR.
IF P_NCLR = 'X'.
G_SO_ITEM-REASON_REJ = '01'.
ELSEIF P_YCLR = 'X'.
G_SO_ITEM-REASON_REJ = ''.
ENDIF.
APPEND G_SO_ITEM.
CLEAR: G_SO_ITEMX, G_SO_ITEMX[].
G_SO_ITEMX-UPDATEFLAG = 'U'.
G_SO_ITEMX-ITM_NUMBER = IT_SO-POSNR.
G_SO_ITEMX-REASON_REJ = 'X'.
APPEND G_SO_ITEMX.
CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
EXPORTING
SALESDOCUMENT = IT_SO-VBELN "必需參數
ORDER_HEADER_IN = G_SO_HEADER "修改表頭內
容時需要
ORDER_HEADER_INX = G_SO_HEADERX "必需參數updateflag =
'U'.
TABLES
RETURN = G_SO_RETURN "返回Message參數
ORDER_ITEM_IN = G_SO_ITEM "修改明細內容
ORDER_ITEM_INX = G_SO_ITEMX. "修改明細內容相應字段
READ TABLE G_SO_RETURN WITH KEY TYPE = 'E'.
IF SY-SUBRC <> 0.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
IT_SO-LIGHT = '3'.
IT_SO-MESS = 'OK'.
IT_SO-CBOX = ''. "ok的就取消選擇
* --SAVE DATA
MOVE-CORRESPONDING IT_SO TO it_save_data.
APPEND it_save_data.
CLEAR it_save_data.
* --END
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
IT_SO-LIGHT = '1'.
IT_SO-MESS = G_SO_RETURN-MESSAGE.
ENDIF.
MODIFY IT_SO.
ENDLOOP.
if it_save_data[] is not INITIAL.
CASE 'X'.
WHEN P_NCLR. "未清且未拒絕
insert ZTSDN from table it_save_data.
WHEN P_YCLR. "已清且已拒絕
delete ZTSDN from table it_save_data.
WHEN OTHERS.
...
ENDCASE.
if sy-subrc = 0.
commit work.
else.
rollback work.
endif.
endif.
endform.
*---------------------------------------------
DATA: BEGIN OF IT_BDCTAB1 OCCURS 0,
PROGRAM LIKE BDCDATA-PROGRAM,
DYNPRO LIKE BDCDATA-DYNPRO,
DYNBEGIN LIKE BDCDATA-DYNBEGIN,
FNAM LIKE BDCDATA-FNAM,
FVAL LIKE BDCDATA-FVAL,
END OF IT_BDCTAB1.
FORM BDC_TAB USING FLAG VAR1 VAR2.
CLEAR: IT_BDCTAB1.
IF FLAG = 'X'.
IT_BDCTAB1-PROGRAM = VAR1.
IT_BDCTAB1-DYNPRO = VAR2.
IT_BDCTAB1-DYNBEGIN = 'X'.
ELSE.
IT_BDCTAB1-FNAM = VAR1.
IT_BDCTAB1-FVAL = VAR2.
ENDIF.
APPEND IT_BDCTAB1.
ENDFORM. " BDC_TAB
FORM BDC_VL02N TABLES PF_BDCMSG USING PF_VBELN.
REFRESH: IT_BDCTAB1, PF_BDCMSG.
PERFORM BDC_TAB USING 'X' 'SAPMV50A' '4004'.
PERFORM BDC_TAB USING '' 'BDC_CURSOR' 'LIKP-VBELN'.
PERFORM BDC_TAB USING '' 'BDC_OKCODE' '/00'.
PERFORM BDC_TAB USING '' 'LIKP-VBELN' PF_VBELN.
PERFORM BDC_TAB USING 'X' 'SAPMV50A' '1000'.
PERFORM BDC_TAB USING '' 'BDC_OKCODE' '=MKAL_T'.
PERFORM BDC_TAB USING '' 'BDC_CURSOR' 'LIKP-BLDAT'.
PERFORM BDC_TAB USING 'X' 'SAPMV50A' '1000'.
PERFORM BDC_TAB USING '' 'BDC_OKCODE' '=POLO_T'.
PERFORM BDC_TAB USING '' 'BDC_CURSOR' 'LIKP-BLDAT'.
PERFORM BDC_TAB USING 'X' 'SAPMV50A' '1000'.
PERFORM BDC_TAB USING '' 'BDC_OKCODE' '=SICH_T'.
PERFORM BDC_TAB USING '' 'BDC_CURSOR' 'LIKP-BLDAT'.
* PERFORM BDC_TAB USING '' '' ''.
* PERFORM BDC_TAB USING '' '' ''.
CALL TRANSACTION 'VL02N' USING IT_BDCTAB1 MODE 'P' MESSAGES INTO
PF_BDCMSG. "MODE=A可以做測試
ENDFORM.
form deal_data_dn.
DATA: LT_BDCMSG LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.
DATA: LT_DN_NUMBER LIKE TABLE OF IT_DN WITH HEADER LINE.
CLEAR: LT_DN_NUMBER, LT_DN_NUMBER[].
LOOP AT IT_DN WHERE CBOX = 'X'.
LT_DN_NUMBER-VBELN = IT_DN-VBELN.
APPEND LT_DN_NUMBER.
CLEAR LT_DN_NUMBER.
ENDLOOP.
SORT LT_DN_NUMBER BY VBELN.
DELETE ADJACENT DUPLICATES FROM LT_DN_NUMBER COMPARING VBELN.
LOOP AT LT_DN_NUMBER.
PERFORM BDC_VL02N TABLES LT_BDCMSG USING LT_DN_NUMBER-VBELN.
READ TABLE LT_BDCMSG WITH KEY MSGTYP = 'S'.
IF SY-SUBRC = 0.
LOOP AT IT_DN WHERE VBELN = LT_DN_NUMBER-VBELN.
IT_DN-LIGHT = '3'.
IT_DN-MESS = 'OK'.
IT_DN-CBOX = ''. "ok的就取消選擇
MODIFY IT_DN.
ENDLOOP.
ELSE.
READ TABLE LT_BDCMSG WITH KEY MSGTYP = 'E'.
LOOP AT IT_DN WHERE VBELN = LT_DN_NUMBER-VBELN.
IT_DN-LIGHT = '1'.
IT_DN-MESS = LT_BDCMSG-MSGV2.
MODIFY IT_DN.
ENDLOOP.
ENDIF.
ENDLOOP.
endform.
*--------------------------------------
module USER_COMMAND_0100 input.
OK_CODE = SY-UCOMM.
CASE OK_CODE.
WHEN 'EXIT' OR 'BACK' OR 'CANC'.
SET SCREEN 0.
WHEN 'SELECTALL'.
PERFORM ALV_REFRESH100.
perform select_all_entries using 'X'.
WHEN 'DISELECT'.
PERFORM ALV_REFRESH100.
perform select_all_entries using ''.
WHEN 'EXEC'.
PERFORM ALV_REFRESH100.
if P_SO = 'X'.
perform deal_data_so.
endif.
if P_DN = 'X'.
perform deal_data_dn.
endif.
ENDCASE.
CLEAR OK_CODE.
endmodule. " USER_COMMAND_0100 INPUT
FORM GET_CELL_VALUE USING er_data_changed TYPE REF TO
cl_alv_changed_data_protocol
FP_ROWID FP_FNAME FP_VALUE.
CALL METHOD er_data_changed->get_cell_value
EXPORTING
i_row_id = FP_ROWID
i_fieldname = FP_FNAME
IMPORTING
e_value = FP_VALUE.
ENDFORM.
FORM MODIFY_CELL USING er_data_changed TYPE REF TO
cl_alv_changed_data_protocol
FP_ROWID FP_FNAME FP_VALUE.
CALL METHOD er_data_changed->modify_cell
EXPORTING
i_row_id = FP_ROWID
i_fieldname = FP_FNAME
i_value = FP_VALUE.
ENDFORM.
FORM handle_data_changed USING er_data_changed TYPE REF TO
cl_alv_changed_data_protocol.
data: wa_mod_data TYPE lvc_s_modi.
DATA: L_VBELN LIKE LIPS-VBELN,
L_FLAG TYPE C LENGTH 1.
DATA: L_FOCIND TYPE C.
*IF G_REFRESH = '1'.
IF G_ALV_CHANGE = '2'.
G_ALV_CHANGE = '0'.
EXIT.
ENDIF.
SORT er_data_changed->mt_mod_cells by row_id.
loop at er_data_changed->mt_mod_cells into wa_mod_data.
if wa_mod_data-fieldname EQ 'CBOX' and wa_mod_data-VALUE =
'X'.
if P_SO = 'X'.
READ TABLE IT_SO INDEX wa_mod_data-row_id.
IF IT_SO-LIGHT = '3'.
PERFORM MODIFY_CELL USING er_data_changed
wa_mod_data-row_id 'CBOX' ''.
G_ALV_CHANGE = '1'.
ENDIF.
endif.
endif.
if P_DN = 'X'.
READ TABLE IT_DN INDEX wa_mod_data-row_id.
L_VBELN = IT_DN-VBELN.
L_FLAG = IT_DN-CBOX.
IF IT_DN-LIGHT = '3'.
PERFORM MODIFY_CELL USING er_data_changed
wa_mod_data-row_id 'CBOX' ''.
G_ALV_CHANGE = '1'.
ENDIF.
LOOP AT IT_DN WHERE VBELN = L_VBELN.
IF IT_DN-LIGHT = '3'.
IT_DN-CBOX = ''.
ELSE.
IF L_FLAG = 'X'. "因為ALV與內表的變更正好
相反(慢一步)
IT_DN-CBOX = ''.
ELSE.
IT_DN-CBOX = 'X'.
ENDIF.
ENDIF.
MODIFY IT_DN.
G_ALV_CHANGE = '1'.
ENDLOOP.
endif.
endloop.
* G_REFRESH = '2'.
* CALL METHOD LC_ALV_OBJ->refresh_table_display "All refresh
* EXCEPTIONS
* FINISHED = 1
* OTHERS = 2 .
*ELSE.
* G_REFRESH = '1'.
*ENDIF.
ENDFORM.
FORM ALV_REFRESH100.
DATA ls_stable TYPE lvc_s_stbl.
ls_stable-row = 'X'.
ls_stable-col = 'X'.
CALL METHOD LC_ALV_OBJ->check_changed_data.
CALL METHOD LC_ALV_OBJ->refresh_table_display "All refresh
EXPORTING
is_stable = ls_stable
EXCEPTIONS
FINISHED = 1
OTHERS = 2 .
ENDFORM.
FORM CHECK_SELECT100 USING P_CUR_ROWS.
data: r_rows type lvc_t_row.
clear: r_rows, r_rows[].
append P_CUR_ROWS to r_rows.
CALL METHOD LC_ALV_OBJ->set_selected_rows
EXPORTING
IT_INDEX_ROWS = r_rows
IS_KEEP_OTHER_SELECTIONS = ''.
ENDFORM.
FORM EXCLUE_TB_100 CHANGING PT_EXCLUDE TYPE UI_FUNCTIONS.
DATA: LS_EXCLUDE TYPE UI_FUNC.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_CHECK.
APPEND LS_EXCLUDE TO PT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_PRINT_BACK.
APPEND LS_EXCLUDE TO PT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_APPEND_ROW.
APPEND LS_EXCLUDE TO PT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_INSERT_ROW.
APPEND LS_EXCLUDE TO PT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_COPY.
APPEND LS_EXCLUDE TO PT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_COPY_ROW.
APPEND LS_EXCLUDE TO PT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_CUT.
APPEND LS_EXCLUDE TO PT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_MOVE_ROW.
APPEND LS_EXCLUDE TO PT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_PASTE.
APPEND LS_EXCLUDE TO PT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_PASTE_NEW_ROW.
APPEND LS_EXCLUDE TO PT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_DELETE_ROW.
APPEND LS_EXCLUDE TO PT_EXCLUDE.
ENDFORM. "exclue_tb_functions
FORM ALV_FIELDCAT100.
REFRESH: IT_FIELDCAT1.
*--------------so
IF P_SO = 'X'.
PERFORM ADD_FIELD_DES USING '' '' '' 'LIGHT' 'IT_SO' 'X' 'X' ''
'' ''
TEXT-T00 6 . "
PERFORM ADD_FIELD_DES USING '' '' 'X' 'CBOX' 'IT_SO' 'X' 'X' ''
'' ''
TEXT-T01 6 . "Check
PERFORM ADD_FIELD_DES USING '' '' '' 'VBELN' 'IT_SO' '' '' '' ''
''
TEXT-T02 10. "
PERFORM ADD_FIELD_DES USING '' '' '' 'POSNR' 'IT_SO' '' '' '' ''
''
TEXT-T03 10. "
PERFORM ADD_FIELD_DES USING '' '' '' 'MATNR' 'IT_SO' '' '' '' ''
''
TEXT-T04 18. "
PERFORM ADD_FIELD_DES USING '' '' '' 'ARKTX' 'IT_SO' '' '' '' ''
''
TEXT-T05 40. "
PERFORM ADD_FIELD_DES USING '' '' '' 'KWMENG' 'IT_SO' '' '' '' ''
''
TEXT-T06 15. "
PERFORM ADD_FIELD_DES USING '' '' '' 'MESS' 'IT_SO' '' '' '' '' ''
TEXT-T07 30. "
ENDIF.
*--------------dn
IF P_DN = 'X'.
IF P_BILL <> 'X'.
PERFORM ADD_FIELD_DES USING '' '' '' 'LIGHT' 'IT_DN' 'X'
'X' '' '' ''
TEXT-T00 6 . "
PERFORM ADD_FIELD_DES USING '' '' 'X' 'CBOX' 'IT_DN' 'X'
'X' '' '' ''
TEXT-T01 6 . "Check
PERFORM ADD_FIELD_DES USING '' '' '' 'VBELN' 'IT_DN' '' ''
'' '' ''
TEXT-T08 10. "
PERFORM ADD_FIELD_DES USING '' '' '' 'POSNR' 'IT_DN' '' ''
'' '' ''
TEXT-T09 10. "
PERFORM ADD_FIELD_DES USING '' '' '' 'MATNR' 'IT_DN' '' ''
'' '' ''
TEXT-T04 18. "
PERFORM ADD_FIELD_DES USING '' '' '' 'VGBEL' 'IT_DN' '' ''
'' '' ''
TEXT-T02 10. "
PERFORM ADD_FIELD_DES USING '' '' '' 'VGPOS' 'IT_DN' '' ''
'' '' ''
TEXT-T03 10. "
PERFORM ADD_FIELD_DES USING '' '' '' 'LFIMG' 'IT_DN' '' ''
'' '' ''
TEXT-T06 15. "
PERFORM ADD_FIELD_DES USING '' '' '' 'MESS' 'IT_DN' '' ''
'' '' ''
TEXT-T07 30. "
ELSE.
PERFORM ADD_FIELD_DES USING '' '' '' 'VGBEL' 'IT_BILL' ''
'' '' '' ''
TEXT-T08 10. "
PERFORM ADD_FIELD_DES USING '' '' '' 'VGPOS' 'IT_BILL' ''
'' '' '' ''
TEXT-T09 10. "
PERFORM ADD_FIELD_DES USING '' '' '' 'VBELN' 'IT_BILL' ''
'' '' '' ''
TEXT-T10 10. "
PERFORM ADD_FIELD_DES USING '' '' '' 'POSNR' 'IT_BILL' ''
'' '' '' ''
TEXT-T11 10. "
ENDIF.
ENDIF.
ENDFORM.
FORM ADD_FIELD_DES USING L_TYPE TYPE C
L_EDIT_MASK TYPE C
L_EDIT TYPE C
L_FIELDNAME TYPE C
L_TABNAME TYPE C
L_KEY TYPE C
L_CHECKBOX TYPE C
L_F4 TYPE C
L_REF_FLD TYPE C
L_REF_TAB TYPE C
L_SELTEX_L TYPE C
L_OUTPUTLEN TYPE I.
CLEAR TY_FIELDCAT.
TY_FIELDCAT-EDIT_MASK = L_EDIT_MASK.
TY_FIELDCAT-EDIT = L_EDIT.
TY_FIELDCAT-FIELDNAME = L_FIELDNAME. "must upper case
TY_FIELDCAT-TABNAME = L_TABNAME. "internal table name
TY_FIELDCAT-KEY = L_KEY. "column with key-color AND
frozen
TY_FIELDCAT-CHECKBOX = L_CHECKBOX. "the column is checkbox
TY_FIELDCAT-F4AVAILABL = L_F4.
TY_FIELDCAT-REF_FIELD = L_REF_FLD.
TY_FIELDCAT-REF_TABLE = L_REF_TAB.
TY_FIELDCAT-COLTEXT = L_SELTEX_L.
TY_FIELDCAT-SELTEXT = L_SELTEX_L.
TY_FIELDCAT-OUTPUTLEN = L_OUTPUTLEN.
APPEND TY_FIELDCAT TO IT_FIELDCAT1.
ENDFORM. "SUB_FIELD_DES
FORM OUTPUT_ALV100 TABLES PF_TABLE.
IF G_CONTAINER IS INITIAL.
CREATE OBJECT G_CONTAINER
EXPORTING
CONTAINER_NAME = 'G_CONTAINER'.
CREATE OBJECT LC_ALV_OBJ
EXPORTING
i_parent = G_CONTAINER.
create object lc_alv_rec_obj.
SET HANDLER lc_alv_rec_obj->handle_button_click FOR
LC_ALV_OBJ.
SET HANDLER lc_alv_rec_obj->handle_data_changed FOR
LC_ALV_OBJ.
SET HANDLER lc_alv_rec_obj->HANDLE_DATA_CHANGED_FINISHED FOR
LC_ALV_OBJ.
PERFORM ALV_FIELDCAT100.
PERFORM EXCLUE_TB_100 CHANGING LT_EXCLUDE100.
L_VAR100 = SY-REPID. "Layout fo report
* GS_LAYOUT100-CWIDTH_OPT = 'X'. "auto fix to width
GS_LAYOUT100-EXCP_FNAME = 'LIGHT'.
IF P_DN = 'X' AND P_BILL = 'X'.
GS_LAYOUT100-EXCP_FNAME = ''.
ENDIF.
CALL METHOD LC_ALV_OBJ->set_table_for_first_display
EXPORTING
IS_VARIANT = L_VAR100
IS_LAYOUT = GS_LAYOUT100
I_SAVE = 'A'
IT_TOOLBAR_EXCLUDING = LT_EXCLUDE100
CHANGING
it_outtab = PF_TABLE[]
IT_FIELDCATALOG = IT_FIELDCAT1[].
CALL METHOD CL_GUI_CONTROL=>SET_FOCUS
EXPORTING
CONTROL = LC_ALV_OBJ.
CALL METHOD LC_ALV_OBJ->REGISTER_EDIT_EVENT
EXPORTING
I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_ENTER.
CALL METHOD LC_ALV_OBJ->REGISTER_EDIT_EVENT
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_modified. "auto
refresh(錄入失去焦點時)
ELSE.
PERFORM ALV_REFRESH100.
ENDIF.
"call method LC_ALV_OBJ->refresh_table_display.
ENDFORM.
*&-------------------------------------------------------------------
--*
*& Module STATUS_0100 OUTPUT
*&-------------------------------------------------------------------
--*
* text
*--------------------------------------------------------------------
--*
module STATUS_0100 output.
DATA: rt_extab TYPE slis_t_extab.
clear: rt_extab, rt_extab[].
IF P_DN = 'X' AND P_BILL = 'X'.
APPEND 'EXEC' TO rt_extab.
APPEND 'DISELECT' TO rt_extab.
APPEND 'SELECTALL' TO rt_extab.
ENDIF.
SET PF-STATUS 'ZPF_STATUS100' EXCLUDING rt_extab.
SET TITLEBAR 'Z_SO'.
CASE 'X'.
WHEN P_SO.
PERFORM OUTPUT_ALV100 TABLES IT_SO.
WHEN P_DN.
if P_BILL <> 'X'.
PERFORM OUTPUT_ALV100 TABLES IT_DN.
else.
PERFORM OUTPUT_ALV100 TABLES IT_BILL.
endif.
WHEN OTHERS.
...
ENDCASE.
endmodule. " STATUS_0100 OUTPUT