<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://in.compucrete.com/index.php?action=history&amp;feed=atom&amp;title=AR%3A_Fix_Leading%2FTrailing_Spaces_in_Jobs</id>
	<title>AR: Fix Leading/Trailing Spaces in Jobs - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://in.compucrete.com/index.php?action=history&amp;feed=atom&amp;title=AR%3A_Fix_Leading%2FTrailing_Spaces_in_Jobs"/>
	<link rel="alternate" type="text/html" href="http://in.compucrete.com/index.php?title=AR:_Fix_Leading/Trailing_Spaces_in_Jobs&amp;action=history"/>
	<updated>2026-05-15T15:15:46Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.40.0</generator>
	<entry>
		<id>http://in.compucrete.com/index.php?title=AR:_Fix_Leading/Trailing_Spaces_in_Jobs&amp;diff=16&amp;oldid=prev</id>
		<title>WikiAdmin: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="http://in.compucrete.com/index.php?title=AR:_Fix_Leading/Trailing_Spaces_in_Jobs&amp;diff=16&amp;oldid=prev"/>
		<updated>2023-07-14T12:58:47Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 12:58, 14 July 2023&lt;/td&gt;
				&lt;/tr&gt;
&lt;!-- diff cache key my_wiki:diff::1.12:old-15:rev-16 --&gt;
&lt;/table&gt;</summary>
		<author><name>WikiAdmin</name></author>
	</entry>
	<entry>
		<id>http://in.compucrete.com/index.php?title=AR:_Fix_Leading/Trailing_Spaces_in_Jobs&amp;diff=15&amp;oldid=prev</id>
		<title>Chanson: /* Identify */</title>
		<link rel="alternate" type="text/html" href="http://in.compucrete.com/index.php?title=AR:_Fix_Leading/Trailing_Spaces_in_Jobs&amp;diff=15&amp;oldid=prev"/>
		<updated>2020-09-24T14:38:48Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Identify&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;When a job gets a trailing or leading space it leads to many strange behaviors in Keystone.  Interbase makes this a very tricky issue to ID and to fix.  You can not rely on string length and comparing the RTRIM or LTRIM values to the original field value.  If you Append a character before and after the field and the same to the trimmed value you can do a comparison.&lt;br /&gt;
