⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 grir.txt

📁 abap 编写的 能够显示GR/IR余额的同时显示未清数量、订单货币
💻 TXT
字号:
*&GR/IR/ZDK    &*
************************GR/IR 行项目报表*****************************
****需求简述: 能够显示GR/IR余额的同时显示未清数量、订单货币*********
****开发思路: 通过BSIS/BSAS表中的定位字段可以找出采购订单和行项目***
****           通过BSIS/BSAS表中的参考码3可以找出收货和校验的凭证对应
*********************************************************************


REPORT Z992r
LINE-SIZE 280 NO STANDARD PAGE HEADING MESSAGE-ID YB.
TABLES: BSAS,BSIS,EKBE,LFA1.
* BSAS: 总账已清项
* BSIS: 总账未清项
* BSIK:  供应商的未清项
* BSAK:  供应商的已清项
* EKKO:  采购订单+供应商
* LFA1:  供应商主数据

SELECTION-SCREEN:  BEGIN OF BLOCK XX WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS:
           BUDAT FOR BSAS-BUDAT
                       NO INTERVALS NO-EXTENSION OBLIGATORY,
           CCODE FOR BSAS-BUKRS OBLIGATORY,
           GSBER FOR BSAS-GSBER ,
           LIFNR FOR LFA1-LIFNR ,
           EBELN FOR EKBE-EBELN .

SELECTION-SCREEN END OF BLOCK XX.

START-OF-SELECTION.


  DATA:BEGIN OF IOUT OCCURS 10,
       BUKRS  LIKE    BSIS-BUKRS,          "公司代码
       gsber  like    bsis-gsber,          "业务范围
       ZUONR  LIKE    BSAS-ZUONR,          "定位
       EBELN  LIKE    BSIK-EBELN,          "采购订单号
       EBELP  LIKE    BSIK-EBELP,          "采购订单行项目
       LIFNR  LIKE    LFA1-LIFNR,          "供应商编号
       NAME1   LIKE   LFA1-NAME1,          "供应商名称
       BUDAT  LIKE    BSIS-BUDAT,          "记账日期
       SHKZG  LIKE    BSIS-SHKZG,          "借贷标志
       DMBTR  LIKE    BSIS-DMBTR,          "本位币金额
       MATNR  like    ekpo-matnr,           "物料编号
       wrbtr  like    bsis-wrbtr,           "订单货币金额
       WAERS  like    bsis-waers,           "订单货币
       MENGE  TYPE P DECIMALS 2,            "数量
       BKTXT  LIKE    BKPF-BKTXT,            "参照-特殊含义
       XREF3  like    bsis-XREF3,            "参考码
       GJAHR  like    ekbe-GJAHR,            "物料凭证年
       BELNR  like    ekbe-BELNR,            "物料凭证编号
       BUZEI  like    ekbe-BUZEI,            "行项目编号
       BEWTP  like    ekbe-BEWTP,           "采购订单历史的类别
       LFBNR  LIKE    EKBE-LFBNR,            "参考物料凭证编号
       LFPOS  LIKE    EKBE-LFPOS,            "参考行项目编号
       ZTERM  LIKE    EKKO-ZTERM,            "付款条件
       TEXT1  LIKE    T052U-TEXT1,           "付款条件说明
       END OF IOUT.


  DATA: IOUT0 LIKE IOUT OCCURS 0 WITH HEADER LINE.
  DATA: IOUT1 LIKE IOUT OCCURS 0 WITH HEADER LINE.
  DATA: Iekbe LIKE IOUT OCCURS 0 WITH HEADER LINE.
  DATA: Iekbe0 LIKE IOUT OCCURS 0 WITH HEADER LINE.

  DATA: lines type i .

