原版日报表

委屈REPORT  ZPP0017  MESSAGE-ID zpp - 001 .

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(30TYPE 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  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  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  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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值