When it comes to receiving sales orders electronically, it is crucial to maintain total control over pricing. Here’s how.
Key Concept
Electronic Data Interchange (EDI) is the exchange of electronic data between business partners who use a number of different hardware and software solutions. The exchange can involve documents such as sales orders, invoices, and advanced shipping notices. The data exchanged is always formatted according to predefined standards. In the United States, the most widely used EDI standard ASC X12 is coordinated by the American National Standards Institute (ANSI). Use ANSI X12 transaction set 850 and SAP IDoc type ORDERS01 for incoming sales orders.
Certain EDI transactions require you
to use more control methods because of
their direct impact on your company’s
revenue. For example, incoming sales
orders are often subject to pricing disputes.
Automated EDI sales orders with incorrect
pricing, if not checked, could cause
a lot of turmoil. The company could end
up in a situation in which customers
are refusing to pay the invoices or,
even worse, experience a loss of loyal
customers all due to the lack of monitoring
and controlling of price discrepancies
on incoming sales documents.
As more and more sales orders are received
via EDI, it is vital to ensure that all
expected incoming pricing is checked
against the sales and distribution pricing
maintained in your R/3 or ECC system.
They both provide standard functionality
to help you identify pricing discrepancies
between the customer’s expected
sales price and the sales price your
system determines on incoming EDI sales
orders.
The steps below guide you through the
process of configuring R/3 to capture
the customer’s expected price on
incoming EDI sales orders and check that
price against a customizable factor of
deviation from the actual sales price
as determined by the Sales and Distribution
(SD) module of R/3. You will also gain
an understanding of how to block an incoming
sales order from further processing if
the price discrepancy is unacceptable,
and find out how to access standard reporting
tools that allow the release of blocked
EDI sales orders within your system.
Although my example is from an R/3 system,
the process is the same for ECC.
Step 1. Configure pricing
condition types. First you
must define the pricing condition
types applicable to your incoming
EDI sales order process. SAP provides
two standard condition types, EDI1 and EDI2,
which you can use in their standard
form without modification or copy
and change into custom condition
types if necessary.
To configure these condition types
follow menu path Sales and
Distribution>Basic Functions>Pricing>Pricing
Control> Define Condition Types>Maintain
Condition Types or use transaction
code V/06. Select
condition type EDI1 and
click on the magnifying glass icon
in the top left corner to access details. Figure
1 demonstrates the standard
configuration of this condition type.
Keep in mind that if you wish to change
any of these settings you should copy
condition type EDI1 into
a new custom one by using the copy
as icon (circled in Figure 1).

Figure 1
Configure condition type EDI1
The key difference between condition
types EDI1 and EDI2 is
the calculation type setting. EDI1 captures
the incoming price rate that affects
the total value of the sales order
through multiplication by quantity. EDI2 captures
the requested line item value, which
does not vary with changes in quantity.
The choice between the two condition
types is dictated purely by the business
process in place between the two EDI
partners.
Step 2. Modify the pricing
procedure. Once you choose
the appropriate condition types,
proceed to the configuration of the
sales order pricing procedure. Theoretically
different sales orders can have different
pricing procedures, depending on
the configuration of the pricing
procedure determination in your system.
I’m going to assume that only
one pricing procedure exists for
sales orders. If this is not the
case, you need to repeat the steps
detailed below for each relevant
pricing procedure.
Follow menu path Sales and
Distribution> Basic Functions>Pricing>Pricing
Control>Define and Assign Pricing
Procedures>Maintain Pricing Procedures or
use transaction V/08 for
quicker access (Figure 2).
Select the appropriate pricing procedure
and double-click on the Control
data node in the top left
corner. Normally, you should assign
both condition types EDI1 and EDI2 to
the pricing procedure, as there might
be several different processes for
capturing the requested price with
various EDI partners. Also, typical
practice is assign them at the very
bottom of the pricing procedure to
ensure that the system compares them
to values that were already affected
by any discounts or surcharges.

Figure 2
Configure the pricing procedure
It is crucial to mark both configuration
types as Mandatory (Man)
and Statistical (Stat).
Two standard alternative calculation
routines, 8 and 9,
control possible price discrepancies — differences
between the EDI expected price provided
by the EDI partner and the actual price
as determined by your R/3 system. Routine 8 ensures
that the difference between the net
value of the line item (KOMP-NETWR)
and the value of the EDI condition
type (XKWER) is not
greater than $1.00. Routine 9,
on the other hand, ensures that the
difference between the net price of
the line item (KOMP-NETPR)
at the base unit of measure and the
rate of the EDI condition type (XKOMV-KBETR)
is not greater than $0.05. The choice
between the two routines depends on
the business process, as only one alternative
calculation routine can be assigned
to any single condition type within
a specific pricing procedure.
Often it is necessary to change the
standard pricing discrepancy barriers
of $1.00 for value and $0.05 for rate.
To change a barrier, follow menu path Sales
and Distribution>System Modifications> Routines>Define
Formulas For Pricing or use
transaction code VOFM.
Keep in mind that this step requires
an ABAP developer and an access key.
In the top menu, choose Formulas>Condition
Value and create a new routine
by assigning a routine number within
the allowed namespace between 501 and
999. Then provide an informative description
and assign the new routine to application V (Figure
3).