*  SELECT BUKRS  SHKZG  DMBTR ZUONR BUDAT  GSBER WRBTR WAERS
*         XREF3
*         FROM  BSAS
*               INTO (IOUT-BUKRS,IOUT-SHKZG,IOUT-DMBTR,IOUT-ZUONR,
*                     IOUT-BUDAT,IOUT-GSBER,IOUT-WRBTR,IOUT-WAERS,
*                     iout-XREF3)
*
*       WHERE  BUKRS IN CCODE AND GSBER IN GSBER
*       AND  HKONT = '0009920000'
*       AND BUDAT <= BUDAT-LOW AND AUGDT > BUDAT-LOW .
*
*    COLLECT IOUT.
*  ENDSELECT.

  SELECT BUKRS  SHKZG  DMBTR ZUONR BUDAT gsber WRBTR WAERS
         XREF3
          FROM   BSIS
               INTO  (IOUT-BUKRS,IOUT-SHKZG,
                     IOUT-DMBTR ,IOUT-ZUONR,IOUT-BUDAT,
                     iout-gsber,IOUT-WRBTR,IOUT-WAERS,
                     iout-XREF3)
       WHERE  BUKRS IN CCODE AND GSBER IN GSBER
       AND  HKONT = '0009920000'
       AND BUDAT <= BUDAT-LOW .

    COLLECT IOUT.
  ENDSELECT.

  LOOP AT IOUT.
    IF IOUT-SHKZG = 'S'.
      IOUT-DMBTR = - IOUT-DMBTR.
      IOUT-WRBTR = - IOUT-WRBTR.
      MODIFY IOUT.
    ENDIF.
    CLEAR  IOUT.

  ENDLOOP.



*describe table iOUT0 lines lines.
*IF LINES = 0.
*   MESSAGE E001(YB) WITH '没有可选的数据!'.
*ENDIF.



  LOOP AT IOUT .
    MOVE IOUT-BUKRS  TO  IOUT0-BUKRS.
    MOVE IOUT-gsber  TO  IOUT0-gsber.
    MOVE IOUT-ZUONR  TO  IOUT0-ZUONR.
    MOVE IOUT-XREF3  TO  IOUT0-XREF3.

    MOVE IOUT-DMBTR  TO  IOUT0-DMBTR.
    MOVE IOUT-WRBTR  TO  IOUT0-WRBTR.
    MOVE IOUT-WAERS  TO  IOUT0-WAERS.
    COLLECT IOUT0.
    CLEAR IOUT0.
  ENDLOOP.

  DELETE IOUT0 WHERE DMBTR = 0.
  describe table iOUT0 lines lines.
  IF LINES = 0.
    MESSAGE E001(YB) WITH '没有可选的数据!'.
  ENDIF.

  LOOP AT IOUT0.
    IOUT0-EBELN  = IOUT0-ZUONR+0(10).
    IOUT0-EBELP  = IOUT0-ZUONR+10(5).
    IOUT0-GJAHR  = IOUT0-XREF3+0(4).
    IOUT0-BELNR  = IOUT0-XREF3+4(10).
    IOUT0-BUZEI  = IOUT0-XREF3+14(5).

    SELECT SINGLE LIFNR FROM EKKO   "替换供应商编号
          INTO (IOUT0-LIFNR)
          WHERE BUKRS = IOUT0-BUKRS AND EBELN = IOUT0-EBELN.
    SELECT SINGLE NAME1 FROM LFA1    "替换供应商名称
       INTO (IOUT0-NAME1)
           WHERE LIFNR = IOUT0-LIFNR .
    MODIFY  IOUT0.

  ENDLOOP.


* delete iout0 where ebeln <> '4500092228' .
*  Delete iout0 where EBELP <> '00030' .
  describe table iOUT0 lines lines.
  IF LINES = 0.
    MESSAGE E001(YB) WITH '没有可选的数据!'.
  ENDIF.
  CLEAR IOUT0.

*  计算未清数量

  select EBELN EBELp LFBNR BEWTP MENGE matnr SHKZG
         LFGJA LFPOS BELNR  BUZEI
      from ekbe
      into (iekbe-ebeln,iekbe-ebelp,iekbe-belnr,iekbe-bewtp,
            iekbe-menge,iekbe-matnr,IEKBE-SHKZG,
            iekbe-GJAHR,IEKBE-BUZEI,IEKBE-LFBNR,IEKBE-LFPOS)
      for all entries in iout0
      where ebeln = iout0-ebeln   and
            ebelp = iout0-ebelp   and
            LFBNR = IOUT0-BELNR   AND
            LFGJA = IOUT0-GJAHR   AND
            LFPOS = IOUT0-BUZEI   AND
            bewtp = 'E' AND
