Has your goods receipt/clearing account also degenerated into a garbage dump?
A good purchasing process in SAP uses a goods receipt/clearing account (GR/IR account) to always have an overview of the goods you have already received and for which you have already received an incoming invoice. In practice, unfortunately, I am forever seeing eternally open positions in this account, i.e. what basically amounts to an “accounting garbage dump”. Here, we explain why the GR/IR account is important and how to find out if you are sitting on a pile of GR/IR garbage.
Why should you keep the goods receipt/clearing account “clean”?
The GR/IR account is used to indicate that the goods have already been received for an existing A/P invoice. From an accounting point of view, the GR/IR account is an open item account because you want to clear items against the appropriate invoice for each goods receipt. Open items from the GR/IR account mean that
- there are invoices for which the goods receipt is still outstanding or
- there are goods receipts that have not yet been invoiced.
If goods receipts on the GR/IR account are open for ever, this can mean that the corresponding invoices were not cleared against the goods receipt on the GR/IR account. When looking at things from the point of view of a proper internal control system (ICS), this can be an initial indicator of an inadequate auditing process. In such cases, the auditor should drill down deeper.
How can I check in an overview to see if the GR/IR account is not being maintained properly?
To find out whether your GR/IR account in SAP poses a problem, it is advisable to check whether open items on the GR/IR account are “eternally” open. The following statement shows you how many items are open and for how long they have been open. In SAP, use the transaction “DBACOCKPIT” to execute this query and navigate via Diagnostics to the SQL Editor (tested with SAP HANA):
SELECT BSEG.MANDT, BSEG.BUKRS, BSEG.GJAHR, SHKZG, HKONT, DAYS_BETWEEN(TO_DATE(BUDAT), TO_DATE(NOW()) ) AGE, COUNT(*) FROM BSEG JOIN BKPF ON (BSEG.MANDT=BKPF.MANDT AND BSEG.BUKRS=BKPF.BUKRS AND BSEG.GJAHR=BKPF.GJAHR AND BSEG.BELNR=BKPF.BELNR) WHERE HKONT='0000160000' AND AUGBL='' GROUP BY BSEG.MANDT, BSEG.BUKRS, BSEG.GJAHR, BSEG.SHKZG, HKONT, DAYS_BETWEEN(TO_DATE(BUDAT), TO_DATE(NOW())) ORDER BY COUNT(*) DESC;
To explain the SQL query, we split it back up into its individual components:
As usual, the query starts with a read-only query (SELECT). The necessary fields for the analysis are defined directly afterwards: Client (MANDT), company code (BUKRS), fiscal year (GJAHR), debit/credit indicator (SHKZG), G/L account in General Ledger Accounting (HKONT), age of open item (AGE) and number of open GR/IR items (COUNT(*) FROM BSEG):
SELECT BSEG.MANDT, BSEG.BUKRS, BSEG.GJAHR, SHKZG, HKONT, DAYS_BETWEEN(TO_DATE(BUDAT), TO_DATE(NOW()) ) AGE, COUNT(*) FROM BSEG
Unfortunately, the posting date (BUDAT) is not in the document segment table (BSEG), but in the document headers (BKPF). Therefore, a join is required using the primary key to table BKPF:
JOIN BKPF ON (BSEG.MANDT=BKPF.MANDT AND BSEG.BUKRS=BKPF.BUKRS AND BSEG.GJAHR=BKPF.GJAHR AND BSEG.BELNR=BKPF.BELNR)
To evaluate the correct GR/IR account, the result must still be restricted to the corresponding GR/IR account. The number marked in red represents the account number of the GR/IR account, which must be adjusted in each case. Only items that have not been cleared are of interest (AUGBL=”):
WHERE HKONT='0000160000' AND AUGBL=''
Finally, the same rows in the result set are grouped and sorted in descending order:
GROUP BY BSEG.MANDT, BSEG.BUKRS, BSEG.GJAHR, BSEG.SHKZG, HKONT, DAYS_BETWEEN(TO_DATE(BUDAT), TO_DATE(NOW())) ORDER BY COUNT(*) DESC;
An exemplary result looks like this:
The items that will no doubt be of interest are those that are open for more than a month (>=30 days) and especially those items that are more than several months old.
How can I clean up my WE/RE account?
If the GR/IR account contains many open, obsolete items, it is time-consuming to clean up the account. One would actually have to reconcile all invoices and associated goods receipts and then perform a clearing in each case. That would be a clean way of proceeding. In practice, you sometimes deal with the issue by clearing all open items against each other and then posting one large clearing. Any differences in debit minus credit are then eliminated in one large sum. This does not really fulfil the true purpose of open item accounting, but at least it leads to the items being closed when the clear-up is performed. It is of course then important that the process is performed properly on an ongoing basis once the clear-up is complete, otherwise the mess will soon start to build up again.
How the “Missing clearing of GR/IR-Account” indicator was created
In one of our recent blog articles, the new process visualization page including compliance violations was presented. During a workshop, using the process visualization page, it became apparent that there are processes that either end after the goods receipt or begin with an invoice. The following is an example of such a process:
The diagram clearly shows that neither a purchase order nor a goods receipt exists in the process. However, this does not mean that these do not exist, but simply that the reference from the gross invoice receipt to the purchase order is missing.
“Why is this so critical?”
… some of you may be asking yourselves. Well, let’s take a look at how the GR/IR account works, by using a concrete example:
Suppose we order 10 screws for a unit price of one euro each, but our vendor only delivers 8 screws, then there is effectively a difference of 2 screws. However, the 10 screws are still on the invoice and the invoice is only compared against the purchase order due to the missing reference to the goods receipt:
Order: 10 screws
Goods receipt: 8 screws
Invoice: 10 screws
What unit of measure do you think is paid for if there is no reference to the goods receipt?
Based on this insight, I have developed the “Missing clearing of GR/IR-Account” indicator, which is currently in test mode / beta status.
If all of this sounds too technical to you, then you can have the whole thing analyzed automatically with an appropriate setting in zap Audit. If you wish to do this, then please do not hesitate to contact us: