SAP 程序介绍-本人曾写的一个报表程序(ABAP/4语言-R/3专用语言)

SAP 程序介绍-本人曾写的一个报表程序(ABAP/4语言-R/3专用语言)

*&---------------------------------------------------------------------*
*& Report  ZMD04_XX                                                    *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*&                                                                     *
*&---------------------------------------------------------------------*

INCLUDE zmd04_XX_top.
INCLUDE zmd04_XX_sel.

START-OF-SELECTION.
  IF sel03 = 'X'.
*取数据(需求日期)
    PERFORM get_data_by_date.
  ELSE.
*取数据(其他方式)
    PERFORM get_data_by_others.
  ENDIF.
*通过MRP运算得到符合条件的数据(类似TCODE:MD04的处理方式)
  PERFORM get_data_from_mrp_calc.
*整理itab.1.将检验批纳入可用数量;2.按可用日期排序
  PERFORM data_process_step_one.
  IF NOT s_lgort IS INITIAL.
*扣减排除条件库存数据(按MRP范围计算,不考虑后台已排除与MRP相关的
*库存地的扣减,以便与MD04考虑方式一致!)
    PERFORM del_speme_from_stock.
  ENDIF.
*DATA_OUTPUT_TO_ALV
  PERFORM ouput_to_alv.
*&--------------------------------------------------------------------*
*&      Form  data_output
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
FORM data_output.
  DATA:pos TYPE i VALUE 1.

  CLEAR wa_fields.
  wa_fields-fieldname = 'MATNR'.
  wa_fields-seltext_l = '物料代码'.
  wa_fields-outputlen = '14'.
  wa_fields-key       = 'X'.
  wa_fields-col_pos  = pos.
  APPEND wa_fields TO alv_fields.
  pos = pos + 1.
  CLEAR wa_fields.

  wa_fields-fieldname = 'MAKTX'.
  wa_fields-seltext_l = '物料描述'.
  wa_fields-outputlen = 18.
  wa_fields-col_pos  = pos.
  APPEND wa_fields TO alv_fields.
  pos = pos + 1.
  CLEAR wa_fields.

  wa_fields-fieldname = 'DELB0'.
  wa_fields-seltext_l = 'MRP元素'.
  wa_fields-outputlen = 8.
  wa_fields-col_pos  = pos.
  APPEND wa_fields TO alv_fields.
  pos = pos + 1.
  CLEAR wa_fields.

  wa_fields-fieldname = 'DAT00'.
  wa_fields-seltext_l = '可用日期'.
  wa_fields-outputlen = 8.
  wa_fields-col_pos  = pos.
  APPEND wa_fields TO alv_fields.
  pos = pos + 1.
  CLEAR wa_fields.

  wa_fields-fieldname = 'DAT01'.
  wa_fields-seltext_l = '收货日期'.
  wa_fields-outputlen = 8.
  wa_fields-col_pos  = pos.
  APPEND wa_fields TO alv_fields.
  pos = pos + 1.
  CLEAR wa_fields.

  wa_fields-fieldname = 'EXTRA'.
  wa_fields-seltext_l = 'MRP元素数据'.
  wa_fields-outputlen = 15.
  wa_fields-col_pos  = pos.
  APPEND wa_fields TO alv_fields.
  pos = pos + 1.
  CLEAR wa_fields.

  wa_fields-fieldname = 'MNG01'.
  wa_fields-seltext_l = '收货/需求数量'.
  wa_fields-outputlen = 11.
  wa_fields-col_pos  = pos.
  APPEND wa_fields TO alv_fields.
  pos = pos + 1.
  CLEAR wa_fields.

  wa_fields-fieldname = 'MNG02'.
  wa_fields-seltext_l = '可用量'.
  wa_fields-outputlen = 11.
  wa_fields-col_pos  = pos.
  APPEND wa_fields TO alv_fields.
  pos = pos + 1.
  CLEAR wa_fields.

  wa_fields-fieldname = 'SPEME'.
  wa_fields-seltext_l = '冻结库存量'.
  wa_fields-outputlen = 11.
  wa_fields-col_pos  = pos.
  APPEND wa_fields TO alv_fields.
  pos = pos + 1.
  CLEAR wa_fields.

  wa_fields-fieldname = 'LGORT'.
  wa_fields-seltext_l = '库存'.
  wa_fields-outputlen = 4.
  wa_fields-col_pos  = pos.
  APPEND wa_fields TO alv_fields.
  pos = pos + 1.
  CLEAR wa_fields.

  wa_fields-fieldname = 'AUSKT'.
  wa_fields-seltext_l = '例外'.
  wa_fields-outputlen = 3.
  wa_fields-col_pos  = pos.
  APPEND wa_fields TO alv_fields.
  pos = pos + 1.
  CLEAR wa_fields.

  wa_fields-fieldname = 'DELNR'.
  wa_fields-seltext_l = 'MRP元素号'.
  wa_fields-outputlen = 10.
  wa_fields-col_pos  = pos.
  APPEND wa_fields TO alv_fields.
  pos = pos + 1.
  CLEAR wa_fields.

  wa_fields-fieldname = 'DELPS'.
  wa_fields-seltext_l = 'MRP元素项'.
  wa_fields-outputlen = 9.
  wa_fields-col_pos  = pos.
  APPEND wa_fields TO alv_fields.
  pos = pos + 1.
  CLEAR wa_fields.


  wa_fields-fieldname = 'BERID'.
  wa_fields-seltext_l = 'MRP范围'.
  wa_fields-outputlen = 7.
  wa_fields-col_pos  = pos.
  APPEND wa_fields TO alv_fields.
  pos = pos + 1.
  CLEAR wa_fields.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program = sy-repid
      i_grid_title       = alv_title
      i_save             = 'X'
      it_fieldcat        = alv_fields
    TABLES
      t_outtab           = itab     "输出内表
    EXCEPTIONS
      program_error      = 1
      OTHERS             = 2.

ENDFORM.                    "data_output
*&---------------------------------------------------------------------*
*&      Form  get_data_from_mrp_calc
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_data_from_mrp_calc .
  LOOP AT it00.
    ON CHANGE OF it00-matnr OR it00-berid.
      CALL FUNCTION 'MD_STOCK_REQUIREMENTS_LIST_API'
        EXPORTING
          matnr   = it00-matnr
          werks   = it00-werks
          berid   = it00-berid
        IMPORTING
          e_mt61d = imt61d
          e_mdkp  = imdkp
          e_cm61m = icm61m
          e_mdsta = imdsta
        TABLES
          mdpsx   = imdps
          mdezx   = imdez
          mdsux   = imdsu.
      IF sy-subrc EQ 0.
        MOVE-CORRESPONDING imt61d TO itab.
        IF itab-dispo IN s_dispo.
          LOOP AT imdez.
            MOVE-CORRESPONDING imdez TO itab.
            READ TABLE imdps INDEX sy-tabix.
            IF sy-subrc EQ 0 AND imdez-delkz = 'AR'.
              itab-delnr = imdps-delnr.
              itab-delps = imdps-delps.
            ENDIF.
            APPEND itab.
          ENDLOOP.
        ENDIF.
        CLEAR imt61d.
        CLEAR itab.
      ENDIF.
    ENDON.
  ENDLOOP.

ENDFORM.                                                    " get_data_from_mrp_calc
*&---------------------------------------------------------------------*
*&      Form  IT00lgt
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM del_speme_from_stock .
  LOOP AT itab.
    num = sy-tabix.
    ON CHANGE OF itab-matnr OR itab-berid.
      PERFORM mrp_area USING itab-matnr
                             itab-werks
                             itab-berid.

      LOOP AT ilgort WHERE  berid = itab-berid AND lgort IN s_lgort.
        SELECT SINGLE * FROM t001l WHERE werks = ilgort-werks
                                     AND lgort = ilgort-lgort
                                     AND diskz NE ''.
        IF sy-subrc NE 0.
          itab-mng02 = itab-mng02 - ilgort-labst - ilgort-insme.
        ENDIF.
      ENDLOOP.
      MODIFY itab INDEX num TRANSPORTING mng02.
      CLEAR:ilgort,ilgort[].
    ENDON.
  ENDLOOP.
ENDFORM.                          " del_speme_from_stock


*&---------------------------------------------------------------------*
*&      Form  data_process_step_one
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM data_process_step_one .
*
  DATA: BEGIN OF x_line OCCURS 0,
     lines LIKE sy-tabix,
     mngxx LIKE itab-mng01,
  END OF x_line.
