INCLUDE zppr_0017a_top.
*********************************
INCLUDE <icon>.
TABLES:marc,mvke.
*声明存放ALV显示内表类型
TYPES:BEGIN OF ty_alv_itab.
INCLUDE STRUCTURE zzt_pp_001.
TYPES:
zstatus_sc(220),"是否生产
zstatus_qh(220),"是否缺货
zqhqsrq TYPE d,"缺货起始日期
mvgr1 TYPE mvke-mvgr1,
bezei TYPE tvm1t-bezei,"描述
maktx TYPE makt-maktx,"物料描述
plnmg TYPE pbed-plnmg,"本月计划数
zmeng TYPE vbap-zmeng,"销售需求量
labst TYPE mard-labst,"库存数量
zqhjs TYPE menge13,"缺货数量(件)
zqhts TYPE menge13,"缺货天数
name1 TYPE t001w-name1,"工厂描述
lfimg TYPE lips-lfimg,"已发货数
menge TYPE mseg-menge,"当月已生产数量
lfimg1 TYPE lips-lfimg,"当月已发货数量
rowcolor(4),"行颜色
type_dd_hndl TYPE int4,"设置下拉
cellstyles TYPE lvc_t_styl,"样式
END OF ty_alv_itab.
TYPES:BEGIN OF ty_mvke,
matnr TYPE mvke-matnr,"物料
mvgr1 TYPE mvke-mvgr1,"物料组1
bezei TYPE tvm1t-bezei,"描述
END OF ty_mvke.
TYPES:BEGIN OF ty_pbim,
matnr TYPE pbim-matnr,"物料
werks TYPE pbim-werks,"工厂
plnmg TYPE pbed-plnmg,"需求数量
END OF ty_pbim.
DATA:
ok_code_9000 LIKE sy-ucomm,
ok_code_9001 LIKE sy-ucomm,
save_ok like sy-ucomm.
*ALV数量
DATA:
g_ischange,
g_tabnm(30) TYPE c VALUE 'ZZT_PP_001',"维护表名
gs_variant TYPE disvariant,
gs_alv_itab TYPE ty_alv_itab,
gt_alv_itab TYPE TABLE OF ty_alv_itab WITH HEADER LINE,
gt_type_dec TYPE TABLE OF dd07t WITH HEADER LINE,
gt_fieldcat TYPE lvc_t_fcat,"ALV字段目录
gs_layout TYPE lvc_s_layo,"ALV样式
gt_exclude TYPE ui_functions,"ALV排除按钮
wcl_container TYPE REF TO cl_gui_docking_container,"容器类
wcl_alv TYPE REF TO cl_gui_alv_grid."ALV 类
*----------------------------------------------------------------------*
* CLASS lcl_event_handler DEFINITION
*----------------------------------------------------------------------*
* 处理ALV事件类声明
*----------------------------------------------------------------------*
CLASS lcl_event_handler DEFINITION.
PUBLIC SECTION.
METHODS:
* 工具栏自定义按钮
handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
IMPORTING e_object e_interactive,
* 监控按钮
handle_user_command FOR EVENT user_command OF cl_gui_alv_grid
IMPORTING e_ucomm,
* 数据改变
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_handler DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_event_handler IMPLEMENTATION
*----------------------------------------------------------------------*
* 处理ALV事件类实现
*----------------------------------------------------------------------*
CLASS lcl_event_handler IMPLEMENTATION.
* handle toolbar
METHOD handle_toolbar.
PERFORM handle_toolbar USING e_object e_interactive.
ENDMETHOD. "handle_toolbar
* handler user command
METHOD handle_user_command.
PERFORM handle_user_command USING e_ucomm.
ENDMETHOD. "handle_user_command
* handler data changed
METHOD handle_data_changed.
PERFORM handle_data_changed USING er_data_changed e_onf4
e_onf4_before e_onf4_after e_ucomm.
ENDMETHOD. "handle_data_changed
* handler data changed finished
METHOD handle_data_changed_finished.
PERFORM handle_data_changed_finished USING e_modified et_good_cells.
ENDMETHOD. "handle_data_changed_finished
ENDCLASS. "lcl_event_handler IMPLEMENTATION
RANGES:
r_now FOR marc-mmstd,
r_erdat FOR vbak-erdat.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECT-OPTIONS:
s_werks FOR marc-werks OBLIGATORY MEMORY ID zwk,"工厂
s_xqdat FOR marc-mmstd NO-DISPLAY,"OBLIGATORY MEMORY ID zxq,"销售需求日期
s_qhdat FOR marc-mmstd NO-DISPLAY,"缺货起始日期
s_wcdat FOR marc-mmstd NO-DISPLAY,"实际完成日期
s_mvgr1 FOR mvke-mvgr1,"品牌
s_matnr FOR marc-matnr ."物料编码
PARAMETERS P_BUDAT like marc-mmstd DEFAULT sy-datum.
*PARAMETER:p_check AS CHECKBOX NO-DISPLAY.
SELECTION-SCREEN END OF BLOCK b1.
INITIALIZATION .
PERFORM frm_init . "初始化
AT SELECTION-SCREEN .
PERFORM frm_auth_check .
START-OF-SELECTION .
IF sy -batch = 'X' AND sy -uname = 'ZBIT' .
CLEAR :S_WERKS ,S_WERKS[] .
S_WERKS - sign = 'I' .
S_WERKS -option = 'CP' .
S_WERKS -low = '*' .
APPEND S_WERKS .
p_budat = sy -datum .
ENDIF .
IF p_budat = sy -datum .
PERFORM frm_get_data .
ELSEIF p_budat < sy -datum .
PERFORM frm_get_data1 .
ELSEIF p_budat > sy -datum .
MESSAGE e008 (zpp_001 ) .
ENDIF .
IF sy -batch = 'X' AND sy -uname = 'ZBIT' .
PERFORM pf_save_data .
ENDIF .
PERFORM frm_added .
end-OF-SELECTION .
IF sy -batch ne 'X' .
IF p_budat = sy -datum .
call SCREEN 9000 .
ELSEIF p_budat < sy -datum .
CALL SCREEN 9001 .
ENDIF .
ENDIF .
INCLUDE zppr_0017a_pbo .
INCLUDE zppr_0017a_pai .
*&---------------------------------------------------------------------*
*& Form FRM_INIT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_INIT .
r_now - sign = 'I' .
r_now -option = 'BT' .
r_now -low = sy -datum .
r_now -low+6 ( 2 ) = '01' .
CALL FUNCTION 'DATE_GET_MONTH_LASTDAY'
EXPORTING
I_DATE = r_now -low
IMPORTING
E_DATE = r_now -high .
APPEND r_now .
s_xqdat - sign = 'I' .
s_xqdat -option = 'BT' .
s_xqdat -low = sy -datum .
s_xqdat -low+4 ( 4 ) = '0101' .
s_xqdat -high = sy -datum .
APPEND s_xqdat .
* 后台运行数据自动清除,原因不明
r_erdat - sign = 'I' .
r_erdat -option = 'BT' .
r_erdat -LOW = sy -datum .
r_erdat -low+4 ( 4 ) = '0101' .
r_erdat -high = sy -datum .
APPEND r_erdat .
ENDFORM . " FRM_INIT
*&---------------------------------------------------------------------*
*& Form FRM_AUTH_CHECK
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_AUTH_CHECK .
DATA lt_t001w LIKE TABLE OF t001w WITH HEADER LINE .
DATA lt_tvm1 LIKE TABLE OF tvm1 WITH HEADER LINE .
SELECT werks
INTO CORRESPONDING FIELDS OF TABLE lt_t001w
FROM t001w
WHERE werks IN s_werks .
SELECT mvgr1
INTO CORRESPONDING FIELDS OF TABLE lt_tvm1
FROM tvm1
WHERE mvgr1 IN s_mvgr1 .
LOOP AT lt_t001w .
CALL FUNCTION 'ZZ_CHECK_REPAUTH'
EXPORTING
I_MODULE = 'PP'
I_WERKS = lt_t001w -WERKS
EXCEPTIONS
not_authorized = 1
no_modue = 2
OTHERS = 3 .
IF sy -subrc <> 0 .
ENDIF .
ENDLOOP .
LOOP AT lt_tvm1 .
AUTHORITY-CHECK OBJECT 'ZZ_MM005'
ID 'MVGR1' FIELD lt_tvm1 -mvgr1 .
IF sy -subrc <> 0 .
MESSAGE e004 (zcomm ) WITH lt_tvm1 -mvgr1 .
ENDIF .
ENDLOOP .
ENDFORM . " FRM_AUTH_CHECK
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_GET_DATA .
CLEAR :gs_alv_itab ,gt_alv_itab[] .
DATA :
lt_mvke TYPE TABLE OF ty_mvke WITH HEADER LINE ,
lt_mard TYPE TABLE OF mard WITH HEADER LINE ,
lt_pbim type TABLE OF ty_pbim WITH HEADER LINE ,
lt_vbap TYPE TABLE OF vbap WITH HEADER LINE ,
lt_lips type TABLE OF lips WITH HEADER LINE ,
lt_pp_01 type TABLE OF zzt_pp_001 WITH HEADER LINE .
*取物料工厂数据
SELECT t01 ~matnr "物料
t01 ~werks "工厂
t02 ~maktx "物料描述
t03 ~name1 "工厂描述
FROM marc AS t01
INNER JOIN makt AS t02 ON t01 ~matnr = t02 ~matnr AND t02 ~spras = '1'
INNER JOIN t001w AS t03 ON t01 ~werks = t03 ~werks
INNER JOIN mara AS t04 ON t01 ~matnr = t04 ~matnr
INTO CORRESPONDING FIELDS OF TABLE gt_alv_itab
WHERE t01 ~matnr IN s_matnr
AND t01 ~werks IN s_werks
AND t04 ~mtart = 'FERT' .
* 取物料组数据
SELECT t01 ~matnr "物料
t01 ~mvgr1 "物料组1
t02 ~bezei "描述
FROM mvke AS t01
INNER JOIN tvm1t AS t02 ON t01 ~mvgr1 = t02 ~mvgr1 AND t02 ~spras = '1'
INTO CORRESPONDING FIELDS OF TABLE lt_mvke
WHERE t01 ~matnr IN s_matnr .
* 库存数量
SELECT matnr "物料
werks "工厂
lgort "库存地点
labst "库存数
* SUM( labst ) AS labst"库存数累计
FROM mard
INTO CORRESPONDING FIELDS OF TABLE lt_mard
WHERE matnr IN s_matnr
AND werks IN s_werks .
* GROUP BY matnr werks.
* 本月需求数量
SELECT matnr "物料
werks "工厂
SUM ( plnmg ) AS plnmg "需求数量
FROM pbim AS t01
INNER JOIN pbed AS t02 ON t01 ~bdzei = t02 ~bdzei
INTO CORRESPONDING FIELDS OF TABLE lt_pbim
WHERE matnr IN s_matnr
AND werks IN s_werks
AND versb = '00'
* AND pdatu IN r_now
AND t01 ~loevr = ''
AND t02 ~loevr = ''
GROUP BY matnr werks .
* 销售数量
SELECT t01 ~vbeln "销售订单
t01 ~posnr "销售订单行
t01 ~matnr "物料
t01 ~werks "工厂
t01 ~zmeng "销售订单数量
t01 ~kwmeng "销售订单数量
t02 ~edatu AS erdat "计划交货日期
FROM vbap AS t01
INNER JOIN vbep AS t02 ON t01 ~vbeln = t02 ~vbeln AND t01 ~posnr = t02 ~posnr
INNER JOIN vbak AS t03 ON t01 ~vbeln = t03 ~vbeln
INTO CORRESPONDING FIELDS OF TABLE lt_vbap
WHERE t01 ~matnr IN s_matnr
AND t01 ~werks IN s_werks
* AND t02~edatu IN s_xqdat
AND t02 ~edatu IN r_erdat
AND t01 ~abgru = ''
AND t03 ~auart IN ( 'ZBOR' , 'ZBFR' ) .
* 已交货数量
IF lt_vbap[] IS NOT INITIAL .
SELECT t01 ~vbeln "交货单
t01 ~posnr "交货单行
t01 ~matnr "物料
t01 ~werks "工厂
t01 ~lfimg "交货数量
t01 ~vgbel "参考凭证
t01 ~vgpos "凭证行
FROM lips AS t01
INNER JOIN vbup AS t02 ON t01 ~vbeln = t02 ~vbeln AND t01 ~posnr = t02 ~posnr AND t02 ~wbsta = 'C'
INTO CORRESPONDING FIELDS OF TABLE lt_lips
FOR ALL ENTRIES IN lt_vbap
WHERE t01 ~vgbel = lt_vbap -vbeln
AND t01 ~vgpos = lt_vbap -posnr
AND t01 ~pstyv BETWEEN 'ZANN' AND 'ZTAN' .
ENDIF .
* 取保存数据
SELECT *
FROM zzt_pp_001
INTO TABLE lt_pp_01
WHERE matnr IN s_matnr
AND werks IN s_werks .
LOOP AT lt_vbap .
IF lt_vbap -zmeng IS INITIAL .
lt_vbap -zmeng = lt_vbap -kwmeng .
MODIFY lt_vbap .
ENDIF .
ENDLOOP .
LOOP AT gt_alv_itab .
* 读取品牌
READ TABLE lt_mvke WITH KEY matnr = gt_alv_itab -matnr .
IF sy -subrc = 0 .
gt_alv_itab -mvgr1 = lt_mvke -mvgr1 . "物料组1
gt_alv_itab -bezei = lt_mvke -bezei . "描述
ENDIF .
** 读取库存数量
* READ TABLE lt_mard WITH KEY matnr = gt_alv_itab-matnr
* werks = gt_alv_itab-werks.
* IF sy-subrc = 0.
* gt_alv_itab-labst = lt_mard-labst."库存数量
* ENDIF.
* 非限制数量
LOOP AT lt_mard WHERE matnr = gt_alv_itab -matnr
AND werks = gt_alv_itab -werks .
IF lt_mard -werks = '1000' .
CASE lt_mard -lgort .
WHEN '1001' OR '1004' OR '1007' OR '1010' OR '1012' OR '1014' OR '1015' .
WHEN OTHERS .
CONTINUE .
ENDCASE .
ELSEIF lt_mard -werks = '1010' .
CASE lt_mard -lgort .
WHEN '1001' OR '1004' OR '1005' OR '1010' OR '1012' OR '1015' .
WHEN OTHERS .
CONTINUE .
ENDCASE .
ELSEIF lt_mard -werks = '1020' .
CASE lt_mard -lgort .
WHEN '1001' OR '1004' OR '1007' OR '1010' OR '1012' OR '1015' .
WHEN OTHERS .
CONTINUE .
ENDCASE .
ELSEIF lt_mard -werks = '1030' .
CASE lt_mard -lgort .
WHEN '1001' OR '1004' OR '1005' OR '1007' OR '1010' OR '1015' .
WHEN OTHERS .
CONTINUE .
ENDCASE .
ENDIF .
ADD lt_mard -labst TO gt_alv_itab -labst .
ENDLOOP .
* 读取本月计划数量
READ TABLE lt_pbim WITH KEY matnr = gt_alv_itab -matnr
werks = gt_alv_itab -werks .
IF sy -subrc = 0 .
gt_alv_itab -plnmg = lt_pbim -plnmg . "计划数量
ENDIF .
* 读取保存数据
READ TABLE lt_pp_01 WITH KEY matnr = gt_alv_itab -matnr
werks = gt_alv_itab -werks .
IF sy -subrc = 0 .
gt_alv_itab -zqhyy = lt_pp_01 -zqhyy . "缺货原因
gt_alv_itab -zzrbm = lt_pp_01 -zzrbm . "责任部门
gt_alv_itab -zzrr = lt_pp_01 -zzrr . "责任人
gt_alv_itab -zsjwcrq = lt_pp_01 -zsjwcrq . "实际完成日期
gt_alv_itab -zsfsc = lt_pp_01 -zsfsc . "是否生产
gt_alv_itab -zznote = lt_pp_01 -zznote . "备注
ENDIF .
* 累计已发货数,抵扣销售需求数量
LOOP AT lt_lips WHERE matnr = gt_alv_itab -matnr
AND werks = gt_alv_itab -werks .
ADD lt_lips -lfimg TO gt_alv_itab -lfimg .
* 扣减销售数量
READ TABLE lt_vbap WITH KEY vbeln = lt_lips -vgbel
posnr = lt_lips -vgpos .
IF sy -subrc = 0 .
lt_vbap -zmeng = lt_vbap -zmeng - lt_lips -lfimg .
MODIFY lt_vbap INDEX sy -tabix .
ENDIF .
ENDLOOP .
DELETE lt_vbap WHERE zmeng = 0 . "删除完全交货的销售订单
SORT lt_vbap BY matnr werks erdat .
* 首个交货计划日期
READ TABLE lt_vbap WITH KEY matnr = gt_alv_itab -matnr
werks = gt_alv_itab -werks .
IF sy -subrc = 0 .
gt_alv_itab -zqhqsrq = lt_vbap -erdat .
ENDIF .
* 累计销售需求数量
LOOP AT lt_vbap WHERE matnr = gt_alv_itab -matnr
AND werks = gt_alv_itab -werks .
ADD lt_vbap -zmeng TO gt_alv_itab -zmeng .
ENDLOOP .
* 缺货数量(件) = 销售需求数量 - 库存数量
gt_alv_itab -zqhjs = gt_alv_itab -zmeng - gt_alv_itab -labst .
IF gt_alv_itab -zqhjs > 0 .
gt_alv_itab -zstatus_qh = icon_led_red .
ELSE .
gt_alv_itab -zstatus_qh = icon_led_green .
ENDIF .
CASE gt_alv_itab -zsfsc .
WHEN '是' .
gt_alv_itab -zstatus_sc = icon_led_green .
WHEN '否' .
gt_alv_itab -zstatus_sc = icon_led_red .
WHEN OTHERS .
gt_alv_itab -zsfsc = '其他' .
gt_alv_itab -zstatus_sc = icon_led_yellow .
ENDCASE .
* 缺货天数 = 实际完成时间 - 缺货起始日
IF gt_alv_itab -zqhqsrq IS NOT INITIAL
AND gt_alv_itab -zsjwcrq IS NOT INITIAL .
gt_alv_itab -zqhts = gt_alv_itab -zsjwcrq - gt_alv_itab -zqhqsrq .
ENDIF .
gt_alv_itab -type_dd_hndl = '1' .
*'MVGR1' '品牌'
MODIFY gt_alv_itab .
CLEAR gt_alv_itab .
ENDLOOP .
DELETE gt_alv_itab WHERE zqhqsrq NOT IN s_qhdat . "缺货起始日期
DELETE gt_alv_itab WHERE zsjwcrq NOT IN s_wcdat . "实际完成日期
DELETE gt_alv_itab WHERE mvgr1 NOT IN s_mvgr1 . "品牌
PERFORM FRM_ADD_FAHUO . "ADD BY PYM 20121019
SORT gt_alv_itab BY zstatus_sc .
ENDFORM . " FRM_GET_DATA
*&---------------------------------------------------------------------*
*& Form FRM_ADD_FAHUO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_ADD_FAHUO .
*本月发货
DATA : BEGIN OF L_T_MATNR OCCURS 0 ,
MATNR LIKE MAKT -MATNR ,
END OF L_T_MATNR .
DATA : BEGIN OF L_T_LIPS OCCURS 0 ,
VBELN LIKE LIPS -VBELN ,
POSNR LIKE LIPS -POSNR ,
VGBEL LIKE LIPS -VGBEL ,
VGPOS LIKE LIPS -VGPOS ,
PSTYV LIKE LIPS -PSTYV ,
MATNR LIKE LIPS -MATNR ,
WERKS LIKE LIPS -WERKS ,
LFIMG LIKE LIPS -LFIMG ,
END OF L_T_LIPS .
DATA : BEGIN OF L_T_LIKP OCCURS 0 ,
VBELN LIKE LIKP -VBELN ,
WADAT_IST LIKE LIKP -WADAT_IST ,
END OF L_T_LIKP .
DATA : BEGIN OF L_T_VBUP OCCURS 0 ,
VBELN LIKE VBUP -VBELN ,
POSNR LIKE VBUP -POSNR ,
LFSTA LIKE VBUP -LFSTA ,
END OF L_T_VBUP .
DATA : BEGIN OF L_T_LIPS1 OCCURS 0 ,
MATNR LIKE LIPS -MATNR ,
WERKS LIKE LIPS -WERKS ,
LFIMG LIKE LIPS -LFIMG ,
END OF L_T_LIPS1 .
DATA : BEGIN OF L_T_MKPF OCCURS 0 ,
MBLNR LIKE MKPF -MBLNR ,
MJAHR LIKE MKPF -MJAHR ,
VGART LIKE MKPF -VGART ,
BLART LIKE MKPF -BLART ,
BUDAT LIKE MKPF -BUDAT ,
END OF L_T_MKPF .
DATA : BEGIN OF L_T_MSEG OCCURS 0 ,
MBLNR LIKE MSEG -MBLNR ,
MJAHR LIKE MSEG -MJAHR ,
ZEILE LIKE MSEG -ZEILE ,
BWART LIKE MSEG -BWART ,
MATNR LIKE MSEG -MATNR ,
WERKS LIKE MSEG -WERKS ,
LGORT LIKE MSEG -LGORT ,
CHARG LIKE MSEG -CHARG ,
INSMK LIKE MSEG -INSMK ,
SHKZG LIKE MSEG -SHKZG ,
BWTAR LIKE MSEG -BWTAR ,
MENGE LIKE MSEG -MENGE ,
MEINS LIKE MSEG -MEINS ,
END OF L_T_MSEG .
DATA : BEGIN OF L_T_MSEG1 OCCURS 0 ,
MATNR LIKE MSEG -MATNR ,
WERKS LIKE MSEG -WERKS ,
MENGE LIKE MSEG -MENGE ,
END OF L_T_MSEG1 .
DATA L_T_FIRST_DAY TYPE D .
CONCATENATE P_BUDAT+0 ( 6 ) '01' INTO L_T_FIRST_DAY .
IF gt_alv_itab[] IS NOT INITIAL .
SELECT VBELN
POSNR
VGBEL
VGPOS
PSTYV
MATNR
WERKS
LFIMG
INTO CORRESPONDING FIELDS OF TABLE L_T_LIPS
FROM LIPS
FOR ALL ENTRIES IN gt_alv_itab
WHERE MATNR = gt_alv_itab -MATNR
AND WERKS = gt_alv_itab -WERKS
AND PSTYV IN ( 'ZTAN' , 'ZANN' ) .
ENDIF .
IF L_T_LIPS[] IS NOT INITIAL .
SELECT
VBELN
WADAT_IST
INTO CORRESPONDING FIELDS OF TABLE L_T_LIKP
FROM LIKP
FOR ALL ENTRIES IN L_T_LIPS
WHERE VBELN = L_T_LIPS -VBELN
AND WADAT_IST BETWEEN L_T_FIRST_DAY AND P_BUDAT .
SELECT
VBELN
POSNR
LFSTA
INTO CORRESPONDING FIELDS OF TABLE L_T_VBUP
FROM VBUP
FOR ALL ENTRIES IN L_T_LIPS
WHERE VBELN = L_T_LIPS -VGBEL
AND POSNR = L_T_LIPS -VGPOS
AND LFSTA = 'C' .
ENDIF .
SORT L_T_LIPS BY VBELN .
SORT L_T_LIKP BY VBELN .
LOOP AT L_T_LIPS .
READ TABLE L_T_LIKP WITH KEY VBELN = L_T_LIPS -VBELN BINARY SEARCH .
IF SY -SUBRC NE 0 .
DELETE L_T_LIPS .
ELSE .
READ TABLE L_T_VBUP WITH KEY VBELN = L_T_LIPS -VGBEL POSNR = L_T_LIPS -VGPOS .
IF SY -SUBRC NE 0 .
DELETE L_T_LIPS .
ENDIF .
ENDIF .
ENDLOOP .
LOOP AT L_T_LIPS .
L_T_LIPS1 -MATNR = L_T_LIPS -MATNR .
L_T_LIPS1 -WERKS = L_T_LIPS -WERKS .
L_T_LIPS1 -LFIMG = L_T_LIPS -LFIMG .
COLLECT L_T_LIPS1 .
ENDLOOP .
SORT L_T_LIPS1 BY MATNR WERKS .
*本月生产
select
MBLNR
MJAHR
VGART
BLART
BUDAT
INTO CORRESPONDING FIELDS OF TABLE L_T_MKPF
FROM MKPF
WHERE BUDAT BETWEEN L_T_FIRST_DAY AND P_BUDAT .
IF L_T_MKPF[] IS NOT INITIAL .
SELECT
MBLNR
MJAHR
ZEILE
BWART
MATNR
WERKS
LGORT
CHARG
INSMK
SHKZG
BWTAR
MENGE
MEINS
INTO CORRESPONDING FIELDS OF TABLE L_T_MSEG
FROM MSEG
FOR ALL ENTRIES IN L_T_MKPF
WHERE MBLNR = L_T_MKPF -MBLNR
AND MJAHR = L_T_MKPF -MJAHR
AND WERKS IN s_werks
AND BWART IN ( '101' , '102' ) .
ENDIF .
loop at L_T_MSEG .
READ TABLE gt_alv_itab WITH KEY matnr = L_T_MSEG -matnr werks = L_T_MSEG -werks .
if sy -subrc ne 0 .
delete l_t_mseg .
endif .
ENDLOOP .
LOOP AT L_T_MSEG .
L_T_MSEG1 -MATNR = L_T_MSEG -MATNR .
L_T_MSEG1 -WERKS = L_T_MSEG -WERKS .
IF L_T_MSEG -SHKZG = 'H' .
L_T_MSEG1 -MENGE = 0 - L_T_MSEG -MENGE .
ELSE .
L_T_MSEG1 -MENGE = L_T_MSEG -MENGE .
ENDIF .
COLLECT L_T_MSEG1 .
CLEAR L_T_MSEG1 .
ENDLOOP .
SORT L_T_MSEG1 BY MATNR WERKS .
LOOP AT gt_alv_itab .
READ TABLE L_T_MSEG1 WITH KEY MATNR = gt_alv_itab -MATNR WERKS = gt_alv_itab -WERKS .
IF SY -SUBRC = 0 .
gt_alv_itab -MENGE = L_T_MSEG1 -MENGE .
ENDIF .
READ TABLE L_T_LIPS1 WITH KEY MATNR = gt_alv_itab -MATNR WERKS = gt_alv_itab -WERKS .
IF SY -SUBRC = 0 .
gt_alv_itab -LFIMG1 = L_T_LIPS1 -LFIMG .
ENDIF .
MODIFY gt_alv_itab TRANSPORTING MENGE LFIMG1 .
ENDLOOP .
ENDFORM . " FRM_ADD_FAHUO
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA1
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_GET_DATA1 .
SELECT *
INTO CORRESPONDING FIELDS OF TABLE gt_alv_itab
FROM ZZT_PP_002
WHERE budat = P_BUDAT
AND matnr IN s_matnr
AND MVGR1 IN s_mvgr1
AND WERKS IN S_WERKS .
DATA : BEGIN OF l_t_TVM1T OCCURS 0 ,
SPRAS LIKE TVM1T -SPRAS , "语言代码
MVGR1 LIKE TVM1T -MVGR1 , "物料组1
BEZEI LIKE TVM1T -BEZEI , "描述
END OF l_t_TVM1T .
DATA : BEGIN OF l_t_MAKT OCCURS 0 ,
MATNR LIKE MAKT -MATNR , "物料号
SPRAS LIKE MAKT -SPRAS , "语言代码
MAKTX LIKE MAKT -MAKTX , "物料描述(短文本)
MAKTG LIKE MAKT -MAKTG , "有关匹配码的大写的物料描述
END OF l_t_MAKT .
DATA : BEGIN OF l_t_T001W OCCURS 0 ,
WERKS like T001W -WERKS , "工厂
NAME1 like T001W -NAME1 , "名称
END OF l_t_T001W .
select
SPRAS
MVGR1
BEZEI
INTO CORRESPONDING FIELDS OF TABLE l_t_TVM1T
FROM TVM1T
WHERE SPRAS = '1' .
SELECT
MATNR
SPRAS
MAKTX
MAKTG
INTO CORRESPONDING FIELDS OF TABLE l_t_MAKT
FROM makt
WHERE SPRAS = '1' .
SELECT
WERKS
NAME1
INTO CORRESPONDING FIELDS OF TABLE L_T_T001W
FROM T001W
.
LOOP AT gt_alv_itab .
CASE gt_alv_itab -zsfsc .
WHEN '是' .
gt_alv_itab -zstatus_sc = icon_led_green .
WHEN '否' .
gt_alv_itab -zstatus_sc = icon_led_red .
WHEN '其他' .
gt_alv_itab -zstatus_sc = icon_led_yellow .
WHEN OTHERS .
ENDCASE .
IF gt_alv_itab -zqhjs > 0 .
gt_alv_itab -zstatus_qh = icon_led_red .
ELSE .
gt_alv_itab -zstatus_qh = icon_led_green .
ENDIF .
* READ TABLE l_t_TVM1T WITH KEY MVGR1 = gt_alv_itab-mvgr1 .
* if sy-subrc = 0.
* gt_alv_itab-bezei = l_t_TVM1T-bezei.
* endif.
READ TABLE l_t_TVM1T WITH KEY MVGR1 = gt_alv_itab -mvgr1 .
if sy -subrc = 0 .
gt_alv_itab -bezei = l_t_TVM1T -bezei .
endif .
READ TABLE l_t_MAKT WITH KEY MATNR = gt_alv_itab -MATNR .
if sy -subrc = 0 .
gt_alv_itab -MAKTX = l_t_MAKT -MAKTX .
endif .
READ TABLE L_T_T001W WITH KEY WERKS = gt_alv_itab -WERKS .
if sy -subrc = 0 .
gt_alv_itab -NAME1 = L_T_T001W -NAME1 .
endif .
MODIFY gt_alv_itab TRANSPORTING zstatus_sc zstatus_qh bezei MAKTX NAME1 .
CLEAR gt_alv_itab .
ENDLOOP .
SORT gt_alv_itab BY zstatus_sc .
ENDFORM . " FRM_GET_DATA1
*&---------------------------------------------------------------------*
*& Form PF_SAVE_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM PF_SAVE_DATA .
*5日内生产数
DATA : BEGIN OF L_T_MKPF_1 OCCURS 0 ,
MBLNR LIKE MKPF -MBLNR ,
MJAHR LIKE MKPF -MJAHR ,
VGART LIKE MKPF -VGART ,
BLART LIKE MKPF -BLART ,
BUDAT LIKE MKPF -BUDAT ,
END OF L_T_MKPF_1 .
DATA : BEGIN OF L_T_MSEG_1 OCCURS 0 ,
MBLNR LIKE MSEG -MBLNR ,
MJAHR LIKE MSEG -MJAHR ,
ZEILE LIKE MSEG -ZEILE ,
BWART LIKE MSEG -BWART ,
MATNR LIKE MSEG -MATNR ,
WERKS LIKE MSEG -WERKS ,
LGORT LIKE MSEG -LGORT ,
CHARG LIKE MSEG -CHARG ,
INSMK LIKE MSEG -INSMK ,
SHKZG LIKE MSEG -SHKZG ,
BWTAR LIKE MSEG -BWTAR ,
MENGE LIKE MSEG -MENGE ,
MEINS LIKE MSEG -MEINS ,
END OF L_T_MSEG_1 .
DATA : BEGIN OF L_T_MSEG1_1 OCCURS 0 ,
MATNR LIKE MSEG -MATNR ,
WERKS LIKE MSEG -WERKS ,
MENGE LIKE MSEG -MENGE ,
END OF L_T_MSEG1_1 .
DATA L_V_FIVE_DAY TYPE D .
*P_BUDAT
L_V_FIVE_DAY = P_BUDAT - 5 + 1 .
select
MBLNR
MJAHR
VGART
BLART
BUDAT
INTO CORRESPONDING FIELDS OF TABLE L_T_MKPF_1
FROM MKPF
WHERE BUDAT BETWEEN L_V_FIVE_DAY AND P_BUDAT .
IF L_T_MKPF_1[] IS NOT INITIAL .
SELECT
MBLNR
MJAHR
ZEILE
BWART
MATNR
WERKS
LGORT
CHARG
INSMK
SHKZG
BWTAR
MENGE
MEINS
INTO CORRESPONDING FIELDS OF TABLE L_T_MSEG_1
FROM MSEG
FOR ALL ENTRIES IN L_T_MKPF_1
WHERE MBLNR = L_T_MKPF_1 -MBLNR
AND MJAHR = L_T_MKPF_1 -MJAHR
AND WERKS IN s_werks
AND BWART IN ( '101' , '102' ) .
ENDIF .
LOOP AT L_T_MSEG_1 .
L_T_MSEG1_1 -MATNR = L_T_MSEG_1 -MATNR .
L_T_MSEG1_1 -WERKS = L_T_MSEG_1 -WERKS .
IF L_T_MSEG_1 -SHKZG = 'H' .
L_T_MSEG1_1 -MENGE = 0 - L_T_MSEG_1 -MENGE .
ELSE .
L_T_MSEG1_1 -MENGE = L_T_MSEG_1 -MENGE .
ENDIF .
COLLECT L_T_MSEG1_1 .
CLEAR L_T_MSEG1_1 .
ENDLOOP .
SORT L_T_MSEG1_1 BY MATNR WERKS .
*5日前缺货数
L_V_FIVE_DAY = L_V_FIVE_DAY - 1 .
DATA L_T_PP002 LIKE TABLE OF ZZT_PP_002 WITH HEADER LINE .
SELECT * INTO CORRESPONDING FIELDS OF TABLE L_T_PP002
FROM ZZT_PP_002 WHERE
budat = L_V_FIVE_DAY
AND matnr IN s_matnr
AND MVGR1 IN s_mvgr1
AND WERKS IN S_WERKS .
DATA WT_TEMP LIKE TABLE OF ZZT_PP_002 WITH HEADER LINE .
loop at gt_alv_itab .
MOVE-CORRESPONDING gt_alv_itab to WT_TEMP .
WT_TEMP -budat = sy -datum .
READ TABLE L_T_MSEG1_1 WITH KEY MATNR = WT_TEMP -MATNR WERKS = WT_TEMP -WERKS .
IF SY -SUBRC = 0 .
WT_TEMP -MENGE1 = L_T_MSEG1_1 -MENGE . "5日内生产数
ENDIF .
READ TABLE L_T_PP002 WITH KEY WERKS = WT_TEMP -WERKS MATNR = WT_TEMP -MATNR .
IF SY -SUBRC = 0 .
WT_TEMP -MENGE2 = L_T_PP002 -zqhjs . "5日前缺货数
ENDIF .
WT_TEMP -UZEIT = SY -UZEIT .
append WT_TEMP .
clear WT_TEMP .
ENDLOOP .
DATA : TIME1 TYPE P , TIME2 TYPE P .
GET RUN TIME FIELD TIME1 .
MODIFY ZZT_PP_002 FROM TABLE WT_TEMP .
IF sy -subrc = 0 .
COMMIT WORK AND WAIT .
GET RUN TIME FIELD TIME2 .
TIME1 = TIME2 - TIME1 .
WRITE : / 'SUCESS' COLOR COL_HEADING .
WRITE : / TIME1 .
ULINE .
ELSE .
ROLLBACK WORK .
FORMAT COLOR COL_KEY .
WRITE : / 'sy-subrc = ' , SY -SUBRC .
ENDIF .
ENDFORM . " PF_SAVE_DATA
*&---------------------------------------------------------------------*
*& Form FRM_ADDED
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_ADDED .
DATA WT_TEMP LIKE ZZT_FI_005 .
WT_TEMP -DATUM = SY -DATUM .
WT_TEMP -UZEIT = SY -UZEIT .
WT_TEMP -UNAME = SY -UNAME .
WT_TEMP -TCODE = SY -TCODE .
WT_TEMP -CPROG = SY -CPROG .
WT_TEMP -BATCH = SY -BATCH .
WT_TEMP -CALLD = SY -CALLD .
CONCATENATE 'werks:' s_werks -LOW ',' s_werks -HIGH ';mvgr1:' s_mvgr1 -LOW ',' s_mvgr1 -HIGH
';matnr:' s_matnr -LOW ',' s_matnr -HIGH ';BUDAT:' P_BUDAT INTO WT_TEMP - TITLE .
MODIFY ZZT_FI_005 FROM WT_TEMP .
IF SY -SUBRC = 0 .
* IF sy-subrc <> 0.
* ROLLBACK WORK.
* ELSE.
COMMIT WORK .
ENDIF .
ENDFORM . " FRM_ADDED
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY_ALV
*&---------------------------------------------------------------------*
* 显示ALV
*----------------------------------------------------------------------*
FORM frm_display_alv .
IF wcl_container IS INITIAL .
PERFORM frm_create_container .
PERFORM frm_exclude .
PERFORM frm_variant USING '1' CHANGING gs_variant .
PERFORM frm_pre_layout .
PERFORM frm_pre_fieldcat .
PERFORM frm_prepare_drilldown_values .
PERFORM frm_upload_event .
PERFORM frm_set_tab_display .
ELSE .
PERFORM frm_refresh_alv .
ENDIF .
ENDFORM . " FRM_DISPLAY_ALV
*&---------------------------------------------------------------------*
*& Form frm_create_container
*&---------------------------------------------------------------------*
* 创建ALV容器,并将类添加到容器
*----------------------------------------------------------------------*
FORM frm_create_container .
CREATE OBJECT wcl_container
EXPORTING
repid = sy -repid
dynnr = sy -dynnr
ratio = 95
side = cl_gui_docking_container =>dock_at_top .
CREATE OBJECT wcl_alv
EXPORTING
i_parent = wcl_container .
ENDFORM . " frm_create_container
*&---------------------------------------------------------------------*
*& Form FRM_EXCLUDE
*&---------------------------------------------------------------------*
* 排除按钮
*----------------------------------------------------------------------*
FORM frm_exclude .
DATA ls_exclude TYPE ui_func .
*排除打印按钮
ls_exclude = cl_gui_alv_grid =>mc_fc_print .
APPEND ls_exclude TO gt_exclude .
*排除添加、删除、插入、复制按钮
ls_exclude = cl_gui_alv_grid =>mc_fc_loc_append_row .
APPEND ls_exclude TO gt_exclude .
ls_exclude = cl_gui_alv_grid =>mc_fc_loc_copy_row .
APPEND ls_exclude TO gt_exclude .
ls_exclude = cl_gui_alv_grid =>mc_fc_loc_copy .
APPEND ls_exclude TO gt_exclude .
ls_exclude = cl_gui_alv_grid =>mc_fc_loc_cut .
APPEND ls_exclude TO gt_exclude .
ls_exclude = cl_gui_alv_grid =>mc_fc_loc_delete_row .
APPEND ls_exclude TO gt_exclude .
ls_exclude = cl_gui_alv_grid =>mc_fc_loc_insert_row .
APPEND ls_exclude TO gt_exclude .
ls_exclude = cl_gui_alv_grid =>mc_fc_loc_move_row .
APPEND ls_exclude TO gt_exclude .
ls_exclude = cl_gui_alv_grid =>mc_fc_loc_paste .
APPEND ls_exclude TO gt_exclude .
ls_exclude = cl_gui_alv_grid =>mc_fc_loc_paste_new_row .
APPEND ls_exclude TO gt_exclude .
ls_exclude = cl_gui_alv_grid =>mc_fc_loc_undo .
APPEND ls_exclude TO gt_exclude .
ENDFORM . " FRM_EXCLUDE
*&---------------------------------------------------------------------*
*& Form FRM_VARIANT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->PS_VARIANT text
*----------------------------------------------------------------------*
FORM frm_variant USING mode CHANGING ps_variant TYPE disvariant .
ps_variant - report = sy -repid . "ABAP 程序名称
ps_variant -handle = mode . "从相同程序重复调用管理标识
ps_variant -log_group = '' . "逻辑组名
ps_variant -username = sy -uname . "特定用户存储的用户名称
ps_variant -variant = '' . "格式
ps_variant - text = '' . "布局的描述
ps_variant -dependvars = '' . "相关变式条目向量
ENDFORM . " FRM_VARIANT
*&---------------------------------------------------------------------*
*& Form frm_pre_layout
*&---------------------------------------------------------------------*
* 设置ALV样式
*----------------------------------------------------------------------*
FORM frm_pre_layout .
gs_layout -zebra = 'X' .
gs_layout -sel_mode = 'A' .
* gs_layout-cwidth_opt = 'X'.
gs_layout -info_fname = 'ROWCOLOR' .
gs_layout -stylefname = 'CELLSTYLES' .
ENDFORM . " frm_pre_layout
*&---------------------------------------------------------------------*
*& Form frm_pre_fieldcat
*&---------------------------------------------------------------------*
* 设置字段目录属性
*----------------------------------------------------------------------*
FORM frm_pre_fieldcat .
PERFORM frm_fieldcat USING :
'ZSTATUS_SC' '是否生产' 'X' space space space space space 10 space ,
'ZSTATUS_QH' '是否缺货' 'X' space space space space space 10 space ,
'ZQHQSRQ' '缺货起始日期' space space space space space space 12 space ,
*'MVGR1' '品牌' space space space space space space 12 space,
'BEZEI' '品牌' space space space space space space 12 space ,
'MATNR' '产品编码' space space space space space space 10 space ,
'MAKTX' '产品名称、规格' space space space space space space 20 space ,
'PLNMG' '本月计划数' space space space space space space 12 space ,
'ZMENG' '销售需求量' space space space space space space 12 space ,
'LABST' '库存数量' space space space space space space 10 space ,
'ZQHJS' '缺货数量(件)' space space space space space space 14 space ,
'ZQHYY' '缺货原因' space 'X' space space space space 50 space ,
'WERKS' '工厂编码' space space space space space space 10 space ,
'NAME1' '工厂描述' space space space space space space 20 space ,
'ZZRBM' '责任部门' space 'X' space space space space 10 space ,
'ZZRR' '责任人' space 'X' space space space space 10 space ,
'ZSJWCRQ' '预计排产时间' space 'X' space space space space 14 space , "实际完成时间:改为预计排产时间
'ZQHTS' '缺货天数' space space space space space space 10 space ,
'LFIMG' '已发货数' space space space space space space 10 space ,
'MENGE' '当月已生产数量' space space space space space space 10 space ,
'LFIMG1' '当月已发货数量' space space space space space space 10 space ,
'ZSFSC' '是否生产' space 'X' space space space space 10 'TYPE_DD_HNDL' ,
'ZZNOTE' '计划下单时间' space 'X' space space space space 50 space . "备注改为: 计划下单时间
ENDFORM . " frm_pre_fieldcat
*&---------------------------------------------------------------------*
*& Form frm_fieldcat
*&---------------------------------------------------------------------*
* 设置字段目录
*----------------------------------------------------------------------*
FORM frm_fieldcat USING p_field p_text p_icon p_edit p_f4 p_ref_tab p_ref_fld p_checkbox p_outputlen p_drdn_field .
DATA lw_fcat TYPE lvc_s_fcat .
lw_fcat -fieldname = p_field .
lw_fcat -coltext = p_text .
lw_fcat - icon = p_icon .
lw_fcat - edit = p_edit .
lw_fcat -f4availabl = p_f4 .
lw_fcat -ref_table = p_ref_tab .
lw_fcat -ref_field = p_ref_fld .
lw_fcat -checktable = p_ref_tab .
lw_fcat - checkbox = p_checkbox .
lw_fcat -outputlen = p_outputlen .
lw_fcat -drdn_field = p_drdn_field .
lw_fcat -no_zero = 'X' .
lw_fcat -do_sum = 'X' .
APPEND lw_fcat TO gt_fieldcat .
ENDFORM . " frm_fieldcat
*&---------------------------------------------------------------------*
*& Form frm_prepare_drilldown_values
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM frm_prepare_drilldown_values .
DATA lt_ddval TYPE lvc_t_drop .
DATA ls_ddval TYPE lvc_s_drop .
ls_ddval -handle = '1' .
ls_ddval - value = '是' .
APPEND ls_ddval TO lt_ddval .
ls_ddval -handle = '1' .
ls_ddval - value = '否' .
APPEND ls_ddval TO lt_ddval .
ls_ddval -handle = '1' .
ls_ddval - value = '其他' .
APPEND ls_ddval TO lt_ddval .
CALL METHOD wcl_alv ->set_drop_down_table
EXPORTING
it_drop_down = lt_ddval .
ENDFORM . " frm_prepare_drilldown_values
*&---------------------------------------------------------------------*
*& Form frm_upload_event
*&---------------------------------------------------------------------*
* 注册事件
*----------------------------------------------------------------------*
FORM frm_upload_event .
DATA lr_event_handler TYPE REF TO lcl_event_handler .
CREATE OBJECT lr_event_handler .
SET HANDLER lr_event_handler ->handle_toolbar FOR wcl_alv .
SET HANDLER lr_event_handler ->handle_user_command FOR wcl_alv .
CALL METHOD wcl_alv ->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid =>mc_evt_modified
EXCEPTIONS
error = 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 .
SET HANDLER lr_event_handler ->handle_data_changed FOR wcl_alv .
SET HANDLER lr_event_handler ->handle_data_changed_finished FOR
wcl_alv .
ENDFORM . " frm_upload_event
*&---------------------------------------------------------------------*
*& Form frm_set_tab_display
*&---------------------------------------------------------------------*
* 显示ALV
*----------------------------------------------------------------------*
FORM frm_set_tab_display .
CALL METHOD wcl_alv ->set_table_for_first_display
EXPORTING
* I_BUFFER_ACTIVE =
* I_BYPASSING_BUFFER =
* I_CONSISTENCY_CHECK =
* I_STRUCTURE_NAME =
is_variant = gs_variant
i_save = 'A'
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_alv_itab[]
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 .
ENDFORM . " frm_set_tab_display
*&---------------------------------------------------------------------*
*& Form frm_refresh_alv
*&---------------------------------------------------------------------*
* 刷新ALV
*----------------------------------------------------------------------*
FORM frm_refresh_alv .
*刷新稳定性
DATA : lw_stbl TYPE lvc_s_stbl .
lw_stbl -row = 'X' .
lw_stbl -col = 'X' .
CALL METHOD wcl_alv ->refresh_table_display
EXPORTING
is_stable = lw_stbl
* 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 .
ENDFORM . " frm_refresh_alv
*&---------------------------------------------------------------------*
*& Form frm_save_data
*&---------------------------------------------------------------------*
* 保存数据
*----------------------------------------------------------------------*
FORM frm_save_data USING p_title p_text CHANGING p_answer .
DATA :
lt_pp_01 TYPE TABLE OF zzt_pp_001 WITH HEADER LINE .
DATA :
lt_row TYPE lvc_t_row ,
lt_row2 TYPE lvc_t_roid .
CALL METHOD wcl_alv ->get_selected_rows
IMPORTING
et_index_rows = lt_row
et_row_no = lt_row2 .
PERFORM frm_check_changed_data USING wcl_alv .
LOOP AT gt_alv_itab .
MOVE-CORRESPONDING gt_alv_itab TO lt_pp_01 .
APPEND lt_pp_01 .
CLEAR lt_pp_01 .
ENDLOOP .
IF g_ischange = 'X' .
IF p_title IS INITIAL OR p_text IS INITIAL .
p_answer = '1' .
ELSE .
PERFORM frm_confirm USING p_title p_text CHANGING p_answer .
ENDIF .
IF p_answer = '1' .
MODIFY (g_tabnm ) FROM TABLE lt_pp_01 .
CLEAR g_ischange .
ENDIF .
ENDIF .
ENDFORM . " frm_save_data
*&---------------------------------------------------------------------*
*& Form FRM_CHECK_CHANGED_DATA
*&---------------------------------------------------------------------*
* 获取改变数据
*----------------------------------------------------------------------*
FORM frm_check_changed_data USING pcl_alv TYPE REF TO cl_gui_alv_grid .
DATA :
l_valid .
CALL METHOD pcl_alv ->check_changed_data
IMPORTING
e_valid = l_valid .
ENDFORM . "FRM_CHECK_CHANGED_DATA
*&---------------------------------------------------------------------*
*& Form frm_confirm
*&---------------------------------------------------------------------*
* 确认对话框
*----------------------------------------------------------------------*
FORM frm_confirm USING p_title p_text CHANGING p_answer .
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
titlebar = p_title
text_question = p_text
IMPORTING
answer = p_answer . "1、 2、 A
ENDFORM . " frm_confirm
*&---------------------------------------------------------------------*
*& Form handle_toolbar
*&---------------------------------------------------------------------*
* 自定义按钮
*----------------------------------------------------------------------*
* -->P_E_OBJECT text
* -->P_E_INTERACTIVE text
*----------------------------------------------------------------------*
FORM handle_toolbar USING
p_e_object TYPE REF TO cl_alv_event_toolbar_set
p_e_interactive .
ENDFORM . " handle_toolbar
*&---------------------------------------------------------------------*
*& Form handle_user_command
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_E_UCOMM text
*----------------------------------------------------------------------*
FORM handle_user_command USING p_e_ucomm .
ENDFORM . " handle_user_command
*&---------------------------------------------------------------------*
*& Form handle_data_changed
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_ER_DATA_CHANGED text
* -->P_E_ONF4 text
* -->P_E_ONF4_BEFORE text
* -->P_E_ONF4_AFTER text
* -->P_E_UCOMM text
*----------------------------------------------------------------------*
FORM handle_data_changed USING
p_er_data_changed TYPE REF TO cl_alv_changed_data_protocol
p_e_onf4
p_e_onf4_before
p_e_onf4_after
p_e_ucomm TYPE sy -ucomm .
g_ischange = 'X' .
ENDFORM . " handle_data_changed
*&---------------------------------------------------------------------*
*& Form handle_data_changed_finished
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_E_MODIFIED text
* -->P_ET_GOOD_CELLS text
*----------------------------------------------------------------------*
FORM handle_data_changed_finished USING p_e_modified
p_et_good_cells TYPE lvc_t_modi .
DATA :ls_good_cells TYPE lvc_s_modi .
LOOP AT p_et_good_cells INTO ls_good_cells WHERE fieldname = 'ZSFSC' .
READ TABLE gt_alv_itab INDEX ls_good_cells -row_id .
IF sy -subrc = 0 .
CASE ls_good_cells - value .
WHEN '是' .
gt_alv_itab -zstatus_sc = icon_led_green .
WHEN '否' .
gt_alv_itab -zstatus_sc = icon_led_red .
WHEN '其他' .
gt_alv_itab -zstatus_sc = icon_led_yellow .
ENDCASE .
ENDIF .
MODIFY gt_alv_itab INDEX ls_good_cells -row_id .
ENDLOOP .
PERFORM frm_refresh_alv .
ENDFORM . " handle_data_changed_finished
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY_ALV1
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_DISPLAY_ALV1 .
IF wcl_container IS INITIAL .
PERFORM frm_create_container .
PERFORM frm_exclude .
PERFORM frm_variant USING '1' CHANGING gs_variant .
PERFORM frm_pre_layout .
PERFORM frm_pre_fieldcat1 .
PERFORM frm_prepare_drilldown_values .
PERFORM frm_upload_event .
PERFORM frm_set_tab_display .
ELSE .
PERFORM frm_refresh_alv .
ENDIF .
ENDFORM . " FRM_DISPLAY_ALV1
*&---------------------------------------------------------------------*
*& Form FRM_PRE_FIELDCAT1
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_PRE_FIELDCAT1 .
PERFORM frm_fieldcat USING :
'ZSTATUS_SC' '是否生产' space space space space space space 10 space ,
'ZSTATUS_QH' '是否缺货' space space space space space space 10 space ,
'ZQHQSRQ' '缺货起始日期' space space space space space space 12 space ,
*'MVGR1' '品牌' space space space space space space 12 space,
'BEZEI' '品牌' space space space space space space 12 space ,
'MATNR' '产品编码' space space space space space space 10 space ,
'MAKTX' '产品名称、规格' space space space space space space 20 space ,
'PLNMG' '本月计划数' space space space space space space 12 space ,
'ZMENG' '销售需求量' space space space space space space 12 space ,
'LABST' '库存数量' space space space space space space 10 space ,
'ZQHJS' '缺货数量(件)' space space space space space space 14 space ,
'ZQHYY' '缺货原因' space space space space space space 50 space ,
'WERKS' '工厂编码' space space space space space space 10 space ,
'NAME1' '工厂描述' space space space space space space 20 space ,
'ZZRBM' '责任部门' space space space space space space 10 space ,
'ZZRR' '责任人' space space space space space space 10 space ,
'ZSJWCRQ' '预计排产时间' space space space space space space 14 space , "实际完成时间:改为预计排产时间
'ZQHTS' '缺货天数' space space space space space space 10 space ,
'LFIMG' '已发货数' space space space space space space 10 space ,
'MENGE' '当月已生产数量' space space space space space space 10 space ,
'LFIMG1' '当月已发货数量' space space space space space space 10 space ,
'ZSFSC' '是否生产' space space space space space space 10 'TYPE_DD_HNDL' ,
'ZZNOTE' '计划下单时间' space space space space space space 50 space . "备注改为: 计划下单时间
ENDFORM . " FRM_PRE_FIELDCAT1