﻿<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Adeptris</title>
    <description>Adeptris.com Blog</description>
    <link>http://www.adeptris.com/Home/tabid/38/BlogId/1/Default.aspx</link>
    <language>en-US</language>
    <managingEditor>david.cox@adeptris.com</managingEditor>
    <webMaster>david.cox@adeptris.com</webMaster>
    <pubDate>Sat, 04 Sep 2010 22:53:56 GMT</pubDate>
    <lastBuildDate>Sat, 04 Sep 2010 22:53:56 GMT</lastBuildDate>
    <docs>http://backend.userland.com/rss</docs>
    <generator>Blog RSS Generator Version 3.5.0.35082</generator>
    <item>
      <title>Contracting the Choices</title>
      <description>&lt;p&gt; 2009 was the first year from thirteen that I experienced a couple of periods with no Dynamics NAV work, a mixture of the recession and the market being saturated with new contractors the likely causes.&lt;/p&gt;
&lt;div style="margin: 0cm 0cm 10pt"&gt;Towards the end of the year there were a number of enquiries so things may pick up in 2010, as I have not blogged for a while I thought I would post a few reasons why companies could look at contractors for new and ongoing projects.&lt;/div&gt;&lt;a href=http://www.adeptris.com/Home/tabid/38/EntryId/12/Contracting-the-Choices.aspx&gt;More...&lt;/a&gt;</description>
      <link>http://www.adeptris.com/Home/tabid/38/EntryId/12/Contracting-the-Choices.aspx</link>
      <author>david.cox@adeptris.com</author>
      <comments>http://www.adeptris.com/Home/tabid/38/EntryId/12/Contracting-the-Choices.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.adeptris.com/Home/tabid/38/EntryId/12/Contracting-the-Choices.aspx</guid>
      <pubDate>Mon, 04 Jan 2010 12:50:00 GMT</pubDate>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.adeptris.com/DesktopModules/Blog/Trackback.aspx?id=12</trackback:ping>
    </item>
    <item>
      <title>UK Dynamics NAV Freelance Developer</title>
      <description>&lt;p&gt;My current Position as a Dynamics NAV Contract Developer with a Reseller in Surrey finished at the end of May 2009, after running for 6 Months.    &lt;br /&gt;The last two contracts covered 33 months included 27 months in the City of London, this contract started out as a two month contract, for a city based medium sized Microsoft Gold Reseller of Dynamics, my role was as an office based Dynamics NAV developer/consultant, the reseller also had other consultants that carried out some development, with the customer base being quite diverse.&lt;/p&gt; &lt;a href=http://www.adeptris.com/Home/tabid/38/EntryId/11/UK-Dynamics-NAV-Freelance-Developer.aspx&gt;More...&lt;/a&gt;</description>
      <link>http://www.adeptris.com/Home/tabid/38/EntryId/11/UK-Dynamics-NAV-Freelance-Developer.aspx</link>
      <author>david.cox@adeptris.com</author>
      <comments>http://www.adeptris.com/Home/tabid/38/EntryId/11/UK-Dynamics-NAV-Freelance-Developer.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.adeptris.com/Home/tabid/38/EntryId/11/UK-Dynamics-NAV-Freelance-Developer.aspx</guid>
      <pubDate>Fri, 03 Jul 2009 12:10:28 GMT</pubDate>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://www.adeptris.com/DesktopModules/Blog/Trackback.aspx?id=11</trackback:ping>
    </item>
    <item>
      <title>Employing a Dynamics NAV Contractor</title>
      <description>&lt;p&gt;Working as a Dynamics NAV development freelance contractor in the UK, the contracts will almost always come through third party agencies, I have a good working relationship with a few of these, the agencies work on a commission basis for both placing permanent employees and contractors.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;With an employee the companies will know what commission the agency is charging as it is based on the employees salary this is usually around 15% of the annual salary, however with a contractor the company will get charged a fixed day rate and the agency will deal with paying the contractor or the contractors umbrella company.&lt;/p&gt; &lt;a href=http://www.adeptris.com/Home/tabid/38/EntryId/10/Employing-a-Dynamics-NAV-Contractor.aspx&gt;More...&lt;/a&gt;</description>
      <link>http://www.adeptris.com/Home/tabid/38/EntryId/10/Employing-a-Dynamics-NAV-Contractor.aspx</link>
      <author>david.cox@adeptris.com</author>
      <comments>http://www.adeptris.com/Home/tabid/38/EntryId/10/Employing-a-Dynamics-NAV-Contractor.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.adeptris.com/Home/tabid/38/EntryId/10/Employing-a-Dynamics-NAV-Contractor.aspx</guid>
      <pubDate>Thu, 02 Jul 2009 20:37:59 GMT</pubDate>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.adeptris.com/DesktopModules/Blog/Trackback.aspx?id=10</trackback:ping>
    </item>
    <item>
      <title>Prepayment and Deferred Revenue Report</title>
      <description>&lt;p&gt; &lt;/p&gt;  &lt;p&gt;To follow on from the blog posting: &lt;a href="http://adeptrisnav.wordpress.com/2009/06/24/dynamics-nav-accruals-dealing-with-prepayments-and-deferred-revenue/"&gt;Dealing with Prepayments and Deferred Revenue&lt;/a&gt; &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;The head of accounts would like a function for creating the recurring journals for the prepayments and deferred revenue, there is a download for the report in the downloads section (Version 5), I would urge you to read on to understand how this report is designed and how it  works, this report is designed as a learning aid for developers.&lt;/p&gt; &lt;a href=http://www.adeptris.com/Home/tabid/38/EntryId/9/Prepayment-and-Deferred-Revenue-Report.aspx&gt;More...&lt;/a&gt;</description>
      <link>http://www.adeptris.com/Home/tabid/38/EntryId/9/Prepayment-and-Deferred-Revenue-Report.aspx</link>
      <author>david.cox@adeptris.com</author>
      <comments>http://www.adeptris.com/Home/tabid/38/EntryId/9/Prepayment-and-Deferred-Revenue-Report.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.adeptris.com/Home/tabid/38/EntryId/9/Prepayment-and-Deferred-Revenue-Report.aspx</guid>
      <pubDate>Tue, 30 Jun 2009 13:19:51 GMT</pubDate>
      <slash:comments>4</slash:comments>
      <trackback:ping>http://www.adeptris.com/DesktopModules/Blog/Trackback.aspx?id=9</trackback:ping>
    </item>
    <item>
      <title>Digital Artists new Logistics Model</title>
      <description>&lt;h5&gt;Digital Artists&lt;/h5&gt;  &lt;p&gt;Digital artists upload their assets to many sites, spending lots of hours preparing and uploading, often different sites requiring different formats, attributes and keyword data, then digital artists receive different amounts of revenue per download per agency, artist with sales are paying for all the free space given away by agents to other digital artists, I think it is time for a new logistics model, one where the artist keeps controls their assets, the goal is to look at a better model for artists. &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;p&gt;Upload just the once to their own online storage space &lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;Have easy access to one tool that sets all the required data attributes &lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;Set their own fair prices with price bands and levels  &lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;Be able to submit a thumbnail and media data once to a single search engine &lt;/p&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;h5&gt;Agencies and Merchants&lt;/h5&gt;  &lt;p&gt;Digital agencies, merchants and direct buyers currently have heavy overheads when acquiring digital media content, the costs of reviewing contributor applications and media submissions, marketing to attracting the right artists to the website, what we need is a model that will act as a pipeline to connect agents to the artists, giving the agents more time for marketing to customers, the artists could submit image data to a search engine where the agent or merchant can filter for the right content, and include this on an item by item basis to thier library.  &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;p&gt;Central search engine via an API for all media types by price band, level, licence type and attributes   &lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;Filter options by any required attributes, keywords and detail  &lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;Cost price would be set per media by artists and agents would mark-up from base price  &lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;Data storage costs would be cut to a minimum &lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;Updates sent when suitable content comes online based on agents and merchants saved searches  &lt;/p&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;h5&gt;Concept&lt;/h5&gt;  &lt;p&gt;To create initial discussions about a model that will provide the tools to connect the digital artists, who are the asset vendors to new and existing customers, either via direct website sales or through the approved agents and merchants, and using default data templates with a search engine where the vendor will retain full control of thier assets until the point of delivery. &lt;/p&gt;  &lt;p&gt;What the industry does not need is another large new agency, but a new logistics model one that will not hold main assets at anytime, and will not at any point in the transaction have control over the artist's or customers revenue. &lt;/p&gt;  &lt;h5&gt;Current Model&lt;/h5&gt;  &lt;p&gt;To monetize thier digital assets many artists will upload to many different agencies or merchant sites, the existing model does not help the digital artist control and manage thier assets, often the submission rules vary from agency to agency and often the format of the asset and or asset data has to be changed to satisfy the different guidelines. &lt;/p&gt;  &lt;p&gt;The artist will spend many hours uploading to agents websites, just to have some of thier digital assets declined and often as not being what the agency needs at this time, when the Asset is accepted and a sale takes place the artist often has to wait until sales of thier assets reach a preset revenue amount before they receive any payment, a large number of digital artists do not reach the payment threshold and will never be paid the royalties due on thier assets. &lt;/p&gt;  &lt;h5&gt;Uploading is free now?&lt;/h5&gt;  &lt;p&gt;This is the statement that is often used to defend the large percentages some existing agencies charge, it is much a false statement and one that artists need to think about more, as more and more digital assets become available the revenue is diluted more and more, where the agencies and merchants are also under pressure to compete in the market and will reduce prices and squeeze the artists even more. &lt;/p&gt;  &lt;p&gt;The artists that do have sales are now paying for all the free accounts and storage of assets that may never sell, and as overhead costs grow and the traditional revenue falls the digital artists will be squeezed further. &lt;/p&gt;  &lt;h5&gt;How could a new model work?&lt;/h5&gt;  &lt;p&gt;A new model could greatly increase the royalty revenue return the artist gets, one where the digital artist is only required to upload their asset only once to a web space that the digital artist controls, this model would cut down on time spent preparing and uploading, and gives the control of the main asset back to the digital artist including setting the base price for each asset, and then once the artist has set the attribute data for the asset they could just submit the asset details to the search engine, the asset then stays under the control of the Artist only small samples and data is submitted to the search engine. &lt;/p&gt;  &lt;p&gt;We now have a search engine index full of just asset data that the agencies would be able to search by specific terms, there currently such a huge cost to both the digital artist, agencies and merchants in uploading and reviewing digital media assets that are then not required because the agent has to many similar assets, so instead of the agencies looking for different artists and artists looking for new Agencies, the search engine would enable agents to access all the data they have done a specific search for, from many different artists, and be able to select on an item by item basis which ones to include in their library. &lt;/p&gt;  &lt;h5&gt;Who should pay what? &lt;/h5&gt;  &lt;p&gt;A new model could work on micropayments for transactions and spread the costs between the artist, agencies and merchants. &lt;/p&gt;  &lt;p&gt;This would mean the cost is spread with the artist paying for their online storage with one of the main companies like Amazon or Microsoft, and this then gives the search engine access to the samples and data packets, this also acts for the digital artist as an online backup service for their assets, the artist would pay to submit the image samples and data and these charges would only be micropayments, larger samples would only be generated when there is a request for the data packet from an agency. &lt;/p&gt;  &lt;p&gt;The agency would pay for their own transactions and again these would be micropayments, the agency will retrieve thumbnails when they carry out a search, they would be able to request a sample or composite for any digital asset already in their collection, when a sale happens and a full size image is requested the search engine will only carry out requests when it has received a confirmation notice or payment notification &lt;/p&gt;  &lt;p&gt;The artist would be paid 100% of the set price by the agent at the time of delivery, the agent will retain the marked up percentage or amount they have added to the digital artists price.  &lt;/p&gt;  &lt;h5&gt;Environmental Considerations &lt;/h5&gt;  &lt;p&gt;Another consideration is our carbon footprint, our digital assets when stored on many agents websites servers has no consideration for data-storage efficiency, this new model would reduce the data duplication by using the single-instance storage, and reducing storage needs by eliminating redundant assets and many servers. as only one unique instance of the image is actually retained on storage media until the point of sale, and the full digital asset uploads are replaced with a sample or thumbnail and a file pointer to the original digital asset. as an example, a digital photographer with 100 image instances of 4mb and contributing these to 6 stock imaging sites, at present this is requiring 400MB storage space per server, With data duplication this becomes 6 x 400mb, 2.4GB which will use fossil fuel to store these on the servers, with only one instance of the images being stored online and each subsequent instance just referenced back to the single saved copy, the example of 2.4GB storage demand can be reduced to only 400MB.&lt;/p&gt;  &lt;h5&gt;Get Involved&lt;/h5&gt;  &lt;p&gt;I have created a Group website to discuss this model and a logistics website, after input from artists I would like to turn it into reality, the websites can be found at:&lt;/p&gt;  &lt;p&gt;Discussion Group: &lt;a title="http://digitalmediaartists.collectivex.com/" href="http://digitalmediaartists.collectivex.com/"&gt;http://digitalmediaartists.collectivex.com/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Digital Logistics: &lt;a href="http://www.digitalweblogistics.com"&gt;www.digitalweblogistics.com&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;-------------------------------------------------------------&lt;/p&gt;&lt;div class="d_itc_f" style="clear:both;height:11px;"&gt;&lt;script src="/DesktopModules/itcMetaPost/js/mg.js" type="text/javascript"&gt;&lt;/script&gt;&lt;/div&gt;</description>
      <link>http://www.adeptris.com/Home/tabid/38/EntryId/8/Digital-Artists-new-Logistics-Model.aspx</link>
      <author>david.cox@adeptris.com</author>
      <comments>http://www.adeptris.com/Home/tabid/38/EntryId/8/Digital-Artists-new-Logistics-Model.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.adeptris.com/Home/tabid/38/EntryId/8/Digital-Artists-new-Logistics-Model.aspx</guid>
      <pubDate>Tue, 09 Jun 2009 11:32:28 GMT</pubDate>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.adeptris.com/DesktopModules/Blog/Trackback.aspx?id=8</trackback:ping>
    </item>
    <item>
      <title>Keeping active between Contracts</title>
      <description>&lt;p&gt;While I am between Contracts I have had the time to tidy up my websites, the first being this one, I took the old one down and started again, all my websites are run on &lt;a href="http://www.dotnetnuke.com" target="_blank"&gt;DotNetNuke&lt;/a&gt; this is an open source modular website management system, the back end is the Microsoft 2005 SQL database, there are a lot of modules included and many commercial ones that can be added on.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;The Logo is new and was designed and purchased from &lt;a title="www.inspiredlogos.com" href="http://www.inspiredlogos.com/"&gt;www.inspiredlogos.com&lt;/a&gt; at a cost of just under £100, this is quite a good service after paying and giving the website details I received a call to discuss the requirement, they sent 6 designs and I chose one, they were also were good at keeping me informed as to progress, the result is at the top of this page.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.photographerstripod.com"&gt;www.photographerstripod.com&lt;/a&gt; photography is my hobby and this is just a hobby website, it is a Photographic Community website, where photographers can upload images, join groups, network, add events, articles and downloads, the downloads are a set of tool I have created in Visual Studio and Adobe Flash for Image Management, when I am learning or keeping up with a development package, I will look to create a functional application, that is the way I prefer to learn ‘hands on’, I package create a tutorial and make the applications free to download just like the tutorials and downloads on the downloads page here&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.digitalweblogistics.com"&gt;www.digitalweblogistics.com&lt;/a&gt; this website is just a concept idea I am floating to see if it is viable, as photography is my hobby I started to upload to stock imaging website that licence your images and pay you a commission, this is very big business for the stock sites but hard work for the Photographers, each site has a set of requirements and as a Photographer you spend many hours preparing and uploading the same image to many sites, often just to have the image rejected on some websites and accepted on others, which is time wasting and frustrating for both the stock websites and Photographers&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;The concept of &lt;a href="http://www.digitalweblogistics.com"&gt;www.digitalweblogistics.com&lt;/a&gt; is to standardise the preparation and uploading of an image to one instance, then via a search engine allow the imaging stock website to search for images they would like to include in their library, rather than having Photographers uploading many images that they do not require for their library, the photographers would pay for their own image storage submit a thumbnail and the image data including keywords and pricing band to the search engine, the buyers would pay to access the search engine, these would be micropayments and transactions would be between Photographer and Customer, Agent or Merchant          &lt;/p&gt;&lt;div class="d_itc_f" style="clear:both;height:11px;"&gt;&lt;script src="/DesktopModules/itcMetaPost/js/mg.js" type="text/javascript"&gt;&lt;/script&gt;&lt;/div&gt;</description>
      <link>http://www.adeptris.com/Home/tabid/38/EntryId/7/Keeping-active-between-Contracts.aspx</link>
      <author>david.cox@adeptris.com</author>
      <comments>http://www.adeptris.com/Home/tabid/38/EntryId/7/Keeping-active-between-Contracts.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.adeptris.com/Home/tabid/38/EntryId/7/Keeping-active-between-Contracts.aspx</guid>
      <pubDate>Tue, 09 Jun 2009 07:35:38 GMT</pubDate>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://www.adeptris.com/DesktopModules/Blog/Trackback.aspx?id=7</trackback:ping>
    </item>
    <item>
      <title>Dynamics NAV Accruals dealing with Prepayments and Deferred Revenue</title>
      <description>&lt;p&gt;One of the most common search terms that brings people to my website is “Accruals Prepayments and Deferred Revenue”, and the search engine brings up many complicated answers, so I will attempt to bring an explanation in plain English for pre-payments and deferred revenue &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;A simple one line summary, they are just goods and services that have been paid for but not yet supplied&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Lets look at a simple example that we all know, once a year we get the invoice for our car or household insurance, this will cover a period of 12 months, and we often pay this a few weeks before it starts, lets say our premium is 487.67 starts on the 15th January 2010 and we want to account for this, so we post the whole invoice value to the Insurance General Ledger Account on the 15th January 2010&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;First thing we do is to look at the the whole value a short term asset, as we have not had the services and if we cancel we will ask for a refund, the year is 12 months, and we have 11 full months and two part months so we divide the value by 12, giving us 11 at 40.64 and one at  40.63&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;In Dynamics NAV we could deal with this simply using a Recurring Journal with eight lines: &lt;/p&gt;  &lt;p&gt;The first two lines deal with moving the whole value to a pre-payments account lets say that the premium is due on the 15th January 2010 and the invoice has been posted on this date, the first two line would take the whole 487.67 from the Insurance account and move it to the pre-payments account, the recurring type is variable, frequency ‘1M’ using the same document number and the Expiration Date would be the 16th January 2010 so it only runs once&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;The next two lines deal with the 17 days of January and would take 22.28 from the 40.63 (40.63 / 31 * 17) and post this from the pre-payments account to the Insurance account, the recurring type is variable, frequency ‘1M’ using the same date, document number and the Expiration Date would be the 16th January 2010 so it only runs once&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;The next two lines deal with the 11 Months of February to December and would take 40.64 and post this from the pre-payments account to the Insurance account, the recurring type is variable, starting date 1st February 2010, frequency ‘1M’ using the same document number and the Expiration Date would be the 2nd December 2010 so it only runs 11 times&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;The next two lines deal with the 14 days of January 2011 and would take the remaining 18.35 and post this from the pre-payments account to the Insurance account, the recurring type is variable, starting date 1st January 2011, frequency ‘1M’ using the same document number and the Expiration Date would be the 2nd January 2011 so it only runs 1 time&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;As for deferred revenue like support contract values received by your company for services not yet given, what we do here is to look at the the whole value as a short term liability, as we have not provided the services and if the customer were to cancel they would ask for a refund, we would follow the same process but using a deferred revenue account to hold the liability until realized&lt;/p&gt;  &lt;p&gt;  &lt;/p&gt;  &lt;p&gt;At any point in the year we can set a date filter and look at pre-payment and deferred revenue values as assets or liabilities&lt;/p&gt;&lt;div class="d_itc_f" style="clear:both;height:11px;"&gt;&lt;script src="/DesktopModules/itcMetaPost/js/mg.js" type="text/javascript"&gt;&lt;/script&gt;&lt;/div&gt;</description>
      <link>http://www.adeptris.com/Home/tabid/38/EntryId/6/Dynamics-NAV-Accruals-dealing-with-Prepayments-and-Deferred-Revenue.aspx</link>
      <author>david.cox@adeptris.com</author>
      <comments>http://www.adeptris.com/Home/tabid/38/EntryId/6/Dynamics-NAV-Accruals-dealing-with-Prepayments-and-Deferred-Revenue.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.adeptris.com/Home/tabid/38/EntryId/6/Dynamics-NAV-Accruals-dealing-with-Prepayments-and-Deferred-Revenue.aspx</guid>
      <pubDate>Thu, 04 Jun 2009 07:32:23 GMT</pubDate>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://www.adeptris.com/DesktopModules/Blog/Trackback.aspx?id=6</trackback:ping>
    </item>
    <item>
      <title>Dynamics NAV Contracting</title>
      <description>&lt;p&gt;I find myself out of contract after a run of 33 months, having always found it easy to get another position this is not yet to much of a worry, having spoken to several agents it looks like there is not much going on at the moment, some have suggested a permanent role could be an option, but this is not one I would consider as I prefer working as a contractor, this is a personal choice, but many think the rewards of a contractor to be a lot higher than a permanent employee&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;An employer can expect about 220 working days from a possible 260 days from an employee, and a Contractor can expect 170 chargeable days from the 220 so lets look at the rates for a contractor:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.itjobswatch.co.uk/contracts/uk/dynamics%20nav.do" href="http://www.itjobswatch.co.uk/contracts/uk/dynamics%20nav.do"&gt;http://www.itjobswatch.co.uk/contracts/uk/dynamics%20nav.do&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;The current rate in GBP from ITJobsWatch is reported at 275 GBP a fall from 400 GBP for the same period last year, most companies will want to work through and Agency, this add 50 GPB – 100 GBP a day onto the contractors rate, so lets say currently 325 GPB a day for the 170 Days, and if a contractor worked the 170 days in a year on a contact that is 55,250 GBP, this to anyone working as a permanent worker seem high but you need to look at the full cost of employment&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Currently the rates for a Dynamics NAV Employee average at 42K GBP &lt;a title="http://www.itjobswatch.co.uk/jobs/uk/dynamics%20nav.do" href="http://www.itjobswatch.co.uk/jobs/uk/dynamics%20nav.do"&gt;http://www.itjobswatch.co.uk/jobs/uk/dynamics%20nav.do&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Looking at &lt;a title="http://www.techscribe.co.uk/ta/cost-of-employment.htm" href="http://www.techscribe.co.uk/ta/cost-of-employment.htm"&gt;http://www.techscribe.co.uk/ta/cost-of-employment.htm&lt;/a&gt; there is a spreadsheet on this website which is based on a 42K Salary, where the true cost is calculated at 400 GBP per day for an employee so there is not much of a bottom line cost difference &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Working as a contractor:&lt;/p&gt;  &lt;p&gt;You do not get paid for Holiday, Sickness, Paternity Leave, Expenses etc:, there are no additional benefits, car allowance, training, pension contributions, the employers can terminate the contract by an agreed notice period without reason, so there are no claims of unfair treatment&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;The employers get a skilled resource that can hit the ground running, which they can drop at any time if the project changes or work runs dry, which is harder if employing just employees, in all my contracts I have passed on skills and added to the team in a positive way and have not had any negative feedback about how employing me as a contractor has changed the dynamic of the existing team.    &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;If you are an employer thinking about using a contractor for an existing or planned project, feel free to contact me from the About page&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;David&lt;/p&gt;&lt;div class="d_itc_f" style="clear:both;height:11px;"&gt;&lt;script src="/DesktopModules/itcMetaPost/js/mg.js" type="text/javascript"&gt;&lt;/script&gt;&lt;/div&gt;</description>
      <link>http://www.adeptris.com/Home/tabid/38/EntryId/5/Dynamics-NAV-Contracting.aspx</link>
      <author>david.cox@adeptris.com</author>
      <comments>http://www.adeptris.com/Home/tabid/38/EntryId/5/Dynamics-NAV-Contracting.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.adeptris.com/Home/tabid/38/EntryId/5/Dynamics-NAV-Contracting.aspx</guid>
      <pubDate>Tue, 02 Jun 2009 10:44:48 GMT</pubDate>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://www.adeptris.com/DesktopModules/Blog/Trackback.aspx?id=5</trackback:ping>
    </item>
    <item>
      <title>Dynamics NAV - G/L Accounts - Dynamic Fiscal Year with Thirteen Periods</title>
      <description>&lt;script type="text/javascript" src="/DesktopModules/itcMetaPost/js/ca0c21fbdc85f6a1597417732d450607.ashx?hs=1"&gt;&lt;/script&gt;&lt;p&gt;This Tutorial is available to download from the downloads page, there are two versions one for the GB localised version of Dynamics NAV and the other for the worldwide version, in the download you will find the NAV objects and the tutorial in PDF format    &lt;/p&gt;  &lt;h5&gt;Scenario&lt;/h5&gt;  &lt;p&gt;We have a requirement in from the Finance Director at Cronus International Ltd, they have acquired two companies as part of their growth strategy, and they will be moving the accounts information across to their MBS Dynamics NAV® database and the two new companies and all the transactions, will then go through these companies.&lt;/p&gt;  &lt;p&gt;As these companies use different Fiscal year and accounting period start dates, to Cronus International Ltd, our implementation consultant has set these up ready for them in the Accounting Periods table.&lt;/p&gt;  &lt;p&gt;The Finance Director is familiar with the Accounts Schedules but wants a report made from the G/L Accounts table with these options:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Grouping totals by General Business Posting Group &lt;/li&gt;    &lt;li&gt;Must be able to deal with the new Accounting Periods &lt;/li&gt;    &lt;li&gt;Whole system year and the twelve periods printed onto a landscape view &lt;/li&gt;    &lt;li&gt;Accounting year with up to thirteen periods printed onto a landscape view &lt;/li&gt;    &lt;li&gt;Rounding Factors of None, 1, 1000 and 1000000 &lt;/li&gt;    &lt;li&gt;Budget values only &lt;/li&gt;    &lt;li&gt;Amount values only &lt;/li&gt;    &lt;li&gt;Amount and Budget all &lt;/li&gt;    &lt;li&gt;Amount and Budget only where the budget has a value &lt;/li&gt; &lt;/ol&gt;  &lt;h5&gt;Analysis&lt;/h5&gt;  &lt;ol&gt;   &lt;li&gt;Grouping totals by General Business Posting Group, no real problems here the wizard will do this for us. &lt;/li&gt;    &lt;li&gt;Must be able to deal with the new Accounting Periods, I have seen some code to deal with this on the Customer Statistics card form, I will look there. &lt;/li&gt;    &lt;li&gt;Whole system year and the twelve periods printed onto a landscape view, This we can do from the data table &lt;/li&gt;    &lt;li&gt;Whole fiscal year and the thirteen periods printed onto a landscape view, I think I can squeeze in the 16 columns, just a lot of work copying and pasting. &lt;/li&gt;    &lt;li&gt;Rounding Factors of None, 1, 1000 and 1000000, the Accounts Schedules can do this I will look there for the solution. &lt;/li&gt;    &lt;li&gt;Budget values only, option box on the report. &lt;/li&gt;    &lt;li&gt;Amount values only, option box on the report. &lt;/li&gt;    &lt;li&gt;Amount and Budget, option box report &lt;/li&gt;    &lt;li&gt;Amount and Budget only where the budget has a value, flag on the report &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;So we need to look at three things, which fields to use from the G/L Accounts table, how to get and set the date filters and how to do the output rounding.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;There are several flowfields on the G/L Accounts table lets look at some of these and how they work and choose which to use in out report.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;a class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'fe69f2fe'})" href="http://www.adeptris.com/Portals/0/images/%5BProvider%5D/%5BFolderFilePath%5D/WLW/DynamicsNAVGLAccountsDynamicFiscalYearwi_73CD/clip_image001_2.gif"  class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'817030a7'})" &gt;&lt;img title="clip_image001" style="border-right: 0px; border-top: 0px; display: inline; margin-left: 0px; border-left: 0px; margin-right: 0px; border-bottom: 0px" height="155" alt="clip_image001" title="clip_image001" src="/Portals/0/images/%5BProvider%5D/%5BFolderFilePath%5D/WLW/DynamicsNAVGLAccountsDynamicFiscalYearwi_73CD/clip_image001_thumb.gif" width="244" align="left" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;We have three Amount fields and two Budget fields in the image, there are others but we will look at these, as this flowfield structure is repeated throughout the system, in the Inventory, Jobs and Resources modules, so this could be useful to you later on.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;b&gt;Balance:&lt;/b&gt; this value is affected by the applied filters except the date filter, so if I put in a date filter of 01/01/2006..01/31/2006, this field would give the sum total value of &lt;b&gt;&lt;u&gt;all&lt;/u&gt;&lt;/b&gt; the transactions for the G/L Account.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Balance at date:&lt;/b&gt; this value is affected by the applied filters and the maximum Date Filter value, so if I put in a Date Filter of 01/01/2006..01/31/2006, this field would give the sum total value of &lt;b&gt;&lt;u&gt;all&lt;/u&gt;&lt;/b&gt; transactions up to the 01/31/2006.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Net Change:&lt;/b&gt; this value is affected by the applied filters and the maximum Date Filter value, so if I put in a Date Filter of 01/01/2006..01/31/2006, this field would give the sum total value of the &lt;b&gt;&lt;u&gt;selected&lt;/u&gt;&lt;/b&gt; transactions from the 01/01/2006 up to and including the 01/31/2006.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;So we need to use the Net Change and Budgeted Amount fields for our report, we will look at this in the next section.&lt;/p&gt;  &lt;p&gt;How to get and set the accounting periods, I said earlier that there are standard functions to do this so let’s take a look at one of the pieces the code we need to use:&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;CurrentDate := WORKDATE;&lt;/p&gt;  &lt;p&gt;DateFilterCalc.CreateAccountingPeriodFilter(CustDateFilter[1],CustDateName[1],CurrentDate,0); DateFilterCalc.CreateFiscalYearFilter(CustDateFilter[2],CustDateName[2]&lt;/p&gt;  &lt;p&gt;,CurrentDate,0);&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;We have 4 variables&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;CurrentDate, a date variable to hold the base date. &lt;/li&gt;    &lt;li&gt;CustDateFilter an array of text fields &lt;/li&gt;    &lt;li&gt;CustDateName an array of text fields &lt;/li&gt;    &lt;li&gt;DateFilterCalc Codeunit DateFilterCalc &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Set the current date to the workdate&lt;/p&gt;  &lt;p&gt;CurrentDate := WORKDATE;&lt;/p&gt;  &lt;p&gt;Get the FiscalYear for the current date&lt;/p&gt;  &lt;p&gt;DateFilterCalc.CreateFiscalYearFilter(CustDateFilter[2],&lt;/p&gt;  &lt;p&gt;CustDateName[2],CurrentDate,0);&lt;/p&gt;  &lt;p&gt;Get the accounting period for the current date&lt;/p&gt;  &lt;p&gt;DateFilterCalc.CreateAccountingPeriodFilter(CustDateFilter[1],&lt;/p&gt;  &lt;p&gt;CustDateName[1],CurrentDate,0);&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;This is enough for us to work with the accounting Periods&lt;/p&gt;  &lt;p&gt;Now for the Standard Calendar we need a different structure&lt;/p&gt;  &lt;p&gt;We have 2 more variables&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;PeriodFormMgt codeunit PeriodFormManagement &lt;/li&gt;    &lt;li&gt;CalendarSource &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Setting which calendar type to use, 0=Day, 1=Week, 2=Period, 3=Quarter, 4=Year and 5=Accounting Period&lt;/p&gt;  &lt;p&gt;Get the date record for the Calendar Year&lt;/p&gt;  &lt;p&gt;CalendarSource=4&lt;/p&gt;  &lt;p&gt;PeriodFormMgt.FindDate('',Calendar,CalendarSource);&lt;/p&gt;  &lt;p&gt;Get the date record for the Calendar Month&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;CalendarSource=2&lt;/p&gt;  &lt;p&gt;PeriodFormMgt.FindDate('',Calendar,CalendarSource);&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;So we can use these date structures for our report, as the company changes accounting periods or the structure, our report will still work, as Cronus International Ltd, want both views we will just drop on a Use Accounting Period flag on our report.    &lt;br /&gt;All we have to look at now is the rounding, so let’s look at the code in the Account Schedule Management and the function FormatCellAsText&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;FormatCellAsText(VAR ColumnLayout2 : Record "Column Layout";Value : Decimal) : Text[30]&lt;/p&gt;  &lt;p&gt;IF NormalFormatString = '' THEN BEGIN&lt;/p&gt;  &lt;p&gt;   IF NOT GLSetupRead THEN BEGIN&lt;/p&gt;  &lt;p&gt;      GLSetup.GET;&lt;/p&gt;  &lt;p&gt;      GLSetupRead := TRUE;&lt;/p&gt;  &lt;p&gt;   END;&lt;/p&gt;  &lt;p&gt;   NormalFormatString := Text014 + GLSetup."Amount Decimal Places" + Text015;&lt;/p&gt;  &lt;p&gt;END;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;WITH ColumnLayout2 DO&lt;/p&gt;  &lt;p&gt;   IF Value &lt;&gt; 0 THEN&lt;/p&gt;  &lt;p&gt;      CASE "Rounding Factor" OF&lt;/p&gt;  &lt;p&gt;         "Rounding Factor"::None :&lt;/p&gt;  &lt;p&gt;            ValueAsText := FORMAT(Value,0,NormalFormatString);&lt;/p&gt;  &lt;p&gt;         "Rounding Factor"::"1" :&lt;/p&gt;  &lt;p&gt;            ValueAsText := FORMAT(ROUND(Value,1));&lt;/p&gt;  &lt;p&gt;         "Rounding Factor"::"1000" :&lt;/p&gt;  &lt;p&gt;            ValueAsText := FORMAT(ROUND(Value/1000,0.1),0,Text016);&lt;/p&gt;  &lt;p&gt;         "Rounding Factor"::"1000000" :&lt;/p&gt;  &lt;p&gt;            ValueAsText := FORMAT(ROUND(Value/1000000,0.1),0,Text016);&lt;/p&gt;  &lt;p&gt;      END;&lt;/p&gt;  &lt;p&gt;EXIT(ValueAsText);&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;If we look at what happens here, a value gets passed in as a decimal, then based on which rounding factor is selected, passed back as a formatted string, we can see that most of what we need is in this function, we could copy this function and 3 text constants over to our report later, and just modify the code to suit our own requirement, but we will write our own function in this tutorial.&lt;/p&gt;  &lt;p&gt;So we now know what we need to do, where we can find examples of how to do it, we can start by just using the Wizard to give us the fields and the structure of the report.&lt;/p&gt;  &lt;p&gt;As this tutorial is aimed at all levels of developers, I am going to go through the Wizard steps one by step for anyone who is not familiar with using the Wizard.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Step 1 New report dialog choose the G/L account Table from the lookup list&lt;/p&gt;  &lt;p&gt;&lt;a class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'fe69f2fe'})" href="http://www.adeptris.com/Portals/0/images/%5BProvider%5D/%5BFolderFilePath%5D/WLW/DynamicsNAVGLAccountsDynamicFiscalYearwi_73CD/clip_image002_2.gif"  class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'817030a7'})" &gt;&lt;img title="clip_image002" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="156" alt="clip_image002" title="clip_image002" src="/Portals/0/images/%5BProvider%5D/%5BFolderFilePath%5D/WLW/DynamicsNAVGLAccountsDynamicFiscalYearwi_73CD/clip_image002_thumb.gif" width="244" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Step 2 we only need four fields on our new dynamic report these include the two flowfields we looked at earlier, and we will be using in our report Net Change and Budgeted Amount&lt;/p&gt;  &lt;p&gt;&lt;a class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'fe69f2fe'})" href="http://www.adeptris.com/Portals/0/images/%5BProvider%5D/%5BFolderFilePath%5D/WLW/DynamicsNAVGLAccountsDynamicFiscalYearwi_73CD/clip_image003_2.gif"  class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'817030a7'})" &gt;&lt;img title="clip_image003" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="145" alt="clip_image003" title="clip_image003" src="/Portals/0/images/%5BProvider%5D/%5BFolderFilePath%5D/WLW/DynamicsNAVGLAccountsDynamicFiscalYearwi_73CD/clip_image003_thumb.gif" width="244" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Step 3 Choose which key we want to run the report on&lt;/p&gt;  &lt;p&gt;&lt;a class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'fe69f2fe'})" href="http://www.adeptris.com/Portals/0/images/%5BProvider%5D/%5BFolderFilePath%5D/WLW/DynamicsNAVGLAccountsDynamicFiscalYearwi_73CD/clip_image004_2.gif"  class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'817030a7'})" &gt;&lt;img title="clip_image004" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="145" alt="clip_image004" title="clip_image004" src="/Portals/0/images/%5BProvider%5D/%5BFolderFilePath%5D/WLW/DynamicsNAVGLAccountsDynamicFiscalYearwi_73CD/clip_image004_thumb.gif" width="244" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;We want to group our report on the General Business Posting Group so we can total&lt;/p&gt;  &lt;p&gt;&lt;a class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'fe69f2fe'})" href="http://www.adeptris.com/Portals/0/images/%5BProvider%5D/%5BFolderFilePath%5D/WLW/DynamicsNAVGLAccountsDynamicFiscalYearwi_73CD/clip_image005_2.gif"  class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'817030a7'})" &gt;&lt;img title="clip_image005" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="145" alt="clip_image005" title="clip_image005" src="/Portals/0/images/%5BProvider%5D/%5BFolderFilePath%5D/WLW/DynamicsNAVGLAccountsDynamicFiscalYearwi_73CD/clip_image005_thumb.gif" width="244" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;We want totals for both our financial fields&lt;/p&gt;  &lt;p&gt;&lt;a class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'fe69f2fe'})" href="http://www.adeptris.com/Portals/0/images/%5BProvider%5D/%5BFolderFilePath%5D/WLW/DynamicsNAVGLAccountsDynamicFiscalYearwi_73CD/clip_image006_2.gif"  class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'817030a7'})" &gt;&lt;img title="clip_image006" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="145" alt="clip_image006" title="clip_image006" src="/Portals/0/images/%5BProvider%5D/%5BFolderFilePath%5D/WLW/DynamicsNAVGLAccountsDynamicFiscalYearwi_73CD/clip_image006_thumb.gif" width="244" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Accept the default values&lt;/p&gt;  &lt;p&gt;&lt;a class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'fe69f2fe'})" href="http://www.adeptris.com/Portals/0/images/%5BProvider%5D/%5BFolderFilePath%5D/WLW/DynamicsNAVGLAccountsDynamicFiscalYearwi_73CD/clip_image007_2.gif"  class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'817030a7'})" &gt;&lt;img title="clip_image007" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="145" alt="clip_image007" title="clip_image007" src="/Portals/0/images/%5BProvider%5D/%5BFolderFilePath%5D/WLW/DynamicsNAVGLAccountsDynamicFiscalYearwi_73CD/clip_image007_thumb.gif" width="244" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Save the report, we will save the report at each stage, this is a good habit to get into as there is nothing worse that loosing hours of work.&lt;/p&gt;  &lt;p&gt;&lt;a class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'fe69f2fe'})" href="http://www.adeptris.com/Portals/0/images/%5BProvider%5D/%5BFolderFilePath%5D/WLW/DynamicsNAVGLAccountsDynamicFiscalYearwi_73CD/clip_image008_2.gif"  class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'817030a7'})" &gt;&lt;img title="clip_image008" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="103" alt="clip_image008" title="clip_image008" src="/Portals/0/images/%5BProvider%5D/%5BFolderFilePath%5D/WLW/DynamicsNAVGLAccountsDynamicFiscalYearwi_73CD/clip_image008_thumb.gif" width="244" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;At this point we are not interested in the sections, we need to add some variables and code first, so to add our variables, view C/AL Globals and add the following&lt;/p&gt;  &lt;p&gt;&lt;a class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'fe69f2fe'})" href="http://www.adeptris.com/Portals/0/images/%5BProvider%5D/%5BFolderFilePath%5D/WLW/DynamicsNAVGLAccountsDynamicFiscalYearwi_73CD/clip_image009_2.gif"  class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'817030a7'})" &gt;&lt;img title="clip_image009" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="230" alt="clip_image009" title="clip_image009" src="/Portals/0/images/%5BProvider%5D/%5BFolderFilePath%5D/WLW/DynamicsNAVGLAccountsDynamicFiscalYearwi_73CD/clip_image009_thumb.gif" width="244" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;We will get to look at the variables later, but for now we need to add the array and Option values&lt;/p&gt;  &lt;p&gt;Arrays:&lt;/p&gt;  &lt;p&gt;DateFilter = 15&lt;/p&gt;  &lt;p&gt;DateName = 15&lt;/p&gt;  &lt;p&gt;ChangeAmtTxt = 15&lt;/p&gt;  &lt;p&gt;BudgetAmtTxt = 15&lt;/p&gt;  &lt;p&gt;ChangeAmt = 15&lt;/p&gt;  &lt;p&gt;BudgetAmt = 15&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;To put in the array value, select the variable DateFilter then open the properties sheet for this variable Shift+F4, repeat this for the other 5 variables&lt;/p&gt;  &lt;p&gt;&lt;a class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'fe69f2fe'})" href="http://www.adeptris.com/Portals/0/images/%5BProvider%5D/%5BFolderFilePath%5D/WLW/DynamicsNAVGLAccountsDynamicFiscalYearwi_73CD/clip_image010_2.gif"  class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'817030a7'})" &gt;&lt;img title="clip_image010" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="191" alt="clip_image010" title="clip_image010" src="/Portals/0/images/%5BProvider%5D/%5BFolderFilePath%5D/WLW/DynamicsNAVGLAccountsDynamicFiscalYearwi_73CD/clip_image010_thumb.gif" width="244" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Option Strings&lt;/p&gt;  &lt;p&gt;RoundingFactor = None,1,1000,1000000&lt;/p&gt;  &lt;p&gt;WhichValue = Amount,Budget,Both&lt;/p&gt;  &lt;p&gt;To put in the option string value, select the variable RoundingFactor then open the properties sheet for this variable Shift+F4&lt;/p&gt;  &lt;p&gt;&lt;a class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'fe69f2fe'})" href="http://www.adeptris.com/Portals/0/images/%5BProvider%5D/%5BFolderFilePath%5D/WLW/DynamicsNAVGLAccountsDynamicFiscalYearwi_73CD/clip_image011_2.gif"  class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'817030a7'})" &gt;&lt;img title="clip_image011" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="201" alt="clip_image011" title="clip_image011" src="/Portals/0/images/%5BProvider%5D/%5BFolderFilePath%5D/WLW/DynamicsNAVGLAccountsDynamicFiscalYearwi_73CD/clip_image011_thumb.gif" width="244" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Save your Report&lt;/p&gt;  &lt;p&gt;Now we will add two functions, for this one you could copy and change the code, from Account Schedule Management but we will hand code it&lt;/p&gt;  &lt;p&gt;Press F9, Select to the Functions tab&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Type into the name field FormatCellAsText, now press the button Locals &lt;/li&gt;    &lt;li&gt;Select the Parameters tab then add the Name = Value and DataType: Decimal. &lt;/li&gt;    &lt;li&gt;Now select the variables tab and add Name = ValueAsText and DataType = Text with the Size = 30 &lt;/li&gt;    &lt;li&gt;Close the dialog box, and select TextConstants and add the following 3 lines &lt;/li&gt;    &lt;li&gt;Text014 &lt;/li&gt;    &lt;li&gt;Text015 &gt;&lt;standard&gt;&lt;/standard&gt; &lt;/li&gt;    &lt;li&gt;Text016 &lt;standard&gt;&lt;/standard&gt;&lt;/li&gt;    &lt;li&gt;close the dialog box and save the report &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Now we can add our Code&lt;/p&gt;  &lt;p&gt;Press F9 to bring up the code window write the following&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;b&gt;FormatCellAsText(Value : Decimal) : Text[30] Section&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;IF NormalFormatString = '' THEN BEGIN&lt;/p&gt;  &lt;p&gt;   IF NOT GLSetupread THEN BEGIN&lt;/p&gt;  &lt;p&gt;      GLSetup.GET;&lt;/p&gt;  &lt;p&gt;      GLSetupread := TRUE;&lt;/p&gt;  &lt;p&gt;   END;&lt;/p&gt;  &lt;p&gt;   NormalFormatString := Text014 + GLSetup."Amount Decimal Places" + Text015;&lt;/p&gt;  &lt;p&gt;END;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;IF Value &lt;&gt; 0 THEN&lt;/p&gt;  &lt;p&gt;   CASE RoundingFactor OF&lt;/p&gt;  &lt;p&gt;      RoundingFactor::None :&lt;/p&gt;  &lt;p&gt;         ValueAsText := FORMAT(Value,0,NormalFormatString);&lt;/p&gt;  &lt;p&gt;      RoundingFactor::"1" :&lt;/p&gt;  &lt;p&gt;         ValueAsText := FORMAT(ROUND(Value,1));&lt;/p&gt;  &lt;p&gt;      RoundingFactor::"1000" :&lt;/p&gt;  &lt;p&gt;         ValueAsText := FORMAT(ROUND(Value/1000,0.1),0,Text016);&lt;/p&gt;  &lt;p&gt;      RoundingFactor::"1000000" :&lt;/p&gt;  &lt;p&gt;         ValueAsText := FORMAT(ROUND(Value/1000000,0.1),0,Text016);&lt;/p&gt;  &lt;p&gt;   END;&lt;/p&gt;  &lt;p&gt;EXIT(ValueAsText);&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Save the Report&lt;/p&gt;  &lt;p&gt;So what have we got here?&lt;/p&gt;  &lt;p&gt;&lt;b&gt;FormatCellAsText(Value : Decimal) : Text[30] Section&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;Note: ValueAsText is a local variable and is empty each time&lt;/p&gt;  &lt;p&gt;If the NormalFormatString string is empty I.E first call to this function then fill it&lt;/p&gt;  &lt;p&gt;IF NormalFormatString = '' THEN BEGIN&lt;/p&gt;  &lt;p&gt;   If we haven’t already got the G/L setup record then get it&lt;/p&gt;  &lt;p&gt;   IF NOT GLSetupread THEN BEGIN&lt;/p&gt;  &lt;p&gt;      GLSetup.GET;&lt;/p&gt;  &lt;p&gt;      GLSetupread := TRUE;&lt;/p&gt;  &lt;p&gt;   END;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;   In the UK the resulting string will be&lt;/p&gt;  &lt;p&gt;   NormalFormatString := Text014 + GLSetup."Amount Decimal Places"&lt;/p&gt;  &lt;p&gt;   + Text015;&lt;/p&gt;  &lt;p&gt;END;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;If we have a financial value passed in, format it to a string and return the value&lt;/p&gt;  &lt;p&gt;Text016 will Round to 1 decimal place E.G = 1200 with factor 1000 will return 1.2&lt;/p&gt;  &lt;p&gt;IF Value &lt;&gt; 0 THEN&lt;/p&gt;  &lt;p&gt;   CASE RoundingFactor OF&lt;/p&gt;  &lt;p&gt;      RoundingFactor::None :&lt;/p&gt;  &lt;p&gt;         ValueAsText := FORMAT(Value,0,NormalFormatString);&lt;/p&gt;  &lt;p&gt;      RoundingFactor::"1" :&lt;/p&gt;  &lt;p&gt;         ValueAsText := FORMAT(ROUND(Value,1));&lt;/p&gt;  &lt;p&gt;      RoundingFactor::"1000" :&lt;/p&gt;  &lt;p&gt;         ValueAsText := FORMAT(ROUND(Value/1000,0.1),0,Text016);&lt;/p&gt;  &lt;p&gt;      RoundingFactor::"1000000" :&lt;/p&gt;  &lt;p&gt;         ValueAsText := FORMAT(ROUND(Value/1000000,0.1),0,Text016);&lt;/p&gt;  &lt;p&gt;   END;&lt;/p&gt;  &lt;p&gt;Return the formatted string&lt;/p&gt;  &lt;p&gt;EXIT(ValueAsText);&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Press F9, Select to the Functions tab&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Type into the name field BuildDateFilter, now press the button Locals &lt;/li&gt;    &lt;li&gt;Select the Parameters tab then add the Name = Calendar, DataType: = Record and SubType = Date. &lt;/li&gt;    &lt;li&gt;Select the tab return value then enter return type = text and length = 50 &lt;/li&gt;    &lt;li&gt;close the dialog box and save the report &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Now we can add our Code&lt;/p&gt;  &lt;p&gt;Press F9 to bring up the code window write the following&lt;/p&gt;  &lt;p&gt;&lt;b&gt;BuildDateFilter(Calendar : Record Date) : Text[50]&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;WITH Calendar DO BEGIN&lt;/p&gt;  &lt;p&gt;   IF "Period End" = 0D THEN&lt;/p&gt;  &lt;p&gt;      "Period End" := 31129999D;&lt;/p&gt;  &lt;p&gt;   "Period End" := NORMALDATE("Period End");&lt;/p&gt;  &lt;p&gt;   EXIT(FORMAT("Period Start") + '..' + FORMAT("Period End"));&lt;/p&gt;  &lt;p&gt;END;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;What does the function do, when you pass in the Calendar record?&lt;/p&gt;  &lt;p&gt;&lt;b&gt;BuildDateFilter(Calendar : Record Date) : Text[50]&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;WITH Calendar DO BEGIN&lt;/p&gt;  &lt;p&gt;   If there is no end date set the date to 12/31/9999&lt;/p&gt;  &lt;p&gt;   IF "Period End" = 0D THEN&lt;/p&gt;  &lt;p&gt;      "Period End" := 31129999D;&lt;/p&gt;  &lt;p&gt;   Set the Period end date from a closed date to a normal date&lt;/p&gt;  &lt;p&gt;   "Period End" := NORMALDATE("Period End");&lt;/p&gt;  &lt;p&gt;   Create a filter string IE: 01/01/2006..01/31/2006 and return the value&lt;/p&gt;  &lt;p&gt;   EXIT(FORMAT("Period Start") + '..' + FORMAT("Period End"));&lt;/p&gt;  &lt;p&gt;END; ends the with statement&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Now we will add the code, to the report, select a blank data item line and press F9 to view the C/AL code&lt;/p&gt;  &lt;p&gt;&lt;a class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'fe69f2fe'})" href="http://www.adeptris.com/Portals/0/images/%5BProvider%5D/%5BFolderFilePath%5D/WLW/DynamicsNAVGLAccountsDynamicFiscalYearwi_73CD/clip_image012_2.gif"  class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'817030a7'})" &gt;&lt;img title="clip_image012" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="162" alt="clip_image012" title="clip_image012" src="/Portals/0/images/%5BProvider%5D/%5BFolderFilePath%5D/WLW/DynamicsNAVGLAccountsDynamicFiscalYearwi_73CD/clip_image012_thumb.gif" width="244" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Now add the following code&lt;/p&gt;  &lt;p&gt;IF "G/L Account".GETFILTER("Date Filter") &lt;&gt; '' THEN&lt;/p&gt;  &lt;p&gt;   CurrDate:= "G/L Account".GETRANGEMAX("Date Filter")&lt;/p&gt;  &lt;p&gt;ELSE&lt;/p&gt;  &lt;p&gt;   CurrDate := WORKDATE;&lt;/p&gt;  &lt;p&gt;GLFilters := "G/L Account".GETFILTERS;&lt;/p&gt;  &lt;p&gt;IF UseAccPeriods THEN BEGIN&lt;/p&gt;  &lt;p&gt;   DateFilterCalc.CreateFiscalYearFilter(DateFilter[14],DateName[14],CurrDate,0);&lt;/p&gt;  &lt;p&gt;   EVALUATE(Calendar."Period Start",COPYSTR(DateFilter[14],1,8));&lt;/p&gt;  &lt;p&gt;   EVALUATE(CurrDate,COPYSTR(DateFilter[14],11));&lt;/p&gt;  &lt;p&gt;   CalendarSource := 5;&lt;/p&gt;  &lt;p&gt;END ELSE BEGIN&lt;/p&gt;  &lt;p&gt;   Calendar."Period Start" := CurrDate;&lt;/p&gt;  &lt;p&gt;   CalendarSource := 4;&lt;/p&gt;  &lt;p&gt;   PeriodFormMgt.FindDate('',Calendar,CalendarSource);&lt;/p&gt;  &lt;p&gt;   DateFilter[14] := BuildDateFilter(Calendar);&lt;/p&gt;  &lt;p&gt;   DateName[14] := Calendar."Period Name";&lt;/p&gt;  &lt;p&gt;   CurrDate := NORMALDATE(Calendar."Period End");&lt;/p&gt;  &lt;p&gt;   CalendarSource := 2;&lt;/p&gt;  &lt;p&gt;END;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;PeriodFormMgt.FindDate('',Calendar,CalendarSource);&lt;/p&gt;  &lt;p&gt;DateName[1] := Calendar."Period Name";&lt;/p&gt;  &lt;p&gt;DateFilter[1] := BuildDateFilter(Calendar);&lt;/p&gt;  &lt;p&gt;MaxColumnNo := 1;&lt;/p&gt;  &lt;p&gt;FOR i := 2 TO 13 DO BEGIN&lt;/p&gt;  &lt;p&gt;   IF PeriodFormMgt.NextDate(1,Calendar,CalendarSource) &lt;&gt; 0 THEN&lt;/p&gt;  &lt;p&gt;      IF NORMALDATE(Calendar."Period End") &lt;= CurrDate THEN BEGIN&lt;/p&gt;  &lt;p&gt;         MaxColumnNo := MaxColumnNo + 1;&lt;/p&gt;  &lt;p&gt;         DateName[i] := Calendar."Period Name";&lt;/p&gt;  &lt;p&gt;         DateFilter[i] := BuildDateFilter(Calendar);&lt;/p&gt;  &lt;p&gt;      END;&lt;/p&gt;  &lt;p&gt;END;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;What are we doing here?&lt;/p&gt;  &lt;p&gt;Make sure we have a date to work with if a filter was input use that else use workdate&lt;/p&gt;  &lt;p&gt;IF "G/L Account".GETFILTER("Date Filter") &lt;&gt; '' THEN&lt;/p&gt;  &lt;p&gt;   CurrDate:= "G/L Account".GETRANGEMAX("Date Filter")&lt;/p&gt;  &lt;p&gt;ELSE&lt;/p&gt;  &lt;p&gt;   CurrDate := WORKDATE;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Copy all the filters the user may have entered&lt;/p&gt;  &lt;p&gt;GLFilters := "G/L Account".GETFILTERS;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;If the user elected to use accounting periods then we action this code&lt;/p&gt;  &lt;p&gt;IF UseAccPeriods THEN BEGIN&lt;/p&gt;  &lt;p&gt;   Use the function to return our last column filter and name&lt;/p&gt;  &lt;p&gt;   DateFilterCalc.CreateFiscalYearFilter(DateFilter[14],DateName[14],CurrDate,0);&lt;/p&gt;  &lt;p&gt;  &lt;/p&gt;  &lt;p&gt;   We now have a date filter to cover the fiscal year IE 01/01/06..12/31/06&lt;/p&gt;  &lt;p&gt;   Now we chop the date filter and cast the values into 2 date variables&lt;/p&gt;  &lt;p&gt;   Period Start 1 to 8 = 01/01/06 and CurrDate from string position 11 = 12/31/06&lt;/p&gt;  &lt;p&gt;   EVALUATE(Calendar."Period Start",COPYSTR(DateFilter[14],1,8));&lt;/p&gt;  &lt;p&gt;   EVALUATE(CurrDate,COPYSTR(DateFilter[14],11));&lt;/p&gt;  &lt;p&gt;  &lt;/p&gt;  &lt;p&gt;   Set the calendar Source to Accounting Period&lt;/p&gt;  &lt;p&gt;   CalendarSource := 5;&lt;/p&gt;  &lt;p&gt;END ELSE BEGIN&lt;/p&gt;  &lt;p&gt;   This code is run for the system year&lt;/p&gt;  &lt;p&gt;   Set the Period start with the CurrDate&lt;/p&gt;  &lt;p&gt;   Calendar."Period Start" := CurrDate;&lt;/p&gt;  &lt;p&gt;   Set the Calendar Source to Year&lt;/p&gt;  &lt;p&gt;   CalendarSource := 4;&lt;/p&gt;  &lt;p&gt;   Find the relevant year&lt;/p&gt;  &lt;p&gt;   PeriodFormMgt.FindDate('',Calendar,CalendarSource);&lt;/p&gt;  &lt;p&gt;   Use our function to make our Date filter&lt;/p&gt;  &lt;p&gt;   DateFilter[14] := BuildDateFilter(Calendar);&lt;/p&gt;  &lt;p&gt;   Return the period name IE 2006&lt;/p&gt;  &lt;p&gt;   DateName[14] := Calendar."Period Name";&lt;/p&gt;  &lt;p&gt;   Set this to the last day of the year so we can use it later&lt;/p&gt;  &lt;p&gt;   CurrDate := NORMALDATE(Calendar."Period End");&lt;/p&gt;  &lt;p&gt;   Set our source to Month&lt;/p&gt;  &lt;p&gt;   CalendarSource := 2;&lt;/p&gt;  &lt;p&gt;END;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Now we have a calendar source of Month or Accounting period based on the Use Accounting Periods flag, find the first period within the Year&lt;/p&gt;  &lt;p&gt;PeriodFormMgt.FindDate('',Calendar,CalendarSource);&lt;/p&gt;  &lt;p&gt;DateName[1] := Calendar."Period Name";&lt;/p&gt;  &lt;p&gt;DateFilter[1] := BuildDateFilter(Calendar);&lt;/p&gt;  &lt;p&gt;Now we loop and fill in our Date filter and date name for the other periods&lt;/p&gt;  &lt;p&gt;MaxColumnNo := 1;&lt;/p&gt;  &lt;p&gt;FOR i := 2 TO 13 DO BEGIN&lt;/p&gt;  &lt;p&gt;   If a record is returned then action the code&lt;/p&gt;  &lt;p&gt;   IF PeriodFormMgt.NextDate(1,Calendar,CalendarSource) &lt;&gt; 0 THEN&lt;/p&gt;  &lt;p&gt;      Check to see if the period end date is in range&lt;/p&gt;  &lt;p&gt;      IF NORMALDATE(Calendar."Period End") &lt;= CurrDate THEN BEGIN&lt;/p&gt;  &lt;p&gt;         MaxColumnNo := MaxColumnNo + 1;&lt;/p&gt;  &lt;p&gt;         DateName[i] := Calendar."Period Name";&lt;/p&gt;  &lt;p&gt;         DateFilter[i] := BuildDateFilter(Calendar);&lt;/p&gt;  &lt;p&gt;      END;&lt;/p&gt;  &lt;p&gt;END;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Next we will add our code to the “G/L Account” in dataitem view select the line and press F9 to view the C/al code&lt;/p&gt;  &lt;p&gt;Now add this code&lt;/p&gt;  &lt;p&gt;&lt;b&gt;G/L Account - OnPreDataItem() Section&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;LastFieldNo := FIELDNO("Gen. Bus. Posting Group");&lt;/p&gt;  &lt;p&gt;SETRANGE("Date Filter");&lt;/p&gt;  &lt;p&gt;CurrReport.CREATETOTALS(ChangeAmt,BudgetAmt);&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;b&gt;G/L Account - OnAfterGetRecord() Section&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;CLEAR(ChangeAmt);&lt;/p&gt;  &lt;p&gt;CLEAR(BudgetAmt);&lt;/p&gt;  &lt;p&gt;HasValue := FALSE;&lt;/p&gt;  &lt;p&gt;FOR i := 1 TO MaxColumnNo DO BEGIN&lt;/p&gt;  &lt;p&gt;   SETRANGE("Date Filter");&lt;/p&gt;  &lt;p&gt;   SETFILTER("Date Filter",DateFilter[i]);&lt;/p&gt;  &lt;p&gt;   CALCFIELDS("Net Change","Budgeted Amount");&lt;/p&gt;  &lt;p&gt;   ChangeAmt[i]:= "Net Change";&lt;/p&gt;  &lt;p&gt;   BudgetAmt[i]:= "Budgeted Amount";&lt;/p&gt;  &lt;p&gt;   IF NOT HasValue AND NOT ShowOnlyIfBudget THEN BEGIN&lt;/p&gt;  &lt;p&gt;      IF WhichValue IN[WhichValue::Amount,WhichValue::Both] THEN&lt;/p&gt;  &lt;p&gt;         HasValue:= ChangeAmt[i] &lt;&gt; 0;&lt;/p&gt;  &lt;p&gt;   END;&lt;/p&gt;  &lt;p&gt;   IF NOT HasValue THEN BEGIN&lt;/p&gt;  &lt;p&gt;      IF WhichValue IN[WhichValue::Budget,WhichValue::Both] THEN&lt;/p&gt;  &lt;p&gt;          HasValue:= BudgetAmt[i] &lt;&gt; 0;&lt;/p&gt;  &lt;p&gt;   END;&lt;/p&gt;  &lt;p&gt;END;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;IF NOT HasValue THEN&lt;/p&gt;  &lt;p&gt;   CurrReport.SKIP;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;SETRANGE("Date Filter");&lt;/p&gt;  &lt;p&gt;SETFILTER("Date Filter",DateFilter[14]);&lt;/p&gt;  &lt;p&gt;CALCFIELDS("Net Change","Budgeted Amount");&lt;/p&gt;  &lt;p&gt;ChangeAmt[14]:= "Net Change";&lt;/p&gt;  &lt;p&gt;BudgetAmt[14]:= "Budgeted Amount";&lt;/p&gt;  &lt;p&gt;FOR i := 1 TO 14 DO BEGIN&lt;/p&gt;  &lt;p&gt;   IF ChangeAmt[i] &lt;&gt; 0 THEN&lt;/p&gt;  &lt;p&gt;      ChangeAmtTxt[i] := FormatCellAsText(ChangeAmt[i]);&lt;/p&gt;  &lt;p&gt;   IF BudgetAmt[i] &lt;&gt; 0 THEN&lt;/p&gt;  &lt;p&gt;      BudgetAmtTxt[i] := FormatCellAsText(BudgetAmt[i]);&lt;/p&gt;  &lt;p&gt;END;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;What’s it all doing?&lt;/p&gt;  &lt;p&gt;&lt;b&gt;G/L Account - OnPreDataItem() Section&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;Navision’s wizard wrote this line&lt;/p&gt;  &lt;p&gt;LastFieldNo := FIELDNO("Gen. Bus. Posting Group");&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Clear the date filter&lt;/p&gt;  &lt;p&gt;SETRANGE("Date Filter");&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Tell Navision we want group totals for our financial fields&lt;/p&gt;  &lt;p&gt;CurrReport.CREATETOTALS(ChangeAmt,BudgetAmt);&lt;/p&gt;  &lt;p&gt;&lt;b&gt;G/L Account - OnAfterGetRecord() Section&lt;/b&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Clear our variables&lt;/p&gt;  &lt;p&gt;CLEAR(ChangeAmt);&lt;/p&gt;  &lt;p&gt;CLEAR(BudgetAmt);&lt;/p&gt;  &lt;p&gt;HasValue := FALSE;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Fill our Financial Array with the filtered values&lt;/p&gt;  &lt;p&gt;FOR i := 1 TO MaxColumnNo DO BEGIN&lt;/p&gt;  &lt;p&gt;   SETRANGE("Date Filter");&lt;/p&gt;  &lt;p&gt;   SETFILTER("Date Filter",DateFilter[i]);&lt;/p&gt;  &lt;p&gt;   CALCFIELDS("Net Change","Budgeted Amount");&lt;/p&gt;  &lt;p&gt;   ChangeAmt[i]:= "Net Change";&lt;/p&gt;  &lt;p&gt;   BudgetAmt[i]:= "Budgeted Amount";&lt;/p&gt;  &lt;p&gt;  &lt;/p&gt;  &lt;p&gt;   Now we want to set our flag based on our selections of Amount or Both&lt;/p&gt;  &lt;p&gt;   IF NOT HasValue AND NOT ShowOnlyIfBudget THEN BEGIN&lt;/p&gt;  &lt;p&gt;      IF WhichValue IN[WhichValue::Amount,WhichValue::Both] THEN&lt;/p&gt;  &lt;p&gt;          HasValue:= ChangeAmt[i] &lt;&gt; 0;&lt;/p&gt;  &lt;p&gt;   END;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;   Now we want to set our flag based on our selections of Budget or Both&lt;/p&gt;  &lt;p&gt;   IF NOT HasValue THEN BEGIN&lt;/p&gt;  &lt;p&gt;      IF WhichValue IN[WhichValue::Budget,WhichValue::Both] THEN&lt;/p&gt;  &lt;p&gt;         HasValue:= BudgetAmt[i] &lt;&gt; 0;&lt;/p&gt;  &lt;p&gt;      END;&lt;/p&gt;  &lt;p&gt;END;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;If our array variable is empty move on to the next record  &lt;/p&gt;  &lt;p&gt;IF NOT HasValue THEN&lt;/p&gt;  &lt;p&gt;   CurrReport.SKIP;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Add our fiscal year values&lt;/p&gt;  &lt;p&gt;SETRANGE("Date Filter");&lt;/p&gt;  &lt;p&gt;SETFILTER("Date Filter",DateFilter[14]);&lt;/p&gt;  &lt;p&gt;CALCFIELDS("Net Change","Budgeted Amount");&lt;/p&gt;  &lt;p&gt;ChangeAmt[14]:= "Net Change";&lt;/p&gt;  &lt;p&gt;BudgetAmt[14]:= "Budgeted Amount";&lt;/p&gt;  &lt;p&gt;  &lt;/p&gt;  &lt;p&gt;Convert our Values to Text&lt;/p&gt;  &lt;p&gt;FOR i := 1 TO 14 DO BEGIN&lt;/p&gt;  &lt;p&gt;   IF ChangeAmt[i] &lt;&gt; 0 THEN&lt;/p&gt;  &lt;p&gt;      ChangeAmtTxt[i] := FormatCellAsText(ChangeAmt[i]);&lt;/p&gt;  &lt;p&gt;   IF BudgetAmt[i] &lt;&gt; 0 THEN&lt;/p&gt;  &lt;p&gt;      BudgetAmtTxt[i] := FormatCellAsText(BudgetAmt[i]);&lt;/p&gt;  &lt;p&gt;END;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;So now we can look at our wizard sections.&lt;/p&gt;  &lt;p&gt;&lt;a class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'fe69f2fe'})" href="http://www.adeptris.com/Portals/0/images/%5BProvider%5D/%5BFolderFilePath%5D/WLW/DynamicsNAVGLAccountsDynamicFiscalYearwi_73CD/clip_image014_2.jpg"  class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'817030a7'})" &gt;&lt;img title="clip_image014" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="147" alt="clip_image014" title="clip_image014" src="/Portals/0/images/%5BProvider%5D/%5BFolderFilePath%5D/WLW/DynamicsNAVGLAccountsDynamicFiscalYearwi_73CD/clip_image014_thumb.jpg" width="244" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Delete and change the section width to 262 and delete the following sections&lt;/p&gt;  &lt;p&gt;G/L Account.GroupHeader (3)&lt;/p&gt;  &lt;p&gt;G/L Account.Groupheader (5)&lt;/p&gt;  &lt;p&gt;G/L Account.GroupFooter(7)&lt;/p&gt;  &lt;p&gt;&lt;a class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'fe69f2fe'})" href="http://www.adeptris.com/Portals/0/images/%5BProvider%5D/%5BFolderFilePath%5D/WLW/DynamicsNAVGLAccountsDynamicFiscalYearwi_73CD/clip_image016_2.jpg"  class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'817030a7'})" &gt;&lt;img title="clip_image016" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="82" alt="clip_image016" title="clip_image016" src="/Portals/0/images/%5BProvider%5D/%5BFolderFilePath%5D/WLW/DynamicsNAVGLAccountsDynamicFiscalYearwi_73CD/clip_image016_thumb.jpg" width="244" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Now we will set some properties for our text boxes&lt;/p&gt;  &lt;p&gt;&lt;a class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'fe69f2fe'})" href="http://www.adeptris.com/Portals/0/images/%5BProvider%5D/%5BFolderFilePath%5D/WLW/DynamicsNAVGLAccountsDynamicFiscalYearwi_73CD/clip_image017_2.gif"  class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'817030a7'})" &gt;&lt;img title="clip_image017" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="244" alt="clip_image017" title="clip_image017" src="/Portals/0/images/%5BProvider%5D/%5BFolderFilePath%5D/WLW/DynamicsNAVGLAccountsDynamicFiscalYearwi_73CD/clip_image017_thumb.gif" width="219" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;G/L Account, Body (4) Field “Net Change” SourceExpr = ChangeAmtTxt[1]&lt;/p&gt;  &lt;p&gt;G/L Account, Body (4) Field “Net Change” Width = 1350&lt;/p&gt;  &lt;p&gt;G/L Account, Body (4) Field “Budgeted Amount” SourceExpr = BudgetAmtTxt[1]&lt;/p&gt;  &lt;p&gt;G/L Account, Body (4) Field “Budgeted Amount” Width = 1350&lt;/p&gt;  &lt;p&gt;G/L Account, GroupFooter (5) Field “Net Change” SourceExpr = ChangeAmtTxt[1]&lt;/p&gt;  &lt;p&gt;G/L Account, GroupFooter (5) Field “Net Change” Width = 1350&lt;/p&gt;  &lt;p&gt;G/L Account, GroupFooter (5) Field “Net Change” FontBold = Yes&lt;/p&gt;  &lt;p&gt;G/L Account, GroupFooter (5) Field “Budgeted Amount” SourceExpr = BudgetAmtTxt[1]&lt;/p&gt;  &lt;p&gt;G/L Account, GroupFooter (5) Field “Budgeted Amount” Width = 1350&lt;/p&gt;  &lt;p&gt;G/L Account, GroupFooter (5) Field “Budgeted Amount” FontBold = Yes&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Next we need to add a field for the Dynamic Headings&lt;/p&gt;  &lt;p&gt;View tool box and drop a text box into the G/L Account header 2 Section&lt;/p&gt;  &lt;p&gt;Delete the old labels Net Change and Budgeted amount&lt;/p&gt;  &lt;p&gt;&lt;a class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'fe69f2fe'})" href="http://www.adeptris.com/Portals/0/images/%5BProvider%5D/%5BFolderFilePath%5D/WLW/DynamicsNAVGLAccountsDynamicFiscalYearwi_73CD/clip_image018_2.gif"  class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'817030a7'})" &gt;&lt;img title="clip_image018" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="121" alt="clip_image018" title="clip_image018" src="/Portals/0/images/%5BProvider%5D/%5BFolderFilePath%5D/WLW/DynamicsNAVGLAccountsDynamicFiscalYearwi_73CD/clip_image018_thumb.gif" width="244" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Properties&lt;/p&gt;  &lt;p&gt;SourceExpr = DateName[1]&lt;/p&gt;  &lt;p&gt;Width = 1350&lt;/p&gt;  &lt;p&gt;FontBold = Yes&lt;/p&gt;  &lt;p&gt;VertAlign = Bottom&lt;/p&gt;  &lt;p&gt;Now for the boring bit we have to copy each field and paste it back in 13 times, then go to properties and change the index value to match the Column&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;As in this example DateName[3] being the third column index&lt;/p&gt;  &lt;p&gt;&lt;a class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'fe69f2fe'})" href="http://www.adeptris.com/Portals/0/images/%5BProvider%5D/%5BFolderFilePath%5D/WLW/DynamicsNAVGLAccountsDynamicFiscalYearwi_73CD/clip_image020_2.jpg"  class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'817030a7'})" &gt;&lt;img title="clip_image020" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="106" alt="clip_image020" title="clip_image020" src="/Portals/0/images/%5BProvider%5D/%5BFolderFilePath%5D/WLW/DynamicsNAVGLAccountsDynamicFiscalYearwi_73CD/clip_image020_thumb.jpg" width="244" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;So we now have 14 column headings, save the report&lt;/p&gt;  &lt;p&gt;Select the G/L Account, Body (5) section bar press F3 and you should get the a dialog box like this, make sure that the&lt;/p&gt;  &lt;p&gt;&lt;a class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'fe69f2fe'})" href="http://www.adeptris.com/Portals/0/images/%5BProvider%5D/%5BFolderFilePath%5D/WLW/DynamicsNAVGLAccountsDynamicFiscalYearwi_73CD/clip_image021_2.gif"  class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'817030a7'})" &gt;&lt;img title="clip_image021" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="242" alt="clip_image021" title="clip_image021" src="/Portals/0/images/%5BProvider%5D/%5BFolderFilePath%5D/WLW/DynamicsNAVGLAccountsDynamicFiscalYearwi_73CD/clip_image021_thumb.gif" width="244" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;The Options selected should be Body and After Current Section, press ok and repeat these steps, so we have 3 body sections on our report.&lt;/p&gt;  &lt;p&gt;Now do the same to our first GroupFooter section adding a new GroupFooter, after current Section, we should now have 3 footer sections&lt;/p&gt;  &lt;p&gt;Now do the same to our first Header section adding a new Header, after current Section, we should now have 2 Header sections&lt;/p&gt;  &lt;p&gt;Select the body (5) section and BudgetAmtTxt[1] field, and drop it in the 1&lt;sup&gt;st&lt;/sup&gt; new Body (6) section, now do the same with the GroupFooter BudgetAmtTxt[1] field, move it into the second group footer (9) section.&lt;/p&gt;  &lt;p&gt;Now for the boring bit we have to copy each field and paste it back in 13 times, then go to properties and change the index value to match the Columns, in all for sections.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;b&gt;Save after changing each row, if you click off the sections, you may loose work&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;So at the end you will have:&lt;/p&gt;  &lt;p&gt;First Body (5) Section fields = ChangeAmtTxt[1] to ChangeAmtTxt[14]&lt;/p&gt;  &lt;p&gt;Second Body (6) Section fields = BudgetAmtTxt[1] to BudgetAmtTxt[14]&lt;/p&gt;  &lt;p&gt;First Group Footer (8) Section fields = ChangeAmtTxt[1] to ChangeAmtTxt[14]&lt;/p&gt;  &lt;p&gt;Second Group Footer (9) Section fields = BudgetAmtTxt[1] to BudgetAmtTxt[14]&lt;/p&gt;  &lt;p&gt;Rows 3 of the Body and 3 of the Group Footer need to be filled in now expand the row and select copy and and paste in the rows from above, so section body section 3 has a row for Amount and a row for budget.&lt;/p&gt;  &lt;p&gt;To do this select body (5) then Ctrl+A this selects all the objects in that section, Ctrl+C to copy, select Body (7) and Ctrl+V to paste then in, do the same with the budget section, and place then in section 7 below the amount fields&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Your report sections should now look like this, if not adjust them to match, we will be changing the labels next&lt;/p&gt;  &lt;p&gt;&lt;a class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'fe69f2fe'})" href="http://www.adeptris.com/Portals/0/images/%5BProvider%5D/%5BFolderFilePath%5D/WLW/DynamicsNAVGLAccountsDynamicFiscalYearwi_73CD/clip_image023_2.jpg"  class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'817030a7'})" &gt;&lt;img title="clip_image023" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="183" alt="clip_image023" title="clip_image023" src="/Portals/0/images/%5BProvider%5D/%5BFolderFilePath%5D/WLW/DynamicsNAVGLAccountsDynamicFiscalYearwi_73CD/clip_image023_thumb.jpg" width="244" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Now add some text boxes to the header 2 section&lt;/p&gt;  &lt;p&gt;&lt;a class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'fe69f2fe'})" href="http://www.adeptris.com/Portals/0/images/%5BProvider%5D/%5BFolderFilePath%5D/WLW/DynamicsNAVGLAccountsDynamicFiscalYearwi_73CD/clip_image024_2.gif"  class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'817030a7'})" &gt;&lt;img title="clip_image024" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="121" alt="clip_image024" title="clip_image024" src="/Portals/0/images/%5BProvider%5D/%5BFolderFilePath%5D/WLW/DynamicsNAVGLAccountsDynamicFiscalYearwi_73CD/clip_image024_thumb.gif" width="244" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;As you can see the SourceExpr value for all the boxes are visible, and I will let you add them from viewing the image above, you do not put in the =&lt; or &gt;, so the first box you just type in ‘For the Fiscal year: ‘+DateFilter[14], save the report&lt;/p&gt;  &lt;p&gt;Now we have to give our Customer some options View and Request form&lt;/p&gt;  &lt;p&gt;Add the controls as in the image and set the sourceexpr as in the image.&lt;/p&gt;  &lt;p&gt;The first check box SourceExp value is set to our flag ShowOnlyIfBudget.&lt;/p&gt;  &lt;p&gt;The second check box SourceExp value is set to our flag UseAccPeriods.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;a class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'fe69f2fe'})" href="http://www.adeptris.com/Portals/0/images/%5BProvider%5D/%5BFolderFilePath%5D/WLW/DynamicsNAVGLAccountsDynamicFiscalYearwi_73CD/clip_image025_2.gif"  class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'817030a7'})" &gt;&lt;img title="clip_image025" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="133" alt="clip_image025" title="clip_image025" src="/Portals/0/images/%5BProvider%5D/%5BFolderFilePath%5D/WLW/DynamicsNAVGLAccountsDynamicFiscalYearwi_73CD/clip_image025_thumb.gif" width="244" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Save the report nearly there just a bit more coding for you to do, this is to switch our sections on and off, look at the images for each section and add the code.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Start with Header (2) select the section and view code F9, show only on Page 1&lt;/p&gt;  &lt;p&gt;&lt;a class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'fe69f2fe'})" href="http://www.adeptris.com/Portals/0/images/%5BProvider%5D/%5BFolderFilePath%5D/WLW/DynamicsNAVGLAccountsDynamicFiscalYearwi_73CD/clip_image027_2.jpg"  class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'817030a7'})" &gt;&lt;img title="clip_image027" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="80" alt="clip_image027" title="clip_image027" src="/Portals/0/images/%5BProvider%5D/%5BFolderFilePath%5D/WLW/DynamicsNAVGLAccountsDynamicFiscalYearwi_73CD/clip_image027_thumb.jpg" width="244" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Body 5 only show if which value Amount was selected on the request form&lt;/p&gt;  &lt;p&gt;&lt;a class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'fe69f2fe'})" href="http://www.adeptris.com/Portals/0/images/%5BProvider%5D/%5BFolderFilePath%5D/WLW/DynamicsNAVGLAccountsDynamicFiscalYearwi_73CD/clip_image029_2.jpg"  class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'817030a7'})" &gt;&lt;img title="clip_image029" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="44" alt="clip_image029" title="clip_image029" src="/Portals/0/images/%5BProvider%5D/%5BFolderFilePath%5D/WLW/DynamicsNAVGLAccountsDynamicFiscalYearwi_73CD/clip_image029_thumb.jpg" width="244" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Body 6 only show if which value Budget was selected on the request form&lt;/p&gt;  &lt;p&gt;&lt;a class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'fe69f2fe'})" href="http://www.adeptris.com/Portals/0/images/%5BProvider%5D/%5BFolderFilePath%5D/WLW/DynamicsNAVGLAccountsDynamicFiscalYearwi_73CD/clip_image031_2.jpg"  class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'817030a7'})" &gt;&lt;img title="clip_image031" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="44" alt="clip_image031" title="clip_image031" src="/Portals/0/images/%5BProvider%5D/%5BFolderFilePath%5D/WLW/DynamicsNAVGLAccountsDynamicFiscalYearwi_73CD/clip_image031_thumb.jpg" width="244" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Body 7 only show if which value Both was selected on the request form&lt;/p&gt;  &lt;p&gt;&lt;a class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'fe69f2fe'})" href="http://www.adeptris.com/Portals/0/images/%5BProvider%5D/%5BFolderFilePath%5D/WLW/DynamicsNAVGLAccountsDynamicFiscalYearwi_73CD/clip_image033_2.jpg"  class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'817030a7'})" &gt;&lt;img title="clip_image033" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="44" alt="clip_image033" title="clip_image033" src="/Portals/0/images/%5BProvider%5D/%5BFolderFilePath%5D/WLW/DynamicsNAVGLAccountsDynamicFiscalYearwi_73CD/clip_image033_thumb.jpg" width="244" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Group Footer 8, shows if Amount was selected, in the group footer we need to load the group values into the ChangeAmtTxt variables, only if they have a value&lt;/p&gt;  &lt;p&gt;&lt;a class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'fe69f2fe'})" href="http://www.adeptris.com/Portals/0/images/%5BProvider%5D/%5BFolderFilePath%5D/WLW/DynamicsNAVGLAccountsDynamicFiscalYearwi_73CD/clip_image035_2.jpg"  class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'817030a7'})" &gt;&lt;img title="clip_image035" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="95" alt="clip_image035" title="clip_image035" src="/Portals/0/images/%5BProvider%5D/%5BFolderFilePath%5D/WLW/DynamicsNAVGLAccountsDynamicFiscalYearwi_73CD/clip_image035_thumb.jpg" width="244" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Group Footer 9, shows only if the budget was selected, in the group footer we need to load the group values into the BudgetAmtTxt variables, only if they have a value&lt;/p&gt;  &lt;p&gt;&lt;a class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'fe69f2fe'})" href="http://www.adeptris.com/Portals/0/images/%5BProvider%5D/%5BFolderFilePath%5D/WLW/DynamicsNAVGLAccountsDynamicFiscalYearwi_73CD/clip_image037_2.jpg"  class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'817030a7'})" &gt;&lt;img title="clip_image037" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="95" alt="clip_image037" title="clip_image037" src="/Portals/0/images/%5BProvider%5D/%5BFolderFilePath%5D/WLW/DynamicsNAVGLAccountsDynamicFiscalYearwi_73CD/clip_image037_thumb.jpg" width="244" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Group Footer 10, shows only if the both was selected, in the group footer we need to load the group values into the ChangeAmtTxt and the BudgetAmtTxt variables, only if they have a value&lt;/p&gt;  &lt;p&gt;&lt;a class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'fe69f2fe'})" href="http://www.adeptris.com/Portals/0/images/%5BProvider%5D/%5BFolderFilePath%5D/WLW/DynamicsNAVGLAccountsDynamicFiscalYearwi_73CD/clip_image039_2.jpg"  class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'817030a7'})" &gt;&lt;img title="clip_image039" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="108" alt="clip_image039" title="clip_image039" src="/Portals/0/images/%5BProvider%5D/%5BFolderFilePath%5D/WLW/DynamicsNAVGLAccountsDynamicFiscalYearwi_73CD/clip_image039_thumb.jpg" width="244" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;All you have to do now is run the report.&lt;/p&gt;  &lt;h3&gt;DOCUMENT COPYRIGHT&lt;/h3&gt;  &lt;p&gt;The authors that contributed to this Adeptris.com tutorial are delighted to share their work with others.    &lt;br /&gt;Please recognize the hard work and integrity of our contributing authors by giving them appropriate credit and citing references on any material that you share with others.     &lt;br /&gt;Permission is granted to reproduce this material in whole or in part for educational purposes only (not-for-profit beyond cost of reproduction) provided that the authors receive acknowledgement and this notice is included:&lt;/p&gt;  &lt;p&gt;Any additions or changes to these materials must be pre-approved by the author.    &lt;br /&gt;NOTE: On most Adeptris.com documents Author Access information is placed at the bottom of the document&lt;/p&gt;&lt;div class="d_itc_f" style="clear:both;height:11px;"&gt;&lt;script src="/DesktopModules/itcMetaPost/js/mg.js" type="text/javascript"&gt;&lt;/script&gt;&lt;/div&gt;</description>
      <link>http://www.adeptris.com/Home/tabid/38/EntryId/4/Dynamics-NAV-G-L-Accounts-Dynamic-Fiscal-Year-with-Thirteen-Periods.aspx</link>
      <category domain="http://www.adeptris.com/home/tabid/38/blogid/2/default.aspx">Dynamics NAV Tutorials</category>
      <author>david.cox@adeptris.com</author>
      <comments>http://www.adeptris.com/Home/tabid/38/EntryId/4/Dynamics-NAV-G-L-Accounts-Dynamic-Fiscal-Year-with-Thirteen-Periods.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.adeptris.com/Home/tabid/38/EntryId/4/Dynamics-NAV-G-L-Accounts-Dynamic-Fiscal-Year-with-Thirteen-Periods.aspx</guid>
      <pubDate>Tue, 02 Jun 2009 07:20:02 GMT</pubDate>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.adeptris.com/DesktopModules/Blog/Trackback.aspx?id=4</trackback:ping>
    </item>
    <item>
      <title>AFD postcode® integration for MBS Dynamics NAV®</title>
      <description>&lt;script type="texthttp://www.adeptris.com/javascript" src="http://www.adeptris.com/DesktopModuleshttp://www.adeptris.com/itcMetaPosthttp://www.adeptris.com/jshttp://www.adeptris.com/ca0c21fbdc85f6a1597417732d450607.ashx?hs=1"&gt;&lt;http://www.adeptris.com/script&gt;&lt;p&gt;This Tutorial is available to download from the downloads page, there are two versions one for the GB localised version of Dynamics NAV and the other for the worldwide version, in the download you will find the NAV objects and the tutorial in PDF format   &lt;http://www.adeptris.com/p&gt;  &lt;h5&gt;Scenario&lt;http://www.adeptris.com/h5&gt;  &lt;p&gt;We have a requirement in from the Finance Director at Cronus UK, the sales team have been inputting some post codes wrongly, which has caused the company some embarrassment, after the recent upgrade from Navision version 3.70 to Dynamics, further development of the system, must have the least impact on the upgrade path, so there must be no heavy development, there are however a few objects spare in the Customers number range we may use these, any integration must be done within Dynamics, the use of external resources to create wrapper’s will not be allowed, it has been hard to maintain control of the required custom objects, as new equipment has been purchased, and new software installed, we have been tasked with finding a solution, there is only a small budget so the package should be basic, enter the postcode, and return the street, city, county, we do not need to be able to look up organisations or verify exact door numbers, the sales staff will enter these, we have decided to use AFD Postcode® to fulfil the requirement and have installed the sample software which will give us enough to test our modifications.&lt;http://www.adeptris.com/p&gt;  &lt;h5&gt;Analysis&lt;http://www.adeptris.com/h5&gt;  &lt;p&gt;There are quite a few places where we might want to have a post code lookup, Customer, Vendor, Ship to Address, Banks, and we can’t do any heavy modifications because of the cost of upgrades, the best option for us is to have the code at the form level, a little icon like we use for telephone and email, this means that we do not have to touch the Chttp://www.adeptris.com/AL Code on the post code fields.&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;We will need a table to act as a buffer, there can be many properties with the same post code, we will need to show these, so the sales staff can choose, how can we find out if the user has the software on their PC, we cannot add a field to the user “AFD User”, as often the users change desks, so it will need to be at the workstation level, where we need to check, so we will install the software on each PC at the default location, we can look to see if the dll exists, this is crude but it will should work for us.&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;We also need to think about what variances there may be, corporate and personal, then the various address types, like “the old mill”, “flat B”, “Central Tower” etc.&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;So we will allow up to four input fields to construct the address.&lt;http://www.adeptris.com/p&gt;  &lt;ol&gt;   &lt;li&gt;Organisation – this will be the Company or Persons name and go into the Name fields &lt;http://www.adeptris.com/li&gt;    &lt;li&gt;Property Name – Name or a Number like Old Stable or 23 or Flat C, 34 &lt;http://www.adeptris.com/li&gt;    &lt;li&gt;Property No - If we have a Property Name we will add any other numbers here &lt;http://www.adeptris.com/li&gt;    &lt;li&gt;Postcode - this has to be able to find part and whole postcodes for looking up. &lt;http://www.adeptris.com/li&gt; &lt;http://www.adeptris.com/ol&gt;  &lt;p&gt;We can do this project with just 3 objects and a button, and the process flow will be something like this example, for a new customer.&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;Input the new Customers name or organisation into the name field, in the address field the address name or number, and then we can use the address 2 field if we need it, last we will enter the post code, when we press the button icon, the Customer record gets passed into a codeunit, this loads our four fields into a temporary table, we then open a new form with this table, transfer the information from our temporary record to variables and delete or temporary record, then lookup the postcode, regardless of how many matches we find we will always get the user to confirm the details, then select an address from the list, or do another search if needed, when the user selects OK on the form, we will return the record back to the codeunit and update the customer, so we have just the three objects, table, form and codeunit we are not counting the button as an object. When we are finished we will have learned two valuable skills, running forms on temporary tables and using automation objects, we will have some objects that are almost halfway to a solution, if you want to complete the solution you will need to add error checking for the dll, and the functions for the other address records.&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;In this tutorial it is assumed that you have installed the evaluation copy of AFD Postcode® and that you are familiar with the following, creating and coding of forms tables and codeunits, if you are unsure how to create functions and set properties with in the Dynamics development environment, then you should start with “Tutorial 1” as this takes you through several of the steps required in this tutorial, any areas not covered in the first tutorial will be explained, in summary detail.&lt;http://www.adeptris.com/p&gt;  &lt;h5&gt;The Table&lt;http://www.adeptris.com/h5&gt;  &lt;p&gt;Using the Cronus UK database we create a table based on the standard address format, we have increased some of the field sizes to match the ADF returned field sizes, and save it as 99999 AFD Address Buffer&lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt;&lt;a class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'e324225a'})" href="http:http://www.adeptris.com/http://www.adeptris.com/www.adeptris.comhttp://www.adeptris.com/Portalshttp://www.adeptris.com/0http://www.adeptris.com/imageshttp://www.adeptris.com/%5BProvider%5Dhttp://www.adeptris.com/%5BFolderFilePath%5Dhttp://www.adeptris.com/WLWhttp://www.adeptris.com/AFDpostcodeintegrationforMBSDynamicsNAVG_6A6Ehttp://www.adeptris.com/clip_image003_2.jpg"  class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'a4bde3e8'})" &gt;&lt;img title="clip_image003" style="border-right: 0px; border-top: 0px; display: inline; margin-left: 0px; border-left: 0px; margin-right: 0px; border-bottom: 0px" height="129" alt="clip_image003" title="clip_image003" src="http://www.adeptris.com/Portalshttp://www.adeptris.com/0http://www.adeptris.com/imageshttp://www.adeptris.com/%5BProvider%5Dhttp://www.adeptris.com/%5BFolderFilePath%5Dhttp://www.adeptris.com/WLWhttp://www.adeptris.com/AFDpostcodeintegrationforMBSDynamicsNAVG_6A6Ehttp://www.adeptris.com/clip_image003_thumb.jpg" width="244" align="left" border="0" http://www.adeptris.com/&gt;&lt;http://www.adeptris.com/a&gt;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;This table required no code as it is only used to store information on temporary bases, and there are a number of tables like this, “Invt. Posting Buffer” and “Invoice Post. Buffer”, are two of the tables used in the Sales and Purchase posting codeunits&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;&lt;b&gt;     &lt;br http://www.adeptris.com/&gt;&lt;http://www.adeptris.com/b&gt;&lt;http://www.adeptris.com/p&gt;  &lt;h5&gt; &lt;http://www.adeptris.com/h5&gt;  &lt;h5&gt; &lt;http://www.adeptris.com/h5&gt;  &lt;h5&gt; &lt;http://www.adeptris.com/h5&gt;  &lt;h5&gt;The Form&lt;http://www.adeptris.com/h5&gt;  &lt;p&gt;Create a form and add these variables&lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt;&lt;a class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'e324225a'})" href="http:http://www.adeptris.com/http://www.adeptris.com/www.adeptris.comhttp://www.adeptris.com/Portalshttp://www.adeptris.com/0http://www.adeptris.com/imageshttp://www.adeptris.com/%5BProvider%5Dhttp://www.adeptris.com/%5BFolderFilePath%5Dhttp://www.adeptris.com/WLWhttp://www.adeptris.com/AFDpostcodeintegrationforMBSDynamicsNAVG_6A6Ehttp://www.adeptris.com/clip_image005_2.jpg"  class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'a4bde3e8'})" &gt;&lt;img title="clip_image005" style="border-right: 0px; border-top: 0px; display: inline; margin-left: 0px; border-left: 0px; margin-right: 0px; border-bottom: 0px" height="145" alt="clip_image005" title="clip_image005" src="http://www.adeptris.com/Portalshttp://www.adeptris.com/0http://www.adeptris.com/imageshttp://www.adeptris.com/%5BProvider%5Dhttp://www.adeptris.com/%5BFolderFilePath%5Dhttp://www.adeptris.com/WLWhttp://www.adeptris.com/AFDpostcodeintegrationforMBSDynamicsNAVG_6A6Ehttp://www.adeptris.com/clip_image005_thumb.jpg" width="244" align="left" border="0" http://www.adeptris.com/&gt;&lt;http://www.adeptris.com/a&gt;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;AddArray: Properties – Dimensions – 4&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;TempAddBuffer: Properties – Temporary – Yes&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;AFDPcode:&lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt;   &lt;table cellspacing="0" cellpadding="0" border="0"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top"&gt;           &lt;p&gt;&lt;a class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'e324225a'})" href="http:http://www.adeptris.com/http://www.adeptris.com/www.adeptris.comhttp://www.adeptris.com/Portalshttp://www.adeptris.com/0http://www.adeptris.com/imageshttp://www.adeptris.com/%5BProvider%5Dhttp://www.adeptris.com/%5BFolderFilePath%5Dhttp://www.adeptris.com/WLWhttp://www.adeptris.com/AFDpostcodeintegrationforMBSDynamicsNAVG_6A6Ehttp://www.adeptris.com/clip_image007_2.jpg"  class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'a4bde3e8'})" &gt;&lt;img title="clip_image007" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="212" alt="clip_image007" title="clip_image007" src="http://www.adeptris.com/Portalshttp://www.adeptris.com/0http://www.adeptris.com/imageshttp://www.adeptris.com/%5BProvider%5Dhttp://www.adeptris.com/%5BFolderFilePath%5Dhttp://www.adeptris.com/WLWhttp://www.adeptris.com/AFDpostcodeintegrationforMBSDynamicsNAVG_6A6Ehttp://www.adeptris.com/clip_image007_thumb.jpg" width="244" border="0" http://www.adeptris.com/&gt;&lt;http://www.adeptris.com/a&gt;&lt;http://www.adeptris.com/p&gt;         &lt;http://www.adeptris.com/td&gt;          &lt;td valign="top"&gt;           &lt;p&gt;This automation object exposes the class methods and properties, and we will be using a selection of these in this tutorial, the methods are the functions that will find and search for the postcodes data for the user entered string.&lt;http://www.adeptris.com/p&gt;            &lt;p&gt;The properties class returns a results set of error codes and the address elements, there are a number of other elements like the grid references, and we will be returning the STD code as well as our address.&lt;http://www.adeptris.com/p&gt;         &lt;http://www.adeptris.com/td&gt;       &lt;http://www.adeptris.com/tr&gt;     &lt;http://www.adeptris.com/tbody&gt;&lt;http://www.adeptris.com/table&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt;Layout your form as below:&lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt;&lt;a class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'e324225a'})" href="http:http://www.adeptris.com/http://www.adeptris.com/www.adeptris.comhttp://www.adeptris.com/Portalshttp://www.adeptris.com/0http://www.adeptris.com/imageshttp://www.adeptris.com/%5BProvider%5Dhttp://www.adeptris.com/%5BFolderFilePath%5Dhttp://www.adeptris.com/WLWhttp://www.adeptris.com/AFDpostcodeintegrationforMBSDynamicsNAVG_6A6Ehttp://www.adeptris.com/clip_image009_2.jpg"  class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'a4bde3e8'})" &gt;&lt;img title="clip_image009" style="border-right: 0px; border-top: 0px; display: inline; margin-left: 0px; border-left: 0px; margin-right: 0px; border-bottom: 0px" height="185" alt="clip_image009" title="clip_image009" src="http://www.adeptris.com/Portalshttp://www.adeptris.com/0http://www.adeptris.com/imageshttp://www.adeptris.com/%5BProvider%5Dhttp://www.adeptris.com/%5BFolderFilePath%5Dhttp://www.adeptris.com/WLWhttp://www.adeptris.com/AFDpostcodeintegrationforMBSDynamicsNAVG_6A6Ehttp://www.adeptris.com/clip_image009_thumb.jpg" width="244" align="left" border="0" http://www.adeptris.com/&gt;&lt;http://www.adeptris.com/a&gt;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;The Address fields: Properties - Editable – No&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;Table box Properties - Editable – No and Name - Tablebox&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;Address count: Properties - SourceExpr - TempAddBuffer.COUNTAPPROX&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;Save the form.&lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt;   &lt;br http://www.adeptris.com/&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;h5&gt;Coding the form&lt;http://www.adeptris.com/h5&gt;  &lt;p&gt;View the forms code and enter the following:&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;&lt;b&gt;Form - OnFindRecord(Which : Text[1024]) : Boolean&lt;http://www.adeptris.com/b&gt;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;TempAddBuffer := Rec;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;IF NOT TempAddBuffer.FIND(Which) THEN&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;    EXIT(FALSE);&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;Rec := TempAddBuffer;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;EXIT(TRUE);&lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt;For the OnNextRecord section add a local variable, select the section, then View the Chttp://www.adeptris.com/AL Locals add the variable CurrentSteps type Integer&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;&lt;b&gt;Form - OnNextRecord(Steps : Integer) : Integer&lt;http://www.adeptris.com/b&gt;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;TempAddBuffer := Rec;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;CurrentSteps := TempAddBuffer.NEXT(Steps);&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;IF CurrentSteps &lt;&gt; 0 THEN&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;    Rec := TempAddBuffer;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;EXIT(CurrentSteps);&lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt;I found the code structure on the navigate form 344, this uses a temporary record to display results, and our form is the same and uses some of this code.&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;Next we will create three functions,&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;This function just checks for a numeric value.&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;Name = IsNumeric – Parameter = Value Text 60 – Return Value = Boolean Variable – AddProperty = Integer&lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt;&lt;b&gt;IsNumeric(Value : Text[60]) : Boolean&lt;http://www.adeptris.com/b&gt;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;EXIT(EVALUATE(AddProperty,Value));&lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt;Our second function updates the form based on the returned record set, if we have none or one matching record then we do not need to show our table box, if we have many records then the user can choose, which record they want to use.&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;Name = UpdateAfterFindRecords – Parameter = None – Return Value = None&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;Properties – Local - Yes&lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt;&lt;b&gt;UpdateAfterFindRecords()&lt;http://www.adeptris.com/b&gt;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;RecExists := TempAddBuffer.FIND('-');&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;CurrForm.UPDATE(FALSE);&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;IF RecExists THEN BEGIN&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;   IF TempAddBuffer.COUNTAPPROX &gt; 1 THEN BEGIN&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;      CurrForm.TableBox.VISIBLE(TRUE);&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;      CurrForm.Address.ACTIVATE;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;      CurrForm.UPDATE(FALSE);&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;   END ELSE&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;      CurrForm.TableBox.VISIBLE(FALSE);&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;END ELSE&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;   CurrForm.TableBox.VISIBLE(FALSE);&lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt;Our Last function does all the work finds the records and updates the form, and the way it works is it tries to find a match for the input string, failing to find a match it then moves on to search and returns a list of addresses.&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;Name = SearchPostCode – Parameter = None – Return Value = Boolean&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;Properties – Local - Yes&lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt;&lt;b&gt;SearchPostCode() : Boolean&lt;http://www.adeptris.com/b&gt;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;&lt;i&gt;http://www.adeptris.com/http://www.adeptris.com/Checks if there is a string to lookup&lt;http://www.adeptris.com/i&gt;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;IF AddArray[4] = '' THEN&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;   EXIT;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt;&lt;i&gt;http://www.adeptris.com/http://www.adeptris.com/If the automation object is not initialized then create it&lt;http://www.adeptris.com/i&gt;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;IF ISCLEAR(AFDPcode) THEN&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;   CREATE(AFDPcode);&lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt;&lt;i&gt;http://www.adeptris.com/http://www.adeptris.com/Initialize our variables&lt;http://www.adeptris.com/i&gt;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;RecNo := 0;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;TempAddBuffer.DELETEALL;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt;&lt;i&gt;http://www.adeptris.com/http://www.adeptris.com/Try to find a match by postcode&lt;http://www.adeptris.com/i&gt;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;AFDPcode.FastFind(AddArray[4]);&lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt;&lt;i&gt;http://www.adeptris.com/http://www.adeptris.com/If it has succeeded then a 0 is returned if it failed then search &lt;http://www.adeptris.com/i&gt;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;IF AFDPcode.Result &lt;&gt; 0 THEN&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;   AFDPcode.DoSearch();&lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt;&lt;i&gt;http://www.adeptris.com/http://www.adeptris.com/If we have one or more matches add them to our table&lt;http://www.adeptris.com/i&gt;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;IF AFDPcode.Result = 0 THEN BEGIN&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;   REPEAT&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;      RecNo := RecNo + 1;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;      TempAddBuffer.INIT;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;      TempAddBuffer."No." := RecNo;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;      TempAddBuffer.Name := AddArray[1];&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;      TempAddBuffer.Address := AFDPcode.Street;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;      TempAddBuffer."Address 2" := AFDPcode.Locality;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;      TempAddBuffer.City := AFDPcode.Town;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;      TempAddBuffer.County := AFDPcode.County;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;      TempAddBuffer."Post Code" := AFDPcode.Postcode;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;      TempAddBuffer.STD := AFDPcode.STDCode;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt;&lt;i&gt;      http://www.adeptris.com/http://www.adeptris.com/If user has Input property Name and Property Number&lt;http://www.adeptris.com/i&gt;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;      IF (AddArray[2]&lt;&gt;'')AND(AddArray[3]&lt;&gt;'')THEN BEGIN&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;         IF ((STRLEN(TempAddBuffer.Address))+&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;            (STRLEN(AddArray[3]))+2)&lt; 50 THEN BEGIN&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;            IF IsNumeric(COPYSTR(AddArray[3],STRLEN(AddArray[3])))THEN&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;               TempAddBuffer."Address 2" := STRSUBSTNO('%1 %2',AddArray[3],TempAddBuffer.Address)&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;            ELSE&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;               TempAddBuffer."Address 2" := STRSUBSTNO('%1, %2',AddArray[3],TempAddBuffer.Address);&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;            TempAddBuffer.Address := AddArray[2];&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;         END ELSE BEGIN&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;            TempAddBuffer."Name 2" := AddArray[2];&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;            TempAddBuffer."Address 2" := TempAddBuffer.Address;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;            TempAddBuffer.Address := AddArray[3];&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;         END;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;      END;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;&lt;i&gt;      &lt;http://www.adeptris.com/i&gt;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;&lt;i&gt;      http://www.adeptris.com/http://www.adeptris.com/If user has Input Property Number only&lt;http://www.adeptris.com/i&gt;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;      IF (AddArray[2]&lt;&gt;'')AND(AddArray[3]='')THEN BEGIN&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;         IF ((STRLEN(TempAddBuffer.Address))+&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;           (STRLEN(AddArray[2]))+2)&lt; 50 THEN BEGIN&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;            IF IsNumeric(COPYSTR(AddArray[2],STRLEN(AddArray[2])))THEN&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;                TempAddBuffer.Address := STRSUBSTNO('%1 %2',AddArray[2],TempAddBuffer.Address)&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;            ELSE&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;               TempAddBuffer.Address := STRSUBSTNO('%1, %2',AddArray[2],TempAddBuffer.Address);&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;            END ELSE BEGIN&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;               TempAddBuffer."Address 2" := TempAddBuffer.Address;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;               TempAddBuffer.Address := AddArray[2];&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;            END;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;      END;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;&lt;i&gt;     &lt;http://www.adeptris.com/i&gt;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;&lt;i&gt;      http://www.adeptris.com/http://www.adeptris.com/Note: that here we set a maximum retrieval of 100 records &lt;http://www.adeptris.com/i&gt;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;      TempAddBuffer.INSERT;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;   UNTIL (AFDPcode.GetNextRecord &lt; 0) OR (RecNo = 1000)&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;END;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;Rec := TempAddBuffer;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;UpdateAfterFindRecords;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt;This deals with the different input scenarios, we will test them later.&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;This code can now be added&lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt;&lt;b&gt;Form - OnOpenForm()&lt;http://www.adeptris.com/b&gt;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;&lt;i&gt;http://www.adeptris.com/http://www.adeptris.com/f we have passed in a tempory record use the values to search&lt;http://www.adeptris.com/i&gt;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;IF FIND('-')THEN BEGIN&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;   AddArray[1]:= Name;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;   AddArray[2]:= Address;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;   AddArray[3]:= "Address 2";&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;   AddArray[4]:= "Post Code";&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;&lt;i&gt;   &lt;http://www.adeptris.com/i&gt;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;&lt;i&gt;   http://www.adeptris.com/http://www.adeptris.com/Now we can delete our calling record &lt;http://www.adeptris.com/i&gt;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;   DELETEALL;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;&lt;i&gt;   &lt;http://www.adeptris.com/i&gt;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;&lt;i&gt;   http://www.adeptris.com/http://www.adeptris.com/Find our record set and insert it&lt;http://www.adeptris.com/i&gt;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;   SearchPostCode;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;END;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt;&lt;i&gt;http://www.adeptris.com/http://www.adeptris.com/Update our form&lt;http://www.adeptris.com/i&gt;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;UpdateAfterFindRecords;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt;Code for the Search button:&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;&lt;b&gt;Search - OnPush()&lt;http://www.adeptris.com/b&gt;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;SearchPostCode;&lt;http://www.adeptris.com/p&gt;  &lt;h5&gt;Codeunit&lt;http://www.adeptris.com/h5&gt;  &lt;p&gt;This will be similar to the Format Address codeunit, except that instead of getting an address array back we get a record with the address added.&lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt;Create a new Codeunit and add a variable tempAddBuffer – Record - Address Buffer&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;Add a new function Name - findAddress with these parameters and variable and the following Properties - Local –Yes&lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt;&lt;a class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'e324225a'})" href="http:http://www.adeptris.com/http://www.adeptris.com/www.adeptris.comhttp://www.adeptris.com/Portalshttp://www.adeptris.com/0http://www.adeptris.com/imageshttp://www.adeptris.com/%5BProvider%5Dhttp://www.adeptris.com/%5BFolderFilePath%5Dhttp://www.adeptris.com/WLWhttp://www.adeptris.com/AFDpostcodeintegrationforMBSDynamicsNAVG_6A6Ehttp://www.adeptris.com/clip_image011_2.jpg"  class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'a4bde3e8'})" &gt;&lt;img title="clip_image011" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="131" alt="clip_image011" title="clip_image011" src="http://www.adeptris.com/Portalshttp://www.adeptris.com/0http://www.adeptris.com/imageshttp://www.adeptris.com/%5BProvider%5Dhttp://www.adeptris.com/%5BFolderFilePath%5Dhttp://www.adeptris.com/WLWhttp://www.adeptris.com/AFDpostcodeintegrationforMBSDynamicsNAVG_6A6Ehttp://www.adeptris.com/clip_image011_thumb.jpg" width="244" border="0" http://www.adeptris.com/&gt;&lt;http://www.adeptris.com/a&gt;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt;&lt;a class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'e324225a'})" href="http:http://www.adeptris.com/http://www.adeptris.com/www.adeptris.comhttp://www.adeptris.com/Portalshttp://www.adeptris.com/0http://www.adeptris.com/imageshttp://www.adeptris.com/%5BProvider%5Dhttp://www.adeptris.com/%5BFolderFilePath%5Dhttp://www.adeptris.com/WLWhttp://www.adeptris.com/AFDpostcodeintegrationforMBSDynamicsNAVG_6A6Ehttp://www.adeptris.com/clip_image013_2.jpg"  class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'a4bde3e8'})" &gt;&lt;img title="clip_image013" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="131" alt="clip_image013" title="clip_image013" src="http://www.adeptris.com/Portalshttp://www.adeptris.com/0http://www.adeptris.com/imageshttp://www.adeptris.com/%5BProvider%5Dhttp://www.adeptris.com/%5BFolderFilePath%5Dhttp://www.adeptris.com/WLWhttp://www.adeptris.com/AFDpostcodeintegrationforMBSDynamicsNAVG_6A6Ehttp://www.adeptris.com/clip_image013_thumb.jpg" width="244" border="0" http://www.adeptris.com/&gt;&lt;http://www.adeptris.com/a&gt;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt;Add another function CustFindAddress&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;Parmeter - Var – Customer Record - Customer&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;This function receives the Customer record and passes it’s fields to findAddress&lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt;&lt;b&gt;custFindAddress(VAR Customer : Record Customer)&lt;http://www.adeptris.com/b&gt;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;WITH Customer DO BEGIN&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;   http://www.adeptris.com/http://www.adeptris.com/ Not a Local Customer so Get Out&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;   IF Customer."Country Code" &lt;&gt; '' THEN&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;      EXIT;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt;   findAddress(Name,"Name 2",Address,"Address 2",City,County,"Post Code");&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;      EXIT;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;END;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt;&lt;b&gt;findAddress(VAR Name : Text[50];VAR Name2 : Text[50];VAR Address : Text[50];VAR Address2 : Text[50];VAR City : Text[30];VAR County : Te&lt;http://www.adeptris.com/b&gt;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;IF postCode = '' THEN&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;   EXIT;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;tempAddBuffer.DELETEALL;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt;&lt;i&gt;http://www.adeptris.com/http://www.adeptris.com/Add the fields here to pass to our form to populate the AddArray&lt;http://www.adeptris.com/i&gt;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;tempAddBuffer.INIT;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;tempAddBuffer."No." := RecNo;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;tempAddBuffer.Name := Name;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;tempAddBuffer.Address := Address;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;tempAddBuffer."Address 2" := Address2;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;tempAddBuffer."Post Code" := postCode;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;tempAddBuffer.INSERT;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt;&lt;i&gt;http://www.adeptris.com/http://www.adeptris.com/Run our form with the temporary record transfer the fields if selected&lt;http://www.adeptris.com/i&gt;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;IF FORM.RUNMODAL(FORM::"AFD Postcode",tempAddBuffer) = ACTION::LookupOK THEN BEGIN&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;   Name := tempAddBuffer.Name;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;   Name2 := tempAddBuffer."Name 2";&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;   Address := tempAddBuffer.Address;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;   Address2 := tempAddBuffer."Address 2";&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;   City := tempAddBuffer.City;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;   County := tempAddBuffer.County;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;   postCode := tempAddBuffer."Post Code";&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;END;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt;Save your work and we are nearly done&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;Last object to change is the Customer Card form 21, here we are going to add a button to do a search the for the post code based on our input, we need to add a new button just next to the post code field, with the lookup search icon&lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt;&lt;a class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'e324225a'})" href="http:http://www.adeptris.com/http://www.adeptris.com/www.adeptris.comhttp://www.adeptris.com/Portalshttp://www.adeptris.com/0http://www.adeptris.com/imageshttp://www.adeptris.com/%5BProvider%5Dhttp://www.adeptris.com/%5BFolderFilePath%5Dhttp://www.adeptris.com/WLWhttp://www.adeptris.com/AFDpostcodeintegrationforMBSDynamicsNAVG_6A6Ehttp://www.adeptris.com/clip_image015_2.jpg"  class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'a4bde3e8'})" &gt;&lt;img title="clip_image015" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="139" alt="clip_image015" title="clip_image015" src="http://www.adeptris.com/Portalshttp://www.adeptris.com/0http://www.adeptris.com/imageshttp://www.adeptris.com/%5BProvider%5Dhttp://www.adeptris.com/%5BFolderFilePath%5Dhttp://www.adeptris.com/WLWhttp://www.adeptris.com/AFDpostcodeintegrationforMBSDynamicsNAVG_6A6Ehttp://www.adeptris.com/clip_image015_thumb.jpg" width="244" border="0" http://www.adeptris.com/&gt;&lt;http://www.adeptris.com/a&gt;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt;&lt;a class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'e324225a'})" href="http:http://www.adeptris.com/http://www.adeptris.com/www.adeptris.comhttp://www.adeptris.com/Portalshttp://www.adeptris.com/0http://www.adeptris.com/imageshttp://www.adeptris.com/%5BProvider%5Dhttp://www.adeptris.com/%5BFolderFilePath%5Dhttp://www.adeptris.com/WLWhttp://www.adeptris.com/AFDpostcodeintegrationforMBSDynamicsNAVG_6A6Ehttp://www.adeptris.com/clip_image017_2.jpg"  class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'a4bde3e8'})" &gt;&lt;img title="clip_image017" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="201" alt="clip_image017" title="clip_image017" src="http://www.adeptris.com/Portalshttp://www.adeptris.com/0http://www.adeptris.com/imageshttp://www.adeptris.com/%5BProvider%5Dhttp://www.adeptris.com/%5BFolderFilePath%5Dhttp://www.adeptris.com/WLWhttp://www.adeptris.com/AFDpostcodeintegrationforMBSDynamicsNAVG_6A6Ehttp://www.adeptris.com/clip_image017_thumb.jpg" width="244" border="0" http://www.adeptris.com/&gt;&lt;http://www.adeptris.com/a&gt;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt;View the code for the button and add a&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;Local variable AFDPostcodeMgnt – Codeunit – AFD Postcode Management&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;Now all we need is the following code&lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt;&lt;b&gt;&lt;control1000000000&gt;&lt;http://www.adeptris.com/control1000000000&gt;- OnPush()&lt;http://www.adeptris.com/b&gt;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;http://www.adeptris.com/http://www.adeptris.com/ Cronus 21http://www.adeptris.com/05http://www.adeptris.com/2006 Adeptris&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;AFDPostcodeMgnt.custFindAddress(Rec);&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;CurrForm.UPDATE;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt;So let’s look at the results, AFD Evaluation copy has a limited amount of data which does not expire, so we can test our different scenarios&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;We have company Name – Premises Name and a number&lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt;&lt;a class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'e324225a'})" href="http:http://www.adeptris.com/http://www.adeptris.com/www.adeptris.comhttp://www.adeptris.com/Portalshttp://www.adeptris.com/0http://www.adeptris.com/imageshttp://www.adeptris.com/%5BProvider%5Dhttp://www.adeptris.com/%5BFolderFilePath%5Dhttp://www.adeptris.com/WLWhttp://www.adeptris.com/AFDpostcodeintegrationforMBSDynamicsNAVG_6A6Ehttp://www.adeptris.com/clip_image019_2.jpg"  class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'a4bde3e8'})" &gt;&lt;img title="clip_image019" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="130" alt="clip_image019" title="clip_image019" src="http://www.adeptris.com/Portalshttp://www.adeptris.com/0http://www.adeptris.com/imageshttp://www.adeptris.com/%5BProvider%5Dhttp://www.adeptris.com/%5BFolderFilePath%5Dhttp://www.adeptris.com/WLWhttp://www.adeptris.com/AFDpostcodeintegrationforMBSDynamicsNAVG_6A6Ehttp://www.adeptris.com/clip_image019_thumb.jpg" width="244" border="0" http://www.adeptris.com/&gt;&lt;http://www.adeptris.com/a&gt;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt;Result&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;&lt;a class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'e324225a'})" href="http:http://www.adeptris.com/http://www.adeptris.com/www.adeptris.comhttp://www.adeptris.com/Portalshttp://www.adeptris.com/0http://www.adeptris.com/imageshttp://www.adeptris.com/%5BProvider%5Dhttp://www.adeptris.com/%5BFolderFilePath%5Dhttp://www.adeptris.com/WLWhttp://www.adeptris.com/AFDpostcodeintegrationforMBSDynamicsNAVG_6A6Ehttp://www.adeptris.com/clip_image021_2.jpg"  class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'a4bde3e8'})" &gt;&lt;img title="clip_image021" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="178" alt="clip_image021" title="clip_image021" src="http://www.adeptris.com/Portalshttp://www.adeptris.com/0http://www.adeptris.com/imageshttp://www.adeptris.com/%5BProvider%5Dhttp://www.adeptris.com/%5BFolderFilePath%5Dhttp://www.adeptris.com/WLWhttp://www.adeptris.com/AFDpostcodeintegrationforMBSDynamicsNAVG_6A6Ehttp://www.adeptris.com/clip_image021_thumb.jpg" width="244" border="0" http://www.adeptris.com/&gt;&lt;http://www.adeptris.com/a&gt;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt;If we have only the house number then it is input into Address field&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;&lt;a class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'e324225a'})" href="http:http://www.adeptris.com/http://www.adeptris.com/www.adeptris.comhttp://www.adeptris.com/Portalshttp://www.adeptris.com/0http://www.adeptris.com/imageshttp://www.adeptris.com/%5BProvider%5Dhttp://www.adeptris.com/%5BFolderFilePath%5Dhttp://www.adeptris.com/WLWhttp://www.adeptris.com/AFDpostcodeintegrationforMBSDynamicsNAVG_6A6Ehttp://www.adeptris.com/clip_image023_2.jpg"  class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'a4bde3e8'})" &gt;&lt;img title="clip_image023" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="178" alt="clip_image023" title="clip_image023" src="http://www.adeptris.com/Portalshttp://www.adeptris.com/0http://www.adeptris.com/imageshttp://www.adeptris.com/%5BProvider%5Dhttp://www.adeptris.com/%5BFolderFilePath%5Dhttp://www.adeptris.com/WLWhttp://www.adeptris.com/AFDpostcodeintegrationforMBSDynamicsNAVG_6A6Ehttp://www.adeptris.com/clip_image023_thumb.jpg" width="244" border="0" http://www.adeptris.com/&gt;&lt;http://www.adeptris.com/a&gt;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;300 Record matches with the partial postcode of B5, we could have a maximum 1000&lt;http://www.adeptris.com/p&gt;  &lt;p&gt; &lt;http://www.adeptris.com/p&gt;  &lt;p&gt;&lt;a class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'e324225a'})" href="http:http://www.adeptris.com/http://www.adeptris.com/www.adeptris.comhttp://www.adeptris.com/Portalshttp://www.adeptris.com/0http://www.adeptris.com/imageshttp://www.adeptris.com/%5BProvider%5Dhttp://www.adeptris.com/%5BFolderFilePath%5Dhttp://www.adeptris.com/WLWhttp://www.adeptris.com/AFDpostcodeintegrationforMBSDynamicsNAVG_6A6Ehttp://www.adeptris.com/clip_image025_2.jpg"  class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'a4bde3e8'})" &gt;&lt;img title="clip_image025" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="178" alt="clip_image025" title="clip_image025" src="http://www.adeptris.com/Portalshttp://www.adeptris.com/0http://www.adeptris.com/imageshttp://www.adeptris.com/%5BProvider%5Dhttp://www.adeptris.com/%5BFolderFilePath%5Dhttp://www.adeptris.com/WLWhttp://www.adeptris.com/AFDpostcodeintegrationforMBSDynamicsNAVG_6A6Ehttp://www.adeptris.com/clip_image025_thumb.jpg" width="244" border="0" http://www.adeptris.com/&gt;&lt;http://www.adeptris.com/a&gt;#&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;That’s it for our different input scenarios&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;&lt;a class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'e324225a'})" href="http:http://www.adeptris.com/http://www.adeptris.com/www.adeptris.comhttp://www.adeptris.com/Portalshttp://www.adeptris.com/0http://www.adeptris.com/imageshttp://www.adeptris.com/%5BProvider%5Dhttp://www.adeptris.com/%5BFolderFilePath%5Dhttp://www.adeptris.com/WLWhttp://www.adeptris.com/AFDpostcodeintegrationforMBSDynamicsNAVG_6A6Ehttp://www.adeptris.com/clip_image027_2.jpg"  class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'a4bde3e8'})" &gt;&lt;img title="clip_image027" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="178" alt="clip_image027" title="clip_image027" src="http://www.adeptris.com/Portalshttp://www.adeptris.com/0http://www.adeptris.com/imageshttp://www.adeptris.com/%5BProvider%5Dhttp://www.adeptris.com/%5BFolderFilePath%5Dhttp://www.adeptris.com/WLWhttp://www.adeptris.com/AFDpostcodeintegrationforMBSDynamicsNAVG_6A6Ehttp://www.adeptris.com/clip_image027_thumb.jpg" width="244" border="0" http://www.adeptris.com/&gt;&lt;http://www.adeptris.com/a&gt;&lt;http://www.adeptris.com/p&gt;  &lt;h5&gt;Conclusion&lt;http://www.adeptris.com/h5&gt;  &lt;p&gt;This is not a ready to use solution, to develop it further; you need to add the different functions in the AFD Postcode Management codeunit for Vendor, Bank, Ship-To etc:&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;On our form you need code to see if AFD is installed it can be as simple as&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;IF NOT EXISTS(c:\Windows\System32\postcode.dll)THEN&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;EXIT;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;For the AFD Error trapping a variable ErrorText and a box on the form, then in the code just add the following after the calls to the dll.&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;ErrorText := AFDPcode.ResultText;&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;The best way to learn Dynamics coding is to get in and have a look, this solution has used 3 objects, and the upgrade path is simple, drop the button back on the forms.&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;Please use the feedback section on my website &lt;a href="http://www.adeptris.com/"&gt;www.adeptris.com&lt;http://www.adeptris.com/a&gt; and let me know how you found this tutorial, so I cam make the next one better.&lt;http://www.adeptris.com/p&gt;  &lt;h3&gt; &lt;http://www.adeptris.com/h3&gt;  &lt;p&gt;&lt;b&gt;     &lt;br http://www.adeptris.com/&gt;&lt;http://www.adeptris.com/b&gt;&lt;http://www.adeptris.com/p&gt;  &lt;h3&gt;&lt;a class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'e324225a'})" href="http://www.adeptris.com/Portalshttp://www.adeptris.com/0http://www.adeptris.com/imageshttp://www.adeptris.com/%5BProvider%5Dhttp://www.adeptris.com/%5BFolderFilePath%5Dhttp://www.adeptris.com/WLWhttp://www.adeptris.com/AFDpostcodeintegrationforMBSDynamicsNAVG_6A6Ehttp://www.adeptris.com/clip_image029_2.jpg"  class="itcexpando" onclick="return mp.expand(this,{slideshowGroup:'a4bde3e8'})" &gt;&lt;img title="clip_image029" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="95" alt="clip_image029" title="clip_image029" src="http://www.adeptris.com/Portalshttp://www.adeptris.com/0http://www.adeptris.com/imageshttp://www.adeptris.com/%5BProvider%5Dhttp://www.adeptris.com/%5BFolderFilePath%5Dhttp://www.adeptris.com/WLWhttp://www.adeptris.com/AFDpostcodeintegrationforMBSDynamicsNAVG_6A6Ehttp://www.adeptris.com/clip_image029_thumb.jpg" width="244" border="0" http://www.adeptris.com/&gt;&lt;http://www.adeptris.com/a&gt;&lt;http://www.adeptris.com/h3&gt;  &lt;p&gt;&lt;a href="http:http://www.adeptris.com/http://www.adeptris.com/www.afd.co.ukhttp://www.adeptris.com/index.asp"&gt;'AFD'&lt;http://www.adeptris.com/a&gt;, &lt;a href="http:http://www.adeptris.com/http://www.adeptris.com/www.afd.co.ukhttp://www.adeptris.com/postcode.asp"&gt;'AFD POSTCODE'&lt;http://www.adeptris.com/a&gt;, &lt;a href="http:http://www.adeptris.com/http://www.adeptris.com/www.afd.co.ukhttp://www.adeptris.com/zipaddress.asp"&gt;'ZIPADDRESS'&lt;http://www.adeptris.com/a&gt;, and the Flying Envelope Device are Registered Trade Marks of ZipAddress Ltd. 'ROBOT' Technology is protected by Patent No GB2369699.     &lt;br http://www.adeptris.com/&gt;All other trade marks acknowledged.     &lt;br http://www.adeptris.com/&gt;AFD Products are subject to a &lt;a href="http:http://www.adeptris.com/http://www.adeptris.com/www.afd.co.ukhttp://www.adeptris.com/eula.htm"&gt;License Agreement&lt;http://www.adeptris.com/a&gt; and include a data license for one computer, renewable annually&lt;http://www.adeptris.com/p&gt;  &lt;h3&gt;DOCUMENT COPYRIGHT&lt;http://www.adeptris.com/h3&gt;  &lt;p&gt;The authors that contributed to this Adeptris.com tutorial are delighted to share their work with others.    &lt;br http://www.adeptris.com/&gt;Please recognize the hard work and integrity of our contributing authors by giving them appropriate credit and citing references on any material that you share with others.     &lt;br http://www.adeptris.com/&gt;Permission is granted to reproduce this material in whole or in part for educational purposes only (not-for-profit beyond cost of reproduction) provided that the authors receive acknowledgement and this notice is included:&lt;http://www.adeptris.com/p&gt;  &lt;p&gt;Any additions or changes to these materials must be pre-approved by the author.    &lt;br http://www.adeptris.com/&gt;NOTE: On most Adeptris.com documents Author Access information is placed at the bottom of the document&lt;http://www.adeptris.com/p&gt;&lt;div class="d_itc_f" style="clear:both;height:11px;"&gt;&lt;script src="http://www.adeptris.com/DesktopModuleshttp://www.adeptris.com/itcMetaPosthttp://www.adeptris.com/jshttp://www.adeptris.com/mg.js" type="texthttp://www.adeptris.com/javascript"&gt;&lt;http://www.adeptris.com/script&gt;&lt;http://www.adeptris.com/div&gt;</description>
      <link>http://www.adeptris.com/Home/tabid/38/EntryId/3/AFD-postcode-reg-integration-for-MBS-Dynamics-NAV-reg.aspx</link>
      <category domain="http://www.adeptris.com/home/tabid/38/blogid/2/default.aspx">Dynamics NAV Tutorials</category>
      <author>david.cox@adeptris.com</author>
      <comments>http://www.adeptris.com/Home/tabid/38/EntryId/3/AFD-postcode-reg-integration-for-MBS-Dynamics-NAV-reg.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.adeptris.com/Home/tabid/38/EntryId/3/AFD-postcode-reg-integration-for-MBS-Dynamics-NAV-reg.aspx</guid>
      <pubDate>Tue, 02 Jun 2009 06:36:46 GMT</pubDate>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.adeptris.com/DesktopModules/Blog/Trackback.aspx?id=3</trackback:ping>
    </item>
  </channel>
</rss>