Find Column In SQL

Microsoft SQL ServerDuring a recent upgrade we encountered an error which resulted in me poking around in the database attempting to locate column called PAYRCORD.

This is not something I am going to do manually, so I wrote a script which would find all tables containing the specified column (change the highlighted section):

/*
Created by Ian Grieve of azurecurve|Ramblings of a Dynamics GP Consultant (https://www.azurecurve.co.uk)
This code is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 2.0 UK: England & Wales (CC BY-NC-SA 2.0 UK).
*/
DECLARE @ColumnToFind VARCHAR(20) = 'PAYRCORD'
SELECT
	SCHEMA_NAME(t.schema_id) AS 'Schema'
	,t.name AS 'Table'
FROM
	sys.tables AS t
INNER JOIN
	sys.columns AS c
		ON
			t.OBJECT_ID = c.OBJECT_ID
WHERE
	c.name = @ColumnToFind
ORDER BY
	'Schema'
	,'Table'

Microsoft Dynamics GP Budget Import Issue

Microsoft Dynamics GPBudgets in Microsoft Dynamics GP are easy to maintain using the Budget Wizard. However, we do regularly field calls from clients reporting that the budget import is not working.

The problem reported, was the same as the problem always is; the budget template was not in the correct format.

The first image is the header of the one they were trying to import and the second is the Master budget I exported from GP to show them:

Excel Budget

Excel Budget

As you can see the former budget template has an extra row in the header; this is sufficient to stop the import working.