*
  LOOP AT itab.
    num = sy-tabix.
    IF  itab-plumi = 'B'.
      IF NOT x_line IS INITIAL AND x_line-mngxx NE 0.
        APPEND x_line.
        CLEAR x_line.
      ENDIF.
      x_line-lines = num.
    ENDIF.
    IF itab-delkz = 'QM'.
      x_line-mngxx = x_line-mngxx + itab-mng01.
    ENDIF.
*一个物料计算结束清空中间结果
    AT END OF matnr.
      IF NOT x_line IS INITIAL AND x_line-mngxx NE 0.
        APPEND x_line.
        CLEAR:x_line.
      ENDIF.
    ENDAT.
    CLEAR:itab.
  ENDLOOP.

  LOOP AT x_line.
    READ TABLE itab INDEX x_line-lines.
    IF sy-subrc EQ 0.
      itab-mng02 = itab-mng02 + x_line-mngxx.
      itab-mng01 = itab-mng02.
      MODIFY itab INDEX x_line-lines TRANSPORTING mng01 mng02.
    ENDIF.
  ENDLOOP.
*按收货日期排序
  SORT itab BY matnr berid plaab planr dat01.
*重新计算MNG02
  DATA x_mng02 LIKE itab-mng02.
  DATA: num LIKE sy-tabix.
  LOOP AT itab.
    num = sy-tabix.
    IF itab-plumi NE 'B'.
      itab-mng02 = x_mng02 + itab-mng01.
      MODIFY itab INDEX num TRANSPORTING mng02.
    ENDIF.
    x_mng02 = itab-mng02.
  ENDLOOP.
ENDFORM.                    " data_process_step_one

*&---------------------------------------------------------------------*
*&      Form  itab_cZL
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM itab_czl .
  DATA: zdatum LIKE sy-datum.
  DATA: nnn LIKE sy-tabix.

  it_itab[] = itab[].
  po_itab[] = itab[].

  PERFORM calcit_itab.
  PERFORM calcpo_itab.

  LOOP AT it00.
    READ TABLE it_itab WITH KEY matnr = it00-matnr
                                berid = it00-berid
                                delkz =  'WB'.
    IF sy-subrc EQ 0.
      it01-aufnr = it00-aufnr.
      it01-rsnum = it00-rsnum.
      it01-rspos = it00-rspos.
      it01-berid = it00-berid.
      it01-matnr = it00-matnr.
      it01-prgrp = it00-prgrp.
      it01-lbtxt = it00-lbtxt.
      it01-normt = it00-normt.
      IF it00-kzear IS INITIAL.
        it01-m_jxq = it00-enmng - it00-bdmng.
      ENDIF.
*取库存地下的冻结库存
      PERFORM get_speme_from_mard USING it00-matnr
                                        it00-werks
                                       it00-berid
                                  CHANGING x_speme.
      it01-speme = x_speme.
      it_itab-mng02 = it_itab-mng02 - x_speme.
      CLEAR:x_speme.
      it01-m_kyk = it_itab-mng02.
      it01-maktx = it_itab-maktx.
      it01-werks = it_itab-werks.
      it01-dispo = it_itab-dispo.

      it01-mng_a = it01-m_kyk + it01-m_jxq.
      READ TABLE it_itab WITH KEY delnr = it00-rsnum delps = it00-rspos.
      IF sy-subrc EQ 0.
        zdatum = it_itab-dat01.
        LOOP AT po_itab WHERE matnr = it00-matnr
                          AND berid = it00-berid
                          AND delkz NE 'WB'
                          AND dat01 <= zdatum.
          it01-mng_a1 = it01-mng_a1 + po_itab-mng01.
        ENDLOOP.
        it01-mng_a2 = it01-mng_a + it01-mng_a1.
        IF it01-mng_a2 > 0.
          it01-mng_a2 = 0.
        ENDIF.
      ENDIF.
      APPEND it01.
    ENDIF.
    CLEAR it01.
  ENDLOOP.

  LOOP AT it01.
    ON CHANGE OF it01-aufnr OR it01-matnr OR it01-berid.
      IF sy-tabix NE 1.
        APPEND it01_01.
        CLEAR it01_01.
      ENDIF.
      MOVE it01 TO it01_01.
    ENDON.
    IF it01-rspos NE it01_01-rspos.
      it01_01-rspos = ''.
      it01_01-m_jxq = it01_01-m_jxq + it01-m_jxq.
      it01_01-mng_a = it01_01-mng_a  + it01-m_jxq.
      it01_01-mng_a2 = it01_01-mng_a + it01_01-mng_a1.
      IF it01_01-mng_a2 > 0.
        it01_01-mng_a2 = 0.
      ENDIF.
    ENDIF.
    AT LAST.
      APPEND it01_01.
      CLEAR it01_01.
    ENDAT.
  ENDLOOP.
  REFRESH: it00,itab,it01,it_itab,po_itab.
ENDFORM.                    " itab_cZL
*&---------------------------------------------------------------------*
*&      Form  data_output_iT01
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM data_output_it01 .
  DATA:pos TYPE i VALUE 1.

  CLEAR wa_fields.

  wa_fields-fieldname = 'PRGRP'.
  wa_fields-seltext_l = '型号'.
  wa_fields-outputlen = 12.
  wa_fields-col_pos  = pos.
  APPEND wa_fields TO alv_fields.
  pos = pos + 1.
  CLEAR wa_fields.

  wa_fields-fieldname = 'LBTXT'.
  wa_fields-seltext_l = '国家'.
  wa_fields-outputlen = 12.
  wa_fields-col_pos  = pos.
  APPEND wa_fields TO alv_fields.
  pos = pos + 1.
  CLEAR wa_fields.

  wa_fields-fieldname = 'NORMT'.
  wa_fields-seltext_l = '颜色'.
  wa_fields-outputlen = 12.
  wa_fields-col_pos  = pos.
  APPEND wa_fields TO alv_fields.
  pos = pos + 1.
  CLEAR wa_fields.

  wa_fields-fieldname = 'MATNR'.
  wa_fields-seltext_l = '物料代码'.
  wa_fields-outputlen = '15'.
*  wa_fields-KEY       = 'X'.
  wa_fields-col_pos  = pos.
  APPEND wa_fields TO alv_fields.
  pos = pos + 1.
  CLEAR wa_fields.

  wa_fields-fieldname = 'MAKTX'.
  wa_fields-seltext_l = '物料描述'.
*  wa_fields-no_out    = 'X'.

*  wa_fields-DO_SUM    =  'X'.
  wa_fields-outputlen = 20.
  wa_fields-col_pos  = pos.
  APPEND wa_fields TO alv_fields.
  pos = pos + 1.
  CLEAR wa_fields.
*
*  wa_fields-fieldname = 'DELB0'.
*  wa_fields-seltext_l = 'MRP元素'.
*  wa_fields-outputlen = 6.
*  wa_fields-COL_POS  = POS.
*  APPEND wa_fields TO ALV_fields.
*  POS = POS + 1.
*  CLEAR wa_fields.

*  wa_fields-fieldname = 'DAT00'.
*  wa_fields-seltext_l = '可用日期'.
*  wa_fields-outputlen = 8.
*  wa_fields-COL_POS  = POS.
*  APPEND wa_fields TO ALV_fields.
*  POS = POS + 1.
*  CLEAR wa_fields.

*  wa_fields-fieldname = 'DAT01'.
*  wa_fields-seltext_l = '收货日期'.
*  wa_fields-outputlen = 8.
*  wa_fields-COL_POS  = POS.
*  APPEND wa_fields TO ALV_fields.
*  POS = POS + 1.
*  CLEAR wa_fields.
*
*  wa_fields-fieldname = 'EXTRA'.
*  wa_fields-seltext_l = 'MRP元素数据'.
*  wa_fields-outputlen = 40.
*  wa_fields-COL_POS  = POS.
*  APPEND wa_fields TO ALV_fields.
*  POS = POS + 1.
*  CLEAR wa_fields.

  wa_fields-fieldname = 'M_JXQ'.
  wa_fields-seltext_l = '净需求数量'.
  wa_fields-outputlen = 13.
  wa_fields-col_pos  = pos.
  APPEND wa_fields TO alv_fields.
  pos = pos + 1.
  CLEAR wa_fields.

  wa_fields-fieldname = 'M_KYK'.
  wa_fields-seltext_l = '可用库存量'.
  wa_fields-outputlen = 13.
  wa_fields-col_pos  = pos.
  APPEND wa_fields TO alv_fields.
  pos = pos + 1.
  CLEAR wa_fields.

  wa_fields-fieldname = 'SPEME'.
  wa_fields-seltext_l = '冻结库存量'.
  wa_fields-outputlen = 13.
  wa_fields-col_pos  = pos.
  APPEND wa_fields TO alv_fields.
  pos = pos + 1.
  CLEAR wa_fields.

  wa_fields-fieldname = 'MNG_A'.
  wa_fields-seltext_l = '确认需求量'.
  wa_fields-outputlen = 13.
  wa_fields-col_pos  = pos.
  APPEND wa_fields TO alv_fields.
  pos = pos + 1.
  CLEAR wa_fields.

  wa_fields-fieldname = 'MNG_A1'.
  wa_fields-seltext_l = '确认的PO量'.
  wa_fields-outputlen = 13.
  wa_fields-col_pos  = pos.
  APPEND wa_fields TO alv_fields.
  pos = pos + 1.
  CLEAR wa_fields.

  wa_fields-fieldname = 'MNG_A2'.
  wa_fields-seltext_l = '短缺数量'.
  wa_fields-outputlen = 13.
  wa_fields-col_pos  = pos.
  APPEND wa_fields TO alv_fields.
  pos = pos + 1.
  CLEAR wa_fields.