&lt;br /&gt;
The following will find jobs with spaces in the invoice table:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
select 'inv', '&amp;gt;'||JOB_PO_LOC||'&amp;lt;' &amp;quot;Before&amp;quot;,'&amp;gt;'||ltrim(rtrim(JOB_PO_LOC))||'&amp;lt;' &amp;quot;After&amp;quot;,j.cust_no,j.job_po_loc,count(*) from artinv j&lt;br /&gt;
where '&amp;gt;'||JOB_PO_LOC||'&amp;lt;' &amp;lt;&amp;gt; '&amp;gt;'||ltrim(rtrim(JOB_PO_LOC))||'&amp;lt;' group by j.cust_no,j.job_po_loc&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is an example of fixing the job name in the Job Header table:&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
update artjobhd&lt;br /&gt;
set job_po_loc=ltrim(rtrim(JOB_PO_LOC))&lt;br /&gt;
where '&amp;gt;'||JOB_PO_LOC||'&amp;lt;' &amp;lt;&amp;gt; '&amp;gt;'||ltrim(rtrim(JOB_PO_LOC))||'&amp;lt;';&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Processing all tables at once==&lt;br /&gt;
&lt;br /&gt;
To make it easy - here are all the tables in one query...&lt;br /&gt;
&lt;br /&gt;
===Identify===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
select 'inv' &amp;quot;tbl&amp;quot;, '&amp;gt;'||JOB_PO_LOC||'&amp;lt;' &amp;quot;Before&amp;quot;,'&amp;gt;'||ltrim(rtrim(JOB_PO_LOC))||'&amp;lt;' &amp;quot;After&amp;quot;,j.cust_no,j.job_po_loc,count(*) RecordCount,Max(invoice_date) LastDate from artinv j&lt;br /&gt;
where '&amp;gt;'||JOB_PO_LOC||'&amp;lt;' &amp;lt;&amp;gt; '&amp;gt;'||ltrim(rtrim(JOB_PO_LOC))||'&amp;lt;' group by j.cust_no,j.job_po_loc&lt;br /&gt;
union all&lt;br /&gt;
select 'cnt' , '&amp;gt;'||entity_sub_id||'&amp;lt;' &amp;quot;Before&amp;quot;,'&amp;gt;'||ltrim(rtrim(entity_sub_id))||'&amp;lt;' &amp;quot;After&amp;quot;,j.entity_id &amp;quot;CUST_NO&amp;quot;,j.entity_sub_id &amp;quot;JOB_PO_LOC&amp;quot;,count(*),cast(max(last_change_datetime) as date) from cctcont j&lt;br /&gt;
where '&amp;gt;'||entity_sub_id||'&amp;lt;' &amp;lt;&amp;gt; '&amp;gt;'||ltrim(rtrim(entity_sub_id))||'&amp;lt;' group by j.entity_id,j.entity_sub_id&lt;br /&gt;
union all&lt;br /&gt;
select 'ord', '&amp;gt;'||JOB_PO_LOC||'&amp;lt;' &amp;quot;Before&amp;quot;,'&amp;gt;'||ltrim(rtrim(JOB_PO_LOC))||'&amp;lt;' &amp;quot;After&amp;quot;,j.cust_no,j.job_po_loc,count(*),max(delivery_date) from artordhd j&lt;br /&gt;
where '&amp;gt;'||JOB_PO_LOC||'&amp;lt;' &amp;lt;&amp;gt; '&amp;gt;'||ltrim(rtrim(JOB_PO_LOC))||'&amp;lt;' group by j.cust_no,j.job_po_loc&lt;br /&gt;
union all&lt;br /&gt;
select 'job', '&amp;gt;'||JOB_PO_LOC||'&amp;lt;' &amp;quot;Before&amp;quot;,'&amp;gt;'||ltrim(rtrim(JOB_PO_LOC))||'&amp;lt;' &amp;quot;After&amp;quot;,j.cust_no,j.job_po_loc,count(*),cast(max(last_change_datetime) as date) from artjobhd j&lt;br /&gt;
where '&amp;gt;'||JOB_PO_LOC||'&amp;lt;' &amp;lt;&amp;gt; '&amp;gt;'||ltrim(rtrim(JOB_PO_LOC))||'&amp;lt;' group by j.cust_no,j.job_po_loc&lt;br /&gt;
union all&lt;br /&gt;
select 'jdt', '&amp;gt;'||JOB_PO_LOC||'&amp;lt;' &amp;quot;Before&amp;quot;,'&amp;gt;'||ltrim(rtrim(JOB_PO_LOC))||'&amp;lt;' &amp;quot;After&amp;quot;,j.cust_no,j.job_po_loc,count(*),cast(null as date) from artjobdt j&lt;br /&gt;
where '&amp;gt;'||JOB_PO_LOC||'&amp;lt;' &amp;lt;&amp;gt; '&amp;gt;'||ltrim(rtrim(JOB_PO_LOC))||'&amp;lt;' group by j.cust_no,j.job_po_loc&lt;br /&gt;
union all&lt;br /&gt;
select 'ptk' tbl, '&amp;gt;'||JOB_PO_LOC||'&amp;lt;' &amp;quot;Before&amp;quot;,'&amp;gt;'||ltrim(rtrim(JOB_PO_LOC))||'&amp;lt;' &amp;quot;After&amp;quot;,j.cust_no,j.job_po_loc,count(*),max(ticket_date) from artptkhd j&lt;br /&gt;
where '&amp;gt;'||JOB_PO_LOC||'&amp;lt;' &amp;lt;&amp;gt; '&amp;gt;'||ltrim(rtrim(JOB_PO_LOC))||'&amp;lt;' group by j.cust_no,j.job_po_loc&lt;br /&gt;
union all&lt;br /&gt;
select 'tck', '&amp;gt;'||JOB_PO_LOC||'&amp;lt;' &amp;quot;Before&amp;quot;,'&amp;gt;'||ltrim(rtrim(JOB_PO_LOC))||'&amp;lt;' &amp;quot;After&amp;quot;,j.cust_no,j.job_po_loc,count(*),max(ticket_date) from arttckhd j&lt;br /&gt;
where '&amp;gt;'||JOB_PO_LOC||'&amp;lt;' &amp;lt;&amp;gt; '&amp;gt;'||ltrim(rtrim(JOB_PO_LOC))||'&amp;lt;' group by j.cust_no,j.job_po_loc&lt;br /&gt;
union all&lt;br /&gt;
select 'sls', '&amp;gt;'||JOB_PO_LOC||'&amp;lt;' &amp;quot;Before&amp;quot;,'&amp;gt;'||ltrim(rtrim(JOB_PO_LOC))||'&amp;lt;' &amp;quot;After&amp;quot;,j.cust_no,j.job_po_loc,count(*),max(ticket_date) from artslshd j&lt;br /&gt;
where '&amp;gt;'||JOB_PO_LOC||'&amp;lt;' &amp;lt;&amp;gt; '&amp;gt;'||ltrim(rtrim(JOB_PO_LOC))||'&amp;lt;' group by j.cust_no,j.job_po_loc&lt;br /&gt;
union all&lt;br /&gt;
select 'qte', '&amp;gt;'||JOB_PO_LOC||'&amp;lt;' &amp;quot;Before&amp;quot;,'&amp;gt;'||ltrim(rtrim(JOB_PO_LOC))||'&amp;lt;' &amp;quot;After&amp;quot;,j.prospect_no,j.job_po_loc,count(*),cast(max(last_change_datetime) as date) from qttjobhd j&lt;br /&gt;
where '&amp;gt;'||JOB_PO_LOC||'&amp;lt;' &amp;lt;&amp;gt; '&amp;gt;'||ltrim(rtrim(JOB_PO_LOC))||'&amp;lt;' group by j.prospect_no,j.job_po_loc&lt;br /&gt;
union all&lt;br /&gt;
select 'qdt', '&amp;gt;'||JOB_PO_LOC||'&amp;lt;' &amp;quot;Before&amp;quot;,'&amp;gt;'||ltrim(rtrim(JOB_PO_LOC))||'&amp;lt;' &amp;quot;After&amp;quot;,j.prospect_no,j.job_po_loc,count(*),cast(null as date) from qttjobdt j&lt;br /&gt;
where '&amp;gt;'||JOB_PO_LOC||'&amp;lt;' &amp;lt;&amp;gt; '&amp;gt;'||ltrim(rtrim(JOB_PO_LOC))||'&amp;lt;' group by j.prospect_no,j.job_po_loc&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Identify Duplicate Jobs===&lt;br /&gt;
&lt;br /&gt;
Find Jobs that are duplicated - once with extra space and once without...&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
select 'job', '&amp;gt;'||JOB_PO_LOC||'&amp;lt;' &amp;quot;Before&amp;quot;,'&amp;gt;'||ltrim(rtrim(JOB_PO_LOC))||'&amp;lt;' &amp;quot;After&amp;quot;,j.cust_no,j.job_po_loc,count(*) from artjobhd j&lt;br /&gt;
where '&amp;gt;'||JOB_PO_LOC||'&amp;lt;' &amp;lt;&amp;gt; '&amp;gt;'||ltrim(rtrim(JOB_PO_LOC))||'&amp;lt;'&lt;br /&gt;
and exists (select 1 from artjobhd jj where jj.cust_no=j.cust_no and '&amp;gt;'||jj.JOB_PO_LOC||'&amp;lt;'='&amp;gt;'||ltrim(rtrim(j.JOB_PO_LOC))||'&amp;lt;' )&lt;br /&gt;
 group by j.cust_no,j.job_po_loc&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These must be dealt with manually.&lt;br /&gt;
