📄 grir.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 + -