Microsoft Dynamics GP 2010 Reporting

I was recently given the opportunity to write a book review on a new publication about one of my favorite topics: Dynamics GP reporting tools.  Read on and you may find yourself in possession of a free copy of this book!

The book is entitled Microsoft Dynamics GP 2010 Reporting and was written by David Duncan and Christopher Liley of I.B.I.S.

Microsoft Dynamics GP 2010 Reporting

Microsoft Dynamics GP 2010 Reporting

First, I must express my utmost respect for anyone who undertakes a task this daunting. The subject matter is dense, and the tools are ever-changing.  Kudos to these consultants for taking the time to create a handy guide like this!

To many new users of Dynamics GP, the variety of tools that accompanies the ERP system is overwhelming.  There are built-in or “canned” reports that can be modified, smartlists which can export data to Excel, and FRx or Management Reporter for creating standard financial reports.  The latest versions of Dynamics also offer collections of Excel Reports and SQL Reporting Services (SRS) reports which can be deployed and used right away. In addition to all of this fare, a customer may purchase Smartlist Builder and Excel Report Builder, both of which further extend the capability of smartlists and Excel reporting to all areas of the system as well as external data sources.  And we can’t forget Analysis Cubes for Excel, which is the height of business intelligence for the Dynamics end user. Essentially, data analysis and reporting tools for Dynamics GP have flourished over the past few years, and this book offers an excellent synopsis and technical comparison of the various tools available.

While it is geared toward power users and data analysts, the book does offer some valuable information to anyone who wishes to learn more about the multitude of reporting options out there.  The authors start out with a helpful discussion about the challenges of developing reports: defining the target audience, locating the appropriate data, selecting a form of presentation,  and applying permissions to the final product.  They then dedicate a full chapter (sometimes two) to each tool and provide some guidance on installation, deployment, security, and usage.  The final chapter Bringing It All Together offers an in-depth comparison of the various tools and discusses the trade-offs among them in terms of data sources, latency, ease of formatting, and required development and IT resources.

As a software consultant, I found this book very useful.  It is very well-organized and the examples provided are a great way to introduce a power user to the strengths and weaknesses of each tool.  Most importantly, the authors are enthusiastic about the wealth of reporting resources available and how each one can be used to improve visibility into an organization’s financial and operational health, which is really the fundamental point of an ERP system.  The book imparts enough information to inspire you to explore each tool by actually using it, which is the best method of learning!

So here’s the scoop on how to get your copy.  Send me a message about your own reporting challenges in the comments below this blog.  I just want a brief summary of what tools you are currently using and how you think this book will help you face those challenges.  I’ll select three lucky winners from the respondents during the month of July, and I’ll contact you for your address so no need to include that information at this time.


Filed under Microsoft Dynamics

Integration Manager: The Basics

I’m sure there have been numerous articles written about Integration Manager for Dynamics GP. Most of them are written for developers and contain advanced features, tips, and tricks for making it work in unique circumstances or using complicated data sources.

I find that most end users have a difficult time understanding the fundamentals of IM, so I want to outline a very simple integration design for those of you who are new to building integrations and feel a bit overwhelmed by the the tool.

The simplest way to approach a data import using IM is to first manually key in a transaction from the recordset you wish to import, whether it be a journal entry, a payables invoice, or a bank transaction.  This is best done in a test environment. Once you have the transaction entered, you can then open integration manager and better understand how it works because IM is like having another data entry person in your system. That’s right, folks: integration manager enters the data just like you did when you hand-keyed it.

Let’s have a look at a standard journal entry:

There are not a lot of fields on this window, but it is a good example of a transaction entry window in Dynamics GP:

  • It has a header section and a detail (line) section or grid
  • It has required fields
  • It has various options based on user input

Every transaction entry window has a header and a detail. In most cases, the header contains the information outside of the grid, or lines.

In this case, the header fields are:

  • Journal Entry number
  • Note
  • Intercompany checkbox
  • Batch ID
  • Transaction Type (standard or reversing)
  • Transaction Date
  • Reversing Date (only if you select the reversing transaction type)
  • Source Document
  • Reference
  • Currency ID

The detail/line/grid fields are:

  • Co. ID
  • Account
  • Debit
  • Credit
  • Description
  • Exchange Rate
  • Distribution Reference
  • Corresp Co. ID

Required fields are displayed in bold and red. This feature can be activated under user preferences and is very useful for identifying missing data values when importing records.

In terms of user-input options, it is actually surprising how many different parameters there on on this simple window.

  • If you mark the intercompany checkbox, for example, the Co. ID and Corresp Co. ID in the grid will be activated
  • If you select the Reversing type transaction, the Reversing date field will be activated
  • If you select an account in the grid that is linked to an analytical analysis group, the A next to the Account field will be activated, allowing entry of analysis information for this account

All of these options are also operational in Integration Manager and can be activated if needed.  Let’s compare the data entry window to the integration setup:

They certainly don’t look at all alike, do they?  But let’s take a closer look at IM and its components.

Under Sources, we have a header and a detail object, which correlate to the header and detail windows in the transaction entry window.

Query relationships allow us to link the header information to the detail information. More about that in a moment.

The Destination is the transaction entry window in Dynamics GP where the information will appear.

And Destination Mapping is where we will go to map each field from our source file(s) to the destination window.


Each source in an integration is linked to a data set that the user wishes to import into Dynamics GP.  The data can be in virtually any location and format, from a comma-delimited flat file to an Oracle database.  If using multiple sources (header and detail) there must be a column/field that establishes the link between the two files.  In our example, this is the DocNum field.  Alternatively, IM has the flexibility to allow use of a single datasource for both header and line information.  More about that below.

For our example, we’re going to use a sample integration that comes with Integration Manager.  It consists of two tab-delimited text files: one for the header and one for the detail. You will find these sample files by default in this location: C:\Program Files\Microsoft Dynamics\Integration Manager 10\Samples.

As you can see, the required information for a journal entry is all available in these two files.  The header information contains the Date and Reference values.  The line information contains the distribution accounts and amounts.  Both files contain the DocNum, which is a column used to join the files together and match the appropriate journal entry detail to each header.  We don’t need to provide a journal entry number, as we are going to allow Dynamics GP to assign this at the time of import.

Double-click on the Source object GL Trans Header to open the properties for this source:

You will notice the path to the source file on this window.  Use the elipse (3 dots) to navigate to your desired source file.  The remaining options are self-explanatory.  If you file is comma-delimited, choose that option, if tab-delimited, choose that option, etc.  If the first row of your source file contains field names, mark the checkbox to indicate that as well.

Click the Columns tab to continue and click the refresh button to display the columns from your source file.

Each time you change the source file, you MUST refresh the columns by clicking this button.  This forces IM to “read” the new source file and detect any additional columns or changes you have made to existing columns.

The additional tabs: Filter, Sorting, Scripts contain additional features that permit you to restrict the data to be imported, sort it prior to importing, and add logic to validate or manipulate the data prior to importing.  With scripts you can also enhance an integration to write back to the source and confirm importing was successful.  This is an advanced topic that I won’t address here, but examples are available if you need this functionality.

Repeat this process for each Source in your integration.  In this case, we would go through the same steps for the GL Line Detail source.

After you have clicked Apply and OK to close this window, you should right-click on each Source and choose to Preview.   This should show you the source data that will be imported and allow you to verify that the source files are pointed to the right place.  If the Preview does not look right or you receive an error message, you will need to correct the source data before proceeding.

Query Relationships

Once each source has been pointed to the appropriate source file, columns refreshed, and any additional options selected, we need to define the relationships between the various sources.  Double-click the Query Relationships object to display the sources.

To link the sources, simply click on the field name/column on the header source and drag your cursor to the same field name/column on the detail source.  This will create the arrow displayed.  If it is not set properly, right-click on the arrow and choose Remove.  For more advanced links, right-click on the arrow and choose Properties to open the Select Relationship Type window.  Remember that the Master file is the origin of the arrow.  The child file is where the head of the arrow is pointing.

Once you’ve completed the query relationships, close that window.


For pre-defined integrations, such as our sample one, the destination is already defined.  If you were building a new integration, you would right-click on the Destination folder object and choose Add a Destination, then select from a list of objects.  In this case, our destination is already set to General Journal.

Destination Mapping

The mapping of your source file to the Dynamics GP destination is the heart of integration manager.  You will notice when you double-click on Destination Mapping that all of the folders displayed pertain to a component of the destination window in Dynamics GP.

In this General Journal example, the top level is our header information.  Click on General Journal to view all of the fields available on the journal entry window in Dynamics GP: Journal Entry, Intercompany, Batch ID, etc.  They are all present and can be mapped here.  The real power of IM comes into play by using the Rules, however.

Notice that the Rule column is set to Default for almost every field.  This tells IM to allow Dynamics GP to automatically take care of the information in that field according to how it would occur if you were manually entering it into the transaction window in the system.  If you were keying a journal entry, Dynamics would provide you with the next journal entry number, the intercompany checkbox would be unmarked, you would need to enter a batch ID, etc.

In our example, we have made the Batch ID a constant value.  Other options are to Use a Source Field, Use Input, or Use Script.  Use a Source Field will allow you to map the field from your source file.  You would need to have a field/column in the header file that contains the Batch ID.  Use Input will prompt you at run time to enter a batch id.  Use Script will allow you to program how you want the batch id to be defined based on additional information you provide in a script.

For each field on the transaction entry window, you need to decide how you want the information populated.  The Rule dropdown may contain different options depending on which field you select.  In addition, if you select Use Constant, the Source column will be populated with the specific options pertaining to that field in Dynamics GP.  For example, if you select Use Constant for the Transaction Type field, you will be presented with the two options available in Dynamics: Standard or Reversing.  By selecting Reversing, you are ensuring that every record imported will be created as a Reversing Transaction, but you must also ensure that your source file header contains a reversing date field/column in order to map that information as well.

The Reference field is a required field, and I will use it  to demonstrate various options that are available in IM at the field/column level.  When you click on the Reference field and choose Use Source, you will notice the ellipsis (3 dots) is activated and you can use that to select the appropriate field to map from your source file.  The Source Object window will open, and the dropdown will contain all of the sources available for this integration. In our case, it will show the header and detail options.  Because we are mapping a field on the header, we want to select from the header source.  We would highlight the Reference field and click Select.

With your cursor still on the Reference field in the mapping window, you will notice there are additional options available in the lower left-hand area of the screen.  These features allow IM to handle various conditions in your source data in order for IM to import it properly into Dynamics GP.  For example, if your source file contains both Standard and Reversing transactions and you have a field in the header that indicates this using S or R, you would want to use the Translation option, which will allow you to tell Dynamics if this column contains an “S” that means Standard, if it contains an “R” that means Reversing, etc.

If you were mapping the batch ID from your source file, but it is in upper and lowercase format, Dynamics GP won’t import it.  The integration will fail because the Batch ID field must be in uppercase characters.  In the integration, you can specify that you want to convert the case at runtime.  The other options are for leading spaces, trailing spaces, how to handle a data string that is too long, and what to do if your source field is null/empty.  By default Dynamics will cancel a document if a required field is null, but for optional fields, you can choose to make it a blank value or use a default value from the Dynamics setup.

Once you have set the options for each field on this window, click the Options tab to select how you want to handle additional elements of the integration.  For example, if the Batch ID you have mapped or entered as a constant value does not exist in Dynamics GP, you can opt to have it created at runtime as shown below:

Once we’ve mapped the header (General Journal object), we need to proceed with the Entries object.  In addition, if we wanted to import Analytical Accounting distributions or Tax details, we would need to map each of those objects as well.  In our case, we will continue with Entries.

As you can see, we are using the source file for the account, debit, and credit amounts and allowing Dynamics GP to handle the rest of the distribution grid in the transaction entry window.  One very useful feature of IM that is available for distribution fields is the Rule to Use Positive Source Field or Negative Source Field.  This allows you to import data from a single field in the source file, as in our sample file where Amount is negative for credits and positive for debits.  IM allows us to use this same field and will designate the debit or credit status of the distribution based on this logic.

