Skip to main content

Celonis Product Documentation

P2P: Post Goods Receipts

Use Case Name

Intelligent posting of goods receipts

Execution Capacity

Reduce lead times & raise no-touch rates

Process / Data Model

Purchase-to-Pay data model

Semi-/Fully automated




SAP TCode in GUI

MB01 or MIGO

Updated SAP field

EKBE.BUDAT → date on which goods receipt posting was executed

Execution Gap

Often, the purchase order status in the ERP system does not match the reality in the warehouse. Some orders may have been received in the warehouse but they are not booked into the system yet. Likewise, some inbound deliveries are expected to be delayed or have even been cancelled, but the due dates in the system have not been updated yet. Following this mismatch, planners as well as corresponding planning modules cannot fully rely on the material availability of purchases. What if we can support the colleagues in the warehouse to post goods receipts, postpone deliveries that will be delayed, or update the system upon cancelled purchases or deliveries with just on click?

Business Case Calculation

Reducing late goods receipts can have a two-fold impact on businesses.

First, time and effort can be saved due to inefficient communication and follow-ups when determining whether the goods receipt has been posted and whether the delivery has actually already arrived or not. In one customer example, 30 minutes were spent on average for inefficient communication. With the suggested solution, they could eliminate most of the delays in a preventive manner and reduce the overall effort to only five minutes, i.e. for checking the inbound deliveries.

Second, vendor relationships and on-time payment can be improved since a missing goods receipt leads to a delay in paying the associated invoice which has possibly already been received. In the example, 30% of all invoices paid late occurred because of a missing goods receipt. Reducing the number of missing goods receipt also significantly improved the paid-on-time ratio.

Customer Example

A multinational oil and gas company suffers from missing goods receipts for many of their purchase orders. This could be due to a number of reasons: goods may have been received, but have not yet been booked; goods may have been delayed without the delivery date being updated; or orders may have been canceled, without this cancellation being recorded in their system of record. As such, the customer experiences execution gaps where they are often unsure whether the goods they have procured from suppliers have been received or not. As a result, manufacturing and implementation lead times are extended, and manual effort is wasted while following up on missing goods receipt documents or adjusting order and delivery details. The customer was interested in providing their workforce with a very simple method to post full and partial goods receipts, adjust delivery dates, and cancel orders if required.

Customer Solution

Celonis identifies inbound deliveries which are already due and correspondingly asks to warehouse colleagues to update the status. In this customer example, a notification is created if a delivery was due on the previous day to check if:

  • The goods have been received but not booked

  • Delivery dates are adjusted in case of delays

  • PO cancellations are properly maintained in the system

Correspondingly, one would check these expected deliveries and execute one of the following actions:

  • Post full goods receipt

  • Post partial goods receipt

  • Extend the due date of the delivery

  • Cancel the purchase order

Why Celonis EMS Automation?

The first striking advantage of this use case is the built-in notification function which helps the warehouse workers to intelligently filter for relevant delivery which they could possibly have overseen. Second, the suggested actions allow them to execute any of the four required actions within a matter of a few minutes without the need of opening any SAP transaction. Intuitive input fields save precious time and foster a straightforward update of the expected delivery. Using Celonis’ Process Query Language (PQL) the business logic can easily be updated to special requirements of extraordinary purchases or vendors.

Required IT Architecture

The IT architecture required to successfully implement this automation use case can be found in the following help page.

Project Timeline & Effort

The recommended timeline, milestones and project members needed to successfully implement this automation use case can be found in the following help page.

Technical Setup

The table below shows the technical setup steps required to configure this use case successfully.It is strongly recommended that the use case package import and business logic configuration & validation are tackled in parallel to the SAP integration setup.





Update extractor to real-time extractor

Installation Guide

IT Contact

Data Scientist

2 h

Install Celonis on-prem Agent and set to automatic start

Installation Guide

IT Contact

Data Scientist

2 h

Import SAP transport for credit release action

SAP Automation Package

IT Contact

2 h

Create technical SAP user with required permissions

Installation Guide

IT Contact

2 h

Import Use Case Package

The following import guide contains instructions for importing the Action Engine and Studio Skills for this automation use case.

