Skip to main content

Snapshot Tables

Understanding how NetSuite copies master data to transactions at creation time, and why changes to master records don't update existing transactions.


The Snapshot Pattern

THE SNAPSHOT PATTERN EXPLAINED
═══════════════════════════════════════════════════════════════════════════════

MASTER RECORD TRANSACTION
(Customer, Item, BOM) (Sales Order, Work Order, Invoice)
┌─────────────────────┐ ┌─────────────────────┐
│ │ │ │
│ Address: 123 Main │ ─── COPIED AT ───▶ │ Address: 123 Main │
│ Price: $100 │ CREATION │ Price: $100 │
│ Terms: Net 30 │ │ Terms: Net 30 │
│ │ │ │
└─────────────────────┘ └─────────────────────┘
│ │
▼ ▼
┌─────────────────────┐ ┌─────────────────────┐
│ AFTER UPDATE: │ │ REMAINS UNCHANGED: │
│ │ │ │
│ Address: 999 New │ ─── NO SYNC ───X │ Address: 123 Main │
│ Price: $120 │ │ Price: $100 │
│ Terms: Net 15 │ │ Terms: Net 30 │
│ │ │ │
└─────────────────────┘ └─────────────────────┘

The transaction keeps the ORIGINAL values as a legal/audit snapshot.

Why NetSuite Does This

ReasonExplanation
Legal ComplianceInvoices must reflect the address at time of sale
Audit TrailHistorical transactions must remain unchanged for auditors
Financial AccuracyPrices and exchange rates locked at transaction date
Tax ComplianceTax calculations based on original jurisdiction

Key Concept: Reference vs Copy

BehaviorDescriptionExample
ReferencePoints to master record, updates automaticallyCustomer name on open transactions
Copy/SnapshotDuplicates data at creation, never updatesShipping address on saved transactions

What Gets Snapshotted?

CategoryMaster SourceTransaction SnapshotDocumentation
AddressesCustomer/Vendor AddressbookTransactionShippingAddress, TransactionBillingAddressAddress Tables
BOM ComponentsAssemblyItemMember, BomRevisionComponentMemberWork Order TransactionLineBOM Tables
Prices & RatesItemPrice, CurrencyRateTransactionLine.rate, Transaction.exchangerateOther Snapshots
Terms & SettingsCustomer.terms, Item defaultsTransaction.terms, Line defaultsOther Snapshots

Common Questions

"Why doesn't my invoice show the updated customer address?"

When you create a Sales Order, the customer's address is copied to the transaction. If you later update the customer's address, the Sales Order keeps the original. When you create an Invoice from that Sales Order, it inherits the SO's snapshot - not the current customer address.

→ See Address Tables for details

"Why didn't my Work Order update when I changed the BOM?"

When a Work Order is created, components from the BOM are copied to the Work Order's line items. Changes to the BOM after Work Order creation don't affect existing Work Orders.

→ See BOM Tables for details

"Why is the old price showing on my transaction?"

The item's price at the time of transaction creation is copied to the transaction line. Price changes don't retroactively update existing transactions.

→ See Other Snapshots for details


Section Overview

PageContent
Address TablesEntity addresses vs transaction addresses, query examples
BOM TablesAssembly components vs work order components
Other SnapshotsPrices, exchange rates, terms, and other snapshotted fields

Quick Tip: Identifying Snapshot Issues

If transaction data doesn't match master data, ask:

  1. When was the transaction created? - Data reflects that point in time
  2. When was the master record updated? - Changes after creation won't sync
  3. Is it referencing or copying? - Check if field is a snapshot type
-- Compare current customer address vs transaction address
SELECT
t.tranid,
t.trandate,
-- Transaction snapshot
tsa.addr1 AS transaction_address,
-- Current customer default
ea.addr1 AS current_customer_address,
CASE WHEN tsa.addr1 != ea.addr1 THEN 'DIFFERS' ELSE 'SAME' END AS status
FROM Transaction t
INNER JOIN Customer c ON c.id = t.entity
LEFT JOIN TransactionShippingAddress tsa ON tsa.nkey = t.shippingaddress
LEFT JOIN CustomerAddressbook cab ON cab.entity = c.id AND cab.defaultshipping = 'T'
LEFT JOIN EntityAddress ea ON ea.nkey = cab.addressbookaddress
WHERE t.type = 'SalesOrd'