• SAP MM库存异动报表


    ************************************************************************
    *程式代號:ZMMR058
    *程式名稱:庫存異動明細查詢(不包含品檢中庫存)
    *         -------- -----------------------------------------------------
    *         20161130 程式建立                              By Qi
    ************************************************************************

    REPORT zmmr058.

    TABLES: marc,mara,mard,mseg,mkpf,mchb,mbew,mardh,t001w .
    TYPE-POOLS: slis.

    DEFINE fieldcat.
      clear w_fieldcat.
      w_fieldcat-col_pos       = &1.
      w_fieldcat-fieldname     = &2.
      w_fieldcat-seltext_l     = &3.
      w_fieldcat-no_convext    = &4.
      w_fieldcat-key           = &5.
      append w_fieldcat to g_fieldcat.
    END-OF-DEFINITION.

    DATABEGIN OF itabs,
            shkzg LIKE mseg-shkzg,
            bldat LIKE mkpf-bldat,
            cputm LIKE mkpf-cputm,
            budat LIKE mkpf-budat,
            bwart LIKE mseg-bwart,
            ebeln LIKE mseg-ebeln,
            kdauf LIKE mseg-kdauf,
            aufnr LIKE mseg-aufnr,
            kunnr LIKE mseg-kunnr,
            smbln LIKE mseg-smbln,
            kostl LIKE mseg-kostl,
            mblnr LIKE mkpf-mblnr,
            zeile LIKE mseg-zeile,
            matnr LIKE mseg-matnr,
            lifnr LIKE mseg-lifnr,
            lgort LIKE mseg-lgort,
            charg LIKE mseg-charg,
            menge LIKE mseg-menge,
            meins LIKE mseg-meins,
            sgtxt LIKE mseg-sgtxt,
          END OF  itabs.
    DATA: itab  LIKE itabs OCCURS WITH HEADER LINE,
          ritab LIKE itabs OCCURS WITH HEADER LINE.

    DATABEGIN OF stabs,
            shkzg LIKE mseg-shkzg,
            bldat LIKE mkpf-bldat,
            cputm LIKE mkpf-cputm,
            budat LIKE mkpf-budat,
            bwart LIKE mseg-bwart,
            ebeln LIKE mseg-ebeln,
            kdauf LIKE mseg-kdauf,
            aufnr LIKE mseg-aufnr,
            kunnr LIKE mseg-kunnr,
            smbln LIKE mseg-smbln,
            kostl LIKE mseg-kostl,
            mblnr LIKE mkpf-mblnr,
            zeile LIKE mseg-zeile,
            matnr LIKE mseg-matnr,
            lifnr LIKE mseg-lifnr,
            lgort LIKE mseg-lgort,
            charg LIKE mseg-charg,
            menge LIKE mseg-menge,
            meins LIKE mseg-meins,
            sgtxt LIKE mseg-sgtxt,
            tqty3 LIKE mseg-menge,
          END OF  stabs.
    DATA sitabs LIKE stabs OCCURS WITH HEADER LINE .


    DATABEGIN OF riitabs,
            matnr LIKE mchbh-matnr,
            werks LIKE mchbh-werks,
            lfgja LIKE mchbh-lfgja,
            lfmon LIKE mchbh-lfmon,
            lgort LIKE mchbh-lgort,
            charg LIKE mchbh-charg,
            clabs LIKE mchbh-clabs,
          END OF riitabs.

    DATA riitab LIKE riitabs OCCURS WITH HEADER LINE .
    DATA wriitab LIKE  riitabs.

    DATA:  BEGIN OF liitabs,
             matnr LIKE mchb-matnr,
             werks LIKE mchb-werks,
             lgort LIKE mchb-lgort,
             charg LIKE mchb-charg,
           END OF liitabs.
    DATA liitab LIKE liitabs OCCURS WITH HEADER LINE.

    RANGES: r_budat FOR mkpf-budat .


    DATA:smenge     LIKE mseg-meins,
         p_matnr    LIKE mseg-matnr,
         m_text(70TYPE c,
         t_year     TYPE date,
         t_month    TYPE date,
         t_date     TYPE date,
         tqty1      LIKE mseg-menge,
         tqty2      LIKE mseg-menge,
         tqty3      LIKE mseg-menge,
         tqty4      LIKE mseg-menge.


    DATA: g_repid    LIKE sy-repid,
          g_fieldcat TYPE slis_t_fieldcat_alv,
          g_layout   TYPE slis_layout_alv,
          g_sort     TYPE slis_t_sortinfo_alv WITH HEADER LINE,
          g_skip(1)  TYPE c.

    SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.

    SELECT-OPTIONS: s_matnr FOR mseg-matnr NO INTERVALS NO-EXTENSION OBLIGATORY.
    PARAMETERS:     p_werks LIKE mseg-werks.
    SELECT-OPTIONS: s_lgort FOR mchb-lgort NO INTERVALS NO-EXTENSION ,
                    s_budat FOR mkpf-budat .

    SELECTION-SCREEN END OF BLOCK b1.

    INITIALIZATION.

    START-OF-SELECTION.
      CLEAR:m_text,t_date,r_budat.
      r_budat[] = s_budat[].
      READ TABLE r_budat INDEX .
      IF sy-subrc .
        IF r_budat-low+6(2) <> 01 .
          r_budat-low+6(201 .
          MODIFY r_budat INDEX .
        ENDIF .
      ENDIF .
      p_matnr = s_matnr-low.
      SELECT SINGLE * FROM marc WHERE matnr = p_matnr AND werks = p_werks.
      IF sy-subrc <> 0.
        CONCATENATE p_matnr ' Not material exist, check your input !'
          INTO m_text.
        MESSAGE m_text TYPE 'I'.
      ENDIF.
      SELECT SINGLE * FROM mara WHERE matnr = p_matnr AND lvorm 'X'.
      IF sy-subrc 0.
        CONCATENATE p_matnr ' This material number has been deleted.'
         INTO m_text.
        MESSAGE m_text TYPE 'I'.
      ENDIF.
      PERFORM tamard.
      PERFORM  trrecords.
      PERFORM  amount.
      PERFORM trstolist.
      PERFORM list_data.


    *&---------------------------------------------------------------------*
    *&      Form  AMOUNT
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM amount .
      CLEAR: t_year, t_date .
      t_year = s_budat-low(4).
      t_month = s_budat-low+4(2).
      SELECT *  INTO CORRESPONDING FIELDS OF TABLE riitab
        FROM  mchbh  WHERE matnr = p_matnr  AND werks = p_werks
                           AND lfgja = t_year
                           AND lgort IN  s_lgort
                           AND lfmon < t_month .



    ENDFORM.
    *&---------------------------------------------------------------------*
    *&      Form  TRRECORDS
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM trrecords .
      CLEAR: m_text .
      IF s_budat-low+6(201.
        SELECT * INTO CORRESPONDING FIELDS OF TABLE itab  FROM
             mseg INNER JOIN mkpf ON  mseg~mblnr = mkpf~mblnr
             WHERE mseg~matnr = p_matnr AND mkpf~budat >= s_budat-low
             AND mkpf~budat <= s_budat-high
             AND mseg~lgort IN s_lgort
             AND ( mseg~bwart <> '321' OR ( mseg~bwart '321' AND mseg~xauto 'X'  )   )
             AND  ( mseg~bwart <> '322'  OR ( mseg~bwart '322' AND mseg~xauto 'X' )  )
             AND mseg~insmk  ''
             .

      ELSE  .
        SELECT * INTO CORRESPONDING FIELDS OF TABLE ritab  FROM
           mseg INNER JOIN mkpf ON  mseg~mblnr = mkpf~mblnr
           WHERE mseg~matnr = p_matnr AND mkpf~budat >= r_budat-low
           AND mkpf~budat < s_budat-low
           AND mseg~lgort IN s_lgort
           AND ( mseg~bwart <> '321' OR ( mseg~bwart '321' AND mseg~xauto 'X'  )   )
           AND  ( mseg~bwart <> '322'  OR ( mseg~bwart '322' AND mseg~xauto 'X')  )
           AND mseg~insmk  '' .

        SELECT * INTO CORRESPONDING FIELDS OF TABLE itab  FROM
           mseg INNER JOIN mkpf ON  mseg~mblnr = mkpf~mblnr
           WHERE mseg~matnr = p_matnr AND mkpf~budat >= s_budat-low
           AND mkpf~budat <= s_budat-high
           AND mseg~lgort IN s_lgort
           AND ( mseg~bwart <> '321' OR ( mseg~bwart '321' AND mseg~xauto 'X'  )  )
           AND ( mseg~bwart <> '322' OR ( mseg~bwart '322' AND mseg~xauto 'X'  )  )
           AND mseg~insmk  '' .


      ENDIF .
      IF sy-subrc <> .
        CONCATENATE p_matnr ' This material has no data during this period.'
      INTO m_text.
        MESSAGE m_text TYPE 'I' .
      ENDIF.
    ENDFORM.
    *&---------------------------------------------------------------------*
    *&      Form  TRSTOLIST
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM trstolist .
      CLEAR: tqty1,tqty2,tqty3,tqty4,sitabs .

      SORT riitab BY lfgja lfmon DESCENDING.
      SORT itab by matnr lgort charg budat bldat cputm  .
      LOOP AT liitab .
        READ TABLE riitab WITH KEY lgort = liitab-lgort charg = liitab-charg  .
        IF sy-subrc .
          IF NOT ritab[]  IS INITIAL .
            LOOP AT ritab WHERE matnr = p_matnr AND  lgort = riitab-lgort AND charg = riitab-charg
                       AND   budat  >= r_budat-low  AND budat <  s_budat-low .

                IF ritab-shkzg 'S' .
                   tqty1  = tqty1 + ritab-menge .
                ELSE .
                    tqty2  = tqty2 + ritab-menge .
                ENDIF.

            ENDLOOP.
                tqty3 = riitab-clabs + tqty1 - tqty2 .

            LOOP AT itab WHERE matnr = p_matnr AND  lgort = riitab-lgort AND charg = riitab-charg
                     AND   budat  >= s_budat-low  AND budat <=  s_budat-high .
              MOVE-CORRESPONDING itab TO sitabs.
              IF sitabs-shkzg 'S' .
                tqty3 = tqty3 + sitabs-menge .
              ELSE .
                tqty3 = tqty3 - sitabs-menge .
                sitabs-menge = sitabs-menge * -.
              ENDIF.
              sitabs-tqty3 = tqty3 .
              APPEND sitabs .

            ENDLOOP.
            CLEAR: tqty1, tqty2 , tqty3.
          ELSE .
            tqty3 = riitab-clabs .
            LOOP AT itab   WHERE matnr = p_matnr AND lgort = riitab-lgort AND charg = riitab-charg
                    AND   budat  >= s_budat-low  AND budat <=  s_budat-high .
              MOVE-CORRESPONDING itab TO sitabs.
              IF sitabs-shkzg 'S' .
                tqty3 = tqty3 + sitabs-menge .
              ELSE .
                tqty3 = tqty3 - sitabs-menge .
                sitabs-menge = sitabs-menge * -.
              ENDIF.

              sitabs-tqty3 = tqty3 .
              APPEND sitabs .
            ENDLOOP.
            CLEAR tqty3.
          ENDIF.

        ELSE .
          tqty3 .
          LOOP AT itab   WHERE  matnr = p_matnr AND lgort = liitab-lgort AND charg = liitab-charg
                  AND   budat  >= s_budat-low  AND budat <=  s_budat-high .
            MOVE-CORRESPONDING itab TO sitabs.
            IF sitabs-shkzg 'S' .
              tqty3 = tqty3 + sitabs-menge .
            ELSE .
              tqty3 = tqty3 - sitabs-menge .
              sitabs-menge = sitabs-menge * -.
            ENDIF.

            sitabs-tqty3 = tqty3 .
            APPEND sitabs .
          ENDLOOP.
          CLEAR tqty3.
        ENDIF.
      ENDLOOP .
    ENDFORM.
    *&---------------------------------------------------------------------*
    *&      Form  TAMARD
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM tamard .
      CLEAR m_text .
      SELECT * FROM mchb INTO CORRESPONDING FIELDS OF TABLE liitab WHERE
            matnr IN s_matnr
        AND werks = p_werks.

      IF sy-subrc <> .
        CONCATENATE p_matnr ' This material has no location .'
        INTO m_text.
        MESSAGE m_text TYPE 'I' .
      ENDIF .
    ENDFORM.
    *&---------------------------------------------------------------------*
    *&      Form  LIST_DATA
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM list_data .
      PERFORM set_alv_layout.
      PERFORM set_alv_fieldcat.
      PERFORM alv_list.
    ENDFORM.
    *&---------------------------------------------------------------------*
    *&      Form  SET_ALV_LAYOUT
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM set_alv_layout .
      g_repid = sy-repid.
      g_layout-colwidth_optimize 'X'.
    ENDFORM.
    *&---------------------------------------------------------------------*
    *&      Form  SET_ALV_FIELDCAT
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM set_alv_fieldcat .
      DATA: w_fieldcat TYPE slis_fieldcat_alv.
      fieldcat:
        1   'BLDAT'         '輸入日期'(010)               'X'  'X',
        2   'CPUTM'         '時間'(020)                   ' '  ' ',
        3   'BUDAT'         '過賬日期'(030)                   ' '  ' ',
        4   'BWART'         '異動碼'(040)               ' '  ' ',
        5   'EBELN'        '採購單號'(050)               ' '  ' ',
        6    'KDAUF'         '銷售訂單號碼'(060)              ' '  ' ',
        7    'AUFNR'         '工單'(070)                   ' '  ' ',
        8    'KUNNR'         '客戶代碼'(080)       ' '  ' ',
        9    'SMBLN'         '回轉物料文件號碼'(090)              ' '  ' ',
        10   'KOSTL'       '成本中心'(100)   'X'  ' ',
        11   'MBLNR'       '目的文件號碼'(110)   ' '  ' ',
        12   'ZEILE'         '項次'(120)       ' '  ' ',
        13   'MATNR'         '料號'(130)       ' '  ' ',
        14   'LIFNR'          '供應商代碼'(140)                 ' ' ' ' ,
        15   'LGORT'          '倉庫代碼'(150)               ' ' ' ' ,
        15   'CHARG'          '批次'(150)               ' ' ' ' ,
        15   'MENGE'          '異動數量'(150)               ' ' ' ' ,
        15   'MEINS'          '單位'(150)               ' ' ' ',
        15   'SGTXT'          '備註'(150)               ' ' ' ' ,
        15   'TQTY3'          '異動后庫存'(150)               ' ' ' ' .
    ENDFORM.
    *&---------------------------------------------------------------------*
    *&      Form  ALV_LIST
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM alv_list .

      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
        EXPORTING
          i_callback_program = g_repid
          is_layout          = g_layout
          it_fieldcat        = g_fieldcat[]
        TABLES
          t_outtab           = sitabs[].

    ENDFORM.

  • 相关阅读:
    火狐黑客插件
    使用POI对EXCEL 读入写出
    使用spring quartz实现定时任务
    toad for oracle 快捷键总结
    Oracle查询性能优化
    2.C语言中文网学习Python
    1.编程基础(C语言中文网)
    一键打开ASP.NET WEB网站项目
    解决VS2010无法添加Sql Server数据库的问题
    VS2010 的一个小Bug(已报告给Microsoft Connect并得到确认)
  • 原文地址:https://www.cnblogs.com/coderfarmer/p/13424547.html
Copyright © 2020-2023  润新知