原版日报表

来源:互联网 发布:google在线翻译软件 编辑:程序博客网 时间:2024/04/28 06:04
委屈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(zcommWITH 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 "工厂
              SUMplnmg )  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.

  DATATIME1 TYPE PTIME2 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 .
*刷新稳定性
  DATAlw_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_tabnmFROM 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
原创粉丝点击