To download the relevant use case package, contact Celonis Support.

Template Building Blocks

After importing the package (see technical setup above), you will find the following building blocks in your EMS team. The vast majority of the Data Scientist person days indicated in the project setup table above is allocated to customizing these building blocks and adjusting the business logic to the customer’s needs.

1. Identify Orders Without Goods Receipts
Action Engine Skill

Action Engine Skills work by scanning all relevant records (e.g. sales orders) for certain rules and criteria whenever the underlying data model is reloaded. These Action Engine Skills trigger actions and automations that are defined in associated Studio Skills.

This action Engine Skill will check all incoming purchase orders (theSignal ID), and will flag those with goods receipts that are ready to be posted.

Signal ID

The Signal ID is the object or record on which the use case is based. In this use case, a new Signal is generated for eachPurchase Order Item ("EKPO"."EBELN" || "EKPO"."EBELP")for which a goods receipt document could be posted.

Customer Example

The Action Engine Skill identifies purchase orders with partial or missing goods receipt documents. This Action Engine Skill is linked to an associated Studio Skill which allows the business user to post a full or partial goods receipt in SAP. This Studio Skill executes a BAPI or RFC call in SAP to post the goods receipt against the relevant purchase order items.

Skill Filters

Action Engine Skills are configured through a set of filters that apply to a particular data model. Usually, a combination of different types of filters are used to define an Action Engine Skill. These can be organizational filters (referring to particular purchasing organizations or supplier groups), process flow filters (related to cycle times, process events and conditions), or record attribute filters (order-specific criteria like document types or material types).

Below, you will find a set of filters and considerations used to identify purchase order items which are ready for goods receipt posting.

Organizational Filters

Organizational filters are those that define the organizational scope of the Action Engine Skill (e.g. company codes, sales organizations, sales groups, profit centers, and other custom criteria).

Purchasing groups and organizations

Different purchasing groups or organizational units may have unique goods receipt rules and requirements.

Example filters:


    -- Purchasing Organization is ABC or DEF


    -- Purchasing Group is UVW or XYZ

Additional remarks:

  • For these kinds of filters, it’s often easiest to use the Column filter in Action Engine to define the required organizational conditions for the Skill.

Particular vendors

Particular vendors or supplier groups may have unique goods receipt rules and requirements.

Example filters:

  • FILTER NOT "VBAK"."LIFNR" IN ('123', '456');

    -- Vendor account number is not 123 or 456

Products or material groups

Particular products or material groups may have unique goods receipt rules and requirements.

Example filters:

  • FILTER NOT "EKPO"."MATNR" IN ('123', '456');

    -- Material number is not 123 or 456


    -- Material number is not ABC or DEF

Process Flow Filters

Process flow filters are those that define process-specific conditions for the Action Engine Skill (e.g. filters related to process cycle times, relevant activities, order process flows, and other custom criteria).

Delivery due yesterday

In order to focus on up-to-date and relevant orders, we can filter on orders that were due for delivery yesterday.

Example filters:


    -- Item delivery date is 1 day before today

Additional remarks:

  • A combination of filters related to delivery dates, payment due dates, and others may be required to define orders that are ready for goods receipt.

Invoice received

Your customer may only wish to post goods receipts on orders for which they have received invoices. Other conditions may also apply.

Example filters:

  • FILTER PROCESS EQUALS 'Record Invoice Receipt' AND PROCESS NOT EQUALS 'Record Goods Receipt';

    -- Invoice has been received, but goods receipt has not yet been posted

Record Attribute Filters

Record attribute filters are those that limit the scope of the Action Engine Skill to records (e.g. purchasing documents) that have particular characteristics (e.g. those with or without particular holds, goods receipts, and other custom criteria).

Goods receipt conditions

This Action Engine Skill should only be triggered if it identifies orders without goods receipts, or with partial goods receipts.

