Recognition of Revenue and Expenses
Revenue Recognition
When you enter an invoice on the Invoices and Memos (AR301000) form, each time you select an item in a line on the Document Details tab, the deferral code automatically appears in the Deferral Code column if a deferral code has been previously defined for the stock item or non-stock item in its settings (if not, you can still select a deferral code in the required document line manually). When an invoice requiring deferral is released, the system generates one deferral schedule for each deferral code in the document. If multiple lines have the same code, one schedule for all lines with the code is generated.
A deferral schedule contains the list of recognition transactions, each of which the system releases in the specified financial period to recognize a portion of the revenue. You can use the Deferral Schedule (DR201500) form to view the schedules and adjust them manually if needed. As the revenues are earned, they are moved from the balance sheet liability account (the deferral account) to an income account (the sales account specified in the invoice) in multiple recognition transactions.
If no items on an invoice require deferral (that is, if no deferral codes are defined for the items), the total sales amount of the invoice is recorded to the revenue account upon release of the invoice; that is, the revenue is recognized during the post period. If some items on the invoice require deferral, revenue from the sale of other items (those with no deferral code assigned) is still recognized immediately.
Recognition of Expenses
Generally, for purchased items, costs or expenses are recognized immediately on release of the appropriate bills. Deferrals may be required for services, warranties, and other expenses that are usually defined in the system as non-stock items. When you enter a bill by using the Bills and Adjustments (AP301000) form and add a line for a non-stock item with a deferral code assigned, the deferral code appears in the Deferral Code column by default (if a deferral code is not specified in the non-stock item settings, you can still select a deferral code in the document line manually). Once the bill is released, the system generates the schedules automatically. The system generates a schedule for each deferral code in the document, and multiple items can be in one schedule.
You can review and manually edit the schedule by using the Deferral Schedule form. The schedule shows how many transactions expenses will be recognized in and when these transactions will occur. Expenses are deferred to a balance sheet asset account (deferral account) until the expenses are used up or expired. At that time, they are moved to the expense account specified in the bill.
Manual Running of a Recognition Schedule
You can generate recognition transactions for both revenue and expenses on the Run Recognition (DR501000) form. Each time you run a schedule, only one recognition transaction is released and posted—even if, according to the schedule, multiple such transactions for a schedule are due.
You use the Deferral Transaction Summary (DR402000) form to view the transactions that have been posted. Also, on the Deferral Schedule form, you can see which deferral transactions have been posted and which have yet to be posted.
Enabling of Parallel Processing
To avoid performance issues on the Run Recognition (DR501000) form when loading deferral schedule records to the table and recognizing the loaded records by clicking Process or Process All, a user with the administrator rights can enable parallel processing. Parallel processing will increase the speed of these processes.
To enable parallel processing on all the forms that support the parallel processing, including the Run Recognition form, do the following:
- Modify the following parameters in the
<appSettings>
section of theweb.config
file as shown in the following code example.<add key="ParallelProcessingDisabled" value="false" /> <add key="ParallelProcessingBatchSize" value="1000" /> <add key="EnableAutoNumberingInSeparateConnection" value="false" />
- Optional but strongly recommended: In the
<px.core>
section, increase theTimeout
values to 600 by adding the following attributes to the<px.core/pxdatabase/providers/add>
node.queryTimeout="600" transactionQueryTimeout="600"
For example, see the following code.
<px.core> <pxdatabase defaultProvider="PXSqlDatabaseProvider"> <providers> <add name="PXSqlDatabaseProvider" type="PX.Data.PXSqlDatabaseProvider, PX.Data" connectionStringName="ProjectX" companyID="" secureCompanyID="False" queryTimeout="600" transactionQueryTimeout="600"/> ... </pxdatabase </px.core>
- Save the
web.config
file. This will automatically restart the website.