Find GRs without IRs
Find GRs without IRs
Continue Reading This Article
Enjoy this article as well as all of our content, including E-Guides, news, tips and more.
This tip is excerpted from Matt Wong's SAP Basis site.
The purpose of this program is to highlight goods receipts (GR) that have no corresponding invoice receipts (IR). Either the invoice has not been received, or it has not been keyed in, or it was keyed in incorrectly.
The program is written as an interface for an ABAP Query. The output should be like that of ME2L (Purchasing IS), except that the format is different, and only those items with different quantities for GR and IR are listed. The code is not very optimized. The only advantage of using it as an ABAP Query is being able to quickly change the online format, sorting, etc.
Outstanding IRs from PO
*&---------------------------------------------------------------------* *& Report ZGR-IR * *& * *&---------------------------------------------------------------------* *& Used for ABAP Query to list goods received that have not been * *& fully invoiced * *&---------------------------------------------------------------------* REPORT ZGR-IR. TABLES: EKBE. "Define Dictionary structure * Conditions to limit search SELECT-OPTIONS: PO_DOC FOR EKBE-EBELN, "Purchase order PO_ITEM FOR EKBE-EBELP, "Purchase order item POSTDATE FOR EKBE-BUDAT, "GR Posting Date MAT_NR FOR EKBE-MATNR. "Material number DATA: GOODSRCVD LIKE EKBE-MENGE, "goods received in units GOODSINVOICED LIKE EKBE-MENGE, "goods invoiced in units LAST_EBELN LIKE EKBE-EBELN, "to keep track of already processed POs LAST_EBELP LIKE EKBE-EBELP, " and PO items BEGIN OF SUMS OCCURS 4, BEWTP LIKE EKBE-BEWTP, MENGE LIKE EKBE-MENGE, SHKZG LIKE EKBE-SHKZG, "Debt/Credit indicator END OF SUMS. *"This comment must always appear after data decl'ns * check header GR documents for un-invoiced inventory SELECT * FROM EKBE WHERE BWART = '101' AND " GR document EBELN IN PO_DOC AND EBELP IN PO_ITEM AND BUDAT IN POSTDATE AND MATNR IN MAT_NR ORDER BY EBELN EBELP BELNR. CHECK " only get the header one NOT ( EKBE-EBELN = LAST_EBELN AND EKBE-EBELP = LAST_EBELP ). LAST_EBELN = EKBE-EBELN. LAST_EBELP = EKBE-EBELP. CLEAR SUMS. CLEAR SUMS[]. SELECT BEWTP MENGE SHKZG FROM EKBE INTO SUMS WHERE EBELN = EKBE-EBELN AND EBELP = EKBE-EBELP. COLLECT SUMS. ENDSELECT. GOODSRCVD = 0. GOODSINVOICED = 0. LOOP AT SUMS. "sums table should now have 4 totals IF SUMS-SHKZG = 'S'. "positive value IF SUMS-BEWTP = 'E'. "goods received GOODSRCVD = GOODSRCVD + SUMS-MENGE. ELSE. "goods invoiced GOODSINVOICED = GOODSINVOICED + SUMS-MENGE. ENDIF. ELSE. " negative value IF SUMS-BEWTP = 'E'. "goods received GOODSRCVD = GOODSRCVD - SUMS-MENGE. ELSE. "goods invoiced GOODSINVOICED = GOODSINVOICED - SUMS-MENGE. ENDIF. ENDIF. ENDLOOP. IF GOODSRCVD = GOODSINVOICED. "amount received = amount invoiced CONTINUE. ELSE. EKBE-BPMNG = GOODSRCVD - GOODSINVOICED. "missing invoice amount ENDIF. * send data to query ENDSELECT. *&---------------------------------------------------------------------* *& End of Report ZGR-IR * *& * *&---------------------------------------------------------------------*
Did you like this tip? If so (or if not) let us know. Send an email to sound off. Or go to our tips page and rate this, and other, tips, or send us one of your own.