&lt;br /&gt;
===Update===&lt;br /&gt;
&lt;br /&gt;
Once duplicate jobs have been dealt with you can process this update query...&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
update artjobhd&lt;br /&gt;
set job_po_loc=ltrim(rtrim(JOB_PO_LOC))&lt;br /&gt;
where '&amp;gt;'||JOB_PO_LOC||'&amp;lt;' &amp;lt;&amp;gt; '&amp;gt;'||ltrim(rtrim(JOB_PO_LOC))||'&amp;lt;';&lt;br /&gt;
update artjobdt&lt;br /&gt;
set job_po_loc=ltrim(rtrim(JOB_PO_LOC))&lt;br /&gt;
where '&amp;gt;'||JOB_PO_LOC||'&amp;lt;' &amp;lt;&amp;gt; '&amp;gt;'||ltrim(rtrim(JOB_PO_LOC))||'&amp;lt;';&lt;br /&gt;
update artordhd&lt;br /&gt;
set job_po_loc=ltrim(rtrim(JOB_PO_LOC))&lt;br /&gt;
where '&amp;gt;'||JOB_PO_LOC||'&amp;lt;' &amp;lt;&amp;gt; '&amp;gt;'||ltrim(rtrim(JOB_PO_LOC))||'&amp;lt;';&lt;br /&gt;
update artinv&lt;br /&gt;
set job_po_loc=ltrim(rtrim(JOB_PO_LOC))&lt;br /&gt;
where '&amp;gt;'||JOB_PO_LOC||'&amp;lt;' &amp;lt;&amp;gt; '&amp;gt;'||ltrim(rtrim(JOB_PO_LOC))||'&amp;lt;';&lt;br /&gt;
update artslshd&lt;br /&gt;
set job_po_loc=ltrim(rtrim(JOB_PO_LOC))&lt;br /&gt;
where '&amp;gt;'||JOB_PO_LOC||'&amp;lt;' &amp;lt;&amp;gt; '&amp;gt;'||ltrim(rtrim(JOB_PO_LOC))||'&amp;lt;';&lt;br /&gt;
update arttckhd&lt;br /&gt;
set job_po_loc=ltrim(rtrim(JOB_PO_LOC))&lt;br /&gt;
where '&amp;gt;'||JOB_PO_LOC||'&amp;lt;' &amp;lt;&amp;gt; '&amp;gt;'||ltrim(rtrim(JOB_PO_LOC))||'&amp;lt;';&lt;br /&gt;
update artptkhd&lt;br /&gt;
set job_po_loc=ltrim(rtrim(JOB_PO_LOC))&lt;br /&gt;
where '&amp;gt;'||JOB_PO_LOC||'&amp;lt;' &amp;lt;&amp;gt; '&amp;gt;'||ltrim(rtrim(JOB_PO_LOC))||'&amp;lt;';&lt;br /&gt;
update qttjobhd&lt;br /&gt;
set job_po_loc=ltrim(rtrim(JOB_PO_LOC))&lt;br /&gt;
where '&amp;gt;'||JOB_PO_LOC||'&amp;lt;' &amp;lt;&amp;gt; '&amp;gt;'||ltrim(rtrim(JOB_PO_LOC))||'&amp;lt;';&lt;br /&gt;
update qttjobdt&lt;br /&gt;
set job_po_loc=ltrim(rtrim(JOB_PO_LOC))&lt;br /&gt;
where '&amp;gt;'||JOB_PO_LOC||'&amp;lt;' &amp;lt;&amp;gt; '&amp;gt;'||ltrim(rtrim(JOB_PO_LOC))||'&amp;lt;';&lt;br /&gt;
update cctcont&lt;br /&gt;
set entity_sub_id=ltrim(rtrim(entity_sub_id))&lt;br /&gt;
where '&amp;gt;'||entity_sub_id||'&amp;lt;' &amp;lt;&amp;gt; '&amp;gt;'||ltrim(rtrim(entity_sub_id))||'&amp;lt;';&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;/div&gt;</summary>
		<author><name>Chanson</name></author>
	</entry>
</feed>