*
*  wa_fields-fieldname = 'LGORT'.
*  wa_fields-seltext_l = '库存'.
*  wa_fields-outputlen = 4.
*  wa_fields-COL_POS  = POS.
*  APPEND wa_fields TO ALV_fields.
*  POS = POS + 1.
*  CLEAR wa_fields.
*
*  wa_fields-fieldname = 'AUSKT'.
*  wa_fields-seltext_l = '库存'.
*  wa_fields-outputlen = 2.
*  wa_fields-COL_POS  = POS.
*  APPEND wa_fields TO ALV_fields.
*  POS = POS + 1.
*  CLEAR wa_fields.

  wa_fields-fieldname = 'AUFNR'.
  wa_fields-seltext_l = '生产订单'.
  wa_fields-outputlen = 12.
  wa_fields-col_pos  = pos.
  APPEND wa_fields TO alv_fields.
  pos = pos + 1.
  CLEAR wa_fields.

  wa_fields-fieldname = 'RSNUM'.
  wa_fields-seltext_l = '预留号'.
  wa_fields-outputlen = 10.
  wa_fields-col_pos  = pos.
  APPEND wa_fields TO alv_fields.
  pos = pos + 1.
  CLEAR wa_fields.

  wa_fields-fieldname = 'RSPOS'.
  wa_fields-seltext_l = '项目'.
  wa_fields-outputlen = 4.
  wa_fields-col_pos  = pos.
  APPEND wa_fields TO alv_fields.
  pos = pos + 1.
  CLEAR wa_fields.

  wa_fields-fieldname = 'BERID'.
  wa_fields-seltext_l = 'MRP范围'.
  wa_fields-outputlen = 10.
  wa_fields-col_pos  = pos.
  APPEND wa_fields TO alv_fields.
  pos = pos + 1.
  CLEAR wa_fields.

  wa_fields-fieldname = 'DISPO'.
  wa_fields-seltext_l = 'MRP控制者'.
  wa_fields-outputlen = 10.
  wa_fields-col_pos  = pos.
  APPEND wa_fields TO alv_fields.
  pos = pos + 1.
  CLEAR wa_fields.

 

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
* CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'

    EXPORTING
      i_callback_program = sy-repid
     i_grid_title       = alv_title
      i_save             = 'X'
      it_fieldcat        = alv_fields
       i_callback_user_command = 'MYCOMMANDC'
    TABLES
      t_outtab           = it01_01     "输出内表
    EXCEPTIONS
      program_error      = 1
      OTHERS             = 2.

ENDFORM.                    " data_output_iT01

*&---------------------------------------------------------------------*
*&      Form  itab_bzl
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM itab_bzl .
  DATA: zdatum LIKE sy-datum.
  DATA: nnn LIKE sy-tabix.
*AR 相关预订
*BE 订单项目计划行
*FE 生产订单
*LA 发运通知
*MR 预定
*SB 相关需求
*U2 库存转移请求的批准订单
*UR 转储预定的库存
*WB 工厂库存
  it_itab[] = itab[].
  po_itab[] = itab[].

  PERFORM calcit_itab.
  PERFORM calcpo_itab.

  LOOP AT it00.
    READ TABLE it_itab WITH KEY matnr = it00-matnr
                                berid = it00-berid
                                delkz =  'WB'.
    IF sy-subrc EQ 0.
      iout-aufnr = it00-aufnr.
      iout-rsnum = it00-rsnum.
      iout-rspos = it00-rspos.
      iout-berid = it00-berid.
      iout-matnr = it00-matnr.
      iout-prgrp = it00-prgrp.
      iout-lbtxt = it00-lbtxt.
      iout-normt = it00-normt.
*取库存地下的冻结库存
      PERFORM get_speme_from_mard USING it00-matnr
                                        it00-werks
                                       it00-berid
                                  CHANGING x_speme.
      iout-speme = x_speme.
      it_itab-mng02 = it_itab-mng02 - x_speme.
      CLEAR:x_speme.
      iout-m_kyk = it_itab-mng02.
      iout-maktx = it_itab-maktx.
      iout-werks = it_itab-werks.
      iout-dispo = it_itab-dispo.

      READ TABLE it_itab WITH KEY delnr = it00-rsnum
                                  delps = it00-rspos.
      IF sy-subrc EQ 0.
        iout-m_jxq = it_itab-mng01.
        zdatum = it_itab-dat01.
        out_datum = zdatum.

        PERFORM fill_dates_2_itab
                    USING
                       out_datum
                       iout-mng_a
                       iout-mng_a1
                       iout-mng_a2
                       iout-jxq_a.

        IF out_datum > sy-datum.
          out_datum = out_datum - s_days.
          IF out_datum < sy-datum.
            out_datum = sy-datum.
          ENDIF.
          PERFORM fill_dates_2_itab
                 USING
                    out_datum
                    iout-mng_b
                    iout-mng_b1
                    iout-mng_b2
                    iout-jxq_b.
        ENDIF.

        IF out_datum > sy-datum.
          out_datum = out_datum - s_days.
          IF out_datum < sy-datum.
            out_datum = sy-datum.
          ENDIF.
          PERFORM fill_dates_2_itab
                 USING
                    out_datum
                    iout-mng_c
                    iout-mng_c1
                    iout-mng_c2
                    iout-jxq_c.
        ENDIF.

        IF out_datum > sy-datum.
          out_datum = out_datum - s_days.
          IF out_datum < sy-datum.
            out_datum = sy-datum.
          ENDIF.
          PERFORM fill_dates_2_itab
                 USING
                    out_datum
                    iout-mng_d
                    iout-mng_d1
                    iout-mng_d2
                    iout-jxq_d.
        ENDIF.

        IF out_datum > sy-datum.
          out_datum = out_datum - s_days.
          IF out_datum < sy-datum.
            out_datum = sy-datum.
          ENDIF.
          PERFORM fill_dates_2_itab
                 USING
                    out_datum
                    iout-mng_e
                    iout-mng_e1
                    iout-mng_e2
                    iout-jxq_e.
        ENDIF.

        IF out_datum > sy-datum.
          out_datum = out_datum - s_days.
          IF out_datum < sy-datum.
            out_datum = sy-datum.
          ENDIF.
          PERFORM fill_dates_2_itab
                 USING
                    out_datum
                    iout-mng_f
                    iout-mng_f1
                    iout-mng_f2
                    iout-jxq_f.
        ENDIF.

        IF out_datum > sy-datum.
          out_datum = out_datum - s_days.
          IF out_datum < sy-datum.
            out_datum = sy-datum.
          ENDIF.
          PERFORM fill_dates_2_itab
                 USING
                    out_datum
                    iout-mng_g
                    iout-mng_g1
                    iout-mng_g2
                    iout-jxq_g.
        ENDIF.

        IF out_datum > sy-datum.
          out_datum = out_datum - s_days.
          IF out_datum < sy-datum.
            out_datum = sy-datum.
          ENDIF.
          PERFORM fill_dates_2_itab
                 USING
                    out_datum
                    iout-mng_h
                    iout-mng_h1
                    iout-mng_h2
                    iout-jxq_h.
        ENDIF.

        IF out_datum > sy-datum.
          out_datum = out_datum - s_days.
          IF out_datum < sy-datum.
            out_datum = sy-datum.
          ENDIF.
          PERFORM fill_dates_2_itab
                 USING
                    out_datum
                    iout-mng_i
                    iout-mng_i1
                    iout-mng_i2
                    iout-jxq_i.
        ENDIF.

        IF out_datum > sy-datum.
          out_datum = out_datum - s_days.
          IF out_datum < sy-datum.
            out_datum = sy-datum.
          ENDIF.
          PERFORM fill_dates_2_itab
                 USING
                    out_datum
                    iout-mng_j
                    iout-mng_j1
                    iout-mng_j2
                    iout-jxq_j.
        ENDIF.

        IF out_datum > sy-datum.
          out_datum = out_datum - s_days.
          IF out_datum < sy-datum.
            out_datum = sy-datum.
          ENDIF.
          PERFORM fill_dates_2_itab
                 USING
                    out_datum
                    iout-mng_k
                    iout-mng_k1
                    iout-mng_k2
                    iout-jxq_k.
        ENDIF.

        IF out_datum > sy-datum.
          out_datum = out_datum - s_days.
          IF out_datum < sy-datum.
            out_datum = sy-datum.
          ENDIF.
          PERFORM fill_dates_2_itab
                 USING
                    out_datum
                    iout-mng_l
                    iout-mng_l1
                    iout-mng_l2
                    iout-jxq_l.
        ENDIF.

        IF out_datum > sy-datum.
          out_datum = out_datum - s_days.
          IF out_datum < sy-datum.
            out_datum = sy-datum.
          ENDIF.
          PERFORM fill_dates_2_itab
                 USING
                    out_datum
                    iout-mng_m
                    iout-mng_m1
                    iout-mng_m2
                    iout-jxq_m.
        ENDIF.

        IF out_datum > sy-datum.
          out_datum = out_datum - s_days.
          IF out_datum < sy-datum.
            out_datum = sy-datum.
          ENDIF.
          PERFORM fill_dates_2_itab
                 USING
                    out_datum
                    iout-mng_n
                    iout-mng_n1
                    iout-mng_n2
                    iout-jxq_n.
        ENDIF.
        out_datum = zdatum.
        APPEND iout.
      ENDIF.
    ENDIF.
    CLEAR iout.
  ENDLOOP.

  SORT iout BY aufnr matnr berid rspos DESCENDING.

  LOOP AT iout.
    ON CHANGE OF iout-aufnr OR iout-matnr OR iout-berid.
      IF sy-tabix NE 1.
        APPEND iout_01.
        CLEAR iout_01.
      ENDIF.
      MOVE iout TO iout_01.
    ENDON.

    IF iout-rspos NE iout_01-rspos.
      iout_01-rspos = ''.
      iout_01-m_jxq = iout_01-m_jxq + iout-m_jxq.
    ENDIF.

    AT LAST.
      APPEND iout_01.
      CLEAR iout_01.
    ENDAT.
  ENDLOOP.
  REFRESH: it00,itab,iout,it_itab,po_itab.
