对账单

来源:互联网 发布:知行学院学信网 编辑:程序博客网 时间:2024/04/28 00:30
*&---------------------------------------------------------------------*
*& Report  ZFIR23
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZFIR23.
TYPE-POOLS:SLIS.
TABLES:EINA,MVKE,MKPF,MSEG,MAKT,EKPO.
DATA:LAYOUT TYPE SLIS_LAYOUT_ALV,
      IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
      WA_FIELDCAT TYPE SLIS_FIELDCAT_ALV,
      W_REPID LIKE SY-REPID.
*DATA:MAKTX LIKE MAKT-MAKTX,
*      MVGR2 LIKE MVKE-MVGR2.
DATA:BEGIN OF T_OUTPUT OCCURS 0,
  MATNR LIKE MAKT-MATNR,"物料编号
  MAKTX LIKE MAKT-MAKTX,"物料描述
  MEINS LIKE EINA-MEINS,"计量单位
  G_LABST_S LIKE MARDH-LABST,"好件期初库存
  B_LABST_S LIKE MARDH-LABST,"坏件期初库存
  G_LABST_E LIKE MARDH-LABST,"好件期末库存
  B_LABST_E LIKE MARDH-LABST,"坏件期末库存
  G_RETURN LIKE MARDH-LABST,"好件退货
  G_RETURN1 LIKE MARDH-LABST,"好件退货冲销
  B_RETURN LIKE MARDH-LABST,"坏件退货
  B_RETURN1 LIKE MARDH-LABST,"坏件退货冲销
  LOSS_LABST LIKE MARDH-LABST,"盘亏
  INCOME_LABST LIKE MARDH-LABST,"盘盈
  GET_LABST LIKE MARDH-LABST,"入库
  GET_LABST1 LIKE MARDH-LABST,"入库冲销
  OUT_LABST LIKE MARDH-LABST,"出库
  END OF T_OUTPUT.
DATA:BEGIN OF TEMPTAB OCCURS 0,
  MATNR LIKE MAKT-MATNR,"物料编号
  MAKTX LIKE MAKT-MAKTX,"物料描述
  MEINS LIKE EINA-MEINS,"计量单位
  END OF TEMPTAB.

DATA:BEGIN OF TEMPTAB1 OCCURS 0,
  MATNR LIKE MARDH-MATNR,
  LABST LIKE MARDH-LABST,"库存
  LGORT LIKE MARDH-LGORT,"库位
  LFGJA LIKE MARDH-LFGJA,"年
  LFMON LIKE MARDH-LFMON,"月
  WERKS LIKE MARDH-WERKS,
  END OF TEMPTAB1.
DATA:BEGIN OF TEMPTAB2 OCCURS 0,
  MATNR LIKE MAKT-MATNR,"物料编号
  MAKTX LIKE MAKT-MAKTX,"物料描述
  MEINS LIKE EINA-MEINS,"计量单位
  LABST LIKE MARDH-LABST,
  BWART LIKE MSEG-BWART,"移动类型
  LGORT LIKE MSEG-LGORT,"库位
  MVGR2 LIKE MVKE-MVGR2,
  LIFNR LIKE MSEG-LIFNR,
  END OF TEMPTAB2.
DATA:BEGIN OF TEMPTAB3 OCCURS 0,
  MATNR LIKE MAKT-MATNR,"物料编号
  MAKTX LIKE MAKT-MAKTX,"物料描述
  MEINS LIKE EINA-MEINS,"计量单位
  LABST LIKE MARDH-LABST,"数量
  BWART LIKE MSEG-BWART,"移动类型
  LGORT LIKE MSEG-LGORT,"库位
  MVGR2 LIKE MVKE-MVGR2,
  LIFNR LIKE MSEG-LIFNR,
  END OF TEMPTAB3.
DATA:BEGIN OF TEMPTAB4 OCCURS 0,
  MATNR LIKE MAKT-MATNR,"物料编号
  MAKTX LIKE MAKT-MAKTX,"物料描述
  MEINS LIKE EINA-MEINS,"计量单位
  LABST LIKE MARDH-LABST,"数量
  BWART LIKE MSEG-BWART,"移动类型
  LGORT LIKE MSEG-LGORT,"库位
  MVGR2 LIKE MVKE-MVGR2,
  LIFNR LIKE MSEG-LIFNR,
  END OF TEMPTAB4.
DATA:BEGIN OF TEMPTAB5 OCCURS 0,
  MATNR LIKE MVKE-MATNR,"物料编号
  VKORG LIKE MVKE-VKORG,
  VTWEG LIKE MVKE-VTWEG,
  MVGR2 LIKE MVKE-MVGR2,
  END OF TEMPTAB5.


DATA:DATE_LOW LIKE MKPF-BUDAT,
      DATE_HIGH LIKE MKPF-BUDAT.
DATA:S_LIFNR LIKE MSEG-LIFNR.

SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
PARAMETERS:WERKS LIKE MSEG-WERKS OBLIGATORY,
           LIFNR LIKE MSEG-LIFNR OBLIGATORY.
