Revenue Recognition and Expense Amortization

Revenue Recognition in NetSuite Revenue Recognition lets you spread revenue over time instead of recording it all when you invoice. This is required for subscriptions, support contracts, bundled services, or anything delivered over months/years. Key NetSuite Features Feature Purpose Revenue Arrangements Automatically created from sales orders/invoices with deferrable items Revenue Recognition Plans Schedule that says… Continue reading Revenue Recognition and Expense Amortization

Strict GS1-128 compliance barcode in Advance PDF Template

In the NetSuite advanced PDF template, barcode type GS1-128 is not supported in the <barcode> tag. However, we can usually achieve it by setting the codetype “code128” and setting the value according to the GS1-128 format. But if the GS1-128 barcode we need to create needs a Group separator, we wouldn’t be able to create… Continue reading Strict GS1-128 compliance barcode in Advance PDF Template

Barcodes in Advanced PDF Templates

In the Advanced Template Editor, edit the HTML markup source and use the BFO tag <barcode /> to create a custom bar code. To add a custom bar code to an advanced template: Open the advanced template in the template editor and click the Source Code toggle. Scroll down to the portion of the HTML markup source… Continue reading Barcodes in Advanced PDF Templates

SOAP Webservice Request-Level Preferences

Some SOAP web services preferences can be set at the request level. Request-level preferences override company-wide settings. In this way, the user sending the SOAP request can control these preferences externally and override the company-level SOAP preferences. The available preferences are: disableMandatoryCustomFieldValidation disableSystemNotesForCustomFields ignoreReadOnlyFields runServerSuiteScriptAndWorkflowTriggers warningAsError bodyFieldsOnly pageSize returnSearchColumns disableMandatoryCustomFieldValidation This preference impacts mandatory custom… Continue reading SOAP Webservice Request-Level Preferences

Issue Management

The Issue Management feature lets you set up NetSuite to document and manage issues that occur with the products you manufacture and sell. Customer support reps and quality assurance employees primarily enter issues. However, you can control which roles have access to issues and what settings those roles have access to. Before employees can start… Continue reading Issue Management

Suitescript is not triggering when the record is created or updated through SOAP Webservice

There are several possible reasons why a SuiteScript may not trigger when a record is created or updated in NetSuite through a SOAP request. To ensure that the script runs properly in the SOAP web service context, verify the following points: The script is in Released status and configured to Execute as Administrator. The script… Continue reading Suitescript is not triggering when the record is created or updated through SOAP Webservice

Effective Expense Report Approval Routing: Best Practices for Streamlined Processes

Expense report approval routing is crucial for organizations to efficiently manage employee expenses while ensuring compliance and financial accuracy. Key steps in the process include clear policy guidelines, automated approval workflows, and integration with accounting systems to ensure timely reimbursements and accurate records. Best practices include mobile accessibility, multi-department involvement, and transparent approval status tracking.… Continue reading Effective Expense Report Approval Routing: Best Practices for Streamlined Processes

Swizzling work on the returned value of overloaded function

It always resolves the node type to that of the first function provided to overloadingFn. const f = overloadingFn([ // Swapping the functions produces different results. Fn(([x]) => x.mul(2)).setLayout({ name: ‘f_float’, type: ‘float’, inputs: [{ name: ‘x’, type: ‘float’ }] }), Fn(([x]) => x.mul(2)).setLayout({ name: ‘f_vec3’, type: ‘vec3’, inputs: [{ name: ‘x’, type: ‘vec3’ }] })… Continue reading Swizzling work on the returned value of overloaded function

Swizzling work on the returned value of overloaded function

Swizzling a node returned from an overloaded TSL function doesn’t work correctly. It always resolves the node type to that of the first function provided to overloadingFn. const f = overloadingFn([ // Swapping the functions produces different results. Fn(([x]) => x.mul(2)).setLayout({ name: ‘f_float’, type: ‘float’, inputs: [{ name: ‘x’, type: ‘float’ }] }), Fn(([x]) => x.mul(2)).setLayout({… Continue reading Swizzling work on the returned value of overloaded function