Featured Post

Dynamics GP 2019 is now Released

It is now released, Microsoft Dynamics GP 2019 which moves the system to the modern product life cycle   " Beginning with the October...

Tuesday, March 31, 2015

Rate My Blog

I have always believed that people’s feedback is a key for success, which apparently leaves a room for continuous improvement. Rate

Since day one, Dynamics GP Essentials blog has been dedicated to provide the community with the the knowledge required to better enhance the deployment of their Dynamics GP environment from both a business and technical perspective.

This is the vision, and a vision without execution is nothing but hallucination. Therefore, I am asking the visitors to kindly rate my blog Smile 

Here is the rating scale:


On the upper “right corner” of the blog page, there is a poll to help me better build the blog content. I am eager to hear your comments and suggestions at the comments section below.


Best Regards,
Mahmoud M. AlSaadi

Sunday, March 22, 2015

Dynamics GP 2015 – Web Client [ArgumentNull_Generic] error on Home Page

A client recently reported an issue related to the web client, it occurs with specifically one user as they are on the home page of the web client version. Once they click on “Sales” tab on the Navigation List, an [ArgumentNull_Generic] error pops up as stated below:




Severity: Critical

Summary: [ArgumentNull_Generic]



Debugging resource strings are unavailable. Often the key and arguments provide sufficient information

to diagnose the problem.

Parameter name: contentValue



System.ArgumentNullException: [ArgumentNull_Generic]


Debugging resource strings are unavailable. Often the key and arguments provide sufficient information to diagnose the problem.

Parameter name: contentValue



Troubleshooting a web client related error could sometimes be tiring, especially when the pattern of the error is not quite obvious. There is one reference that I admire about troubleshooting Microsoft Dynamics Web Client by MVP Mariano Gomez, a comprehensive list of seven parts that is a must-read.


The error is user-related, it occurs only for this specific user on the web-client version, there is no VBA modifications on the screen which could be in any way the root-cause of the problem.


When the user logged in the desktop version of Dynamics GP, they could easily click on the navigation list – Sales module tab with no issues. Checking the “Customize this page” option shown unexpected options as shown below:


Sales - Customize this Page

Sales - Customize this Page (2)


These are not standard options, the standard options to customize the area page includes the following:

  • Transactions
  • Inquiry
  • Reports
  • Cards
  • Utilities
  • Routines
  • Setup

The associated tables to be checked include the following:

SY08000 syHomePage

SY08100 syHomePageLayout

SY08120 syHomePageSubSection

SY08130 syHomePageMetrics

SY08140 syHomePageQuickLinks

On the SQL Profilder, the system calls each section as derived from the options and configuration on the “Customize this report”. For instance, when calling the [Transaction] section, you will find the following on the SQL Profiler:


exec sp_execute 31,'<section title="Transactions" image="Images/Transactions.png" expanded="true" column="1"><item title="Sales Transaction Entry"

link="http://dexterity/product=0/script=ExecuteAreaPageLink/args=0,1567,75"/><item title="Sales Batches"

link="http://dexterity/product=0/script=ExecuteAreaPageLink/args=0,1567,70"/><item title="Print Sales Documents"

link="http://dexterity/product=0/script=ExecuteAreaPageLink/args=0,1567,80"/><item title="-"/></section>',544,750,0




Although there is still an ambiguous part of this issue as related to those other options (Purchasing and Inventory), unchecking them and keeping the original seven options above (Cards, Transaction,Reports, Setup, Inquiry, Utilities and Routines) from the “Desktop” version; (since the user is not being able to get in the sales area page at all) got the problem resolved.


Area Page Options


Best Regards,
Mahmoud M. AlSaadi

Thursday, March 19, 2015

Business Portal 6.0 – Your receive “The webpage can not be found” or a page with empty content

We have received a support case recently from one of the clients that is still working on Business Portal – Requisition Management specifically. The client has almost 20 users working on the requisition management with no reported issues since almost a year.

