=>Reference
- 使用前提
- 参考Note
- UD冲销程序 ZQEVAC40 74638 - Results recording after usage decision
- 移动冲销程序 ZRQEVAC50 175842 - Inspection lot: Reversal of goods movements from usage decision
1. 概览
- 选择界面
- 取消UD
- 冲销移动
2. 程序
-
主程序
*----------------------------------------------------------------------* * 参照类型定义 *----------------------------------------------------------------------* TYPES: BEGIN OF typ_data, box TYPE c, zjypc TYPE qals-prueflos , "检验批次 budat TYPE qals-budat, "过账日期 zart TYPE qals-art , "检验类型 matnr TYPE qals-matnr , "物料 maktx TYPE makt-maktx , "物料名称 charg TYPE qals-charg , "批次 werk TYPE qals-werk , "工厂 endat TYPE qals-enstehdat , "批次创建日期 lmeng TYPE qals-losmenge , "检验批数量 menge TYPE qals-mengeneinh , "基本计量单位 pterm TYPE qals-pastrterm , "检验开始 pzeit TYPE qals-paendzeit , "检验结束 lgort TYPE qals-lagortchrg , "库存地点 lifnr TYPE qals-lifnr , "供应商 ebeln TYPE qals-ebeln , "采购凭证 mblnr TYPE qals-mblnr , "物料凭证 aufnr TYPE qals-aufnr , "订单 kunnr TYPE qals-kunnr , "客户 kdauf TYPE qals-kdauf , "销售订单 stat35 TYPE qals-stat35, END OF typ_data. TABLES:qals. *----------------------------------------------------------------------* * 全局变量定义 *----------------------------------------------------------------------* DATA: gv_grid TYPE REF TO cl_gui_alv_grid. *----------------------------------------------------------------------* * 全局内表定义 *----------------------------------------------------------------------* DATA: gt_data TYPE STANDARD TABLE OF typ_data. *----------------------------------------------------------------------* * ALV定义 *----------------------------------------------------------------------* DATA: gs_layout_lvc TYPE lvc_s_layo, "显示布局参数 gt_fieldcat_lvc TYPE lvc_t_fcat WITH HEADER LINE, "显示字段表 gs_fieldcat_lvc LIKE gt_fieldcat_lvc, "显示字段表结构 gv_repid LIKE sy-repid. "程序名 *----------------------------------------------------------------------* *SELECT-OPTIONS/选择屏幕 *----------------------------------------------------------------------* SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE l_title1. SELECT-OPTIONS: s_zjyp FOR qals-prueflos, "检验批 s_zpcrq FOR qals-enstehdat, "批次创建日期 s_zjyks FOR qals-pastrterm, "检验开始 s_zjyjs FOR qals-paendterm, "检验结束 s_werk FOR qals-werk, "工厂 s_art FOR qals-art, "检验类型 s_matnr FOR qals-matnr, "物料 s_charg FOR qals-charg, "批次 s_lifnr FOR qals-lifnr, "供应商 s_kunnr FOR qals-kunnr, "客户 s_mblnr FOR qals-mblnr, "物料凭证 s_kdauf FOR qals-kdauf. "销售订单 SELECTION-SCREEN END OF BLOCK b1. *----------------------------------------------------------------------* *INITIALIZATION *----------------------------------------------------------------------* INITIALIZATION. l_title1 = '选择条件'. *----------------------------------------------------------------------* *START-OF-SELECTION/主处理 *----------------------------------------------------------------------* START-OF-SELECTION. *主处理 PERFORM frm_main_proc. PERFORM frm_display_data. *&---------------------------------------------------------------------* *& Form FRM_MAIN_PROC *&---------------------------------------------------------------------* FORM frm_main_proc . SELECT qals~prueflos AS zjypc qals~art AS zart qals~matnr makt~maktx qals~charg qals~werk qals~enstehdat AS endat qals~losmenge AS lmeng qals~mengeneinh AS menge qals~pastrterm AS pterm qals~paendzeit AS pzeit qals~lagortchrg AS lgort qals~lifnr qals~ebeln qals~mblnr qals~aufnr qals~kunnr qals~kdauf qals~stat35 INTO CORRESPONDING FIELDS OF TABLE gt_data FROM qals INNER JOIN makt ON qals~matnr = makt~matnr WHERE qals~prueflos IN s_zjyp AND qals~enstehdat IN s_zpcrq AND qals~pastrterm IN s_zjyks AND qals~paendterm IN s_zjyjs AND qals~werk IN s_werk AND qals~art IN s_art AND qals~matnr IN s_matnr AND qals~charg IN s_charg AND qals~lifnr IN s_lifnr AND qals~kunnr IN s_kunnr AND qals~mblnr IN s_mblnr AND qals~kdauf IN s_kdauf. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_DISPLAY_DATA *&---------------------------------------------------------------------* FORM frm_display_data . CLEAR gt_fieldcat_lvc. REFRESH gt_fieldcat_lvc. PERFORM frm_fill_field USING: 'ZJYPC' '检验批次', 'BUDAT' '冲销日期', 'ZART ' '检验类型', 'MATNR' '物料', 'MAKTX' '物料名称', 'CHARG' '批次', 'WERK ' '工厂', 'ENDAT' '批次创建日期', 'LMENG' '检验批数量', 'MENGE' '基本计量单位', 'PTERM' '检验开始', 'PZEIT' '检验结束', 'LGORT' '库存地点', 'LIFNR' '供应商', 'EBELN' '采购凭证', 'MBLNR' '物料凭证', 'AUFNR' '订单', 'KUNNR' '客户', 'KDAUF' '销售订单'. gs_layout_lvc-cwidth_opt = 'X'. "宽度自动优化 gs_layout_lvc-zebra = 'X'. gs_layout_lvc-box_fname = 'BOX'. "定义选择行 gv_repid = sy-repid. "当前程序名 CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC' EXPORTING i_callback_program = gv_repid i_callback_pf_status_set = 'PF_STATUS_SET' i_callback_user_command = 'USER_COMMAND' is_layout_lvc = gs_layout_lvc it_fieldcat_lvc = gt_fieldcat_lvc[] i_save = 'A' TABLES t_outtab = gt_data EXCEPTIONS program_error = 1 OTHERS = 2. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_FILL_FIELD *&---------------------------------------------------------------------* FORM frm_fill_field USING p1 p2. CLEAR gs_fieldcat_lvc. gs_fieldcat_lvc-fieldname = p1. gs_fieldcat_lvc-scrtext_m = p2. CASE p1. WHEN 'MATNR'. gs_fieldcat_lvc-no_zero = 'X'. WHEN 'BUDAT'. gs_fieldcat_lvc-edit = 'X'. gs_fieldcat_lvc-ref_table = 'QALS'. gs_fieldcat_lvc-ref_field = 'BUDAT'. ENDCASE. APPEND gs_fieldcat_lvc TO gt_fieldcat_lvc. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_SET_STATUS *&---------------------------------------------------------------------* *& 界面按钮设置 *&---------------------------------------------------------------------* FORM pf_status_set USING it_extab TYPE slis_t_extab. SET PF-STATUS 'STANDARD_FULLSCREEN'. ENDFORM. *&---------------------------------------------------------------------* *& Form USER_COMMAND *&---------------------------------------------------------------------* *& 用户按钮控制 *&---------------------------------------------------------------------* FORM user_command USING iw_ucomm TYPE sy-ucomm is_selfield TYPE slis_selfield. IF gv_grid IS INITIAL. CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' IMPORTING e_grid = gv_grid. ENDIF. CALL METHOD gv_grid->check_changed_data. CASE iw_ucomm. WHEN 'ZUNDO_UD'. PERFORM frm_cancel_ud. WHEN 'ZUNDO_MIGO'. PERFORM frm_cancel_mvtpost. ENDCASE. is_selfield-refresh = 'X'. is_selfield-col_stable = 'X'. is_selfield-row_stable