ENDFORM.                    " itab_bzl
*&---------------------------------------------------------------------*
*&      Form  data_output_IOUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM data_output_iout .
  DATA:pos TYPE i VALUE 1,
      itab_outdatum(18),
      itab_datum LIKE sy-datum.
  CLEAR wa_fields.
  wa_fields-fieldname = 'PRGRP'.
  wa_fields-seltext_l = '型号'.
  wa_fields-outputlen = 12.
  wa_fields-col_pos  = pos.
  APPEND wa_fields TO alv_fields.
  pos = pos + 1.
  CLEAR wa_fields.

  wa_fields-fieldname = 'LBTXT'.
  wa_fields-seltext_l = '国家'.
  wa_fields-outputlen = 12.
  wa_fields-col_pos  = pos.
  APPEND wa_fields TO alv_fields.
  pos = pos + 1.
  CLEAR wa_fields.

  wa_fields-fieldname = 'NORMT'.
  wa_fields-seltext_l = '颜色'.
  wa_fields-outputlen = 12.
  wa_fields-col_pos  = pos.
  APPEND wa_fields TO alv_fields.
  pos = pos + 1.
  CLEAR wa_fields.

  wa_fields-fieldname = 'AUFNR'.
  wa_fields-seltext_l = '生产订单'.
  wa_fields-outputlen = 12.
  wa_fields-col_pos  = pos.
  APPEND wa_fields TO alv_fields.
  pos = pos + 1.
  CLEAR wa_fields.

  wa_fields-fieldname = 'MATNR'.
  wa_fields-seltext_l = '物料代码'.
  wa_fields-outputlen = '15'.
*  wa_fields-KEY       = 'X'.
  wa_fields-col_pos  = pos.
  APPEND wa_fields TO alv_fields.
  pos = pos + 1.
  CLEAR wa_fields.

  wa_fields-fieldname = 'MAKTX'.
  wa_fields-seltext_l = '物料描述'.
*  wa_fields-no_out    = 'X'.

*  wa_fields-DO_SUM    =  'X'.
  wa_fields-outputlen = 20.
  wa_fields-col_pos  = pos.
  APPEND wa_fields TO alv_fields.
  pos = pos + 1.
  CLEAR wa_fields.

  wa_fields-fieldname = 'M_JXQ'.
  wa_fields-seltext_l = '净需求数量'.
  wa_fields-outputlen = 13.
  wa_fields-col_pos  = pos.
  APPEND wa_fields TO alv_fields.
  pos = pos + 1.
  CLEAR wa_fields.

  wa_fields-fieldname = 'M_KYK'.
  wa_fields-seltext_l = '可用库存量'.
  wa_fields-outputlen = 13.
  wa_fields-col_pos  = pos.
  APPEND wa_fields TO alv_fields.
  pos = pos + 1.
  CLEAR wa_fields.

  wa_fields-fieldname = 'SPEME'.
  wa_fields-seltext_l = '冻结库存量'.
  wa_fields-outputlen = 13.
  wa_fields-col_pos  = pos.
  APPEND wa_fields TO alv_fields.

  pos = pos + 1.
  CLEAR wa_fields.
  itab_datum = out_datum.
  itab_outdatum(10) = '确认需求/'.
  out_datum = out_datum .
  itab_outdatum+10(8) =  out_datum.
  CONDENSE itab_outdatum.

  wa_fields-fieldname = 'MNG_A'.
  wa_fields-seltext_l = itab_outdatum.
  CLEAR itab_outdatum.
  wa_fields-outputlen = 13.
  wa_fields-col_pos  = pos.
  APPEND wa_fields TO alv_fields.
  pos = pos + 1.
  CLEAR wa_fields.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '确认需求/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_B'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '确认需求/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_C'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '确认需求/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.

    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_D'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '确认需求/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_E'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '确认需求/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_F'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '确认需求/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_G'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '确认需求/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_H'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '确认需求/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_I'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '确认需求/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_J'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '确认需求/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_K'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '确认需求/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_L'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '确认需求/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_M'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '确认需求/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_N'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.
  out_datum = itab_datum.


  itab_outdatum(10) = '确认PO/'.
  itab_outdatum+10(8) =  out_datum.
  CONDENSE itab_outdatum.

  wa_fields-fieldname = 'MNG_A1'.
  wa_fields-seltext_l = itab_outdatum.
  CLEAR itab_outdatum.
  wa_fields-outputlen = 13.
  wa_fields-col_pos  = pos.
  APPEND wa_fields TO alv_fields.
  pos = pos + 1.
  CLEAR wa_fields.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '确认PO/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_B1'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '确认PO/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_C1'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '确认PO/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_D1'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '确认PO/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_E1'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '确认PO/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_F1'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '确认PO/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_G1'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '确认PO/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_H1'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '确认PO/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_I1'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '确认PO/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_J1'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '确认PO/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_K1'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '确认PO/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_L1'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '确认PO/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_M1'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '确认PO/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_N1'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  out_datum = itab_datum.

  itab_outdatum(10) = '短缺数量/'.
  itab_outdatum+10(8) =  out_datum.
  CONDENSE itab_outdatum.

  wa_fields-fieldname = 'MNG_A2'.
  wa_fields-seltext_l = itab_outdatum.
  CLEAR itab_outdatum.
  wa_fields-outputlen = 13.
  wa_fields-col_pos  = pos.
  APPEND wa_fields TO alv_fields.
  pos = pos + 1.
  CLEAR wa_fields.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '短缺数量/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_B2'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '短缺数量/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_C2'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '短缺数量/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_D2'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '短缺数量/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_E2'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '短缺数量/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_F2'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '短缺数量/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_G2'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '短缺数量/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_H2'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '短缺数量/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_I2'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '短缺数量/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_J2'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '短缺数量/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_K2'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '短缺数量/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_L2'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '短缺数量/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_M2'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '短缺数量/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_N2'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  out_datum = itab_datum.

 

  wa_fields-fieldname = 'RSNUM'.
  wa_fields-seltext_l = '预留号'.
  wa_fields-outputlen = 10.
  wa_fields-col_pos  = pos.
  APPEND wa_fields TO alv_fields.
  pos = pos + 1.
  CLEAR wa_fields.

  wa_fields-fieldname = 'RSPOS'.
  wa_fields-seltext_l = '项目'.
  wa_fields-outputlen = 4.
  wa_fields-col_pos  = pos.
  APPEND wa_fields TO alv_fields.
  pos = pos + 1.
  CLEAR wa_fields.

  wa_fields-fieldname = 'BERID'.
  wa_fields-seltext_l = 'MRP范围'.
  wa_fields-outputlen = 10.
  wa_fields-col_pos  = pos.
  APPEND wa_fields TO alv_fields.
  pos = pos + 1.
  CLEAR wa_fields.

  wa_fields-fieldname = 'DISPO'.
  wa_fields-seltext_l = 'MRP控制者'.
  wa_fields-outputlen = 10.
  wa_fields-col_pos  = pos.
  APPEND wa_fields TO alv_fields.
  pos = pos + 1.
  CLEAR wa_fields.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program      = sy-repid
      i_grid_title            = alv_title
      i_save                  = 'X'
      it_fieldcat             = alv_fields
      i_callback_user_command = 'MYCOMMAND'
    TABLES
      t_outtab                = iout_01     "输出内表
    EXCEPTIONS
      program_error           = 1
      OTHERS                  = 2.

