In Dynamics 365 quotes, each quote moves through four states. It starts as Draft, where anyone with access can edit it; becomes Active when you select Activate Quote, which makes it read-only so your copy matches the customer's; and ends either Won, when you select Create Order, or Closed, as Lost, Canceled or Revised. That's the whole Dynamics 365 quote process, and most of the trouble teams have with quoting comes from not knowing which of those four a record is in, or from setting up the product catalog after the first salesperson has already started typing prices in by hand.
The steps follow the order you'd configure them in, with the setting names as they appear in the app today. If you learned Dynamics a few years ago, three things have moved. Create PDF is now Export to PDF on the web, document templates live in the Power Platform admin center, and kits are deprecated in favour of bundles.
The states, and what each one lets you do
| State | Status reasons | What you can do |
|---|---|---|
| Draft (0) | In Progress | Edit anything: products, discounts, dates, addresses |
| Active (1) | In Progress, Open | Send it, export it, close it, create an order. No edits |
| Won (2) | Won | Nothing. The order now carries the deal |
| Closed (3) | Lost, Canceled, Revised | Read it. It stays as history |
The quote table reference puts it in one line: "Only draft quotes can be edited."
There's no Revise button in the current interface, which confuses people who learned the older one. To change an active quote you select Close Quote, set the status reason to Revised, and leave Create a revised quote on Yes. Dynamics closes the old record and opens a new draft with the revision ID one higher. The close quote documentation covers the dialog, and an administrator can change the default or add one-click close buttons through ribbon customisation.
That detail corrects something the first version of this post got wrong. We wrote that Dynamics only keeps the latest version of a quote. It doesn't. Every revision you close as Revised stays in the system as a closed quote, so the history of what the customer was offered, and when, is already there. What Dynamics doesn't keep is every intermediate save of a draft, and that's the gap a document library fills.
Build the product catalog before the first quote
A salesperson who can't find a product will type one in. Dynamics allows that through write-in products, whose price is always entered by hand, and a catalog that's half built fills up with them. Every write-in is a line your reports can't group by product family, and a price nobody approved.
Microsoft's product catalog walkthrough gives the setup order, and it matters because each step looks up the one before:
- Discount lists, if you give volume discounts.
- Unit groups and units (each, case of 12, pallet).
- Products, then families and bundles. Families only exist in the Sales Hub app.
- Price lists.
- Price list items, one per product, unit and price list.
- A default price list for each territory, if you use territories.
Then open App Settings > Product Catalog > Product Catalog Settings. The settings page has the switches that decide how strict quoting is:
- Make price list optional. Off by default, so a quote needs a price list before products can be added. Leave it off unless you sell almost entirely custom work.
- System pricing calculation. On means Dynamics calculates line totals, discounts and tax. If your pricing is too complex for price lists (tiered contracts, cost-plus, freight by weight), turn it off and register a plug-in on the
CalculatePricemessage, as described in use custom pricing for products. - Discount calculation method. Line item or per unit. Decide this before anyone sends a quote, because it changes the totals.
- Max number of products in a bundle, 15 by default.
Turning off system pricing calculation is the line between configuring Dynamics and writing software for it. Price lists cover most distributors. When a quote depends on options that rule each other out, such as a machine configured from a few hundred parts, a plug-in or a dedicated configure-price-quote tool is the answer, and it's better to know that before the catalog is half loaded.
Creating the quote
Most quotes start from an opportunity. In Sales Hub, open the opportunity, go to the Quotes tab and create a new one; the customer, currency and price list come across, and Get Products pulls in the opportunity's product lines. Add more with Add Product, set quantities and discounts, set Effective To so the quote expires, and save.
When it's right, select Activate Quote. From then on the quote is the thing you sent, and changing it means a revision.
Templates and the PDF the customer sees
The customer never sees the form. They see a document, and there are two ways to produce it.
Export to PDF is on the quote's command bar. It renders a Word template and lets you download the file, email it, or save it to SharePoint or to Dynamics. An administrator turns it on under App Settings > Productivity tools > Convert to PDF, which supports accounts, contacts, leads, opportunities, quotes, orders and invoices (enable PDF generation).
Word templates are where your branding lives. From the quote, Word Templates > Download Template gives you a .docx with the quote's fields mapped as content controls; you lay out the document in Word and upload it back. The Word template documentation lists the limits worth knowing before you design anything elaborate:
- A repeating table of related records stops at 100 rows, so a 140-line quote prints 100 lines.
- Only plain text and picture content controls work.
- Templates can't be moved between environments; you rebuild them in production.
- Fonts are limited to what's installed on Microsoft's servers, and templates perform best under 2 MB (quote PDF documentation).
The 100-row limit and the environment limit are the two that bite. A distributor quoting long parts lists will hit the first. Anyone who designs a template in a sandbox and expects to promote it with a solution will hit the second.
Approvals are something you build
Dynamics 365 Sales has no approval step for quotes. Nothing stops a salesperson with write access from activating a quote at a 40% discount, and none of the Sales documentation describes a built-in way to stop it.
The usual way to add one is a Power Automate flow on the Dataverse trigger When a row is added, modified or deleted, filtered to the quote table, followed by Start and wait for an approval. Microsoft documents both: the Dataverse trigger and the approval action, which supports first-to-respond, everyone-must-approve and sequential approvals.
A pattern that holds up:
- Add a choice column to the quote, Approval Status, with Not Required, Pending, Approved and Rejected.
- Trigger the flow on modify, with Select columns set to the discount and total columns, so it doesn't run on every save. Lookup columns can't be used in that filter.
- If the discount crosses your threshold, set Approval Status to Pending and start the approval, routed to the sales manager.
- Write the outcome and the approver's comment back to the quote.
The part people skip is the block. The flow records an approval, but it doesn't stop anyone pressing Activate Quote. To make the approval binding, hide the activate command while Approval Status isn't Approved or Not Required (a ribbon rule), or reject the state change in a small plug-in. Without that, the approval is a notification.
From quote to order to invoice
Select Create Order on an active quote. Dynamics copies the products, the price list and the currency to a new order and closes the quote as Won. After that the quote can't be revised (create or edit an order).
Two settings decide what happens next:
- Lock Pricing on the order. Locked, the order keeps the prices from the quote even if the price list changes. Left as Use Current Pricing, it recalculates from the current price list. If you raise prices on the first of the month, this decides whether last month's quotes are honoured.
- Enable automatic quote to order generation, which Sales Professional needs before Create Order appears at all (enable orders from quotes).
From the order, Create Invoice makes the invoice. If the order is going to an ERP rather than being invoiced in Dynamics, the integration replaces that step.
Developers who need to do any of this from code will find WinQuote, CloseQuote, ReviseQuote and ConvertQuoteToSalesOrder as messages on the quote table, along with GenerateQuoteFromOpportunity. A Web API query for active quotes past their expiry, which is a useful weekly list for a sales manager:
GET [org-url]/api/data/v9.2/quotes?$select=name,quotenumber,revisionnumber,totalamount,effectiveto
&$filter=statecode eq 1 and effectiveto lt 2026-10-11
&$orderby=effectiveto asc
If the ERP is Business Central
Business Central has its own Sales Quotes page with Make Order and Make Invoice, and converting a quote there removes the quote and carries its number into the order's Quote No. field (Business Central sales quotes).
When Dynamics 365 Sales and Business Central are connected, quotes travel one way. A quote activated in Sales is sent to Business Central automatically if Automatically Process Sales Quotes is on, or by hand with Process in Business Central. Earlier revisions are archived, and a won quote only becomes a Business Central order once the matching Sales order is submitted (integrating with Dynamics 365 Sales). Decide which system owns the quote before you switch this on, because two teams editing quotes in two places is how prices drift.
That handoff is the point of the whole exercise. On AmTab's project, orders placed on the website reach Business Central without anyone re-keying them, and the sales team turns a quote into an order in the system that invoices it.
Storing quote documents in SharePoint
The quote record lives in Dataverse. The documents around it, the exported PDF, the customer's signed copy, the drawings, are better kept in SharePoint, and Dynamics has native support for it.
Turn on server-based SharePoint integration, then in the Power Platform admin center go to Settings > Integration > Document management settings and select the Quote table (enable SharePoint document management). The SharePoint site has to be in the same tenant. Once it's on, Export to PDF saves to SharePoint by default, and each quote gets a Documents tab showing its folder.
What you get from SharePoint is what SharePoint does anyway. Version history on the library, retention labels if compliance needs them, and access for people who don't hold a Dynamics licence, which is often the real reason. A finance reviewer or a project engineer can read the quote document without a seat.
What you don't get out of the box is a document generated automatically every time a quote is saved, named by revision. That takes a flow or a plug-in that renders the Word template and writes the file, and it's one of the more common small builds around Dynamics quoting. Before building it, check whether Export to PDF at activation, plus Dynamics' own closed revisions, already gives you the history you need. It often does.
Where to start
If quoting is slow today, the cause is usually one of three things, in this order of likelihood. The catalog is incomplete, so people write in products and prices. Nobody can see which quotes are active and about to expire. Or approvals happen in email, so a quote waits on a reply nobody is tracking.
The first is a data job, not a software one. The second is a saved view or the query above. The third is the approval flow, plus the rule that makes it binding.
TechFabric implements Dynamics 365 CRM and Business Central for manufacturing, supply chain, finance and warehouse teams, including the quote-to-order connection between them.