Dynamics 365 version 9.0
A very plausible real life scenario: I submitted an incorrect Time Entry and my Project Manager approved it. The invoice was sent out in a rush because it was the last day of the month and we really had to squeeze in every hour possible. Does this sound familiar?
In Dynamics 365 Project Service Automation, incorrect Time and Expense Entries can be partly corrected or rejected at Expense and Time Entry approval. At invoicing the sales price and billing type can be changed however a Cost Actual will have an impact on the Project Contract. As it turns out sometimes people make mistakes and our fail-safes don’t work. What can we do to rectify incorrect Actuals that end up in PSA? Enter Journals.
What are Journals?
In short, Journals are a power tool to rectify incorrect Time, Expense, Milestone and Material Actuals in Dynamics 365 Project Service Automation, however they’re not limited to just those Transaction Classes. A Transaction Class on a Journal Line can be:
A Transaction Type on a Journal Line can be:
– Project Contract
– Unbilled Sales
– Billed Sales
– Resourcing Unit Cost
– Inter-Organizational Sales
Journals offer a comprehensive set of options however using Journals does take a bit of manual labor and precise work. The example scenarios below describe how to rectify incorrect Time Entries when an invoice has not been sent as well as when a customer has already been invoiced. Before Journals are used I recommend editing the Active Actuals view as well as the Actual Associated View to include at least the following columns:
– Transaction Type
– Transaction Class
– Billing type ID
– Document Date
– Start Date/Time
– End Date/Time
– Accounting Date
– Project ID
– Task ID
– Transaction category ID
– Bookable Resource
– Resource role ID
– Amount Method ID
These columns will help you fill some of the necessary fields when using Journals. I also like to include the Created On column to easily filter the latest records.
Correcting approved Time Entries that have not been invoiced
In this example Time Entries have been approved but they have not yet been invoiced. This example walks you through the steps to correct your Actuals.
1. Verify Actuals under Project Contract
Based on approved Time Entries we can verify that Cost and Unbilled Sales Actuals have been created. Transaction category ID is hidden as it contains no data.
2. Create a new Journal record and Journal Lines
Create a new Journal record by navigating to Project Service -> Journals (under Billing). A Journal Line is created by clicking on the add record / plus symbol on the subgrid.
Fill the fields relevant to your scenario and use the Actuals in Step 1 as guidance. As both Cost and Unbilled Sales Actuals are created when a Time Entry is approved, you may want to create a Journal Line for both Transaction Types. The value in the Quantity field is negative as the Journal Lines we are creating form reverse Actuals. It’s important to enter a negative value specifically in the Quantity field as we want to reverse the Cost Actuals, Unbilled Sales Actuals Project Progress % as well as Task Progress %. It is the Transaction Type of Cost which reducts the Project % as well as the Task %. If the Quantity field is positive we will end up increasing the Project Progress % and the Task Progress %. When the Journal Lines are ready, click Confirm on the ribbon.
3. Verify corrected Actuals and Project tracking
As a Journal record is confirmed the reversed Actuals are created. Verify the data under Actuals as well as under Project tracking. In this example WBS ID 1.1 displays Actuals Hours and Progress % at 0. The Journal record has correctly reduced these values.
4. Verify data on Project Contract
Billed Amount, Cost Incurred to Date and Effort Spent should reflect the changes to the Actuals. In this example all these values are 0 as the Journal record has corrected them.
5. Create an Invoice manually
Create an Invoice manually to pull the Unbilled Sales Actuals on an Invoice. The sum of the Invoice is 0, however the Invoice Line Details show the Actuals that have been created so far (Unbilled Sales from the original approved Time Entry and the created Journal Line). Confirm the Invoice so that Billed Sales Actuals are created. If an Invoice is not created at this point, the next time you create an Invoice manually or by using Batch Jobs the original Actuals as well as the corrections will be pulled on the Invoice. This can easily cause confusion at a later date as the Invoice will have two Invoice Line Details that cancel each other out. The ILDs may also end up on an RS report if you have custom RS reports for the Invoice entity.
6. Verify data on Actuals and on Project Contract
Verify Actuals to confirm that the records that were created equal 0. Data on the Project Contract should remain unchanged.
Correcting approved Time Entries that have been invoiced
Sometimes we don’t catch a mistake as fast as we would like and an incorrect Time Entry goes through to invoicing. Depending on your specific scenario you may want to correct that invoice in your ERP or in PSA. Nevertheless to correct the impact to your Project Contract, Project Progress % and Task Progress %, we have to go through the same 9 steps as when Time Entries had not yet been invoiced.
If we correct the Invoice in PSA the Actuals will look slightly different than in the first example. The Billed Sales Actuals have already been reversed however there is still the original Unbilled Sales and Cost Actual that we need to correct using Journals. As you can see from the photos below, PSA’s Correct Invoice doesn’t cancel the original Actuals and the impact to the Project Contract and Project remains. If the original Actuals are not corrected, they will be pulled on an Invoice the next time one is created manually or by using Batch Jobs.
I hope this guide enables you to take more out of Journals in Dynamics 365 Project Service Automation. Journals are a good power tool to rectify incorrect entries but they need to be used with care and consideration especially if you have an integration to an ERP.
All my blog posts reflect my personal opinions and findings unless otherwise stated.