Dynamics 365 Business Central – Why didn’t the Reverse Transaction function in the General Ledger Entries page reverse all my General Journal?

Introduction

A client reported that when reversing a large journal via the “Reverse” option in the “General Ledger Entries” page only part of their original General Journal was reversed?

This stumped me and forced me to dig deeper into how the journal was posted. On investigation it seems the journal lines on the journal had been grouped, and each group has been given a different “Transaction No.” in the G/L Entry table. Then, when the reversal option had been selected, only those lines with the same “Transaction No” had reversed.

Its the first time I’ve come across this behaviour in one distinct journal, so in this post I’ll demonstrate how this happened and the correct way this should have been reversed. (i.e. I’d expect this for different document numbers but not the same document number)

The Journal

The clients journal contained many lines however I can recreate the scenario with a much simpler journal.

Below is a journal with five lines. All the lines have the same Posting Date and Document number and the journal balances to nil. This is essentially one journal which we want to post as one unit.

I’ll now post the journal and go and view this in the General Ledger Entries page. I filter on the document number and I can see the full journal. This is great and just what I expect 🙂

The Reversal

I now realise I’ve made a mistake and want to reverse the whole journal. Therefore, while still in the General Ledger Entries page, I select the top line and choose “Process > Reverse Transaction” from the menu however it only gives me the option to reverse a portion of the journal? (the first three lines of the original journal)

So what has happened here? Why is the system not offering to Reverse all the entries on this Document Number?

The Transaction No. column

As shown on the screen shot above it seems the “Reverse Transaction” option pulls back the G/L Entries based on a “Transaction No.”?

I’ve never seen this column before, and when I try and add this via personalisation to the “General Ledger Entries” page, its not an available column?

I’ll therefore dig deeper and look at this document number directly in the the G/L Entry table, and there I can see the journal has been grouped and each group has been given a separate “Transaction No.”

So now the question is why has a journal with the same Posting Date and Document Number been broken up and given two separate “Transaction No.”?

The answer lies in how I posted the journal. If I look back at my original journal I’d inadvertently balanced the journal in two sections.

It seems even though the journal lines have the same posting date, and more importantly the same document number, the system gave these a different “Transaction No” based on how its balanced part way through.

Finally, it seems the “Reverse Transaction” function pulls back the entries based on this “Transaction No.” which causes a complication if I wanted to reverse the whole Document Number.

Quickly Reverse all Entries

So how do I reverse all the lines?

In my example its quick and easy as the journal is small. I could stay in the “General Ledger Entries” page and select one of the first three lines, and click “Reverse Transaction” and then select the fourth line and use the same “Reverse Transaction” option. However what happens if the journal contained many lines that had been grouped into lots of different “Transaction No.”?

In this scenario you can reverse via the G/L Registers page.

As the G/L Register contains all the G/L entries in my journal I just click click “Reverse > Reverse Register” as per below

This gives me all the G/L Entries in my journal that I can then reverse.


Conclusion

It was great investigating and finding out more about how Business Central works in the background. In some ways you could argue this behaviour is advantageous, as you have the opportunity to only reverse part of one huge journal.

My biggest takeaway from this is when reversing an entry via the “Reverse Transaction” in the “General Ledger Entries” page ensure all the expected lines are being reversed.

Also, if you do want to reverse all the journal lines consider using the “Reverse Register” function on the “G/L Register” page rather than “Reverse Transaction”.

Thanks for reading!

Dynamics GP – Smartlist doesn’t load when selected off the menu

Introduction

Sometimes when you select “Smartlist” off the menu in Dynamics GP nothing appears to happen? Smartlist doesn’t load but you don’t get any errors. When you look at the Windows toolbar, smartlist appears to be open but you can’t select it. Its all very strange.

We get this scenario quite often on the support desk and although solutions are documented online I wanted one I could quickly refer to so decided to write this blog :).

I also wanted to show a solution I use to resolve this rather than using a SQL script which is also sometimes recommended.

Fixing using keyboard shortcuts

Most of the time when this happens smartlist has actually loaded however its opened off the viewable screen. To fix this, and bring it back on screen, you can use a series of keyboard shortcuts.

