Skip to main content

Turning Saved Search Logic Into Insight: A Lesson in NetSuite Date Math

 Sometimes it's the smallest slice of a project that demands the most ingenuity. What seemed like a simple enhancement to a Saved Search ended up stretching my understanding of NetSuite’s formula logic—and my patience.

🔍 The Objective

I needed to compare two types of project actions occurring within a 30-day window. Here’s the twist: Project Actions are a custom child record of a NetSuite Project (Job), and they’re not stored in a way that makes direct comparison easy. So, I had to retrieve them through a Project Search, pulling in individual Action records via joins—first hurdle cleared.

📅 Date Math, NetSuite Style

Next came the math. I needed to calculate whether one action happened within 30 days of another, but NetSuite doesn’t make date arithmetic feel intuitive.

My first instinct was to use TO_NUMBER() to convert the dates into values I could compute on. Spoiler: it didn’t work. So I tried a workaround—subtracting a fixed reference date (TO_DATE('01/01/2000', 'MM/DD/YYYY')) from the actual date field. That gave me a usable numeric value.

From there, I added 30 to one date-derived value and compared it to the other. This let me flag records that didn't fall within the expected time window between the scheduled end and the response date.

♻️ Matching Actions with Summary Logic

To tie it all together, I built a Summary Saved Search. I gave one action type a positive value, and the other a negative value. If their sum wasn’t zero, I knew they didn’t properly match—exactly what I needed to surface.

Here’s the anonymized formula:

CASE WHEN {joined_project.action_type.id} = 386 AND {joined_project.related_revision_action} IS NULL THEN NVL({joined_project.scheduled_end_date}, TO_DATE('01/01/1900', 'MM/DD/YYYY')) - TO_DATE('01/01/2000', 'MM/DD/YYYY') + 30 WHEN {joined_project.action_type.id} = 388 AND {joined_project.related_revision_action} IS NULL THEN -1 * (NVL({joined_project.response_date}, TO_DATE('01/01/2999', 'MM/DD/YYYY')) - TO_DATE('01/01/2000', 'MM/DD/YYYY')) ELSE 0 END


✏️ What I Learned

  • NetSuite date math demands creativity and patience.
  • Static reference dates can be a clever workaround to enable meaningful comparisons.
  • Summary logic lets you track imbalance elegantly when child records don’t align as expected.

It wasn’t the biggest task of the week—but it packed more problem-solving into a few lines of SQL than I anticipated. The takeaway: complexity isn’t in the size, it’s in the detail.  And I may learn a better way in the future, but I found A way.

Comments

Popular posts from this blog

NetSuite - Force Single Select on Multi-Select Field

Issue: We had a request from our Stakeholders to change a Multi-Select Field to a Single Select.  The Issue came up with this field being part of a bundle that we use.   We didn't want to deal with this being reverted or causing issues after we updated the bundle in the future, so I cam up with this work around. It is a Client Script that will throw an error to the user if they select more than one, and then it will reduce the selection to one option. /**  * @NApiVersion 2.x  * @NScriptType ClientScript  *  * 2025 Prevents multiple selections in a multi-select field * by showing an error message and removing the last selected value.  *  */ define ([ 'N/ui/message' , 'N/runtime' ], function ( message , runtime ) {     function fieldChanged ( context ) {         var scriptObj = runtime . getCurrentScript ();         var fieldName = scriptObj . getParameter ({       ...

PDF Issue in NetSuite after 2025.1 update

Came across a weird issue after updating to NetSuite 2025.1.  Our PDF Printing function was showing the underlying code for the PDF instead of rendering the PDF. Looked at many possible issues and discovered that it was in our header: old code had name : 'Content-Type:' , value : 'application/pdf' I removed the : and it worked as before name : 'Content-Type' , value : 'application/pdf' Found the solution on Reddit.  Posted to a StackOverflow:  pdf generation - How to Change NetSuite 2025.1 PDF Renderer Back to Previous Instead of BFO? - Stack Overflow