program(based on the schedule line to check the status about delivery)

*&---------------------------------------------------------------------*
*& Report  ZSD_SCH_DEL
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZSD_SCH_DEL.
*&---------------------------------------------------------------------*

*&---------------------------------------------------------------------*
TYPE-POOLS: slis.
TABLES: vbak, vbap, vbep, vbfa, vbup, T001.

TYPES: BEGIN OF vbep_ty,
        vbeln TYPE vbepvb-vbeln,
        posnr TYPE vbepvb-posnr,
        etenr TYPE vbepvb-etenr,
        ettyp TYPE vbepvb-ettyp,
        edatu TYPE vbepvb-edatu,
        lddat type vbepvb-lddat,
*        mbdat TYPE vbepvb-mbdat,
        wmeng TYPE vbepvb-wmeng,
        bmeng TYPE vbepvb-bmeng,
        olfmng TYPE vbepvb-olfmng,
        vsmng TYPE vbepvb-vsmng,
        vrkme TYPE vbepvb-vrkme,
        vbelv TYPE VBFA-vbelv,
        posnv TYPE VBFA-posnv,
       END OF vbep_ty.
DATA: vbep_out TYPE STANDARD TABLE OF vbep_ty,
      lvbep_out TYPE vbep_ty.

TYPES: BEGIN OF vbep_ty_1,
        matnr TYPE mara-matnr,
        maktx type makt-maktx,
        MATKL TYPE MARA-MATKL,
        vbeln TYPE vbepvb-vbeln,
        gbsta TYPE vbup-gbsta,
        pstyv TYPE vbap-pstyv,
        posnr TYPE vbepvb-posnr,
        etenr TYPE vbepvb-etenr,
        kunnr type vbak-kunnr,
        name1 type kna1-name1,
        werks type vbap-werks,
        lgort type vbap-lgort,
        vkorg type vbak-vkorg,
        ernam type vbak-ernam,
        erdat type vbak-erdat,
        RSDAT type VBEP-RSDAT,
*        VALUE_OLD type cdpos-VALUE_OLD,
        VDATU type vbak-VDATU,
        ettyp TYPE vbepvb-ettyp,
        edatu TYPE vbepvb-edatu,
        lddat type vbepvb-lddat,
        vrkme TYPE vbepvb-vrkme,
        wmeng TYPE vbepvb-wmeng,
        bmeng TYPE vbepvb-bmeng,
        olfmng TYPE vbepvb-olfmng,
        vsmng TYPE vbepvb-vsmng,
        LABST type mard-LABST,
        bstnk type vbak-bstnk,
        BSTDK type vbkd-BSTDK,
        BLDAT type likp-BLDAT,
        wadat_ist type likp-wadat_ist,
        erfmg type mseg-erfmg,
        vtweg type vbak-vtweg,
        inco1 type vbkd-inco1,
        VERPR type mbew-VERPR,
        PEINH type mbew-PEINH,
        WAERS type t001-WAERS,
        VERSG type mvke-VERSG,
        KUNWE type VEPVG-KUNWE,
        NAME2 type KNA1-NAME1,
       END OF vbep_ty_1.
DATA: vbep_out_1 TYPE STANDARD TABLE OF vbep_ty_1,
      lvbep_out_1 TYPE vbep_ty_1.


DATA:BEGIN OF tt_detail OCCURS 0,
           vbeln like vbak-vbeln,
           posnr like vbap-posnr,
     END OF tt_detail.

DATA:BEGIN OF t_detail OCCURS 0,
           vbeln like vbak-vbeln,
           posnr like vbap-posnr,
           gbsta like vbup-gbsta,
     END OF t_detail.

 

