<?xml version="1.0"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title>SunFlurry wiki  - Recent changes [en]</title>
		<link>http://sfsys.ru/index.php/Special:RecentChanges</link>
		<description>Track the most recent changes to the wiki in this feed.</description>
		<language>en</language>
		<generator>MediaWiki 1.31.1</generator>
		<lastBuildDate>Sat, 04 Apr 2026 13:22:45 GMT</lastBuildDate>
		<item>
			<title>Проект Розница</title>
			<link>http://sfsys.ru/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82_%D0%A0%D0%BE%D0%B7%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=5249&amp;oldid=5240</link>
			<guid isPermaLink="false">http://sfsys.ru/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82_%D0%A0%D0%BE%D0%B7%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=5249&amp;oldid=5240</guid>
			<description>&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Ссылки для скачивания бинарных файлов проекта&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&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: #222; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Revision as of 15:03, 3 April 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l113&quot; &gt;Line 113:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 113:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;small&amp;gt;Программа установки, а также бинарные файлы проекта не содержат вирусов, однако при скачивании любых исполняемых файлов из Интернета, всегда рекомендуется использовать антивирус со свежими базами обновлений!&amp;lt;/small&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;small&amp;gt;Программа установки, а также бинарные файлы проекта не содержат вирусов, однако при скачивании любых исполняемых файлов из Интернета, всегда рекомендуется использовать антивирус со свежими базами обновлений!&amp;lt;/small&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[http://{{SERVERNAME}}/download/&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;sf_retail_x86_20260401_install&lt;/del&gt;.exe &amp;lt;big&amp;gt;'''Скачать файл установки проекта Розница.'''&amp;lt;/big&amp;gt;]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[http://{{SERVERNAME}}/download/&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;sf_retail_x86_20260403_install&lt;/ins&gt;.exe &amp;lt;big&amp;gt;'''Скачать файл установки проекта Розница.'''&amp;lt;/big&amp;gt;]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==== Ссылка для скачивания простой демонстрации графических возможностей системы -- tetris.sfo ====&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==== Ссылка для скачивания простой демонстрации графических возможностей системы -- tetris.sfo ====&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</description>
			<pubDate>Fri, 03 Apr 2026 15:03:05 GMT</pubDate>
			<dc:creator>Admin</dc:creator>
			<comments>http://sfsys.ru/index.php/Talk:%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82_%D0%A0%D0%BE%D0%B7%D0%BD%D0%B8%D1%86%D0%B0</comments>
		</item>
		<item>
			<title>Электронная таблица SFT</title>
			<link>http://sfsys.ru/index.php?title=%D0%AD%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BD%D0%BD%D0%B0%D1%8F_%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D0%B0_SFT&amp;diff=5248&amp;oldid=0</link>
			<guid isPermaLink="false">http://sfsys.ru/index.php?title=%D0%AD%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BD%D0%BD%D0%B0%D1%8F_%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D0%B0_SFT&amp;diff=5248&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Admin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;User:Admin (page does not exist)&quot;&gt;&lt;bdi&gt;Admin&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/%D0%AD%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BD%D0%BD%D0%B0%D1%8F_%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D0%B0_SFT&quot; title=&quot;Электронная таблица SFT&quot;&gt;Электронная таблица SFT&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;a href=&quot;http://sfsys.ru/index.php?title=%D0%AD%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BD%D0%BD%D0%B0%D1%8F_%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D0%B0_SFT&amp;amp;diff=5248&quot;&gt;Show changes&lt;/a&gt;</description>
			<pubDate>Wed, 01 Apr 2026 10:01:41 GMT</pubDate>
			<dc:creator>Admin</dc:creator>
			<comments>http://sfsys.ru/index.php/Talk:%D0%AD%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BD%D0%BD%D0%B0%D1%8F_%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D0%B0_SFT</comments>
		</item>
		<item>
			<title>Функции общего назначения</title>
			<link>http://sfsys.ru/index.php?title=%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8_%D0%BE%D0%B1%D1%89%D0%B5%D0%B3%D0%BE_%D0%BD%D0%B0%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=5246&amp;oldid=0</link>
			<guid isPermaLink="false">http://sfsys.ru/index.php?title=%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8_%D0%BE%D0%B1%D1%89%D0%B5%D0%B3%D0%BE_%D0%BD%D0%B0%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=5246&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Admin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;User:Admin (page does not exist)&quot;&gt;&lt;bdi&gt;Admin&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8_%D0%BE%D0%B1%D1%89%D0%B5%D0%B3%D0%BE_%D0%BD%D0%B0%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&quot; title=&quot;Функции общего назначения&quot;&gt;Функции общего назначения&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;a href=&quot;http://sfsys.ru/index.php?title=%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8_%D0%BE%D0%B1%D1%89%D0%B5%D0%B3%D0%BE_%D0%BD%D0%B0%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D1%8F&amp;amp;diff=5246&quot;&gt;Show changes&lt;/a&gt;</description>
			<pubDate>Wed, 01 Apr 2026 10:01:39 GMT</pubDate>
			<dc:creator>Admin</dc:creator>
			<comments>http://sfsys.ru/index.php/Talk:%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8_%D0%BE%D0%B1%D1%89%D0%B5%D0%B3%D0%BE_%D0%BD%D0%B0%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D1%8F</comments>
		</item>
		<item>
			<title>Таблица</title>
			<link>http://sfsys.ru/index.php?title=%D0%A2%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D0%B0&amp;diff=5242&amp;oldid=0</link>
			<guid isPermaLink="false">http://sfsys.ru/index.php?title=%D0%A2%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D0%B0&amp;diff=5242&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Admin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;User:Admin (page does not exist)&quot;&gt;&lt;bdi&gt;Admin&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/%D0%A2%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D0%B0&quot; title=&quot;Таблица&quot;&gt;Таблица&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;a href=&quot;http://sfsys.ru/index.php?title=%D0%A2%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D0%B0&amp;amp;diff=5242&quot;&gt;Show changes&lt;/a&gt;</description>
			<pubDate>Wed, 01 Apr 2026 10:01:35 GMT</pubDate>
			<dc:creator>Admin</dc:creator>
			<comments>http://sfsys.ru/index.php/Talk:%D0%A2%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D0%B0</comments>
		</item>
		<item>
			<title>Установки сервера</title>
			<link>http://sfsys.ru/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B8_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0&amp;diff=5244&amp;oldid=0</link>
			<guid isPermaLink="false">http://sfsys.ru/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B8_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0&amp;diff=5244&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Admin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;User:Admin (page does not exist)&quot;&gt;&lt;bdi&gt;Admin&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B8_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0&quot; title=&quot;Установки сервера&quot;&gt;Установки сервера&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;a href=&quot;http://sfsys.ru/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B8_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0&amp;amp;diff=5244&quot;&gt;Show changes&lt;/a&gt;</description>
			<pubDate>Wed, 01 Apr 2026 10:01:35 GMT</pubDate>
			<dc:creator>Admin</dc:creator>
			<comments>http://sfsys.ru/index.php/Talk:%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B8_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0</comments>
		</item>
		<item>
			<title>Проект Розница</title>
			<link>http://sfsys.ru/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82_%D0%A0%D0%BE%D0%B7%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=5240&amp;oldid=0</link>
			<guid isPermaLink="false">http://sfsys.ru/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82_%D0%A0%D0%BE%D0%B7%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=5240&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Admin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;User:Admin (page does not exist)&quot;&gt;&lt;bdi&gt;Admin&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82_%D0%A0%D0%BE%D0%B7%D0%BD%D0%B8%D1%86%D0%B0&quot; title=&quot;Проект Розница&quot;&gt;Проект Розница&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;a href=&quot;http://sfsys.ru/index.php?title=%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82_%D0%A0%D0%BE%D0%B7%D0%BD%D0%B8%D1%86%D0%B0&amp;amp;diff=5240&quot;&gt;Show changes&lt;/a&gt;</description>
			<pubDate>Wed, 01 Apr 2026 10:01:28 GMT</pubDate>
			<dc:creator>Admin</dc:creator>
			<comments>http://sfsys.ru/index.php/Talk:%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82_%D0%A0%D0%BE%D0%B7%D0%BD%D0%B8%D1%86%D0%B0</comments>
		</item>
		<item>
			<title>Объект запрос базы данных</title>
			<link>http://sfsys.ru/index.php?title=%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82_%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=5238&amp;oldid=0</link>
			<guid isPermaLink="false">http://sfsys.ru/index.php?title=%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82_%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=5238&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Admin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;User:Admin (page does not exist)&quot;&gt;&lt;bdi&gt;Admin&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82_%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&quot; title=&quot;Объект запрос базы данных&quot;&gt;Объект запрос базы данных&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;a href=&quot;http://sfsys.ru/index.php?title=%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82_%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;amp;diff=5238&quot;&gt;Show changes&lt;/a&gt;</description>
			<pubDate>Wed, 01 Apr 2026 10:01:26 GMT</pubDate>
			<dc:creator>Admin</dc:creator>
			<comments>http://sfsys.ru/index.php/Talk:%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82_%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85</comments>
		</item>
		<item>
			<title>Объект MM</title>
			<link>http://sfsys.ru/index.php?title=%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82_MM&amp;diff=5236&amp;oldid=0</link>
			<guid isPermaLink="false">http://sfsys.ru/index.php?title=%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82_MM&amp;diff=5236&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Admin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;User:Admin (page does not exist)&quot;&gt;&lt;bdi&gt;Admin&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82_MM&quot; title=&quot;Объект MM&quot;&gt;Объект MM&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;a href=&quot;http://sfsys.ru/index.php?title=%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82_MM&amp;amp;diff=5236&quot;&gt;Show changes&lt;/a&gt;</description>
			<pubDate>Wed, 01 Apr 2026 10:01:24 GMT</pubDate>
			<dc:creator>Admin</dc:creator>
			<comments>http://sfsys.ru/index.php/Talk:%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82_MM</comments>
		</item>
		<item>
			<title>Общее описание языка</title>
			<link>http://sfsys.ru/index.php?title=%D0%9E%D0%B1%D1%89%D0%B5%D0%B5_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0&amp;diff=5234&amp;oldid=0</link>
			<guid isPermaLink="false">http://sfsys.ru/index.php?title=%D0%9E%D0%B1%D1%89%D0%B5%D0%B5_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0&amp;diff=5234&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Admin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;User:Admin (page does not exist)&quot;&gt;&lt;bdi&gt;Admin&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/%D0%9E%D0%B1%D1%89%D0%B5%D0%B5_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0&quot; title=&quot;Общее описание языка&quot;&gt;Общее описание языка&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;a href=&quot;http://sfsys.ru/index.php?title=%D0%9E%D0%B1%D1%89%D0%B5%D0%B5_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0&amp;amp;diff=5234&quot;&gt;Show changes&lt;/a&gt;</description>
			<pubDate>Wed, 01 Apr 2026 10:01:23 GMT</pubDate>
			<dc:creator>Admin</dc:creator>
			<comments>http://sfsys.ru/index.php/Talk:%D0%9E%D0%B1%D1%89%D0%B5%D0%B5_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0</comments>
		</item>
		<item>
			<title>Временная таблица базы данных</title>
			<link>http://sfsys.ru/index.php?title=%D0%92%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F_%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D0%B0_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=5232&amp;oldid=0</link>
			<guid isPermaLink="false">http://sfsys.ru/index.php?title=%D0%92%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F_%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D0%B0_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=5232&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Admin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;User:Admin (page does not exist)&quot;&gt;&lt;bdi&gt;Admin&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/%D0%92%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F_%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D0%B0_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&quot; title=&quot;Временная таблица базы данных&quot;&gt;Временная таблица базы данных&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;a href=&quot;http://sfsys.ru/index.php?title=%D0%92%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F_%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D0%B0_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;amp;diff=5232&quot;&gt;Show changes&lt;/a&gt;</description>
			<pubDate>Wed, 01 Apr 2026 10:01:20 GMT</pubDate>
			<dc:creator>Admin</dc:creator>
			<comments>http://sfsys.ru/index.php/Talk:%D0%92%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F_%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D0%B0_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85</comments>
		</item>
		<item>
			<title>TempDB.Update</title>
			<link>http://sfsys.ru/index.php?title=TempDB.Update&amp;diff=5230&amp;oldid=0</link>
			<guid isPermaLink="false">http://sfsys.ru/index.php?title=TempDB.Update&amp;diff=5230&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Admin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;User:Admin (page does not exist)&quot;&gt;&lt;bdi&gt;Admin&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/TempDB.Update&quot; title=&quot;TempDB.Update&quot;&gt;TempDB.Update&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{infobox function&lt;br /&gt;
