15.3.11

SAP Note 24832 - Pricing rules / TVCPF

Symptom:

Depending on the situation, the system should redetermine conditions or
not. For this, a differentiated control is required, for example:

    1. When you create sales orders or billing documents, the condition types are partially redetermined although you want to copy the values from the reference document.
    2. During other transactions, however, you want to redetermine the condition types instead of copying them.
    3. The 'New pricing' function on the item condition screen redetermines all new conditions, that means it works with pricing category 'B'. This is undesirable to a certain extent.
    4. The same applies to the 'New pricing' function for the entire sales order.


The following text will explain some examples for the use of the pricing type implemented for this purpose (KNPRS):


************************** Example 1 **********************************
You want to copy condition type 'VPRS' from the sales order into the billing document. You are using pricing type 'G'. However, as a consequence the value of the VPRS condition in the billing document differs from the value of the goods issue posting.


************************** Example 2 **********************************
You want to copy condition type 'PI01' (price for intercompany billing) from the sales order into the billing document. You are using pricing type 'G'.


************************** Example 3 **********************************
The costs 'VPRS' are to be redetermined when copying a credit memo request from a billing document. This is required if you defined the credit memo item in such a way that no costs are to be determined. Since the pricing requirements are no longer checked when copying, you have to proceed as described above to eliminate the VPRS.


************************** Example 4 **********************************
The 'New pricing' function on the item condition screen is to keep the manual condition, this means the function should behave like pricing category 'C'.


************************** Example 5 **********************************
The 'New pricing' function for the entire sales order is to keep the manual conditions, this means the function should behave like pricing category 'C'.


************************** Example 6 **********************************
Billing is to be carried out using pricing type 'G'. However, condition types with condition category 'S' and 'T' (standard price or moving costs) are also to be redetermined. In the standard system this pricing type copies those condition types from the sales order.

Other terms

KNPRS, TVCPF, TVCPA

Reason and Prerequisites

The pricing type controls which condition types are redetermined or which are copied unchanged (however, the items are always revaluated). Below, you will find a description of the pricing type characteris
Note that the specified standard pricing type characteristics partly do not exist in older releases, or that the standard pricing type characteristics may be different in the individual releases. Therefore, the given consulting note should not be considered to be exhaustive. It merely serves to explain the principle of how a pricing type is structured and how its characteristics can be influenced. The exact characteristic of a pricing type in the release being used can be seen directly in the source code of Form routine KONDITIONSVORSTEP in Main program SAPLV61A.

  • 'A' (Copy price components and redetermine scales):

No condition types are redetermined. Only the scaled prices are adapted due to a changed basis.

  • 'B' (Complete new pricing):

Completely new pricing (as if you created a new item), manual conditions are lost.

Restriction: Condition types which are not determined via condition technique (for example, condition type 'VPRS' or condition types with KNTYP = 'G' which are determined using formulas) are NOT redetermined even if you do not change them manually.

  • 'C' (Copy manual pricing elements and redetermine the others):

Completely new pricing, manual ones are copied.

Caution: Here you have to make sure that all condition types that can possibly be changed manually have T685A-KMANU = 'C' (Manual entry has priority) in Customizing. Otherwise, it is possible that the conditions are displayed twice (automatically and manually) and that both are active.

  • 'D' (Copy pricing elements unchanged):

As in pricing type 'A' but the prices are fixed (no scales are read). Condition base value and value are redetermined.

  • 'E' (Adopt price components and fix values):

As in pricing type 'D' but neither condition base value nor value are redetermined.

  • 'F' (Copy pricing elements, turn value and fix):

Only used within the program.

  • 'G' (Copy pricing elements unchanged and redetermine taxes):
      a) The following condition types are redetermined:
    • Condition class KOAID = 'D' (Taxes)
    • Condition class KOAID = 'C' (Volume-based rebate)
    • Condition category KNTYP = 'I' (Intercompany billing conditions)
    • Condition category KNTYP = 'R' (Invoice list conditions)
    • Condition category KNTYP = 'L' (Always new when copying)
    • Condition category KNTYP = 'G' (Cost conditions)
    • Condition category KNTYP = 'E' (Cash discount conditions)