*

             BUDAT <= BUDAT-low.

    APPEND IEKBE.

  ENDSELECT.


  select EBELN EBELp LFBNR BEWTP MENGE matnr SHKZG
         LFGJA LFPOS  BELNR  BUZEI
      from ekbe
      into (iekbe-ebeln,iekbe-ebelp,iekbe-belnr,iekbe-bewtp,
            iekbe-menge,iekbe-matnr,IEKBE-SHKZG,
            iekbe-GJAHR,IEKBE-BUZEI,IEKBE-LFBNR,IEKBE-LFPOS)
      for all entries in iout0
      where ebeln = iout0-ebeln  and
            ebelp = iout0-ebelp  and
            LFBNR = IOUT0-BELNR  AND
            LFGJA = IOUT0-GJAHR  AND
            LFPOS = IOUT0-BUZEI   AND
            bewtp = 'Q'
            AND BUDAT <= BUDAT-low.

    APPEND IEKBE.

  ENDSELECT.


  LOOP AT IEKBE .
    IF IEKBE-BEWTP = 'E' .
      IF IEKBE-SHKZG = 'H'.
        IEKBE-menge = - IEKBE-menge.
        MODIFY IEKBE.
      ENDIF.
    ELSE.
      IF IEKBE-SHKZG = 'S'.
        IEKBE-menge = - IEKBE-menge.
        MODIFY IEKBE.
      ENDIF.

    ENDIF.

    MOVE IEKBE-BELNR  TO  IEKBE0-BELNR.
    MOVE IEKBE-GJAHR  TO  IEKBE0-GJAHR.
    MOVE IEKBE-BUZEI  TO  IEKBE0-BUZEI.
    MOVE IEKBE-EBELN  TO  IEKBE0-EBELN.
    MOVE IEKBE-EBELP  TO  IEKBE0-EBELP.
    MOVE IEKBE-MATNR  TO  IEKBE0-MATNR.
    MOVE IEKBE-MENGE  TO  IEKBE0-MENGE.

    COLLECT IEKBE0.

  ENDLOOP.
  LOOP AT IOUT0.
    READ TABLE IEKBE0 WITH KEY
                        BELNR = IOUT0-BELNR
                        GJAHR = IOUT0-GJAHR
                        BUZEI = IOUT0-BUZEI
                        EBELN = IOUT0-EBELN
                        EBELP = IOUT0-EBELP.
    IF SY-SUBRC = 0.
      IOUT0-MATNR = IEKBE0-MATNR.
      IOUT0-MENGE = IEKBE0-MENGE.
      MODIFY IOUT0.

    ENDIF.

  ENDLOOP.

  LOOP AT IOUT0.
    select SINGLE BUDAT BKTXT INTO (IOUT0-BUDAT,IOUT0-BKTXT)
           from MKPF
           WHERE    MBLNR = IOUT0-BELNR
              AND   MJAHR = IOUT0-GJAHR .
    IF SY-SUBRC = 0.
      MODIFY IOUT0.
    ENDIF.

  ENDLOOP.

  DELETE IOUT0 WHERE dmbtr =  0 .
  describe table iOUT0 lines lines.
  IF LINES = 0.
    MESSAGE E001(YB) WITH '没有可选的数据!'.
  ENDIF.

  LOOP AT IOUT0.
    SELECT SINGLE ZTERM INTO IOUT0-ZTERM
       FROM EKKO WHERE EBELN = IOUT0-EBELN.
    IF SY-SUBRC = 0.
        SELECT SINGLE TEXT1 INTO IOUT0-TEXT1
        FROM T052U WHERE ZTERM = IOUT0-ZTERM.
           IF SY-SUBRC = 0 .
              MODIFY IOUT0.
           ENDIF.
  ENDIF.

ENDLOOP.


sort iout0  by  BUKRS  GSBER LIFNR EBELN EBELP .