Figure 3
Create a custom condition value routine
You can copy the actual syntax of
the routine from routine 8 or 9,
depending on the requirement, and change
it accordingly. Figure 4 demonstrates
the possible syntax for ensuring that
the value is no greater than $10.00,
instead of the usual limit of $1.00.
The syntax in Figure 4 was
copied manually from routine 8 and
modified to reflect the new pricing
discrepancy barrier (1000 assigned
as the maximum difference in the routine
actually constitutes $10.00). Once
you create and activate the routine,
assign it to the EDI1 or EDI2 condition
type in the pricing procedure, similarly
to the assignment of routines 8 and 9 in
Figure 2.

Figure 4
Create custom routine syntax
Step 3. Maintain the incompletion
procedure. Now that you
have assigned the EDI1 and EDI2 condition
types to the pricing procedure along
with the relevant condition value
routines, you must maintain the incompletion
procedure. This blocks further processing
of incoming EDI sales orders that
contain items that did not pass the
pricing discrepancy requirements
specified in the routine.
Follow menu path Sales and
Distribution> Basic Functions>Log
of Incomplete Items>Define Incompletion
Procedures or use transaction OVA2.
I’ll demonstrate the configuration
steps by copying a standard incompletion
procedure, 20, into
a new custom incompletion procedure, ZY.
If you already have a custom incompletion
procedure defined, you can avoid
the copying and go straight to the
assignment of the new field.
Ensure that you are in change mode
by clicking on the glasses and pencil
icon. At the Groups node
level, select the B: Sales – Item group
on the right and click on the Procedures node
on the left pane. In the resulting
screen (Figure 5),
select incompletion procedure 20 and
click on the copy as icon in the top
left corner.

Figure 5
Copy incompletion procedure 20
Provide a two-character incompletion
procedure ID starting with either a Y
or
a Z
and an informative
description and press Enter. Click
on the Copy all option
on the pop-up screen to proceed. Select
your new incompletion procedure ZY and
double-click on the Fields node
in the left menu. Now click on the New
entries button and add the Expected
price field to the incompletion
procedure. Figure 6 shows
an example of such an entry. The status
of the entry determines which further
process needs to be blocked — for
example, delivery processing and invoicing.
Save your new incompletion procedure.

Figure 6
Maintain the incompletion procedure
Make sure to assign the new incompletion
procedure ZY to all
applicable item categories — for
example, standard sales order item
category TAN. To do
so, go to IMG menu path Sales
and Distribution> Basic Functions>Log
of Incomplete Items>Assign Incompletion
Procedure> Assign procedures to
the item categories or use
transaction VUP2.
Step 4. Monitor incoming
sales orders. Once you have
completed the configuration detailed
above, you can use some of the standard
R/3 reporting tools to monitor, identify,
and release incoming EDI sales orders
that were blocked due to pricing
discrepancies outside the acceptable
range. Proceed to SAP Easy Access
menu path Logistics>Sales
and Distribution> Sales>Information
System>Worklists> Release Customer
Expected Price or use transaction
code V.25 for quicker
access. The user can select any number
of EDI sales orders blocked by the
system due to pricing discrepancies
and release them for further processing
(Figure 7).

Figure 7
Release sales orders for processing
A proper business process should be
in place to ensure that blocked sales
orders are processed correctly. You
can send back an order acknowledgment
document to the customer via EDI, stating
the actual sales price as determined
by your system. Sales personnel can
either change the pricing on the sales
order manually to reflect a price that
is closer to what the customer expected,
or simply release the sales order as-is.
In the end, it is always your sales
price, as determined by the SD module,
and not the customer’s expected
price, that drives the value of the
sales order and ultimately the invoice
in your R/3 system.
Anton Karnaukhov
Anton Karnaukhov is a senior IT manager at Pacific Coast Companies, Inc., in Sacramento, California. He earned an MBA degree at Heriot-Watt University and a BS/BA degree with a specialization in computer information systems at Western Carolina University. Anton has more than eight years of SAP implementation and development experience focusing on business intelligence and logistics modules in the manufacturing and resale industries.
You may contact the author at anton.karnaukhov@paccoast.com.
If you have comments about this article or publication, or would like to submit an article idea, please contact the editor.