The options tab for Entries lets us specify the source object for this particular object: Line Detail.  The Rule column here also contains options such as Default (if you have default distribution accounts set up for a vendor for example) or Empty (to bring in zero amounts) or Default Non-Imported (which is helpful if you only want to map the debit side of a payable and allow Dynamics to assign the A/P account from the Vendor or Posting Setup window.  The Rules will vary depending on the Dynamics GP window destination and the type of transaction you are importing.


After you have mapped all sources to their appropriate destination object, you are ready to run the integration.  The progress window will advise you of any issues with your import, and you can also view the log from that window after the integration has run.  To access a log after you have exited the progress window, simply double-click the top level of the integration (GL Transaction) and click on the Logs tab:

I hope this helps as an introduction to using this very powerful and flexible tool.  We have barely scratched the surface here, but I hope I have answered some fundamental questions about Integration Manager.


Filed under Microsoft Dynamics

Dynamics GP as a Single Source

More and more companies are integrating their various business information systems in an attempt to streamline IT and accounting processes.  One of my customers recently decided to use Dynamics GP as their primary database for storing Login information for all their disparate systems.

Before I outline our approach to meeting their requirements, let me explain how they were doing this.  Their recruiting and hiring process is fast-paced, to say the least. This company is opening new retail stores in new markets all the time, so their recruiters are on the road collecting applications daily and setting up new hire meetings every couple of weeks.  In order to set up a new employee, the recruiter would fill out all the basic information in a spreadsheet, which was then passed on to the payroll department to create an employee record in Dynamics GP.  The payroll department would then send a spreadsheet to the IT department with the new hires’ information.  IT would set up the necessary logins and passwords in each system based on another spreadsheet summarizing the different systems required by each job title, then communicate these back (again via a spreadsheet) to the recruiting department.  The final step for recruiting was to prepare (manually, using Word) a login sheet for each new hire to be distributed at their new hire orientation.  In addition to this “workflow”, there were additional data elements that were often not captured or only partially captured, resulting in inaccurate information or worse: erroneous payroll transactions.

Overall, a cumbersome process relying on several people to remember to fill out all the necessary information and send a notification by e-mail that the shared spreadsheet was ready or attach and e-mail a new spreadsheet to someone in another department. Additionally there was frequently a need for cross-communication regarding missing pieces of information for some new hires.  The primary pain point to be addressed was setting the appropriate commission flag in their point of sale system to ensure that employees received commissions when applicable.

The first step to address in developing their new process was removing the back-and-forth nature of creating employee information in their various systems. In order to handle the initial setup, we utilized Extender to create two new windows in Dynamics GP.  The first window is attached to the Payroll Position Setup window and lists all of the user logins required by position code along with a commissionable flag.  The second window is attached to the Employee Maintenance window and captures each employee’s logins for the various systems.  Once this was complete, we published each of these windows as SQL Views using Extender views, then used Smartlist Builder to attach the two views and create a smartlist that IT could use to generate a spreadsheet of new hires along with their required logins defined by position code. Finally, we created a second smartlist that recruiting can use to create a mail merge in Microsoft Word for their new hire login sheets.

We changed the business process to remove the payroll department from the initial setup of new hires.  The recruiting department now enters the employee ID and SSN in the employee maintenance window, along with the department and position code.  The IT department merely checks the smartlist on a daily basis to determine if new hires have been entered by the recruiting department (if the logins fields are blank, this indicates a new employee record). If records are found, they export the list to Excel, and as the various logins are defined IT completes this spreadsheet and uses an Extender import to populate the logins window in Dynamics GP.  Recruiting uses their login sheet mail merge smartlist to quickly generate the forms they need for orientations. The Payroll department completes an employee record after recruiting confirms the employee has attended an orientation and filled out all the necessary paperwork (this is also tracked using  Extender windows on the employee maintenance window).

Now that I’ve written all of that, it looks very complicated, but it really simplifies and streamlines the process of adding new hires and their various logins into the numerous systems. In addition, the commissionable flag is now determined at the position code level instead of on an employee-by-employee basis, so there is much less room for error in setting up the point of sale system. In addition, because all of the logins are now stored in a single location, the IT department is able to use the SQL views to push login information into various systems automatically instead of having to set up each one individually. A similar process (utilizing the same Extender windows and SQL views) is used by the IT and Payroll departments to communicate changes in status (which often result in a change to the commissionable flag and login requirements) and terminations.


Filed under Extender, Microsoft Dynamics, Microsoft SQL Server, Smartlist Builder

Modifier w/VBA – an example

I’ve had people ask me why they would ever need the Modifier tool, and what use is VBA in enhancing Dynamics GP? Well, it has come in quite handy over the years.  This is one example of a customer request where Modifier and VBA were the perfect tools for the job.

The Modifier is a tool that allows users to make simple visual changes to Dynamics windows, for example moving fields around or removing unused fields from the user space.  VBA can be used in combination with the Modifier to add to existing Dynamics logic or sometimes stop the logic from occurring, for example when someone clicks a button on the window.

Disclaimer: this article assumes a degree of experience with the tools, or at least an adventurous spirit… so if you’re the type of person who can take an example and run with it, this is for you!

Following is the request I received from my ideal customer (You gotta love a customer who provides screenshots and mock-ups of their desired outcome!):




As I said, a perfect scenario for a Modifier/VBA solution, so here’s how I addressed it step by step.  This particular customer has a systems analyst who administers their Dynamics GP environment, so these are the instructions I gave him.

1.  Open the IV_Item_Inquiry window in modifier

2.  Add a button for internet info. I named this PB_World, but it can be called anything. Just change the vba references below to your field names.

3.  Doubleclick the Field field in order to open the definition window and click the elipse (…) to set the graphic to the appropriate one (see below)



4.  Add another button for the backordered link


5.  This one will be set to invisible, but leave it displayed until the testing is completed

6.  The Backordered text field can be changed to be blue and underlined using the properties box. This will make it consistent with the other hyperlink fields on the window.

7.  Once those are done, open the modified window in GP and add it to VBA (if it’s already in the VBA project, you only need to add the two new fields that you created) – this example is in version 10, but the window should look the same.


8.  Once you’ve added those two fields from the item inquiry window, you’ll need to add the internet information window to VBA too, along with the appropriate fields:


9.  Open the sales item inquiry window and add the appropriate fields from there:


10. Finally, insert this code in the VBA project:

Private Sub PBWorld_AfterUserChanged()
InternetInformation.SelectInformationfor.Value = 4
InternetInformation.MasterID = ItemInquiry.ItemNumber
End Sub
Private Sub PushButtonM20_BeforeUserChanged(KeepFocus As Boolean, CancelLogic As Boolean)
SalesOrderProcessingItemIn.Include = 96
SalesOrderProcessingItemIn.Items = ItemInquiry.ItemNumber
SalesOrderProcessingItemIn.Redisplay.Value = 1
End Sub


In order to deploy to additional clients, simply copy the Dynamics.vba from that installation to the other workstations and you should be good to go.

Note: I had to experiment with the selection on the sales order processing item inquiry window to get to the 96 value. so it may be necessary to try various values to get the correct selection for your project.

Leave a comment

Filed under Microsoft Dynamics, Modifier, VBA

Demystifying Dynamics GP: Welcome to Dynamics World

A lot of people have been using Microsoft Dynamics GP (formerly Microsoft Business Solutions, formerly Great Plains) for many years, so you’ve already encountered corrupt reports dictionaries.  You know what to add to the Dex.ini in order to create troubleshooting logs.  You can say “been there, done that” when the error dialog box pops up with an ODBC or SQL error. You may even remember hearing “Welcome to Dynamics” when you logged in (it’s been awhile, but I do recall having a customer that wanted to change the voice so it sounded like Antonio Banderas instead of that pleasant woman…)

But for those of you who are new to the Dynamics GP world, this is an introduction to underlying architecture which I hope will explain some of the issues reported every day and help you resolve them.  I like to think of it as the Dynamics rendition of the good, the bad, and the ugly: The DIC, the EXE, and the SET.

Continue reading


Filed under Microsoft Dynamics