ABAP IDOC 相关报表

发布时间:2024年01月19日

上代码? 干货来了?

*&---------------------------------------------------------------------*
*& REPORT ZRPT_FI_IDOC_R
*&
*&---------------------------------------------------------------------*
*& author ABAP02
*& date 20240103
*& from  
*& Tcode zidoc
*&---------------------------------------------------------------------*
REPORT ZRPT_FI_IDOC_R.

TABLES: EDIDS,EDID4,RBKP,LIKP,EKKO.

SELECTION-SCREEN BEGIN OF BLOCK 001 WITH FRAME TITLE TEXT-001.
  SELECT-OPTIONS S_DOCNUM FOR EDIDS-DOCNUM.          "IDOC号码
  SELECT-OPTIONS S_CREDAT FOR EDIDS-CREDAT.          "创建日期
SELECTION-SCREEN END OF BLOCK 001.

TYPES:
  BEGIN OF TYP_DATA,
    DOCNUM TYPE EDIDS-DOCNUM,          "IDOC号码
    CREDAT TYPE EDIDS-CREDAT,          "创建日期
    STATUS TYPE EDIDS-STATUS,          "状态
    VBELNR TYPE RBKP-BELNR,             "销售发票
    GJAHR  TYPE VBRK-GJAHR,             "销售发票
    NETWR  TYPE VBRK-NETWR,             "不含税金额
    MWSBK  TYPE VBRK-MWSBK,             "税额
    NETWR1 TYPE VBRK-NETWR,             "含税金额
    ERNAME TYPE RBKP-ERNAME,           "创建者
    BELNR  TYPE RBKP-BELNR,            "采购发票
    RMWWR  TYPE RBKP-RMWWR ,            "总金额
    WMWST1 TYPE RBKP-WMWST1,            " 增值税
    WMWST  TYPE RBKP-WMWST1,              "采购不含税金额
    MWSKZ1 TYPE RBKP-MWSKZ1,            "税码
    ERFNAM TYPE RBKP-ERFNAM,           "采购发票创建者
    VBELN  TYPE LIKP-VBELN,             "交货单
    EBELN  TYPE EKKO-EBELN,             "采购订单
    BSART  TYPE EKKO-BSART,             "采购订单类型
  END OF TYP_DATA.

DATA:
  STDATUM     LIKE SY-DATUM,
  STUZEIT     LIKE SY-UZEIT,
  GT_DATA     TYPE TABLE OF TYP_DATA,
  GS_DATA     TYPE TYP_DATA,
  GT_FIELDCAT TYPE LVC_T_FCAT,
  GS_FIELDCAT TYPE LVC_S_FCAT,
  GS_LAYOUT   TYPE LVC_S_LAYO.

INITIALIZATION.
  %_S_DOCNUM_%_APP_%-TEXT = 'IDOC号码'.
  %_S_CREDAT_%_APP_%-TEXT = '创建日期'.

START-OF-SELECTION.
  STDATUM = SY-DATUM.
  STUZEIT = SY-UZEIT.
  PERFORM GET_DATA.
  PERFORM PROCESS_DATA.
  PERFORM WRITERPTRUNRECORD.
  PERFORM DISPLAY_DATA.

*&---------------------------------------------------------------------*
*&      FORM  GET_DATA
*&---------------------------------------------------------------------*
*       获取数据
*----------------------------------------------------------------------*
FORM GET_DATA.
  SELECT
    EDIDS~DOCNUM          "IDOC号码
    EDIDS~CREDAT          "创建日期
    EDIDS~STATUS          "状态
    INTO TABLE GT_DATA
    FROM EDIDS
    WHERE EDIDS~DOCNUM IN S_DOCNUM
      AND EDIDS~CREDAT IN S_CREDAT.
ENDFORM.                    "GET_DATA
*&---------------------------------------------------------------------*
*&      FORM  WRITERPTRUNRECORD
*&---------------------------------------------------------------------*
*       获取数据
*----------------------------------------------------------------------*
FORM WRITERPTRUNRECORD.
  TYPES:BEGIN OF TYP_BW,
          BUKRS LIKE T001-BUKRS,
          WERKS LIKE T001W-WERKS,
        END OF TYP_BW.

  DATA:
    GT_BW TYPE TABLE OF TYP_BW,
    GS_BW TYPE TYP_BW.
  GET TIME.
  CALL FUNCTION 'ZSYS_RPT_RUNRECORD'
    EXPORTING
      TCODE     = SY-TCODE
      PROGRAMM  = SY-CPROG
      DATUMRST  = STDATUM
      UZEITRST  = STUZEIT
      BATCH     = SY-BATCH
      DATUMREND = SY-DATUM
      UZEITREND = SY-UZEIT
      DATUMC    = '20240103'
      RUNNER    = SY-UNAME
      RPTSRC    = 'BC'.

