I'm working on a custom NetSuite API that involves postings vendor bills, payments, and so on. One of the requirements is the ability to specify alternate (non-default) accounting periods when creating transactions.

To present users of the external system with a list of accounting periods, I created this simple SuiteQL query.

SELECT
	AccountingPeriod.ID,
	AccountingPeriod.PeriodName, 
	ParentPeriod.ID AS ParentPeriodID,
	ParentPeriod.PeriodName AS ParentPeriodName,
	AccountingPeriod.StartDate,
	AccountingPeriod.EndDate,
	AccountingPeriod.IsPosting, 
	AccountingPeriod.IsAdjust,
	AccountingPeriod.AllLocked,
	AccountingPeriod.ARLocked,
	AccountingPeriod.APLocked,
	AccountingPeriod.AllowNonGLChanges,
	AccountingPeriod.LastModifiedDate,
	AccountingPeriod.Closed,
	AccountingPeriod.ClosedOnDate
FROM
	AccountingPeriod 
	INNER JOIN AccountingPeriod AS ParentPeriod ON
		( ParentPeriod.ID = AccountingPeriod.Parent )
WHERE
	( AccountingPeriod.IsInactive = 'F' )
	AND ( AccountingPeriod.IsPosting = 'T' )
	AND ( AccountingPeriod.IsQuarter = 'F' )
ORDER BY 
	AccountingPeriod.StartDate

The query returns all active, posting periods that are not quarterly summaries. Information about the accounting period, as well as its parent period, are returned. Note that you can filter the list further by excluding locked periods, closed periods, and so on.

If you have any questions about the query shared in this post, please feel free to contact me.