ENDFORM.                    " data_output_IOUT
*&---------------------------------------------------------------------*
*&      Form  calcit_itab
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM calcit_itab .
  DATA x_mng02 LIKE itab-mng02.

  DELETE it_itab WHERE delkz NE 'AR'
                   AND delkz NE 'WB'
                    OR plaab NE '02'.

  LOOP AT it_itab.
    num = sy-tabix.
    IF it_itab-plumi NE 'B'.
      it_itab-mng02 = x_mng02 + it_itab-mng01.
      MODIFY it_itab INDEX num TRANSPORTING mng02.
    ENDIF.
    x_mng02 = it_itab-mng02.
  ENDLOOP.
ENDFORM.                    " calcit_itab
*&---------------------------------------------------------------------*
*&      Form  calcpo_itab
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM calcpo_itab .
  DATA x_mng02 LIKE itab-mng02.

  DELETE po_itab WHERE delkz NE 'BE'
                   AND delkz NE 'WB'
                    OR plaab NE '02'.
  LOOP AT po_itab.
    num = sy-tabix.
    IF po_itab-plumi NE 'B'.
      po_itab-mng02 = x_mng02 + po_itab-mng01.
      MODIFY po_itab INDEX num TRANSPORTING mng02.
    ENDIF.
    x_mng02 = po_itab-mng02.
  ENDLOOP.
ENDFORM.                    " calcpo_itab

*&--------------------------------------------------------------------*
*&      Form  GET_data_BY_OTHERS
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
FORM get_data_by_others.
  SELECT resb~rsnum resb~rspos resb~werks resb~lgort resb~bdmng
         resb~enmng resb~kzear afko~aufnr  afko~plnbez resb~matnr
    APPENDING TABLE it00 FROM afko INNER JOIN resb
                 ON afko~rsnum = resb~rsnum
              WHERE afko~aufnr = s_aufnr
                AND resb~matnr IN s_matnr
                AND resb~werks = s_werks
                AND resb~xloek = ''
                AND resb~dumps EQ space. "非虚拟件
*                AND resb~kzkup EQ space. "非散装物料

  LOOP AT it00 WHERE NOT lgort IS INITIAL.
    SELECT SINGLE * FROM mdlg WHERE werks = it00-werks
                                AND lgort = it00-lgort.
    IF sy-subrc EQ 0.
      SELECT SINGLE * FROM mdma WHERE matnr = it00-matnr
                                  AND berid = mdlg-berid.
      IF sy-subrc EQ 0.
        it00-berid = mdma-berid.
        MODIFY it00.
      ENDIF.
    ENDIF.
  ENDLOOP.

  LOOP AT it00.
    IF it00-berid IS INITIAL.
      SELECT SINGLE * FROM mdlv WHERE werzg = it00-werks
                  AND berty = '01'.
      IF sy-subrc EQ 0.
        it00-berid = mdlv-berid.
        SELECT SINGLE * FROM marc WHERE matnr = it00-matnr
                                    AND werks = it00-werks
                                    AND diber = 'X'.
        IF sy-subrc EQ 0.
          MODIFY it00.
        ENDIF.
      ENDIF.
    ENDIF.
    IF NOT it00-berid IN s_berid.
      DELETE it00.
    ENDIF.
  ENDLOOP.

  SORT it00 BY aufnr.
  LOOP AT it00.
    ON CHANGE OF it00-aufnr.
      CLEAR:it00_01-lbtxt,it00_01-normt,it00_01-prgrp.
      SELECT SINGLE * FROM afko WHERE aufnr = it00-aufnr.
      IF sy-subrc EQ 0.
        SELECT SINGLE * FROM mara WHERE matnr = afko-plnbez.
        IF sy-subrc EQ 0.
          it00_01-normt = mara-normt.
          SELECT SINGLE * FROM t024x WHERE labor = mara-labor
                                      AND spras = sy-langu.

          IF sy-subrc EQ 0.
            it00_01-lbtxt = t024x-lbtxt.
          ENDIF.

          SELECT SINGLE * FROM pgmi WHERE werks = s_werks
                                      AND nrmit = afko-plnbez
                                      AND pgtyp = ''.
          IF sy-subrc EQ 0.
            it00_01-prgrp = pgmi-prgrp.
          ENDIF.
        ENDIF.
      ENDIF.

    ENDON.

    it00-lbtxt = it00_01-lbtxt.
    it00-normt = it00_01-normt.
    it00-prgrp = it00_01-prgrp.
    MODIFY it00.
  ENDLOOP.
  SORT it00 BY matnr berid.
  CLEAR it00.
ENDFORM.                    "GET_data_BY_OTHERS
*&---------------------------------------------------------------------*
*&      Form  GET_data_BY_dATE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_data_by_date .
  SELECT resb~rsnum resb~rspos resb~werks resb~lgort resb~bdmng
         resb~enmng resb~kzear afko~aufnr afko~plnbez resb~matnr
  INTO TABLE it00 FROM resb INNER JOIN afko ON afko~aufnr = resb~aufnr
       WHERE resb~bdter  <= sel_datu
         AND resb~aufnr  NE ''
         AND resb~matnr  IN s_matnr
         AND resb~werks  EQ s_werks
         AND resb~xloek  EQ ''
         AND afko~plnbez IN s_plnbez
         AND resb~dumps EQ space. "非虚拟件
*         AND resb~kzkup EQ space. "非散装物料

  LOOP AT it00 WHERE NOT lgort IS INITIAL.
    num = sy-tabix.
    SELECT SINGLE * FROM mdlg WHERE werks = it00-werks
                                AND lgort = it00-lgort.
    IF sy-subrc EQ 0.
      SELECT SINGLE * FROM mdma WHERE matnr = it00-matnr
                                  AND berid = mdlg-berid
                                  AND loekz = ''.
      IF sy-subrc EQ 0.
        it00-berid = mdma-berid.
        MODIFY it00 INDEX num TRANSPORTING berid.
      ENDIF.
    ENDIF.
  ENDLOOP.

  LOOP AT it00.
    num = sy-tabix.
    IF it00-berid IS INITIAL.
      SELECT SINGLE * FROM mdlv WHERE werzg = it00-werks
                  AND berty = '01'.
      IF sy-subrc EQ 0.
        it00-berid = mdlv-berid.
        SELECT SINGLE * FROM marc WHERE matnr = it00-matnr
                                    AND werks = it00-werks
                                    AND diber = 'X'.
        IF sy-subrc EQ 0.
          MODIFY it00 INDEX num TRANSPORTING berid.
        ENDIF.
      ENDIF.
    ENDIF.
    IF NOT it00-berid IN s_berid.
      DELETE it00.
    ENDIF.
  ENDLOOP.

  SORT it00 BY aufnr.
  LOOP AT it00.
    ON CHANGE OF it00-aufnr.
      CLEAR:it00_01-lbtxt,it00_01-normt,it00_01-prgrp.
      SELECT SINGLE * FROM afko WHERE aufnr = it00-aufnr.
      IF sy-subrc EQ 0.
        SELECT SINGLE * FROM mara WHERE matnr = afko-plnbez.
        IF sy-subrc EQ 0.
          it00_01-normt = mara-normt.
          SELECT SINGLE * FROM t024x WHERE labor = mara-labor
                                      AND spras = sy-langu.
          IF sy-subrc EQ 0.
            it00_01-lbtxt = t024x-lbtxt.
          ENDIF.
          SELECT SINGLE * FROM pgmi WHERE werks = s_werks
                                      AND nrmit = afko-plnbez
                                      AND pgtyp = ''.
          IF sy-subrc EQ 0.
            it00_01-prgrp = pgmi-prgrp.
          ENDIF.
        ENDIF.
      ENDIF.

    ENDON.
    it00-lbtxt = it00_01-lbtxt.
    it00-normt = it00_01-normt.
    it00-prgrp = it00_01-prgrp.
    MODIFY it00.
  ENDLOOP.
  SORT it00 BY matnr berid.
  CLEAR it00.