Everytime we have had this error reported we have found that something was changed in the budget template: a new header row, a header row being deleted, a column being added (the latter is the most common.

The client removed the extra row and was then able to import the budget.

Integration Manager Error: Cannot Open Database “GPLIV” Requested By The Login

Microsoft Dynamics GPWe’re in the middle of large upgrade project at the moment for a client and encountered an error when trying to run an integration.

This particular integration is an Account one, which has been extended with VB Script which checks to see if the segments exist, and if not, it inserts them. When a user tried to run the integration, they get the following error:

Opening source query...
Establishing source record count...
Beginning integration...
DOC 1 ERROR: System.Data.SqlClient.SqlError: Cannot open database "GPLIV" requested by the login. The login failed.
DOC 2 ERROR: System.Data.SqlClient.SqlError: Cannot open database "GPLIV" requested by the login. The login failed.
DOC 3 ERROR: System.Data.SqlClient.SqlError: Cannot open database "GPLIV" requested by the login. The login failed.
Integration Failed
Integration Results
    3 documents were read from the source query.
    3 documents were attempted:
        0 integrated without warnings.
        0 integrated with warnings.
        3 failed to integrate.

I did some double checking and it turned out that the user who was doing the testing had two Domain accounts (one with full name and one with initial and surname) and were not using the one I had configured originally.

All of the other users I had worked with had been using Domain accounts of initial and surname, which was the one I had configured, but this particular user was using the account with their full name.

Adding this Domain user account to the database with the DYNGRP role resolved the problem.

Execute Batch File In Integration Manager

Microsoft Dynamics GPI can’t remember why I created this code, but it allows a batch file to be run from an Integration Manager script:

/*
Created by Ian Grieve of azurecurve|Ramblings of a Dynamics GP Consultant (https://www.azurecurve.co.uk)
This code is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0 Int).
*/
Set objShell = CreateObject("WScript.Shell")
Set objExec = objShell.Exec("B:\IM.bat")

I’m posting it here so I don’t lose it for when I remember why I write it, and perhaps it may be useful to others.

List View Action Pane Error During Upgrade

Microsoft Dynamics GPWe have been doing a number of upgrades for clients recently, the majority of which went fine. However, we did have one, being done by one of my team, where there was an error produced on the table List View Action Pane when upgrading to Microsoft Dynamics GP 2015 R2:

Company Detail

Continue reading “List View Action Pane Error During Upgrade”

Integration Manager VBA Script To Create XML Output

Microsoft Dynamics GPWe have a client who will be loading payables transactions into Microsoft Dynamics GP and need secondary postings created into the General Ledgers of other company databases. The idea is to use the AfterDocument script to create and submit an eConnect document, which is in XML format.

The below code is a small proof of concept which creates an XML file with child and parent nodes and saves it to the T:\:

/*
Created by Ian Grieve of azurecurve|Ramblings of a Dynamics GP Consultant (https://www.azurecurve.co.uk)
This code is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 2.0 UK: England & Wales (CC BY-NC-SA 2.0 UK).
*/
Set xmlDoc = CreateObject("Microsoft.XMLDOM")

Set objRoot = xmlDoc.createElement("RootElement")
xmlDoc.appendChild objRoot

Set objRecord = xmlDoc.createElement("SubLevel1")
objRoot.appendChild objRecord

Set objName = xmlDoc.createElement("Element1")
objName.Text = "AAAAAAA"
objRecord.appendChild objName

Set objDate = xmlDoc.createElement("Element2")
objDate.Text = "BBBBBBB"
objRecord.appendChild objDate

Set objIntro = xmlDoc.createProcessingInstruction ("xml","version='1.0'")
xmlDoc.insertBefore objIntro,xmlDoc.childNodes(0)

xmlDoc.Save "T:\Test.xml"

List All Installed Programs

Microsoft Dynamics GPThis post is a diversion from the usual Microsoft Dynamics GP focused ones, but is related to Microsoft. The admin team at work recently emailed everyone asking for a list of all the applications installed on laptops and desktop machines for a licence audit. They asked for a screen shot of the Add/Remove Programs window, but one of the developers replied with an email containing a set of commands which would list all programs. Which is much easier when you have a lot of software installed which would require multiple screenshots.

To run the script, open a command prompt in administrator mode and type:

cd c:\windows\system32\wbem (hit enter)
wmic (hit enter)
/output:C:\InstallList.txt product get name,version

The first highlighted section above contains the output location and the second shows the fields to return.

You can use the following to get a list of available fields:

cd c:\windows\system32\wbem (hit enter)
wmic product get /?(hit enter)

Microsoft Dynamics GP 2016 R1 Web Client Copy & Paste Bug

Microsoft Dynamics GPI’ve recently been upgrading all of my demo and test environments from Microsoft Dynamics GP 2015 R2 to 2016 R1. Microsoft Dynamics GP 2015 R2 web client had a bug in the General Ledgers Transaction Entry windows Excel copy and paste function which prevented it from working.

It worked fine in the desktop client which meant for regular issues for those clients operating a hybrid installation with a mix of desktop and web clients. It could also cause problems when doing a demo and someone asked to see it while I had the web client open rather than the desktop client.

My understanding was that this bug was fixed in 2016, which I was really looking forward to; I also have a large client who was looking forward to this being fixed as well so they could minimise the use of Integration Manager for importing journals.

Unfortunately, after installing 2016 I did a quick test and found that copy and paste still did not work. I asked around and found that Belinda Allen had the exact same issue, she had found the issue already before I asked, which confirmed that it was not confined to my system.

Belinda raised a call with Microsoft and they have confirmed that it is a reproducible bug which has been escalated to the development team to look into.

It would be nice to have a hotfix, but I am guessing that it will be in Dynamics GP 2016 R2 at the earliest.

Upgrading Microsoft Dynamics GP: Missing Security Roles

Microsoft Dynamics GPWhen you do a fresh install of Microsoft Dynamics GP, all of the required security roles and tasks are created. However, when Dynamics GP is upgraded, the new security roles and tasks are not automatically added. Microsoft do supply a set of scripts each time which can be run to add the roles and tasks.

This comes up every time we upgrade a client and I am tired of having to hunt out the posts from Microsoft, so I’m bringing together a list of the last few scripts and will add new ones here as each version is released.

The versions I could find again are listed below

Updated 19/1/2017 to add link for Microsoft Dynamics GP 2016 R2
Updated 14/11/2017 to add link for Microsoft Dynamics GP 2018 RTM

SQL View Joining GL Transactions To MDA

Microsoft Dynamics GPWe have a couple of clients using MDA (Multi-dimensional Analysis; the precursor to Analytical Accounting), which I don’t know terribly well. So, when one of them asked for a new SmartList Object to be created which extracts information about General Journals and the related MDA information, I needed to do some exploring of the database to work out the links.

Unfortunately, the links between the GL transactions and MDA are not especially obvious. To verify what I had created I did a search and came across a post from 2011 by Mark Polino which was posting code created by a Jeremy Lowell.

I ended up combining some of the code I had with Jeremy’s code (when I tried just his I was getting duplicate lines) to create the below SQL View. Since writing and giving the view to the client, I’ve spotted a few places where the SQL could be tightened up, but this view has been tested in its current state.

CREATE VIEW uv_AZRCRV_LinkGLtoMDA AS
	SELECT DISTINCT
		GLT.JRNENTRY
		,GLT.YEAR
		,GLT.TRXDATE
		,GLT.REFRENCE
		,GLT.SOURCDOC
		,GLT.DEBITAMT
		,GLT.CRDTAMNT
		,GLT.ACTINDX
		,DTA10100.DTASERIES
		,DTA10100.DTAREF
		,DTA10100.GROUPID
		,DTA10100.DTA_GL_Reference
		,DTA10100.GROUPAMT
		,DTA10200.CODEID
		,DTA10200.POSTDESC
		,DTA10200.CODEAMT
	FROM
		(SELECT GLT.JRNENTRY
			,GLT.OPENYEAR AS YEAR
			,GLT.TRXDATE
			,GLT.REFRENCE
			,GLT.SOURCDOC
			,GLT.DEBITAMT
			,GLT.CRDTAMNT
			,GLT.ACTINDX
			,GLT.SEQNUMBR
			,GLT.OrigSeqNum
			,GLT.ORCTRNUM
		FROM
			GL20000 AS GLT WITH (NOLOCK)
		UNION ALL 
			SELECT GLT.JRNENTRY
				,GLT.HSTYEAR AS YEAR
				,GLT.TRXDATE
				,GLT.REFRENCE
				,GLT.SOURCDOC
				,GLT.DEBITAMT
				,GLT.CRDTAMNT
				,GLT.ACTINDX
				,GLT.SEQNUMBR
				,GLT.OrigSeqNum
				,GLT.ORCTRNUM
			FROM
				GL30000 AS GLT WITH (NOLOCK)
		) AS GLT
	LEFT OUTER JOIN
		DTA10100 WITH (NOLOCK)
			ON
				DTA10100.JRNENTRY = GLT.JRNENTRY
			AND
				DTA10100.ACTINDX = GLT.ACTINDX 
			AND
				(DTA10100.SEQNUMBR = GLT.SEQNUMBR OR DTA10100.SEQNUMBR <> GLT.SEQNUMBR)
			AND
				GLT.ORCTRNUM = DTA10100.DOCNUMBR 
	LEFT OUTER JOIN
		DTA10200 WITH (NOLOCK)
			ON
				(DTA10200.DTAREF = DTA10100.DTAREF
					AND
				GLT.SEQNUMBR = GLT.OrigSeqNum)
			OR
				(DTA10200.DTAREF = DTA10100.DTAREF
					AND
				GLT.SEQNUMBR <> GLT.OrigSeqNum)
GO
GRANT SELECT ON uv_AZRCRV_LinkGLtoMDA TO DYNGRP
GO