DATA: t_heading TYPE slis_t_listheader.
DATA: xvbap TYPE STANDARD TABLE OF vbapvb.
DATA: xvbep TYPE STANDARD TABLE OF vbepvb.
DATA: xvbup TYPE STANDARD TABLE OF vbup.
DATA: xvbfa TYPE STANDARD TABLE OF vbfa.
DATA: zvbap TYPE TABLE OF vbapvb.
DATA: lvbap TYPE vbapvb.
DATA: lvbep TYPE vbepvb.
DATA: lvbup TYPE vbup.
DATA: lvbfa TYPE vbfa.

 

SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-001.
SELECT-OPTIONS :        so_vkorg   FOR vbak-vkorg OBLIGATORY.        " Sales Organization
SELECTION-SCREEN END OF BLOCK b3.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-002.
SELECT-OPTIONS : so_auart  FOR vbak-auart,
                 so_vbeln  FOR vbak-vbeln,                                " Sales Document
                 so_ernam  FOR vbak-ernam,                                " Created By
                 so_erdat  FOR vbak-erdat OBLIGATORY,                     " Created On
                 so_kunnr  FOR vbak-kunnr,                                " Customer Number
                 so_matnr  FOR vbap-matnr ,                               " Material
                 so_matkl  FOR vbap-matkl,                                " Material Group
                 so_werks  FOR vbap-werks,                                " Plant
                 so_statu  FOR vbup-gbsta.                                " Status
SELECTION-SCREEN: END OF BLOCK b1.


START-OF-SELECTION.
    PERFORM get_data.

    LOOP AT t_detail.
        PERFORM read_vbup.
        PERFORM read_vbfa.
        PERFORM read_vbep.
        IF sy-subrc <> 0.
           CONTINUE.
        ENDIF.
        PERFORM check_deliveries.
    endloop.

    PERFORM get_scl_change_log.

    PERFORM get_order_info.
PERFORM alv USING t_heading.

*&---------------------------------------------------------------------*
*&      Form  read_vbup
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM read_vbup.

  SELECT * FROM  vbup INTO TABLE xvbup
          WHERE  vbeln  = t_detail-vbeln
          AND    posnr  = t_detail-posnr.

ENDFORM.                    " read_vbup
*&---------------------------------------------------------------------*
*&      Form  read_vbfa
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM read_vbfa.

  SELECT * FROM  vbfa INTO TABLE xvbfa
         WHERE  vbelv    = t_detail-vbeln
         AND    posnv    = t_detail-posnr
         AND    vbtyp_n  = 'J'.

ENDFORM.                    " read_vbfa
*&---------------------------------------------------------------------*
*&      Form  read_vbep
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM read_vbep.

  SELECT * FROM  vbep
         INTO TABLE xvbep
         WHERE  vbeln  =  t_detail-vbeln
         AND    posnr  =  t_detail-posnr.
*         AND    bmeng  > 0.

ENDFORM.                    " read_vbep

*&---------------------------------------------------------------------*
*&      Form  check_deliveries
*&---------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
FORM check_deliveries.

DATA TLINE TYPE i.

        CALL FUNCTION 'RV_SCHEDULE_CHECK_DELIVERIES'
            EXPORTING
              fbeleg                  = t_detail-vbeln
              fposnr                  = t_detail-posnr
            TABLES
              fvbfa                   = xvbfa
              fvbup                   = xvbup
              fxvbep                  = xvbep
              fvbap                   = zvbap
            EXCEPTIONS
              fehler_bei_lesen_fvbup  = 1
              fehler_bei_lesen_fxvbep = 2
              OTHERS                  = 3.

          IF sy-subrc <> 0.
            RETURN.
          ENDIF.

          clear tline.

          LOOP AT xvbep INTO lvbep.
            MOVE-CORRESPONDING lvbep TO lvbep_out.

