Starting the Quote Process with Opportunity Products - Possibilities and Limitations
Introduction
Not only do you have the ability to copy products from the quote back to the Opportunity, thus synchronizing opportunity products and opportunity amount with the quote, but conversely you can also start the quoting process starting from the opportunity products.
Add products to Opportunity
The related list "Products" in Opportunity also includes the action "Add products". The search mask for opportunity products opens, where you can select the desired price book entries.
You can make the product search even more user-friendly at this point via quick filters.
To do this, please store the desired custom fields in the Search Layout of the object Price Book Entry, which can help the user to better narrow down their search.
Another way to speed up the product selection is to set the default quantity 1 in the Opportunity Settings.
This eliminates the need for manual quantity entry in the product search:
After adding the desired products to Opportunity, you can open a new quote by selecting a quote template and apply the existing products by clicking the corresponding button.
Recommendations for very large price books
When starting the quote editor, all active price book entries are loaded from the Opportunity Price Book, of course filtered by currency and locale if applicable. In case of very large price books (> 5000 entries) this may affect performance due to long loading times.
For price books with several thousand active entries, loading the editor can be hindered by a cache overload. In this case, create a setup text, type parameter, named skipPricebookEntryCacheOnLoad and write the value true in the text area.
From approx. 50,000 products, the loading of the editor is aborted by Salesforce due to too much data.
If the price book exceeds the mark of 40-50,000 entries and it is not possible to reduce this amount, e.g. by using multiple, small price books, you can disable the product search in the editor via Settings > Interface: "Editor - enabled features for users" (elements_ui_editor_main_user
) and "Editor - enabled features for admins" (elements_ui_editor_main_admin
) and use the powerful search function for opportunity products instead.
Limits to the use of Opportunity products
In general, the calculation rules for Calculating Opportunity Products apply according to the respective settings.
In some cases, with regard to correct quote calculation, it is not straightforward to start the quoting process with Opportunity Products.
Quotes with VAT shown
VAT in the quote is calculated based on the lowest unit price of a product, the Buyprice Distributor (field sf42_quotefx__SF42_QuoLI_Buy_Price_Dist__c
in the object "Position"). This is not calculated when adding a product to Opportunity, which is why VAT and sums are also displayed incorrectly in the editor.
Alternatively to the process, you can restart the calculation of the columns by manually editing the product in the editor and get the desired values.
Use of additional quantity columns
If you have preassigned the additional quantity columns of appero quote on the product record - sf42_quotefx__SF42_VE__c
and sf42_quotefx__SF42_QuantityMultiplier__c
- a process is also required that writes these values to the fields of the same name here when creating the Opportunity product.
Multi-level Sales
If you display and calculate the columns Buy Price Partner sf42_quotefx__SF42_Buy_Price_Partner__c
and Buyprice Distributor sf42_quotefx__SF42_Buy_Price_Dist__c
and the corresponding discount columns in the quote editor within the Multi-level Sales, they do not show any value immediately after inserting the Opportunity product.
However, you can re-trigger the calculation by manually editing the product in the editor and get the desired values.
Product Properties
When transferring the products from Opportunity, product properties are displayed only if they are mandatory. Please keep this in mind when guiding the user and if necessary set properties to mandatory (sf42_quotefx__SF42_isMandatory__c
) if you do not want the user to skip them.