All remaining condition types are dealt with like pricing type 'D'. In particular, with pricing type 'G', the system does not only redetermine the taxes but also the cost conditions and the intercompany billing conditions.

  • 'H' (Redetermine freight conditions):

The following condition types are redetermined:

    • Condition type KNTYP = 'B' (Delivery costs)
    • Condition type KNTYP = 'F' (Freight conditions)
    • Condition type KNTYP = 'L' (Always new when copying)
  • 'I' (Redetermine rebate conditions):

Rebate conditions and scales are redetermined.

  • 'J' (Redetermine confirmed purchase net price/value):

Condition types with condition category KNTYP = 'D' (Confirmed purchase net price/value) are redetermined.

  • 'K' (Adopt price components and costs. Redetermine taxes):

The following condition types are redetermined:

    • Condition class KOAID = 'D' (Taxes)
    • Condition class KOAID = 'C' (Rebate)
    • Condition category KNTYP = 'R' (Invoice list conditions)
    • Condition category KNTYP = 'I' (Price for intercompany billing)
    • Condition category KNTYP = 'E' (Volume-based rebate)
  • 'M' (Copy pricing elements, turn value):

No conditions are redetermined; during copying, the condition values are multiplied with -1.

  • 'N' (Transfer pricing components unchanged, new cost):

Condition types with condition category KNTYP = 'G' (Cost) are redetermined.

Please note that this pricing type has NO effect on the invoice since here the goods issue value from the delivery is usually directly transferred to pricing. Redetermination of the settlement price by subsequently reading the material valuation segment when executing pricing type "N" would result in the fact that the goods issue value information were irretrievably lost.

This standard behavior can be changed by a modification only. If required, please contact your local consultant or SAP Remote Consulting.

  • 'O' (Redetermine variant conditions):

Condition types with condition category KNTYP = 'O' (Variants) are redetermined.

  • 'P' (Revaluation only):

The system does not redetermine any conditions; only the revaluation occurs.

  • 'Q' (Redetermine calculation conditions):

Condition types with condition category KNTYP = 'Q' (Costing) are redetermined.

  • 'U' (Redetermine precious metal conditions):

Condition types with condition category KNTYP = 'U' (Discount/surcharge for precious metals) are redetermined.

Solution

There are two options to change the standard behavior:

    1. Set up a new pricing type (for example, 'X') and allocate the pricing type in the document flow (copying control in the IMG, Customizing depending on the source and target document type via Transactions VTAA, VTAF, VTLA, VTLF and VTFF).
    2. Change the pricing type used in the standard system.


Procedure

For both purposes, USEREXIT_PRICING_RULE is used in Program RV61AFZA. This is called after the setup of internal table STEU which defines the behavior of pricing types.


************************** Example 1 ******************************
Picing type 'X' is to be set in a way that condition 'VPRS' (which has condition category 'G') is not redetermined during the billing. Otherwise it behaves as pricing type 'G'.

Up to Release 4.0B, USEREXIT_PRICING_RULE can be implemented as follows: FORM USEREXIT_PRICING_RULE
STEU-KNPRS = 'X'.
STEU-KNTYP = 'LRIE......'.
IF KOMK-KNUMA IS INITIAL.
STEU-KOAID = 'CD........'.
ELSE.
STEU-KOAID = 'D.........'.
ENDIF.
STEU-MAUEB = ' '.
APPEND STEU.
ENDFORM.