ENDFORM.                    " GET_data_BY_dATE

*&--------------------------------------------------------------------*
*&      Form  itab_Ezl
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
FORM itab_ezl .
  DATA: zdatum LIKE sy-datum.

  it_itab[] = itab[].
  po_itab[] = itab[].

  PERFORM calcit_itab.
  PERFORM calcpo_itab.

  LOOP AT it00.
    ON CHANGE OF it00-matnr OR it00-berid.

      READ TABLE it_itab WITH KEY matnr = it00-matnr
                                  berid = it00-berid
                                  delkz =  'WB'.
      IF sy-subrc EQ 0.

        iout-berid = it00-berid.
        iout-matnr = it00-matnr.
*取库存地下的冻结库存
        PERFORM get_speme_from_mard USING  it00-matnr
                                           it00-werks
                                           it00-berid
                                 CHANGING  x_speme.
        iout-speme = x_speme.
        it_itab-mng02 = it_itab-mng02 - x_speme.
        CLEAR:x_speme.
        iout-m_kyk = it_itab-mng02.
        iout-maktx = it_itab-maktx.
        iout-werks = it_itab-werks.
        iout-dispo = it_itab-dispo.
        zdatum = sel_datu.
        out_datum = zdatum.

        PERFORM fill_days_to_itab
                    USING
                       out_datum
                       iout-mng_a
                       iout-mng_a1
                       iout-mng_a2
                       iout-jxq_a
                       'a'.


        IF out_datum > sy-datum.
          out_datum = out_datum - s_days.
          IF out_datum < sy-datum.
            out_datum = sy-datum.
          ENDIF.

          PERFORM fill_days_to_itab
                 USING
                    out_datum
                    iout-mng_b
                    iout-mng_b1
                    iout-mng_b2
                    iout-jxq_b
                    'b'.
        ENDIF.


        IF out_datum > sy-datum.
          out_datum = out_datum - s_days.
          IF out_datum < sy-datum.
            out_datum = sy-datum.
          ENDIF.
          PERFORM fill_days_to_itab
                 USING
                    out_datum
                    iout-mng_c
                    iout-mng_c1
                    iout-mng_c2
                    iout-jxq_c
                    'c'.
        ENDIF.

        IF out_datum > sy-datum.
          out_datum = out_datum - s_days.
          IF out_datum < sy-datum.
            out_datum = sy-datum.
          ENDIF.
          PERFORM fill_days_to_itab
                 USING
                    out_datum
                    iout-mng_d
                    iout-mng_d1
                    iout-mng_d2
                    iout-jxq_d
                    'd'.
        ENDIF.

        IF out_datum > sy-datum.
          out_datum = out_datum - s_days.
          IF out_datum < sy-datum.
            out_datum = sy-datum.
          ENDIF.
          PERFORM fill_days_to_itab
                 USING
                    out_datum
                    iout-mng_e
                    iout-mng_e1
                    iout-mng_e2
                    iout-jxq_e
                    'e'.
        ENDIF.

        IF out_datum > sy-datum.
          out_datum = out_datum - s_days.
          IF out_datum < sy-datum.
            out_datum = sy-datum.
          ENDIF.
          PERFORM fill_days_to_itab
                 USING
                    out_datum
                    iout-mng_f
                    iout-mng_f1
                    iout-mng_f2
                    iout-jxq_f
                    'f'.
        ENDIF.

        IF out_datum > sy-datum.
          out_datum = out_datum - s_days.
          IF out_datum < sy-datum.
            out_datum = sy-datum.
          ENDIF.
          PERFORM fill_days_to_itab
                 USING
                    out_datum
                    iout-mng_g
                    iout-mng_g1
                    iout-mng_g2
                    iout-jxq_g
                    'g'.
        ENDIF.

        IF out_datum > sy-datum.
          out_datum = out_datum - s_days.
          IF out_datum < sy-datum.
            out_datum = sy-datum.
          ENDIF.
          PERFORM fill_days_to_itab
                 USING
                    out_datum
                    iout-mng_h
                    iout-mng_h1
                    iout-mng_h2
                    iout-jxq_h
                    'h'.
        ENDIF.

        IF out_datum > sy-datum.
          out_datum = out_datum - s_days.
          IF out_datum < sy-datum.
            out_datum = sy-datum.
          ENDIF.
          PERFORM fill_days_to_itab
                 USING
                    out_datum
                    iout-mng_i
                    iout-mng_i1
                    iout-mng_i2
                    iout-jxq_i
                    'i'.
        ENDIF.

        IF out_datum > sy-datum.
          out_datum = out_datum - s_days.
          IF out_datum < sy-datum.
            out_datum = sy-datum.
          ENDIF.
          PERFORM fill_days_to_itab
                 USING
                    out_datum
                    iout-mng_j
                    iout-mng_j1
                    iout-mng_j2
                    iout-jxq_j
                    'j'.
        ENDIF.

        IF out_datum > sy-datum.
          out_datum = out_datum - s_days.
          IF out_datum < sy-datum.
            out_datum = sy-datum.
          ENDIF.
          PERFORM fill_days_to_itab
                 USING
                    out_datum
                    iout-mng_k
                    iout-mng_k1
                    iout-mng_k2
                    iout-jxq_k
                    'k'.
        ENDIF.

        IF out_datum > sy-datum.
          out_datum = out_datum - s_days.
          IF out_datum < sy-datum.
            out_datum = sy-datum.
          ENDIF.
          PERFORM fill_days_to_itab
                 USING
                    out_datum
                    iout-mng_l
                    iout-mng_l1
                    iout-mng_l2
                    iout-jxq_l
                    'l'.
        ENDIF.

        IF out_datum > sy-datum.
          out_datum = out_datum - s_days.
          IF out_datum < sy-datum.
            out_datum = sy-datum.
          ENDIF.
          PERFORM fill_days_to_itab
                 USING
                    out_datum
                    iout-mng_m
                    iout-mng_m1
                    iout-mng_m2
                    iout-jxq_m
                    'm'.
        ENDIF.

        IF out_datum > sy-datum.
          out_datum = out_datum - s_days.
          IF out_datum < sy-datum.
            out_datum = sy-datum.
          ENDIF.
          PERFORM fill_days_to_itab
                 USING
                    out_datum
                    iout-mng_n
                    iout-mng_n1
                    iout-mng_n2
                    iout-jxq_n
                    'n'.
        ENDIF.
        out_datum = zdatum.
        iout-m_jxq = iout-jxq_a.
        APPEND iout.
      ENDIF.
      CLEAR iout.
    ENDON.
  ENDLOOP.
  it02[] = iout[].
  REFRESH:it00,itab,iout,it_itab,po_itab.