Example filters:

  • FILTER PU_MAX("EKPO", "EKBE"."CPUDT", "EKBE"."VGABE" = '1' AND "EKBE"."SHKZG" = 'S') IS NULL -- no goods receipt exists

    OR (PU_SUM("EKPO", "EKBE"."MENGE", "EKBE"."VGABE" = '1') > 0 AND PU_SUM("EKPO", "EKBE"."MENGE", "EKBE"."VGABE" = '1') < "EKET"."MENGE"; -- partial goods receipt

    -- Goods have been completely received, but goods receipt has not been posted

Documents and order types

Different documents or order types may have unique delivery and lead time requirements. They may also rely on bespoke business rules or filter logic to identify at-risk orders.

Example filters:


    -- Purchasing document category ("EKKO"."BSTYP") is ABC or DEF

Adjustments and Extensions

You can easily apply business rules and logic to your process data using Celonis PQL. To learn more about PQL, you can leverage the free-of-charge Analyst Training Track in the Celonis Learning Management System. The training tracks for “Analysis Building Basics”, “Basic Coding with PQL”, and “Analysis Building Advanced” will equip you with a deep understanding of the power of PQL.

The business logic in the Action Engine Skill outlined above is completely customizable. For example, it’s easy to send a notification (e.g. email) to the customer after the delivery date has been changed. For the full list of available actions that can be performed through EMS automation, see EMS Help Page.Actions

2. Post Goods Receipt in SAP
Studio Skill

Studio Skills define the actions and system automations that are performed against a record (e.g. purchase order) when an Action Engine Skill is triggered.

This Studio Skill posts a full or partial goods receipt against a purchase order in SAP when the associated invoice has been received, but the goods receipt has not yet been posted. Other conditions may also apply for your customer.

Customer Example

The Studio Skill is executes a BAPI or RFC call in the SAP system to post a full or partial goods receipt against an order.

Skill Configuration

Studio Skills are composed of asensorand one or moreactionsperformed in Celonis or connected IT systems. When an Action Engine Skill is triggered, the sensor executes the system actions defined in the associated Studio Skill. Usually, a combination of different types of actions are defined in the Studio Skill. These can be Celonis actions (query a data model, write data to a table or execute a machine learning script), system actions (apply data filters, process routers, or loops), ERP actions (remove a delivery block in SAP or update an account in Salesforce), communication actions (email a customer or Slack a colleague), and many others.

Below you will find the sequence of actions required to post a goods receipt against a purchase order in SAP.

1) Action Engine Sensor

The Action Engine sensor will execute the Studio Skill when the associated Action Engine Skill is triggered.

Example custom inputs:

  • Goods receipt posting date: ${b1["posting date"]}

    -- Defines the posting date for the goods receipt document (today)

  • Delivered quantity: ${b1["delivered quantity"]}

    -- Defines the quantity of items that was delivered

  • Purchasing document ("EKKO"."EBELN"): ${b1["purchasing document"]}

    -- Defines the purchase order against which the goods receipt will be posted

Additional remarks:

  • Based on your customer’s needs, and especially if using the Advanced SAP Action to execute the BAPI_GOODSMVT_CREATE BAPI, further input fields may be required.

2) Execute SAP Action

The Execute SAP Action step will trigger a BAPI or RFC call in SAP to retrieve, create or change defined elements (goods receipts, delivery blocks, sales order details, etc.) of a business object (purchase order, schedule line, etc.).

Example actions:

  • Post Goods Receipt

    -- Posts a goods receipt against a purchase order

    -- Business Object: Purchase Order Item; Action Type: Create

Example input requirements:

  • Posting date: ${b1["posting date"]}

    -- Defines the date on which the goods receipt is posted (likely today)

  • Goods movement code

    -- Defines the movement as a goods receipt for purchase order (01)

  • Movement type

    -- Defines the movement as a goods receipt for purchase order (101)

  • Quantity: ${b1["delivered quantity"]}

    -- The quantity of delivered goods (which will determine whether the goods receipt is a complete or partial GR)

  • Purchase order: ${b1["purchasing document"]}

    -- Defines the purchase order against which the goods receipt is posted

  • Movement indicator

    -- Defines the movement as a goods receipt for purchase order (B)

Additional remarks:

  • Within your Studio Skill, a simple SAP action is sufficient to update the delivery dates at both the header and item level. Based on your customer’s needs, however, you could use an advanced SAP action to make more personalized adjustments to the order details.