<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>NextEqualZero.com &#187; Development</title>
	<atom:link href="http://www.nextequalzero.com/category/development/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.nextequalzero.com</link>
	<description>A technical eye on Microsoft Dynamics NAV</description>
	<lastBuildDate>Fri, 05 Feb 2010 17:30:00 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Hijri date converter for Dynamics NAV</title>
		<link>http://www.nextequalzero.com/2010/01/hijri-date-converter-for-dynamics-nav/</link>
		<comments>http://www.nextequalzero.com/2010/01/hijri-date-converter-for-dynamics-nav/#comments</comments>
		<pubDate>Fri, 01 Jan 2010 14:51:39 +0000</pubDate>
		<dc:creator>Ian Crocker</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[calendar]]></category>
		<category><![CDATA[conversion]]></category>
		<category><![CDATA[date]]></category>
		<category><![CDATA[gregorian]]></category>
		<category><![CDATA[hijri]]></category>
		<category><![CDATA[navision]]></category>

		<guid isPermaLink="false">http://www.nextequalzero.com/?p=916</guid>
		<description><![CDATA[Need to convert Gregorian to Hijri dates in Dynamics NAV?
The Islamic calendar or Hijri calendar is a calendar based on the cycles of the moon, used to date events in many Muslim countries and to determine the correct day on which to celebrate Islamic holy days and festivals.
A question appeared on the Navision newsgroup some [...]]]></description>
			<content:encoded><![CDATA[<p>Need to convert Gregorian to Hijri dates in Dynamics NAV?</p>
<p><span id="more-916"></span>The Islamic calendar or Hijri calendar is a calendar based on the cycles of the moon, used to date events in many Muslim countries and to determine the correct day on which to celebrate Islamic holy days and festivals.</p>
<p>A question appeared on the <a title="microsoft.public.navision" href="http://groups.google.co.uk/group/microsoft.public.navision/">Navision newsgroup</a> some years ago asking how to go about converting Gregorian to Hijri dates in Dynamics NAV, so I set about writing some code to achieve this.</p>
<p>I though the new year may be an appropriate time to repost that code for anyone who needs it.</p>
<p>You can download the Hijri Date Management codeunit <a title="Hijri Date Management Codeunit" href="http://www.nextequalzero.com/wp-content/uploads/2009/12/hijri-date-management.txt">here</a>.</p>
<p>Example function calls:</p>
<pre class="brush: plain;">MESSAGE(Date2Hijri(010110D,0));</pre>
<p><em>This message window would show: <strong>15/1/1431</strong></em></p>
<pre class="brush: plain;">MESSAGE(Date2Hijri(010110D,1));</pre>
<p><em>This message window would show: <strong>Friday 15 Muharram 1431 A.H.</strong></em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.nextequalzero.com/2010/01/hijri-date-converter-for-dynamics-nav/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to add new fields to the Item Tracking Lines form</title>
		<link>http://www.nextequalzero.com/2007/12/how-to-add-new-fields-to-the-item-tracking-lines-form/</link>
		<comments>http://www.nextequalzero.com/2007/12/how-to-add-new-fields-to-the-item-tracking-lines-form/#comments</comments>
		<pubDate>Fri, 21 Dec 2007 15:00:54 +0000</pubDate>
		<dc:creator>Ian Crocker</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Item Tracking]]></category>

		<guid isPermaLink="false">http://localhost:8888/nextequalzero/?p=19</guid>
		<description><![CDATA[The Item Tracking Lines form has a Source Table of Tracking Specification.
The Tracking Specification table is used in conjunction with theResrevation Entry table, Item Ledger Entry table and various temporary record handling functionality in order to attach and maintain tracking against items on document lines.
To add a new field, for example, Your Reference, you must first add this field to the Tracking Specification table [...]]]></description>
			<content:encoded><![CDATA[<p>The <em>Item Tracking Lines</em> form has a Source Table of <em>Tracking Specification</em>.</p>
<p>The <em>Tracking Specification</em> table is used in conjunction with the<em>Resrevation Entry</em> table, <em>Item Ledger Entry</em> table and various temporary record handling functionality in order to attach and maintain tracking against items on document lines.</p>
<p>To add a new field, for example, <em>Your Reference</em>, you must first add this field to the Tracking Specification table and place it on screen by modifying the Item Tracking Lines form:</p>
<p><span id="more-19"></span></p>
<p><a href="http://localhost:8888/nextequalzero/wp-content/uploads/2008/06/itemtrackinglineswithnewfield.png"><img class="alignnone size-full wp-image-21" title="itemtrackinglineswithnewfield" src="http://www.nextequalzero.com/wp-content/uploads/2008/06/itemtrackinglineswithnewfield.png" alt="" width="375" height="328" /></a></p>
<h3>Reservation Entry</h3>
<p>The new field also needs to be added to the Reservation Entry table. </p>
<p>Unfortunately there is more to it than just placing the field on screen. If you try to assign a lot and fill in our new Your Reference field, close the form, then re-open, you&#8217;ll notice that the value entered has disappeared.</p>
<p>This is beause the new field needs to be pushed through to the Reservation Entry table.</p>
<p>To achieve this we need to delve into the code behind the Item Tracking Lines form.</p>
<h3>RegisterChange</h3>
<p>The first function we need to look at is the the <em>RegisterChange</em> function. </p>
<p>Within this function there is a call to the CreateReservEntryFor function in the <em>Create Reserv. Entry</em>codeunit. Values are passed to this function which is then used to update the reservation entries.</p>
<p>You can either modify the CreateReservEntryFor function and tag your field(s) on the end, or create a new function called <em>SetCustomFields</em> which will take your new field(s) as parameters.</p>
<p>The new function should look something like this:</p>
<div class="geshi no pascal">
<div class="head">SetCustomFields(YourReference : Text[30])</div>
<ol>
<li class="li1">
<div class="de1">InsertReservEntry.<span class="st0">&quot;Your Reference&quot;</span> := YourReference;</div>
</li>
<li class="li1">
<div class="de1">InsertReservEntry2.<span class="st0">&quot;Your Reference&quot;</span> := YourReference;</div>
</li>
</ol>
</div>
<p>A call to this new function must then be made from the RegisterChange function in the Item Tracking Lines form.</p>
<div class="geshi no pascal">
<div class="head">OK := FALSE;</div>
<ol>
<li class="li1">
<div class="de1"><span class="kw1">IF</span> CurrentSignFactor &amp;lt; <span class="nu0">0</span> <span class="kw1">THEN</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; NewTrackingSpecification.<span class="st0">&quot;Expiration Date&quot;</span> := 0D;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">CASE</span> ChangeType <span class="kw1">OF</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; ChangeType::Insert:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">BEGIN</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">IF</span> <span class="br0">&#40;</span>OldTrackingSpecification.<span class="st0">&quot;Quantity (Base)&quot;</span> = <span class="nu0">0</span><span class="br0">&#41;</span> OR</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#40;</span><span class="br0">&#40;</span>OldTrackingSpecification.<span class="st0">&quot;Lot No.&quot;</span> = <span class="st0">&#39;&#39;</span><span class="br0">&#41;</span> <span class="kw3">AND</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#40;</span>OldTrackingSpecification.<span class="st0">&quot;Serial No.&quot;</span> = <span class="st0">&#39;&#39;</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">THEN</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; EXIT<span class="br0">&#40;</span><span class="kw2">TRUE</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; TempReservEntry.<span class="me1">SETRANGE</span><span class="br0">&#40;</span><span class="st0">&quot;Serial No.&quot;</span>,<span class="st0">&#39;&#39;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; TempReservEntry.<span class="me1">SETRANGE</span><span class="br0">&#40;</span><span class="st0">&quot;Lot No.&quot;</span>,<span class="st0">&#39;&#39;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; OldTrackingSpecification.<span class="st0">&quot;Quantity (Base)&quot;</span> :=</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; CurrentSignFactor *</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; ReservEngineMgt.<span class="me1">AddItemTrackingToTempRecSet</span><span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; TempReservEntry,NewTrackingSpecification,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CurrentSignFactor * OldTrackingSpecification.<span class="st0">&quot;Quantity (Base)&quot;</span>,QtyToAddAsBlank,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ItemTrackingCode.<span class="st0">&quot;SN Specific Tracking&quot;</span>,ItemTrackingCode.<span class="st0">&quot;Lot Specific Tracking&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; TempReservEntry.<span class="me1">SETRANGE</span><span class="br0">&#40;</span><span class="st0">&quot;Serial No.&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; TempReservEntry.<span class="me1">SETRANGE</span><span class="br0">&#40;</span><span class="st0">&quot;Lot No.&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="co1">// Late Binding</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">IF</span> ReservEngineMgt.<span class="me1">RetrieveLostReservQty</span><span class="br0">&#40;</span>LostReservQty<span class="br0">&#41;</span> <span class="kw1">THEN</span> <span class="kw1">BEGIN</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; TempItemTrackLineReserv := OldTrackingSpecification;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; TempItemTrackLineReserv.<span class="st0">&quot;Quantity (Base)&quot;</span> := LostReservQty * CurrentSignFactor;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; TempItemTrackLineReserv.<span class="me1">INSERT</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">END</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">IF</span> OldTrackingSpecification.<span class="st0">&quot;Quantity (Base)&quot;</span> = <span class="nu0">0</span> <span class="kw1">THEN</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; EXIT<span class="br0">&#40;</span><span class="kw2">TRUE</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">IF</span> <span class="br0">&#40;</span>FormRunMode = FormRunMode::Reclass<span class="br0">&#41;</span> OR MoveBinContent <span class="kw1">THEN</span> <span class="kw1">BEGIN</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; CreateReservEntry.<span class="me1">SetNewSerialLotNo</span><span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; OldTrackingSpecification.<span class="st0">&quot;New Serial No.&quot;</span>,OldTrackingSpecification.<span class="st0">&quot;New Lot No.&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; CreateReservEntry.<span class="me1">SetNewExpirationDate</span><span class="br0">&#40;</span>OldTrackingSpecification.<span class="st0">&quot;New Expiration Date&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">END</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; CreateReservEntry.<span class="me1">SetDates</span><span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; NewTrackingSpecification.<span class="st0">&quot;Warranty Date&quot;</span>,NewTrackingSpecification.<span class="st0">&quot;Expiration Date&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; CreateReservEntry.<span class="me1">SetApplyFromEntryNo</span><span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; NewTrackingSpecification.<span class="st0">&quot;Appl.-from Item Entry&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; CreateReservEntry.<span class="me1">SetCustomFields</span><span class="br0">&#40;</span><span class="st0">&quot;Your Reference&quot;</span><span class="br0">&#41;</span>; <span class="co1">// &#8212; INSERT LINE ++</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; CreateReservEntry.<span class="me1">CreateReservEntryFor</span><span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">..</div>
</li>
<li class="li1">
<div class="de1">..</div>
</li>
</ol>
</div>
<p>The new field will now be pushed through to the reservation entry table when the item tracking form is in insert mode.</p>
<p>It also needs to update correctly when in modify/delete mode.</p>
<h3>EntriesAreIdentical</h3>
<p>To do this you firstly need to modify the EntriesAreIdentical function by inserting the new Your Reference field as follows:</p>
<div class="geshi no pascal">
<div class="head">..</div>
<ol>
<li class="li1">
<div class="de1">..</div>
</li>
<li class="li1">
<div class="de1"><span class="me1">IdenticalArray</span><span class="br0">&#91;</span><span class="nu0">2</span><span class="br0">&#93;</span> := <span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#40;</span>ReservEntry1.<span class="me1">Description</span> = ReservEntry2.<span class="me1">Description</span><span class="br0">&#41;</span> <span class="kw3">AND</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#40;</span>ReservEntry1.<span class="st0">&quot;New Serial No.&quot;</span> = ReservEntry2.<span class="st0">&quot;New Serial No.&quot;</span><span class="br0">&#41;</span> <span class="kw3">AND</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#40;</span>ReservEntry1.<span class="st0">&quot;New Lot No.&quot;</span> = ReservEntry2.<span class="st0">&quot;New Lot No.&quot;</span><span class="br0">&#41;</span> <span class="kw3">AND</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#40;</span>ReservEntry1.<span class="st0">&quot;Expiration Date&quot;</span> = ReservEntry2.<span class="st0">&quot;Expiration Date&quot;</span><span class="br0">&#41;</span> <span class="kw3">AND</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#40;</span>ReservEntry1.<span class="st0">&quot;Warranty Date&quot;</span> = ReservEntry2.<span class="st0">&quot;Warranty Date&quot;</span><span class="br0">&#41;</span> <span class="kw3">AND</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#40;</span>ReservEntry1.<span class="st0">&quot;Your Reference&quot;</span> = ReservEntry2.<span class="st0">&quot;Your Reference&quot;</span><span class="br0">&#41;</span> <span class="kw3">AND</span> <span class="co1">// &#8212; INSERT LINE ++</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#40;</span>ReservEntry1.<span class="st0">&quot;New Expiration Date&quot;</span> = ReservEntry2.<span class="st0">&quot;New Expiration Date&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">EXIT<span class="br0">&#40;</span>IdenticalArray<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span> <span class="kw3">AND</span> IdenticalArray<span class="br0">&#91;</span><span class="nu0">2</span><span class="br0">&#93;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<h3>RegisterChange</h3>
<p>Now we need to go back to the RegisterChange function and insert the following two lines of code which fall within ChangeType::Modify: case statement.</p>
<p>This code will update the reservation entries correctly when our new field Your Reference is modified.</p>
<div class="geshi no pascal">
<div class="head">TempReservEntry.SETRANGE(&#8220;Lot No.&#8221;); </div>
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// Late Binding</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">IF</span> ReservEngineMgt.<span class="me1">RetrieveLostReservQty</span><span class="br0">&#40;</span>LostReservQty<span class="br0">&#41;</span> <span class="kw1">THEN</span> <span class="kw1">BEGIN</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; TempItemTrackLineReserv := OldTrackingSpecification;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; TempItemTrackLineReserv.<span class="st0">&quot;Quantity (Base)&quot;</span> := LostReservQty * CurrentSignFactor;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; TempItemTrackLineReserv.<span class="me1">INSERT</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">END</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">OldTrackingSpecification.<span class="st0">&quot;Quantity (Base)&quot;</span> := QtyToAdd;</div>
</li>
<li class="li1">
<div class="de1">OldTrackingSpecification.<span class="st0">&quot;Warranty Date&quot;</span> := NewTrackingSpecification.<span class="st0">&quot;Warranty Date&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">OldTrackingSpecification.<span class="st0">&quot;Expiration Date&quot;</span> := NewTrackingSpecification.<span class="st0">&quot;Expiration Date&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">OldTrackingSpecification.<span class="me1">Description</span> := NewTrackingSpecification.<span class="me1">Description</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// &#8212; INSERT FOLLOWING LINE ++</span></div>
</li>
<li class="li1">
<div class="de1">OldTrackingSpecification.<span class="st0">&quot;Your Reference&quot;</span> := NewTrackingSpecification.<span class="st0">&quot;Your Reference&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">RegisterChange<span class="br0">&#40;</span>OldTrackingSpecification,OldTrackingSpecification,</div>
</li>
<li class="li1">
<div class="de1">ChangeType::Insert,<span class="kw1">NOT</span> IdenticalArray<span class="br0">&#91;</span><span class="nu0">2</span><span class="br0">&#93;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">END</span> <span class="kw1">ELSE</span> <span class="kw1">BEGIN</span></div>
</li>
<li class="li1">
<div class="de1">TempReservEntry.<span class="me1">SETRANGE</span><span class="br0">&#40;</span><span class="st0">&quot;Serial No.&quot;</span>,OldTrackingSpecification.<span class="st0">&quot;Serial No.&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">TempReservEntry.<span class="me1">SETRANGE</span><span class="br0">&#40;</span><span class="st0">&quot;Lot No.&quot;</span>,OldTrackingSpecification.<span class="st0">&quot;Lot No.&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">OldTrackingSpecification.<span class="st0">&quot;Serial No.&quot;</span> := <span class="st0">&#39;&#39;</span>;</div>
</li>
<li class="li1">
<div class="de1">OldTrackingSpecification.<span class="st0">&quot;Lot No.&quot;</span> := <span class="st0">&#39;&#39;</span>;</div>
</li>
<li class="li1">
<div class="de1">OldTrackingSpecification.<span class="st0">&quot;Warranty Date&quot;</span> := 0D;</div>
</li>
<li class="li1">
<div class="de1">OldTrackingSpecification.<span class="st0">&quot;Expiration Date&quot;</span> := 0D;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// &#8212; INSERT FOLLOWING LINE ++</span></div>
</li>
<li class="li1">
<div class="de1">OldTrackingSpecification.<span class="st0">&quot;Your Reference&quot;</span> := <span class="st0">&#39;&#39;</span>;</div>
</li>
<li class="li1">
<div class="de1">QtyToAdd :=</div>
</li>
</ol>
</div>
<h3>ModifyFieldsWithinFilter</h3>
<p>Lastly we need to add a line of code to the <em>ModifyFieldsWithinFilter</em> function:</p>
<div class="geshi no pascal">
<div class="head">// Used to ensure that field values that are common to a SN/Lot are copied to all entries.</div>
<ol>
<li class="li1">
<div class="de1"><span class="kw1">IF</span> ReservEntry1.<span class="me1">FIND</span><span class="br0">&#40;</span><span class="st0">&#39;-&#39;</span><span class="br0">&#41;</span> <span class="kw1">THEN</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">REPEAT</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; ReservEntry1.<span class="me1">Description</span> := TrackingSpecification.<span class="me1">Description</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; ReservEntry1.<span class="st0">&quot;Warranty Date&quot;</span> := TrackingSpecification.<span class="st0">&quot;Warranty Date&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; ReservEntry1.<span class="st0">&quot;Expiration Date&quot;</span> := TrackingSpecification.<span class="st0">&quot;Expiration Date&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; ReservEntry1.<span class="st0">&quot;New Serial No.&quot;</span> := TrackingSpecification.<span class="st0">&quot;New Serial No.&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; ReservEntry1.<span class="st0">&quot;New Lot No.&quot;</span> := TrackingSpecification.<span class="st0">&quot;New Lot No.&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; ReservEntry1.<span class="st0">&quot;New Expiration Date&quot;</span>:= TrackingSpecification.<span class="st0">&quot;New Expiration Date&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">// &#8212; INSERT FOLLOWING LINE ++</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; ReservEntry1.<span class="st0">&quot;Your Reference&quot;</span>:= TrackingSpecification.<span class="st0">&quot;Your Reference&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; ReservEntry1.<span class="me1">MODIFY</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">UNTIL</span> ReservEntry1.<span class="me1">NEXT</span> = <span class="nu0">0</span>;</div>
</li>
</ol>
</div>
<p>The new field should now be fully operational.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nextequalzero.com/2007/12/how-to-add-new-fields-to-the-item-tracking-lines-form/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Physical Inventory by Lot/Serial No. in Microsoft Dynamics NAV</title>
		<link>http://www.nextequalzero.com/2007/12/physical-inventory-by-lotserial/</link>
		<comments>http://www.nextequalzero.com/2007/12/physical-inventory-by-lotserial/#comments</comments>
		<pubDate>Mon, 10 Dec 2007 20:16:26 +0000</pubDate>
		<dc:creator>Ian Crocker</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Inventory]]></category>
		<category><![CDATA[Item Tracking]]></category>

		<guid isPermaLink="false">http://localhost:8888/nextequalzero/?p=22</guid>
		<description><![CDATA[If you or your client use item tracking to any degree then chances are that at some stage you will want to perform a stock take by lot/serial numbers.
In Dynamics NAV a stock take can be performed using a Physical Inventory Journal.
This journal can be automatically populated by running theCalculate Inventory function which gives a picture [...]]]></description>
			<content:encoded><![CDATA[<p>If you or your client use item tracking to any degree then chances are that at some stage you will want to perform a stock take by lot/serial numbers.</p>
<p>In Dynamics NAV a stock take can be performed using a Physical Inventory Journal.</p>
<p>This journal can be automatically populated by running the<em>Calculate Inventory</em> function which gives a picture of what NAV &#8220;thinks&#8221; the current stock situation is.</p>
<p>Warehouse staff can then perform the physical stock checks in the warehouse, feed any adjustments into the journal and finally post, the negative and positive adjustments hitting the item ledger.</p>
<p>What if we want to easily count stock by lot/serial no. and item track the physical inventory journal?</p>
<p>Or want to run the Calculate Inventory function by lot no./serial no.?</p>
<p><span id="more-18"></span></p>
<p><strong>Approach 1</strong></p>
<p>The first method is it utilise new functionality in NAV 5.00 which allows a breakdown by lot/serial to be shown on the <em>Phys. Inventory List</em> report.</p>
<p><a href="http://localhost:8888/nextequalzero/wp-content/uploads/2008/06/phys_inventory_list.png"><img class="alignnone size-full wp-image-24" title="phys_inventory_list" src="http://www.nextequalzero.com/wp-content/uploads/2008/06/phys_inventory_list.png" alt="" width="275" height="183" /></a></p>
<p>Warehouse staff can then use the list to record stock counts against each individual lot/serial.</p>
<p>Lot/serial tracked items on the journal can then be tracked using the physical counts recorded by the warehouse staff.</p>
<p>Users running versions prior to 5.00 should be able to port the <em>Show Serial/Lot</em> functionality at a reasonably low development cost.</p>
<p><strong>Approach 2</strong></p>
<p>Even with the ability to show Serial/lot information on the Physical Inventory List it may still be useful if you could somehow make the Calculate Inventory function lot/serial no. aware, allowing it to insert a new journal line for every item/lot/serial combination. </p>
<p>The following modifications show how this can be achieved.</p>
<p><strong>Inventory Journal Form</strong></p>
<p><strong><span style="font-weight: normal;">Add the <em>Lot No.</em> and <em>Serial No.</em> fields to the form:</span></strong></p>
<p><a href="http://localhost:8888/nextequalzero/wp-content/uploads/2008/06/physinventoryjournal_design.png"><img class="alignnone size-full wp-image-76" title="physinventoryjournal_design" src="http://www.nextequalzero.com/wp-content/uploads/2008/06/physinventoryjournal_design.png" alt="" width="375" height="242" /></a></p>
<p>Add a global variable of type Boolean called <em>ByLotSerial</em>:</p>
<p><a href="http://localhost:8888/nextequalzero/wp-content/uploads/2008/06/globals_bylotserial.png"><img class="alignnone size-full wp-image-77" title="globals_bylotserial" src="http://www.nextequalzero.com/wp-content/uploads/2008/06/globals_bylotserial.png" alt="" width="375" height="227" /></a></p>
<p>Add a check box to the request form:<br />
Set the <em>SourceExpr</em> to <em>ByLotSerial</em><br />
Set the caption to <em>By Lot No./Serial No.</em></p>
<p><a href="http://localhost:8888/nextequalzero/wp-content/uploads/2008/06/request_from.png"><img class="alignnone size-full wp-image-78" title="request_from" src="http://www.nextequalzero.com/wp-content/uploads/2008/06/request_from.png" alt="" width="375" height="202" /></a></p>
<p><strong>Report 790 &#8211; Calculate Inventory</strong></p>
<p>The following changes to various functions need to be made in the <em>Calculate Inventory</em> report.</p>
<p><strong>UpdateBuffer() Function</strong></p>
<p>Change the UpdateBuffer function so that it takes two additional parameters:</p>
<ul>
<li>LotNo [Code 20]</li>
<li>SerialNo [Code 20]</li>
</ul>
<p><a href="http://localhost:8888/nextequalzero/wp-content/uploads/2008/06/updatebuffer_locals.png"><img class="alignnone size-full wp-image-79" title="updatebuffer_locals" src="http://www.nextequalzero.com/wp-content/uploads/2008/06/updatebuffer_locals.png" alt="" width="375" height="215" /></a></p>
<p>Make changes to the code as follows:</p>
<div class="geshi no pascal">
<div class="head">WITH QuantityOnHandBuffer DO BEGIN</div>
<ol>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">IF</span> <span class="kw1">NOT</span> HasNewQuantity<span class="br0">&#40;</span>NewQuantity<span class="br0">&#41;</span> <span class="kw1">THEN</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; EXIT;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">IF</span> BinCode = <span class="st0">&#39;&#39;</span> <span class="kw1">THEN</span> <span class="kw1">BEGIN</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; TempDimBufIn.<span class="me1">SETRANGE</span><span class="br0">&#40;</span><span class="st0">&quot;Entry No.&quot;</span>,<span class="st0">&quot;Item Ledger Entry&quot;</span>.<span class="st0">&quot;Entry No.&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; DimEntryNo := DimBufMgt.<span class="me1">FindDimensions</span><span class="br0">&#40;</span>TempDimBufIn<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">IF</span> DimEntryNo = <span class="nu0">0</span> <span class="kw1">THEN</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; DimEntryNo := DimBufMgt.<span class="me1">InsertDimensions</span><span class="br0">&#40;</span>TempDimBufIn<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">END</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1">// &#8212; INSERT CODE &#8212; Begin</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">IF</span> ByLotSerial <span class="kw1">THEN</span> <span class="kw1">BEGIN</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; QuantityOnHandBuffer.<span class="me1">SETRANGE</span><span class="br0">&#40;</span><span class="st0">&quot;Lot No.&quot;</span>,LotNo<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; QuantityOnHandBuffer.<span class="me1">SETRANGE</span><span class="br0">&#40;</span><span class="st0">&quot;Serial No.&quot;</span>,SerialNo<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">END</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1">// ++ INSERT CODE ++ End</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// &nbsp;IF RetrieveBuffer(BinCode,DimEntryNo) THEN BEGIN // &#8212; REPLACE WITH LINE BELOW ++</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">IF</span> RetrieveBuffer<span class="br0">&#40;</span>BinCode,DimEntryNo,LotNo,SerialNo<span class="br0">&#41;</span> <span class="kw1">THEN</span> <span class="kw1">BEGIN</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; Quantity := Quantity + NewQuantity;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; MODIFY;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">END</span> <span class="kw1">ELSE</span> <span class="kw1">BEGIN</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; Quantity := NewQuantity;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; INSERT;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">END</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">END</span>;</div>
</li>
</ol>
</div>
<p><strong>RetrieveBuffer() Function</strong></p>
<p>Add two additional parameters:</p>
<ul>
<li>LotNo [Code 20]</li>
<li>SerialNo [Code 20]</li>
</ul>
<div><a href="http://localhost:8888/nextequalzero/wp-content/uploads/2008/06/retrievebuffer_locals.png"><img class="alignnone size-full wp-image-80" title="retrievebuffer_locals" src="http://www.nextequalzero.com/wp-content/uploads/2008/06/retrievebuffer_locals.png" alt="" width="375" height="211" /></a></div>
<div>Make changes to the code as follows:</div>
<div class="geshi no pascal">
<div class="head">WITH QuantityOnHandBuffer DO BEGIN</div>
<ol>
<li class="li1">
<div class="de1">&nbsp; RESET;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1">// &#8212; INSERT CODE &#8212; Begin</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">IF</span> ByLotSerial <span class="kw1">THEN</span> <span class="kw1">BEGIN</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; QuantityOnHandBuffer.<span class="me1">SETRANGE</span><span class="br0">&#40;</span><span class="st0">&quot;Lot No.&quot;</span>,<span class="st0">&quot;Item Ledger Entry&quot;</span>.<span class="st0">&quot;Lot No.&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; QuantityOnHandBuffer.<span class="me1">SETRANGE</span><span class="br0">&#40;</span><span class="st0">&quot;Serial No.&quot;</span>,<span class="st0">&quot;Item Ledger Entry&quot;</span>.<span class="st0">&quot;Serial No.&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">END</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1">// ++ INSERT CODE ++ End</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;Item No.&quot;</span> := <span class="st0">&quot;Item Ledger Entry&quot;</span>.<span class="st0">&quot;Item No.&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;Variant Code&quot;</span> := <span class="st0">&quot;Item Ledger Entry&quot;</span>.<span class="st0">&quot;Variant Code&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;Location Code&quot;</span> := <span class="st0">&quot;Item Ledger Entry&quot;</span>.<span class="st0">&quot;Location Code&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;Dimension Entry No.&quot;</span> := DimEntryNo;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;Bin Code&quot;</span> := BinCode;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1">// &#8212; INSERT CODE &#8212; Begin</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;Lot No.&quot;</span> := LotNo;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;Serial No.&quot;</span> := SerialNo;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1">// ++ INSERT CODE ++ End</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; EXIT<span class="br0">&#40;</span>FIND<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">END</span>;</div>
</li>
</ol>
</div>
<p><strong>ItemBinLocationIsCalculated()</strong></p>
<p>Make changes to the code as follows:</p>
<div class="geshi no pascal">
<div class="head">WITH QuantityOnHandBuffer DO BEGIN</div>
<ol>
<li class="li1">
<div class="de1">&nbsp; RESET;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; SETRANGE<span class="br0">&#40;</span><span class="st0">&quot;Item No.&quot;</span>,<span class="st0">&quot;Item Ledger Entry&quot;</span>.<span class="st0">&quot;Item No.&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; SETRANGE<span class="br0">&#40;</span><span class="st0">&quot;Variant Code&quot;</span>,<span class="st0">&quot;Item Ledger Entry&quot;</span>.<span class="st0">&quot;Variant Code&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; SETRANGE<span class="br0">&#40;</span><span class="st0">&quot;Location Code&quot;</span>,<span class="st0">&quot;Item Ledger Entry&quot;</span>.<span class="st0">&quot;Location Code&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1">// &#8212; INSERT CODE &#8212; Begin</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">IF</span> ByLotSerial <span class="kw1">THEN</span> <span class="kw1">BEGIN</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; SETRANGE<span class="br0">&#40;</span><span class="st0">&quot;Lot No.&quot;</span>,<span class="st0">&quot;Item Ledger Entry&quot;</span>.<span class="st0">&quot;Lot No.&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; SETRANGE<span class="br0">&#40;</span><span class="st0">&quot;Serial No.&quot;</span>,<span class="st0">&quot;Item Ledger Entry&quot;</span>.<span class="st0">&quot;Serial No.&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">END</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1">// &#8212; INSERT CODE &#8212; End</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; EXIT<span class="br0">&#40;</span>FIND<span class="br0">&#40;</span><span class="st0">&#39;-&#39;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">END</span>;</div>
</li>
</ol>
</div>
<p><strong>Item Ledger Entry &#8211; OnAfterGetRecord()</strong><br />
Make changes to the code as follows:</p>
<div class="geshi no pascal">
<div class="head">TransferDim(&#8220;Entry No.&#8221;);</div>
<ol>
<li class="li1">
<div class="de1"><span class="kw1">IF</span> <span class="kw1">NOT</span> <span class="st0">&quot;Drop Shipment&quot;</span> <span class="kw1">THEN</span> <span class="kw1">BEGIN</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; GetLocation<span class="br0">&#40;</span><span class="st0">&quot;Location Code&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; ByBin := Location.<span class="st0">&quot;Bin Mandatory&quot;</span> <span class="kw3">AND</span> <span class="kw1">NOT</span> Location.<span class="st0">&quot;Directed Put-away and Pick&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">END</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">IF</span> <span class="kw1">NOT</span> SkipCycleSKU<span class="br0">&#40;</span><span class="st0">&quot;Location Code&quot;</span>,<span class="st0">&quot;Item No.&quot;</span>,<span class="st0">&quot;Variant Code&quot;</span><span class="br0">&#41;</span> <span class="kw1">THEN</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">IF</span> ByBin <span class="kw1">THEN</span> <span class="kw1">BEGIN</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">IF</span> <span class="kw1">NOT</span> ItemBinLocationIsCalculated <span class="kw1">THEN</span> <span class="kw1">BEGIN</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; WhseEntry.<span class="me1">SETRANGE</span><span class="br0">&#40;</span><span class="st0">&quot;Item No.&quot;</span>,<span class="st0">&quot;Item No.&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; WhseEntry.<span class="me1">SETRANGE</span><span class="br0">&#40;</span><span class="st0">&quot;Location Code&quot;</span>,<span class="st0">&quot;Location Code&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; WhseEntry.<span class="me1">SETRANGE</span><span class="br0">&#40;</span><span class="st0">&quot;Variant Code&quot;</span>,<span class="st0">&quot;Variant Code&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="co1">// &#8212; INSERT CODE &#8212; Begin</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">IF</span> ByLotSerial <span class="kw1">THEN</span> <span class="kw1">BEGIN</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; WhseEntry.<span class="me1">SETRANGE</span><span class="br0">&#40;</span><span class="st0">&quot;Lot No.&quot;</span>,<span class="st0">&quot;Lot No.&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; WhseEntry.<span class="me1">SETRANGE</span><span class="br0">&#40;</span><span class="st0">&quot;Serial No.&quot;</span>,<span class="st0">&quot;Serial No.&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">END</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="co1">// ++ INSERT CODE ++ End</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">IF</span> WhseEntry.<span class="me1">FIND</span><span class="br0">&#40;</span><span class="st0">&#39;-&#39;</span><span class="br0">&#41;</span> <span class="kw1">THEN</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">REPEAT</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; WhseEntry.<span class="me1">SETRANGE</span><span class="br0">&#40;</span><span class="st0">&quot;Bin Code&quot;</span>,WhseEntry.<span class="st0">&quot;Bin Code&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; WhseEntry.<span class="me1">CALCSUMS</span><span class="br0">&#40;</span>Quantity<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;UpdateBuffer(WhseEntry.&quot;Bin Code&quot;,WhseEntry.Quantity); &nbsp;// &#8212; DELETE LINE</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// &#8212; INSERT CODE &#8212; Begin</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">IF</span> ByLotSerial <span class="kw1">THEN</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; UpdateBuffer<span class="br0">&#40;</span>WhseEntry.<span class="st0">&quot;Bin Code&quot;</span>,WhseEntry.<span class="me1">Quantity</span>,WhseEntry.<span class="st0">&quot;Lot No.&quot;</span>,WhseEntry.<span class="st0">&quot;Serial No.&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">ELSE</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; UpdateBuffer<span class="br0">&#40;</span>WhseEntry.<span class="st0">&quot;Bin Code&quot;</span>,WhseEntry.<span class="me1">Quantity</span>,<span class="st0">&#39;&#39;</span>,<span class="st0">&#39;&#39;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// &#8212; INSERT CODE&#8211; End</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; WhseEntry.<span class="me1">FIND</span><span class="br0">&#40;</span><span class="st0">&#39;+&#39;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Item.<span class="me1">COPYFILTER</span><span class="br0">&#40;</span><span class="st0">&quot;Bin Filter&quot;</span>,WhseEntry.<span class="st0">&quot;Bin Code&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">UNTIL</span> WhseEntry.<span class="me1">NEXT</span> = <span class="nu0">0</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">END</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">END</span> <span class="kw1">ELSE</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// &nbsp; &nbsp;UpdateBuffer(&#39;&#39;,Quantity); // &#8212; DELETE LINE</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">// &#8212; INSERT CODE &#8212; Begin</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">IF</span> ByLotSerial <span class="kw1">THEN</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; UpdateBuffer<span class="br0">&#40;</span><span class="st0">&#39;&#39;</span>,Quantity,<span class="st0">&quot;Lot No.&quot;</span>,<span class="st0">&quot;Serial No.&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">ELSE</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; UpdateBuffer<span class="br0">&#40;</span><span class="st0">&#39;&#39;</span>,Quantity,<span class="st0">&#39;&#39;</span>,<span class="st0">&#39;&#39;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">// &#8212; INSERT CODE &#8212; End</span></div>
</li>
</ol>
</div>
<p><strong>InsertItemJnlLine</strong><br />
Change the InsertItemJnlLine function so that it takes two additional parameters:</p>
<ol>
<li>LotNo2 [Code 20]</li>
<li>SerialNo2 [Code 20]</li>
</ol>
<div><a href="http://localhost:8888/nextequalzero/wp-content/uploads/2008/06/insertitemjnlline_locals.png"><img class="alignnone size-full wp-image-81" title="insertitemjnlline_locals" src="http://www.nextequalzero.com/wp-content/uploads/2008/06/insertitemjnlline_locals.png" alt="" width="375" height="215" /></a>        </p>
<p>Change the code in this functions as follows:</p>
<div class="geshi no pascal">
<div class="head">..</div>
<ol>
<li class="li1">
<div class="de1">..</div>
</li>
<li class="li1">
<div class="de1"><span class="me1">ItemLedgEntry</span>.<span class="me1">RESET</span>;</div>
</li>
<li class="li1">
<div class="de1">ItemLedgEntry.<span class="me1">SETCURRENTKEY</span><span class="br0">&#40;</span><span class="st0">&quot;Item No.&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">ItemLedgEntry.<span class="me1">SETRANGE</span><span class="br0">&#40;</span><span class="st0">&quot;Item No.&quot;</span>,ItemNo<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">IF</span> ItemLedgEntry.<span class="me1">FIND</span><span class="br0">&#40;</span><span class="st0">&#39;+&#39;</span><span class="br0">&#41;</span> <span class="kw1">THEN</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;Last Item Ledger Entry No.&quot;</span> := ItemLedgEntry.<span class="st0">&quot;Entry No.&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">ELSE</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;Last Item Ledger Entry No.&quot;</span> := <span class="nu0">0</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// &#8212; INSERT CODE &#8212; Begin</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">IF</span> <span class="br0">&#40;</span>Quantity2 &amp;lt;&amp;gt; <span class="nu0">0</span><span class="br0">&#41;</span> <span class="kw3">AND</span> ByLotSerial <span class="kw1">THEN</span> <span class="kw1">BEGIN</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;Lot No.&quot;</span> := LotNo2;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;Serial No.&quot;</span> := SerialNo2;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">END</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// &#8212; INSERT CODE &#8212; End</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">INSERT<span class="br0">&#40;</span><span class="kw2">TRUE</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">..</div>
</li>
<li class="li1">
<div class="de1">..</div>
</li>
</ol>
</div>
<p> <br />
Change the three calls to InsertItemJnlLine found in the OnPostDataItem() trigger of the Item Ledger Entry data item:</p>
<p>Old code:</p>
<div class="geshi no pascal">
<div class="head">InsertItemJnlLine(</div>
<ol>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;Item No.&quot;</span>,<span class="st0">&quot;Variant Code&quot;</span>,<span class="st0">&quot;Dimension Entry No.&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;Bin Code&quot;</span>,Quantity,PosQty<span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>New code:</p>
<div class="geshi no pascal">
<div class="head">InsertItemJnlLine(</div>
<ol>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;Item No.&quot;</span>,<span class="st0">&quot;Variant Code&quot;</span>,<span class="st0">&quot;Dimension Entry No.&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&quot;Bin Code&quot;</span>,Quantity,PosQty,<span class="st0">&quot;Lot No.&quot;</span>,<span class="st0">&quot;Serial No.&quot;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p><strong>Calculate Inventory</strong><br />
Running the newly modified Calculate Inventory function will produce a new journal line per item/lot no. as shown:</p>
<p><a href="http://localhost:8888/nextequalzero/wp-content/uploads/2008/06/calculateinventorybylot.png"><img class="alignnone size-full wp-image-82" title="calculateinventorybylot" src="http://www.nextequalzero.com/wp-content/uploads/2008/06/calculateinventorybylot.png" alt="" width="475" height="269" /></a></p>
<p> </p>
<p>The <em>Qty. (Phys. Inventory)</em> field can then be completed for each line as normal.</p>
<p>We now need a function which will iterate through the journal lines adding the required tracking.</p>
<p>The <em>ApplyTrackingLines</em> function below shows how this may be coded, in the example, hanging from the Phys. Inventory Journal form:</p>
<p><a href="http://localhost:8888/nextequalzero/wp-content/uploads/2008/06/applyitemtrackinglines.png"><img class="alignnone size-full wp-image-83" title="applyitemtrackinglines" src="http://www.nextequalzero.com/wp-content/uploads/2008/06/applyitemtrackinglines.png" alt="" width="475" height="314" /></a></p>
<div class="geshi no pascal">
<div class="head">ApplyTrackingLines()</div>
<ol>
<li class="li1">
<div class="de1"><span class="kw1">IF</span> <span class="kw1">NOT</span> CONFIRM<span class="br0">&#40;</span>Text67200,<span class="kw2">FALSE</span><span class="br0">&#41;</span> <span class="kw1">THEN</span> EXIT;</div>
</li>
<li class="li1">
<div class="de1">WITH ItemJnlLine <span class="kw1">DO</span> <span class="kw1">BEGIN</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; RESET;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; SETRANGE<span class="br0">&#40;</span><span class="st0">&quot;Journal Template Name&quot;</span>,Rec.<span class="st0">&quot;Journal Template Name&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; SETRANGE<span class="br0">&#40;</span><span class="st0">&quot;Journal Batch Name&quot;</span>,Rec.<span class="st0">&quot;Journal Batch Name&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">IF</span> FIND<span class="br0">&#40;</span><span class="st0">&#39;-&#39;</span><span class="br0">&#41;</span> <span class="kw1">THEN</span> <span class="kw1">BEGIN</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">IF</span> ReservationEntry.<span class="me1">FIND</span><span class="br0">&#40;</span><span class="st0">&#39;+&#39;</span><span class="br0">&#41;</span> <span class="kw1">THEN</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; EntryNo := ReservationEntry.<span class="st0">&quot;Entry No.&quot;</span> + <span class="nu0">1</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">ELSE</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; EntryNo := <span class="nu0">1</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; Window.<span class="me1">OPEN</span><span class="br0">&#40;</span>Text67203<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">REPEAT</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">IF</span> <span class="br0">&#40;</span><span class="st0">&quot;Lot No.&quot;</span> &amp;lt;&amp;gt; <span class="st0">&#39;&#39;</span><span class="br0">&#41;</span> <span class="kw3">AND</span> <span class="br0">&#40;</span>Quantity &amp;lt;&amp;gt; <span class="nu0">0</span><span class="br0">&#41;</span> <span class="kw1">THEN</span> <span class="kw1">BEGIN</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; ReservationEntry.<span class="me1">INIT</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; ReservationEntry.<span class="st0">&quot;Entry No.&quot;</span> := EntryNo;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; ReservationEntry.<span class="me1">Positive</span> := <span class="br0">&#40;</span>ItemJnlLine.<span class="st0">&quot;Entry Type&quot;</span> = ItemJnlLine.<span class="st0">&quot;Entry Type&quot;</span>::<span class="st0">&quot;Positive Adjmt.&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; ReservationEntry.<span class="me1">VALIDATE</span><span class="br0">&#40;</span><span class="st0">&quot;Item No.&quot;</span>,<span class="st0">&quot;Item No.&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; ReservationEntry.<span class="st0">&quot;Location Code&quot;</span> := <span class="st0">&quot;Location Code&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">IF</span> <span class="st0">&quot;Qty. (Phys. Inventory)&quot;</span> &amp;lt; <span class="st0">&quot;Qty. (Calculated)&quot;</span> <span class="kw1">THEN</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ReservationEntry.<span class="me1">VALIDATE</span><span class="br0">&#40;</span><span class="st0">&quot;Quantity (Base)&quot;</span>,-Quantity<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">ELSE</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ReservationEntry.<span class="me1">VALIDATE</span><span class="br0">&#40;</span><span class="st0">&quot;Quantity (Base)&quot;</span>,Quantity<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; ReservationEntry.<span class="st0">&quot;Reservation Status&quot;</span> := ReservationEntry.<span class="st0">&quot;Reservation Status&quot;</span>::Prospect;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; ReservationEntry.<span class="st0">&quot;Creation Date&quot;</span> := WORKDATE;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; ReservationEntry.<span class="st0">&quot;Source Type&quot;</span> := DATABASE::<span class="st0">&quot;Item Journal Line&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; ReservationEntry.<span class="st0">&quot;Source Subtype&quot;</span> := <span class="st0">&quot;Entry Type&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; ReservationEntry.<span class="st0">&quot;Source ID&quot;</span> := <span class="st0">&quot;Journal Template Name&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; ReservationEntry.<span class="st0">&quot;Source Batch Name&quot;</span> := <span class="st0">&quot;Journal Batch Name&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; ReservationEntry.<span class="st0">&quot;Source Ref. No.&quot;</span> := <span class="st0">&quot;Line No.&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; ReservationEntry.<span class="st0">&quot;Shipment Date&quot;</span> := WORKDATE;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; ReservationEntry.<span class="st0">&quot;Qty. per Unit of Measure&quot;</span> := <span class="st0">&quot;Qty. per Unit of Measure&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; ReservationEntry.<span class="st0">&quot;Lot No.&quot;</span> := <span class="st0">&quot;Lot No.&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; ReservationEntry.<span class="st0">&quot;Serial No.&quot;</span> := <span class="st0">&quot;Serial No.&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; ReservationEntry.<span class="me1">INSERT</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; EntryNo += <span class="nu0">1</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">IF</span> <span class="st0">&quot;Serial No.&quot;</span> &amp;lt;&amp;gt; <span class="st0">&#39;&#39;</span> <span class="kw1">THEN</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Window.<span class="me1">UPDATE</span><span class="br0">&#40;</span><span class="nu0">1</span>,<span class="st0">&quot;Serial No.&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">ELSE</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Window.<span class="me1">UPDATE</span><span class="br0">&#40;</span><span class="nu0">1</span>,<span class="st0">&quot;Lot No.&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">END</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">UNTIL</span> NEXT = <span class="nu0">0</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">END</span> <span class="kw1">ELSE</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; ERROR<span class="br0">&#40;</span>Text67201<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">END</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">MESSAGE<span class="br0">&#40;</span>Text67202<span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>Posting<br />
As the Lot No. and Serial No. on the item journal line are legacy fields used prior to Item Tracking, there is code within the Item Jnl.-Post Line codeunit (22) which checks these fields are blank.<br />
We need to bypass these checks for our purposes and so allow the journal to be posted.</p>
<p>Change the SetupSplitJnlLine function as follows:</p>
<div class="geshi no pascal">
<div class="head">IF (NOT ItemJnlLine2.Correction OR IsServUndoConsumption) AND</div>
<ol>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#40;</span>ItemJnlLine2.<span class="st0">&quot;Quantity (Base)&quot;</span> &amp;lt;&amp;gt; <span class="nu0">0</span><span class="br0">&#41;</span> <span class="kw3">AND</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; ItemTrackingMgt.<span class="me1">RetrieveItemTracking</span><span class="br0">&#40;</span>ItemJnlLine2,TempTrackingSpecification<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">THEN</span> <span class="kw1">BEGIN</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">IF</span> DisableItemTracking <span class="kw1">THEN</span> <span class="kw1">BEGIN</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">IF</span> <span class="kw1">NOT</span> TempTrackingSpecification.<span class="me1">ISEMPTY</span> <span class="kw1">THEN</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; ERROR<span class="br0">&#40;</span>Text021,ItemJnlLine2.<span class="me1">FIELDCAPTION</span><span class="br0">&#40;</span><span class="st0">&quot;Operation No.&quot;</span><span class="br0">&#41;</span>,ItemJnlLine2.<span class="st0">&quot;Operation No.&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">END</span> <span class="kw1">ELSE</span> <span class="kw1">BEGIN</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">IF</span> TempTrackingSpecification.<span class="me1">ISEMPTY</span> <span class="kw1">THEN</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; ERROR<span class="br0">&#40;</span>Text100<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">IF</span> <span class="kw1">NOT</span> ItemJnlLine2.<span class="st0">&quot;Phys. Inventory&quot;</span> <span class="kw1">THEN</span> <span class="kw1">BEGIN</span> <span class="co1">// &#8212; INSERT LINE ++</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; ItemJnlLine2.<span class="me1">TESTFIELD</span><span class="br0">&#40;</span>ItemJnlLine2.<span class="st0">&quot;Serial No.&quot;</span>,<span class="st0">&#39;&#39;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; ItemJnlLine2.<span class="me1">TESTFIELD</span><span class="br0">&#40;</span>ItemJnlLine2.<span class="st0">&quot;Lot No.&quot;</span>,<span class="st0">&#39;&#39;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">END</span>; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// &#8212; INSERT LINE ++</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; ItemJnlLine2.<span class="me1">TESTFIELD</span><span class="br0">&#40;</span>ItemJnlLine2.<span class="st0">&quot;New Serial No.&quot;</span>,<span class="st0">&#39;&#39;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; ItemJnlLine2.<span class="me1">TESTFIELD</span><span class="br0">&#40;</span>ItemJnlLine2.<span class="st0">&quot;New Lot No.&quot;</span>,<span class="st0">&#39;&#39;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.nextequalzero.com/2007/12/physical-inventory-by-lotserial/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>How to Add Lot/SN Info. to Documents in Dynamics NAV 5.00</title>
		<link>http://www.nextequalzero.com/2007/11/how-to-add-lotsn-info-to-documents-in-dynamics-nav-500/</link>
		<comments>http://www.nextequalzero.com/2007/11/how-to-add-lotsn-info-to-documents-in-dynamics-nav-500/#comments</comments>
		<pubDate>Sat, 10 Nov 2007 14:54:15 +0000</pubDate>
		<dc:creator>Ian Crocker</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Item Tracking]]></category>
		<category><![CDATA[Reporting]]></category>

		<guid isPermaLink="false">http://localhost:8888/nextequalzero/?p=25</guid>
		<description><![CDATA[Up until the release of Dynamics NAV 5.00, the application suffered slightly from a lack of any standard way to show tracking information on sales, purchase and warehouse documents.
Microsoft have now started to remedy this situation to a certain degree.
Look at the Sales Shipment report (208) in a Cronus database. Sitting at the bottom of [...]]]></description>
			<content:encoded><![CDATA[<p>Up until the release of Dynamics NAV 5.00, the application suffered slightly from a lack of any standard way to show tracking information on sales, purchase and warehouse documents.</p>
<p>Microsoft have now started to remedy this situation to a certain degree.</p>
<p>Look at the Sales Shipment report (208) in a Cronus database. Sitting at the bottom of the Options tab is a check box called <strong>Show Serial/Lot No. Appendix</strong>. Ticking this option will print an appendix page giving a breakdown of the lot/serial information associated with the shipment.</p>
<p><a href="http://localhost:8888/nextequalzero/wp-content/uploads/2008/06/report208.jpg"><img class="alignnone size-medium wp-image-26" title="report208" src="http://www.nextequalzero.com/wp-content/uploads/2008/06/report208-300x191.jpg" alt="" width="300" height="191" /></a></p>
<p>The appendix page hasn&#8217;t been applied to <em>all</em> appropriate reports though, so it still leaves some work for us to do&#8230;</p>
<p>The following example shows how you can add the appendix page to to any Document type report, using the Purchase Receipt Report (408) to illustrate.</p>
<p> </p>
<p> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.nextequalzero.com/2007/11/how-to-add-lotsn-info-to-documents-in-dynamics-nav-500/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to Send an XMLHTTP Request in Dynamics NAV</title>
		<link>http://www.nextequalzero.com/2007/09/how-to-send-an-xmlhttp-request-in-dynamics-nav/</link>
		<comments>http://www.nextequalzero.com/2007/09/how-to-send-an-xmlhttp-request-in-dynamics-nav/#comments</comments>
		<pubDate>Sat, 08 Sep 2007 07:33:11 +0000</pubDate>
		<dc:creator>Ian Crocker</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[XMLHttp]]></category>

		<guid isPermaLink="false">http://localhost:8888/nextequalzero/?p=37</guid>
		<description><![CDATA[Should you ever have the need to get a response from a web page and handle that response in Dynamics NAV, you could do this by sending an XMLHTTP request to the page then processing the response text as required.
For this purpose we&#8217;ll define a variable which points to the Microsoft XML automation server and the XMLHTTP [...]]]></description>
			<content:encoded><![CDATA[<p>Should you ever have the need to get a response from a web page and handle that response in Dynamics NAV, you could do this by sending an <a title="What is XMLHTTP?" href="http://en.wikipedia.org/wiki/XMLHttpRequest" target="window">XMLHTTP</a> request to the page then processing the response text as required.</p>
<p>For this purpose we&#8217;ll define a variable which points to the Microsoft XML automation server and the XMLHTTP class:</p>
<p><code><strong>'Microsoft XML, v6.0'.XMLHTTP</strong></code></p>
<p>The C/AL required will be as follows:</p>
<p>Create the Automation object:</p>
<div class="geshi no pascal">
<ol>
<li class="li1">
<div class="de1">CREATE<span class="br0">&#40;</span>xmlHTTP<span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>Define the reqest:</p>
<div class="geshi no pascal">
<ol>
<li class="li1">
<div class="de1">Request := <span class="st0">&#39;http://www.revolution1210.com/search.asp?s=xmlhttp&#39;</span>;</div>
</li>
</ol>
</div>
<p>Send the request:</p>
<div class="geshi no pascal">
<ol>
<li class="li1">
<div class="de1">xmlHTTP.<span class="me1">open</span><span class="br0">&#40;</span><span class="st0">&#39;GET&#39;</span>,Request,<span class="kw2">TRUE</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">xmlHTTP.<span class="me1">send</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>Process the response:</p>
<div class="geshi no pascal">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">IF</span> xmlHTTP.<span class="me1">readyState</span> = <span class="nu0">4</span> <span class="kw1">THEN</span> <span class="kw1">BEGIN</span></div>
</li>
<li class="li1">
<div class="de1">  MESSAGE<span class="br0">&#40;</span>xmlHTTP.<span class="me1">responseText</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">END</span>;</div>
</li>
</ol>
</div>
<p>In the simplified example above, the ASP page called <code>search.asp</code> is responsible for generating the response.</p>
<p>The XML automation server will pass a request to this page then retrieve a response via the<code>responseText</code> which can then be processed as required.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nextequalzero.com/2007/09/how-to-send-an-xmlhttp-request-in-dynamics-nav/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Using CuteFTPs COM interface in Microsoft Dynamics NAV</title>
		<link>http://www.nextequalzero.com/2007/08/using-cuteftps-com-interface-in-microsoft-dynamics-nav/</link>
		<comments>http://www.nextequalzero.com/2007/08/using-cuteftps-com-interface-in-microsoft-dynamics-nav/#comments</comments>
		<pubDate>Wed, 01 Aug 2007 20:49:38 +0000</pubDate>
		<dc:creator>Ian Crocker</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[FTP]]></category>
		<category><![CDATA[Interfacing]]></category>

		<guid isPermaLink="false">http://localhost:8888/nextequalzero/?p=39</guid>
		<description><![CDATA[CuteFTP is a popular FTP client application by GlobalSCAPE.
This articles demonstartes how to access and use CuteFTP&#8217;s transfer engine from within Microsoft Dynamics NAV to upload, rename and delete files on a remote ftp server. It&#8217;s slighlty more refined than the somewhat Heath Robinson approach required to use the in built windows ftp client described in an earlier article.

To follow the [...]]]></description>
			<content:encoded><![CDATA[<p>CuteFTP is a popular <a title="what is FTP?" href="http://en.wikipedia.org/wiki/File_transfer_protocol" target="window">FTP</a> client application by <a title="GlobalSCAPE" href="http://www.globalscape.com/" target="window">GlobalSCAPE</a>.</p>
<p>This articles demonstartes how to access and use CuteFTP&#8217;s transfer engine from within Microsoft Dynamics NAV to upload, rename and delete files on a remote ftp server. It&#8217;s slighlty more refined than the somewhat <a title="who or what is Heath Robinson?" href="http://en.wikipedia.org/wiki/Heath_Robinson" target="window">Heath Robinson</a> approach required to use the in built windows ftp client <a title="How to perform an unattended FTP upload from Dynamics NAV" href="http://www.nextequalzero.com/2007/06/unattended-ftp-upload-from-dynamics-nav">described in an earlier article</a>.</p>
<p><span id="more-11"></span></p>
<p>To follow the examples you&#8217;ll need to install either CuteFTP Home or CuteFTP Professional, both of which are <a title="download CuteFTP" href="http://www.globalscape.com/downloads/" target="window">available for download</a> from the GlobalSCAPE website as 30-day trial versions.</p>
<p>We&#8217;ll place all the required functions in a new codeunit called <code>FTPManagement</code> which can then be called as and when required.</p>
<p>The first step after creating the new codeunit is to add a reference to the CuteFTP COM interface by defining a global variable of type <code>Automation</code> with a subtype of <code>'CuteFTPPro 8.0 Type Library'.TEConnection</code>.</p>
<p><strong>The SetHost function</strong></p>
<p>This function sets the hostname and logon credentials. These are passed in via three parameters,<code>NewHostname, NewLogin, NewPassword</code>. </p>
<p>The second line, <code>Hostname := NewHostname;</code> assigns the NewHostname parameter to a global variable called <code>Hostname</code> so we can reference it outside the scope of this function for error messages.</p>
<p>The third line, <code>CuteFTP.Option('ThrowError',0);</code> is included so that we can trap and handle any errors from within NAV.</p>
<div class="geshi no pascal">
<ol>
<li class="li1">
<div class="de1">SetHost<span class="br0">&#40;</span>NewHostname : Text<span class="br0">&#91;</span><span class="nu0">80</span><span class="br0">&#93;</span>;NewLogin : Text<span class="br0">&#91;</span><span class="nu0">80</span><span class="br0">&#93;</span>;NewPassword : Text<span class="br0">&#91;</span><span class="nu0">80</span><span class="br0">&#93;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">CREATE<span class="br0">&#40;</span>CuteFTP<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">Hostname := NewHostname;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">CuteFTP.<span class="me1">Option</span><span class="br0">&#40;</span><span class="st0">&#39;ThrowError&#39;</span>,<span class="nu0">0</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">CuteFTP.<span class="me1">Host</span> := NewHostname;</div>
</li>
<li class="li1">
<div class="de1">CuteFTP.<span class="me1">Login</span> := NewLogin;</div>
</li>
<li class="li1">
<div class="de1">CuteFTP.<span class="me1">Password</span> := NewPassword;</div>
</li>
</ol>
</div>
<p><strong>The UploadFile function</strong></p>
<p>This function uploads a local file to a remote ftp host and takes two parameters, LocalFilename and RemoteFilename.</p>
<p>An error will be thrown if the local file cannot be found. The text constant for the error, Text001 should read: Unable to find local file &#8216;%1&#8242;.</p>
<div class="geshi no pascal">
<ol>
<li class="li1">
<div class="de1">UploadFile<span class="br0">&#40;</span>LocalFilename : Text<span class="br0">&#91;</span><span class="nu0">250</span><span class="br0">&#93;</span>;RemoteFilename : Text<span class="br0">&#91;</span><span class="nu0">250</span><span class="br0">&#93;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">IF</span> CuteFTP.<span class="me1">LocalExists</span><span class="br0">&#40;</span>LocalFilename<span class="br0">&#41;</span> &amp;lt;&amp;gt; <span class="nu0">0</span> <span class="kw1">THEN</span> <span class="kw1">BEGIN</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; Connect;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; CuteFTP.<span class="me1">Upload</span><span class="br0">&#40;</span>RemoteFilename,LocalFilename<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; Close;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">END</span> <span class="kw1">ELSE</span> <span class="kw1">BEGIN</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; Close;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; ERROR<span class="br0">&#40;</span>Text001,LocalFilename<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">END</span>;</div>
</li>
</ol>
</div>
<p><strong>The DeleteFile function</strong></p>
<div class="geshi no pascal">
<ol>
<li class="li1">
<div class="de1">DeleteFile<span class="br0">&#40;</span>RemoteFilename : Text<span class="br0">&#91;</span><span class="nu0">250</span><span class="br0">&#93;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">Connect;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">IF</span> CuteFTP.<span class="me1">RemoteExists</span><span class="br0">&#40;</span>RemoteFilename<span class="br0">&#41;</span> &amp;lt;&amp;gt; <span class="nu0">0</span> <span class="kw1">THEN</span> <span class="kw1">BEGIN</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; CuteFTP.<span class="me1">RemoteRemove</span><span class="br0">&#40;</span>RemoteFilename<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; Close;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">END</span> <span class="kw1">ELSE</span> <span class="kw1">BEGIN</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; Close;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; ERROR<span class="br0">&#40;</span>Text002,RemoteFilename<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">END</span>;&amp;gt;</div>
</li>
</ol>
</div>
<p><strong>The RenameFile function</strong></p>
<p>This function renames a remote file specified in the FromFilename paramter to the name specified in the ToFilename paramter.</p>
<p>An error will be thrown if the remote file cannot be found.</p>
<div class="geshi no pascal">
<ol>
<li class="li1">
<div class="de1">RenameFile<span class="br0">&#40;</span>FromFilename : Text<span class="br0">&#91;</span><span class="nu0">250</span><span class="br0">&#93;</span>;ToFilename : Text<span class="br0">&#91;</span><span class="nu0">250</span><span class="br0">&#93;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">Connect;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">IF</span> CuteFTP.<span class="me1">RemoteExists</span><span class="br0">&#40;</span>FromFilename<span class="br0">&#41;</span> &amp;lt;&amp;gt; <span class="nu0">0</span> <span class="kw1">THEN</span> <span class="kw1">BEGIN</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; CuteFTP.<span class="me1">RemoteRename</span><span class="br0">&#40;</span>FromFilename,ToFilename<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; Close;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">END</span> <span class="kw1">ELSE</span> <span class="kw1">BEGIN</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; Close;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; ERROR<span class="br0">&#40;</span>Text002,FromFilename<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">END</span>;</div>
</li>
</ol>
</div>
<p><strong>The Close function</strong></p>
<p>This function disconnects from the host.</p>
<div class="geshi no pascal">
<ol>
<li class="li1">
<div class="de1">Close<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">CuteFTP.<span class="me1">Disconnect</span>;</div>
</li>
<li class="li1">
<div class="de1">CuteFTP.<span class="me1">Close</span>;</div>
</li>
</ol>
</div>
<p><strong>Calling the functions</strong></p>
<p>Function calls to the <code>FTPManagement</code> codeunit can now be made as follows: </p>
<p>To upload a file:<br />
<code>FTPManagement.SetHost('ftp.example.com','username','password');</code><br />
<code>FTPManagement.UploadFile('c:\localfilename.txt','remotefilename.txt');</code></p>
<p>To delete a remote file:<br />
<code>FTPManagement.SetHost('ftp.example.com','username','password');</code><br />
<code>FTPManagement.DeleteFile('test.txt');</code></p>
<p>To rename a remote file:<br />
<code>FTPManagement.SetHost('ftp.example.com','username','password');</code><br />
<code>FTPManagement.RenameFile('oldfilename.txt','newfilename.txt');</code></p>
<p>The codeunit can be expanded to include download functionality, upload folders with multiple files etc.</p>
<p>For further information on the transfer engine <a href="http://www.globalscape.com/support/pro.aspx">download the user guide</a> which includes a chapter on the SDK.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nextequalzero.com/2007/08/using-cuteftps-com-interface-in-microsoft-dynamics-nav/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>How to apply field-level security in Microsoft Dynamics NAV</title>
		<link>http://www.nextequalzero.com/2007/06/field-level-security-in-microsoft-dynamics-nav/</link>
		<comments>http://www.nextequalzero.com/2007/06/field-level-security-in-microsoft-dynamics-nav/#comments</comments>
		<pubDate>Sun, 10 Jun 2007 14:19:30 +0000</pubDate>
		<dc:creator>Ian Crocker</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://localhost:8888/nextequalzero/?p=63</guid>
		<description><![CDATA[The use of field-level security in Dynamics NAV is something which is not yet possible as a standard front-end feature, but is possible to achieve by use of Roles, a small function and a line of code behind the field to be controlled.

Make sure the ALL security role has Read permissions to Table Data 2000000003 Member Of
Create a new Role [...]]]></description>
			<content:encoded><![CDATA[<p>The use of field-level security in Dynamics NAV is something which is not yet possible as a standard front-end feature, but is possible to achieve by use of Roles, a small function and a line of code behind the field to be controlled.</p>
<ol>
<li>Make sure the <strong>ALL</strong> security role has <strong>Read</strong> permissions to <strong>Table Data 2000000003 Member Of</strong></li>
<li>Create a new Role to control access to the field(s). In this example I&#8217;m going to control access to the Unit Price field on the Item, so i&#8217;ve created a role called <strong>ITEM-UNITPRICE</strong>.</li>
<li>Create a new Codeunit called <strong>FieldLevelSecurityManagement</strong> and a function called<strong>CheckFieldPermission</strong></li>
<li>In the table where the field(s) to be controlled are located, create a global variable calledFieldLevelSecurityManagement<span style="font-weight: normal;"> which points to the </span><strong><span style="font-weight: normal;">FieldLevelSecurityManagement </span></strong><span style="font-weight: normal;">codeunit created above.</span></li>
</ol>
<p>Now any user which hasn&#8217;t been granted specific permission to the <strong>Unit Price </strong>field will receive an error if they attempt to modify it.</p>
<p>fig 1.</p>
<pre lang="pascal>CheckFieldPermission(RoleID : Code[20])
IF NOT (MemberOf.GET(USERID,'SUPER','') OR
  MemberOf.GET(USERID,'SUPER',COMPANYNAME) ) THEN BEGIN

    IF ( NOT (MemberOf.GET(USERID,RoleID,'') OR MemberOf.GET(USERID,RoleID,COMPANYNAME))) OR
      (NOT MemberOf.READPERMISSION ) THEN
        ERROR(Text000);
END;</pre>
<p>123</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nextequalzero.com/2007/06/field-level-security-in-microsoft-dynamics-nav/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Codeunit 416 Datetime Mgt. removed in Dynamics NAV 5.0</title>
		<link>http://www.nextequalzero.com/2007/06/codeunit-416-datetime-mgt-removed-in-dynamics-nav-50/</link>
		<comments>http://www.nextequalzero.com/2007/06/codeunit-416-datetime-mgt-removed-in-dynamics-nav-50/#comments</comments>
		<pubDate>Tue, 05 Jun 2007 17:55:40 +0000</pubDate>
		<dc:creator>Ian Crocker</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Date-Time]]></category>

		<guid isPermaLink="false">http://localhost:8888/nextequalzero/?p=65</guid>
		<description><![CDATA[Codeunit 416 Datetime Mgt. which contained functions to handle conversions to and from Date-Time type fields has been removed.
The inbuilt C/AL functions of CREATETIME, DT2TIME and DT2DATE should now be used instead.
These functions have been around for some time but with the NAV 5.0 release MS have streamlined the codebase by removing this codeunit and [...]]]></description>
			<content:encoded><![CDATA[<p>Codeunit 416 Datetime Mgt. which contained functions to handle conversions to and from Date-Time type fields has been removed.</p>
<p>The inbuilt C/AL functions of CREATETIME, DT2TIME and DT2DATE should now be used instead.</p>
<p>These functions have been around for some time but with the NAV 5.0 release MS have streamlined the codebase by removing this codeunit and changing the references to it.</p>
<p>Any bespoke code which references this defunct codeunit will also need to be changed.</p>
<p><span id="more-8"></span><strong>Examples:</strong></p>
<p>Old code: <code>"Starting Date-Time" := DatetimeMgt.Datetime("Starting Date","Starting Time")</code></p>
<p>New code: <code>"Starting Date-Time" := CREATEDATETIME("Starting Date","Starting Time");</code></p>
<p> <br />
Old code: <code>DatetimeMgt.Datetime2Time("Starting Date-Time");</code></p>
<p>New code: <code>DT2TIME("Starting Date-Time");</code></p>
<p> </p>
<p>Old code: <code>DatetimeMgt.Datetime2Date("Starting Date-Time");</code></p>
<p>New code: <code>DT2DATE("Starting Date-Time");</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.nextequalzero.com/2007/06/codeunit-416-datetime-mgt-removed-in-dynamics-nav-50/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to perform an unattended FTP upload from Dynamics NAV</title>
		<link>http://www.nextequalzero.com/2007/06/unattended-ftp-upload-from-dynamics-nav/</link>
		<comments>http://www.nextequalzero.com/2007/06/unattended-ftp-upload-from-dynamics-nav/#comments</comments>
		<pubDate>Sat, 02 Jun 2007 19:39:55 +0000</pubDate>
		<dc:creator>Ian Crocker</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[FTP]]></category>
		<category><![CDATA[Interfacing]]></category>
		<category><![CDATA[Scripting]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://localhost:8888/nextequalzero/?p=70</guid>
		<description><![CDATA[There are a number of ways in which an FTP upload can be achieved in Dynamics NAV.
This article focuses on a neat way of utilising the in-built Windows FTP client.
It is achieved by generating a batch file from within NAV which is then launched and in turn writes an unattended script file which is then [...]]]></description>
			<content:encoded><![CDATA[<p>There are a number of ways in which an FTP upload can be achieved in Dynamics NAV.</p>
<p>This article focuses on a neat way of utilising the in-built Windows FTP client.</p>
<p>It is achieved by generating a batch file from within NAV which is then launched and in turn writes an unattended script file which is then passed to the ftp command using the -s switch. All files are written on the fly in the temporary folder on the local machine and are gracefully cleaned up afterwards.</p>
<p><span id="more-7"></span></p>
<p>The full piece of code looks like this:</p>
<div class="geshi no pascal">
<ol>
<li class="li1">
<div class="de1"><span class="co1">// Get handle on a temporary filename</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//</span></div>
</li>
<li class="li1">
<div class="de1">TextFile.<span class="me1">CREATETEMPFILE</span>;</div>
</li>
<li class="li1">
<div class="de1">Filename := TextFile.<span class="kw1">NAME</span> + <span class="st0">&#39;.bat&#39;</span>;</div>
</li>
<li class="li1">
<div class="de1">TextFile.<span class="me1">CLOSE</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// Create the file and set textmode ready for writing</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//</span></div>
</li>
<li class="li1">
<div class="de1">TextFile.<span class="me1">CREATE</span><span class="br0">&#40;</span>Filename<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">TextFile.<span class="me1">TEXTMODE</span><span class="br0">&#40;</span><span class="kw2">TRUE</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// Write the batch file and then close</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//</span></div>
</li>
<li class="li1">
<div class="de1">TextFile.<span class="kw3">WRITE</span><span class="br0">&#40;</span><span class="st0">&#39;@ECHO OFF&#39;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">TextFile.<span class="kw3">WRITE</span><span class="br0">&#40;</span><span class="st0">&#39;&amp;gt; script.ftp ECHO open ftp.hostname.com&#39;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">TextFile.<span class="kw3">WRITE</span><span class="br0">&#40;</span><span class="st0">&#39;&amp;gt;&amp;gt;script.ftp ECHO USER username&#39;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">TextFile.<span class="kw3">WRITE</span><span class="br0">&#40;</span><span class="st0">&#39;&amp;gt;&amp;gt;script.ftp ECHO password&#39;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">TextFile.<span class="kw3">WRITE</span><span class="br0">&#40;</span><span class="st0">&#39;&amp;gt;&amp;gt;script.ftp ECHO Send c:<span class="es0">\f</span>ile.txt&#39;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">TextFile.<span class="kw3">WRITE</span><span class="br0">&#40;</span><span class="st0">&#39;&amp;gt;&amp;gt;script.ftp ECHO Bye&#39;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">TextFile.<span class="kw3">WRITE</span><span class="br0">&#40;</span><span class="st0">&#39;FTP -s:script.ftp -n ftp.hostname.com&#39;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">TextFile.<span class="kw3">WRITE</span><span class="br0">&#40;</span><span class="st0">&#39;TYPE NUL &amp;gt;script.ftp&#39;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">TextFile.<span class="kw3">WRITE</span><span class="br0">&#40;</span><span class="st0">&#39;DEL script.ftp&#39;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">TextFile.<span class="kw3">WRITE</span><span class="br0">&#40;</span><span class="st0">&#39;:retry_del&#39;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">TextFile.<span class="kw3">WRITE</span><span class="br0">&#40;</span><span class="st0">&#39;DEL &quot;&#39;</span> + Filename + <span class="st0">&#39;&quot; &amp;gt; NUL&#39;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">TextFile.<span class="kw3">WRITE</span><span class="br0">&#40;</span><span class="st0">&#39;if exist &quot;&#39;</span> + Filename + <span class="st0">&#39;&quot; goto retry_del&#39;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">TextFile.<span class="me1">CLOSE</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// Launch the batch file</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//</span></div>
</li>
<li class="li1">
<div class="de1">NAVShell<span class="br0">&#40;</span><span class="st0">&#39;&quot;&#39;</span> + Filename + <span class="st0">&#39;&quot;&#39;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<div class="geshi no pascal">
<ol>
<li class="li1">
<div class="de1">NAVShell<span class="br0">&#40;</span>CommandLine : Text<span class="br0">&#91;</span><span class="nu0">1024</span><span class="br0">&#93;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">CREATE<span class="br0">&#40;</span>WshShell<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">WshShell.<span class="me1">Run</span><span class="br0">&#40;</span>CommandLine<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">CLEAR<span class="br0">&#40;</span>WshShell<span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>First thing to notice is that I&#8217;ve hard-coded the connection and filename details which are written out to the batch file. This is simply for illustrative purposes. In a production environment they would probably be pulled from a Setup table.</p>
<p>Also, the batch file is not launched using the SHELL command as might be expected. Instead a function which invokes the Windows Script Host Object Model is used. This is to prevent the warning messages which appear in Dynamics NAV when attempting to launch an executable or batch file from the command line for the first time. And as the batch file will have a different name each time the code is triggered, we want to stop this dialog popping up.</p>
<p>You can read more about the NAVShell function itself here</p>
<p>The batch file when generated by NAV will look something like this:</p>
<p><code>@ECHO OFF<br />
&gt; script.ftp ECHO open ftp.hostname.com<br />
&gt;&gt;script.ftp ECHO USER username<br />
&gt;&gt;script.ftp ECHO password<br />
&gt;&gt;script.ftp ECHO Send c:\file.txt<br />
&gt;&gt;script.ftp ECHO Bye<br />
FTP -s:script.ftp -n ftp.hostname.com<br />
TYPE NUL &gt;script.ftp<br />
DEL script.ftp<br />
:retry_del<br />
DEL "C:\Documents and Settings\[username]\Local Settings\Temp\__TEMP__.O@3.bat" &gt; NUL<br />
if exist "C:\Documents and Settings\[username]\Local Settings\Temp\__TEMP__.O@3.bat" goto retry_del</code></p>
<p>When launched, the batch performs the following tasks:</p>
<ol>
<li>Generates an unattended script file on the fly</li>
<li>Launches the ftp command passing in the script file with the -s switch</li>
<li>Deletes the script file (script.ftp)</li>
<li>Deletes itself (the .bat file)</li>
</ol>
<div>
<p>As usernames and passwords are stored in the clear in the script.ftp and batch files, both are deleted when the ftp process has completed.</p>
<p>The above example uploads one file to the ftp host address. It can however be adapted to work for both uploads and downloads, and to handle multiple file transfers if required. This is simply a case of adding the required ftp functions to the batch file which is written by NAV.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.nextequalzero.com/2007/06/unattended-ftp-upload-from-dynamics-nav/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>How to use Windows Script Host Object Model instead of SHELL</title>
		<link>http://www.nextequalzero.com/2007/06/how-to-use-windows-script-host-object-model-instead-of-shell/</link>
		<comments>http://www.nextequalzero.com/2007/06/how-to-use-windows-script-host-object-model-instead-of-shell/#comments</comments>
		<pubDate>Sat, 02 Jun 2007 08:43:24 +0000</pubDate>
		<dc:creator>Ian Crocker</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Shell]]></category>

		<guid isPermaLink="false">http://localhost:8888/nextequalzero/?p=75</guid>
		<description><![CDATA[Sometimes the SHELL command in Dynamics NAV doesn&#8217;t always work as we would like in every situation.
In such a case the Windows Script Host Object Model and it&#8217;s WshShell class may be an alternative method of running command line statements.
To build the function:

Create a function called NAVShell which takes a Text parameter of 1024. This will be used to [...]]]></description>
			<content:encoded><![CDATA[<p>Sometimes the SHELL command in Dynamics NAV doesn&#8217;t always work as we would like in every situation.</p>
<p>In such a case the <a title="Windows Script Host Object Model" href="http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/wsh_objectmodel.mspx?mfr=true" target="window">Windows Script Host Object Model</a> and it&#8217;s WshShell class may be an alternative method of running command line statements.</p>
<p>To build the function:</p>
<ol>
<li>Create a function called <strong><code>NAVShell</code></strong> which takes a Text parameter of 1024. This will be used to pass in the command line.</li>
<li>Create a local variable called <strong>WshShell</strong> with a type of <strong>Automation</strong> and <strong>Subtype</strong> of <strong>&#8216;Windows Script Host Object Model&#8217;.WshShell</strong></li>
</ol>
<div>Enter the following code in the new function:</div>
<div>
<div><strong>NAVShell(CommandLine : Text[1024])</strong></div>
<div>CREATE(WshShell);</div>
<div>WshShell.Run(CommandLine);</div>
<div>CLEAR(WshShell);</div>
</div>
<div>We can now call the function as in the following example which launches notepad:</div>
<div>NAVShell(&#8216;notepad.exe&#8217;);</div>
]]></content:encoded>
			<wfw:commentRss>http://www.nextequalzero.com/2007/06/how-to-use-windows-script-host-object-model-instead-of-shell/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