ENDFORM.                    "itab_Ezl
*&---------------------------------------------------------------------*
*&      Form  data_output_IT02
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM data_output_it02 .
  DATA:pos TYPE i VALUE 1,
      itab_outdatum(18),
      itab_datum LIKE sy-datum.

  CLEAR wa_fields.
  wa_fields-fieldname = 'MATNR'.
  wa_fields-seltext_l = '物料代码'.
  wa_fields-outputlen = '15'.
  wa_fields-col_pos  = pos.
  APPEND wa_fields TO alv_fields.
  pos = pos + 1.
  CLEAR wa_fields.

  wa_fields-fieldname = 'MAKTX'.
  wa_fields-seltext_l = '物料描述'.
  wa_fields-outputlen = 20.
  wa_fields-col_pos  = pos.
  APPEND wa_fields TO alv_fields.
  pos = pos + 1.
  CLEAR wa_fields.

  wa_fields-fieldname = 'M_JXQ'.
  wa_fields-seltext_l = '净需求数量'.
  wa_fields-outputlen = 13.
  wa_fields-col_pos  = pos.
  APPEND wa_fields TO alv_fields.
  pos = pos + 1.
  CLEAR wa_fields.

  wa_fields-fieldname = 'M_KYK'.
  wa_fields-seltext_l = '可用库存量'.
  wa_fields-outputlen = 13.
  wa_fields-col_pos  = pos.
  APPEND wa_fields TO alv_fields.
  pos = pos + 1.
  CLEAR wa_fields.

  wa_fields-fieldname = 'SPEME'.
  wa_fields-seltext_l = '冻结库存量'.
  wa_fields-outputlen = 13.
  wa_fields-col_pos  = pos.
  APPEND wa_fields TO alv_fields.
  pos = pos + 1.
  CLEAR wa_fields.

  itab_datum = out_datum.
  itab_outdatum(10) = '确认需求/'.
  out_datum = out_datum .
  itab_outdatum+10(8) =  out_datum.
  CONDENSE itab_outdatum.

  wa_fields-fieldname = 'MNG_A'.
  wa_fields-seltext_l = itab_outdatum.
  CLEAR itab_outdatum.
  wa_fields-outputlen = 13.
  wa_fields-col_pos  = pos.
  APPEND wa_fields TO alv_fields.
  pos = pos + 1.
  CLEAR wa_fields.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '确认需求/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_B'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '确认需求/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_C'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '确认需求/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.

    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_D'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '确认需求/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_E'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '确认需求/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_F'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '确认需求/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_G'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '确认需求/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_H'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '确认需求/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_I'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '确认需求/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_J'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '确认需求/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_K'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '确认需求/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_L'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '确认需求/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_M'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '确认需求/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_N'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.
  out_datum = itab_datum.


  itab_outdatum(10) = '确认PO/'.
  itab_outdatum+10(8) =  out_datum.
  CONDENSE itab_outdatum.

  wa_fields-fieldname = 'MNG_A1'.
  wa_fields-seltext_l = itab_outdatum.
  CLEAR itab_outdatum.
  wa_fields-outputlen = 13.
  wa_fields-col_pos  = pos.
  APPEND wa_fields TO alv_fields.
  pos = pos + 1.
  CLEAR wa_fields.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '确认PO/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_B1'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '确认PO/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_C1'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '确认PO/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_D1'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '确认PO/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_E1'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '确认PO/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_F1'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '确认PO/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_G1'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '确认PO/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_H1'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '确认PO/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_I1'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '确认PO/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_J1'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '确认PO/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_K1'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '确认PO/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_L1'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '确认PO/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_M1'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '确认PO/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_N1'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  out_datum = itab_datum.

  itab_outdatum(10) = '短缺数量/'.
  itab_outdatum+10(8) =  out_datum.
  CONDENSE itab_outdatum.

  wa_fields-fieldname = 'MNG_A2'.
  wa_fields-seltext_l = itab_outdatum.
  CLEAR itab_outdatum.
  wa_fields-outputlen = 13.
  wa_fields-col_pos  = pos.
  APPEND wa_fields TO alv_fields.
  pos = pos + 1.
  CLEAR wa_fields.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '短缺数量/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_B2'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '短缺数量/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_C2'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '短缺数量/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_D2'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '短缺数量/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_E2'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '短缺数量/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_F2'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '短缺数量/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_G2'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '短缺数量/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_H2'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '短缺数量/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_I2'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '短缺数量/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_J2'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '短缺数量/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_K2'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '短缺数量/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_L2'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '短缺数量/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_M2'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  IF out_datum > sy-datum.
    itab_outdatum(10) = '短缺数量/'.
    out_datum = out_datum - s_days.
    IF out_datum < sy-datum.
      out_datum = sy-datum.
    ENDIF.
    itab_outdatum+10(8) =  out_datum.
    CONDENSE itab_outdatum.

    wa_fields-fieldname = 'MNG_N2'.
    wa_fields-seltext_l = itab_outdatum.
    CLEAR itab_outdatum.
    wa_fields-outputlen = 13.
    wa_fields-col_pos  = pos.
    APPEND wa_fields TO alv_fields.
    pos = pos + 1.
    CLEAR wa_fields.
  ENDIF.

  out_datum = itab_datum.

 

  wa_fields-fieldname = 'BERID'.
  wa_fields-seltext_l = 'MRP范围'.
  wa_fields-outputlen = 10.
  wa_fields-col_pos  = pos.
  APPEND wa_fields TO alv_fields.
  pos = pos + 1.
  CLEAR wa_fields.

  wa_fields-fieldname = 'DISPO'.
  wa_fields-seltext_l = 'MRP控制者'.
  wa_fields-outputlen = 10.
  wa_fields-col_pos  = pos.
  APPEND wa_fields TO alv_fields.
  pos = pos + 1.
  CLEAR wa_fields.

 

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program      = sy-repid
      i_grid_title            = alv_title
      i_save                  = 'X'
      it_fieldcat             = alv_fields
      i_callback_user_command = 'MYCOMMANDE'
    TABLES
      t_outtab                = it02     "输出内表
    EXCEPTIONS
      program_error           = 1
      OTHERS                  = 2.

ENDFORM.                    " data_output_IT02

*&--------------------------------------------------------------------*
*&      Form  fill_days_to_itab
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
*      -->P_datum  text
*      -->P_mng_a    text
*      -->P_mng_a1   text
*      -->P_mng_a2   text
*      -->P_m_jxq    text
*---------------------------------------------------------------------*
FORM fill_days_to_itab USING p_datum
                             p_mng_a
                             p_mng_a1
                             p_mng_a2
                             p_m_jxq
                             p_x.


  CLEAR:p_mng_a,p_mng_a1,p_mng_a2,p_m_jxq.
  IF p_datum <= sy-datum."OPEN PO在当前日期之前的都放到当前日期栏位
    LOOP AT po_itab WHERE matnr = it00-matnr
                      AND berid = it00-berid
                      AND delkz NE 'WB'
                      AND dat01 <= p_datum.
      p_mng_a1 = p_mng_a1 + po_itab-mng01.
    ENDLOOP.
  ELSE.
    LOOP AT po_itab WHERE matnr = it00-matnr
                      AND berid = it00-berid
                      AND delkz NE 'WB'
                      AND dat01 = p_datum.
      p_mng_a1 = p_mng_a1 + po_itab-mng01.
    ENDLOOP.
  ENDIF.
*
  LOOP AT it_itab WHERE matnr = it00-matnr
                    AND berid = it00-berid
                    AND delkz NE 'WB'
                    AND dat01 <= p_datum.

    p_mng_a = p_mng_a + it_itab-mng01.

  ENDLOOP.
  p_m_jxq =  p_mng_a.
  p_mng_a = iout-m_kyk + p_m_jxq.
  p_mng_a2 = p_mng_a + p_mng_a1.
  IF p_mng_a2 > 0.
    p_mng_a2 = 0.
  ENDIF.
ENDFORM.                    "fill_days_to_itab


*&--------------------------------------------------------------------*
*&      Form  fill_dates_2_itab
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
*      -->P_datum  text
*      -->P_mng_a    text
*      -->P_mng_a1   text
*      -->P_mng_a2   text
*      -->P_m_jxq    text
*---------------------------------------------------------------------*
FORM fill_dates_2_itab USING p_datum
                             p_mng_a
                             p_mng_a1
                             p_mng_a2
                             p_m_jxq.

  CLEAR: p_mng_a,p_mng_a1,p_mng_a2,p_m_jxq.

  LOOP AT po_itab WHERE matnr = it00-matnr
                    AND berid = it00-berid
                    AND delkz NE 'WB'
                    AND dat01 <= p_datum.
    p_mng_a1 = p_mng_a1 + po_itab-mng01.
  ENDLOOP.

  LOOP AT it_itab WHERE matnr = it00-matnr
                    AND berid = it00-berid
                    AND  delkz NE 'WB'
                    AND dat01 <=  p_datum
                    AND delnr NE it00-rsnum.

    p_mng_a = p_mng_a + it_itab-mng01.
  ENDLOOP.

  LOOP AT it_itab WHERE matnr = it00-matnr
                    AND berid = it00-berid
                    AND  delkz NE 'WB'
                    AND dat01 <=  p_datum
                    AND delnr = it00-rsnum
                    AND delps <= it00-rspos.

    p_mng_a = p_mng_a + it_itab-mng01.
  ENDLOOP.

  p_m_jxq = p_mng_a.
  p_mng_a = iout-m_kyk + p_mng_a .
  p_mng_a2 = p_mng_a + p_mng_a1.
  IF p_mng_a2 > 0.
    p_mng_a2 = 0.
  ENDIF.
ENDFORM.                    "fill_dates_2_itab

*&--------------------------------------------------------------------*
*&      Form  MYCOMMAND
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
*      -->R_UCOMM    text
*      -->RS_SELFIELDtext
*---------------------------------------------------------------------*
FORM mycommand USING r_ucomm LIKE sy-ucomm
                        rs_selfield TYPE slis_selfield.

  CASE r_ucomm.

    WHEN '&IC1'.

      READ TABLE iout_01 INDEX  rs_selfield-tabindex.
      IF sy-subrc EQ 0.
        SET PARAMETER ID 'MAT' FIELD iout_01-matnr.
        SET PARAMETER ID 'LAG' FIELD id_lgort.
        SET PARAMETER ID 'CHA' FIELD id_charg.
        SET PARAMETER ID 'WRK' FIELD iout_01-werks .
        CALL TRANSACTION 'MMBE'  AND SKIP FIRST SCREEN .

      ENDIF.
      CLEAR: rs_selfield-tabindex.
  ENDCASE.