*            IF lvbep-BMENG <> 0.
*               LOOP AT xvbfa INTO lvbfa.
*                  if sy-tabix = 1.
*                     move lvbfa-VBELN to lvbep_out-VBELV.
*                     MOVE lvbfa-POSNN to lvbep_out-POSNV.
*                  endif.
*               ENDLOOP.
*            endif.

            if sy-tabix = 1.
             IF lvbep-BMENG <> 0.
               LOOP AT xvbfa INTO lvbfa.
                  if sy-tabix = 1.
                     move lvbfa-VBELN to lvbep_out-VBELV.
                     MOVE lvbfa-POSNN to lvbep_out-POSNV.
                     tline = 1.
                  endif.
               ENDLOOP.
             endif.
            endif.

            if sy-tabix = 2.
             IF lvbep-BMENG <> 0.
               tline = tline + 1.
               LOOP AT xvbfa INTO lvbfa.
                  if sy-tabix = tline.
                     move lvbfa-VBELN to lvbep_out-VBELV.
                     MOVE lvbfa-POSNN to lvbep_out-POSNV.
                     EXIT.
                  endif.
               ENDLOOP.
             endif.
            endif.

            if sy-tabix = 3.
             IF lvbep-BMENG <> 0.
               tline = tline + 1.
               LOOP AT xvbfa INTO lvbfa.
                  if sy-tabix = tline.
                     move lvbfa-VBELN to lvbep_out-VBELV.
                     MOVE lvbfa-POSNN to lvbep_out-POSNV.
                     EXIT.
                  endif.
               ENDLOOP.
             endif.
            endif.

            if sy-tabix = 4.
             IF lvbep-BMENG <> 0.
               tline = tline + 1.
               LOOP AT xvbfa INTO lvbfa.
                  if sy-tabix = tline.
                     move lvbfa-VBELN to lvbep_out-VBELV.
                     MOVE lvbfa-POSNN to lvbep_out-POSNV.
                     EXIT.
                  endif.
               ENDLOOP.
             endif.
            endif.

            if sy-tabix = 5.
             IF lvbep-BMENG <> 0.
               tline = tline + 1.
               LOOP AT xvbfa INTO lvbfa.
                  if sy-tabix = tline.
                     move lvbfa-VBELN to lvbep_out-VBELV.
                     MOVE lvbfa-POSNN to lvbep_out-POSNV.
                     EXIT.
                  endif.
               ENDLOOP.
             endif.
            endif.

            if sy-tabix = 6.
             IF lvbep-BMENG <> 0.
               tline = tline + 1.
               LOOP AT xvbfa INTO lvbfa.
                  if sy-tabix = tline.
                     move lvbfa-VBELN to lvbep_out-VBELV.
                     MOVE lvbfa-POSNN to lvbep_out-POSNV.
                     EXIT.
                  endif.
               ENDLOOP.
             endif.
            endif.

            if sy-tabix = 7.
             IF lvbep-BMENG <> 0.
               tline = tline + 1.
               LOOP AT xvbfa INTO lvbfa.
                  if sy-tabix = tline.
                     move lvbfa-VBELN to lvbep_out-VBELV.
                     MOVE lvbfa-POSNN to lvbep_out-POSNV.
                     EXIT.
                  endif.
               ENDLOOP.
             endif.
            endif.

            if sy-tabix = 8.
             IF lvbep-BMENG <> 0.
               tline = tline + 1.
               LOOP AT xvbfa INTO lvbfa.
                  if sy-tabix = tline.
                     move lvbfa-VBELN to lvbep_out-VBELV.
                     MOVE lvbfa-POSNN to lvbep_out-POSNV.
                     EXIT.
                  endif.
               ENDLOOP.
             endif.
            endif.

            APPEND lvbep_out TO vbep_out.
            clear lvbep_out.
          ENDLOOP.

ENDFORM.                    " check_deliveries
*&---------------------------------------------------------------------*
*&      Form  ALV
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM alv USING  t_heading  TYPE slis_t_listheader.

data: gr_table type ref to cl_salv_table.
data: gr_functions type ref to cl_salv_functions.
data: gr_display type ref to cl_salv_display_settings.
data: gr_columns type ref to cl_salv_columns_table.
data: gr_column type ref to cl_salv_column_table.
data: gr_sorts type ref to cl_salv_sorts.
data: gr_agg type ref to cl_salv_aggregations.
data: gr_filter type ref to cl_salv_filters.
data: gr_layout type ref to cl_salv_layout.