In order to ensure that pricing type 'X' acts exactly like pricing type 'G', the FORM routine USEREXIT_PRICING_COPY in Program RV61AFZA is to be used in releases lower than Release 4.0A (if you create a document with reference to another document, this is called: copying control; here, the MODE is the pricing type):
FORM USEREXIT_PRICING_COPY.
IF MODE CA 'X'.
IF KONV-KSTEU NA 'CEF'.
KONV-KSTEU = 'D'.
ENDIF.
ENDIF.
ENDFORM.
In this case, you should note that the billing document contains a special rule concerning cost condition 'VPRS'. If the goods issue for the delivery note to be billed is posted, the value of the goods issue is copied into condition 'VPRS'. This is hard-coded. You can prevent this by setting the field TKOMP-WAVWR to zero in include LV60AFZZ, USEREXIT_PRICING_PREPARE_TKOMP.
In higher releases, pricing type 'K' is also available, which copies the VPRS of the order to the billing document and does not redetermine it unless there is no goods issue posting (otherwise, the above-mentioned special rule applies.)


*********************** Example 2 *********************************
Pricing type 'Y' is to be set in a way that this works as pricing type 'G' but without redetermining the intercompany billing conditions 'PI01' and 'PI02'. They have condition category 'I'.

Changes in program RV61AFZA:
FORM USEREXIT_PRICING_RULE.
STEU-KNPRS = 'Y'.
STEU-KNTYP = 'GLRE.......'.
IF KOMK-KNUMA IS INITIAL.
STEU-KOAID = 'CD........'.
ELSE.
STEU-KOAID = 'D.........'.
ENDIF.
APPEND STEU.
ENDFORM.

In order to ensure that pricing type 'Y' acts exactly like pricing type 'G', the FORM routine USEREXIT_PRICING_COPY in Program RV61AFZA is to be used:
FORM USEREXIT_PRICING_COPY.
IF MODE CA 'Y'.
IF KONV-KSTEU NA 'CEF'.
KONV-KSTEU = 'D'.
ENDIF.
CLEAR: KONV-SAKN1.
ENDIF.
ENDFORM.


*********************** EXAMPLE 3 *********************************
Pricing type 'Z' is to be set in the same way as pricing type 'D', but this time the costs are to be redetermined. Up to Release 4.5B, you can implement USEREXIT_PRICING_RULE as follows (as of Release 4.6A, pricing type 'N' is available for this procedure):
FORM USEREXIT_PRICING_RULE.
STEU-KNPRS = 'Z'.
STEU-KNTYP = 'G.........'.
STEU-KOAID = '..........'.
STEU-MAUEB = ' '.
APPEND STEU.
ENDFORM.

In order to ensure that pricing type 'Z' acts exactly like pricing type 'D', the FORM routine USEREXIT_PRICING_COPY in Program RV61AFZA is to be used:
FORM USEREXIT_PRICING_COPY.
IF MODE CA 'Z'.
IF KONV-KSTEU NA 'CEF'
KONV-KSTEU = 'D'.
ENDIF.
ENDIF.
ENDFORM.


Note: To correct the problem, you should define your own pricing types. In some cases, it may be required to change existing pricing types. This is required if you want to influence the reaction to certain field changes in the sales order (see Note 26115 for this). This also allows you to influence the 'New pricing' function in the sales order and billing document. This function uses pricing type 'B'.


*********************** EXAMPLE 4 *********************************
The 'New pricing' function is meant to keep the manual changes. By default, pricing type B' is called. As of Release 4.5A, however, you have the option to store another pricing type for this purpose in Customizing of the pricing procedure (Transaction V/08).
In USEREXIT_CHANGE_PRICING_RULE of program MV61AFZA, you can replace pricing type 'B' with another pricing type, for example, 'C' up to Release 4.0B.


FORM USEREXIT_CHANGE_PRICING_RULE USING PRICING_RULE.
IF PRICING_RULE = 'B'.
PRICING_RULE = 'C'.
ENDIF. ENDFORM.



********************** EXAMPLE 5 **********************************
The 'New pricing' function is to be set for the entire sales order in a way that manual changes are kept. In the standard system, pricing type 'B' is called. As of Release 4.5A, however, you have the option to store another pricing type for this purpose in Customizing of the pricing procedure (Transaction V/08).

