*&---------------------------------------------------------------------*
*& Report ZFIR125
*&---------------------------------------------------------------------*
*& Author : NathanSun
*& Create Date : 2020-04-28
*& Program Type : Report
*& Description : 金税接口配置表维护程序
*&---------------------------------------------------------------------*
REPORT ZFIR125.
*&---------------------------------------------------------------------*
*& 包含 ZMMR112_TOP
*&---------------------------------------------------------------------*
TABLES:ZBILL.
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
DATA: DRAGDROP_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.
DATA: CONTROLS_CREATED.
DATA: GT_DATA TYPE TABLE OF ZBILL WITH HEADER LINE.
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME.
SELECT-OPTIONS: S_KUNRG FOR ZBILL-KUNRG MODIF ID C1 . "客户
SELECT-OPTIONS: S_BUKRS FOR ZBILL-BUKRS MODIF ID C1 . "公司代码
SELECT-OPTIONS: S_MATNR FOR ZBILL-MATNR MODIF ID C1 . "物料编号
SELECTION-SCREEN END OF BLOCK B1.
SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-T02.
PARAMETERS: R1 RADIOBUTTON GROUP R1 USER-COMMAND UC1.
PARAMETERS: R2 RADIOBUTTON GROUP R1.
PARAMETERS: R3 RADIOBUTTON GROUP R1.
SELECTION-SCREEN END OF BLOCK B2.
*&---------------------------------------------------------------------*
*& 包含 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.
DATA: LS_TOOLBAR TYPE STB_BUTTON.
IF R3 IS INITIAL.
DELETE E_OBJECT->MT_TOOLBAR WHERE FUNCTION = '&PRINT_BACK'.
CLEAR: LS_TOOLBAR.
LS_TOOLBAR-BUTN_TYPE = 3. " 分隔符
APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.
CLEAR: LS_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.
ENDIF.
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 ZBILL
WHERE KUNRG IN S_KUNRG
AND BUKRS IN S_BUKRS
AND MATNR 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' .
WA_FIELD-REF_TABLE = 'MARA'.
WA_FIELD-REF_FIELD = 'MATNR'.
ENDIF.
IF WA_FIELD-FIELDNAME = 'MAKTX' .
WA_FIELD-REF_TABLE = 'MAKT'.
WA_FIELD-REF_FIELD = 'MAKTX'.
ENDIF.
IF WA_FIELD-FIELDNAME = 'BUKRS' .
WA_FIELD-REF_TABLE = 'ZTMJZD'.
WA_FIELD-REF_FIELD = 'BUKRS'.
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 = 'FKTYP'
OR WA_FIELD-FIELDNAME = 'FKKTX'
OR WA_FIELD-FIELDNAME = 'FKRMT'
OR WA_FIELD-FIELDNAME = 'FKINS'
OR WA_FIELD-FIELDNAME = 'SSFLBM'
OR WA_FIELD-FIELDNAME = 'SHUILV'
OR WA_FIELD-FIELDNAME = 'MAME_EN'
.
WA_FIELD-EDIT = 'X'.
ENDIF.
ELSEif R2 IS NOT INITIAL.
WA_FIELD-EDIT = 'X'.
ENDIF.
IF WA_FIELD-FIELDNAME = 'ZFLAG' .
WA_FIELD-CHECKBOX = 'X'.
WA_FIELD-EDIT = 'X'.
ENDIF.
APPEND WA_FIELD TO L_FCAT_CACHE .
CLEAR WA_FIELD.
END-OF-DEFINITION.
FILL_FIELD :
'KUNRG' '客户',
'BUKRS' '公司',
'MATNR' '物料编码',
'FKTYP' '出具发票类型',
'FKKTX' '开票名称',
'FKRMT' '开票规格',
'FKINS' '开票单位',
'SSFLBM' '税收分类编码',
'SHUILV' '税率',
'MAME_EN' '客户名称有中英文'.
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:LV_MARA TYPE MARA .
DATA:LV_KNB1 TYPE KNB1 .
SORT GT_DATA BY BUKRS MATNR .
DELETE GT_DATA[] WHERE KUNRG IS INITIAL AND BUKRS IS INITIAL AND MATNR IS INITIAL.
* LOOP AT GT_DATA.
* SELECT SINGLE * INTO @DATA(GT_MARC) FROM MARC
* WHERE BUKRS = @GT_DATA-BUKRS
* AND MATNR = @GT_DATA-MATNR
* .
* CLEAR CHECK1 .
* CLEAR CHECK2 .
* IF SY-SUBRC <> 0.
* DATA(LV_BUKRS) = GT_DATA-BUKRS .
* DATA(LV_MATNR1) = GT_DATA-MATNR .
* CHECK1 = 'X'.
* EXIT.
* ENDIF.
*
* SELECT SINGLE * INTO @DATA(GT_MARA) FROM MARA
* WHERE MATNR = @GT_DATA-MATNR
* AND MTART = 'Z005'
* .
* IF SY-SUBRC <> 0.
* DATA(LV_MATNR2) = GT_DATA-MATNR .
* CHECK2 = 'X'.
* EXIT.
* ENDIF.
* CLEAR GT_DATA .
* ENDLOOP.
* IF CHECK1 IS INITIAL AND CHECK2 IS INITIAL.
*ZFIR125 新增或修改做如下检查:客户+公司如果在KNB1查询不到,
*报错提示“客户”+客户编码+“在”+公司代码+“不存在”;
*物料如果在MARA查询不到,报错提示"物料编码+物料编码+“不存在”
IF R2 IS NOT INITIAL.
LOOP AT GT_DATA.
SELECT SINGLE MATNR INTO LV_MARA-MATNR FROM MARA
WHERE MATNR = GT_DATA-MATNR
.
IF SY-SUBRC <> 0.
CHECK1 = 'X'.
EXIT.
ENDIF.
SELECT SINGLE KUNNR INTO LV_KNB1-KUNNR FROM KNB1
WHERE KUNNR = GT_DATA-KUNRG
AND BUKRS = GT_DATA-BUKRS
.
IF SY-SUBRC <> 0.
CHECK2 = 'X'.
EXIT.
ENDIF.
CLEAR GT_DATA .
CLEAR CHECK1 .
CLEAR CHECK2 .
ENDLOOP.
ENDIF.
IF CHECK1 IS INITIAL AND CHECK2 IS INITIAL.
MODIFY ZBILL FROM TABLE GT_DATA[] .
COMMIT WORK .
MESSAGE '保存成功!'TYPE 'S' .
CLEAR GT_DATA[] .
ELSEIF CHECK1 IS NOT INITIAL.
MESSAGE '物料编码:' && GT_DATA-MATNR && '不存在!' TYPE 'S' DISPLAY LIKE 'E'.
ELSEIF CHECK2 IS NOT INITIAL.
MESSAGE '客户:' && GT_DATA-KUNRG && '在公司' && GT_DATA-BUKRS && '下不存在' TYPE 'S' DISPLAY LIKE 'E'.
ENDIF.
* ELSEIF CHECK1 IS NOT INITIAL .
* MESSAGE '模具' && LV_MATNR1 && '在工厂' && LV_BUKRS && '下' && '无主档数据' TYPE 'S' DISPLAY LIKE 'E'.
* ELSEIF CHECK2 IS NOT INITIAL .
* MESSAGE '模具' && LV_MATNR2 && '的类型并非Z005' 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 0 .
* 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 OR R3 IS NOT INITIAL.
PERFORM FOM_GETDATA .
ELSEIF R2 IS NOT INITIAL.
DO 50 TIMES.
APPEND INITIAL LINE TO GT_DATA[] .
ENDDO.
ENDIF.
CALL SCREEN 100.
金税接口配置表维护程序(开发笔记)
最新推荐文章于 2024-07-04 16:54:26 发布