data: key type salv_s_layout_key.
data: color type lvc_s_colo.

  cl_salv_table=>factory( IMPORTING r_salv_table = gr_table CHANGING t_table = vbep_out_1 ).

  gr_functions = gr_table->get_functions( ).
  gr_functions->set_all( abap_true ).
  gr_display = gr_table->get_display_settings( ).
  gr_display->set_striped_pattern( cl_salv_display_settings=>true ).

  gr_layout = gr_table->get_layout( ).
  key-report = sy-repid.
  gr_layout->set_key( key ).
  gr_layout->set_save_restriction( cl_salv_layout=>restrict_none ).
  gr_layout->set_default( abap_true ).

  gr_table->display( ).

 

 

ENDFORM.                    " ALV
*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GET_DATA .
    select a~vbeln a~posnr into CORRESPONDING FIELDS OF TABLE tt_detail
       from vbap as a inner join vbak as b on a~vbeln = b~vbeln
       where b~VKORG  in so_vkorg and
          b~vbeln     IN so_vbeln AND
          b~auart     in so_auart AND
          b~ernam     IN so_ernam AND
          b~erdat     IN so_erdat AND
          b~kunnr     IN so_kunnr AND
          a~matnr     IN so_matnr AND
          a~matkl     IN so_matkl AND
          a~werks     IN so_werks.

    IF tt_detail[] is initial.

    ELSE.
       IF so_statu[] is initial.
          select vbeln posnr gbsta into table t_detail
                from vbup
                FOR ALL ENTRIES IN tt_detail
                where vbeln = tt_detail-vbeln and
                      posnr = tt_detail-posnr.
       else.
          select vbeln posnr gbsta into table t_detail
                from vbup
                FOR ALL ENTRIES IN tt_detail
                where gbsta in so_statu and
                      vbeln = tt_detail-vbeln and
                      posnr = tt_detail-posnr.
       endif.
    ENDIF.
ENDFORM.                    " GET_DATA
*&---------------------------------------------------------------------*
*&      Form  GET_SCL_CHANGE_LOG
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GET_SCL_CHANGE_LOG .

data: t_changer like cdhdr-changenr.
data: t_VALUE_OLD like cdpos-VALUE_OLD.

     loop at vbep_out into lvbep_out.
          clear lvbep_out_1.
          MOVE-CORRESPONDING lvbep_out TO lvbep_out_1.


          select single CHANGENR into t_changer
                 from cdpos where
                 OBJECTCLAS = 'VERKBELEG' and
                 OBJECTID = lvbep_out_1-vbeln and
                 TABNAME = 'VBEP' and
                 FNAME = 'EDATU'.

          if sy-subrc = 0.
              select single VALUE_OLD into t_VALUE_OLD
                 from cdpos
                 where OBJECTCLAS = 'VERKBELEG' and
                 OBJECTID = lvbep_out_1-vbeln and
                 changenr = t_changer and
                       TABNAME = 'VBEP' and
                       FNAME = 'EDATU'.
              write t_VALUE_OLD+0(8) to lvbep_out_1-RSDAT.
          endif.

          select single matnr matkl pstyv WERKS LGORT into
             (lvbep_out_1-matnr,
              lvbep_out_1-matkl,
              lvbep_out_1-pstyv,
              lvbep_out_1-werks,
              lvbep_out_1-lgort)
              from vbap where vbeln = lvbep_out_1-vbeln and
                               posnr = lvbep_out_1-posnr.

          select single gbsta into lvbep_out_1-gbsta
               from vbup
               where vbeln = lvbep_out_1-vbeln and
                     posnr = lvbep_out_1-posnr.

          select single vkorg kunnr ERDAT ERNAM VDATU vtweg BSTNK BSTDK into
              (lvbep_out_1-vkorg,
               lvbep_out_1-kunnr,
               lvbep_out_1-erdat,
               lvbep_out_1-ernam,
               lvbep_out_1-vdatu,
               lvbep_out_1-vtweg,
               lvbep_out_1-bstnk,
               lvbep_out_1-bstdk)
              from vbak
              where vbeln = lvbep_out_1-vbeln.

          select SINGLE name1 into lvbep_out_1-name1
                from kna1
                where kunnr = lvbep_out_1-kunnr.

          select SINGLE inco1 into lvbep_out_1-inco1
                from vbkd
                where vbeln = lvbep_out_1-vbeln.

          select SINGLE a~KUNNR b~NAME1 into
                 (lvbep_out_1-KUNWE,
                  lvbep_out_1-NAME2)
                from vbpa as a inner join kna1 as b
                on a~kunnr = b~kunnr
                where a~vbeln = lvbep_out_1-vbeln
                  and a~PARVW = 'WE'.

