What this document contains:
Pricing overview
There are three ways to hold sales prices, discounts and FOC in DC1:
- Customer Contracts
- Sales Price Lists
- Sales Pricing Methods
All can be time-dependent
All can hold a price entered as a value or as a margin or mark-up based upon cost (average, standard, last purchased) or purchase price. Discounts in form of percentages and/or amounts can be applied on top of these. Discounts can be dependent upon the quantity or value ordered. These can also hold FOC (with or without a price).
In the event of sales from NCC stock there is also an option to hold sales price and FOC directly on the non-conformity certificate.
Customer Contracts
You can optionally enter a:
- Price (in the Price field) or the means to enter a price (in the Basis, Marg/mark, Fact/per and Value fields)
and/or
- Discount (using the Discount ID field combined with the Limit type or Limit code fields)
or
- FOC
This can be done on the following levels:
- Customer (mandatory)
- Item (mandatory)
- Unit (optional depending on what you are entering, e.g., price or discount)
- Warehouse (optional depending on what you are entering, e.g., price or discount)
Note: If you enter only a discount – you can use a Sales Price list with a price on which to base the discount. If you leave the Price list field blank, the base price will be used.
Contracts can be Quantity-based, Time-based or a combination of both.
In Quantity-based contracts it is not allowed to sell more than the quantity contracted, irrespective of the period of the contract.
In Time-based contracts a greater quantity than contracted can be sold but only within the time period.
For contracts that are both Quantity and Time-based the contract will expire when either the quantity contracted has been sold or the “To” date has been reached, whichever comes first.
Note: A message is sent to the user if an active quantity based contract is read in the sales pricing routine that has less quantity left on it than the quantity sent to the calling program.
Sales price lists
You must enter a:
- Price (in the Price field), which is fixed on item/currency/unit level (mandatory)
or
- The means to enter a price (in the Basis, Marg/mark, Fact/per and Value fields).
You add the items and corresponding currencies and units and how the price is going to be derived (i.e. is it a fixed value, is it to be calculated based on cost or is it going to be FOC).
Note: The system supplies a default price list identifier (price list 01 in Price list table) which is connected in the DIS control file. You do not have to use it or establish any other Price list because you can define the prices in the Customer contracts or Sales pricing methods. When DC1 Distribution runs the main pricing program (DMR910) it will start with retrieving a “Base price”.
The base price retrieval will be done using price lists in the following order until a price is retrieved:
- Using the price list that has been passed to the program as an input parameter. In sales order entry this will be the price list that you find in the order header (and that price list is retrieved from the Customer file and can also be overridden).
- Using the standard price list defined in the pricing policies in DIS control file.
It will use this base price as the starting point for calculating any prices or discounts as it needs a starting price in the event that it encounters only discounts in the Customer contracts and Sales pricing methods. It will also use this base price when checking against amount limits if no price has been encountered at that point.
Sales pricing methods
You can optionally enter a:
- Price (in the Price field) or the means to enter a price (in the Basis, Marg/mark, Fact/per and Value fields)
and/or
- Discount (using the Discount ID field combined with the Limit type or Limit code fields)
or
- FOC
Note: If you enter only a discount – you can use a Sales Price list with a price on which to base the discount. If you leave the Price list blank, the base price will be used.
Method types
The method type controls each sales pricing method.
The types are:
N = Normal |
This is the main type of pricing method that allows a price and/or discount and/or FOC to be entered for a defined combination of DIS control keys. The price may be described as a fixed value or calculated from a defined basis (that may be a cost or a purchase price). The price may also be quantity limit dependent or matrix quantity limit dependent (i.e. the accumulated order quantity for all lines with matrix items holding the same segment 1 value). The discount may be a percentage or an amount and may be limit dependent.
The normal methods are applied at line level and are calculated when the order line is entered. The values (i.e. quantity and amount) that are used in the calculation are those held at order/quotation line level. The exception is for matrix quantity limits where an accumulated quantity for all lines in the order with matrix items that holds the same segment 1 value. |
C = Chain discount |
This type of pricing method is used for discounts that are applied on top of the discounts that may have been generated by normal methods, price lists and/or contracts. You can only define discounts for this type of pricing method. A discount can be based on a percentage or an amount and can be limit dependent.
The chain discounts are calculated when the order line is entered
See Understanding chain discounts for more information. |
P = Promotion |
This type of pricing method is similar to a normal method. Where it differs is that it is used in a different way in the price calculation program. The program will read promotion records after it has read all of the other normal methods. Refer to explanation of Line price calculation program. |
O = Order line summary discount |
Only valid for use if the pricing policy for Order summary disc is set to YES in the DIS control file.
This type of pricing method allows a unique discount to be entered for each defined combination of DIS control keys. The discount may be described as a percentage or an amount and may be limit dependent.
Note: Basket pricing is also defined using this Method type.
The O methods are applied at order line total level and are calculated when exiting the order OR as a manual action by the user (i.e. you can trigger this calculation within order entry (on panel DMR30201) using Function 38 Order summary disc calculation from the Function list).
For any quantity dependent discounts, the quantity for each line is added to calculate a total quantity that is used in the calculation. Likewise the values for each line are added to calculate a total value that is used in the calculation. The calculated discount is written back to each order line.
Note: Matrix limits are not allowed for this method type. |
H = Header discount |
Only valid for use if the pricing policy for Order summary disc is set to YES in the DIS control file.
This type of pricing method allows a unique discount to be entered for each defined combination of DIS control keys. The discount may be a percentage and may also be limit dependent.
Note: Basket pricing is also defined using this Method type.
The H methods are applied at order header level and are calculated when exiting the order OR as a manual action by the user (i.e. you can trigger this calculation within order entry (on panel DMR30201) using Function 38 Order summary disc calculation from the Function list).
For any quantity dependent discounts, the quantity for each line is added to calculate a total quantity that is used in the calculation. Likewise the values for each line are added to calculate a total value that is used in the calculation. The calculated discount is stored at order header level but the apportioned amount can be seen at line level for every contributing line.
Note: Matrix limits are not allowed for this method type. |
Sales price and discounts retrieval
The sales price and discounts retrieval is controlled by two main routines:
Click the following to view the flowchart.
Flowchart – Sales pricing retrieval
Controlling factors
DIS control file
As pricing is very flexible and the sales price can be derived in several ways, you need some parameters to control the way that pricing works. These parameters are defined in the DIS control file, on the Pricing policies panel.
Field |
Description |
Sequence for pricing |
You need to define the sequence in which the system will search the Sales price list, Customer contracts and Sales pricing methods in order to calculate the sales price for a sales order/quotation line.
During this search it may be possible that more than one price is found. In such an event the First price and Best value compared to promotion parameters must be defined to control this. If you set both these flags to No, the system will use the first price found. |
First price/prom |
If you set this flag to Yes, the system will select the lowest of either the first price found, or the promotion type method selected. Which promotion record is selected will depend upon the settings of the Stop search fields on each of the qualifying methods. If all of these have Stop search set to No then the best promotion price will be used. If any of the promotion methods have Stop search set to Yes then the lowest price found in the promotion records that have been read up to and including this one will be used. |
Best value/prom |
If you set this flag to Yes, the system will select the best value found from any of the following pricing sources: Sales price list (from order header, normally the defined price list for the customer), Customer contracts, Normal type method, or Promotion type method
In case any of these pricing sources are defined to get chain discounts then any applied chain discounts will also be taken into account in the search for the best customer value.
Which normal or promotion record is selected will depend upon the settings of the Stop search fields on each the qualifying methods. If all of these have Stop search set to No then the best normal or promotion price will be used. If any of the normal or promotion methods have Stop search set to Yes then the lowest price found in the normal or promotion records that have been read up to and including this one will be used. |
FOC |
Set this flag to Yes if you want to be able to use the FOC items functionality. With the FOC items handling you will be able define FOC discounting information for Limit codes, Customer Contracts, Sales price list (via an attached Limit code) and Sales pricing method types (excluding O and H). If you set this flag to No, the FOC items related fields will not be displayed in the system.
The valuation of FOC items can be utilized in the ‘First price/best value compared with promotion’ pricing logic, Promotion budgeting and SMS rebate claims. The value of the FOC items represents the net price of an item in the normal situation, i.e. it represents the pricing of an item, when it is not given as a FOC item (for example, picking an item’s price from a sales price list).
If an FOC item line is created as a result of the pricing of a sales order line, a reference between the base line and the FOC item lines will be visible throughout the entire sales order process. Profit calculation, statistics and bookkeeping will also be affected for base lines that have connected FOC item lines. |
Short term pricing |
Set this flag to Yes if you want to be able to use the validity dates of the sales pricing method details as additional keys allowing you to have multiple details with the same keys but for different dates.
Typically used to override default details in an existing method for a short time without making extensive changes to the method definition itself. |
Additional discount |
If the user manually enters a price or discount on a sales order/quotation line, and this flag is set to Yes, the system will apply any applicable discounts to that line. |
Chain discount |
Indicate if chain discounts can be applied in DC1 Distribution.
Chain discounts can be applied on top of prices and discounts generated from a Customer contract, Sales price list and/or Sales Pricing method (where Type = N (Normal) or P (Promotion).
If you set this flag to Yes, you will be able to set the Chain discounts flag to Yes in the Customer contract, Sales price list and Sales pricing method type N or P.
If you set this flag to No, the chain discount related fields will not be displayed in the system.
Note: The actual chain discounts to be applied are set up as a Sales Pricing method type C in the Sales pricing methods file.
If this flag is changed from Yes to No, the system will verify if chain discounts exist, or have been defined, in the Sales pricing methods file. If the system finds any chain discounts, you will not be able to change this flag to No. |
Order summary disc |
Indicate if Order summary discounts (i.e. Sales pricing method types O and H) can be applied in DC1 Distribution.
Order summary discounts can be applied on top of prices and discounts generated from a Customer contract, Sales price list and/or Sales pricing method (where Type = N, C and/or P).
If you set this flag to Yes, you will be able to set the Order summary disc flag to Yes in the Customer contract, Sales price list and Sales pricing method for types N, C and P.
If you set this flag to No, the Order summary discount related fields will not be displayed in the system.
Note: The actual discounts to be applied are set up as a Sales pricing method type O and/or H in the Sales pricing methods file.
If this flag is changed from Yes to No, the system will verify if order summary discounts (type O or H) exist, or have been defined, in the Sales pricing methods file. If order summary discounts are found, you cannot change this flag to No. |
Basket processing |
Basket is a DC1 term signifying a collection of item related elements, (e.g., item, item group, item family), that together form an entity upon which order summary sales pricing methods, (types O = Order line summary discount and H = Header discount), can be applied.
Set this flag to Yes if you want to allow basket processing in the company. You create the basket definitions in the Work with baskets file. To be able to enable Basket processing, the Order summary discount handling flag must first be enabled in this file.
If you set the field to No, basket processing will not be permitted and no related fields will be displayed on panels.
If you want to set up pre-defined keys to improve performance in the basket processing and limit the flexibility of the basket definitions, complete the Keys 1-3 fields on this panel. See the panel help description for the Fixed basket keys and Keys 1-3 fields. |
Fixed basket keys |
A high volume of file accesses takes place during the basket qualification process. Thus, a mechanism is needed making it possible to reduce the file accesses and increase performance by limiting the combination of keys that can be used to define baskets. These fixed basket key 1-3 fields allow you to define the item related keys (from the DIS control keys table) that will be used as pre-defined and fixed keys when baskets are defined.
The fields are open for maintenance when the Basket processing field on this panel is set to Yes and as long as no basket has been defined in the system, i.e. no basket definition exists. Otherwise the fields are protected from maintenance. All basket definitions must first be removed/deleted from the system before the basket pricing policy could be changed from full flexibility to fixed basket pricing keys or vice versa.
If you fill in any one of these keys here the basket pricing set-up process will protect the possibility to flexibly define any key combination for a basket in the Work with baskets file, and only permit the fixed basket pricing key(s) to be used. |
Standard price list |
The system supplies a default price list identifier (price list 01 in Work with sales price lists) which is connected in this field. Note: You do not have to use it or establish any other Price list because you can define the prices in the Customer contracts or Sales pricing methods. When DC1 Distribution runs the main pricing program (DMR910) it will start with retrieving a Base price. The base price retrieval will be done using price lists in the following order until a price is retrieved:
- Using the price list that has been passed to the program as an input parameter. In sales order entry this will be the price list that you find in the order header (and that price list is retrieved from the Customer file and can also be overridden).
- Using the standard price list defined in the pricing policies in DIS control file.
It will use this base price as the starting point for calculating any prices or discounts as it needs a starting price in the event that it encounters only discounts in the Customer contracts and Sales pricing methods. It will also use this base price when checking against amount limits if no price has been encountered at that point. |
A/R payment terms
Cash discount deduct |
The Cash discount deduct field controls the offering of an extra discount should the invoice be paid on time. You set up the cash discounts in the Terms of payment table.
Indicate if the cash discount should be deducted from the VAT base amount. If YES, the Cash discount percentage 1, defined in the Terms of payment table, shall be deducted from the VAT base amount before the calculation of invoice total and VAT amount is done in the sales order Invoicing routine. The cash discount percentage will then be displayed on the invoice and invoice copy before the presentation of VAT lines, if this feature is selected and the cash discount is not zero.
If you want the cash discount to be calculated from the gross amount, i.e. the cash discount base amount is gross, you must set this field and the Cash disc net amount field in the Terms of payment table to NO. |
Order summary base values
Line level and Header level |
If you set up O and H types – the system needs to perform calculations to work out the total amounts used for checking against amount limits. You need to indicate what it should use, i.e. non-discounted or a discounted net price. See description of O type for Line level and H type for Header level above.
Line level: Indicates whether the order line non-discounted price or net price is to be used in the order summary line level discounts calculation. Note: This “net price” is the net price before any order summary discounts have been applied (O-type or H-type discounts), i.e. after the very last chain-discount.
Header level: Indicates whether the order line non-discounted price or net price is to be used in the order summary header level discounts calculation. Note: This “net price” is the net price before any order summary discounts have been applied (O-type or H-type discounts), i.e. after the very last chain-discount. |
FOC item information print
Quotation, Order confirmation, Transport note and Invoice |
Indicate if you want Free of charge item information to be printed on each of the external documents. This information will include the base and dependent FOC line references.
For all Base lines for FOC item lines, all connected FOC item lines will be printed (e.g. Dependent FOC item line 20, 30, 40 etc.).
For all Dependent FOC item lines the originating base line for the FOC item will be printed (e.g. FOC item from line 10).
|
DIS control keys
Sales pricing methods use a combination of item, customer and order-related keys – of which up to five of the following keys may be defined as selection criteria.
Note: These keys are used in several other areas and must be activated for pricing before they can be used in pricing methods.
Customer related |
Item related |
Order related |
Buying group |
Basket
Can only be used in order summary pricing methods of types O and H. |
Agreement type |
Customer |
Item |
Inventory contract number |
Customer account group |
Item account group |
Inventory contract type |
Customer area |
Item category 1 |
Manner of transport |
Customer category 1 |
Item category 2 |
Order type |
Customer category 2 |
Item category 3 |
Project |
Customer category 3 |
Item category 4 |
Terms of delivery |
Customer category 4 |
Item category 5 |
Terms of payment |
Customer category 5 |
Item category 6 |
Warehouse |
Customer category 6 |
Item discount group |
Warranty type |
Customer country |
Item family |
|
Customer discount group |
Item group |
|
Customer group |
Item price group |
Customer structure
Note: Not supported by Order summary discount calculation (i.e. H and O method types). |
Item sector |
|
|
Item segment 1 |
|
|
Item segment 2 |
|
|
Item segment 3 |
|
|
Item segment 4 |
|
|
Item segment 5 |
|
|
Item segment 6 |
|
Prices
Definition of prices
We have a number of definitions of prices in the system.
Base price
The sales price and discounts retrieval program always starts with retrieving a base price. This retrieval will be done from price lists in the following order until a price is retrieved:
- Using the price list that has been passed to the program as an input parameter. In sales order entry this will be the price list that you find in the order header (that price list is retrieved from the customer file and can also be overridden).
- Using the standard price list defined in the pricing policies in DIS control file.
The pricing program will use this base price as the starting point for calculating any prices or discounts as it needs a starting price in the event that it encounters only discounts in the Customer contracts and Sales pricing methods. It will also use this base price when checking against amount limits if no price has been encountered at that point.
Sales price
The sales price is retrieved by the sales price and discounts retrieval program. If the pricing program only encounters discounts in the Customer contracts and Sales pricing methods it will use the base price as sales price. The sales price can also be manually entered or overridden. The sales price will also hold the value of included VAT when applicable.
Non-discounted price
The non-discounted price represents the gross sales price, i.e. the sales price minus any included VAT. This is the initial price that discounts are calculated and applied upon.
Net line price
The non-discounted price minus all line discounts. The net line price does NOT include deduction of header discounts.
Net price
The non-discounted price minus ALL discounts, both line discounts and header discounts
Discounts
Definition of discounts
We are defining discounts based upon what level they apply as Line discounts or Header discounts.
All discounts are also grouped together in three different sequence groups based upon how they are applied in the sequence that they are retrieved or manually entered. In such a sequence group, any automatically retrieved discounts are always added before any manually added discounts.
Line discounts
The line discounts are connected to the line and can be accessed via Work with discounts from the line.
Sequence group 10
From Sales price and discounts calculation:
- Price list discounts (from limit code)
- Contract discounts
- Normal discounts (N-type method)
- Promotion discounts (P-type method)
- Chain discounts (C-type method)
Manually entered discounts on line level
Sequence group 20
From Calculate order summary discount
- Order line summary discounts (O-type method)
Header discounts
The header discounts are connected to the header and can be accessed via Work with discounts from the header. For visibility purposes, the header discounts are also visible on line level for every line that it applies, to show the contribution for that single line to the header discount.
Sequence group 30
From Calculate order summary discount:
- Header discounts (H-type method)
Manually entered discounts on header level
Storage, Calculation and Display
All discounts are stored in a general discount file and are linked to the relevant order, or quotation or invoice line by a unique key. Enquiries such as the Customer Service Enquiry and the Customer Price and Discount Enquiry still use this file but the discount details are removed when the enquiry has finished.
Discounts are calculated initially based upon the non-discounted price for a one-off of the sales unit and are always converted to amount per unit that is stored in the previously mentioned file using the maximum number of decimals available, i.e. 4. The discounts are added together as line discounts and header discounts for the line utilising the maximum number of decimals before the rounding takes place to the correct number of decimal.
All discounts are then deducted from the non-discounted price in the sequence in which they are applied to arrive at a net price that is then multiplied by the quantity of the sales unit on the line to give the net amount.
The net line price is calculated in a similar way but this time using only line level discounts. The header level discounts are excluded. It is then multiplied by the quantity of the sales unit on the line to give the net line amount.
Discounts can also be in the form of FOC items (when running FOC items handling). In that case the Discount will hold one or more FOC items that are to be given away. For sales order, Sales quotations and Invoices these FOC items represent separate lines holding the item in the defined quantity and flagged as FOC. The information about what line the FOC item is created on will then also be visible for the Discounts FOC items.
Printing
All customers are different and, as such, like to see the discounts printed in different ways, if at all. The printing of discounts is controlled by two flags stored against each customer, one for “Print discounts” and one for “Aggregate discounts”; this gives three options on how to print the discounts, namely:
- No discounts are printed (i.e. Net price is shown)
- A list of individual discounts along with their descriptions is printed
- A single aggregate discount is printed
There is also a possibility to control how FOC items information is to be printed on external documents. This is defined in DIS control file for documents Quotation, Order confirmation, Transport note and Invoice. When switched on the following FOC item information will be printed:
- For all Base lines for FOC item lines, all connected FOC item lines will be printed (e.g. Dependent FOC item line 20, 30, 40, etc.)
- For all Dependent FOC item lines the originating base line for the FOC item will be printed (e.g. FOC item from line 10)
Customer structure pricing
Sales prices may be negotiated and stored at two levels, i.e. at a parent level and at a customer level.
The Pricing Policy determines which of these levels is used via the following three policy types:
- Parent
- Customer
- Best of
The Pricing Policy is stored against the Holding Company in a Business Partner Structure.
When a “Parent” pricing policy is established certain other elements may also be established at parent level, these are:
- Price List
- Discount Group
The above may be different for each parent within the structure, whereas the Pricing Policy is unique for the whole Business partner structure.
It may be that in one “arm” of a structure there is a subordinate parent that has negotiated prices for itself and its subsidiary companies that are different to the rest of the Business partner structure. To handle this situation a “Stop search” field is held against the parent that indicates to the pricing program to not look any higher in the structure to find a parent price.
Example illustration
Customer Pricing Policy Procedure
A “black box” program is called that first makes a check to see if Business Partner Structure handling is active and, if so, returns:
- Pricing Policy (from the Holding Company)
- Pricing Parent, i.e. the parent in the structure that is to be used by the pricing program
- Price List (attached to the Pricing Parent)
- Discount Group (attached to the Pricing Parent)
If the Pricing Policy is Parent:
- The order header fields for Price List and Discount Group are overwritten with details from the Pricing Parent.
- The pricing program executes Price List, Contract and Method subroutines using Parent details.
- Only Contracts whose “Parent” field is set to YES are read.
- Methods having Customer as one of the keys are omitted.
If the Pricing Policy is Customer:
- Contracts whose “Parent” field is set to YES are omitted.
- Methods having Customer Structure as one of the keys are omitted.
If the Pricing Policy is Best of:
- The pricing program executes Price List, Contract and Method subroutines twice, once in Parent “mode” and once in Customer “mode”, and the best price from either “mode” is selected.
- The DIS control file fields for “Best value/prom” and “First price/prom” are effective within each “mode”.
Note: Customer structure pricing is not activated for order summary discounts of types “O” and “H”.
Understanding chain discounts
You must have a Customer contract or Price list or Normal (N) Sales pricing method or Promotion (P) Sales pricing method to start with before the Chain discount will kick in.
To reiterate, chain discounts can be applied on top of prices and discounts generated from a Customer contract, Sales Price list and/or Sales Pricing method (where type = N or P).
The actual discounts in the chain are set-up as a type C (Chain discount) in the Sales pricing methods file. If the flag for Chain discount is set to YES in the DIS control file, you can set the equivalent flag to YES in the Customer contract, Price list and Sales Pricing method “Type” for N or P.
If chain discounts are allowed and found the system will apply the discounts from the Sales Pricing Method “Type” C (reading them in the sequence defined) on top of any discounts generated for a Customer Contract, Price list, Normal method type or Promotion method type.
Claiming discount rebates
The DC1 Supplier Marketing Support (SMS) application provides the functionality that allows your company to claim rebates from your suppliers/manufacturers. The rebate claims can be derived from a cost or a customer discount. If you want to claim back from the supplier the discount that has been given, set the Claimable flag to YES in all places where discounts can be established (i.e. Sales pricing methods, Limit codes, Sales discount IDs). The discount IDs that you want to claim must then be set up in an SMS agreement that is defined for claiming discounts in where also the terms of the rebate claim are defined.
FOC items given as discounts can also be claimed in the same way as other discounts. In that case the Sales discount value (SDV) of the FOC item represents the net price of this item in the normal situation, i.e. it represents the pricing of an item, when it is not given as a FOC item (for example, picking an item’s price from a sales price list). In the specific case of claiming discounts in the form of FOC items this will create the rebate transaction towards the generated dependent FOC item line and not towards the discount on the base line (which is the case for claiming normal discounts).
VAT handling
Three VAT related fields, “VAT Based Y/N“, “VAT Included Y/N” and “Included VAT % code” are attached to price lists, sales pricing methods and contracts. In certain scenarios more than one set of these may be encountered, for example, when a price list is used as a basis in a method or contract.
As a general rule the VAT related fields from where the price is retrieved, or calculated, will always be applied.
This is rather obvious when a price is retrieved from a price list or when a price is calculated in a contract or sales pricing method based on a cost base. When a price is calculated in a contract or method based on a price list, the same rule should apply as for a calculation based on a cost base. This is maybe not obvious but is a consistent rule.
Example:
The price list from where the price is retrieved as a base for the price calculation in a contract or method has the VAT fields set to:
VAT based = Y, VAT included = N, Incl VAT% = blank.
The contract or method has VAT fields set to:
VAT based = N, VAT included = Y, Incl VAT% = UK17
When the price is calculated from the price list with mark-up of 25 % the system will interpret this as a new calculation of the price and will therefore retrieve and use the VAT fields from the contract or method even if the base was a price list. The result will be:
VAT based = N, VAT included = Y, Incl VAT% = UK17
Using Price lists as a basis in Contracts and Sales pricing methods
To achieve a consistent handling when a price list is used within a contract or pricing method the fields for FOC, Limit code discount and Retail price must also be considered along with the VAT.
We must also pass this price list as output from the sales price and discount calculation program to be able to run sales restriction check against this price list.
Finally the flags for chain discount and order summary discount must also be considered.
See the following scenarios and associating results below:
- Contract scenarios
- Sales pricing method scenarios
- Price list scenarios
Contract scenarios:
The following five scenarios exist:
Scenario: |
Result |
1. Contract is set up with a Price, a Basis + margin/mark-up or FOC |
VAT, FOC, Limit code discount and Retail price will be picked from the contract item detail.
No price list will be passed as output.
The flags for Chain and Order summary discounts will be picked from the contract item detail. |
2. Contract is set up with a Price list |
VAT and Retail price will be picked from the price list.
This price list will also to be passed as output.
The flag for FOC from the price list will be considered in combination with the same flags on the contract. (If any of the flags on price list or the contract is set to Yes then it will be Yes).
Limit code discounts will be picked from both the price list and the contract.
The flags for Chain and Order summary discounts from the price list are to be considered in combination with the same flags on the contract. (If any of the flags on price list or the contract is set to No then it will be No). |
3. Contract is set up with a Price list + margin/mark-up. |
ONLY the calculated price will be picked from the price list and used in the margin/mark-up calculation. VAT, FOC, Limit code discount and Retail price are NOT to be picked from the same price list. VAT, FOC, Limit code discount and Retail price will be picked from the contract item detail.
No price list will be passed as output.
The flags for Chain and Order summary discounts will be picked from the contract item detail. |
4. Contract is not set up with any pricing information, i.e. the base price from Price list will be used. |
VAT and Retail price will be picked from the base price list.
This price list will also to be passed as output.
The flag for FOC from the base price list will be considered in combination with the same flags on the contract. (If any of the flags on base price list or the contract is set to Yes then it will be Yes).
Limit code discounts will be picked from both the base price list and the contract.
The flags for Chain and Order summary discounts from the price list are to be considered in combination with the same flags on the contract. (If any of the flags on price list or the contract is set to No then it will be No). |
5. Contract is set up with a Quantity limit price |
VAT, FOC, Limit code discount and Retail price will be picked from the contract item detail.
No price list will be passed as output.
The flags for Chain and Order summary discounts will be picked from the contract item detail. |
6. Contract is set up with a Matrix quantity limit price |
VAT, FOC, Limit code discount and Retail price will be picked from the contract item detail.
No price list will be passed as output.
The flags for Chain and Order summary discounts will be picked from the contract item detail. |
Sales pricing method scenarios:
The following five scenarios exist:
Scenario |
Result |
1. Method is set up with a Price, a Basis + margin/mark-up or FOC. |
VAT, FOC, Limit code discount and Retail price will be picked from the method detail.
No price list will be passed as output.
The flags for Chain and Order summary discounts will be picked from the method. |
2. Method is set up with a Price list |
VAT and Retail price will be picked from the price list.
This price list will also to be passed as output.
The flag for FOC from the price list will be considered in combination with the same flags on the method. (If any of the flags on price list or the method is set to Yes then it will be Yes).
Limit code discounts will be picked from both the price list and the method.
The flags for Chain and Order summary discounts from the price list are to be considered in combination with the same flags on the method (if any of the flags on price list or the method is set to No then it will be No). |
3. Method is set up with a Price list + margin/mark-up |
ONLY the calculated price will be picked from the price list and used in the margin/mark-up calculation. VAT, FOC, Limit code discount and Retail price are NOT to be picked from the same price list. VAT, FOC, Limit code discount and Retail price will be picked from the method detail.
No price list will be passed as output.
The flags for Chain and Order summary discounts will be picked from the method. |
4. Method is set up with no pricing information, i.e. the base price from Price list will be used. |
VAT and Retail price will be picked from the base price list.
This price list will also to be passed as output.
The flag for FOC from the price list will be considered in combination with the same flags on the method. (If any of the flags on base price list or the method is set to Yes then it will be Yes).
Limit code discounts will be picked from both the base price list and the method.
The flags for Chain and Order summary discounts from the price list are to be considered in combination with the same flags on the method. (If any of the flags on price list or the method is set to No then it will be No). |
5. Method is set up with a Quantity limit price |
VAT, FOC, Limit code discount and Retail price will be picked from the method detail.
No price list will be passed as output.
The flags for Chain and Order summary discounts will be picked from the method. |
6. Method is set up with a Matrix quantity limit price |
VAT, FOC, Limit code discount and Retail price will be picked from the method detail.
No price list will be passed as output.
The flags for Chain and Order summary discounts will be picked from the method. |
Price list scenario:
To reiterate what may seem obvious, for price lists we only have one scenario:
Scenario |
Result |
1. Price list is set up with a Price, or a Basis + margin/mark-up or FOC. |
VAT, FOC, Limit code discount and Retail price will be picked from the price list.
This price list will also be passed as output.
The flags for Chain and Order summary discounts will be picked from the price list. |
Margins and Mark-ups
The objective of all businesses is to make a profit that may be shown as:
Sales Price – Cost Price = Profit |
Margin: The profit when expressed as a fraction, or percentage, of the sales price is known as the margin and may simply be shown as:
Margin = Profit/Sales Price |
Mark-up: The profit when expressed as a fraction, or percentage, of the cost price is known as the mark-up and may simply be shown as:
Mark-up = Profit/Cost price |
Margins
When the cost price is known, the formula used in calculating the sales price from this when margins are used is as follows:
Sales Price = Cost Price / ((100 – %) / 100) |
Sales Price = Cost Price / (1 – Factor) |
Example 1 – Assume a cost price of 75.00 with a margin of 20%, the sales price is calculated as:
75.00 / ((100 – 20)/100) = 75/0.8 = 93.75 |
Example 2 – Assume a cost price of 90.00 with a margin of a factor of 0.25, the sales price is calculated as:
90.00 / (1 – 0.25) = 90/0.75 = 120.00 |
The above examples can be verified by using the Profit/Selling Price formula.
Example 1 Margin = (93.75 – 75.00)/93.75 = 18.75/93.75 = 0.2 x 100 = 20% |
Example 2 Margin = (120.00 – 90.00)/120 = 30/120 = 0.25 |
Mark-ups
When the cost price is known, the formula used in calculating the sales price from this when mark-ups are used is as follows:
Sales Price = Cost Price x ((100 + %) / 100) |
or
Sales Price = Cost Price x (1 + Factor) |
Example 3 – Assume a cost price of 75.00 with a mark-up of 20%, the sales price is calculated as:
75.00 x ((100 + 20)/100) = 75.00 x 1.2 = 90.00 |
Example 4 – Assume a cost price of 90.00 with a mark-up of a factor of 0.25, the sales price is calculated as:
90.00 x (1 + 0.25) = 90.00 x 1.25 = 112.50 |
The above examples can be verified by using the Profit/Cost Price formula.
Example 3 Mark-up = (90.00 – 75.00)/75.00 = 15.00/75.00 = 0.2 x 100 = 20% |
Example 4 Mark-up = (112.50 – 90.00)/90.00 = 22.5/90.00 = 0.25 |
Cost Bases
The “cost price” used in the above examples of margin and mark-up processing may be variable in DC1 and stored in a table together with an identifying code. The system defined alternatives available are as follows:
Basis code |
Description |
ACI |
Average Cost/Item |
ACW |
Average Cost/Warehouse |
LPI |
Last Purchase Cost/Item |
LPW |
Last Purchase Cost/Warehouse |
PP1 |
Purchase Price 1 |
PP2 |
Purchase Price 2 |
PP3 |
Purchase Price 3 |
PP4 |
Purchase Price 4 |
PP5 |
Purchase Price 5 |
RET |
Retail Price |
SCI |
Standard Cost/Item |
SCW |
Standard Cost/Warehouse |
SSI |
Standard Cost Sales/Item |
SSW |
Standard Cost Sales/Warehouse |
User defined cost bases may also be defined. A user defined cost basis will not be represented by any existing cost price or purchase price. Instead you sequence the system defined cost bases, giving the system the possibility to use an alternative cost basis in case the primary one holds no value. All active cost bases, which are defined as valid for the same functions as the user defined basis, will be listed and available for sequencing. Whenever a user defined cost basis is used in the system, a basis value will be searched for according to the defined sequence.
The bases are used in several applications and have to be activated for sales pricing before they can be used in price lists, contracts or sales pricing methods.
Basket pricing
Overview
Basket is a DC1 term signifying a collection of item related elements, (e.g., item, item group, item family), that together form an entity upon which order summary pricing methods can be applied.
For each basket definition you define the following in the Work with baskets file:
- Elements for each basket. You do this via the Basket key code 1-5 (on Header level) and key values for the selected Basket key codes (on Detail level). Note: If fixed basket keys were defined in the DIS control file, these will be valid for every basket definition, thus no other keys may be defined.
- All basket details. This flag is used to indicate that all details held by this basket must be qualified before pricing on this basket is effective. The flag will indicate that all details must be qualified before proceeding with qualification of any defined overall qualifying amount or quantity (or both).
The discount rules to be applied for baskets is set up in the Work with sales pricing methods file. The method types O (Order line summary discount) and H (Header discount) are valid for baskets. The Discount key code for these types must contain the key for baskets (33). The applicable basket key values are chosen from this Work with baskets file when setting up the method details.
Note: The system applies the benefits from the methods that have baskets as a key in the same way that it does for methods having other key fields. It must, however, be remembered that items can “exist” in several baskets so where benefits from more than one basket are to be given then multiple methods will have to be defined each having a limited number of baskets. In certain cases the number of baskets per method may be one (1). Benefits from more than one basket may be applied to a sales order but can be limited by enabling the Stop search field for order summary pricing methods that have basket as a key. Normally the system searches the sales pricing methods in sequential order to apply all applicable prices/discounts. By enabling the Stop search field for the above mentioned types – the system will stop the search at the first one found.
Basket Qualification
Within the order summary discount calculation, order summary pricing methods type O (order summary line discounts) and type H (order summary header discounts) are processed per applicable sales order line as explained further down in the Order summary calculation section.
When pricing methods, whether type O- or H-, are identified and selected as potential order summary discounts, (e.g., when pricing method types O are being processed), a routine called Basket Qualification is triggered as soon as a pricing method that demands the qualification of a basket as a prerequisite for the order to qualify for the offered discount is read. This routine will be triggered only once per order level being processed by the order summary calculation, i.e. maximum once for line level (when pricing method type O is processed as in this case) and maximum once for header level (when pricing method type H is processed).
Once triggered, the basket qualification routine will go through all non-free of charge active lines of the order that are enabled as contributor for order summary discounts in order to identify which baskets have reached their qualifying quantity or value (or both) and which line(s) contributed to qualify them. After this processing has been completed, this information will then be available to be utilised by the order summary discount calculation process when pricing methods, previously selected as potential order summary discounts, are to be taken through the qualification process.
During the order summary discount qualification process, the information generated by the Basket Qualification routine will be used to check if a basket connected to every applicable order summary pricing method has been qualified and also that the order line, in turn, is among those lines (or is the only one) that contributed to the basket qualification. If so, the prerequisite set by the order summary discount in question regarding the qualification of a basket has, with this, been fulfilled.
For both H and O types, it is important to mention that from the moment the Basket qualification routine has been triggered, the information generated will be available to be used within the order summary calculation for current and any subsequent order line(s) to be processed whenever a pricing method with basket as pricing key is to be selected as a potential order summary discount.
How basket information is created
So far, it has been explained why and when the Basket qualification routine is triggered and also what is generated. Now let us proceed with a more detailed explanation about how this information is created in order to help you understand why a basket will/will not be qualified. Sales Order processing will be used to exemplify.
The basket qualification routine is very similar to the order summary calculation process. It is based on the same principle, where all applicable lines of the order in turn (whether a sales order, sales quotation or temporary order from DC1 NetStore) shall be processed and pricing keys related values collected along with amount and quantity of line in turn.
Example:
Sales order processing will be used to exemplify. Each applicable order line is to be processed as follows:
- Item code on the sales order line is used to retrieve the following 12 item pricing key related values: Item discount group, Item price group, Item group, Item account group, Item category 1, Item category 2, Item category 3, Item category 4, Item category 5, Item category 6, Item family and Item sector.
- Each record in the Basket details is read in order to identify all potential baskets for which the order line would qualify and, for each record where the Basket key details are matched with the help of the item pricing keys related values retrieved above, order line and basket information such as basket ID and connected item pricing key related values will be stored in Order line/basket work file as follows:
Order line/basket work file
Order |
Line |
Basket |
Key1 |
Key2 |
Key3 |
Key4 |
Key5 |
12345 |
10 |
BASK1 |
ITM1 |
|
|
|
|
12345 |
10 |
BASK2 |
GP2 |
|
|
|
|
12345 |
10 |
BASK6 |
ITM1 |
|
|
|
|
- For each record added to Order line/basket work file a record is written/updated (if record already exists because that relevant basket has already been identified and added by a previously processed line) in Basket summary work file, along with basket information. Quantity and amount contributed by line in turn are included (when Basket identified and written for the first time) or summarised (when basket already exists). Identified Basket’s set-up qualifying quantity and amount are included only the first time Basket is written and remain untouched by any subsequent update. Quantities and amounts are calculated as:
- Quantity: Contributed quantity by order lines so far. Calculated as the quantity in the stock unit from order line.
- Amount: Contributed quantity by order lines so far. Depending on which order summary base value is set-up to be used by the order summary level being processed (i.e. Line level when basket qualification takes place for order summary line discounts (or O-type) calculation and header level when order summary header (or H-type) discounts are calculated instead). The amount will be calculated as the base (non-discounted price) or net (discounted price) value of the line. Expressed in system currency.
For more information about “Order summary base values” refer to the DIS control file in the Controlling factors section.
- Qual. Quantity: Will hold basket’s detail set-up qualifying quantity (if any defined, otherwise will be zeroed)
- Qual. Amount: Will hold basket’s detail set-up qualifying amount (if any defined, otherwise will be zeroed)
Basket summary work file
Order |
Basket |
Key1 |
Key2 |
Key3 |
Key4 |
Key5 |
Quantity |
Amount |
Qual. quantity |
Qual. amount |
Sel |
12345 |
BASK1 |
ITM1 |
|
|
|
|
6 |
444.44 |
|
|
N |
12345 |
BASK2 |
GP2 |
|
|
|
|
6 |
444.44 |
|
|
N |
12345 |
BASK6 |
ITM1 |
|
|
|
|
6 |
444.44 |
|
|
N |
- In addition, if the basket just written in Basket summary work file indicates that all basket details must be qualified in order to consider this basket as qualified, (indicated by “All basket details” = YES at basket header level), then all remaining defined basket details for applicable basket will be written in Basket summary work file with zero contributed quantity and amount. For example, let us assume that BASK6 is set-up as “All basket details” = YES. Consequently, all its details are to be included in order to qualify for this basket (or to keep considering this basket for any further processing regarding basket qualification). It is mandatory that all its details must be qualified first, so Basket summary work file would look as follows after the new records added.
Note: At this stage these new records are not connected to any line in Order line/Basket work file but are on their own waiting to be updated with contributing quantities and amounts by any subsequent order line that would match their pricing key related values.
Basket summary work file after all details added for BASK6
Order |
Basket |
Key1 |
Key2 |
Key3 |
Key4 |
Key5 |
Quantity |
Amount |
Qual. quantity |
Qual. amount |
Sel |
12345 |
BASK1 |
ITM1 |
|
|
|
|
6 |
444.44 |
|
|
N |
12345 |
BASK2 |
GP2 |
|
|
|
|
6 |
444.44 |
|
|
N |
12345 |
BASK6 |
ITM1 |
|
|
|
|
6 |
444.44 |
|
|
N |
12345 |
BASK6 |
ITM2 |
|
|
|
|
0 |
0 |
|
|
N |
12345 |
BASK6 |
GP4 |
|
|
|
|
0 |
0 |
|
|
N |
After all lines have been processed, the work files will contain records holding information similar to the following:
Order line/basket work file
Order |
Line |
Basket |
Key1 |
Key2 |
Key3 |
Key4 |
Key5 |
12345 |
10 |
BASK1 |
ITM1 |
|
|
|
|
12345 |
10 |
BASK2 |
GP2 |
|
|
|
|
12345 |
10 |
BASK6 |
ITM1 |
|
|
|
|
12345 |
20 |
BASK2 |
GP2 |
|
|
|
|
12345 |
30 |
BASK2 |
GP3 |
|
|
|
|
12345 |
40 |
BASK2 |
GP4 |
|
|
|
|
12345 |
40 |
BASK6 |
GP4 |
|
|
|
|
12345 |
50 |
BASK2 |
GP1 |
|
|
|
|
12345 |
60 |
BASK6 |
ITM1 |
|
|
|
|
12345 |
70 |
BASK2 |
GP3 |
|
|
|
|
12345 |
80 |
BASK5 |
FM1 |
|
|
|
|
12345 |
90 |
BASK3 |
CA1 |
|
|
|
|
12345 |
90 |
BASK4 |
GP1 |
CA1 |
|
|
|
Basket summary work file
Order |
Basket |
Key1 |
Key2 |
Key3 |
Key4 |
Key5 |
Quantity |
Amount |
Qual. quantity |
Qual. amount |
Sel |
12345 |
BASK1 |
ITM1 |
|
|
|
|
6 |
444.44 |
5 |
100 |
N |
12345 |
BASK2 |
GP1 |
|
|
|
|
6 |
444.44 |
8 |
N/A |
N |
12345 |
BASK2 |
GP2 |
|
|
|
|
15 |
1058.50 |
10 |
N/A |
N |
12345 |
BASK2 |
GP3 |
|
|
|
|
7 |
125.75 |
5 |
250.00 |
N |
12345 |
BASK2 |
GP4 |
|
|
|
|
8 |
800.00 |
8 |
N/A |
N |
12345 |
BASK3 |
CA1 |
|
|
|
|
10 |
774.80 |
N/A |
500.00 |
N |
12345 |
BASK4 |
GP1 |
CA1 |
|
|
|
10 |
774.80 |
10 |
N/A |
N |
12345 |
BASK5 |
FM1 |
|
|
|
|
5 |
500.00 |
N/A |
300.00 |
N |
12345 |
BASK6 |
ITM1 |
|
|
|
|
12 |
2845.44 |
N/A |
1500.00 |
N |
12345 |
BASK6 |
ITM2 |
|
|
|
|
0 |
0 |
12 |
N/A |
N |
12345 |
BASK6 |
GP4 |
|
|
|
|
8 |
800.00 |
N/A |
350.00 |
N |
Now that all information is gathered regarding potential Baskets that would be qualified by the order, contributed order quantities/amounts per basket and finally order lines that contributed with their amounts and quantities, the basket qualification process can be carried on.
Each record in the Basket summary work file will be read per Basket ID and contributed quantity/amount will be compared against corresponding qualifying quantity/amount value stored within the same record and:
- If contributed quantity/amount is greater than, or equal to, the corresponding qualifying quantity/amount, then the selected field will be updated to YES (qualified) and contributed quantity/amount will be summarised (temporarily within the processing – not in any file) for the Basket ID in turn.
Otherwise, the selected field will be left as NO (not qualified). It will also be checked if Basket in turn indicates that all basket details must be qualified (indicated by “All basket details” = YES at basket header level). If so, all records in Basket summary work file for Basket ID in turn will be set as not qualified (Selected field is updated to NO). This is because since this detail was not qualified, any previously qualified detail for Basket in turn is automatically disqualified.
Once all records for Basket ID in turn have been processed, the overall contributed quantity/amount calculated for the Basket ID in turn will be compared to the overall qualifying quantity/amount on the Basket header. Once again, if the qualifying quantity/amount has not been reached then all of the records for that basket will get their “Selected” field set to NO.
After the Basket qualification process (previously described) is completed, the Basket summary work file would look as follows:
Basket summary work file
Order |
Basket |
Key1 |
Key2 |
Key3 |
Key4 |
Key5 |
Quantity |
Amount |
Qual.quantity |
Qual.amount |
Sel |
12345 |
BASK1 |
ITM1 |
|
|
|
|
6 |
444.44 |
5 |
100 |
Y |
12345 |
BASK2 |
GP1 |
|
|
|
|
6 |
444.44 |
8 |
N/A |
N |
12345 |
BASK2 |
GP2 |
|
|
|
|
15 |
1058.50 |
10 |
N/A |
Y |
12345 |
BASK2 |
GP3 |
|
|
|
|
7 |
125.75 |
5 |
250.00 |
N |
12345 |
BASK2 |
GP4 |
|
|
|
|
8 |
800.00 |
8 |
N/A |
Y |
12345 |
BASK3 |
CA1 |
|
|
|
|
10 |
774.80 |
N/A |
500.00 |
Y |
12345 |
BASK4 |
GP1 |
CA1 |
|
|
|
10 |
774.80 |
10 |
N/A |
Y |
12345 |
BASK5 |
FM1 |
|
|
|
|
5 |
500.00 |
N/A |
300.00 |
Y |
12345 |
BASK6 |
ITM1 |
|
|
|
|
12 |
2845.44 |
N/A |
1500.00 |
N |
12345 |
BASK6 |
ITM2 |
|
|
|
|
0 |
0 |
12 |
N/A |
N |
12345 |
BASK6 |
GP4 |
|
|
|
|
8 |
800.00 |
N/A |
350.00 |
N |
Notice that even though contributed amounts in BASK6 details for Key1=ITM1 and Key 2= GP4 have reached the qualifying set-up amounts of 1500.00 and 350.00 respectively, the records for these details are set as selected = NO (not qualified). This is due to that BASK6 details for Key1=ITM2 did not reach the qualifying quantity of 12 and as the basket BASK6 is set-up as “All basket details” = YES, all details for this baskets are automatically disqualified.
Basket qualification routine information is now available in work files to be utilised by the order summary calculation when pricing methods selected as potential order summary discount are to be processed for qualification for applicable order level (i.e. type O or type H).
Order summary calculation
Inclusion/Exclusion of Order Line
Whether or not a line is included in the order summary calculation depends upon two flags, one of which is item related and the other price related.
The first, the “Contribute to order summary” flag (formerly called “Order discount sales”) is retrieved from the Item file and written to the order/quotation line during line entry. It controls if the line contributes to the summary of quantities and amounts in the basket qualification and the order summary discount calculation. This flag at the same time controls if the line benefits from any order line summary discounts (O-type) and header discounts (H-type). All lines that do not contribute to the order summary will NEVER benefit from it, in other words no order line summary discounts will be applied and no header discount will be apportioned over these lines. This flag is displayed on the line and can be maintained.
The “Order summary discount” flag is written to the order/quotation line from the sales price and discount calculation program. It is set to YES as long as the originating price source and none of the applied discounts are set-up with Order summary discounts as NO. The flag only controls if the line benefits from any order line summary discounts (O-type) and header discounts (H-type). If a line does not contribute to the order summary then it does not benefit from it, regardless of how this field is set. This flag is displayed on the line and cannot be maintained.
Calculation Execution Timing
The execution of the order summary discount calculation is under the overall control of the Order Summary Y/N field in the DIS control file and because of that this routine can involve the processing of a high volume of data, instead of being executed every time an order line has been maintained (added, changed or deleted). It is triggered on leaving the sales order or quotation if any changes regarding order total amount or activation/deactivation of an order line as contributing for order summary is recorded. An exception to the rule occurs when discounts or detailed net price calculation is requested to be maintained / visualised for a line. In this case, the order summary discount calculation is triggered in order to show accurate pricing information.
However, in addition to the field in the DIS control file, the execution of the order summary calculation for an order is under the control of a second field that is held on each order header. This field (Order Summary Calculation Y/N), that cannot be manually maintained, is visible on the order header panel and is initially set to YES when the order is created but is changed to NO when the first line is pick confirmed, after which the order summary calculation will not be executed for that order. This maintains the principle that was adopted in previous releases for Order Value Discounts that have been replaced by the “H” type summary discounts.
One effect of this principle is that summary discounts for items that have despatch date pricing will be calculated on the prices ruling at an earlier date and will not be re-calculated at pick confirmation, although the prices will be re-calculated at this time.
Furthermore lines that are added to the order after the field has been set to NO will not have order summary discounts applied to them.
Calculation Overview
When the order summary discount calculation is triggered, a kind of re-pricing takes place, where all previously automatically calculated order summary discounts (“O” and “H” type) attached to the order are cleared in order to be re-calculated.
It is important to mention that, depending on how the order summary process is triggered; the way in which the attached order summary discount are cleared will vary as follows:
- If triggered automatically (i.e. by the system as the order’s total value has changed or discounts or net price detailed calculation is requested to be maintained/visualised, etc) all active and automatically created order summary discounts attached to the order will be cleared. This means that manually added/changed order summary discounts (only allowed for “H” type) or manually deleted will keep their status, meaning with this that they will not be cleared (when manual discount) or restored during re-calculation (when deleted).
- If triggered by request (i.e. “Order summary discount reset and calculation” order header level function has been selected to be applied on the order) all discounts active and non-active (manually deleted), automatically or manually created attached to the order will be cleared without any consideration.
After this first step, the order summary calculation can begin. Non-free of charge active lines that contribute to order summary discount shall then be read and processed at two levels, “O” type and “H” type pricing method level.
Customer pricing key related values Customer, Customer group, Discount group, Customer account group, Country, Area, Customer category 1, Customer category 2, Customer category 3, Customer category 4, Customer category 5 and Customer category 6 are retrieved.
“O” type discounts processing:
Identification of potential “O” type order summary discounts (per order line).
- Order pricing key related values: Order type, Warehouse, Terms of payment, Terms of delivery, Manner of transport, Agreement type, Warranty type, Project are retrieved.
- Item pricing key related values: Item, Item discount group, Item price group, Item group, Item account group, Item category 1, Item category 2, Item category 3, Item category 4, Item category 5, Item category 6, Item family and Item sector are retrieved.
- Line value is calculated based on order summary base value set-up for order summary line level (order summary discount type “O”), i.e. either base (non-discounted) or net (discounted) will apply.
- Identify potential “O” type pricing methods for which the line would qualify as follows:
a) Read each active “O” type pricing method and retrieve its pricing keys.
b) Build pricing method detail key accordingly by utilising available pricing key related values.
i) If buying group is included as pricing key and buying groups for customer has not been loaded for a previous line, load buying groups (if any) defined for customer. This is done only once during the full order summary calculation as this information is connected to customer and does not vary from line to line.
ii) If basket is included as pricing key and Basket qualification routine has not been triggered by a previous line, execute basket qualification routine. This is done only once during the “O” type discounts processing as this routine processes all applicable order lines and not just the one in turn. Information is now available for both line in turn and any following line to be processed. For more information about the basket qualification routine refer to the Basket pricing section.
c) Search for details defined within the pricing method in turn where defined pricing key related values match built pricing method detail key (built in step 4.b). In regards to this search it is important to mention that:
i) As currency/unit can be left blank at pricing method detail level, all permutations for currency-unit are searched (4 in total)
ii) All connected buying (when applicable) groups to customer are also to be searched for the different permutations.
iii) All qualified baskets (when applicable) by the line, according to information delivered by the basket qualification routine, will also be searched for the different permutations.
d) For every match found in step 4.c, the following will take place
i) Write record in “Order line O type pricing method detail” work file containing current line along with matched pricing method detail’s information such as Pricing method ID, pricing key related values, unit and currency, pricing method header level’s “Stop search” and “Claimable” flags.
ii) Write/Update (when pricing method detail previously selected and written as potential order summary discount by another line) record in “Order line O type pricing method summary” work file containing matched pricing method detail’s information such as Pricing method ID, pricing key related values, unit and currency. In addition to this, contributed amount and quantity by line in turn is to be written/accumulated for pricing method detail as:
- Quantity
- If pricing method detail unit is blank, this indicates that any defined quantity limit for this pricing method detail is expressed in stock unit. Before accumulating contributed quantity it will first be converted to stock unit for item held by line in turn.Otherwise any defined quantity limit for this pricing method detail is already expressed in line’s sales unit and no conversion is required.Contributed quantity is accumulated.
- Amount
- If pricing method detail currency is blank, this indicates that any defined amount limit for this pricing method detail is expressed in system currency. Before accumulating contributed amount it will first be converted to system currency. Otherwise any defined amount limit for this pricing method detail is already expressed in order’s transaction currency and no conversion is required.Contributed amount is accumulated.
- Process next applicable line.
Once all potential “O” type order summary discounts that would be qualified by the order have been identified, the qualification process will take place and again every applicable line is processed, this time to decide if the line qualifies for its selected “O” type summary discounts. This is provided that the line is valid to benefit from order summary discounts. Some lines will only contribute with their amounts and quantities but will not benefit from any qualified order summary discount.
Qualification of / Apply “O” type order summary discounts (per order line)
At this stage the following information has been collected and recorded:
- Potential “O” type summary discount that would be qualified by the order.
- Order lines that contributed to the selection of the pricing methods mentioned above (stored in “Order line O type pricing method detail” work file).
- Total contributed quantity and amount by order lines per selected pricing method details (stored in “Order line O type pricing method summary” work file).
This information is now to be processed in order to find out which “O” type pricing methods are qualified in order to be applied upon those lines that contributed to its selection and now, qualification. The following contributing lines will not benefit from any qualified “O” type discount:
- Invoiced lines
- Lines not valid for order summary discount.
- Manually priced lines (unless “Additional discounts” is set to YES at DIS control file level)
- Components of a sales order structure whose structure’s sales price calculation code is “1” or “3”.
1. Check if “O” type summary discount has been previously deleted by user, if so, one of the following actions will be taken:
- If stop search discount flag is set to YES then no more “O” type discounts are to be processed for the line. Next line is to be processed, first selected “O” type pricing method is to be retrieved and step 1 will be taken again.
Otherwise
- Discount has been deleted and will be disregarded. Next selected “O” type summary discount is to be processed, repeat step 1.
2. Retrieve total contributed amount and quantity for the “O” type pricing method from “Order line O type pricing method detail” work file.
3. Retrieve pricing set-up for “O” type pricing method detail, and based on this set-up, selected “O” type pricing method will be qualified if:
a) Discount is fixed (i.e. discount percentage or discount amount is assigned)
b) When limit dependent pricing is defined either at pricing method detail level or through a limit code and:
i) Amount limits are defined and total contributed amount has reached one of the defined amount limits.
ii) Quantity limits are defined and total contributed quantity has reached one of the defined quantity limits.
4. If “O” type pricing method detail has been qualified:
a) Get discount percentage or discount amount to be applied to the line (either fixed or from the amount/quantity limit qualified)
b) Attach “O” type summary discount to the line
c) If stop search discount flag is set to YES then no more “O” type discounts are to be processed for the line. Next line is to be processed, first selected “O” type pricing method is to be retrieved and processed from step 1.
Otherwise, next selected “O” type pricing method is retrieved and it will be processed from step 1 again.
5. If “O” type pricing method detail was not qualified, next selected “O” type pricing method detail is retrieved and it will be processed from step 1 again.
H” type discounts processing
After order summary discounts at line order level have been calculated, it is now the turn of the order header level to go through a similar process provided that order does not hold any invoiced line. Otherwise no “H” type discounts will be re-/calculated.
Identification of potential “H” type order summary discounts (per order line)
1. If line is applicable (i.e. it does not only contribute) for order summary discounts:
a) Retrieve all existing attached manually entered header discounts.
b) For each of them write a record in “Order line H type pricing method detail” work file containing current line along with manual discount detail’s information such as pricing method ID, “Stop search” and “Claimable” flags, in addition to Selected” flag. This selected flag will indicate if “H” type method has been qualified by the line when “H” type discounts are to be apportioned upon contributing lines. In this case, this flag is set to YES automatically as manually entered “H” type discounts will always be apportioned upon all lines that contributes and that are applicable for order summary discounts.
2. Order pricing key related values: Order type, Warehouse, Terms of payment, Terms of delivery, Manner of transport, Agreement type, Warranty type, Project are retrieved.
3. Item pricing key related values: Item, Item discount group, Item price group, Item group, Item account group, Item category 1, Item category 2, Item category 3, Item category 4, Item category 5, Item category 6, Item family and Item sector are retrieved.
4. Line value is calculated based on order summary base value set-up for order summary header level (order summary discount type “H”), i.e. either base (non-discounted) or net (discounted) will apply.
5. Identify potential “H” type pricing methods for which the line would qualify as follows, read each active “H” type pricing method and:
a) Retrieve header discount set up. “H” type pricing method will not be selected for the line if:
i) Header discount set-up currency differs from order transaction currency and header discount set-up currency is not system currency (i.e. set-up currency code is system currency’s or set-up currency code has been left blank). Read next active “H” type pricing method and step 5.a will be repeated.
ii) Header discount set up unit code is not blank and differs from both order line’s sales and stock unit. Read next active “H” type pricing method and step 5.a will be repeated.
b) Get line’s contributing values as:
i) Quantity: If Header discount set-up unit differs from line’s sales unit, then quantities are to be handled in line’s item’s stock unit. Convert line’s ordered quantity into corresponding stock unit. Otherwise conversion is not needed as line’s quantity is already in the required unit.
ii) Amount: If Header discount set-up currency differs from order transaction currency, then amounts are to be handled in system currency. Convert line’s amount into system currency. Otherwise conversion is not needed as line’s amount is already in the required currency.
c) Retrieve “H” type pricing method and retrieve its pricing keys.
d) Build pricing method detail key accordingly by utilising available pricing key related values.
i) If buying group is included as pricing key and buying groups for customer have not been previously loaded, load buying groups (if any) defined for customer. This is done only once during the full order summary calculation as this information is connected to customer and does not vary from line to line.
ii) If basket is included as pricing key and Basket qualification routine has not been triggered by a previous line, execute basket qualification routine. This is done only once during the “H” type discounts processing as this routine processes all applicable order lines and not just the one in turn. Information is now available for both line in turn and any following line to be processed. For more information about the basket qualification routine refer to the Basket pricing section.
e) Search for details defined within the pricing method in turn where defined pricing key related values match built pricing method detail key (built in step 4.b), In regards to this search it is important to mention that:
i) As currency/unit can be left blank at pricing method detail level, all permutations for currency-unit are searched (4 in total)
ii) All connected buying (when applicable) groups to customer are also to be searched for the different permutations.
iii) All qualified baskets (when applicable) by the line, according to information delivered by the basket qualification routine, will also be searched for the different permutations.
f) If a match is found in step 5.e, the following will take place:
i) Write record in “Order line H type pricing method detail” work file containing current line along with pricing method detail’s information such as pricing method ID, “Stop search” and “Claimable” flags, “Selected” flag is set to NO
ii) Write/Update (when pricing method detail previously selected and written as potential order summary discount by another line) record in “Order line H type pricing method summary” work file containing matched pricing method detail’s information such as Pricing method ID and total contributed values. Previously calculated contributed amount and quantity for line in turn is then written / accumulated for pricing method detail.
6. Process next applicable line.
Once all potential “H” type order summary discounts that would be qualified by the order have been identified, the qualification process will take place and again every applicable line is processed, this time to decide which selected “H” type summary discounts have been qualified and upon which lines they will be apportioned.
Re-pricing
An order line re-price function is available that allows lines to be re-priced for whatever reason. This function simply clears the discounts calculated in the sales price calculation program and then recalls that program.
It will also call the order summary calculation program be able to give the last and correct net prices that are displayed on the sales order line entry panel.
It must be noted that it is, as it says, a re-price. Discounts originally calculated in the sales pricing program, and that have been manually deleted, may be re-calculated subject to things being/remaining the same as when the price was originally calculated. For example, that a method or contract that generated them has not expired in the meantime.
In the case of having FOC items as discounts the re-price will also affect the base line and its dependent FOC lines. A re-price of a base line can give the type of result to the connected FOC lines:
During the re-price a Fair pricing quantity is used when checking towards limits in the new sales price and discount retrieval (this information is visible in the line connection enquiry). For normal order lines this represents the quantity of that line but if you have situations where a line has been split into multiple lines it will summarize the quantity from those connected lines. For example, you could have a situation where a line has been split into two lines to be able to fulfil the delivery (perhaps sourced from two different warehouses). To only use the quantity from one of these two split lines in a re-price situation would be seen as “unfair” for that customer as it might go below a quantity limit that was previously reached and the customer shouldn’t be punished for your problem to deliver. So instead the fair pricing quantity is used, that is the summary of these two split lines.
Manual price/discount entry
Additional Discounts
Releases of DC1 below version 6.00 contained a principle whereby if a sales price was manually entered at the time of line creation then the sales price calculation program would not be called and no line discounts automatically created.
This principle is now a sales pricing policy under the term of Additional discounts and can be turned on and off in the DIS control file.
If Additional discounts is set to NO in the DIS control file and a price and/or discount was manually entered when the line was created then only H type summary discounts are automatically created for the line. If a price was entered at the creation of the line this is to be used, otherwise the non-discounted price returned from the sales price calculation program is to be used. Only the discount entered at creation of the line is to be used.
If Additional discounts is set to YES and a price and/or discount is manually entered at line creation then all types of discount will be automatically created for the line in addition to the one that is manually entered at the creation of the line.
Retain Discount
In cases where the same discount is required to be given for each line, it is possible, using the “View controls” feature in sales order line entry, to turn on a switch that causes the discount amount, or percentage, manually entered against the first line, to be retained for future lines until it is overridden. This feature also applies to the manually entered FOC code.
Short term pricing
Short term pricing allows multiple sales pricing method details to be set up with the same key values but with different “Valid from” and “Valid to” dates. When short term pricing is activated and there are overlapping dates, the system will select the detail with the closest Valid from date prior to the pricing date
This function is to give the possibility to temporarily override the normally used method detail with another method detail. You can, for example, have a method detail with no valid from and to dates (i.e. valid at all times) that act as your default detail. Then you can add a new detail with the same set of keys but for a certain month during the present year. When entering that month that detail will be picked up as it has the closest from date before the pricing date. You can then take this one step further and add yet another detail to be used for a specific date within this month if you like.
One limitation with short term pricing is that it is not possible to set-up a detail record using the same “Valid from” date as another detail record with the same keys within the same method.
Limit dependent pricing
Using limit dependent pricing it is possible to vary the price and/or discount that you give to your customers dependent upon the amount, or quantity, that they buy at a single time. If the Item matrix functionality is activated, it will also be possible to run limit dependent pricing against a matrix quantity limit. The quantity checked against the limits will be the accumulated order line quantity for all matrix items that hold the same segment 1 value.
Note: FOC items as discount will always be set up using a limit definition.
This is performed in two main ways:
- Either by using a pre-defined set of limits, along with their discounts, held against a user-defined limit code
- Or by defining the limits, prices, or discounts, uniquely against an item in a price list, customer contract, or sales pricing method.
For Contracts and Sales pricing methods:
Quantity dependent, Matrix quantity dependent or amount dependent limit codes may be used to define the limits.
For Price lists:
Only quantities can be used to define the unique limits and only a quantity dependent limit code can be used. It will be possible to define that the quantity dependent pricing will be defined as matrix limits.
In a price list, sales pricing method or contract, either a limit code or unique limits may be used, but not both.
When defining unique quantity, matrix quantity or amount dependent pricing limits:
When defining quantity, matrix quantity or amount dependent pricing limits uniquely against an item in a customer contract or sales pricing method (price list does not apply for this explanation): Currency and unit are allowed to be left blank regardless if it is an amount or a quantity limit. This is interpreted by the system as follows:
- When amount dependent limit (A):
- For non-order summary discounts: When currency is left blank it indicates that amounts are expressed and to be qualified in order transaction currency of line being priced.
- For order summary discounts: When currency is left blank it indicates that amounts are expressed and are to be qualified in system currency when order summary discount calculation is carried on. Conversion of line’s contributed amount into system currency will take place before it is summarised, to be used when qualification of amount limits is to be performed.
- When quantity dependent limit (Q):
- For non-order summary discounts: When unit is left blank it indicates that quantities are expressed and to be qualified in sales unit of line being priced.
- For order summary discounts: When unit is left blank it indicates that quantities are expressed and are to be qualified in stock unit when order summary discount calculation is carried on. Conversion of contributed quantity into line’s stock unit will take place before it is summarised, to be used when qualification of quantity limits is to be performed.
- When matrix quantity dependent limit (M):
- For non-order summary discounts: When unit is left blank it indicates that quantities are expressed and to be qualified in sales unit of line being priced.
- For order summary discounts: Matrix limits are not allowed for order summary discounts.
When defining pre-defined set of limits using limit codes:
Limit codes must be defined as amount dependent (A), quantity dependent (Q), or matrix quantity dependent (M). If (A) then a currency is mandatory and the unit is optional. If (Q) or (M) the unit is mandatory and the currency is optional. If both unit and currency are defined then both must match those on the order before the prices, or discounts, held against the code will be applied. Furthermore they must both match the currency and unit entered on the price list, contract or pricing method before the limit code is can be attached to them.
Assume that we have the following order lines:
Line |
Qty |
Net line price |
Item group |
Line amount |
10 |
10 |
9.00 |
A |
90.00 |
20 |
10 |
18.00 |
B |
180.00 |
30 |
10 |
27.00 |
C |
270.00 |
40 |
10 |
36.00 |
A |
360.00 |
Example A – Quantity limits
We have an “O” type method that is keyed by item group, for item group A we have the following:
Qty |
Disc % |
10 |
1.0 |
20 |
2.0 |
30 |
3.0 |
Lines 10 and 40 both have an item in item group A, the total quantity being 20, therefore these two lines would attract a discount of 2% from this method as the total quantity on the lines is between 20 and 30.
Example B – Amount limits
Here we have an “O” type method that is keyed by item group, for item group A we have the following:
Amount |
Disc % |
200 |
1.0 |
300 |
2.0 |
400 |
3.0 |
500 |
4.0 |
Lines 10 and 40 both have an item in item group A, the total order line amount being 450.00, therefore these two lines would attract a discount of 3% from this method as the total amount on the lines is between 400.00 and 500.00.
FOC items processing
FOC items given as discount is a functionality that can be activated in DIS control file, Pricing policies. This is to support the way of giving customers discount where you offer free of charge (FOC) items, for example buy 10 of product A and get one for free or buy 5 of product B and get 2 of product C for free. With the FOC items handling you will be able to define FOC discounting information for Limit codes, Customer Contracts, Sales price list (via an attached Limit code) and Sales pricing method types (excluding O and H).
The valuation of FOC items can be utilized in the “First price/best value compared with promotion” pricing logic, Promotion budgeting and SMS rebate claims. The value of the FOC items represents the net price of an item in the normal situation, i.e. it represents the pricing of an item, when it is not given as a FOC item (for example, picking an item’s price from a sales price list).
If an FOC item line is created as a result of the pricing of a sales order line, a reference between the base line and the FOC item lines will be visible throughout the entire sales order process. Profit calculation, statistics and bookkeeping will also be affected for base lines that have connected FOC item lines.
The technical processing to handle FOC items is as follows:
Step 1 – Sales price calculation (DMR910) for a line
In DMR910, during the sales price calculation, records may be written or updated in the FOC item discount file SROGDTF. These records contain an activity flag that defines what activity is to be performed for the FOC item in sales orders, quotations or temporary orders. The following activities are sent back from the sales price determination:
- “A” – Add new FOC item line
- “C” – Change existing FOC item line
- “D” – Delete existing FOC item line
Step 2 – FOC item line processing (DIR473)
This FOC item line processing program will get called from several places within the system after a sales price has been calculated. The program will read all SROGDTF records for a given discount key and initiate the activity depending on the activity flag and context. After successfully creating/changing/deleting the sales order line or quotation line record, the activity code will be set to blanks (‘ ‘).
Negative net prices
The possibility to use discount amount on discounts added on top, such as sales pricing method types “C” and “O” can give rise to a situation where the net price goes negative. There are a number of situations where this may occur:
- During normal sales price calculation
- During order summary discount calculation
- When discounts are manually added or changed
- When the sales price is decreased
- When VAT included is added or changed
- When an already negative line is copied to a new line
For sales orders this is handled by putting the line on hold using reason code 40 – “Negative net sales price”. A warning message is also issued. If such a line is printed on an order confirmation then “TBA” (To be advised) will be printed in the price field for this line. Before the line is released (done automatically), the user must then re-price the line and/or manually amend the discounts for the line, so that the net price does not become negative.
Discounts set up with discount amount that brings the price down below zero, or that are created when the net price is below zero still hold their full discount amount. Discounts set up with a discount percentage that is applied after the net price has gone down below zero have their discount amount set to zero.
This preserves the discounts in the shape that they are applied in the calculation so that the user then can decide which discount/discounts to change or delete. The user might want to keep a discount set-up with a discount amount that lies below zero and instead remove a previous discount to adjust the net price.
When the discounts are adjusted and discounts that are set up with a discount percentage appear above zero again then a correct discount amount will be calculated.
For quotations only a warning message is issued, as there is no function for holding quotation lines.
Useful sales price related enquiries
Via the following enquiries you can find all of the information you need regarding the sales price of an item.
Customer service enquiry
Good to use when the customer wants to know the price and delivery for nn of item X. All of the information regarding the price and availability are here on a single panel or, if not on this panel, details are a click away.
Note: Order summary discounts (O- and H-type) can only be retrieved and displayed here to a limited extent as you only can simulate a single order line here.
Detailed net sales price enquiry
Use this enquiry when you want to see the breakdown of how a sales price was calculated for the entered quantity on a sales order line, sales quotation line and invoice line.
You can access this enquiry from the following locations but it is not, however, accessible for a component in a sales structure that has sales price calculation code 3 or 4 after the summary has taken place:
- Line level of Sales order entry or Sales order enquiry
- Line level of sales quotation maintenance or Sales quotation enquiry
- Line level of invoice enquiry
- Customer service enquiry
The information displayed will outline, as an example, the:
- Starting price and where it was derived
- Price and discount method used
- Actual pricing key values used
- Discounts and the intermediate prices
- Net price
Line connection enquiry
Use this enquiry when you want to see an overview of connections between lines (e.g. for Sales quotation lines, Sales order lines or Invoice lines). When this enquiry is called from a number of different places, (e.g. from the sales order header), all lines that have some type of connection are displayed. In sales order or quotation entry, lines could exist which are connected to other lines in one way or another. For example, a line is backlogged to a new line or a parent line may hold many component lines, etc. This enquiry handles such types of relationships among FOC items, item structure (parent and components), backorder lines, split and scheduled lines. A line can be of various types depending upon the kind of relationship it has with other lines.
Link type of a line shows what kind of line it is, i.e. Parent or Component, FOC base or FOC item line, etc.
Link type |
Description |
Applicable for |
---|
Blank |
Represents a normal line |
Not applicable |
BF |
Base line for FOC items |
FOC items |
DF |
Dependent FOC item line |
FOC items |
PA |
Parent line Order structure |
Order structure |
CO |
Component line Order structure |
Order structure |
PB |
Parent and Base line for FOC items |
Order structure and FOC items |
CB |
Component and Base line for FOC items |
Order structure and FOC items |
SM |
Split main |
The first line in a line split or the first line for a scheduled set of lines (i.e. a scheduling of lines that are priced on the total quantity of the whole set).
Note: Only applicable within the sales order process not the quotation process because a line split/scheduling is not performed for quotation lines |
SS |
Split secondary |
The second line in a line split or the second or more lines for a scheduled set of lines (i.e. a scheduling of lines that are priced on the total quantity of the whole set).
Note: Only applicable within the sales order process not the quotation process because a line split/scheduling is not
performed for quotation lines. |
SB |
Split main and Base line for FOC items |
Split main and also base line for FOC items (SM + BF).
Note: Only applicable within the sales order process not the quotation process because a line split/scheduling is not performed for quotation lines. |
Information around Fair pricing quantity (see more around this in the Re-pricing section) and Incl FOC (i.e. whether or not FOC items will be included in the pricing of this line) are also displayed in this enquiry.
Customer price and discounts enquiry
This enquiry, which is invaluable in ascertaining how many prices are set up for your customer, displays all of the pricing techniques that could be encountered by the sales price calculation routine for the entered customer alone or in combination with a quantity of the entered item. The net sales price for the customer can be viewed in the Detailed net price calculation enquiry. It is ideal to use, for example, where a customer is a member of several buying groups, each of which buys the entered item but at a different discount. The enquiry will display the different prices that the customer could get depending upon which buying group your customer uses to acquire the items.
Sales pricing keys where-used enquiry
In this enquiry you can search all pricing techniques, i.e. Price lists, Customer contracts and Sales pricing methods, where a price could be applicable for the entered selection criteria.
- Up to five DIS control keys can be used as selection criteria
- Runs in the following three modes:
Mode |
Description |
All |
Searches all customer or item related key values and requires a partial match with the pricing detail records if a customer or item is entered. E.g. if you enter a customer and that customer if part of a customer group also match for that customer group will be displayed. |
Partial |
Searches only the entered key values and requires a partial match with the Sales pricing detail records regardless of customer or item related key values even if a customer or item is entered. |
Exact |
Selected keys must exactly match the keys in the pricing detail records. |
Basket enquiry
In this enquiry you have the possibility to browse all pricing techniques, i.e. Price lists, Customer contracts and Sales pricing methods (via the option for Pricing methods) where a price could be applicable for the selected basket.
You also have the possibility, via the function key for Where-used selection, to search all baskets containing the entered combination of selection criteria for applicable pricing techniques.
- Item code or up to five other item-related, DIS control keys can be used as selection criteria.
- Each basket can be “exploded” to it’s details.
- Runs in the following three modes:
Mode |
Description |
All |
Searches all item related key values and requires a partial match with the sales pricing method detail records if an item is entered. E.g. if you enter an item and that item if part of a basket also match for that basket will be displayed. |
Partial |
Searches only the entered key values and requires a partial match with the Sales pricing method detail records regardless of item related key values even if an item is entered. |
Exact |
Selected keys must exactly match the keys in the Sales pricing method detail records. |
When a match has been found you can browse all pricing techniques, i.e. Price lists, Customer contracts and Sales pricing methods (via the option for Pricing methods) where a price could be applicable for the basket.
Structure of DMR910 – Sales Price and Discount Calculation
Main/Initiation group of sub-routines
SR01 – General Initiation, calls to: SR05, SR06, SR07, SR09, SR10, SR11, SR12
SR02 – Retrieve Customer related initiation fields, calls to: SR08, SR13, SR14
SR03 – Get price (main line)
SR04 – Handle SROSPCD file when Customer structure pricing policy is "best of",
picks the best values from customer or parent for output
SR05 – Values from the DIS control file, check applications and sub-applications
SR06 – Initiation of the output fields (XOxxxx)
SR07 – Item related fields, initiation
SR08 – Customer related fields, initiation
SR09 – Order related fields, initiation
SR10 – Some other preparations (fields like OUSH, OTIC, CURR, DCSP, DATE,
– QTY, SQTY…..)
SR11 – Retrieve Cost bases
SR12 – Get Pricing policy for customer structure
SR13 – Prepare Base price values (clear of all values)
SR14 – Prepare Sales price calculation detail file
SR15 – Retrieve Base price
SR16 – Get details for previous normal/promotion pricing (for target & budget handling)
SR19 – Set Output values (move from X0xxxx into P1xxxx), call to SRC13 to create Sales pricing history
records (SPCD, SDIH, SDID,…) and call to SRC14 to create Discount records (GDT and GDTF)
Logic within Main/Initiation sub-routines
If Directed price (DIPC <> ” “)
EXSR – SRD00 (Directed Price calculation)
Else
Standard price calculation
DU0010 label
EXSR – SR01 (Initiation)
If Pricing policy is either Customer or Best of (Get price for Customer)
EXSR – SR02 (Set Customer related fields for Customer)
EXSR – SR03 (Get price for Customer)
EXSR – SR04 (Take care about Sales price calculation detail file)
EndIf
If Pricing policy is either Parent or Best of (Get price for Pricing parent)
EXSR – SR02 (Set Customer related fields for Parent)
EXSR – SR03 (Get price for Parent)
EXSR – SR04 (Take care about Sales price calculation detail file)
EndIf
EndIf
DD9999 label
EXSR – SR19 (create GDT-records, create SPCD-records and Set output fields)
Logic of some main sub-routines
BEGSR – 01
EXSR – SR05 (Get DIS control file, check if applications and sub-applications are active)
EXSR – SR06 (Initiate output fields, XOxxxx)
EXSR – SR07 (Retrieve Item related fields)
EXSR – SR09 (Retrieve Order related fields)
EXSR – SR16 (Retrieve previous normal/promotion pricing details)
EXSR – SR10 (Retrieve some other values)
EXSR – SR11 (Retrieve Cost bases)
EXSR – SR12 (Get Pricing policy for Customer)
ENDSR – 01
BEGSR – 02
EXSR – SR08 (Retrieve Customer related fields)
EXSR – SR13 (Preparation of Base price fields)
EXSR – SR14 (Preparation of SROSPCD file)
ENDSR – 02
BEGSR – 03 (the traditional main line)
EXSR15 (Retrieve initial base price)
If base price gives FOC and Best value/prom = Yes then skip further retrieval (i.e. leave this sub-routine)
Invoke Direct pricing in case of NCC selling (if price found on NCC certificate the other pricing methods will be omitted)
EXSR – SRD05 – Directed price from NCC selling
Invoke Direct pricing in case of Promotion pricing (if price found selected Promotion the other pricing methods will be omitted)
EXSR – SRD04 – Directed price from Sales pricing Method
(Sequence of calling SR20, SR50 and SR80 is taken from DIS control file, here also some other flags are important, like First price compared to best promotion and Find best value compared to best promotion)
Select pricing method (Contracts, Price list, Sales pricing method or Promotions)
When Contracts
EXSR – SR20 (Get price from Contracts)
When Price list
EXSR – SR50 (Get price from Item sales price info file)
When Sales pricing methods or Promotions
EXSR – SR80 (Get price from Sales pricing methods)
Endsl
When price still not found and the input price list differs from standard price list
Set Price list (XSPRIL) to be the Standard price list from the DIS control file (ACPRIL)
EXSR – SR50 (Get price list from Item sales price info file)
ENDSR – 03
BEGSR – 15
Calculate Base price using the price list found during the initiation.
Set XXBASE = “*YES” for base price retrieval.
EXSR – SR51 (Prepares values used to keep price found in SR52, XPRS-fields)
EXSR – SR52 (Price list)
If no price found for this price list then try again to retrieve the price using the Standard price list in DIS control file.
EXSR – SR55 (Retrieves price based on price list)
Set XXBASE = “*NO ” so that no further retrieval from price lists will update base price fields.
ENDSR – 15
Contract’s group of sub-routines
SR20 – Main subroutine
SR21 – Initiation (BCCO-fields)
SR22 – Get price from Contracts, read contract files (CCO, CCI)
SR23 – If any price found within Contracts, save it in SPCD work fields
SR24 – If found net price is better than lowest found till now, take it as actual price along with its discounts (XO-fields)
SR25 – Check Contract Item record
SR25B – Identify price type used within contract, get price and apply discounts
SR26 – Change key values used to read CCI records (handle optional values)
SR27 – Check if enough quantity on the contract
SR29 – Apply chain discounts for Contract
Contract’s price method group of sub-routines
SR30 – FOC used within contract
SR31 – Price used
SR32 – Price list used
SR33 – Cost base used
SR34 – Base price used (no price set-up for contract item)
Contract’s discount method group of sub-routines
SR35 – Discount percentage used
SR36 – Discount amount used
SR37 – Limit code used (CTLQD)
SR38 – Limit dependent pricing (prices or discounts) used (DIQ/DIQF)
Contract’s VAT and Retail price sub-routines
SR39 – VAT and Retail price
Contract’s auxiliary sub-routines
SR41 – Better price found within contracts (looking for best price within them)
Logic of some main contract’s sub-routines
BEGSR – 20
EXSR – SR21 (Initiate best contract fields, BCCOxx)
EXSR – SR22 (Read all contracts, look for best price)
EXSR – SR23 (If any price found save it in SPCD file)
EXSR – SR24 (If found price is better than lowest till now take it)
FOC (If found price is FOC take it)
ENDSR – 20
BEGSR – 22
Read every CCO record
Check dates on the header
Read CCI record
For every CCI record
EXSR – SR25 (Handle detail record)
Change key values to read next CCI record (EXSR – SR26)
Read next CCO record
ENDSR – 22
BEGSR – 25
Check dates on the detail record
Check if enough quantity on the contract item record (EXSR SR27)
Identify price type used within contract, get price and apply discounts if applicable (EXSR SR25B)
Apply chain discounts for Contract (SR29)
Check if negative price (update NGPR = “Y”)
If better price found within contracts
Take the price as best contract price (SR41)
Save VAT and retail price (SR39)
FOC, check work field (SR30)
ENDSR – 25
BEGSR – 25B
FOC, update work field
Determine the price unit
Select price method used
Price – (EXSR – SR31)
Price list – (EXSR – SR32)
Cost base – (EXSR – SR33)
Base price – (EXSR – SR34)
Select discount method used
Discount percentage – (EXSR – SR35)
Discount amount – (EXSR – SR36)
Limit code – (EXSR – SR37)
Limit dep pricing – (EXSR – SR38)
ENDSR – 25B
Price list’s group of sub-routines
SR50 – Main subroutine
SR51 – Initiation (XPRS-fields)
SR52 – Get price from Price Info file depending on the input price list (XIPRIL)
SR53 – If any price found within Price Info file, save it in SPCD file
SR54 – If found price is better than lowest found till now, take it as actual price along with its discounts (XO-fields)
SR55 – Get price from Price Info file depending on the PRIL from sub-routine’s input
SR56 – Get PRS record, different Units and Currencies
SR57 – Get price from PRS record
SR59 – Apply chain discounts for Price list
SR62 – Retrieve standard price list value
Price list’s price method group of sub-routines
SR60 – FOC used within price list
SR61 – Price used
SR63 – Cost base used
Price list’s discount method group of sub-routines
SR67 – Quantity limit code used (CTLQD)
SR68 – Quantity dependent price used (only prices, PRQ)
Price list’s VAT sub-routine
Price list’s auxiliary sub-routines
SR71 – Save base price
SR72 – Save some values for SPCD record
SR79 – Read and check SROPRS data for different combinations
Logic of some main price list’s sub-routines
BEGSR – 50
Only if Base price is found for this price list (in that case we will use the values from the base price retrieval)
Apply chain discounts for Price list (SR59)
Check if negative price (update NGPR = “Y”)
EXSR – SR53 (If any price found save it in SPCD work fields)
EXSR – SR54 (If found price is better than lowest till now take it)
ENDSR – 50
BEGSR – 55 (called from SR15, 32, 52, 62, 92)
Get PRS record (SR56, see Note below)
If PRS record found search for price (SR57)
If any price found save VAT (SR69)
and retail values
If base price is going to be saved (XXBASE = “*YES”) then EXSR SR71
and SR72 (for SPCD record)
ENDSR – 55
Note: Within SR56
We are looking for PRS record (using SR79) in following sequence:
1) Unit from entry XIUNIT, Currency from entry XICURR;
2) Unit from entry XIUNIT, System currency LDSCUR;
3) Default Unit for Item, Currency from entry XICURR;
4) Default Unit for Item, System currency LDSCUR.
BEGSR – 57
FOC, update work field
Select pricing method used
Price – (EXSR – SR61)
Cost base – (EXSR – SR63)
Select discount (or qty dep price) used
Qty limit code – (EXSR – SR67)
Qty dependent price – (EXSR – SR68)
ENDSR – 57 (58)
Sales pricing methods’ group of sub-routines
SR80 – Main subroutine
SR81 – Initiation (BDIH-fields)
SR82 – Driver for Sales pricing methods
SR83 – Read header records (DIH) based on the type (DIMT)
SR84 – Read detail records (DID)
SR84A – Validate found record
SR84B – Process found and valid detail record
SR85 – If price found within Sales pricing methods, save it in SPCD work fields
SR86 – If found net price is better than lowest found till now, take it as actual price along with its discounts (XO-fields)
SR87 – Apply chain discounts for Sales pricing methods (N or P)
SR88 – Select price and discount defined within DID record
SR89 – Save price retrieved from method record
Sales pricing methods’ pricing method group of sub-routines
SR90 – FOC used within discount method
SR91 – Price used
SR92 – Price list used
SR93 – Cost base used
SR94 – Base price used (no price set-up in method detail)
Sales pricing methods’ discount method group of sub-routines
SR95 – Discount percentage used
SR96 – Discount amount used
SR97 – Limit code used (CTLQD)
SR98 – Limit dependent pricing (prices or discounts) used (DIQ/DIQF)
Sales pricing methods’ VAT and Retail price sub-routines
SR99 – VAT
SRA0 – Retail price
Sales pricing methods’ auxiliary sub-routines
SRA1 – Moves work values (XDIHxx) into best method fields (BDIHxx)
SRA2 – Moves present method values (DDxxxx) into best method fields (BDIHxx)
SRA3 – Clears second best method fields (DDIHxx)
SRA4 – Save work values (XDIHxx) as second best method fields (DDIHxx)
SRA5 – Move best method fields (BDIHxx) into second best method fields (DDIHxx)
SRA6 – Move backwards, from DDIHxx into BDIHxx
SRA10 – Save best method fields, from BDIHxx into SDIHxx
SRA11 – Restore best disc values, from SDIHxx into BDIHxx
Sales pricing methods’ VAT and Retail price sub-routines (second best price DDIHxx)
SRA7 – VAT
SRA8 – Retail price
SRA9 – Save some values for SPCD record
Sales pricing methods’ other auxiliary sub-routines
SRB0 – Fills values of the method keys used in the DIH record
SRB1 – Change method key values for wildcard depending on permutation to use
SRB2 – Initialise work fields chain discount retrieval
SRB3 – Retrieve next buying group in sequence
SRB4 – Get price/discount from the higher level
SRB5 – Checking customer structure related fields, if used in DIH (key 31)
SRB6 – Set 3-level pricing work fields (X3LVLxx)
SRB7 – Save DID data for 3-level pricing (DID -> X3LVLxx)
SRB8 – Re-read the original DID record for 3-level pricing (keys saved under X3LVLxx)
SRB9 – Overwrite DID data with information from the higher level, 3-level pricing
SRB10 – Restore some variables used in SR84 , 3-level pricing
SRB11 – Reads detail records from method files, 3-level pricing
Logic of some main sales pricing methods’ sub-routines
BEGSR – 80
If method called for Promotions set XSDIMT = “P”
else XSDIMT = “N”
Prepare parameters used in Sales pricing methods (SR81, BDIHxx, DDIHxx)
Get price from Sales pricing methods (SR82)
Save price found in method as calculation record SPCD (SR85)
If price found is better than best till now take it (SR86)
FOC (If found price is FOC take it, SR86)
ENDSR – 80
BEGSR – 82
EXSR SR83 (Normal or Promotion records)
If Chain discounts are allowed to be added to Normal method
If chain discount shall be retrieved for the second best values
EXSR SRA10 (Save best values)
EXSR SRA6 (Replace best values with second best values)
Endif
If chain discounts has not been retrieved yet
EXSR SR83 (Retrieve chain records)
Else
EXSR SR87 (Re-apply found chain discounts for Normal Sales pricing methods)
Endif
Check if old best values shall be restored
EXSR SRA11 (Restore best values)
ENDSR – 82
BEGSR – 83
If chain retrieval prepare parameters (SRB2)
For every SRBDIH record (either Normal or Promotion, or Chain) DO
Check dates on the header (SRBDIH) record
Check method against Structure pricing (SRB5)
Check if exceptions exist (SRC12)
Note: when price for Customer is considered, do not use methods with discount key 31 (Customer structure key) used, for Pricing Parent do not use methods with discount key 1 (Customer key) used
Get detail records (SRBDID) by executing SR84
If Stop search (see SR84) or FOC then leave
ENDSR – 83
BEGSR – 84
Prepare key values (SRB0, KKDMKx, x = 1,2,x=1,2…,5)
Get SRBDID records on these three levels:
1) -> Buying group
2) -> Wildcard options (for the keys Currency and Unit)
3) -> Short term pricing (if activated in DIS contr file)
Check dates and qualifying quantity on the detail (SRBDID) record (SR84A)
Process found and valid detail record (SR84B)
Consider Stop Search indicator
Note: We stop search for price if we succeeded to find any price within DIH records and we have stop search on the header record DIH or Find best price is set to No
Change key values and get next SRBDID record at the present level
ENDSR – 84
BEGSR – 84B
Get price from DID record (SR88)
Save price found within DID record (SR89)
ENDSR – 84B
BEGSR – 88
In case there is no pricing/discount details get details from the higher level (SRB4)
FOC, update work field
Select price method used
Price – (EXSR – SR91)
Price list – (EXSR – SR92)
Cost base – (EXSR – SR93)
Base price – (EXSR – SR94)
Select discount method used
Discount percentage – (EXSR – SR95)
Discount amount – (EXSR – SR96)
Limit code – (EXSR – SR97)
Limit dep pricing – (EXSR – SR98)
ENDSR – 88
General group of sub-routines
SRC0 – Calculate price in system currency
SRC1 – Limit code (CTLQD) used, get discount % or FOC items
SRC2 – Calculate net value (extract VAT included)
SRC3 – Cost based methods
SRC4 – Calculate price from cost base
SRC5 – Selection of cost base
SRC6 – Calculate discount amount and net value (from price and disc % to subtract)
SRC7 – Apply price adjustment from the currency table
SRC8 – Limit dependent pricing (DIQ) used, get price or discount
SRC9 – Save history data for GDT-record
SRC10 – Copy SRODIQ records to a different key
SRC11 – Calculate retail price
SRC12 – Call “Check for existing exception” program (DIR484)
SRC13 – Creation of SPCD-record and history file records
SRC14 – Creation of GDT- and GDTF-records
SRD1 – FOC item retrieval in SRODIQF
SRD2 – Validate read SRBDIH record
SRD3 – Prepare parameters used to find a price within Pricing methods
SRD4 – Compute FOC quantity
Directed pricing group of sub-routines
SRD00 – Main subroutine
SRD01 – Directed price from Customer contract item
SRD02 – Directed price from Sales price list item
SRD03 – Directed price from Sales pricing method detail
SRD04 – Directed price from Sales pricing method
SRD05 – Directed price from NCC selling
Logic of main Directed pricing sub-routine
BEGSR – D00
EXSR – SR07 (Retrieve Item related values)
EXSR – SR08 (Retrieve Customer related values)
EXSR – SR10 (Retrieve some other fields used in calculation)
EXSR – SR11 (Retrieve Cost bases)
Retrieve directed price from:
Customer contract item – (EXSR – SRD01)
Sales price list item – (EXSR – SRD02)
Sales pricing method detail – (EXSR – SRD03)
ENDSR – D00
Glossary of terms used in sales pricing
Basket |
A collection of item related elements, (e.g., item, item group, item family), that together form an entity upon which order summary pricing methods (O and H method types) can be applied.
|
Chain discounts |
Discounts that are applied on top of any discounts that may have been generated by normal sales pricing methods, or price lists, or contracts. |
Header discounts |
Discounts, held in the form of a percentage, that are connected to the order header and are held at header level. They are also visible on line level for each line where order summary discounts are allowed and that contributed to the total upon which the discount was based. |
Line discounts |
Discounts, either in the form of a percentage, or an amount per sales unit, that are connected to the line and are held at line level. |
Margin |
The profit when expressed as a fraction, or percentage, of the sales price is known as the margin and may simply be shown as: Margin = Profit/Sales Price |
Mark-up |
The profit when expressed as a fraction, or percentage, of the cost price is known as the mark-up and may simply be shown as: Mark-up = Profit/Cost price |
Net amount |
The Net price multiplied by the quantity. |
Net line amount |
The Net line price multiplied by the quantity. |
Net line price |
The non-discounted price (gross sales price minus any included VAT) minus all Line discounts. The net line price does NOT include deduction of Header discounts. |
Net price |
The undiscounted price minus ALL discounts, i.e. both Line and Header discounts. |
Price list |
Contains the price for one or several items. |
Profit |
The Net price minus the cost value. |
Short term pricing |
The ability to use the “from” and “to” dates as keys in sales pricing methods in order to limit the time span that the methods are effective. Typically used to modify an existing method for a short time without making extensive changes to the method definition itself. |
Stop search |
A YES/NO field held against a sales pricing method to indicate to the sales price calculation and order summary calculation programs that if the field is set to YES the program is to stop searching through any more methods once a method has been selected that yields a price or discount. |