1. Home
  2. /
  3. References
  4. /
  5. Technical References
  6. /
  7. Understanding sales pricing

Understanding sales pricing

What this document contains:

Pricing overview

There are three ways to hold sales prices, discounts and FOC in DC1:

  1. Customer Contracts
  2. Sales Price Lists
  3. Sales Pricing Methods
  4. 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. Note: Customer contracts will be searched for both the customer and for the debtor of the customer.

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:

  1. 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).
  2. Using the standard price list defined in the pricing policies in DIS control file.
  3. 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:

  • Sales price and discounts calculation – This routine retrieves the price and discounts for a single line. First a base price is retrieved. Then in the case of NCC selling a check will be made if a price can be found on the NCC certification (if that is the case that price will be used and search in the normal main pricing sources will be omitted). Then the sales price is retrieved from the main pricing sources Contracts, Price lists, Normal methods or Promotional methods (the base price is used if a Contract or a Method is encountered that only holds discounts). Any discounts set up for the same main source is then applied. Lastly, chain discounts are applied if that is applicable for the main source (controlled with a flag on the main source).

    The outcome of this pricing of the line will control if the line will get any order summary discounts (O- and H-type method). If either the main pricing source or any of the applied chain discounts is flagged with Order summary discounts set to NO then no order summary discounts will later be added to this line.

  • Calculate order summary discount – This routine calculates and applies discounts based upon the summary of the whole order. This is performed at order close or when requested by the user. It will first apply Order line summary discount (O-type methods) at order line level. It will then apply Header discounts (H-type methods) that are stored at order header level with the apportioned amount that can also be seen at line level.

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:

  1. 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).
  2. 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:

  1. 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).
  2. 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 for the following two additional scenarios:

  1. when checking against amount limits if no price has been encountered at that point
  2. if no retail price is defined on the pricing source from where the sales prices is retrieved.

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:

  1. Parent
  2. Customer
  3. 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:

  1. 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.
  2. 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:
  3. 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        
  4. 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
  5. 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.
  6. 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).

  1. Order pricing key related values: Order type, Warehouse, Terms of payment, Terms of delivery, Manner of transport, Agreement type, Warranty type, Project are retrieved.
  2. 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.
  3. 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.
  4. Identify potential “O” type pricing methods for which the line would qualify as follows:
  5. 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.
  6. 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:

  • Current dependent FOC item lines remain the same (e.g. if set-up and reached limits are still the same)
  • Removes the current dependent FOC item lines (e.g., if limit is no longer met)
  • Adjust the quantity of current dependent FOC item lines or add new current dependent FOC item lines (e.g., if set-up has been changed giving more items FOC for the same limit)

    Note: Re-price of a base line is not allowed if any of the current dependent FOC item lines connected to the base line are pick confirmed.

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:

  1. Either by using a pre-defined set of limits, along with their discounts, held against a user-defined limit code
  2. Or by defining the limits, prices, or discounts, uniquely against an item in a price list, customer contract, or sales pricing method.
  3. 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

SR69 – VAT

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.