*          if lvbep_out_1-pstyv = 'Y1' or lvbep_out_1-pstyv = 'YYAB'.
*             select SINGLE vbeln erdat into
*                  (lvbep_out_1-ebeln,
*                   lvbep_out_1-aedat)
*                from vbfa
*                where vbelv = lvbep_out_1-vbeln and
*                      posnv = lvbep_out_1-posnr and
*                      VBTYP_N = 'V'.
*          endif.

              select SINGLE erdat into
                  lvbep_out_1-BLDAT
                from vbfa
                where vbelv = lvbep_out_1-vbeln and
                      posnv = lvbep_out_1-posnr and
                      vbeln = lvbep_out-vbelv and
                      posnn = lvbep_out-posnv and
                      VBTYP_N = 'J'.

*             select SINGLE RFMNG erdat into
*                  (lvbep_out_1-erfmg,
*                   lvbep_out_1-wadat_ist)
*                from vbfa
*                where vbelv = lvbep_out_1-vbeln and
*                      posnv = lvbep_out_1-posnr and
*                      vbeln = lvbep_out-vbelv and
*                      posnn = lvbep_out-posnv and
*                      VBTYP_N = 'R'.

             select SINGLE RFMNG erdat into
                  (lvbep_out_1-erfmg,
                   lvbep_out_1-wadat_ist)
                from vbfa
                where vbelv = lvbep_out-vbelv and
                      posnv = lvbep_out-posnv and
                      VBTYP_N = 'R'.

          if lvbep_out_1-werks = '3300' or lvbep_out_1-werks = '330E'.
              select single MAKTX into lvbep_out_1-maktx
                    from makt
                    where MATNR = lvbep_out_1-matnr
                      and SPRAS = '1'.
          else.
              select single MAKTX into lvbep_out_1-maktx
                    from makt
                    where MATNR = lvbep_out_1-matnr
                      and SPRAS = 'EN'.
          endif.

          select single VERSG into lvbep_out_1-VERSG
                 from mvke
                 where MATNR = lvbep_out_1-matnr and
                       VKORG = lvbep_out_1-vkorg and
                       VTWEG = lvbep_out_1-vtweg.


          select sum( LABST ) into lvbep_out_1-labst
               from mard
               where matnr = lvbep_out_1-matnr and
                     werks = lvbep_out_1-werks.

          select single VERPR PEINH into
               (lvbep_out_1-VERPR,lvbep_out_1-PEINH)
               from mbew
               where matnr = lvbep_out_1-matnr and
                     BWKEY = lvbep_out_1-werks.

          select single a~WAERS into lvbep_out_1-waers
               from t001 as a inner join t001k as b
               on a~BUKRS = b~BUKRS
               where b~BWKEY = lvbep_out_1-werks.

          APPEND lvbep_out_1 TO vbep_out_1.
     endloop.
ENDFORM.                    " GET_SCL_CHANGE_LOG
*&---------------------------------------------------------------------*
*&      Form  GET_ORDER_INFO
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GET_ORDER_INFO .

ENDFORM.                    " GET_ORDER_INFO

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值