First Issue Reported

The following case has been reported recently in which the users were not being able to create new requests, upon clicking on the “New Request” button , an error message pops up stating “The webpage can not be found”

New Request

The result is:

Web page can not be found 

Second Issue Reported

When clicking on the requisition under the employee center, the page comes out with no content, as shown below:

Requisition has empty content



Apparently,there are missing web pages and web parts on the SharePoint level which are causing the issues above. Before explaining how to recover these missing objects, it is important to understand the structure of Business Portal as related to the Employee Center and Requisition Management.

This is the overall structure of the Employee Center, it contains three document libraries within each of them, a minimum of one page.

Employee Center

To check the structure above, open the following URL path:

Business Portal Content


The problem was primarily due to the fact that the content of the “Requisition Management Pages” document library was mistakenly deleted by a power user.

To recover the missing pages, you need to prepare another identical environment with a “fresh installation” of business portal, from which you can download all these web pages and web parts to be uploaded to the live (corrupted) environment.

Once the “fresh” installation is ready, follow the steps below:

1- On the employee center page, click on “Site Actions” > “View All site content”. This will take you the same screen shot above.

2- Go to the Requisition Management Pages document library (shown above in the screen shot) and you will find two sub pages (Purchase Requests and Purchase Request Details).

Download page

3- Repeat the step above for the “Purchase Request” page as well.

4- You still need to download the web parts in each of the pages above to be uploaded as well with the pages. To do so, double click on the selected page (purchase requests) for instance to be opened separately in the browser.

5- On the page (Purchase Requests), choose the “Edit Page” option as shown below

Edit Page

6- Now on the edit page, you will find a box at the right corner of the web part, check this box and then choose to “export” the Web Part

Web Part

7- Now you can upload these missing pages and associated web parts into your live environment to get everything settled again.

SharePoint |  Important Note !

The name of the page and web part does matter, be careful to rename the web page or web part with the exact same name since SharePoint will be looking for the exact same URL path including the name

For example, if the web page name is (Purchase Requests) with a space in the middle, the SharePoint path for this is  /Purchase%20Requests.aspx   .Because SharePoint simply uses a (%20) to indicate a space in the name.

So if you upload the purchase requests with the name (Purchase_Requests) name, it will not work and you will still be encountering the missing web page error.

Happy News !
I have already uploaded the pages and documents for anyone with a similar case. This is Business Portal 6.0 installation and SharePoint 2010.

You can download them from here >> Download link


Best Regards,
Mahmoud M. AlSaadi

Wednesday, March 18, 2015

Fixed Assets - Historical Depreciation Ledger Report

Historical Reporting is always a must in all companies, and clients always ask about such reports at the very early stages to make sure that can do proper reporting not only for the current period, but also for historical periods.

In Dynamics GP, there is a report for depreciation ledger that can be printed as of a specific period of time, this was a new feature presented in Dynamics GP 2013. As derived from this report, the below script can be deployed to retrieve such details.

Here is the data set view:

Depreciation Ledger Report


Helping Note
This report works for Dynamics GP 2013 and later, since there are predefined canned SQL functions used as part of the script.


Creation Date: 18th of March , 2015

Created by: Mahmoud M. AlSaadi

The main purpose of the script is to provide a historical "As of" depreciation ledger report for

Fixed Asset module


Revision History:

Revision No.            RevisionDate    Description

1                       18/03/2014      Original Version

------------------------------------------------------------------------- */




