Quick Tip: Debugging Visual Studio Tools – Developing For Dynamics GP

Awesome tip up there on Developing For Dynamics GP blog on how to debug VS Tools For Dynamics GP.

I am late in blogging about this post. But NOW is the time, as this post just saved my 1/2 day. Seriously. Not kidding. I was stuck with one SQL query execution. There were records to be retrieved, but my code didn’t. After 5-10mins of frustrated troubleshooting, I remembered this post. I should have done that immediately then, but I didn’t.

I setup my VS Tools project to launch GP as instructed on this post and within 2 minutes I could find the issue.

This one deserves to be there on Microsoft Dynamics GP Cookbook (technical).



Caps Lock Reminder – For Microsoft Dynamics GP 2013

I had developed a small customisation module which would alert users while logging on to Dynamics GP with CapsLock key on. You can read more about it here: GP Login Form – Caps Lock Reminder Update.

That customisation was developed using Modifier with VBA. But with Dynamics GP 2013, much emphasis has been given to the new Web Client. Which means, all our VBA code logic won’t be supported by web client.

That said, I have now converted my code from VBA to VS Tools (using C#.Net as programming language). Those who are interested can download it FOR FREE from following link:


Instructions to use:

  1. Copy this DLL file and paste it on to GP AddIns folder (can be located inside GP 2013 application folder).
  2. Ask users to log out and log on back.
  3. If you do not need this tool anymore, just remove this DLL from AddIns folder, after all users log out.
  4. This can be used safely in production environment. This tool doesn’t interfere in any of your day-to-day transactional activities. The scope of this is restricted only to GP login form.

Your feedback is always welcome.


Adding more comment lines to POP Purchase Order – Mariano

Mariano’s latest post explains how to add more comment lines to POP Purchase Order report. The idea is to split the comment text into 80 characters sized fields and then displaying it on separate report sections. I leave you here so you could refer to this awesome piece of post from Mariano. It’s a step-by-step guide on how to do this.

David, way back in 2011, demonstrated a similar approach on his post about adding more comment lines on SOP Documents. It’s worth to remind that post now.


Adding Customer Item User-defined Fields to SOP Invoice – Mariano

Another excellent post up there on Mariano’s blog, which explains how to add customer item user-defined fields to SOP invoice.

The customization is done using Support Debugging Tool (SDT) to achieve this.

There is an interesting point which Mariano mentions there, which is not about the topic itself, but about how clients have started demanding things from us, consultants, which shows how much clients are aware nowadays.

Modifier with VBA would have been the BEST and easy option for any developer or consultant for this functionality. But looks like the client was strictly against it because *it’s not supported on Microsoft Dynamics GP 2013 Web Client*. 🙂

But that demand indeed had led to another superb piece of customization using SDT.


Item Decimal Places Currency & Inventory Adjustments

Q: From where does the Inventory Adjustment entry retrieve a product’s Decimal Places Currency value?

A: When we create a product, this value will be defaulted from the Functional Currency of that company. While entering an Inventory Adjustment for this product, the decimal places currency value will then be retrieved from the product master record.

I realized this when I faced an issue couple of days back. I got a requirement where, I have to facilitate an automated program that will replicate a product information (Master, Quantities/Site, Vendors, Currencies & Price List) from one company to another. Of course, with necessary changes that are specific to the destination company.

It worked merrily till both companies had functional currencies with same number of decimal places. I had to extend this program on to another company, whose functional currency supports 3 decimal places. Now you might have realized the issue. My program, quite honestly, was written with a hardcoded value of 2 decimal places.

When I created some products on my new company using this program, I could not enter Inventory Adjustments with 3 decimal places. It was always 2. Upon spending some time on this, I realized what I have mentioned at the start of this post. You cannot override this at all.

So those who write customization like what I have explained above, beware of all such nuances which will play very crucial role in day-to-day transactions.


Cross Dictionary Triggers on DEX.DIC

This post is kind of reblogging David’s post, Cross Dictionary Dexterity Development, for just one reason.

We can write cross dictionary triggers on DEX.DIC. I had tried this once, some years ago, and could not succeed. I never got a chance or requirement again that would push me beyond that limit. Looks like that chance is here and now.

And this is certainly the right time for me to reblog this point and the post itself.


"Unknown error 0 – 800AC351 occurred saving the project file" – Error & Solution

My last post discussed about an error message faced by users once GP2010 R2 upgrade was over. This post gives you a solution for that.

The following error message was faced by users when they log off from GP:

Initially I thought it was occurring only on “sa” login. But couple of users today reported the same error when they logged off from GP.

When I analyzed this further, I realized that users who have access to Field Service processes in GP alone were getting this error message. Those who do not have access never reported this issue at all.

That made me to think about next step in solving this. No one has reported this issue yet, thus leaving me in the lurch.

I finally found a solution for this menace.


1. I logged off all users from GP environment, as it is Terminal Server environment for us.
2. Launched GP and opened Visual Basic editor.
3. Opened Field Service VBA project.
4. Did some harmless edits (like adding some comments, etc.).
5. Opened the “References” wizard.
6. Unselected all references and selected it back.
7. Compiled the entire project to check whether I am getting any error message.
8. Saved VBA project.
9. Logged off from GP.

Surprisingly (but expectedly) the error message never appeared again.

Those who are looking for some solution for this menace, here it is for you.


Unknown error 0 – 800AC351 occurred saving the project file – Error Message

Has anyone faced this error message?

I recently found this error message after upgrading to GP2010 R2, though it doesn’t have any impact towards other users’ sessions and even the customizations.

This happens only for an “sa” login. Very strange error message.

UPDATE 1: This is happening for all users who have access to Field Service module. If you see the above message, the error is thrown by Field Service VBA project.

UPDATE 2: Issue is resolved. Please read my next post to know better about this message.


Resizing left pane in Smartlist – Frank Hamelly

Frank, thank you very much for getting this from Microsoft Team. We all are grateful, as I know the pain in scrolling horizontally for each Smartlist item.

Alright, for all GP users and consultants out there. You all better download this from Frank’s site. This is going to be most likable thing.

Here it is: Resize the left pane in Smartlist.


SOP Quotations Import – Issue & Solution

Recently, I had to integrate around 1000+ Sales Quotations which comprised of 10000+ Sales Item Lines. This had to be done in a seemingly impossible timeframe, as we were totally running out of schedule.

I devised a strategy to do an All-SQL work as follows:

1. First Export required SOP tables from source database and Import it as SOP TEMP tables to destination database. The Source & Destination databases denote GP Company Databases, of course.

2. Generate the SOP Number by taking the Number Sequence from destination GP Company SOP Quotation Setup.

3. Update all SOP TEMP tables with relevant new SOP Number.

4. Identity only those fields which are required and then do a direct INSERT INTO. This insertion, in my case, happened for SOP10100 (Header), SOP10200 (Detail) & SOP10106 (User-Defined).

5. Once the above is done, run a Reconcilation on all these inserted documents, to make sure that these documents got accepted by destination GP Company as valid SOP Quotations.

All above tasks took me 5 hours of time (including 2.5 Hours of Data Updates & Reconciliation).

Excellent, and I was so happy that I could meet the deadline. I intimated the users to verify and send me the feedback. Users reported back with positive feedback and I was relieved.

ISSUE FACED: Quotations were not getting converted to Orders. Transaction Edit List shown nothing. All looked perfect.

TROUBLESHOOTING RESULTS: 30mins of troubleshooting yielded me one very silly reason behind this issue. The field in SOP10100, USDOCID1, was an Empty String for all Quotations integrated thru’ SQL. This field is the one which tells GP to which Order ID it is suppose to convert this quotation to.

SOLUTION: You all may know by now what the solution would be. Another SQL UPDATE which took the “Transfer To Order ID” value from SOP Quotation Setup and updated SOP10100 accordingly, did the trick.


1. Though I had mentioned that I followed ALL-SQL approach, it’s not supported by Microsoft.

2. I have not shared the SQL Scripts here, as it completely depends on the particular scenario and the way SOP Quotations are used by clients.

3. This post is intended to explain two things:
3.1. There are several successful & time saving approaches that we can follow, even if it’s unconventional.
3.2. With each unconventional approach, there lies a risk which cannot be foreseen. Unless, you are dead sure about your GP Technical & Database Skills, you are NOT suppose to tread any such approach.

4. I just wanted to highlight how one single field (which in our perception may look simple) may cause a critical consequence.