ENDFORM.                    "WRITERPTRUNRECORD
*&---------------------------------------------------------------------*
*&      FORM  PROCESS_DATA
*&---------------------------------------------------------------------*
*       处理数据
*----------------------------------------------------------------------*
FORM PROCESS_DATA.
  LOOP AT GT_DATA INTO GS_DATA.
    "STATUS
    SELECT STATUS INTO GS_DATA-STATUS UP TO 1 ROWS
      FROM EDIDS WHERE DOCNUM = GS_DATA-DOCNUM
      ORDER BY COUNTR DESCENDING.
    ENDSELECT.

    SELECT * INTO TABLE @DATA(LTEDID4)
      FROM EDID4 WHERE DOCNUM = @GS_DATA-DOCNUM
      AND SEGNAM = 'E1EDK02'.
    LOOP AT LTEDID4 INTO DATA(LSEDID4).
      IF LSEDID4-SDATA+0(3) = '009'.
        GS_DATA-VBELNR = LSEDID4-SDATA+3(10)."销售发票
        GS_DATA-GJAHR = LSEDID4-SDATA+44(4)."财年
      ENDIF.
      IF LSEDID4-SDATA+0(3) = '012'.
        GS_DATA-VBELN = LSEDID4-SDATA+3(10)."交货单
      ENDIF.
      IF LSEDID4-SDATA+0(3) = '002'.
        GS_DATA-EBELN = LSEDID4-SDATA+3(10)."采购订单
      ENDIF.
    ENDLOOP.
*采购发票
    SELECT SINGLE BELNR ERFNAM RMWWR WMWST1 MWSKZ1 INTO
      (GS_DATA-BELNR,GS_DATA-ERFNAM,GS_DATA-RMWWR,GS_DATA-WMWST1,GS_DATA-MWSKZ1)
      FROM RBKP  WHERE XBLNR = GS_DATA-VBELNR AND GJAHR = GS_DATA-GJAHR.
    GS_DATA-WMWST = GS_DATA-RMWWR - GS_DATA-WMWST1.
* 销售发票和金额
    SELECT SINGLE ERNAM NETWR MWSBK
      INTO (GS_DATA-ERNAME,GS_DATA-NETWR,GS_DATA-MWSBK) FROM
      VBRK WHERE VBELN = GS_DATA-VBELNR AND GJAHR = GS_DATA-GJAHR.
    GS_DATA-NETWR1 = GS_DATA-NETWR + GS_DATA-MWSBK.

    SELECT SINGLE BSART INTO GS_DATA-BSART FROM EKKO WHERE EBELN = GS_DATA-EBELN.
    MODIFY GT_DATA FROM GS_DATA.
  ENDLOOP.
ENDFORM.                    "PROCESS_DATA
*&---------------------------------------------------------------------*
*&      Form  BUILD_FIELDCAT
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
FORM BUILD_FIELDCAT USING P_FIELDNAME   TYPE FIELDNAME
                          P_QFIELDNAME  TYPE LVC_QFNAME
                          P_CFIELDNAME  TYPE LVC_CFNAME
                          P_REF_TABLE   TYPE LVC_RTNAME
                          P_REF_FIELD   TYPE LVC_RFNAME
                          P_CONVEXIT    TYPE CONVEXIT
                          P_EMPHASIZE   TYPE LVC_EMPHSZ
                          P_SCRTEXT_L   TYPE SCRTEXT_L
                          P_NO_ZERO     TYPE XFLAG.
  GS_FIELDCAT-FIELDNAME     = P_FIELDNAME.
  GS_FIELDCAT-QFIELDNAME    = P_QFIELDNAME.
  GS_FIELDCAT-CFIELDNAME    = P_CFIELDNAME.
  GS_FIELDCAT-REF_TABLE     = P_REF_TABLE.
  GS_FIELDCAT-REF_FIELD     = P_REF_FIELD.
  GS_FIELDCAT-CONVEXIT      = P_CONVEXIT.
  GS_FIELDCAT-EMPHASIZE     = P_EMPHASIZE.
  GS_FIELDCAT-SCRTEXT_L     = P_SCRTEXT_L.
  GS_FIELDCAT-NO_ZERO   = P_NO_ZERO.
  GS_FIELDCAT-COLDDICTXT    = 'L'.
  APPEND GS_FIELDCAT TO GT_FIELDCAT.
  CLEAR: GS_FIELDCAT.
