Purchase Vouchers Without Inventory
Published
This exercise imports Purchase Vouchers that don't have stock items — just an invoice-level amount against a Purchase Ledger. It mirrors the Sales Vouchers Without Inventory exercise, with the Supplier and Purchase Ledger taking the opposite sides of the entry.
The Excel sheet
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | INV NO. | DATE | SUPPLIER | PURCHASE LEDGER | NARRATION | AMOUNT |
| 2 | 11001 | 01/04/2026 | Vero Beach Embroidery | US-DIGITISING-RETAIL | Silk | 100 |
| 3 | 11002 | 01/04/2026 | A R S Marketing | US-ART-RETAIL | Mix | 200 |
| 4 | 11003 | 01/04/2026 | Vero Beach Embroidery | US-DIGITISING-RETAIL | Silk | 300 |
| 5 | 11004 | 01/04/2026 | V S Traders | US-DIGITISING-RETAIL | Mix | 400 |
| 6 | 11005 | 01/04/2026 | Parimal Arts | US-ART-RETAIL | Silk | 500 |
Step 1 — Create the Ledger masters
First, we need to write tags for creating Ledger masters for the Supplier (Column C) and the Purchase Ledger (Column D) — before the voucher can be posted. udiMagic processes
MASTER tags before VOUCHER tags, so both ledgers
get created automatically in the same import if they don't already exist.
<!-- Supplier Ledger, created under Sundry Creditors -->
<MASTER TYPE="LEDGER">
<NAME.LIST>
<NAME COLUMNREFERENCE="C"/>
</NAME.LIST>
<!-- Additional Name refers to the Mailing Name field in Tally -->
<ADDITIONALNAME COLUMNREFERENCE="C"/>
<PARENT>Sundry Creditors</PARENT>
</MASTER>
<!-- Purchase Ledger, created under Purchase Accounts -->
<MASTER TYPE="LEDGER">
<NAME.LIST>
<NAME COLUMNREFERENCE="D"/>
</NAME.LIST>
<PARENT>Purchase Accounts</PARENT>
<AFFECTSSTOCK>No</AFFECTSSTOCK>
<USEFORVAT>No</USEFORVAT>
</MASTER>
Step 2 — Write the Voucher tags
The quickest way to get the exact tags Tally expects for a voucher is to
let Tally generate them for you: enter one sample Purchase Voucher manually
in Tally Prime, then export it as
Gateway of Tally >> Display >> Daybook >> Alt+E.
This produces a Daybook.xml file — open it and look inside the
<TALLYMESSAGE> tag for the voucher structure Tally actually
uses (see udiMagic XML tags for how
udiMagic's COLUMNREFERENCE attribute then maps each of those
tags back to your Excel columns).
A Purchase Voucher without inventory maps to something like this:
<VOUCHER>
<!-- A unique identifier for each record -->
<GUID FORMULA="="1d2e" & A# & "-" & B#"/>
<DATE COLUMNREFERENCE="B"/>
<EFFECTIVEDATE COLUMNREFERENCE="B"/>
<VOUCHERTYPENAME>Purchase</VOUCHERTYPENAME>
<VOUCHERNUMBER COLUMNREFERENCE="A"/>
<REFERENCE COLUMNREFERENCE="A"/>
<NARRATION COLUMNREFERENCE="E"/>
<ISINVOICE>No</ISINVOICE>
<!-- Purchase A/c is to be Debited -->
<ALLLEDGERENTRIES.LIST>
<LEDGERNAME COLUMNREFERENCE="D"/>
<ISDEEMEDPOSITIVE>Yes</ISDEEMEDPOSITIVE>
<AMOUNT FORMULA="=+Round(F#,2)*-1"/>
</ALLLEDGERENTRIES.LIST>
<!-- Supplier A/c is to be Credited -->
<ALLLEDGERENTRIES.LIST>
<LEDGERNAME COLUMNREFERENCE="C"/>
<ISDEEMEDPOSITIVE>No</ISDEEMEDPOSITIVE>
<AMOUNT FORMULA="=+Round(F#,2)*1"/>
<BILLALLOCATIONS.LIST>
<NAME COLUMNREFERENCE="A"/>
<BILLTYPE>New Ref</BILLTYPE>
<AMOUNT FORMULA="=+Round(F#,2)*1"/>
</BILLALLOCATIONS.LIST>
</ALLLEDGERENTRIES.LIST>
</VOUCHER>
- Master tags are always processed before the voucher tags — so a Supplier or Purchase Ledger that doesn't exist yet still gets created in time for the voucher that references it.
- The two
ALLLEDGERENTRIES.LISTblocks must net to zero — the debit to the Purchase Ledger and the credit to the Supplier are equal and opposite. - For a debit entry,
ISDEEMEDPOSITIVEisYesand the amount is negative. For a credit entry,ISDEEMEDPOSITIVEisNoand the amount is positive. - The
BILLALLOCATIONS.LISTon the Supplier entry records each invoice as aNew Refbill, so it shows up in the Supplier's outstanding payables.
Ready to import your Excel data into Tally?
Download udiMagic and start a 14-day free trial — no credit card required.
Download udiMagic View Pricing