|name=Update&lt;br /&gt;
|object=[[Временная таблица базы данных]]&lt;br /&gt;
|caption=Обновление значений столбцов временной таблицы&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|db=2&lt;br /&gt;
|exception=Невозможно превратить в строку, неверные аргументы, ошибка сервера&lt;br /&gt;
|visual=0}}&lt;br /&gt;
{{HeadLinks|&lt;br /&gt;
* [[Main_Page|Начальная страница]]&lt;br /&gt;
* [[Общее_описание_языка|Общее описание]]&lt;br /&gt;
* [[Объекты]]&lt;br /&gt;
* [[Временная таблица базы данных]]}}&lt;br /&gt;
Функция выполняет групповые вычисления и обновления указанных столбцов таблицы указанным образом, при этом можно использовать дополнительный источник данных для вычисления значений столбцов. Источником может быть указание на объект базы данных проекта или другая временная или постоянная таблица базы данных (даже из другой внешней БД). Данная функция не добавляет и не удаляет записи из временной таблицы, столбцы, не заданные для изменения, также не будут изменены.&lt;br /&gt;
&lt;br /&gt;
== Синтаксис ==&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
{{Grey|TempDB.}}'''Update'''({{Optional|&amp;lt;Источник данных (STRING,TEMPDB)&amp;gt;}},''&amp;lt;Формулы для вычисления столбцов (STRING)&amp;gt;''{{Optional|,&amp;lt;Стандартные фильтры&amp;gt;...}})&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Аргументы ====&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Источник данных (DB,STRING,TEMPDB)&amp;gt;''&amp;lt;/code&amp;gt; - {{Optional}} Источник данных для получения дополнительной информации для изменения столбцов таблицы. Параметр необязателен, если он является другой временной таблицей базы данных, также необходимо указать дополнительное условие связи между записями текущей временной таблицы и записями или элементами объекта базы данных (см. второй аргумент). Источником может быть:&lt;br /&gt;
** '''Строка''' -- задает путь объекта базы данных и наименование столбца, по которому будет происходить синхронизация между объектом и текущей таблицей в виде &amp;lt;code&amp;gt;&amp;lt;Тип данных БД&amp;gt;.&amp;lt;Вид данных БД&amp;gt;:&amp;lt;Столбец, содержащий объекты указанного вида&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
** '''Другая временная таблица базы данных''' -- переменная, задающая другую временную или постоянную таблицу базы данных (даже из другой внешней БД).&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Формулы для вычисления столбцов (STRING)&amp;gt;''&amp;lt;/code&amp;gt; - Аргумент задает способ вычисления столбцов таблицы, формулы могут использовать столбцы самой таблицы при вычислении, а также, если указан дополнительный источник данных, информацию из него. Задание аргумента имеет следующий формат: &amp;lt;code&amp;gt;[&amp;lt;Условие объединения записей текущей таблицы и записей другой временной таблицы-источника данных&amp;gt;,]&amp;lt;Выражение 1&amp;gt;-&amp;gt;&amp;lt;Имя столбца 1&amp;gt;,&amp;lt;Выражение 2&amp;gt;-&amp;gt;&amp;lt;Имя столбца 2&amp;gt;...&amp;lt;/code&amp;gt;. Выражения содержат весь возможный набор функций и операторов языка запросов (см. [[Временная таблица базы данных]], [[Объект запрос базы данных]]). '''Важно''': Не все серверы базы данных готовы принимать выражения с использованием ссылок на поля внешних таблиц (&amp;lt;code&amp;gt;Doc.DocDate&amp;lt;/code&amp;gt; и т.п.) в условие ''объединения и записей текущей таблицы и записей другой временной таблицы-источника данных''. Это ограничение можно обойти, предварительно создав дополнительный столбец в оригинальной таблице и заполнив его результатом выражения, с тем, чтобы в условии были только простые указания на столбцы. См. пример, демонстрирующий такую проблему ниже. Также для этого условия рекомендуется использовать наиболее простые выражения без вычислений. SQLite3, к примеру, очень сильно замедляет выполнение запроса, если в условии для объединения использованы какие-либо вычисления.&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Стандартные фильтры&amp;gt;''&amp;lt;/code&amp;gt; - {{Optional}} Стандартные фильтры отбора записей текущей таблицы данных описаны в статье [[Стандартные фильтры]]. Важное отличие от фильтров функций объектов базы данных заключается в том, что стандартные фильтры всегда работают в сложном (расширенном) режиме, при этом отсутствует требование, что первая строка фильтра должна начинаться на знак '''~'''. Выражения фильтров содержат весь возможный набор функций и операторов языка запросов (см. [[Временная таблица базы данных]], [[Объект запрос базы данных]]), при указании наименование также применимы префиксы (типа ''':'''), как это описано в [[Временная таблица базы данных#Формулы при вычислении полей записей временной таблицы базы данных|статье по временной таблице базы данных]]. Записи таблицы, не входящие в фильтр, будут пропущены при изменении.&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Пример создает таблицу аТемп, и заполняет ее резервами документа ЗаказНаПроизводство, при этом в ней также заполнено поле документа ВыпускПродукции. &lt;br /&gt;
//  Документ ВыпускПродукции подчинен документу ЗаказНаПроизводство. Выборка документов происходит за период с НачДата по КонДата.&lt;br /&gt;
//Таблица номенклатуры из резервов с выпусками и заданиями&lt;br /&gt;
аТемп:=TempDB.Create(&amp;quot;зДок:DB,зЗад:DB,зН:DB:I,Количество:NUMBER.15.5&amp;quot;);&lt;br /&gt;
//Заказы на производство&lt;br /&gt;
аТемп.LoadFrom(&amp;quot;Stor.Резервы&amp;quot;,&amp;quot;@LINK-&amp;gt;зЗад,Номенклатура-&amp;gt;зН,?(@EXPENSE=1,-Количество,Количество)-&amp;gt;Количество&amp;quot;,&lt;br /&gt;
  &amp;quot;(BegOfDay(@DATE)&amp;gt;=НачДата)And(BegOfDay(@DATE)&amp;lt;=КонДата)&amp;quot;,&amp;quot;IsType(@LINK,Doc.ЗаказНаПроизводство)&amp;quot;);&lt;br /&gt;
//Заполняем зДок (подчиненный документ -- ВыпускПродукции)&lt;br /&gt;
вТемп:=TempDB.Create(&amp;quot;зДок2:DB,зЗад:DB&amp;quot;);&lt;br /&gt;
//Выбираются только те документы выпусков, основания которых (ЗаказНаПроизводство) находятся в таблице аТемп&lt;br /&gt;
вТемп.LoadFrom(&amp;quot;Doc.ВыпускПродукции&amp;quot;,&amp;quot;@ELEMENT-&amp;gt;зДок2,@ELEMENT.ДокОснование-&amp;gt;зЗад&amp;quot;,&amp;quot;@ELEMENT.ДокОснование IN аТемп.зЗад&amp;quot;);&lt;br /&gt;
//Заполним столбец зДок оригинальной таблицы, объединение происходит по условию &amp;quot;:зЗад=зЗад&amp;quot;.&lt;br /&gt;
аТемп.Update(вТемп,&amp;quot;:зЗад=зЗад,зДок2-&amp;gt;зДок&amp;quot;);&lt;br /&gt;
//В дальнейшем таблицу аТемп можно выводить на экран или использовать в последующих запросах.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Второй пример показывает последовательное заполнение реквизитов Контрагент (зК), Адрес (зАД) и Дата документа (зДата) из разных объектов базы данных в таблицу, &lt;br /&gt;
//  которая содержит совокупность строк, загруженных из накопителя&lt;br /&gt;
//Создаем и заполняем таблицу движениями накопителя Остатки, накопитель не содержит всех необходимых нам полей, к примеру, в нем отсутствует указание на контрагента или адрес&lt;br /&gt;
аСтроки:=TempDB.Create(&amp;quot;зДал:Number.20.7,зН:DB,зПартия:DB,зК:DB,зАД:DB,зДок:DOC,зСклад:DB,зДата:Date&amp;quot;);&lt;br /&gt;
//Запрос производится за период с НачДата по КонДата, также отбирается номенклатура по спискам оН.Get(1) и оН.Get(2)&lt;br /&gt;
аСтроки.LoadFrom(&amp;quot;Storage.Остатки&amp;quot;,&amp;quot;Количество*?(@EXPENSE=0,1,-1)*Номенклатура.Объем-&amp;gt;зДал,Номенклатура-&amp;gt;зН,Склад-&amp;gt;зСклад,Партия-&amp;gt;зПартия,@LINK-&amp;gt;зДок&amp;quot;,&amp;quot;@DATE&amp;gt;=НачДата&amp;quot;,&amp;quot;@Date&amp;lt;КонДата&amp;quot;,&lt;br /&gt;
      &amp;quot;Номенклатура IN оН.Get(1)&amp;quot;,&amp;quot;Номенклатура NOT IN оН.Get(2)&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
//Удаляем из таблицы строки, связанные с документами, типа Сторнирование&lt;br /&gt;
аСтроки.Remove(&amp;quot;IsType(зДок,Doc.Сторнирование)&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
//Заполняем столбцы Контрагент, Адрес и Дата, так как накопитель может иметь записи разных документов, которые являются разными таблицами БД, &lt;br /&gt;
//  необходимо делать запросы отдельно по каждой из таблицы, альтернативно, можно было бы сделать запрос к какому-нибудь журналу документов, &lt;br /&gt;
//  если последний содержит нужные поля.&lt;br /&gt;
//Запросы выглядят одинаковыми, но они происходят к разным таблицам и разным реквизитам (столбцам) таблиц&lt;br /&gt;
//  Те записи текущей таблицы, которые отсутствуют в источнике данных, по которому происходит запрос, будут пропущены при обновлении&lt;br /&gt;
аСтроки.Update(&amp;quot;Doc.Реализация:зДок&amp;quot;,&amp;quot;Контрагент-&amp;gt;зК,Адрес-&amp;gt;зАД,DocDate-&amp;gt;зДата&amp;quot;);&lt;br /&gt;
аСтроки.Update(&amp;quot;Doc.ВозвратПоставщику:зДок&amp;quot;,&amp;quot;Контрагент-&amp;gt;зК,Адрес-&amp;gt;зАД,DocDate-&amp;gt;зДата&amp;quot;);&lt;br /&gt;
аСтроки.Update(&amp;quot;Doc.ВозвратОтПокупателя:зДок&amp;quot;,&amp;quot;Контрагент-&amp;gt;зК,Адрес-&amp;gt;зАД,DocDate-&amp;gt;зДата&amp;quot;);&lt;br /&gt;
аСтроки.Update(&amp;quot;Doc.ПоступлениеТМЦ:зДок&amp;quot;,&amp;quot;Контрагент-&amp;gt;зК,Адрес-&amp;gt;зАД,DocDate-&amp;gt;зДата&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Пример показывает ограничения при использовании функции и обновлении содержимого таблицы с помощью другой таблицы базы данных, когда объединение производится с помощью сложного выражения.&lt;br /&gt;
//Таблицы:&lt;br /&gt;
//аТемп содержит столбцы зДок (документ ВыпускПродукции) и зН (справочник Номенклатура), Количество (вещественное число)&lt;br /&gt;
//бТемп содержит столбцы Index (составной столбец, полученный по формуле зДок.DocNum+&amp;quot;:&amp;quot;+GetYear(зДок.DocDate)+&amp;quot;:&amp;quot;+зН.Code), Цена (цена материала зН в документе ВыпускПродукции зДок)&lt;br /&gt;
//Требуется добавить и заполнить столбец &amp;quot;Сумма&amp;quot; в таблице аТемп используя столбик локальный Количество и столбик Цена из бТемп.&lt;br /&gt;
&lt;br /&gt;
//Данная конструкция не будет работать под MS-SQL, так как при объединении таблиц не разрешается использование переменных из внешних таблиц&lt;br /&gt;
//  (однако, конструкция, возможно будет работать под управлением других типов СУБД):&lt;br /&gt;
&lt;br /&gt;
аТемп.AddColumns(&amp;quot;Сумма:Number.15.2&amp;quot;);&lt;br /&gt;
аТемп.Update(бТемп,&amp;quot;Trim(:зДок..Doc.ВыпускПродукции.DocNum)+&amp;quot;&amp;quot;:&amp;quot;&amp;quot;+Str(GetYear(:зДок..Doc.ВыпускПродукции.DocDate))+&amp;quot;&amp;quot;:&amp;quot;&amp;quot;+:зН..Ref.тмцНоменклатура.Code=Index,Цена*:Количество-&amp;gt;Сумма&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
//Данная конструкция будет работать корректно (заметьте, что локальные столбцы помечаются префиксом &amp;quot;:&amp;quot;, чтобы избежать разночтения системой):&lt;br /&gt;
&lt;br /&gt;
аТемп.AddColumns(&amp;quot;Сумма:Number.15.2,Index:STRING.100&amp;quot;);&lt;br /&gt;
аТемп.Update(,&amp;quot;Trim(зДок..Doc.ВыпускПродукции.DocNum)+&amp;quot;&amp;quot;:&amp;quot;&amp;quot;+Str(GetYear(зДок..Doc.ВыпускПродукции.DocDate))+&amp;quot;&amp;quot;:&amp;quot;&amp;quot;+зН..Ref.тмцНоменклатура.Code-&amp;gt;Index&amp;quot;);&lt;br /&gt;
аТемп.Update(бТемп,&amp;quot;:Index=Index,Цена*:Количество-&amp;gt;Сумма&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</description>
			<pubDate>Wed, 01 Apr 2026 10:00:51 GMT</pubDate>
			<dc:creator>Admin</dc:creator>
			<comments>http://sfsys.ru/index.php/Talk:TempDB.Update</comments>
		</item>
		<item>
			<title>TempDB.Create</title>
			<link>http://sfsys.ru/index.php?title=TempDB.Create&amp;diff=5222&amp;oldid=0</link>
			<guid isPermaLink="false">http://sfsys.ru/index.php?title=TempDB.Create&amp;diff=5222&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Admin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;User:Admin (page does not exist)&quot;&gt;&lt;bdi&gt;Admin&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/TempDB.Create&quot; title=&quot;TempDB.Create&quot;&gt;TempDB.Create&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{infobox function&lt;br /&gt;
|name=Create&lt;br /&gt;
|object=[[Временная таблица базы данных]]&lt;br /&gt;
|caption=Создание объекта временной таблицы&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|db=2&lt;br /&gt;
|exception=Невозможно превратить в строку, неверные аргументы, ошибка сервера&lt;br /&gt;
|visual=0}}&lt;br /&gt;
{{HeadLinks|&lt;br /&gt;
* [[Main_Page|Начальная страница]]&lt;br /&gt;
* [[Общее_описание_языка|Общее описание]]&lt;br /&gt;
* [[Объекты]]&lt;br /&gt;
* [[Временная таблица базы данных]]}}&lt;br /&gt;
Функция создает новый объект временной таблицы базы данных с заданными столбцами и их типами данных, если это необходимо. При указании второго аргумента, функция создает или открывает постоянную таблицу внешней базы данных по их именам. Если таблица уже существовала, сервер проверит последовательность и типы данных столбцов таблицы. Если какой-то их типов отличается, функция вызовет исключение, иначе будет создан объект, с помощью которого можно обращаться к этой таблице. Если столбец ранее не сущестсвовал, он будет добавлен в таблицу. Если таблицы с таким именем не было в указанной базе данных, она будет создана. Имена БД должны быть предварительно перечислены [[Установки сервера|установках сервера]] (ветка '''SimpleDBases'''). Для наименований таблиц рекомендуется использовать латиницу или цифры, запрещено использовать знаки &amp;quot;.&amp;quot; или &amp;quot;,&amp;quot;. Таблица может содержать большее количество столбцов, тем указано в функции, если таблица содержит меньшее количество, недостающие столбцы будут созданы. Функция вызывается из интерфейса временной таблицы.&lt;br /&gt;
&lt;br /&gt;
== Синтаксис ==&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
{{Grey|TempDB.}}'''Create'''({{Optional|&amp;lt;Наименования столбцов с типами данных (STRING)&amp;gt;,&amp;lt;Имя внешней БД и наименование ее таблицы (STRING)&amp;gt;}}):''&amp;lt;Новый объект (TEMPDB)&amp;gt;''&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Аргументы ====&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Наименования столбцов с типами данных (STRING)&amp;gt;''&amp;lt;/code&amp;gt; - {{Optional}} Задает наименования столбцов в создаваемой таблице через запятую, формат задания столбца: &amp;lt;code&amp;gt;&amp;lt;Наименование столбца&amp;gt;:&amp;lt;Тип данных столбца&amp;gt;[:&amp;lt;Дополнительные флаги столбца&amp;gt;]&amp;lt;/code&amp;gt;.&lt;br /&gt;
** Наименование столбца подчиняется стандартным правилам создания наименований в системе и может содержать международные символы.&lt;br /&gt;
** [[Нотация типов данных|Тип данных]] задается либо в виде прямого указания на тип данных &amp;lt;code&amp;gt;&amp;lt;Тип&amp;gt;[.&amp;lt;Размер&amp;gt;[.&amp;lt;Точность&amp;gt;]]&amp;lt;/code&amp;gt;, возможно указание на следующие типы:&lt;br /&gt;
*** '''NUMBER''', '''NUM''' -- задает вещественное число с указанием на точность его представления. Тип записывается в виде &amp;lt;code&amp;gt;NUMBER.&amp;lt;Общее количество цифр&amp;gt;.&amp;lt;Количество цифр после точки&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
*** '''INTEGER''', '''INT''' -- задает целое 64-битное число.&lt;br /&gt;
*** '''REAL''' -- задает произвольное вещественное число (в инженерной нотации)&lt;br /&gt;
*** '''DATE''' -- задает тип данных даты и времени.&lt;br /&gt;
*** '''STRING''', '''STR''' -- задает строковой тип данных с указанием длины строки в виде &amp;lt;code&amp;gt;STRING.&amp;lt;Длина строки в символах&amp;gt;&amp;lt;/code&amp;gt;. Для строк произвольной длины, необходимо указать ноль (возможности при работе с такими строками имеют определенные ограничения для SQL серверов).&lt;br /&gt;
*** '''ANY''', '''DB''' -- задает произвольный тип базы данных.&lt;br /&gt;
*** '''&amp;lt;Тип данных БД&amp;gt;[.&amp;lt;Вид данных БД&amp;gt;]''' -- задает определенный тип данных базы данных. В ''типе данных БД'' можно указать '''REF''', '''DOC''', '''JOUR''', '''STOR''' или '''ENUM'''.&lt;br /&gt;
** Также ''тип данных'' можно задать с помощью указания на существующий реквизит объекта базы данных, иногда такой способ является более универсальным. В это случае формат записи выглядит следующим образом: &amp;lt;code&amp;gt;-&amp;gt;&amp;lt;Тип данных БД&amp;gt;.&amp;lt;Вид данных БД&amp;gt;.&amp;lt;Реквизит объекта БД&amp;gt;&amp;lt;/code&amp;gt;. Система автоматически использует тип данных указанного реквизита для создания столбца временной таблицы.&lt;br /&gt;
** ''Флаги столбца'' представляют совокупность букв-указаний. В данный момент можно использовать следующие указания:&lt;br /&gt;
*** '''I''' -- Добавить индекс к данному столбцу после создания&lt;br /&gt;
*** '''U''' -- Текстовые данные, хранящиеся в столбце будут использовать формат UTF-16. '''Внимание''': без такого указания, по умолчанию текст будет храниться в текущей кодировке ANSI, что может явиться причиной потери международных символов.&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Имя внешней БД и наименование ее таблицы (STRING)&amp;gt;''&amp;lt;/code&amp;gt; - {{Optional}} При использовании этого аргумента будет создана, модифицирована или проверена постоянная таблица БД с указанным именем в указанной базе данных СУБД. Аргмент задается в формате &amp;lt;code&amp;gt;&amp;lt;Имя базы данных&amp;gt;.&amp;lt;Имя временной таблицы&amp;gt;&amp;lt;/code&amp;gt;. Имена баз данных должны быть заранее заданы в [[Установки сервера|установках сервера]] (ветка '''SimpleDBases'''), имена таблиц могут быть произвольными, однако рекомендуется использовать только латиницу и цифры, запрещено использовать знаки &amp;quot;.&amp;quot; или &amp;quot;,&amp;quot;. Объект, созданный в этом режиме, будет функционально соответствовать обычному объекту временной таблицы БД, однако, на данный момент функция [[TempDB.Group|Group]] недоступна для таких таблиц, и функция удаления таблицы [[TempDB.DeleteTable|DeleteTable]] будет работать только для них.&lt;br /&gt;
&lt;br /&gt;
==== Возвращаемое значение ====&lt;br /&gt;
Возвращает новый объект временной таблицы базы данных.&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Пример создает таблицу аТемп, и заполняет ее резервами документа ЗаказНаПроизводство, при этом в ней также заполнено поле документа ВыпускПродукции. &lt;br /&gt;
//  Документ ВыпускПродукции подчинен документу ЗаказНаПроизводство. Выборка документов происходит за период с НачДата по КонДата.&lt;br /&gt;
//Таблица номенклатуры из резервов с выпусками и заданиями&lt;br /&gt;
аТемп:=TempDB.Create(&amp;quot;зДок:DB,зЗад:DB,зН:DB:I,Количество:NUMBER.15.5&amp;quot;);&lt;br /&gt;
//Заказы на производство&lt;br /&gt;
аТемп.LoadFrom(&amp;quot;Stor.Резервы&amp;quot;,&amp;quot;@LINK-&amp;gt;зЗад,Номенклатура-&amp;gt;зН,?(@EXPENSE=1,-Количество,Количество)-&amp;gt;Количество&amp;quot;,&lt;br /&gt;
  &amp;quot;(BegOfDay(@DATE)&amp;gt;=НачДата)And(BegOfDay(@DATE)&amp;lt;=КонДата)&amp;quot;,&amp;quot;IsType(@LINK,Doc.ЗаказНаПроизводство)&amp;quot;);&lt;br /&gt;
//Заполняем зДок (подчиненный документ -- ВыпускПродукции)&lt;br /&gt;
вТемп:=TempDB.Create(&amp;quot;зДок2:DB,зЗад:DB&amp;quot;);&lt;br /&gt;
//Выбираются только те документы выпусков, основания которых (ЗаказНаПроизводство) находятся в таблице аТемп&lt;br /&gt;
вТемп.LoadFrom(&amp;quot;Doc.ВыпускПродукции&amp;quot;,&amp;quot;@ELEMENT-&amp;gt;зДок2,@ELEMENT.ДокОснование-&amp;gt;зЗад&amp;quot;,&amp;quot;@ELEMENT.ДокОснование IN аТемп.зЗад&amp;quot;);&lt;br /&gt;
//Заполним столбец зДок оригинальной таблицы, объединение происходит по условию &amp;quot;:зЗад=зЗад&amp;quot;.&lt;br /&gt;
аТемп.Update(вТемп,&amp;quot;:зЗад=зЗад,зДок2-&amp;gt;зДок&amp;quot;);&lt;br /&gt;
//В дальнейшем таблицу аТемп можно выводить на экран или использовать в последующих запросах.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</description>
			<pubDate>Wed, 01 Apr 2026 10:00:50 GMT</pubDate>
			<dc:creator>Admin</dc:creator>
			<comments>http://sfsys.ru/index.php/Talk:TempDB.Create</comments>
		</item>
		<item>
			<title>TempDB.DeleteTable</title>
			<link>http://sfsys.ru/index.php?title=TempDB.DeleteTable&amp;diff=5224&amp;oldid=0</link>
			<guid isPermaLink="false">http://sfsys.ru/index.php?title=TempDB.DeleteTable&amp;diff=5224&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Admin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;User:Admin (page does not exist)&quot;&gt;&lt;bdi&gt;Admin&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/TempDB.DeleteTable&quot; title=&quot;TempDB.DeleteTable&quot;&gt;TempDB.DeleteTable&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{infobox function&lt;br /&gt;
|name=DeleteTable&lt;br /&gt;
|object=[[Временная таблица базы данных]]&lt;br /&gt;
|caption=Удаление объекта временной таблицы&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|db=2&lt;br /&gt;
|exception=Невозможно превратить в строку, неверные аргументы, ошибка сервера&lt;br /&gt;
|visual=0}}&lt;br /&gt;
{{HeadLinks|&lt;br /&gt;
* [[Main_Page|Начальная страница]]&lt;br /&gt;
* [[Общее_описание_языка|Общее описание]]&lt;br /&gt;
* [[Объекты]]&lt;br /&gt;
* [[Временная таблица базы данных]]}}&lt;br /&gt;
Функция удалят постоянную таблицу из внешней базы данных по ее имени. Если таблица не существовала, исключение не будет создано. Функция не работает с временными таблицами (которые удаляются автоматически при удалении объекта из системы), ее можно использовать только для постоянных таблиц. Функция вызывается с помощью интерфейса.&lt;br /&gt;
&lt;br /&gt;
== Синтаксис ==&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
{{Grey|TempDB.}}'''DeleteTable'''(''&amp;lt;Имя внешней БД и наименование ее таблицы (STRING)&amp;gt;'')&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Аргументы ====&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Имя внешней БД и наименование ее таблицы (STRING)&amp;gt;''&amp;lt;/code&amp;gt; - Аргмент задается в формате &amp;lt;code&amp;gt;&amp;lt;Имя базы данных&amp;gt;.&amp;lt;Имя временной таблицы&amp;gt;&amp;lt;/code&amp;gt;. Имена баз данных должны быть заранее заданы в [[Установки сервера|установках сервера]] (ветка '''SimpleDBases'''), имена таблиц могут быть произвольными.&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Создание или открытие постоянной таблицы &amp;quot;table1&amp;quot; в базе данных DBExport&lt;br /&gt;
аТемп:=TempDB.Create(&amp;quot;зДок:DB,зЗад:DB,зН:DB:I,Количество:NUMBER.15.5&amp;quot;,&amp;quot;DBExport.table1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
//Удаление постоянной таблицы &amp;quot;table2&amp;quot; из базы данных DBExport. Если она не существовала, никаких действий выполнено не будет.&lt;br /&gt;
TempDB.DeleteTable(&amp;quot;DBExport.table2&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</description>
			<pubDate>Wed, 01 Apr 2026 10:00:50 GMT</pubDate>
			<dc:creator>Admin</dc:creator>
			<comments>http://sfsys.ru/index.php/Talk:TempDB.DeleteTable</comments>
		</item>
		<item>
			<title>TempDB.Group</title>
			<link>http://sfsys.ru/index.php?title=TempDB.Group&amp;diff=5226&amp;oldid=0</link>
			<guid isPermaLink="false">http://sfsys.ru/index.php?title=TempDB.Group&amp;diff=5226&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Admin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;User:Admin (page does not exist)&quot;&gt;&lt;bdi&gt;Admin&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/TempDB.Group&quot; title=&quot;TempDB.Group&quot;&gt;TempDB.Group&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{infobox function&lt;br /&gt;
|name=Group&lt;br /&gt;
|object=[[Временная таблица базы данных]]&lt;br /&gt;
|caption=Группировка таблицы&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|db=2&lt;br /&gt;
|exception=Невозможно превратить в строку, неверные наименования столбцов, неверные аргументы, ошибка сервера&lt;br /&gt;
|visual=0}}&lt;br /&gt;
{{HeadLinks|&lt;br /&gt;
* [[Main_Page|Начальная страница]]&lt;br /&gt;
* [[Общее_описание_языка|Общее описание]]&lt;br /&gt;
* [[Объекты]]&lt;br /&gt;
* [[Временная таблица базы данных]]}}&lt;br /&gt;
Функция выполняет операцию группировки над записями таблицы, в таблице результате остаются только столбцы группировки и столбцы агрегации. В операции участвуют все записи таблицы. См. также [[Tab.Group|Group]]. Функция не будет работать для постоянных таблиц внешних БД (будет вызывать исключение), если необъходимо ее использовать, можно предварительно скопировать содержимое постоянной таблицы во временную. {{Planned}} Также планируется возможность работы с постоянными таблицами, когда функция возвратит результат в новой временной таблице.&lt;br /&gt;
&lt;br /&gt;
== Синтаксис ==&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
{{Grey|TempDB.}}'''Group'''({{Optional|&amp;lt;Столбцы группировки (STRING)&amp;gt;,&amp;lt;Столбцы агрегации с операциями (STRING)&amp;gt;}})&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Аргументы ====&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Столбцы группировки (STRING)&amp;gt;''&amp;lt;/code&amp;gt; - {{Optional}} Аргумент перечисляет через запятую наименования столбцов, по которым будет группироваться таблица. Регистр наименований не имеет значения. Каждый заданный столбец должен присутствовать во временной таблице.&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Столбцы агрегации с операциями (STRING)&amp;gt;''&amp;lt;/code&amp;gt; - {{Optional}} Аргумент перечисляет наименования столбцов через запятую, для которых будет выполнена заданная операция агрегации. Регистр наименований не имеет значения. Каждый заданный столбец должен присутствовать в таблице. Формат записи выглядит сл. образом: &amp;lt;code&amp;gt;&amp;lt;Столбец1[:&amp;lt;Операция1&amp;gt;][,&amp;lt;Столбец2[:&amp;lt;Операция2&amp;gt;]...]&amp;gt;&amp;lt;/code&amp;gt;. Функция позволяет использовать следующие операции:&lt;br /&gt;
** '''SUM''' (по умолчанию) -- значения столбца для удаляемых строк и оставшихся строк будут найдены суммированием.&lt;br /&gt;
** '''AVG''' -- Будут найдены средние значения столбца для удаляемых строк и оставшихся строк.&lt;br /&gt;
** '''MAX''' -- В столбцах оставшихся строках будет содержаться максимальное из значение удаляемых строк и оставшихся.&lt;br /&gt;
** '''MIN''' -- В столбцах оставшихся строках будет содержаться минимальное из значение удаляемых строк и оставшихся.&lt;br /&gt;
** '''COUNT''' -- В столбцах оставшихся строках будет содержаться количество удаленных строк этой группировки, увеличенное на единицу.&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Пример создает таблицу аТемп, и заполняет ее резервами реализациями договора аДоговор с помощью загрузки движений накопителя Взаиморасчеты&lt;br /&gt;
//  При этом суммы подчиненных документов возврата отнимаются от сумм документов реализации&lt;br /&gt;
//После создания, производится выборка записей по датам документов реализации&lt;br /&gt;
аТемп:=TempDB.Create(&amp;quot;аДок:DB,Сумма:NUMBER.15.2&amp;quot;);&lt;br /&gt;
аТемп.LoadFrom(&amp;quot;Stor.Взаиморасчеты&amp;quot;,&amp;quot;@LINK-&amp;gt;аДок,Сумма*?(@EXPENSE=1,-1,1)-&amp;gt;Сумма&amp;quot;,&amp;quot;Договор=аДоговор&amp;quot;,&amp;quot;isEmpty(Тара)&amp;quot;,&amp;quot;IsType(@LINK,Doc.Реализация,Doc.ВозвратОтПокупателя)&amp;quot;);&lt;br /&gt;
//Для документов возврата подставляем в столбик аДок их основание&lt;br /&gt;
аТемп.Update(,&amp;quot;аДок..Doc.ВозвратОтПокупателя.ДокОснование-&amp;gt;аДок&amp;quot;,&amp;quot;IsType(аДок,Doc.ВозвратОтПокупателя)&amp;quot;);&lt;br /&gt;
аТемп.Group(&amp;quot;аДок&amp;quot;,&amp;quot;Сумма&amp;quot;);&lt;br /&gt;
аТемп.Remove(&amp;quot;(Сумма&amp;lt;=0)Or(Not isType(аДок,Doc.Реализация))&amp;quot;);&lt;br /&gt;
аТемп.AddColumns(&amp;quot;Дата:DATE&amp;quot;);&lt;br /&gt;
аТемп.Update(,&amp;quot;аДок..Doc.Реализация.DocDate-&amp;gt;Дата&amp;quot;);&lt;br /&gt;
аТемп.Select(&amp;quot;Дата-&amp;quot;);&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</description>
			<pubDate>Wed, 01 Apr 2026 10:00:50 GMT</pubDate>
			<dc:creator>Admin</dc:creator>
			<comments>http://sfsys.ru/index.php/Talk:TempDB.Group</comments>
		</item>
		<item>
			<title>TempDB.LoadFrom</title>
			<link>http://sfsys.ru/index.php?title=TempDB.LoadFrom&amp;diff=5228&amp;oldid=0</link>
			<guid isPermaLink="false">http://sfsys.ru/index.php?title=TempDB.LoadFrom&amp;diff=5228&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Admin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;User:Admin (page does not exist)&quot;&gt;&lt;bdi&gt;Admin&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/TempDB.LoadFrom&quot; title=&quot;TempDB.LoadFrom&quot;&gt;TempDB.LoadFrom&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{infobox function&lt;br /&gt;
|name=LoadFrom&lt;br /&gt;
|object=[[Временная таблица базы данных]]&lt;br /&gt;
|caption=Загрузка данных во временную таблицу&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|db=2&lt;br /&gt;
|exception=Невозможно превратить в строку, неверные аргументы, ошибка сервера&lt;br /&gt;
|visual=0}}&lt;br /&gt;
{{HeadLinks|&lt;br /&gt;
* [[Main_Page|Начальная страница]]&lt;br /&gt;
* [[Общее_описание_языка|Общее описание]]&lt;br /&gt;
* [[Объекты]]&lt;br /&gt;
* [[Временная таблица базы данных]]}}&lt;br /&gt;
Функция выполняет загрузку записей из указанного источника данных (таблицы объекта проекта или другой временной таблицы базы данных), при этом указанные столбцы таблицы заполняются требуемым образом. Запрос к источнику базы данных может быть выполнен с использованием агрегации или без оной. Если выполняется запрос агрегации, для вычисления столбцов возможно применять функции агрегации. Предыдущие записи, находившиеся до этого момента в таблице не изменяются, операция только добавляет новые записи.&lt;br /&gt;
&lt;br /&gt;
== Синтаксис ==&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
{{Grey|TempDB.}}'''LoadFrom'''(''&amp;lt;Источник данных (DB,STRING,TEMPDB)&amp;gt;'',''&amp;lt;Формулы для вычисления столбцов (STRING)&amp;gt;''{{Optional|,&amp;lt;Стандартные фильтры&amp;gt;...}})&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Аргументы ====&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Источник данных (DB,STRING,TEMPDB)&amp;gt;''&amp;lt;/code&amp;gt; - Источник данных для добавления записей может быть:&lt;br /&gt;
** '''Объект базы данных''' -- принимаются объекты типа Справочник, Документ, Накопитель или Журнал.&lt;br /&gt;
** '''Строка''' -- задает путь объекта базы данных в виде &amp;lt;code&amp;gt;&amp;lt;Тип данных БД&amp;gt;.&amp;lt;Вид данных БД&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
** '''Другая временная таблица базы данных''' -- переменная, задающая другую временную или постоянную таблицу базы данных, записи которой будут копироваться в данную. Постоянная таблица может принадлежать другой внешней БД.&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Формулы для вычисления столбцов (STRING)&amp;gt;''&amp;lt;/code&amp;gt; - Аргумент задает способ вычисления столбцов текущей таблицы при добавлении записей из источника. Столбцы, не указанные в данном аргументе, при добавлении новой записи, будут заполнены пустыми значениями по умолчанию. Задание аргумента имеет следующий формат: &amp;lt;code&amp;gt;[Aggregate[:&amp;lt;Столбцы группировки через &amp;quot;:&amp;quot;&amp;gt;],]&amp;lt;Выражение 1&amp;gt;-&amp;gt;&amp;lt;Имя столбца 1&amp;gt;,&amp;lt;Выражение 2&amp;gt;-&amp;gt;&amp;lt;Имя столбца 2&amp;gt;...&amp;lt;/code&amp;gt;. При наличии зарезервированного слова ''Aggregate'' к источнику данных будет создан запрос агрегации с группировкой по указанным столбцам таблицы или реквизитам объекта {{Planned}}, при этом в выражениях для вычисления можно использовать функции агрегации. Выражения содержат весь возможный набор функций и операторов языка запросов (см. [[Временная таблица базы данных]], [[Объект запрос базы данных]]).&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Стандартные фильтры&amp;gt;''&amp;lt;/code&amp;gt; - {{Optional}} Стандартные фильтры отбора записей источника данных описаны в статье [[Стандартные фильтры]]. Важное отличие от фильтров функций объектов базы данных заключается в том, что стандартные фильтры всегда работают в сложном (расширенном) режиме, при этом отсутствует требование, что первая строка фильтра должна начинаться на знак '''~'''. Выражения фильтров содержат весь возможный набор функций и операторов языка запросов (см. [[Временная таблица базы данных]], [[Объект запрос базы данных]]), при указании наименование также применимы префиксы (типа ''':'''), как это описано в [[Временная таблица базы данных#Формулы при вычислении полей записей временной таблицы базы данных|статье по временной таблице базы данных]].&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Пример создает таблицу аТемп, и заполняет ее резервами документа ЗаказНаПроизводство, при этом в ней также заполнено поле документа ВыпускПродукции. &lt;br /&gt;
//  Документ ВыпускПродукции подчинен документу ЗаказНаПроизводство. Выборка документов происходит за период с НачДата по КонДата.&lt;br /&gt;
//Таблица номенклатуры из резервов с выпусками и заданиями&lt;br /&gt;
аТемп:=TempDB.Create(&amp;quot;зДок:DB,зЗад:DB,зН:DB:I,Количество:NUMBER.15.5&amp;quot;);&lt;br /&gt;
//Заказы на производство&lt;br /&gt;
аТемп.LoadFrom(&amp;quot;Stor.Резервы&amp;quot;,&amp;quot;@LINK-&amp;gt;зЗад,Номенклатура-&amp;gt;зН,?(@EXPENSE=1,-Количество,Количество)-&amp;gt;Количество&amp;quot;,&lt;br /&gt;
  &amp;quot;(BegOfDay(@DATE)&amp;gt;=НачДата)And(BegOfDay(@DATE)&amp;lt;=КонДата)&amp;quot;,&amp;quot;IsType(@LINK,Doc.ЗаказНаПроизводство)&amp;quot;);&lt;br /&gt;
//Заполняем зДок (подчиненный документ -- ВыпускПродукции)&lt;br /&gt;
вТемп:=TempDB.Create(&amp;quot;зДок2:DB,зЗад:DB&amp;quot;);&lt;br /&gt;
//Выбираются только те документы выпусков, основания которых (ЗаказНаПроизводство) находятся в таблице аТемп&lt;br /&gt;
вТемп.LoadFrom(&amp;quot;Doc.ВыпускПродукции&amp;quot;,&amp;quot;@ELEMENT-&amp;gt;зДок2,@ELEMENT.ДокОснование-&amp;gt;зЗад&amp;quot;,&amp;quot;@ELEMENT.ДокОснование IN аТемп.зЗад&amp;quot;);&lt;br /&gt;
//Заполним столбец зДок оригинальной таблицы, объединение происходит по условию &amp;quot;:зЗад=зЗад&amp;quot;.&lt;br /&gt;
аТемп.Update(вТемп,&amp;quot;:зЗад=зЗад,зДок2-&amp;gt;зДок&amp;quot;);&lt;br /&gt;
//В дальнейшем таблицу аТемп можно выводить на экран или использовать в последующих запросах.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</description>
			<pubDate>Wed, 01 Apr 2026 10:00:50 GMT</pubDate>
			<dc:creator>Admin</dc:creator>
			<comments>http://sfsys.ru/index.php/Talk:TempDB.LoadFrom</comments>
		</item>
		<item>
			<title>TempDB.Copy</title>
			<link>http://sfsys.ru/index.php?title=TempDB.Copy&amp;diff=5220&amp;oldid=0</link>
			<guid isPermaLink="false">http://sfsys.ru/index.php?title=TempDB.Copy&amp;diff=5220&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Admin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;User:Admin (page does not exist)&quot;&gt;&lt;bdi&gt;Admin&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/TempDB.Copy&quot; title=&quot;TempDB.Copy&quot;&gt;TempDB.Copy&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{infobox function&lt;br /&gt;
|name=Copy&lt;br /&gt;
|object=[[Временная таблица базы данных]]&lt;br /&gt;
|caption=Дублирование объекта временной таблицы&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|db=0&lt;br /&gt;
|visual=0}}&lt;br /&gt;
{{HeadLinks|&lt;br /&gt;
* [[Main_Page|Начальная страница]]&lt;br /&gt;
* [[Общее_описание_языка|Общее описание]]&lt;br /&gt;
* [[Объекты]]&lt;br /&gt;
* [[Временная таблица базы данных]]}}&lt;br /&gt;
Функция создает локальную копию (дубль) ссылки на постоянную таблицу внешней базы данных. Функция не работает с временными таблицами. Дублирование объекта может пригодиться, к примеру, в многопоточном режиме, когда множество потоков выполняют запросы к такой таблице. Если выполнять запросы с помощью одного объекта, следующий запрос будет ожидать окончания предыдущего. Также, эта функция работает гораздо быстрее, чем [[TempDB.Create|Create]], так как не обращается к серверу и не проверяет корректность структуры таблицы.&lt;br /&gt;
&lt;br /&gt;
== Синтаксис ==&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
{{Grey|TempDB.}}'''Copy'''():''&amp;lt;Копия ссылки на внешнюю БД (TEMPDB)&amp;gt;''&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Возвращаемое значение ====&lt;br /&gt;
Возвращает новый объект временной таблицы базы данных.&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Создание или открытие постоянной таблицы &amp;quot;table1&amp;quot; в базе данных DBExport&lt;br /&gt;
аТемп:=TempDB.Create(&amp;quot;зДок:DB,зЗад:DB,зН:DB:I,Количество:NUMBER.15.5&amp;quot;,&amp;quot;DBExport.table1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
//Создадим копию объекта&lt;br /&gt;
аТемп2:=аТемп.Copy();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</description>
			<pubDate>Wed, 01 Apr 2026 10:00:49 GMT</pubDate>
			<dc:creator>Admin</dc:creator>
			<comments>http://sfsys.ru/index.php/Talk:TempDB.Copy</comments>
		</item>
		<item>
			<title>Table.RenderToPicture</title>
			<link>http://sfsys.ru/index.php?title=Table.RenderToPicture&amp;diff=5218&amp;oldid=0</link>
			<guid isPermaLink="false">http://sfsys.ru/index.php?title=Table.RenderToPicture&amp;diff=5218&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Admin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;User:Admin (page does not exist)&quot;&gt;&lt;bdi&gt;Admin&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Table.RenderToPicture&quot; title=&quot;Table.RenderToPicture&quot;&gt;Table.RenderToPicture&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{infobox function&lt;br /&gt;
|name=RenderToPicture&lt;br /&gt;
|object=[[Электронная таблица SFT|Электронная таблица]]&lt;br /&gt;
|caption=Работа с печатью и выводом&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|db=0&lt;br /&gt;
|exception=Неверные аргументы, системная ошибка.&lt;br /&gt;
|visual=0}}&lt;br /&gt;
{{HeadLinks|&lt;br /&gt;
* [[Main_Page|Начальная страница]]&lt;br /&gt;
* [[Общее_описание_языка|Общее описание]]&lt;br /&gt;
* [[Объекты]]&lt;br /&gt;
* [[Электронная таблица SFT|Электронная таблица]]}}&lt;br /&gt;
Функция подготавливает печать таблицы на принтер (деление на страницы, колонтитулы и пр.), однако, выводит информацию в виде картинок в формате BMP вместо печати. Аргумент задает установки для создания картинок, такие как ширина и высота каждой картинки, глубина ее цвета, дипазон страниц для вывода и пр.&lt;br /&gt;
&lt;br /&gt;
== Синтаксис ==&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
{{Grey|Table.}}'''RenderToPicture'''(''&amp;lt;Список с настройками для создания рисунков (LIST)&amp;gt;''):''&amp;lt;Картинки в формате BMP (LIST)&amp;gt;''&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Аргументы ====&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Список с настройками для создания рисунков (LIST)&amp;gt;''&amp;lt;/code&amp;gt; - Список содержит настройки, наименованиями служат перечисленные ниже наименования настроек, значениями -- их значения.&lt;br /&gt;
** '''PaperWidth''', '''Width''' -- настройка задает ширину картинок в точках. Настройка должна обязательно присутствовать.&lt;br /&gt;
** '''PaperHeight''', '''Height''' -- настройка задает высоту картинок в точках. Настройка должна обязательно присутствовать.&lt;br /&gt;
** '''BPP''' -- настройка задает глубину цвета в создаваемых картинках. По умолчанию '''16'''. Разрешено использовать значения: 8, 16, 24 и 32.&lt;br /&gt;
** '''FromPage''', '''ToPage''' -- настройки задают начальную и конечную страницу таблицы для превращения в картинки. По умолчанию превращать все страницы.&lt;br /&gt;
** '''DPI''' -- настройка задают плотность точек на бумаге (Dots per inch), которая используется только для определения размеров полей страницы, так как поля задаются в миллиметрах, а не в точках. По умолчанию этот параметр задается как '''300'''. Также часто используются значения ''72'', ''150'', ''600'', но значение может быть любым. Используя это значение размер поля будет вычисляться по формуле &amp;lt;code&amp;gt;&amp;lt;Поле в мм&amp;gt;/25.4*&amp;lt;dpi&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Возвращаемое значение ====&lt;br /&gt;
Функция возвращает список с некоторым числом объектов типа картинка.&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
пТекст:=&amp;quot;Текст для поле в таблице&amp;quot;;&lt;br /&gt;
Т:=Table.Create();&lt;br /&gt;
Т.SetSourceName(&amp;quot;Modules\FreeForms\СвободныеТаблицы\ТекстНаЭтикетке&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
Т.CopyByX(&amp;quot;v31&amp;quot;,1);&lt;br /&gt;
Т.Area(1,1).WrappingMode:=1;&lt;br /&gt;
Т.Printing.Fields.Up:=0;&lt;br /&gt;
Т.Printing.Fields.Down:=0;&lt;br /&gt;
Т.Printing.Fields.Left:=0;&lt;br /&gt;
Т.Printing.Fields.Right:=0;&lt;br /&gt;
Т.Printing.Titles.Up.Size:=0;&lt;br /&gt;
Т.Printing.Titles.Down.Size:=0;&lt;br /&gt;
Т.Printing.PageOptions:=_PRN_PAGE_CENTERX+_PRN_PAGE_CENTERY;&lt;br /&gt;
Т.Printing.ScaleMode:=3;&lt;br /&gt;
&lt;br /&gt;
//Параметры превращения в картинку&lt;br /&gt;
aList:=List.Create();&lt;br /&gt;
//Размеры в точках&lt;br /&gt;
aList[&amp;quot;Width&amp;quot;]:=600;&lt;br /&gt;
aList[&amp;quot;Height&amp;quot;]:=200;&lt;br /&gt;
//Глубина цвета (16 бит)&lt;br /&gt;
aList[&amp;quot;BPP&amp;quot;]:=16;&lt;br /&gt;
&lt;br /&gt;
//Должна получиться всего одна картинка&lt;br /&gt;
bList:=Т.RenderToPicture(aList);&lt;br /&gt;
//Сохраним в файл без изменения формата&lt;br /&gt;
bList[1].Save(&amp;quot;c:\picture.bmp&amp;quot;,&amp;quot;bmp&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</description>
			<pubDate>Wed, 01 Apr 2026 10:00:48 GMT</pubDate>
			<dc:creator>Admin</dc:creator>
			<comments>http://sfsys.ru/index.php/Talk:Table.RenderToPicture</comments>
		</item>
		<item>
			<title>Tab.Copy</title>
			<link>http://sfsys.ru/index.php?title=Tab.Copy&amp;diff=5216&amp;oldid=0</link>
			<guid isPermaLink="false">http://sfsys.ru/index.php?title=Tab.Copy&amp;diff=5216&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Admin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;User:Admin (page does not exist)&quot;&gt;&lt;bdi&gt;Admin&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Tab.Copy&quot; title=&quot;Tab.Copy&quot;&gt;Tab.Copy&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{infobox function&lt;br /&gt;
|name=Copy&lt;br /&gt;
|object=[[Таблица]]&lt;br /&gt;
|caption=Копия таблицы&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|db=0&lt;br /&gt;
|exception=Невозможно превратить в число&lt;br /&gt;
|visual=0}}&lt;br /&gt;
{{HeadLinks|&lt;br /&gt;
* [[Main_Page|Начальная страница]]&lt;br /&gt;
* [[Общее_описание_языка|Общее описание]]&lt;br /&gt;
* [[Объекты]]&lt;br /&gt;
* [[Таблица]]}}&lt;br /&gt;
Функция создает новый объект таблицы и заполняет ее столбцами, строками и значениями из текущей таблицы. Значения скопированы не будут, если первый аргумент равен ''1''. Для больших таблиц, подобная операция может занять продолжительное время. Функция может использоваться, когда, к примеру, исходную таблицу необходимо сохранить, однако, требуется также получение группировок таблицы, либо в подобных ситуациях.&lt;br /&gt;
&lt;br /&gt;
== Синтаксис ==&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
{{Grey|Tab.}}'''Copy'''({{Optional|&amp;lt;Только создать столбцы (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Новая таблица (TAB)&amp;gt;''&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Аргументы ====&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Только создать столбцы (INT)&amp;gt;''&amp;lt;/code&amp;gt; - {{Optional}} Если аргумент задан и равен ''1'', будет скопирована только структура столбцов таблицы, строки и значения скопированы не будут.&lt;br /&gt;
&lt;br /&gt;
==== Возвращаемое значение ====&lt;br /&gt;
Возвращается таблица, полностью соответствующая текущей, однако, являющаяся новым объектом.&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Создается и заполняется таблица значений&lt;br /&gt;
aTab:=Tab.Create(&amp;quot;b1,b2,b3,b4&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
aTab.AddLine(&amp;quot;b1,b2,b3,b4&amp;quot;,1,2,3,4);&lt;br /&gt;
aTab.AddLine(&amp;quot;b1,b2,b3,b4&amp;quot;,2,2,3,33);&lt;br /&gt;
aTab.AddLine(&amp;quot;b1,b2,b3,b4&amp;quot;,3,5,5,4);&lt;br /&gt;
aTab.AddLine(&amp;quot;b1,b2,b3,b4&amp;quot;,4,2,3,4);&lt;br /&gt;
aTab.AddLine(&amp;quot;b1,b2,b3,b4&amp;quot;,4,2,3,77);&lt;br /&gt;
aTab.AddLine(&amp;quot;b1,b2,b3,b4&amp;quot;,5,2,3,4);&lt;br /&gt;
&lt;br /&gt;
//Создается копия таблицы, новый объект.&lt;br /&gt;
bTab:=aTab.Copy();&lt;br /&gt;
//Таблица bTab группируется по столбцам b2 и b3, оригинальная таблица aTab не изменяется&lt;br /&gt;
bTab.Group(&amp;quot;b2,b3&amp;quot;,&amp;quot;b1,b4&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
Message(&amp;quot;Таблица aTab:&amp;quot;);&lt;br /&gt;
aTab.Select();&lt;br /&gt;
While aTab.Next() Do&lt;br /&gt;
  Message(&amp;quot;&amp;quot;+aTab.b1+&amp;quot;; &amp;quot;+aTab.b2+&amp;quot;; &amp;quot;+aTab.b3+&amp;quot;; &amp;quot;+aTab.b4);&lt;br /&gt;
EndDo;&lt;br /&gt;
&lt;br /&gt;
Message(&amp;quot;Таблица bTab:&amp;quot;);&lt;br /&gt;
bTab.Select();&lt;br /&gt;
While bTab.Next() Do&lt;br /&gt;
  Message(&amp;quot;&amp;quot;+bTab.b1+&amp;quot;; &amp;quot;+bTab.b2+&amp;quot;; &amp;quot;+bTab.b3+&amp;quot;; &amp;quot;+bTab.b4);&lt;br /&gt;
EndDo;&lt;br /&gt;
&lt;br /&gt;
//Будет выведено последовательно:&lt;br /&gt;
//&amp;quot;Таблица aTab:&amp;quot;&lt;br /&gt;
//&amp;quot;1; 2; 3; 4&amp;quot;&lt;br /&gt;
//&amp;quot;2; 2; 3; 33&amp;quot;&lt;br /&gt;
//&amp;quot;3; 5; 5; 4&amp;quot;&lt;br /&gt;
//&amp;quot;4; 2; 3; 4&amp;quot;&lt;br /&gt;
//&amp;quot;4; 2; 3; 77&amp;quot;&lt;br /&gt;
//&amp;quot;5; 2; 3; 4&amp;quot;&lt;br /&gt;
//&amp;quot;Таблица bTab:&amp;quot;&lt;br /&gt;
//&amp;quot;16; 2; 3; 122&amp;quot;&lt;br /&gt;
//&amp;quot;3; 5; 5; 4&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</description>
			<pubDate>Wed, 01 Apr 2026 10:00:24 GMT</pubDate>
			<dc:creator>Admin</dc:creator>
			<comments>http://sfsys.ru/index.php/Talk:Tab.Copy</comments>
		</item>
		<item>
			<title>Mutex.ExecuteFunctionInSeparateThread</title>
			<link>http://sfsys.ru/index.php?title=Mutex.ExecuteFunctionInSeparateThread&amp;diff=5214&amp;oldid=0</link>
			<guid isPermaLink="false">http://sfsys.ru/index.php?title=Mutex.ExecuteFunctionInSeparateThread&amp;diff=5214&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Admin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;User:Admin (page does not exist)&quot;&gt;&lt;bdi&gt;Admin&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Mutex.ExecuteFunctionInSeparateThread&quot; title=&quot;Mutex.ExecuteFunctionInSeparateThread&quot;&gt;Mutex.ExecuteFunctionInSeparateThread&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{infobox function&lt;br /&gt;
|name=ExecuteFunctionInSeparateThread&lt;br /&gt;
|object=[[Функции общего назначения#Объект семафор|Семафор]]&lt;br /&gt;
|caption=Работа с подчиненными потоками&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|db=0&lt;br /&gt;
|exception=Невозможно превратить в строку, число, неверные параметры вызова, системная ошибка&lt;br /&gt;
|visual=0}}&lt;br /&gt;
{{HeadLinks|&lt;br /&gt;
* [[Main_Page|Начальная страница]]&lt;br /&gt;
* [[Общее_описание_языка|Общее описание]]&lt;br /&gt;
* [[Объекты]]&lt;br /&gt;
* [[Функции общего назначения#Объект семафор|Семафор]]}}&lt;br /&gt;
Функция инициирует исполнение функции с указанным именем в новом подчиненном потоке с заданными аргументами, способ поиска задается вторым аргументом. Если искомая функция не существует, пропущен обязательный аргумент или заданное количество аргументов слишком велико, будет создано исключение. Созданный поток будет автоматически завершен, если выполнение функции завершится (в т.ч. из-за необработанного исключения), либо если основной поток будет завершен. При завершении подчиненного потока, система не ждет полного окончания завершения, так как оно может занять продолжительное время, если функция выполняет внешний вызов OLE и пр., чтобы убедиться, что поток завершен, можно использовать функцию [[Mutex.TerminateThread|TerminateThread]]. Для того, чтобы определить программно, происходит ли исполнение в режиме подчиненного потока, можно использовать функцию [[IsExecutingInSeparateThread]]. Функция может быть вызвана для интерфейса Mutex. Некоторые важные свойства функций, исполняемых в отдельных потоках:&lt;br /&gt;
* Если создание такой функции инициировано корневым потоком, функция не будет завершена автоматически и будет находиться в памяти до тех пор, пока клиент не будет закрыт, либо программа не вызовет функцию [[Mutex.TerminateThread|TerminateThread]].&lt;br /&gt;
* Исполняемая функция не обязательно должна быть корневой функцией текущего модуля, возможен, к примеру, вызов функции, подчиненной текущей функции, либо функции родительского или глобального модулей.&lt;br /&gt;
* Функция, исполняемая в отдельном потоке, может вызывать все функции, находящиеся в текущем модуле, и также она '''будет иметь доступ''' к экспортированным переменным этого модуля. При использовании внешних переменных в отдельном потоке, нужно помнить, что система будет сначала искать по имени локальные переменные, потом экспортируемые переменные текущего модуля и только потом глобальные экспортированные переменные. Если имена переменных будут совпадать, может возникнуть конфликт и неочевидная ошибка.&lt;br /&gt;
* В отличие от функции [[ExecuteFunction]], для аргументов функции не будет работать признак ''ByRef'', так как вызвавший поток не ожидает завершения выполнения функции и продолжает работать параллельно с новым.&lt;br /&gt;
* Необработанные исключения внутри функции останавливают ее выполнение, но информация об этих исключениях будет поглощена и выведена в лог не будет (отладчик, однако, будет открыт в момент создания исключения, если режим отладки для визуального клиента разрешен).&lt;br /&gt;
* Исполнение таких функций происходит быстрее, чем вызов новых модулей в отдельных потоках с помощью [[LoadModule]], однако, открытые потоки завершаются при завершении основного потока, когда как потоки, открытые [[LoadModule]] независимы.&lt;br /&gt;
&lt;br /&gt;
== Синтаксис ==&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
{{Grey|Mutex.}}'''ExecuteFunctionInSeparateThread'''(''&amp;lt;Имя функции (STRING)&amp;gt;''{{Optional|,&amp;lt;Глубина поиска или компилированная функция (INT, COMPILEDFUNCTION)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Аргумент 1&amp;gt;,&amp;lt;Аргумент 2&amp;gt;...}}):''&amp;lt;Указатель на среду функции (MUTEX)&amp;gt;''&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
==== Аргументы ====&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Имя функции (STRING)&amp;gt;''&amp;lt;/code&amp;gt; - Имя функции, которую необходимо исполнить&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Глубина поиска (INT)&amp;gt;''&amp;lt;/code&amp;gt; - {{Optional}} Может принимать следующие значения:&lt;br /&gt;
** -1 -- выполнять поиск по последовательности функций из стека вызовов, а не искать, используя подчинение функций на момент компиляции. Этот способ предпочтительнее использовать в компилированных функциях, вызываемых из разных мест модуля или из разных модулей, чтобы получить доступ к реальной среде функций, а не к оной на момент компиляции.&lt;br /&gt;
** 0 (по умолчанию) -- выполнять поиск по всех модулях [[Общее описание языка#Вложенность функций и модулей, уровни вложенности|большего уровня вложенности]] (родительских) и во всех глобальных модулях.&lt;br /&gt;
** 1 -- выполнять поиск только внутри текущего модуля.&lt;br /&gt;
** 2 -- выполнять поиск только внутри родительского модуля.&lt;br /&gt;
** 3..x -- выполнять поиск только внутри родительского модуля указанного уровня (к примеру, для уровня 3, выполнять поиск только в родителе родителя текущего модуля).&lt;br /&gt;
** Объект типа [[Compile|компилированная функция]] -- выполнять поиск функции внутри заданной компилированной функции (только среди функций верхнего уровня).&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Аргумент ?&amp;gt;''&amp;lt;/code&amp;gt; - {{Optional}} Аргументы, передаваемые исполняемой функции&lt;br /&gt;
&lt;br /&gt;
==== Возвращаемое значение ====&lt;br /&gt;
Возвращает объект семафора, указывающего на новый запущенный поток. В дальнейшем этот объект можно использовать с функциями, типа [[Mutex.TerminateThread|TerminateThread]]. Если поток не удалось запустить, по каким-либо причинам, функция либо вызывает исключение, либо отдает объект, для которого функция [[Mutex.IsThreadActive|IsThreadActive]] возвращает ноль.&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Пример выполняет параллельный процесс отправки данных и обновляет индикатор его выполнения&lt;br /&gt;
&lt;br /&gt;
  Function ВыполнитьПроцесс(спДанные)&lt;br /&gt;
    Форма:=спДанные.GetByName(&amp;quot;Форма&amp;quot;);&lt;br /&gt;
    TCP:=спДанные.GetByName(&amp;quot;Соединение&amp;quot;);&lt;br /&gt;
    аСтр:=спДанные.GetByName(&amp;quot;Данные&amp;quot;);&lt;br /&gt;
    аВсего:=Length(аСтр);&lt;br /&gt;
    аОтослано:=0;&lt;br /&gt;
    Фл:=1;&lt;br /&gt;
    //Цикл отсылает данные и обновляет текстовое поле на форме&lt;br /&gt;
    While Length(аСтр)&amp;gt;0 Do&lt;br /&gt;
      аСтр2:=Left(аСтр,1024);&lt;br /&gt;
      аСтр:=Mid(аСтр,1025);&lt;br /&gt;
      Try&lt;br /&gt;
        TCP.SendStrRaw(аСтр2);&lt;br /&gt;
      Except&lt;br /&gt;
        Фл:=0;&lt;br /&gt;
        Break;&lt;br /&gt;
      EndTry;&lt;br /&gt;
      аОтослано:=аОтослано+Length(аСтр2);&lt;br /&gt;
      Форма.оИндикатор.Caption:=&amp;quot;Выполнено: &amp;quot;+Round(аОтослано/аВсего,2)+&amp;quot;%&amp;quot;;&lt;br /&gt;
    EndDo;&lt;br /&gt;
    If Фл Then&lt;br /&gt;
      Форма.оИндикатор.Caption:=&amp;quot;Отправка выполнена успешно!&amp;quot;;&lt;br /&gt;
    Else&lt;br /&gt;
      Форма.оИндикатор.Caption:=&amp;quot;Ошибка при отправке!&amp;quot;;&lt;br /&gt;
    EndIf;&lt;br /&gt;
  EndFunction&lt;br /&gt;
&lt;br /&gt;
//Подготовка данных аСтр, соединение с удаленным сервером TCP&lt;br /&gt;
&lt;br /&gt;
спДанные:=List.Create();&lt;br /&gt;
спДанные.SetByName(&amp;quot;Форма&amp;quot;,Form.ThisForm());&lt;br /&gt;
спДанные.SetByName(&amp;quot;Соединение&amp;quot;,TCP);&lt;br /&gt;
спДанные.SetByName(&amp;quot;Данные&amp;quot;,аСтр);&lt;br /&gt;
Mutex.ExecuteFunctionInSeparateThread(&amp;quot;ВыполнитьПроцесс&amp;quot;,0,спДанные);&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</description>
			<pubDate>Wed, 01 Apr 2026 09:59:36 GMT</pubDate>
			<dc:creator>Admin</dc:creator>
			<comments>http://sfsys.ru/index.php/Talk:Mutex.ExecuteFunctionInSeparateThread</comments>
		</item>
		<item>
			<title>Lib.CreateCallbackFunction</title>
			<link>http://sfsys.ru/index.php?title=Lib.CreateCallbackFunction&amp;diff=5212&amp;oldid=0</link>
			<guid isPermaLink="false">http://sfsys.ru/index.php?title=Lib.CreateCallbackFunction&amp;diff=5212&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Admin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;User:Admin (page does not exist)&quot;&gt;&lt;bdi&gt;Admin&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/Lib.CreateCallbackFunction&quot; title=&quot;Lib.CreateCallbackFunction&quot;&gt;Lib.CreateCallbackFunction&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{infobox function&lt;br /&gt;
|name=CreateCallbackFunction&lt;br /&gt;
|object=[[Объект загружаемой системной библиотеки|Библиотека]]&lt;br /&gt;
|caption=Создание функции обратного вызова&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|db=0&lt;br /&gt;
|exception=Невозможно превратить в строку, локальная функция не найдена, неверные аргументы, системная ошибка.&lt;br /&gt;
|visual=0}}&lt;br /&gt;
{{HeadLinks|&lt;br /&gt;
* [[Main_Page|Начальная страница]]&lt;br /&gt;
* [[Общее_описание_языка|Общее описание]]&lt;br /&gt;
* [[Объекты]]&lt;br /&gt;
* [[Объект загружаемой системной библиотеки|Библиотека]]}}&lt;br /&gt;
Функция создает особую область в памяти, вызывая которую, любая внешняя библиотека или приложение будут автоматически вызывать указанную локальную функцию. Аргументы вызова переводятся по заданным правилам в объекты системы. Локальная функция, кроме возврата результата, может изменить аргументы, которые возвратятся на вызывающую сторону, если они помечены, как изменяемые аргументы. Функция может быть вызвана как из того же самого системнго потока, так и из любого другого (однако, в последнем случае, если исходный поток занят выполнением программы в момент вызова, будет создано исключение). Обычно такие функции могут пригодиться, если вызов системной библиотеки включает обратный вызов для перечисления результатов или индикации выполнения какого-либо процесса. Функция будет доступна для вызова, пока сам объект не будет удален из системы, поэтому, если адрес передается во внешнюю среду, нужно хранить объект до тех, пока он может использоваться.&lt;br /&gt;
&lt;br /&gt;
== Синтаксис ==&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
{{Grey|Lib.}}'''CreateCallbackFunction'''(''&amp;lt;Имя функции (STRING)&amp;gt;''{{Optional|,&amp;lt;Глубина поиска (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Способ вызова (STRING)&amp;gt;{{Default|{{Eq}}&amp;quot;Stdcall&amp;quot;}},&amp;lt;Аргументы функции (STRING)&amp;gt;,&amp;lt;Возвращаемое значение (STRING)&amp;gt;}}):''&amp;lt;Новый объект функции обратного вызова (CBFUNCTION)&amp;gt;''&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
==== Аргументы ====&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Имя функции (STRING)&amp;gt;''&amp;lt;/code&amp;gt; - Аргумент задает имя локальной или глобальной функции, которой будет передано управление в момент внешнего вызова системной функции, задаваемой своим адресом.&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Глубина поиска (INT)&amp;gt;''&amp;lt;/code&amp;gt; - {{Optional}} Задает способ поиска локальной функции. Может принимать следующие значения:&lt;br /&gt;
** -1 -- выполнять поиск по последовательности функций из стека вызовов, а не искать, используя подчинение функций на момент компиляции. Этот способ предпочтительнее использовать в компилированных функциях, вызываемых из разных мест модуля или из разных модулей, чтобы получить доступ к реальной среде функций, а не к оной на момент компиляции.&lt;br /&gt;
** 0 (по умолчанию) -- выполнять поиск во всех модулях [[Общее описание языка#Вложенность функций и модулей, уровни вложенности|большего уровня вложенности]] (родительских) и во всех глобальных модулях.&lt;br /&gt;
** 1 -- выполнять поиск только внутри текущего модуля.&lt;br /&gt;
** 2 -- выполнять поиск только внутри родительского модуля.&lt;br /&gt;
** 3..x -- выполнять поиск только внутри родительского модуля указанного уровня (к примеру, для уровня 3, выполнять поиск только в родителе родителя текущего модуля).&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Способ вызова (STRING)&amp;gt;''&amp;lt;/code&amp;gt; - {{Optional}} Аргумент задает способ вызова функции системной функции снешним источником (см. [[Объект загружаемой системной библиотеки|статью]] для дополнительной информации). Возможны следующие значения аргумента:&lt;br /&gt;
** '''stdcall''' (x86,x64) -- стандартный способ вызова функций Windows, используется по умолчанию. Для x64 является единственным доступным способом вызова.&lt;br /&gt;
** '''cdecl''' (x86) -- используется при вызове из среды, скомпилированной с помощью C или C++.&lt;br /&gt;
** '''fastcall''' (x86) -- используется при вызове из среды, скомпилированной с помощью C или C++, когда вызываемая функция там помечена, как fastcall.&lt;br /&gt;
** '''register''' (x86) -- используется при вызове из функций, скомпилированных с помощью Delphi или Free Pascal. Важно понимать, что, возможно, придется пометить некоторые параметры при вызове таких функций с помощью префикса &amp;quot;+&amp;quot; (см. ниже).&lt;br /&gt;
** '''vectorcall''' (x86,x64) -- способ вызова, оперирующий длинными числами (128 бит), в данный момент не поддерживается.&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Аргументы функции (STRING)&amp;gt;''&amp;lt;/code&amp;gt; - {{Optional}} Задает список и тип аргументов, передаваемых функции. Строка имеет следующий формат: &amp;lt;code&amp;gt;&amp;lt;Аргумент 1&amp;gt;,&amp;lt;Аргумент 2&amp;gt;,...&amp;lt;/code&amp;gt;. Где ''аргумент'' имеет следующий формат: &amp;lt;code&amp;gt;[&amp;lt;Префиксы типа данных&amp;gt;]&amp;lt;Тип данных аргумента&amp;gt;[&amp;lt;Размер типа данных&amp;gt;]&amp;lt;/code&amp;gt;. Далее даются все возможные префиксы и наименования типов данных:&lt;br /&gt;
** '''^''' (префикс) -- определяет то, что аргумент будет являться ссылкой (указателем, ''pointer'') на данные, а не самими данными. &lt;br /&gt;
** '''^^''' (префикс) -- определяет то, что аргумент будет являться ссылкой (указатель, ''pointer'') на ссылку на данные, а не самими данными. Префикс можно эмулировать с помощью манипуляции с буфером данных.&lt;br /&gt;
** '''@''' (префикс) -- определяет то, что аргумент будет являться ссылкой (указателем, ''pointer'') на данные, а не самими данными. Также помечает аргументы &amp;quot;by ref&amp;quot;, т.е., аргументы, значение которых может быть изменено функцией и должно быть передано назад в вызывавшую программу. '''Важно''': без этого префикса, измененные функцией значения не будут переданы назад, даже если аргумент локальной функции имеет префикс ''ByRef''. Префикс может дополняться префиксом ''^'', если необходимо.&lt;br /&gt;
** '''U''' (префикс) -- используется для типов ''I'' или ''N'', указывает на то, что данные представляют собой беззнаковое число (по умолчанию число со знаком)&lt;br /&gt;
** '''+''' (префикс) -- определяет то, что данный аргумент всегда будет передаваться в стек, а не с помощью регистра процессора. Флаг имеет значение только для способа вызова функции ''register''. Для его использования необходимо полностью понимать, как работает вызов функции (calling convention) такого типа. Обычно нет необходимости в использовании этого префикса, система сама правильно определит какие аргументы будут передаваться в стек, а какие с помощью регистров.&lt;br /&gt;
** '''I&amp;lt;Размер в битах&amp;gt;''' или '''Int&amp;lt;Размер в битах&amp;gt;''' (наименование типа данных) -- задает целый тип аргумента. Размер может принимать следующие значения: '''8''', '''16''', '''32''', '''64'''.&lt;br /&gt;
** '''N''' или '''Native''' (наименование типа данных) -- задает целый тип аргумента с размером, задаваемым текущей архитектурой исполнения приложения. Для ''x86'' длина поля будет представлять 32 бита, для ''x64'' -- 64 бита.&lt;br /&gt;
** '''R&amp;lt;Размер в битах&amp;gt;''' или '''Real&amp;lt;Размер в битах&amp;gt;''' (наименование типа данных) -- задает вещественный тип аргумента. Размер может принимать следующие значения: '''32''' (одинарная точность), '''64''' (двойная точность), '''80''' (расширенная точность). Расширенная точность не поддерживается при стандартных вызовах &amp;quot;x64&amp;quot; функций, при написании расширения программы, можно пользоваться, к примеру, ссылкой на вещественное число ('''P''') и получение его из буфера.&lt;br /&gt;
** '''B&amp;lt;Размер в битах&amp;gt;''' или '''Bool&amp;lt;Размер в битах&amp;gt;''' (наименование типа данных) -- задает булевый тип аргумента. Размер может принимать следующие значения: '''8''', '''16''', '''32''', '''64'''.&lt;br /&gt;
** '''P''' или '''Pointer''' (наименование типа данных) -- задает тип данных указателя на данные. Для ''x86'' длина поля будет поставлять 32 бита, для ''x64'' -- 64 бита. При вызове функцией в аргументах такого типа удобно возвращать объекты буфера или записи.&lt;br /&gt;
** '''SZ&amp;lt;Размер в байтах&amp;gt;''' или '''SZW&amp;lt;Размер в словах&amp;gt;''' (наименование типа данных) -- задает аргумент с типом строка, заканчивающаяся нулевым символом. Строка может иметь формат ANSI (''SZ'') или UTF-16 (''SZW''). Строки всегда должны быть объявлены с префиксом ''^'' (ссылка на данные). Размер может принимать нулевое значение, если заранее неизвестно, строка какого размера будет использоваться. В случае нулевого размера, однако, при подготовке аргумента, размер будет выделен точно под строку. Кроме строковых значений, система принимает также буферы или записи (для которых вызов выполняется несколько быстрее, чем для строк).&lt;br /&gt;
** '''S&amp;lt;Размер в байтах&amp;gt;''' или '''SW&amp;lt;Размер в словах&amp;gt;''' (наименование типа данных) -- задает аргумент с типом строка фиксированной длины. Строка может иметь формат ANSI (''S'') или UTF-16 (''SW''). Строки всегда должны быть объявлены с префиксом ''^'' (ссылка на данные). Размер может принимать нулевое значение, если заранее неизвестно, строка какого размера будет использоваться. В случае нулевого размера, однако, при подготовке аргумента, размер будет выделен точно под строку. Кроме строковых значений, система принимает также буферы (для которых вызов выполняется несколько быстрее, чем для строк).&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Возвращаемое значение (STRING)&amp;gt;''&amp;lt;/code&amp;gt; - {{Optional}} Имеет формат одного аргумента функции (см. выше), если аргумент опущен, возвращаемое функцией значение будет игнорировано (функция не возвращает значения).&lt;br /&gt;
&lt;br /&gt;
==== Возвращаемое значение ====&lt;br /&gt;
Возвращается новый объект функции обратного вызова.&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Пример производит вывод на экран заголовков и наименований классов всех видимых верхних окон системы.&lt;br /&gt;
Var aUser32 Export;&lt;br /&gt;
&lt;br /&gt;
  Function EnumWindowsProc(hwnd,LParam)&lt;br /&gt;
    If aUser32.IsWindowVisible(hwnd) Then&lt;br /&gt;
      СтрИмя:=&amp;quot;&amp;quot;;&lt;br /&gt;
      aUser32.GetWindowText(hwnd,СтрИмя,4095);&lt;br /&gt;
      СтрКласс:=&amp;quot;&amp;quot;;&lt;br /&gt;
      aUser32.GetClassName(hwnd,СтрКласс,4095);&lt;br /&gt;
      Message(&amp;quot;&amp;quot;+hwnd+&amp;quot;:&amp;quot;+СтрКласс+?(СтрИмя&amp;lt;&amp;gt;&amp;quot;&amp;quot;,&amp;quot;(&amp;quot;+СтрИмя+&amp;quot;)&amp;quot;));&lt;br /&gt;
    EndIf;&lt;br /&gt;
    Result:=1;&lt;br /&gt;
  EndFunction&lt;br /&gt;
&lt;br /&gt;
//Загрузка нужных системных функций&lt;br /&gt;
aUser32:=Lib.Load(&amp;quot;user32.dll&amp;quot;);&lt;br /&gt;
aUser32.RegisterFunction(&amp;quot;EnumWindows&amp;quot;,&amp;quot;stdcall&amp;quot;,&amp;quot;P,N&amp;quot;,&amp;quot;B32&amp;quot;);&lt;br /&gt;
aUser32.RegisterFunction(&amp;quot;GetWindowTextW:GetWindowText&amp;quot;,&amp;quot;stdcall&amp;quot;,&amp;quot;N,@SZW4096,I32&amp;quot;,&amp;quot;I32&amp;quot;);&lt;br /&gt;
aUser32.RegisterFunction(&amp;quot;GetClassNameW:GetClassName&amp;quot;,&amp;quot;stdcall&amp;quot;,&amp;quot;N,@SZW4096,I32&amp;quot;,&amp;quot;I32&amp;quot;);&lt;br /&gt;
aUser32.RegisterFunction(&amp;quot;IsWindowVisible&amp;quot;,&amp;quot;stdcall&amp;quot;,&amp;quot;N&amp;quot;,&amp;quot;B32&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
//Создание функции объекта для вызова EnumWindowsProc из системной области памяти&lt;br /&gt;
aEnumWindowsProc:=Lib.CreateCallbackFunction(&amp;quot;EnumWindowsProc&amp;quot;,,&amp;quot;stdcall&amp;quot;,&amp;quot;I32,N&amp;quot;,&amp;quot;B32&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
//Вызов системной функции EnumWindowsProc, которая, в свою очередь, будет вызывать созданную ранее EnumWindowsProc для каждого найденного окна&lt;br /&gt;
aUser32.EnumWindows(aEnumWindowsProc,0);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</description>
			<pubDate>Wed, 01 Apr 2026 09:59:32 GMT</pubDate>
			<dc:creator>Admin</dc:creator>
			<comments>http://sfsys.ru/index.php/Talk:Lib.CreateCallbackFunction</comments>
		</item>
		<item>
			<title>GlobalStringsSaveToFile</title>
			<link>http://sfsys.ru/index.php?title=GlobalStringsSaveToFile&amp;diff=5208&amp;oldid=0</link>
			<guid isPermaLink="false">http://sfsys.ru/index.php?title=GlobalStringsSaveToFile&amp;diff=5208&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Admin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;User:Admin (page does not exist)&quot;&gt;&lt;bdi&gt;Admin&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/GlobalStringsSaveToFile&quot; title=&quot;GlobalStringsSaveToFile&quot;&gt;GlobalStringsSaveToFile&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{infobox function&lt;br /&gt;
|name=GlobalStringsSaveToFile&lt;br /&gt;
|object=[[Функции общего назначения]]&lt;br /&gt;
|caption=Глобальные строки-массивы&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|db=0&lt;br /&gt;
|exception=Неверные агрументы, системная ошибка сервера, не найден массив.&lt;br /&gt;
|visual=0}}&lt;br /&gt;
{{HeadLinks|&lt;br /&gt;
* [[Main_Page|Начальная страница]]&lt;br /&gt;
* [[Общее_описание_языка|Общее описание]]&lt;br /&gt;
* [[Объекты]]&lt;br /&gt;
* [[Функции общего назначения]]}}&lt;br /&gt;
Функция выполняет сохранение массива на диск в файловой системе сервера в виде файла. Обычно она выполняется автоматически, если в массиве были изменения после определенного количества времени.&lt;br /&gt;
== Синтаксис ==&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
'''GlobalStringsSaveToFile'''(''&amp;lt;Имя или идентификатор массива (STRING,INT)&amp;gt;''{{Optional|,&amp;lt;Имя файла на сервере (STRING)&amp;gt;,&amp;lt;Если время последней записи было не раньше в мс. (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;1 или 0&amp;gt;''&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
==== Аргументы ====&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Имя или идентификатор массива (STRING,INT)&amp;gt;''&amp;lt;/code&amp;gt; - Параметр задает имя массива (строка) или идентификатор массива (число).&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Имя файла на сервере (STRING)&amp;gt;''&amp;lt;/code&amp;gt; - {{Optional}} Аргумент, строковое представление которого будет представлять имя файла в [[Имена файлов|нотации системы]]. На данный момент принимается только путь к файлам на сервере. Если аргумент не задан, используется тот файл, который был указан при создании массива, см. [[GlobalStringsHeapsAdd]].&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Если время последней записи было не раньше в мс. (INT)&amp;gt;''&amp;lt;/code&amp;gt; - {{Optional}} {{Planned}} Сохранение будет выполняться только если последнее автоматическое или вызванное этой функцией сохранение было не ранее указанного количества миллисекунд назад. По умолчанию, '''0''', выполняется безусловное сохранение.&lt;br /&gt;
==== Возвращаемое значение ====&lt;br /&gt;
Возвращает 1, если сохранение выполнено успешно (или не требуется, так как предыдущее было выполнено недавно), 0, если сохранение не удалось выполнить (к примеру, из-за того, что файл был занят).&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GlobalStringsSaveToFile(Массив,&amp;quot;Temp\Массивы\Current.bin&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</description>
			<pubDate>Wed, 01 Apr 2026 09:59:06 GMT</pubDate>
			<dc:creator>Admin</dc:creator>
			<comments>http://sfsys.ru/index.php/Talk:GlobalStringsSaveToFile</comments>
		</item>
		<item>
			<title>GlobalStringsShrink</title>
			<link>http://sfsys.ru/index.php?title=GlobalStringsShrink&amp;diff=5210&amp;oldid=0</link>
			<guid isPermaLink="false">http://sfsys.ru/index.php?title=GlobalStringsShrink&amp;diff=5210&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Admin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;User:Admin (page does not exist)&quot;&gt;&lt;bdi&gt;Admin&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/GlobalStringsShrink&quot; title=&quot;GlobalStringsShrink&quot;&gt;GlobalStringsShrink&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{infobox function&lt;br /&gt;
|name=GlobalStringsShrink&lt;br /&gt;
|object=[[Функции общего назначения]]&lt;br /&gt;
|caption=Глобальные строки-массивы&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|db=0&lt;br /&gt;
|exception=Неверные агрументы, системная ошибка сервера, не найден массив.&lt;br /&gt;
|visual=0}}&lt;br /&gt;
{{HeadLinks|&lt;br /&gt;
* [[Main_Page|Начальная страница]]&lt;br /&gt;
* [[Общее_описание_языка|Общее описание]]&lt;br /&gt;
* [[Объекты]]&lt;br /&gt;
* [[Функции общего назначения]]}}&lt;br /&gt;
Функция форсирует процедуру сжатия памяти буферов массива, которая обычно выполняется автоматически после определенного количества удалений из массива.&lt;br /&gt;
== Синтаксис ==&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
'''GlobalStringsShrink'''(''&amp;lt;Имя или идентификатор массива (STRING,INT)&amp;gt;''{{Optional|,''&amp;lt;Порог сжатия в % (INT)&amp;gt;''{{Default|{{Eq}}0}}}})&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
==== Аргументы ====&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Имя или идентификатор массива (STRING,INT)&amp;gt;''&amp;lt;/code&amp;gt; - Параметр задает имя массива (строка) или идентификатор массива (число).&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Порог сжатия в % (INT)&amp;gt;''&amp;lt;/code&amp;gt; - {{Optional}} Аргумент задает процент свободного места в данных буфера по отношению к размеру данных в буфере для инициации процедуры сжатия для буфера. Проверки выполняются для отдельных буферов, множество которых входят в один массив. По умолчанию -- 0%, безусловное сжатие.&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Выполнить удаление большого количества значений из массива Массив&lt;br /&gt;
GlobalStringsRemove(Массив,СтрЗначения,0);&lt;br /&gt;
&lt;br /&gt;
//Сжать буферы массива, освободив память, если место, занимаемое полезными данными в них, менее половины объема буферов&lt;br /&gt;
GlobalStringsShrink(Массив,50);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</description>
			<pubDate>Wed, 01 Apr 2026 09:59:06 GMT</pubDate>
			<dc:creator>Admin</dc:creator>
			<comments>http://sfsys.ru/index.php/Talk:GlobalStringsShrink</comments>
		</item>
		<item>
			<title>GlobalStringsAdd</title>
			<link>http://sfsys.ru/index.php?title=GlobalStringsAdd&amp;diff=5198&amp;oldid=0</link>
			<guid isPermaLink="false">http://sfsys.ru/index.php?title=GlobalStringsAdd&amp;diff=5198&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Admin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;User:Admin (page does not exist)&quot;&gt;&lt;bdi&gt;Admin&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/GlobalStringsAdd&quot; title=&quot;GlobalStringsAdd&quot;&gt;GlobalStringsAdd&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{infobox function&lt;br /&gt;
|name=GlobalStringsAdd&lt;br /&gt;
|object=[[Функции общего назначения]]&lt;br /&gt;
|caption=Глобальные строки-массивы&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|db=0&lt;br /&gt;
|exception=Неверные агрументы, системная ошибка сервера, не найден массив.&lt;br /&gt;
|visual=0}}&lt;br /&gt;
{{HeadLinks|&lt;br /&gt;
* [[Main_Page|Начальная страница]]&lt;br /&gt;
* [[Общее_описание_языка|Общее описание]]&lt;br /&gt;
* [[Объекты]]&lt;br /&gt;
* [[Функции общего назначения]]}}&lt;br /&gt;
Функция добавляет произвольное количество строк из списка или одной строки с разделителями в массив, заданный по его наименованию или идентификатору. Режим функции задает условие добавления, а также формат ответа (последний может быть как числовым, так и в виде списка).&lt;br /&gt;
== Синтаксис ==&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
'''GlobalStringsAdd'''(''&amp;lt;Имя или идентификатор массива (STRING,INT)&amp;gt;'',''&amp;lt;Значения (STRING,LIST)&amp;gt;''{{Optional|,''&amp;lt;Режим (INT)&amp;gt;''{{Default|{{Eq}}0}}}}):''&amp;lt;Статус или результат (INT,LIST)&amp;gt;''&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
==== Аргументы ====&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Имя или идентификатор массива (STRING,INT)&amp;gt;''&amp;lt;/code&amp;gt; - Параметр задает имя массива (строка) или идентификатор массива (число) для добавления значений.&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Значения (STRING,LIST)&amp;gt;''&amp;lt;/code&amp;gt; - Значения для добавления могут быть в списке или в строке. Каждое значение может содержать префикс, отделенный от основной строки разделителем префикса (см. [[GlobalStringsHeapsAdd]]). При добавлении из строки, каждое значение (с префиксом) должно быть разделено разделителем значений (см. [[GlobalStringsHeapsAdd]]).&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Режим (INT)&amp;gt;''&amp;lt;/code&amp;gt; - {{Optional}} Аргумент задает режим добавления и является битовой маской. На данный момент доступны следующие биты:&lt;br /&gt;
** '''бит 0''' -- если установлен, функция возвращает список уже присутствующих (из добавляемых) в массиве значений, иначе статус будет числом (см. ниже).&lt;br /&gt;
** '''бит 1''' -- если установлен, функция добавляет те значения, которых нет, игнорируя те, что уже присутствуют в массиве. Если сброшен (по умолчанию), функция не изменяет массив, если по крайней мере одно из добавляемых значений уже содержится в массиве.&lt;br /&gt;
** '''бит 2''' -- если установлен, функция обновит префиксы для значений, которые уже присутствовали в массиве (в не зависимости от того, установлен ли бит 1 или нет).&lt;br /&gt;
** '''бит 3''' -- если установлен (и не установлен бит 0), функция возвращает только 0 (все значения новые) или 1 (некоторые значения присутствовали в массиве). Вместо статуса 2 (все значения уже присутствовали в массиве) также возвращается число 1, что позволяет выполнить операцию немного быстрее.&lt;br /&gt;
==== Возвращаемое значение ====&lt;br /&gt;
Если бит 0 аргумента режима сброшен (по умолчанию), возвращает следующее числовое значение: '''0''' -- все значения новые и были добавлены в массив, '''1''' -- некоторые значения присутствовали в массиве (по умолчанию, в массив ничего не добавлено, но при установке бита 1 аргумента режима, отсутствующие значения все-таки были добавлены, также в зависимости от бита 2 режима, в массиве могли быть обновлены префиксы найденных значений), '''2''' -- все значения уже присутствали в массиве (в зависимости от бита 2 режима, в массиве могли быть обновлены префиксы значений). Если бит 0 аргумента режима установлен, функция возвращает список.&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Массив:=GlobalStringsHeapsFind(&amp;quot;MRK&amp;quot;+FormatDate(Date(),&amp;quot;YYYYmmdd&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
//Находится строка добавления СтрНовыеМарки, значения разделены заранее заданной строкой-разделителем.&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
If Массив&amp;gt;0 Then&lt;br /&gt;
  GlobalStringsAdd(Массив,СтрНовыеМарки,6);//форсированное добавление, обновление префиксов, если они изменились&lt;br /&gt;
EndIf;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</description>
			<pubDate>Wed, 01 Apr 2026 09:59:05 GMT</pubDate>
			<dc:creator>Admin</dc:creator>
			<comments>http://sfsys.ru/index.php/Talk:GlobalStringsAdd</comments>
		</item>
		<item>
			<title>GlobalStringsAddFromFile</title>
			<link>http://sfsys.ru/index.php?title=GlobalStringsAddFromFile&amp;diff=5200&amp;oldid=0</link>
			<guid isPermaLink="false">http://sfsys.ru/index.php?title=GlobalStringsAddFromFile&amp;diff=5200&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Admin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;User:Admin (page does not exist)&quot;&gt;&lt;bdi&gt;Admin&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/GlobalStringsAddFromFile&quot; title=&quot;GlobalStringsAddFromFile&quot;&gt;GlobalStringsAddFromFile&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{infobox function&lt;br /&gt;
|name=GlobalStringsAddFromFile&lt;br /&gt;
|object=[[Функции общего назначения]]&lt;br /&gt;
|caption=Глобальные строки-массивы&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|db=0&lt;br /&gt;
|exception=Неверные агрументы, системная ошибка сервера, не найден массив.&lt;br /&gt;
|visual=0}}&lt;br /&gt;
{{HeadLinks|&lt;br /&gt;
* [[Main_Page|Начальная страница]]&lt;br /&gt;
* [[Общее_описание_языка|Общее описание]]&lt;br /&gt;
* [[Объекты]]&lt;br /&gt;
* [[Функции общего назначения]]}}&lt;br /&gt;
Функция выполняет добавление сохраненного ранее массива с диска в файловой системе сервера к массиву, заданному по наименованию или идентификатору. Обычно она выполняется автоматически при создании массива, если указан файл его хранения.&lt;br /&gt;
== Синтаксис ==&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
'''GlobalStringsAddFromFile'''(''&amp;lt;Имя или идентификатор массива (STRING,INT)&amp;gt;'',''&amp;lt;Имя файла на сервере (STRING)&amp;gt;''{{Optional|,''&amp;lt;Очистить массив перед загрузкой (INT)&amp;gt;''{{Default|{{Eq}}0}}}}):''&amp;lt;1 или 0&amp;gt;''&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
==== Аргументы ====&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Имя или идентификатор массива (STRING,INT)&amp;gt;''&amp;lt;/code&amp;gt; - Параметр задает имя массива (строка) или идентификатор массива (число).&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Имя файла на сервере (STRING)&amp;gt;''&amp;lt;/code&amp;gt; - Аргумент, строковое представление которого будет представлять имя файла в [[Имена файлов|нотации системы]]. На данный момент принимается только путь к файлам на сервере.&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Очистить массив перед загрузкой (INT)&amp;gt;''&amp;lt;/code&amp;gt; - {{Optional}} Массив, заданный первым агрументом будет очищен, перед загрузкой, если данный аргумент равен ''1''. По умолчанию, ''0'', данные будут добавлены к текущему массиву.&lt;br /&gt;
==== Возвращаемое значение ====&lt;br /&gt;
Возвращает 1, если загрузка выполнена успешно, 0, если загрузку не удалось выполнить (к примеру, файл не существовал).&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GlobalStringsAddFromFile(Массив,&amp;quot;Temp\Массивы\Current.bin&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</description>
			<pubDate>Wed, 01 Apr 2026 09:59:05 GMT</pubDate>
			<dc:creator>Admin</dc:creator>
			<comments>http://sfsys.ru/index.php/Talk:GlobalStringsAddFromFile</comments>
		</item>
		<item>
			<title>GlobalStringsFind</title>
			<link>http://sfsys.ru/index.php?title=GlobalStringsFind&amp;diff=5202&amp;oldid=0</link>
			<guid isPermaLink="false">http://sfsys.ru/index.php?title=GlobalStringsFind&amp;diff=5202&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Admin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;User:Admin (page does not exist)&quot;&gt;&lt;bdi&gt;Admin&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/GlobalStringsFind&quot; title=&quot;GlobalStringsFind&quot;&gt;GlobalStringsFind&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{infobox function&lt;br /&gt;
|name=GlobalStringsAdd&lt;br /&gt;
|object=[[Функции общего назначения]]&lt;br /&gt;
|caption=Глобальные строки-массивы&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|db=0&lt;br /&gt;
|exception=Неверные агрументы, системная ошибка сервера, не найден массив.&lt;br /&gt;
|visual=0}}&lt;br /&gt;
{{HeadLinks|&lt;br /&gt;
* [[Main_Page|Начальная страница]]&lt;br /&gt;
* [[Общее_описание_языка|Общее описание]]&lt;br /&gt;
* [[Объекты]]&lt;br /&gt;
* [[Функции общего назначения]]}}&lt;br /&gt;
Функция выполняет поиск произвольного количества строк, заданных в списке или в одной строке с разделителями, в массиве по его наименованию или идентификатору. Режим функции задает условие поиска, а также формат ответа (последний может быть как числовым, так и в виде списка).&lt;br /&gt;
== Синтаксис ==&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
'''GlobalStringsFind'''(''&amp;lt;Имя или идентификатор массива (STRING,INT)&amp;gt;'',''&amp;lt;Значения (STRING,LIST)&amp;gt;''{{Optional|,''&amp;lt;Режим (INT)&amp;gt;''{{Default|{{Eq}}0}}}}):''&amp;lt;Статус или результат (INT,LIST)&amp;gt;''&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
==== Аргументы ====&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Имя или идентификатор массива (STRING,INT)&amp;gt;''&amp;lt;/code&amp;gt; - Параметр задает имя массива (строка) или идентификатор массива (число) для поиска значений.&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Значения (STRING,LIST)&amp;gt;''&amp;lt;/code&amp;gt; - Значения для поиска могут быть в списке или в строке. Каждое значение может содержать префикс, отделенный от основной строки разделителем префикса (см. [[GlobalStringsHeapsAdd]]). Если аргумент строка, каждое значение (с префиксом) должно быть разделено разделителем значений (см. [[GlobalStringsHeapsAdd]]).&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Режим (INT)&amp;gt;''&amp;lt;/code&amp;gt; - {{Optional}} Аргумент задает режим поиска и является битовой маской. На данный момент доступны следующие биты:&lt;br /&gt;
** '''бит 0''' -- если установлен, функция возвращает список уже найденных в массиве значений, иначе статус будет числом (см. ниже).&lt;br /&gt;
** '''бит 3''' -- если установлен (и не установлен бит 0), функция возвращает только 0 (все значения найдены) или 1 (некоторые значения найдены). Вместо статуса 2 (все значения найдены) также возвращается число 1, что позволяет выполнить операцию немного быстрее.&lt;br /&gt;
==== Возвращаемое значение ====&lt;br /&gt;
Если бит 0 аргумента режима сброшен (по умолчанию), возвращает следующее числовое значение: '''0''' -- все значения были найдены в массиве, '''1''' -- некоторые значения были найдены в массиве, '''2''' -- все значения были найдены в массиве. Если бит 0 аргумента режима установлен, функция возвращает список найденных значений.&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//СтрКоды -- значения для поиска дублей&lt;br /&gt;
//СпМассивыМарок -- список массивов, где производится поиск дублей&lt;br /&gt;
СпДубли:=List.Create();&lt;br /&gt;
For i:=1 To СпМассивыМарок.Size() Do&lt;br /&gt;
  Try&lt;br /&gt;
    //Возвратить список и добавить его содержимое к списку СпДубли&lt;br /&gt;
    GlobalStringsFind(СпМассивыМарок[i],СтрКоды,1).CopyTo(СпДубли);&lt;br /&gt;
  Except&lt;br /&gt;
    //Возможно, один из старых массивов был удален до этой операции другим пользователем&lt;br /&gt;
  EndTry;&lt;br /&gt;
EndDo;&lt;br /&gt;
//СпДубли -- список найденных дублей для вывода&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</description>
			<pubDate>Wed, 01 Apr 2026 09:59:05 GMT</pubDate>
			<dc:creator>Admin</dc:creator>
			<comments>http://sfsys.ru/index.php/Talk:GlobalStringsFind</comments>
		</item>
		<item>
			<title>GlobalStringsHeapsFind</title>
			<link>http://sfsys.ru/index.php?title=GlobalStringsHeapsFind&amp;diff=5204&amp;oldid=0</link>
			<guid isPermaLink="false">http://sfsys.ru/index.php?title=GlobalStringsHeapsFind&amp;diff=5204&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Admin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;User:Admin (page does not exist)&quot;&gt;&lt;bdi&gt;Admin&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/GlobalStringsHeapsFind&quot; title=&quot;GlobalStringsHeapsFind&quot;&gt;GlobalStringsHeapsFind&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{infobox function&lt;br /&gt;
|name=GlobalStringsHeapsFind&lt;br /&gt;
|object=[[Функции общего назначения]]&lt;br /&gt;
|caption=Глобальные строки-массивы&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|db=0&lt;br /&gt;
|exception=Системная ошибка сервера&lt;br /&gt;
|visual=0}}&lt;br /&gt;
{{HeadLinks|&lt;br /&gt;
* [[Main_Page|Начальная страница]]&lt;br /&gt;
* [[Общее_описание_языка|Общее описание]]&lt;br /&gt;
* [[Объекты]]&lt;br /&gt;
* [[Функции общего назначения]]}}&lt;br /&gt;
Функция проверяет, существует ли на сервере массив по его наименованию. Если массив существует, будет возвращен его идентификатор, иначе ноль.&lt;br /&gt;
== Синтаксис ==&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
'''GlobalStringsHeapsFind'''(''&amp;lt;Имя массива (STRING)&amp;gt;''):''&amp;lt;Идентификатор или ноль (INT)&amp;gt;''&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
==== Аргументы ====&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Имя массива (STRING)&amp;gt;''&amp;lt;/code&amp;gt; - Параметр задает имя массива по наименованию (строка) или идентификатору (число).&lt;br /&gt;
&lt;br /&gt;
==== Возвращаемое значение ====&lt;br /&gt;
Возвращает числовое значение.&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
аДата:=BegOfDay(Date());&lt;br /&gt;
If GlobalStringsHeapsFind(&amp;quot;MRK&amp;quot;+FormatDate(аДата,&amp;quot;YYYYmmdd&amp;quot;))&amp;gt;0 Then&lt;br /&gt;
  Message(&amp;quot;Массив за сегодня уже был создан!&amp;quot;);&lt;br /&gt;
EndIf;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</description>
			<pubDate>Wed, 01 Apr 2026 09:59:05 GMT</pubDate>
			<dc:creator>Admin</dc:creator>
			<comments>http://sfsys.ru/index.php/Talk:GlobalStringsHeapsFind</comments>
		</item>
		<item>
			<title>GlobalStringsRemove</title>
			<link>http://sfsys.ru/index.php?title=GlobalStringsRemove&amp;diff=5206&amp;oldid=0</link>
			<guid isPermaLink="false">http://sfsys.ru/index.php?title=GlobalStringsRemove&amp;diff=5206&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Admin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;User:Admin (page does not exist)&quot;&gt;&lt;bdi&gt;Admin&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/GlobalStringsRemove&quot; title=&quot;GlobalStringsRemove&quot;&gt;GlobalStringsRemove&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{infobox function&lt;br /&gt;
|name=GlobalStringsRemove&lt;br /&gt;
|object=[[Функции общего назначения]]&lt;br /&gt;
|caption=Глобальные строки-массивы&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|db=0&lt;br /&gt;
|exception=Неверные агрументы, системная ошибка сервера, не найден массив.&lt;br /&gt;
|visual=0}}&lt;br /&gt;
{{HeadLinks|&lt;br /&gt;
* [[Main_Page|Начальная страница]]&lt;br /&gt;
* [[Общее_описание_языка|Общее описание]]&lt;br /&gt;
* [[Объекты]]&lt;br /&gt;
* [[Функции общего назначения]]}}&lt;br /&gt;
Функция удаляет произвольное количество строк из списка или одной строки с разделителями из массива, заданного по его наименованию или идентификатору. Режим функции задает условие удаления, а также формат ответа (последний может быть как числовым, так и в виде списка).&lt;br /&gt;
== Синтаксис ==&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
'''GlobalStringsRemove'''(''&amp;lt;Имя или идентификатор массива (STRING,INT)&amp;gt;'',''&amp;lt;Значения (STRING,LIST)&amp;gt;''{{Optional|,''&amp;lt;Режим (INT)&amp;gt;''{{Default|{{Eq}}0}}}}):''&amp;lt;Статус или результат (INT,LIST)&amp;gt;''&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
==== Аргументы ====&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Имя или идентификатор массива (STRING,INT)&amp;gt;''&amp;lt;/code&amp;gt; - Параметр задает имя массива (строка) или идентификатор массива (число) для удаления значений.&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Значения (STRING,LIST)&amp;gt;''&amp;lt;/code&amp;gt; - Значения для удаления могут быть в списке или в строке. Каждое значение может содержать префикс, отделенный от основной строки разделителем префикса (см. [[GlobalStringsHeapsAdd]]). При добавлении из строки, каждое значение (с префиксом) должно быть разделено разделителем значений (см. [[GlobalStringsHeapsAdd]]).&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Режим (INT)&amp;gt;''&amp;lt;/code&amp;gt; - {{Optional}} Аргумент задает режим удаления и является битовой маской. На данный момент доступны следующие биты:&lt;br /&gt;
** '''бит 0''' -- если установлен, функция возвращает список удаленных из массива значений (только те, что были найдены), иначе статус будет числом (см. ниже).&lt;br /&gt;
** '''бит 1''' -- если установлен, функция не выполняет удаления значений, если хотя бы одно из них отсутствует в массиве на момент выполнения операции. Если сброшен (по умолчанию), функция удаляет найденные, вне зависимости от того, все ли значения присутствуют в массиве.&lt;br /&gt;
==== Возвращаемое значение ====&lt;br /&gt;
Если бит 0 аргумента режима сброшен (по умолчанию), возвращает следующее числовое значение: '''0''' -- ни одно из искомых значений не было найдено в массиве (удаления не производилось), '''1''' -- некоторые значения присутствовали в массиве (по умолчанию, он были удалены из массива, но при установке бита 1 аргумента режима, массив не был изменен), '''2''' -- все значения присутствали в массиве и были удалены. Если бит 0 аргумента режима установлен, функция возвращает список.&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
//СтрСтарыеМарки: значения для удаления разделены заранее заданной строкой-разделителем.&lt;br /&gt;
//СпМассивыМарок: массивы, созданные на данный момент&lt;br /&gt;
If СтрСтарыеМарки&amp;lt;&amp;gt;&amp;quot;&amp;quot; Then&lt;br /&gt;
  For i:=1 To СпМассивыМарок.Size() Do&lt;br /&gt;
    Try&lt;br /&gt;
      GlobalStringsRemove(СпМассивыМарок[i],СтрСтарыеМарки,0);//Удалить те, которые были найдены&lt;br /&gt;
    Except&lt;br /&gt;
      //Возможно, один из старых массивов был удален до этой операции другим пользователем&lt;br /&gt;
    EndTry;&lt;br /&gt;
  EndDo;&lt;br /&gt;
EndIf;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</description>
			<pubDate>Wed, 01 Apr 2026 09:59:05 GMT</pubDate>
			<dc:creator>Admin</dc:creator>
			<comments>http://sfsys.ru/index.php/Talk:GlobalStringsRemove</comments>
		</item>
		<item>
			<title>GetModuleFunction</title>
			<link>http://sfsys.ru/index.php?title=GetModuleFunction&amp;diff=5196&amp;oldid=0</link>
			<guid isPermaLink="false">http://sfsys.ru/index.php?title=GetModuleFunction&amp;diff=5196&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Admin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;User:Admin (page does not exist)&quot;&gt;&lt;bdi&gt;Admin&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/GetModuleFunction&quot; title=&quot;GetModuleFunction&quot;&gt;GetModuleFunction&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{infobox function&lt;br /&gt;
|name=GetModuleFunction&lt;br /&gt;
|object=[[Функции общего назначения]]&lt;br /&gt;
|caption=Системные функции&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|db=0&lt;br /&gt;
|exception=Невозможно превратить в число, неверный уровень функции.&lt;br /&gt;
|visual=0}}&lt;br /&gt;
{{HeadLinks|&lt;br /&gt;
* [[Main_Page|Начальная страница]]&lt;br /&gt;
* [[Общее_описание_языка|Общее описание]]&lt;br /&gt;
* [[Объекты]]&lt;br /&gt;
* [[Функции общего назначения]]}}&lt;br /&gt;
Функция отдает объект компилированной функции, находящейся на требуемом уровне над текущей исполняемой функцией (этот объект, если найден, всегда включает текущую исполняемую функцию). В дальнейшем этот объект можно использовать для вызова функций по именам (см. [[ExecuteFunction]]), или экспортирования функции.&lt;br /&gt;
== Синтаксис ==&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
'''GetModuleFunction'''({{Optional|&amp;lt;Уровень родительской функции от текущей (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Требуемая функция в виде объекта (COMPILEDFUNCTION)&amp;gt;''&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
==== Аргументы ====&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Уровень родительской функции от текущей (INT)&amp;gt;''&amp;lt;/code&amp;gt; - {{Optional}} Аргумент задает требуемый уровень родительской функции. По-умолчанию, ''0'', объект содается для текущей функции. Нужнопонимать, что уровень родителя здесь, это не уровень вызова (рекурсии), а уровень исходного текста.&lt;br /&gt;
&lt;br /&gt;
==== Возвращаемое значение ====&lt;br /&gt;
Возвращает новый объект компилированной функции, который можно исполнить с помощью функций [[Exec]] и [[ExecEx]], либо экспортировать в память с помощью [[SaveFunctionToBuffer]].&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Пример показывает разницу между уровенем исходного текста при получении функции и уровнем рекурсии,&lt;br /&gt;
//  а также глобальными переменными, доступными в контексте исполнения, а не внутри объекта функции.&lt;br /&gt;
Var Счетчик Export;&lt;br /&gt;
&lt;br /&gt;
  Function Рекурсия()&lt;br /&gt;
    Счетчик:=Счетчик+1;&lt;br /&gt;
    Message(&amp;quot;Счетчик (вложенность вызова): &amp;quot;+Счетчик);&lt;br /&gt;
    If Счетчик&amp;gt;99 Then&lt;br /&gt;
      Message(&amp;quot;Выходим из рекурсии.&amp;quot;);&lt;br /&gt;
      Exit;&lt;br /&gt;
    EndIf;&lt;br /&gt;
    //Получим объект функции, в которой располагается текущая функция Рекурсия()&lt;br /&gt;
    аФункция:=GetModuleFunction(1);&lt;br /&gt;
    //Выполним вызов из этого объекта&lt;br /&gt;
    ExecuteFunction(&amp;quot;Рекурсия&amp;quot;,аФункция);&lt;br /&gt;
  EndFunction&lt;br /&gt;
&lt;br /&gt;
Счетчик:=0;&lt;br /&gt;
Рекурсия();&lt;br /&gt;
//В логе должно отобразиться: 100 строк &amp;quot;Счетчик (вложенность вызова): ??&amp;quot; и последняя строка &amp;quot;Выходим из рекурсии.&amp;quot;.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</description>
			<pubDate>Wed, 01 Apr 2026 09:59:04 GMT</pubDate>
			<dc:creator>Admin</dc:creator>
			<comments>http://sfsys.ru/index.php/Talk:GetModuleFunction</comments>
		</item>
		<item>
			<title>GIObject.LinkEvent</title>
			<link>http://sfsys.ru/index.php?title=GIObject.LinkEvent&amp;diff=5194&amp;oldid=0</link>
			<guid isPermaLink="false">http://sfsys.ru/index.php?title=GIObject.LinkEvent&amp;diff=5194&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Admin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;User:Admin (page does not exist)&quot;&gt;&lt;bdi&gt;Admin&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/GIObject.LinkEvent&quot; title=&quot;GIObject.LinkEvent&quot;&gt;GIObject.LinkEvent&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{infobox function&lt;br /&gt;
|name=LinkEvent&lt;br /&gt;
|object=[[Объект GI#Атрибуты и функции графических объектов|Графический объект объекта GI]]&lt;br /&gt;
|caption=Функции графических объектов&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|db=0&lt;br /&gt;
|exception=Неверные аргументы.&lt;br /&gt;
|visual=1}}&lt;br /&gt;
{{HeadLinks|&lt;br /&gt;
* [[Main_Page|Начальная страница]]&lt;br /&gt;
* [[Общее_описание_языка|Общее описание]]&lt;br /&gt;
* [[Объекты]]&lt;br /&gt;
* [[Объект GI]]}}&lt;br /&gt;
Функция ассоциирует локальную функцию по ее имени со стандартным событием графического объекта. Также функции может передаваться один произвольный аргумент при ее вызове. На данный момент доступны следующие стандартные события объектов: '''OnDraw''', '''OnNewInput''', '''OnChange''', '''OnMove'''.&lt;br /&gt;
&lt;br /&gt;
== Синтаксис ==&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
{{Grey|GIObject.}}'''LinkEvent'''(''&amp;lt;Имя события (STRING)&amp;gt;''{{OptionalByRef|,&amp;lt;Имя локальной функции (STRING)&amp;gt;,&amp;lt;Глубина поиска (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Аргумент функции&amp;gt;}})&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Аргументы ====&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Имя события (STRING)&amp;gt;''&amp;lt;/code&amp;gt; - Аргумент задает имя события для ассоциации. На данный момент доступны следующие имена событий:&lt;br /&gt;
** '''OnDraw''': Событие вызывается в момент необходимости нарисовать текущий объект. В нем можно разместить произвольный код для прорисовки и в нужный момент вызвать функцию [[GIObject.DrawObject|DrawObject]], которая выполняет саму прорисовку объекта. Локальная функция для вызова этого события должна содержать три аргумента -- объект GI, рисуемый графический объект и доп. параметр, заданный в этой функции, пример: &amp;lt;code&amp;gt;Function Прорисовка(aGI,аОбъект,ДопПараметр)&amp;lt;/code&amp;gt;.&lt;br /&gt;
** '''OnNewInput''': {{Planned}} Событие будет вызываться в момент получения новой информации от внешних устройств ввода (клавиатура, мышь, контроллер), когда объект имеет фокус, либо в момент получения или потери фокуса объектом.&lt;br /&gt;
** '''OnChange''': {{Planned}} Событие будет вызываться в момент изменения статуса объекта или его определенных атрибутов.&lt;br /&gt;
** '''OnMove''': {{Planned}} Событие будет вызываться в момент движения, вращения или мастабирования объекта.&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Имя локальной функции (STRING)&amp;gt;''&amp;lt;/code&amp;gt; - Аргумент задает имя локальной или глобальной функции, которая будет вызываться при наступлении события.&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Глубина поиска (INT)&amp;gt;''&amp;lt;/code&amp;gt; - {{Optional}} Задает способ поиска локальной функции. Может принимать следующие значения:&lt;br /&gt;
** -1 -- выполнять поиск по последовательности функций из стека вызовов, а не искать, используя подчинение функций на момент компиляции. Этот способ предпочтительнее использовать в компилированных функциях, вызываемых из разных мест модуля или из разных модулей, чтобы получить доступ к реальной среде функций, а не к оной на момент компиляции.&lt;br /&gt;
** 0 (по умолчанию) -- выполнять поиск во всех модулях [[Общее описание языка#Вложенность функций и модулей, уровни вложенности|большего уровня вложенности]] (родительских) и во всех глобальных модулях.&lt;br /&gt;
** 1 -- выполнять поиск только внутри текущего модуля.&lt;br /&gt;
** 2 -- выполнять поиск только внутри родительского модуля.&lt;br /&gt;
** 3..x -- выполнять поиск только внутри родительского модуля указанного уровня (к примеру, для уровня 3, выполнять поиск только в родителе родителя текущего модуля).&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Аргумент функции&amp;gt;''&amp;lt;/code&amp;gt; - {{Optional}} Содержит произвольное значение, которое будет передано локальной функции третим аргументом при ее вызове.&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Используется фрагмент из обработки tetris.sfo&lt;br /&gt;
&lt;br /&gt;
  Function OnDrawObject(aGI,aObj)&lt;br /&gt;
    aGI.ShaderProgramSetVariable(лкПрограммы[2],&amp;quot;u_offset&amp;quot;,,0,лкТекущаяФигура[5]*лкШиринаКвадрата);  &lt;br /&gt;
    aObj.DrawObject();&lt;br /&gt;
    aGI.ShaderProgramSetVariable(лкПрограммы[2],&amp;quot;u_offset&amp;quot;,,0,0);  &lt;br /&gt;
  EndFunction&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
аМодель:=GIModel.New();&lt;br /&gt;
аМодель.SimpleModel(Buffer.Create());&lt;br /&gt;
аОбъектФигуры:=aGI.AddObject();&lt;br /&gt;
аОбъектФигуры.Model(аМодель);&lt;br /&gt;
аОбъектФигуры.LinkEvent(&amp;quot;ONDRAW&amp;quot;,&amp;quot;OnDrawObject&amp;quot;,1);&lt;br /&gt;
лкОбъекты[2]:=аОбъектФигуры;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</description>
			<pubDate>Wed, 01 Apr 2026 09:59:03 GMT</pubDate>
			<dc:creator>Admin</dc:creator>
			<comments>http://sfsys.ru/index.php/Talk:GIObject.LinkEvent</comments>
		</item>
		<item>
			<title>GI.LinkEvent</title>
			<link>http://sfsys.ru/index.php?title=GI.LinkEvent&amp;diff=5192&amp;oldid=0</link>
			<guid isPermaLink="false">http://sfsys.ru/index.php?title=GI.LinkEvent&amp;diff=5192&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Admin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;User:Admin (page does not exist)&quot;&gt;&lt;bdi&gt;Admin&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/GI.LinkEvent&quot; title=&quot;GI.LinkEvent&quot;&gt;GI.LinkEvent&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{infobox function&lt;br /&gt;
|name=LinkEvent&lt;br /&gt;
|object=[[Объект GI]]&lt;br /&gt;
|caption=Общие функции объекта GI&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|db=0&lt;br /&gt;
|exception=Неверные аргументы, локальная функция не найдена.&lt;br /&gt;
|visual=1}}&lt;br /&gt;
{{HeadLinks|&lt;br /&gt;
* [[Main_Page|Начальная страница]]&lt;br /&gt;
* [[Общее_описание_языка|Общее описание]]&lt;br /&gt;
* [[Объекты]]&lt;br /&gt;
* [[Объект GI]]}}&lt;br /&gt;
Функция ассоциирует локальную функцию по ее имени со стандартным событием объекта ''GI''. Предыдущая ассоциация при этом удаляется. Также функции может передаваться один произвольный аргумент. На данный момент доступны следующие стандартные события: '''OnDraw''', '''OnResize''', '''OnNewInput'''. &lt;br /&gt;
&lt;br /&gt;
== Синтаксис ==&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
{{Grey|GI.}}'''LinkEvent'''(''&amp;lt;Имя события (STRING)&amp;gt;''{{Optional|,&amp;lt;Имя локальной функции (STRING)&amp;gt;,&amp;lt;Глубина поиска (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Аргумент функции&amp;gt;}})&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Аргументы ====&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Имя события (STRING)&amp;gt;''&amp;lt;/code&amp;gt; - Аргумент задает имя события для ассоциации. На данный момент доступны следующие имена событий:&lt;br /&gt;
** '''OnDraw''': Событие вызывается в момент прорисовки кадра из функции [[GI.InitiateRedraw|InitiateRedraw]]. В нем можно разместить произвольный код для прорисовки и в нужный момент вызвать функцию [[GI.DrawScene|DrawScene]], которая выполняет рисование всех графических объектов. Локальная функция для вызова этого события должна содержать два аргумента -- объект GI и доп. параметр, заданный в этой функции, пример: &amp;lt;code&amp;gt;Function Прорисовка(ОбъектGI,ДопПараметр)&amp;lt;/code&amp;gt;.&lt;br /&gt;
** '''OnResize''': Событие вызывается в момент изменения размера окна ''GI'' из функции [[GI.InitiateRedraw|InitiateRedraw]]. В нем можно разместить произвольный код, связанный с изменением размеров рисуемых элементов. Локальная функция для вызова этого события должна содержать четыре аргумента (разрешается не указывать два последних) -- объект GI и доп. параметр, заданный в этой функции, новая ширина окна ''GI'', новая высота окна ''GI'', пример: &amp;lt;code&amp;gt;Function ИзменилосьОкно(ОбъектGI,ДопПараметр,ШиринаОкна,ВысотаОкна)&amp;lt;/code&amp;gt;.&lt;br /&gt;
** '''OnNewInput''': Событие вызывается в момент получения новой информации от внешних устройств ввода (клавиатура, мышь, контроллер), либо в момент получения или потери фокуса окном ''GI'' из функции [[GI.InitiateRedraw|InitiateRedraw]]. В нем можно разместить произвольный код, связанный с реакцией на эти события. Локальная функция для вызова этого события может содержать до семи аргументов (пример: &amp;lt;code&amp;gt;Function СобытиеВводаДанных(ОбъектGI,ДопПараметр,ТипСобытия,Арг1,Арг2,Арг3,Арг4)&amp;lt;/code&amp;gt;), описание аргументов предлагается ниже:&lt;br /&gt;
*** '''ОбъектGI''': передает текущий объект ''GI'', для которого вызывается событие.&lt;br /&gt;
*** '''ДопПараметр''': передает значение дополнительного параметра, заданного в функции ''LinkEvent''.&lt;br /&gt;
*** '''ТипСобытия''': передает цифровой тип события, на данный момент доступные следующие типы:&lt;br /&gt;
**** '''0-9''': события, связанные с мышью. Назначение аргументов: Арг1 -- клавиша, колесо мыши или ноль, Арг2 -- позиция мыши X, Арг3 -- позиция мыши Y, Арг4 -- нажатые клавиши мыши. Причем: &lt;br /&gt;
***** '''0''' -- движение мыши, аргументы ''Арг2'' и ''Арг3'' задают новое положение мыши относительно левой верхней точки окна ''GI'', ''Арг4'' задает битовую маску нажатых в данный момент клавиш мыши (бит 0 -- левая клавиша, бит 1 -- правая клавиша, бит 4 -- средняя клавиша и пр.).&lt;br /&gt;
***** '''1''' -- нажата клавиша мыши, аргумент ''Арг1'' задает номер нажатой клавиши (0 -- левая, 1 -- правая, 2 -- средняя), остальные аргументы соответствуют аргументам для события движения мыши (см. выше).&lt;br /&gt;
***** '''2''' -- отпущена клавиша мыши, аргумент ''Арг1'' задает номер отпущенной клавиши (0 -- левая, 1 -- правая, 2 -- средняя), остальные аргументы соответствуют аргументам для события движения мыши (см. выше).&lt;br /&gt;
***** '''3''' -- событие движения колеса мыши, аргумент ''Арг1'' задает число -- значение прокрутки колеса мыши, остальные аргументы соответствуют аргументам для события движения мыши (см. выше).&lt;br /&gt;
**** '''10-19''': события, связанные с клавиатурой. Назначение аргументов: Арг1 -- виртуальный код клавиши, Арг2 -- является ли клавиша дополнительной (extended), Арг3, Арг4 -- не заполнятся. Причем: &lt;br /&gt;
***** '''10''' -- произошло повторение предыдущего нажатия клавиши, так как она продолжает быть удерживаемой.&lt;br /&gt;
***** '''11''' -- нажата клавиша клавиатуры.&lt;br /&gt;
***** '''12''' -- отпущена клавиша клавиатуры.&lt;br /&gt;
**** '''20-29''': события, связанные с фокусом окна ''GI''. Дополнительные аргумента Арг1, Арг2, Арг3, Арг4 не заполнятся. Причем:&lt;br /&gt;
***** '''20''' -- Окно ''GI'' получило фокус.&lt;br /&gt;
***** '''21''' -- Окно ''GI'' потеряло фокус.&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Имя локальной функции (STRING)&amp;gt;''&amp;lt;/code&amp;gt; - Аргумент задает имя локальной или глобальной функции, которая будет вызываться при наступлении события.&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Глубина поиска (INT)&amp;gt;''&amp;lt;/code&amp;gt; - {{Optional}} Задает способ поиска локальной функции. Может принимать следующие значения:&lt;br /&gt;
** -1 -- выполнять поиск по последовательности функций из стека вызовов, а не искать, используя подчинение функций на момент компиляции. Этот способ предпочтительнее использовать в компилированных функциях, вызываемых из разных мест модуля или из разных модулей, чтобы получить доступ к реальной среде функций, а не к оной на момент компиляции.&lt;br /&gt;
** 0 (по умолчанию) -- выполнять поиск во всех модулях [[Общее описание языка#Вложенность функций и модулей, уровни вложенности|большего уровня вложенности]] (родительских) и во всех глобальных модулях.&lt;br /&gt;
** 1 -- выполнять поиск только внутри текущего модуля.&lt;br /&gt;
** 2 -- выполнять поиск только внутри родительского модуля.&lt;br /&gt;
** 3..x -- выполнять поиск только внутри родительского модуля указанного уровня (к примеру, для уровня 3, выполнять поиск только в родителе родителя текущего модуля).&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Аргумент функции&amp;gt;''&amp;lt;/code&amp;gt; - {{Optional}} Содержит произвольное значение, которое будет передано локальной функции вторым аргументом при ее вызове.&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  //Событие движения мыши и нажатия на клавиши&lt;br /&gt;
  Function OnNewInput(aGI,СпУскор,ТипСобытия,Арг1,Арг2,Арг3,Арг4)&lt;br /&gt;
    If ТипСобытия=0 Then&lt;br /&gt;
      //Движение мыши -- обновить переменные поворота&lt;br /&gt;
      //Арг2, Арг3 -- смещение мыши по X и Y относительно окна прорисовки&lt;br /&gt;
      If aGI.MouseCaptured Then&lt;br /&gt;
        СпУскор[4]:=Арг2-aGI.Width div 2;&lt;br /&gt;
        СпУскор[5]:=Арг3-aGI.Height div 2;&lt;br /&gt;
      EndIf;&lt;br /&gt;
    ElseIf ТипСобытия=1 Then&lt;br /&gt;
      //Нажатие мыши на экран, захватить мышь&lt;br /&gt;
      aGI.CaptureMouse();&lt;br /&gt;
    ElseIf ТипСобытия=11 Then //Клавиша нажата&lt;br /&gt;
      If (Арг1=0x57)Or(Арг1=0x26) Then//W или стрелка вперед -- движение по Z&lt;br /&gt;
        СпУскор[3]:=1;&lt;br /&gt;
      ElseIf (Арг1=0x53)Or(Арг1=0x28) Then//S или стрелка назад -- движение по Z&lt;br /&gt;
        СпУскор[3]:=-1;&lt;br /&gt;
      ElseIf (Арг1=0x51)Or(Арг1=0x25) Then//Q или стрелка влево -- движение по X&lt;br /&gt;
        СпУскор[1]:=-1;&lt;br /&gt;
      ElseIf (Арг1=0x45)Or(Арг1=0x27) Then//E или стрелка вправо -- движение по X&lt;br /&gt;
        СпУскор[1]:=1;&lt;br /&gt;
      ElseIf (Арг1=0x20)Or(Арг1=0x41) Then//A или пробел -- прыжок&lt;br /&gt;
        СпУскор[2]:=1;&lt;br /&gt;
      ElseIf Арг1=0x1B Then//ESC -- отпустить мышь&lt;br /&gt;
        aGI.ReleaseMouse();&lt;br /&gt;
      EndIf;&lt;br /&gt;
    ElseIf ТипСобытия=12 Then //Клавиша отпущена&lt;br /&gt;
      If ((Арг1=0x57)Or(Арг1=0x26))And(СпУскор[3]=1) Then//Отменить движение по Z, если оно было инициировано W&lt;br /&gt;
        СпУскор[3]:=0;&lt;br /&gt;
      ElseIf ((Арг1=0x53)Or(Арг1=0x28))And(СпУскор[3]=-1) Then//Отменить движение по Z, если оно было инициировано S&lt;br /&gt;
        СпУскор[3]:=0;&lt;br /&gt;
      ElseIf ((Арг1=0x51)Or(Арг1=0x25))And(СпУскор[1]=-1) Then//Отменить движение по X, если оно было инициировано Q&lt;br /&gt;
        СпУскор[1]:=0;&lt;br /&gt;
      ElseIf ((Арг1=0x45)Or(Арг1=0x27))And(СпУскор[1]=1) Then//Отменить движение по X, если оно было инициировано E&lt;br /&gt;
        СпУскор[1]:=0;&lt;br /&gt;
      ElseIf _Or(Арг1=0x20,Арг1=0x41) Then//Отменить прыжок&lt;br /&gt;
        СпУскор[2]:=0;&lt;br /&gt;
      EndIf;&lt;br /&gt;
    ElseIf ТипСобытия=21 Then//Потеря фокуса окном, отпустить мышь&lt;br /&gt;
      aGI.ReleaseMouse();&lt;br /&gt;
    EndIf;&lt;br /&gt;
  EndFunction&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
//Инициализация графического объекта для элемента аЭлемент: режим выделенного цикла, двойная буферизация&lt;br /&gt;
aGI:=GI.Init(аЭлемент,,1,1);&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
//Внутренние переменные, для использования в обработчиках событий&lt;br /&gt;
СпУскор:=List.Create(0,0,0,0,0);      //Переменные ускорения: по x, по y, по z,поворот мыши по x,поворот мыши по y&lt;br /&gt;
&lt;br /&gt;
//Автоматически захватывать мышь&lt;br /&gt;
aGI.MouseMode(1);&lt;br /&gt;
//Указание на функции обработчиков событий&lt;br /&gt;
aGI.LinkEvent(&amp;quot;ONDRAW&amp;quot;,&amp;quot;OnDraw&amp;quot;,1,СпКоорд);&lt;br /&gt;
aGI.LinkEvent(&amp;quot;ONNEWINPUT&amp;quot;,&amp;quot;OnNewInput&amp;quot;,1,СпУскор);&lt;br /&gt;
//Включить режим фильтрации MSAA&lt;br /&gt;
aGI.AntiAliasing(1);&lt;br /&gt;
//Включить режим ограничения кадров по развертке экрана&lt;br /&gt;
aGI.FrameLimiter(1);&lt;br /&gt;
//Включить 3D перспективу, FOV 90&lt;br /&gt;
aGI.WorldPerspective(0,90,0.1,1000);&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</description>
			<pubDate>Wed, 01 Apr 2026 09:59:01 GMT</pubDate>
			<dc:creator>Admin</dc:creator>
			<comments>http://sfsys.ru/index.php/Talk:GI.LinkEvent</comments>
		</item>
		<item>
			<title>ExecuteFunction</title>
			<link>http://sfsys.ru/index.php?title=ExecuteFunction&amp;diff=5190&amp;oldid=0</link>
			<guid isPermaLink="false">http://sfsys.ru/index.php?title=ExecuteFunction&amp;diff=5190&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Admin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;User:Admin (page does not exist)&quot;&gt;&lt;bdi&gt;Admin&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/ExecuteFunction&quot; title=&quot;ExecuteFunction&quot;&gt;ExecuteFunction&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{infobox function&lt;br /&gt;
|name=ExecuteFunction&lt;br /&gt;
|object=[[Функции общего назначения]]&lt;br /&gt;
|caption=Системные функции&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|db=0&lt;br /&gt;
|exception=Невозможно превратить в строку, число, исключение внутри функции, неверные параметры вызова&lt;br /&gt;
|visual=0}}&lt;br /&gt;
{{HeadLinks|&lt;br /&gt;
* [[Main_Page|Начальная страница]]&lt;br /&gt;
* [[Общее_описание_языка|Общее описание]]&lt;br /&gt;
* [[Объекты]]&lt;br /&gt;
* [[Функции общего назначения]]}}&lt;br /&gt;
Функция инициирует исполнение функции с указанным именем в текущем контексте исполнения с заданными аргументами, способ поиска задается вторым аргументом. Если искомая функция не существует, пропущен обязательный аргумент или заданное количество аргументов слишком велико, будет создано исключение. Функции этой группы могут использоваться в макросах форм для вызова заранее определенных функций-событий. От использования [[Exec]] функции ''DoesFunctionExist'' и ''ExecuteFunction'' отличаются избирательным поиском функций, к примеру, ''Exec'' может исполнить функцию с таким же именем в глобальном модуле, тогда как, возможно, это нежелательно.&lt;br /&gt;
&lt;br /&gt;
== Синтаксис ==&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
'''ExecuteFunction'''(''&amp;lt;Имя функции (STRING)&amp;gt;''{{Optional|,&amp;lt;Глубина поиска или компилированная функция (INT, COMPILEDFUNCTION)&amp;gt;{{Default|{{Eq}}0}}{{ByRef|,&amp;lt;Аргумент 1&amp;gt;,&amp;lt;Аргумент 2&amp;gt;...}}}}):''&amp;lt;Результат исполнения функции&amp;gt;''&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
==== Аргументы ====&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Имя функции (STRING)&amp;gt;''&amp;lt;/code&amp;gt; - Имя функции, которую необходимо исполнить&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Глубина поиска (INT)&amp;gt;''&amp;lt;/code&amp;gt; - {{Optional}} Может принимать следующие значения:&lt;br /&gt;
** -1 -- выполнять поиск по последовательности функций из стека вызовов, а не искать, используя подчинение функций на момент компиляции. Этот способ предпочтительнее использовать в компилированных функциях, вызываемых из разных мест модуля или из разных модулей, чтобы получить доступ к реальной среде функций, а не к оной на момент компиляции.&lt;br /&gt;
** 0 (по умолчанию) -- выполнять поиск во всех модулях [[Общее описание языка#Вложенность функций и модулей, уровни вложенности|большего уровня вложенности]] (родительских) и во всех глобальных модулях.&lt;br /&gt;
** 1 -- выполнять поиск только внутри текущего модуля.&lt;br /&gt;
** 2 -- выполнять поиск только внутри родительского модуля.&lt;br /&gt;
** 3..x -- выполнять поиск только внутри родительского модуля указанного уровня (к примеру, для уровня 3, выполнять поиск только в родителе родителя текущего модуля).&lt;br /&gt;
** Объект типа [[Compile|компилированная функция]] -- выполнять поиск функции внутри заданной компилированной функции (только среди функций верхнего уровня).&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Аргумент ?&amp;gt;''&amp;lt;/code&amp;gt; - {{Optional}} {{ByRef}} Аргументы, передаваемые исполняемой функции&lt;br /&gt;
&lt;br /&gt;
==== Возвращаемое значение ====&lt;br /&gt;
Возвращает результат исполнения функции.&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Визуальное событие OnClick в макросе, состоящем из группы кнопок&lt;br /&gt;
//Событие вызывает функции в локальном модуле, на форме которого размещен макрос&lt;br /&gt;
&lt;br /&gt;
//Событие в локальном модуле может отменить обработку документа&lt;br /&gt;
//флПарам -- параметр, передаваемый в модуль обработки документа, может быть изменен функцией OnBeforeDocumentSaveOrPublish&lt;br /&gt;
//ФлТип -- если OnBeforeDocumentSaveOrPublish возвратит 0, обработка будет отменена&lt;br /&gt;
//         1 -- обработка будет выполнена&lt;br /&gt;
//         2 -- обработку выполнила сама функция OnBeforeDocumentSaveOrPublish, выполнять ее здесь не требуется&lt;br /&gt;
флПарам:=0;&lt;br /&gt;
ФлТип:=0;&lt;br /&gt;
If DoesFunctionExist(&amp;quot;OnBeforeDocumentSaveOrPublish&amp;quot;,1) Then&lt;br /&gt;
  ФлТип:=Number(ExecuteFunction(&amp;quot;OnBeforeDocumentSaveOrPublish&amp;quot;,1,1,флПарам));&lt;br /&gt;
  If ФлТип=0 Then&lt;br /&gt;
    Exit;&lt;br /&gt;
  EndIf;&lt;br /&gt;
EndIf;&lt;br /&gt;
&lt;br /&gt;
//Далее следует блок обработки документа&lt;br /&gt;
If ФлТип&amp;lt;&amp;gt;2 Then&lt;br /&gt;
  Try&lt;br /&gt;
    If aEl.Status()&amp;lt;0 Then //Документ необходимо записать, если он новый&lt;br /&gt;
      aEl.Save();&lt;br /&gt;
    EndIf;&lt;br /&gt;
    if not aEl.Publish(флПарам) Then&lt;br /&gt;
      Exit;&lt;br /&gt;
    EndIf;&lt;br /&gt;
  Except&lt;br /&gt;
    Message(глПодготовитьОшибкуОбработки(),&amp;quot;!&amp;quot;);&lt;br /&gt;
    Exit;&lt;br /&gt;
  EndTry;&lt;br /&gt;
EndIf;&lt;br /&gt;
&lt;br /&gt;
//Событие в локальном модуле может произвести действия, необходимые после обработки документа&lt;br /&gt;
If DoesFunctionExist(&amp;quot;OnAfterDocumentSaveOrPublish&amp;quot;,1) Then&lt;br /&gt;
  ExecuteFunction(&amp;quot;OnAfterDocumentSaveOrPublish&amp;quot;,1,1,флПарам);&lt;br /&gt;
EndIf;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Пример показывает исполнение определенной функции из компилированного блока текста&lt;br /&gt;
//Заметьте: вызванная таким образом функция HelloWorld не имеет доступа к переменной Перем1, заданной в блоке для компиляции&lt;br /&gt;
&lt;br /&gt;
//Блок текста для компиляции&lt;br /&gt;
Стр:=&amp;quot;Var Перем1 Export;&lt;br /&gt;
|&lt;br /&gt;
|Function HelloWorld(Arg1)&lt;br /&gt;
|  Message(&amp;quot;&amp;quot;Аргумент: &amp;quot;&amp;quot;+Arg1);&lt;br /&gt;
|  Result:=132;&lt;br /&gt;
|EndFunction;&lt;br /&gt;
|&lt;br /&gt;
|Message(&amp;quot;&amp;quot;Исполнение вне функции HelloWorld&amp;quot;&amp;quot;);&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//Компилируем блок текста, получаем объект аФунк&lt;br /&gt;
аФунк:=Compile(Стр);&lt;br /&gt;
&lt;br /&gt;
//На экран будет выведено последовательно:&lt;br /&gt;
//&amp;quot;Аргумент: Строковой аргумент&amp;quot;&lt;br /&gt;
//&amp;quot;Результат: 132&amp;quot;&lt;br /&gt;
Message(&amp;quot;Результат: &amp;quot;+ExecuteFunction(&amp;quot;HelloWorld&amp;quot;,аФунк,&amp;quot;Строковой аргумент&amp;quot;));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</description>
			<pubDate>Wed, 01 Apr 2026 09:58:39 GMT</pubDate>
			<dc:creator>Admin</dc:creator>
			<comments>http://sfsys.ru/index.php/Talk:ExecuteFunction</comments>
		</item>
		<item>
			<title>DoesFunctionExist</title>
			<link>http://sfsys.ru/index.php?title=DoesFunctionExist&amp;diff=5188&amp;oldid=0</link>
			<guid isPermaLink="false">http://sfsys.ru/index.php?title=DoesFunctionExist&amp;diff=5188&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Admin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;User:Admin (page does not exist)&quot;&gt;&lt;bdi&gt;Admin&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/DoesFunctionExist&quot; title=&quot;DoesFunctionExist&quot;&gt;DoesFunctionExist&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{infobox function&lt;br /&gt;
|name=DoesFunctionExist&lt;br /&gt;
|object=[[Функции общего назначения]]&lt;br /&gt;
|caption=Системные функции&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|db=0&lt;br /&gt;
|exception=Невозможно превратить в строку, число&lt;br /&gt;
|visual=0}}&lt;br /&gt;
{{HeadLinks|&lt;br /&gt;
* [[Main_Page|Начальная страница]]&lt;br /&gt;
* [[Общее_описание_языка|Общее описание]]&lt;br /&gt;
* [[Объекты]]&lt;br /&gt;
* [[Функции общего назначения]]}}&lt;br /&gt;
Функция проверяет, существует ли функция с указанным именем в текущем контексте исполнения, способ поиска задается вторым аргументом. Функции этой группы могут использоваться в макросах форм для вызова заранее определенных функций-событий. От использования [[Exec]] функции ''DoesFunctionExist'' и ''ExecuteFunction'' отличаются избирательным поиском функций, к примеру, ''Exec'' может исполнить функцию с таким же именем в глобальном модуле, тогда как, возможно, это нежелательно.&lt;br /&gt;
&lt;br /&gt;
== Синтаксис ==&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
'''DoesFunctionExist'''(''&amp;lt;Имя функции (STRING)&amp;gt;''{{Optional|,&amp;lt;Глубина поиска или компилированная функция (INT, COMPILEDFUNCTION)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Существует ли функция (INT)&amp;gt;''&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
==== Аргументы ====&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Имя функции (STRING)&amp;gt;''&amp;lt;/code&amp;gt; - Имя функции, существование которой нужно проверить.&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Глубина поиска (INT)&amp;gt;''&amp;lt;/code&amp;gt; - Может принимать следующие значения:&lt;br /&gt;
** -1 -- выполнять поиск по последовательности функций из стека вызовов, а не искать, используя подчинение функций на момент компиляции. Этот способ предпочтительнее использовать в компилированных функциях, вызываемых из разных мест модуля или из разных модулей, чтобы получить доступ к реальной среде функций, а не к оной на момент компиляции.&lt;br /&gt;
** 0 (по умолчанию) -- выполнять поиск во всех модулях [[Общее описание языка#Вложенность функций и модулей, уровни вложенности|большего уровня вложенности]] (родительских) и во всех глобальных модулях.&lt;br /&gt;
** 1 -- выполнять поиск только внутри текущего модуля.&lt;br /&gt;
** 2 -- выполнять поиск только внутри родительского модуля.&lt;br /&gt;
** 3..x -- выполнять поиск только внутри родительского модуля указанного уровня (к примеру, для уровня 3, выполнять поиск только в родителе родителя текущего модуля).&lt;br /&gt;
** Объект типа [[Compile|компилированная функция]] -- выполнять поиск функции внутри заданной компилированной функции (только среди функций верхнего уровня).&lt;br /&gt;
&lt;br /&gt;
==== Возвращаемое значение ====&lt;br /&gt;
Возвращает 1, если функция найдена, 0, если она не существует.&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Визуальное событие OnClick в макросе, состоящем из группы кнопок&lt;br /&gt;
//Событие вызывает функции в локальном модуле, на форме которого размещен макрос&lt;br /&gt;
&lt;br /&gt;
//Событие в локальном модуле может отменить обработку документа&lt;br /&gt;
//флПарам -- параметр, передаваемый в модуль обработки документа, может быть изменен функцией OnBeforeDocumentSaveOrPublish&lt;br /&gt;
//ФлТип -- если OnBeforeDocumentSaveOrPublish возвратит 0, обработка будет отменена&lt;br /&gt;
//         1 -- обработка будет выполнена&lt;br /&gt;
//         2 -- обработку выполнила сама функция OnBeforeDocumentSaveOrPublish, выполнять ее здесь не требуется&lt;br /&gt;
флПарам:=0;&lt;br /&gt;
ФлТип:=0;&lt;br /&gt;
If DoesFunctionExist(&amp;quot;OnBeforeDocumentSaveOrPublish&amp;quot;,1) Then&lt;br /&gt;
  ФлТип:=Number(ExecuteFunction(&amp;quot;OnBeforeDocumentSaveOrPublish&amp;quot;,1,1,флПарам));&lt;br /&gt;
  If ФлТип=0 Then&lt;br /&gt;
    Exit;&lt;br /&gt;
  EndIf;&lt;br /&gt;
EndIf;&lt;br /&gt;
&lt;br /&gt;
//Далее следует блок обработки документа&lt;br /&gt;
If ФлТип&amp;lt;&amp;gt;2 Then&lt;br /&gt;
  Try&lt;br /&gt;
    If aEl.Status()&amp;lt;0 Then //Документ необходимо записать, если он новый&lt;br /&gt;
      aEl.Save();&lt;br /&gt;
    EndIf;&lt;br /&gt;
    if not aEl.Publish(флПарам) Then&lt;br /&gt;
      Exit;&lt;br /&gt;
    EndIf;&lt;br /&gt;
  Except&lt;br /&gt;
    Message(глПодготовитьОшибкуОбработки(),&amp;quot;!&amp;quot;);&lt;br /&gt;
    Exit;&lt;br /&gt;
  EndTry;&lt;br /&gt;
EndIf;&lt;br /&gt;
&lt;br /&gt;
//Событие в локальном модуле может произвести действия, необходимые после обработки документа&lt;br /&gt;
If DoesFunctionExist(&amp;quot;OnAfterDocumentSaveOrPublish&amp;quot;,1) Then&lt;br /&gt;
  ExecuteFunction(&amp;quot;OnAfterDocumentSaveOrPublish&amp;quot;,1,1,флПарам);&lt;br /&gt;
EndIf;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</description>
			<pubDate>Wed, 01 Apr 2026 09:58:38 GMT</pubDate>
			<dc:creator>Admin</dc:creator>
			<comments>http://sfsys.ru/index.php/Talk:DoesFunctionExist</comments>
		</item>
		<item>
			<title>BroadcastChannelReceiveMessage</title>
			<link>http://sfsys.ru/index.php?title=BroadcastChannelReceiveMessage&amp;diff=5180&amp;oldid=0</link>
			<guid isPermaLink="false">http://sfsys.ru/index.php?title=BroadcastChannelReceiveMessage&amp;diff=5180&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Admin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;User:Admin (page does not exist)&quot;&gt;&lt;bdi&gt;Admin&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/BroadcastChannelReceiveMessage&quot; title=&quot;BroadcastChannelReceiveMessage&quot;&gt;BroadcastChannelReceiveMessage&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{infobox function&lt;br /&gt;
|name=BroadcastChannelReceiveMessage&lt;br /&gt;
|object=[[Функции общего назначения]]&lt;br /&gt;
|caption=Доставка сообщений&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|db=0&lt;br /&gt;
|exception=Невозможно превратить в число, строку, ошибка сервера&lt;br /&gt;
|visual=1}}&lt;br /&gt;
{{HeadLinks|&lt;br /&gt;
* [[Main_Page|Начальная страница]]&lt;br /&gt;
* [[Общее_описание_языка|Общее описание]]&lt;br /&gt;
* [[Объекты]]&lt;br /&gt;
* [[Функции общего назначения]]}}&lt;br /&gt;
Функция выполняет получение одного сообщения из очереди сообщений для канала сообщений, заданного по его имени или идентификатору. Полученные сообщения удаляются из очереди. Функция используется только для абонентов подписки, для которых при подписке не была указана форма (см. [[BroadcastChannelSubscribe]]). Если сообщение в очереди отсутствует, функция может ожидать его появления некоторое время (заданное вторым аргументом). Функция возвращает '''1''', если сообщение получено и '''0''' в ином случае. Полученное сообщение возвращается в виде трех переменных -- числовой идентификатор сообщение, текст сообщения и текстовый код, определяющий отправителя (состоящий из номера канала клиента и идентификатора потока клиента).&lt;br /&gt;
&lt;br /&gt;
== Синтаксис ==&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
'''BroadcastChannelReceiveMessage'''(''&amp;lt;Имя или идентификатор канала (INT,STRING)&amp;gt;''{{Optional|,&amp;lt;Ожидать нового сообщения, мс. (INT)&amp;gt;{{Default|{{Eq}}0}}}}{{OptionalByRef|,&amp;lt;Код сообщения (INT)&amp;gt;,&amp;lt;Содержимое сообщения (STRING)&amp;gt;,&amp;lt;Отправитель (STRING)&amp;gt;}}):''&amp;lt;Получено новое сообщение (INT)&amp;gt;''&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
==== Аргументы ====&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Имя или идентификатор канала (INT,STRING)&amp;gt;''&amp;lt;/code&amp;gt; - Имя канала для подписки (строка) или его идентификатор (число).&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Ожидать нового сообщения, мс. (INT)&amp;gt;''&amp;lt;/code&amp;gt; - {{Optional}} Максимальное числов времени в мс., которое функция может провести в ожидении появления сообщение. При нуле (по умолчанию), функция возвращается без ожидания.&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Код сообщения (INT)&amp;gt;''&amp;lt;/code&amp;gt; - {{Optional}} {{ByRef}} Переменная, которая получит код сообщения, если сообщение было получено. Если сообщение не было получено, переменная изменена не будет.&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Содержимое сообщения (STRING)&amp;gt;''&amp;lt;/code&amp;gt; - {{Optional}} {{ByRef}} Переменная, которая получит текст сообщения, если сообщение было получено. Если сообщение не было получено, переменная изменена не будет.&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Отправитель (STRING)&amp;gt;''&amp;lt;/code&amp;gt; - {{Optional}} {{ByRef}} Переменная, которая получит идентификатор отправителя сообщения, если сообщение было получено. Если сообщение не было получено, переменная изменена не будет. Обычно отправитель состоит из номера канала клиента и идентификатора потока клиента.&lt;br /&gt;
&lt;br /&gt;
==== Возвращаемое значение ====&lt;br /&gt;
Возвращает количество отосланных сообщений.&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Пример простого отправителя и подписчика в одном фрагменте текста.&lt;br /&gt;
&lt;br /&gt;
  Function Подписчик()&lt;br /&gt;
    аКодКанала:=BroadcastChannelSubscribe(&amp;quot;Канал&amp;quot;);&lt;br /&gt;
    аНум:=0;&lt;br /&gt;
    While 1 Do&lt;br /&gt;
      If not BroadcastChannelReceiveMessage(аКодКанала,100,аНум) Then&lt;br /&gt;
        Continue;&lt;br /&gt;
      EndIf;&lt;br /&gt;
      Message(&amp;quot;Получено сообщение с ID &amp;quot;+аНум);&lt;br /&gt;
      If аНум=100 Then&lt;br /&gt;
        Break;&lt;br /&gt;
      EndIf;&lt;br /&gt;
    EndDo;&lt;br /&gt;
    BroadcastChannelUnsubscribe(аКодКанала);&lt;br /&gt;
    Message(&amp;quot;Поток закончил работу...&amp;quot;);&lt;br /&gt;
  EndFunction&lt;br /&gt;
&lt;br /&gt;
Mutex.ExecuteFunctionInSeparateThread(&amp;quot;Подписчик&amp;quot;,0);&lt;br /&gt;
&lt;br /&gt;
аКодКанала:=BroadcastChannelSubscribe(&amp;quot;Канал&amp;quot;);&lt;br /&gt;
ИдСообщения:=1;&lt;br /&gt;
While ИдСообщения&amp;lt;=100 Do&lt;br /&gt;
  If BroadcastChannelSendMessage(аКодКанала,ИдСообщения,&amp;quot;&amp;quot;)&amp;gt;0 Then&lt;br /&gt;
    ИдСообщения:=ИдСообщения+1;&lt;br /&gt;
  EndIf;&lt;br /&gt;
EndDo;&lt;br /&gt;
//Ожидания завершения потока после принятия сообщения 100&lt;br /&gt;
//Без этой паузы, поток можен быть завершен форсировано, так как текущий (родительский) поток будет завершен&lt;br /&gt;
Sleep(1000);&lt;br /&gt;
&lt;br /&gt;
//Будет выведено:&lt;br /&gt;
//Получено сообщение с ID 1&lt;br /&gt;
//Получено сообщение с ID 2&lt;br /&gt;
//..&lt;br /&gt;
//Получено сообщение с ID 100&lt;br /&gt;
//Поток закончил работу...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</description>
			<pubDate>Wed, 01 Apr 2026 09:57:50 GMT</pubDate>
			<dc:creator>Admin</dc:creator>
			<comments>http://sfsys.ru/index.php/Talk:BroadcastChannelReceiveMessage</comments>
		</item>
		<item>
			<title>BroadcastChannelSendMessage</title>
			<link>http://sfsys.ru/index.php?title=BroadcastChannelSendMessage&amp;diff=5182&amp;oldid=0</link>
			<guid isPermaLink="false">http://sfsys.ru/index.php?title=BroadcastChannelSendMessage&amp;diff=5182&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Admin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;User:Admin (page does not exist)&quot;&gt;&lt;bdi&gt;Admin&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/BroadcastChannelSendMessage&quot; title=&quot;BroadcastChannelSendMessage&quot;&gt;BroadcastChannelSendMessage&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{infobox function&lt;br /&gt;
|name=BroadcastChannelSendMessage&lt;br /&gt;
|object=[[Функции общего назначения]]&lt;br /&gt;
|caption=Доставка сообщений&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|db=0&lt;br /&gt;
|exception=Невозможно превратить в число, строку, ошибка сервера&lt;br /&gt;
|visual=0}}&lt;br /&gt;
{{HeadLinks|&lt;br /&gt;
* [[Main_Page|Начальная страница]]&lt;br /&gt;
* [[Общее_описание_языка|Общее описание]]&lt;br /&gt;
* [[Объекты]]&lt;br /&gt;
* [[Функции общего назначения]]}}&lt;br /&gt;
Функция выполняет отсылку сообщения (состоящего из произвольного числового идентификатора и произвольного текста) всем абонентам, подписанным на канал сообщений, заданный по его имени или идентификатору. Для подписчиков, использующих форму (см. [[BroadcastChannelSubscribe]]), сообщения доставляются сразу же (однако, может пройти долгое время, пока форма закончит текущую работу, и даже когда она ожидает действий пользователя, может пройти до нескольких секунд). Доставка будет осуществляться по такому же принципу, как доставляются сообщения [[BroadcastGlobalMessage]]. Если форма больше не существует, сообщение для таких подписчиков доставлены не будут. Подписчикам без указания формы, подтребуется вызвать функцию [[BroadcastChannelReceiveMessage]], чтобы забрать первое из сообщений из очереди. Разрешается использовать функцию из потоков, которые не подписаны на канал, для которого происходит отправка. Функцию также можно использовать для каналов, на которые не подписан ни один абонент (в этом случае, сообщение будет проигнорировано). Функция возвращает количество отосланных сообщений (которое совпадает с количеством абонентов канала на момент вызова функции).&lt;br /&gt;
&lt;br /&gt;
== Синтаксис ==&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
'''BroadcastChannelSendMessage'''(''&amp;lt;Имя или идентификатор канала (INT,STRING)&amp;gt;'',''&amp;lt;Код сообщения (INT)&amp;gt;'',''&amp;lt;Содержимое сообщения (STRING)&amp;gt;''):''&amp;lt;Количество отосланных сообщений (INT)&amp;gt;''&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
==== Аргументы ====&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Имя или идентификатор канала (INT,STRING)&amp;gt;''&amp;lt;/code&amp;gt; - Имя канала для подписки (строка) или его идентификатор (число).&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Код сообщения (INT)&amp;gt;''&amp;lt;/code&amp;gt; - Произвольный код сообщения, коды 1-10000 рекомендуется использовать для нужд проекта, остальные для нужд внешних обработок.&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Содержимое сообщения (STRING)&amp;gt;''&amp;lt;/code&amp;gt; - Произвольный текст сообщения для отправки (строка может содержать международные и любые непечатные символы).&lt;br /&gt;
&lt;br /&gt;
==== Возвращаемое значение ====&lt;br /&gt;
Возвращает количество отосланных сообщений.&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Пример простого отправителя и подписчика в одном фрагменте текста.&lt;br /&gt;
&lt;br /&gt;
  Function Подписчик()&lt;br /&gt;
    аКодКанала:=BroadcastChannelSubscribe(&amp;quot;Канал&amp;quot;);&lt;br /&gt;
    аНум:=0;&lt;br /&gt;
    While 1 Do&lt;br /&gt;
      If not BroadcastChannelReceiveMessage(аКодКанала,100,аНум) Then&lt;br /&gt;
        Continue;&lt;br /&gt;
      EndIf;&lt;br /&gt;
      Message(&amp;quot;Получено сообщение с ID &amp;quot;+аНум);&lt;br /&gt;
      If аНум=100 Then&lt;br /&gt;
        Break;&lt;br /&gt;
      EndIf;&lt;br /&gt;
    EndDo;&lt;br /&gt;
    BroadcastChannelUnsubscribe(аКодКанала);&lt;br /&gt;
    Message(&amp;quot;Поток закончил работу...&amp;quot;);&lt;br /&gt;
  EndFunction&lt;br /&gt;
&lt;br /&gt;
Mutex.ExecuteFunctionInSeparateThread(&amp;quot;Подписчик&amp;quot;,0);&lt;br /&gt;
&lt;br /&gt;
аКодКанала:=BroadcastChannelSubscribe(&amp;quot;Канал&amp;quot;);&lt;br /&gt;
ИдСообщения:=1;&lt;br /&gt;
While ИдСообщения&amp;lt;=100 Do&lt;br /&gt;
  If BroadcastChannelSendMessage(аКодКанала,ИдСообщения,&amp;quot;&amp;quot;)&amp;gt;0 Then&lt;br /&gt;
    ИдСообщения:=ИдСообщения+1;&lt;br /&gt;
  EndIf;&lt;br /&gt;
EndDo;&lt;br /&gt;
//Ожидания завершения потока после принятия сообщения 100&lt;br /&gt;
//Без этой паузы, поток можен быть завершен форсировано, так как текущий (родительский) поток будет завершен&lt;br /&gt;
Sleep(1000);&lt;br /&gt;
&lt;br /&gt;
//Будет выведено:&lt;br /&gt;
//Получено сообщение с ID 1&lt;br /&gt;
//Получено сообщение с ID 2&lt;br /&gt;
//..&lt;br /&gt;
//Получено сообщение с ID 100&lt;br /&gt;
//Поток закончил работу...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</description>
			<pubDate>Wed, 01 Apr 2026 09:57:50 GMT</pubDate>
			<dc:creator>Admin</dc:creator>
			<comments>http://sfsys.ru/index.php/Talk:BroadcastChannelSendMessage</comments>
		</item>
		<item>
			<title>BroadcastChannelSubscribe</title>
			<link>http://sfsys.ru/index.php?title=BroadcastChannelSubscribe&amp;diff=5184&amp;oldid=0</link>
			<guid isPermaLink="false">http://sfsys.ru/index.php?title=BroadcastChannelSubscribe&amp;diff=5184&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Admin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;User:Admin (page does not exist)&quot;&gt;&lt;bdi&gt;Admin&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/BroadcastChannelSubscribe&quot; title=&quot;BroadcastChannelSubscribe&quot;&gt;BroadcastChannelSubscribe&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{infobox function&lt;br /&gt;
|name=BroadcastChannelSubscribe&lt;br /&gt;
|object=[[Функции общего назначения]]&lt;br /&gt;
|caption=Доставка сообщений&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|db=0&lt;br /&gt;
|exception=Невозможно превратить в число, строку, ошибка сервера&lt;br /&gt;
|visual=0}}&lt;br /&gt;
{{HeadLinks|&lt;br /&gt;
* [[Main_Page|Начальная страница]]&lt;br /&gt;
* [[Общее_описание_языка|Общее описание]]&lt;br /&gt;
* [[Объекты]]&lt;br /&gt;
* [[Функции общего назначения]]}}&lt;br /&gt;
Функция подписывается на сообщения глобального канала сообщений, заданного по его имени (первый аргумент). Если указана форма-получатель сообщений, они будут приходить в виде события OnMessage ([[Студия/OnMessage|OnMessage]]) в момент, когда форма ожидает действий пользователя (idle). Если форма не указана, программе необходимо получать сообщения самостоятельно с помощью функции [[BroadcastChannelReceiveMessage]]. Подписка действует для текущего потока, если сообщения не забираются, они будут накапливаться на сервере. Для отказа от подписки, используйте [[BroadcastChannelUnsubscribe]]. Подписка удаляется автоматически, когда поток с подпиской заканчивает работу. Если указана форма и она будет закрыта, но поток продолжит работать, подписка не будет отменена (однако сообщения приходить не будут, так как отсутствует форма). Функция возвращает цифровой идентификатор канала, по которому к нему можно выполнять обращения (чуть быстрее, чем по имени). Идентификатор корректен до момента вызова [[BroadcastChannelUnsubscribe]] или завершения потока подписки.&lt;br /&gt;
&lt;br /&gt;
== Синтаксис ==&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
'''BroadcastChannelSubscribe'''(''&amp;lt;Имя канала (STRING)&amp;gt;''{{Optional|,&amp;lt;Форма-получатель или ее серийный номер (FORM,INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Числовой идентификатор канала (INT)&amp;gt;''&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
==== Аргументы ====&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Имя канала (STRING)&amp;gt;''&amp;lt;/code&amp;gt; - Произвольное имя канала для подписки.&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Форма-получатель или ее серийный номер (FORM,INT)&amp;gt;''&amp;lt;/code&amp;gt; - {{Optional}} Указание на форму, если необходимо поулчать сообщения в виде события ''[[Студия/OnMessage|OnMessage]]''. Форма может быть задана серийным номером или самим объектом формы.&lt;br /&gt;
&lt;br /&gt;
==== Возвращаемое значение ====&lt;br /&gt;
Возвращает числовой идентификатор канала на сервере.&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Пример простого отправителя и подписчика в одном фрагменте текста.&lt;br /&gt;
&lt;br /&gt;
  Function Подписчик()&lt;br /&gt;
    аКодКанала:=BroadcastChannelSubscribe(&amp;quot;Канал&amp;quot;);&lt;br /&gt;
    аНум:=0;&lt;br /&gt;
    While 1 Do&lt;br /&gt;
      If not BroadcastChannelReceiveMessage(аКодКанала,100,аНум) Then&lt;br /&gt;
        Continue;&lt;br /&gt;
      EndIf;&lt;br /&gt;
      Message(&amp;quot;Получено сообщение с ID &amp;quot;+аНум);&lt;br /&gt;
      If аНум=100 Then&lt;br /&gt;
        Break;&lt;br /&gt;
      EndIf;&lt;br /&gt;
    EndDo;&lt;br /&gt;
    BroadcastChannelUnsubscribe(аКодКанала);&lt;br /&gt;
    Message(&amp;quot;Поток закончил работу...&amp;quot;);&lt;br /&gt;
  EndFunction&lt;br /&gt;
&lt;br /&gt;
Mutex.ExecuteFunctionInSeparateThread(&amp;quot;Подписчик&amp;quot;,0);&lt;br /&gt;
&lt;br /&gt;
аКодКанала:=BroadcastChannelSubscribe(&amp;quot;Канал&amp;quot;);&lt;br /&gt;
ИдСообщения:=1;&lt;br /&gt;
While ИдСообщения&amp;lt;=100 Do&lt;br /&gt;
  If BroadcastChannelSendMessage(аКодКанала,ИдСообщения,&amp;quot;&amp;quot;)&amp;gt;0 Then&lt;br /&gt;
    ИдСообщения:=ИдСообщения+1;&lt;br /&gt;
  EndIf;&lt;br /&gt;
EndDo;&lt;br /&gt;
//Ожидания завершения потока после принятия сообщения 100&lt;br /&gt;
//Без этой паузы, поток можен быть завершен форсировано, так как текущий (родительский) поток будет завершен&lt;br /&gt;
Sleep(1000);&lt;br /&gt;
&lt;br /&gt;
//Будет выведено:&lt;br /&gt;
//Получено сообщение с ID 1&lt;br /&gt;
//Получено сообщение с ID 2&lt;br /&gt;
//..&lt;br /&gt;
//Получено сообщение с ID 100&lt;br /&gt;
//Поток закончил работу...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</description>
			<pubDate>Wed, 01 Apr 2026 09:57:50 GMT</pubDate>
			<dc:creator>Admin</dc:creator>
			<comments>http://sfsys.ru/index.php/Talk:BroadcastChannelSubscribe</comments>
		</item>
		<item>
			<title>BroadcastChannelUnsubscribe</title>
			<link>http://sfsys.ru/index.php?title=BroadcastChannelUnsubscribe&amp;diff=5186&amp;oldid=0</link>
			<guid isPermaLink="false">http://sfsys.ru/index.php?title=BroadcastChannelUnsubscribe&amp;diff=5186&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Admin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;User:Admin (page does not exist)&quot;&gt;&lt;bdi&gt;Admin&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/BroadcastChannelUnsubscribe&quot; title=&quot;BroadcastChannelUnsubscribe&quot;&gt;BroadcastChannelUnsubscribe&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{infobox function&lt;br /&gt;
|name=BroadcastChannelUnsubscribe&lt;br /&gt;
|object=[[Функции общего назначения]]&lt;br /&gt;
|caption=Доставка сообщений&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|db=0&lt;br /&gt;
|exception=Невозможно превратить в число, строку, ошибка сервера&lt;br /&gt;
|visual=0}}&lt;br /&gt;
{{HeadLinks|&lt;br /&gt;
* [[Main_Page|Начальная страница]]&lt;br /&gt;
* [[Общее_описание_языка|Общее описание]]&lt;br /&gt;
* [[Объекты]]&lt;br /&gt;
* [[Функции общего назначения]]}}&lt;br /&gt;
Функция отменяет подписку на сообщения глобального канала сообщений, заданного по его имени или идентификатору (первый аргумент). См. описание [[BroadcastChannelSubscribe]]. Функция вызывается в потоке, для которого ранее была вызвана [[BroadcastChannelSubscribe]]. Отмена подписки происходит автоматически при завершении потока с подпиской. Если подписки не было, функция не выполняется никаких действий.&lt;br /&gt;
&lt;br /&gt;
== Синтаксис ==&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
'''BroadcastChannelUnsubscribe'''(''&amp;lt;Имя или идентификатор канала (INT,STRING)&amp;gt;'')&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
==== Аргументы ====&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Имя или идентификатор канала (INT,STRING)&amp;gt;''&amp;lt;/code&amp;gt; - Имя канала для подписки (строка) или его идентификатор (число).&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Пример простого отправителя и подписчика в одном фрагменте текста.&lt;br /&gt;
&lt;br /&gt;
  Function Подписчик()&lt;br /&gt;
    аКодКанала:=BroadcastChannelSubscribe(&amp;quot;Канал&amp;quot;);&lt;br /&gt;
    аНум:=0;&lt;br /&gt;
    While 1 Do&lt;br /&gt;
      If not BroadcastChannelReceiveMessage(аКодКанала,100,аНум) Then&lt;br /&gt;
        Continue;&lt;br /&gt;
      EndIf;&lt;br /&gt;
      Message(&amp;quot;Получено сообщение с ID &amp;quot;+аНум);&lt;br /&gt;
      If аНум=100 Then&lt;br /&gt;
        Break;&lt;br /&gt;
      EndIf;&lt;br /&gt;
    EndDo;&lt;br /&gt;
    BroadcastChannelUnsubscribe(аКодКанала);&lt;br /&gt;
    Message(&amp;quot;Поток закончил работу...&amp;quot;);&lt;br /&gt;
  EndFunction&lt;br /&gt;
&lt;br /&gt;
Mutex.ExecuteFunctionInSeparateThread(&amp;quot;Подписчик&amp;quot;,0);&lt;br /&gt;
&lt;br /&gt;
аКодКанала:=BroadcastChannelSubscribe(&amp;quot;Канал&amp;quot;);&lt;br /&gt;
ИдСообщения:=1;&lt;br /&gt;
While ИдСообщения&amp;lt;=100 Do&lt;br /&gt;
  If BroadcastChannelSendMessage(аКодКанала,ИдСообщения,&amp;quot;&amp;quot;)&amp;gt;0 Then&lt;br /&gt;
    ИдСообщения:=ИдСообщения+1;&lt;br /&gt;
  EndIf;&lt;br /&gt;
EndDo;&lt;br /&gt;
//Ожидания завершения потока после принятия сообщения 100&lt;br /&gt;
//Без этой паузы, поток можен быть завершен форсировано, так как текущий (родительский) поток будет завершен&lt;br /&gt;
Sleep(1000);&lt;br /&gt;
&lt;br /&gt;
//Будет выведено:&lt;br /&gt;
//Получено сообщение с ID 1&lt;br /&gt;
//Получено сообщение с ID 2&lt;br /&gt;
//..&lt;br /&gt;
//Получено сообщение с ID 100&lt;br /&gt;
//Поток закончил работу...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</description>
			<pubDate>Wed, 01 Apr 2026 09:57:50 GMT</pubDate>
			<dc:creator>Admin</dc:creator>
			<comments>http://sfsys.ru/index.php/Talk:BroadcastChannelUnsubscribe</comments>
		</item>
		<item>
			<title>ArgumentsNumber</title>
			<link>http://sfsys.ru/index.php?title=ArgumentsNumber&amp;diff=5178&amp;oldid=0</link>
			<guid isPermaLink="false">http://sfsys.ru/index.php?title=ArgumentsNumber&amp;diff=5178&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Admin&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new mw-userlink&quot; title=&quot;User:Admin (page does not exist)&quot;&gt;&lt;bdi&gt;Admin&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/index.php/ArgumentsNumber&quot; title=&quot;ArgumentsNumber&quot;&gt;ArgumentsNumber&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{infobox function&lt;br /&gt;
|name=ArgumentsNumber&lt;br /&gt;
|object=[[Функции общего назначения]]&lt;br /&gt;
|caption=Системные функции&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|db=0&lt;br /&gt;
|exception=Невозможно превратить в строку, число&lt;br /&gt;
|visual=0}}&lt;br /&gt;
{{HeadLinks|&lt;br /&gt;
* [[Main_Page|Начальная страница]]&lt;br /&gt;
* [[Общее_описание_языка|Общее описание]]&lt;br /&gt;
* [[Объекты]]&lt;br /&gt;
* [[Функции общего назначения]]}}&lt;br /&gt;
Функция возвращает количество аргументов функции с указанным именем в текущем контексте исполнения, способ поиска задается вторым аргументом. Если искомая функция не существует, будет возвращено значение -1. Функции этой группы могут использоваться в макросах форм для вызова заранее определенных функций-событий. От использования [[Exec]] функции ''DoesFunctionExist'' и ''ExecuteFunction'' отличаются избирательным поиском функций, к примеру, ''Exec'' может исполнить функцию с таким же именем в глобальном модуле, тогда как, возможно, это нежелательно.&lt;br /&gt;
&lt;br /&gt;
== Синтаксис ==&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
'''ArgumentsNumber'''(''&amp;lt;Имя функции (STRING)&amp;gt;''{{Optional|,&amp;lt;Глубина поиска или компилированная функция (INT, COMPILEDFUNCTION)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Количество аргументов (INT)&amp;gt;''&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
==== Аргументы ====&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Имя функции (STRING)&amp;gt;''&amp;lt;/code&amp;gt; - Имя функции, количество аргументов которой необходимо найти&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Глубина поиска (INT)&amp;gt;''&amp;lt;/code&amp;gt; - {{Optional}} Может принимать следующие значения:&lt;br /&gt;
** -1 -- выполнять поиск по последовательности функций из стека вызовов, а не искать, используя подчинение функций на момент компиляции. Этот способ предпочтительнее использовать в компилированных функциях, вызываемых из разных мест модуля или из разных модулей, чтобы получить доступ к реальной среде функций, а не к оной на момент компиляции.&lt;br /&gt;
** 0 (по умолчанию) -- выполнять поиск во всех модулях [[Общее описание языка#Вложенность функций и модулей, уровни вложенности|большего уровня вложенности]] (родительских) и во всех глобальных модулях.&lt;br /&gt;
** 1 -- выполнять поиск только внутри текущего модуля.&lt;br /&gt;
** 2 -- выполнять поиск только внутри родительского модуля.&lt;br /&gt;
** 3..x -- выполнять поиск только внутри родительского модуля указанного уровня (к примеру, для уровня 3, выполнять поиск только в родителе родителя текущего модуля).&lt;br /&gt;
** Объект типа [[Compile|компилированная функция]] -- выполнять поиск функции внутри заданной компилированной функции (только среди функций верхнего уровня).&lt;br /&gt;
&lt;br /&gt;
==== Возвращаемое значение ====&lt;br /&gt;
Возвращает количество аргументов найденной функции или -1, если функция не найдена.&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Визуальное событие OnClick в макросе, состоящем из группы кнопок&lt;br /&gt;
//Событие вызывает функции в локальном модуле, на форме которого размещен макрос&lt;br /&gt;
&lt;br /&gt;
//Событие в локальном модуле может отменить обработку документа&lt;br /&gt;
//флПарам -- параметр, передаваемый в модуль обработки документа, может быть изменен функцией OnBeforeDocumentSaveOrPublish&lt;br /&gt;
//ФлТип -- если OnBeforeDocumentSaveOrPublish возвратит 0, обработка будет отменена&lt;br /&gt;
//         1 -- обработка будет выполнена&lt;br /&gt;
//         2 -- обработку выполнила сама функция OnBeforeDocumentSaveOrPublish, выполнять ее здесь не требуется&lt;br /&gt;
флПарам:=0;&lt;br /&gt;
ФлТип:=0;&lt;br /&gt;
If ArgumentsNumber(&amp;quot;OnBeforeDocumentSaveOrPublish&amp;quot;,1)=2 Then&lt;br /&gt;
  ФлТип:=Number(ExecuteFunction(&amp;quot;OnBeforeDocumentSaveOrPublish&amp;quot;,1,1,флПарам));&lt;br /&gt;
  If ФлТип=0 Then&lt;br /&gt;
    Exit;&lt;br /&gt;
  EndIf;&lt;br /&gt;
EndIf;&lt;br /&gt;
&lt;br /&gt;
//Далее следует блок обработки документа&lt;br /&gt;
If ФлТип&amp;lt;&amp;gt;2 Then&lt;br /&gt;
  Try&lt;br /&gt;
    If aEl.Status()&amp;lt;0 Then //Документ необходимо записать, если он новый&lt;br /&gt;
      aEl.Save();&lt;br /&gt;
    EndIf;&lt;br /&gt;
    if not aEl.Publish(флПарам) Then&lt;br /&gt;
      Exit;&lt;br /&gt;
    EndIf;&lt;br /&gt;
  Except&lt;br /&gt;
    Message(глПодготовитьОшибкуОбработки(),&amp;quot;!&amp;quot;);&lt;br /&gt;
    Exit;&lt;br /&gt;
  EndTry;&lt;br /&gt;
EndIf;&lt;br /&gt;
&lt;br /&gt;
//Событие в локальном модуле может произвести действия, необходимые после обработки документа&lt;br /&gt;
If ArgumentsNumber(&amp;quot;OnAfterDocumentSaveOrPublish&amp;quot;,1)=2 Then&lt;br /&gt;
  ExecuteFunction(&amp;quot;OnAfterDocumentSaveOrPublish&amp;quot;,1,1,флПарам);&lt;br /&gt;
EndIf;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</description>
			<pubDate>Wed, 01 Apr 2026 09:57:49 GMT</pubDate>
			<dc:creator>Admin</dc:creator>
			<comments>http://sfsys.ru/index.php/Talk:ArgumentsNumber</comments>
		</item>
</channel></rss>