<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-14548861</id><updated>2012-01-18T09:15:59.100-06:00</updated><category term='Executive'/><category term='Crystal Reports'/><category term='Contract Administration'/><category term='Depot Management'/><category term='Sales Process Holds'/><category term='Equipment Rentals'/><category term='Auto Aging for GP'/><category term='SQL'/><category term='Modifier'/><category term='Report Writer'/><category term='Dynamics GP'/><category term='ISV'/><category term='Business Intelligence'/><category term='Azure'/><category term='Fixed Asset Management'/><category term='General'/><category term='Conference'/><category term='Business Portal'/><category term='Dag.exe'/><category term='Sales Order Processing'/><category term='Events'/><category term='Hybrid Development'/><category term='Password Expiration Prompt'/><category term='Record Lock Trace'/><category term='Field Service Series'/><category term='Dynamics CRM'/><category term='Cloud'/><category term='ADO'/><category term='SOP Batch Reconcile'/><category term='Auto Posting'/><category term='Project Management'/><category term='Convergence'/><category term='CRM'/><category term='Receivables Management'/><category term='Visual Studio Toolkit'/><category term='SharePoint'/><category term='RMA'/><category term='MJ Solution'/><category term='Workflow'/><category term='SmartList'/><category term='Dexterity'/><category term='Custom Links'/><category term='Reporting Services'/><category term='Retail Management'/><category term='VBA'/><category term='DUOS'/><category term='Support Debugging Tool'/><category term='Payables Management'/><category term='RMS'/><category term='SmartList Builder'/><category term='Service Call Management'/><category term='eConnect'/><category term='Business Process Improvement'/><category term='Purchase Order Processing'/><category term='Training'/><title type='text'>MBS Guru</title><subtitle type='html'>Reviewing, exploring, and customizing Microsoft Dynamics GP... among other things</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>95</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-14548861.post-1509207359032216442</id><published>2011-12-28T15:03:00.007-06:00</published><updated>2011-12-28T15:29:28.915-06:00</updated><title type='text'>Dynamics GP ActiveX component can't create object run-time error 429</title><content type='html'>&lt;div&gt;Recently I was asked to look into an error a client was receiving while standing up a new Citrix server installation for their Dynamics GP 9 clients:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href="http://3.bp.blogspot.com/-675laoSkuEo/TvuFE4oq9DI/AAAAAAAAADc/rmGe5h9hm5c/s1600/error.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img src="http://3.bp.blogspot.com/-675laoSkuEo/TvuFE4oq9DI/AAAAAAAAADc/rmGe5h9hm5c/s320/error.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5691288873081697330" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 320px; height: 180px; " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;NOTE: If you are recieving this error while attempting to upgrade from Dynamics GP 9 to Dynamics GP 10, see &lt;a href="http://support.microsoft.com/kb/972245"&gt;this article&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;When we hit the debug button to look at the underlying VBA code, we saw this line:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;img src="http://1.bp.blogspot.com/-hiKM3_pbw_8/TvuFvgP9xOI/AAAAAAAAAEA/kg1mMQ5d-bM/s400/vba.png" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 32px;" border="0" alt="" id="BLOGGER_PHOTO_ID_5691289605269996770" /&gt;&lt;div&gt;&lt;div style="text-align: left;"&gt;Based on the line of VBA code above, I knew that a connection to a database was needed, and the RetrieveGlobals9.dll was not installed on the new Citrix server. You might see slightly different code in your VBA, but the important part was that it was trying to call CreateObject on RetreiveGlobals9.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;The first step to solve this problem was to download a copy of RetrieveGlobals9.dll from Partner Source at &lt;a href="https://mbs.microsoft.com/partnersource/documentation/howtoarticles/modifiervbasamples90.htm?printpage=false"&gt;this URL&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Contact your partner to download this for you if you don't have access to Partner Source. Place the file into the Microsoft Dynamics GP folder in the Program Files directory. Since this was a 64-bit machine, the Microsoft Dynamics GP folder was in Program Files (x86).&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Next, open a command prompt in &lt;a href="http://www.sevenforums.com/tutorials/783-elevated-command-prompt.html"&gt;elevated mode&lt;/a&gt;.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Finally, to register the .dll, type:&lt;/div&gt;&lt;div style="text-align: left;"&gt;Regsvr32 "C:\Program Files (x86)\Microsoft Dynamics\GP\RetrieveGlobals9.dll"&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;You will need to include the quotes because the directories have spaces in them.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;If everything worked properly, you'll receive a confirmation that the .dll was registered successfully.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href="http://2.bp.blogspot.com/-_9mcG_t1gjI/TvuFyQMPPZI/AAAAAAAAAEM/444LoXiYB9s/s1600/register.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 202px;" src="http://2.bp.blogspot.com/-_9mcG_t1gjI/TvuFyQMPPZI/AAAAAAAAAEM/444LoXiYB9s/s400/register.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5691289652499004818" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After these steps were complete, we were able to open and use Microsoft Dynamics GP without receiving the initial VBA error.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;Hope it helps!&lt;/div&gt;&lt;div style="text-align: left;"&gt;Bryan Prince&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" &gt;&lt;u&gt;&lt;br /&gt;&lt;/u&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" &gt;&lt;u&gt;&lt;br /&gt;&lt;/u&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-1509207359032216442?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/1509207359032216442/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=1509207359032216442' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/1509207359032216442'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/1509207359032216442'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2011/12/dynamics-gp-activex-component-cant.html' title='Dynamics GP ActiveX component can&apos;t create object run-time error 429'/><author><name>Bryan Prince</name><uri>http://www.blogger.com/profile/01546244332553420397</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_kmsFfywkr8s/Snod8q0sx3I/AAAAAAAAAAM/dl6TPmvvSq4/S220/n1546945975_2653.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-675laoSkuEo/TvuFE4oq9DI/AAAAAAAAADc/rmGe5h9hm5c/s72-c/error.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-7196327351463105573</id><published>2011-08-28T11:37:00.004-05:00</published><updated>2011-08-28T20:10:24.820-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Record Lock Trace'/><category scheme='http://www.blogger.com/atom/ns#' term='MJ Solution'/><title type='text'>Record Lock Trace v 2.0</title><content type='html'>I've updated the &lt;a href="http://mbsguru.blogspot.com/p/lock-trace-utility-for-dynamics-gp.html"&gt;Lock Trace Utility for Dynamics GP&lt;/a&gt; with 2 new features.&lt;br /&gt;&lt;br /&gt;The first enhancement will replace the standard "This &lt;u&gt;batch&lt;/u&gt; is being edited by &lt;u&gt;another user&lt;/u&gt;" prompt when attempting to post or delete a SOP Batch with the name of the user that has the batch locked with an activity record in SY00800.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-Pq6r3MJMGnY/Tlpq68_KYDI/AAAAAAAAAT4/hjEEJMQKFHM/s1600/BatchEditedAnotherUser.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="243" src="http://2.bp.blogspot.com/-Pq6r3MJMGnY/Tlpq68_KYDI/AAAAAAAAAT4/hjEEJMQKFHM/s400/BatchEditedAnotherUser.gif" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;The second enhancement will clear all records that are locked by users that are not actively logged in to GP. &amp;nbsp;This will be executed when attempting to access a transaction locked by a user that is not actively logged in. &amp;nbsp;After, the record will be available and the following prompt will be presented.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-zap_bPOqkvA/TlrlPdTjSZI/AAAAAAAAAUA/wo4YxFKSj_w/s1600/LockedRecordsCleared.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="140" src="http://4.bp.blogspot.com/-zap_bPOqkvA/TlrlPdTjSZI/AAAAAAAAAUA/wo4YxFKSj_w/s400/LockedRecordsCleared.gif" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;The basic delete statements executed by this feature are listed below:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;delete tempdb.dbo.dex_lock where session_id not in (select SQLSESID from dynamics.dbo.activity)&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;delete tempdb.dbo.dex_session where session_id not in (select SQLSESID from dynamics.dbo.activity)&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;delete DYNAMICS.dbo.SY00800 where userid not in (select USERID from DYNAMICS.dbo.activity)&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;If you are not sure what version of the utility you have installed, since there isn't a GUI, I've updated the about message to include the version information.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-xUrpSZYruto/TlpreM-EnwI/AAAAAAAAAT8/db6-fQWYrEk/s1600/AboutRecordLockTrace.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="146" src="http://4.bp.blogspot.com/-xUrpSZYruto/TlpreM-EnwI/AAAAAAAAAT8/db6-fQWYrEk/s400/AboutRecordLockTrace.gif" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://www.box.net/shared/kz6cp83avl"&gt;Download Record Lock Trace for Dynamics GP here&lt;/a&gt; or &lt;a href="http://mbsguru.blogspot.com/p/lock-trace-utility-for-dynamics-gp.html"&gt;view the product page for more information&lt;/a&gt;. &amp;nbsp;Please leave a comment if there are other features or transaction types that you would like added to this utility.&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-7196327351463105573?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/7196327351463105573/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=7196327351463105573' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/7196327351463105573'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/7196327351463105573'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2011/08/record-lock-trace-v-20.html' title='Record Lock Trace v 2.0'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-Pq6r3MJMGnY/Tlpq68_KYDI/AAAAAAAAAT4/hjEEJMQKFHM/s72-c/BatchEditedAnotherUser.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-5553619737940364764</id><published>2011-08-09T21:53:00.005-05:00</published><updated>2011-08-10T12:40:01.195-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOP Batch Reconcile'/><category scheme='http://www.blogger.com/atom/ns#' term='Sales Order Processing'/><category scheme='http://www.blogger.com/atom/ns#' term='MJ Solution'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio Toolkit'/><title type='text'>Reconciling SOP Batches from WITHIN Dynamics GP</title><content type='html'>An article I posted sometime ago with a &lt;a href="http://mbsguru.blogspot.com/2010/08/reconciling-sop-batches-in-dynamics-gp.html"&gt;SQL Script that would reconcile SOP Batch Totals&lt;/a&gt; has really developed legs recently. &amp;nbsp;It's been downloaded several times a week for several months. &amp;nbsp;As a result, I felt some enhancement was in order.&lt;br /&gt;&lt;br /&gt;To that end, I've compiled the same logic, with few exceptions, into an assembly you can &lt;a href="http://www.box.net/shared/poz7e15lsci05k5dkztr"&gt;download here&lt;/a&gt;. &amp;nbsp;Copy this to your Addins folder and then you can perform this same function from the Sales Batch Entry Additional Menu without having to run a SQL script or access the Reconcile Receivable Amounts Window in GP.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-kJrJ5MveyfA/TkHw4fWp7bI/AAAAAAAAAT0/r2vhF9_P7YM/s1600/SOPBatchRec.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="243" src="http://2.bp.blogspot.com/-kJrJ5MveyfA/TkHw4fWp7bI/AAAAAAAAAT0/r2vhF9_P7YM/s400/SOPBatchRec.gif" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;One exception to the logic in the script is that this &lt;strong&gt;&lt;em&gt;&lt;u&gt;will not delete empty batches&lt;/u&gt;&lt;/em&gt;&lt;/strong&gt;.&amp;nbsp; If you have an opinion as to how valuable that feature might be please leave a comment and I will evolve this accordingly.&amp;nbsp; This utility will simply do the following:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;strong&gt;Update batch totals for those that are &lt;em&gt;NOT locked by a user with a Batch Activity Record (SY00800).&lt;/em&gt;&lt;/strong&gt;&amp;nbsp; This was not designed to reconcile a specific batch but rather all batches at once.&amp;nbsp; So, don't select a batch in Sales Batch Entry when executing this routine unless you want the batch selected to be excluded from the logic.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Create missing Batch Header records for batches that do exist in SOP WORK (SOP10100) but not SY00500.&lt;/strong&gt;&lt;/li&gt;&lt;/ol&gt;This will be especially useful if you want to enable GP users to resolve SOP Batch Total discrepancies on their own without having to grant them access to the Reconcile Receivables Amounts window.&lt;br /&gt;&lt;br /&gt;This was developed on GP 2010 and tested on both GP 2010 and GP 10.&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-5553619737940364764?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/5553619737940364764/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=5553619737940364764' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/5553619737940364764'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/5553619737940364764'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2011/08/reconciling-sop-batches-from-within.html' title='Reconciling SOP Batches from WITHIN Dynamics GP'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-kJrJ5MveyfA/TkHw4fWp7bI/AAAAAAAAAT0/r2vhF9_P7YM/s72-c/SOPBatchRec.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-5095592837483632008</id><published>2011-06-07T13:35:00.003-05:00</published><updated>2011-06-07T13:57:13.667-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint'/><title type='text'>Resolving "Error occurred in deployment step 'Activate Features': Invalid file name"</title><content type='html'>The other day I was working on a SharePoint project that required the deployment of a Content Type, a List Template, a couple of List Instances and a couple of Feature Receivers.  Things were coming along well until I started to reorganize the project.  I dragged the List Instances into the List Template folder and renamed several folders to better represent their purposes.  When I went to deploy, I got the error: "Error occurred in deployment step 'Activate Features': Invalid file name".&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I looked around the .spdata files, checked the Feature file and double-checked them all again.  Everything looked right.  The &lt;a href="http://archive.msdn.microsoft.com/ULSViewer"&gt;ULS Logger&lt;/a&gt; wasn't much help but it did give me the actual exception: "Exception: Microsoft.SharePoint.SPException: Invalid file name.  The file name you specified could not be used.  It may be the name of an existing file or directory, or you may not have permission to access the file"&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Still not much help.  I removed all the items from the feature and was able to deploy successfully.  Unfortunately, a feature that doesn't do anything isn't much good so I started adding items and deploying one at a time.  Feature Receivers: Check.  Content Type: Check.  List Template: Check.  List Instance: Failed.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After looking at the List Instance for a while and not seeing the problem, I deleted the Instance from the project and recreated it from scratch.  I added it to the feature, deployed and it failed again.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I went through the List Template again and saw the familiar warning:&lt;/div&gt;&lt;div&gt;&lt;pre style="font-family: Consolas; font-size: 13px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: white; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;span style="color: blue; "&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21); "&gt;xml&lt;/span&gt;&lt;span style="color: blue; "&gt; &lt;/span&gt;&lt;span style="color: red; "&gt;version&lt;/span&gt;&lt;span style="color: blue; "&gt;=&lt;/span&gt;"&lt;span style="color: blue; "&gt;1.0&lt;/span&gt;"&lt;span style="color: blue; "&gt; &lt;/span&gt;&lt;span style="color: red; "&gt;encoding&lt;/span&gt;&lt;span style="color: blue; "&gt;=&lt;/span&gt;"&lt;span style="color: blue; "&gt;utf-8&lt;/span&gt;"&lt;span style="color: blue; "&gt;?&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="font-family: Consolas; font-size: 13px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: white; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;span style="color: blue; "&gt;&lt;/span&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 255); "&gt;&amp;lt;&lt;/span&gt;Elements&lt;/span&gt;&lt;span style="color: blue; "&gt; &lt;/span&gt;&lt;span style="color: red; "&gt;xmlns&lt;/span&gt;&lt;span style="color: blue; "&gt;=&lt;/span&gt;"&lt;span style="color: blue; "&gt;http://schemas.microsoft.com/sharepoint/&lt;/span&gt;"&lt;span style="color: blue; "&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="font-family: Consolas; font-size: 13px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: white; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;span style="color: blue; "&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 255); "&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: blue; "&gt;!--&lt;/span&gt;&lt;span style="color: green; "&gt; Do not change the value of the Name attribute below. &lt;/span&gt;&lt;/pre&gt;&lt;pre style="font-family: Consolas; font-size: 13px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: white; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;span style="color: green; "&gt;If it does not match the folder name of the List Definition project item, &lt;/span&gt;&lt;/pre&gt;&lt;pre style="font-family: Consolas; font-size: 13px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: white; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;span style="color: green; "&gt;an error will occur when the project is run. &lt;/span&gt;&lt;span style="color: blue; "&gt;--&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="font-family: Consolas; font-size: 13px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: white; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;span style="color: blue; "&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 255); "&gt;&amp;lt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(163, 21, 21); "&gt;ListTemplate&lt;/span&gt;&lt;/pre&gt;&lt;pre style="font-family: Consolas; font-size: 13px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: white; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;span class="Apple-style-span" style="color: rgb(163, 21, 21); "&gt;&lt;/span&gt;&lt;span style="color: blue; "&gt;        &lt;/span&gt;&lt;span style="color: red; "&gt;Name&lt;/span&gt;&lt;span style="color: blue; "&gt;=&lt;/span&gt;"&lt;span style="color: blue; "&gt;OldFolderName&lt;/span&gt;"&lt;/pre&gt;&lt;pre style="font-family: Consolas; font-size: 13px; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: white; background-position: initial initial; background-repeat: initial initial; "&gt;&lt;span style="color: blue; "&gt;        &lt;/span&gt;&lt;span style="color: red; "&gt;Type&lt;/span&gt;&lt;span style="color: blue; "&gt;=&lt;/span&gt;"&lt;span style="color: blue; "&gt;10001&lt;/span&gt;"&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;I had renamed the List Template folder from within Visual Studio but it did not update the ListTemplate Name element.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After correcting the Name to match the new folder name everything worked and the world was right again.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;Add Solution:&lt;/div&gt;&lt;div&gt;  Found 1 deployment conflict(s).  Resolving conflicts ...&lt;/div&gt;&lt;div&gt;  Deleted list instance 'Lists/SomeAwesomeList' from server.&lt;/div&gt;&lt;div&gt;  Adding solution 'SomeAwesomeSolution.wsp'...&lt;/div&gt;&lt;div&gt;  Deploying solution 'SomeAwesomeSolution.wsp'...&lt;/div&gt;&lt;div&gt;Activate Features:&lt;/div&gt;&lt;div&gt;  Activating feature 'SomeAwesomeFeature' ...&lt;/div&gt;&lt;div&gt;Run Post-Deployment Command:&lt;/div&gt;&lt;div&gt;  Skipping deployment step because a post-deployment command is not specified.&lt;/div&gt;&lt;div&gt;========== Build: 1 succeeded or up-to-date, 0 failed, 0 skipped ==========&lt;/div&gt;&lt;div&gt;========== Deploy: 1 succeeded, 0 failed, 0 skipped ==========&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-5095592837483632008?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/5095592837483632008/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=5095592837483632008' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/5095592837483632008'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/5095592837483632008'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2011/06/resolving-error-occurred-in-deployment.html' title='Resolving &quot;Error occurred in deployment step &apos;Activate Features&apos;: Invalid file name&quot;'/><author><name>Lance Russell</name><uri>http://www.blogger.com/profile/11780142384048582104</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://1.bp.blogspot.com/_nljV1N_Z82A/TT63g1O5ftI/AAAAAAAAAAM/mQwBQHUkX30/s220/lrphoto.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-7747556171488308937</id><published>2011-04-25T18:42:00.000-05:00</published><updated>2011-04-25T18:42:52.684-05:00</updated><title type='text'>The Dynamics GP Blogster: Microsoft Dynamics GP 2010 R2 is hot off the press...</title><content type='html'>&lt;a href="http://dynamicsgpblogster.blogspot.com/2011/04/microsoft-dynamics-gp-2010-r2-is-hot.html?spref=bl"&gt;The Dynamics GP Blogster: Microsoft Dynamics GP 2010 R2 is hot off the press...&lt;/a&gt;: "Microsoft has made GP 2010 R2 available prior to the original launch date of May 1, 2011. The product can be downloaded from CustomerSource ..."&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-7747556171488308937?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://dynamicsgpblogster.blogspot.com/2011/04/microsoft-dynamics-gp-2010-r2-is-hot.html?spref=bl' title='The Dynamics GP Blogster: Microsoft Dynamics GP 2010 R2 is hot off the press...'/><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/7747556171488308937/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=7747556171488308937' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/7747556171488308937'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/7747556171488308937'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2011/04/dynamics-gp-blogster-microsoft-dynamics.html' title='The Dynamics GP Blogster: Microsoft Dynamics GP 2010 R2 is hot off the press...'/><author><name>Bryan Prince</name><uri>http://www.blogger.com/profile/01546244332553420397</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_kmsFfywkr8s/Snod8q0sx3I/AAAAAAAAAAM/dl6TPmvvSq4/S220/n1546945975_2653.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-7727317185564729750</id><published>2011-04-15T20:16:00.004-05:00</published><updated>2011-04-15T20:33:04.927-05:00</updated><title type='text'>File not found: VBA6.DLL in Microsoft Dynamics GP 9 Visual Basic Editor</title><content type='html'>Today I started a new project that had a requirement to create a new form in Microsoft Dynamics GP 9 to track additional item attributes.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;On a clean install of Windows 7 32-bit, Office 2010, and Microsoft Dynamics GP 9, I received the file not found VBA6.dll error as soon as I'd made my first VBA modification:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;img src="http://3.bp.blogspot.com/-hEd339DPWcg/TajvZi8SfBI/AAAAAAAAABk/-9WA-nywu14/s320/Filenotfound.png" style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 255px; height: 178px;" border="0" alt="" id="BLOGGER_PHOTO_ID_5595985759163284498" /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I tried a few fixes including downloading and registering a new copy of the VBA6.DLL, but the error persisted.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Then I found &lt;a href="http://blogs.msdn.com/b/developingfordynamicsgp/archive/2010/08/27/file-not-found-vba6-dll-error-occurs-or-gp-crashes-and-creats-a-watson-fault-bucket-1474386816.aspx"&gt;a post by Beth Gardner&lt;/a&gt; describing the same problem. The resolution involved both a registry edit and the deletion of several files from the Dynamics GP folder.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The solution worked perfectly for me and I expect to see this problem more in the future as it seems to be related directly to an install of Office 2010.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I could not replicate the problem on a clean install of Windows Server 2008 R2 on which I had not installed Office 2010.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-7727317185564729750?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/7727317185564729750/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=7727317185564729750' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/7727317185564729750'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/7727317185564729750'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2011/04/file-not-found-vba6dll-in-microsoft.html' title='File not found: VBA6.DLL in Microsoft Dynamics GP 9 Visual Basic Editor'/><author><name>Bryan Prince</name><uri>http://www.blogger.com/profile/01546244332553420397</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_kmsFfywkr8s/Snod8q0sx3I/AAAAAAAAAAM/dl6TPmvvSq4/S220/n1546945975_2653.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-hEd339DPWcg/TajvZi8SfBI/AAAAAAAAABk/-9WA-nywu14/s72-c/Filenotfound.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-2499223429704728088</id><published>2011-04-03T11:45:00.000-05:00</published><updated>2011-04-03T11:45:32.210-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Dynamics GP'/><category scheme='http://www.blogger.com/atom/ns#' term='Contract Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='Field Service Series'/><title type='text'>Microsoft Responds with Excellent Customer Service</title><content type='html'>I discovered a problem in the way Dynamics GP Evergreen Contract Lines calculated revenue when 1) billing annually and 2) entering a quantity &amp;gt; 1 on the Contract Line. &amp;nbsp;Quite simply, it just didn't calculate the Total Amount on the Contact Line or the Invoice Amounts accurately. &amp;nbsp;This client is running GP 2010.&lt;br /&gt;&lt;br /&gt;This was discovered late in the implementation finally being logged as a bug by Microsoft Support just days before data conversion was to be completed for the cutover to production. &amp;nbsp;Yikes!! &amp;nbsp;I was in quite a pinch without a good Plan B just days before go live. &amp;nbsp;After discussing the situation with the Microsoft Field Service Development team they mobilized to produce a fix for this problem in just over 24 hours. &amp;nbsp;Great response!&lt;br /&gt;&lt;br /&gt;They really saved the day to ensure a smooth go live and successful Field Service Series implementation for my client. &amp;nbsp;A hotfix for this problem is forthcoming from Microsoft. &amp;nbsp;If you find yourself struggling with this issue when working with Evergreen Contracts in Dynamics GP Contract Administration shoot me a message and I'll help you get by in the meantime.&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-2499223429704728088?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/2499223429704728088/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=2499223429704728088' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/2499223429704728088'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/2499223429704728088'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2011/04/microsoft-responds-with-excellent.html' title='Microsoft Responds with Excellent Customer Service'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-4863238062511940456</id><published>2011-03-28T08:52:00.000-05:00</published><updated>2011-03-28T08:52:09.828-05:00</updated><title type='text'>Voting for the Most Influential People in Microsoft Dynamics continues...</title><content type='html'>Check out the Dynamics Community blog post on the &lt;a href="https://community.dynamics.com/product/gp/gptechnical/b/gpdba/archive/2011/03/22/top-100-most-influential-microsoft-dynamics-people-for-2011-new-links.aspx"&gt;voting for the most influential people in Microsoft Dynamics&lt;/a&gt;. &amp;nbsp;They did a great job of highlighting the Dynamics GP contingent to make it easy for you to vote. &amp;nbsp;They've moved me to &lt;a href="http://www.micropoll.com/a/mpview/1068215-406005"&gt;Poll 5&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-4863238062511940456?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/4863238062511940456/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=4863238062511940456' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/4863238062511940456'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/4863238062511940456'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2011/03/voting-for-most-influential-people-in.html' title='Voting for the Most Influential People in Microsoft Dynamics continues...'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-7177355521426217457</id><published>2011-03-15T07:41:00.000-05:00</published><updated>2011-03-15T07:41:01.847-05:00</updated><title type='text'>Dynamics World List of Influential People</title><content type='html'>I'm not really sure how, and no I did not nominate myself, but I made it into the top 260 nominees for Dynamics World's Microsoft Dynamics Most Influential People. &amp;nbsp;Thanks to who ever did nominate me. &amp;nbsp;You can view the list of nominees &lt;a href="http://www.dynamicsworld.co.uk/2011Voting.php"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Several of my old friends are on the list; Mark Polino, Ross Carlson, Dwight Specht, Troy Ensor, Bob McAdam, and Shane Hall to a name a few. &amp;nbsp;Plus some of my new friends like Mariano and Dave Musgrave will surely be moving up the list this year. &amp;nbsp;People like Andy Hafer really deserve the recognition for their contributions to the community as do all of the Dynamics MVPs that we all hear from so often. &amp;nbsp;Many of those who run the popular VAR and ISV organizations are on the list as well.&lt;br /&gt;&lt;br /&gt;You can vote for those that you think deserve recognition for their contributions at&amp;nbsp;&lt;a href="http://www.dynamicsworld.co.uk/2011Voting.php"&gt;http://www.dynamicsworld.co.uk/2011Voting.php&lt;/a&gt;. &amp;nbsp;You will have to scroll through the polls to find individuals you might want to vote for. &amp;nbsp;I'm in &lt;a href="http://micropoll.com/t/KEsEtZBwTW"&gt;Poll 11&lt;/a&gt;&amp;nbsp;as are Dwight Specht (IBIS), Tony DiBenedetto (TriBridge), Andy Hafer (GPUG), and Bill Marshall (MC2).&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-7177355521426217457?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/7177355521426217457/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=7177355521426217457' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/7177355521426217457'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/7177355521426217457'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2011/03/dynamics-world-list-of-influential.html' title='Dynamics World List of Influential People'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-8030976036290968922</id><published>2011-03-11T09:57:00.000-06:00</published><updated>2011-03-11T09:57:25.080-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VBA'/><category scheme='http://www.blogger.com/atom/ns#' term='Sales Order Processing'/><category scheme='http://www.blogger.com/atom/ns#' term='MJ Solution'/><title type='text'>Ooops!  I marked a SOP Line as Drop Ship after I fulfilled it</title><content type='html'>I recently received a request to lock down the Sales Transaction Entry Line Drop Ship checkbox when a line had been fulfilled. &amp;nbsp;This purpose was to prevent users from mistakenly marking a fulfilled line as Drop Shipped which automatically removes all of the Serial Numbers from the line.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To do this just add the Sales Transaction Entry window to Visual Basic. &amp;nbsp;Then add the Quantity Fulfilled field and Drop Ship checkbox to your project. &amp;nbsp;Copy the code below and paste it behind the SalesTransactionEntryDetail(Grid):&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;Private Sub Grid_AfterLineGotFocus()&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;DropShipLock&lt;/div&gt;&lt;div&gt;End Sub&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Private Sub QtyFulfilled_AfterUserChanged()&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;DropShipLock&lt;/div&gt;&lt;div&gt;End Sub&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Private Sub DropShipLock()&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;If QtyFulfilled.Value &amp;lt;&amp;gt; 0 Then&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Dropship.Enabled = False&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;Else&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Dropship.Enabled = True&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;End If&lt;/div&gt;&lt;div&gt;End Sub&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This will enable or disable the Drop Ship checkbox based on whether the Quantity Fulfilled is equal to 0 on both the Grid After Line Got focus and&amp;nbsp;Quantity&amp;nbsp;Fulfilled After User Changed events.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You can do this yourself as I describe above or download and import the &lt;a href="http://www.box.net/shared/gsfdefmmaa"&gt;package file with this code here&lt;/a&gt;.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-8030976036290968922?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/8030976036290968922/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=8030976036290968922' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/8030976036290968922'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/8030976036290968922'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2011/03/ooops-i-marked-sop-line-as-drop-ship.html' title='Ooops!  I marked a SOP Line as Drop Ship after I fulfilled it'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-593311137939881293</id><published>2011-03-08T07:45:00.000-06:00</published><updated>2011-03-08T07:45:29.648-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MJ Solution'/><category scheme='http://www.blogger.com/atom/ns#' term='Password Expiration Prompt'/><title type='text'>GP Password Expired mid-day... while I was posting a Batch</title><content type='html'>I was recently talking shop with another consultant that has a customer who's Dynamics GP password was valid when they logged in but expired after causing a batch posting interruption. &amp;nbsp;Has this ever happened to you?&lt;br /&gt;&lt;br /&gt;He submitted a support request to Microsoft to explain this issue and seek out a resolution. &amp;nbsp;The response he received was:&lt;br /&gt;&lt;br /&gt;As for ways to overcome the password becoming invalid mid-day, there are two options:&lt;br /&gt;&lt;br /&gt;1. Keep the password synchronized (time-wise) with the windows password and use the windows password reminder as a GP password reminder&lt;br /&gt;2. Use the GP Password Expiration Notification utility, freely available from the blog link below&lt;br /&gt;&lt;br /&gt;&lt;a href="http://mbsguru.blogspot.com/p/dynamics-gp-password-expiration-notice.html"&gt;http://mbsguru.blogspot.com/p/dynamics-gp-password-expiration-notice.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Microsoft recommended the&amp;nbsp;GP Password Expiration Notification utility&amp;nbsp;with qualification, of course, that it is not something Microsoft created or provides support for. &amp;nbsp;Even so, it's nice to see that this utility is serving the community well by helping to solve and prevent common problems.&lt;br /&gt;&lt;br /&gt;If you haven't downloaded it already you should before you have to recover from a batch posting interruption because your password has expired.&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-593311137939881293?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/593311137939881293/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=593311137939881293' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/593311137939881293'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/593311137939881293'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2011/03/gp-password-expired-mid-day-while-i-was.html' title='GP Password Expired mid-day... while I was posting a Batch'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-1477859869734154500</id><published>2011-03-04T10:57:00.003-06:00</published><updated>2011-03-04T11:00:22.552-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Reporting Services'/><category scheme='http://www.blogger.com/atom/ns#' term='Business Intelligence'/><category scheme='http://www.blogger.com/atom/ns#' term='Contract Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='Field Service Series'/><title type='text'>Dynamics GP 2010 R2 Feature List</title><content type='html'>Straight out of Tech Conference in Fargo this week, thanks to Dave Musgrave&amp;nbsp;&lt;a href="http://blogs.msdn.com/b/developingfordynamicsgp/archive/2011/03/04/microsoft-dynamics-gp-technical-conference-2011-day-1-morning.aspx"&gt;http://blogs.msdn.com/b/developingfordynamicsgp/archive/2011/03/04/microsoft-dynamics-gp-technical-conference-2011-day-1-morning.aspx&lt;/a&gt;,&amp;nbsp;I came across this graphic that lists some of the exciting new features coming out with Dynamics GP 2010 R2:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh3.googleusercontent.com/-HdTIMHLA3Ug/TXENevOffoI/AAAAAAAAARc/nnnzXIvFrds/s1600/DynGP2010R2FeatureList.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="298" src="https://lh3.googleusercontent.com/-HdTIMHLA3Ug/TXENevOffoI/AAAAAAAAARc/nnnzXIvFrds/s400/DynGP2010R2FeatureList.gif" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Dave goes on to explain that not only is Dynamics GP not being laid to rest as some have speculated since Microsoft begin investing in Dynamics AX nearly a decade ago but rather in a future release they are planning to include a web based client for Dynamics GP. &amp;nbsp;That's a great improvement that I think we can all look forward to but first let's look at what's coming now:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Field Service Series customers should be looking forward to some of the FSS enhancements on deck:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;The Contract Line Hold feature is well overdue. &amp;nbsp;I've had several clients that need this functionality.&lt;/li&gt;&lt;li&gt;Tech Stock Replenishment will be a much welcomed addition. &amp;nbsp;I'm actively working on a project where we are having to work around this.&lt;/li&gt;&lt;li&gt;Contract Transfer Approval Workflow is something else our Contract Admin clients have been asking for. &amp;nbsp;It's as though Microsoft is reading my mind.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;The Reporting and BI enhancements for Dynamics GP seem endless:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;More Excel Report functionality; Bulk Deployment, Group Excel Reports, Multi-Company Support, and Default Column Ordering will be great enhancements.&lt;/li&gt;&lt;li&gt;MORE Analytical SSRS Reports and Metrics. &amp;nbsp;I'm not sure any of us can get enough of those!&lt;/li&gt;&lt;li&gt;New Business Analyzer! &amp;nbsp;Mariano touches on that in his coverage of the conference here&amp;nbsp;&lt;a href="http://dynamicsgpblogster.blogspot.com/2011/03/microsoft-dynamics-gp-technical_02.html"&gt;http://dynamicsgpblogster.blogspot.com/2011/03/microsoft-dynamics-gp-technical_02.html&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;MORE Word Templates; SOP Returns and Word Template Generator. &amp;nbsp;I was skeptical of the Word Templates after first seeing them at Tech Conference 2010 but I have to admit they're growing on me.&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;br /&gt;There are several other great features and enhancements to Extender, Deployment and Migration Tools, and Email Support among others. &amp;nbsp;It's always good to see that Microsoft continues to invest in what is already such a fantastic product. &amp;nbsp;Well done.&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-1477859869734154500?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/1477859869734154500/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=1477859869734154500' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/1477859869734154500'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/1477859869734154500'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2011/03/dynamics-gp-2010-r2-feature-list.html' title='Dynamics GP 2010 R2 Feature List'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh3.googleusercontent.com/-HdTIMHLA3Ug/TXENevOffoI/AAAAAAAAARc/nnnzXIvFrds/s72-c/DynGP2010R2FeatureList.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-8046715365394348630</id><published>2011-03-03T11:41:00.000-06:00</published><updated>2011-03-03T11:41:05.572-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Events'/><title type='text'>Join us at our Microsoft Dynamics CRM 2011 Launch Event</title><content type='html'>Are you ready to renew your focus on business productivity?  Then join us at our exclusive Microsoft Dynamics CRM 2011 launch event in Nashville where we will be exploring the power of the most highly anticipated CRM release in years.&lt;br /&gt;&lt;br /&gt;This in-person event, hosted by &lt;a href="http://www.straightarrowusa.com/"&gt;Straight Arrow Consulting, Inc.&lt;/a&gt; CEO &lt;a href="http://www.linkedin.com/in/trkarp"&gt;Tom Karpowich&lt;/a&gt;, will include a live demonstration from a true CRM expert - &lt;a href="http://www.linkedin.com/in/benvollmer"&gt;Ben Vollmer&lt;/a&gt;, as he shares with you ways he has helped other companies boost sales, improve marketing performance and enhance customer service through better use of their CRM technology. Ben is known for his impressive energy and deep technical expertise - You will enjoy this time with such a true CRM guru!&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This event is geared towards a select group of business and technical professionals—allowing you to network with Microsoft professionals and other customers in your area in&amp;nbsp;an open, round-table style discussion about the concept and place of CRM in modern business. &amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;We’ll help you envision your organization reaching unparalleled levels of effectiveness with:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;The fluent Microsoft Office user experience which saves employees time and increases adoption&lt;/li&gt;&lt;li&gt;More insightful and actionable dashboard data&lt;/li&gt;&lt;li&gt;Built in business connections, team management and process collaboration&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;The Microsoft Dynamics CRM 2011 Launch Event takes place on Wednesday, March 16th, 2011 at 8:15am. It could be that start you need to renew your focus on your own business’ productivity!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Visit&amp;nbsp;&lt;a href="http://www.straightarrowusa.com/microsoft-dynamics-crm/crm-2011"&gt;http://www.straightarrowusa.com/microsoft-dynamics-crm/crm-2011&lt;/a&gt;&amp;nbsp;for more information or register now at&amp;nbsp;&lt;a href="https://www.clicktoattend.com/invitation.aspx?code=152507"&gt;https://www.clicktoattend.com/invitation.aspx?code=152507&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I hope to see you there!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-8046715365394348630?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/8046715365394348630/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=8046715365394348630' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/8046715365394348630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/8046715365394348630'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2011/03/join-us-at-our-microsoft-dynamics-crm.html' title='Join us at our Microsoft Dynamics CRM 2011 Launch Event'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-625111397847596497</id><published>2011-03-02T07:47:00.006-06:00</published><updated>2011-03-03T12:09:13.219-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Dynamics GP'/><category scheme='http://www.blogger.com/atom/ns#' term='eConnect'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint'/><category scheme='http://www.blogger.com/atom/ns#' term='Workflow'/><category scheme='http://www.blogger.com/atom/ns#' term='Business Process Improvement'/><title type='text'>Love, Hate and the ViewState</title><content type='html'>I was recently tasked with creating a SharePoint interface to Microsoft Dynamics GP Item Maintenance. As the client's business had grown, inconsistencies in theirItem Master became apparent. When new items were needed, a similar existing item was copied and the details updated to match the new item. If there were no similar items, a new item&amp;nbsp;was created.&lt;br /&gt;&lt;br /&gt;The problem was, many of the existing items were not properly categorized. There were people in the organization who knew bits of information about items, but nobody had all the information to correctly set up an item. Setting up an item properly required a combination of phone calls, emails and a little bit of luck. It could sometimes take weeks to get the item set up. This held up BOMs, Routings and pretty much everything else dependent on the new item.&lt;br /&gt;&lt;br /&gt;As usual for a new project, we started with a discovery phase. We tried to identify the groups that knew the necessary bits of information about items and proceeded to schedule interviews. During the interviews we gathered a lot of information to help us get started. We also found several points that were unclear: i.e. Accounting said Billing provides this. Billing said it was Sales, Sales thought it was Purchasing, Purchasing pointed to Engineering and Engineering said it was Accounting. After a few round trips, we were able to pin most things down but in the end, there were still a few bits of information that nobody understood. &lt;br /&gt;&lt;br /&gt;It was clear the Workflow would have to be very flexible. Adding to the complexity, some Items could bypass entire groups. For example, there's no need to set a price on an item if you don’t sell it. And why bother Purchasing if you are making this item in your own shop? &lt;br /&gt;&lt;br /&gt;To solve this business problem, we needed to deliver a product with:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Flexible Workflow rules that could be adapted as the business changes (and as the users work with the system and discover steps that had been overlooked.)&lt;/li&gt;&lt;li&gt;Field-Level security to ensure each group can only edit their section.&lt;/li&gt;&lt;li&gt;The ability to assign some fields to multiple groups and users.&lt;/li&gt;&lt;li&gt;The ability to add new fields and groups as new requirements surface.&lt;/li&gt;&lt;li&gt;Audit Logging for accountability.&lt;/li&gt;&lt;li&gt;An intuitive User Interface.&lt;/li&gt;&lt;li&gt;The ability to open, edit and copy existing GP Items.&lt;/li&gt;&lt;li&gt;The ability to push the approved changes back to GP.&lt;/li&gt;&lt;/ul&gt;This was not a simple SharePoint WebPart with an ASP.NET Form you can throw on a Page and start using. The form had to be generated dynamically, with different sections editable by different users. Lookup Fields had to be populated dynamically. Some based on values stored in GP like Class Code, others with a Hard-Coded list of choices, like Item Type. Oh, and new lookup fields could be added at any time. &lt;br /&gt;&lt;br /&gt;What's more, the fields and their rules were not known at design time. All the metadata describing the rules had to be parsed during form generation and postback. &lt;br /&gt;&lt;br /&gt;While building this application I ran into a few challenges. One in particular had to do with updating posted values based on business rules and then rendering the fields, &lt;strong&gt;not as the user had posted, but as the rules dictated&lt;/strong&gt;. Now that you know the background, how do we make this happen? &lt;br /&gt;&lt;br /&gt;The ViewState is great! It makes your life as a web developer so much easier. Some action causes a postback and all the fields are repopulated with their values. You can handle events for a control without having to worry about the rest of the form. Controls get their IDs set automatically. What's not to love? Plenty.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;The ViewState is transmitted and parsed with every page post/load cycle using bandwidth, memory and CPU cycles for the server and the client. &lt;/li&gt;&lt;li&gt;The ViewState, while encoded, is not encrypted. I've seen this argument and I don’t think it's really all that relevant. After all, you are sending the same information back and forth through the form fields. And if you need to keep a secret, use HTTPS. &lt;/li&gt;&lt;li&gt;The ViewState is &lt;span style="text-decoration: line-through;"&gt;persistent &lt;/span&gt;insistent. If I take the users' submitted data and do some processing on the backend, I just might want to change some values on the form when it is sent back. Suppose they tried to order 100 widgets but you just sold some and you only have 75. Send the form back to the user with quantity set to 75 and display a nice alert telling them they are lucky to get that many. Thanks to ViewState, the quantity field gets set back to 100 automatically. I know, JavaScript could validate the page before the user submits. But what if the user is running without JavaScript? I know I do unless I'm on a trusted page. Add-ons like NoScript offer significant protection while surfing and after a whitelisting your common sites, they pretty much stay out of the way. But even with JavaScript, if I'm dealing with Dynamic Data, (what other kind is there?) the validation rules may have changed since the page was loaded. I suppose I could build some AJAXy validation JavaScript, but again, you can't count on JavaScript being there and you should never trust anything a user submits, even if you think your JavaScript has sanitized it.&lt;/li&gt;&lt;/ol&gt;So, lets say we want to prevent ViewState from running. Easy enough, just set the EnableViewState property of the control to false:&lt;br /&gt;&lt;br /&gt;&lt;pre style="background: white; color: black; font-family: Consolas; font-size: 13;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;TextBox&lt;/span&gt;&amp;nbsp;t&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;TextBox&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;t.EnableViewState&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;false&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;t.Text&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;this&lt;/span&gt;.ToString();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;t;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;And what if you want to disable ViewState on the whole page? &lt;br /&gt;&lt;br /&gt;&lt;pre style="background: white; color: black; font-family: Consolas; font-size: 13;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;void&lt;/span&gt;&amp;nbsp;Page_Init(&lt;span style="color: blue;"&gt;object&lt;/span&gt;&amp;nbsp;sender,&amp;nbsp;System.&lt;span style="color: #2b91af;"&gt;EventArgs&lt;/span&gt;&amp;nbsp;e)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;this&lt;/span&gt;.EnableViewState&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;false&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;//do&amp;nbsp;some&amp;nbsp;other&amp;nbsp;interesting&amp;nbsp;stuff&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/pre&gt;&lt;br /&gt;So, you’ve defeated the ViewState on a couple of projects and now it's time to build a SharePoint Web Part. Create the Web Part, add some controls, disable ViewState, deploy the Web Part and life is good! And we still have time to make happy hour (the first one!) &lt;br /&gt;&lt;br /&gt;Wait a minute. Didn't you disable ViewState? Why aren't your backend changes sticking? Because SharePoint Web Parts love ViewState so much, they insist on using it. Disable it on the control? Doesn't matter. It happens anyway. &lt;code&gt;Control.ClearChildViewState()&lt;/code&gt; doesn't even help. How about firing up SharePoint Designer and disabling it for the entire Page that hosts the Web Part? Congratulations, you've done it, and you’ve disabled pretty much all the SharePoint functionality too. No, there has to be way around this.&lt;br /&gt;&lt;br /&gt;Actually, there are two:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Create a LiteralControl and build it's Text property with the HTML you need to create your form field. Now you can render the LiteralControl and IIS will never even see the field. Remember, you will have to inspect the Post Variables yourself to find out how many widgets you just sold. Unfortunately, I tend to make the occasional mistake dynamically building HTML from within a C Sharp app. Leave off a quote or miss a closing tag and your form starts acting really strange. That brings us to the other option. &lt;/li&gt;&lt;li&gt;Create your controls like normal and add them to parent controls if you like. No need to worry about the HTML, IIS will get it right. But instead of adding the controls to the page (or a page element) render them into the Text property of our friend the LiteralControl. Using a StringBuilder, a StringWriter and an HTMLTextWriter, it all falls into place &lt;br /&gt;&lt;pre style="background: white; color: black; font-family: Consolas; font-size: 13;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;//...Build&amp;nbsp;your&amp;nbsp;textbox&amp;nbsp;as&amp;nbsp;you&amp;nbsp;like.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green;"&gt;//Don't&amp;nbsp;forget&amp;nbsp;a&amp;nbsp;unique&amp;nbsp;ID.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;TextBox&lt;/span&gt;&amp;nbsp;tbQuantity&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;TextBox&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;LiteralControl&lt;/span&gt;&amp;nbsp;LControl&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;LiteralControl&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;LControl.Text&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;this&lt;/span&gt;.RenderControlToString(tbQuantity);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;this&lt;/span&gt;.Controls.Add(LControl);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="background: white; color: black; font-family: Consolas; font-size: 13;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;RenderControlToString(&lt;span style="color: #2b91af;"&gt;WebControl&lt;/span&gt;&amp;nbsp;Control)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;StringBuilder&lt;/span&gt;&amp;nbsp;sb&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;StringBuilder&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;using&lt;/span&gt;&amp;nbsp;(&lt;span style="color: #2b91af;"&gt;StringWriter&lt;/span&gt;&amp;nbsp;sw&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;StringWriter&lt;/span&gt;(sb))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;using&lt;/span&gt;&amp;nbsp;(&lt;span style="color: #2b91af;"&gt;HtmlTextWriter&lt;/span&gt;&amp;nbsp;textWriter&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;HtmlTextWriter&lt;/span&gt;(sw))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Control.RenderControl(textWriter);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;sb.ToString();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;Using the HtmlTextWriter, we have well-formed HTML without having to worry about ViewState moving our cheese. Even in a SharePoint Web Part. And as a bonus, the ID you assigned to the Control is the ID that will be returned. No prepending all the parent control IDs by IIS. This, too helps to reduce the page size and load time.&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-625111397847596497?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/625111397847596497/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=625111397847596497' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/625111397847596497'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/625111397847596497'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2011/03/love-hate-and-viewstate.html' title='Love, Hate and the ViewState'/><author><name>Lance Russell</name><uri>http://www.blogger.com/profile/11780142384048582104</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://1.bp.blogspot.com/_nljV1N_Z82A/TT63g1O5ftI/AAAAAAAAAAM/mQwBQHUkX30/s220/lrphoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-883051026680150963</id><published>2011-02-25T07:59:00.000-06:00</published><updated>2011-02-25T07:59:48.499-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cloud'/><title type='text'>Microsoft Dynamics ERP Push to the Cloud</title><content type='html'>The &lt;a href="http://www.softwareadvice.com/"&gt;Software Advice Blog&lt;/a&gt; has a &lt;a href="http://www.softwareadvice.com/articles/enterprise/can-microsoft-dynamics-erp-make-it-to-the-cloud-microsoft-executive-interview-1022211/"&gt;interview clip up with Guy Weismantel&lt;/a&gt;, Microsoft's Director of ERP Marketing, in which he discusses their strategy for moving Dynamics ERP to the cloud.&lt;br /&gt;&lt;br /&gt;He makes a good point; many ERP components are already delivered as cloud based services and we continue to move in that direction. &amp;nbsp;A complete, cloud based ERP won't be suitable for every Dynamics ERP customer but will prove to be a very good for many.&lt;br /&gt;&lt;br /&gt;Check out the clip at&amp;nbsp;&lt;a href="http://www.softwareadvice.com/articles/enterprise/can-microsoft-dynamics-erp-make-it-to-the-cloud-microsoft-executive-interview-1022211/"&gt;http://www.softwareadvice.com/articles/enterprise/can-microsoft-dynamics-erp-make-it-to-the-cloud-microsoft-executive-interview-1022211/&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-883051026680150963?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/883051026680150963/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=883051026680150963' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/883051026680150963'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/883051026680150963'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2011/02/microsoft-dynamics-erp-push-to-cloud.html' title='Microsoft Dynamics ERP Push to the Cloud'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-4829534660317128179</id><published>2011-02-16T11:58:00.001-06:00</published><updated>2011-08-28T11:41:15.235-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Record Lock Trace'/><category scheme='http://www.blogger.com/atom/ns#' term='MJ Solution'/><title type='text'>Updated: Lock Trace Utility for Dynamics GP - PO Support</title><content type='html'>I received a request to extend the Lock Trace functionality to support locked Purchase Orders. &amp;nbsp;It was a very simple change so I went ahead and implemented that functionality. &amp;nbsp;You can download this new version &lt;a href="http://www.box.net/shared/kz6cp83avl"&gt;here&lt;/a&gt;&amp;nbsp;if you're interested in knowing who has a Purchase Order locked when you attempt to access it.&lt;br /&gt;&lt;br /&gt;I started working on another feature for this utility but didn't want to hold&amp;nbsp;back&amp;nbsp;this new feature while working on that. &amp;nbsp;I created a product page &lt;a href="http://mbsguru.blogspot.com/p/lock-trace-utility-for-dynamics-gp.html"&gt;here&lt;/a&gt;&amp;nbsp;where I'll document release notes as this utility evolves.&lt;br /&gt;&lt;br /&gt;Keep the feedback coming. &amp;nbsp;I have several other ideas for this utility and would like to hear yours.&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-4829534660317128179?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/4829534660317128179/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=4829534660317128179' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/4829534660317128179'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/4829534660317128179'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2011/02/updated-lock-trace-utility-for-dynamics.html' title='Updated: Lock Trace Utility for Dynamics GP - PO Support'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-8095363346179773644</id><published>2011-02-16T11:01:00.000-06:00</published><updated>2011-02-16T11:01:54.733-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Convergence'/><category scheme='http://www.blogger.com/atom/ns#' term='Conference'/><title type='text'>Register Now to Save - Convergence 2011 in Atlanta!</title><content type='html'>The Early Registration Deadline for Convergence 2011 expires on February 21 and hotels are filling up. &amp;nbsp;That's just 5 days away!&lt;br /&gt;&lt;br /&gt;Register now at&amp;nbsp;&lt;a href="http://www.microsoft.com/dynamics/convergence/atlanta11/registration.aspx"&gt;http://www.microsoft.com/dynamics/convergence/atlanta11/registration.aspx&lt;/a&gt;&amp;nbsp;to save $300 off the regular price that kicks in on the 21st.&lt;br /&gt;&lt;br /&gt;Register 3+ people and receive another $100 off for the the 3rd + Attendee. &amp;nbsp;&lt;a href="http://www.straightarrowusa.com/"&gt;Straight Arrow&lt;/a&gt; took advantage of this one with many of us invading Atlanta this year. &amp;nbsp;Hope to see you there!&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-8095363346179773644?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/8095363346179773644/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=8095363346179773644' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/8095363346179773644'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/8095363346179773644'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2011/02/register-now-to-save-convergence-2011.html' title='Register Now to Save - Convergence 2011 in Atlanta!'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-9160574841973247389</id><published>2011-02-13T15:51:00.001-06:00</published><updated>2011-08-28T11:41:28.665-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Record Lock Trace'/><category scheme='http://www.blogger.com/atom/ns#' term='MJ Solution'/><title type='text'>Record Lock Trace Addon for Dynamics GP</title><content type='html'>&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Natively, Dynamics GP doesn't always do a good job of enabling users to resolve common issues on their own. &amp;nbsp;A classic example of this is the prompt displayed when attempting to access a record that is locked by another user. &amp;nbsp;By default, as a user you are presented with the very generic message:&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-PmRlyzdEOYE/TVhOMvSNUwI/AAAAAAAAAQ8/t9QZBlCB000/s1600/TrxEditedAnotherUser.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="155" src="http://1.bp.blogspot.com/-PmRlyzdEOYE/TVhOMvSNUwI/AAAAAAAAAQ8/t9QZBlCB000/s400/TrxEditedAnotherUser.gif" style="cursor: move;" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: left;"&gt;This is the message presented when attempting to access a document that is locked by another user in Sales Transaction Entry. &amp;nbsp;Now, you can download the&amp;nbsp;&lt;a href="http://www.box.net/shared/kz6cp83avl"&gt;free Record Lock Tracing addon for Dynamics GP&lt;/a&gt; (Tested on v10 and GP2010) that will replace this generic message with a message that includes the specific user that has the record locked:&lt;/div&gt;&lt;div class="separator" style="clear: both; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-NWemkGD1scw/TVhPaOGs8bI/AAAAAAAAARA/I1Jp279Dsjw/s1600/TrxEditedSpecificUser.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="172" src="http://4.bp.blogspot.com/-NWemkGD1scw/TVhPaOGs8bI/AAAAAAAAARA/I1Jp279Dsjw/s400/TrxEditedSpecificUser.gif" style="cursor: move;" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: left;"&gt;This has already solved some headaches for some of my clients&amp;nbsp;eliminating&amp;nbsp;the need to contact their internal IT department in order to determine which user has a record locked. &amp;nbsp;This is particularly useful during periods with heightened urgency such as when processing shipments and invoices at month end.&lt;/div&gt;&lt;div class="separator" style="clear: both; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: left;"&gt;This can be extended to include other transactions such as Purchase Orders. &amp;nbsp;I'm happy to build on this further if there is demand for it. &amp;nbsp;Please leave me a comment or send me an e-mail and let me know how I might extend this to add value for you.&lt;/div&gt;&lt;div class="separator" style="clear: both; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: left;"&gt;&lt;a href="http://www.box.net/shared/kz6cp83avl"&gt;Download Record Lock Tracing for Dynamics GP&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-9160574841973247389?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/9160574841973247389/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=9160574841973247389' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/9160574841973247389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/9160574841973247389'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2011/02/record-lock-trace-addon-for-dynamics-gp.html' title='Record Lock Trace Addon for Dynamics GP'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-PmRlyzdEOYE/TVhOMvSNUwI/AAAAAAAAAQ8/t9QZBlCB000/s72-c/TrxEditedAnotherUser.gif' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-4855967804258671888</id><published>2011-02-04T11:07:00.005-06:00</published><updated>2011-02-04T11:39:32.139-06:00</updated><title type='text'>Creating Customer Invoices using Sql Server Reporting Services 2008 R2</title><content type='html'>Recently I was tasked with creating a customer facing invoice using Sql Server Reporting Services 2008 R2. This particular client had employed a technique using Page Headers and Footers that didn't upgrade properly once they moved to hosting their reports in SharePoint 2010 Integrated mode.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Because Page Headers and Page Footers are not allowed to have references to data fields, the main issue was with how to consistently place a totals section in a fixed position at the bottom of the page without using a Page Footer.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Making the task even more difficult was the fact that this report should generate all customer invoices at once. Page numbering had to be based on the individual invoice, not the total pages in the "report". Although SSRS 2008 R2 has introduced a new method to reset page numbers on a group, explained by Chris Hays &lt;a href="http://blogs.msdn.com/b/chrishays/archive/2006/01/05/resetpagenumberongroup.aspx"&gt;here&lt;/a&gt;, I choose to generate my page numbers in SQL rather than in SSRS.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Each one of these techniques deserves a deep dive, but in general this report was accomplished by:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Using SQL Server window aggregate functions to both limit the number of invoice lines which should be presented on each page and to serve up the page numbers to be grouped upon and used in the display. Read this for more information: &lt;a href="http://msdn.microsoft.com/en-us/library/ms173454.aspx"&gt;Aggregate Functions&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Using one large cell of a table containing rectangles and a nested table for the order lines.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Fixing the report totals section at the proper location at the bottom of the report.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;My idea was that I would limit the number of invoice line items to around 10 per page with my Sql generated page numbers. The report would be grouped by invoice number and page number. I would leave enough whitespace for those 10 lines to grow into therefore the information at the bottom of the report could be fixed just like a page footer.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I was having a difficult time initially getting this to work properly because the "footer" was getting pushed to the second page when the number of lines would grow. After some research, I discovered that the behavior for consuming whitespace has been changed in SSRS 2008 R2. See this article for details: &lt;a href="http://msdn.microsoft.com/en-us/library/ms143200.aspx"&gt;Behavior Changes in Sql Server Reporting Services 2008 R2&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here is the important part:&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Segoe UI', Verdana, Arial; font-size: 13px; "&gt;&lt;h3 class="subHeading" xmlns="http://www.w3.org/1999/xhtml" style="font-family: 'Segoe UI', Verdana, Arial; font-size: 1.077em; color: rgb(63, 82, 156); font-weight: bold; "&gt;&lt;/h3&gt;&lt;/span&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Segoe UI', Verdana, Arial; font-size: 13px; "&gt;&lt;h3 class="subHeading" xmlns="http://www.w3.org/1999/xhtml" style="font-family: 'Segoe UI', Verdana, Arial; font-size: 1.077em; color: rgb(63, 82, 156); font-weight: bold; "&gt;Preserving White Space in a Report Body or Rectangle Container&lt;/h3&gt;&lt;div class="subsection" xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;Extra white space is no longer removed by default. When you render a report that had extra white space on the report body when viewed on the report design surface, the trailing white space after the last report item on the page is preserved. This may result in more pages for an existing report. To remove the white space, set the report property &lt;span&gt;&lt;span class="input"&gt;ConsumeContainerWhitespace&lt;/span&gt;&lt;/span&gt; to &lt;span&gt;&lt;span class="input"&gt;true&lt;/span&gt;&lt;/span&gt;.&lt;/p&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;Once I changed the ConsumerContainerWhitespace property to true, the report worked as I expected.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-4855967804258671888?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/4855967804258671888/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=4855967804258671888' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/4855967804258671888'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/4855967804258671888'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2011/02/creating-customer-invoices-using-sql.html' title='Creating Customer Invoices using Sql Server Reporting Services 2008 R2'/><author><name>Bryan Prince</name><uri>http://www.blogger.com/profile/01546244332553420397</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_kmsFfywkr8s/Snod8q0sx3I/AAAAAAAAAAM/dl6TPmvvSq4/S220/n1546945975_2653.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-5086582268550538640</id><published>2011-01-30T12:09:00.001-06:00</published><updated>2011-01-30T12:10:59.019-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Custom Links'/><title type='text'>Dynamics GP Custom Links - Shipment Tracking</title><content type='html'>I was recently reminded how useful Custom Links are in Dynamics GP. &amp;nbsp;This feature is very powerful for streamlining your processes but often goes underutilized.&lt;br /&gt;&lt;br /&gt;You can access the Custom Link Setup window in the Company section of the Administration page in Dynamics GP 2010 or at Tools&amp;gt;&amp;gt;Setup&amp;gt;&amp;gt;Company&amp;gt;&amp;gt;Custom Link. &amp;nbsp;Here is a quick example of how you might leverage Custom Links to streamline your processes in Dynamics GP to drill back directly to shipment tracking information from Sales User-Defined Field Entry:&lt;br /&gt;&lt;br /&gt;To setup this up for Federal Express, add a new Custom Link for your FedEx Shipping Method as follows:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_-WeKxh9zdSA/TUWhf78IybI/AAAAAAAAAQk/Ya56UWX0v5Y/s1600/CustomLinkTrackingNumber.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="275" src="http://2.bp.blogspot.com/_-WeKxh9zdSA/TUWhf78IybI/AAAAAAAAAQk/Ya56UWX0v5Y/s400/CustomLinkTrackingNumber.gif" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;You could setup a Tracking Number Custom Link for all Shipping Methods but each carrier has a unique page for tracking shipments. &amp;nbsp;After setting up the Custom Link, in Sales User-Defined Field Entry, for documents with the Shipping Method for which you setup the Custom Link assigned; when clicking on the Tracking Numbers hyperlink you will be presented with the prompt entered in the Create/Modify Custom Link window.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_-WeKxh9zdSA/TUWnM6m2YXI/AAAAAAAAAQw/FUsSzbWljmw/s1600/TrackingShipment.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="188" src="http://1.bp.blogspot.com/_-WeKxh9zdSA/TUWnM6m2YXI/AAAAAAAAAQw/FUsSzbWljmw/s400/TrackingShipment.gif" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;When selected, the shipment tracking information for the tracking number you chose will be displayed in the web browser:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_-WeKxh9zdSA/TUWjS52nDgI/AAAAAAAAAQs/0ls9CPIS1RQ/s1600/TrackingResults.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="147" src="http://3.bp.blogspot.com/_-WeKxh9zdSA/TUWjS52nDgI/AAAAAAAAAQs/0ls9CPIS1RQ/s400/TrackingResults.gif" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;In this example, I don't have an actual shipment to track but notice how it did pull my tracking number on to the shipment tracking web page from Dynamics GP.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Some shipment tracking urls for common carriers are listed below:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;DHL: &lt;a href="http://track.dhl-usa.com/atrknav.asp?ShipmentNumber=%1"&gt;http://track.dhl-usa.com/atrknav.asp?ShipmentNumber=%1&lt;/a&gt;&lt;/div&gt;FedEx:  &lt;span class="ll"&gt;&lt;a href="http://www.fedex.com/Tracking?action=track%20&amp;amp;language=english%20&amp;amp;cntry_code=us%20&amp;amp;initial=x%20&amp;amp;mps=y%20&amp;amp;tracknumbers=%1"&gt;http://www.fedex.com/Tracking?action=track&amp;amp;language=english&amp;amp;cntry_code=us&amp;amp;initial=x&amp;amp;mps=y&amp;amp;tracknumbers=%1&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;UPS: &lt;span class="ll"&gt;&lt;a href="http://wwwapps.ups.com/etracking/tracking.cgi?submit=Track&amp;amp;InquiryNumber1=%1&amp;amp;TypeOfInquiryNumber=T"&gt;http://wwwapps.ups.com/etracking/tracking.cgi?submit=Track&amp;amp;InquiryNumber1=%1&amp;amp;TypeOfInquiryNumber=T&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;U.S.  Postal Service: &lt;span class="ll"&gt;&lt;a href="http://trkcnfrm1.smi.usps.com/PTSInternetWeb/InterLabelInquiry.do?origTrackNum=%1"&gt;http://trkcnfrm1.smi.usps.com/PTSInternetWeb/InterLabelInquiry.do?origTrackNum=%1&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;There are many other great uses for Custom Links. &amp;nbsp;I plan to explore some of those in future posts.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-5086582268550538640?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/5086582268550538640/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=5086582268550538640' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/5086582268550538640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/5086582268550538640'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2011/01/dynamics-gp-custom-links-shipment.html' title='Dynamics GP Custom Links - Shipment Tracking'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_-WeKxh9zdSA/TUWhf78IybI/AAAAAAAAAQk/Ya56UWX0v5Y/s72-c/CustomLinkTrackingNumber.gif' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-6298265738480099338</id><published>2011-01-17T13:53:00.001-06:00</published><updated>2011-02-16T16:24:37.598-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Dynamics CRM'/><category scheme='http://www.blogger.com/atom/ns#' term='CRM'/><title type='text'>Dynamics CRM is holding its own with Salesforce.com</title><content type='html'>Dynamics CRM is holding its own in the LinkedIn Poll "&lt;a href="http://linkd.in/h60Zq7"&gt;What is your primary Client Relationship Management (CRM) Software that you use?&lt;/a&gt;" running a very close second behind Salesforce.com.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: -webkit-auto;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_-WeKxh9zdSA/TTSdqzCBNAI/AAAAAAAAAQg/Cc767HIH5KU/s1600/CRMPollResults.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="186" src="http://3.bp.blogspot.com/_-WeKxh9zdSA/TTSdqzCBNAI/AAAAAAAAAQg/Cc767HIH5KU/s400/CRMPollResults.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: -webkit-auto;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: -webkit-auto;"&gt;&lt;a href="http://linkd.in/h60Zq7"&gt;Get out and vote!&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-6298265738480099338?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/6298265738480099338/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=6298265738480099338' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/6298265738480099338'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/6298265738480099338'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2011/01/dynamics-crm-is-holding-its-own-with.html' title='Dynamics CRM is holding its own with Salesforce.com'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_-WeKxh9zdSA/TTSdqzCBNAI/AAAAAAAAAQg/Cc767HIH5KU/s72-c/CRMPollResults.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-4989541613448865121</id><published>2011-01-17T12:55:00.000-06:00</published><updated>2011-01-17T12:55:46.036-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Azure'/><title type='text'>Microsoft is finding success in the Enterprise Software Market</title><content type='html'>ERP Software Blog has a nice &lt;a href="http://www.erpsoftwareblog.com/2011/01/how-microsoft-dynamics-is-ascending-to-the-top-of-the-enterprise-software-market/"&gt;post up describing how Microsoft is finding success in the Enterprise Software space&lt;/a&gt; due in part to their shift to Azure cloud capabilities.&lt;br /&gt;&lt;br /&gt;The Microsoft Dynamics stack isn't just for small and medium sized business. &amp;nbsp;We're seeing GP fit better and better in the enterprise space. &amp;nbsp;Don't rule it out when considering your next ERP.&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-4989541613448865121?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/4989541613448865121/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=4989541613448865121' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/4989541613448865121'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/4989541613448865121'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2011/01/microsoft-is-finding-success-in.html' title='Microsoft is finding success in the Enterprise Software Market'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-5260986295829485463</id><published>2011-01-13T09:50:00.000-06:00</published><updated>2011-01-13T09:50:21.607-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Dynamics GP'/><category scheme='http://www.blogger.com/atom/ns#' term='Dynamics CRM'/><category scheme='http://www.blogger.com/atom/ns#' term='Business Process Improvement'/><category scheme='http://www.blogger.com/atom/ns#' term='Executive'/><title type='text'>5 Reasons to Re-Implement your Dynamics ERP</title><content type='html'>Are you frustrated with your Dynamics ERP system and starting to consider other options? &amp;nbsp;Maybe you feel like you have outgrown your Dynamics ERP system and need to move on to something like SAP. &amp;nbsp;Maybe it's just time to take a fresh look at your ERP strategy to take it to the next level.&lt;br /&gt;&lt;br /&gt;Over the past few years we have completed several re-implementations of Dynamics GP for our clients while several others are considering the same in favor or moving on to something else. &amp;nbsp;Here are some reasons why they are choosing to re-implement.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1. Enable new revenue streams and growth strategies:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;After completing a Dynamics GP implementation for a client in the early 2000s they recently changed their distribution strategy to include direct sale retail stores and have expanded the number of customer service centers. &amp;nbsp;During the initial implementation, neither was part of their strategy or a design consideration. &amp;nbsp;Their Dynamics GP workflow and integration customizations were not designed specifically to handle some of these new requirements.&lt;br /&gt;&lt;br /&gt;We are now in the process of planning the re-design and implementation of some of their customizations. &amp;nbsp;With this new design, as they continue to expand their retail and service operations, on boarding these entities will be as simple as populating some setup screens on which their workflow, subledger to general ledger integration, and other system features will rely. &amp;nbsp;Long-term, as they continue their expansion, this will save them consulting services costs and make them more nimble.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2. Automate standardized business processes:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;We spent a significant portion of last year re-implementing Dynamics GP for a client that was originally implemented in the early 2000s. &amp;nbsp;Since, they had further evolved and standardized their business processes as business process improvement and SOX compliance projects had been executed. &amp;nbsp;They evaluated their options and considered replacing Dynamics GP with a "Tier 1" system. &amp;nbsp;Through that evaluation they found that Dynamics GP could handle their requirements just as well for a fraction of the cost.&lt;br /&gt;&lt;br /&gt;The result was a complete re-implementation of an integrated Dynamics CRM/GP system with a new custom application in between to handle product configuration. &amp;nbsp;The project was completed for considerably less than the estimate to do the same with a common "Tier 1" system with the same or better results. &amp;nbsp;They now operate their business free of disparate Excel spreadsheets, countless hours of&amp;nbsp;redundant and&amp;nbsp;unnecessary data entry, or years worth of hard coding implemented to quickly deliver on new or changing requirements.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;3. Hodge Podge Syndrome:&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;ERP systems are "evolutionary" not "revolutionary". &amp;nbsp;They grow, mature, and evolve over time as existing requirements are refined or more clearly understood and new requirements become known. &amp;nbsp;As this happens new functionality in the form of 3rd Party ISV Products, new modules or&amp;nbsp;integrated&amp;nbsp;technology, and custom developed solutions is implemented. &amp;nbsp;This is a common best practice that most often produces very good results.&lt;br /&gt;&lt;br /&gt;Over time, if continuously reacting to an ever changing environment by implementing the first solution that appears to plug a GAP as quickly as possible, at the lowest possible cost you may end up with a variety of heterogeneous systems that don't integrate well or truly fit your requirements. &amp;nbsp;Common results of this approach include business rules hard coded into queries serving reports and a myriad of patches that have turned your off the shelf solution into a custom solution.&lt;br /&gt;&lt;br /&gt;Taking the time to carefully and proactively consider new requirements and match them to the best available solution with consideration for how it interacts with the existing environment will prevent this problem. &amp;nbsp;If you don't, you may be sacrificing long-term continuity for short-term results.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;4. The "vanilla", "out-of-the-box" approach left you with an incomplete system:&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;While "vanilla", "out-of-the-box" implementations are less costly and completed more rapidly than full scale deployments they are often incomplete. &amp;nbsp;This is more commonly true for larger organizations. &amp;nbsp;Typically, customers assume that they can simply follow-up Phase I with future phases to layer on additional functionality. &amp;nbsp;This is not only true but is considered a best practice approach. &amp;nbsp;However, if you don't plan for future phases while designing your initial implementation you could be left with many GAPS to fill later.&lt;br /&gt;&lt;br /&gt;If those GAPS are not few and far between you might be left with a square peg/round hole scenario in which you are consistently working around design decisions made without consideration of the future functionality required. &amp;nbsp;This is another situation where the software, if designed and configured around all of your business processes and requirements, will likely fit well. &amp;nbsp;If you do take this rapid approach with your implementation make sure to consider any known future requirements in your design to ease the implementation of that functionality later.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;5. Your initial&amp;nbsp;implementation&amp;nbsp;just wasn't successful:&lt;/b&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;There are many reasons why ERP system implementations fail. &amp;nbsp;Inadequate&amp;nbsp;requirements definition, inadequate customer and/or consulting resources, and unrealistic timelines or expectations are among some of the common reasons. &amp;nbsp;Typically, the primary driver of an unsuccessful implementation is not the software itself.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Often, unsuccessful&amp;nbsp;implementations&amp;nbsp;can be salvaged. &amp;nbsp;However, if the foundation is bad then you might be better served starting over. &amp;nbsp;Of course, now you would have the luxury of hindsight to determine why the initial implementation failed and correct that before starting over. &amp;nbsp;I would recommend you start by discussing this with your partner who has obtained the institutional knowledge to best ensure your success. &amp;nbsp;Of course, if they were the problem you might consider a change.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;In summary, don't assume that changing ERP systems will solve your problems or get you where you need to go next. &amp;nbsp;You could very well have already purchased, many years ago, the ERP system that is best suited to run your business for many years to come. &amp;nbsp;Whether you are experiencing some sort of pain or simply have a new ERP strategy to implement I recommend you consider all of the factors involved in&amp;nbsp;delivering&amp;nbsp;a world class ERP solution and take the steps necessary to prevent the problems you might have to react to later.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-5260986295829485463?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/5260986295829485463/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=5260986295829485463' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/5260986295829485463'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/5260986295829485463'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2011/01/5-reasons-to-re-implement-your-dynamics.html' title='5 Reasons to Re-Implement your Dynamics ERP'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-6670898894203216365</id><published>2010-12-25T10:14:00.000-06:00</published><updated>2010-12-25T10:14:30.314-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint'/><category scheme='http://www.blogger.com/atom/ns#' term='CRM'/><category scheme='http://www.blogger.com/atom/ns#' term='RMS'/><title type='text'>Happy Holidays!</title><content type='html'>Happy Holidays everyone!&lt;br /&gt;&lt;br /&gt;2010 has been great year for all of us at MBS Guru and &lt;a href="http://www.straightarrowusa.com/"&gt;Straight Arrow Consulting&lt;/a&gt;. &amp;nbsp;We recently wrapped up an integrated Dynamics CRM/GP implementation further evolving our &lt;a href="http://mbsguru.blogspot.com/p/equipment-rentals.html"&gt;Equipment Rentals Solution for Dynamics GP&lt;/a&gt;, are still working to help a client open a new Retail Store with an integrated Dynamics RMS solution, and are excited about all of the great projects, clients, and new products we are working with in 2011.&lt;br /&gt;&lt;br /&gt;Check back for more posts from &lt;a href="http://mbsguru.blogspot.com/p/contributors.html"&gt;me, Bryan, and others&lt;/a&gt; after the first of the year. &amp;nbsp;As usual, we hope to grow to be more active in the community next year and expect to introduce a new MBS Guru contributor with a core&amp;nbsp;competency&amp;nbsp;around SharePoint soon. &amp;nbsp;We have a lot going on and are excited to share.&lt;br /&gt;&lt;br /&gt;Cheers!&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-6670898894203216365?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/6670898894203216365/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=6670898894203216365' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/6670898894203216365'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/6670898894203216365'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2010/12/happy-holidays.html' title='Happy Holidays!'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-8755662040890453607</id><published>2010-12-06T09:05:00.003-06:00</published><updated>2010-12-06T09:09:29.024-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Reporting Services'/><category scheme='http://www.blogger.com/atom/ns#' term='Business Intelligence'/><category scheme='http://www.blogger.com/atom/ns#' term='Crystal Reports'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Report Writer'/><title type='text'>Really????  Dynamics GP Report Writer is the Best Report Writer in the World?</title><content type='html'>Wow! &amp;nbsp;I never thought I'd have an opportunity to jump between Polino and Musgrave in a squabble but I just can't resist any longer. &amp;nbsp;Maybe they'll break out the sumo suits at Tech Conference this year and they can settle this debate once and for all.&lt;br /&gt;&lt;br /&gt;I think Dave is just trying to get a rise out of Mark but I'll chime in anyway. &amp;nbsp;Like most, I lean towards the school of thought that Dynamics GP RW should NOT even be up for consideration as a the best in the world. &amp;nbsp;BUT, that's not to say it can't be great.&lt;br /&gt;&lt;br /&gt;You can pretty much do anything you want with GP Report Writer as along as you have 1) intimate knowledge of the inner workings of GP and 2) know how to customize reports using VBA. &amp;nbsp;Dave demonstrates some of the advanced capabilities in his latest post on how &lt;a href="http://blogs.msdn.com/b/developingfordynamicsgp/archive/2010/12/06/dynamics-report-writer-is-the-best-report-writer-in-the-world-cont.aspx"&gt;Dynamics GP Report Writer is the greatest Report Writer in the World&lt;/a&gt;. &amp;nbsp;The problem is, there aren't many that would have come up with such a solution.&lt;br /&gt;&lt;br /&gt;One cannot be a great Report Writer these days unless just about anyone can write reports with it. &amp;nbsp;Just about everyone is willing to stipulate that you cannot expect canned reports from any ERP system to meet all of your company's reporting and analytics requirements. &amp;nbsp;That said, the first question asked by most GP prospects about reporting capabilities is; "How difficult is it for ME to write new reports to my specifications?". &amp;nbsp;If not for SQL Server Reporting Services, and even Crystal Reports, this would be a much harder sell relying on Dyanmics GP RW alone. &amp;nbsp;Additionally, existing reports often rely heavily on temporary Dexterity tables that can make even seemingly simple changes to existing reports a challenge.&lt;br /&gt;&lt;br /&gt;Finally, Dynamics GP has evolved so that RW is meant to be only one of many report writers available to GP customers. &amp;nbsp;GP does ship with a vast library of canned RW reports that most find to be extremely valuable in addition to a growing library of SSRS Reports. &amp;nbsp;Some companies hardly have to customize reports at all or develop new ones from scratch. &amp;nbsp;But, when you need to you can do so with RW or you can look to other widely available and commonly known tools such as SSRS and/or Crystal among others.&lt;br /&gt;&lt;br /&gt;You can voice your opinion on the subject in&amp;nbsp;&lt;a href="http://msdynamicsgp.blogspot.com/2010/12/vote-in-facebook-poll.html"&gt;Mark's latest Facebook poll&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;We should celebrate the fact that we deliver and work with a system in Dynamics GP that ships with world class reports "out of the box" and a variety of common tools that enable you to customize or develop new reports from scratch on your own.&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-8755662040890453607?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/8755662040890453607/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=8755662040890453607' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/8755662040890453607'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/8755662040890453607'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2010/12/really-dynamics-gp-report-writer-is.html' title='Really????  Dynamics GP Report Writer is the Best Report Writer in the World?'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-6539926294323994726</id><published>2010-12-06T08:30:00.000-06:00</published><updated>2010-12-06T08:30:39.694-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Training'/><category scheme='http://www.blogger.com/atom/ns#' term='Conference'/><title type='text'>Register today for the 2011 Microsoft Dynamics GP Tech Conference</title><content type='html'>&lt;a href="http://www.microsoft.com/dynamics/fargodeveloperconference/"&gt;The 2011 Microsoft Dynamics GP Technical Conference is open for registration&lt;/a&gt;. &amp;nbsp;This Partner event is in Fargo again this year; March 1-3. &amp;nbsp;They haven't posted the agenda, speakers, or sessions just yet but I'm sure we'll see Dave, Mariano, and some other familiar faces with some new information for us.&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-6539926294323994726?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/6539926294323994726/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=6539926294323994726' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/6539926294323994726'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/6539926294323994726'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2010/12/register-today-for-2011-microsoft.html' title='Register today for the 2011 Microsoft Dynamics GP Tech Conference'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-6801989976283759482</id><published>2010-12-01T19:47:00.000-06:00</published><updated>2010-12-01T19:47:31.026-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Support Debugging Tool'/><title type='text'>Support Debugging Tool Build 14 released</title><content type='html'>The latest build of the Support Debugging Tool has been released by THE David Musgrave. &amp;nbsp;Check out the fixes, enhancements, and new features here&amp;nbsp;&lt;a href="http://blogs.msdn.com/b/developingfordynamicsgp/archive/2010/12/02/support-debugging-tool-build-14-released.aspx"&gt;http://blogs.msdn.com/b/developingfordynamicsgp/archive/2010/12/02/support-debugging-tool-build-14-released.aspx&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Ask your partner to download it for you now.&lt;br /&gt;&lt;br /&gt;Thanks Dave. &amp;nbsp;Keep it coming!&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-6801989976283759482?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/6801989976283759482/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=6801989976283759482' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/6801989976283759482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/6801989976283759482'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2010/12/support-debugging-tool-build-14.html' title='Support Debugging Tool Build 14 released'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-8889432309174184544</id><published>2010-12-01T19:30:00.012-06:00</published><updated>2010-12-02T18:58:55.153-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eConnect'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint'/><title type='text'>Microsoft Dynamics 10 eConnect C# 4.0 .NET Serialization In Memory</title><content type='html'>&lt;span class="Apple-style-span"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;I was recently tasked with creating an eConnect integration between Microsoft Dynamics GP 10 and a custom SharePoint 2010 Portal designed to replace the GP Item Maintenance process with workflow and departmental routing.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span"&gt;Most of the eConnect examples I see online serialize the eConnect object to a file before loading it into an XmlDocument. This can cause unnecessary permissions concerns, and worse, if your application runs under the context of IIS or SharePoint you may not have a file system available to you at all. This was the case in my scenario. A much better approach is to serialize the object in memory.&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;Below is an example of eConnect serialization in memory using Microsoft C# .NET 4.0.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;Assuming you have already installed the eConnect SDK 10, reference the following assemblies:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;Microsoft.Dynamics.GP.eConnect.dll&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;Microsoft.Dynamics.GP.eConnect.MiscRoutines.dll&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;Microsoft.Dynamics.GP.eConnect.Serialization.dll&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;System.EnterpriseServices.dll&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;And add the following using statements:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre style="font-family: consolas;"&gt;&lt;span class="Apple-style-span"&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt; System.IO;&lt;br /&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt; System.Xml;&lt;br /&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt; System.Xml.Serialization;&lt;br /&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt; Microsoft.Dynamics.GP.eConnect;&lt;br /&gt;&lt;span style="color: blue;"&gt;using&lt;/span&gt; Microsoft.Dynamics.GP.eConnect.Serialization;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;Here is the code to serialize the eConnectType object in memory and load it into an XmlDocument which is then passed to the eConnect_EntryPoint method:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre style="font-family: consolas;"&gt;&lt;span class="Apple-style-span"&gt;&lt;span style="color: blue;"&gt;string&lt;/span&gt; connectionString = &lt;span style="color: blue;"&gt;string&lt;/span&gt;.Empty; &lt;span style="color: green;"&gt;// Set up a valid connection string.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #2b91af;"&gt;eConnectMethods&lt;/span&gt; econnectMethods = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;eConnectMethods&lt;/span&gt;();&lt;br /&gt;&lt;span style="color: #2b91af;"&gt;eConnectType&lt;/span&gt; eConnectType = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;eConnectType&lt;/span&gt;();&lt;br /&gt;&lt;br /&gt;&lt;span style="color: green;"&gt;// Instantiate and populate the specific eConnect types needed.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: green;"&gt;// Don't forget to add them to eConnectType once they are set up.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: green;"&gt;// We're done building the object model, now serialize it in memory.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #2b91af;"&gt;MemoryStream&lt;/span&gt; memoryStream = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;MemoryStream&lt;/span&gt;();&lt;br /&gt;&lt;span style="color: #2b91af;"&gt;XmlSerializer&lt;/span&gt; xmlSerializer = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;XmlSerializer&lt;/span&gt;(eConnectType.GetType());&lt;br /&gt;xmlSerializer.Serialize(memoryStream, eConnectType);&lt;br /&gt;memoryStream.Position = 0;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: green;"&gt;// Create a new XmlDocument from the in memory serialized object model.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #2b91af;"&gt;XmlDocument&lt;/span&gt; xmlDocument = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;XmlDocument&lt;/span&gt;();&lt;br /&gt;xmlDocument.Load(memoryStream);&lt;br /&gt;memoryStream.Close();&lt;br /&gt;&lt;br /&gt;econnectMethods.eConnect_EntryPoint(connectionString, &lt;span style="color: #2b91af;"&gt;EnumTypes&lt;/span&gt;.&lt;span style="color: #2b91af;"&gt;ConnectionStringType&lt;/span&gt;.SqlClient, xmlDocument.OuterXml, &lt;span style="color: #2b91af;"&gt;EnumTypes&lt;/span&gt;.&lt;span style="color: #2b91af;"&gt;SchemaValidationType&lt;/span&gt;.None, &lt;span style="color: blue;"&gt;string&lt;/span&gt;.Empty);&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;Hope it helps!&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-8889432309174184544?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/8889432309174184544/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=8889432309174184544' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/8889432309174184544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/8889432309174184544'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2010/12/microsoft-dynamics-10-econnect-c-40-net.html' title='Microsoft Dynamics 10 eConnect C# 4.0 .NET Serialization In Memory'/><author><name>Bryan Prince</name><uri>http://www.blogger.com/profile/01546244332553420397</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_kmsFfywkr8s/Snod8q0sx3I/AAAAAAAAAAM/dl6TPmvvSq4/S220/n1546945975_2653.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-1786038854321797154</id><published>2010-11-09T11:50:00.000-06:00</published><updated>2010-11-09T11:50:40.995-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Convergence'/><category scheme='http://www.blogger.com/atom/ns#' term='Conference'/><title type='text'>Sign up for Convergence 2011 Registration Alerts</title><content type='html'>If you haven't already done so stop by the Microsoft Convergence 2011 site at&amp;nbsp;&lt;a href="http://www.microsoft.com/dynamics/convergence/atlanta11/about_overview.aspx"&gt;http://www.microsoft.com/dynamics/convergence/atlanta11/about_overview.aspx&lt;/a&gt;&amp;nbsp;and sign up for Registration Alerts. &amp;nbsp;You don't want to miss out on the early bird discounts.&lt;br /&gt;&lt;br /&gt;See you in Atlanta!&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-1786038854321797154?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/1786038854321797154/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=1786038854321797154' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/1786038854321797154'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/1786038854321797154'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2010/11/sign-up-for-convergence-2011.html' title='Sign up for Convergence 2011 Registration Alerts'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-1822828889150560991</id><published>2010-11-04T20:05:00.000-05:00</published><updated>2010-11-04T20:05:21.228-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sales Process Holds'/><category scheme='http://www.blogger.com/atom/ns#' term='SmartList Builder'/><category scheme='http://www.blogger.com/atom/ns#' term='VBA'/><category scheme='http://www.blogger.com/atom/ns#' term='Receivables Management'/><category scheme='http://www.blogger.com/atom/ns#' term='Sales Order Processing'/><category scheme='http://www.blogger.com/atom/ns#' term='eConnect'/><category scheme='http://www.blogger.com/atom/ns#' term='ADO'/><category scheme='http://www.blogger.com/atom/ns#' term='SmartList'/><category scheme='http://www.blogger.com/atom/ns#' term='Business Process Improvement'/><title type='text'>Business Process Improvement with Conditional Process Holds in Dynamics GP Sales Order Processing</title><content type='html'>I was presented with a business process problem by a client related to managing Credit Limit overrides in Dynamics GP Sales Transaction Entry. &amp;nbsp;This company does not supply Order Entry users with the Credit Limit override password. &amp;nbsp;It's the Credit Manager's responsibility to decide whether or not to allow that override.&lt;br /&gt;&lt;br /&gt;This client has been working for some time to generally route information to the right person that needs to make the decision and&amp;nbsp;eliminate&amp;nbsp;waste in their business processes. &amp;nbsp;During the normal course of business when users are presented with the "Please enter the credit limit override password:" prompt the Credit Manager is called to the user's workstation to make the decision on the fly.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_-WeKxh9zdSA/TNND1C5P01I/AAAAAAAAAPc/x1smJSFXgEI/s1600/SOPHoldsCreditPrompt.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="247" src="http://4.bp.blogspot.com/_-WeKxh9zdSA/TNND1C5P01I/AAAAAAAAAPc/x1smJSFXgEI/s320/SOPHoldsCreditPrompt.gif" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;This is a very inefficient process. &amp;nbsp;What a great opportunity for improvement!&lt;br /&gt;&lt;br /&gt;To resolve this issue and get the information to the person responsible for making the&amp;nbsp;decision&amp;nbsp;while maintaining the system controls required we got creative with Process Holds, eConnect, and VBA with ADO. &amp;nbsp;Here's what we did:&lt;br /&gt;&lt;br /&gt;First, we removed the "Exceed Credit Limit" password from Receivables Management Setup:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_-WeKxh9zdSA/TNNErURVFGI/AAAAAAAAAPg/B8jklw_RLlQ/s1600/RMSetup.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="100" src="http://3.bp.blogspot.com/_-WeKxh9zdSA/TNNErURVFGI/AAAAAAAAAPg/B8jklw_RLlQ/s400/RMSetup.bmp" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Now, users would have been presented with the more friendly prompt that would allow them to proceed without a password.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_-WeKxh9zdSA/TNNFdyJWcHI/AAAAAAAAAPs/q6jKAl0B7Mc/s1600/SOPHoldsCreditLimitPrompt.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="165" src="http://1.bp.blogspot.com/_-WeKxh9zdSA/TNNFdyJWcHI/AAAAAAAAAPs/q6jKAl0B7Mc/s400/SOPHoldsCreditLimitPrompt.gif" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;I don't claim to be a SOX expert but I'm guessing that wouldn't pass a SOX audit. &amp;nbsp;So, we added some VBA Code to the BeforeModalDialog Event behind the Sales Transaction Entry Window. &amp;nbsp;Of course, to make this work you would need to add that window plus the DocumentNo and the SOPTypeDatabase fields to your project.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_-WeKxh9zdSA/TNNGaAA64PI/AAAAAAAAAPw/_4QZCXy3JWE/s1600/SOPHoldsCreditCode.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="111" src="http://4.bp.blogspot.com/_-WeKxh9zdSA/TNNGaAA64PI/AAAAAAAAAPw/_4QZCXy3JWE/s400/SOPHoldsCreditCode.gif" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;The code calls the taSopUpdateCreateProcessHold eConnect stored procedure and adds the "CREDIT" Process Hold to the Document when the credit limit prompt appears and closes the dialog box by answering Continue to the prompt automatically.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_-WeKxh9zdSA/TNNG7lFmPFI/AAAAAAAAAP0/m2V-sgeWdSA/s1600/SOPHold.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="297" src="http://3.bp.blogspot.com/_-WeKxh9zdSA/TNNG7lFmPFI/AAAAAAAAAP0/m2V-sgeWdSA/s400/SOPHold.bmp" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Now, instead of stopping the user in their tracks to make this decision on the fly the Credit Manager can manage this Process Hold separate from the Order Entry Process. &amp;nbsp;To do this, we used SmartList Builder to build a SmartList that displayed SOP Documents On Hold. &amp;nbsp;Then, we added a Favorite with a Reminder to the SmartList to show only SOP Documents with the "CREDIT" Process Hold applied.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_-WeKxh9zdSA/TNNHojgAQII/AAAAAAAAAP4/wiODBhAeCKM/s1600/SOPHoldsAddSmartListReminder.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="247" src="http://2.bp.blogspot.com/_-WeKxh9zdSA/TNNHojgAQII/AAAAAAAAAP4/wiODBhAeCKM/s400/SOPHoldsAddSmartListReminder.bmp" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Now, when the Credit Manager logs into GP and periodically throughout the day he can quickly and easily analyze the Sales Orders for Customers that had exceeded their Credit Limit and manage them accordingly.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_-WeKxh9zdSA/TNNIFdjOvAI/AAAAAAAAAP8/YHa53NCsfCI/s1600/SOPHoldsReminder.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="245" src="http://1.bp.blogspot.com/_-WeKxh9zdSA/TNNIFdjOvAI/AAAAAAAAAP8/YHa53NCsfCI/s400/SOPHoldsReminder.bmp" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Get the right information into the hands of the person who is responsible for making the decision and you&amp;nbsp;too&amp;nbsp;can improve your business processes and efficiency. &amp;nbsp;It doesn't take much work or creativity to increase the ROI on your GP implementation using techniques such as this.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;If you like this let me know. &amp;nbsp;If enough people do, maybe we'll produce a new freebie for Dynamics GP!&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Don't accept what you're given, make it into what you need it to be.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-1822828889150560991?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/1822828889150560991/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=1822828889150560991' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/1822828889150560991'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/1822828889150560991'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2010/11/business-process-improvement-with.html' title='Business Process Improvement with Conditional Process Holds in Dynamics GP Sales Order Processing'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_-WeKxh9zdSA/TNND1C5P01I/AAAAAAAAAPc/x1smJSFXgEI/s72-c/SOPHoldsCreditPrompt.gif' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-7724662789591367625</id><published>2010-11-03T16:18:00.000-05:00</published><updated>2010-11-03T16:18:55.708-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Dexterity'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio Toolkit'/><title type='text'>Dexterity isn't going anywhere... anytime soon.</title><content type='html'>The topic of whether to execute a project by developing in Dexterity came up in a requirements discussion I had this week after &lt;a href="http://dynamicsgpblogster.blogspot.com/2010/10/why-you-should-care-about-microsoft.html"&gt;The Dynamics GP Blogster&lt;/a&gt; and then &lt;a href="http://msdynamicsgp.blogspot.com/2010/10/why-you-should-care-about-microsoft.html"&gt;Mark Polino opined on the subject&lt;/a&gt;. &amp;nbsp;I have spent some time thinking about this myself as we're also working on plans for 2011. &amp;nbsp;I don't think Dexterity is going anywhere as long as GP is around although it will continue to get depreciated over time.&lt;br /&gt;&lt;br /&gt;When Microsoft purchased GP and consolidated ERP solutions under the Dynamics brand all the buzz was about both consolidating those solutions into 1 best of breed solution and/or replacing Dexterity with (insert your favorite .Net language here). &amp;nbsp;I don't even remember how long ago that was. &amp;nbsp;We're not really any closer to realizing either vision even though it's clear that .Net is the future for GP.&lt;br /&gt;&lt;br /&gt;With the introduction of the Visual Studio Toolkit we're able to finally do some GP Development work in Visual Studio. &amp;nbsp;That's great but we still can't create Alternate Dynamics Windows or really modify existing GP windows in Visual Studio. &amp;nbsp;Dexterity still provides the tightest integration. &amp;nbsp;For some development projects, you just can't get around that. &amp;nbsp;I can't really speculate on how reasonable it is to expect that to change anytime soon.&lt;br /&gt;&lt;br /&gt;Mariano makes great points in his &lt;a href="https://community.dynamics.com/product/gp/gpnontechnical/b/imhoblogster/archive/2010/10/26/why-you-should-care-about-microsoft-dexterity.aspx"&gt;IMHO post&lt;/a&gt; that it is basically (my opinion, not his) just not reasonable to expect Dexterity to be replaced by .Net unless GP is abandoned as a viable ERP solution. &amp;nbsp;The last I saw the Dynamics GP roadmap extended beyond v14 (2016). &amp;nbsp;When it comes to selecting a development tool for GP it's inevitable that Dexterity will rise to the surface as the best tool for some projects. &amp;nbsp;It's not always my first choice but sometime it is the best choice. &amp;nbsp;I don't&amp;nbsp;foresee&amp;nbsp;that changing anytime soon.&lt;br /&gt;&lt;br /&gt;There's a good white paper on choosing the right development tool for your Microsoft Dynamics GP 10 Development Project. &amp;nbsp;&lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=a5b6c523-0add-48fd-9deb-2c0ef39b5673"&gt;http://www.microsoft.com/downloads/en/details.aspx?FamilyID=a5b6c523-0add-48fd-9deb-2c0ef39b5673&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-7724662789591367625?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/7724662789591367625/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=7724662789591367625' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/7724662789591367625'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/7724662789591367625'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2010/11/dexterity-isnt-going-anywhere-anytime.html' title='Dexterity isn&apos;t going anywhere... anytime soon.'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-1515546208703824421</id><published>2010-11-02T11:36:00.000-05:00</published><updated>2010-11-02T11:36:53.886-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Depot Management'/><category scheme='http://www.blogger.com/atom/ns#' term='Training'/><category scheme='http://www.blogger.com/atom/ns#' term='Conference'/><category scheme='http://www.blogger.com/atom/ns#' term='Contract Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='RMA'/><category scheme='http://www.blogger.com/atom/ns#' term='Field Service Series'/><category scheme='http://www.blogger.com/atom/ns#' term='Service Call Management'/><title type='text'>Decisions 2010 - Extending Your GP Distribution Solution with the Field Service Series Session Materials Available for Download</title><content type='html'>I have posted both a &lt;a href="http://www.box.net/shared/mmn1pan6l2"&gt;.pdf version&lt;/a&gt; and a &lt;a href="http://www.box.net/shared/4sy1pqvjg4"&gt;.ppsx version&lt;/a&gt; of the Decisions 2010 - Extending Your GP Distribution Solution with the Field Service Series presentation for download.&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-1515546208703824421?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/1515546208703824421/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=1515546208703824421' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/1515546208703824421'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/1515546208703824421'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2010/11/decisions-2010-extending-your-gp.html' title='Decisions 2010 - Extending Your GP Distribution Solution with the Field Service Series Session Materials Available for Download'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-1576507305811244057</id><published>2010-11-02T10:35:00.000-05:00</published><updated>2010-11-02T10:35:28.431-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Project Management'/><category scheme='http://www.blogger.com/atom/ns#' term='Executive'/><title type='text'>The Emerging Partner in the Microsoft Dynamics Partner Channel</title><content type='html'>&lt;a href="http://navigateintosuccess.com/"&gt;NavigateIntoSuccess.com&lt;/a&gt; has a nice write up on the direction Microsoft is taking with small Dynamics partners based some insight from a blog post by Alex Chow. &amp;nbsp;&lt;a href="http://navigateintosuccess.com/blog/is-microsoft-killing-the-small-partners"&gt;http://navigateintosuccess.com/blog/is-microsoft-killing-the-small-partners&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;It is a tough environment and getting tougher for some but I agree with Vjekoslav that they're not trying to kill us off. &amp;nbsp;I say "us" because my company could be considered a "small" partner but we don't fall into any of the 3 categories of small partners that&amp;nbsp;Alex describes in his post:&lt;br /&gt;&lt;br /&gt;1. Small newcomers that oversell and don't execute.&lt;br /&gt;2. Internal companies that arbitrage the partner program to get free licensing.&lt;br /&gt;3. Lifestyle partners that don't sell and therefore don't send any revenue Microsoft's way.&lt;br /&gt;&lt;br /&gt;There's another category he didn't account for; 4. &lt;b&gt;Emerging Partners&lt;/b&gt; - broadly experienced partners that are growing organically at their own pace.&lt;br /&gt;&lt;br /&gt;There are many Emerging Partners in the channel that are focused on profitable growth at a pace that is manageable for their business. &amp;nbsp;Often, Emerging Partners are a better fit for even the larger Dynamics customers. &amp;nbsp;They specialize more and don't try to be everything to everyone which is a plus for customers that typically don't implement more than one ERP system anyway.&lt;br /&gt;&lt;br /&gt;So, what is it that Dynamics customers are looking for in a Partner? &amp;nbsp;A few&amp;nbsp;of the primary characteristics of a good partner include:&lt;br /&gt;&lt;br /&gt;1. A conscientious business partner that delivers value in excess of its cost with the highest level of integrity and professionalism.&lt;br /&gt;2. Timely access to expert product consultants that can deliver the technology solutions and services required as well as other services the customer may not have anticipated needing.&lt;br /&gt;3. Proactive communication through e-mail, phone calls, newsletters, webinars, blogs, etc. to deliver the latest Microsoft Promotions, Tips and Tricks, and Product Releases.&lt;br /&gt;&lt;br /&gt;Emerging Partners engage on projects on which they know they can be highly successful and employ senior level consultants and developers. &amp;nbsp;They are establishing themselves in the channel through&amp;nbsp;superior&amp;nbsp;delivery of services not another metric that does not benefit the customer such as top line software licensing revenue that drives margins for the partner. &amp;nbsp;Margins take a backseat to customer satisfaction but overhead is lower for them. &amp;nbsp;They won't win worldwide partner of the year but that's not their goal.&lt;br /&gt;&lt;br /&gt;With a core team of the right people with the right mix of skills and experience an Emerging Partner can deliver the Microsoft Business Solutions stack&amp;nbsp;extremely effectively; Dynamics ERP/CRM, SharePoint, SSRS/Business Intelligence, and Custom .Net solutions and services. &amp;nbsp;Sure, there are projects on which more and/or other resources are required but Emerging Partners have their own networks of experienced professionals&amp;nbsp;to fill those gaps when needed. &amp;nbsp;The larger partners all face the same challenges as they push their own consultants to triple digit utilization while managing a healthy sales pipeline.&lt;br /&gt;&lt;br /&gt;Emerging Partners have fewer full-time sales people which can be a benefit to the customer. &amp;nbsp;They typically engage senior level consulting resources, project managers, or firm owners as account managers who can address customer needs directly; engaging sales resources when necessary. &amp;nbsp;They maintain a more intimate relationship with their customer base. &amp;nbsp;They often turn down opportunities to engage with new customers if those engagements/customers aren't a good fit with their strategy; 100% customer satisfaction and retention.&lt;br /&gt;&lt;br /&gt;Emerging Partners can afford to grow more slowly, be selective on the work that they do, and focus on customers first and prospects second. &amp;nbsp;There's a lot of value in that strategy for those customers that are lucky enough to work with an Emerging Partner.&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-1576507305811244057?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/1576507305811244057/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=1576507305811244057' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/1576507305811244057'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/1576507305811244057'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2010/11/emerging-partner-in-microsoft-dynamics.html' title='The Emerging Partner in the Microsoft Dynamics Partner Channel'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-2049705632343196806</id><published>2010-10-20T11:23:00.000-05:00</published><updated>2010-10-20T11:23:14.184-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Training'/><title type='text'>Decisions 2010 Program Schedule is available</title><content type='html'>With Decisions 2010 just 2 weeks away MSDynamicsWorld has published the Program Schedule online so you can plan your conference activities.&lt;br /&gt;&lt;br /&gt;Check out the GP Day Program at&amp;nbsp;&lt;a href="http://decisions.msdynamicsworld.com/content/dynamics-gp-day-program"&gt;http://decisions.msdynamicsworld.com/content/dynamics-gp-day-program&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;See you there!&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-2049705632343196806?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/2049705632343196806/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=2049705632343196806' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/2049705632343196806'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/2049705632343196806'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2010/10/decisions-2010-program-schedule-is.html' title='Decisions 2010 Program Schedule is available'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-8787023218847479717</id><published>2010-10-14T12:14:00.000-05:00</published><updated>2010-10-14T12:14:55.751-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Training'/><title type='text'>Decisions 2010 - November 2, 2010</title><content type='html'>I have recently wrapped up the presentation on the Dynamics GP Field Service Series that I will be delivering at &lt;a href="http://decisions.msdynamicsworld.com/product/gp"&gt;MS Dynamics World Decisions 2010&lt;/a&gt;&amp;nbsp;on November 2nd. &amp;nbsp;I'm excited to be presenting this year, for my first time, so please register and join in. &amp;nbsp;Too bad it's not being delivered live; no heckling.&lt;br /&gt;&lt;br /&gt;There's a great group of presenters this year including popular bloggers and MVPs &lt;a href="http://msdynamicsgp.blogspot.com/"&gt;Mark Polino&lt;/a&gt;, &lt;a href="http://www.jivtesh.com/"&gt;Jivtesh Singh&lt;/a&gt;, and &lt;a href="http://dynamicsconfessions.blogspot.com/"&gt;Leslie Vail&lt;/a&gt; among others. &amp;nbsp;Visit&amp;nbsp;&lt;a href="http://decisions.msdynamicsworld.com/"&gt;http://decisions.msdynamicsworld.com/&lt;/a&gt;&amp;nbsp;to register today.&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-8787023218847479717?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/8787023218847479717/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=8787023218847479717' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/8787023218847479717'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/8787023218847479717'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2010/10/decisions-2010-november-2-2010.html' title='Decisions 2010 - November 2, 2010'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-4329191181770374795</id><published>2010-08-27T13:42:00.000-05:00</published><updated>2010-08-27T13:42:19.120-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Auto Posting'/><title type='text'>Posting Dynamics GP Transactions Automatically "Autopost.DLL"</title><content type='html'>I ran across this post from Mohammad Daoud recently. &amp;nbsp;I get requests all the time from clients needing to have Dynamics GP transactions posted automatically. &amp;nbsp;Mohammad did some digging and found a tool from Microsoft developed using the Continuum API to post GP Transactions. &amp;nbsp;GP must be opened and a user must be logged in but that's generally not too much to ask.&lt;br /&gt;&lt;br /&gt;You can use it to post GL, Inventory, Cash Receipt, Sales Order Processing, and Receiving transactions. &amp;nbsp;It's not free but most great things aren't. &amp;nbsp;Check out Mohammad's post for more details&amp;nbsp;&lt;a href="http://mohdaoud.blogspot.com/2010/07/posting-microsoft-dynamics-gp.html"&gt;http://mohdaoud.blogspot.com/2010/07/posting-microsoft-dynamics-gp.html&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-4329191181770374795?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/4329191181770374795/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=4329191181770374795' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/4329191181770374795'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/4329191181770374795'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2010/08/posting-dynamics-gp-transactions.html' title='Posting Dynamics GP Transactions Automatically &quot;Autopost.DLL&quot;'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-924539950573120145</id><published>2010-08-27T13:06:00.001-05:00</published><updated>2010-08-27T13:09:31.147-05:00</updated><title type='text'>Disable DELETE PO in Dynamics GP Purchase Order Entry</title><content type='html'>The question; "Is there a way to turn off the DELETE option for POs?" came up in the newsgroups recently. &amp;nbsp;If you need to, here's a pretty simple way to do so.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Add the Purchase Order Entry Window to Visual Basic.&lt;/li&gt;&lt;li&gt;Add the following code to the Window_BeforeModalDialog event:&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;If PromptString = "Are you sure you want to delete this record?" Then&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;Answer = dcButton2&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;Response = MsgBox("You are not allowed to Delete Purchase Orders.", vbOKOnly, "Microsoft Dynamics GP")&lt;/div&gt;&lt;div&gt;End If&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Now, instead of prompting to confirm that you want to Delete a PO after selecting Delete from the Actions Button the system will prompt you that you cannot and cancel that action.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_-WeKxh9zdSA/THf-YQgvEVI/AAAAAAAAAOs/f8JxkneU8_o/s1600/DisableDeletePO.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="306" src="http://2.bp.blogspot.com/_-WeKxh9zdSA/THf-YQgvEVI/AAAAAAAAAOs/f8JxkneU8_o/s400/DisableDeletePO.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-924539950573120145?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/924539950573120145/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=924539950573120145' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/924539950573120145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/924539950573120145'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2010/08/disable-delete-po-in-dynamics-gp.html' title='Disable DELETE PO in Dynamics GP Purchase Order Entry'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_-WeKxh9zdSA/THf-YQgvEVI/AAAAAAAAAOs/f8JxkneU8_o/s72-c/DisableDeletePO.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-7607741479044176530</id><published>2010-08-25T12:53:00.000-05:00</published><updated>2010-08-25T12:53:38.539-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VBA'/><category scheme='http://www.blogger.com/atom/ns#' term='Modifier'/><title type='text'>Using GP Security to Control for which users VBA code runs</title><content type='html'>If you want to control for which users your VBA Code runs... you can... in some situations.&lt;br /&gt;&lt;br /&gt;VBA Code can run behind a Modified or Original Window in GP, or not at all, based on the event mode you select in the window properties in the VBA Editor:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_-WeKxh9zdSA/THVH4tzER3I/AAAAAAAAAOk/TTY0-nb1nRc/s1600/VBAWindowProperties.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="126" src="http://2.bp.blogspot.com/_-WeKxh9zdSA/THVH4tzER3I/AAAAAAAAAOk/TTY0-nb1nRc/s400/VBAWindowProperties.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;You could modify a window mildly and place your code behind the modified version just so that you can control for which users the VBA code runs by only granting access to the modified window to certain users. &amp;nbsp;This won't work in every situation such as those in which you need to modify the window for all users but only want VBA code to run for some.&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-7607741479044176530?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/7607741479044176530/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=7607741479044176530' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/7607741479044176530'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/7607741479044176530'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2010/08/using-gp-security-to-control-for-which.html' title='Using GP Security to Control for which users VBA code runs'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_-WeKxh9zdSA/THVH4tzER3I/AAAAAAAAAOk/TTY0-nb1nRc/s72-c/VBAWindowProperties.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-6651421195695968118</id><published>2010-08-25T11:05:00.000-05:00</published><updated>2010-08-25T11:05:09.379-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eConnect'/><title type='text'>eConnect Nugget:  Recalculating SOP Document Totals</title><content type='html'>I didn't run across any documentation on an eConnect proc that I found very useful while working with some eConnect integrations recently. &amp;nbsp;I needed to update, not insert, a SOP Header record after adjusting some line item prices through code.&lt;br /&gt;&lt;br /&gt;I found that using&amp;nbsp;&lt;b&gt;taSopHdrRecalc&lt;/b&gt; worked great for this. &amp;nbsp;The schema is basically the same as the &lt;b&gt;taSopHdrIvcInsert&lt;/b&gt; so you can consult that schema reference in the eConnect Help when working with this proc.&lt;br /&gt;&lt;br /&gt;If you weren't already aware, Steve Gray has posted the &lt;a href="http://vstoolsforum.com/econnecthelp/"&gt;eConnect Help Online&amp;nbsp;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-6651421195695968118?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/6651421195695968118/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=6651421195695968118' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/6651421195695968118'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/6651421195695968118'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2010/08/econnect-nugget-recalculating-sop.html' title='eConnect Nugget:  Recalculating SOP Document Totals'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-5852526785909692397</id><published>2010-08-25T10:26:00.000-05:00</published><updated>2010-08-25T10:26:45.825-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MJ Solution'/><title type='text'>The Top 10 Dynamics Freebies</title><content type='html'>The &lt;a href="http://dynamicsgpblogster.blogspot.com/"&gt;Dynamics GP Blogster&lt;/a&gt; has published &lt;a href="http://dynamicsgpblogster.blogspot.com/2010/08/top-10-microsoft-dynamics-gp-freebies.html"&gt;his list of the Top 10 Dynamics GP Freebies&lt;/a&gt;.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'm excited that the 2 I have produced made his list:&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://mbsguru.blogspot.com/p/dynamics-gp-password-expiration-notice.html"&gt;GP Password Expiration Notice&lt;/a&gt;&amp;nbsp;made number 3.&lt;/li&gt;&lt;li&gt;&lt;a href="http://mbsguru.blogspot.com/p/po-purch-account-required.html"&gt;PO Purchases Account Required&lt;/a&gt;&amp;nbsp;made number 8.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Check them out if you haven't already.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-5852526785909692397?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/5852526785909692397/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=5852526785909692397' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/5852526785909692397'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/5852526785909692397'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2010/08/top-10-dynamics-freebies.html' title='The Top 10 Dynamics Freebies'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-4295629559516473785</id><published>2010-08-23T19:57:00.001-05:00</published><updated>2010-08-24T10:36:59.962-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sales Order Processing'/><title type='text'>Default Process Holds for Dynamics GP SOP Doc IDs</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;You can assign default SOP Process Holds to Doc IDs so that when Documents are entered Process Holds that could control the flow of work in your processes are automatically applied.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;You might use default holds if, for example, every Order entered needs to go through a manual Credit Check OR all Backorders needs to be manually allocated. &amp;nbsp;Then, you could use SmartList to view documents on holds that are important to you.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;To assign a Default Hold to a Doc ID:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: 13px;"&gt;Navigate to Sales Document Setup through Sales Order Processing Setup. &amp;nbsp;Depending on which type of Document you select the name of the Doc ID Setup window will vary.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: 13px;"&gt;In the Doc ID setup window click the Holds button on the bottom right hand corner of that window to open the Sales Process Holds Assignments window.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: 13px;"&gt;In that window, you can specify which Process Holds will be automatically applied to a Document when entered into GP.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_-WeKxh9zdSA/THMYdvkwPTI/AAAAAAAAAOc/hLhQfJSaYHQ/s1600/DefSOPHold.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="352" src="http://4.bp.blogspot.com/_-WeKxh9zdSA/THMYdvkwPTI/AAAAAAAAAOc/hLhQfJSaYHQ/s400/DefSOPHold.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-4295629559516473785?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/4295629559516473785/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=4295629559516473785' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/4295629559516473785'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/4295629559516473785'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2010/08/default-process-holds-for-dynamics-gp.html' title='Default Process Holds for Dynamics GP SOP Doc IDs'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_-WeKxh9zdSA/THMYdvkwPTI/AAAAAAAAAOc/hLhQfJSaYHQ/s72-c/DefSOPHold.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-8110946458239173597</id><published>2010-08-23T19:36:00.000-05:00</published><updated>2010-08-23T19:36:40.600-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Contract Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Field Service Series'/><title type='text'>Cancelling Dynamics GP Contract Lines</title><content type='html'>If you ever need to cancel Contract Lines (Field Service Contract Administration Module Contract Lines that is) outside of GP try this:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;DECLARE @RC int&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;DECLARE @CONSTS smallint&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;DECLARE @CONTNBR char(11)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;DECLARE @LNSEQNBR numeric(19,5)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;DECLARE @CANCELDATE datetime&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;-- TODO: Set parameter values here.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;EXECUTE @RC = [dbo].[SVC_Cancel_Contract_Line]&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; @CONSTS&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;,@CONTNBR&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;,@LNSEQNBR&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp;,@CANCELDATE&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;GO&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The team that developed the Field Service Series made it quite easy to leverage some of the same stored procedures called by GP to perform various functions such as this.&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-8110946458239173597?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/8110946458239173597/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=8110946458239173597' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/8110946458239173597'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/8110946458239173597'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2010/08/cancelling-dynamics-gp-contract-lines.html' title='Cancelling Dynamics GP Contract Lines'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-897799011985278751</id><published>2010-08-23T14:51:00.002-05:00</published><updated>2010-08-23T14:52:29.788-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VBA'/><category scheme='http://www.blogger.com/atom/ns#' term='Sales Order Processing'/><title type='text'>Disallow adding Serial Numbers on the fly when fulfilling Orders in Dynamics GP</title><content type='html'>If you want to prevent users from adding new Serial Numbers on the fly when fulfilling Sales Documents in Dynamics GP try this:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Add the Sales Serial Number Entry window to VBA&lt;/li&gt;&lt;li&gt;On the Window_BeforeModalDialog event paste in this code:&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;div&gt;If PromptString = "Do you want to add this serial number?" Then&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;Answer = dcButton2&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;MsgBox "You must select a serial number from the list of available serial numbers."&lt;/div&gt;&lt;div&gt;End If&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now, when a user attempts to add a serial number on the fly when fulfilling a Sales Document they will be presented with a message&amp;nbsp;instructing&amp;nbsp;them to pick one from the list instead.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_-WeKxh9zdSA/THLQ-7MYryI/AAAAAAAAANU/qFPWzfUuKgQ/s1600/SNPrompt.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="263" src="http://4.bp.blogspot.com/_-WeKxh9zdSA/THLQ-7MYryI/AAAAAAAAANU/qFPWzfUuKgQ/s400/SNPrompt.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-897799011985278751?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/897799011985278751/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=897799011985278751' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/897799011985278751'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/897799011985278751'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2010/08/disallow-adding-serial-numbers-on-fly.html' title='Disallow adding Serial Numbers on the fly when fulfilling Orders in Dynamics GP'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_-WeKxh9zdSA/THLQ-7MYryI/AAAAAAAAANU/qFPWzfUuKgQ/s72-c/SNPrompt.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-6505006477352182757</id><published>2010-08-22T13:41:00.000-05:00</published><updated>2010-08-22T13:41:46.205-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Row by row analysis and execution with Cursors</title><content type='html'>Being able to do row by row data analysis and manipulation with SQL could be something that's missing from your toolbox. &amp;nbsp;Whether you're converting data or developing a customization, cursors can prove to be quite useful. &amp;nbsp;I use this template often. &amp;nbsp;Loops are generally preferred to cursors for better performance but I still go to cursors often.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This example will pass all of the ACTINDX and ACTNUMST values from the GL00105 table into a cursor called curCursorName and select the variable values, displaying them in the SMS query results pane, before going to the next.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;All you have to do is 1)&amp;nbsp;declare a variable for each value you need to select into your cursor, 2)&amp;nbsp;replace the select statement with the data set on which you need to do row by row analysis or manipulation, 3) write you own logic for the EXECUTE THE LOGIC section, and 4) replace the variables in the FETCH sections&amp;nbsp;with your own. &amp;nbsp;Remember, the values must be selected into the cursor in the same order the variables are fetched.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;--DECLARE THE VARIABLES&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;DECLARE @ACTINDX&lt;/span&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;INT,&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;@ACTNUMST&lt;/span&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;VARCHAR(50)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;--DECLARE THE CURSOR&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;DECLARE curCursorName cursor fast_forward for&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;-- SELECT THE VARIABLES&lt;/span&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;INTO THE CURSOR&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;SELECT &lt;/span&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;ACTINDX, ACTNUMST&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;FROM GL00105 T with (nolock)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;--OPEN THE CURSOR&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;OPEN curCursorName&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;--FETCH A RECORD FROM THE CURSOR&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;FETCH next from curCursorName&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;into @ACTINDX, @ACTNUMST&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;WHILE (@@FETCH_STATUS = 0)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;BEGIN&lt;/span&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;--EXECUTE THE LOGIC&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;select @ACTINDX, @ACTNUMST&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;--GET THE NEXT RECORD&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;FETCH next from&lt;/span&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;curCursorName&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;into @ACTINDX, @ACTNUMST&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;END&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;--CLOSE AND DEALLOCATE THE CURSOR&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;CLOSE curCursorName&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;DEALLOCATE curCursorName&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-6505006477352182757?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/6505006477352182757/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=6505006477352182757' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/6505006477352182757'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/6505006477352182757'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2010/08/row-by-row-analysis-and-execution-with.html' title='Row by row analysis and execution with Cursors'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-2476612715861108021</id><published>2010-08-22T12:20:00.002-05:00</published><updated>2010-08-22T16:55:14.354-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VBA'/><category scheme='http://www.blogger.com/atom/ns#' term='Modifier'/><category scheme='http://www.blogger.com/atom/ns#' term='Contract Administration'/><title type='text'>Filtering Grids in Dynamics GP with Modifier/VBA</title><content type='html'>It is pretty simple to apply custom filters to grids in Dynamics GP to control the data that loads into&amp;nbsp;Lookups and Transaction Entry Windows.&lt;br /&gt;&lt;br /&gt;In this example, my client wanted to be able to filter the Contract Maintenance - Lines window by Item Number and/or Serial Number. &amp;nbsp;Their contracts can be quite lengthy. &amp;nbsp;Research and contract maintenance would be cumbersome and inefficient&amp;nbsp;without the ability to filter the records in this window.&lt;br /&gt;&lt;br /&gt;To do this, use Modifier to add 2 new Text Boxes to the Contract Maintenance - Lines window in which to capture the filter criteria. &amp;nbsp;I placed them directly above the grid in the window.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_-WeKxh9zdSA/THFa2mPVF6I/AAAAAAAAAMs/JjF8Oum4XAw/s1600/CAMaintLinesFilter.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="305" src="http://3.bp.blogspot.com/_-WeKxh9zdSA/THFa2mPVF6I/AAAAAAAAAMs/JjF8Oum4XAw/s400/CAMaintLinesFilter.JPG" style="cursor: move;" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Next, add the Contract Maintenance - Lines window and the following fields to your VBA Project:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Item Number and Serial Number in the Grid&lt;/li&gt;&lt;li&gt;Item Number and Serial Number fields you added with Modifier&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Paste the following code in the ContractMaintenanceLDetail Grid BeforeLinePopulate event:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_-WeKxh9zdSA/THFcF1gq4GI/AAAAAAAAAM8/aIgL8-ZfbIc/s1600/CAMaintLinesFilterVBA.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="181" src="http://1.bp.blogspot.com/_-WeKxh9zdSA/THFcF1gq4GI/AAAAAAAAAM8/aIgL8-ZfbIc/s400/CAMaintLinesFilterVBA.JPG" style="cursor: move;" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now, just click the Redisplay button to apply the filter.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_-WeKxh9zdSA/THFbMXly_YI/AAAAAAAAAM0/8WpPN1juOGI/s1600/CAMaintLinesFilterApplied.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="306" src="http://3.bp.blogspot.com/_-WeKxh9zdSA/THFbMXly_YI/AAAAAAAAAM0/8WpPN1juOGI/s400/CAMaintLinesFilterApplied.JPG" style="cursor: move;" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This code will evaluate records as they are populated in the grid and reject those that don't match the filter criteria. &amp;nbsp;In this case, I used the Like operator so that any records that did not contain the filter criteria would be rejected.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-2476612715861108021?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/2476612715861108021/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=2476612715861108021' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/2476612715861108021'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/2476612715861108021'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2010/08/filtering-grids-in-dynamics-gp-with_22.html' title='Filtering Grids in Dynamics GP with Modifier/VBA'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_-WeKxh9zdSA/THFa2mPVF6I/AAAAAAAAAMs/JjF8Oum4XAw/s72-c/CAMaintLinesFilter.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-2583210258831901859</id><published>2010-08-20T11:39:00.001-05:00</published><updated>2010-08-20T12:38:42.042-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MJ Solution'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio Toolkit'/><category scheme='http://www.blogger.com/atom/ns#' term='Password Expiration Prompt'/><title type='text'>Dynamics GP Password Expiration Notice</title><content type='html'>Last year, I posted a VST customization I thought I would sell to a client that would give users advanced notice that their GP Password was about to expire. That version was locked to only work in Fabrikam. Since that sale never materialized, I have unlocked it and am distributing it for free, "AS IS" with no warranties. You can &lt;a href="http://www.box.net/shared/9ym9xl4vvn"&gt;download the unlocked version here&lt;/a&gt;! Just drop it in the GP\Addins directory. I have only tested this on version 10 of Dynamics GP.&lt;br /&gt;&lt;br /&gt;The Dynamics GP Blogster has talked about &lt;a href="http://dynamicsgpblogster.blogspot.com/2010/07/enforcing-password-policy-with.html"&gt;why system administrators are not taking advantage of the password policy enforcement feature in Dynamics GP&lt;/a&gt;. If you or your customers are growing frustrated that your user's passwords are expiring without notice and IT is having to reset them frequently you might like this mod. It works like this...&lt;br /&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;For compatibility with SQL2005 I decided to store a Maximum Password Age with the Number of Days before expiration to begin notifying users that their passwords would expire. &amp;nbsp;I could have integrated it with windows security policy or active directory to get these values directly but I didn't do that here. With SQL2008 you would only need to store the Number of Days before expiration to start notifying because you can query the&amp;nbsp;DaysUntilExpiration LoginProperty in SQL2008. &amp;nbsp;I wrote this work both ways depending on which version of SQL was running.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;To capture the fields I needed I created a new Dynamics GP form in Visual Studio Tools that could be accessed from the Additionals Menu in Company Setup. &amp;nbsp;I chose to store this data in the DUOS so that I didn't have to deal with creating any new tables. &amp;nbsp;Therefore, you can setup each company to behave differently which could be a blessing or a curse.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; line-height: 20px; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_-WeKxh9zdSA/TG6pYvhg24I/AAAAAAAAAME/AMLxvTobrZU/s1600/PWExpirySetup.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;&lt;img border="0" height="272" src="http://3.bp.blogspot.com/_-WeKxh9zdSA/TG6pYvhg24I/AAAAAAAAAME/AMLxvTobrZU/s400/PWExpirySetup.gif" width="400" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;&lt;a href="http://2.bp.blogspot.com/_-WeKxh9zdSA/SzEFEv9UefI/AAAAAAAAAJE/cZevwEFRiCQ/s1600-h/PWExpirationNotice.gif" imageanchor="1" style="clear: left; display: inline !important; margin-bottom: 1em; margin-right: 1em; text-decoration: none;"&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Next, I added a NewHandler in VST on the SwitchCompanyCloseAfterOriginal event to compare the age of the users password to the maximum password age and days before notification captured in the PWExpirationNotice VST Form. &amp;nbsp;If the user is due to be notified that their password would expire soon I present them with a message box...&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; line-height: 20px; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_-WeKxh9zdSA/SzEIHyKvBWI/AAAAAAAAAJM/w-BMdIlXwwM/s1600-h/PWExpirationPrompt.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-decoration: none;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_-WeKxh9zdSA/SzEIHyKvBWI/AAAAAAAAAJM/w-BMdIlXwwM/s400/PWExpirationPrompt.gif" style="border-bottom-style: none; border-color: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; position: relative;" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;... and then the User Password Setup window in which they could change their password on their way into the GP Company.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; line-height: 20px; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_-WeKxh9zdSA/SzEIN1g4rpI/AAAAAAAAAJU/eEafsZ2sVKc/s1600-h/PWChangePassword.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-decoration: none;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_-WeKxh9zdSA/SzEIN1g4rpI/AAAAAAAAAJU/eEafsZ2sVKc/s400/PWChangePassword.gif" style="border-bottom-style: none; border-color: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; position: relative;" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;The prompt and User Password Setup window are only presented on the first login for a session. &amp;nbsp;So, the users won't be nagged&amp;nbsp;every time&amp;nbsp;they change companies without shutting down GP first. &amp;nbsp;They also aren't forced to change their password but rather given the option to do so easily at a convenient time so that they don't get locked out later.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="line-height: 20px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-2583210258831901859?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/2583210258831901859/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=2583210258831901859' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/2583210258831901859'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/2583210258831901859'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2010/08/dynamics-gp-password-expiration-notice.html' title='Dynamics GP Password Expiration Notice'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_-WeKxh9zdSA/TG6pYvhg24I/AAAAAAAAAME/AMLxvTobrZU/s72-c/PWExpirySetup.gif' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-9088460348888560019</id><published>2010-08-18T11:57:00.002-05:00</published><updated>2011-08-09T22:08:31.173-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOP Batch Reconcile'/><category scheme='http://www.blogger.com/atom/ns#' term='Sales Order Processing'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Reconciling SOP Batches in Dynamics GP</title><content type='html'>Yesterday I posted a &lt;a href="http://mbsguru.blogspot.com/2010/08/deleting-empty-sop-batches-made-easy.html"&gt;SQL proc that would reconcile SOP Batches and delete any that were empty&lt;/a&gt;. &amp;nbsp;I realized that was somewhat incomplete after learning about a problem another client was having with missing batch headers. &amp;nbsp;That also is not for everyone since there was not an option to NOT delete empty batches.&lt;br /&gt;&lt;br /&gt;To that end, I have posted a new SQL proc that will reconcile SOP Batch Totals, optionally delete any empty batches, and add any missing batch headers. &amp;nbsp;If this sounds like something that would be useful to you, feel free to &lt;a href="http://www.box.net/shared/e9adap4o90"&gt;download the proc here&lt;/a&gt;, load it on your GP company database, and then simply run the following to execute it:&lt;br /&gt;&lt;br /&gt;EXEC [dbo].[SACi_sp_GP_SOP_Batch_Reconcile] 'Sales Entry', 1&lt;br /&gt;&lt;br /&gt;The second parameter will drive whether or not empty batches are deleted. &amp;nbsp;Pass a 1 to delete empty batches and a 0 to not delete empty batches.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: x-small;"&gt;This blog is provided "AS IS" with no warranties, and confers no rights.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-9088460348888560019?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/9088460348888560019/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=9088460348888560019' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/9088460348888560019'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/9088460348888560019'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2010/08/reconciling-sop-batches-in-dynamics-gp.html' title='Reconciling SOP Batches in Dynamics GP'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-4216970374444792812</id><published>2010-08-16T13:03:00.002-05:00</published><updated>2011-08-09T22:09:14.616-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOP Batch Reconcile'/><category scheme='http://www.blogger.com/atom/ns#' term='Sales Order Processing'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Deleting Empty SOP Batches Made Easy</title><content type='html'>I took a support call recently in which a client explained that they had accumulated hundreds of empty SOP Batches that they wanted to delete. &amp;nbsp;In response, I produced a simple proc that will scroll through the "Sales Entry" Batches and, like Check Links on Sales Work, will update the Number of Transactions and Batch Total on each. &amp;nbsp;This proc goes one step further and deletes any Batches for which the Number of Transactions is 0. &amp;nbsp;Of course, there are many reasons why you might want to keep some of your Batches even though they are empty so this might not be for everyone.&lt;br /&gt;&lt;br /&gt;If this sounds like something that would be useful to you, feel free to&amp;nbsp;&lt;a href="http://www.box.net/shared/ifojn3mn31"&gt;download the proc here&lt;/a&gt;, load it on your GP company database,&amp;nbsp;and then simply run the following to execute it:&lt;br /&gt;&lt;br /&gt;EXEC [dbo].[SACi_sp_GP_SOP_Batch_Cleanup] 'Sales Entry'&lt;br /&gt;&lt;br /&gt;You could schedule a SQL job and run this to clean up your SOP Batches periodically or add a push button to a form in GP for ad-hoc execution from within the application.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: x-small;"&gt;This blog is provided "AS IS" with no warranties, and confers no rights.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-4216970374444792812?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/4216970374444792812/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=4216970374444792812' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/4216970374444792812'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/4216970374444792812'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2010/08/deleting-empty-sop-batches-made-easy.html' title='Deleting Empty SOP Batches Made Easy'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-779108825448804352</id><published>2010-08-06T18:20:00.000-05:00</published><updated>2010-08-06T18:20:59.169-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Equipment Rentals'/><category scheme='http://www.blogger.com/atom/ns#' term='Field Service Series'/><title type='text'>More companies are leasing their Equipment in this economy</title><content type='html'>I read&lt;a href="http://nashville.bizjournals.com/nashville/stories/2010/08/09/story1.html?ana=e_ph"&gt; an article in the Nashville Business Journal with survey results that more companies are spending but more are opting to lease their equipment&lt;/a&gt;&amp;nbsp;instead of buying. &amp;nbsp;I too am seeing the same out in the field.&lt;br /&gt;&lt;br /&gt;If you're already using Dynamics GP to manage your sales operations you're just a few clicks away from using it for managing your leases.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://mbsguru.blogspot.com/2009/04/dynamics-gp-for-equipment-rentals.html"&gt;http://mbsguru.blogspot.com/2009/04/dynamics-gp-for-equipment-rentals.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-779108825448804352?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/779108825448804352/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=779108825448804352' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/779108825448804352'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/779108825448804352'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2010/08/more-companies-are-leasing-their.html' title='More companies are leasing their Equipment in this economy'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-7991157374158331995</id><published>2010-07-19T11:34:00.000-05:00</published><updated>2010-07-19T11:34:37.170-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Training'/><title type='text'>Dynamics GP Conference Session Brainstorming</title><content type='html'>I've been approached recently by a couple of organizations to speak at Dynamics Conference/Learning events this fall. &amp;nbsp;I'd like nothing more than to give back to the community by offering up my time and experience to share with those that might be interested to hear what I have to say.&lt;br /&gt;&lt;br /&gt;I'd like to hear from the community on this if you would be kind enough to spare a moment. &amp;nbsp;&lt;b&gt;&lt;i&gt;What kind of topics, content, etc. do you feel are lacking at these types of events?&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;My technical expertise spans general GP functionality, SQL Server (Administration, SSIS, SSRS, T-SQL Development, etc.), and GP Development/Integration Tools (Modifier/VBA, Visual Studio Tools, Integration Manager, eConnect, etc.) among other topics.&lt;br /&gt;&lt;br /&gt;You can browse some of my blog posts and &lt;a href="http://www.linkedin.com/in/michaelj2"&gt;LinkedIn Profile&lt;/a&gt; to learn pretty quickly what I am good/passionate about if you don't already know. &amp;nbsp;I'd love to hear from you&amp;nbsp;perspective&amp;nbsp;how I might be able to best fill a gap at one of these events. &amp;nbsp;Please share your thoughts with me by commenting on this post or shoot me an e-mail.&lt;br /&gt;&lt;br /&gt;Thanks!&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-7991157374158331995?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/7991157374158331995/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=7991157374158331995' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/7991157374158331995'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/7991157374158331995'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2010/07/dynamics-gp-conference-session.html' title='Dynamics GP Conference Session Brainstorming'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-6527765414637340760</id><published>2010-07-12T12:09:00.001-05:00</published><updated>2010-08-19T11:52:41.367-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Equipment Rentals'/><category scheme='http://www.blogger.com/atom/ns#' term='MJ Solution'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio Toolkit'/><category scheme='http://www.blogger.com/atom/ns#' term='RMA'/><title type='text'>Advanced RMA Entry R2 - Available for Download/Evaluation</title><content type='html'>&lt;a href="http://www.straightarrowusa.com/"&gt;Straight Arrow Consulting, Inc.&lt;/a&gt;&amp;nbsp;has made &lt;a href="http://www.box.net/shared/9rqmlgmpgi"&gt;Advanced RMA Entry R2&lt;/a&gt; available for download and evaluation.&lt;br /&gt;&lt;br /&gt;The Advanced RMA (aRMA) Add-on for Dynamics GP will help you to maximize the value of the investment you made in your Dynamics GP solution in a number of ways. &amp;nbsp;This add-on is particularly well suited for manufacturers/distributors and equipment rental companies but has a place in any solution that leverages the Dynamics GP RMA module to service customers. &amp;nbsp;aRMA&amp;nbsp;extends the Dynamics GP RMA Module to accomplish the following goals:&lt;br /&gt;&lt;br /&gt;1. &amp;nbsp;Allow lines on a single RMA originating from many SOP Invoices.&lt;br /&gt;2. &amp;nbsp;Allow users to append RMA Lines from varied SOP Invoices to Existing RMAs.&lt;br /&gt;3. &amp;nbsp;Streamline RMA Entry to improve customer service levels &amp;amp; satisfaction.&lt;br /&gt;4. &amp;nbsp;Eliminate waste and&amp;nbsp;redundancy&amp;nbsp;in the RMA Entry &amp;amp; Management processes.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I published a &lt;a href="http://mbsguru.blogspot.com/2009/09/advanced-rma-for-gp-is-here.html"&gt;brief article&amp;nbsp;about Advanced RMA Entry&lt;/a&gt;&amp;nbsp;when we first start working on this product late last year. &amp;nbsp;Since, we have released the product and are working to make it more widely available. &amp;nbsp;You can &lt;a href="http://www.straightarrowusa.com/images/stories/SACi-Advanced-RMA-Entry-201007.pdf"&gt;download a fact sheet&lt;/a&gt; with the most current functional overview along with the &lt;a href="http://www.box.net/shared/hfvcemjygy"&gt;AdvancedRMA.dll&lt;/a&gt;&amp;nbsp;file that you will need to install and evaluate the product.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;All feedback, recommendations, requests, and inquiries are welcome.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-6527765414637340760?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/6527765414637340760/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=6527765414637340760' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/6527765414637340760'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/6527765414637340760'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2010/07/advanced-rma-entry-r2-available-for.html' title='Advanced RMA Entry R2 - Available for Download/Evaluation'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-5158563775705127239</id><published>2010-07-08T13:56:00.001-05:00</published><updated>2010-07-08T13:58:46.134-05:00</updated><title type='text'>Take a LOOK INSIDE! The Microsoft Dynamics GP 2010 Cookbook at Amazon</title><content type='html'>I highly recommend that you take some time to browse the content in &lt;a href="http://www.amazon.com/dp/1849680426?tag=polinofamilywebs&amp;amp;camp=213381&amp;amp;creative=390973&amp;amp;linkCode=as4&amp;amp;creativeASIN=1849680426&amp;amp;adid=1YJ4YFNTP08DN436R26Y&amp;amp;"&gt;Mark Polino's recently released "Microsoft Dynamics GP 2010 Cookbook" at Amazon.com&lt;/a&gt;. &amp;nbsp;You will be very impressed with the content.&lt;br /&gt;&lt;br /&gt;This book is a must have for everyone. &amp;nbsp;There are many, not very well known nuggets of information documented in the book that will help everyone from users just beginning to learn Dynamics GP, to Dynamics GP Administrators, to the most experienced field consultants.&lt;br /&gt;&lt;br /&gt;We just don't get the opportunity to apply these concepts everyday. &amp;nbsp;Having them at your finger tips like this is great. &amp;nbsp;I'd like a pocket sized edition but it's nice to be able to download it to my Kindle.&lt;br /&gt;&lt;br /&gt;Thanks Mark! &amp;nbsp;Great work!&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-5158563775705127239?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/5158563775705127239/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=5158563775705127239' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/5158563775705127239'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/5158563775705127239'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2010/07/take-look-inside-microsoft-dynamics-gp.html' title='Take a LOOK INSIDE! The Microsoft Dynamics GP 2010 Cookbook at Amazon'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-2807977315758879833</id><published>2010-06-30T10:47:00.001-05:00</published><updated>2010-06-30T11:40:29.865-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Dynamics GP'/><category scheme='http://www.blogger.com/atom/ns#' term='ISV'/><title type='text'>Is “Horizontal” Accounting Software Dead?</title><content type='html'>&lt;a href="http://www.softwareadvice.com/accounting/"&gt;Accounting Software&lt;/a&gt; blogger Chris Thorman has a &lt;a href="http://www.softwareadvice.com/articles/accounting/is-horizontal-accounting-software-dead-1062310/"&gt;new article up exploring trends towards a decline in demand for horizontal accounting software&lt;/a&gt;. &amp;nbsp;There's little doubt that medium sized and large enterprises are looking for integrated solutions (often industry specific vertical solutions) and that the days of selling standalone, horizontal accounting solutions are winding down.&lt;br /&gt;&lt;br /&gt;Dynamics GP does a great job of filling most of the needs of&amp;nbsp;medium sized and large enterprises&amp;nbsp;across most industries.&lt;br /&gt;&lt;br /&gt;GP&amp;nbsp;delivers functionality to create an integrated, enterprise wide footprint across you organization; Accounting, Distribution, Manufacturing, Project Accounting, Retail Management, and Field Service Management are just a few of the integrated solutions available from Dynamics GP. &lt;br /&gt;&lt;br /&gt;It&amp;nbsp;is easily designed, tailored. and/or customized through the implementation process to meet the specific needs of individual companies, functional departments, and even users. &amp;nbsp;This value added service does not have to break the budget for an implementation. &amp;nbsp;Given the pricing model for GP and the relative ease of implementation the ROI for a Dynamics GP implementation is very attractive to executives and stakeholders.&lt;br /&gt;&lt;br /&gt;Microsoft is pushing partners to focus on developing industry specific, vertical expertise more and more and rewarding them for it. &amp;nbsp;The ISV channel is producing great vertical solutions for GP at a rapid pace. &amp;nbsp;I don't think there's any doubt that horizontal accounting software is on the decline. &amp;nbsp;We're not selling or implementing accounting software anymore. &amp;nbsp;For many of us, it's dead already.&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-2807977315758879833?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/2807977315758879833/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=2807977315758879833' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/2807977315758879833'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/2807977315758879833'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2010/06/is-horizontal-accounting-software-dead.html' title='Is “Horizontal” Accounting Software Dead?'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-2190567717786235624</id><published>2010-06-28T19:22:00.001-05:00</published><updated>2010-06-28T19:57:01.421-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Dexterity'/><title type='text'>Dexterity and IntelliSense:  Who says nothing is impossible?</title><content type='html'>The Dynamics GP Blogster is passionately taking on the challenge to get &lt;a href="http://dynamicsgpblogster.blogspot.com/2010/06/dex-dexterity-and-intellisense-its-time.html"&gt;IntelliSense implemented in Dexterity&lt;/a&gt;. &amp;nbsp;When I made the statement to him&amp;nbsp;that the likelihood that this would ever happen is&amp;nbsp;ridiculously&amp;nbsp;low his response to me was inspiring; "Good inventions were never right the first time around, they took several tries and awareness".&lt;br /&gt;&lt;br /&gt;I voted for this feature. &amp;nbsp;If you want to get everything you can get out of GP you should vote for it too. &amp;nbsp;Go vote today at&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: Calibri; font-size: 14px; line-height: 18px;"&gt;&lt;a href="http://connect.microsoft.com/" style="color: #336699;"&gt;http://connect.microsoft.com/&lt;/a&gt;!&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-2190567717786235624?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/2190567717786235624/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=2190567717786235624' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/2190567717786235624'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/2190567717786235624'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2010/06/dexterity-and-intellisense-who-says.html' title='Dexterity and IntelliSense:  Who says nothing is impossible?'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-2195920600545740053</id><published>2010-05-03T17:03:00.000-05:00</published><updated>2010-05-03T17:03:55.635-05:00</updated><title type='text'>Dynamics GP 2010 is available for download... now!</title><content type='html'>Dynamics GP 2010 is available for download on PartnerSource and CustomerSource:&lt;br /&gt;&lt;br /&gt;&lt;a href="https://mbs.microsoft.com/partnersource/support/selfsupport/productreleases/MDGP2010_Release_Download"&gt;PartnerSource Download&lt;/a&gt;&lt;br /&gt;&lt;a href="https://mbs.microsoft.com/customersource/downloads/servicepacks/MDGP2010_Release_Download"&gt;CustomerSource Download&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Microsoft isn't sending out media automatically opting for a green distribution strategy. &amp;nbsp;Go download your copy and get started today!&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-2195920600545740053?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/2195920600545740053/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=2195920600545740053' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/2195920600545740053'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/2195920600545740053'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2010/05/dynamics-gp-2010-is-available-for.html' title='Dynamics GP 2010 is available for download... now!'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-4441992890061936018</id><published>2010-05-02T12:50:00.005-05:00</published><updated>2010-05-02T12:51:46.239-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Training'/><title type='text'>"Microsoft Dynamics GP 2010 Cookbook" available for preorder now!</title><content type='html'>Dynamics GP MVP and consultant extraordinaire Mark Polino of DynamicAccounting.net has been working hard on a new book titled "Microsoft Dynamics GP 2010 Cookbook". &amp;nbsp;It's now available for preorder at&amp;nbsp;&lt;a href="https://www.packtpub.com/microsoft-dynamics-gp-2010-cookbook/book"&gt;https://www.packtpub.com/microsoft-dynamics-gp-2010-cookbook/book&lt;/a&gt;&amp;nbsp;and scheduled for release in the August/September&amp;nbsp;time frame.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_-WeKxh9zdSA/S926y4LX1jI/AAAAAAAAALU/qbj9l4befg4/s1600/0424_MockupCover_Cookbook.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://2.bp.blogspot.com/_-WeKxh9zdSA/S926y4LX1jI/AAAAAAAAALU/qbj9l4befg4/s200/0424_MockupCover_Cookbook.jpg" width="164" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;If you know Mark Polino, have attended any of &lt;a href="http://www.box.net/shared/5pgrxp0djn"&gt;his Dynamics GP 50 Tips Sessions&lt;/a&gt; at Convergence, and/or have been following his &lt;a href="http://msdynamicsgp.blogspot.com/"&gt;blog&lt;/a&gt;&amp;nbsp;over the years you know his overall knowledge of all things Dynamics GP is unmatched. &amp;nbsp;If you are brand new to the world of Dynamics GP I have no doubt that you will find this tips style book, with content applicable to versions 8, 9, 10, and 2010, to be your most valued reference to expand and deepen your knowledge of Dynamics GP. &amp;nbsp;It's excited to see his book being published. &amp;nbsp;This without a doubt will have something for everyone.&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-4441992890061936018?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/4441992890061936018/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=4441992890061936018' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/4441992890061936018'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/4441992890061936018'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2010/05/microsoft-dynamics-gp-2010-cookbook.html' title='&quot;Microsoft Dynamics GP 2010 Cookbook&quot; available for preorder now!'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_-WeKxh9zdSA/S926y4LX1jI/AAAAAAAAALU/qbj9l4befg4/s72-c/0424_MockupCover_Cookbook.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-7050304973253264658</id><published>2010-04-28T13:05:00.001-05:00</published><updated>2010-04-28T13:14:03.540-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Dynamics GP'/><category scheme='http://www.blogger.com/atom/ns#' term='Business Intelligence'/><category scheme='http://www.blogger.com/atom/ns#' term='Convergence'/><category scheme='http://www.blogger.com/atom/ns#' term='Training'/><category scheme='http://www.blogger.com/atom/ns#' term='Retail Management'/><category scheme='http://www.blogger.com/atom/ns#' term='Support Debugging Tool'/><category scheme='http://www.blogger.com/atom/ns#' term='CRM'/><category scheme='http://www.blogger.com/atom/ns#' term='Contract Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='Field Service Series'/><title type='text'>The Best of Convergence 2010... from a Consultant's perspective.</title><content type='html'>I had a great time at Convergence this week. &amp;nbsp;With ~8,500 people in attendance this was quite an event that Microsoft pulled off remarkably. &amp;nbsp;Here's are some of my takes on the conference and some reasons why you should consider attending next year:&lt;br /&gt;&lt;br /&gt;1. &amp;nbsp;&lt;b&gt;Learning Opportunities galore!&lt;/b&gt; &amp;nbsp;The opportunity for education and learning for everyone at Convergence is at an all time high.&lt;br /&gt;&lt;br /&gt;I don't have to administer GP systems on a day to day basis in my role BUT getting the opportunity to sit through another &lt;a href="http://dynamicsgpblogster.blogspot.com/2010/04/microsoft-dynamics-convergence-2010-day_28.html"&gt;Mariano and Dave show&lt;/a&gt; on the Support Debugging Tool reminded me how much work that can be. &amp;nbsp;I had a client at the conference ask me why I hadn't turn him on to this tool before after he had attended the session. &amp;nbsp;Ooops! &amp;nbsp;Visit the Support Debugging Tool Portal for more information&amp;nbsp;&lt;a href="http://blogs.msdn.com/developingfordynamicsgp/pages/support-debugging-tool.aspx"&gt;http://blogs.msdn.com/developingfordynamicsgp/pages/support-debugging-tool.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I finally got to see a Polino 50 Tips session. &amp;nbsp;You can download the slide deck here&amp;nbsp;&lt;a href="http://msdynamicsgp.blogspot.com/2010/04/convergence-2010-50-more-tips-in-50.html"&gt;http://msdynamicsgp.blogspot.com/2010/04/convergence-2010-50-more-tips-in-50.html&lt;/a&gt;. &amp;nbsp;I've been a GP consultant since 1997 and started working with Mark in 1999. &amp;nbsp;Yet, I still learned a lot in this session. &amp;nbsp;Even if you're the most seasoned consultant, GP administrator, or power user you need to check this out. &amp;nbsp;Plus, if you sit up front you are better looking for it.&lt;br /&gt;&lt;br /&gt;The interactive sessions were great. &amp;nbsp;&lt;a href="http://www.gpug.com/"&gt;GPUG&lt;/a&gt;&amp;nbsp;sponsored a session in which we discussed various solutions, problems, and uses applicable to SmartList Builder for Dynamics GP. &amp;nbsp;Participants had an open forum with industry experts &amp;amp; Microsoft Support Engineers to voice their requirements or problems and get&amp;nbsp;immediate&amp;nbsp;feedback, suggestions, and in many cases solutions on the spot. &amp;nbsp;That type of response alone was worth the price of admission.&lt;br /&gt;&lt;br /&gt;2. &amp;nbsp;&lt;b&gt;Networking, networking, networking...&lt;/b&gt; &lt;b&gt;&lt;i&gt;Together&lt;/i&gt;&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;Catching up with old friends like Bob McAdam at &lt;a href="http://www.tribridge.com/"&gt;Tribridge&lt;/a&gt;,&amp;nbsp;Dwight Specht at &lt;a href="http://www.ibis.com/"&gt;IBIS&lt;/a&gt;, Marc Blumenthal at &lt;a href="http://www.intelladon.com/"&gt;Intelladon&lt;/a&gt;, Susan Looby at &lt;a href="http://www.acemicrotech.com/"&gt;ACE&lt;/a&gt;,&amp;nbsp;and my partner Tom Karpowich at &lt;a href="http://www.straightarrowusa.com/"&gt;Straight Arrow Consulting&lt;/a&gt;&amp;nbsp;was great fun but reconnecting with current and former clients,&amp;nbsp;renewing relationships,&amp;nbsp;and making new connections really made this worthwhile for me. &amp;nbsp;I was able to help a few people out with some problems they were having, a few others helped me find some solutions to some of my clients problems, and I was able to pick up a few new engagements to boot.&lt;br /&gt;&lt;br /&gt;3. &amp;nbsp;&lt;b&gt;The Expo was terrific.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The ISV network for Dynamics GP is fantastic. &amp;nbsp;&lt;a href="http://www.reporting-central.com/Downloads/The%20Closer%20-%20Brochure2.pdf"&gt;The Closer&lt;/a&gt; was quite a popular attraction, I was able to help a client review some retail management solutions with &lt;a href="http://www.profad.com/download/GP_RMSConnectPro.pdf"&gt;Professional Advantage&lt;/a&gt; and &lt;a href="http://www.nodustech.com/Retail_Advantage.pdf"&gt;Nodus Technologies&lt;/a&gt;, and some of the Atlanta Falcon's Cheerleaders dropped by. &amp;nbsp;There's virtually a solution for every problem and requirement at the Expo. &amp;nbsp;It was worth the price of admission just to be able to talk to all of the ISVs and take some of the products for a test drive.&lt;br /&gt;&lt;br /&gt;4. &amp;nbsp;&lt;b&gt;Reviewing new and existing but under utilized functionality&lt;/b&gt; has better equipped me to serve my clients &lt;b&gt;&lt;i&gt;Today and Tomorrow&lt;/i&gt;&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;Today&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;: &amp;nbsp;E&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;veryone should spend some time with Excel Report Builder for Dynamics GP. &amp;nbsp;It's extremely simple to use and administer. &amp;nbsp;Admittedly, I had not used this feature of Dynamics GP. &amp;nbsp;But, after sitting through a very well delivered session on the subject I now feel like an expert on the tool. &amp;nbsp;It's that simple and will allow you to very quickly and easily create Excel Reports hooked directly to your GP data that can be accessed by anyone in your organization WITHOUT logging into GP. &amp;nbsp;Saves time and money. &amp;nbsp;Who doesn't like that?&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;Tomorrow&lt;/i&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;: &amp;nbsp;A&lt;/span&gt;&lt;/b&gt;s a Field Service Consultant, among many other things, I was excited to see some new enhancements coming out to that suite of modules with GP 2010. &amp;nbsp;Consolidated Contract Invoicing, support for Kits and Non Inventory Items, and multi-level escalations are just a few of the great new features coming out next month. &amp;nbsp;Everyone is excited about GP 2010.&lt;br /&gt;&lt;br /&gt;5. &amp;nbsp;&lt;b&gt;Dynamics CRM continues to impress&lt;/b&gt;&amp;nbsp;on several levels.&lt;br /&gt;&lt;br /&gt;I've been working on a CRM Implementation this year and am very familiar with the core functionality and customization tools so I didn't attend sessions on those topics. &amp;nbsp;There were just too many other sessions I felt compelled to attend. &amp;nbsp;But, it was obvious to me that the CRM footprint continues grow within the Dynamics family of products.&lt;br /&gt;&lt;br /&gt;I have followed the evolution of the integration between Dynamics CRM and Dynamics GP and was able to attend the session on that. &amp;nbsp;There are many integration options and they continue to grow rapidly. &amp;nbsp;You can learn more about that here &amp;nbsp;&lt;a href="http://crm.dynamics.com/en-us/technology/integration.aspx"&gt;http://crm.dynamics.com/en-us/technology/integration.aspx&lt;/a&gt;. &amp;nbsp;They demonstrated how non developers can quickly create unique synchronizations between the systems leveraging a simple mapping UI. &amp;nbsp;Of course, there is advanced functionality that does require some developer skills, such as hooking up services to external applications, that will allow you to create more complex integrations.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;In summary&lt;/b&gt;, I had a great time. &amp;nbsp;The food and drink were abundant and varied. &amp;nbsp;The&amp;nbsp;accommodations&amp;nbsp;were excellent and convenient. &amp;nbsp;The location in the heart of Atlanta was fun and exciting. &amp;nbsp;The people were engaging. &amp;nbsp;The content was of exceptional value. &amp;nbsp;I can't enough about how much I got out of this conference.&lt;br /&gt;&lt;br /&gt;Other than the 3 mile hikes between sessions in the Georgia World Congress Center and some bottlenecks in the flow at escalators I just can't find anything to complain about. &amp;nbsp;Of course, with over 8,000 people in attendance you have to expect some&amp;nbsp;logistical&amp;nbsp;challenges. &amp;nbsp;I have to applaud everyone who made the event what it was. &amp;nbsp;Well done! &amp;nbsp;Thank you!&lt;br /&gt;&lt;br /&gt;Start making plans for next year!&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-7050304973253264658?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/7050304973253264658/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=7050304973253264658' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/7050304973253264658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/7050304973253264658'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2010/04/best-of-convergence-2010-from.html' title='The Best of Convergence 2010... from a Consultant&apos;s perspective.'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-3745200632433408244</id><published>2010-02-09T10:15:00.000-06:00</published><updated>2010-02-09T10:15:30.403-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Reporting Services'/><category scheme='http://www.blogger.com/atom/ns#' term='Sales Order Processing'/><category scheme='http://www.blogger.com/atom/ns#' term='Business Portal'/><title type='text'>My Article was published on MSDynamicsWorld.com</title><content type='html'>Check out &lt;a href="http://msdynamicsworld.com/story/bi-reporting/how-publish-salesperson-specific-data-field-microsoft-dynamics-gp-and-sql-reporti"&gt;my article on publishing Salesperson Specific Data using Dyanmics GP, Business Portal, and SQL Server Reporting Services&lt;/a&gt;&amp;nbsp;out at MSDynamicsWorld.com&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-3745200632433408244?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/3745200632433408244/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=3745200632433408244' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/3745200632433408244'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/3745200632433408244'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2010/02/my-article-was-published-on.html' title='My Article was published on MSDynamicsWorld.com'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-3989166048153038564</id><published>2010-02-01T10:39:00.000-06:00</published><updated>2010-02-01T10:39:31.805-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Reporting Services'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Generating charts in SQL Server Reporting Services</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;SQLServerCentral.com has a nice post up with &lt;a href="http://www.sqlservercentral.com/articles/Reporting+Services+(SSRS)/69176/"&gt;step-by-step instructions on generating charts in SQL Reporting Services&lt;/a&gt;. &amp;nbsp;With Dynamics GP moving more and more towards SQL Reporting Services as the standard reporting tool this is worth a look.&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-3989166048153038564?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/3989166048153038564/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=3989166048153038564' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/3989166048153038564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/3989166048153038564'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2010/02/generating-charts-in-sql-server.html' title='Generating charts in SQL Server Reporting Services'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-1040660584277947961</id><published>2010-01-19T12:04:00.008-06:00</published><updated>2010-01-19T17:57:50.147-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hybrid Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Dag.exe'/><category scheme='http://www.blogger.com/atom/ns#' term='VBA'/><category scheme='http://www.blogger.com/atom/ns#' term='Modifier'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio Toolkit'/><title type='text'>Hybrid Development:  Using VST to overcome the Cyclic reference of projects constraint in VBA</title><content type='html'>When customizing GP with Modifier/VBA you may run into situations where you need to create cyclic references between .vba Projects. &amp;nbsp;In this example, I needed to allow the assignment a Contract Type to each Item in Item Maintenance to meet a Customer's requirement. &amp;nbsp;Contract Type Lookup is in the Field Service dictionary and Item Maintenance is in the Dynamics dictionary.&lt;br /&gt;&lt;br /&gt;I first tried using VBA to 1) Open the Contract Lookup after clicking on a lookup push button I added to Item Maintenance and then 2) Update a new string field I added to capture and display the Contact Type assigned to each item in Item Maintenance. &amp;nbsp;To do this with VBA I had to open Contract Lookup from Item Maintenance in the Dynamics dictionary and then set the value in my custom string field on Item Maintenance on the Contract Type Lookup Select After User Changed Event. &amp;nbsp;To do this, I would have to set a reference from Dynamics to FieldService AND from FieldService to Dynamics. &amp;nbsp;You'll quickly discover that this is not permitted in VBA.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_-WeKxh9zdSA/S1Xm1ApoFsI/AAAAAAAAAKM/1P5btQIyErs/s1600-h/CyclicReferencesNotAllowed.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_-WeKxh9zdSA/S1Xm1ApoFsI/AAAAAAAAAKM/1P5btQIyErs/s400/CyclicReferencesNotAllowed.gif" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Before the introduction of VST you would have had to create your own lookup window. &amp;nbsp;A workable solution, but not optimal. &amp;nbsp;Now, with the VST for GP the solution is simple. &amp;nbsp;You can use the Dictionary Assembly Generator (Dag.exe) to create an application assembly for your modified forms. &amp;nbsp;This is required to access local fields added to windows in GP using Modifier. &amp;nbsp;Over at &lt;a href="http://dynamicsgpblogster.blogspot.com/"&gt;The Dynamics GP Blogster&lt;/a&gt;, Mariano does a good job describing &lt;a href="http://dynamicsgpblogster.blogspot.com/search?q=DAG"&gt;how to do use the Dag.exe&lt;/a&gt; in one of his posts on hybrid development techniques. &amp;nbsp;Mariano explains:&lt;br /&gt;&lt;br /&gt;Use the &lt;b&gt;Dictionary Assembly Generator (DAG.EXE)&lt;/b&gt; tool provided with Visual Studio Tools to generate the &lt;b&gt;&lt;i&gt;Application.Dynamics.ModifiedForms.dll&lt;/i&gt;&lt;/b&gt; application assembly for the forms dictionary. &amp;nbsp;Since &lt;b&gt;DAG.EXE&lt;/b&gt; is a command line utility, go to the command prompt then go to the Visual Studio Tools SDK folder (typically under Program Files\Microsoft Dynamics\GP10 VS Tools SDK) to execute it, as follows:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Calibri; font-size: 14px; line-height: 18px;"&gt; &lt;span style="font-family: 'courier new'; font-size: 12px;"&gt;dag.exe 0 "C:\Program Files\Microsoft Dynamics\GP\Dynamics.set" /F /N:Dynamics&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'courier new'; font-size: small;"&gt;&lt;span style="font-size: 12px; line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;After adding a reference to the Application.Dynamics.ModifiedForms.dll that to your VST project, you are able to use VST to launch Contract Type Lookup from Item Maintenance and set the value in Item Maintenance on the&amp;nbsp;Contract Type Lookup Select After User Changed Event&amp;nbsp;without issue. &amp;nbsp;The GPAddin.vb code may look like this:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_-WeKxh9zdSA/S1XuFILNdrI/AAAAAAAAAKU/CS1bncpjm08/s1600-h/VSTContTypeLookup.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_-WeKxh9zdSA/S1XuFILNdrI/AAAAAAAAAKU/CS1bncpjm08/s640/VSTContTypeLookup.gif" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The end result is the native Field Service Contract Type Lookup window nicely bound to the Dynamics Item Maintenance Window:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_-WeKxh9zdSA/S1XuzhyXwoI/AAAAAAAAAKc/uV8SSi5ZpBg/s1600-h/ContTypeLookupItemMaint.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_-WeKxh9zdSA/S1XuzhyXwoI/AAAAAAAAAKc/uV8SSi5ZpBg/s400/ContTypeLookupItemMaint.gif" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Next, you would need to save the Contract Type associated with the Item Number to the database. &amp;nbsp;You could do that using either VST or VBA. &amp;nbsp;That's beyond the scope of what I was trying to communicate here but not a bad subject for a future post. &amp;nbsp;Let me know what you think.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-1040660584277947961?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/1040660584277947961/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=1040660584277947961' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/1040660584277947961'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/1040660584277947961'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2010/01/hybrid-development-using-vst-to.html' title='Hybrid Development:  Using VST to overcome the Cyclic reference of projects constraint in VBA'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_-WeKxh9zdSA/S1Xm1ApoFsI/AAAAAAAAAKM/1P5btQIyErs/s72-c/CyclicReferencesNotAllowed.gif' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-6741603711998423128</id><published>2009-12-29T15:50:00.008-06:00</published><updated>2010-08-21T10:44:01.584-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Reporting Services'/><category scheme='http://www.blogger.com/atom/ns#' term='Sales Order Processing'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Publishing User Specific Data from Dynamics GP using SSRS</title><content type='html'>&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;We recently finished a SQL Server Reporting Services engagement for a client requiring that the Sales Order Processing data displayed in reports be filtered by Salesperson. &amp;nbsp;That alone is simple enough; you could simply add the Salesperson or Territory as a parameter on the SSRS Report, right? &amp;nbsp;The challenge here was that reps could never be permitted to view another Salesperson's data. &amp;nbsp;So, it couldn't be quite that simple. &amp;nbsp;This was compounded only slightly by the requirement that, logically, sales managers needed to see all of the data for their Territories. &amp;nbsp;So, depending on whether a Salesperson was a Rep or a Territory Manager the results would vary.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;This client had attempted several different ways to meet their requirements only to find that the simplest method turned out to be the most effective both in terms of delivering results and controlling costs.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;"Make everything as simple as possible, but not simpler." - Albert Einstein&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;To do this, start by simply assigning a network login to each corresponding Salesperson in Salesperson Maintenance:&lt;/div&gt;&lt;div class="separator" style="clear: both; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: auto;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_-WeKxh9zdSA/Szp0a1Raf3I/AAAAAAAAAJk/57PlHWiMoPE/s1600-h/SalesPersonMaint.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_-WeKxh9zdSA/Szp0a1Raf3I/AAAAAAAAAJk/57PlHWiMoPE/s400/SalesPersonMaint.gif" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Now, we wrote stored procedures that would accept the network login as a parameter, evaluate whether the user was a Sales Rep or a Territory Manager, and then return the required data to which the user was assigned. &amp;nbsp;In this example, the stored procedure will return the Top 10 Customers based on Invoice Document Amounts. &amp;nbsp;You can download the sample stored procedure&amp;nbsp;&lt;a href="http://www.box.net/shared/aqxge3jnsl"&gt;here&lt;/a&gt;&amp;nbsp;to see exactly how we did that and use as a template to create your own.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Next, configure your dataset in Visual Studio to simply call the stored procedure using parameters from the report.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_-WeKxh9zdSA/Szp2ioYipaI/AAAAAAAAAJ8/Dr6pGnVVAaA/s1600-h/SSRSDataSetConfig.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_-WeKxh9zdSA/Szp2ioYipaI/AAAAAAAAAJ8/Dr6pGnVVAaA/s400/SSRSDataSetConfig.gif" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Next, after building the SSRS Report in Visual Studio, configure the Report Parameters...&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_-WeKxh9zdSA/Szp1C1eeHsI/AAAAAAAAAJs/zkqXn9fNiio/s1600-h/SSRSReportParm.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_-WeKxh9zdSA/Szp1C1eeHsI/AAAAAAAAAJs/zkqXn9fNiio/s400/SSRSReportParm.gif" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;... to make the @WINLOGIN parameter Hidden, so users cannot change this value when running the report, and Default the value to the Global User!UserID.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_-WeKxh9zdSA/Szp1fj49K_I/AAAAAAAAAJ0/myJw7J4qYR8/s1600-h/SSRSWinLoginConfig.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_-WeKxh9zdSA/Szp1fj49K_I/AAAAAAAAAJ0/myJw7J4qYR8/s400/SSRSWinLoginConfig.gif" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Now, when running the report Users will be prompted to select or enter a Cut Off Date but will not be given the option to select the Salesperson or User for which they want the report to display data. &amp;nbsp;That value is automatically passed to the stored procedure to deliver user specific results back to the report.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_-WeKxh9zdSA/Szp272koSKI/AAAAAAAAAKE/rmqSW-00548/s1600-h/SSRSTopCustomersReport.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_-WeKxh9zdSA/Szp272koSKI/AAAAAAAAAKE/rmqSW-00548/s400/SSRSTopCustomersReport.gif" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-6741603711998423128?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/6741603711998423128/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=6741603711998423128' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/6741603711998423128'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/6741603711998423128'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2009/12/publishing-user-specific-data-from_29.html' title='Publishing User Specific Data from Dynamics GP using SSRS'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_-WeKxh9zdSA/Szp0a1Raf3I/AAAAAAAAAJk/57PlHWiMoPE/s72-c/SalesPersonMaint.gif' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-4498405085316897767</id><published>2009-12-22T12:03:00.009-06:00</published><updated>2010-08-20T10:11:07.338-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MJ Solution'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio Toolkit'/><category scheme='http://www.blogger.com/atom/ns#' term='Password Expiration Prompt'/><title type='text'>Password Expiration Prompt - Using VST to Notify Users before their Password Expires in Dynamics GP</title><content type='html'>I was recently asked by another consultant to quote a modification that would give users advanced notice before their GP Password was going to expire. &amp;nbsp;This customer was growing frustrated that their user's passwords were expiring without notice and IT was having to reset them frequently. &amp;nbsp;The typical work around is to change your GP Password when you change your network password but that wasn't good enough in this instance. &amp;nbsp;The customer ended up choosing to go with one of the ISV solutions instead of a custom solution for additional features but I went ahead and finished this in my "spare time" anyway.&lt;br /&gt;&lt;br /&gt;To make this work with SQL2005 I had to store a Maximum Password Age and the Number of Days before expiration to begin notifying users that their passwords would expire. &amp;nbsp;I'm sure you could integrate with windows security policy or active directory to get these values directly but I didn't do that here. With SQL2008 you would only need to store the Number of Days before expiration to start notifying because you can query the&amp;nbsp;DaysUntilExpiration LoginProperty in SQL2008. &amp;nbsp;I wrote this work both ways depending on which version of SQL was running.&lt;br /&gt;&lt;br /&gt;To capture the fields I needed I created a new Dynamics GP form in Visual Studio Tools that could be accessed from the Additionals Menu in Company Setup. &amp;nbsp;I chose to store this data in the DUOS so that I didn't have to deal with creating any new tables. &amp;nbsp;Therefore, you can setup each company to behave differently which could be a blessing or a curse. &amp;nbsp;Of course, you could change this to store the data in a custom table but it would also be nice if GP had a installation specific DUOS in the DYNAMICS database for this purpose. &amp;nbsp;Hint, hint.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href="http://2.bp.blogspot.com/_-WeKxh9zdSA/SzEFEv9UefI/AAAAAAAAAJE/cZevwEFRiCQ/s1600-h/PWExpirationNotice.gif" imageanchor="1" style="clear: left; display: inline !important; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_-WeKxh9zdSA/SzEFEv9UefI/AAAAAAAAAJE/cZevwEFRiCQ/s400/PWExpirationNotice.gif" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Next, I added a NewHandler in VST on the SwitchCompanyCloseAfterOriginal event to compare the age of the users password to the maximum password age and days before notification captured in the PWExpirationNotice VST Form. &amp;nbsp;If the user is due to be notified that their password would expire soon I present them with a message box...&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_-WeKxh9zdSA/SzEIHyKvBWI/AAAAAAAAAJM/w-BMdIlXwwM/s1600-h/PWExpirationPrompt.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_-WeKxh9zdSA/SzEIHyKvBWI/AAAAAAAAAJM/w-BMdIlXwwM/s400/PWExpirationPrompt.gif" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;... and then the User Password Setup window in which they could change their password on their way into the GP Company.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: auto;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_-WeKxh9zdSA/SzEIN1g4rpI/AAAAAAAAAJU/eEafsZ2sVKc/s1600-h/PWChangePassword.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_-WeKxh9zdSA/SzEIN1g4rpI/AAAAAAAAAJU/eEafsZ2sVKc/s400/PWChangePassword.gif" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The prompt and User Password Setup window are only presented on the first login for a session. &amp;nbsp;So, the users won't be nagged&amp;nbsp;every time&amp;nbsp;they change companies without shutting down GP first. &amp;nbsp;They also aren't forced to change their password but rather given the option to do so easily at a convenient time so that they don't get locked out later.&lt;br /&gt;&lt;br /&gt;I chose VST over Modifier/VBA to ease deployment as much as anything. &amp;nbsp;You can download the .dll for this mod if you want to try it out &lt;a href="http://www.box.net/shared/9ym9xl4vvn"&gt;here&lt;/a&gt;. &amp;nbsp;Just drop it in your Addins directory and it will work in Fabrikam.&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-4498405085316897767?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/4498405085316897767/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=4498405085316897767' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/4498405085316897767'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/4498405085316897767'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2009/12/password-expiration-prompt-using-vst-to.html' title='Password Expiration Prompt - Using VST to Notify Users before their Password Expires in Dynamics GP'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_-WeKxh9zdSA/SzEFEv9UefI/AAAAAAAAAJE/cZevwEFRiCQ/s72-c/PWExpirationNotice.gif' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-4136173908121096190</id><published>2009-12-02T20:02:00.000-06:00</published><updated>2009-12-02T20:02:15.713-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VBA'/><category scheme='http://www.blogger.com/atom/ns#' term='Purchase Order Processing'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio Toolkit'/><title type='text'>The VBA Source for making the Purchases Account Required in PO Entry</title><content type='html'>I did a blog post a while back where I made available the functionality to &lt;a href="http://mbsguru.blogspot.com/2009/09/po-purchases-account-required-during-po.html"&gt;force users to enter a Purchases Account on PO Lines&lt;/a&gt; when one didn't automatically default in. &amp;nbsp;That was compiled with the VST for GP. &amp;nbsp;Since, I've received several requests for the VBA source code to do the same. &amp;nbsp;Finally, I've gotten around to posting that for you. &amp;nbsp;You can &lt;a href="http://www.box.net/shared/lv8d4gpy18"&gt;download the .package file here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I know there's a better way to do this other than using ADO to check for the presence of the account number but someone much smarter than I once said "if it works, it's the right way". &amp;nbsp;I'm sticking with that here but would like to hear about the techniques other are using to do the same or similar customizations. &amp;nbsp;Please comment and share.&lt;br /&gt;&lt;br /&gt;This will only work on GP 10 and importing the package file will overwrite any existing VBA code behind POP Entry and POP Item Detail Entry. &amp;nbsp;Thus, the reason why I prefer using the &lt;a href="http://www.box.net/shared/ah26to6cv3"&gt;VST version&lt;/a&gt; in this situation.&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-4136173908121096190?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/4136173908121096190/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=4136173908121096190' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/4136173908121096190'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/4136173908121096190'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2009/12/vba-source-for-making-purchases-account.html' title='The VBA Source for making the Purchases Account Required in PO Entry'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-6286499360847334054</id><published>2009-09-30T21:49:00.008-05:00</published><updated>2009-11-24T12:36:43.115-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VBA'/><category scheme='http://www.blogger.com/atom/ns#' term='Modifier'/><category scheme='http://www.blogger.com/atom/ns#' term='Fixed Asset Management'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio Toolkit'/><title type='text'>Avoid some GP Form Modifications with VSTools</title><content type='html'>I've been doing a lot of work with Visual Studio Tools lately and find myself migrating more towards that from VBA.  VSTools is not a replacement for VBA but in some cases can prove to be a more effective tool.&lt;br /&gt;&lt;br /&gt;Modifying a Form in GP is often a simple thing to do with few repercussions if planned and executed properly.  One drawback to a form modification is that you have to upgrade the modified forms even when applying service packs.  This makes the service pack application and upgrade processes slightly more cumbersome.  Not a big deal but another step in the process that in some instances you might be able to avoid.  Some of my existing clients are starting to request VSTools customizations over VBA partly for this reason.&lt;br /&gt;&lt;br /&gt;While this isn't always applicable, you can't modify a GP Form with VSTools after all, you can sometimes leverage the VSTools .AddMenuHandler method in place of modifying a form in GP.  You can find more information about the .AddMenuHandler on page 71 of the VSTDGPProgrammersGuide.pdf.&lt;br /&gt;&lt;br /&gt;Here's an example of how to use the .AddMenuHandler method instead of modifying a GP Form:&lt;br /&gt;&lt;br /&gt;Below is the code to add an Additional Menu Handler that when executed calls a function that will retrieve the next numeric Fixed Asset ID and populate the Asset ID in the Asset General Information Window.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New'; font-size: 13px;"&gt;&lt;span style="color: blue;"&gt;Dim&lt;/span&gt; FANextNumericID &lt;span style="color: blue;"&gt;As&lt;/span&gt; System.EventHandler&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New'; font-size: small;"&gt;&lt;span style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New'; font-size: 13px;"&gt;&lt;span style="color: blue;"&gt;Sub&lt;/span&gt; Initialize() &lt;span style="color: blue;"&gt;Implements&lt;/span&gt; IDexterityAddIn.Initialize&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New'; font-size: small;"&gt;&lt;span style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New'; font-size: 13px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; FANextNumericID = &lt;span style="color: blue;"&gt;New&lt;/span&gt; System.EventHandler(&lt;span style="color: blue;"&gt;AddressOf&lt;/span&gt; FAGetNextNumericID)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New'; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; FixedAssets.Forms.FaGeneralMaintenance.AddMenuHandler(FANextNumericID, &lt;span style="color: #a31515;"&gt;"Next Asset ID"&lt;/span&gt;, &lt;span style="color: #a31515;"&gt;"N"&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New'; font-size: small;"&gt;&lt;span style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New'; font-size: 10pt;"&gt;&lt;span style="color: blue;"&gt;End&amp;nbsp;Sub&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue; font-family: 'Courier New'; font-size: small;"&gt;&lt;span style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Now, in GP you can simply use the Ctrl-N hotkey or select Next Asset ID from the Additional Menu…&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_-WeKxh9zdSA/SsQX_CoHNYI/AAAAAAAAAIo/RY2pDovzpFI/s1600-h/FANextAssetMenu.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_-WeKxh9zdSA/SsQX_CoHNYI/AAAAAAAAAIo/RY2pDovzpFI/s400/FANextAssetMenu.gif" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;… to assign the Next Numeric Fixed Asset ID to new Fixed Asset Record.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_-WeKxh9zdSA/SsQYL8Egl7I/AAAAAAAAAIw/0-15p-H31qA/s1600-h/FANextAssetAssigned.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_-WeKxh9zdSA/SsQYL8Egl7I/AAAAAAAAAIw/0-15p-H31qA/s400/FANextAssetAssigned.gif" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;Now, not only do you not have to deal with merging Form Modifications and/or VBA code with existing Form Modifications or VBA projects but if there weren't any to begin with you don't have to deal with upgrading them when applying services packs or upgrading.&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-6286499360847334054?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/6286499360847334054/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=6286499360847334054' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/6286499360847334054'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/6286499360847334054'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2009/09/avoid-some-gp-form-modifications-with.html' title='Avoid some GP Form Modifications with VSTools'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_-WeKxh9zdSA/SsQX_CoHNYI/AAAAAAAAAIo/RY2pDovzpFI/s72-c/FANextAssetMenu.gif' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-3012215040894108129</id><published>2009-09-28T21:26:00.003-05:00</published><updated>2009-10-02T17:26:06.607-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VBA'/><category scheme='http://www.blogger.com/atom/ns#' term='Purchase Order Processing'/><category scheme='http://www.blogger.com/atom/ns#' term='MJ Solution'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio Toolkit'/><title type='text'>PO Purchases Account Required during PO Entry</title><content type='html'>After collaborating with another consultant to develop a solution to make the PO Line Purchase Account required during Purchases Order Entry I decide to make this available for general use "AS IS" with no warranties. &amp;nbsp;&lt;a href="http://www.box.net/shared/ah26to6cv3"&gt;You can download the .dll here&lt;/a&gt;. &amp;nbsp;This has only been tested with GP v10.&lt;br /&gt;&lt;br /&gt;This wasn't as simple as just making the field required with Modifier since the Purchasing Item Detail Entry window, on which the field is located, does not have to be loaded during PO Entry. &amp;nbsp;We accomplished the same thing with VBA but decided that the Visual Studio Toolkit for GP was a better option. If you want the VBA code just shoot me an e-mail and I'll send that to you.&lt;br /&gt;&lt;br /&gt;The customization works like this:&lt;br /&gt;&lt;br /&gt;During PO Entry, before you lose focus from a PO Line for which a Purchases Account was not entered or for which there was not a default value the system will notify you accordingly and stop you from continuing.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_-WeKxh9zdSA/SsFtPpLQv7I/AAAAAAAAAIY/Ou2klbzl-RU/s1600-h/POEntry.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_-WeKxh9zdSA/SsFtPpLQv7I/AAAAAAAAAIY/Ou2klbzl-RU/s400/POEntry.gif" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;This customization will open Purchasing Item Detail Entry and then prevent the window from being closed or the record from being saved until the Purchases Account field is populated.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_-WeKxh9zdSA/SsFthaqYr2I/AAAAAAAAAIg/r3hLY74Fv9M/s1600-h/POItemDetailEntry.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_-WeKxh9zdSA/SsFthaqYr2I/AAAAAAAAAIg/r3hLY74Fv9M/s400/POItemDetailEntry.gif" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;It's pretty simple but there were a few challenges we had to overcome. &amp;nbsp;Now, you don't have to! &amp;nbsp;If you do use it or just check it out leave me a comment and let me know what you think.&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-3012215040894108129?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/3012215040894108129/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=3012215040894108129' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/3012215040894108129'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/3012215040894108129'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2009/09/po-purchases-account-required-during-po.html' title='PO Purchases Account Required during PO Entry'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_-WeKxh9zdSA/SsFtPpLQv7I/AAAAAAAAAIY/Ou2klbzl-RU/s72-c/POEntry.gif' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-9058596752816237546</id><published>2009-09-23T19:54:00.008-05:00</published><updated>2009-11-24T12:09:59.032-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MJ Solution'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio Toolkit'/><category scheme='http://www.blogger.com/atom/ns#' term='RMA'/><title type='text'>Advanced RMA for GP is here!</title><content type='html'>&lt;div style="text-align: left;"&gt;The Advanced RMA (aRMA) Add-on for Dynamics GP will help you to maximize the value of the investment you made in your Dynamics GP solution in a number of ways. This add-on is particularly well suited for manufacturers/distributors and equipment rental companies but has a place in any solution that leverages the Dynamics GP RMA module to service customers. aRMA extends the Dynamics GP RMA Module to accomplish the following goals:&lt;br /&gt;&lt;div&gt;&lt;div style="text-align: auto;"&gt;&lt;br /&gt;&lt;/div&gt;1. Allow lines on a single RMA originating from many SOP Invoices.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; a. Tie the credit amount on each line back to the originating SOP Invoice.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; b. Reduce the number of RMAs issued to customers and that they have to manage.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;2. Allow users to Append RMA Lines from varied SOP Invoices to Existing RMAs.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;3. Streamline RMA Entry to improve customer service levels.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;4. Eliminate waste and redundancy in the RMA entry process.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-weight: bold;"&gt;Installation&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: normal;"&gt;The Advanced RMA Entry Addon is installed by loading the AdvancedRMA.dll in the GP\Addins directory on each Dynamics GP Client. That's it! One file on each workstation. &amp;nbsp;The .dll contains the logic to complete the one-time server install. So, you don't have to run any SQL scripts, create any SQL Logins, etc. All you have to do is log into GP as 'sa' and after selecting "Advanced RMA Entry" from the Additional Menu in RMA Entry Update when prompted with ...&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_-WeKxh9zdSA/Srq68FHqqFI/AAAAAAAAAHY/XPhs5I9kDug/s1600-h/aRMAInstall.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: inherit;"&gt;&lt;a href="http://3.bp.blogspot.com/_-WeKxh9zdSA/Srq68FHqqFI/AAAAAAAAAHY/XPhs5I9kDug/s1600-h/aRMAInstall.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_-WeKxh9zdSA/Srq68FHqqFI/AAAAAAAAAHY/XPhs5I9kDug/s400/aRMAInstall.gif" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-family: inherit;"&gt;... say "Yes". This will load the one table (DYNAMICS.dbo.mjRegistration) required for this addon. This table tracks registration information only. Otherwise, the add-on leverages Dynamics GP security, standard database objects, and standard business logic for processing.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-weight: bold;"&gt;User Instructions&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style="font-family: inherit;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: normal;"&gt;1. From the "Additional" menu in RMA Entry/Update select "Advanced RMA Entry".&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;a href="http://2.bp.blogspot.com/_-WeKxh9zdSA/Srq7IB3tY5I/AAAAAAAAAHg/hBLdgBa8N-Y/s1600-h/aRMAAccess.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_-WeKxh9zdSA/Srq7IB3tY5I/AAAAAAAAAHg/hBLdgBa8N-Y/s400/aRMAAccess.gif" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-family: inherit;"&gt;2. In Advanced RMA Entry, enter values into the filter fields; CustomerID, From Item Number, To Item Number, From Date (Invoice Document Date), and To Date (Invoice Document Date).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: inherit;"&gt;3. Click "Apply Filter" to display the list of SOP Invoice lines that meet the criteria you've entered. Any Serialized Lines that are already in inventory or on unreceived RMAs will automatically be filtered out of the results.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;a href="http://2.bp.blogspot.com/_-WeKxh9zdSA/Srq7mnBPXdI/AAAAAAAAAHo/gQ7LMK7lTBk/s1600-h/aRMAFilter.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_-WeKxh9zdSA/Srq7mnBPXdI/AAAAAAAAAHo/gQ7LMK7lTBk/s400/aRMAFilter.gif" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-family: inherit;"&gt;4. Now, you can sort the results set in the grid then Mark the SOP Line(s) that the customer wants to return.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: inherit;"&gt;5. The RMA Qty will default to the Invoice Qty but can be edited for each line.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: inherit;"&gt;6. If a line had been previously partially or fully returned the user will be notified accordingly.&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;a href="http://1.bp.blogspot.com/_-WeKxh9zdSA/Srq8Dh9y0QI/AAAAAAAAAHw/M783bIlbdhw/s1600-h/aRMASelect.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_-WeKxh9zdSA/Srq8Dh9y0QI/AAAAAAAAAHw/M783bIlbdhw/s400/aRMASelect.gif" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-family: inherit;"&gt;7. When the window is opened the RMA Type, Office ID, and Return Site ID are all populated from the RMA Setup Defaults. Before creating the new RMA you can modify those default values, select a Reason Code, and enter a Customer PO Number if necessary.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: inherit;"&gt;8. Finally, click "Create RMA" to create a new RMA using the RMA Interface values and SOP Lines selected in Advanced RMA Entry.&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;a href="http://4.bp.blogspot.com/_-WeKxh9zdSA/Srq9QrW5zTI/AAAAAAAAAH4/RQHJnPVsCOU/s1600-h/aRMACreateRMA.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_-WeKxh9zdSA/Srq9QrW5zTI/AAAAAAAAAH4/RQHJnPVsCOU/s400/aRMACreateRMA.gif" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-family: inherit;"&gt;9. You will notice that you can drill back to the RMA in RMA Entry/Update from the RMA Number hyperlink. The RMA can be edited, lines added or removed, etc. in the RMA Entry/Update using standard Dynamics GP functionality.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;a href="http://3.bp.blogspot.com/_-WeKxh9zdSA/Srq9xzg3xXI/AAAAAAAAAIA/Jujc5MiOVgQ/s1600-h/aRMADrillBack.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_-WeKxh9zdSA/Srq9xzg3xXI/AAAAAAAAAIA/Jujc5MiOVgQ/s400/aRMADrillBack.gif" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-family: inherit;"&gt;10. After creating a new RMA, additional SOP Lines can be appended to it. Notice that the "Create RMA" label has changed to "Append RMA" and the Customer ID and RMA Interface Fields have all been locked. Modify the other filter options or re-sort the list of SOP Invoices then select additional lines to append to the RMA.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;a href="http://2.bp.blogspot.com/_-WeKxh9zdSA/Srq-SbeImaI/AAAAAAAAAII/gHZqCWvXiHg/s1600-h/aRMAAppend.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_-WeKxh9zdSA/Srq-SbeImaI/AAAAAAAAAII/gHZqCWvXiHg/s400/aRMAAppend.gif" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-family: inherit;"&gt;11. Drill back to the RMA again to see the new lines that were selected, modify the RMA as necessary, and even enter additional lines that didn't originate from a SOP Invoice.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;a href="http://3.bp.blogspot.com/_-WeKxh9zdSA/Srq-iYSR-OI/AAAAAAAAAIQ/SMJiC-ku2ig/s1600-h/aRMADrillBack2.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_-WeKxh9zdSA/Srq-iYSR-OI/AAAAAAAAAIQ/SMJiC-ku2ig/s400/aRMADrillBack2.gif" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-family: inherit;"&gt;It's very simple and efficient!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: inherit;"&gt;aRMA was built using the Visual Studio Toolkit for GP. I'll gladly share it with you if you want to try it out. Just e-mail your request to&amp;nbsp;&lt;/span&gt;&lt;a href="mailto:Michaelj2@gmail.com?subject=aRMA%20Evaluation%20Request"&gt;&lt;span style="font-family: inherit;"&gt;MichaelJ2@gmail.com&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: inherit;"&gt;.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-9058596752816237546?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/9058596752816237546/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=9058596752816237546' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/9058596752816237546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/9058596752816237546'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2009/09/advanced-rma-for-gp-is-here.html' title='Advanced RMA for GP is here!'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_-WeKxh9zdSA/Srq68FHqqFI/AAAAAAAAAHY/XPhs5I9kDug/s72-c/aRMAInstall.gif' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-7686316952136916509</id><published>2009-09-18T15:10:00.000-05:00</published><updated>2009-09-18T15:10:55.662-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Training'/><title type='text'>GP Technical Conference - early registration ends TODAY!</title><content type='html'>&lt;div class="MsoNormal"&gt;I know that I'm looking forward to this conference. &amp;nbsp;It's been too long since I've made a trek through Fargo. I know Mariano and David will knock it out of the park. &amp;nbsp;Plus, there's the Green Mill!&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Message from the&amp;nbsp;Microsoft Dynamics GP Team:&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Registration after today is $595. Save $100 by registering today for the Microsoft Dynamics® GP Technical Conference 2009.&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;It is THE place to learn about “all things” Microsoft Dynamics GP&amp;nbsp; – the product itself, innovative development tools, best practices and more. &amp;nbsp;Additionally, &lt;b&gt;attendees will gain technical readiness for Microsoft Dynamics GP 11&lt;/b&gt; and will learn about new features in the upcoming release. There will be numerous opportunities to network and visit with the &lt;b&gt;Microsoft Dynamics GP development, support and leadership teams&lt;/b&gt; as well as with other partners.&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Highlights include:&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoListParagraph" style="margin-bottom: .0001pt; margin-bottom: 0in; mso-list: l0 level1 lfo1; text-indent: -.25in;"&gt;&lt;span style="font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;·&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Interactive concurrent sessions – learn more about the solution from the Microsoft Dynamics GP team&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoListParagraph" style="margin-bottom: .0001pt; margin-bottom: 0in; mso-list: l0 level1 lfo1; text-indent: -.25in;"&gt;&lt;span style="font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;·&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Roundtable discussions – visit with a small group over lunch on a variety of topics&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoListParagraph" style="margin-bottom: .0001pt; margin-bottom: 0in; mso-list: l0 level1 lfo1; text-indent: -.25in;"&gt;&lt;span style="font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;·&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;ISV Expo and reception&lt;/b&gt; – learn about the latest add-on solutions &lt;br /&gt;&lt;/div&gt;&lt;div class="MsoListParagraph" style="margin-bottom: .0001pt; margin-bottom: 0in; mso-list: l0 level1 lfo1; text-indent: -.25in;"&gt;&lt;span style="font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;·&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Study halls – review specific areas of the solution with experts&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoListParagraph" style="margin-bottom: .0001pt; margin-bottom: 0in; mso-list: l0 level1 lfo1; text-indent: -.25in;"&gt;&lt;span style="font-family: Symbol; mso-bidi-font-family: Symbol; mso-bidi-font-weight: bold; mso-fareast-font-family: Symbol;"&gt;&lt;span style="mso-list: Ignore;"&gt;·&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Post-conference training – gain knowledge on Microsoft &lt;b&gt;Dynamics CRM and xRM &lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;The conference, scheduled for &lt;b&gt;November 9 – 11 in Fargo, North Dakota&lt;/b&gt;, will provide insight, skills and knowledge that will help move your business forward. Simply put, the conference is THE place to learn all things Microsoft Dynamics GP. How can you afford not to attend?&amp;nbsp; &lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Visit &lt;a href="http://www.microsoft.com/dynamics/fargodeveloperconference"&gt;www.microsoft.com/dynamics/fargodeveloperconference&lt;/a&gt; for session descriptions, additional details and registration info. And hurry: the discounted registration rate ends on Friday, September 18!&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;See you in November at THE place for all things Microsoft Dynamics GP!&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;The Microsoft Dynamics GP Team&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-family: Georgia, 'Times New Roman', serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;P.S. Plan to join us on Thursday, November 12 for a morning of complimentary post-conference training. These concurrent session will focus on Microsoft Dynamics CRM and xRM. Check the conference website for details. You won’t want to miss this … and it’s free!&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-7686316952136916509?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/7686316952136916509/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=7686316952136916509' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/7686316952136916509'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/7686316952136916509'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2009/09/gp-technical-conference-early.html' title='GP Technical Conference - early registration ends TODAY!'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-2482236101607661256</id><published>2009-09-18T14:44:00.000-05:00</published><updated>2009-09-18T14:44:30.384-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ADO'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio Toolkit'/><title type='text'>Visual Studio Tools Integration with GP Security</title><content type='html'>&lt;span class="Apple-style-span" style="font-size: medium;"&gt;After reading many blog posts, TK articles, forum threads, and the like I pieced together from many sources how to build Visual Studio Toolkit forms that integrate with Dynamics GP security so you don't have to hard code a connection string or any environment specific settings in your application or .config file.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;You'll need to get the GP Connection Library (GPConn.dll) from GP Support. &amp;nbsp;You have to license the GP Connection object and obtain the keys. &amp;nbsp;This will enable you to get around the VS Toolkit only exposing the&amp;nbsp;unencrypted&amp;nbsp;password. &amp;nbsp;Once you have that you can simply use the code&amp;nbsp;snippet&amp;nbsp;below in your project to dynamically connect to the Dynamics GP database using the GP user credentials.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;Dim resp As Integer&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;Microsoft.Dexterity.GPConnection.Startup()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;' Create the connection object&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;GPConnObj = New Microsoft.Dexterity.GPConnection()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;' Initialize&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;resp = GPConnObj.Init("key1", "'key2")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;i&gt;CompanyDB.ConnectionString = "DATABASE= " &amp;amp; Dynamics.Globals.IntercompanyId.Value&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;i&gt;GPConnObj.Connect(CompanyDB, Dynamics.Globals.SqlDataSourceName.Value, Dynamics.Globals.UserId.Value,&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;i&gt;Dynamics.Globals.SqlPassword.Value)&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;This is mostly straight from the documentation that accompanies the GP Connection Library from GP Support. &amp;nbsp;From that, it was easy and convenient to build the connection string using Dynamics.Globals.IntercompanyID for the database and SqlDataSourceName for the SQL Server Instance in the connection string. &amp;nbsp;The UserID and SQL Password need no explanation. &amp;nbsp;Now, you can compile your .dll and deploy it to any GP installation without having to worry about any environment specific settings.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;I'm sure there are more elegant ways of doing this and this may been clearly documented elsewhere but I didn't find it teed up for me this way. &amp;nbsp;That would have saved me a little time. &amp;nbsp;I hope this helps you!&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-2482236101607661256?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/2482236101607661256/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=2482236101607661256' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/2482236101607661256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/2482236101607661256'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2009/09/visual-studio-tools-integration-with-gp.html' title='Visual Studio Tools Integration with GP Security'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-5017512366338158608</id><published>2009-08-02T21:30:00.011-05:00</published><updated>2010-01-19T18:41:27.112-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio Toolkit'/><title type='text'>Using Visual Studio Tools to Streamline Call Center Processes in Dynamics GP</title><content type='html'>I am excited to be deploying a customization I recently wrote leveraging the Visual Studio Toolkit for GP and eConnect to production this week. This purpose of publishing this real world example is to demonstrate the value of extending your GP solution with the Visual Studio Toolkit and provide a basis for future posts on the subject.&lt;br /&gt;&lt;br /&gt;The purpose of this application was to consolidate a customer’s Call Center process that required a dozen+ keystrokes and mouse clicks to enter data into 6+ different GP windows. Dynamics GP does a good job of handling most business processes but not always as efficiently as you might like. In this case, the Call Center regularly enters &amp;amp; receives new GP Field Service Series RMAs, creates Depot Management Workorders, and generates SOP Quotes to record transactions for after sales services offered to their customers. A key pain point for them was their time per call which impacts customer satisfaction and the ability of the organization to scale with call volume.&lt;br /&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;While working through their upgrade to GP 10 this customer made the decision to build new screens and integrations that will streamline and automate the data entry process to record a new RMA, create a Workorder, and ultimately quote the service for the customer. We chose to use the Visual Studio Toolkit to build the new user interfaces (Screen shot below). A key result is that the Call Center now only enters data into 1 window, down from 6+, and as few as 5 fields, down from a dozen+. The time required to process this data is down to only a few seconds. Now, customers will be happier with their increased service levels and the organization can scale with existing headcount as call volume rises; both critical during these tough economic times.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href="http://3.bp.blogspot.com/_-WeKxh9zdSA/SnZOEUOFEkI/AAAAAAAAAF4/9Gc9dLm92Fc/s1600-h/AfterSalesEntry.gif"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5365561842112729666" src="http://3.bp.blogspot.com/_-WeKxh9zdSA/SnZOEUOFEkI/AAAAAAAAAF4/9Gc9dLm92Fc/s400/AfterSalesEntry.gif" style="cursor: hand; float: left; height: 271px; margin: 0px 10px 10px 0px; width: 400px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;With their new After Sales Service Entry window the Call Center is able to leverage native GP lookup windows for Equipment, RMA Reason Codes, Items, and Customers and standard drill back functionality to view/edit data in GP such as Customers, Addresses, and Workorders. Information from various screens and data that was not previously as readily accessible (Workorder History) is now consolidated in a single user interface. With only 3 fields for which data is required to be entered after selecting the Equipment Record for which the RMA/Workorder needs to be generated new RMAs and Workorders are generated with a single click of a button.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://dynamicsgpblogster.blogspot.com/2009/07/getting-started-with-vst-winforms-and.html"&gt;Mariano has been and will likely continue to write about many of the concepts&lt;/a&gt; I applied to build this form. He’s just getting started and I plan to learn much more from him. I’ll continue to follow his series and hope to complement him with supplementary commentary, sample code, and such using this project as the business case.&lt;br /&gt;&lt;br /&gt;Thanks to &lt;a href="http://www.4penny.net/"&gt;Steve Gray at 4Penny.net&lt;/a&gt; and his &lt;a href="http://vstoolsforum.com/"&gt;Visual Studio Tools Forum&lt;/a&gt; for helping through a couple of hurdles and Shane Hall at &lt;a href="http://www.axiombss.com/"&gt;Axiom Business Software Solutions&lt;/a&gt; for the design work.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-5017512366338158608?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/5017512366338158608/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=5017512366338158608' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/5017512366338158608'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/5017512366338158608'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2009/08/using-visual-studio-tools-to-streamline.html' title='Using Visual Studio Tools to Streamline Call Center Processes in Dynamics GP'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_-WeKxh9zdSA/SnZOEUOFEkI/AAAAAAAAAF4/9Gc9dLm92Fc/s72-c/AfterSalesEntry.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-7025497726812128983</id><published>2009-06-22T15:15:00.004-05:00</published><updated>2009-06-24T07:14:47.702-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VBA'/><category scheme='http://www.blogger.com/atom/ns#' term='Modifier'/><title type='text'>Removing a Reference to a Field or Object in VBA</title><content type='html'>While upgrading some customizations to GP 10 I encountered a situation in which I needed to remove references to 4 fields out of 60+ on Sales Transaction Entry that had been added to VBA.  Many of the valid references were to invisible fields.  For a couple of reasons the standard method of copying the code to .txt, noting all of the fields that needed to be added back, removing the window from VBA, adding the window back along with all of the valid fields, and then pasting the code back in seemed very laborious.&lt;br /&gt;&lt;br /&gt;It made sense in this instance to spend a few minutes trying to remove the invalid references without having to click so many buttons.&lt;br /&gt;&lt;br /&gt;The steps to remove a field reference from a VBA Project are:&lt;br /&gt;&lt;br /&gt;1. Export your Form with VBA to a .package file (Tools&gt;&gt;Customize&gt;&gt;Customization Maintenance).&lt;br /&gt;2. Open the .package file with notepad and find the references to the field you need to remove.&lt;br /&gt;3. Remove any references to your field.  Most importantly, remove the WindowField reference.  This is how VBA knows about the field.  It will look like this:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;                WindowField    "Transfer Button"              &lt;br /&gt;               {&lt;br /&gt;                   ArrayIndex    "0"&lt;br /&gt;                   DisplayName    "Transfer"&lt;br /&gt;                   Local    "false"&lt;br /&gt;                   ProgrammerName    "Transfer Button"&lt;br /&gt;               }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;4. Save your .package file and import the modified version.  &lt;/span&gt;(Tools&gt;&gt;Customize&gt;&gt;Customization Maintenance).&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;NOTE: &lt;/strong&gt;The technique described here directly modifies the contents of a customization package with Notepad.  This technique is not supported by Microsoft Dynamics GP support.&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-7025497726812128983?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/7025497726812128983/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=7025497726812128983' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/7025497726812128983'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/7025497726812128983'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2009/06/removing-reference-to-field-or-object.html' title='Removing a Reference to a Field or Object in VBA'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-4980059058467317355</id><published>2009-06-17T18:56:00.017-05:00</published><updated>2009-10-02T17:27:19.298-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VBA'/><category scheme='http://www.blogger.com/atom/ns#' term='Receivables Management'/><category scheme='http://www.blogger.com/atom/ns#' term='Modifier'/><title type='text'>Creating Drop Down Lists using Modifier with VBA</title><content type='html'>&lt;div&gt;Inspired by a recent post on the &lt;a href="http://groups.google.com/group/microsoft.public.greatplains"&gt;GP Newgroup&lt;/a&gt;, I've taken the time to document a simple customization I recently did for a client. This is a very common type of request that is relatively easy to do and adds a lot of value. You can greatly improve the quality and consistency of your data by using custom drop down lists instead of settling with free form text fields.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Some background on this example; The client needs to track an invoice format for each Customer. They have 3 different invoice formats and it is critical that each customer is assigned a valid format. This client uses Contract Administration for Billing. Another customization is reliant on this field to assign the Contract Type to new Contracts that corresponds to the customer's invoice format so that invoices are batched properly when Contracts are billed.  Standardization and consistency are critical.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;First, open the window, Customer Maintenance in this example, on which you want to add the drop down list and bounce into Modifier (CTRL+F10 or Tools&amp;gt;&amp;gt;Customize&amp;gt;&amp;gt;Modify Current Window).&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://1.bp.blogspot.com/_-WeKxh9zdSA/SjmHNETZOfI/AAAAAAAAAEo/um_UqZRhuPU/s1600-h/ModifyCustMaint.gif"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5348454691042310642" src="http://1.bp.blogspot.com/_-WeKxh9zdSA/SjmHNETZOfI/AAAAAAAAAEo/um_UqZRhuPU/s400/ModifyCustMaint.gif" style="float: left; height: 331px; margin: 0px 10px 10px 0px; width: 400px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;In modifier, select the Drop-down List control from the Toolbox and add one to the Window. At this point, any free peice of real estate on the window will do. We'll move it into the right position later. I've added the (L) DDLM79 field you see just to the right of the City field in the screen shot below.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href="http://4.bp.blogspot.com/_-WeKxh9zdSA/SjmIqd6TeyI/AAAAAAAAAEw/Oluv72Zb7wI/s1600-h/AddDDL.gif"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5348456295644232482" src="http://4.bp.blogspot.com/_-WeKxh9zdSA/SjmIqd6TeyI/AAAAAAAAAEw/Oluv72Zb7wI/s400/AddDDL.gif" style="float: left; height: 195px; margin: 0px 10px 10px 0px; width: 400px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Next, change a few of the properties of the new Drop-down List (DDL) field. Click on the DDL and find the Properties window. It might be hidden behind another window. To activate it you could select Properties from the Layout Menu or enter CTRL+M.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href="http://3.bp.blogspot.com/_-WeKxh9zdSA/SjmL4bMKmGI/AAAAAAAAAE4/ONywXmCZOVk/s1600-h/DDLProperties.gif"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5348459833966893154" src="http://3.bp.blogspot.com/_-WeKxh9zdSA/SjmL4bMKmGI/AAAAAAAAAE4/ONywXmCZOVk/s400/DDLProperties.gif" style="float: left; height: 400px; margin: 0px 10px 10px 0px; width: 202px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;On the Object Tab double click the Data Type entry to open the Local Field Definition window. I like to change the name to something logical; in this example, "ddlInvoiceFormat".&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href="http://1.bp.blogspot.com/_-WeKxh9zdSA/SjmMoNydI8I/AAAAAAAAAFA/gE0ToJqCdIY/s1600-h/DDLLocalFieldDefinition.gif"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5348460655003116482" src="http://1.bp.blogspot.com/_-WeKxh9zdSA/SjmMoNydI8I/AAAAAAAAAFA/gE0ToJqCdIY/s400/DDLLocalFieldDefinition.gif" style="float: left; height: 400px; margin: 0px 10px 10px 0px; width: 382px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Then click the Static Value elipse to access the Static Text Values Window. Enter the values you want to appear in your drop down list and click Insert.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://1.bp.blogspot.com/_-WeKxh9zdSA/SjmNI7qGBgI/AAAAAAAAAFI/T7FxOUziLnw/s1600-h/StaticTextEntry.gif"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5348461217071891970" src="http://1.bp.blogspot.com/_-WeKxh9zdSA/SjmNI7qGBgI/AAAAAAAAAFI/T7FxOUziLnw/s400/StaticTextEntry.gif" style="float: left; height: 330px; margin: 0px 10px 10px 0px; width: 327px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;You're done with Modifier for now. Click Ok to close the Static Text Values and Local Field Definition Windows. Then select Microsoft Dynamics GP from the File menu to return to GP. When prompted, save the changes made to the window layout. Once back in GP, grant security to the modified window.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Now, you have a Drop-down List on your window with your static values. That's nice but only half the battle. Next, we need to add the VBA code to store the data. In this example, I chose to store the data in the User Defined 2 field on the Customer Maintenance window.  You could have elected to store this in your own table (using &lt;a href="http://mbsguru.blogspot.com/2009/03/quick-lookups-with-modifier-vba.html"&gt;ADO&lt;/a&gt;) or the &lt;a href="http://mbsguru.blogspot.com/2006/04/real-example-of-using-duos.html"&gt;DUOS&lt;/a&gt;.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;To do this, open the Customer Maintenance window and add the window to your VBA project (CTRL+F11 or Tools&amp;gt;&amp;gt;Customize&amp;gt;&amp;gt;Add Current Window to Visual Basic). Then, add the fields you need on the window to your VBA project (Shift+F11 or Tools&amp;gt;&amp;gt;Customize&amp;gt;&amp;gt;Add Fields to Visual Basic). In this example, add the Customer ID, User Defined 2, and the new Drop-down List (ddlInvoiceFormat). Finally, open the VBA Editor (Alt+F11 or Tools&amp;gt;&amp;gt;Customize&amp;gt;&amp;gt;Visual Basic Editor) to add the code.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://1.bp.blogspot.com/_-WeKxh9zdSA/SjmSEPjxE_I/AAAAAAAAAFQ/MOx-Wu61vXo/s1600-h/DDLCode.gif"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5348466634072855538" src="http://1.bp.blogspot.com/_-WeKxh9zdSA/SjmSEPjxE_I/AAAAAAAAAFQ/MOx-Wu61vXo/s400/DDLCode.gif" style="float: left; height: 400px; margin: 0px 10px 10px 0px; width: 346px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;There is code on on 3 events:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Declare a variable to track whether or not a user has changed the Drop-down List (DDL) value.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="font-weight: bold;"&gt;&lt;span style="font-size: 85%;"&gt;Dim bolUserChanged As Boolean&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;On the CustomerID_Changed event set that variable to false.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="font-weight: bold;"&gt;&lt;span style="font-size: 85%;"&gt;Private Sub CustomerID_Changed()&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size: 85%; font-weight: bold;"&gt;bolUserChanged = False&lt;/span&gt;&lt;span style="font-size: 85%; font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 85%; font-weight: bold;"&gt;End Sub&lt;/span&gt;&lt;span style="font-size: 85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-size: 85%;"&gt;&lt;span style="font-size: 100%;"&gt;On the ddlInvoiceFormat_AfterUserChanged event set the UserDefined2 value equal to the Drop-down List value and the variable to True only if the CustomerID is empty. There's no point in setting the value otherwise.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="font-weight: bold;"&gt;&lt;span style="font-size: 85%;"&gt;Private Sub ddlInvoiceFormat_AfterUserChanged()&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-size: 85%; font-weight: bold;"&gt;&lt;br /&gt;If CustomerID.Empty = False Then &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="font-weight: bold;"&gt;&lt;span style="font-size: 85%;"&gt;bolUserChanged = True &lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-size: 85%; font-weight: bold;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="font-weight: bold;"&gt;&lt;span style="font-size: 85%;"&gt;UserDefined2.Value = ddlInvoiceFormat.Value&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="font-weight: bold;"&gt;&lt;span style="font-size: 85%;"&gt;Else &lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="font-weight: bold;"&gt;&lt;span style="font-size: 85%;"&gt;Changed = False &lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-size: 85%; font-weight: bold;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="font-weight: bold;"&gt;&lt;span style="font-size: 85%;"&gt;bolUserChanged = False&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="font-weight: bold;"&gt;&lt;span style="font-size: 85%;"&gt;End If&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-size: 85%; font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 85%; font-weight: bold;"&gt;End Sub&lt;/span&gt;&lt;span style="font-size: 85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-size: 85%;"&gt;&lt;span style="font-size: 100%;"&gt;Only if a User did not change the ddlInvoiceFormat value (bolUserChanged = False) set the ddlInvoiceFormat equal to the UserDefined2 value. This is how the value in the Drop-down List gets updated as you scroll through or select different records in the window.  Of course, you wouldn't want to update the DDL if the user just changed it.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-size: 85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 85%; font-weight: bold;"&gt;Private Sub UserDefined2_Changed()&lt;/span&gt;&lt;span style="font-size: 85%; font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 85%; font-weight: bold;"&gt;&lt;br /&gt;If bolUserChanged = False Then &lt;/span&gt;&lt;span style="font-size: 85%; font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="font-weight: bold;"&gt;&lt;span style="font-size: 85%;"&gt;ddlInvoiceFormat.Value = UserDefined2.Value&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="font-weight: bold;"&gt;&lt;span style="font-size: 85%;"&gt;End If&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-size: 85%; font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 85%; font-weight: bold;"&gt;End Sub&lt;/span&gt;&lt;span style="font-size: 85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-size: 100%;"&gt;The reason for putting the new Drop-down List field on the window anywhere space was available was to allow for testing and validation before moving it to a permanent place. You'll notice that the value stored in the User Defined field is an integer value that corresponds to each static text value.  You could translate that with VBA and store the static text value or translate it when necessary later in a query or report.  Once the code is in place and tested, go back into Modifier (Tools&amp;gt;&amp;gt;Customize&amp;gt;&amp;gt;Modify Current Window) to move it to a permanent position and in this case make the User Defined 2 field invisible.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Click on the User Defined 2 field and change the Visible Property to False. The new Drop-down List will replace that field on the window for the user.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://4.bp.blogspot.com/_-WeKxh9zdSA/SjmXgLxkAkI/AAAAAAAAAFg/Gb5o7zuN3tA/s1600-h/UDFProperties.gif"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5348472611651453506" src="http://4.bp.blogspot.com/_-WeKxh9zdSA/SjmXgLxkAkI/AAAAAAAAAFg/Gb5o7zuN3tA/s400/UDFProperties.gif" style="float: left; height: 400px; margin: 0px 10px 10px 0px; width: 272px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Finally, move the new Drop-down List on top of the User Defined 2 field then change the tab sequence and size/align the field accordingly. The end result is a User Defined field that is no longer a free form text but rather a Drop-down List.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href="http://1.bp.blogspot.com/_-WeKxh9zdSA/SjmZDcn8RcI/AAAAAAAAAFo/ERIlS-Q38L8/s1600-h/DDLResult.gif"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5348474316981552578" src="http://1.bp.blogspot.com/_-WeKxh9zdSA/SjmZDcn8RcI/AAAAAAAAAFo/ERIlS-Q38L8/s400/DDLResult.gif" style="float: left; height: 104px; margin: 0px 10px 10px 0px; width: 263px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-4980059058467317355?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/4980059058467317355/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=4980059058467317355' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/4980059058467317355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/4980059058467317355'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2009/06/creating-drop-down-lists-using-modifier.html' title='Creating Drop Down Lists using Modifier with VBA'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_-WeKxh9zdSA/SjmHNETZOfI/AAAAAAAAAEo/um_UqZRhuPU/s72-c/ModifyCustMaint.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-8846801704912786391</id><published>2009-05-01T06:39:00.011-05:00</published><updated>2009-09-16T18:26:06.990-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Scheduling Jobs in SQL 2005</title><content type='html'>&lt;div&gt;After posting &lt;a href="http://mbsguru.blogspot.com/2009/04/automatic-aging-for-gp.html"&gt;Automatic Aging for GP&lt;/a&gt; a request to explain how to schedule such a script to run unassisted was posed. Leveraging SQL Server Agent Jobs to schedule tasks that can execute a myriad of different types of events is a powerful way to improve productivity and automate processes among other things. On top of that, it's incredibly simple!&lt;br /&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;In this example, I'm going to use SQL 2005. The process would vary depending on which version of SQL Server you are running. In SQL Management Studio expand the SQL Server Agent and right click on Jobs to create a new Job.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_-WeKxh9zdSA/SfrvzYsXEYI/AAAAAAAAAEA/wpsixtogxAE/s1600-h/SQLJobs.gif"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5330836775027282306" src="http://1.bp.blogspot.com/_-WeKxh9zdSA/SfrvzYsXEYI/AAAAAAAAAEA/wpsixtogxAE/s400/SQLJobs.gif" style="float: left; height: 400px; margin: 0px 10px 10px 0px; width: 263px;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;In the New Job Window, General Tab enter a name for your job, specify the owner and category, and enter a description if you'd like. I don't recommend using sa or individual user accounts as job owners. It's best to setup service accounts specifically for this purpose.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;a href="http://3.bp.blogspot.com/_-WeKxh9zdSA/Sfrxs6HTD2I/AAAAAAAAAEI/Y1aOKM7IIXI/s1600-h/SQLJobsGeneral.gif"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5330838862762807138" src="http://3.bp.blogspot.com/_-WeKxh9zdSA/Sfrxs6HTD2I/AAAAAAAAAEI/Y1aOKM7IIXI/s400/SQLJobsGeneral.gif" style="float: left; height: 359px; margin: 0px 10px 10px 0px; width: 400px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Next, Select the Steps Page and click the New button to create a new step. You can setup jobs with many steps of varied types. In this example, we'll create only one that will execute the rmAgeCustomer stored procedure. If you have multiple GP company databases you can setup a separate job to run RM Aging in each.  Give the step a name, select Transact-SQL script (T-SQL) as the type, and specify the GP company database aginst which the SQL statement will run; in this case TWO.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;a href="http://3.bp.blogspot.com/_-WeKxh9zdSA/Sfry7OEu8sI/AAAAAAAAAEQ/YqyfN6Jra_A/s1600-h/SQLJobsSteps.gif"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5330840208150557378" src="http://3.bp.blogspot.com/_-WeKxh9zdSA/Sfry7OEu8sI/AAAAAAAAAEQ/YqyfN6Jra_A/s400/SQLJobsSteps.gif" style="float: left; height: 359px; margin: 0px 10px 10px 0px; width: 400px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Next, select the Schedule Page to specify when the job will run. In this example, the job will run every morning at 3 AM.  This way, receivables are aged each morning before the business day begins.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;a href="http://3.bp.blogspot.com/_-WeKxh9zdSA/SfrzlKk6hrI/AAAAAAAAAEY/YQzp64QAUeA/s1600-h/SQLJobsSchedule.gif"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5330840928766297778" src="http://3.bp.blogspot.com/_-WeKxh9zdSA/SfrzlKk6hrI/AAAAAAAAAEY/YQzp64QAUeA/s400/SQLJobsSchedule.gif" style="float: left; height: 347px; margin: 0px 10px 10px 0px; width: 400px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Finally, setup alerts to write to the event log on success and notify your GP Administrator or DBA when the job fails.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;a href="http://1.bp.blogspot.com/_-WeKxh9zdSA/Sfr013fxFEI/AAAAAAAAAEg/YVlfqYk_7bo/s1600-h/SQLJobsNotifications.gif"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5330842315213837378" src="http://1.bp.blogspot.com/_-WeKxh9zdSA/Sfr013fxFEI/AAAAAAAAAEg/YVlfqYk_7bo/s400/SQLJobsNotifications.gif" style="float: left; height: 359px; margin: 0px 10px 10px 0px; width: 400px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;This is a very simplistic example of using the SQL Server Job Agent.  There are many best practices on managing jobs you should consider.  The purpose of this post isn't to cover all of those but rather help introduce those new to GP &amp;amp; SQL Server to the concepts.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-8846801704912786391?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/8846801704912786391/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=8846801704912786391' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/8846801704912786391'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/8846801704912786391'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2009/05/scheduling-jobs-in-sql-2005.html' title='Scheduling Jobs in SQL 2005'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_-WeKxh9zdSA/SfrvzYsXEYI/AAAAAAAAAEA/wpsixtogxAE/s72-c/SQLJobs.gif' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-544123925931442180</id><published>2009-04-29T07:39:00.004-05:00</published><updated>2009-10-22T19:27:37.918-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Receivables Management'/><category scheme='http://www.blogger.com/atom/ns#' term='MJ Solution'/><category scheme='http://www.blogger.com/atom/ns#' term='Auto Aging for GP'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Automatic Aging for GP</title><content type='html'>The question came up on the Public GP Newsgroup about automating customer aging in GP.  I recalled doing this for some customers in the past and found this method works well.  GP calls a stored procedure called&lt;span style="font-size: 100%;"&gt; &lt;/span&gt;&lt;span style="font-size: 100%;"&gt;rmAgeCustomer &lt;/span&gt;to execute the Receivables Aging Process.  You can do the same and schedule this to run periodically without user intervention.  Run a DEXSQL.log when running that routine to trap this yourself.&lt;br /&gt;&lt;br /&gt;Below is the SQL that will age all customers, all statement cycles, and all balance types as of the current date.  I recommend you test this before deploying in a production environment.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 85%;"&gt;DECLARE @O_iErrorState int, @I_dAgingDate datetime&lt;br /&gt;&lt;br /&gt;select    @I_dAgingDate        = convert(varchar(10), GetDate(), 102)&lt;br /&gt;&lt;br /&gt;EXEC    dbo.rmAgeCustomer 0, '', 'þþþþþþþþþþþþþþþ', @I_dAgingDate, 127, 0, 0, '', @O_iErrorState OUT&lt;br /&gt;&lt;br /&gt;SELECT    @O_iErrorState&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-544123925931442180?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/544123925931442180/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=544123925931442180' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/544123925931442180'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/544123925931442180'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2009/04/automatic-aging-for-gp.html' title='Automatic Aging for GP'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-7710371008554912167</id><published>2009-04-15T19:15:00.011-05:00</published><updated>2009-04-15T20:17:07.351-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Table Index Optimization to Improve Dynamics GP Performance</title><content type='html'>I recently touched up some code I wrote for a client back in 2003. For them, Bob and I integrated GP Depot Management Work Order Entry/Update with Sales Order Processing (Document Number = Work Order Number) for quoting and invoicing repair work and after sales service. Part of this customization enabled them to inquire on their quotes and orders directly from Work Order Entry/Update.&lt;br /&gt;&lt;br /&gt;The code simply queries the Sales Order Processing Work (SOP10100) and Sales Order Processing History (SOP30200) tables where the ORIGNUMB = Work Order Number and then opens the Sales Order Processing Document Inquiry, sets the From and To Document Number, and sets the Unposted or History radio button accordingly. This saves the service center personnel significant time when researching work order detail for customers which increases customer satisfaction.&lt;br /&gt;&lt;br /&gt;After 6+ years they've accumulated a little history in SOP. The code behind the inquiry buttons placed on Work Order Entry/Update window was taking too long to run. With customer service agents on the phone with customers, waiting more than a few seconds for the system to return data was too long. It didn't take long to realize that there wasn't an index on the SOP30200.ORIGNUMB column. The impact of adding that index was phenomenal reducing wait time from 10+ seconds to what seems like just milliseconds.&lt;br /&gt;&lt;br /&gt;To create a new index in SQL Server Management Studio:&lt;br /&gt;&lt;br /&gt;1. Right Click on the table and click Design from the menu.&lt;br /&gt;2. From the Table Design menu option select Indexes/Keys.&lt;br /&gt;3. Click Add to create a new index.&lt;br /&gt;&lt;div&gt;&lt;div&gt;4. Select the column(s) on which you want to create the index.&lt;/div&gt;&lt;div&gt;5. Name your indexes consistently so that you can query all them out of sysobjects later when you need to.&lt;/div&gt;&lt;div&gt;6. Set other properties as needed.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;a href="http://3.bp.blogspot.com/_-WeKxh9zdSA/SeaFaiDQKRI/AAAAAAAAAD4/YARvm5KdsW4/s1600-h/Index.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5325090300275730706" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 400px; HEIGHT: 250px" alt="" src="http://3.bp.blogspot.com/_-WeKxh9zdSA/SeaFaiDQKRI/AAAAAAAAAD4/YARvm5KdsW4/s400/Index.gif" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;There is a lot of great information widely available about when and how to create new indexes. I strongly recommend you educate yourself and engage an expert to optimize your indexes. &lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Of course, you can use T-SQL to load new indexes on your tables. Here's a sample:&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-size:85%;"&gt;CREATE NONCLUSTERED INDEX IX_SOP30200_ORIGNUMB ON dbo.SOP30200&lt;br /&gt;(&lt;br /&gt;ORIGNUMB&lt;br /&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size:85%;"&gt;WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]&lt;br /&gt;GO&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Remember that when you upgrade GP, it's likely that you will need to reload your indexes as the upgrade process will drop the old tables and therefore your indexes. Plan your upgrades accordingly and make sure you script your indexes before you do. Otherwise, GP will generally react positively to the new indexes.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-7710371008554912167?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/7710371008554912167/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=7710371008554912167' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/7710371008554912167'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/7710371008554912167'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2009/04/table-index-optimization-to-improve.html' title='Table Index Optimization to Improve Dynamics GP Performance'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_-WeKxh9zdSA/SeaFaiDQKRI/AAAAAAAAAD4/YARvm5KdsW4/s72-c/Index.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-4612042593855127357</id><published>2009-04-11T09:22:00.031-05:00</published><updated>2010-08-19T11:14:30.549-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Equipment Rentals'/><category scheme='http://www.blogger.com/atom/ns#' term='Modifier'/><category scheme='http://www.blogger.com/atom/ns#' term='MJ Solution'/><category scheme='http://www.blogger.com/atom/ns#' term='Contract Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='RMA'/><category scheme='http://www.blogger.com/atom/ns#' term='Field Service Series'/><title type='text'>Dynamics GP for Equipment Rentals</title><content type='html'>I recently wrapped up an implementation in the role of solution architect for a multi-location Equipment Rental company. I discussed our design with some of the best GP consultants I know who expressed interest in hearing more. I hope you find this useful.&lt;br /&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;We chose to lead with the GP Field Service Series; Contract Administration, Returns Management, &amp;amp; Depot Management Module along with the Sales Order Processing and Inventory Control modules to handle Equipment Rental processes and requirements. I continue to be impressed by the variety of applications I have found for this suite of GP modules.&lt;br /&gt;&lt;br /&gt;In this scenario, the process begins with the contract. A customer phones the inbound call center and requests equipment for a specified period of time. The call center agent enters the contract terms into Contract Entry/Update. We mapped Contract Type to the customer's Location/Warehouse and customized the way GL distributions were populated (More on that to come).&lt;br /&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://4.bp.blogspot.com/_-WeKxh9zdSA/SeCq8Fblw6I/AAAAAAAAACQ/If1KAf5ZJLM/s1600-h/CAEntryUpdate.bmp"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5323442708778697634" src="http://4.bp.blogspot.com/_-WeKxh9zdSA/SeCq8Fblw6I/AAAAAAAAACQ/If1KAf5ZJLM/s400/CAEntryUpdate.bmp" style="float: left; height: 272px; margin: 0px 10px 10px 0px; width: 400px;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;The next step is to use a push button we added to the Contract Entry/Update window to automate the generation of a Sales Order that the warehouse operations can fulfill to record the shipment of the equipment to the customer. This was a better fit than leveraging native functionality to create the Contract from SOP as the contract needed to be initiated before the SOP Invoice was posted. We setup the equipment as serialized inventory items without cost so that we could track shipments to customers and availability of equipment for rental.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;The Create Order push button simply creates a new sales order header using default from SOP Setup and values from Contract Entry/Update and forces a relationship between the Sales Order (GL Reference) and the Contract (&lt;a href="http://mbsguru.blogspot.com/2009/03/quick-lookups-with-modifier-vba.html"&gt;Job&lt;/a&gt;). The user then only has to enter the order lines and set the requested ship date then let the standard order fulfillment process run its course.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;a href="http://1.bp.blogspot.com/_-WeKxh9zdSA/SeCszcR9FWI/AAAAAAAAACg/0Q-FNmZhcYY/s1600-h/SOPEntry.gif"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5323444759316731234" src="http://1.bp.blogspot.com/_-WeKxh9zdSA/SeCszcR9FWI/AAAAAAAAACg/0Q-FNmZhcYY/s400/SOPEntry.gif" style="float: left; height: 269px; margin: 0px 10px 10px 0px; width: 400px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;If you have worked with the Contract Administration Module you would realize at this point that we didn't assign any equipment to the Contract. The business process in this scenario is to assign the equipment to the Contract only after the equipment has shipped to the customer. It's only at that point that you would know which serialized piece of equipment was shipped.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;We chose to automatically insert the equipment record on the Contract after the order was fulfilled, invoiced, and posted. We placed a trigger on SOP10201 to fire off a stored procedure that assigns the shipped serialized equipment records (SVC00300/SOP10201) to the Contract using the GL Reference:Job relationship. This is also where we assign the GL Account to the contract line based on the Location (SVC00600.CNTTYPE), Type of Customer (RM00101.USERDEF1), and Item Type (IV00101.USCATVLS_1) per the customer requirements.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://3.bp.blogspot.com/_-WeKxh9zdSA/SeCvWyolWMI/AAAAAAAAACo/hEGVdD4HGrw/s1600-h/CALines.gif"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5323447565635901634" src="http://3.bp.blogspot.com/_-WeKxh9zdSA/SeCvWyolWMI/AAAAAAAAACo/hEGVdD4HGrw/s400/CALines.gif" style="float: left; height: 272px; margin: 0px 10px 10px 0px; width: 400px;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;At this point, the equipment has been shipped to the customer and the clock is ticking on the contract. You may have noticed that we defaulted the Hold flag on Contract Entry/Update to true (Simply done with VBA). This prevents the contract from being invoiced before the equipment is returned and inspected signaling the completion of the contract. This is where we'll pick up the process next.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;We implemented the RMA module to track the returns of the equipment from the customer, send the equipment through the depot for inspection, and place the equipment back into stock to be available for future rental. The RMA and Depot Management modules were a great fit for this scenario.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;We setup the RMA with a return path of none and to post the received inventory to an In Service Inventory Location. There's no need to credit or bill the customer for anything related to the RMA. We'll handle all of the charges when we bill the Contract later. We linked the RMA to the Invoice that we posted to record the shipment of the equipment to the customer. &lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;a href="http://1.bp.blogspot.com/_-WeKxh9zdSA/SeC03X3pOSI/AAAAAAAAACw/S8Gr7IMuZuE/s1600-h/RMAEntry.bmp"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5323453622945134882" src="http://1.bp.blogspot.com/_-WeKxh9zdSA/SeC03X3pOSI/AAAAAAAAACw/S8Gr7IMuZuE/s400/RMAEntry.bmp" style="float: left; height: 303px; margin: 0px 10px 10px 0px; width: 400px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Next, follow the standard process for receive the RMA. This will adjust the returned equipment inventory into the designated In Service Location.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;a href="http://3.bp.blogspot.com/_-WeKxh9zdSA/SeC1bgGa-TI/AAAAAAAAAC4/KU1HGoaC_yo/s1600-h/RMAReceipt.gif"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5323454243629889842" src="http://3.bp.blogspot.com/_-WeKxh9zdSA/SeC1bgGa-TI/AAAAAAAAAC4/KU1HGoaC_yo/s400/RMAReceipt.gif" style="float: left; height: 322px; margin: 0px 10px 10px 0px; width: 400px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Once received, use the RMA Line Process Return window to create Depot Management Workorders for each item so that it can be inspected and returned to stock.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;a href="http://1.bp.blogspot.com/_-WeKxh9zdSA/SeDCF6qry-I/AAAAAAAAADA/26BJE_ubwOM/s1600-h/RMALines.bmp"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5323468166455348194" src="http://1.bp.blogspot.com/_-WeKxh9zdSA/SeDCF6qry-I/AAAAAAAAADA/26BJE_ubwOM/s400/RMALines.bmp" style="float: left; height: 301px; margin: 0px 10px 10px 0px; width: 400px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Post Labor and Parts to the Work Order(s) to track repair costs that might be billed back to the customer later. In this scenario, these charges would not be invoiced separately from the Contract Invoice. Rather, the labor and parts posted against the Work Order(s) will be used later in the process to apply additional repair charges to the Contract before it is billed.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://2.bp.blogspot.com/_-WeKxh9zdSA/SeDFKvWNOXI/AAAAAAAAADI/QM52bJXwgxI/s1600-h/WOEntryLabor.gif"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5323471547850897778" src="http://2.bp.blogspot.com/_-WeKxh9zdSA/SeDFKvWNOXI/AAAAAAAAADI/QM52bJXwgxI/s400/WOEntryLabor.gif" style="float: left; height: 272px; margin: 0px 10px 10px 0px; width: 400px;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;After the parts and labor are posted and Work Order is complete we finished the inspection process by transferring the equipment from the In Service location back to general stock to be available for a future rental.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;a href="http://4.bp.blogspot.com/_-WeKxh9zdSA/SeDGoK4JBWI/AAAAAAAAADQ/GOVSpldCH6I/s1600-h/Transfer.gif"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5323473152968820066" src="http://4.bp.blogspot.com/_-WeKxh9zdSA/SeDGoK4JBWI/AAAAAAAAADQ/GOVSpldCH6I/s400/Transfer.gif" style="float: left; height: 338px; margin: 0px 10px 10px 0px; width: 400px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;Linking the RMA to the invoice on which the equipment was shipped to the customer and the RMA to the Work Order against which inspection labor and parts are posted allows the backoffice to have visibility to returns of equipment and costs of inspection on unbilled contracts. There's a relationship between the RMA and Work Order all the way back to the Contract through the GL Reference:Job relationship created when the Sales Order was initially created from the Contract.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;The backoffice now knows that the equipment has been returned, received, and inspected. They can query the costs of repair/inspection and prepare the contract for invoicing. In this scenario they chose to add new contract lines for additional charges such as Freight and Repair.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;a href="http://3.bp.blogspot.com/_-WeKxh9zdSA/SeDH6EaY5gI/AAAAAAAAADY/5iBxVtJv-5I/s1600-h/CALinesUpdated.gif"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5323474559982691842" src="http://3.bp.blogspot.com/_-WeKxh9zdSA/SeDH6EaY5gI/AAAAAAAAADY/5iBxVtJv-5I/s400/CALinesUpdated.gif" style="float: left; height: 272px; margin: 0px 10px 10px 0px; width: 400px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The final step in the process is to Bill the Contract to create the SOP Invoice to send to the customer for the rental, freight, and repair/inspection charges.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;a href="http://1.bp.blogspot.com/_-WeKxh9zdSA/SeDIjO4i6FI/AAAAAAAAADg/6EQnPMTU5gw/s1600-h/CABilling.gif"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5323475267168168018" src="http://1.bp.blogspot.com/_-WeKxh9zdSA/SeDIjO4i6FI/AAAAAAAAADg/6EQnPMTU5gw/s400/CABilling.gif" style="float: left; height: 359px; margin: 0px 10px 10px 0px; width: 400px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;Now, you can enter and track all of your transactions, costs, inventory movements, etc. associated with managing your equipment rental business using the Dynamics GP Field Service Suite which comes packaged with your BRL. There's no need for spreadsheets or disparate systems to manage these processes. We customized this implementation to streamline data processing, ensure consistency, and enforce data integrity. However, you could opt to implement this process without any customization at all.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Using this process also allows you to query all of your equipment; in your own inventory (IV00102 and/or IV00200) as well as the equipment that is out on a rental contract (SVC00300 and SVC00601). You can use this information for Available to Promise Reports.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;You may have noticed the Create Project Button on the Contract Entry/Update window. We also integrated the FSS Contract with Project Accounting so that we could leverage PAS to track T&amp;amp;M activity related to the equipment rental. PAS was a better fit than Service Call management in this case and maintaining the relationship between the CA Contract and the PA Contract enabled us to report on the profitability of the relationship with the customer by combining both T&amp;amp;M project costs and billing with rental contract transactions.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-4612042593855127357?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/4612042593855127357/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=4612042593855127357' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/4612042593855127357'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/4612042593855127357'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2009/04/dynamics-gp-for-equipment-rentals.html' title='Dynamics GP for Equipment Rentals'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_-WeKxh9zdSA/SeCq8Fblw6I/AAAAAAAAACQ/If1KAf5ZJLM/s72-c/CAEntryUpdate.bmp' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-781516518479040320</id><published>2009-03-15T08:47:00.009-05:00</published><updated>2009-12-30T12:34:23.239-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VBA'/><category scheme='http://www.blogger.com/atom/ns#' term='Modifier'/><category scheme='http://www.blogger.com/atom/ns#' term='ADO'/><title type='text'>Quick Lookups with Modifier &amp; VBA</title><content type='html'>It seems that the last few times I have implemented Contract Administration I've had to work around the inherent restrictions on the Contract Number field by using another field, in this case User Defined 1, to track an internal Customer Contract Number; in this example "Job Number". Maybe I'm missing something here but this is how I was able to work around this.&lt;br /&gt;&lt;br /&gt;It's nice that you can move the User Defined 1 field onto the Contract Entry/Update window and add it to the Contract Lookup with Modifier in just seconds. This isn't as simple on some other windows in GP:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_-WeKxh9zdSA/Sb0ITr4aAkI/AAAAAAAAACA/fpwDVqe6Go8/s1600-h/CAEntry.gif" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5313412269656900162" src="http://4.bp.blogspot.com/_-WeKxh9zdSA/Sb0ITr4aAkI/AAAAAAAAACA/fpwDVqe6Go8/s400/CAEntry.gif" style="cursor: pointer; float: left; height: 114px; margin: 0pt 10px 10px 0pt; width: 400px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_-WeKxh9zdSA/Sb0IlYkvkJI/AAAAAAAAACI/os-aP6Zj6OE/s1600-h/CALookup.gif" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5313412573711798418" src="http://4.bp.blogspot.com/_-WeKxh9zdSA/Sb0IlYkvkJI/AAAAAAAAACI/os-aP6Zj6OE/s400/CALookup.gif" style="cursor: pointer; float: left; height: 321px; margin: 0pt 10px 10px 0pt; width: 400px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The problem was that Contracts needed to be retrieved using this Job Number value. Depending on how you address that, it could have a much more significant impact on the project budget. In this case, the customer was just as happy entering the Job Number to retrieve the Contract Record as they would be if the field were added to the Find Function in the Contract Lookup window.&lt;br /&gt;&lt;br /&gt;It's important to note in this example that Job Number uniqueness is forced across Contracts.&lt;br /&gt;&lt;br /&gt;To do this in GP 10; first, create some Sub Procedures to make and close a connection to the database:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 85%;"&gt;Option Explicit&lt;br /&gt;&lt;br /&gt;'Declare variables for the ADO Connection&lt;br /&gt;Dim cn As New ADODB.Connection&lt;br /&gt;Dim rst As New ADODB.Recordset&lt;br /&gt;Dim cmd As New ADODB.Command&lt;br /&gt;&lt;br /&gt;Public Sub Get_ADOConnection()&lt;br /&gt;&lt;br /&gt;'Get_NewConnection&lt;br /&gt;Set cn = UserInfoGet.CreateADOConnection&lt;br /&gt;cn.DefaultDatabase = UserInfoGet.IntercompanyID&lt;br /&gt;cmd.ActiveConnection = cn&lt;br /&gt;&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;Public Sub Close_ADOConnection()&lt;br /&gt;&lt;br /&gt;cmd.ActiveConnection.Close&lt;br /&gt;&lt;br /&gt;End Sub&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Then, add some code behind UserDefined1 on the Before User Changed event to force uniqueness of Job Number across Contracts:&lt;br /&gt;&lt;span style="font-size: 85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 85%;"&gt;Private Sub UserDefined1_BeforeUserChanged(KeepFocus As Boolean, CancelLogic As Boolean)&lt;br /&gt;&lt;br /&gt;On Error GoTo Proc_Error:&lt;br /&gt;&lt;br /&gt;If ContractNumber.Empty = False Then&lt;br /&gt;&lt;br /&gt;'Get_NewConnection&lt;br /&gt;Get_ADOConnection&lt;br /&gt;&lt;br /&gt;'Make sure the job number is not already assigned to a contract&lt;br /&gt;&lt;br /&gt;cmd.CommandText = "select top 1 CONTNBR from SVC00600 where USERDEF1 = '" &amp;amp; Me.UserDefined1 &amp;amp; "'"&lt;br /&gt;Set rst = cmd.Execute&lt;br /&gt;&lt;br /&gt;'If a contact exists for this job notify the user and force them to enter a unique job number&lt;br /&gt;If rst.EOF = False Then&lt;br /&gt;MsgBox ("This Job Number has already been assigned to contract " &amp;amp; RTrim(rst.Fields("CONTNBR")) &amp;amp; ".")&lt;br /&gt;CancelLogic = True&lt;br /&gt;KeepFocus = True&lt;br /&gt;End If&lt;br /&gt;&lt;br /&gt;Close_ADOConnection&lt;br /&gt;&lt;br /&gt;End If&lt;br /&gt;&lt;br /&gt;GoTo Procedure_Exit:&lt;br /&gt;&lt;br /&gt;Proc_Error:&lt;br /&gt;&lt;br /&gt;MsgBox Error$ &amp;amp; " " &amp;amp; Error, vbOKOnly, "UserDefined1_BeforeUserChanged"&lt;br /&gt;&lt;br /&gt;Procedure_Exit:&lt;br /&gt;&lt;br /&gt;End Sub&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Finally, add some code behind User Defined 1 on the After User Changed Event to query the Contract Master Table and retrieve the Contract to which the Job Number has previously been assigned:&lt;br /&gt;&lt;span style="font-size: 85%;"&gt;&lt;br /&gt;Private Sub UserDefined1_AfterUserChanged()&lt;br /&gt;&lt;br /&gt;On Error GoTo Proc_Error:&lt;br /&gt;&lt;br /&gt;If ContractNumber.Empty = True Then&lt;br /&gt;&lt;br /&gt;'Get_NewConnection&lt;br /&gt;Get_ADOConnection&lt;br /&gt;&lt;br /&gt;'Lookup the Contract for this Job&lt;br /&gt;cmd.CommandText = "select top 1 CONTNBR from SVC00600 where USERDEF1 = '" &amp;amp; Me.UserDefined1 &amp;amp; "'"&lt;br /&gt;Set rst = cmd.Execute&lt;br /&gt;&lt;br /&gt;If rst.EOF = False Then&lt;br /&gt;Clear = 1&lt;br /&gt;ContractNumber = rst.Fields("CONTNBR")&lt;br /&gt;Else&lt;br /&gt;MsgBox ("This Job Number has not been assigned to a contract.")&lt;br /&gt;End If&lt;br /&gt;&lt;br /&gt;Close_ADOConnection&lt;br /&gt;&lt;br /&gt;End If&lt;br /&gt;&lt;br /&gt;GoTo Procedure_Exit:&lt;br /&gt;&lt;br /&gt;Proc_Error:&lt;br /&gt;&lt;br /&gt;MsgBox Error$ &amp;amp; " " &amp;amp; Error, vbOKOnly, "UserDefined1_BeforeUserChanged"&lt;br /&gt;&lt;br /&gt;Procedure_Exit:&lt;br /&gt;&lt;br /&gt;End Sub&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 100%;"&gt;&lt;br /&gt;&lt;/span&gt;The end result of this not only can you easily assign the Job Number (User Defined 1) to the Contract and view the Job Number in the Contract Lookup Window but, most importantly, you can pull the Contract into the Contract Entry/Update Window by keying into the Job Number field.&lt;br /&gt;&lt;br /&gt;Simple, quick, cost effective solution that could be applied to a variety of windows in GP.&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-781516518479040320?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/781516518479040320/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=781516518479040320' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/781516518479040320'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/781516518479040320'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2009/03/quick-lookups-with-modifier-vba.html' title='Quick Lookups with Modifier &amp; VBA'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_-WeKxh9zdSA/Sb0ITr4aAkI/AAAAAAAAACA/fpwDVqe6Go8/s72-c/CAEntry.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-1421444501918275821</id><published>2009-03-07T11:19:00.006-06:00</published><updated>2009-03-08T15:51:29.242-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Get the Next NOTEINDX</title><content type='html'>This came up for me 2x this week alone on 2 different projects.  Just about every time you have to insert a record into a GP Table you have to get the next note index.  While it's a simple thing, it may not be obvious exactly how to do it.&lt;br /&gt;&lt;br /&gt;Run this against your COMPANY database to increment and return the next note index from the DYNAMICS.dbo.SY01500 table:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;--Declare some variables&lt;br /&gt;DECLARE    @I_sCompanyID           smallint,&lt;br /&gt;                    @O_mNoteIndex           numeric(19,5),&lt;br /&gt;                    @O_iErrorState          int&lt;br /&gt;&lt;br /&gt;--Get the CompanyID&lt;br /&gt;select    @I_sCompanyID    = CMPANYID&lt;br /&gt;from    DYNAMICS..SY01500&lt;br /&gt;where    INTERID            = DB_Name()&lt;br /&gt;&lt;br /&gt;--Get and increment the next note index&lt;br /&gt;exec DYNAMICS.[dbo].[smGetNextNoteIndex] @I_sCompanyID, 1, @O_mNoteIndex output, @O_iErrorState output&lt;br /&gt;&lt;br /&gt;--Print the Next Note Index&lt;br /&gt;print(@O_mNoteIndex)&lt;br /&gt;--Print the Error State&lt;br /&gt;print(@O_iErrorState)&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-1421444501918275821?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/1421444501918275821/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=1421444501918275821' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/1421444501918275821'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/1421444501918275821'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2009/03/get-next-noteindx.html' title='Get the Next NOTEINDX'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-8576486437128015112</id><published>2009-03-03T09:42:00.003-06:00</published><updated>2009-03-03T10:12:27.055-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Project Management'/><title type='text'>Forming, Storming, Norming, Performing Group Development Theory</title><content type='html'>This is off topic but relevant for many, if not all of us, as we are integrating into or managing new teams.  As a consultant, this is very common.&lt;br /&gt;&lt;br /&gt;New teams generally form and evolve through a distinct set of stages; Forming, Storming, Norming, and Performing.  The goal is to move to the Performing stage as quickly as possible.  I'm currently tasked with managing a very diverse team that is not accustomed to working together.  As a result, I'm spending a lot of time working to help them move along the path to high performance as quickly as possible.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.mindtools.com/pages/article/newLDR_86.htm"&gt;&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;Mind Tools has a good article posted&lt;/a&gt; that describes these stages with some tips on how to lead a team through them effectively to high performance.  If you find yourself struggling to integrate with a new team or building a high performance team of your own you might find this useful.&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-8576486437128015112?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/8576486437128015112/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=8576486437128015112' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/8576486437128015112'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/8576486437128015112'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2009/03/forming-storming-norming-performing.html' title='Forming, Storming, Norming, Performing Group Development Theory'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-8744829423949475551</id><published>2009-03-01T14:06:00.011-06:00</published><updated>2009-10-02T17:26:53.514-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VBA'/><category scheme='http://www.blogger.com/atom/ns#' term='Sales Order Processing'/><category scheme='http://www.blogger.com/atom/ns#' term='Modifier'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>GP Self Service - Locked Transactions</title><content type='html'>I neglected to mention another potential good reason to Customize GP; control your support costs, increase your IT resource capacity, and increase user satisfaction.  There are routine problems that are easily resolved but often require the assistance of a system administrator. For example, records locked by other users, orphaned TempDB.dbo.DEX_LOCK records, can be a nuisance.  This typically grows more common as the concurrent user count increases in Citrix environments.  These records are necessary to prevent multiple users from accessing the same transactions at the same time.  However, when they are not properly cleared they prevent users from accessing transactions even though another user may not be.&lt;br /&gt;&lt;br /&gt;In this example, I added a Push Button to Sales Transaction Entry using Modifier.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;a href="http://4.bp.blogspot.com/_-WeKxh9zdSA/Sar_VhQBh8I/AAAAAAAAABg/Aw9MSJ0rNkY/s1600-h/Unlock.bmp" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5308335855977465794" src="http://4.bp.blogspot.com/_-WeKxh9zdSA/Sar_VhQBh8I/AAAAAAAAABg/Aw9MSJ0rNkY/s400/Unlock.bmp" style="cursor: pointer; display: block; height: 94px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;Then, I created 2 stored procedures; one to return the userid that has locked the transaction so the user can attempt to resolve this problem on their own ...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_-WeKxh9zdSA/SasAFdtZ8SI/AAAAAAAAABo/eDmvaddx7oA/s1600-h/SelLockUser.gif" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5308336679660679458" src="http://4.bp.blogspot.com/_-WeKxh9zdSA/SasAFdtZ8SI/AAAAAAAAABo/eDmvaddx7oA/s400/SelLockUser.gif" style="cursor: pointer; display: block; height: 153px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;... and the other to remove the locking record.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_-WeKxh9zdSA/SasAZ3lIjJI/AAAAAAAAABw/M0VdwxqJKpk/s1600-h/DelLockUser.gif" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5308337030202690706" src="http://1.bp.blogspot.com/_-WeKxh9zdSA/SasAZ3lIjJI/AAAAAAAAABw/M0VdwxqJKpk/s400/DelLockUser.gif" style="cursor: pointer; display: block; height: 130px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;/a&gt;&lt;br /&gt;Next, add the Sales Transaction Entry Window, the Document No. field, and the Unlock Trx button to your VBA Project.&lt;br /&gt;&lt;br /&gt;Open the VBA Editor to set a Reference in the Microsoft_Dynamics_GP Project to the Microsoft Active X Data Objects 2.x Library.  This is required to access the database directly through VBA.&lt;br /&gt;&lt;br /&gt;Finally, paste the following code behind the Sales Transaction Entry Window.  If some pieces of this are foreign to you try to take advantage of &lt;a href="http://dynamicsgpblogster.blogspot.com/2009/02/this-week-free-visual-basic-for.html"&gt;Mariano's VBA workshop this week&lt;/a&gt; to learn more and check back as I take a deeper dive in the future into some of these concepts.  My apologies for the formatting of this code.  I'll work on that.&lt;br /&gt;&lt;span style="font-size: 85%;"&gt;&lt;br /&gt;Private Sub UnlockTrx_AfterUserChanged()&lt;br /&gt;&lt;br /&gt;'Declare the variables for the message boxes&lt;br /&gt;Dim Msg, Style, Title, Help, Ctxt, Response, MyString, Default&lt;br /&gt;&lt;br /&gt;'Declare the variables to make the connection to the database&lt;br /&gt;Dim cn As New ADODB.Connection&lt;br /&gt;Dim rst As New ADODB.Recordset&lt;br /&gt;Dim cmd As New ADODB.Command&lt;br /&gt;&lt;br /&gt;On Error GoTo Proc_Error:&lt;br /&gt;&lt;br /&gt;'Prompt the user for the Document Number they want to unlock&lt;br /&gt;Msg = "Enter the Document Number you want unlocked."   ' Set prompt.&lt;br /&gt;Title = "Unlock SOP Trx" ' Set title.&lt;br /&gt;MyString = InputBox(Msg, Title, Default)&lt;br /&gt;&lt;br /&gt;'Set the variables required to make the connection&lt;br /&gt;Set cn = UserInfoGet.CreateADOConnection&lt;br /&gt;cn.DefaultDatabase = UserInfoGet.IntercompanyID&lt;br /&gt;cmd.ActiveConnection = cn&lt;br /&gt;&lt;br /&gt;'Query the database to get user that has the document locked&lt;br /&gt;cmd.CommandText = "exec uSp_SELLockedDocUser '" &amp;amp; Microsoft_Dynamics_GP.SalesTransactionEntry.DocumentNo &amp;amp; _&lt;br /&gt;"', '" &amp;amp; cn.DefaultDatabase &amp;amp; "', 'SOP10100'"&lt;br /&gt;Set rst = cmd.Execute&lt;br /&gt;If rst.EOF = False Then&lt;br /&gt;'Inform the user and give them the option to unlock the document or cancel&lt;br /&gt;Msg = "This document is locked by " &amp;amp; (RTrim(rst.Fields("userid"))) &amp;amp; ".  Continue Unlocking?"&lt;br /&gt;Style = vbOKCancel + vbCritical ' Define buttons.&lt;br /&gt;Title = "Dynamics GP"  ' Define title.&lt;br /&gt;Help = "DEMO.HLP"   ' Define Help file.&lt;br /&gt;Ctxt = 1000 ' Define topic&lt;br /&gt;Response = MsgBox(Msg, Style, Title, Help, Ctxt)&lt;br /&gt;'Unlock the document if requested by the user&lt;br /&gt;If Response = vbOK Then&lt;br /&gt;cmd.CommandText = "exec uSp_DELClearLockedDoc '" &amp;amp; Microsoft_Dynamics_GP.SalesTransactionEntry.DocumentNo &amp;amp; "', '" &amp;amp; _&lt;br /&gt;cn.DefaultDatabase &amp;amp; "', 'SOP10100'"&lt;br /&gt;Set rst = cmd.Execute&lt;br /&gt;End If&lt;br /&gt;Else&lt;br /&gt;'Inform the user that the record is not locked&lt;br /&gt;Msg = "This document is not currently locked by another user."&lt;br /&gt;Style = vbOKOnly + vbInformation ' Define buttons.&lt;br /&gt;Title = "Dynamics GP"  ' Define title.&lt;br /&gt;Help = "DEMO.HLP"   ' Define Help file.&lt;br /&gt;Ctxt = 1000 ' Define topic&lt;br /&gt;Response = MsgBox(Msg, Style, Title, Help, Ctxt)&lt;br /&gt;End If&lt;br /&gt;&lt;br /&gt;GoTo Procedure_Exit:&lt;br /&gt;&lt;br /&gt;Proc_Error:&lt;br /&gt;&lt;br /&gt;MsgBox Error$ &amp;amp; " " &amp;amp; Error, vbOKOnly, "UnlockTrx_AfterUserChanged"&lt;br /&gt;&lt;br /&gt;Procedure_Exit:&lt;br /&gt;&lt;br /&gt;End Sub&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-8744829423949475551?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/8744829423949475551/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=8744829423949475551' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/8744829423949475551'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/8744829423949475551'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2009/03/gp-self-service-locked-transactions.html' title='GP Self Service - Locked Transactions'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_-WeKxh9zdSA/Sar_VhQBh8I/AAAAAAAAABg/Aw9MSJ0rNkY/s72-c/Unlock.bmp' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-642406743027243183</id><published>2009-03-01T09:16:00.003-06:00</published><updated>2009-03-01T16:03:38.575-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Simple Table Backups with T-SQL</title><content type='html'>I was working on a project recently with a very experienced and respected GP consultant.  He has taught me many things but I was able to show him something very simple that made his life much easier.  Simple table level backups with T-SQL.&lt;br /&gt;&lt;br /&gt;The following will select all of the data in SOP10100 into a new SOP10100_Bkup_03012009 table:&lt;br /&gt;&lt;br /&gt;select     *&lt;br /&gt;into        SOP10100_Bkup_03012009&lt;br /&gt;from      SOP10100&lt;br /&gt;&lt;br /&gt;Remember that inserts, updates, and deletes often fire off events that could alter data in other tables.  This won't backup those dependent tables so be mindful of the potential that a simple update to one table could affect data on many others.&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-642406743027243183?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/642406743027243183/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=642406743027243183' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/642406743027243183'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/642406743027243183'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2009/03/simple-table-backups-with-t-sql.html' title='Simple Table Backups with T-SQL'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-7912690679121334876</id><published>2009-02-22T11:58:00.012-06:00</published><updated>2009-03-10T21:24:44.867-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Dynamics GP'/><title type='text'>Good Reasons to Customize GP</title><content type='html'>While customization, when not properly planned and justified, can be problematic there are good reasons to customize your system to create long-term, sustainable competitive advantage and build discipline in your organization.  I will follow this up with some specific examples of customizations I have built for these reasons and others.&lt;br /&gt;&lt;br /&gt;1.  &lt;span style="font-weight: bold;"&gt;Leverage your people for more value added activities.&lt;/span&gt;  I'm not opposed to relying on people for some things but I don't see the value in having them enter and process data that the system could process unassisted.  I've seen too many Controllers that function more like glorified GL Clerks.  They spend more time entering and managing data than analyzing it to make decisions.  Customizing your system to automate non value added tasks and deliver high quality information could enable you to convert your high paid data entry clerks back into analysts and controllers which in turn would help you identify cost saving and revenue generating opportunities.&lt;br /&gt;&lt;br /&gt;2.  &lt;span style="font-weight: bold;"&gt;Eliminate waste and redundancy to make your company scalable&lt;/span&gt;.  Growth companies are always dealing with too few people doing too many tasks.  Everyone is overworked and the pipeline of new work seems endless.  As sales and production volume increase so does the demand for back office and shop floor capacity.  Given the current economic climate this may not be an issue again for a while.  Increasing headcount in these situations is often not at the top of management's list of solutions.  Automating redundant and repeatable tasks could enable your organization to increase sales and production volume without having to add more people to manage the increased load.  That's not bad for your margins.&lt;br /&gt;&lt;br /&gt;3.  &lt;span style="font-weight: bold;"&gt;Instill discipline in your organization&lt;/span&gt;.  I was the CIO at a company with many geographically dispersed SBUs.  They were all mandated to work consistently and without exception under a set of corporate business rules.  In spite of that, the employees often chose not to follow those rules favoring their better judgement.  In place of spending considerable time and money policing people to ensure business rules were being followed we programmed those rules into the system and took the binary decisions for which rules were defined away from the employees.  This forced alignment of the operations with the corporate strategy.  The people didn't like it much but the company grew by more than 50% in less than 5 years.&lt;br /&gt;&lt;br /&gt;4.  &lt;span style="font-weight: bold;"&gt;Save money AND have it your way.&lt;/span&gt;  The GP channel is full of terrific 3rd party ISVs that seemingly have a solution for everything.  Dynamics GP also comes with some terrific tools such as Modifier with VBA that you can use to tailor or customize the system according to your company's specific business needs.  When making the build vs. buy decision compare the cost of having your system customized with the cost AND the compromises you might have to make with the ISV solutions available.  Sometimes, you will find that you get a better, more cost effective solution by building your own solution from scratch.&lt;br /&gt;&lt;br /&gt;5.  I'm leaving this one open for comment.  It would be nice to hear why some of the MVPs and &lt;span style="font-weight: bold;"&gt;&lt;/span&gt;others in the community would choose to customize a GP installation.  I can think of a lot of reasons and find that the ease of customization is a great selling point for GP that is under valued.  What do you think?&lt;br /&gt;&lt;br /&gt;In closing, I second &lt;a href="http://msdynamicsworld.com/story/bi-reporting/customizing-microsoft-dynamics-gp-5-excuses-you-will-want-bury-once-and-all"&gt;Mariano's warning&lt;/a&gt;&lt;a href="http://msdynamicsworld.com/story/bi-reporting/customizing-microsoft-dynamics-gp-5-excuses-you-will-want-bury-once-and-all"&gt; at the end of his article&lt;/a&gt;.  You should plan any customizations carefully and consult with experienced professionals.  However, even heavily customized GP systems can be upgraded without considerable extra effort.  I don't agree with those who warn against any customization in fear of upgrade complications.  Most GP projects I have worked on have been heavily customized and those that have upgraded have done so without experiencing noticeable extra pain or incurring material additional costs.&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-7912690679121334876?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/7912690679121334876/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=7912690679121334876' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/7912690679121334876'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/7912690679121334876'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2009/02/good-reasons-to-customize-gp.html' title='Good Reasons to Customize GP'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-2452293872801729052</id><published>2009-02-21T10:55:00.005-06:00</published><updated>2009-03-10T21:23:33.809-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VBA'/><category scheme='http://www.blogger.com/atom/ns#' term='Modifier'/><category scheme='http://www.blogger.com/atom/ns#' term='DUOS'/><title type='text'>How to make PO field required for specific customer</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_-WeKxh9zdSA/SaA2xxAZbKI/AAAAAAAAAAU/f6i3_0npP44/s1600-h/CustMaint.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 400px; height: 109px;" src="http://3.bp.blogspot.com/_-WeKxh9zdSA/SaA2xxAZbKI/AAAAAAAAAAU/f6i3_0npP44/s400/CustMaint.gif" alt="" id="BLOGGER_PHOTO_ID_5305300589638937762" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;This requirement came up last week and after &lt;a href="http://dynamicsgpblogster.blogspot.com/"&gt;Mariano&lt;/a&gt; explained how to do it, I went ahead and did it... for fun.  Sick, I know.&lt;br /&gt;&lt;br /&gt;I posted an &lt;a href="http://mbsguru.blogspot.com/2006/04/real-example-of-using-duos.html"&gt;example of using the DUOS&lt;/a&gt; a couple of year ago and used that, with very few tweaks, after using Modifier to add a Check Box control to the Customer Maintenance window to store the RequiredPO flag in the DUOS (SY90000) as Mariano suggested.  If you have problems converting that example to this scenario let me know and I will e-mail you the code.&lt;br /&gt;&lt;br /&gt;After that, all you have to do is add the Sales Transaction Entry Window and the Customer ID and Customer PO Fields on that window to your Visual Basic Project.  Open the VB Editor and add this code to the SalesTransactionEntry (Window) to make the Customer PO field required for selected customers:&lt;br /&gt;&lt;br /&gt;Option Explicit&lt;br /&gt;Dim Msg, Style, Title, Help, Ctxt, Response, MyString, Default&lt;br /&gt;Dim ItemCollection As DUOSObjects&lt;br /&gt;Dim ItemObject As DUOSObject&lt;br /&gt;&lt;br /&gt;Private Sub CustomerID_Changed()&lt;br /&gt;&lt;br /&gt;On Error GoTo Proc_Error:&lt;br /&gt;&lt;br /&gt;Set ItemCollection = DUOSObjectsGet("Customer")&lt;br /&gt;&lt;br /&gt;If CustomerID.Empty = False Then&lt;br /&gt;      Set ItemObject = ItemCollection(CustomerID)&lt;br /&gt;      If ItemObject.Properties("RequirePO") = "1" Then&lt;br /&gt;                CustomerPONumber.Required = True&lt;br /&gt;      Else&lt;br /&gt;                CustomerPONumber.Required = False&lt;br /&gt;      End If&lt;br /&gt;End If&lt;br /&gt;&lt;br /&gt;Exit Sub&lt;br /&gt;&lt;br /&gt;Proc_Error: MsgBox Error$ &amp;amp; " " &amp;amp; Error, vbOKOnly, "CustomerID_Changed"&lt;br /&gt;&lt;br /&gt;End Sub&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-2452293872801729052?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/2452293872801729052/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=2452293872801729052' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/2452293872801729052'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/2452293872801729052'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2009/02/how-to-make-po-field-required-for.html' title='How to make PO field required for specific customer'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_-WeKxh9zdSA/SaA2xxAZbKI/AAAAAAAAAAU/f6i3_0npP44/s72-c/CustMaint.gif' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-4194021039491829576</id><published>2009-02-19T10:33:00.003-06:00</published><updated>2009-03-10T21:23:54.434-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Custom Business Alerts</title><content type='html'>GP does a good job of giving you the ability to create business alerts to keep you informed of events that have or may occur based on conditions in your database.  Sometimes, the need to create an alert outside of the functionality in GP does, amazingly, come up.  Just today a post at http://groups.google.com/group/microsoft.public.greatplains/topics and a response by Polino @ DynamicsAccounting.net drove me to create a sample business alert using only T-SQL that you could use as a starting point to developing your own.&lt;br /&gt;&lt;br /&gt;This alert, if scheduled to run periodically, will e-mail a list of users that have been logged into GP for longer than 12.5 hours or 750 minutes.  It's pretty simple!&lt;br /&gt;&lt;br /&gt;IF    EXISTS&lt;br /&gt;   (  &lt;br /&gt;   select    datediff(mi,logindat+logintim, getdate()) as DURATION,--convert(datetime, convert(varchar(15), GetDate(), 114), 114) - LOGINTIM as DURATION,&lt;br /&gt;           USERID,&lt;br /&gt;           CMPNYNAM,&lt;br /&gt;           LOGINDAT,&lt;br /&gt;           LOGINTIM&lt;br /&gt;   from    DYNAMICS.dbo.ACTIVITY&lt;br /&gt;   where    datediff(mi,logindat+logintim, getdate()) &gt; 750&lt;br /&gt;   )&lt;br /&gt;BEGIN&lt;br /&gt;&lt;br /&gt;DECLARE    @SQL        varchar(8000)&lt;br /&gt;&lt;br /&gt;SET        @SQL    =     'select    datediff(mi,logindat+logintim, getdate()) as DURATION,&lt;br /&gt;                           USERID,&lt;br /&gt;                           CMPNYNAM,&lt;br /&gt;                           LOGINDAT,&lt;br /&gt;                           LOGINTIM&lt;br /&gt;                   from    DYNAMICS.dbo.ACTIVITY&lt;br /&gt;                   where    datediff(mi,logindat+logintim, getdate()) &gt; 750'&lt;br /&gt;&lt;br /&gt;print    @SQL&lt;br /&gt;&lt;br /&gt;EXEC     master.dbo.xp_sendmail @recipients = 'youralias@yourcompany.com',&lt;br /&gt;          @subject = 'Users Logged in beyond limit',&lt;br /&gt;          @message = 'Attached is a list of users that have been logged in beyond the limit',&lt;br /&gt;       @query = @SQL,&lt;br /&gt;          @attach_results = 'TRUE',&lt;br /&gt;       @width = 250&lt;br /&gt;END&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-4194021039491829576?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/4194021039491829576/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=4194021039491829576' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/4194021039491829576'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/4194021039491829576'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2009/02/custom-business-alerts.html' title='Custom Business Alerts'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-8457015498867504317</id><published>2009-01-05T09:03:00.003-06:00</published><updated>2009-03-01T16:05:22.979-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VBA'/><title type='text'>Restricting SOP Lookups with VBA</title><content type='html'>A request to restrict SOP Lookup Widnow to only return Documents for which the User is responsible came up yesterday on the http://groups.google.com/group/microsoft.public.greatplains/topics.  This is a somewhat common request that is easily addressed using VBA.  This example only works for v10 but you could easily convert it to previous version by following the steps in &lt;a target="_blank" rel="nofollow" href="http://mbsguru.blogspot.com/2006/04/ado-connections-through-vba-in.html"&gt;http://mbsguru.blogspot.com/2006/04/ado-connections-through-vba-in.html&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;This example assumes that the UserIDs are stored in the Sales Person ID field in Customer Maintenance and that relationship is used to determine Customer Ownership during order entry.&lt;br /&gt;&lt;p&gt;1.  Add "Sales Document Numbers" window to Visual Basic.&lt;br /&gt;2.  Add the "Document Number" field to the project.&lt;br /&gt;3.  Open the SmartList Project in the Visual Basic Editor.&lt;br /&gt;4.  Set a Reference in the SmartList Project to "Microsoft ActiveX Data Objects 2.x Library"&lt;br /&gt;5.  Copy and paste the following code behind the SaleDocumentNumbersDetail (Grid) window in the SmartList Project:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Dim cn As New ADODB.Connection&lt;br /&gt;Dim rst As New ADODB.Recordset&lt;br /&gt;Dim cmd As New ADODB.Command&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Private Sub Grid_BeforeLinePopulate(RejectLine As Boolean)&lt;br /&gt;&lt;/p&gt;&lt;p&gt;On Error GoTo Proc_Error:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;    'Get_NewConnection&lt;br /&gt;   Set cn = UserInfoGet.CreateADOConnection&lt;br /&gt;       cn.DefaultDatabase = UserInfoGet.IntercompanyID&lt;br /&gt;       cmd.ActiveConnection = cn&lt;br /&gt;&lt;/p&gt;&lt;p&gt;    'Query the database to get check the document&lt;br /&gt;   cmd.CommandText = "select h.CUSTNMBR from SOP10100 h inner join&lt;br /&gt;RM00101 c on h.CUSTNMBR = c.CUSTNMBR where c.SLPRSNID =  '" &amp;amp;&lt;br /&gt;UserInfoGet.UserID &amp;amp; "' and SOPNUMBE =  '" &amp;amp; SOPNumber &amp;amp; "'"&lt;br /&gt;   Set rst = cmd.Execute&lt;br /&gt;&lt;/p&gt;&lt;p&gt;    If rst.EOF = True Then&lt;br /&gt;       RejectLine = True&lt;br /&gt;   End If&lt;br /&gt;&lt;/p&gt;&lt;p&gt;    GoTo Procedure_Exit:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Proc_Error:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;MsgBox Error$ &amp;amp; " " &amp;amp; Error, vbOKOnly, "Grid_BeforeLinePopulate"&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Procedure_Exit:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;cmd.ActiveConnection.Close&lt;br /&gt;&lt;/p&gt;End Sub&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-8457015498867504317?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/8457015498867504317/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=8457015498867504317' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/8457015498867504317'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/8457015498867504317'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2009/01/restricting-sop-lookups-with-vba.html' title='Restricting SOP Lookups with VBA'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-4760331369683300803</id><published>2007-12-04T16:32:00.004-06:00</published><updated>2010-11-09T17:40:38.016-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Who has that record locked?</title><content type='html'>I love the GP Newsgroup. Helping others with their problems helps me learn more about GP. Here's what I taught myself today in response to a newsgroup post.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Run this against your company database to select the users which users have SOP Documents locked:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;select s.SOPNUMBE, a.USERID&lt;/div&gt;&lt;div&gt;from tempdb.dbo.DEX_LOCK l&lt;/div&gt;&lt;div&gt;inner join DYNAMICS.dbo.ACTIVITY a&lt;/div&gt;&lt;div&gt;on l.session_id = a.SQLSESID&lt;/div&gt;&lt;div&gt;inner join SOP10100 s&lt;/div&gt;&lt;div&gt;on l.row_id = s.DEX_ROW_ID&lt;/div&gt;&lt;div&gt;and l.table_path_name = DB_NAME() + '.dbo.SOP10100'&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-4760331369683300803?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/4760331369683300803/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=4760331369683300803' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/4760331369683300803'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/4760331369683300803'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2007/12/who-has-that-record-locked.html' title='Who has that record locked?'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-3795493180553651308</id><published>2007-12-03T17:28:00.001-06:00</published><updated>2009-03-01T16:05:57.153-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Find tables, with data, that have a specific column</title><content type='html'>We're going to change some Item Numbers in GP.  I know, I can use PS Tools to do this but to use that you have to turn off your replication.  Long story short, I don't wanna.&lt;br /&gt;&lt;br /&gt;Anyway, I had to figure out which tables to update so I wrote a query that would return to me all of the tables, with data, that have an ITEMNMBR column:&lt;br /&gt;&lt;br /&gt;select distinct o.Name&lt;br /&gt;from SysColumns c&lt;br /&gt;inner join SysObjects o&lt;br /&gt;on c.id = o.id&lt;br /&gt;inner join SysIndexes i&lt;br /&gt;on c.id = i.id&lt;br /&gt;where c.name = 'ITEMNMBR'&lt;br /&gt;and o.xtype = 'u'&lt;br /&gt;and rowcnt &lt;&gt; 0&lt;br /&gt;&lt;br /&gt;I figured that some other SQL Hacks out there might find this useful.&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-3795493180553651308?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/3795493180553651308/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=3795493180553651308' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/3795493180553651308'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/3795493180553651308'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2007/12/find-tables-with-data-that-have.html' title='Find tables, with data, that have a specific column'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-707652870197322530</id><published>2007-11-27T16:29:00.001-06:00</published><updated>2009-03-01T16:06:11.579-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Deleting Empty Batches in SOP</title><content type='html'>Schedule this script to run periodically against your company database to delete empty SOP batches automatically. It will check to verify that there aren't any transactions in the batch and that there is not a batch activity record first.&lt;br /&gt;&lt;br /&gt;DECLARE @INTERID varchar(10),&lt;br /&gt;@CMPNYNAM varchar(31)&lt;br /&gt;&lt;br /&gt;SET @INTERID = DB_Name()&lt;br /&gt;SELECT @CMPNYNAM = CMPNYNAM from DYNAMICS.dbo.SY01500 where INTERID = @INTERID&lt;br /&gt;&lt;br /&gt;DELETE SY00500&lt;br /&gt;where BCHSOURC = 'Sales Entry'&lt;br /&gt;and BACHNUMB not in (select BACHNUMB from SOP10100)&lt;br /&gt;and BACHNUMB not in (select BACHNUMB from DYNAMICS.dbo.SY00800 where CMPNYNAM = @CMPNYNAM and TRXSOURC = 'Sales Transaction Entry')&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-707652870197322530?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/707652870197322530/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=707652870197322530' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/707652870197322530'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/707652870197322530'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2007/11/deleting-empty-batches-in-sop.html' title='Deleting Empty Batches in SOP'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-3072362171155309552</id><published>2007-11-27T12:53:00.002-06:00</published><updated>2009-03-01T16:06:26.729-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VBA'/><category scheme='http://www.blogger.com/atom/ns#' term='Modifier'/><title type='text'>Using VBA to Mark Inventory Batches to Post to GL</title><content type='html'>I think this is pretty much common knowledge but it is a simple change you can make with VBA to ensure your inventory adjustments post to the GL.  Paste this code below behind the Inventory Batch Entry window to mark the checkbox to post to the GL by Default and then prompt the user before posting without posting to the GL.  This demonstrates a couple of handy VBA techniques you can use to alter and control the behavior of GP (forgive the formatting).&lt;br /&gt;&lt;br /&gt;Option Explicit&lt;br /&gt;Dim Msg, Style, Title, Help, Ctxt, Response, MyString, Default&lt;br /&gt;&lt;br /&gt;Private Sub Comment_AfterGotFocus()&lt;br /&gt;&lt;br /&gt;'Mark the Post to GL Checkbox after Comment Got Focus if not already marked&lt;br /&gt;&lt;br /&gt;If PosttoGeneralLedger = 0 Then  &lt;br /&gt;PosttoGeneralLedger = 1  &lt;br /&gt;Changed = False&lt;br /&gt;End If&lt;br /&gt;&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;Private Sub Origin_AfterUserChanged()&lt;br /&gt;&lt;br /&gt;'Mark the Post to GL Checkbox after changing the origin if not already marked&lt;br /&gt;&lt;br /&gt;If PosttoGeneralLedger = 0 Then  &lt;br /&gt;&lt;br /&gt;PosttoGeneralLedger = 1  &lt;br /&gt;Changed = False&lt;br /&gt;&lt;br /&gt;End If&lt;br /&gt;&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;Private Sub Post_BeforeUserChanged(KeepFocus As Boolean, CancelLogic As Boolean)&lt;br /&gt;&lt;br /&gt;If BatchID.Empty = False Then  &lt;br /&gt;&lt;br /&gt;If InventoryBatchEntry.PosttoGeneralLedger.Value = 0 Then      &lt;br /&gt;&lt;br /&gt;Msg = "Do you want to post this batch without posting to GL?"   ' Define message.      &lt;br /&gt;Style = vbYesNoCancel + vbCritical ' Define buttons.      &lt;br /&gt;Title = "Great Plains"  ' Define title.      &lt;br /&gt;Help = "DEMO.HLP\"   ' Define Help file.      &lt;br /&gt;Ctxt = 1000 ' Define topic      &lt;br /&gt;Response = MsgBox(Msg, Style, Title, Help, Ctxt)      &lt;br /&gt;&lt;br /&gt;If Response = vbNo Then        &lt;br /&gt;&lt;br /&gt;InventoryBatchEntry.PosttoGeneralLedger.Value = 1          &lt;br /&gt;&lt;br /&gt;Else    &lt;br /&gt;   &lt;br /&gt;If Response = vbCancel Then    &lt;br /&gt;       &lt;br /&gt;CancelLogic = True          &lt;br /&gt;&lt;br /&gt;End If      &lt;br /&gt;End If  &lt;br /&gt;End If&lt;br /&gt;End If&lt;br /&gt;End Sub&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-3072362171155309552?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/3072362171155309552/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=3072362171155309552' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/3072362171155309552'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/3072362171155309552'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2007/11/using-vba-to-mark-inventory-batches-to.html' title='Using VBA to Mark Inventory Batches to Post to GL'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-7787862096147118368</id><published>2007-11-26T14:11:00.001-06:00</published><updated>2009-03-01T16:06:49.975-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VBA'/><title type='text'>VBA Tip of the ?????</title><content type='html'>I'm not real committed to this blog as you can tell.  But, I do have something to offer.  Here's the first of some simple tips I might share ;)&lt;br /&gt;&lt;br /&gt;Displaying a message box to a user and controlling their actions might be the easiest way to change the functionality of GP.  You display the message box so they aren't confused when you alter the standard functionality of GP.  This came up recently in a GP newsgroup post.  Below is an example of forcing the user to enter a tracking number before clicking the Ready To Close buttin on RMA Entry Update.  The CancelLogic = True prevents the Ready To Close logic from running if the TrackingNumber field is empty.  You can put this on other BeforeUserChanged events in GP to alter the logic elsewhere.&lt;br /&gt;&lt;br /&gt;Option Explicit&lt;br /&gt;Dim Msg, Style, Title, Help, Ctxt, Response, MyString, Default&lt;br /&gt;&lt;br /&gt;Private Sub SVCReadyToClose_BeforeUserChanged(KeepFocus As Boolean, CancelLogic As Boolean)&lt;br /&gt;If TrackingNumber.Empty = True Then  &lt;br /&gt;Msg = "The Tracking Number is required before a RMA Line can be marked to close."&lt;br /&gt;Style = vbOKOnly + vbCritical ' Define buttons.  &lt;br /&gt;Title = "Great Plains"  ' Define title.&lt;br /&gt;Help = "DEMO.HLP\"   ' Define Help file.&lt;br /&gt;Ctxt = 1000 ' Define topic&lt;br /&gt;Response = MsgBox(Msg, Style, Title, Help, Ctxt)&lt;br /&gt;CancelLogic = True&lt;br /&gt;KeepFocus = True&lt;br /&gt;End If&lt;br /&gt;End Sub&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-7787862096147118368?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/7787862096147118368/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=7787862096147118368' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/7787862096147118368'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/7787862096147118368'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2007/11/vba-tip-of.html' title='VBA Tip of the ?????'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-114617195511158646</id><published>2006-04-27T16:05:00.002-05:00</published><updated>2009-10-01T21:42:36.682-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Dynamics GP'/><category scheme='http://www.blogger.com/atom/ns#' term='Payables Management'/><title type='text'>Dynamic Accounting.net: Weekly Dynamic: Dynamics GP 9 Payables</title><content type='html'>&lt;a href="http://msdynamicsgp.blogspot.com/2006/04/weekly-dynamic-dynamics-gp-9-payables_11.html#links"&gt;Dynamic Accounting.net: Weekly Dynamic: Dynamics GP 9 Payables&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-114617195511158646?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/114617195511158646/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=114617195511158646' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/114617195511158646'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/114617195511158646'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2006/04/dynamic-accountingnet-weekly-dynamic.html' title='Dynamic Accounting.net: Weekly Dynamic: Dynamics GP 9 Payables'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-114616269064780381</id><published>2006-04-27T13:24:00.001-05:00</published><updated>2009-03-01T16:07:54.668-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VBA'/><category scheme='http://www.blogger.com/atom/ns#' term='DUOS'/><title type='text'>Real Example of using the DUOS</title><content type='html'>While I am not a fan of using the DUOS with the same methods described in the manual, using ADO with RetrieveGlobals is better and easier in my opinion, I did do so in one instance to store an EDI Account Number for each customer.  I added a field to Customer Maintenance and named it "strEDIAccount".  Then I added the code below to my VBA project to store the date in and retrieve it from the DUOS (SY90000) table.  This isn't much different than the sample code in the manual but it is a real world example.  You should be able make some tweaks to this code and use the information in the manual to make this work in your environment.  Good luck!&lt;br /&gt;&lt;br /&gt;Option Explicit&lt;br /&gt;&lt;br /&gt;Dim Msg, Style, Title, Help, Ctxt, Response, MyString, Default&lt;br /&gt;Dim ItemCollection As DUOSObjects&lt;br /&gt;Dim ItemObject As DUOSObject&lt;br /&gt;Dim WanttoDelete As Boolean&lt;br /&gt;Dim ItemDelete As String&lt;br /&gt;Public OkDelete As Boolean&lt;br /&gt;&lt;br /&gt;Private Sub Delete_AfterUserChanged()&lt;br /&gt;&lt;br /&gt;On Error GoTo Proc_Error:&lt;br /&gt;&lt;br /&gt;If WanttoDelete And OkDelete Then       &lt;br /&gt;    ItemCollection.Remove (ItemDelete)   &lt;br /&gt;End If   &lt;br /&gt;&lt;br /&gt;Exit Sub&lt;br /&gt;&lt;br /&gt;Proc_Error:     MsgBox Error$ &amp;amp; " " &amp;amp; Error, vbOKOnly, "Delete_AfterUserChanged"&lt;br /&gt;&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;Private Sub CustomerID_Changed()&lt;br /&gt;&lt;br /&gt;On Error GoTo Proc_Error:&lt;br /&gt;&lt;br /&gt;Set ItemCollection = DUOSObjectsGet("Customer")   &lt;br /&gt;&lt;br /&gt;If CustomerID.Empty = False Then       &lt;br /&gt;    Set ItemObject = ItemCollection(CustomerID)       &lt;br /&gt;    strEDIAccount = ItemObject.Properties("EDIAccount")       &lt;br /&gt;    ItemDelete = CustomerID       &lt;br /&gt;    OkDelete = True       &lt;br /&gt;    WanttoDelete = False   &lt;br /&gt;End If   &lt;br /&gt;&lt;br /&gt;Exit Sub&lt;br /&gt;&lt;br /&gt;Proc_Error:     MsgBox Error$ &amp;amp; " " &amp;amp; Error, vbOKOnly, "CustomerID_Changed"&lt;br /&gt;&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;Private Sub Save_BeforeUserChanged(KeepFocus As Boolean, CancelLogic As Boolean)&lt;br /&gt;&lt;br /&gt;On Error GoTo Proc_Error:&lt;br /&gt;&lt;br /&gt;ItemObject.Properties("EDIAccount") = strEDIAccount   &lt;br /&gt;&lt;br /&gt;Exit Sub&lt;br /&gt;&lt;br /&gt;Proc_Error:     MsgBox Error$ &amp;amp; " " &amp;amp; Error, vbOKOnly, "Save_BeforeUserChanged"&lt;br /&gt;&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;Private Sub strEDIAccount_AfterUserChanged()&lt;br /&gt;&lt;br /&gt;On Error GoTo Proc_Error:&lt;br /&gt;&lt;br /&gt;ItemObject.Properties("EDIAccount") = strEDIAccount   &lt;br /&gt;&lt;br /&gt;Exit Sub&lt;br /&gt;&lt;br /&gt;Proc_Error:     MsgBox Error$ &amp;amp; " " &amp;amp; Error, vbOKOnly, "strEDIAccount_AfterUserChanged"&lt;br /&gt;&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;Private Sub Window_AfterModalDialog(ByVal DlgType As DialogType, PromptString As String, Control1String As String, Control2String As String, Control3String As String, Answer As DialogCtrl)&lt;br /&gt;&lt;br /&gt;On Error GoTo Proc_Error:&lt;br /&gt;&lt;br /&gt;If PromptString = "Are you sure you want to delete this customer record?" Then       &lt;br /&gt;    If Answer = dcButton1 Then           &lt;br /&gt;                   WanttoDelete = True       &lt;br /&gt;    End If   &lt;br /&gt;End If   &lt;br /&gt;&lt;br /&gt;Exit Sub&lt;br /&gt;&lt;br /&gt;Proc_Error:     MsgBox Error$ &amp;amp; " " &amp;amp; Error, vbOKOnly, "Window_AfterModalDialog"&lt;br /&gt;&lt;br /&gt;End Sub&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-114616269064780381?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/114616269064780381/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=114616269064780381' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/114616269064780381'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/114616269064780381'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2006/04/real-example-of-using-duos.html' title='Real Example of using the DUOS'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-114607395090122232</id><published>2006-04-26T12:46:00.001-05:00</published><updated>2009-03-01T16:08:14.110-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>SQL Nugget - Shortcut to create INSERT into</title><content type='html'>Here's a SQL nugget I love to use when writing stored procs, triggers, and the like. Copy and paste this into query analyzer and replace %TableName% with the name of the Table in which you want to insert records. Execute it to return the INSERT into statement complete with default values for every field in the table. Paste the results into your object and populate the fields with your values. This can be a real time save for developers and when doing data conversions.&lt;br /&gt;&lt;br /&gt;A slick cat we'll call Mo gave this to me. I can't take credit for it.&lt;br /&gt;&lt;br /&gt;set nocount on&lt;br /&gt;DECLARE @sTableName varchar(128)set @sTableName = '%TableName%'&lt;br /&gt;select @sTableName as sTableName into #tmpTableName&lt;br /&gt;DECLARE @lTableID intset @lTableID = NullSELECT @lTableID = [ID] from sysobjects where (objectproperty(id, N'IsTable') = 1) and (id = object_id(@sTableName))&lt;br /&gt;if (@lTableID is Null)begin print 'Table not found! Aborting.' returnend&lt;br /&gt;SELECT [name], xtype, prec, scale, colorder, isnullable into #tmpColumns from syscolumns where ([id] = @lTableID) and (colstat = 0) order by colorder&lt;br /&gt;alter table #tmpColumns ADD lRowID int not null identity, -- add an identity column to the temp table sDefault varchar(40) -- add a column to store the default that we want to enter for new rowsGO&lt;br /&gt;UPDATE #tmpColumns set sDefault = case xtype when 34 then ''' ''' -- image when 35 then ''' ''' -- text when 36 then Null -- unique identifier when 48 then '0' -- tinyint when 52 then '0' -- smallint when 56 then '0' -- int when 58 then '''1/1/1900''' -- smalldatetime when 59 then '0.0' -- real when 60 then '0' -- money when 61 then '''1/1/1900''' -- datetime when 62 then '0.0' -- float when 99 then ''' ''' -- ntext when 104 then '0' -- bit when 106 then '.00' -- decimal when 108 then '0.0' -- numeric when 122 then '0.0' -- smallmoney when 165 then '0' --'convert(varbinary, '' '')' -- varbinary when 167 then ''' ''' -- varchar when 173 then '0' --'convert(binary, '' '')' -- binary when 175 then ''' ''' -- char when 189 then Null -- timestamp when 231 then ''' ''' -- nvarchar when 239 then ''' ''' -- nchar endDELETE #tmpColumns where sDefault is Null--select sDefault, xtype, [name] from #tmpColumns order by colorder, lRowID&lt;br /&gt;&lt;br /&gt;DECLARE cur insensitive scroll cursor for select sDefault, [name] from #tmpColumns order by colorder, lRowIDOPEN cur&lt;br /&gt;declare @sDefault varchar(40), @sName varchar(128)declare @sWork varchar(200)declare @sWork2 varchar(100)&lt;br /&gt;select top 1 @sWork2 = sTableName from #tmpTableNameprint 'INSERT into ' + @sWork2print ' ('&lt;br /&gt;FETCH first from cur into @sDefault, @sNameWHILE ( @@fetch_status = 0 )begin set @sWork = char(9) + @sName&lt;br /&gt;FETCH next from cur into @sDefault, @sName -- if the fetch is good, add a ',' to the end if ( @@fetch_status = 0 ) set @sWork = @sWork + ','&lt;br /&gt;print @sWorkendprint ' )'&lt;br /&gt;print 'select'&lt;br /&gt;FETCH first from cur into @sDefault, @sNameWHILE ( @@fetch_status = 0 )begin set @sWork = char(9) + @sDefault set @sWork2 = @sName&lt;br /&gt;-- get the next record from the cursor FETCH next from cur into @sDefault, @sName&lt;br /&gt;-- if the fetch is good, add a ',' to the end if ( @@fetch_status = 0 ) set @sWork = @sWork + ','&lt;br /&gt;set @sWork = @sWork + char(9) + '-- ' + @sWork2 print @sWorkend&lt;br /&gt;CLOSE curDEALLOCATE CUR&lt;br /&gt;DROP table #tmpColumnsDROP table #tmpTableName&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-114607395090122232?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/114607395090122232/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=114607395090122232' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/114607395090122232'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/114607395090122232'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2006/04/sql-nugget-shortcut-to-create-insert.html' title='SQL Nugget - Shortcut to create INSERT into'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-114599141614770563</id><published>2006-04-25T13:24:00.001-05:00</published><updated>2009-03-01T16:08:41.341-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VBA'/><category scheme='http://www.blogger.com/atom/ns#' term='ADO'/><title type='text'>ADO Connections through VBA in Dynamics GP v9</title><content type='html'>This has come up time and time again on message boards I frequent on the web. People are always asking how they can access SQL Tables and other objects through VBA to extend GP. It's pretty simple to add a field to a window with Modifier or create a user form in VBA but many seem to wonder how to access the database to really make things happen.&lt;br /&gt;&lt;br /&gt;You can find all you need to know on Customer/PartnerSource. I'm only disclosing the same information here and a little of what I have learned to complement that information.&lt;br /&gt;&lt;br /&gt;When Microsoft Dynamics GP 9.0 was released, a change was made in the password policy. This change required changes in how Microsoft Dynamics GP Dexterity works with passwords and in how the RetrieveGlobals.dll file works with passwords. The RetrieveGlobals.dll file was available for all earlier versions but does not work with Microsoft Dynamics GP 9.0. Therefore, you must replace the RetrieveGlobals.dll file with the new RetrieveGlobals9.dll file. The new RetrieveGlobals9.dll file is an ActiveX file. It returns the following information:&lt;br /&gt;&lt;br /&gt;•The current user ID&lt;br /&gt;•The current company to which you are logged in&lt;br /&gt;•The current SQL data source&lt;br /&gt;•The current user date in Microsoft Dynamics GP 9.0&lt;br /&gt;&lt;br /&gt;The RetrieveGlobals9.dll file also returns an ActiveX Data Objects (ADO) connection object that lets you connect to Microsoft Dynamics GP data. The RetrieveGlobals9.dll file works only with version 9.0 of Microsoft Dynamics GP. Additionally, this file works only if you have one session of Microsoft Dynamics GP running and if you are logged into this session. The RetrieveGlobals9.dll file is for use only in Modifier with VBA or in Integration Manager. Modifier with VBA and Integration Manager both require that Microsoft Dynamics GP is open and running. To download the RetrieveGlobals9.dll file together with its documentation, visit one of the Microsoft Web sites.&lt;br /&gt;&lt;br /&gt;After upgrading all of our GP v7 VBA code to Dynamics GP v9 I found that I might have something valuable to share on this topic that you cannot readily find on CustomerSource. This is how I have organized my code to get best results from the RetrieveGlobals9.dll.&lt;br /&gt;&lt;br /&gt;1. Create a Get_NewConnection SubRoutine behind each window for which ADO connections will be required:&lt;br /&gt;&lt;br /&gt;Public Sub Get_NewConnection()&lt;br /&gt;'This code clears all variables used and closes the connections.&lt;br /&gt;&lt;br /&gt;If precordset.State = adStateOpen Then precordset.Close&lt;br /&gt;If pconnection.State = adStateOpen Then pconnection.Close&lt;br /&gt;&lt;br /&gt;'Initialize the connection string variables&lt;br /&gt;Set userinfo = Nothing&lt;br /&gt;Set userinfo = CreateObject("RetrieveGlobals9.retrieveuserinfo")&lt;br /&gt;luserid = userinfo.retrieve_user()&lt;br /&gt;lintercompanyid = userinfo.intercompany_id()&lt;br /&gt;lsqldatasourcename = userinfo.sql_datasourcename()&lt;br /&gt;&lt;br /&gt;'Use the connection property to get a connection object.&lt;br /&gt;Set pconnection = userinfo.Connection&lt;br /&gt;&lt;br /&gt;'Create an ADO command object.&lt;br /&gt;Set cmd = CreateObject("ADODB.Command")&lt;br /&gt;&lt;br /&gt;'set the database to the currently logged in db.&lt;br /&gt;pconnection.DefaultDatabase = lintercompanyid&lt;br /&gt;&lt;br /&gt;cmd.ActiveConnection = pconnection&lt;br /&gt;&lt;br /&gt;'adCmdText.&lt;br /&gt;cmd.CommandType = 1&lt;br /&gt;&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;2. Create a CloseConnection SubRoutine behind each window you create a Get_NewConnection:&lt;br /&gt;&lt;br /&gt;Public Sub CloseConnection()&lt;br /&gt;&lt;br /&gt;'This code clears all variables used and closes the connections.&lt;br /&gt;If precordset.State = adStateOpen Then precordset.Close&lt;br /&gt;If pconnection.State = adStateOpen Then pconnection.Close&lt;br /&gt;Set cmd = Nothing&lt;br /&gt;Set pconnection = Nothing&lt;br /&gt;&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;3. Call the Get_NewConnection to create new connections and CloseConnection to close them. I found that on some windows you can put these calls on the After Open and After Close events. On others you will have to reinitialize the connections and close them for every new call you make to the database.&lt;br /&gt;&lt;br /&gt;4. Here's an example of how we populate a checkbox placed on EFT Customer Maintenance with Modifier based on whether or not the customer's pre-note has been confirmed which is stored in a table called "Dealer" outside of Dynamics GP.&lt;br /&gt;&lt;br /&gt;Private Sub CustomerID_Changed()&lt;br /&gt;&lt;br /&gt;On Error GoTo Proc_Error:&lt;br /&gt;&lt;br /&gt;Get_NewConnection&lt;br /&gt;&lt;br /&gt;cmd.CommandText = "SELECT PreNoteStatus FROM " &amp;amp; lintercompanyid &amp;amp; ".dbo.Dealer where AccountNumber = '" &amp;amp; CustomerID &amp;amp; "'"&lt;br /&gt;&lt;br /&gt;Set precordset = cmd.Execute&lt;br /&gt;&lt;br /&gt;If precordset.EOF = False Then&lt;br /&gt;If RTrim(precordset.Fields("PreNoteStatus")) = 1 Then&lt;br /&gt;PreNoteConfirmed = 1&lt;br /&gt;Changed = False&lt;br /&gt;Else&lt;br /&gt;PreNoteConfirmed = 0&lt;br /&gt;Changed = False&lt;br /&gt;End If&lt;br /&gt;Else&lt;br /&gt;PreNoteConfirmed = 0&lt;br /&gt;Changed = False&lt;br /&gt;End If&lt;br /&gt;&lt;br /&gt;GoTo Procedure_Exit:&lt;br /&gt;&lt;br /&gt;Proc_Error:&lt;br /&gt;&lt;br /&gt;MsgBox Error$ &amp;amp; " " &amp;amp; Error, vbOKOnly, "CustomerID_Changed"&lt;br /&gt;&lt;br /&gt;Procedure_Exit:&lt;br /&gt;&lt;br /&gt;CloseConnection&lt;br /&gt;&lt;br /&gt;End Sub&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-114599141614770563?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/114599141614770563/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=114599141614770563' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/114599141614770563'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/114599141614770563'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2006/04/ado-connections-through-vba-in.html' title='ADO Connections through VBA in Dynamics GP v9'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-114589288089716305</id><published>2006-04-24T10:16:00.001-05:00</published><updated>2009-03-01T16:09:00.088-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ISV'/><title type='text'>Liaison Messenger</title><content type='html'>Let's review a 3rd Party addon for Great Plains today.  We recently purchased Liaison Messenger http://www.liaisonsc.com/liaisonmessenger.html to automate business form generation and distribution to customers and vendors.  Specifically, our ROI will come from automating invoice printing and e-mailing to customers as we generate hundreds of invoices everyday.  The cost of the time required to process those invoices and the postage/supplies necessary get them distributed justified the investment in such a system.  In time we'll do the same for customer statements and vendor POs.  I would recommend that everyone check out this product.&lt;br /&gt;&lt;br /&gt;I'll give Messenger 4 out of 5 stars.  First, the Liaison Team is outstanding.  Every issue we've had or change we've requested has been handled diligently and effectively under our support agreement.  Their customer support and service is outstanding and by far the best I've seen from a 3rd Party solution provider.  Secondly, Messenger fills a significant gap in GP.  Being able to automate invoice distribution helps us to controls costs and turnover assets both of which are critical priorities for our business.  There's no doubt that this purchase was a good decision.&lt;br /&gt;&lt;br /&gt;The Messenger system is by no means perfect but they know that and are working on improvements.  First, it doesn't run as a service but rather as an application so you have to have the Messenger Server installed and running on a PC or Server that is logged into at all times.  We are running it on a process server (Not GP Process Server) that performs a variety of functions such as polling new EDI files which also requires an application to be running which can make for a rather unstable or inconsistent environment.  I understand that they are currently working with MSFT to build Messenger to run as a service which will eliminate this as an issue.&lt;br /&gt;&lt;br /&gt;The second thing that make Messenger less than perfect is the performance.  I'll qualify that by saying we are still on GP eEnterprise v7 and I am told that Messenger performs much better with Dynamics GP v9.  We have millions of SOP HIST records and print invoices from the History tables so it was taking hours to process a days invoices.  If we were using Messenger the way it was designed, against SOP WORK, this problem would not have persisted but we are seeing and working through similar issues with customer statements.  To resolve this problem the Messenger support and development team was stellar.  They implemented some changes to our system and now our invoices print in minutes.  We are working to do the same for statements now.  I'll let you know how that turns out.&lt;br /&gt;&lt;br /&gt;In summary, regardless of what product you select to help solve your business problems you will run into issues or gaps in functionality.  It's inevitable.  If you have a need to automate business form generation and distribution I can't recommend Liaison Messenger more highly mostly because their team is dedicated to ensuring that your expectations are met and the product works well in your environment.&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-114589288089716305?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/114589288089716305/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=114589288089716305' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/114589288089716305'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/114589288089716305'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2006/04/liaison-messenger.html' title='Liaison Messenger'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14548861.post-114580545177281729</id><published>2006-04-23T09:49:00.002-05:00</published><updated>2009-09-18T18:00:27.226-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='General'/><title type='text'>Who am I and why am I here?</title><content type='html'>I've been a Dynamics GP resource since the late 90s.  Before that, I was an accountant with a fortune 500 company running Great Plains Accounting Software. Now, I manage an IT Department for a global organization that has standardized on Dynamics GP.&lt;br /&gt;&lt;br /&gt;I'm here in part out of inspriration by Doug's keynote at Convergence 2006 in Dallas to further contribute unselfishly to the Dynamics GP community.  I'm not out to sell anything but rather simply share my knowledge of Dynamics GP and absorb knowledge from others doing the same.  I'll give you the good, the bad, and the ugly from my perspective.&lt;br /&gt;&lt;br /&gt;My knowledge spans almost all of the modules Dynamics GP has to offer including the core financial suite, distribution, manufacturing, service management, HR/Payroll, the customization and integration tool such as DIM and VBA, and many of the 3rd party products widely used in the channel.  I've implemented each a handful of times and passed many of the exams although I wouldn't consider myself an expert on each.  I consider myself an expert SQL Server programmer although I've never pursued a certification, am able to leverage VBA to extend GP, and feel that I can make a Crystal Report tell me anything I want.  I know little of Dexterity and just enough about .Net to be dangerous.  In short, in some instances I can be considered a developer.&lt;br /&gt;&lt;br /&gt;What I hope to offer those who read my posts is some insight into Dynamics GP and the surrounding community that you can get mostly through experience.  As I work through the upgrade for my company I'll post some tips and tricks that might not be otherwise documented and describe some of the changes that have occured that may be surprising to some such as the data from the ASILOC50 table (Item Customer Maintenance) has been moved to SOP60300.  I'll also post some code SQL and VB code snipits that might help you to extend your Dynamics GP system on your own.  I'll let you know what I know about the Dynamics GP Community like you must check out http://www.microsoft.com/dynamics/gp/community.mspx, I like to use http://groups.google.com/group/microsoft.public.greatplains to contribute to and consume knowledge from others, and DynamicAccounting.net is a good place to get valuable information from Polino.&lt;div class="blogger-post-footer"&gt;http://mbsguru.blogspot.com/atom.xml&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14548861-114580545177281729?l=mbsguru.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mbsguru.blogspot.com/feeds/114580545177281729/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14548861&amp;postID=114580545177281729' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/114580545177281729'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14548861/posts/default/114580545177281729'/><link rel='alternate' type='text/html' href='http://mbsguru.blogspot.com/2006/04/who-am-i-and-why-am-i-here.html' title='Who am I and why am I here?'/><author><name>Michael D Johnson II</name><uri>http://www.blogger.com/profile/13675896847183138852</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/-0GC2XlVkD9E/TiCdT2K7vHI/AAAAAAAAATE/BMD_p_KBjyg/s220/Picture.jpg'/></author><thr:total>0</thr:total></entry></feed>
