Professional Documents
Culture Documents
SD Pricing Config Tips1
SD Pricing Config Tips1
Procedure
This configuration is done when user request for new pricing condition type other than the
standard ones provided by the system.
V/06 - Create new condition types by copying a similar conditions type and changing it
according to your needs.
Click on the Pricing Procedures e.g. PR0000 - Condition Supplements for PR00
Click Control - e.g. Tick Mdt if you want the condition type to be mandatory
o OV34 - Define account key
o OV35 - Assign account key
Actky - Revenue account
Accrls - Accruals account
OVKK - Determine which Pricing Procedures to use for which Condition Type.
You can add additional decimals for a currency through a work around method.
Set up a currency let's say instead of USD call it US$ ( OY03 ) and define the number of decimal
places ( OY04 ) to be 3 or more depending on your requirement.
Maintain the exchange rate for between US$ and USD to be 1 to 1 ( OBBS and OB08 ).
Create pricing condition records for those customers requiring 3 decimal places using Current
US$ instead of USD.
That will give you 3 decimal places for your prices. However, one thing you will have to watch
out for is rounding.
You can try transaction OB90, define rounding rule for currency. Here you define the rounding
rule for your customer's currency
4.6x
e.g. You create an order type ZP00 for QT - Quotation and does not wish it to be used in OR -
Standard Order.
IMG - Sales and Distribution -> Basic Functions -> Pricing Control -> Define and Assign
Pricing Procedures
Users will receive Message no. V1 206 "Condition ZP00 is missing in pricing procedure A V
ZQT".
4.6x
In VK12, click the Key Combination button. You can see a list of available key combination for
your price master.
Now, let create a new key combination e.g. Customer + Sales Document + Material
IMG - Sales and Distribution -> Basic Functions -> Pricing Control -> Define Condition
Tables -> Create condition tables
e.g. 900
Selected fields
Sales organization
Distribution channel
Customer
Sales document
Material
Click Generate to activate it
IMG - Sales and Distribution -> Basic Functions -> Pricing Control -> Define Condition
Tables -> Defince Access Sequences -> Maintain Access Sequences
IMG - Sales and Distribution -> Basic Functions -> Pricing Control -> Define Condition
Tables -> Defince Access Sequences -> Optimize accesses
Finally, goto VK12 and key in the new price master for PR00.
Next, goto VA02 and test out the material. If it didn't work check the pricing date in the header
details. Is the pricing date within the validity period?
=== For a particular customer if you need a unique price, then create a condition table with field
customer. Put this condition table in the pricing sequence.
Since this sequence is assigned to the pricing condition, Create record for this codition table
(Price) This will ask customer number and price for that customer.
=== I hope you might have done pricing in SAP SD before this if not, pl follow the steps which I
am giving next:
2. copy a condition type which is sutible for your requerment . by using v/06 or IMG PATH
WHICH I HAVE GIVEN IN STEP ONE
4. assign access sequence to conditiona type and condition tabel to access access sequence .
5. finale create your only pricing procedure by using condition type like price , discount, tax etc
see the standard condition pricing procedure rvv001 . attech this procedur to pricing
determination with your sales area.
Now go to VK11 and create pricing condition record by using customer / material.
and also discount and tax recards and save them
After creating your pricing procedure and records you creat a sales order wiht the same sales area
and order type which you atteched to pricing determination and give a material code and quentity
and press enter
Pricing report
Is there a standard SAP report that shows all the sales price for a material/ customer /
qty???
=== Take a look at transaction V/LD or something similar. In the menu path where you maintain
the conditions there is also a folder for output and there is this transaction "Pricing report" or
something similar.
If you have the transaction and it doesn't "work" you might have to execute report RV14ALLE to
get the transaction to work.
If the above transaction doesn't satisfy your needs, you can always configure a pricing report
through configuration.
4.6x
To convert the old Pricing Condition with the release status use program
SD_MOVE_A004_TO_A304.
For the standard tables, the following pairs of condition tables are intended to be used:
'old' <--> 'new' VAKEY fields
A004 <--> A304 VKORG + VTWEG + MATNR
A005 <--> A305 VKORG + VTWEG + KUNNR + MATNR
A006 <--> A306 VKORG + VTWEG + PLTYP + WAERK + MATNR
A007 <--> A307 VKORG + VTWEG + (SPART) + KUNNR
For example, if you are using A005 --> A305, you have to copy the program to
ZSD_MOVE_A005_TO_A305 and amend the program Source and Target table.
First test run by ticking both option. If you confirm that there are no errors, then run by
unticking both options.
Be careful while executing the conversion program as it can erase all your existing pricing
condition data.
Once the conversion is completed, you can activate the Customer/Material with release status :-
IMG -> Sales and Distribution -> Basic Functions -> Pricing -> Pricing Control -> Define
Access Sequences -> Maintain Access Sequences
In VK12, you will be able to choose the new Customer/Material with the release status column
per material.
4.6x
Configure the pricing procedure at delivery with the required condition type to determine freight.
Also have the copying control from delivery to billing at item level with Price source as D for
Delivery. While you execute billing you would get the prices from the sales order as well as from
deliveries.
If you were to look at the pricing procedure RVAA01 you will see there was a section dedicated
to the various freight charges. Normally, I would use one of the available condition types and
create a condition master based on the Incoterms.
Configuration path :-
IMG -> Logistics Execution -> Shipping -> Basic Shipping Functions -> Pricing
It also tells you to create two new includes: ZZAUTH01 and ZZAUTH02, but it doesn't tell
you what changes to actually make in any of these. I am assuming that the authority checks
have to be added somewhere, but what goes where?
The coding for includes ZZAUTH* are (create them in SE38 like INCLUDE, and althought note
say that dev.class must be VF, I have them with own dev.class ie: Z**, and it works)
include ZZAUTH01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Object REPS ZZAUTH01
*& Object header PROG ZZAUTH01
*&---------------------------------------------------------------------*
*& This object has been generated from an advance correction *
*& attached to a R/3 note. *
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Title: Authority check for displaying fields *
*&---------------------------------------------------------------------*
***INCLUDE ZZAUTH01.
* Beim ersten Aufruf ist KOMV initial; OLD_KOMK löschen,
* damit auf jeden Fall Berechtigungsprüfung durchgeführt wird.
* Sicherheitshalber zunächst Berechtigung verweigern.
* if komv is initial.
IF SCREEN-NAME = 'FCODE'.
CLEAR OLD_KOMK.
AUTH_SUBRC = 4.
ENDIF.
***INCLUDE ZZAUTH02 .
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Object REPS ZZAUTH02
*& Object header PROG ZZAUTH02
*&---------------------------------------------------------------------*
*& This object has been generated from an advance correction *
*& attached to a R/3 note. *
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Title: Authority check for creating new conditions *
*&---------------------------------------------------------------------*
***INCLUDE ZZAUTH02.
AUTHORITY-CHECK OBJECT 'Z_KONH_KLS'
ID 'ZKALSM' FIELD KOMK-KALSM
ID 'ZSTUNR' FIELD KOMV-STUNR
ID 'ACTVT' DUMMY.
IF SY-SUBRC NE 0.
MESSAGE E609(VH).
ENDIF.
* Ende Berechtigungsprüfung
...
*&---------------------------------------------------------------------*
In my system (46B) I remember that the subroutines USEREXIT is not changed for this
purpose. With SU21 (z_konh_kls I think that you don't have problems), like with SU02.
In su02, remember that in XU180-PROFILE of first dynpro, you must populate with value
'ZCOND_STD' and click on create work area for profiles. Double click on zcond_std. In object
populate with 'Z_KONH_KLS', double click and you see the parameters like in tcode PFCG
(profiles and auth.)
For procedure you can populate with the procedure (see tcode V/08 ) that you use in your SD
documents, or the procedure/s in where you want that the restriction will work, if you have many
procedures.
For level, you must write the ranges of levels in this procedures (into V/08 ) that you want that
the user can see (remember that alpha routine conversion dont works, ie: for level ' 1' [in dynpro]
you must write '001', if not, you will have problems). The levels out of this ranges, the user with
this profile when go to conditions in SD document will not see the value of these items.
Finally, in SU01, add this profile to profiles created with PFCG in 'profiles'.
After check if it works.
If you are an SD consultant (you are one, yes?), you should know your tables and fields. Because
you can't do a lot of customizing without that.
But if you want an example here goes. Say, you want to base your pricing procedure on first
three digits of product hierarchy, defined in the material master, via condition technique.
Pricing structure for line item is KOMP. A quick look thru KOMP structure (tx SE11) shows that
you have only PRODH field for all 18 digits of product hierarchy, whereas you need only the
first three. So you do the following:
1. Create the new data element ZZPRODH1. Also create a domain with the length "3" and the
data type "CHAR" for the new data element. Remember that new data fields must start with the
letters "ZZ" or "YY", since SAP reserved these letters to protect them from being overwritten
during a release upgrade.
2. Check whether the product hierarchy (PRODH) is found at header or at item level. In table
VBAP, document field PRODH is defined as an item field.
3. Integrate the field name ZZPRODH in the communication structure KOMP using the
INCLUDE KOMPAZ and allocate the data element PRODH to it.
6. Assign a value to the new field in the FORM routines for sales order processing and billing
using the appropriate user exits: In sales order processing the user exit is found in member
MV45AFZZ. The complete statement is:
FORM USEREXIT_PRICING_PREPARE_TKOMP.
MOVE VBAP-PRODH(3) TO TKOMP-ZZPRODH. ENDFORM.
The routines for assigning a value to the new fields in billing are found in member RV60AFZZ.
The statement is as follows:
FORM USEREXIT_PRICING_PREPARE_TKOMK MOVE
XVBRP-PRODH(3) TO TKOMP-ZZPRODH. ENDFORM.
7. Allocate the specifications A, V and 001 to the field ZZPRODH in table T681F. Use "E" has
been added for fields in rebate processing.
This is a standard example from SAP Library. In this case you must tell the ABAP three things:
- that your source field is VBAP-PRODH,
- that you need to get the first three digits from that field into your pricing structure KOMP
- and that you need to specify the transfer by user exit thru MV45AFZZ
Please note that this is a very simple example. Quite often you have to dig a lot deeper.
Modifications of Copy Control routines, making output forms (thru SapScript) and such requires
you to know all the necessary tables, structures and fileds.
The only advice I can give you is to use tx SE11, which will show you the organisation of a
table/structure, and can also help you check the contents of a specific table in a specific sales
doc.