ENDFORM.                    "BUILD_FIELDCAT
*&---------------------------------------------------------------------*
*&      FORM  DISPLAY_DATA
*&---------------------------------------------------------------------*
*       显示数据
*----------------------------------------------------------------------*
FORM DISPLAY_DATA.
  PERFORM BUILD_FIELDCAT USING 'DOCNUM' '' '' '' '' '' '' 'IDOC号码' 'X'.
  PERFORM BUILD_FIELDCAT USING 'CREDAT' '' '' '' '' '' '' '创建日期' ''.
  PERFORM BUILD_FIELDCAT USING 'STATUS' '' '' '' '' '' '' '状态' ''.
  PERFORM BUILD_FIELDCAT USING 'VBELNR' '' '' '' '' '' '' '销售发票' 'X'.
  PERFORM BUILD_FIELDCAT USING 'GJAHR' '' '' '' '' '' '' '财年' 'X'.
  PERFORM BUILD_FIELDCAT USING 'NETWR' '' '' '' '' '' '' '销售发票净额' 'X'.
  PERFORM BUILD_FIELDCAT USING 'MWSBK' '' '' '' '' '' '' '销售发票税额' 'X'.
  PERFORM BUILD_FIELDCAT USING 'NETWR1' '' '' '' '' '' '' '销售发票含税金额' 'X'.
  PERFORM BUILD_FIELDCAT USING 'ERNAME' '' '' '' '' '' '' '销售发票创建人' ''.
  PERFORM BUILD_FIELDCAT USING 'BELNR' '' '' '' '' '' '' '采购发票' 'X'.
  PERFORM BUILD_FIELDCAT USING 'WMWST' '' '' '' '' '' '' '采购发票不含税净额' 'X'.
  PERFORM BUILD_FIELDCAT USING 'WMWST1' '' '' '' '' '' '' '增值税税额' 'X'.
  PERFORM BUILD_FIELDCAT USING 'RMWWR' '' '' '' '' '' '' '采购发票含税金额' 'X'.
  PERFORM BUILD_FIELDCAT USING 'ERFNAM' '' '' '' '' '' '' '采购发票创建人' ''.
  PERFORM BUILD_FIELDCAT USING 'VBELN' '' '' '' '' '' '' '交货单' 'X'.
  PERFORM BUILD_FIELDCAT USING 'EBELN' '' '' '' '' '' '' '采购订单' 'X'.
  PERFORM BUILD_FIELDCAT USING 'BSART' '' '' '' '' '' '' '采购订单类型' ''.

  GS_LAYOUT-CWIDTH_OPT = 'X'.
  GS_LAYOUT-ZEBRA = 'X'.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      I_CALLBACK_PROGRAM      = SY-REPID
"     I_CALLBACK_PF_STATUS_SET = 'PF_STATUS_ALV'
      I_CALLBACK_USER_COMMAND = 'USER_COMMAND_ALV'
      IT_FIELDCAT_LVC         = GT_FIELDCAT
      IS_LAYOUT_LVC           = GS_LAYOUT
      I_DEFAULT               = 'X'
      I_SAVE                  = 'A'
    TABLES
      T_OUTTAB                = GT_DATA
    EXCEPTIONS
      OTHERS                  = 1.
ENDFORM.                    "DISPLAY_DATA
**&---------------------------------------------------------------------*
**&      FORM  PF_STATUS_ALV
**&---------------------------------------------------------------------*
**       TEXT
**----------------------------------------------------------------------*
*FORM PF_STATUS_ALV USING RT_EXTAB TYPE SLIS_T_EXTAB .
*  SET PF-STATUS 'STATUS_ALV' EXCLUDING RT_EXTAB.
*ENDFORM.                    "PF_STATUS_ALV
*&---------------------------------------------------------------------*
*&      FORM  USER_COMMAND_ALV
*&---------------------------------------------------------------------*
*       TEXT
*----------------------------------------------------------------------*
FORM USER_COMMAND_ALV USING R_UCOMM     LIKE SY-UCOMM
                            RS_SELFIELD TYPE SLIS_SELFIELD.
  CASE R_UCOMM.
    WHEN '&IC1'.
      CASE RS_SELFIELD-FIELDNAME.
        WHEN ''.
*          CHECK RS_SELFIELD-VALUE IS NOT INITIAL.
*          SET PARAMETER ID 'MBN' FIELD RS_SELFIELD-VALUE.
*          CALL TRANSACTION 'MB03' AND SKIP FIRST SCREEN.
      ENDCASE.
  ENDCASE.
ENDFORM.                    "USER_COMMAND_ALV

文章来源:https://blog.csdn.net/xiaofei2008gxh/article/details/135695975
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。