<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Квадратный глобус</title>
	<atom:link href="http://squareglobus.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://squareglobus.wordpress.com</link>
	<description>Кое что о продукте компании, которая в качестве логотипа использует квадратный глобус</description>
	<lastBuildDate>Mon, 19 Dec 2011 13:07:43 +0000</lastBuildDate>
	<language>ru</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='squareglobus.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Квадратный глобус</title>
		<link>http://squareglobus.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://squareglobus.wordpress.com/osd.xml" title="Квадратный глобус" />
	<atom:link rel='hub' href='http://squareglobus.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Как избавиться от &#171;$-файлов&#187;</title>
		<link>http://squareglobus.wordpress.com/2011/12/19/%d0%ba%d0%b0%d0%ba-%d0%b8%d0%b7%d0%b1%d0%b0%d0%b2%d0%b8%d1%82%d1%8c%d1%81%d1%8f-%d0%be%d1%82-%d1%84%d0%b0%d0%b9%d0%bb%d0%be%d0%b2/</link>
		<comments>http://squareglobus.wordpress.com/2011/12/19/%d0%ba%d0%b0%d0%ba-%d0%b8%d0%b7%d0%b1%d0%b0%d0%b2%d0%b8%d1%82%d1%8c%d1%81%d1%8f-%d0%be%d1%82-%d1%84%d0%b0%d0%b9%d0%bb%d0%be%d0%b2/#comments</comments>
		<pubDate>Mon, 19 Dec 2011 13:07:40 +0000</pubDate>
		<dc:creator>squareglobus</dc:creator>
				<category><![CDATA[Т24]]></category>

		<guid isPermaLink="false">http://squareglobus.wordpress.com/?p=366</guid>
		<description><![CDATA[Ну, совсем от них не избавиться, но можно их держать отдельно от исходников. Вот рецепт (для директории с исходниками ETC.BP): CREATE-FILE DATA ETC.BP,OBJECT 101 [ 417 ] File ETC.BP]MOBJECT created , type = J4 LIST ETC.BP SOME.TEST 1 Records Listed BASIC -I..\T24.BP ETC.BP SOME.TEST SOME.TEST BASIC_2.c Source file SOME.TEST compiled successfully LIST ETC.BP SOME.TEST 1 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=squareglobus.wordpress.com&amp;blog=3911245&amp;post=366&amp;subd=squareglobus&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Ну, совсем от них не  избавиться, но можно их держать отдельно от исходников. Вот рецепт (для директории с исходниками ETC.BP):</p>
<p><code></p>
<p><strong>CREATE-FILE DATA ETC.BP,OBJECT 101</strong></p>
<p>[ 417 ] File ETC.BP]MOBJECT created , type = J4</p>
<p><strong>LIST ETC.BP</strong></p>
<p>SOME.TEST</p>
<p>1 Records Listed</p>
<p><strong>BASIC -I..\T24.BP ETC.BP SOME.TEST</strong></p>
<p>SOME.TEST<br />
BASIC_2.c<br />
Source file SOME.TEST compiled successfully</p>
<p><strong>LIST ETC.BP</strong></p>
<p>SOME.TEST<br />
1 Records Listed</p>
<p><strong>LIST ETC.BP,OBJECT</strong></p>
<p>$SOME.TEST<br />
1 Records Listed</p>
<p></code></p>
<p>Всех с наступающими!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/squareglobus.wordpress.com/366/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/squareglobus.wordpress.com/366/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/squareglobus.wordpress.com/366/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/squareglobus.wordpress.com/366/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/squareglobus.wordpress.com/366/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/squareglobus.wordpress.com/366/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/squareglobus.wordpress.com/366/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/squareglobus.wordpress.com/366/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/squareglobus.wordpress.com/366/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/squareglobus.wordpress.com/366/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/squareglobus.wordpress.com/366/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/squareglobus.wordpress.com/366/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/squareglobus.wordpress.com/366/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/squareglobus.wordpress.com/366/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=squareglobus.wordpress.com&amp;blog=3911245&amp;post=366&amp;subd=squareglobus&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://squareglobus.wordpress.com/2011/12/19/%d0%ba%d0%b0%d0%ba-%d0%b8%d0%b7%d0%b1%d0%b0%d0%b2%d0%b8%d1%82%d1%8c%d1%81%d1%8f-%d0%be%d1%82-%d1%84%d0%b0%d0%b9%d0%bb%d0%be%d0%b2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">squareglobus</media:title>
		</media:content>
	</item>
		<item>
		<title>Передача руля</title>
		<link>http://squareglobus.wordpress.com/2011/09/12/poster-changed/</link>
		<comments>http://squareglobus.wordpress.com/2011/09/12/poster-changed/#comments</comments>
		<pubDate>Mon, 12 Sep 2011 10:40:03 +0000</pubDate>
		<dc:creator>squareglobus</dc:creator>
				<category><![CDATA[Т24]]></category>

		<guid isPermaLink="false">http://squareglobus.wordpress.com/?p=361</guid>
		<description><![CDATA[Всем привет. &#171;Руль&#187; данного блога передан мне Андреем после его переключения на работу, не связанную с Глобусом (надеюсь, что это переключение временное). Частых постов не ждите, но время от времени постараюсь публиковать что-то полезное. В.Казимирчик.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=squareglobus.wordpress.com&amp;blog=3911245&amp;post=361&amp;subd=squareglobus&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Всем привет. &laquo;Руль&raquo; данного блога передан мне Андреем после его переключения на работу, не связанную с Глобусом (надеюсь, что это переключение временное).</p>
<p>Частых постов не ждите, но время от времени постараюсь публиковать что-то  полезное.</p>
<p>В.Казимирчик.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/squareglobus.wordpress.com/361/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/squareglobus.wordpress.com/361/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/squareglobus.wordpress.com/361/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/squareglobus.wordpress.com/361/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/squareglobus.wordpress.com/361/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/squareglobus.wordpress.com/361/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/squareglobus.wordpress.com/361/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/squareglobus.wordpress.com/361/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/squareglobus.wordpress.com/361/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/squareglobus.wordpress.com/361/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/squareglobus.wordpress.com/361/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/squareglobus.wordpress.com/361/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/squareglobus.wordpress.com/361/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/squareglobus.wordpress.com/361/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=squareglobus.wordpress.com&amp;blog=3911245&amp;post=361&amp;subd=squareglobus&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://squareglobus.wordpress.com/2011/09/12/poster-changed/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">squareglobus</media:title>
		</media:content>
	</item>
		<item>
		<title>Как применять DEBUG и не портить жизнь коллегам</title>
		<link>http://squareglobus.wordpress.com/2009/05/25/debug-right/</link>
		<comments>http://squareglobus.wordpress.com/2009/05/25/debug-right/#comments</comments>
		<pubDate>Mon, 25 May 2009 11:05:22 +0000</pubDate>
		<dc:creator>squareglobus</dc:creator>
				<category><![CDATA[Т24]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[error]]></category>

		<guid isPermaLink="false">http://pro-t24.com/blog/?p=335</guid>
		<description><![CDATA[Иногда для полноценной отладки не обойтись без DEBUG в рутине, но при этом надо предупредить своих коллег, что версию/запрос нельзя запускать из под Desktop/Browser. Иногда всех заинтересованных лице известить не получается, да и к тому же надо сначала предупредить, что DEBUG есть, а потом&#160;&#38;#151 что его уже нет. Чтобы упросить себе и другим жизнь, давайте [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=squareglobus.wordpress.com&amp;blog=3911245&amp;post=335&amp;subd=squareglobus&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Иногда для полноценной отладки не обойтись без <a href="http://www.jbase.com/knowledgebase/manuals/3.0/30manpages/man/jbc2_DEBUG.htm"><em>DEBUG</em></a> в рутине, но при этом надо предупредить своих коллег, что версию/запрос нельзя запускать из под Desktop/Browser. Иногда всех заинтересованных лице известить не получается, да и к тому же надо сначала предупредить, что DEBUG есть, а потом&nbsp;&amp;#151 что его уже нет. Чтобы упросить себе и другим жизнь, давайте обратимся к документу &laquo;Programming Standards.pdf&raquo;:<br />
<blockquote>There are &laquo;standard&raquo; methods for determining whether an application or subroutine is running in any specified environment:<br />
- For OFS the common variable GTSACTIVE will be set.<br />
- For GUI the common variable TTYPE will contain the text GUI.<br />
- For Browser the common variable GTSACTIVE will be set.
</p></blockquote>
<p>Получается, что для того, чтобы не портить жизнь своим коллегам, работающим под Desktop, достаточно написать:
<pre><code>IF NOT(INDEX(TTYPE,&#039;GUI&#039;,1)) THEN DEBUG</code></pre>
<p>Для того, чтобы экранировать DEBUG для пользователей Browser и OFS-обработки, понадобится следующая конструкция:
<pre><code>$INSERT I_GTS.COMMON
IF NOT(GTSACTIVE) THEN DEBUG</code></pre>
</p>
<p>Можно заранее заготовить кусок кода, объединив оба примера, и вставлять его вместо DEBUG:
<pre><code>$INSERT I_GTS.COMMON
IF NOT(INDEX(TTYPE,&#039;GUI&#039;,1) OR GTSACTIVE) THEN DEBUG
</code></pre>
</p>
<p>Такая конструкция потребует чуть больше усилий от разработчика, чем написание одной команды, но зато Ваши коллеги не будут лишний раз вспоминать Вас недобрым словом.</p>
<p><em>P.S. Спасибо моему коллеге SIA за идею.</em></p>
<br /> Tagged: debug, error <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/squareglobus.wordpress.com/335/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/squareglobus.wordpress.com/335/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/squareglobus.wordpress.com/335/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/squareglobus.wordpress.com/335/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/squareglobus.wordpress.com/335/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/squareglobus.wordpress.com/335/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/squareglobus.wordpress.com/335/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/squareglobus.wordpress.com/335/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/squareglobus.wordpress.com/335/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/squareglobus.wordpress.com/335/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/squareglobus.wordpress.com/335/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/squareglobus.wordpress.com/335/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/squareglobus.wordpress.com/335/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/squareglobus.wordpress.com/335/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=squareglobus.wordpress.com&amp;blog=3911245&amp;post=335&amp;subd=squareglobus&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://squareglobus.wordpress.com/2009/05/25/debug-right/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">squareglobus</media:title>
		</media:content>
	</item>
		<item>
		<title>Замечания о EB.ALTERNATE.KEY</title>
		<link>http://squareglobus.wordpress.com/2009/04/21/eb-alternate-key/</link>
		<comments>http://squareglobus.wordpress.com/2009/04/21/eb-alternate-key/#comments</comments>
		<pubDate>Tue, 21 Apr 2009 05:50:45 +0000</pubDate>
		<dc:creator>squareglobus</dc:creator>
				<category><![CDATA[Т24]]></category>
		<category><![CDATA[concatfile]]></category>
		<category><![CDATA[EB.ALTERNATE.KEY]]></category>

		<guid isPermaLink="false">http://pro-t24.com/blog/?p=298</guid>
		<description><![CDATA[Приложение EB.ALTERNATE.KEY бывает очень полезным, оно позволяет бизнес-пользователям без программирования создавать альтернативные индексы по приложениями. Например, настроив его соответствующим способом, можно добиться того, что пользователи смогут использовать для идентификации клиента не только ID который генерирует Т24, но и идентификатор из &#171;старой&#187; системы, при условии, что он записан в локальное или системном поле. Я не буду [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=squareglobus.wordpress.com&amp;blog=3911245&amp;post=298&amp;subd=squareglobus&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Приложение EB.ALTERNATE.KEY бывает очень полезным, оно позволяет бизнес-пользователям без программирования создавать альтернативные индексы по приложениями. Например, настроив его соответствующим способом, можно добиться того, что пользователи смогут использовать для идентификации клиента не только ID который генерирует Т24, но и идентификатор из &laquo;старой&raquo; системы, при условии, что он записан в локальное или системном поле. Я не буду описывать как и что настраивать, потому что этот вопрос неплохо освещен в документации и онлайн-справке. Однако есть моменты, на которые я хотел обратить внимание.</p>
<p><span id="more-298"></span></p>
<h3>Программное использование настроек EB.ALTERNATE.KEY</h3>
<p>Если альтеранитвынй индекс был заведен с настройками<code>&nbsp;&nbsp;&nbsp;3. 1 CONCAT.TYPE.... SYSTEM<br />
&nbsp;&nbsp;&nbsp;4. 1 ACCESS.METHOD.. READ</code>то Т24 автоматически создаст concat-файл. Получить доступ к этому файлу из пользовательского интерфейса нельзя, зато с такой таблицей можно работать программно, т.е этот файл можно открыть и прочитать его содержимое. В качестве имени создаваемого приложения используется склейка <em>&lt;ИМЯ ПРИЛОЖЕНИЯ&gt;.&lt;ИМЯ ПОЛЯ&gt;</em>. В качестве ID записей этого приложения будут использоваться значения поля, по которому строится альтернативный индекс. В самой записи буду содержаться ID записей основного приложений.</p>
<p>Например, пусть есть вот такая настройка:<code>&nbsp;&nbsp;&nbsp;&nbsp;APPLICATION....... ACCOUNT<br />
 ---------------------------------------<br />
&nbsp;&nbsp;&nbsp;1 ALT.KEY.MAX.LENGTH 35<br />
&nbsp;&nbsp;&nbsp;2. 1 ALT.KEY.FIELD.. OUR.EXT.ACCT.NO<br />
&nbsp;&nbsp;&nbsp;3. 1 CONCAT.TYPE.... SYSTEM<br />
&nbsp;&nbsp;&nbsp;4. 1 ACCESS.METHOD.. READ<br />
&nbsp;&nbsp;&nbsp;5. 1 UNIQUE......... NONE</code><br />
При этом будет создан файл <em>F.ACCOUNT.OUR.EXT.ACCT.NO</em></p>
<p>Содержимое одной из записей этого файла:<code>jsh pmb ~ --&gt;JED F.ACCOUNT.OUR.EXT.ACCT.NO 123-456-789<br />
&nbsp;<br />
File F.ACCOUNT.OUR.EXT.ACCT.NO , Record &#039;123-456-78        Insert      12:25:58<br />
Command-&gt;<br />
0001 KZ0010001*19364<br />
-------------------------------- End Of Record --------------------------------</code>&laquo;19364&raquo;&nbsp;&amp;#151 это ID записи в таблице ACCOUNT, в которой поле 111.OUR.EXT.ACCT.NO равно &laquo;123-456-789&raquo;:<code>jsh pmb ~ --&gt;LIST FBNK.ACCOUNT WITH  OUR.EXT.ACCT.NO EQ &quot;123-456-789&quot; OUR.EXT.ACCT.NO<br />
LIST FBNK.ACCOUNT WITH OUR.EXT.ACCT.NO EQ &quot;123-456-789&quot; OUR.EXT.ACCT.NO PAGE    1 11:06:51  21 APR 2009<br />
&nbsp;<br />
@ID.............    OUR.EXT.ACCT.NO....................<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;19364    123-456-789<br />
&nbsp;<br />
&nbsp;1 Records Listed<br />
&nbsp;<br />
jsh pmb ~ --&gt;</code><em>Обратите внимание на префикс с кодом компании</em>.</p>
<p>В зависимости от настроек поля 5.x UNIQUE в EB.ALTERNATE.KEY запись concat-файла может содержать один или несколько ID из основного приложения.</p>
<h3>Особенности настройки и использования</h3>
<p>Если настройки EAK были сделаны уже после того, как в основном приложении были созданы записи, то необходимо помнить, что информация по ранее заведенным данным не попадет в concat-файл после авторизации записи в EAK. Для построения альтернативного индекса по имеющимся записям, нужно зайти в каждую из имеющихся записей в основном приложении, внести изменения в поле на которое настроек EAK и авторизовать запись. Только после этого данные попадут в concat-файл. Просто переавторизовать запись будет недостаточно.</p>
<p>Ручные изменения в записях это не выход, проще будет создать свою build рутину, и указать ее в поле 7.x BUILD.ROUTINE, Эта рутина не имеет входных и выходных параметров. Она должна быть прописана в приложении PGM.FILE, при этом поле 1.TYPE должно быть задано как &laquo;S&raquo;, а в поле 8.x APPL.FOR.SUBR должно быть указано имя основной таблицы. Рутина выполнится, если запустить соответствующую запись в EAK с функцией V(erify). Для каждого альтернативного индекса должна быть написана своя рутина.</p>
<p>Важной особенностью использования EAK является то, что анализ введенного значения, не является ли оно альтернативным индексом, и замена его на ID из основного файл, происходит до выполнения основного функционала по открытию записи. Поясню на примере из жизни: в рамках внедрения мигрировали клиентов в Т24, на клиенте (CUSTOMER) завели поле, в котором хранили ID из старой системы и настроили на это поле альтернативный индекс. Важно, что этот индекс числовой&nbsp;&amp;#151 6-тизначный, Т24 по-умолчанию формирует так же 6-тизначные ID в CUSTOMER. Таким образом получили ситуацию, при которой, теоретически, альтернативный индекс может совпадать с каким-нибудь реальным ID из Т24. Так и случилось: в списке неавторизованных записей осталось 43 записи в статусе IHLD, при попытке открыть любую запись из этого перечня на редактирование&nbsp;&amp;#151 открываются другие авторизованные записи. Так происходило потому, что Т24 сначала интерпретировал 6 цифр как альтернативный индекс, находил такой индекс и вместо первоначальных 6-ти цифр подставлял ID другой записи.</p>
<p>Другой пример из реального внедрения. EAK был настроен на приложение FUNDS.TRANSFER на поле DEBIT.THEIR.REF. Когда начали тестироваться на большом количестве реальных входящих сообщений, в качестве DEBIT.THEIR.REF попадались разные значения, как 16-тизначные буквенно-цифровые комбинации, так и просто &laquo;1&raquo;, &laquo;13&raquo;, &laquo;237&raquo; и т.п. Ранее, до заведения настроек EAK, получить доступ к записи в FT, например FT0600300501, можно было как минимум 2-мя способами: введя полный ID, или ограничиться только &laquo;501&raquo;. В случае с &laquo;включенным&raquo; EAK, при вводе &laquo;501&raquo; система находила соответствующий альтернативный индекс, и открывала на редактирование не FT0600300501, а какую-то другую запись.</p>
<br /> Tagged: concatfile, EB.ALTERNATE.KEY <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/squareglobus.wordpress.com/298/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/squareglobus.wordpress.com/298/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/squareglobus.wordpress.com/298/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/squareglobus.wordpress.com/298/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/squareglobus.wordpress.com/298/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/squareglobus.wordpress.com/298/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/squareglobus.wordpress.com/298/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/squareglobus.wordpress.com/298/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/squareglobus.wordpress.com/298/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/squareglobus.wordpress.com/298/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/squareglobus.wordpress.com/298/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/squareglobus.wordpress.com/298/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/squareglobus.wordpress.com/298/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/squareglobus.wordpress.com/298/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=squareglobus.wordpress.com&amp;blog=3911245&amp;post=298&amp;subd=squareglobus&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://squareglobus.wordpress.com/2009/04/21/eb-alternate-key/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">squareglobus</media:title>
		</media:content>
	</item>
		<item>
		<title>Получение стека вызовов подпрограмм</title>
		<link>http://squareglobus.wordpress.com/2009/04/17/get-call-stack/</link>
		<comments>http://squareglobus.wordpress.com/2009/04/17/get-call-stack/#comments</comments>
		<pubDate>Fri, 17 Apr 2009 12:29:52 +0000</pubDate>
		<dc:creator>squareglobus</dc:creator>
				<category><![CDATA[Т24]]></category>
		<category><![CDATA[CALL]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[GOSUB]]></category>
		<category><![CDATA[oconv]]></category>
		<category><![CDATA[stack]]></category>
		<category><![CDATA[SYSTEM]]></category>

		<guid isPermaLink="false">http://pro-t24.com/blog/?p=279</guid>
		<description><![CDATA[Иногда бывает необходимо узнать состояние стека вызовов подпрограмм (call stack). Содержимое стека можно посмотреть в отладчике, так же можно получить состояние стека программно. Программно это можно сделать при помощи вызова функции SYSTEM(1029). Эта функция возвращает динамический массив, содержащий весь стек, включая все вызовы подпрограмм при помощи CALL и переходы GOSUB. Элементы стека разделены в этом [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=squareglobus.wordpress.com&amp;blog=3911245&amp;post=279&amp;subd=squareglobus&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Иногда бывает необходимо узнать состояние стека вызовов подпрограмм (call stack). Содержимое стека можно посмотреть в отладчике, так же можно получить состояние стека программно.</p>
<p><span id="more-279"></span></p>
<p>Программно это можно сделать при помощи вызова функции <em>SYSTEM(1029)</em>. Эта функция возвращает динамический массив, содержащий весь стек, включая все вызовы подпрограмм при помощи CALL и переходы GOSUB. Элементы стека разделены в этом массиве при помощи <em>VM</em>. В каждом элементе хранятся четыре атрибута разделенных <em>SM</em>. Рассмотрим их, и начнем сразу с четвертого, потому что в нем хранится имя &laquo;родительской&raquo; рутины, или имя текущей подпрограммы, если был переход по GOSUB, а именно этот параметра чаще всего и интересен при программном разборе стека вызовов. В первом атрибуте указывается глубина стека вызовов посредством CALL, второй атрибут&nbsp;&amp;#151 глубина стека переходов по GOSUB. При последовательном вызове нескольких рутин, каждый вызов будет добавлять элемент в начало стека, в каждом элементе будет последовательно наращиваться значение в первом атрибуте. Если в рамках одной рутины выполнено несколько переходов по GOSUB, то каждый такой переход так же добавит новый элемент в начало стека. У этих элементов значение первого атрибута будет одинаковым, но будет последовательно наращиваться значение во втором атрибуте. Третий атрибут содержит номер строки &laquo;родительской&raquo; программы, в которой был вызов текущей рутины, либо номер строки текущей рутины, в которой был инициирован переход по GOSUB.</p>
<p>Рассмотрим небольшой пример: имеется программа TEST.CALL.STACK.PRG из нее вызывается рутина TEST.CALL.STACK.RTN.1, а из нее далее вызывается рутина TEST.CALL.STACK.RTN.2. В последней рутине выполняется 3 перехода по GOSUB. Если после последнего перехода задать переменную Y.CALL.STACK как<code>Y.CALL.STACK = SYSTEM(1029)</code>то ее содержимое будет примерно таким:<code>Y.CALL.STACK&lt;1,1&gt; = &#039;3\3\24\TEST.CALL.STACK.RTN.2&#039;<br />
Y.CALL.STACK&lt;1,2&gt; = &#039;3\2\16\TEST.CALL.STACK.RTN.2&amp;#39<br />
Y.CALL.STACK&lt;1,3&gt; = &#039;3\1\8\TEST.CALL.STACK.RTN.2&#039;<br />
Y.CALL.STACK&lt;1,4&gt; = &#039;2\1\12\TEST.CALL.STACK.RTN.1&#039;<br />
Y.CALL.STACK&lt;1,5&gt; = &#039;1\1\6\TEST.CALL.STACK.PRG&#039;<br />
</code><em>Символом &laquo;\&raquo; представлен разделитель SM.</em></p>
<p>Существует еще один вариант программного получения стека вызовов&nbsp;&amp;#151 при помощи функции <em>OCONV</em>:<br />
<code>Y.CALL.STACK = OCONV(&#039;&#039;,&#039;U0016&#039;)</code></p>
<p>Полученный результат гораздо менее информативен чем в предыдущем варианте&nbsp;&amp;#151 функция возвращает только имена рутин, разделенные пробелами, при этом переходы по GOSUB никак не учитываются. Однако в большинстве случаев этого будет достаточно. Если в примере, который мы использовали выше применить способ получения стека через OCONV то результат будет такой:<code>Y.CALL.STACK = &#039;TEST.CALL.STACK.RTN.2 TEST.CALL.STACK.RTN.1 TEST.CALL.STACK.PRG&#039;</code></p>
<p>Есть еще один способ посмотреть содержимое стека вызова&nbsp;&amp;#151  через отладчик. Этот способ может оказаться особенно полезным, когда система &laquo;сваливается&raquo; в DEBUG в неожиданном месте и нужно будет исследовать проблему или собрать необходимые данные для HelpDesk. В отладчике содержимое стека можно отобразить командой &laquo;j -g&raquo;. Для нашего примера результат этой команды будет примерно таким:<code>jBASE debugger-&gt;j -g<br />
Line 0 , Source jmainfunction.b , Level 0<br />
Source changed to /data/t24/test/bnk.run/ETC.BP/TEST.CALL.STACK.PRG<br />
0006     CALL TEST.CALL.STACK.RTN.1<br />
Source changed to /data/t24/test/bnk.run/ETC.BP/TEST.CALL.STACK.RTN.1<br />
0012     CALL TEST.CALL.STACK.RTN.2<br />
Source changed to /data/t24/test/bnk.run/ETC.BP/TEST.CALL.STACK.RTN.2<br />
0008     GOSUB LABEL.1<br />
0016     GOSUB LABEL.2<br />
0024     GOSUB LABEL.3<br />
</code></p>
<p>Если использовать команду &laquo;j&raquo;, то отобразиться только стек GOSUB:<code>jBASE debugger-&gt;j<br />
0008     GOSUB LABEL.1<br />
0016     GOSUB LABEL.2<br />
0024     GOSUB LABEL.3</code></p>
<p>Под Т24 результат работы команды будет несколько другой, вот, например, результат просмотра стека в валидационной рутине на версии в приложении SECTOR:<code>jBASE debugger-&gt;j -g<br />
Line 0 , Source jmainfunction.b , Level 0<br />
Line 47 , Source EX<br />
Line 262 , Source T.EX<br />
Line 70 , Source RUN.APPLICATION<br />
Line 138 , Source RUN.APPLICATION<br />
Line 29 , Source EB.EXECUTE.APPLICATION<br />
Line 69 , Source SECTOR<br />
Line 37 , Source FIELD.MULTI.INPUT<br />
Line 390 , Source T.FIELD.MULTI.INPUT<br />
Line 1232 , Source T.FIELD.MULTI.INPUT<br />
Line 85 , Source VERSION.VALIDATION<br />
Line 70 , Source EB.CALL.API<br />
Line 178 , Source EB.CALL.API<br />
jBASE debugger-&gt;</code></p>
<br /> Tagged: CALL, debug, GOSUB, oconv, stack, SYSTEM <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/squareglobus.wordpress.com/279/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/squareglobus.wordpress.com/279/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/squareglobus.wordpress.com/279/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/squareglobus.wordpress.com/279/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/squareglobus.wordpress.com/279/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/squareglobus.wordpress.com/279/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/squareglobus.wordpress.com/279/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/squareglobus.wordpress.com/279/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/squareglobus.wordpress.com/279/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/squareglobus.wordpress.com/279/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/squareglobus.wordpress.com/279/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/squareglobus.wordpress.com/279/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/squareglobus.wordpress.com/279/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/squareglobus.wordpress.com/279/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=squareglobus.wordpress.com&amp;blog=3911245&amp;post=279&amp;subd=squareglobus&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://squareglobus.wordpress.com/2009/04/17/get-call-stack/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">squareglobus</media:title>
		</media:content>
	</item>
		<item>
		<title>Concat-файлы</title>
		<link>http://squareglobus.wordpress.com/2008/09/10/concatfile/</link>
		<comments>http://squareglobus.wordpress.com/2008/09/10/concatfile/#comments</comments>
		<pubDate>Wed, 10 Sep 2008 12:03:03 +0000</pubDate>
		<dc:creator>squareglobus</dc:creator>
				<category><![CDATA[Т24]]></category>
		<category><![CDATA[concatfile]]></category>

		<guid isPermaLink="false">http://blog.pro-t24.com/?p=138</guid>
		<description><![CDATA[Concat-файлы представляют собой вариант альтернативного индекса связывающего два приложения T24. Заполнение этих файлов выполняется системой T24. Простой и понятный пример это файл CUSTOMER.ACCOUNT, в качестве @ID записи этого файла выступает ID клиента из таблицы CUSTOMER, а содержимое записи - ID счетов из таблицы ACCOUNT, которые принадлежат этому клиенту. Таким образом, вместо того чтобы выполнят SELECT по [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=squareglobus.wordpress.com&amp;blog=3911245&amp;post=138&amp;subd=squareglobus&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Concat-файлы представляют собой вариант альтернативного индекса связывающего два приложения T24. Заполнение этих файлов выполняется системой T24. Простой и понятный пример это файл CUSTOMER.ACCOUNT, в качестве @ID записи этого файла выступает ID клиента из таблицы CUSTOMER, а содержимое записи - ID счетов из таблицы ACCOUNT, которые принадлежат этому клиенту. Таким образом, вместо того чтобы выполнят SELECT по ACCOUNT, мы можем прочитать одну запись из CUSTOMER.ACCOUNT и сразу получить нужный список. При большом количестве записей в ACCOUNT команда F.READ отработает быстрее, чем EB.READLIST.</p>
<p><span id="more-138"></span></p>
<p>Если мы откроем на просмотр таблицу CUSTOMER.ACCOUNT, то увидим примерно следующее:<br />
<img src="http://squareglobus.files.wordpress.com/2008/09/concat-file1.png?w=630" alt="concat-file" title="concat-file"   class="alignleft size-full wp-image-197" /></p>
<p>На первый взгляд, похоже на обычное многозначное поле, но если мы посмотрим на содержимое файл из jBase, то увидим вот что:<br />
<code>File FBNK.CUSTOMER.ACCOUNT , Record '100115'               Insert      17:23:42<br />
Command-&gt;<br />
0001 19208<br />
0002 19216<br />
0003 20273<br />
0004 21512<br />
0005 21733<br />
-------------------------------- End Of Record --------------------------------</code></p>
<p>Т.е. фактически в файле, каждый элемент списка - это отдельное поле, а не значение многозначного поля. Следует иметь это в виду при программной обработке concat-файлов.</p>
<p>Меня время от времени спрашивали, есть ли список всех concat-файлов, и я отвечал, что такого списка нет. И правда, в документации эти файлы описываются редко, но в то же время они могут оказаться очень полезными в различных локальных разработках. Недавно я сообразил, как получить такой список, решение оказалось настолько простым и очевидным, что я удивляюсь, как не додумался до него раньше:<br />
<code>jsh pmb ~ --&gt;SSELECT F.PGM.FILE WITH TYPE = &quot;T&quot;<br />
&nbsp;<br />
231 Records selected<br />
&nbsp;<br />
&gt;SAVE-LIST CONCAT.FILES<br />
231 record(s) saved to list &apos;CONCAT.FILES&apos;<br />
jsh pmb ~ --&gt;</code></p>
<p>Наверняка не все файлы подробно описаны в документации, но я думаю, что при необходимости, разобраться, что к чему, не составит особого труда.</p>
<p>Кроме уже существующих файлов можно создавать и пользовательские. На небольшом примере, покажу, как это делается. Предположим, что у нас есть локальное приложение, одно из полей которого «привязано» к DE.I.HEADER. Для примера назовем эту таблицу - LOC.APPLICATION. Для привязки поля к другому приложению мы используем массив CHECKFILE, далее приведено описание только одного поля в LOC.APPLICATION:<br />
<code>Z += 1 ; F(Z) = &quot;XX.IN.DEL.REF&quot;        ; N(Z) = &quot;25..&quot; ; T(Z) = &quot;AA&quot;<br />
CHECKFILE(Z) =  &quot;DE.I.HEADER&quot; : FM : DE.HDR.FROM.ADDRESS</code></p>
<p>Предположим, что мы создаем concat-файл, чтобы узнать какие записи из создаваемого нами приложения, буду привязаны к конкретным входящим сообщениям (они как раз и регистрируются в DE.I.HEADER) Назовем такой файл, например LOC.IN.DELIVERY.LINK. Тогда описание нашего поля в LOC.APPLICATION нужно дополнить заполнением массива CONCATFILE:<br />
<code>Z += 1 ; F(Z) = &quot;XX.IN.DEL.REF&quot;        ; N(Z) = &quot;25..&quot; ; T(Z) = &quot;AA&quot;<br />
CHECKFILE(Z) =  &quot;DE.I.HEADER&quot; : FM : DE.HDR.FROM.ADDRESS<br />
<strong> CONCATFILE(Z) = &quot;AL&quot;:FM:&quot;LOC.IN.DELIVERY.LINK&quot;</strong></code></p>
<p>Если смотреть описание массива CONCATFILE в I_RULES, то выясняется, что первое поле в элементе этого массива может принимать значения:</p>
<table border="1" cellspacing="0" cellpadding="2">
<tbody>
<tr>
<td>AL</td>
<td>значения в файле будут выравнены влево, соответсвует нечисловым данным</td>
</tr>
<tr>
<td>AR</td>
<td>значения в файле будут выравнены вправо, соответсвует числовым данным</td>
</tr>
<tr>
<td>NEW</td>
<td>служит для обозначения уникальных связей, т.е. одной записи в первом приложении, соответсвует только одна запись во втром приложении</td>
</tr>
</tbody>
</table>
<p>Во второе поле элемента массива CONCATFILE прописывается имя concat-файла, в нашем случае LOC.IN.DELIVERY.LINK.</p>
<p>Далее необходимо создать LOC.IN.DELIVERY.LINK, для этого используем шаблон TEMPLATE.T, а секцию DEFINE.PARAMETERS я приведу ниже целиком:<br />
<code>DEFINE.PARAMETERS:<br />
MAT F = &quot;&quot; ; MAT N = &quot;&quot; ; MAT T = &quot;&quot;<br />
MAT CHECKFILE = &quot;&quot; ; MAT CONCATFILE = &quot;&quot;<br />
ID.CHECKFILE = &quot;&quot; ; ID.CONCATFILE = &quot;&quot;<br />
&nbsp;<br />
ID.F  = &quot;DEL.REF&quot;; ID.N  = &quot;25.1&quot;; ID.T  = &quot;AA&quot;<br />
ID.CHECKFILE = &quot;DE.I.HEADER&quot; : FM : DE.HDR.MESSAGE.TYPE<br />
&nbsp;<br />
F(1)  = &quot;XX.LOC.APP.ID&quot;;  N(1)  = &quot;20.1&quot;<br />
CHECKFILE(1) = &quot;LOC.APPLICATION&quot; : FM : 1<br />
&nbsp;<br />
RETURN</code><em>Т.к. в качестве @ID используются ID записей из DE.I.HEADER, то соответствующим образам задается переменная ID.CHECKFILE. Содержимое каждой записи это ID из LOC.APPLICATION, это обуславливает заполнение массива CHECKFILE.</em></p>
<p><strong>Важное замечание:</strong> согласно рекомендациям компании Теменос при создании conact-файлов следует учитывать размер возможных записей в создаваемой таблице, если количество значений в записи будет составлять несколько сотен (около тысячи) то следует использовать другие методы, либо менять структуру создаваемого concat-файла, чтобы избежать потерь в производительности всей системы.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/squareglobus.wordpress.com/138/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/squareglobus.wordpress.com/138/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/squareglobus.wordpress.com/138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/squareglobus.wordpress.com/138/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/squareglobus.wordpress.com/138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/squareglobus.wordpress.com/138/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/squareglobus.wordpress.com/138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/squareglobus.wordpress.com/138/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/squareglobus.wordpress.com/138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/squareglobus.wordpress.com/138/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/squareglobus.wordpress.com/138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/squareglobus.wordpress.com/138/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/squareglobus.wordpress.com/138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/squareglobus.wordpress.com/138/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/squareglobus.wordpress.com/138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/squareglobus.wordpress.com/138/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=squareglobus.wordpress.com&amp;blog=3911245&amp;post=138&amp;subd=squareglobus&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://squareglobus.wordpress.com/2008/09/10/concatfile/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">squareglobus</media:title>
		</media:content>

		<media:content url="http://squareglobus.files.wordpress.com/2008/09/concat-file1.png" medium="image">
			<media:title type="html">concat-file</media:title>
		</media:content>
	</item>
		<item>
		<title>jQL: SELECT, часть 3</title>
		<link>http://squareglobus.wordpress.com/2008/08/14/select-part-3/</link>
		<comments>http://squareglobus.wordpress.com/2008/08/14/select-part-3/#comments</comments>
		<pubDate>Thu, 14 Aug 2008 04:04:57 +0000</pubDate>
		<dc:creator>squareglobus</dc:creator>
				<category><![CDATA[Т24]]></category>
		<category><![CDATA[COUNT]]></category>
		<category><![CDATA[jql]]></category>
		<category><![CDATA[LIST]]></category>
		<category><![CDATA[SELECT]]></category>
		<category><![CDATA[sort]]></category>

		<guid isPermaLink="false">http://blog.pro-t24.com/?p=113</guid>
		<description><![CDATA[В этой части я расскажу про сортировку, а также вкратце опишу использование команд COUNT и LIST. Сортировка По умолчанию команда SELECT возвращает несортированный список. Чтобы получить отсортированный массив по какому-либо полю нужно воспользоваться опциями BY (для сортировки по возрастанию) или BY-DSND (для сортировки по убыванию) например: SELECT FBNK.CUSTOMER BY SECTOR SELECT FBNK.CUSTOMER BY-DSND TARGET Для [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=squareglobus.wordpress.com&amp;blog=3911245&amp;post=113&amp;subd=squareglobus&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>В этой части я расскажу про сортировку, а также вкратце опишу использование команд COUNT и LIST.<br />
<span id="more-113"></span></p>
<h3>Сортировка</h3>
<p>По умолчанию команда SELECT возвращает несортированный список. Чтобы получить отсортированный массив по какому-либо полю нужно воспользоваться опциями <em>BY</em> (для сортировки по возрастанию) или <em>BY-DSND</em> (для сортировки по убыванию) например:
<pre><code>SELECT FBNK.CUSTOMER BY SECTOR</code></pre>
<pre><code>SELECT FBNK.CUSTOMER BY-DSND TARGET</code></pre>
</p>
<p>Для простой сортировки по ID существует команда <em>SSELECT</em>.</p>
<p>В том случае, если поле по которому производится сортировка многозначное, используется первое значение этого поля.</p>
<p>Если необходимо сортировать по значениям многозначного поля, то используются операторы <em>BY-EXP</em> и <em>BY-EXP-DSND</em>. Результирующий список будет состоять из элементов вида: <em>&lt;id  записи&gt;</em><strong>VM</strong><em>&lt;позиция значения в многозначном поле&gt;</em>. Рассмотрим пример, имеем файл ACCT.ACTIVITY, в котором прописана различная информация по оборотам по счетам. В поле 5. TRANSACT.CODE хранится код транзакции и это многозначное поле. В тестовом файле у меня всего 102 записи:
<pre><code>jsh pmb ~ --&gt;COUNT FBNK.ACCT.ACTIVITY
&nbsp;
&nbsp;&nbsp;102 Records counted
&nbsp;
jsh pmb ~ --&gt;</code></pre>
</p>
<p>Если мы просто выполним SELECT и сохраним список, то получим файл:
<pre><code>KZT101000001-200601
KZT100050019-200601
KZT145040001-200601
20907-200601
KZT146000001-200601
EUR100010012-200601
KZT131005555-200601
.&nbsp;.&nbsp;.</code></pre>
</p>
<p>Добавим сортировку по полю TRANSACT.CODE:
<pre><code>jsh pmb ~ --&gt;SELECT FBNK.ACCT.ACTIVITY BY-EXP TRANSACT.CODE
&nbsp;
&nbsp;&nbsp;304 Records selected
&nbsp;
&gt;</code></pre>
</p>
<p>Как видно, количество элементов в списке не соответствует количеству записей в файле, так получилось потому, что мы проводили сортировку по многозначному полю, и каждой записи в файле, в общем случае, соответствует несколько значений поля. В этом случае список будет выглядеть примерно так:
<pre><code>18837-200601]1
19248-200601]1
20125-200601]1
EUR100010011-200601]1
KZT100010012-200601]1
KZT100030011-200601]1
KZT100030012-200601]1
USD100010012-200601]1
USD100030011-200601]1
USD100030012-200601]1
XAU100010012-200601]1
XAU100110012-200601]1
.&nbsp;.&nbsp;.</code></pre>
<p><em>Символ &laquo;]&raquo; служит для обозначения VM.</em></p>
<p>Если мы воспользуемся командой LIST, то увидим вот такую картину:
<pre><code>jsh pmb ~ --&gt;LIST FBNK.ACCT.ACTIVITY BY-EXP TRANSACT.CODE TRANSACT.CODE
&nbsp;
@ID..........................    TRANSACT.CODE
&nbsp;
                 18837-200601                2
                 19248-200601                2
                 20125-200601                2
          EUR100010011-200601                3
          KZT100010012-200601                3
          KZT100030011-200601                3
          KZT100030012-200601                3
          USD100010012-200601                3
          USD100030011-200601                3
          USD100030012-200601                3
          XAU100010012-200601                3
.&nbsp;.&nbsp;.</code></pre>
<p><em>Мы получили массив, отсортированный по значениям поля TRANSACT.CODE.</em></p>
<p>В случае если поле является не просто многозначным, но и каждое значение содержит подзначения (sub-values) то для сортировки будет использоваться первое подзначение.</p>
<p>Для более сложного запроса:
<pre><code>SELECT FBNK.ACCT.ACTIVITY = &#039;[200601&#039; BY @ID BY-EXP DAY.NO BY-EXP-DSND TRANSACT.CODE</code></pre>
</p>
<p>Мы получим на выходе 102 записи (т.е. общее число записей без учета сортировки), и сохраненный список будет для нас бесполезен т.к. в нем будут элементы вида:
<pre><code>18837-200601]1
19248-200601]1
20125-200601]1
.&nbsp;.&nbsp;.</code></pre>
</p>
<p>Получается, что для программного использования SELECT такую сложную сортировку использовать проблематично. Однако если мы тот же сложный запрос используем для команды LIST, то мы получим вполне корректные результаты:
<pre><code>jsh pmb ~ --&gt;LIST FBNK.ACCT.ACTIVITY = &#039;[200601&#039; BY @ID BY-EXP DAY.NO
BY-EXP-DSND TRANSACT.CODE DAY.NO TRANSACT.CODE
&nbsp;
@ID...................   DAY.NO   TRANSACT.CODE
&nbsp;
          18821-200601       02              52
          18821-200601       03             401
          18821-200601       03             507
          18821-200601       03             730
          18837-200601       02               2
          18837-200601       03              50
          18837-200601       04              52
          18837-200601       04              58
          18837-200601       04              85
          18837-200601       04             210
          18837-200601       04             213
          18837-200601       04             401
          18837-200601       04             402
          18837-200601       04             730
          18837-200601       04             952
          19208-200601       02             210
          19208-200601       03             213
.&nbsp;.&nbsp;.</code></pre>
<p><em>В файле ACCT.ACTIVITY ID записи состоит из номера счета, года и месяца, например 10111-200807. Нашим запросом мы запросили все записи за 200601, отсортированные по @ID (в нашем случае это эквивалентно сортировке по номеру счета), далее идет сортировка по дате, и затем &#8212;  обратная сортировка по коду транзакции.</em></p>
<h3>LIST и COUNT</h3>
<p>Ранее я уже использовал вместо SELECT команды <em>COUNT</em> и <em>LIST</em>.</p>
<p>Если нужно узнать количество записей удовлетворяющих условиям выборки, то нет необходимости выполнять SELECT из под jsh, достаточно использовать то же условие для команды COUNT:
<pre><code>jsh pmb ~ --&gt;COUNT FBNK.CUSTOMER WITH SECTOR EQ &quot;4000&quot;
&nbsp;
&nbsp;&nbsp;17 Records counted
&nbsp;
jsh pmb ~ --&gt;</code></pre>
</p>
<p>Обращаю внимание, что в случае использования опции BY-EXP или BY-EXP-DSND (сортировка по многозначным полям) результаты работы SELECT и COUNT будут отличаться:</p>
<pre><code>jsh pmb ~ --&gt;SELECT FBNK.ACCT.ACTIVITY BY-EXP TRANSACT.CODE
&nbsp;
&nbsp;&nbsp;304 Records selected
&nbsp;
&gt;
</code></pre>
<pre><code>jsh pmb ~ --&gt;COUNT FBNK.ACCT.ACTIVITY BY-EXP TRANSACT.CODE
&nbsp;
&nbsp;&nbsp;102 Records counted
&nbsp;
jsh pmb ~ --&gt;</code></pre>
</p>
<p>LIST позволяет не только отобрать данные удовлетворяющие условию выборки, но и просмотреть их. Если просто заменить SELECT на LIST, то jBASE будет пролистывать записи целиком, но если после условия выборки перечислить интересующие нас поля, то будут отображены только они, в удобном табличном виде. Примеры я приводил выше.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/squareglobus.wordpress.com/113/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/squareglobus.wordpress.com/113/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/squareglobus.wordpress.com/113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/squareglobus.wordpress.com/113/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/squareglobus.wordpress.com/113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/squareglobus.wordpress.com/113/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/squareglobus.wordpress.com/113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/squareglobus.wordpress.com/113/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/squareglobus.wordpress.com/113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/squareglobus.wordpress.com/113/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/squareglobus.wordpress.com/113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/squareglobus.wordpress.com/113/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/squareglobus.wordpress.com/113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/squareglobus.wordpress.com/113/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/squareglobus.wordpress.com/113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/squareglobus.wordpress.com/113/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=squareglobus.wordpress.com&amp;blog=3911245&amp;post=113&amp;subd=squareglobus&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://squareglobus.wordpress.com/2008/08/14/select-part-3/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">squareglobus</media:title>
		</media:content>
	</item>
		<item>
		<title>jQL: SELECT, часть 2</title>
		<link>http://squareglobus.wordpress.com/2008/08/13/select-part-2/</link>
		<comments>http://squareglobus.wordpress.com/2008/08/13/select-part-2/#comments</comments>
		<pubDate>Wed, 13 Aug 2008 16:46:13 +0000</pubDate>
		<dc:creator>squareglobus</dc:creator>
				<category><![CDATA[Т24]]></category>
		<category><![CDATA[COUNT]]></category>
		<category><![CDATA[EVAL]]></category>
		<category><![CDATA[GET-LIST]]></category>
		<category><![CDATA[jql]]></category>
		<category><![CDATA[SAVE-LIST]]></category>
		<category><![CDATA[SELECT]]></category>

		<guid isPermaLink="false">http://pro-t24.com/blog/?p=234</guid>
		<description><![CDATA[В это части я опишу работу со списками. Списки Я уже писал, что команда SELECT выбирает не сами данные, а строит список, обычно состоящий из ID записей, при этом, когда эта команда выполняется в jsh, пользователь переходит в &#171;режим работы со списком&#187;. jBASE отображает количество записей удовлетворяющих условию выборки и также, меняется системное приглашение операционной [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=squareglobus.wordpress.com&amp;blog=3911245&amp;post=234&amp;subd=squareglobus&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>В это части я опишу работу со списками.</p>
<p><span id="more-234"></span></p>
<h3>Списки</h3>
<p>Я уже писал, что команда SELECT выбирает не сами данные, а строит список, обычно состоящий из ID записей, при этом, когда эта команда выполняется в jsh, пользователь переходит в &laquo;режим работы со списком&raquo;. jBASE отображает количество записей удовлетворяющих условию выборки и также, меняется системное приглашение операционной системы.<code>jsh pmb ~ --&gt;SELECT FBNK.CUSTOMER WITH RESIDENCE EQ &quot;US&quot;<br />
&nbsp;<br />
&nbsp;&nbsp;5 Records selected<br />
&nbsp;<br />
&gt;</code></p>
<p>Мы можем сохранить список при помощи команды <em>SAVE-LIST &lt;ИМЯ СПИСКА&gt;</em>, список будет сохранен файле с именем &lt;ИМЯ СПИСКА&gt; в каталоге, прописанном в системной переменной окружения JBCLISTFILE. В случае T24 это обычно каталог bnk.run/&amp;SAVEDLISTS&amp;. После сохранения пользователь выходит из &laquo;режима работы со списком&raquo; и возвращается в обычный jsh:<code>jsh pmb ~ --&gt;SELECT FBNK.CUSTOMER WITH RESIDENCE EQ &quot;US&quot;<br />
&nbsp;<br />
&nbsp;&nbsp;5 Records selected<br />
&nbsp;<br />
&gt;SAVE-LIST US.RESIDENTS<br />
5 record(s) saved to list &#039;US.RESIDENTS&#039;<br />
jsh pmb ~ --&gt;</code></p>
<p>Сохраненный список (файл) US.RESIDENTS будет выглядеть примерно так:<code>1004<br />
100115<br />
1002<br />
100176<br />
1003<br />
.&nbsp;.&nbsp;.</code></p>
<p>Числа &#8212; это ID записей в таблице CUSTOMER, которые соответствуют условию выборки, разделены они обычным переводом строки (0d0a &#8212; для Windows и 0a &#8212;  для Unix).</p>
<p>Для того чтобы продолжить работу с сохраненным списком, можно воспользоваться командой <em>GET-LIST &lt;ИМЯ СПИСКА&gt;</em>:<code>jsh pmb ~ --&gt;GET-LIST US.RESIDENTS<br />
&nbsp;<br />
&nbsp;&nbsp;5 Records selected<br />
&nbsp;<br />
&gt;</code></p>
<p>Результат выполнения команды SELECT или открытие соответствующего ей, ранее сохраненного, списка для системы jBASE эквиваленты.</p>
<p>Так как сохраненный список представляет собой обычный текстовый файл, то он может быть подготовлен заранее любым удобным способом и помещен в каталог bnk.run/&amp;SAVEDLISTS&amp;. Для того чтобы воспользоваться таким списком достаточно будет знать имя файла.</p>
<p>Чтобы выйти из &laquo;режима работы со списком&raquo; без сохранения, можно воспользоваться командой <em>CLEARSELECT</em>.</p>
<h3>Команды для работы со списками</h3>
<p>Существуют 3 команды для манипуляции со списками, <em>AND-LISTS</em>, <em>OR-LISTS</em> и <em>XOR-LISTS</em>. Все эти команды работают с двумя и более сохраненными списками. AND-LISTS получает новый массив, который состоит из элементов, имеющихся в первом и во втором списке. OR-LISTS создает новый список из уникальных элементов обоих списков и общих элементов. По сути OR-LISTS  склеивает списки. XOR-LISTS, команда обратная AND-LISTS, получает только те значения, которые есть в первом списке, но не встречаются во втором, и наоборот.</p>
<p>Небольшой пример, выберем сначала записи клиентов &#8212; резидентов США, а затем  &#8212; резидентов Франции.<code>jsh pmb ~ --&gt;SELECT FBNK.CUSTOMER WITH RESIDENCE EQ &quot;US&quot;<br />
&nbsp;<br />
&nbsp;&nbsp;5 Records selected<br />
&nbsp;<br />
&gt;SAVE-LIST US.RESID<br />
5 record(s) saved to list &#039;US.RESID&#039;<br />
jsh pmb ~ --&gt;SELECT FBNK.CUSTOMER WITH RESIDENCE EQ &quot;FR&quot;<br />
&nbsp;<br />
&nbsp;&nbsp;1 Records selected<br />
&nbsp;<br />
&gt;SAVE-LIST FR.RESID<br />
1 record(s) saved to list &#039;US.RESID&#039;<br />
jsh pmb ~ --&gt;</code></p>
<p>После этого склеим US.RESID и FR.RESID при помощи команды OR-LISTS:<code>jsh pmb ~ --&gt;OR-LISTS US.RESID FR.RESID<br />
&nbsp;<br />
&nbsp;&nbsp;6 Records selected<br />
&nbsp;<br />
&gt;SAVE-LIST US.FR.RESID<br />
6 record(s) saved to list &#039;US.FR.RESID&#039;<br />
jsh pmb ~ --&gt;</code></p>
<h3>Дополнительные возможности SELECT</h3>
<p>Опция <em>SAVING UNIQUE</em> позволяет не просто отобрать нужные записи, а выделить только уникальные значения нужного нам поля. Например, чтобы узнать какие значения поля RESIDENCE встречаются в таблице CUSTOMER достаточно выполнить команду:<code>jsh pmb ~ --&gt;SELECT FBNK.CUSTOMER SAVING UNIQUE RESIDENCE<br />
&nbsp;<br />
&nbsp;&nbsp;8 Records selected<br />
&nbsp;<br />
&gt;SAVE-LIST RESID<br />
8 record(s) saved to list &#039;RESID&#039;<br />
jsh pmb ~ --&gt;</code></p>
<p>В полученном списке будут не ID из таблицы CUSTOMER, а перечислены все уникальные значения поля RESIDENCE, которые встречаются в приложении, у меня на базе это выглядит так:<code>KZ<br />
US<br />
AN<br />
PT<br />
LV<br />
GB<br />
DE<br />
FR</code></p>
<p>Вторая полезная опция &#8212; <em>SAVING EVAL</em>, позволяет модифицировать список используя строковые константы, значения полей записи, некоторые функции jBASE. Очень удобно ее применять для построения списков, которые используют в приложении DL.DEFINE.</p>
<p>Для примера сформируем такой список для выгрузки всех значений приложения SECTOR:<code>jsh pmb ~ --&gt;SELECT FBNK.SECTOR SAVING EVAL &#039;&quot;SECTOR&gt;&quot;:@ID&#039;<br />
&nbsp;<br />
&nbsp;&nbsp;11 Records selected<br />
&nbsp;<br />
&gt;SAVE-LIST DL.SECTOR<br />
11 record(s) saved to list &#039;DL.SECTOR&#039;<br />
jsh pmb ~ --&gt;</code></p>
<p>Файл DL.SECTOR будет выглядеть так:<code>SECTOR&gt;3000<br />
SECTOR&gt;6000<br />
SECTOR&gt;9000<br />
SECTOR&gt;7272<br />
SECTOR&gt;1000<br />
SECTOR&gt;7000<br />
SECTOR&gt;4000<br />
SECTOR&gt;5000<br />
SECTOR&gt;2000<br />
SECTOR&gt;8000<br />
SECTOR&gt;7373</code></p>
<p>Разберем параметр, который мы указали для опции EVAL &#8212; &#039;&quot;SECTOR&gt;&quot;:@ID&#039;<br />
&quot;SECTOR&gt;&quot; &#8212; это текстовая константа, &laquo;:&raquo; &#8212; операция конкатенации, @ID &#8212; поле записи. Весь параметр целиком был заключен в одинарные кавычки, а внутри, для обозначения текстовой константы, мы использовали двойные кавычки., Кавычки взаимозаменяемы, т.е. записать параметр как  &quot;&#039;SECTOR&gt;&#039;:@ID&quot;.</p>
<p>Таким образом, при помощи SELECT мы отобрали нужные нам записи, а применение EVAL позволо нам провести несложные манипуляции с отобранными данными &laquo;на лету&raquo;.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/squareglobus.wordpress.com/234/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/squareglobus.wordpress.com/234/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/squareglobus.wordpress.com/234/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/squareglobus.wordpress.com/234/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/squareglobus.wordpress.com/234/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/squareglobus.wordpress.com/234/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/squareglobus.wordpress.com/234/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/squareglobus.wordpress.com/234/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/squareglobus.wordpress.com/234/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/squareglobus.wordpress.com/234/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/squareglobus.wordpress.com/234/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/squareglobus.wordpress.com/234/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/squareglobus.wordpress.com/234/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/squareglobus.wordpress.com/234/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/squareglobus.wordpress.com/234/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/squareglobus.wordpress.com/234/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=squareglobus.wordpress.com&amp;blog=3911245&amp;post=234&amp;subd=squareglobus&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://squareglobus.wordpress.com/2008/08/13/select-part-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">squareglobus</media:title>
		</media:content>
	</item>
		<item>
		<title>jQL: SELECT, часть 1</title>
		<link>http://squareglobus.wordpress.com/2008/08/06/select-part-1/</link>
		<comments>http://squareglobus.wordpress.com/2008/08/06/select-part-1/#comments</comments>
		<pubDate>Wed, 06 Aug 2008 04:58:21 +0000</pubDate>
		<dc:creator>squareglobus</dc:creator>
				<category><![CDATA[Т24]]></category>
		<category><![CDATA[jql]]></category>
		<category><![CDATA[MATCHES]]></category>
		<category><![CDATA[SELECT]]></category>

		<guid isPermaLink="false">http://blog.pro-t24.com/?p=57</guid>
		<description><![CDATA[SELECT основной оператор для выбора данных из файла. С технической точки зрения команда выбирает не сами данные, а строит список, обычно состоящий из ID записей. При этом все записи из этого списка будут удовлетворять условиями выборки. В простейшем случае достаточно указать только имя файла, такая команда выберет все записи в файле. SELECT FBNK.CUSTOMER Условие Более [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=squareglobus.wordpress.com&amp;blog=3911245&amp;post=209&amp;subd=squareglobus&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>SELECT основной оператор для выбора данных из файла. С технической точки зрения команда выбирает не сами данные, а строит список, обычно состоящий из ID записей. При этом все записи из этого списка будут удовлетворять условиями выборки. В простейшем случае достаточно указать только имя файла, такая команда выберет все записи в файле. <code>SELECT FBNK.CUSTOMER</code></p>
<p><span id="more-209"></span></p>
<h3>Условие</h3>
<p>Более распространенный вариант применения &#8211; SELECT с использованием условия выборки, например:<br />
<code>SELECT FBNK.CUSTOMER WITH SECTOR GT 1</code><code>SELECT FBNK.CUSTOMER WITH RESIDENCE EQ US</code></p>
<p>Условие формируется следующим образом:<br />
<br />ИМЯ.ПОЛЯ ОПЕРАТОР ЗНАЧЕНИЕ<br />
<br />Вот практически все операторы, которые можно использовать: EQ(=)&nbsp;-&nbsp;равно, NE(&lt;&gt;,&nbsp;#)&nbsp;- неравно, GT(&gt;)&nbsp;- больше, LT(&lt;)&nbsp;- меньше, GE(=&gt;,&gt;=)&nbsp;- больше или равно, LE(&lt;=,&nbsp;=&lt;)&nbsp;- меньше или равно, LIKE&nbsp;- соответствует шаблону, UNLIKE&nbsp;- не соответствует шаблону.</p>
<p>Значение лучше всего задавать в двойных кавычках. Если значение задано без кавычек, то парсер запросов вначале попытается найти поле с таким именем в файле, и только если не находит, то использует это значение как строку или число заданное пользователем. Например:<code>SELECT FBNK.CUSTOMER WITH RESIDENCE NE NATIONALITY</code><code>SELECT FBNK.CUSTOMER WITH RESIDENCE NE &quot;NATIONALITY&quot;</code>В первом случае отбираются записи у которых значения полей RESIDENCE и NATIONALITY<br />не равны между собой, во втором случае содержимое поля RESIDENCE сравнивается со строкой &laquo;NATIONALITY&raquo;.</p>
<p>Несколько условий выборки можно комбинировать использую скобки и операторы AND и OR<code>SELECT FBNK.CUSTOMER WITH (RESIDENCE = &quot;US&quot; AND NATIONALITY = &quot;US&quot;) OR (RESIDENCE = &quot;FR&quot; AND NATIONALITY = &quot;FR&quot;)</code></p>
<h3>Метасимволы</h3>
<p>При формировании условия выборки можно воспользоваться метасимволами &laquo;[&raquo;&nbsp;-&nbsp;игнорирование слева, &laquo;]&raquo;&nbsp;-&nbsp;игнорирование справа, &laquo;^&raquo;&nbsp;-&nbsp;любой символ. Эти метасимволы применяются совместно с оператором EQ или &laquo;=&raquo;.</p>
<p><code>SELECT FBNK.CUSTOMER WITH MNEMONIC EQ &quot;AT]&quot;</code><em>Команда выберет все записи, у которых поле MNEMONIC начинается с &laquo;AT&raquo;. </em></p>
<p><code>SELECT FBNK.CUSTOMER WITH SHORT.NAME EQ &quot;[US&quot;</code><em>Получим список записей, у которых поле SHORT.NAME заканчивается &laquo;US&raquo;. </em></p>
<p><code>SELECT FBNK.CUSTOMER WITH MNEMONIC EQ &quot;M^^^&quot;</code><em>Выберет записи, у которых поле MNEMONIC состоит из 4-х символов и начинается с&nbsp;&laquo;M&raquo;. </em></p>
<p><code>SELECT FBNK.CUSTOMER WITH MNEMONIC EQ &quot;N^^]&quot;</code><em>Отберутся записи, у которых поле MNEMONIC состоит из не менее 3-х символов и&nbsp;начинается с &laquo;N&raquo;.</em></p>
<p>Если выборка делается только по ID то можно использовать сокращенный форму:<code>SELECT F.DE.ADDRESS = &quot;US0010001]&quot;</code></p>
<h3>Поиск по шаблону</h3>
<p>В случае операторов LIKE и UNLIKE в качестве значения используются шаблоны двух видов. Первый, наиболее часто используемый, шаблон в котором три точки (&laquo;&#8230;&raquo;) означают любое количество любых символов, например:</p>
<p><code>SELECT FBNK.CUSTOMER WITH SHORT.NAME LIKE &quot;...LTD...&quot;</code><em>Команда выберет все записи, у которых в поле SHORT.NAME встречается подстрока &laquo;LTD&raquo; в любом месте.</em></p>
<p>Второй тип шаблонов которые можно применять, это паттерны которые используются в функции <a href="http://www.jbase.com/knowledgebase/manuals/3.0/30manpages/man/jbc2_MATCHES.htm" target="_blank">MATCHES</a>&#160;</p>
<table cellspacing="0" cellpadding="1" width="450" border="1">
<tbody>
<tr>
<td><em>Шаблон</em></td>
<td><em>Соответствие</em></td>
</tr>
<tr>
<td>nN</td>
<td>n цифр</td>
</tr>
<tr>
<td>nA</td>
<td>n букв</td>
</tr>
<tr>
<td>nC</td>
<td>n букв или цифр</td>
</tr>
<tr>
<td>nX</td>
<td>n любых символов</td>
</tr>
<tr>
<td>&#039;text&#039;</td>
<td>подстрока &#039;text&#039;, могут использоваться одинарные и двойные ковычки</td>
</tr>
</tbody>
</table>
<p>Если n=0 то допускается совпадение любого числа (0 и более) символов. Шаблоны можно комбинировать:<br />
<em>3N6A</em> &#8211; соответствует строке состоящей из 3-х цифр и 6-ти букв;<br />
<em>2C&#039;.&#039;3A&#039;-&#039;0X</em> &#8211; совпадет со строкой, которая начинается с 2-ух цифр или букв, затем присутствует символ &laquo;.&raquo;, после него 3 буквы, далее следует символ &laquo;-&raquo;, и заканчивается любым числом любых символов.<br />
Рассмотрим несколько примеров:</p>
<p><code>SELECT FBNK.CUSTOMER WITH MNEMONIC LIKE &quot;&#039;M&#039;3A&quot;</code><em>Будут найдены записи, в которых значение поля MNEMONIC начинается с &laquo;M&raquo; и состоит из 4 букв.</em></p>
<p><code>SELECT FBNK.CUSTOMER WITH POST.CODE LIKE &quot;5N&quot;</code><em>Отберутся записи, в которых значение поля POST.CODE состоит из 5 цифр.</em></p>
<p><code>SELECT FBNK.CUSTOMER WITH ACCOUNT.OFFICER LIKE &quot;3N0N&quot;</code><em>Получим список записей, в которых значение поля ACCOUNT.OFFICER состоит из 3 и более цифр.</em></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/squareglobus.wordpress.com/209/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/squareglobus.wordpress.com/209/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/squareglobus.wordpress.com/209/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/squareglobus.wordpress.com/209/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/squareglobus.wordpress.com/209/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/squareglobus.wordpress.com/209/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/squareglobus.wordpress.com/209/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/squareglobus.wordpress.com/209/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/squareglobus.wordpress.com/209/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/squareglobus.wordpress.com/209/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/squareglobus.wordpress.com/209/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/squareglobus.wordpress.com/209/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/squareglobus.wordpress.com/209/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/squareglobus.wordpress.com/209/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/squareglobus.wordpress.com/209/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/squareglobus.wordpress.com/209/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=squareglobus.wordpress.com&amp;blog=3911245&amp;post=209&amp;subd=squareglobus&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://squareglobus.wordpress.com/2008/08/06/select-part-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">squareglobus</media:title>
		</media:content>
	</item>
		<item>
		<title>Ошибка при выполнении команды LIST VOC</title>
		<link>http://squareglobus.wordpress.com/2008/06/28/list-voc-error-2/</link>
		<comments>http://squareglobus.wordpress.com/2008/06/28/list-voc-error-2/#comments</comments>
		<pubDate>Sat, 28 Jun 2008 12:20:07 +0000</pubDate>
		<dc:creator>squareglobus</dc:creator>
				<category><![CDATA[Т24]]></category>
		<category><![CDATA[error]]></category>
		<category><![CDATA[voc]]></category>

		<guid isPermaLink="false">http://squareglobus.wordpress.com/?p=47</guid>
		<description><![CDATA[Проблема проявляется следующим образом:jsh pmb ~ --&#62;LIST VOC Error in Statement &#34;LIST VOC&#34; Cannot open translate file NEWACC &#160; jsh pmb ~ --&#62; Эта ошибка часто проявлялась в новых дистрибутивах, которые поставляются банкам. Она, в принципе, общеизвестна и решение этой проблемы можно найти в конференциях. Для исправления нужно отредактировать DICT файл для VOC, запись &#171;@&#187;, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=squareglobus.wordpress.com&amp;blog=3911245&amp;post=208&amp;subd=squareglobus&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Проблема проявляется следующим образом:<code>jsh pmb ~ --&gt;LIST VOC<br />
Error in Statement &quot;LIST VOC&quot;<br />
Cannot open translate file NEWACC<br />
&nbsp;<br />
jsh pmb ~ --&gt;</code></p>
<p>Эта ошибка часто проявлялась в новых дистрибутивах, которые поставляются банкам. Она, в принципе, общеизвестна и решение этой проблемы можно найти в конференциях.</p>
<p>Для исправления нужно отредактировать DICT файл для VOC, запись &laquo;@&raquo;, первоначально эта запись будет выглядеть, как показано ниже:<code>jsh pmb ~ --&gt;JED DICT VOC @<br />
File DICT VOC , Record &apos;@&apos;                                 Insert      18:07:16<br />
Command-&gt;<br />
0001 PH<br />
0002 NAME TYPE DESC ID.SUP<br />
-------------------------------- End Of Record --------------------------------</code></p>
<p>Из второй строки нужно удалить &laquo;DESC&raquo;:<code>*File DICT VOC , Record &apos;@&apos;                                Insert      18:08:06<br />
Command-&gt; FI<br />
0001 PH<br />
0002 NAME TYPE ID.SUP<br />
-------------------------------- End Of Record --------------------------------<br />
</code></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/squareglobus.wordpress.com/208/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/squareglobus.wordpress.com/208/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/squareglobus.wordpress.com/208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/squareglobus.wordpress.com/208/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/squareglobus.wordpress.com/208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/squareglobus.wordpress.com/208/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/squareglobus.wordpress.com/208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/squareglobus.wordpress.com/208/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/squareglobus.wordpress.com/208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/squareglobus.wordpress.com/208/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/squareglobus.wordpress.com/208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/squareglobus.wordpress.com/208/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/squareglobus.wordpress.com/208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/squareglobus.wordpress.com/208/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/squareglobus.wordpress.com/208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/squareglobus.wordpress.com/208/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=squareglobus.wordpress.com&amp;blog=3911245&amp;post=208&amp;subd=squareglobus&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://squareglobus.wordpress.com/2008/06/28/list-voc-error-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">squareglobus</media:title>
		</media:content>
	</item>
	</channel>
</rss>