SET @As_of_Date = '2017-12-31 00:00:00.000'


                   FROM     FA49900




        ASSETIDSUF AS Suffix ,


        PlaceInServiceDate ,

        DepreciationExpense ,

        AccumulatedDepreciation ,

        AssetCostDescription ,

        FullyDepreciatedFlag ,

        FullyDepreciatedDate ,

        REMAININGLIFEYEARS AS AS_of_Remaining_Life_Year ,

        REMAININGLIFEDAYS AS AS_of_Remaining_Life_Dyas ,

        COSTBASIS AS CostBasic ,

        CURRUNDEPRAMT AS CurrentDepreciationAmount ,

        YTDDEPRAMT AS AS_OF_YTD_Amount ,



                    D.ASSETID ,

                    D.ASSETIDSUF ,

                    D.ASSETCLASSID ,

                    E.DEPREXPACCTINDX ,

                    H.ACTDESCR AS DepreciationExpense ,

                    E.DEPRRESVACCTINDX ,

                    G.ACTDESCR AS AccumulatedDepreciation ,

                    E.ASSETCOSTACCTINDX ,

                    F.ACTDESCR AS AssetCostDescription ,

                    A.BOOKINDX ,

                    A.PLINSERVDATE AS PlaceInServiceDate ,

                    A.DELETEDATE ,

                    A.DEPRBEGDATE ,

                    A.FULLYDEPRFLAG FullyDepreciatedFlag ,

                    A.FULLYDEPRDATE FullyDepreciatedDate ,

                    A.ORIGINALLIFEYEARS ,

                    A.ORIGINALLIFEDAYS ,

                    CASE WHEN ( A.DEPRTODATE > @As_of_Date )

                         THEN ISNULL(dbo.FA_RWCalcRemainingLife









                         ELSE A.REMAININGLIFEYEARS

                    END AS REMAININGLIFEYEARS ,

                    CASE WHEN ( A.DEPRTODATE > @As_of_Date )

                         THEN ISNULL(dbo.FA_RWCalcRemainingLife









                         ELSE A.REMAININGLIFEDAYS

                    END AS REMAININGLIFEDAYS ,

                    A.DEPRTODATE ,

                    A.LASTRECALCDATE ,

                    A.LASTRECALCDATEFISYR ,

                    A.BEGINYEARCOST ,

                    A.BAGINSALVAGE ,

                    A.BEGINRESERVE ,


                                         AS COSTBASIS ,

                    A.SALVAGEVALUE ,

                    A.DEPRECIATIONMETHOD ,

                    A.AVERAGINGCONV ,

                    A.SWITCHOVER ,

                    A.SWITCHFM1METHOD ,

                    A.SWITCHFM1AMOUNT ,

                    A.SWITCHFM1DATE ,

                    A.DLYDEPRRATE ,

                    A.PERDEPRRATE ,

                    A.YRLYDEPRRATE ,

                    A.AMORTIZATIONCODE ,

                    A.AMORTIZATIONAMOUNT ,





                            '99991231', 0),

                           0) AS CURRUNDEPRAMT ,





                             '99991231', 0), 0) AS YTDDEPRAMT ,





                            '99991231', 0), 0) AS LTDDEPRAMT ,





                            '99991231', 0), 0) AS NETBOOKVALUE ,

                    A.DEPRTODATEBFRET ,

                    A.RECGAINLOSS ,

                    A.NONRECGAINLOSS ,

                    A.STLINEDEPRATRET ,

                    A.COSTBFRETORDEL ,



          FROM      FA00200 A

          LEFT OUTER JOIN FA00700 C


          LEFT OUTER JOIN FA00100 AS D

                     ON A.ASSETINDEX = D.ASSETINDEX

          LEFT OUTER JOIN FA00400 AS E

                     ON A.ASSETINDEX = E.ASSETINDEX

          INNER JOIN GL00100 AS F


          INNER JOIN GL00100 AS G

                     ON E.DEPRRESVACCTINDX = G.ACTINDX

          INNER JOIN GL00100 AS H

                     ON E.DEPREXPACCTINDX = H.ACTINDX

          WHERE     A.BOOKINDX = @BookIndex

        ) AS RPT


The script can be downloaded from here >> Download Link

Best Regards,
Mahmoud M. AlSaadi