The exact steps I follow are:

  1. Click on smartlist on the menu bar (even though this won’t load smartlist you now have focus on it)
  2. Press ALT+SPACE
  3. Press M
  4. Press the right cursor key
  5. Wriggle the mouse to drag the smartlist window back on screen.

For clarity by pressing ALT+SPACE you are using the keyboard shortcut to load the menu on the smartlist window i.e.

Pressing M selects “Move” off the menu.

Pressing the right cursor moves the smartlist window slightly

Moving the mouse controls the window and you can bring it back on screen.

Conclusion

When this happens it can prove to be a pain so hopefully these simple steps will help anyone else struggling with this issue.

Thanks for reading!

Dynamics 365 Business Central – A method to Force Approval of New Vendors using a Standard Vendor Approval Workflow

Introduction

Within Dynamics 365 Business Central you have the ability to create Vendor Approval Workflows which can be triggered on certain conditions. I’ve found that although this is really cool functionality you get right out of the box, it does have a downside.

The issue being if you use the standard Vendor Approval template as the basis of your Workflow, the user has to request that the new Vendor is approved, otherwise the Workflow is skipped. Obviously this gives this functionality massive drawbacks as users can go ahead and create Vendors and never click the “Request Approval” button.

In this blog I’ll explain how I’ve managed to get around this by adding conditions and changing the Vendor Approval Workflow.

** Please note there’s also one caveat in the at the end of the post 🙂

Vendor Approval Workflow from the Template

To demonstrate the problem with the Vendor Approval Workflow created via the Template let’s add a new one.

To do this search for “Workflows” and then on the Workflows page click “New > New Workflow from Template” and select “Vendor Approval Workflow” as per below:

This opens up a new Vendor Approval Workflow based on the template. However as you can see the first event in the approval sequence is “Approval of a vendor is requested”

This means for the Workflow to start the user must click “Request Approval” after creating the new Vendor.

Therefore no matter what conditions we add, and complex approval hierarchy’s we implement, if a user forgets to request approvals the approval workflow will never start.

So the obvious question is how can we get around this restriction? Can we force the system to automatically send approvals when users create new Vendors.

Changing the Vendor Approval to Force Approval

For this to work we have to get a little creative with its setup and conditions.

Firstly, after adding the Vendor Approval you can edit the default events and sequence. So rather than start with “Approval of a vendor is requested” lets change this to “A vendor record is changed”.

You can do this by clicking the ellipse button next to “Approval of a vendor is requested”

Then select “A vendor record is changed”

The workflow will now look like this:

As this stands the Workflow will trigger whenever a Vendor record is changed, however this isn’t exactly what we want. We only want this to trigger for new Vendors, therefore we need to add some conditions.

Now lets click the <Always> condition so we can filter down when the Workflow will be triggered.

This will open the “Edit – Event Conditions” page where we can add the following conditions:

Let’s break down what the conditions are saying:

The first condition is – “Inv. Amounts (LCY):0”. This means the Workflow will only trigger if the Vendor has never had any Invoices posted onto it.

The next condition is – Only trigger when the No. is Changed: This means the Workflow will only trigger when the Vendor No. is changed.

Therefore the Workflow will only trigger if the Vendor has had no activity AND the Vendor No. is changed (which happens when a new one is added).

Hopefully this captures all new Vendors although it will also trigger if someone changes the Vendor No. and the Vendor has never had any invoices posted. (hopefully this will be unusual unless there was a mistake setting up the Vendor)

Let’s test the Workflow

Now to test if this works 🙂

First go to “Vendors” and click “New”

Select a Template and click OK
Now the Vendor page opens and the Workflow automatically triggers and sends an approval request:

Therefore we have successfully forced the Workflow approval to trigger automatically when a new Vendor has been created 🙂

Conclusion

Although I’ve found this to be a great way to configure automatic approvals for new Vendors it does have one disadvantage :(.

Unfortunately you can only have one Workflow which starts with the same event. Therefore if I wanted to create another approval that started with “A vendor record has changed” the system would prevent this as per below

Just something to bear in mind if you wanted to implement this solution 🙂

Thanks for reading!