With SuiteGL, NetSuite customers and NetSuite Solution Provider partners can transform the general ledger from a static subsystem into a dynamic business asset that is more adaptable to specific business requirements and changing conditions that automatically carries forward with every upgrade.
Three features of SuiteGL have been announced and delivered: Custom GL Lines Plug-in, Custom Transactions and Segments.
Custom GL Lines Plug-in
The Custom GL Lines Plug-in feature can be used to create custom GL impact lines on standard transactions, such as invoices and vendor bills, across single or multiple accounting books, eliminating the need for manual journal entries. This feature can also be used to add general ledger impact to custom transaction types.
The type of logic that can be defined in an implementation of the Custom GL Lines plug-in depends on the accounting features enabled in a NetSuite instance.
The Custom GL Lines Plug-in can be used to modify the general ledger impact of standard and custom transactions. It can be used to comply with a wide range of global accounting standards by applying custom transaction logic that adds lines to the NetSuite GL Impact page.
Solution providers can create implementations of the plug-in to add GL lines to transactions. These plug-in implementations can be bundled and distributed as SuiteApps. NetSuite account administrators can install the SuiteApp and configure custom GL plug-in implementations to be applied to specific transaction types, subsidiaries, and accounting books. One World accounts can set a plug-in implementation to run for specific subsidiaries and accounts with the Multi-Book Accounting feature enabled can set a plug-in implementation to run for specific accounting books.
A solution provider can create a plug-in implementation to capture locale-specific GL impact on standard transaction types. Plug-in implementations could also add bank, credit card, and wire charges to payments, cash sales, and refunds or create unique discount or markup rules that add an amount to an invoice or bill.
The following screenshot shows the GL impact page for an invoice with custom lines created by the Tax Expense On Accruals plug-in implementation:
In the above screenshot, the Custom Script column links to the plug-in implementation that created the custom line. In addition, because the custom lines created by a plug-in implementation are linked to the original transaction, the custom lines can appear in reports and searches.
Developing a Custom GL Lines Plug-in Implementation
A Custom GL Lines plug-in implementation can be developed for each use case where general ledger entries are to be modified for transactions. A single plug-in implementation can process multiple types of transactions or separate plug-in implementations can be created for each transaction type.
The Custom Transactions feature can be used to create transaction types designed for specific business needs. This feature enhances the ability to efficiently define how each of business process affects the general ledger.
Benefits of Custom Transaction Types
The Custom Transactions feature has the following benefits:
- Custom transaction types can be named in a way that reflects your business logic, thus making them more intuitive
- Just as with standard transactions, each custom transaction type can have its own numbering scheme, permissions, and workflow logic.
- Custom transaction types can be created in multiple styles. For example, the transaction type can resemble a journal entry, or it can behave more like an expense report.
Custom Transaction Type Naming Enables Better Organization
In your business, there may be a wide variety of events that can require an adjustment to your general ledger.
You may need to record adjustments for non-operational income, such as interest income that your company receives through investments. Conversely, you may need to record debits for rewards you give customers through customer loyalty programs. Without the Custom Transactions feature, your options for recording these various adjustments may be limited. One strategy might be to record all adjustments as journal entries. However, when you rely solely on the journal entry record, all of these varying transactions are grouped together in a single list view. Moreover, when employees enter journal entries, they have limited choices for distinguishing one type of journal entry from another.
By contrast, with the Custom Transactions feature, you can create custom transaction types that are clearly labelled for specific purposes. With this approach, each custom transaction type has its own list view and its own menu path, which you can customize. For example, in the following screenshot, three custom transaction types have been added to the Accounting Center’s Financial tab.
Custom Transaction Types Support Key NetSuite Features
Custom transaction types, can leverage many of the same features that are available with standard NetSuite transaction types. For example:
- Each custom transaction type can have its own numbering, permissions, and workflows.
- Custom transaction types can include user-defined custom transaction fields.
- Multiple custom entry forms can be created for each transaction type.
- Custom transaction instances can be interacted with using SuiteScript, SuiteTalk (Web Services), SuiteAnalytics Connect and/or the CSV Import Assistant.
- Custom transaction types can be referenced when creating saved searches.
- Custom transaction types can be bundled.
- Custom transaction types can be used in conjunction with the Custom GL Lines plug-in.
Support for these features makes it possible for each transaction type to have its own unique behaviour and processing. These advantages may be critical to allow the development of a series of discrete transaction types to meet different needs.
Suppose you have a custom transaction type called Bad Debt, which you use to account for debts that are not collectible. For this type, you may want to restrict access to a limited set of users. You can manage this access by using the transaction type’s Permissions sublist.
The Custom Segments feature can be used to create custom classification fields similar to class, department, and location. An unlimited number of custom segments can be defined against each of which possible values can be defined, and segments can be added to specific record types. Segments can then be used to classify records appropriately, allowing filtering and grouping of data based on categories specific to the business.
Available listed segment values include hierarchal relationships. For example, a segment called Sales Region might have values such as Americas, APAC, and EMEA. However, more specific options can be created and can be defined as children of the broader geographic categories.
Configure a Segment to Default Statically or Dynamically
If appropriate, a segment can be configured to default to a specific value. The following options are available:
- Default to a static choice. This default is used on any record type where the segment appears, unless overridden. For example, assume a segment called Sales Region, which includes the values Americas, EMEA, and APAC. If the majority of records require a value of Americas, ‘Americas’ can be defined as the default.
- Default to a dynamic defaulting for specific categories of record types, such as transactions and entities. For example, assume a segment called Sales Region applied both to the Customer record type and to all sales transactions. The segment can be configured so that, when it occurs on a sales transaction, it defaults to the value selected on the corresponding customer record. This type of defaulting overrides static defaulting.
Filter a Segment’s Values Based on Other Segments
A segment’s available values can be limited based on choices the user made for other segments on the same record.
Suppose your organisation sells merchandise worldwide. You may have multiple sales channels, such as brick-and-mortar stores, a web store, and partner outlets. However, although you may permit customers everywhere to use your web store, other channels may be available only in certain geographic regions.
In this case, you could create two segments, Sales Region and Sales Channel. You could configure a record’s Sales Channel values to be filtered based on the selection the user makes for Sales Region. For example, you could configure a Sales Region called Denmark to permit the selection of only two Sales Channel values.
More complex filtering can also be set up. A segment’s available values can be configured to be dependent on multiple segments and on other classification fields, as described below.
Filter a Segment’s Values Based on Class, Department, Location, and Subsidiary
A segment can be set up so that its values are filtered based on choices the user made in the Class, Department, Location, and Subsidiary fields. This capability is similar to the behaviour described in Filter a Segment’s Values Based on Other Segments.
For example, consider a company that sells clothing and accessories. This company may have a segment called Profit Centre, with values such as Clothing, Shoes, and Jewellery. If the company markets products to both men and women, it may also have departments called Men’s and Women’s.
Both the Men’s and Women’s departments may sell clothing and shoes, but jewellery might be available only for women. In this case, you could configure the Profit Centre segment so that its values are filtered based on the value of the Department field. A record with a Department value of Men’s would show only two of the three Profit Center values.
Configure a Segment to Appear on the GL Impact Page
Segments can be applied to transactions. They can be applied to the body of a transaction or as columns in a transaction sublist. In both cases, these segments can be configured so that their values appear on the GL Impact page for the transactions where they are used.
Segments can be configured to appear on the GL Impact page. Additionally, standard NetSuite reports can be customized to use segments as filters and columns. When a segment is used as a column, it can also be grouped with other columns.