Displaying Transaction Fields on NetSuite Customer Statements with Advanced PDF Templates

by | Sep 12, 2025 | Administration, Tech Talk

Customizing customer statements in NetSuite often requires including transaction-level data, such as invoice fields, payment details, and aging information, that is not available on the customer record by default. When working with NetSuite Advanced PDF/HTML templates, the data must exist on the customer record or be directly accessible through supported sourcing methods. However, when a field resides only on invoice transactions, such as due dates, custom fields, or line-item details, additional configuration steps are needed to surface that data on customer statements.

Option 1: Direct Advanced PDF Template Customization with Related Records

The first approach is to attempt direct customization of the Advanced PDF/HTML template. Certain related record fields can sometimes be accessed through supported joins, which allows limited transaction-level information to be displayed on the statement. For more information about customizing Advanced PDF/HTML Templates: How to Master PDF Template Fundamentals with Confidence Part 1

Screenshot 2025 09 11 At 5.05.15 PM

Limitation: This method only works if NetSuite natively exposes the required transaction field to the statement’s data source. Many custom fields created on transactions are not available through these joins. This limitation prevents the field from being included in the statement without additional steps. Performance can also be impacted when attempting to handle large volumes of related data directly in the template.

Option 2: Using SuiteScript to Populate a Customer-Level Field from Transactions

When direct template customization does not expose the required field, a more robust solution involves consolidating transaction data into a custom field on the customer record. This ensures that the data can always be sourced reliably in the Advanced PDF/HTML template.

Steps:

  1. Create a custom customer field to hold the aggregated transaction data.
  1. Use a Map/Reduce script to search invoices, collect the custom field values, and combine them into a single formatted string.
  1. Update the customer record with the combined values.
Svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==
  1. Add the new field to the Advanced PDF/HTML template with a FreeMarker reference.
Svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==

This simplified logic shows the flow without unnecessary technical detail. The script gathers invoice field values, aggregates them by customer, and stores the results in a customer field for use on statements.

Conclusion

When transaction-specific data must appear on customer statements in NetSuite, the first step is often to attempt direct sourcing through Advanced PDF/HTML templates. However, many transaction fields, especially custom fields on invoices, payments, and credits, cannot be accessed this way. The more reliable solution is to use a NetSuite Map/Reduce script to aggregate the required transaction data into a custom customer field, ensuring it is always available for display on NetSuite customer statements and fully optimized for customized statement templates.

About Us

We areNetSuite Solutions Providerswith 30+ years of combined experience. We specialize in implementation, optimization, integration, rapid project recovery & rescues, and custom development to meet any business need. Although every business is unique, serving over 40 NetSuite clients during the last 6 years, our NetSuite Consulting team has most likely seen your challenge and created similar solutions. For more information on NetSuite solutions or questions about your project contact usHere.