LOOP AT IOUT0  where dmbtr <>  0
             AND LIFNR IN LIFNR
             AND GSBER IN GSBER
             AND EBELN IN EBELN
             AND BUKRS IN CCODE.
  WRITE:/1  IOUT0-BUKRS  LEFT-JUSTIFIED,
         10 IOUT0-GSBER  LEFT-JUSTIFIED,
         20 IOUT0-LIFNR  LEFT-JUSTIFIED,
         34 IOUT0-NAME1  LEFT-JUSTIFIED,
         80 IOUT0-BKTXT  LEFT-JUSTIFIED,
        110 IOUT0-EBELN  LEFT-JUSTIFIED,
        125 IOUT0-EBELP  LEFT-JUSTIFIED,
        135 IOUT0-MATNR LEFT-JUSTIFIED,
        160 IOUT0-MENGE LEFT-JUSTIFIED,
        174 IOUT0-WAERS LEFT-JUSTIFIED,
        182 IOUT0-WRBTR right-JUSTIFIED,
        202 IOUT0-DMBTR right-JUSTIFIED,
        220 IOUT0-BUDAT LEFT-JUSTIFIED,
        235 IOUT0-zterm LEFT-JUSTIFIED,
        245 IOUT0-text1 LEFT-JUSTIFIED.

  AT LAST.
    skip.
    SUM.
    FORMAT COLOR = 6.
    WRITE: 10 '总计:',202 iOUT0-dmbtr .
    WRITE: 238 ' '.
    skip.
  ENDAT.



ENDLOOP.

TOP-OF-PAGE.
  IF SY-PAGNO = 1.
    FORMAT COLOR = 7.
  WRITE:/60 '        GR/IR 992科目按照供应商列示明细表                '
         .
      WRITE: 150'
'
.
    FORMAT COLOR = 3.
    WRITE:190 '                                          '.
    WRITE:/1 '截止日期', 15 budat-low.
    WRITE:190 '                                          '.
    WRITE:/1'制 表 人',  15 SY-UNAME.
    WRITE:190 '                                          '.
    SKIP 1.
    FORMAT COLOR = 4.
    WRITE:/1 '公司代码', 10 '业务范围',
           20'供应商编号',
           34'供应商描述',80 '抬头文本',110'采购订单' ,125 '行项目',
           135 '物料编号',160'未清数量',
           174 '货币' ,182'凭证金额',
           202 '本位币金额 ' ,
           220'记账日期      ',
           235'付款条件',
           245 '条件说明'.
  ENDIF.

END-OF-PAGE.

  DATA : BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE.
  DATA: MESSTAB LIKE TABLE OF BDCMSGCOLL WITH HEADER LINE.  "SAP系统信息

  DATA  ZP(10).

AT LINE-SELECTION.
  ZP = SY-LISEL+109(10).
  READ TABLE IOUT0 WITH KEY EBELN = ZP.
  IF SY-SUBRC = 0.
    perform bdc_dynpro      using 'SAPMM06E' '0105'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'RM06E-BSTNR'.
    perform bdc_field       using 'RM06E-BSTNR'
                                  ZP.
    PERFORM CALL_TRANSACTION.
  ELSE.
    MESSAGE E001 WITH TEXT-016.
  ENDIF.
*---------------------------------------------------------------------*
*       FORM BDC_DYNPRO                                               *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
*  -->  PROGRAM                                                       *
*  -->  DYNPRO                                                        *
*---------------------------------------------------------------------*
FORM BDC_DYNPRO USING PROGRAM DYNPRO.
  CLEAR BDCDATA.
  BDCDATA-PROGRAM  = PROGRAM.
  BDCDATA-DYNPRO   = DYNPRO.
  BDCDATA-DYNBEGIN = 'X'.
  APPEND BDCDATA.
ENDFORM.                               " BDC_DYNPRO

*---------------------------------------------------------------------*
*       FORM BDC_FIELD                                                *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
*  -->  FNAM                                                          *
*  -->  FVAL                                                          *
*---------------------------------------------------------------------*
FORM BDC_FIELD USING  FNAM FVAL.
  CLEAR BDCDATA.                       "BDCDATA 新字段结构表
  BDCDATA-FNAM = FNAM.                 "字段名
  BDCDATA-FVAL = FVAL.                 "字段值
  APPEND BDCDATA.
ENDFORM.                               " BDC_FIELD


*---------------------------------------------------------------------*
*       FORM CALL_TRANSACTION                                         *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM CALL_TRANSACTION.
  CLEAR MESSTAB.
  REFRESH MESSTAB.

  CALL TRANSACTION 'ME23'
      USING   BDCDATA
      MODE   'A'                       " Synchronous update
      MESSAGES INTO MESSTAB.
  REFRESH BDCDATA.
ENDFORM.                               " CALL_TRANSACTION_YHDK

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -