All document types
Dynamics 365 Salesquotequotedetail

Generate a quote from Dynamics 365 Sales

A quote in Dynamics 365 Sales already has everything the customer needs to see: the products, quantities, unit prices, discounts, tax and total. What it does not have is a document you would send. The built-in Word template can fill the header fields, but it cannot hide the discount line when the discount is zero, and it cannot be triggered from a flow.

VerseDocs generates the quote as a Word file or a PDF from a button on the quote form, or from Power Automate when the quote is activated. The template is an ordinary .docx with double-brace tokens; the quote products arrive as an array the template loops over. Rendering happens inside your Dataverse environment, so the customer's pricing never leaves your tenant.

Unlimited watermarked use, no time limit. $2,400 a year per tenant removes the watermark.

How it works

From record to quote in 4 steps

01

Download the quote template

It is bound to the quote table and pulls quote products through a link-entity aliased as lines. Replace the company block with yours and drop in a logo.

02

Load it in Template Studio

New Template, bound table quote, upload the file, paste the manifest in Settings and the sample data in Sample Data. Click Generate to preview against the sample.

03

Generate from the quote

Open the record, click Generate document, choose the template and Word or PDF. The file attaches to the record's timeline without a flow.

04

Automate it when you are ready

In Power Automate, on Quote status change to Active, call vdocs_GenerateAndAttach with the template id and the quote id, or vdocs_TemplateFromRow to get the bytes back and email them.

The template

Start from the quote starter

The starter quote covers header, bill-to, line items, totals and terms. Swap the totals to your own money fields if you have customised the quote table, and add {{quote.freighttermscode}} or any other column by its logical name.

  • Header with quote number, generation date and valid-until date
  • Bill-to address that drops the second line when it is empty
  • Line items from the quote's products: name or write-in description, quantity, unit price, discount, amount
  • Subtotal, conditional discount, tax, conditional freight, total from the quote record's own money fields
  • Notes paragraph that disappears when the quote has no description

Tokens in the template

Quote {{quote.quotenumber}} · valid until {{quote._raw.effectiveto:d MMMM yyyy}}

{{#each quote.lines}}{{productid}}{{productdescription}} | {{_raw.quantity:0.##}} | {{priceperunit}} | {{extendedamount}}{{/each}}

{{#if quote._raw.totaldiscountamount}}Discount -{{quote.totaldiscountamount}}{{/if}}
Total {{quote.totalamount}}

Paste any of this into the template playground with the sample data to see it render in your browser.

Questions
Does the quote's product list repeat automatically?
Yes. The binding manifest links quotedetail to the quote as an array called lines, and the template puts {{#each quote.lines}} in the first cell of a table row and {{/each}} in the last. That row is repeated once per product, with formatting intact.
Can it produce a PDF rather than a Word file?
Yes. Choose PDF in the Generate document dialog, or set outputFormat to pdf in the action's Options. The conversion runs inside the Dataverse sandbox as well.
What about write-in products?
A write-in line has a productdescription and no productid; a catalogue line is the reverse. The template prints both tokens side by side, and the empty one renders as nothing.

Rendered in your tenant. Priced per tenant.

VerseDocs is a managed solution of Dataverse plug-ins. Templates, field values and generated files stay in your environment. Try every feature free with a watermark; one licence key removes it for every environment, user and document in the tenant.