Up to Release 4.0B, a solution is only possible by means of a modification in program MV45AF0F:
FORM FCODE_KONB.
PERFORM PREISFINDUNG_GESAMT USING CHARB. <<<<<<<<<< delete
PERFORM PREISFINDUNG_GESAMT USING CHARC. <<<<<<<<<< insert
ENDFORM.

FV45PF0P has to be changed in the same way:

FORM PREISFINDUNG_NEU. * Aufruf neue Preisfindung
PERFORM PREISFINDUNG USING CHARB. <<<<<<<<<< delete
PERFORM PREISFINDUNG USING CHARC. <<<<<<<<<< insert
* geänderte Informationen in Beleg übernehmen
PERFORM VBAP_BEARBEITEN.
PERFORM VBAP_BEARBEITEN_ENDE.
ENDFORM.


*********************** EXAMPLE 6 *********************************
Pricing type 'X' is to be set so that it functions like pricing type 'G', but also redetermines condition categories 'S' and 'T'.

Change in Program RV61AFZA:
FORM USEREXIT_PRICING_RULE
STEU-KNPRS = 'X'.
STEU-KNTYP = 'GLRIEST...'.
IF KOMK-KNUMA IS INITIAL.
STEU-KOAID = 'CD........'.
ELSE.
STEU-KOAID = 'D.........'.
ENDIF.
STEU-MAUEB = ' '.
APPEND STEU.
ENDFORM.

To ensure that pricing type 'X' behaves exactly like pricing type 'G', use FORM routine USEREXIT_PRICING_COPY in Program RV61AFZA:

FORM USEREXIT_PRICING_COPY.
IF MODE CA 'X'.
IF KONV-KSTEU NA 'CEF'.
KONV-KSTEU = 'D'.
ENDIF.
ENDIF.
ENDFORM.


******************** Additional information ***********************
You can display the standard behavior of the pricing types in FORM routine KONDITIONSVORSTEP (up to Release 3.1I in Include LV61AF0K, as of Release 4.0A in Include LV61AA12). There, for each pricing type, a line exists in internal Table STEU. The fields have the following meaning:

  • KNPRS

This is the pricing type used.

  • KNTYP

This field contains a positive list of the pricing categories (up to 10 values can be entered).

  • KOAID

This field contains a positive list of the condition classes (up to 10 values can be entered).

  • MAUEB

This field specifies whether manual changes should be copied.

  • STFKZ

This field contains a positive list of the scale indicators (up to 5 values can be entered).

  • NOTYP

This field contains a negative list of the condition categories (up to 5 values can be entered).

  • KDUPL

This field contains a positive list of the structure conditions (up to 3 values can be entered).

  • NOKDUPL

This field contains a negative list of the structure conditions (up to 3 values can be entered).

  • KFKIV

This field specifies whether intercompany billings should be redetermined ('.' or 'X' can be entered).

  • KVARC

This field specifies whether variant conditions should be redetermined ('.' or 'X' can be entered).

  • PRSQU

This field specifies whether the price source should be taken into account ('.' or SPACE can be entered).


Note that most condition attributes (fields of the XKOMV structure) can also have the value SPACE. To use the above 'CA' or 'NA' statements in the IF statements also in these cases as required, you can fill the fields of the STEU line with a corresponding number of '.' characters. These values are mainly checked in FORM routine XKOMV_AUFBAUEN_PRUEFEN (up to Release 3.1I in Include LV61AF0X, as of Release 4.0A in Include LV61AA65).

1 comment:

  1. the loan company that grants me loan of 5,000,000.00 USD When other loan investors has neglect my offer but mr benjamin lee granted me success loan.they are into directly in loan financing and project  in terms of investment. they provide financing solutions to companies and individuals seeking access to capital markets funds, they can helped you fund your project or expand your business.. Email Contact:::: Also  247officedept@gmail.com or Write on whatsapp Number  on    +1-(989-394-3740)

    ReplyDelete