pumps report泵的相关信息订单

来源:互联网 发布:淘宝访客数据 编辑:程序博客网 时间:2024/05/16 02:11

通过屏幕录入销售订单,销售订单创建日期,发货单,实际发货日期,来实现输出泵的相关信息,泵判断的标准是:MVKE-MTPOS = ‘ZPOR’,此处是方法一:先全部取出所有物料的屏幕信息,然后delete lt_display where mtpos ne 'ZPOR',后续博客更新改进提升效率的方法。

*&---------------------------------------------------------------------**& Report  pumps report*&---------------------------------------------------------------------**&PROGRAM NAME : <ZSDRP204>*---------------------------------------------------------------------** VERSION:            V1.0* DATE CREATED :      2016/08/02* CREATED BY   :      DingQunjing* TRANSPORT REQUEST:  XXXXXXX* DESCRIPTION  :      pumps report* request raised by:  XXXXXXREPORT zsdrp204.********************************* INNITIALIZATION********************************TABLES : vbap,vbak,mara,mast,mapl,aufm,likp,lips,afvc,afvv.TYPES : BEGIN OF ltype_vbak,        vbeln TYPE vbak-vbeln,        erdat TYPE vbak-erdat,        END OF ltype_vbak.TYPES : BEGIN OF ltype_vbap,        vbeln TYPE vbap-vbeln,        posnr TYPE vbap-posnr,        matnr TYPE vbap-matnr,        edatu TYPE vbep-edatu,        END OF ltype_vbap.TYPES : BEGIN OF ltype_mara,        matnr TYPE mara-matnr,        normt TYPE mara-normt,        END OF ltype_mara.TYPES : BEGIN OF ltype_aufm,        bldat TYPE aufm-bldat,        matnr TYPE aufm-matnr,        kdauf TYPE aufm-kdauf,        kdpos TYPE aufm-kdpos,        END OF ltype_aufm.TYPES : BEGIN OF ltype_vbfa,        vbelv TYPE vbfa-vbelv,        posnv TYPE vbfa-posnv,        vbeln TYPE vbfa-vbeln,        posnn TYPE vbfa-posnn,        END OF ltype_vbfa.TYPES : BEGIN OF ltype_lips,        vbeln TYPE lips-vbeln,        posnr TYPE lips-posnr,        lfimg TYPE lips-lfimg,        END OF ltype_lips.TYPES : BEGIN OF ltype_mast,        matnr TYPE mast-matnr,        andat TYPE mast-andat,        END OF ltype_mast.TYPES : BEGIN OF ltype_mapl,        matnr TYPE mapl-matnr,        andat TYPE mapl-andat,        END OF ltype_mapl.TYPES : BEGIN OF ltype_mvke,        matnr TYPE mvke-matnr,        mtpos TYPE mvke-mtpos,        END OF ltype_mvke.TYPES : BEGIN OF ltype_likp,        vbeln TYPE likp-vbeln,        wadat_ist TYPE likp-wadat_ist,        END OF ltype_likp.TYPES : BEGIN OF ltype_afko,        aufnr TYPE afko-aufnr,        gstrp TYPE afko-gstrp,        gltrp TYPE afko-gltrp,        kdauf TYPE afpo-kdauf,        kdpos TYPE afpo-kdpos,        aufpl TYPE afko-aufpl,        END OF ltype_afko.TYPES : BEGIN OF ltype_afvv,        aufpl TYPE afvv-aufpl,        iedd TYPE  afvv-iedd,        aplzl TYPE afvv-aplzl,        END OF ltype_afvv.DATA : lt_vbak TYPE TABLE OF ltype_vbak,       ls_vbak LIKE LINE OF lt_vbak.DATA : lt_vbap TYPE TABLE OF ltype_vbap,       ls_vbap LIKE LINE OF lt_vbap.DATA : lt_mara TYPE TABLE OF ltype_mara,       ls_mara LIKE LINE OF lt_mara.DATA : lt_aufm TYPE TABLE OF ltype_aufm,       ls_aufm LIKE LINE OF lt_aufm.DATA : lt_aufm2 TYPE TABLE OF ltype_aufm,       ls_aufm2 LIKE LINE OF lt_aufm2.DATA : lt_vbfa TYPE TABLE OF ltype_vbfa,       ls_vbfa LIKE LINE OF lt_vbfa.DATA : lt_lips TYPE TABLE OF ltype_lips,       ls_lips LIKE LINE OF lt_lips.DATA : lt_mast TYPE TABLE OF ltype_mast,       ls_mast LIKE LINE OF lt_mast.DATA : lt_mapl TYPE TABLE OF ltype_mapl,       ls_mapl LIKE LINE OF lt_mapl.DATA : lt_mvke TYPE TABLE OF ltype_mvke,       ls_mvke LIKE LINE OF lt_mvke.DATA : lt_likp TYPE TABLE OF ltype_likp,       ls_likp LIKE LINE OF lt_likp.DATA : lt_afko TYPE TABLE OF ltype_afko,       ls_afko LIKE LINE OF lt_afko.DATA : lt_afvv TYPE TABLE OF ltype_afvv,       ls_afvv LIKE LINE OF lt_afvv.DATA : lt_afvc TYPE STANDARD TABLE OF afvc.DATA : ls_afvc LIKE LINE OF lt_afvc.DATA : lt_display TYPE TABLE OF zssdrp204_stru_list,       ls_display LIKE LINE OF lt_display.********************************* SELECTION-SCREEN********************************SELECTION-SCREEN BEGIN OF BLOCK blk01 WITH FRAME.SELECT-OPTIONS  :m_vbeln FOR vbap-vbeln,m_erdat FOR vbak-erdat,m_vbelv FOR likp-vbeln,m_wadat FOR likp-wadat_ist.PARAMETERS : m_pumps AS CHECKBOX DEFAULT 'X'.SELECTION-SCREEN END OF BLOCK blk01.********************************* START OF SELECTION********************************IF m_vbeln IS INITIAL AND m_vbelv IS INITIAL.  MESSAGE 'Please input sales order or delivery order' TYPE 'E'.ELSEIF m_vbeln IS NOT INITIAL AND m_vbelv IS INITIAL.  PERFORM frm_get_data1.ELSEIF m_vbeln IS INITIAL AND m_vbelv IS NOT INITIAL.  PERFORM frm_get_data2.ELSEIF m_vbeln IS NOT INITIAL AND m_vbelv IS NOT INITIAL.  PERFORM frm_get_data3.ENDIF.PERFORM frm_alv_display.*&---------------------------------------------------------------------**&      Form  FRM_GET_DATA1*&---------------------------------------------------------------------**       text*----------------------------------------------------------------------**  -->  p1        text*  <--  p2        text*----------------------------------------------------------------------*FORM frm_get_data1 .  CLEAR lt_vbak[].  SELECT    vbeln    erdat    FROM vbak    INTO CORRESPONDING FIELDS OF TABLE lt_vbak    WHERE vbeln IN m_vbeln    AND   erdat IN m_erdat.  IF lt_vbak IS NOT INITIAL.    CLEAR lt_vbap[].    SELECT      vbap~vbeln      vbap~posnr      vbap~matnr      vbep~edatu      FROM vbap INNER JOIN vbep ON vbap~vbeln = vbep~vbeln AND vbap~posnr = vbep~posnr      INTO CORRESPONDING FIELDS OF TABLE lt_vbap      FOR ALL ENTRIES IN lt_vbak      WHERE vbap~vbeln = lt_vbak-vbeln      AND etenr = '1'.    IF  lt_vbap IS NOT INITIAL.      CLEAR lt_mara[].      SELECT        matnr        normt        FROM mara        INTO CORRESPONDING FIELDS OF TABLE lt_mara        FOR ALL ENTRIES IN lt_vbap        WHERE matnr = lt_vbap-matnr.      CLEAR lt_mast[].      SELECT        matnr        andat        FROM mast        INTO CORRESPONDING FIELDS OF TABLE lt_mast        FOR ALL ENTRIES IN lt_vbap        WHERE matnr = lt_vbap-matnr        AND werks = '0080'.      CLEAR lt_mapl[].      SELECT        matnr        andat        FROM mapl        INTO CORRESPONDING FIELDS OF TABLE lt_mapl        FOR ALL ENTRIES IN lt_vbap        WHERE matnr = lt_vbap-matnr        AND werks = '0080'.      CLEAR lt_mvke[].      SELECT        matnr        mtpos        FROM mvke        INTO CORRESPONDING FIELDS OF TABLE lt_mvke        FOR ALL ENTRIES IN lt_vbap        WHERE matnr = lt_vbap-matnr        AND vkorg = '0080'.      CLEAR lt_vbfa[].      SELECT        vbelv        posnv        vbeln        posnn        FROM vbfa        INTO CORRESPONDING FIELDS OF TABLE lt_vbfa        FOR ALL ENTRIES IN lt_vbap        WHERE vbelv = lt_vbap-vbeln        AND   posnn = lt_vbap-posnr        AND   vbtyp_n = 'J'.      IF lt_vbfa IS NOT INITIAL.        CLEAR lt_lips[].        SELECT          vbeln          posnr          lfimg          FROM lips          INTO CORRESPONDING FIELDS OF TABLE lt_lips          FOR ALL ENTRIES IN lt_vbfa          WHERE vbeln = lt_vbfa-vbeln          AND   posnr = lt_vbfa-posnn.        CLEAR lt_likp[].        SELECT          vbeln          wadat_ist          FROM likp          INTO CORRESPONDING FIELDS OF TABLE lt_likp          FOR ALL ENTRIES IN lt_vbfa          WHERE vbeln = lt_vbfa-vbeln.      ENDIF.      CLEAR lt_afko[].      SELECT        afko~aufnr        afko~gstrp        afko~gltrp        afko~aufpl        afpo~kdauf        afpo~kdpos       FROM afko INNER JOIN afpo ON afko~aufnr = afpo~aufnr       INTO CORRESPONDING FIELDS OF TABLE lt_afko       FOR ALL ENTRIES IN lt_vbap       WHERE afpo~kdauf = lt_vbap-vbeln       AND   afpo~kdpos = lt_vbap-posnr       AND   afko~plnbez = lt_vbap-matnr.      CLEAR lt_aufm[].      SELECT        bldat        matnr        kdauf        kdpos        FROM aufm        INTO CORRESPONDING FIELDS OF TABLE lt_aufm        FOR ALL ENTRIES IN lt_vbap        WHERE matnr = lt_vbap-matnr        AND   kdauf = lt_vbap-vbeln        AND   kdpos = lt_vbap-posnr        AND   werks = '0080'        AND   bwart = '101'.      CLEAR lt_aufm2[].      SELECT        bldat        matnr        kdauf        kdpos        FROM aufm        INTO CORRESPONDING FIELDS OF TABLE lt_aufm2        FOR ALL ENTRIES IN lt_vbap        WHERE kdauf = lt_vbap-vbeln        AND   kdpos = lt_vbap-posnr        AND   werks = '0080'        AND   bwart = '261'.      IF lt_afko IS NOT INITIAL.        CLEAR lt_afvv[].        SELECT          aufpl          iedd          aplzl          FROM afvv        INTO CORRESPONDING FIELDS OF TABLE lt_afvv        FOR ALL ENTRIES IN lt_afko        WHERE aufpl = lt_afko-aufpl.        SELECT * FROM afvc        INTO CORRESPONDING FIELDS OF TABLE lt_afvc        FOR ALL ENTRIES IN lt_afko        WHERE aufpl = lt_afko-aufpl.      ENDIF.    ENDIF.  ENDIF.  LOOP AT lt_vbap INTO ls_vbap.    APPEND ls_vbap TO lt_display.  ENDLOOP.  CLEAR ls_display.  LOOP AT lt_display INTO ls_display.    CLEAR ls_vbak.    READ TABLE lt_vbak INTO ls_vbak WITH KEY vbeln = ls_display-vbeln.    ls_display-erdat = ls_vbak-erdat.    CLEAR ls_mara.    READ TABLE lt_mara INTO ls_mara WITH KEY matnr = ls_display-matnr.    ls_display-normt = ls_mara-normt.    CLEAR ls_mast.    READ TABLE lt_mast INTO ls_mast WITH KEY matnr = ls_display-matnr.    ls_display-zbandat = ls_mast-andat.    CLEAR ls_mapl.    READ TABLE lt_mapl INTO ls_mapl WITH KEY matnr = ls_display-matnr.    ls_display-zrandat = ls_mapl-andat.    CLEAR ls_mvke.    READ TABLE lt_mvke INTO ls_mvke WITH KEY matnr = ls_display-matnr.    ls_display-mtpos = ls_mvke-mtpos.    CLEAR ls_vbfa.    READ TABLE lt_vbfa INTO ls_vbfa WITH KEY vbelv = ls_display-vbeln posnv = ls_display-posnv.    ls_display-vbelv = ls_vbfa-vbeln.    ls_display-posnn = ls_vbfa-posnn.    CLEAR ls_lips.    READ TABLE lt_lips INTO ls_lips WITH KEY vbeln = ls_display-vbelv posnr = ls_display-posnn.    ls_display-lfimg = ls_lips-lfimg.    CLEAR ls_likp.    READ TABLE lt_likp INTO ls_likp WITH KEY vbeln = ls_display-vbelv.    ls_display-wadat_ist = ls_likp-wadat_ist.    CLEAR ls_afko.    READ TABLE lt_afko INTO ls_afko WITH KEY kdauf = ls_display-vbeln kdpos = ls_display-posnv.    ls_display-gstrp = ls_afko-gstrp.    ls_display-gltrp = ls_afko-gltrp.    CLEAR ls_aufm.    READ TABLE lt_aufm INTO ls_aufm WITH KEY matnr = ls_display-matnr kdauf = ls_display-vbeln kdpos = ls_display-posnv.    ls_display-zdbldat = ls_aufm-bldat.    CLEAR ls_aufm2.    READ TABLE lt_aufm2 INTO ls_aufm2 WITH KEY kdauf = ls_display-vbeln kdpos = ls_display-posnv.    ls_display-zlbldat = ls_aufm2-bldat.    "//Delay days    ls_display-erdat2 = ls_display-zdbldat - ls_display-edatu.    IF ls_display-erdat2 < 0.      ls_display-erdat2 = 0.    ENDIF.    "//Contract working days    ls_display-erdat3 = ls_display-edatu - ls_display-erdat.    "//Actually working days    ls_display-erdat4 = ls_display-zlbldat - ls_display-erdat.    IF ls_display-erdat4 < 0.      ls_display-erdat4 = 0.    ENDIF.    LOOP AT lt_afvc INTO ls_afvc WHERE aufpl = ls_afko-aufpl.      FIND '装配' IN ls_afvc-ltxa1.      IF sy-subrc = 0.        READ TABLE lt_afvv INTO ls_afvv WITH KEY aufpl = ls_afko-aufpl                                                 aplzl = ls_afvc-aplzl.        IF sy-subrc = 0.          ls_display-date_1 = ls_afvv-iedd.        ENDIF.      ENDIF.      FIND '试泵' IN ls_afvc-ltxa1.      IF sy-subrc = 0.        READ TABLE lt_afvv INTO ls_afvv WITH KEY aufpl = ls_afko-aufpl                                                 aplzl = ls_afvc-aplzl.        IF sy-subrc = 0.          ls_display-date_2 = ls_afvv-iedd.        ENDIF.      ENDIF.      FIND '喷漆' IN ls_afvc-ltxa1.      IF sy-subrc = 0.        READ TABLE lt_afvv INTO ls_afvv WITH KEY aufpl = ls_afko-aufpl                                                 aplzl = ls_afvc-aplzl.        IF sy-subrc = 0.          ls_display-date_3 = ls_afvv-iedd.        ENDIF.      ENDIF.      FIND '检验' IN ls_afvc-ltxa1.      IF sy-subrc = 0.        READ TABLE lt_afvv INTO ls_afvv WITH KEY aufpl = ls_afko-aufpl                                                 aplzl = ls_afvc-aplzl.        IF sy-subrc = 0.          ls_display-date_4 = ls_afvv-iedd.        ENDIF.      ENDIF.      FIND '包装' IN ls_afvc-ltxa1.      IF sy-subrc = 0.        READ TABLE lt_afvv INTO ls_afvv WITH KEY aufpl = ls_afko-aufpl                                                 aplzl = ls_afvc-aplzl.        IF sy-subrc = 0.          ls_display-date_5 = ls_afvv-iedd.        ENDIF.      ENDIF.    ENDLOOP.    MODIFY lt_display FROM ls_display.  ENDLOOP.  "//判断物料号是否是泵  IF m_pumps = 'X'.    DELETE lt_display WHERE mtpos NE 'ZPOR'.  ENDIF.  DELETE lt_display WHERE vbelv NOT IN m_vbelv                      OR  wadat_ist NOT IN m_wadat.ENDFORM.                    " FRM_GET_DATA1*&---------------------------------------------------------------------**&      Form  FRM_GET_DATA2*&---------------------------------------------------------------------**       text*----------------------------------------------------------------------**  -->  p1        text*  <--  p2        text*----------------------------------------------------------------------*FORM frm_get_data2 .  CLEAR lt_likp[].  SELECT    vbeln    wadat_ist    FROM likp    INTO CORRESPONDING FIELDS OF TABLE lt_likp    WHERE vbeln IN m_vbelv    AND wadat_ist IN m_wadat.  IF lt_likp IS NOT INITIAL.    CLEAR lt_lips[].    SELECT      vbeln      posnr      lfimg      FROM lips      INTO CORRESPONDING FIELDS OF TABLE lt_lips      FOR ALL ENTRIES IN lt_likp      WHERE vbeln = lt_likp-vbeln.    IF lt_lips IS NOT INITIAL.      CLEAR lt_vbfa[].      SELECT        vbelv        posnv        vbeln        posnn        FROM vbfa        INTO CORRESPONDING FIELDS OF TABLE lt_vbfa        FOR ALL ENTRIES IN lt_lips        WHERE vbeln = lt_lips-vbeln        AND   posnn = lt_lips-posnr        AND   vbtyp_n = 'J'.      IF lt_vbfa IS NOT INITIAL.        CLEAR lt_vbak[].        SELECT          vbeln          erdat          FROM vbak          INTO CORRESPONDING FIELDS OF TABLE lt_vbak          FOR ALL ENTRIES IN lt_vbfa          WHERE vbeln = lt_vbfa-vbelv.        IF lt_vbak IS NOT INITIAL.          CLEAR lt_vbap[].          SELECT            vbap~vbeln            vbap~posnr            vbap~matnr            vbep~edatu            FROM vbap INNER JOIN vbep ON vbap~vbeln = vbep~vbeln AND vbap~posnr = vbep~posnr            INTO CORRESPONDING FIELDS OF TABLE lt_vbap            FOR ALL ENTRIES IN lt_vbak            WHERE vbap~vbeln = lt_vbak-vbeln            AND etenr = '1'.          IF lt_vbap IS NOT INITIAL.            CLEAR lt_mara[].            SELECT              matnr              normt              FROM mara              INTO CORRESPONDING FIELDS OF TABLE lt_mara              FOR ALL ENTRIES IN lt_vbap              WHERE matnr = lt_vbap-matnr.            CLEAR lt_mast[].            SELECT              matnr              andat              FROM mast              INTO CORRESPONDING FIELDS OF TABLE lt_mast              FOR ALL ENTRIES IN lt_vbap              WHERE matnr = lt_vbap-matnr              AND werks = '0080'.            CLEAR lt_mapl[].            SELECT              matnr              andat              FROM mapl              INTO CORRESPONDING FIELDS OF TABLE lt_mapl              FOR ALL ENTRIES IN lt_vbap              WHERE matnr = lt_vbap-matnr              AND werks = '0080'.            CLEAR lt_mvke[].            SELECT              matnr              mtpos              FROM mvke              INTO CORRESPONDING FIELDS OF TABLE lt_mvke              FOR ALL ENTRIES IN lt_vbap              WHERE matnr = lt_vbap-matnr              AND vkorg = '0080'.            CLEAR lt_afko[].            SELECT              afko~aufnr              afko~gstrp              afko~gltrp              afko~aufpl              afpo~kdauf              afpo~kdpos             FROM afko INNER JOIN afpo ON afko~aufnr = afpo~aufnr             INTO CORRESPONDING FIELDS OF TABLE lt_afko             FOR ALL ENTRIES IN lt_vbap             WHERE afpo~kdauf = lt_vbap-vbeln             AND   afpo~kdpos = lt_vbap-posnr             AND   afko~plnbez = lt_vbap-matnr.            CLEAR lt_aufm[].            SELECT              bldat              matnr              kdauf              kdpos              FROM aufm              INTO CORRESPONDING FIELDS OF TABLE lt_aufm              FOR ALL ENTRIES IN lt_vbap              WHERE matnr = lt_vbap-matnr              AND   kdauf = lt_vbap-vbeln              AND   kdpos = lt_vbap-posnr              AND   werks = '0080'              AND   bwart = '101'.            CLEAR lt_aufm2[].            SELECT              bldat              matnr              kdauf              kdpos              FROM aufm              INTO CORRESPONDING FIELDS OF TABLE lt_aufm2              FOR ALL ENTRIES IN lt_vbap              WHERE kdauf = lt_vbap-vbeln              AND   kdpos = lt_vbap-posnr              AND   werks = '0080'              AND   bwart = '261'.            IF lt_afko IS NOT INITIAL.              CLEAR lt_afvv[].              SELECT                aufpl                iedd                aplzl                FROM afvv              INTO CORRESPONDING FIELDS OF TABLE lt_afvv              FOR ALL ENTRIES IN lt_afko              WHERE aufpl = lt_afko-aufpl.              SELECT * FROM afvc              INTO CORRESPONDING FIELDS OF TABLE lt_afvc              FOR ALL ENTRIES IN lt_afko              WHERE aufpl = lt_afko-aufpl.            ENDIF.          ENDIF.        ENDIF.      ENDIF.    ENDIF.  ENDIF.  LOOP AT lt_vbap INTO ls_vbap.    APPEND ls_vbap TO lt_display.  ENDLOOP.  CLEAR ls_display.  LOOP AT lt_display INTO ls_display.    CLEAR ls_vbak.    READ TABLE lt_vbak INTO ls_vbak WITH KEY vbeln = ls_display-vbeln.    ls_display-erdat = ls_vbak-erdat.    CLEAR ls_mara.    READ TABLE lt_mara INTO ls_mara WITH KEY matnr = ls_display-matnr.    ls_display-normt = ls_mara-normt.    CLEAR ls_mast.    READ TABLE lt_mast INTO ls_mast WITH KEY matnr = ls_display-matnr.    ls_display-zbandat = ls_mast-andat.    CLEAR ls_mapl.    READ TABLE lt_mapl INTO ls_mapl WITH KEY matnr = ls_display-matnr.    ls_display-zrandat = ls_mapl-andat.    CLEAR ls_mvke.    READ TABLE lt_mvke INTO ls_mvke WITH KEY matnr = ls_display-matnr.    ls_display-mtpos = ls_mvke-mtpos.    CLEAR ls_vbfa.    READ TABLE lt_vbfa INTO ls_vbfa WITH KEY vbelv = ls_display-vbeln posnv = ls_display-posnv.    ls_display-vbelv = ls_vbfa-vbeln.    ls_display-posnn = ls_vbfa-posnn.    CLEAR ls_lips.    READ TABLE lt_lips INTO ls_lips WITH KEY vbeln = ls_display-vbelv posnr = ls_display-posnn.    ls_display-lfimg = ls_lips-lfimg.    CLEAR ls_likp.    READ TABLE lt_likp INTO ls_likp WITH KEY vbeln = ls_display-vbelv.    ls_display-wadat_ist = ls_likp-wadat_ist.    CLEAR ls_afko.    READ TABLE lt_afko INTO ls_afko WITH KEY kdauf = ls_display-vbeln kdpos = ls_display-posnv.    ls_display-gstrp = ls_afko-gstrp.    ls_display-gltrp = ls_afko-gltrp.    CLEAR ls_aufm.    READ TABLE lt_aufm INTO ls_aufm WITH KEY matnr = ls_display-matnr kdauf = ls_display-vbeln kdpos = ls_display-posnv.    ls_display-zdbldat = ls_aufm-bldat.    CLEAR ls_aufm2.    READ TABLE lt_aufm2 INTO ls_aufm2 WITH KEY kdauf = ls_display-vbeln kdpos = ls_display-posnv.    ls_display-zlbldat = ls_aufm2-bldat.    "//Delay days    ls_display-erdat2 = ls_display-zdbldat - ls_display-edatu.    IF ls_display-erdat2 < 0.      ls_display-erdat2 = 0.    ENDIF.    "//Contract working days    ls_display-erdat3 = ls_display-edatu - ls_display-erdat.    "//Actually working days    ls_display-erdat4 = ls_display-zlbldat - ls_display-erdat.    IF ls_display-erdat4 < 0.      ls_display-erdat4 = 0.    ENDIF.    LOOP AT lt_afvc INTO ls_afvc WHERE aufpl = ls_afko-aufpl.      FIND '装配' IN ls_afvc-ltxa1.      IF sy-subrc = 0.        READ TABLE lt_afvv INTO ls_afvv WITH KEY aufpl = ls_afko-aufpl                                                 aplzl = ls_afvc-aplzl.        IF sy-subrc = 0.          ls_display-date_1 = ls_afvv-iedd.        ENDIF.      ENDIF.      FIND '试泵' IN ls_afvc-ltxa1.      IF sy-subrc = 0.        READ TABLE lt_afvv INTO ls_afvv WITH KEY aufpl = ls_afko-aufpl                                                 aplzl = ls_afvc-aplzl.        IF sy-subrc = 0.          ls_display-date_2 = ls_afvv-iedd.        ENDIF.      ENDIF.      FIND '喷漆' IN ls_afvc-ltxa1.      IF sy-subrc = 0.        READ TABLE lt_afvv INTO ls_afvv WITH KEY aufpl = ls_afko-aufpl                                                 aplzl = ls_afvc-aplzl.        IF sy-subrc = 0.          ls_display-date_3 = ls_afvv-iedd.        ENDIF.      ENDIF.      FIND '检验' IN ls_afvc-ltxa1.      IF sy-subrc = 0.        READ TABLE lt_afvv INTO ls_afvv WITH KEY aufpl = ls_afko-aufpl                                                 aplzl = ls_afvc-aplzl.        IF sy-subrc = 0.          ls_display-date_4 = ls_afvv-iedd.        ENDIF.      ENDIF.      FIND '包装' IN ls_afvc-ltxa1.      IF sy-subrc = 0.        READ TABLE lt_afvv INTO ls_afvv WITH KEY aufpl = ls_afko-aufpl                                                 aplzl = ls_afvc-aplzl.        IF sy-subrc = 0.          ls_display-date_5 = ls_afvv-iedd.        ENDIF.      ENDIF.    ENDLOOP.    MODIFY lt_display FROM ls_display.  ENDLOOP.  "//判断物料号是否是泵  IF m_pumps = 'X'.    DELETE lt_display WHERE mtpos NE 'ZPOR'.  ENDIF.  DELETE lt_display WHERE vbeln NOT IN m_vbeln                      OR  erdat NOT IN m_erdat.ENDFORM.                    " FRM_GET_DATA2*&---------------------------------------------------------------------**&      Form  FRM_GET_DATA3*&---------------------------------------------------------------------**       text*----------------------------------------------------------------------**  -->  p1        text*  <--  p2        text*----------------------------------------------------------------------*FORM frm_get_data3 .  CLEAR lt_vbfa[].  SELECT    vbelv    posnv    vbeln    posnn    FROM vbfa    INTO CORRESPONDING FIELDS OF TABLE lt_vbfa    WHERE vbelv IN m_vbeln    AND   vbeln IN m_vbelv    AND   vbtyp_n = 'J'.  IF  lt_vbfa IS NOT INITIAL.    CLEAR lt_lips[].    SELECT      vbeln      posnr      lfimg      FROM lips      INTO CORRESPONDING FIELDS OF TABLE lt_lips      FOR ALL ENTRIES IN lt_vbfa      WHERE vbeln = lt_vbfa-vbeln      AND   posnr = lt_vbfa-posnn.    CLEAR lt_likp[].    SELECT      vbeln      wadat_ist      FROM likp      INTO CORRESPONDING FIELDS OF TABLE lt_likp      FOR ALL ENTRIES IN lt_vbfa      WHERE vbeln = lt_vbfa-vbeln.    CLEAR lt_vbak[].    SELECT      vbeln      erdat      FROM vbak      INTO CORRESPONDING FIELDS OF TABLE lt_vbak      FOR ALL ENTRIES IN lt_vbfa      WHERE vbeln = lt_vbfa-vbelv.  ENDIF.  IF lt_vbak IS NOT INITIAL.    CLEAR lt_vbap[].    SELECT      vbap~vbeln      vbap~posnr      vbap~matnr      vbep~edatu      FROM vbap INNER JOIN vbep ON vbap~vbeln = vbep~vbeln AND vbap~posnr = vbep~posnr      INTO CORRESPONDING FIELDS OF TABLE lt_vbap      FOR ALL ENTRIES IN lt_vbak      WHERE vbap~vbeln = lt_vbak-vbeln      AND etenr = '1'.  ENDIF.  IF  lt_vbap IS NOT INITIAL.    CLEAR lt_mara[].    SELECT      matnr      normt      FROM mara      INTO CORRESPONDING FIELDS OF TABLE lt_mara      FOR ALL ENTRIES IN lt_vbap      WHERE matnr = lt_vbap-matnr.    CLEAR lt_mast[].    SELECT      matnr      andat      FROM mast      INTO CORRESPONDING FIELDS OF TABLE lt_mast      FOR ALL ENTRIES IN lt_vbap      WHERE matnr = lt_vbap-matnr      AND werks = '0080'.    CLEAR lt_mapl[].    SELECT      matnr      andat      FROM mapl      INTO CORRESPONDING FIELDS OF TABLE lt_mapl      FOR ALL ENTRIES IN lt_vbap      WHERE matnr = lt_vbap-matnr      AND werks = '0080'.    CLEAR lt_mvke[].    SELECT      matnr      mtpos      FROM mvke      INTO CORRESPONDING FIELDS OF TABLE lt_mvke      FOR ALL ENTRIES IN lt_vbap      WHERE matnr = lt_vbap-matnr      AND vkorg = '0080'.    CLEAR lt_vbfa[].    SELECT      vbelv      posnv      vbeln      posnn      FROM vbfa      INTO CORRESPONDING FIELDS OF TABLE lt_vbfa      FOR ALL ENTRIES IN lt_vbap      WHERE vbelv = lt_vbap-vbeln      AND   posnn = lt_vbap-posnr      AND   vbtyp_n = 'J'.    CLEAR lt_afko[].    SELECT      afko~aufnr      afko~gstrp      afko~gltrp      afko~aufpl      afpo~kdauf      afpo~kdpos     FROM afko INNER JOIN afpo ON afko~aufnr = afpo~aufnr     INTO CORRESPONDING FIELDS OF TABLE lt_afko     FOR ALL ENTRIES IN lt_vbap     WHERE afpo~kdauf = lt_vbap-vbeln     AND   afpo~kdpos = lt_vbap-posnr     AND   afko~plnbez = lt_vbap-matnr.    CLEAR lt_aufm[].    SELECT      bldat      matnr      kdauf      kdpos      FROM aufm      INTO CORRESPONDING FIELDS OF TABLE lt_aufm      FOR ALL ENTRIES IN lt_vbap      WHERE matnr = lt_vbap-matnr      AND   kdauf = lt_vbap-vbeln      AND   kdpos = lt_vbap-posnr      AND   werks = '0080'      AND   bwart = '101'.    CLEAR lt_aufm2[].    SELECT      bldat      matnr      kdauf      kdpos      FROM aufm      INTO CORRESPONDING FIELDS OF TABLE lt_aufm2      FOR ALL ENTRIES IN lt_vbap      WHERE kdauf = lt_vbap-vbeln      AND   kdpos = lt_vbap-posnr      AND   werks = '0080'      AND   bwart = '261'.    IF lt_afko IS NOT INITIAL.      CLEAR lt_afvv[].      SELECT        aufpl        iedd        aplzl        FROM afvv      INTO CORRESPONDING FIELDS OF TABLE lt_afvv      FOR ALL ENTRIES IN lt_afko      WHERE aufpl = lt_afko-aufpl.      SELECT * FROM afvc      INTO CORRESPONDING FIELDS OF TABLE lt_afvc      FOR ALL ENTRIES IN lt_afko      WHERE aufpl = lt_afko-aufpl.    ENDIF.  ENDIF.  LOOP AT lt_vbap INTO ls_vbap.    APPEND ls_vbap TO lt_display.  ENDLOOP.  CLEAR ls_display.  LOOP AT lt_display INTO ls_display.    CLEAR ls_vbak.    READ TABLE lt_vbak INTO ls_vbak WITH KEY vbeln = ls_display-vbeln.    ls_display-erdat = ls_vbak-erdat.    CLEAR ls_mara.    READ TABLE lt_mara INTO ls_mara WITH KEY matnr = ls_display-matnr.    ls_display-normt = ls_mara-normt.    CLEAR ls_mast.    READ TABLE lt_mast INTO ls_mast WITH KEY matnr = ls_display-matnr.    ls_display-zbandat = ls_mast-andat.    CLEAR ls_mapl.    READ TABLE lt_mapl INTO ls_mapl WITH KEY matnr = ls_display-matnr.    ls_display-zrandat = ls_mapl-andat.    CLEAR ls_mvke.    READ TABLE lt_mvke INTO ls_mvke WITH KEY matnr = ls_display-matnr.    ls_display-mtpos = ls_mvke-mtpos.    CLEAR ls_vbfa.    READ TABLE lt_vbfa INTO ls_vbfa WITH KEY vbelv = ls_display-vbeln posnv = ls_display-posnv.    ls_display-vbelv = ls_vbfa-vbeln.    ls_display-posnn = ls_vbfa-posnn.    CLEAR ls_lips.    READ TABLE lt_lips INTO ls_lips WITH KEY vbeln = ls_display-vbelv posnr = ls_display-posnn.    ls_display-lfimg = ls_lips-lfimg.    CLEAR ls_likp.    READ TABLE lt_likp INTO ls_likp WITH KEY vbeln = ls_display-vbelv.    ls_display-wadat_ist = ls_likp-wadat_ist.    CLEAR ls_afko.    READ TABLE lt_afko INTO ls_afko WITH KEY kdauf = ls_display-vbeln kdpos = ls_display-posnv.    ls_display-gstrp = ls_afko-gstrp.    ls_display-gltrp = ls_afko-gltrp.    CLEAR ls_aufm.    READ TABLE lt_aufm INTO ls_aufm WITH KEY matnr = ls_display-matnr kdauf = ls_display-vbeln kdpos = ls_display-posnv.    ls_display-zdbldat = ls_aufm-bldat.    CLEAR ls_aufm2.    READ TABLE lt_aufm2 INTO ls_aufm2 WITH KEY kdauf = ls_display-vbeln kdpos = ls_display-posnv.    ls_display-zlbldat = ls_aufm2-bldat.    "//Delay days    ls_display-erdat2 = ls_display-zdbldat - ls_display-edatu.    IF ls_display-erdat2 < 0.      ls_display-erdat2 = 0.    ENDIF.    "//Contract working days    ls_display-erdat3 = ls_display-edatu - ls_display-erdat.    "//Actually working days    ls_display-erdat4 = ls_display-zlbldat - ls_display-erdat.    IF ls_display-erdat4 < 0.      ls_display-erdat4 = 0.    ENDIF.    LOOP AT lt_afvc INTO ls_afvc WHERE aufpl = ls_afko-aufpl.      FIND '装配' IN ls_afvc-ltxa1.      IF sy-subrc = 0.        READ TABLE lt_afvv INTO ls_afvv WITH KEY aufpl = ls_afko-aufpl                                                 aplzl = ls_afvc-aplzl.        IF sy-subrc = 0.          ls_display-date_1 = ls_afvv-iedd.        ENDIF.      ENDIF.      FIND '试泵' IN ls_afvc-ltxa1.      IF sy-subrc = 0.        READ TABLE lt_afvv INTO ls_afvv WITH KEY aufpl = ls_afko-aufpl                                                 aplzl = ls_afvc-aplzl.        IF sy-subrc = 0.          ls_display-date_2 = ls_afvv-iedd.        ENDIF.      ENDIF.      FIND '喷漆' IN ls_afvc-ltxa1.      IF sy-subrc = 0.        READ TABLE lt_afvv INTO ls_afvv WITH KEY aufpl = ls_afko-aufpl                                                 aplzl = ls_afvc-aplzl.        IF sy-subrc = 0.          ls_display-date_3 = ls_afvv-iedd.        ENDIF.      ENDIF.      FIND '检验' IN ls_afvc-ltxa1.      IF sy-subrc = 0.        READ TABLE lt_afvv INTO ls_afvv WITH KEY aufpl = ls_afko-aufpl                                                 aplzl = ls_afvc-aplzl.        IF sy-subrc = 0.          ls_display-date_4 = ls_afvv-iedd.        ENDIF.      ENDIF.      FIND '包装' IN ls_afvc-ltxa1.      IF sy-subrc = 0.        READ TABLE lt_afvv INTO ls_afvv WITH KEY aufpl = ls_afko-aufpl                                                 aplzl = ls_afvc-aplzl.        IF sy-subrc = 0.          ls_display-date_5 = ls_afvv-iedd.        ENDIF.      ENDIF.    ENDLOOP.    MODIFY lt_display FROM ls_display.  ENDLOOP.  "//判断物料号是否是泵  IF m_pumps = 'X'.    DELETE lt_display WHERE mtpos NE 'ZPOR'.  ENDIF.  DELETE lt_display WHERE erdat NOT IN m_erdat                      OR  wadat_ist NOT IN m_wadat.ENDFORM.                    " FRM_GET_DATA3*&---------------------------------------------------------------------**&      Form  FRM_ALV_DISPLAY*&---------------------------------------------------------------------**       text*----------------------------------------------------------------------**  -->  p1        text*  <--  p2        text*----------------------------------------------------------------------*FORM frm_alv_display .  DATA : ls_layout   TYPE slis_layout_alv.  DATA : lt_fieldcat TYPE slis_t_fieldcat_alv.  DATA : l_repid     TYPE sy-repid.  PERFORM frm_build_fieldcat CHANGING lt_fieldcat.  PERFORM frm_build_layout CHANGING ls_layout.  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'    EXPORTING      i_callback_program       = sy-repid      it_fieldcat              = lt_fieldcat      is_layout                = ls_layout      i_callback_user_command  = 'FRM_USER_COMMAND'*     i_callback_pf_status_set = 'FRM_PF_STATUS_SET'    TABLES      t_outtab                 = lt_display.ENDFORM.                    " FRM_ALV_DISPLAY*&---------------------------------------------------------------------**&      Form  frm_build_fieldcat*&---------------------------------------------------------------------**       text*----------------------------------------------------------------------**      -->CT_FIELDCAT  text*----------------------------------------------------------------------*FORM frm_build_fieldcat  CHANGING ct_fieldcat TYPE slis_t_fieldcat_alv.  DATA : ls_fieldcat LIKE LINE OF ct_fieldcat.  REFRESH ct_fieldcat.  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'    EXPORTING      i_structure_name = 'ZSSDRP204_STRU_LIST'    CHANGING      ct_fieldcat      = ct_fieldcat.  LOOP AT ct_fieldcat INTO ls_fieldcat.    CASE ls_fieldcat-fieldname.      WHEN 'VBELN'.        IF sy-langu = '1'.          ls_fieldcat-seltext_l = '销售订单'.        ELSE.          ls_fieldcat-seltext_l = 'Sales Order'.          ls_fieldcat-seltext_m = 'Sales Order'.          ls_fieldcat-seltext_s = 'Sales Order'.        ENDIF.      WHEN 'NORMT'.        IF sy-langu = '1'.          ls_fieldcat-seltext_l = '泵类型'.        ELSE.          ls_fieldcat-seltext_l = 'Pump Type'.          ls_fieldcat-seltext_m = 'Pump Type'.          ls_fieldcat-seltext_s = 'Pump Type'.        ENDIF.      WHEN 'ZBANDAT'.        IF sy-langu = '1'.          ls_fieldcat-seltext_l = 'BOM完成时间'.        ELSE.          ls_fieldcat-seltext_l = 'BOM complete date'.          ls_fieldcat-seltext_m = 'BOM complete date'.          ls_fieldcat-seltext_s = 'BOM complete date'.        ENDIF.      WHEN 'ZRANDAT'.        IF sy-langu = '1'.          ls_fieldcat-seltext_l = '工艺完成时间'.        ELSE.          ls_fieldcat-seltext_l = 'Routing finished date'.          ls_fieldcat-seltext_m = 'Routing finished date'.          ls_fieldcat-seltext_s = 'Routing finished date'.        ENDIF.      WHEN 'EDATU'.        IF sy-langu = '1'.          ls_fieldcat-seltext_l = '合同交货日期'.        ELSE.          ls_fieldcat-seltext_l = 'Contract delivery date'.          ls_fieldcat-seltext_m = 'Contract delivery date'.          ls_fieldcat-seltext_s = 'Contract delivery date'.        ENDIF.      WHEN 'GSTRP'.        IF sy-langu = '1'.          ls_fieldcat-seltext_l = '开始日期'.        ELSE.          ls_fieldcat-seltext_l = 'Production start date'.          ls_fieldcat-seltext_m = 'Production start date'.          ls_fieldcat-seltext_s = 'Production start date'.        ENDIF.      WHEN 'GLTRP'.        IF sy-langu = '1'.          ls_fieldcat-seltext_l = '完成日期'.        ELSE.          ls_fieldcat-seltext_l = 'Complete date'.          ls_fieldcat-seltext_m = 'Complete date'.          ls_fieldcat-seltext_s = 'Complete date'.        ENDIF.      WHEN 'ZDBLDAT'.        IF sy-langu = '1'.          ls_fieldcat-seltext_l = '入库日期'.        ELSE.          ls_fieldcat-seltext_l = 'Booked in date'.          ls_fieldcat-seltext_m = 'Booked in date'.          ls_fieldcat-seltext_s = 'Booked in date'.        ENDIF.      WHEN 'ZLBLDAT'.        IF sy-langu = '1'.          ls_fieldcat-seltext_l = '发料日期'.        ELSE.          ls_fieldcat-seltext_l = 'Issuing date'.          ls_fieldcat-seltext_m = 'Issuing date'.          ls_fieldcat-seltext_s = 'Issuing date'.        ENDIF.      WHEN 'LFIMG'.        IF sy-langu = '1'.          ls_fieldcat-seltext_l = '交货单数量'.        ELSE.          ls_fieldcat-seltext_l = 'Delivery QTY'.          ls_fieldcat-seltext_m = 'Delivery QTY'.          ls_fieldcat-seltext_s = 'Delivery QTY'.        ENDIF.      WHEN 'WADAT_IST'.        IF sy-langu = '1'.          ls_fieldcat-seltext_l = '实际发货日期'.        ELSE.          ls_fieldcat-seltext_l = 'Actually delivery date'.          ls_fieldcat-seltext_m = 'Actually delivery date'.          ls_fieldcat-seltext_s = 'Actually delivery date'.        ENDIF.      WHEN 'ERDAT2'.        IF sy-langu = '1'.          ls_fieldcat-seltext_l = '拖期天数'.        ELSE.          ls_fieldcat-seltext_l = 'Delay days'.          ls_fieldcat-seltext_m = 'Delay days'.          ls_fieldcat-seltext_s = 'Delay days'.        ENDIF.      WHEN 'ERDAT3'.        IF sy-langu = '1'.          ls_fieldcat-seltext_l = '合同工作日'.        ELSE.          ls_fieldcat-seltext_l = 'Contract working days'.          ls_fieldcat-seltext_m = 'Contract working days'.          ls_fieldcat-seltext_s = 'Contract working days'.        ENDIF.      WHEN 'ERDAT4'.        IF sy-langu = '1'.          ls_fieldcat-seltext_l = '实际工作日'.        ELSE.          ls_fieldcat-seltext_l = 'Actually working days'.          ls_fieldcat-seltext_m = 'Actually working days'.          ls_fieldcat-seltext_s = 'Actually working days'.        ENDIF.      WHEN 'DATE_1'.        IF sy-langu = '1'.          ls_fieldcat-seltext_l = '装配日期'.        ELSE.          ls_fieldcat-seltext_l = 'Assembly Date'.          ls_fieldcat-seltext_m = 'Assembly Date'.          ls_fieldcat-seltext_s = 'Assembly Date'.        ENDIF.      WHEN 'DATE_2'.        IF sy-langu = '1'.          ls_fieldcat-seltext_l = '试泵日期'.        ELSE.          ls_fieldcat-seltext_l = 'Testing Date'.          ls_fieldcat-seltext_m = 'Testing Date'.          ls_fieldcat-seltext_s = 'Testing Date'.        ENDIF.      WHEN 'DATE_3'.        IF sy-langu = '1'.          ls_fieldcat-seltext_l = '喷漆日期'.        ELSE.          ls_fieldcat-seltext_l = 'Painting Date'.          ls_fieldcat-seltext_m = 'Painting Date'.          ls_fieldcat-seltext_s = 'Painting Date'.        ENDIF.      WHEN 'DATE_4'.        IF sy-langu = '1'.          ls_fieldcat-seltext_l = '检验日期'.        ELSE.          ls_fieldcat-seltext_l = 'Checking Date'.          ls_fieldcat-seltext_m = 'Checking Date'.          ls_fieldcat-seltext_s = 'Checking Date'.        ENDIF.      WHEN 'DATE_5'.        IF sy-langu = '1'.          ls_fieldcat-seltext_l = '包装日期'.        ELSE.          ls_fieldcat-seltext_l = 'Packing Date'.          ls_fieldcat-seltext_m = 'Packing Date'.          ls_fieldcat-seltext_s = 'Packing Date'.        ENDIF.    ENDCASE.    MODIFY ct_fieldcat FROM ls_fieldcat TRANSPORTING seltext_l seltext_m seltext_s.  ENDLOOP.  DELETE ct_fieldcat WHERE fieldname = 'POSNV'                      OR   fieldname = 'MTPOS'                      OR   fieldname = 'POSNN'.ENDFORM.                    "frm_build_fieldcat*&---------------------------------------------------------------------**&      Form  frm_build_layout*&---------------------------------------------------------------------**       text*----------------------------------------------------------------------**      -->CS_LAYOUT  text*----------------------------------------------------------------------*FORM frm_build_layout  CHANGING cs_layout TYPE slis_layout_alv.  CLEAR cs_layout.  MOVE 'X' TO cs_layout-detail_popup.  MOVE 'X' TO cs_layout-colwidth_optimize.  MOVE 'COLOR' TO cs_layout-info_fieldname.*  MOVE 'SELECTED' TO cs_layout-box_fieldname.ENDFORM.                    " FRM_BUILD_LAYOUT*&---------------------------------------------------------------------**&      Form  sub_user_command*&---------------------------------------------------------------------**       text*----------------------------------------------------------------------**      -->R_UCOMM           text*      -->US_SELECTE_FIELD  text*----------------------------------------------------------------------*FORM frm_user_command USING r_ucomm LIKE sy-ucomm                      us_selecte_field TYPE slis_selfield.  CASE r_ucomm.    WHEN '&IC1'.                 "双击事件的功能码      READ TABLE lt_display INTO ls_display INDEX us_selecte_field-tabindex.      IF us_selecte_field-fieldname = 'MATNR'.        SET PARAMETER ID 'MAT' FIELD ls_display-matnr.        CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.      ENDIF.  ENDCASE.ENDFORM.                    " SUB_USER_COMMAND


1 0
原创粉丝点击