This commit is contained in:
JeremyVyska 2021-12-05 21:23:42 +00:00
parent b46ee5b225
commit e9d640d50a
164 changed files with 12201 additions and 3918 deletions

View file

@ -5,16 +5,16 @@
<meta name=generator content="Hugo 0.89.4">
<meta name=description content>
<title>Feature Localization For Data Structures :: AL Guidelines</title>
<link href=/css/nucleus.css?1638662727 rel=stylesheet>
<link href=/css/fontawesome-all.min.css?1638662727 rel=stylesheet>
<link href=/css/featherlight.min.css?1638662727 rel=stylesheet>
<link href=/css/perfect-scrollbar.min.css?1638662727 rel=stylesheet>
<link href=/css/auto-complete.css?1638662727 rel=stylesheet>
<link href=/css/theme.css?1638662727 rel=stylesheet>
<link href=/css/theme-blue.css?1638662727 rel=stylesheet>
<link href=/css/variant.css?1638662727 rel=stylesheet>
<link href=/css/print.css?1638662727 rel=stylesheet media=print>
<script src=/js/jquery.min.js?1638662727></script>
<link href=/css/nucleus.css?1638739417 rel=stylesheet>
<link href=/css/fontawesome-all.min.css?1638739417 rel=stylesheet>
<link href=/css/featherlight.min.css?1638739417 rel=stylesheet>
<link href=/css/perfect-scrollbar.min.css?1638739417 rel=stylesheet>
<link href=/css/auto-complete.css?1638739417 rel=stylesheet>
<link href=/css/theme.css?1638739417 rel=stylesheet>
<link href=/css/theme-blue.css?1638739417 rel=stylesheet>
<link href=/css/variant.css?1638739417 rel=stylesheet>
<link href=/css/print.css?1638739417 rel=stylesheet media=print>
<script src=/js/jquery.min.js?1638739417></script>
<style>:root #header+#content>#left>#rlblock_left{display:none!important}</style>
</head>
<body data-url=/navpatterns/1-patterns/feature-localization-for-data-structures/>
@ -32,9 +32,9 @@ ALGuidelines.Dev
<input data-search-input id=search-by type=search placeholder=Search...>
<span data-search-clear><i class="fas fa-times"></i></span>
</div>
<script src=/js/lunr.min.js?1638662727></script>
<script src=/js/auto-complete.js?1638662727></script>
<script src=/js/search.js?1638662727></script>
<script src=/js/lunr.min.js?1638739417></script>
<script src=/js/auto-complete.js?1638739417></script>
<script src=/js/search.js?1638739417></script>
</div>
<div class=highlightable>
<ul class=topics>
@ -57,7 +57,7 @@ ALGuidelines.Dev
<li data-nav-id=/navpatterns/1-patterns/creating-custom-charts/ title="Creating Custom Charts" class=dd-item><a href=/navpatterns/1-patterns/creating-custom-charts/>Creating Custom Charts</a></li>
<li data-nav-id=/navpatterns/1-patterns/cross-session-events/ title="Cross Session Events" class=dd-item><a href=/navpatterns/1-patterns/cross-session-events/>Cross Session Events</a></li>
<li data-nav-id=/navpatterns/1-patterns/currently-active-record/ title="Currently Active Record" class=dd-item><a href=/navpatterns/1-patterns/currently-active-record/>Currently Active Record</a></li>
<li data-nav-id=/navpatterns/1-patterns/data-migration-facade/ title="Data Migration Facade" class=dd-item><a href=/navpatterns/1-patterns/data-migration-facade/>Data Migration Facade</a></li>
<li data-nav-id=/navpatterns/1-patterns/data-migration-facade/ title="Data Migration Façade" class=dd-item><a href=/navpatterns/1-patterns/data-migration-facade/>Data Migration Façade</a></li>
<li data-nav-id=/navpatterns/1-patterns/discovery-event/ title="Discovery Event" class=dd-item><a href=/navpatterns/1-patterns/discovery-event/>Discovery Event</a></li>
<li data-nav-id=/navpatterns/1-patterns/document/ title=Document class=dd-item><a href=/navpatterns/1-patterns/document/>Document</a></li>
<li data-nav-id=/navpatterns/1-patterns/easy-update-of-setup-or-supplementary-information/ title="Easy Update Of Setup Or Supplementary Information" class=dd-item><a href=/navpatterns/1-patterns/easy-update-of-setup-or-supplementary-information/>Easy Update Of Setup Or Supplementary Information</a></li>
@ -85,12 +85,17 @@ ALGuidelines.Dev
<li data-nav-id=/navpatterns/1-patterns/product-name/ title="Product Name" class=dd-item><a href=/navpatterns/1-patterns/product-name/>Product Name</a></li>
<li data-nav-id=/navpatterns/1-patterns/queries/ title=Queries class=dd-item><a href=/navpatterns/1-patterns/queries/>Queries</a><ul>
<li data-nav-id=/navpatterns/1-patterns/queries/select-distinct-with-queries/ title="SELECT DISTINCT with Queries" class=dd-item><a href=/navpatterns/1-patterns/queries/select-distinct-with-queries/>SELECT DISTINCT with Queries</a></li>
<li data-nav-id=/navpatterns/1-patterns/queries/use-queries-to-detect-duplicate-records/ title="use Queries to Detect Duplicate Records" class=dd-item><a href=/navpatterns/1-patterns/queries/use-queries-to-detect-duplicate-records/>use Queries to Detect Duplicate Records</a></li>
<li data-nav-id=/navpatterns/1-patterns/queries/use-queries-to-detect-duplicate-records/ title="Use Queries to Detect Duplicate Records" class=dd-item><a href=/navpatterns/1-patterns/queries/use-queries-to-detect-duplicate-records/>Use Queries to Detect Duplicate Records</a></li>
<li data-nav-id=/navpatterns/1-patterns/queries/use-queries-to-replace-nested-loops/ title="Use Queries to Replace Nested Loops" class=dd-item><a href=/navpatterns/1-patterns/queries/use-queries-to-replace-nested-loops/>Use Queries to Replace Nested Loops</a></li></ul></li>
<li data-nav-id=/navpatterns/1-patterns/read-once-initialization-and-validation/ title="Read-once Initialization and Validation" class=dd-item><a href=/navpatterns/1-patterns/read-once-initialization-and-validation/>Read-once Initialization and Validation</a></li>
<li data-nav-id=/navpatterns/1-patterns/released-entity/ title="Released Entity" class=dd-item><a href=/navpatterns/1-patterns/released-entity/>Released Entity</a></li>
<li data-nav-id=/navpatterns/1-patterns/report-selection/ title="Report Selection" class=dd-item><a href=/navpatterns/1-patterns/report-selection/>Report Selection</a></li>
<li data-nav-id=/navpatterns/1-patterns/security/ title=Security class=dd-item><a href=/navpatterns/1-patterns/security/>Security</a></li>
<li data-nav-id=/navpatterns/1-patterns/security/ title=Security class=dd-item><a href=/navpatterns/1-patterns/security/>Security</a><ul>
<li data-nav-id=/navpatterns/1-patterns/security/1-sensitive-data-encapsulation/ title="Sensitive Data Encapsulation" class=dd-item><a href=/navpatterns/1-patterns/security/1-sensitive-data-encapsulation/>Sensitive Data Encapsulation</a></li>
<li data-nav-id=/navpatterns/1-patterns/security/2-data-encryption/ title="Data Encryption" class=dd-item><a href=/navpatterns/1-patterns/security/2-data-encryption/>Data Encryption</a></li>
<li data-nav-id=/navpatterns/1-patterns/security/3-single-point-of-access/ title="Single Point of Access" class=dd-item><a href=/navpatterns/1-patterns/security/3-single-point-of-access/>Single Point of Access</a></li>
<li data-nav-id=/navpatterns/1-patterns/security/4-masked-text/ title="Masked Text" class=dd-item><a href=/navpatterns/1-patterns/security/4-masked-text/>Masked Text</a></li>
<li data-nav-id=/navpatterns/1-patterns/security/5-ssl-in-nav/ title="SSL in NAV" class=dd-item><a href=/navpatterns/1-patterns/security/5-ssl-in-nav/>SSL in NAV</a></li></ul></li>
<li data-nav-id=/navpatterns/1-patterns/setup-specificity-fallback/ title="Setup Specificity Fallback" class=dd-item><a href=/navpatterns/1-patterns/setup-specificity-fallback/>Setup Specificity Fallback</a></li>
<li data-nav-id=/navpatterns/1-patterns/silent-file-upload-and-download/ title="Silent File Upload and Download" class=dd-item><a href=/navpatterns/1-patterns/silent-file-upload-and-download/>Silent File Upload and Download</a></li>
<li data-nav-id=/navpatterns/1-patterns/singleton/ title=Singleton class=dd-item><a href=/navpatterns/1-patterns/singleton/>Singleton</a><ul>
@ -107,8 +112,22 @@ ALGuidelines.Dev
<li data-nav-id=/navpatterns/2-anti-patterns/nav-upgrade/ title="Nav Upgrade" class=dd-item><a href=/navpatterns/2-anti-patterns/nav-upgrade/>Nav Upgrade</a></li>
<li data-nav-id=/navpatterns/2-anti-patterns/reusable-bugs/ title="Reusable Bugs" class=dd-item><a href=/navpatterns/2-anti-patterns/reusable-bugs/>Reusable Bugs</a></li></ul></li>
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/ title="3. CAL Coding Guidelines" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/>3. CAL Coding Guidelines</a><ul>
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/design/ title=Design class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/design/>Design</a></li>
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/internally-used-dot-net-types/ title="Internally-used DotNet Types" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/internally-used-dot-net-types/>Internally-used DotNet Types</a></li>
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/design/ title=Design class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/design/>Design</a><ul>
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/design/by-reference-parameters/ title="By Reference Parameters" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/design/by-reference-parameters/>By Reference Parameters</a></li>
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/design/class-coupling/ title="Class Coupling" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/design/class-coupling/>Class Coupling</a></li>
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/design/cyclomatic-complexity/ title="Cyclomatic Complexity" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/design/cyclomatic-complexity/>Cyclomatic Complexity</a></li>
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/design/encapsulate-local-functionality/ title="Encapsulate Local Functionality" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/design/encapsulate-local-functionality/>Encapsulate Local Functionality</a></li>
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/design/findset-findfirst-findlast/ title="FINDSET FINDFIRST FINDLAST" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/design/findset-findfirst-findlast/>FINDSET FINDFIRST FINDLAST</a></li>
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/design/initialized-variables/ title="Initialized Variables" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/design/initialized-variables/>Initialized Variables</a></li>
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/design/maintainability-index/ title="Maintainability Index" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/design/maintainability-index/>Maintainability Index</a></li>
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/design/parameter-placeholders/ title="Parameter Placeholders" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/design/parameter-placeholders/>Parameter Placeholders</a></li>
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/design/static-object-invocation/ title="Static Object Invocation" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/design/static-object-invocation/>Static Object Invocation</a></li>
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/design/unreachable-code/ title="Unreachable Code" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/design/unreachable-code/>Unreachable Code</a></li>
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/design/unused-initialized-variables/ title="Unused Initialized Variables" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/design/unused-initialized-variables/>Unused Initialized Variables</a></li>
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/design/unused-variables/ title="Unused Variables" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/design/unused-variables/>Unused Variables</a></li>
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/design/variable-capacity-mismatch/ title="Variable Capacity Mismatch" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/design/variable-capacity-mismatch/>Variable Capacity Mismatch</a></li>
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/design/with-scope-name-collision/ title="WITH Scope Name Collision" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/design/with-scope-name-collision/>WITH Scope Name Collision</a></li></ul></li>
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/internally-used-dot-net-types/ title="Internally used DotNet Types" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/internally-used-dot-net-types/>Internally used DotNet Types</a></li>
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/internationalization/ title=Internationalization class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/internationalization/>Internationalization</a><ul>
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/internationalization/using-calcdate/ title="Using Calcdate" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/internationalization/using-calcdate/>Using Calcdate</a></li></ul></li>
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/localizability/ title=Localizability class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/localizability/>Localizability</a><ul>
@ -121,7 +140,7 @@ ALGuidelines.Dev
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/readability/begin-as-an-afterword/ title="Begin as an 'After Word'" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/readability/begin-as-an-afterword/>Begin as an 'After Word'</a></li>
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/readability/begin-end/ title="Begin-End - Compound Only" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/readability/begin-end/>Begin-End - Compound Only</a></li>
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/readability/binary-operator-line-start/ title="Binary Operator to Start Line" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/readability/binary-operator-line-start/>Binary Operator to Start Line</a></li>
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/readability/blank-lines/ title="Blank Lines.md" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/readability/blank-lines/>Blank Lines.md</a></li>
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/readability/blank-lines/ title="Blank Lines" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/readability/blank-lines/>Blank Lines</a></li>
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/readability/case-actions/ title="CASE Action" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/readability/case-actions/>CASE Action</a></li>
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/readability/colon-usage-in-case/ title="Colon usage in CASE" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/readability/colon-usage-in-case/>Colon usage in CASE</a></li>
<li data-nav-id=/navpatterns/3-cal-coding-guidelines/readability/comments-curly-brackets/ title="Comments inside Curly Brackets" class=dd-item><a href=/navpatterns/3-cal-coding-guidelines/readability/comments-curly-brackets/>Comments inside Curly Brackets</a></li>
@ -270,22 +289,36 @@ ALGuidelines.Dev
<p><strong>Note:</strong> CT = Credit Transfers, pain = payments initiation (the XML format used for SEPA Credit Transfers and SEPA Direct Debit).</p>
<p>The key question is: Where to tap into this flow when using a local data structure. For this purpose, a proxy codeunit has been added in W1, called 1222 &ndash; SEPA CT-Prepare Source. This codeunit feeds the client (XML1000) data in a standard format (the interface is the Gen. Journal Line table (81)).</p>
<p>In W1, the codeunit simply outputs the same set of general journal lines that it receives as an input:</p>
<p>OnRun(VAR Rec : Record &ldquo;Gen. Journal Line&rdquo;)</p>
<p>GenJnlLine.COPYFILTERS(Rec);</p>
<p>CopyJnlLines(GenJnlLine,Rec);</p>
<p>LOCAL CopyJnlLines(VAR FromGenJnlLine : Record &ldquo;Gen. Journal Line&rdquo;;VAR TempGenJnlLine : TEMPORARY Record &ldquo;Gen. Journal Line&rdquo;)</p>
<p>IF FromGenJnlLine.FINDSET THEN BEGIN</p>
<p>GenJnlBatch.GET(FromGenJnlLine.&ldquo;Journal Template Name&rdquo;,FromGenJnlLine.&ldquo;Journal Batch Name&rdquo;);</p>
<p>REPEAT</p>
<p>TempGenJnlLine := FromGenJnlLine;</p>
<p>TempGenJnlLine.INSERT;</p>
<p>UNTIL FromGenJnlLine.NEXT = 0</p>
<p>END ELSE</p>
<p>CreateTempJnlLines(FromGenJnlLine,TempGenJnlLine);</p>
<p>LOCAL CreateTempJnlLines(VAR FromGenJnlLine : Record &ldquo;Gen. Journal Line&rdquo;;VAR TempGenJnlLine : TEMPORARY Record &ldquo;Gen. Journal Line&rdquo;)</p>
<p>// To fill TempGenJnlLine from the source identified by filters set on FromGenJnlLine</p>
<p>TempGenJnlLine := FromGenJnlLine;</p>
<p>In a country, such as Italy, the codeunit will have the following functions:</p>
<div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-AL data-lang=AL>OnRun<span style=color:#f92672>(</span><span style=color:#66d9ef>VAR</span> Rec : <span style=color:#66d9ef>Record</span> &#34;Gen. Journal Line&#34;<span style=color:#f92672>)
</span><span style=color:#f92672>
</span><span style=color:#f92672></span>GenJnlLine<span style=color:#f92672>.</span>COPYFILTERS<span style=color:#f92672>(</span>Rec<span style=color:#f92672>)</span>;
CopyJnlLines<span style=color:#f92672>(</span>GenJnlLine,Rec<span style=color:#f92672>)</span>;
<span style=color:#66d9ef>LOCAL</span> CopyJnlLines<span style=color:#f92672>(</span><span style=color:#66d9ef>VAR</span> FromGenJnlLine : <span style=color:#66d9ef>Record</span> &#34;Gen. Journal Line&#34;;<span style=color:#66d9ef>VAR</span> TempGenJnlLine : <span style=color:#66d9ef>TEMPORARY</span> <span style=color:#66d9ef>Record</span> &#34;Gen. Journal Line&#34;<span style=color:#f92672>)
</span><span style=color:#f92672>
</span><span style=color:#f92672></span><span style=color:#66d9ef>IF</span> FromGenJnlLine<span style=color:#f92672>.</span>FINDSET <span style=color:#66d9ef>THEN</span> <span style=color:#66d9ef>BEGIN</span>
GenJnlBatch<span style=color:#f92672>.</span>GET<span style=color:#f92672>(</span>FromGenJnlLine<span style=color:#f92672>.</span>&#34;Journal Template Name&#34;,FromGenJnlLine<span style=color:#f92672>.</span>&#34;Journal Batch Name&#34;<span style=color:#f92672>)</span>;
<span style=color:#66d9ef>REPEAT</span>
TempGenJnlLine <span style=color:#f92672>:=</span> FromGenJnlLine;
TempGenJnlLine<span style=color:#f92672>.</span>INSERT;
<span style=color:#66d9ef>UNTIL</span> FromGenJnlLine<span style=color:#f92672>.</span>NEXT = <span style=color:#ae81ff>0</span>
<span style=color:#66d9ef>END</span> <span style=color:#66d9ef>ELSE</span>
CreateTempJnlLines<span style=color:#f92672>(</span>FromGenJnlLine,TempGenJnlLine<span style=color:#f92672>)</span>;
<span style=color:#66d9ef>LOCAL</span> CreateTempJnlLines<span style=color:#f92672>(</span><span style=color:#66d9ef>VAR</span> FromGenJnlLine : <span style=color:#66d9ef>Record</span> &#34;Gen. Journal Line&#34;;<span style=color:#66d9ef>VAR</span> TempGenJnlLine : <span style=color:#66d9ef>TEMPORARY</span> <span style=color:#66d9ef>Record</span> &#34;Gen. Journal Line&#34;<span style=color:#f92672>)
</span><span style=color:#f92672>
</span><span style=color:#f92672></span><span style=color:#75715e>// To fill TempGenJnlLine from the source identified by filters set on FromGenJnlLine
</span><span style=color:#75715e></span>
TempGenJnlLine <span style=color:#f92672>:=</span> FromGenJnlLine;
</code></pre></div><p>In a country, such as Italy, the codeunit will have the following functions:</p>
<ol>
<li>
<p>Gets an empty set of general journal lines that carry the local payment document key as a filter on the Document No. field (as opposed to W1 that gets the real set of records to be exported). This is done so that the local data can be extracted at runtime.</p>
@ -300,67 +333,126 @@ ALGuidelines.Dev
<p>Outputs the temporary general journal lines that will be further processed and exported, exactly as in W1.</p>
</li>
</ol>
<p>OnRun(VAR Rec : Record &ldquo;Gen. Journal Line&rdquo;)</p>
<p>GenJnlLine.COPYFILTERS(Rec);</p>
<p>CopyJnlLines(GenJnlLine,Rec);</p>
<p>LOCAL CopyJnlLines(VAR FromGenJnlLine : Record &ldquo;Gen. Journal Line&rdquo;;VAR TempGenJnlLine : TEMPORARY Record &ldquo;Gen. Journal Line&rdquo;)</p>
<p>IF FromGenJnlLine.FINDSET THEN BEGIN</p>
<p>GenJnlBatch.GET(FromGenJnlLine.&ldquo;Journal Template Name&rdquo;,FromGenJnlLine.&ldquo;Journal Batch Name&rdquo;);</p>
<p>REPEAT</p>
<p>TempGenJnlLine := FromGenJnlLine;</p>
<p>TempGenJnlLine.INSERT;</p>
<p>UNTIL FromGenJnlLine.NEXT = 0</p>
<p>END ELSE</p>
<p>CreateTempJnlLines(FromGenJnlLine,TempGenJnlLine);</p>
<p>LOCAL CreateTempJnlLines(VAR FromGenJnlLine : Record &ldquo;Gen. Journal Line&rdquo;;VAR TempGenJnlLine : TEMPORARY Record &ldquo;Gen. Journal Line&rdquo;)</p>
<p>PaymentDocNo := FromGenJnlLine.GETFILTER(&ldquo;Document No.");</p>
<p>VendorBillHeader.GET(PaymentDocNo);</p>
<p>VendorBillLine.RESET;</p>
<p>VendorBillLine.SETCURRENTKEY(&ldquo;Vendor Bill List No.&rdquo;,&ldquo;Vendor No.&rdquo;,&ldquo;Due Date&rdquo;,&ldquo;Vendor Bank Acc. No.&rdquo;,&ldquo;Cumulative Transfers&rdquo;);</p>
<p>VendorBillLine.SETRANGE(&ldquo;Vendor Bill List No.",VendorBillHeader.&ldquo;No.");</p>
<p>VendorBillLine.SETRANGE(&ldquo;Cumulative Transfers&rdquo;,TRUE);</p>
<p>IF VendorBillLine.FINDSET THEN BEGIN</p>
<p>CumulativeAmount := 0;</p>
<p>PrevVendorBillLine := VendorBillLine;</p>
<p>REPEAT</p>
<p>VendorBillLine.TESTFIELD(&ldquo;Document Type&rdquo;,VendorBillLine.&ldquo;Document Type&rdquo;::Invoice);</p>
<p>IF ((VendorBillLine.&ldquo;Vendor No.&rdquo; &lt;> PrevVendorBillLine.&ldquo;Vendor No.") OR (VendorBillLine.&ldquo;Vendor Bank Acc. No.&rdquo; &lt;> PrevVendorBillLine.&ldquo;Vendor Bank Acc. No.")) THEN BEGIN InsertTempGenJnlLine(TempGenJnlLine,VendorBillHeader,PrevVendorBillLine,CumulativeAmount);</p>
<p>CumulativeAmount := VendorBillLine.&ldquo;Amount to Pay&rdquo;;</p>
<p>END ELSE</p>
<p>CumulativeAmount += VendorBillLine.&ldquo;Amount to Pay&rdquo;;</p>
<p>PrevVendorBillLine := VendorBillLine;</p>
<p>UNTIL VendorBillLine.NEXT = 0; InsertTempGenJnlLine(TempGenJnlLine,VendorBillHeader,PrevVendorBillLine,CumulativeAmount);</p>
<p>END;</p>
<p>VendorBillLine.SETRANGE(&ldquo;Cumulative Transfers&rdquo;,FALSE);</p>
<p>IF VendorBillLine.FINDSET THEN</p>
<p>REPEAT</p>
<p>VendorBillLine.TESTFIELD(&ldquo;Document Type&rdquo;,VendorBillLine.&ldquo;Document Type&rdquo;::Invoice); InsertTempGenJnlLine(TempGenJnlLine,VendorBillHeader,VendorBillLine,VendorBillLine.&ldquo;Amount to Pay&rdquo;);</p>
<p>UNTIL VendorBillLine.NEXT = 0;</p>
<p>LOCAL InsertTempGenJnlLine(VAR TempGenJnlLine : TEMPORARY Record &ldquo;Gen. Journal Line&rdquo;;VendorBillHeader : Record &ldquo;Vendor Bill Header&rdquo;;VendorBillLine : Record &ldquo;Vendor Bill Line&rdquo;;AmountToPay : Decimal)</p>
<p>WITH TempGenJnlLine DO BEGIN</p>
<p>INIT;</p>
<p>&ldquo;Journal Template Name&rdquo; := &lsquo;';</p>
<p>&ldquo;Journal Batch Name&rdquo; := &lsquo;';</p>
<p>&ldquo;Document Type&rdquo; := &ldquo;Document Type&rdquo;::Payment;</p>
<p>&ldquo;Document No.&rdquo; := VendorBillLine.&ldquo;Vendor Bill List No.";</p>
<p>&ldquo;Line No.&rdquo; := VendorBillLine.&ldquo;Line No.";</p>
<p>&ldquo;Account No.&rdquo; := VendorBillLine.&ldquo;Vendor No.";</p>
<p>&ldquo;Account Type&rdquo; := TempGenJnlLine.&ldquo;Account Type&rdquo;::Vendor;</p>
<p>&ldquo;Bal. Account Type&rdquo; := TempGenJnlLine.&ldquo;Bal. Account Type&rdquo;::&ldquo;Bank Account&rdquo;;</p>
<p>&ldquo;Bal. Account No.&rdquo; := VendorBillHeader.&ldquo;Bank Account No.";</p>
<p>&ldquo;Applies-to Ext. Doc. No.&rdquo; := VendorBillLine.&ldquo;External Document No.";</p>
<p>Amount := AmountToPay;</p>
<p>&ldquo;Applies-to Doc. Type&rdquo; := VendorBillLine.&ldquo;Document Type&rdquo;;</p>
<p>&ldquo;Applies-to Doc. No.&rdquo; := VendorBillLine.&ldquo;Document No.";</p>
<p>&ldquo;Currency Code&rdquo; := VendorBillHeader.&ldquo;Currency Code&rdquo;;</p>
<p>&ldquo;Due Date&rdquo; := VendorBillLine.&ldquo;Due Date&rdquo;;</p>
<p>&ldquo;Posting Date&rdquo; := VendorBillHeader.&ldquo;Posting Date&rdquo;;</p>
<p>&ldquo;Recipient Bank Account&rdquo; := VendorBillLine.&ldquo;Vendor Bank Acc. No.";</p>
<p>Description := VendorBillLine.Description;</p>
<p>&ldquo;Message to Recipient&rdquo; := VendorBillLine.&ldquo;Description 2&rdquo;;</p>
<p>INSERT;</p>
<p>END;</p>
<p>The derived local feature flow is as follows:</p>
<div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-AL data-lang=AL>OnRun<span style=color:#f92672>(</span><span style=color:#66d9ef>VAR</span> Rec : <span style=color:#66d9ef>Record</span> &#34;Gen. Journal Line&#34;<span style=color:#f92672>)
</span><span style=color:#f92672>
</span><span style=color:#f92672></span>GenJnlLine<span style=color:#f92672>.</span>COPYFILTERS<span style=color:#f92672>(</span>Rec<span style=color:#f92672>)</span>;
CopyJnlLines<span style=color:#f92672>(</span>GenJnlLine,Rec<span style=color:#f92672>)</span>;
<span style=color:#66d9ef>LOCAL</span> CopyJnlLines<span style=color:#f92672>(</span><span style=color:#66d9ef>VAR</span> FromGenJnlLine : <span style=color:#66d9ef>Record</span> &#34;Gen. Journal Line&#34;;<span style=color:#66d9ef>VAR</span> TempGenJnlLine : <span style=color:#66d9ef>TEMPORARY</span> <span style=color:#66d9ef>Record</span> &#34;Gen. Journal Line&#34;<span style=color:#f92672>)
</span><span style=color:#f92672>
</span><span style=color:#f92672></span><span style=color:#66d9ef>IF</span> FromGenJnlLine<span style=color:#f92672>.</span>FINDSET <span style=color:#66d9ef>THEN</span> <span style=color:#66d9ef>BEGIN</span>
GenJnlBatch<span style=color:#f92672>.</span>GET<span style=color:#f92672>(</span>FromGenJnlLine<span style=color:#f92672>.</span>&#34;Journal Template Name&#34;,FromGenJnlLine<span style=color:#f92672>.</span>&#34;Journal Batch Name&#34;<span style=color:#f92672>)</span>;
<span style=color:#66d9ef>REPEAT</span>
TempGenJnlLine <span style=color:#f92672>:=</span> FromGenJnlLine;
TempGenJnlLine<span style=color:#f92672>.</span>INSERT;
<span style=color:#66d9ef>UNTIL</span> FromGenJnlLine<span style=color:#f92672>.</span>NEXT = <span style=color:#ae81ff>0</span>
<span style=color:#66d9ef>END</span> <span style=color:#66d9ef>ELSE</span>
CreateTempJnlLines<span style=color:#f92672>(</span>FromGenJnlLine,TempGenJnlLine<span style=color:#f92672>)</span>;
<span style=color:#66d9ef>LOCAL</span> CreateTempJnlLines<span style=color:#f92672>(</span><span style=color:#66d9ef>VAR</span> FromGenJnlLine : <span style=color:#66d9ef>Record</span> &#34;Gen. Journal Line&#34;;<span style=color:#66d9ef>VAR</span> TempGenJnlLine : <span style=color:#66d9ef>TEMPORARY</span> <span style=color:#66d9ef>Record</span> &#34;Gen. Journal Line&#34;<span style=color:#f92672>)
</span><span style=color:#f92672>
</span><span style=color:#f92672></span>PaymentDocNo <span style=color:#f92672>:=</span> FromGenJnlLine<span style=color:#f92672>.</span>GETFILTER<span style=color:#f92672>(</span>&#34;Document No.&#34;<span style=color:#f92672>)</span>;
VendorBillHeader<span style=color:#f92672>.</span>GET<span style=color:#f92672>(</span>PaymentDocNo<span style=color:#f92672>)</span>;
VendorBillLine<span style=color:#f92672>.</span>RESET;
VendorBillLine<span style=color:#f92672>.</span>SETCURRENTKEY<span style=color:#f92672>(</span>&#34;Vendor Bill List No.&#34;,&#34;Vendor No.&#34;,&#34;Due Date&#34;,&#34;Vendor Bank Acc. No.&#34;,&#34;Cumulative Transfers&#34;<span style=color:#f92672>)</span>;
VendorBillLine<span style=color:#f92672>.</span>SETRANGE<span style=color:#f92672>(</span>&#34;Vendor Bill List No.&#34;,VendorBillHeader<span style=color:#f92672>.</span>&#34;No.&#34;<span style=color:#f92672>)</span>;
VendorBillLine<span style=color:#f92672>.</span>SETRANGE<span style=color:#f92672>(</span>&#34;Cumulative Transfers&#34;,TRUE<span style=color:#f92672>)</span>;
<span style=color:#66d9ef>IF</span> VendorBillLine<span style=color:#f92672>.</span>FINDSET <span style=color:#66d9ef>THEN</span> <span style=color:#66d9ef>BEGIN</span>
CumulativeAmount <span style=color:#f92672>:=</span> <span style=color:#ae81ff>0</span>;
PrevVendorBillLine <span style=color:#f92672>:=</span> VendorBillLine;
<span style=color:#66d9ef>REPEAT</span>
VendorBillLine<span style=color:#f92672>.</span><span style=color:#66d9ef>TESTFIELD</span><span style=color:#f92672>(</span>&#34;Document Type&#34;,VendorBillLine<span style=color:#f92672>.</span>&#34;Document Type&#34;::Invoice<span style=color:#f92672>)</span>;
<span style=color:#66d9ef>IF</span> <span style=color:#f92672>((</span>VendorBillLine<span style=color:#f92672>.</span>&#34;Vendor No.&#34; &lt;\&gt; PrevVendorBillLine<span style=color:#f92672>.</span>&#34;Vendor No.&#34;<span style=color:#f92672>) </span><span style=color:#f92672>OR</span> <span style=color:#f92672>(</span>VendorBillLine<span style=color:#f92672>.</span>&#34;Vendor Bank Acc. No.&#34; &lt;\&gt; PrevVendorBillLine<span style=color:#f92672>.</span>&#34;Vendor Bank Acc. No.&#34;<span style=color:#f92672>)) </span><span style=color:#66d9ef>THEN</span> <span style=color:#66d9ef>BEGIN</span> InsertTempGenJnlLine<span style=color:#f92672>(</span>TempGenJnlLine,VendorBillHeader,PrevVendorBillLine,CumulativeAmount<span style=color:#f92672>)</span>;
CumulativeAmount <span style=color:#f92672>:=</span> VendorBillLine<span style=color:#f92672>.</span>&#34;Amount to Pay&#34;;
<span style=color:#66d9ef>END</span> <span style=color:#66d9ef>ELSE</span>
CumulativeAmount <span style=color:#f92672>+=</span> VendorBillLine<span style=color:#f92672>.</span>&#34;Amount to Pay&#34;;
PrevVendorBillLine <span style=color:#f92672>:=</span> VendorBillLine;
<span style=color:#66d9ef>UNTIL</span> VendorBillLine<span style=color:#f92672>.</span>NEXT = <span style=color:#ae81ff>0</span>; InsertTempGenJnlLine<span style=color:#f92672>(</span>TempGenJnlLine,VendorBillHeader,PrevVendorBillLine,CumulativeAmount<span style=color:#f92672>)</span>;
<span style=color:#66d9ef>END</span>;
VendorBillLine<span style=color:#f92672>.</span>SETRANGE<span style=color:#f92672>(</span>&#34;Cumulative Transfers&#34;,FALSE<span style=color:#f92672>)</span>;
<span style=color:#66d9ef>IF</span> VendorBillLine<span style=color:#f92672>.</span>FINDSET <span style=color:#66d9ef>THEN</span>
<span style=color:#66d9ef>REPEAT</span>
VendorBillLine<span style=color:#f92672>.</span><span style=color:#66d9ef>TESTFIELD</span><span style=color:#f92672>(</span>&#34;Document Type&#34;,VendorBillLine<span style=color:#f92672>.</span>&#34;Document Type&#34;::Invoice<span style=color:#f92672>)</span>; InsertTempGenJnlLine<span style=color:#f92672>(</span>TempGenJnlLine,VendorBillHeader,VendorBillLine,VendorBillLine<span style=color:#f92672>.</span>&#34;Amount to Pay&#34;<span style=color:#f92672>)</span>;
<span style=color:#66d9ef>UNTIL</span> VendorBillLine<span style=color:#f92672>.</span>NEXT = <span style=color:#ae81ff>0</span>;
<span style=color:#66d9ef>LOCAL</span> InsertTempGenJnlLine<span style=color:#f92672>(</span><span style=color:#66d9ef>VAR</span> TempGenJnlLine : <span style=color:#66d9ef>TEMPORARY</span> <span style=color:#66d9ef>Record</span> &#34;Gen. Journal Line&#34;;VendorBillHeader : <span style=color:#66d9ef>Record</span> &#34;Vendor Bill Header&#34;;VendorBillLine : <span style=color:#66d9ef>Record</span> &#34;Vendor Bill Line&#34;;AmountToPay : <span style=color:#66d9ef>Decimal</span><span style=color:#f92672>)
</span><span style=color:#f92672>
</span><span style=color:#f92672></span><span style=color:#66d9ef>WITH</span> TempGenJnlLine <span style=color:#66d9ef>DO</span> <span style=color:#66d9ef>BEGIN</span>
INIT;
&#34;Journal Template Name&#34; <span style=color:#f92672>:=</span> <span style=color:#e6db74>&#39;&#39;</span>;
&#34;Journal Batch Name&#34; <span style=color:#f92672>:=</span> <span style=color:#e6db74>&#39;&#39;</span>;
&#34;Document Type&#34; <span style=color:#f92672>:=</span> &#34;Document Type&#34;::Payment;
&#34;Document No.&#34; <span style=color:#f92672>:=</span> VendorBillLine<span style=color:#f92672>.</span>&#34;Vendor Bill List No.&#34;;
&#34;Line No.&#34; <span style=color:#f92672>:=</span> VendorBillLine<span style=color:#f92672>.</span>&#34;Line No.&#34;;
&#34;Account No.&#34; <span style=color:#f92672>:=</span> VendorBillLine<span style=color:#f92672>.</span>&#34;Vendor No.&#34;;
&#34;Account Type&#34; <span style=color:#f92672>:=</span> TempGenJnlLine<span style=color:#f92672>.</span>&#34;Account Type&#34;::Vendor;
&#34;Bal. Account Type&#34; <span style=color:#f92672>:=</span> TempGenJnlLine<span style=color:#f92672>.</span>&#34;Bal. Account Type&#34;::&#34;Bank Account&#34;;
&#34;Bal. Account No.&#34; <span style=color:#f92672>:=</span> VendorBillHeader<span style=color:#f92672>.</span>&#34;Bank Account No.&#34;;
&#34;Applies-to Ext. Doc. No.&#34; <span style=color:#f92672>:=</span> VendorBillLine<span style=color:#f92672>.</span>&#34;External Document No.&#34;;
Amount <span style=color:#f92672>:=</span> AmountToPay;
&#34;Applies-to Doc. Type&#34; <span style=color:#f92672>:=</span> VendorBillLine<span style=color:#f92672>.</span>&#34;Document Type&#34;;
&#34;Applies-to Doc. No.&#34; <span style=color:#f92672>:=</span> VendorBillLine<span style=color:#f92672>.</span>&#34;Document No.&#34;;
&#34;Currency Code&#34; <span style=color:#f92672>:=</span> VendorBillHeader<span style=color:#f92672>.</span>&#34;Currency Code&#34;;
&#34;Due Date&#34; <span style=color:#f92672>:=</span> VendorBillLine<span style=color:#f92672>.</span>&#34;Due Date&#34;;
&#34;Posting Date&#34; <span style=color:#f92672>:=</span> VendorBillHeader<span style=color:#f92672>.</span>&#34;Posting Date&#34;;
&#34;Recipient Bank Account&#34; <span style=color:#f92672>:=</span> VendorBillLine<span style=color:#f92672>.</span>&#34;Vendor Bank Acc. No.&#34;;
Description <span style=color:#f92672>:=</span> VendorBillLine<span style=color:#f92672>.</span>Description;
&#34;Message to Recipient&#34; <span style=color:#f92672>:=</span> VendorBillLine<span style=color:#f92672>.</span>&#34;Description 2&#34;;
INSERT;
<span style=color:#66d9ef>END</span>;
</code></pre></div><p>The derived local feature flow is as follows:</p>
<p><a href=3058.Feature-localization-for-data-structures-3.png><img src=3058.Feature-localization-for-data-structures-3.png alt=" "></a></p>
<p>Figure 3. The local country object flow</p>
<p>As we can see from the diagram, this solution allows integration of the local and W1 features with a minimum amount of changes in W1 code. The only two differences are:</p>
@ -389,12 +481,12 @@ ALGuidelines.Dev
<div style=left:-1000px;overflow:scroll;position:absolute;top:-1000px;border:none;box-sizing:content-box;height:200px;margin:0;padding:0;width:200px>
<div style=border:none;box-sizing:content-box;height:200px;margin:0;padding:0;width:200px></div>
</div>
<script src=/js/clipboard.min.js?1638662727></script>
<script src=/js/perfect-scrollbar.min.js?1638662727></script>
<script src=/js/perfect-scrollbar.jquery.min.js?1638662727></script>
<script src=/js/jquery.svg.pan.zoom.js?1638662727></script>
<script src=/js/featherlight.min.js?1638662727></script>
<script src=/js/modernizr.custom-3.6.0.js?1638662727></script>
<script src=/js/relearn.js?1638662727></script>
<script src=/js/clipboard.min.js?1638739417></script>
<script src=/js/perfect-scrollbar.min.js?1638739417></script>
<script src=/js/perfect-scrollbar.jquery.min.js?1638739417></script>
<script src=/js/jquery.svg.pan.zoom.js?1638739417></script>
<script src=/js/featherlight.min.js?1638739417></script>
<script src=/js/modernizr.custom-3.6.0.js?1638739417></script>
<script src=/js/relearn.js?1638739417></script>
</body>
</html>