SELECT-OPTIONS:BUDAT FOR MKPF-BUDAT OBLIGATORY.
SELECTION-SCREEN END OF BLOCK B1.


INITIALIZATION.
*NOTHING
AT SELECTION-SCREEN.
  CONCATENATE BUDAT+3(6'21' INTO DATE_LOW.
  CONCATENATE BUDAT+11(6'20' INTO DATE_HIGH.
  IF DATE_LOW <> BUDAT-LOW OR DATE_HIGH <> BUDAT-HIGH ).
    MESSAGE '查询日期不是一个会计期间!' TYPE 'E'.
  ENDIF.

START-OF-SELECTION.
  PERFORM GETDATA.
  PERFORM CATALOG.
  PERFORM ALVSHOW.

END-OF-SELECTION.
*NOTHING

FORM GETDATA.


*    库存

  SELECT
    MATNR
    LABST
    LGORT
    LFGJA
    LFMON
    WERKS
    INTO CORRESPONDING FIELDS OF TABLE TEMPTAB1
  FROM MARDH
  WHERE WERKS WERKS AND LGORT IN ('M001','M002')
    AND  LFGJA BUDAT+3(4AND LFMON BUDAT+7(2OR LFGJA BUDAT+11(4AND LFMON BUDAT+15(2).
*       入库数量

  SELECT
    MSEG~MATNR AS MATNR "物料编号
    MSEG~MEINS AS MEINS "计量单位
    MSEG~MENGE AS LABST
    MSEG~BWART AS BWART
    MSEG~LGORT AS LGORT
    MSEG~LIFNR AS LIFNR
    INTO CORRESPONDING FIELDS OF TABLE TEMPTAB2
   FROM MSEG
   INNER JOIN MKPF ON MKPF~MBLNR MSEG~MBLNR AND MKPF~MJAHR MSEG~MJAHR
   WHERE MSEG~WERKS WERKS AND MKPF~BUDAT IN BUDAT
    AND MSEG~BWART IN ('105','106','161','162','701','702','261','262')
    AND MSEG~MATNR IN SELECT EINA~MATNR FROM EINA INNER JOIN MVKE ON EINA~MATNR MVKE~MATNR WHERE  EINA~LOEKZ '' AND EINA~LIFNR LIFNR AND MVKE~VKORG WERKS AND MVKE~MVGR2 '02' ).


  SORT TEMPTAB1 BY MATNR.
  SORT TEMPTAB2 BY MATNR.
  LOOP AT TEMPTAB2 .
      SELECT SINGLE MAKTX INTO TEMPTAB2-MAKTX FROM MAKT WHERE MATNR TEMPTAB2-MATNR AND SPRAS '1'.
        READ TABLE TEMPTAB4 WITH KEY MATNR TEMPTAB2-MATNR.
        IF SY-SUBRC <> 0.
          MOVE-CORRESPONDING TEMPTAB2 TO TEMPTAB4.
          APPEND TEMPTAB4.
        ENDIF.
        COLLECT TEMPTAB2 INTO TEMPTAB3.
  ENDLOOP.
  SORT TEMPTAB3 BY MATNR.
  SORT TEMPTAB4 BY MATNR.


  LOOP AT TEMPTAB4.
    CLEAR T_OUTPUT.
    T_OUTPUT-MATNR TEMPTAB4-MATNR.
    T_OUTPUT-MAKTX TEMPTAB4-MAKTX.
    T_OUTPUT-MEINS TEMPTAB4-MEINS.

    LOOP AT TEMPTAB1 WHERE MATNR TEMPTAB4-MATNR.
      IF TEMPTAB1-LGORT 'M001' AND TEMPTAB1-LFGJA BUDAT+3(4AND TEMPTAB1-LFMON BUDAT+7(2AND TEMPTAB1-WERKS WERKS.
        T_OUTPUT-G_LABST_S TEMPTAB1-LABST.
      ENDIF.
      IF TEMPTAB1-LGORT 'M002' AND TEMPTAB1-LFGJA BUDAT+3(4AND TEMPTAB1-LFMON BUDAT+7(2AND TEMPTAB1-WERKS WERKS.
        T_OUTPUT-B_LABST_S TEMPTAB1-LABST.
      ENDIF.
      IF TEMPTAB1-LGORT 'M001' AND TEMPTAB1-LFGJA BUDAT+11(4AND TEMPTAB1-LFMON BUDAT+15(2AND TEMPTAB1-WERKS WERKS.
        T_OUTPUT-G_LABST_E TEMPTAB1-LABST.
      ENDIF.
      IF TEMPTAB1-LGORT 'M002' AND TEMPTAB1-LFGJA BUDAT+11(4AND TEMPTAB1-LFMON BUDAT+15(2AND TEMPTAB1-WERKS WERKS.
        T_OUTPUT-B_LABST_E TEMPTAB1-LABST.
      ENDIF.
    ENDLOOP.

    LOOP AT TEMPTAB3 WHERE MATNR TEMPTAB4-MATNR.
      IF TEMPTAB3-BWART '161' AND TEMPTAB3-LGORT 'M002'.
        T_OUTPUT-B_RETURN TEMPTAB3-LABST.
      ENDIF.
      IF TEMPTAB3-BWART '162' AND TEMPTAB3-LGORT 'M002'.
        T_OUTPUT-B_RETURN1 TEMPTAB3-LABST.
      ENDIF.
      IF TEMPTAB3-BWART '702'.
        T_OUTPUT-LOSS_LABST TEMPTAB3-LABST.
      ENDIF.
      IF TEMPTAB3-BWART '701'.
        T_OUTPUT-INCOME_LABST TEMPTAB3-LABST.
      ENDIF.
      IF TEMPTAB3-BWART '105' AND TEMPTAB3-LGORT 'M001'.
        T_OUTPUT-GET_LABST TEMPTAB3-LABST.
      ENDIF.
      IF TEMPTAB3-BWART '106' AND TEMPTAB3-LGORT 'M001'.
        T_OUTPUT-GET_LABST1 TEMPTAB3-LABST.
      ENDIF.
      IF TEMPTAB3-BWART '161' AND TEMPTAB3-LGORT 'M001'.
        T_OUTPUT-G_RETURN TEMPTAB3-LABST.
      ENDIF.
      IF TEMPTAB3-BWART '162' AND TEMPTAB3-LGORT 'M001'.
        T_OUTPUT-G_RETURN1 TEMPTAB3-LABST.
      ENDIF.
    ENDLOOP.

    T_OUTPUT-GET_LABST T_OUTPUT-GET_LABST T_OUTPUT-GET_LABST1"入库
    T_OUTPUT-G_RETURN T_OUTPUT-G_RETURN T_OUTPUT-G_RETURN1."好件退货
    T_OUTPUT-B_RETURN T_OUTPUT-B_RETURN T_OUTPUT-B_RETURN1.
    T_OUTPUT-OUT_LABST T_OUTPUT-GET_LABST + T_OUTPUT-G_LABST_S T_OUTPUT-G_RETURN -
                      T_OUTPUT-G_LABST_E + T_OUTPUT-B_LABST_S T_OUTPUT-B_LABST_E T_OUTPUT-B_RETURN T_OUTPUT-LOSS_LABST + T_OUTPUT-INCOME_LABST.

    APPEND T_OUTPUT.
  ENDLOOP.



ENDFORM.                    "GETDATA

*&---------------------------------------------------------------------*
*&      Form  CATALOG
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM CATALOG.
  W_REPID SY-REPID.
  CLEAR IT_FIELDCAT.
  DEFINE FIELDCATSET.
    WA_FIELDCAT-FIELDNAME &1.
    WA_FIELDCAT-SELTEXT_L &2.
    WA_FIELDCAT-NO_ZERO &3.
    WA_FIELDCAT-FIX_COLUMN &4.
*    WA_FIELDCAT-DECIMALS_OUT = &5
    WA_FIELDCAT-QFIELDNAME 'MEINS'.
    APPEND WA_FIELDCAT TO IT_FIELDCAT.
  END-OF-DEFINITION.

  FIELDCATSET 'MATNR' '物料编号' 'X' ''.
  FIELDCATSET 'MAKTX' '物料描述' 'X' ''.
  FIELDCATSET 'MEINS' '计量单位' '' ''.
  FIELDCATSET 'GET_LABST' '本月入库' 'X' ''.
  FIELDCATSET 'G_LABST_S' '好件期初' 'X' ''.
  FIELDCATSET 'B_LABST_S' '坏件期初' 'X' ''.
  FIELDCATSET 'B_LABST_E' '坏件期末' 'X' ''.
  FIELDCATSET 'G_RETURN' '好件退货' 'X' ''.
  FIELDCATSET 'B_RETURN' '坏件退货' 'X' ''.
  FIELDCATSET 'G_LABST_E' '好件期末' 'X' ''.
  FIELDCATSET 'LOSS_LABST' '亏' 'X' ''.
  FIELDCATSET 'INCOME_LABST' '赢' 'X' '' .
  FIELDCATSET 'OUT_LABST' '本月发货' 'X' ''.
ENDFORM.                    "CATALOG

*&---------------------------------------------------------------------*
*&      Form  ALVSHOW
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM ALVSHOW.
  PERFORM LAYOUT_INIT USING LAYOUT.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      I_CALLBACK_PROGRAM W_REPID
      I_GRID_TITLE       ''
      IS_LAYOUT          LAYOUT
      IT_FIELDCAT        IT_FIELDCAT[]
    TABLES
      T_OUTTAB           T_OUTPUT
    EXCEPTIONS
      PROGRAM_ERROR      1
      OTHERS             2.
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
ENDFORM.                    "ALVSHOW
*&---------------------------------------------------------------------*
*&      Form  LAYOUT_INIT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_LAYOUT  text
*----------------------------------------------------------------------*
FORM LAYOUT_INIT  USING    P_LAYOUT TYPE SLIS_LAYOUT_ALV.
  P_LAYOUT-COLWIDTH_OPTIMIZE 'X'.
ENDFORM.                    " LAYOUT_INIT