ENDFORM.                               " USER_COMMAND

*&--------------------------------------------------------------------*
*&      Form  MYCOMMANDC
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
*      -->R_UCOMM    text
*      -->RS_SELFIELDtext
*---------------------------------------------------------------------*
FORM mycommandc USING r_ucomm LIKE sy-ucomm
                        rs_selfield TYPE slis_selfield.

  CASE r_ucomm.

    WHEN '&IC1'.

      READ TABLE it01_01 INDEX  rs_selfield-tabindex.
      IF sy-subrc EQ 0.
        SET PARAMETER ID 'MAT' FIELD it01_01-matnr.
        SET PARAMETER ID 'BERID' FIELD it01_01-berid.
        SET PARAMETER ID 'WRK' FIELD it01_01-werks.

*        SET PARAMETER ID 'LAG' FIELD id_lgort.
*        SET PARAMETER ID 'CHA' FIELD id_charg.
        CALL TRANSACTION 'MD04'  AND SKIP FIRST SCREEN .

      ENDIF.
      IF sy-subrc EQ 0.
        SET PARAMETER ID 'MAT' FIELD it01_01-matnr.
        SET PARAMETER ID 'WRK' FIELD it01_01-werks.
        SET PARAMETER ID 'LAG' FIELD id_lgort.
        SET PARAMETER ID 'CHA' FIELD id_charg.
        CALL TRANSACTION 'MMBE'  AND SKIP FIRST SCREEN .

      ENDIF.
      CLEAR: rs_selfield-tabindex.

  ENDCASE.
ENDFORM.                               " USER_COMMAND

*&--------------------------------------------------------------------*
*&      Form  MYCOMMANDE
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
*      -->R_UCOMM    text
*      -->RS_SELFIELDtext
*---------------------------------------------------------------------*
FORM mycommande USING r_ucomm LIKE sy-ucomm
                        rs_selfield TYPE slis_selfield.

  CASE r_ucomm.

    WHEN '&IC1'.

      READ TABLE it02 INDEX  rs_selfield-tabindex.
      IF sy-subrc EQ 0.
        SET PARAMETER ID 'MAT' FIELD it02-matnr.
        SET PARAMETER ID 'LAG' FIELD id_lgort.
        SET PARAMETER ID 'CHA' FIELD id_charg.
        SET PARAMETER ID 'WRK' FIELD it02-werks .
        CALL TRANSACTION 'MMBE'  AND SKIP FIRST SCREEN .

      ENDIF.
      CLEAR: rs_selfield-tabindex.
  ENDCASE.
ENDFORM.                               " USER_COMMAND

*&--------------------------------------------------------------------*
*&      Form  mrp_area
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
*      -->p_matnr    text
*      -->p_werks    text
*      -->p_berid    text
*---------------------------------------------------------------------*
FORM mrp_area USING p_matnr p_werks p_berid .
  DATA:nnn LIKE sy-tabix.
  SELECT matnr werks lgort labst speme insme FROM mard
    INTO TABLE ilgort WHERE matnr = p_matnr
                        AND werks = p_werks.
  IF NOT p_berid IS INITIAL.
    LOOP AT ilgort.
******change by zhaohd****************
      nnn = sy-tabix.
      IF NOT ilgort[] IS INITIAL.
********end***************************
        SELECT SINGLE * FROM mdlg WHERE werks = p_werks
                                    AND lgort = ilgort-lgort.
        IF sy-subrc EQ 0.
          SELECT SINGLE * FROM mdma WHERE matnr = p_matnr
                                      AND berid = mdlg-berid
                                      AND loekz = ''.
          IF sy-subrc EQ 0.
            ilgort-berid = mdlg-berid.
            MODIFY ilgort INDEX nnn TRANSPORTING berid.
          ELSE.
            SELECT SINGLE * FROM mdlv WHERE werzg = p_werks.
            IF sy-subrc EQ 0.
              ilgort-berid = mdlv-berid.
              MODIFY ilgort INDEX nnn TRANSPORTING berid.
            ENDIF.
          ENDIF.
        ELSE.
          SELECT SINGLE * FROM mdlv WHERE werzg = p_werks.
          IF sy-subrc EQ 0.
            ilgort-berid = mdlv-berid.
            MODIFY ilgort INDEX nnn TRANSPORTING berid.
          ENDIF.
        ENDIF.
*****change by zhaohd20050411***************
      ELSE.
        EXIT.
      ENDIF.
*******end***************************
    ENDLOOP.
  ENDIF.
ENDFORM.                    "mrp_area
*&---------------------------------------------------------------------*
*&      Form  OUPUT_TO_ALV
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM ouput_to_alv .
  IF sel02 = 'X'.
    IF sel00 = 'X'.
      IF itab[] IS INITIAL.
        MESSAGE '没有数据存在!' TYPE 'S'.
      ELSE.
        PERFORM data_output.
      ENDIF.
    ELSE.
      PERFORM itab_bzl.
      IF iout_01[] IS INITIAL.
        MESSAGE '没有数据存在!' TYPE 'S'.
      ELSE.
        PERFORM data_output_iout.
      ENDIF.
    ENDIF.
  ELSEIF sel01 = 'X'.
    IF sel00 = 'X'.
      IF itab[] IS INITIAL.
        MESSAGE '没有数据存在!' TYPE 'S'.
      ELSE.
        PERFORM data_output.
      ENDIF.
    ELSE.
      PERFORM itab_czl.
      IF it01_01[] IS INITIAL.
        MESSAGE '没有数据存在!' TYPE 'S'.
      ELSE.
        PERFORM data_output_it01.
      ENDIF.
    ENDIF.
  ELSEIF sel03 = 'X'.
    IF sel00 = 'X'.
      IF itab[] IS INITIAL.
        MESSAGE '没有数据存在!' TYPE 'S'.
      ELSE.
        PERFORM data_output.
      ENDIF.
    ELSE.
      PERFORM itab_ezl.
      IF it02[] IS INITIAL.
        MESSAGE '没有数据存在!' TYPE 'S'.
      ELSE.
        PERFORM data_output_it02.
      ENDIF.
    ENDIF.
  ENDIF.
ENDFORM.                    " OUPUT_TO_ALV
*&---------------------------------------------------------------------*
*&      Form  get_speme_from_mard
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_MATNR  text
*      -->P_WERKS  text
*      -->P_LGORT  text
*      <--P_SPEME  text
*----------------------------------------------------------------------*
FORM get_speme_from_mard  USING    p_matnr
                                   p_werks
                                   p_berid
                         CHANGING  p_speme.
*找冻结库存
*如果MRParea 存在 则找此MRParea下所有库存地的冻结库存
  IF p_berid NE '1000'.
    SELECT lgort FROM mdlg INTO CORRESPONDING FIELDS OF TABLE ilgort1
                                     WHERE berid = p_berid
                                       AND werks = p_werks.

    IF NOT ilgort1[] IS INITIAL.
      SELECT * FROM mard INTO CORRESPONDING FIELDS OF TABLE istock
      FOR ALL ENTRIES IN ilgort1 WHERE matnr = p_matnr
                                  AND werks = p_werks
                                  AND lgort = ilgort1-lgort
                                  and DISKZ = ''.
      LOOP AT istock.
         p_speme = istock-speme + p_speme.
         ENDLOOP.
    ENDIF.
*否则找该物料工厂下的所有库存并减掉该物料存在MRParea下库存地的库存
  ELSE.
    SELECT * FROM mard INTO CORRESPONDING FIELDS OF TABLE istock
                          WHERE matnr = p_matnr
                            AND werks = p_werks
                            and DISKZ = ''.
*                                AND lgort = ilgort-lgort.
    LOOP AT istock.
*排除MRParea下的库存地库存
      SELECT SINGLE * FROM mdlg WHERE werks = s_werks
                                 AND lgort = istock-lgort.
      IF sy-subrc NE space.
        p_speme = istock-speme + p_speme.
      ENDIF.
    ENDLOOP.
  ENDIF.


*  SELECT SUM( speme ) INTO p_speme FROM mard WHERE matnr = p_matnr
*                                                 AND werks = p_werks
**                                                 AND lgort = p_lgort
*                                                 AND lvorm = ''.
ENDFORM.                    " get_speme_from_mard

你可能感兴趣的:(SAP 程序介绍-本人曾写的一个报表程序(ABAP/4语言-R/3专用语言))