<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://sfsys.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Admin</id>
	<title>SunFlurry wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="http://sfsys.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Admin"/>
	<link rel="alternate" type="text/html" href="http://sfsys.ru/index.php/Special:Contributions/Admin"/>
	<updated>2026-04-04T08:34:12Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.31.1</generator>
	<entry>
		<id>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</id>
		<title>Проект Розница</title>
		<link rel="alternate" type="text/html" href="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"/>
		<updated>2026-04-03T15:03:05Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* Ссылки для скачивания бинарных файлов проекта */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{HeadLinks|&lt;br /&gt;
* [[Main_Page|Начальная страница]]&lt;br /&gt;
* [[Проект Розница|Общее описание розницы]]&lt;br /&gt;
* [[Установка проекта Розница|Пошаговая установка проекта розница]]}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
Проект &amp;quot;розница&amp;quot; является абсолютно '''бесплатной''' альтернативой коммерческим кассовым и учетным системам для розничной торговли. Проект может использоваться как на рабочем месте кассира, так и как учетная программа для розничной компании. Эта статья пытается дать исчерпывающую информацию о том, какими ограничениями обладает данная версия, что она уже умеет и какие предполагаются дальнейшие шаги по ее развитию, а также о том, каким образом начать с ней работать.&lt;br /&gt;
&lt;br /&gt;
Проект появился для того, чтобы каким-то образом облегчить положение мелких розничных точек на рынке. Существующие программы слишком сложные в настройке, не обладают достаточной гибкостью, медленные в работе или заставляют торговые точки платить немалые деньги, в условиях, когда прибыль небольших магазинов постоянно сокращается из-за увеличения конкуренции с федеральными сетями. Мы представляем бесплатное решение, которое не только не требует какого-либо лицензирования, но и может быть модифицировано Вашими специалистами или сторонними организациями. В программе не используется реклама, нет ограничений по времени, скрытых платежей и пр. Если Ваша модель кассового или периферийного оборудования пока не поддерживается текстами драйверов проекта, Вы можете оставить заявку для создания драйвера (на github) или создать его самостоятельно. Данный Wiki-портал содержит описание всех программных возможностей системы, на которой работает проект, все статьи, связанные с описанием программных функций, имеют примеры. Любой человек, немного разбирающийся в программировании, сможет модифицировать текст проекта для изменения или увеличения функциональности. Также для пошаговой информации по установке проекта в магазине, смотрите статью '''[[Установка проекта Розница]]'''.&lt;br /&gt;
&lt;br /&gt;
==== Лицензионное соглашение на использование проекта ====&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы скачивать, устанавливать, работать с проектом или модифицировать его с помощью исполняемых файлов проекта, Вам необходимо согласиться с лицензионным соглашением на использование исполняемых файлов проекта. Соглашение имеет определенные ограничения в использовании, для того, чтобы проект мог применяться только небольшими и средними организациями. Соглашение не относится к исходным текстам проекта, распространяемым на сервере github (или подобном), тексты проекта могут быть использованы в любых целях без ограничения. &lt;br /&gt;
&lt;br /&gt;
* [http://{{SERVERNAME}}/download/EULASOFT.txt &amp;lt;big&amp;gt;'''Полный текст соглашения для использования исполняемых файлов (программного обеспечения) проекта.'''&amp;lt;/big&amp;gt;]. Исполняемые файлы доступны для скачивания с данного портала (см. ниже ссылки для скачивания).&lt;br /&gt;
* [http://{{SERVERNAME}}/download/EULASRC.txt &amp;lt;big&amp;gt;'''Полный текст соглашения для использования исходных текстов проекта.'''&amp;lt;/big&amp;gt;]. Свежую версию исходных текстов проекта можно скачать со страницы проекта на [https://github.com/sfsys132/project-free-Russian-retail github].&lt;br /&gt;
&lt;br /&gt;
Ниже дается краткий свод ограничений соглашения на использование исполняемых файлов проекта (для понимания общей картины):&lt;br /&gt;
* Соглашение запрещает скачивать '''исполняемые файлы''', устанавливать их, или использовать их в коммерческих целях (в работе коммерческой организации) в случаях:&lt;br /&gt;
** Если проект будет использоваться в любой другой организации, кроме торговой розничной организации. Использование проекта для случаев, когда точка продает только через сеть Интернет, также не допускается.&lt;br /&gt;
** Если в розничной организации, использующей проект, зарегистрировано более десяти торговых точек на одном юридическом лице, за исключением юридических лиц, которые получили на это соответствующее разрешение у организации, распространяющей проект. Таким юридическим лицам будут предоставлены другие (коммерческие) исполняемые файлы системы.&lt;br /&gt;
** Если десять или более розничных точек используют одну контролирующую организацию или связанную группу организаций, им необходимо получить дополнительное разрешение у организации, распространяющей проект. Таким организациям будут предоставлены другие (коммерческие) исполняемые файлы системы.&lt;br /&gt;
** Организациям, производящим внедрение и обслуживание проекта, на более чем десяти торговых точках с целью продвижения своего продукта в эти торговые точки, необходимо получить дополнительное разрешение у организации, распространяющей проект. Таким организациям будут предоставлены другие (коммерческие) исполняемые файлы системы.&lt;br /&gt;
* Однако соглашение не запрещает использовать любые части '''исходных текстов проекта''', находящихся на сервере github (или подобном), в коммерческих или других целях, в других системах программного обеспечения или в системе SunFlurry.&lt;br /&gt;
* Организация, распространяющая проект, может в любой момент без предварительного оповещения изменить текст лицензионного соглашения, однако:&lt;br /&gt;
** Последняя версия исходных текстов проекта, распространяемая на сервере github (или подобном), а также любые исходные тексты, созданные сторонними разработчиками в рамках лицензионного соглашения до момента его изменения, ни при каких условиях не потеряют бесплатный статус.&lt;br /&gt;
** Последние версии исполняемых файлов, распространявшихся до момента изменения лицензионного соглашения, ни при каких условиях не потеряют бесплатный статус, эти старые версии можно будет использовать в рамках текста лицензионного соглашения до момента его изменения.&lt;br /&gt;
* Проект распространяется без какой-либо гарантии со стороны распространяющей организации (&amp;quot;как есть&amp;quot;). Организация не несет ответственности за возможный ущерб, причиненный программой, ее сбоями, возможностью или невозможностью ее использования (включая убытки и потерю информации).&lt;br /&gt;
&lt;br /&gt;
Если Вы не можете использовать проект, так как деятельность или величина Вашей организация не удовлетворяет условиям лицензионного соглашения, однако у Вас есть интерес к системе или какие-либо коммерческие предложения, вы можете связаться с нами с помощью электронной почты, используя следующий адрес: '''&amp;lt;nowiki&amp;gt;sf@sfs&amp;amp;#x79;s.ru&amp;lt;/nowiki&amp;gt;'''. Мы читаем всю почту, но можем задержаться с ответом из-за высокой загруженности. Если Вы не получили ответ в течение недели, возможно дежурный сотрудник находится в отпуске. Из-за большого количества спама, приходящего на почту, наш почтовый сервер использует спам-фильтры. Если наш сервер отвергает Ваше письмо, попробуйте отослать его с бесплатных почтовых серверов.&lt;br /&gt;
&lt;br /&gt;
==== Возможности проекта розница ====&lt;br /&gt;
&lt;br /&gt;
Бесплатный проект розница состоит серверной части, клиентской части и файлов проекта. &lt;br /&gt;
&lt;br /&gt;
Серверная часть хранит базу данных и обслуживает запросы к ней. Для одного магазина должна быть установлена одна серверная часть, даже если работа с базой данных будет происходить с нескольких машин одновременно. Некоммерческий проект розница использует '''x86''' '''SQLite3''' сервер ([[Общая информация о сервере базы данных#Доступные СУБД и особенности их использования|См. статью]]). Это ограничивает масштабируемость одной базы данных, и слишком большое количество пользователей может замедлить работу в ней. 32-битная версия сервера также накладывает некоторое ограничение на размер базы данных, так как слишком большие базы данных могут работать медленнее из-за невозможности использования буфера запросов больше предела в ~2Гб. Однако для розничных точек это не должно стать проблемой, так как базы данных в них обычно небольшие. Нужно добавить, что сама база данных не имеет никаких искусственных ограничений по размеру (максимальный размер определяется возможностями SQLite3). Для небольших магазинов, серверная часть обычно устанавливается на компьютер с кассовым оборудованием, где клиентская часть выступает как кассовый терминал.&lt;br /&gt;
&lt;br /&gt;
[[Общая информация о консольном и визуальном клиентах|Клиентская часть]] проекта розница использует '''x86''' бинарный файл. Клиентская часть может использоваться как кассовый терминал, так и как учетная система и может быть установлена на любое количество компьютеров для работы с одним сервером магазина. Возможности клиентской части определяются исходными текстами проекта, поэтому, они постоянно дополняются и изменяются. Любой человек, разбирающийся в программировании, может изменить текст проекта и добавить в него новые возможности. На момент написания статьи, проект умеет:&lt;br /&gt;
&lt;br /&gt;
* При использовании проекта, как учетной системы:&lt;br /&gt;
** Ведение любого количества юридических лиц и магазинов в одной базе.&lt;br /&gt;
** Анализы продаж и закупок, ABC, XYZ-анализы, анализы наценки и прибыли, прогнозирование закупки товаров.&lt;br /&gt;
** Система ценообразования и формирования цен, распечатка ценников.&lt;br /&gt;
** Ведение бухгалтерского учета, ручные проводки, ведение учета по основным средствам.&lt;br /&gt;
*** Книга покупок и книга продаж, книга доходов и расходов, бух. баланс и отчет по прибыли.&lt;br /&gt;
** Ведение финансового учета, ведение затрат, затраты по оплате и начислению.&lt;br /&gt;
*** Операционный капитал, отчет по прибылям и убыткам, маржинальная прибыль.&lt;br /&gt;
** Ведение и учет маркетинга поставщиков (начисление и закрытие скидок и т.д.).&lt;br /&gt;
** Ведение и анализы взаиморасчетов с поставщиками, платежная ведомость.&lt;br /&gt;
** Ведение кассовых и банковских остатков. Ведение подотчета.&lt;br /&gt;
** Ведение складских остатков в разрезе партий, марочный учет ЕГАИС и ГИС МТ.&lt;br /&gt;
** Обрезание, объединение и перенос базы данных.&lt;br /&gt;
** Обмен между базами данных, возможность выгрузки документов из периферийных баз данных в центральную.&lt;br /&gt;
** Система прав отдельных пользователей.&lt;br /&gt;
** Возможности обмена с другими информационными базами:&lt;br /&gt;
*** При разрелении центральной базы и локальных баз магазинов, возможность использования простого обмена по протоколу Фронтол.&lt;br /&gt;
*** Возможно выгрузки и зарузки из баз 1С по проколу EnterpriseData.&lt;br /&gt;
*** Возможность использования внутреннего протокола обмена с центральной базой.&lt;br /&gt;
* При использовании проекта, как кассового терминала:&lt;br /&gt;
** Драйверы для популярных ККМ (Атол, Штрих-М, Вики Принт, другие драйверы будут добавлены позже).&lt;br /&gt;
*** Продажа марочного товара ЕГАИС (алкоголь) и ГИС МТ (сигареты, молочная продукция и пр.). Работа с ФФД 1.2. &lt;br /&gt;
*** Продажа на несколько касс одновременно (если, к примеру, торговля алкоголем ведется от одного юр. лица, а все остальное продается от другого).&lt;br /&gt;
** Приемка поступлений ЕГАИС, автоматическое создание партий, работа с регистром 2, отчеты по сравнению с реальными остатками и прочее. Полный учет ЕГАИС.&lt;br /&gt;
*** Доступ к УТМ ЕГАИС через сервер позволяет принимать документы в ЕГАИС, работая с базой через Интернет без необходимости перенаправления соединения с УТМ.&lt;br /&gt;
*** Формирование декларации об объемах продаж алкоголя.&lt;br /&gt;
** Прием поступлений от поставщиков марочной продукции ГИС МТ.&lt;br /&gt;
** Использование концепции &amp;quot;рабочее место&amp;quot; и &amp;quot;магазин&amp;quot;, что позволяет настроить оборудование в ККТ магазина нужным образом и исключить проблемы с путаницей между оборудованием и пользователями.&lt;br /&gt;
** Возможность выгружать и загружать информацию по протоколу Фронтол (к примеру, если центральная база будет использовать другую учетную систему). Другие способы обмена могут быть созданы Вашими или сторонними IT-специалистами.&lt;br /&gt;
** Возможность программировать запреты на продажу алкоголя.&lt;br /&gt;
** Вскрывать тару ЕГАИС непосредственно в интерфейсе продавца.&lt;br /&gt;
** Блок макетинга покупателей:&lt;br /&gt;
*** Использование торговых акций с скидкой на позиции, скидкой от суммы документа, акции типа 2+1, возможность добавления исходного кода для реализации более сложных акций.&lt;br /&gt;
*** Работа со скидочными картами, работа с подарочными картами, работа с депозитами.&lt;br /&gt;
*** Учет маркетинговых акций и скидок покупателям.&lt;br /&gt;
** Удобная и простая самомасштабируемая форма рабочего места продавца.&lt;br /&gt;
*** Операции типа: отложить чек, продолжить чек, возврат, аванс, кредит, временная замена прав для выполнения нужной операции и т.д. &lt;br /&gt;
*** Возможности подбора товаров в чек, в т.ч. с помощью терминала сбора данных.&lt;br /&gt;
*** Быстрое закрытие чека, быстрая работа с комбинированными оплатами.&lt;br /&gt;
*** Добавление часто выбираемых товаров в интерфейс рабочего места продавца, частые кнопки могут содержать исходный код для произвольных операций.&lt;br /&gt;
*** Возможность перехвата специальным исходным кодом управления в любой момент или при нажатии на стандартные кнопки. Примеры кода для кафе с номерами столов и депозитами.&lt;br /&gt;
* Возможности сервера базы данных:&lt;br /&gt;
** Автоматическое создание резервных копий базы данных.&lt;br /&gt;
* Возможность получения самых свежих обновлений из официального репозитория.&lt;br /&gt;
&lt;br /&gt;
Требования к оборудованию для работы серверной и клиентской части проекта:&lt;br /&gt;
* Операционная система: Windows 2000, XP, 7, 8, 10 или 11&lt;br /&gt;
* Процессор: 1.1ГГц и выше (также поддерживаются младшие модели Celeron и Atom)&lt;br /&gt;
* Оперативная память: 2Гб и выше (4Гб и выше для Windows 10 и 11)&lt;br /&gt;
Проект будет работать практически на любом оборудовании. Помните, что если вся Ваша оперативная память используется, работа с компьютером будет замедлена, и это может негативно сказаться на кассовых продажах. Убедитесь, что у Вас достаточно оперативной памяти. Для баз данных, обычного размера, сервер не требует много дополнительной памяти, однако, если база данных будет очень большой (2Гб и более), сервер также будет использовать значительное количество памяти.&lt;br /&gt;
&lt;br /&gt;
В проект также входит специальная версия [[Общая информация и интерфейс Студии|Студии]], программы, которая позволяет изменять исходный код проекта и его визуальные формы, а также, разворачивать эти изменения на существующих торговых точках простым нажатием нескольких клавиш. Студия используется в работе техническими специалистами и обычно не устанавливается в самих магазинах. Данный портал содержит исчерпывающую документацию для начала работы со Студией для изменения исходного кода проекта.&lt;br /&gt;
&lt;br /&gt;
Для пошаговой информации по установке проекта в магазине, смотрите статью '''[[Установка проекта Розница]]'''.&lt;br /&gt;
&lt;br /&gt;
==== Изменения, планируемые в будущем ====&lt;br /&gt;
&lt;br /&gt;
На данный момент не все планируемые возможности проекта реализованы. Изменения в его исходном коде будут загружаться на [https://github.com/sfsys132/project-free-Russian-retail официальную страницу github] и бета-версии всегда доступы в официальном репозитории (см. параграф ниже), их можно будет скачать, и обновить рабочие базы данных магазинов. Среди планируемых изменений и добавлений, можно выделить следующие:&lt;br /&gt;
* Особый и более удобный инферфейс для кафе и ресторанов (сейчас есть возможность работы с номерами столов и пр. с помощью перехвата функций из интерфейса кассира).&lt;br /&gt;
* Расширение возможностей системы (внешние модули, создание собственных объектов в язывке (пользовательское ООП) и т.д.)&lt;br /&gt;
* Дополнительные функции редактора исходных Студии (выделенные уровни блоков текста, переходы к функциям, т.п.)&lt;br /&gt;
* Добавление новых драйверов для ККМ, банковских терминалов, т.с.д., электронных весов и дисплеев покупателей&lt;br /&gt;
* Работа над исправлением найденных ошибок&lt;br /&gt;
&lt;br /&gt;
==== Официальный репозиторий исходных текстов проекта ====&lt;br /&gt;
&lt;br /&gt;
Ссылка на официальный репозиторий исходных текстов проекта находится в списке серверов при установки Студии из комплекта бесплатного проекта Розница. Официальный репозиторий содержит самые свежие изменения в проекте и самые свежие исполняемые файлы. Изменения можно скачать выборочно при синхронизации с репозиторием из Студии (пункт меню &amp;quot;развертывание&amp;quot; - &amp;quot;развернуть проект&amp;quot; - галочка на репозитории). Пользователи проекта не могут изменить исходные тексты репозитория, им предоставляется доступ только для чтения. Важно понимать, что репозиторий может содержать непроверенные или мало проверенные изменения, скачивание которых в рабочий проект и затем развертывание в рабочие базы, может привести к ошибкам. Вы можете использовать репозиторий на свой страх и риск, в случаях, к примеру, если новое изменение еще не появилось в новом выпуске или на github, однако, оно необходимо. Проверяйте работу магазина после каждого обновления из репозитория!&lt;br /&gt;
&lt;br /&gt;
==== Ссылки для скачивания бинарных файлов проекта ====&lt;br /&gt;
&lt;br /&gt;
Приведенная здесь ссылка содержит текущую версию программы установки. Программа позволяет установить как клиентскую и серверную части, так и систему разработки Студия. Несмотря на то, что исходные файлы проекта в этой программе установки достаточно свежие, вероятно, они не содержат всех недавних изменений, которые доступны на сервере [https://github.com/sfsys132/project-free-Russian-retail github]. Если Вам необходимо обновить исходные тексты до самой свежей версии, Вы можете скачать их в виде архива или с помощью специальных инструментов (типа [https://tortoisegit.org/ tortoisegit]). Для подобной операции могут потребоваться дополнительные знания. Для пошаговой информации по установке проекта в магазине, смотрите статью '''[[Установка проекта Розница]]'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;Программа установки, а также бинарные файлы проекта не содержат вирусов, однако при скачивании любых исполняемых файлов из Интернета, всегда рекомендуется использовать антивирус со свежими базами обновлений!&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://{{SERVERNAME}}/download/sf_retail_x86_20260403_install.exe &amp;lt;big&amp;gt;'''Скачать файл установки проекта Розница.'''&amp;lt;/big&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
==== Ссылка для скачивания простой демонстрации графических возможностей системы -- tetris.sfo ====&lt;br /&gt;
&lt;br /&gt;
Для простой демонстрации графических возможностей системы был создан внешний объект системы ([[Функции общего назначения#Внешний загружаемый объект|Внешний загружаемый объект]]) '''Tetris'''. Вы можете скачать файл объекта и открыть его в визуальном клиенте. Для работы необходимы установленные драйверы видеокарты и OpenGL не ниже 2.1 (любая современная видеокарта, в т.ч. встроенные). Внешний объект также содержит исходный текст, его можно редактировать и изменять по желанию, если открыть в [[Общая информация и интерфейс Студии|Студии]]. Объект в свободном распространении. Копия, данная на скачивание здесь, возможно, будет в дальнейшем немного изменяться, чтобы улучшить читаемость. Ниже дана ссылка на скачивание:&lt;br /&gt;
&lt;br /&gt;
[http://{{SERVERNAME}}/download/tetris.sfo '''Скачать демонстрацию графического объекта Tetris.''']&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Контактная информация====&lt;br /&gt;
&lt;br /&gt;
Вы можете связаться с нами, используя следующий почтовый адрес: &amp;lt;big&amp;gt;'''&amp;lt;nowiki&amp;gt;sf@sfs&amp;amp;#x79;s.ru&amp;lt;/nowiki&amp;gt;'''&amp;lt;/big&amp;gt;. Нам интересно будет услышать любые Ваши предложения. Мы читаем всю почту, но можем задержаться с ответом из-за высокой загруженности. Если Вы не получили ответ в течение недели, возможно дежурный сотрудник находится в отпуске. Из-за большого количества спама, приходящего на почту, наш почтовый сервер использует спам-фильтры. Если наш сервер отвергает Ваше письмо, попробуйте отослать его с бесплатных почтовых серверов.&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>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</id>
		<title>Электронная таблица SFT</title>
		<link rel="alternate" type="text/html" href="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"/>
		<updated>2026-04-01T10:01:41Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{infobox object&lt;br /&gt;
|image=table.png&lt;br /&gt;
|visual=[[Студия/Электронная таблица SFT|Таблица SFT]]&lt;br /&gt;
|object=Table&lt;br /&gt;
|status=2&lt;br /&gt;
|create=[[Table.Create|Create]]}}&lt;br /&gt;
{{HeadLinks|&lt;br /&gt;
* [[Main_Page|Начальная страница]]&lt;br /&gt;
* [[Общее_описание_языка|Общее описание]]&lt;br /&gt;
* [[Объекты]]}}&lt;br /&gt;
Объект '''электронная таблица SFT''' дает возможность создания, заполнения, вывода на экран и принтер, а также чтения данных и проведения других операций с электронными таблицами SFT. Обычно объект используется для создания и вывода на экран отчетов и печатных форм документов. В таких случаях, алгоритм работы с объектом следующий:&lt;br /&gt;
* Создается новый объект и задается таблица-шаблон (по умолчанию файл шаблона '''Table''' должен находиться в той же папке (объекте), где находится модуль, создающий объект, однако, путь и имя таблицы-шаблона можно задать с помощью функции [[Table.SetSourceName|SetSourceName]]). Создавать таблицу с нуля, программно изменяя шрифт каждой ячейки, тип границ и объединения, является очень сложной и трудоемкой задачей, поэтому, такой подход на практике не применяется, а используется таблица-шаблон (или несколько таких таблиц). Шаблон представляет собой обычную таблицу, при создании отчета или печатной формы документа, заданные части шаблона будут копироваться в новую создаваемую таблицу. При копировании частей шаблона, система автоматически заполняет ячейки с формулами результатом их выполнения (такие ячейки в таблице-шаблоне имеют галочку &amp;quot;Текст представляет собой выражения для вычисления&amp;quot;, см. [[Студия/Редактор электронных таблиц|Редактор электронных таблиц]]), это дает возможность предусмотреть в шаблоне ячейки с сальдо, наименованиями и реквизитами юридических лиц и прочим, в зависимости от типа выводимой формы. Для удобства написания программ, нужные куски таблицы-шаблона отмечаются на этапе редактирования, им присваиваются свои наименования, по которым программа может обращаться к ним, чтобы из этих кусков сконструировать таблицу-результат.&lt;br /&gt;
* Выполняется запрос или требуемые данные подготавливаются другим путем.&lt;br /&gt;
* Происходит обход по результату запроса или другим данным и последовательное добавление нужных частей таблицы-шаблона в таблицу результат с заполнением ячеек данными, полученными в цикле обхода (Для копирования частей таблицы-шаблона можно использовать функции [[Table.CopyByX|CopyByX]], [[Table.CopyByY|CopyByY]], [[Table.CopyTitles|CopyTitles]], [[Table.Area.CopyTo|CopyTo]]).&lt;br /&gt;
* Созданная новая электронная таблица выводится на экран или принтер.&lt;br /&gt;
&amp;lt;p&amp;gt;При программной работе с объектом нужно различать четыре типа объектов: сама электронная таблица SFT, объект область таблицы (''Area'') (получаемая с помощью вызова функций типа [[Table.Area|Area]] и необходимая для проведения прямого изменения в ячейках области), объект свойств таблицы (''Options'') (включающий множество подобъектов, к примеру, ''выделение'' или ''свойства печати'') и объект визуальных элементов (объектов) таблицы (''Objects''). Все объекты связаны с электронной таблицей SFT, которая не будет удалена из памяти до тех пор, пока останется по крайней мере один объект, ссылающийся на нее. Ячейки таблицы могут содержать объекты языка любого вида, поэтому кроме внешних ссылок на таблицу, иногда может возникнуть ситуация, когда внутри какой-либо ячейки (или визуального элемента) хранится ссылка на самую же таблицу, это бывает, к примеру, когда в визуальной кнопке таблицы для обновления результата отчета, хранится список с данными, связанными с этим отчетом, в том числе сама таблица. Для таблиц, которые хранят ссылки на самих себя требуется указывать количество таких ссылок с помощью атрибута [[Table.SelfReferenceCount|SelfReferenceCount]], иначе после удаления последнего объекта, ссылающегося на таблицу, таблица останется в памяти (см. [[Объекты#Ссылки на самого себя|Ссылки на самого себя]]).&amp;lt;/p&amp;gt;&lt;br /&gt;
Основные свойства ячейки таблицы перечислены ниже:&lt;br /&gt;
* Таблица может иметь практически неограниченное количество столбцов и строк (до 2 млрд.), сдвигая видимое поле, пользователь может увидеть любую ячейку таблицы. Память для хранения ячеек выделяется только для определенного количества столбцов и строк таблицы, этот диапазон задает высоту и ширину таблицы. При изменении текста или других свойств ячейки вне диапазона этих строк и столбцов, выделенный диапазон автоматически расширяется.&lt;br /&gt;
* Ячейка содержит текст в ANSI или UTF-16 кодировках, либо текст шаблона, представляющего собой программу на встроенном языке, программа будет исполнена и результат будет записан, как текст ячейки в момент копирования частей таблицы-шаблона в таблицу результат.&lt;br /&gt;
* Ячейка содержит произвольный объект встроенного языка, использующийся как значение ячейки при клике по ячейке или редактировании оной. Вместо объекта языка в ячейке может находиться текст шаблона, представляющего собой программу на встроенном языке, программа будет исполнена и результат будет записан, как значение ячейки в момент копирования частей таблицы-шаблона в таблицу результат.&lt;br /&gt;
* Текст ячейки может иметь стандартные свойства форматирования: шрифт, выделение, цвет фона, цвет текста и рамки и пр., либо для ячейки может быть задан шаблон цвета (color template). В последнем случае, пользователи смогут выбирать другую палитру цветов, по своему желанию, поэтому, использование шаблонов цвета предпочтительнее при формировании результатов отчетов.&lt;br /&gt;
* Ячейки могут быть объединены между собой в группы ячеек. Текст в такой группе будет использовать все пространство группы и будет получен из верхней левой ячейки группы.&lt;br /&gt;
* Ячейки имеют разнообразные свойства переноса текста, выравнивания по горизонтали и вертикали, отступов по горизонтали и вертикали, угол направления текста и пр.&lt;br /&gt;
* Каждая ячейка имеет четыре границы вокруг себя, каждая из границ может иметь свой рисунок и цвет. Из-за использования шаблонов для создания таблиц-результата, двух границ для каждой ячейки недостаточно.&lt;br /&gt;
* Столбцы и строки таблицы имеют дополнительное свойство &amp;quot;автоматическое расширение&amp;quot;, обычно номера таких строк или столбцов выделены визуально для удобства создания таблиц-шаблонов. Строки или столбцы со свойством &amp;quot;автоматическое расширение&amp;quot; будут автоматически изменять размеры, в зависимости от текста, помещенного внутрь их ячеек.&lt;br /&gt;
* При печати больших таблиц, происходит их распределение на несколько листов, иногда важно, чтобы определенные блоки текста (строки или столбцы) не разделялись и шли всегда вместе (к примеру, блок с подписями и печатями), для этого предусмотрены блоки строк или столбцов без разделения.&lt;br /&gt;
Основные свойства визуальных элементов (объектов) таблицы перечислены ниже:&lt;br /&gt;
* Объекты могут быть добавлены в любое место таблицы и могут представлять собой не только текстовые поля, но и рисунки, OLE-объекты и пр.&lt;br /&gt;
* Объект содержит текст в ANSI или UTF-16 кодировках, либо текст шаблона, представляющего собой программу на встроенном языке. Для шаблонов, программа будет исполнена и результат будет записан, как текст ячейки в момент копирования частей таблицы-шаблона в таблицу результат.&lt;br /&gt;
* Объект содержит произвольный объект встроенного языка, использующийся как значение ячейки при клике по ячейке или редактировании оной. Вместо объекта языка в ячейке может находиться текст шаблона, представляющего собой программу на встроенном языке, программа будет исполнена и результат будет записан, как значение ячейки в момент копирования частей таблицы-шаблона в таблицу результат.&lt;br /&gt;
* Текст объекта может иметь стандартные свойства форматирования: шрифт, выделение, цвет фона, цвет текста и рамки и пр., либо для ячейки может быть задан шаблон цвета (color template). В последнем случае, пользователи смогут выбирать другую палитру цветов, по своему желанию, поэтому, использование шаблонов цвета предпочтительнее при формировании результатов отчетов.&lt;br /&gt;
* Объекты имеют разнообразные свойства переноса текста, выравнивания по горизонтали и вертикали, отступов по горизонтали и вертикали, угол направления текста и пр.&lt;br /&gt;
* Каждый объект имеет четыре границы вокруг себя, каждая из границ может иметь свой рисунок и цвет. &lt;br /&gt;
* Объект может не выводиться на печать, если это необходимо&lt;br /&gt;
* Объект может иметь наименование, по которому можно обратиться к нему из текста программы&lt;br /&gt;
* Положение и размеры объекта могут быть привязаны к абсолютной координате внутри таблицы или к определенной ячейке таблицы. Таким образом можно создать объекты, которые не будут перемещаться или/и изменять размеры при изменении размеров ячеек таблицы, либо будут привязаны к определенным ячейкам.&lt;br /&gt;
&lt;br /&gt;
Не стоит путать электронные таблицы SFT (наименование интерфейса объекта '''Table''') и [[Таблица|таблицы значений]] (наименование интерфейса объекта '''Tab'''), это совершенно разные объекты.&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;
//ДатаФормирования -- дата нахождения цены&lt;br /&gt;
&lt;br /&gt;
//Выполняем запрос для получения горизонтального разреза&lt;br /&gt;
ТЗ:=&amp;quot;зН:=Ref.Номенклатура;&lt;br /&gt;
|зСтатус:=Ref.Номенклатура.@STATUS;Condition(зСтатус=0);&lt;br /&gt;
|зПапка:=Ref.Номенклатура.@ISFOLDER;&lt;br /&gt;
|Condition(зПапка=0);&lt;br /&gt;
|Condition(зН IN спНоменклатура);&lt;br /&gt;
|Group зН with folders;&amp;quot;;&lt;br /&gt;
  &lt;br /&gt;
З:=Query.Create();&lt;br /&gt;
З.Execute(ТЗ);&lt;br /&gt;
&lt;br /&gt;
Т:=Table.Create();&lt;br /&gt;
Т.SetSourceName(&amp;quot;Отчет&amp;quot;);&lt;br /&gt;
//Здесь и далее переменные с префиксом &amp;quot;п&amp;quot; используются в таблице-шаблоне &amp;quot;Отчет&amp;quot; в соответствующих ячейках,&lt;br /&gt;
//  при копировании куска таблицы с помощью CopyByX, ячейки автоматически заполняются значениями нужных переменных.&lt;br /&gt;
пЗагол:=&amp;quot;Отчет по ценам номенклатуры&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//Копирование из таблицы-шаблона будет осуществляться слева направо и затем сверху вниз&lt;br /&gt;
//Столбец &amp;quot;h1&amp;quot; в таблице-шаблоне содержит столбец с наименованием номенклатурной позиции, левый отступ, порядковый номер и пр.&lt;br /&gt;
//Столбец &amp;quot;h2&amp;quot; -- цена текущей позиции по типу цен из спТипыЦен&lt;br /&gt;
//Столбец &amp;quot;h3&amp;quot; -- завершает таблицу (правая граница)&lt;br /&gt;
//Строка &amp;quot;v1&amp;quot; таблицы-шаблона содержит заголовок отчета с заголовками столбцов&lt;br /&gt;
//Строка &amp;quot;v2&amp;quot; таблицы-шаблона содержит одну строку отчета&lt;br /&gt;
//Строка &amp;quot;v3&amp;quot; таблицы-шаблона содержит одну строку папки отчета, цены для папок не выводятся&lt;br /&gt;
//Строка &amp;quot;v4&amp;quot; таблицы-шаблона завершает отчет снизу (нижняя граница)&lt;br /&gt;
&lt;br /&gt;
//Первый блок добавляется &amp;quot;с начала строки&amp;quot;&lt;br /&gt;
Т.CopyByX(&amp;quot;v1|h1&amp;quot;,1);&lt;br /&gt;
For i:=1 to спТипыЦен.Size() Do&lt;br /&gt;
  пТипЦен:=спТипыЦен.Get(i);&lt;br /&gt;
  //Последующие блоки добавляются слева направо без перевода на другую строку, пТипЦен выводится в заголовки столбцов&lt;br /&gt;
  Т.CopyByX(&amp;quot;v1|h2&amp;quot;);&lt;br /&gt;
EndDo;&lt;br /&gt;
//Окончание вывода блока заголовка таблицы&lt;br /&gt;
Т.CopyByX(&amp;quot;v1|h3&amp;quot;);&lt;br /&gt;
//Фиксирование заголовка, чтобы он всегда был на экране при перемещении курсора по таблице&lt;br /&gt;
Т.Options.FixedLine:=Т.Height();&lt;br /&gt;
&lt;br /&gt;
пКолВо:=0;&lt;br /&gt;
While З.Next(1) Do&lt;br /&gt;
  //Переменные используются в столбце &amp;quot;h1&amp;quot;&lt;br /&gt;
  пН:=З.зН;&lt;br /&gt;
  пКод:=пН.Code;&lt;br /&gt;
&lt;br /&gt;
  If пН.IsFolder() Then&lt;br /&gt;
    //Вывод строки с папкой&lt;br /&gt;
    Т.CopyByX(&amp;quot;v3|h1&amp;quot;,1);&lt;br /&gt;
    For i:=1 to спТипыЦен.Size() Do&lt;br /&gt;
      Т.CopyByX(&amp;quot;v3|h2&amp;quot;);&lt;br /&gt;
    EndDo;&lt;br /&gt;
    Т.CopyByX(&amp;quot;v3|h3&amp;quot;);&lt;br /&gt;
    пКолВо:=пКолВо+1;&lt;br /&gt;
  Else&lt;br /&gt;
    //Вывод обычной строки&lt;br /&gt;
    Т.CopyByX(&amp;quot;v2|h1&amp;quot;,1);&lt;br /&gt;
    For i:=1 to спТипыЦен.Size() Do&lt;br /&gt;
      пЦ:=глНайтиЦену(З.зН,спТипыЦен.Get(i),ДатаФормирования);&lt;br /&gt;
      Т.CopyByX(&amp;quot;v2|h2&amp;quot;);&lt;br /&gt;
    EndDo;&lt;br /&gt;
    Т.CopyByX(&amp;quot;v2|h3&amp;quot;);&lt;br /&gt;
  EndIf;&lt;br /&gt;
&lt;br /&gt;
  //Вывод информации о состоянии формирования отчета&lt;br /&gt;
  пКолВо:=пКолВо+1;&lt;br /&gt;
  //Этот текст выводится в строку состояния&lt;br /&gt;
  Form.StatusText(&amp;quot;&amp;quot;+пКолВо+&amp;quot; из &amp;quot;+З.ResultTable.Size());&lt;br /&gt;
  //Этот текст выводится в виде индикатора выполнения, как подсказка при наведении курсора мыши на кнопку задачи отчета&lt;br /&gt;
  Form.UpdateProgress(пКолВо,З.ResultTable.Size());&lt;br /&gt;
EndDo;&lt;br /&gt;
//Выведем нижнюю границу отчета&lt;br /&gt;
Т.CopyByX(&amp;quot;v4|h1&amp;quot;,1);&lt;br /&gt;
For i:=1 to спТипыЦен.Size() Do&lt;br /&gt;
  Т.CopyByX(&amp;quot;v4|h2&amp;quot;);&lt;br /&gt;
EndDo;&lt;br /&gt;
Т.CopyByX(&amp;quot;v4|h3&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
//Изменим параметры печати&lt;br /&gt;
Т.Printing.Orientation:=1;&lt;br /&gt;
Т.Printing.ScaleMode:=1;&lt;br /&gt;
//Режим просмотра для удобства пользователя&lt;br /&gt;
Т.EditorMode:=1;&lt;br /&gt;
//Выводим на экран или принтер?&lt;br /&gt;
If флВывестиСразуНаПринтер Then&lt;br /&gt;
  Т.Printing.Printer:=тПринтер;&lt;br /&gt;
  Т.Print();&lt;br /&gt;
Else&lt;br /&gt;
  Т.Show(пЗагол);&lt;br /&gt;
EndIf;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Основные атрибуты и функции ==&lt;br /&gt;
Данный раздел содержит основные функции, которые используются совместно с объектом электронной таблицы.&lt;br /&gt;
&lt;br /&gt;
{{function header}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Create|Create]]&lt;br /&gt;
|form={{Grey|Table.}}'''Create'''():''&amp;lt;Новый объект электронной таблицы (TABLE)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция создает новый объект электронной таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.CurLine|CurLine]]&lt;br /&gt;
|form={{Grey|Table.}}'''CurLine''':''&amp;lt;Строка визуального курсора таблицы (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Получить или изменить текущую строку курсора таблицы. Курсор таблицы только косвенно связан с выделенными ячейками таблицы и не зависит от текущего выделения, для получения информации по выделению в таблице, используйте атрибут [[Table.Selection|Selection]]. Нумерация строк начинается с единицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.CurColumn|CurColumn]], '''CurCol'''&lt;br /&gt;
|form={{Grey|Table.}}'''CurColumn''':''&amp;lt;Столбец визуального курсора таблицы (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Получить или изменить текущий столбец курсора таблицы. Курсор таблицы только косвенно связан с выделенными ячейками таблицы и не зависит от текущего выделения, для получения информации по выделению в таблице, используйте атрибут [[Table.Selection|Selection]]. Нумерация столбцов начинается с единицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.CurPutX|CurPutX]]&lt;br /&gt;
|form={{Grey|Table.}}'''CurPutX''':''&amp;lt;Столбец курсора добавления областей к таблице (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Получить или изменить текущий столбец курсора добавления областей к таблице. Курсор добавления областей используется в момент вызова функций [[Table.CopyByX|CopyByX]] и [[Table.CopyByY|CopyByY]] и определяет место добавления следующей области из таблицы-шаблона. Нумерация столбцов начинается с единицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.CurPutY|CurPutY]]&lt;br /&gt;
|form={{Grey|Table.}}'''CurPutY''':''&amp;lt;Строка курсора добавления областей к таблице (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Получить или изменить текущую строку курсора добавления областей к таблице. Курсор добавления областей используется в момент вызова функций [[Table.CopyByX|CopyByX]] и [[Table.CopyByY|CopyByY]] и определяет место добавления следующей области из таблицы-шаблона. Нумерация строк начинается с единицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.EditorMode|EditorMode]]&lt;br /&gt;
|form={{Grey|Table.}}'''EditorMode''':''&amp;lt;Режим редактирования таблицы (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Получить или изменить режим редактирования таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Restrict|Restrict]]&lt;br /&gt;
|form={{Grey|Table.}}'''Restrict''':''&amp;lt;Режимы запрета работы с таблицей (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Получить или изменить режимы запрета работы с таблицей.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Scale|Scale]]&lt;br /&gt;
|form={{Grey|Table.}}'''Scale''':''&amp;lt;Масштаб отображения таблицы (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Получить или изменить масштаб отображения таблицы на экране. Масштаб по умолчанию равен 100.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.SelectionMode|SelectionMode]]&lt;br /&gt;
|form={{Grey|Table.}}'''SelectionMode''':''&amp;lt;Тип текущего выделения ячеек (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Получить тип текущего выделения ячеек или визуальных элементов таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.SelfReferenceCount|SelfReferenceCount]]&lt;br /&gt;
|form={{Grey|Table.}}'''SelfReferenceCount''':''&amp;lt;Количество ссылок на себя в объектах таблицы (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут позволяет получить или изменить количество ссылок на себя, хранящихся в объектах таблицы. Если не установить это число корректно, таблица не может быть удалена из памяти, так как количество ссылок на нее останется больше нуля, когда она будет удалена из ссылающейся последней переменной, и это приведет к утечке памяти.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.AttachedModule|AttachedModule]]&lt;br /&gt;
|form={{Grey|Table.}}'''AttachedModule''':''&amp;lt;Связать текущий модуль с событиями таблицы (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут позволяет получить или изменить свойство связи текущего модуля со свободной таблицей. Если модуль будет закрыт позже, а таблица останется открытой, события таблиц типа [[OnDoubleClick]] будут вызываться сначала в этом связанном модуле, а уже потом в модуле, под которым работает таблица, или в глобальном модуле. Это удобно для отчетов, которые производят определенные действия при работе со свободными таблицами, получаемыми в результате их выполнения. Таким образом можно избежать утери этой функциональности, если обработка отчета будет закрыта, но нужно понимать, что вызванное таким образом событие, возможно будет работать со стеком и переменными другого модуля. Также стоит заметить, что функция [[ModuleTag]] понимает эту связь и будет отдавать переменную, привязанную именно к модулю таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.PrintSettingsChanged|PrintSettingsChanged]]&lt;br /&gt;
|form={{Grey|Table.}}'''PrintSettingsChanged'''():''&amp;lt;Были изменены установки печати таблицы (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает 1, если были изменены любые установки, связанные с печатью таблицы (кроме названия принтера). После выполнения печати этот атрибут автоматически сбрасывается. Атрибут может использоваться в универсальных обработчиках печати, а также для сохранения индивидуальных изменений печатных форм.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.ResetCursor|ResetCursor]]&lt;br /&gt;
|form={{Grey|Table.}}'''ResetCursor'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция сдвигает видимое пространство таблицы таким образом, чтобы ячейка, в которой находится визуальный курсор, была видна на экране, если визуальный курсор уже виден на экране, функция не производит никаких изменений. Положение курсора не изменяется.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.SetCursor|SetCursor]]&lt;br /&gt;
|form={{Grey|Table.}}'''SetCursor'''(''&amp;lt;Столбец курсора (INT)&amp;gt;'',''&amp;lt;Строка курсора (INT)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция перемещает визуальный курсор в требуемую ячейку таблицы. При этом сдвига видимого пространства таблицы не происходит и курсор может оказаться за пределами видимости.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.AddObject|AddObject]]&lt;br /&gt;
|form={{Grey|Table.}}'''AddObject'''(''&amp;lt;Тип визуального объекта (INT)&amp;gt;''{{Optional|,&amp;lt;Наименование объекта (STRING)&amp;gt;,&amp;lt;Источник объекта&amp;gt;,&amp;lt;Тип координат объекта (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Координаты объекта (STRING)&amp;gt;}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция добавляет новый объект в таблицу. Для объекта указывается тип, координаты, наименование. Если объект имеет тип OLE или картинка, также задается дополнительный параметр &amp;quot;источник объекта&amp;quot;.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Lock|Lock]]&lt;br /&gt;
|form={{Grey|Table.}}'''Lock'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция блокирует отображения изменений в таблице до вызова функции [[Table.Unlock|Unlock]]. Функция может использоваться перед большим количеством обновлений или заполнении таблицы для получения значительного ускорения операции. Функцию не имеет смысла вызывать для таблиц, которые (еще) не были выведены на экран, так как такие таблицы не обновляются визуально.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Unlock|Unlock]]&lt;br /&gt;
|form={{Grey|Table.}}'''Unlock'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция снимает блокировку отображения изменений в таблице, установленную функцией [[Table.Lock|Lock]], и вызывает полное визуальное обновление таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Update|Update]]&lt;br /&gt;
|form={{Grey|Table.}}'''Update'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция вызывает полное визуальное обновление таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Size|Size]], '''Lines''', '''Height'''&lt;br /&gt;
|form={{Grey|Table.}}'''Size'''({{Optional|&amp;lt;Новое количество выделенных строк в таблице (INT)&amp;gt;}}):''&amp;lt;Количество выделенных строк в таблице (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает или изменяет высоту таблицы (количество строк в таблице, где производились какие-либо изменения, либо строки были скопированы из таблицы-шаблона и т.п.). При уменьшении количества строк, удаление будет происходить с конца таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.SizeC|SizeC]], '''Columns''', '''Width'''&lt;br /&gt;
|form={{Grey|Table.}}'''SizeC'''({{Optional|&amp;lt;Новое количество выделенных столбцов в таблице (INT)&amp;gt;}}):''&amp;lt;Количество выделенных столбцов в таблице (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает или изменяет ширину таблицы (количество столбцов в таблице, где производились какие-либо изменения, либо столбцы были скопированы из таблицы-шаблона и т.п.). При уменьшении количества столбцов, удаление будет происходить с конца таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.InsertColumns|InsertColumns]]&lt;br /&gt;
|form={{Grey|Table.}}'''InsertColumns'''(''&amp;lt;Начиная со столбца (INT)&amp;gt;''{{Optional|,&amp;lt;Количество столбцов (INT)&amp;gt;{{Default|{{Eq}}1}},&amp;lt;Ширина вставляемых столбцов (INT)&amp;gt;,&amp;lt;Автоматическая ширина столбцов (INT)&amp;gt;{{Default|{{Eq}}0}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция вставляет требуемое количество столбцов начиная с требуемой позиции. Вставка столбцов может вызвать разъединение областей ячеек, если области включают позицию добавления.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.InsertLines|InsertLines]]&lt;br /&gt;
|form={{Grey|Table.}}'''InsertLines'''(''&amp;lt;Начиная со строки (INT)&amp;gt;''{{Optional|,&amp;lt;Количество строк (INT)&amp;gt;{{Default|{{Eq}}1}},&amp;lt;Высота вставляемых строк (INT)&amp;gt;,&amp;lt;Автоматическая высота строк (INT)&amp;gt;{{Default|{{Eq}}1}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция вставляет требуемое количество строк начиная с требуемой позиции. Вставка строк может вызвать разъединение областей ячеек, если области включают позицию добавления.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.RemoveColumns|RemoveColumns]]&lt;br /&gt;
|form={{Grey|Table.}}'''RemoveColumns'''(''&amp;lt;Начиная со столбца (INT)&amp;gt;''{{Optional|,&amp;lt;Количество столбцов (INT)&amp;gt;{{Default|{{Eq}}1}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция удаляет требуемое количество столбцов начиная с требуемой позиции. Удаление столбцов может вызвать разъединение областей ячеек, если области включают удаляемые столбцы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.RemoveLines|RemoveLines]]&lt;br /&gt;
|form={{Grey|Table.}}'''RemoveLines'''(''&amp;lt;Начиная со строки (INT)&amp;gt;''{{Optional|,&amp;lt;Количество строк (INT)&amp;gt;{{Default|{{Eq}}1}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция удаляет требуемое количество строк начиная с требуемой позиции. Удаление строк может вызвать разъединение областей ячеек, если области включают удаляемые строки.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Copy|Copy]]&lt;br /&gt;
|form={{Grey|Table.}}'''Copy'''():''&amp;lt;Копия таблицы (TABLE)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция создает полную копию таблицы в памяти.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Clear|Clear]]&lt;br /&gt;
|form={{Grey|Table.}}'''Clear'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция удаляет все столбцы и ячейки и объекты из таблицы и устанавливает все свойства таблицы по умолчанию.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Find|Find]]&lt;br /&gt;
|form={{Grey|Table.}}'''Find'''(''&amp;lt;Текст для поиска (STRING)&amp;gt;''{{Optional|,&amp;lt;Установки поиска (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Область поиска (STRING)&amp;gt;,&amp;lt;Переместить курсор на найденную ячейку (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Найденная ячейка (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит поиск строки или части строки в тексте ячеек указанной области таблицы (или во всей таблице), руководствуясь заданными правилами. Если ячейка найдена, функция возвращает ее координату в виде строки &amp;lt;code&amp;gt;&amp;quot;&amp;lt;Столбец&amp;gt;:&amp;lt;Строка&amp;gt;&amp;quot;&amp;lt;/code&amp;gt; (пример ''&amp;quot;12:100&amp;quot;'') и перемещает курсор в найденную ячейку, если это необходимо, если ячейка не найдена, функция возвращает пустую строку.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.FindByValue|FindByValue]]&lt;br /&gt;
|form={{Grey|Table.}}'''FindByValue'''(''&amp;lt;Значение для поиска&amp;gt;''{{Optional|,&amp;lt;Установки поиска (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Область поиска (STRING)&amp;gt;,&amp;lt;Переместить курсор на найденную ячейку (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Найденная ячейка (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит поиск строки или части строки в значениях ячеек указанной области таблицы (или во всей таблице), руководствуясь заданными правилами. Если ячейка найдена, функция возвращает ее координату в виде строки &amp;lt;code&amp;gt;&amp;quot;&amp;lt;Столбец&amp;gt;:&amp;lt;Строка&amp;gt;&amp;quot;&amp;lt;/code&amp;gt; (пример ''&amp;quot;12:100&amp;quot;'') и перемещает курсор в найденную ячейку, если это необходимо, если ячейка не найдена, функция возвращает пустую строку.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Show|Show]]&lt;br /&gt;
|form={{Grey|Table.}}'''Show'''({{Optional|&amp;lt;Заголовок формы с таблицей (STRING)&amp;gt;,&amp;lt;Наименования файла по умолчанию при сохранении таблицы (STRING)&amp;gt;,&amp;lt;Выводить окно на передний план (INT)&amp;gt;{{Default|{{Eq}}1}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция выводит таблицу на экран в виде самостоятельной формы, подчиненной текущей форме. Окно имеет требуемый заголовок, при сохранении таблицы в виде файла, по умолчанию используется имя файла, которое можно задать в аргументе этой функции.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.ShowOnParent|ShowOnParent]]&lt;br /&gt;
|form={{Grey|Table.}}'''ShowOnParent'''({{Optional|&amp;lt;Заголовок формы с таблицей (STRING)&amp;gt;,&amp;lt;Наименования файла по умолчанию при сохранении таблицы (STRING)&amp;gt;,&amp;lt;Выводить окно на передний план (INT)&amp;gt;{{Default|{{Eq}}1}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция выводит таблицу на экран в виде самостоятельной формы, подчиненной верхней родительской форме. Окно имеет требуемый заголовок, при сохранении таблицы в виде файла, по умолчанию используется имя файла, которое можно задать в аргументе этой функции. Если таблица формируется из потока, модуля или функции, не отображаемых на экране в виде формы, либо текущая форма вызывает другую, с тем, чтобы последняя вывела таблицу на экран и закрылась после вывода, эта функция может закрепить выведенную таблицу за верхней родительской формой, вместо текущей, это позволит избежать ситуации запрета исполнения родительской формы до тех пор, пока не будут закрыты все печатные формы, созданные подчиненной. См. также [[Форма]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Hide|Hide]]&lt;br /&gt;
|form={{Grey|Table.}}'''Hide'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция позволяет закрыть открытую ранее форму таблицы и сделать таблицу невизуальной.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.HasWindow|HasWindow]]&lt;br /&gt;
|form={{Grey|Table.}}'''HasWindow'''():''&amp;lt;Режим вывода таблицы на экран (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция возвращает 0, если таблица не выведена на экран, 1 -- если она выведена, как самостоятельная форма, 2 -- если она является частью элемента формы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.NavigationState|NavigationState]]&lt;br /&gt;
|form={{Grey|Table.}}'''NavigationState'''({{Optional|&amp;lt;Новое состояние навигации (STRING)&amp;gt;}}):''&amp;lt;Текущее состояние навигации (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция возвращает или/и изменяет состояние навигации в таблице. В это понятие включается: первая видимая верхняя левая ячейка, количество закрепленных строк и столбцов, положение курсора в таблице. Сохранение и восстановление состояния, к примеру, удобно использовать при обновлении отчета, чтобы после обновления вернуть курсор в ячейку, в которой он находился до обновления.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.ShowPreview|ShowPreview]]&lt;br /&gt;
|form={{Grey|Table.}}'''ShowPreview'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция выводит стандартный диалог предварительного просмотра перед печатью.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.ShowPrintProperties|ShowPrintProperties]]&lt;br /&gt;
|form={{Grey|Table.}}'''ShowPrintProperties'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция выводит стандартный диалог установок печати таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.RenderToPicture|RenderToPicture]]&lt;br /&gt;
|form={{Grey|Table.}}'''RenderToPicture'''(''&amp;lt;Список с настройками для создания рисунков (LIST)&amp;gt;''):''&amp;lt;Картинки в формате BMP (LIST)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция подготавливает печать таблицы на принтер (деление на страницы, колонтитулы и пр.), однако, выводит информацию в виде картинок в формате BMP вместо печати. Аргумент задает установки для создания картинок, такие как ширина и высота каждой картинки, глубина ее цвета, дипазон страниц для вывода и пр.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Print|Print]]&lt;br /&gt;
|form={{Grey|Table.}}'''Print'''({{Optional|&amp;lt;Показать стандартный диалог печати до ее осуществления (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Наименование задания на принтере (STRING)&amp;gt;,&amp;lt;Режим диалога отмены печати (INT)&amp;gt;{{Default|{{Eq}}0}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит печать на принтер, с выводом стандартного диалога печати, если это необходимо. После деления данных на страницы при печати, функция изменяет текст колонтитулов созданных страниц, подставляя вместо выражения &amp;lt;code&amp;gt;#P&amp;lt;/code&amp;gt; номер соответствующей страницы, а вместо &amp;lt;code&amp;gt;#Q&amp;lt;/code&amp;gt; общее количество страниц при печати. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.CreatePageIndex|CreatePageIndex]]&lt;br /&gt;
|form={{Grey|Table.}}'''CreatePageIndex'''({{Optional|&amp;lt;Максимальное время ожидания освобождения принтера (INT)&amp;gt;{{Default|{{Eq}}5000}}}}):''&amp;lt;Список размеров страниц (LIST)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция создает или обновляет список страниц, которые будут выведены на печать, если текущие установки таблицы не изменятся. '''Внимание:''' функция может выполняться достаточно длительное время, из-за того, что установки печати записываются в свойства принтера перед подсчетом, кроме того, функция пересчитывает все параметры ячеек с изменяемыми размерами, поэтому, чем больше таблица по размеру, тем медленнее работает эта функция. Если принтер занят в данный момент печатью, функция также ожидает ее окончания, максимальное время этого ожидания задается в первом аргументе в миллисекундах.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Load|Load]]&lt;br /&gt;
|form={{Grey|Table.}}'''Load'''(''&amp;lt;Наименование файла (STRING)&amp;gt;''{{Optional|,&amp;lt;Формат (INT,STRING)&amp;gt;,&amp;lt;Индекс или наименование листа (INT,STRING)&amp;gt;}}):''&amp;lt;Наименование загруженного листа или список с листами (STRING,LIST)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит загрузку текущей таблицы из файла в указанном формате, предыдущие данные, находившиеся в таблице, будут утеряны.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Save|Save]]&lt;br /&gt;
|form={{Grey|Table.}}'''Save'''(''&amp;lt;Наименование файла (STRING)&amp;gt;''{{Optional|,&amp;lt;Формат (INT,STRING)&amp;gt;,&amp;lt;Список таблиц для сохранения в листы книги (LIST)&amp;gt;}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит сохранение текущей таблицы в файл в указанном формате.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.LoadFromBuffer|LoadFromBuffer]]&lt;br /&gt;
|form={{Grey|Table.}}'''LoadFromBuffer'''(''&amp;lt;Объект буфера или строка (BUFFER,STRING)&amp;gt;''{{Optional|,&amp;lt;Начальная позиция буфера (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Размер таблицы в буфере (INT)&amp;gt;,&amp;lt;Формат (INT,STRING)&amp;gt;,&amp;lt;Индекс или наименование листа (INT,STRING)&amp;gt;}}):''&amp;lt;Наименование загруженного листа или список с листами (STRING,LIST)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит загрузку текущей таблицы из буфера в указанном формате, предыдущие данные, находившиеся в таблице, будут утеряны.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.SaveToBuffer|SaveToBuffer]]&lt;br /&gt;
|form={{Grey|Table.}}'''SaveToBuffer'''(''&amp;lt;Объект буфера (BUFFER)&amp;gt;''{{Optional|,&amp;lt;Начальная позиция буфера (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Формат (INT,STRING)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Установки (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Список таблиц для сохранения в листы книги (LIST)&amp;gt;}}):''&amp;lt;Размер в байтах, добавленный в буфер (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит сохранение текущей таблицы в буфер в указанном формате с указанными установками.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.SetSourceName|SetSourceName]]&lt;br /&gt;
|form={{Grey|Table.}}'''SetSourceName'''(''&amp;lt;Наименование таблицы-шаблона (STRING)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция задает новое наименование (и путь, если необходимо) таблицы-шаблона из которого функции, типа [[Table.CopyByX|CopyByX]] будут копировать информацию в текущую таблицу. Имя таблицы задается без расширения. Функция не проверяет существование таблицы с заданным именем, таблица будет загружена в момент, когда будет производиться копирование из нее.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.GetSourceName|GetSourceName]]&lt;br /&gt;
|form={{Grey|Table.}}'''GetSourceName'''():''&amp;lt;Наименование таблицы-шаблона (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает текущее наименование таблицы-шаблона из которого функции, типа [[Table.CopyByX|CopyByX]] будут копировать информацию в текущую таблицу.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.SetSource|SetSource]]&lt;br /&gt;
|form={{Grey|Table.}}'''SetSource'''(''&amp;lt;Таблица-шаблон (TABLE)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция задает таблицу-шаблон из которой функции, типа [[Table.CopyByX|CopyByX]] будут копировать информацию в текущую таблицу.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Source|Source]]&lt;br /&gt;
|form={{Grey|Table.}}'''Source'''():''&amp;lt;Таблица-шаблон (TABLE)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает текущую таблицу-шаблон. Функция возвращает значение типа ''таблица SFT'' только в случае, когда таблица уже загружена (т.е., работа с ней уже велась). Если таблица не была загружена, функция возвращает пустое значение.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.CopyTitles|CopyTitles]]&lt;br /&gt;
|form={{Grey|Table.}}'''CopyTitles'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция выполняет копирование колонтитулов из таблицы-шаблона в текущую таблицу. В момент копирования тексты колонтитулов, являющиеся шаблонами, будут превращены в результаты их вычисления.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.CopyByX|CopyByX]]&lt;br /&gt;
|form={{Grey|Table.}}'''CopyByX'''(''&amp;lt;Указание на область таблицы-шаблона (STRING)&amp;gt;''{{Optional|,&amp;lt;Перейти на новую строку до добавления области (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Не производить изменения размеров столбцов или строк (INT)&amp;gt;{{Default|{{Eq}}0}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция выполняет копирование указанной области ячеек и объектов, находящихся внутри этой области из таблицы-шаблона в текущую таблицу, начиная с ячейки, заданной атрибутами [[Table.CurPutX|CurPutX]] и [[Table.CurPutY|CurPutY]]. В момент копирования тексты и значения ячеек и объектов, являющиеся шаблонами, будут превращены в результаты их вычисления. Если третий аргумент равен 1, до начала копирования, функция переводит курсор копирования в левый столбик и производит сдвиг курсора по вертикали (размер сдвига по вертикали определяется высотой копируемой области). После окончания копирования функция переводит курсор копирования вправо на ширину области копирования. Если четвертый аргумент равен 1, функция не будет изменять размеры строк или столбцов в соответствии с размерами строк и столбцов копируемой области, однако, при копировании текста в ячейки, автоматически рассчитываемые размеры строк или столбцов по-прежнему будут изменены, если это необходимо. После копирования любого визуального объекта, функция вызывает событие [[OnFinishCopyObject]], если оно существует в текущем или глобальном модуле.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.CopyByY|CopyByY]]&lt;br /&gt;
|form={{Grey|Table.}}'''CopyByY'''(''&amp;lt;Указание на область таблицы-шаблона (STRING)&amp;gt;''{{Optional|,&amp;lt;Перейти на новый столбец до добавления области (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Не производить изменения размеров столбцов или строк (INT)&amp;gt;{{Default|{{Eq}}0}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция выполняет копирование указанной области ячеек и объектов, находящихся внутри этой области из таблицы-шаблона в текущую таблицу, начиная с ячейки, заданной атрибутами [[Table.CurPutX|CurPutX]] и [[Table.CurPutY|CurPutY]]. В момент копирования тексты и значения ячеек и объектов, являющиеся шаблонами, будут превращены в результаты их вычисления. Если третий аргумент равен 1, до начала копирования, функция переводит курсор копирования на первую строку и производит сдвиг курсора по горизонтали (размер сдвига по горизонтали определяется шириной копируемой области). После окончания копирования функция переводит курсор копирования вниз на высоту области копирования. Если четвертый аргумент равен 1, функция не будет изменять размеры строк или столбцов в соответствии с размерами строк и столбцов копируемой области, однако, при копировании текста в ячейки, автоматически рассчитываемые размеры строк или столбцов по-прежнему будут изменены, если это необходимо. После копирования любого визуального объекта, функция вызывает событие [[OnFinishCopyObject]], если оно существует в текущем или глобальном модуле.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.RecalcColumnWidth|RecalcColumnWidth]]&lt;br /&gt;
|form={{Grey|Table.}}'''RecalcColumnWidth'''(''&amp;lt;Столбец начала пересчета (INT)&amp;gt;''{{Optional|,&amp;lt;Количество пересчитываемых столбцов (INT)&amp;gt;{{Default|{{Eq}}1}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция пересчитывает ширину указанных столбцов, если их ширина рассчитывается автоматически.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.RecalcLineHeight|RecalcLineHeight]]&lt;br /&gt;
|form={{Grey|Table.}}'''RecalcLineHeight'''(''&amp;lt;Строка начала пересчета (INT)&amp;gt;''{{Optional|,&amp;lt;Количество пересчитываемых строк (INT)&amp;gt;{{Default|{{Eq}}1}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция пересчитывает высоту указанных строк, если их высота рассчитывается автоматически.&lt;br /&gt;
}}&lt;br /&gt;
{{function footer}}&lt;br /&gt;
&lt;br /&gt;
== Атрибуты и функции вспомогательных объектов (Table.Options, Table.Printing и т.п.) ==&lt;br /&gt;
Данный раздел содержит функции, применяемые к подчиненным объектам, связанным с основным объектом таблицы. Данные группа объектов имеет тип ''Table.Options'' и включает следующие объекты:&lt;br /&gt;
* Объект визуального выделения ячеек таблицы&lt;br /&gt;
* Объект списка выделенных визуальных элементов (объектов) таблицы&lt;br /&gt;
* Объект работы с визуальными уровнями таблицы&lt;br /&gt;
* Объект общих настроек таблицы&lt;br /&gt;
* Объект работы с разбиениями таблицы на отдельные страницы при печати&lt;br /&gt;
* Объект настройки параметров печати, полей окружения страницы и колонтитулов&lt;br /&gt;
* Объект работы с со строками или столбцами таблицы, выводящимися на каждой странице&lt;br /&gt;
{{function header}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Selection|Selection]]&lt;br /&gt;
|form={{Grey|Table.}}'''Selection'''():''&amp;lt;Объект выделения таблицы (TABLE.OPTIONS)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция возвращает объект текущего выделения ячеек. С объектом можно вызывать функции, типа [[Table.Selection.Add|Add]] и пр.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Selection.Count|Count]]&lt;br /&gt;
|form={{Grey|Table.Selection.}}'''Count'''():''&amp;lt;Количество областей визуального выделения (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция возвращает количество областей визуального выделения в таблице. Выделение не удаляется даже если пользователь выберет визуальный объект. При выделении объекта, выделение ячеек остается, но будет скрыто. Чтобы узнать, что выделено в данный момент, можно использовать атрибут [[Table.SelectionMode|SelectionMode]]. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Selection.Add|Add]]&lt;br /&gt;
|form={{Grey|Table.Selection.}}'''Add'''(''&amp;lt;Левый столбец выделения (INT)&amp;gt;'',''&amp;lt;Верхняя строка выделения (INT)&amp;gt;'',''&amp;lt;Правый столбец выделения (INT)&amp;gt;'',''&amp;lt;Нижняя строка выделения (INT)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция добавляет к визуально выделенным областям еще одну заданную область.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Selection.Delete|Delete]]&lt;br /&gt;
|form={{Grey|Table.Selection.}}'''Delete'''(''&amp;lt;Индекс области выделения (INT)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция удаляет область визуального выделения с указанным индексом. Первая область выделения имеет индекс 1.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Selection.Get|Get]]&lt;br /&gt;
|form={{Grey|Table.Selection.}}'''Get'''(''&amp;lt;Индекс области выделения (INT)&amp;gt;'',''&amp;lt;Тип границы выделения (INT)&amp;gt;''):''&amp;lt;Столбец или строка выделения (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция получает строку или столбец визуального выделения с указанным индексом.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Selection.GetArea|GetArea]]&lt;br /&gt;
|form={{Grey|Table.Selection.}}'''GetArea'''(''&amp;lt;Индекс области выделения (INT)&amp;gt;'',{{ByRef|&amp;lt;Левый столбец выделения (INT)&amp;gt;,&amp;lt;Верхняя строка выделения (INT)&amp;gt;,&amp;lt;Правый столбец выделения (INT)&amp;gt;,&amp;lt;Нижняя строка выделения (INT)&amp;gt;}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция получает координаты визуального выделения с указанным индексом.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Selection.Clear|Clear]]&lt;br /&gt;
|form={{Grey|Table.Selection.}}'''Clear'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция удаляет все области выделения; остается одна область, совпадающая с положением визуального курсора.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.SelectedObjects|SelectedObjects]]&lt;br /&gt;
|form={{Grey|Table.}}'''SelectedObjects'''():''&amp;lt;Выделенные визуальные объекты таблицы (TABLE.OPTIONS)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция возвращает объект выделенных визуальных объектов таблицы. С объектом можно вызывать функции, типа [[Table.SelectedObjects.Get|Get]] и пр.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.SelectedObjects.Count|Count]]&lt;br /&gt;
|form={{Grey|Table.SelectedObjects.}}'''Count'''():''&amp;lt;Количество выделенных визуальных объектов (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция возвращает количество выделенных визуальных объектов в таблице. Чтобы узнать, что выделено в данный момент, можно использовать атрибут [[Table.SelectionMode|SelectionMode]]. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.SelectedObjects.Add|Add]]&lt;br /&gt;
|form={{Grey|Table.SelectedObjects.}}'''Add'''(''&amp;lt;Индекс добавляемого к выделенным объекта (INT)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция добавляет к выделенным в данный момент объектам указанный по индексу объект. Если до момента вызова функции был активен режим выделения ячеек, после вызова функции активируется режим выделения визуальных объектов с единственным выбранным объектом.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.SelectedObjects.Delete|Delete]]&lt;br /&gt;
|form={{Grey|Table.SelectedObjects.}}'''Delete'''(''&amp;lt;Индекс исключаемого из выделения объекта (INT)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция исключает из выделенных в данный момент объектов указанный по индексу объект.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.SelectedObjects.Get|Get]]&lt;br /&gt;
|form={{Grey|Table.SelectedObjects.}}'''Get'''(''&amp;lt;Индекс выделенного объекта (INT)&amp;gt;''):''&amp;lt;Визуальный объект (TABLE.OBJECT&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция получает визуальный объект таблицы по индексу в массиве выделенных в данный момент объектов&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.SelectedObjects.Clear|Clear]]&lt;br /&gt;
|form={{Grey|Table.SelectedObjects.}}'''Clear'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция исключает все выделенные объекты из массива выделенных объектов и активирует режим выделения ячеек.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Levels|Levels]]&lt;br /&gt;
|form={{Grey|Table.}}'''Levels'''({{Optional|&amp;lt;Тип уровня (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Индекс уровня (INT)&amp;gt;,&amp;lt;Индекс дочернего уровня (INT)&amp;gt;...}}):''&amp;lt;Визуальные уровни таблицы (TABLE.OPTIONS)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция возвращает объект визуальных уровней таблицы. Уровни используются для выделения групп столбцов или строк таблицы. Уровни можно закрывать или открыть. Если уровень закрыт, строки или столбцы, входящие в него (кроме основной строки/столбца) будут скрыты. Уровни могут быть вложенными друг в друга. С объектом можно вызывать функции, типа [[Table.Levels.Open|Open]] и пр. Функция содержит указание на конкретный уровень (если заданы индексы), после чего к нему можно добавить дочерние уровни, либо указание на корневой уровень (если индексы не заданы).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Levels.Child|Child]]&lt;br /&gt;
|form={{Grey|Table.Levels.}}'''Child'''(''&amp;lt;Индекс уровня (INT)&amp;gt;''):''&amp;lt;Объект вложенного уровня по его индексу (TABLE.OPTIONS)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция получает объект уровня, вложенного в текущий, по его индексу. Индексация начинается с единицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Levels.Parent|Parent]]&lt;br /&gt;
|form={{Grey|Table.Levels.}}'''Parent'''():''&amp;lt;Объект уровня, в который вложен данный (TABLE.OPTIONS)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция получает уровень, в который вложен данный. Если функция вызывается с объектом верхнего уровня, она возвращает пустое значение.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Levels.Index|Index]]&lt;br /&gt;
|form={{Grey|Table.Levels.}}'''Index'''():''&amp;lt;Индекс текущего уровня внутри родительского (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция получает индекс текущего уровня относительно родительского уровня. Индексация начинается с единицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Levels.Add|Add]]&lt;br /&gt;
|form={{Grey|Table.Levels.}}'''Add'''(''&amp;lt;Направление уровня (INT)&amp;gt;'',''&amp;lt;Начальная позиция уровня (INT)&amp;gt;'',''&amp;lt;Конечная позиция уровня (INT)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция добавляет визуальный уровень к текущему, либо к одному из детей текущего уровня, если начальная и конечная позиции располагаются полностью внутри дочернего уровня.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Levels.Delete|Delete]]&lt;br /&gt;
|form={{Grey|Table.Levels.}}'''Delete'''({{Optional|&amp;lt;Начальная позиция (INT)&amp;gt;,&amp;lt;Конечная позиция (INT)&amp;gt;,&amp;lt;Рекурсивно удалить дочерние уровни (INT)&amp;gt;{{Default|{{Eq}}1}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция удаляет указанные с помощью границ визуальные уровни, если необходимо, со всеми подчиненными уровнями. Если текущий объект указывает на существующий, а не корневой уровень, аргументы можно опустить и функция удалит текущей уровень со всеми его подчиненными подуровнями.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Levels.Count|Count]]&lt;br /&gt;
|form={{Grey|Table.Levels.}}'''Count'''():''&amp;lt;Количество дочерних уровней (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция получает общее количество уровней, дочерних по отношению к данному.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Levels.Beg|Beg]]&lt;br /&gt;
|form={{Grey|Table.Levels.}}'''Beg''':''&amp;lt;Начальная позиция текущего уровня (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает начальную позицию текущего уровня, функция не может применяться для корневого уровня (не имеющего видимый переключатель в таблице)&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Levels.End|End]]&lt;br /&gt;
|form={{Grey|Table.Levels.}}'''End''':''&amp;lt;Конечная позиция текущего уровня (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает конечную позицию текущего уровня, функция не может применяться для корневого уровня (не имеющего видимый переключатель в таблице)&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Levels.IsClosed|IsClosed]]&lt;br /&gt;
|form={{Grey|Table.Levels.}}'''IsClosed''':''&amp;lt;Текущий уровень закрыт (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает статус, открыт ли текущий уровень, функция не может применяться для корневого уровня (не имеющего видимый переключатель в таблице)&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Levels.Open|Open]]&lt;br /&gt;
|form={{Grey|Table.Levels.}}'''Open'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция открывает текущий уровень. При применении функции к верхнему уровню, она открывает все уровни таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Levels.Close|Close]]&lt;br /&gt;
|form={{Grey|Table.Levels.}}'''Close'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция закрывает текущий уровень. При применении функции к верхнему уровню, она закрывает все уровни таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Options|Options]]&lt;br /&gt;
|form={{Grey|Table.}}'''Options''':''&amp;lt;Объект установок таблицы (TABLE.OPTIONS)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает объект установок таблицы. С объектом можно вызывать функции, типа [[Table.Options.FixedLine|FixedLine]] и пр.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Options.ShowGrid|ShowGrid]]&lt;br /&gt;
|form={{Grey|Table.Options.}}'''ShowGrid''':''&amp;lt;Показывать сетку редактирования (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут возвращает или изменяет режим отображения сетки редактирования в таблице.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Options.ShowCaptions|ShowCaptions]]&lt;br /&gt;
|form={{Grey|Table.Options.}}'''ShowCaptions''':''&amp;lt;Показывать заголовки строк и столбцов (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут возвращает или изменяет режим отображения заголовков строк и столбцов в таблице.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Options.FixedLine|FixedLine]]&lt;br /&gt;
|form={{Grey|Table.Options.}}'''FixedLine''':''&amp;lt;Закрепить на экране указанное количество строк (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут возвращает или изменяет количество строк, закрепленных на экране. При сдвиге отображаемого поля таблицы закрепленные строки останутся видимыми. По умолчанию этот атрибут равен 0 (нет закрепленных строк).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Options.FixedColumn|FixedColumn]]&lt;br /&gt;
|form={{Grey|Table.Options.}}'''FixedColumn''':''&amp;lt;Закрепить на экране указанное количество столбцов (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут возвращает или изменяет количество столбцов, закрепленных на экране. При сдвиге отображаемого поля таблицы закрепленные столбцы останутся видимыми. По умолчанию этот атрибут равен 0 (нет закрепленных столбцов).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Options.GroupsVisible|GroupsVisible]]&lt;br /&gt;
|form={{Grey|Table.Options.}}'''GroupsVisible''':''&amp;lt;Видимость группировок таблиц-шаблонов (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут возвращает или изменяет режим отображения наименований группировок, используемых в таблицах-шаблонах для получения областей таблиц по наименованиям.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Options.LevelsVisible|LevelsVisible]]&lt;br /&gt;
|form={{Grey|Table.Options.}}'''LevelsVisible''':''&amp;lt;Видимость уровней группировок (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут возвращает или изменяет режим отображения уровней группировок таблицы. Уровни используются для группировки строк или столбцов, каждый уровень может быть закрыт (тогда его столбцы или строки не будут отображаться на экране), либо открыт. Уровни могут быть вложенными.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Options.Scrollable|Scrollable]]&lt;br /&gt;
|form={{Grey|Table.Options.}}'''Scrollable''':''&amp;lt;Разрешить сдвиг отображаемой части таблицы (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут возвращает или изменяет режим разрешения сдвига отображаемой части таблицы. При запрете сдвига на экране будет отображаться только верхняя левая часть таблицы, сдвинуть ее вверх или влево будет невозможно.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Options.IsChanged|IsChanged]]&lt;br /&gt;
|form={{Grey|Table.Options.}}'''IsChanged''':''&amp;lt;Производились ли изменения в таблице (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут возвращает или изменяет признак того, были ли произведены визуальные изменения в таблице с момента ее предыдущего сохранения. Для таблицы, выведенных на экран, признак виден в заголовке таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.PageBreaks|PageBreaks]]&lt;br /&gt;
|form={{Grey|Table.}}'''PageBreaks''':''&amp;lt;Объект разбиения на страницы (TABLE.OPTIONS)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает объект разбиения таблицы на страницы. Таблицу можно разбить на страницы в нужных строках и нужных столбцах, разбитые области будут выводиться отдельными страницами при печати, даже если активна установка печати &amp;quot;помещать на одной странице&amp;quot;. С объектом можно вызывать функции, типа [[Table.PageBreaks.Add|Add]] и пр.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.PageBreaks.Add|Add]]&lt;br /&gt;
|form={{Grey|Table.PageBreaks.}}'''Add'''({{Optional|&amp;lt;Строка разбиения (INT)&amp;gt;}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция позволяет добавить новое разбиение страницы по горизонтали.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.PageBreaks.AddVertical|AddVertical]]&lt;br /&gt;
|form={{Grey|Table.PageBreaks.}}'''AddVertical'''({{Optional|&amp;lt;Столбец разбиения (INT)&amp;gt;''}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция позволяет добавить новое разбиение страницы по вертикали.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.PageBreaks.Count|Count]]&lt;br /&gt;
|form={{Grey|Table.PageBreaks.}}'''Count'''({{Optional|&amp;lt;Вертикальные разбиения (INT)&amp;gt;{{Eq}}1}}):''&amp;lt;Количество разбиений на страницы (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут отдает количество (горизонтальных или вертикальных) разбиений на страницы в данной таблице.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.PageBreaks.Delete|Delete]]&lt;br /&gt;
|form={{Grey|Table.PageBreaks.}}'''Delete'''(''&amp;lt;Индекс разбиения (INT)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция удаляет разбиение с указанным индексом.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.PageBreaks.GetPosition|GetPosition]]&lt;br /&gt;
|form={{Grey|Table.PageBreaks.}}'''GetPosition'''(''&amp;lt;Индекс разбиения (INT)&amp;gt;''{{Optional|,&amp;lt;Вертикальные разбиения (INT)&amp;gt;{{Eq}}1}}):''&amp;lt;Позиция разбиения (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает столбец (если разбиение горизонтальное) или строку разбиения (если разбиение вертикальное) по индексу разбиения.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing|Printing]]&lt;br /&gt;
|form={{Grey|Table.}}'''Printing''':''&amp;lt;Объект установок печати (TABLE.OPTIONS)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает объект установок печати таблицы. С объектом можно вызывать функции, типа [[Table.Printing.Printer|Printer]] и пр.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.Orientation|Orientation]]&lt;br /&gt;
|form={{Grey|Table.Printing.}}'''Orientation''':''&amp;lt;Ориентация листа при печати (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут получает или устанавливает ориентацию листа при печати (0 -- в виде портрета, 1 -- в виде ландшафта).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.ScaleMode|ScaleMode]]&lt;br /&gt;
|form={{Grey|Table.Printing.}}'''ScaleMode''':''&amp;lt;Режим масштабирования при печати (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут получает или устанавливает режим масштабирования страниц при печати. Возможные значения: 0 -- сжимать таблицу до ширины листа, 1 -- сжимать или увеличивать таблицу до ширины листа, 2 -- использовать заданный масштаб при печати страницы (см. [[Table.Printing.Scale|Scale]]), 3 -- сжимать или увеличивать таблицу, чтобы она умещалась на одном листе. Важно понимать, что в таблицах, где использовано разбиение на страницы (см. [[Table.PageBreaks|PageBreaks]]), сжатие и расширение (в т.ч. размещение на одном листе) происходит для каждой страницы, полученной в результате разбиения.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.Scale|Scale]]&lt;br /&gt;
|form={{Grey|Table.Printing.}}'''Scale''':''&amp;lt;Масштаб в режиме печати с заданным масштабом (REAL)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут получает или устанавливает масштаб печати в режиме печати с заданным масштабом. Масштаб устанавливается в процентах и может быть вещественным числом. По умолчанию этот атрибут равен 100.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.Printer|Printer]]&lt;br /&gt;
|form={{Grey|Table.Printing.}}'''Printer''':''&amp;lt;Наименование текущего принтера (STRING)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут получает или устанавливает наименование текущего принтера для печати таблицы. Если этому атрибуту присваивается пустая строка, будет использован принтер по умолчанию..&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.Copies|Copies]]&lt;br /&gt;
|form={{Grey|Table.Printing.}}'''Copies''':''&amp;lt;Количество копий при печати (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут получает или устанавливает количество копий при печати таблицы. По умолчанию, этот атрибут равен единице.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.PageOptions|PageOptions]]&lt;br /&gt;
|form={{Grey|Table.Printing.}}'''PageOptions''':''&amp;lt;Дополнительные установки печати (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут получает или устанавливает дополнительные установки страницы. Атрибут имеет тип битовой маски, возможные значения перечислены в статье [[Константы#Константы свойств таблиц|Константы]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.Fields|Fields]]&lt;br /&gt;
|form={{Grey|Table.Printing.}}'''Fields''':''&amp;lt;Объект установок полей таблицы при печати (TABLE.OPTIONS)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает объект установок полей таблицы при печати. С объектом можно вызывать функции, типа [[Table.Printing.Fields.Left|Left]] и пр.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.Fields.Left|Left]]&lt;br /&gt;
|form={{Grey|Table.Printing.Fields.}}'''Left''':''&amp;lt;Ширина левого поля в мм. (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут получает или устанавливает ширину пустого левого поля при печати страницы. По умолчанию ширина поля равна 10 мм.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.Fields.Right|Right]]&lt;br /&gt;
|form={{Grey|Table.Printing.Fields.}}'''Right''':''&amp;lt;Ширина правого поля в мм. (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут получает или устанавливает ширину пустого правого поля при печати страницы. По умолчанию ширина поля равна 10 мм.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.Fields.Up|Up]]&lt;br /&gt;
|form={{Grey|Table.Printing.Fields.}}'''Up''':''&amp;lt;Ширина верхнего поля в мм. (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут получает или устанавливает ширину пустого верхнего поля при печати страницы. По умолчанию ширина поля равна 10 мм. Поле следует до начала верхнего колонтитула и не включается в ширину колонтитула.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.Fields.Down|Down]]&lt;br /&gt;
|form={{Grey|Table.Printing.Fields.}}'''Down''':''&amp;lt;Ширина нижнего поля в мм. (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут получает или устанавливает ширину пустого нижнего поля при печати страницы. По умолчанию ширина поля равна 10 мм. Поле следует после нижнего колонтитула и не включается в ширину колонтитула.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.Titles|Titles]]&lt;br /&gt;
|form={{Grey|Table.Printing.}}'''Titles''':''&amp;lt;Объект установок колонтитулов таблицы при печати (TABLE.OPTIONS)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает объект установок колонтитулов таблицы при печати. С объектом можно вызывать функции, типа [[Table.Printing.Titles.Up|Up]] и пр.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.Titles.Up|Up]]&lt;br /&gt;
|form={{Grey|Table.Printing.Titles.}}'''Up''':''&amp;lt;Объект установок верхнего колонтитула таблицы при печати (TABLE.OPTIONS)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает объект установок верхнего колонтитула таблицы при печати. С объектом можно вызывать функции, типа [[Table.Printing.Titles.Text|Text]] и пр.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.Titles.Down|Down]]&lt;br /&gt;
|form={{Grey|Table.Printing.Titles.}}'''Down''':''&amp;lt;Объект установок нижнего колонтитула таблицы при печати (TABLE.OPTIONS)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает объект установок нижнего колонтитула таблицы при печати. С объектом можно вызывать функции, типа [[Table.Printing.Titles.Text|Text]] и пр.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.Titles.Size|Size]]&lt;br /&gt;
|form={{Grey|Table.Printing.Titles.&amp;lt;Тип колонтитула&amp;gt;.}}'''Size''':''&amp;lt;Ширина выбранного колонтитула в мм. (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут получает или устанавливает ширину выбранного колонтитула при печати таблицы. По умолчанию ширина колонтитула равна 7 мм.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.Titles.Text|Text]]&lt;br /&gt;
|form={{Grey|Table.Printing.Titles.&amp;lt;Тип колонтитула&amp;gt;.}}'''Text''':''&amp;lt;Текст или шаблон колонтитула (STRING)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут получает или устанавливает текст или шаблон выбранного колонтитула при печати таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.Titles.TextOptions|TextOptions]]&lt;br /&gt;
|form={{Grey|Table.Printing.Titles.&amp;lt;Тип колонтитула&amp;gt;.}}'''TextOptions''':''&amp;lt;Установки форматирования колонтитула (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут получает или устанавливает установки форматирования выбранного колонтитула при печати таблицы. Значение является битовой маской и использует сл. биты: биты 0..1: режим выравнивания по горизонтали, биты 2..3: режим выравнивания по вертикали.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.Titles.Orientation|Orientation]]&lt;br /&gt;
|form={{Grey|Table.Printing.Titles.&amp;lt;Тип колонтитула&amp;gt;.}}'''Orientation''':''&amp;lt;Угол направления текста (REAL)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет угол направления прорисовки текста выбранного колонтитула при печати таблицы. По умолчанию это значение равно 0 (горизонтальный текст).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.Titles.TitleOptions|TitleOptions]]&lt;br /&gt;
|form={{Grey|Table.Printing.Titles.&amp;lt;Тип колонтитула&amp;gt;.}}'''TitleOptions''':''&amp;lt;Дополнительные установки колонтитула (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут получает или устанавливает дополнительные установки выбранного колонтитула при печати таблицы. Значение является битовой маской и использует сл. биты: бит 0: режим шаблона для текста активен, бит 2: при переносе текста принимать во внимание границы слов.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.Titles.PrintFromPage|PrintFromPage]]&lt;br /&gt;
|form={{Grey|Table.Printing.Titles.&amp;lt;Тип колонтитула&amp;gt;.}}'''PrintFromPage''':''&amp;lt;Начинать печатать колонтитул с указанной страницы (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут получает или устанавливает номер страницы, с которой будет начитать печататься колонтитул. По умолчанию, этот атрибут равен единице.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.Titles.ColorProfile|ColorProfile]]&lt;br /&gt;
|form={{Grey|Table.Printing.Titles.&amp;lt;Тип колонтитула&amp;gt;.}}'''ColorProfile''':''&amp;lt;Шаблон цвета колонтитула (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет номер шаблона цвета выбранного колонтитула таблицы. По умолчанию это значение равно 0 (цвета и стиль форматирования определяется соответствующими атрибутами колонтитула, а не номером шаблона). Номера шаблонов можно найти в [[Номера шаблонов цветов ячеек таблицы|этой статье]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.Titles.BackgroundColor|BackgroundColor]]&lt;br /&gt;
|form={{Grey|Table.Printing.Titles.&amp;lt;Тип колонтитула&amp;gt;.}}'''BackgroundColor''':''&amp;lt;Номер цвета фона колонтитула (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет номер цвета фона выбранного колонтитула таблицы. Система получает цвет по номеру из палитры, для прямого указания цвета используйте атрибут [[Table.Printing.Titles.BackgroundColorRGB|BackgroundColorRGB]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.Titles.BackgroundColorRGB|BackgroundColorRGB]]&lt;br /&gt;
|form={{Grey|Table.Printing.Titles.&amp;lt;Тип колонтитула&amp;gt;.}}'''BackgroundColorRGB''':''&amp;lt;Цвет фона колонтитула (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет цвет фона выбранного колонтитула таблицы по его 24-битному значению. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.Titles.FontColor|FontColor]]&lt;br /&gt;
|form={{Grey|Table.Printing.Titles.&amp;lt;Тип колонтитула&amp;gt;.}}'''FontColor''':''&amp;lt;Номер цвета текста колонтитула (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет номер цвета текста выбранного колонтитула таблицы. Система получает цвет по номеру из палитры, для прямого указания цвета используйте атрибут [[Table.Printing.Titles.FontColorRGB|FontColorRGB]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.Titles.FontColorRGB|FontColorRGB]]&lt;br /&gt;
|form={{Grey|Table.Printing.Titles.&amp;lt;Тип колонтитула&amp;gt;.}}'''FontColorRGB''':''&amp;lt;Цвет текста колонтитула (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет цвет текста выбранного колонтитула таблицы по его 24-битному значению. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.Titles.FontStyle|FontStyle]]&lt;br /&gt;
|form={{Grey|Table.Printing.Titles.&amp;lt;Тип колонтитула&amp;gt;.}}'''FontStyle''':''&amp;lt;Стиль текста колонтитула (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет стиль текста выбранного колонтитула таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.Titles.FontSize|FontSize]]&lt;br /&gt;
|form={{Grey|Table.Printing.Titles.&amp;lt;Тип колонтитула&amp;gt;.}}'''FontSize''':''&amp;lt;Размер шрифта колонтитула (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет размер шрифта текста выбранного колонтитула таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.Titles.Font|Font]]&lt;br /&gt;
|form={{Grey|Table.Printing.Titles.&amp;lt;Тип колонтитула&amp;gt;.}}'''Font''':''&amp;lt;Наименование шрифта текста колонтитула (STRING)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет наименование шрифта текста выбранного колонтитула таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.ContinualLines|ContinualLines]]&lt;br /&gt;
|form={{Grey|Table.Printing.}}'''ContinualLines''':''&amp;lt;Объект установок строк таблицы, печатающихся на каждой странице (TABLE.OPTIONS)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает объект установок строк таблицы, выводящихся на печать на каждой странице. К примеру, для таблиц данных, которые занимают несколько страниц при печати, удобно печатать заголовок на каждой новой страницы до момента, когда таблица закончится. С объектом можно вызывать функции, типа [[Table.Printing.ContinualPrinting.From|From]] и пр.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.ContinualColumns|ContinualColumns]]&lt;br /&gt;
|form={{Grey|Table.Printing.}}'''ContinualColumns''':''&amp;lt;Объект установок столбцов таблицы, печатающихся на каждой странице (TABLE.OPTIONS)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает объект установок столбцов таблицы, выводящихся на печать на каждой странице. С объектом можно вызывать функции, типа [[Table.Printing.ContinualPrinting.From|From]] и пр.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.ContinualPrinting.From|From]]&lt;br /&gt;
|form={{Grey|Table.Printing.&amp;lt;Тип объекта&amp;gt;.}}'''From''':''&amp;lt;Строка или столбец начала области (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или устанавливает строку или столбец, с которой начинается область, печатающаяся на каждой странице.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.ContinualPrinting.To|To]]&lt;br /&gt;
|form={{Grey|Table.Printing.&amp;lt;Тип объекта&amp;gt;.}}'''To''':''&amp;lt;Строка или столбец окончания области (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или устанавливает строку или столбец, на которой заканчивается область, печатающаяся на каждой странице. Копия области будет выведена на следующей по горизонтали или вертикали странице (в зависимости от типа объекта).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.ContinualPrinting.EndCell|EndCell]]&lt;br /&gt;
|form={{Grey|Table.Printing.&amp;lt;Тип объекта&amp;gt;.}}'''EndCell''':''&amp;lt;Строка или столбец, после которого, заданная область, печатавшаяся на каждой странице, больше не выводится (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или устанавливает строку или столбец, после вывода на печать которых, заданная область, печатавшаяся на каждой странице, больше не выводится.&lt;br /&gt;
}}&lt;br /&gt;
{{function footer}}&lt;br /&gt;
&lt;br /&gt;
== Атрибуты и функции объекта области таблицы (Table.Area) ==&lt;br /&gt;
Данный раздел содержит функции, применяемые к объекту области таблицы. Объект области позволяет получить или изменять параметры ячеек, входящих в нее. При создании объекта, не производится копирования области в памяти, а создается только ссылка на нее.&lt;br /&gt;
{{function header}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area|Area]]&lt;br /&gt;
|form={{Grey|Table.}}'''Area'''(''&amp;lt;Левый столбец области (INT)&amp;gt;'',''&amp;lt;Верхняя строка области (INT)&amp;gt;''{{Optional|,&amp;lt;Правый столбец области (INT)&amp;gt;,&amp;lt;Нижняя строка области (INT)&amp;gt;}}):''&amp;lt;Объект области таблицы (TABLE.AREA)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает объект области таблицы. С объектом можно вызывать функции, типа [[Table.Area.Text|Text]] и пр. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.Text|Text]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''Text''':''&amp;lt;Текст ячеек области (STRING)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет текст ячеек области таблицы. Текст получается для крайней левой верхней ячейки области, и устанавливается для всех ячеек таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.Value|Value]], '''Formula'''&lt;br /&gt;
|form={{Grey|Table.Area.}}'''Value''':''&amp;lt;Значение ячеек таблицы&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет значение, ассоциированное с ячейками области таблицы. Значение получается для крайней левой верхней ячейки области, и устанавливается для всех ячеек таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.ValueTemplate|ValueTemplate]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''ValueTemplate''':''&amp;lt;Формула шаблона ячейки (STRING)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет текст формулы шаблона, ассоциированной с ячейками области таблицы. Значение получается для крайней левой верхней ячейки области, и устанавливается для всех ячеек таблицы. Формула шаблона использует тоже самое место хранения, что и значение ячейки. Для ячейки может быть задана либо формула, либо значение.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.WrappingMode|WrappingMode]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''WrappingMode''':''&amp;lt;Режим переноса текста (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет значение режима переноса текста ячеек области таблицы. Значение получается для крайней левой верхней ячейки области, и устанавливается для всех ячеек таблицы. Значение 0 задает режим переноса с соблюдением границы слов, 1 -- без соблюдения.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.IsTemplate|IsTemplate]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''IsTemplate''':''&amp;lt;Является ли текст формулой шаблона (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет признак того, является ли текст ячеек области таблицы шаблоном (шаблон выполняется при копировании области в другую таблицу). Значение признака получается для крайней левой верхней ячейки области, и устанавливается для всех ячеек таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.IsValueTemplate|IsValueTemplate]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''IsValueTemplate''':''&amp;lt;Является ли значение формулой шаблона (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет признак того, является ли значения ячеек области таблицы шаблоном (шаблон выполняется при копировании области в другую таблицу). Значение признака получается для крайней левой верхней ячейки области, и устанавливается для всех ячеек таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.HAlign|HAlign]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''HAlign''':''&amp;lt;Выравнивание по горизонтали (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет режим выравнивания текста ячеек области таблицы по горизонтали. Значение признака получается для крайней левой верхней ячейки области, и устанавливается для всех ячеек таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.VAlign|VAlign]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''VAlign''':''&amp;lt;Выравнивание по вертикали (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет режим выравнивания текста ячеек области таблицы по вертикали. Значение признака получается для крайней левой верхней ячейки области, и устанавливается для всех ячеек таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.ClipMode|ClipMode]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''ClipMode''':''&amp;lt;Контроль границы ячейки (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет режим контроля выхода за границу ячейки текста ячеек области таблицы. Значение признака получается для крайней левой верхней ячейки области, и устанавливается для всех ячеек таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.RedNegative|RedNegative]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''RedNegative''':''&amp;lt;Отрицательные красным (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет режим выделения красным текста ячеек области таблицы, когда они содержат отрицательные числа. Значение признака получается для крайней левой верхней ячейки области, и устанавливается для всех ячеек таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.Protected|Protected]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''Protected''':''&amp;lt;Защита от изменения в режиме просмотра (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет режим защиты ячеек области таблицы от изменения в режиме просмотра (игнорируется в режиме редактирования и запрета изменений). По умолчанию признак защиты установлен. Значение признака получается для крайней левой верхней ячейки области, и устанавливается для всех ячеек таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.Orientation|Orientation]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''Orientation''':''&amp;lt;Угол направления текста (REAL)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет угол направления прорисовки текста ячеек области таблицы. По умолчанию это значение равно 0 (горизонтальный текст). Значение признака получается для крайней левой верхней ячейки области, и устанавливается для всех ячеек таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.ParentCell|ParentCell]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''ParentCell''':''&amp;lt;Тип объединения ячейки (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает тип объединения, связанный с крайней левой верхней ячейкой области таблицы. Получаемый атрибут может принимать следующие значения: 0 -- ячейка не участвует в объединении ячеек, 1 -- это крайняя левая ячейка области объединения (основная ячейка, из свойств которой используются цвета, шрифт, текст и пр. для всей области), 2 -- эта ячейка участвует в объединении, как подчиненная ячейка.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.ExtentX|ExtentX]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''ExtentX''':''&amp;lt;Ссылка по горизонтали на основную ячейку объединения (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Для крайней левой верхней ячейкой области атрибут возвращает расстояние в ячейках по горизонтали от текущей ячейки до основной ячейки объединения (отрицательное число); количество ячеек в области объединения по горизонтали, если это основная ячейка (см. [[Table.Area.ParentCell|ParentCell]]); либо 0, если ячейка не участвует в объединении ячеек.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.ExtentY|ExtentY]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''ExtentY''':''&amp;lt;Ссылка по вертикали на основную ячейку объединения (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Для крайней левой верхней ячейкой области атрибут возвращает расстояние в ячейках по вертикали от текущей ячейки до основной ячейки объединения (отрицательное число); количество ячеек в области объединения по вертикали, если это основная ячейка (см. [[Table.Area.ParentCell|ParentCell]]); либо 0, если ячейка не участвует в объединении ячеек.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.IndentX|IndentX]], '''Indent'''&lt;br /&gt;
|form={{Grey|Table.Area.}}'''IndentX''':''&amp;lt;Отступ текста по горизонтали (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет отступ текста по горизонтали от границы ячеек области таблицы. По умолчанию это значение равно 0 (отступ отсутствует). Значение признака получается для крайней левой верхней ячейки области, и устанавливается для всех ячеек таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.IndentY|IndentY]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''IndentY''':''&amp;lt;Отступ текста по вертикали (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет отступ текста по вертикали от границы ячеек области таблицы. По умолчанию это значение равно 0 (отступ отсутствует). Значение признака получается для крайней левой верхней ячейки области, и устанавливается для всех ячеек таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.ColorProfile|ColorProfile]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''ColorProfile''':''&amp;lt;Шаблон цвета ячейки (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет номер шаблона цвета ячеек области таблицы. По умолчанию это значение равно 0 (цвета и стиль форматирования определяется соответствующими атрибутами ячейки, а не номером шаблона). Номера шаблонов можно найти в [[Номера шаблонов цветов ячеек таблицы|этой статье]]. Значение признака получается для крайней левой верхней ячейки области, и устанавливается для всех ячеек таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.BackgroundColor|BackgroundColor]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''BackgroundColor''':''&amp;lt;Номер цвета фона ячейки (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет номер цвета фона ячеек области таблицы. Система получает цвет по номеру из палитры, для прямого указания цвета используйте атрибут [[Table.Area.BackgroundColorRGB|BackgroundColorRGB]]. Значение признака получается для крайней левой верхней ячейки области, и устанавливается для всех ячеек таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.BackgroundColorRGB|BackgroundColorRGB]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''BackgroundColorRGB''':''&amp;lt;Цвет фона ячейки (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет цвет фона ячеек области таблицы по его RGB значению. Значение признака получается для крайней левой верхней ячейки области, и устанавливается для всех ячеек таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.FontColor|FontColor]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''FontColor''':''&amp;lt;Номер цвета текста ячейки (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет номер цвета текста ячеек области таблицы. Система получает цвет по номеру из палитры, для прямого указания цвета используйте атрибут [[Table.Area.FontColorRGB|FontColorRGB]]. Значение признака получается для крайней левой верхней ячейки области, и устанавливается для всех ячеек таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.FontColorRGB|FontColorRGB]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''FontColorRGB''':''&amp;lt;Цвет текста ячейки (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет цвет текста ячеек области таблицы по его RGB значению. Значение признака получается для крайней левой верхней ячейки области, и устанавливается для всех ячеек таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.FrameColor|FrameColor]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''FrameColor''':''&amp;lt;Номер цвета границы ячейки (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет номер цвета границы ячеек области таблицы. Система получает цвет по номеру из палитры, для прямого указания цвета используйте атрибут [[Table.Area.FrameColorRGB|FrameColorRGB]]. Значение признака получается для крайней левой верхней ячейки области, и устанавливается для всех ячеек таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.FrameColorRGB|FrameColorRGB]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''FrameColorRGB''':''&amp;lt;Цвет границы ячейки (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет цвет границы ячеек области таблицы по его RGB значению. Значение признака получается для крайней левой верхней ячейки области, и устанавливается для всех ячеек таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.FontStyle|FontStyle]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''FontStyle''':''&amp;lt;Стиль текста ячейки (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет стиль текста ячеек области таблицы. Значение признака получается для крайней левой верхней ячейки области, и устанавливается для всех ячеек таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.FontSize|FontSize]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''FontSize''':''&amp;lt;Размер шрифта текста ячейки (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет размер шрифта текста ячеек области таблицы. Значение признака получается для крайней левой верхней ячейки области, и устанавливается для всех ячеек таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.Font|Font]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''Font''':''&amp;lt;Наименование шрифта текста ячейки (STRING)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет наименование шрифта текста ячеек области таблицы. Значение признака получается для крайней левой верхней ячейки области, и устанавливается для всех ячеек таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.Frame|Frame]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''Frame''':''&amp;lt;Рисунок и наличие 4-х границ вокруг ячейки (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет рисунок и наличие четырех границ вокруг каждой ячейки из области таблицы. Значение представляет собой битовую маску, где на каждую из границ используется по 4 бита. По умолчанию, это значение равно 0 (ячейка не окружена границами). Значение признака получается для крайней левой верхней ячейки области, и устанавливается для всех ячеек таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.RowAutoSize|RowAutoSize]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''RowAutoSize''':''&amp;lt;Признак автоматического изменения высоты строки (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет признак автоматического изменения высоты строк ячеек области таблицы. Значение признака получается для строки верхних ячеек области, и устанавливается для всех строк области таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.ColAutoSize|ColAutoSize]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''ColAutoSize''':''&amp;lt;Признак автоматического изменения ширины столбца (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет признак автоматического изменения ширины столбцов ячеек области таблицы. Значение признака получается для столбца левых ячеек области, и устанавливается для всех столбцов области таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.RowHeight|RowHeight]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''RowHeight''':''&amp;lt;Высота строки в пикселях (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет высоту строк ячеек области таблицы. Значение признака получается для строки верхних ячеек области, и устанавливается для всех строк области таблицы. При установке этого атрибута, атрибут [[Table.Area.RowAutoSize|RowAutoSize]] автоматически принимает нулевое значение.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.ColWidth|ColWidth]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''ColWidth''':''&amp;lt;Ширина столбца в пикселях (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет ширину столбцов ячеек области таблицы. Значение признака получается для столбца левых ячеек области, и устанавливается для всех столбцов области таблицы. При установке этого атрибута, атрибут [[Table.Area.ColAutoSize|ColAutoSize]] автоматически принимает нулевое значение.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.ContinuousRegionX|ContinuousRegionX]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''ContinuousRegionX''':''&amp;lt;Признак неразрывности горизонтального региона (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет признак неразрывности при печати горизонтального региона ячеек области таблицы. При установке признака можно использовать значения 0 (регион теряет все свойства неразрывности) или 1 (регион становится неразрывным). При чтении, возможны следующие значения: 0 -- в регионе отсутствуют неразрывные диапазоны, 1 -- весь регион представляет собой неразрывный диапазон, 2 -- регион содержит определенное количество неразрывных диапазонов или их частей. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.ContinuousRegionY|ContinuousRegionY]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''ContinuousRegionY''':''&amp;lt;Признак неразрывности вертикального региона (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет признак неразрывности при печати вертикального региона ячеек области таблицы. При установке признака можно использовать значения 0 (регион теряет все свойства неразрывности) или 1 (регион становится неразрывным). При чтении, возможны следующие значения: 0 -- в регионе отсутствуют неразрывные диапазоны, 1 -- весь регион представляет собой неразрывный диапазон, 2 -- регион содержит определенное количество неразрывных диапазонов или их частей. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.Merge|Merge]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''Merge'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция объединяет ячейки области таблицы в один регион объединения. Если с областью граничили или находились внутри области другие регионы объединения, они будут разъединены до выполнения объединения текущей области.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.Demerge|Demerge]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''Demerge'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция разъединяет ячейки области таблицы, это относится ко всем регионам объединения входящим в или граничащим с текущей областью таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.CopyTo|CopyTo]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''CopyTo'''(''&amp;lt;Таблица в которую происходит копирование (TABLE)&amp;gt;'',''&amp;lt;Столбец таблицы для вставки (INT)&amp;gt;'',''&amp;lt;Строка таблицы для вставки (INT)&amp;gt;''{{Optional|,&amp;lt;Копировать также объекты (INT)&amp;gt;{{Default|{{Eq}}1}},&amp;lt;Превращать шаблоны в их значения (INT)&amp;gt;{{Default|{{Eq}}0}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция копирует текущую область в указанную таблицу по начиная с указанной ячейки, таблица результат может также быть текущей таблицей.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.Copy|Copy]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''Copy'''({{Optional|&amp;lt;Копировать также объекты (INT)&amp;gt;{{Default|{{Eq}}1}}}}):''&amp;lt;Копия области в виде новой таблицы (TABLE)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция создает новую таблицу и заполняет ее ячейками текущей области. Область копируется в таблицу начиная с первой верхней левой ячейки.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.Execute|Execute]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''Execute'''({{Optional|&amp;lt;Также находить значения шаблонов для объектов (INT)&amp;gt;{{Default|{{Eq}}1}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция превращает все тексты шаблонов ячеек (и объектов) области в их значения.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.Modify|Modify]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''Modify'''(''&amp;lt;Левый столбец (INT)&amp;gt;'',''&amp;lt;Верхняя строка (INT)&amp;gt;''{{Optional|,&amp;lt;Правый столбец (INT)&amp;gt;,&amp;lt;Нижняя строка (INT)&amp;gt;}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция изменяет размеры и положение текущей области в соответствующей ей таблице. Т.е., действие функции соответствует вызову [[Table.Area|Area]], только на существующем объекте, который после исполнения функции будет указывать на другую область.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.Clear|Clear]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''Clear'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция разъединяет все объединенные ячейки области, очищает весь текст и значения ячеек, стили, границы, цвета и пр. устанавливает в состояние по умолчанию.&lt;br /&gt;
}}&lt;br /&gt;
{{function footer}}&lt;br /&gt;
&lt;br /&gt;
== Атрибуты и функции визуальных объектов таблицы (Table.Object) ==&lt;br /&gt;
Данный раздел содержит функции, применяемые к совокупности или к одному визуальному элементу (объекту) таблицы. Объект позволяет получить или изменять параметры элементов, которые он адресует. Визуальным элементом (объектом), к примеру, может быть рисунок, или текст, добавленные в произвольное место таблицы и имеющие произвольный размер. Такие элементы выводятся на печать и их содержимое закрывает текст ячеек, находящихся непосредственно под ними.&lt;br /&gt;
{{function header}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Objects|Objects]]&lt;br /&gt;
|form={{Grey|Table.}}'''Objects'''({{Optional|&amp;lt;Индекс или наименование определенного объекта (INT,STRING)&amp;gt;}}):''&amp;lt;Визуальный объект таблицы или все визуальные объекты (TABLE.OBJECT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает объект доступа к визуальным объектам таблицы. При указании на определенный визуальный объект, текущим объектом можно пользоваться для изменения его свойств, иначе текущий объект будет указывать на всю совокупность объектов таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.Count|Count]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''Count''':''&amp;lt;Общее количество объектов таблицы (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает общее количество объектов в таблице.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.Type|Type]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''Type''':''&amp;lt;Тип текущего объекта (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает цифровой тип текущего объекта таблицы. Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.Name|Name]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''Name''':''&amp;lt;Наименование текущего объекта (STRING)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет наименование текущего объекта таблицы. Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.Text|Text]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''Text''':''&amp;lt;Текст текущего объекта (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет текст, ассоциированный с текущим объектом таблицы. Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.ValueTemplate|ValueTemplate]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''ValueTemplate''':''&amp;lt;Формула шаблона объекта (STRING)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет текст формулы шаблона, ассоциированной с текущим объектом таблицы. Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте. Формула шаблона использует тоже самое место хранения, что и значение объекта. Для объекта может быть задана либо формула, либо значение. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.Value|Value]], '''Formula'''&lt;br /&gt;
|form={{Grey|Table.Object.}}'''Value''':''&amp;lt;Значение объекта&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет произвольное значение, ассоциированной с текущим объектом таблицы. Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.WrappingMode|WrappingMode]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''WrappingMode''':''&amp;lt;Режим переноса текста (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет значение режима переноса текста текущего объекта таблицы. Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.IsTemplate|IsTemplate]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''IsTemplate''':''&amp;lt;Является ли текст формулой шаблона (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет признак того, является ли текст визуального объекта таблицы шаблоном (шаблон выполняется при копировании области в другую таблицу). Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.IsValueTemplate|IsValueTemplate]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''IsValueTemplate''':''&amp;lt;Является ли значение формулой шаблона (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет признак того, является ли значение визуального объекта таблицы шаблоном (шаблон выполняется при копировании области в другую таблицу). Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.HAlign|HAlign]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''HAlign''':''&amp;lt;Выравнивание по горизонтали (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет режим выравнивания текста визуального объекта таблицы по горизонтали. Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.VAlign|VAlign]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''VAlign''':''&amp;lt;Выравнивание по вертикали (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет режим выравнивания текста визуального объекта таблицы по вертикали. Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.ClipMode|ClipMode]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''ClipMode''':''&amp;lt;Контроль границы для текста объекта (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет режим контроля выхода за границу текста визуального объекта таблицы. Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.RedNegative|RedNegative]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''RedNegative''':''&amp;lt;Отрицательные красным (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет режим выделения красным текста визуального объекта таблицы, когда он содержит отрицательное число. Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.Protected|Protected]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''Protected''':''&amp;lt;Защита от изменения в режиме просмотра (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет режим защиты визуального объекта от изменения в режиме просмотра (игнорируется в режиме редактирования и запрета изменений). По умолчанию признак защиты установлен. Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.Orientation|Orientation]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''Orientation''':''&amp;lt;Угол направления текста объекта (REAL)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет угол направления прорисовки текста визуального объекта таблицы. Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.IsAnchoredPosition|IsAnchoredPosition]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''IsAnchoredPosition''':''&amp;lt;Изменяется ли положение объекта при изменении размеров ячеек (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет признак того, изменяется ли положение объекта при изменении размеров ячеек.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.IsAnchoredSize|IsAnchoredSize]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''IsAnchoredSize''':''&amp;lt;Изменяются ли ширина и высота объекта при изменении размеров ячеек (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет признак того, изменяются ли ширина и высота объекта при изменении размеров ячеек.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.AbsoluteCoordinates|AbsoluteCoordinates]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''AbsoluteCoordinates''':''&amp;lt;Абсолютные координаты объекта (STRING)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет координаты объекта, заданные в абсолютной величине (в точках) от начала таблицы. Возвращаемое значение представляет собой следующий строку: &amp;lt;code&amp;gt;&amp;lt;Координата левой границы&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;
{{function entry&lt;br /&gt;
|name=[[Table.Object.RelativeCoordinates|RelativeCoordinates]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''RelativeCoordinates''':''&amp;lt;Относительные координаты объекта (STRING)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет координаты объекта, заданные в относительных величинах (смещениях ячеек). Возвращаемое значение представляет собой следующий строку: &amp;lt;code&amp;gt;&amp;lt;Столбец левой верхней точки объекта&amp;gt;:&amp;lt;Смещение в столбце&amp;gt;,&amp;lt;Строка левой верхней точки объекта&amp;gt;:&amp;lt;Смещение в строке&amp;gt;,&amp;lt;Столбец правой нижней точки объекта&amp;gt;:&amp;lt;Смещение в столбце&amp;gt;,&amp;lt;Строка правой нижней точки объекта&amp;gt;:&amp;lt;Смещение в строке&amp;gt;&amp;lt;/code&amp;gt;. Смещения задаются как цифровой индекс от 0 до 65535. 0 означает левый край столбца или верхний край строки, 65535 означает самая правая крайняя точка столбца или самая крайняя нижняя точка строки. Все, что между этими числами пропорционально лежит внутри крайних точек. При установке атрибута, правые и нижние координаты можно пропустить, в этом случае, ширина и высота объекта изменяться не будет.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.Width|Width]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''Width''':''&amp;lt;Ширина объекта в пикселях (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет ширину объекта в пикселях. Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.Height|Height]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''Height''':''&amp;lt;Высота объекта в пикселях (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет высоту объекта в пикселях. Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.ScaleOption|ScaleOption]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''ScaleOption''':''&amp;lt;Способ масштабирования объекта (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет способ масштабирования объекта. Доступны следующие значения: 0 -- оригинальный размер, 1 -- уменьшать размер, если это необходимо, 2 -- уменьшать или увеличивать размер если необходимо. Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.Proportional|Proportional]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''Proportional''':''&amp;lt;Пропорциональность при масштабировании объекта (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет режим соблюдения пропорции при масштабировании содержимого объекта (картинки или OLE-объекта). Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.NotForPrinting|NotForPrinting]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''NotForPrinting''':''&amp;lt;Запрет вывода объекта на печать (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет режим запрета вывода объекта на печать. Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.Picture|Picture]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''Picture''':''&amp;lt;Картинка объекта (PICTURE)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает объект картинки в случае, если текущий объект является картинкой. Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.OLE|OLE]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''OLE''':''&amp;lt;OLE-объект (OLE)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает ассоциированный OLE-объект в случае, если текущий объект является OLE-объектом. Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.ColorProfile|ColorProfile]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''ColorProfile''':''&amp;lt;Шаблон стиля объекта (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет номер шаблона стиля визуального объекта таблицы. По умолчанию это значение равно 0 (цвета и стиль форматирования определяется соответствующими атрибутами объекта, а не номером шаблона). Номера шаблонов можно найти в [[Номера шаблонов цветов ячеек таблицы|этой статье]]. Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.BackgroundColor|BackgroundColor]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''BackgroundColor''':''&amp;lt;Номер цвета фона объекта (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет номер цвета фона визуального объекта таблицы. Система получает цвет по номеру из палитры, для прямого указания цвета используйте атрибут [[Table.Object.BackgroundColorRGB|BackgroundColorRGB]]. Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.BackgroundColorRGB|BackgroundColorRGB]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''BackgroundColorRGB''':''&amp;lt;Цвет фона объекта (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет цвет фона визуального объекта таблицы по его RGB значению. Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.FontColor|FontColor]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''FontColor''':''&amp;lt;Номер цвета текста объекта (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет номер цвета текста визуального объекта таблицы. Система получает цвет по номеру из палитры, для прямого указания цвета используйте атрибут [[Table.Object.FontColorRGB|FontColorRGB]]. Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.FontColorRGB|FontColorRGB]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''FontColorRGB''':''&amp;lt;Цвет текста объекта (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет цвет текста визуального объекта таблицы по его RGB значению. Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.FrameColor|FrameColor]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''FrameColor''':''&amp;lt;Номер цвета обрамления объекта (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет номер цвета обрамления визуального объекта таблицы. Система получает цвет по номеру из палитры, для прямого указания цвета используйте атрибут [[Table.Object.FrameColorRGB|FrameColorRGB]]. Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.FrameColorRGB|FrameColorRGB]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''FrameColorRGB''':''&amp;lt;Цвет обрамления объекта (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет цвет обрамления визуального объекта таблицы по его RGB значению. Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.FontStyle|FontStyle]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''FontStyle''':''&amp;lt;Стиль текста объекта (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет стиль текста визуального объекта таблицы. Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.FontSize|FontSize]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''FontSize''':''&amp;lt;Размер шрифта текста объекта (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет размер шрифта текста визуального объекта таблицы. Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.Font|Font]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''Font''':''&amp;lt;Наименование шрифта текста объекта (STRING)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет наименование шрифта текста визуального объекта таблицы. Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.Frame|Frame]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''Frame''':''&amp;lt;Рисунок и наличие 4-х границ обрамления объекта (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет рисунок и наличие четырех границ обрамления визуального объекта таблицы. Значение представляет собой битовую маску, где на каждую из границ используется по 4 бита. По умолчанию, это значение равно 0 (объект не имеет обрамления). Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.LastLoadedImagePath|LastLoadedImagePath]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''LastLoadedImagePath''':''&amp;lt;Наименование файла последней загруженной картинки (STRING)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает наименование файла последней загруженной картинки для визуальных объектов таблицы с типом картинка. Признак сохраняется в объекте, к примеру, для универсальных обработчиков печати, и будет заполнен только если картинка была загружена в виде файла. Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.Delete|Delete]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''Delete'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция удаляет текущий объект из таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function footer}}&lt;br /&gt;
&lt;br /&gt;
{{Объекты}}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>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</id>
		<title>Функции общего назначения</title>
		<link rel="alternate" type="text/html" href="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"/>
		<updated>2026-04-01T10:01:39Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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;
{{function header}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[TypeStr]]&lt;br /&gt;
|form='''TypeStr'''(''&amp;lt;Аргумент&amp;gt;''):''&amp;lt;Тип аргумента (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает строку, соответствующую типу аргумента или типу объекта аргумента. Пример возвращаемых значений: &amp;lt;code&amp;gt;NUMBER&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;STRING&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;DATE&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;LIST&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;TAB&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;DB.REF.&amp;lt;Вид справочника&amp;gt;&amp;lt;/code&amp;gt;, и т.п.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[TypeNum]]&lt;br /&gt;
|form='''TypeNum'''(''&amp;lt;Аргумент&amp;gt;''):''&amp;lt;Тип аргумента (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает число, соответствующую типу аргумента или типу объекта аргумента. Числа является внутренними идентификаторами типов объектов. Пример возвращаемых значений: &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; (пустое значение), &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; (целое число), &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; (вещественное число), &amp;lt;code&amp;gt;50&amp;lt;/code&amp;gt; (список), &amp;lt;code&amp;gt;54&amp;lt;/code&amp;gt; (таблица), &amp;lt;code&amp;gt;61&amp;lt;/code&amp;gt; (объект базы данных), и т.п.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[NumeralTypeStr]]&lt;br /&gt;
|form='''NumeralTypeStr'''(''&amp;lt;Аргумент&amp;gt;''):''&amp;lt;Тип числового аргумента (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает строку &amp;quot;REAL&amp;quot;, в случае, если числовое представление аргумента является вещественным, иначе будет возвращена строка &amp;quot;INT&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[StringTypeStr]]&lt;br /&gt;
|form='''StringTypeStr'''(''&amp;lt;Аргумент&amp;gt;''):''&amp;lt;Тип строкового аргумента (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает строку &amp;quot;ANSI&amp;quot;, в случае, если строковое представление аргумента использует однобайтовую кодировку (ANSI), иначе будет возвращена строка &amp;quot;UNICODE&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[IsEmpty]]&lt;br /&gt;
|form='''IsEmpty'''(''&amp;lt;Аргумент&amp;gt;''):''&amp;lt;Является ли аргумент пустым объектом (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает 1, если аргумент является пустым объектом (пустое значение, 0, пустая строка, объект базы данных с невыбранным типом или видом и пр.), иначе будет возвращен 0.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Coalesce]]&lt;br /&gt;
|form='''Coalesce'''({{Optional|&amp;lt;Аргумент 1&amp;gt;,&amp;lt;Аргумент 2&amp;gt;...}}):''&amp;lt;Первый не пустой или не БД объект&amp;gt;''&lt;br /&gt;
|type=2&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает первый из аргументов, который не является пустым (не выбранным) объектом базы данных, пустым значением, либо не является объектом базы данных. Функция является магической (вычисление следующего аргумента не выполняется, если текущий удовлетворяет условию функции).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[CoalesceEx]]&lt;br /&gt;
|form='''CoalesceEx'''({{Optional|&amp;lt;Режим&amp;gt;{{Default|{{Eq}}1}}}}{{Default|}}{{Optional|,&amp;lt;Аргумент 1&amp;gt;,&amp;lt;Аргумент 2&amp;gt;...}}):''&amp;lt;Первый не пустой объект по правилам, заданым режимом&amp;gt;''&lt;br /&gt;
|type=2&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает первый из аргументов, который не является пустым объектом по правилам, заданным режимом. В режиме ''0'' функция работает аналогично функции [[Coalesce]]. Функция является магической (вычисление следующего аргумента не выполняется, если текущий удовлетворяет условию функции).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Sleep]]&lt;br /&gt;
|form='''Sleep'''(''&amp;lt;Период в миллисекундах (INT)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция выполняет цикл ожидания в течение указанного в миллисекундах времени.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GetNothing]], '''Nothing'''&lt;br /&gt;
|form='''GetNothing'''({{Optional|&amp;lt;Тип базы данных (STRING)&amp;gt;{{Default|{{Eq}}&amp;quot;&amp;quot;}}}}):''&amp;lt;Пустое значение или пустое значение базы данных&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает пустое значение, если аргумент не указан, либо не выбранный объект базы данных, если аргумент указан.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[DisableGUIInterrupts]]&lt;br /&gt;
|form='''DisableGUIInterrupts'''(''&amp;lt;Защита (INT)&amp;gt;''{{Optional|,&amp;lt;Текст защиты (STRING)&amp;gt;{{Default|{{Eq}}&amp;quot;&amp;quot;}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция позволяет запретить прерывание выполнения потока или закрытие программы, если первый аргумент равен 1, до того, как она будет вызвана повторно с первым аргументом, равным 0. Дополнительный текст будет показан пользователю, в момент попытки прерывания или закрытия программы. Функция работает только для визуального режима, и должна использоваться только с блоком &amp;lt;code&amp;gt;Try ... Finally&amp;lt;/code&amp;gt;, так как в ином случае существует опасность получить состояние клиента, когда он не отвечает на попытки закрытия корректным образом.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[FlushMessages]]&lt;br /&gt;
|form='''FlushMessages'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция выполняет все ожидающие в очереди визуальные сообщения. Функцию можно использовать, к примеру, если необходимо убедиться, что нужные изменения на экране выполнены (закрыто окно, полностью обновлена таблица на форме и пр.).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[If|_If]], '''?'''&lt;br /&gt;
|form='''_If'''(''&amp;lt;Условие&amp;gt;'',''&amp;lt;Результат, если условие выполнено&amp;gt;''{{Optional|,&amp;lt;Результат, если условие не выполнено&amp;gt;{{Default|{{Eq}}&amp;lt;NOTHING&amp;gt;}}}}):''&amp;lt;Результат&amp;gt;''&lt;br /&gt;
|type=2&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Магическая функция позволяет превратить конструкцию '''If''' в вычисляемое выражение.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[If2|__If]], '''??'''&lt;br /&gt;
|form='''__If'''(''&amp;lt;Условие&amp;gt;'',''&amp;lt;Результат, если условие выполнено&amp;gt;''{{Optional|,&amp;lt;Условие 2&amp;gt;,&amp;lt;Результат, если условие 2 выполнено&amp;gt;,...&amp;lt;Результат, если не выполнено ни одно из условий&amp;gt;{{Default|{{Eq}}&amp;lt;NOTHING&amp;gt;}}}}):''&amp;lt;Результат&amp;gt;''&lt;br /&gt;
|type=2&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Магическая функция позволяет превратить несколько последовательных конструкций '''If''' в вычисляемое выражение.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[And|_And]]&lt;br /&gt;
|form='''_And'''(''&amp;lt;Условие 1&amp;gt;''{{Optional|,&amp;lt;Условие 2&amp;gt;,&amp;lt;Условие 3&amp;gt; ...}}):''&amp;lt;Результат 0 или 1 (INT)&amp;gt;''&lt;br /&gt;
|type=2&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Магическая функция позволяет вычислять только требуемые условия, для получения результата -- логического &amp;quot;и&amp;quot;.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Or|_Or]]&lt;br /&gt;
|form='''_Or'''(''&amp;lt;Условие 1&amp;gt;''{{Optional|,&amp;lt;Условие 2&amp;gt;,&amp;lt;Условие 3&amp;gt; ...}}):''&amp;lt;Результат 0 или 1 (INT)&amp;gt;''&lt;br /&gt;
|type=2&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Магическая функция позволяет вычислять только требуемые условия, для получения результата -- логического &amp;quot;или&amp;quot;.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[InSet]]&lt;br /&gt;
|form='''InSet'''(''&amp;lt;Значение поиска&amp;gt;''{{Optional|,&amp;lt;Значение множества 1&amp;gt;,&amp;lt;Значение множества 2&amp;gt;...}}):''&amp;lt;Искомое значение присутствует во множестве (INT)&amp;gt;''&lt;br /&gt;
|type=2&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Магическая функция проверяет, присутствует ли значение поиска во множетсве значений для проверки. Может упростить конструкцию ''If''.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[InRange]]&lt;br /&gt;
|form='''InRange'''(''&amp;lt;Значение поиска&amp;gt;''{{Optional|,&amp;lt;Начало диапазона 1&amp;gt;,&amp;lt;Конец диапазона 1&amp;gt;,&amp;lt;Начало диапазона 2&amp;gt;,&amp;lt;Конец диапазона 2&amp;gt;...}}):''&amp;lt;Искомое значение присутствует в диапазоне (диапазонах) (INT)&amp;gt;''&lt;br /&gt;
|type=2&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Магическая функция проверяет, присутствует ли значение поиска в диапазонах значений для проверки. Искомое значение может быть числом, датой или строкой. Функция может упростить конструкцию ''If''. Для проверки используются нестрогие неравенства (&amp;lt;code&amp;gt; &amp;gt;= или =&amp;lt; &amp;lt;/code&amp;gt;). Функция возвращает ''1'', если искомое значение присутствует по крайней мере в одном диапазоне.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[InRangeEx]]&lt;br /&gt;
|form='''InRangeEx'''({{Optional|&amp;lt;Режим (INT)&amp;gt;{{Default|{{Eq}}0}}}},''&amp;lt;Значение поиска&amp;gt;''{{Optional|,&amp;lt;Начало диапазона 1&amp;gt;,&amp;lt;Конец диапазона 1&amp;gt;,&amp;lt;Начало диапазона 2&amp;gt;,&amp;lt;Конец диапазона 2&amp;gt;...}}):''&amp;lt;Искомое значение присутствует в диапазоне (диапазонах) (INT)&amp;gt;''&lt;br /&gt;
|type=2&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Магическая функция проверяет, присутствует ли значение поиска в диапазонах значений для проверки. Искомое значение может быть числом, датой или строкой. Функция может упростить конструкцию ''If''. В зависимости от режима (первый аргумент), для проверки используются строгие или нестрогие неравенства. В зависимости от режима, функция возвращает ''1'', если искомое значение присутствует по крайней мере в одном диапазоне или во всех диапазонах.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[CreateOLE]]&lt;br /&gt;
|form='''CreateOLE'''(''&amp;lt;Идентификатор объекта OLE (STRING)&amp;gt;''):''&amp;lt;Новый объект OLE (OLE)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция создает новый объект OLE (COM) по строке идентификатора&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[CreateThreadedOLE]]&lt;br /&gt;
|form='''CreateThreadedOLE'''(''&amp;lt;Идентификатор объекта OLE (STRING)&amp;gt;''):''&amp;lt;Новый объект OLE (OLE)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция создает новый объект OLE (COM) по строке идентификатора. Объект может быть доступен в любом потоке, не только в том, который создал объект. Вызовы к таким объектам осуществляются несколько медленнее.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[OLE.SetTimeout|SetTimeout]]&lt;br /&gt;
|form={{Grey|OLE.}}'''SetTimeout'''({{Optional|&amp;lt;Время ожидания исполнения команд в мс. (INT)&amp;gt;}}):''&amp;lt;Предыдущее время ожидания исполнения команд в мс. (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция задает или получает для объекта максимальное время ожидания исполнения команд. По умолчанию при создании объекта, это время равно 0 (не ограничено). При истечении времени ожидания система произведет отсоединение от текущего OLE-объекта и выполнявшаяся функция вызовет исключение.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[IsMultithreaded]]&lt;br /&gt;
|form='''IsMultithreaded'''(''&amp;lt;Аргумент&amp;gt;''):''&amp;lt;Является ли объект многопоточным (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция проверяет, является ли объект, содержащийся в переменной-аргументе многопоточным или однопоточным (см. статью [[Объекты]])&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[SetMultiThreaded]]&lt;br /&gt;
|form='''SetMultiThreaded'''(''&amp;lt;Аргумент&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция позволяет безусловно установить флаг многопоточности на объекте, содержащемся в переменной-аргументе. Функция может использоваться при работе с объектами, содержащими ссылки на самого себя (см. статью [[Объекты]])&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[LockObject]]&lt;br /&gt;
|form='''LockObject'''(''&amp;lt;Аргумент&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция позволяет заблокировать доступ к сложному объекту из других программных потоков. Обычно система выполняет это действие автоматически, однако, если состояние непротиворечивости объекта требует нескольких вызовов функций изменения, эта функция может стать гарантом его непротиворечивости в других потоках. После окончания выполнения кода изменения объекта, необходимо вызвать функцию ''UnlockObject''. Функция не должна применяться к визуальным объектам, кроме того внутри кода изменения существуют ограничения по вызову визуальных функций.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[UnlockObject]]&lt;br /&gt;
|form='''UnlockObject'''(''&amp;lt;Аргумент&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция позволяет разблокировать доступ к сложному объекту, заблокированному ранее с помощью функции ''LockObject''. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[LockCount]]&lt;br /&gt;
|form='''LockCount'''(''&amp;lt;Аргумент&amp;gt;''):''&amp;lt;Количество вложенных блокировок (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция позволяет получить количество вложенных блокировок объекта (осуществленных с помощью функции [[LockObject]] или системой) даже если объект не удерживается текущим потоком (таким образом ее можно также использовать, как индикатор того, что объект заблокирован другим потоком, если известно, что текущий поток его не блокировал, однако, нужно понимать, что объекты, могут автоматически блокироваться системой на время вызова функций, вероятность обнаружить такую блокировку может быть высока, если объект, используется в потоке, который выполняет какую-то работу в данный момент).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Message]]&lt;br /&gt;
|form='''Message'''(''&amp;lt;Аргумент&amp;gt;''{{Optional|,&amp;lt;Тип текста (STRING)&amp;gt;{{Default|{{Eq}}&amp;quot;&amp;quot;}},&amp;lt;Интерактивный объект 1 для подстановки в текст&amp;gt;,&amp;lt;Интерактивный объект 2 для подстановки в текст&amp;gt;...}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция выводит строковое представление аргумента в [[Визуальный лог клиента|лог]] клиента, при этом текст может быть выделен, если необходимо, как ошибка или информация.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[LoadModule]]&lt;br /&gt;
|form='''LoadModule'''(''&amp;lt;Способ вызова (INT)&amp;gt;'',''&amp;lt;Путь или имя базы данных (STRING)&amp;gt;''{{OptionalByRef|,&amp;lt;Параметр&amp;gt;,&amp;lt;Опция&amp;gt;}}{{Optional|,&amp;lt;Имя модуля (STRING)&amp;gt;{{Default|{{Eq}}&amp;quot;Module&amp;quot;}},&amp;lt;Имя формы (STRING)&amp;gt;{{Default|{{Eq}}&amp;quot;SelectForm&amp;quot;}}}}{{OptionalByRef|,&amp;lt;Серийный номер потока, в котором происходит исполнение (INT)&amp;gt;}}):''&amp;lt;Результат модального выполнения&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция позволяет загружать и инициировать выполнение произвольного модуля с произвольной формой. Модуль может быть загружен как модально к текущему потоку (если текущий поток не является корневым), так и создавать новый поток, передавая ему два аргумента. В случае модального исполнения, функция не возвратит результат до тех пор, пока модуль не закончит работы, при этом, модуль может возвратить результат и изменить переданные параметры, если они представляли собой переменные.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[LoadToolForm]]&lt;br /&gt;
|form='''LoadToolForm'''(''&amp;lt;Способ вызова (INT)&amp;gt;'',''&amp;lt;Режим загрузки формы (INT)&amp;gt;'',''&amp;lt;Путь или имя базы данных (STRING)&amp;gt;''{{OptionalByRef|,&amp;lt;Параметр&amp;gt;,&amp;lt;Опция&amp;gt;}}{{Optional|,&amp;lt;Имя формы (STRING)&amp;gt;{{Default|{{Eq}}&amp;quot;Form&amp;quot;}}}}{{OptionalByRef|,&amp;lt;Объект открытой формы (FORM)&amp;gt;}}):''&amp;lt;Результат, возвращенный при инициализации формы&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция позволяет загружать произвольную форму в режиме инструментария. Формы в таком режиме не имеют модулей и работают в контексте текущего модуля, либо в контексте корневого модуля, в зависимости от параметров загрузки. Функция может возвратить серийный номер открытой формы, чтобы программа могла осуществлять переговоры с ней с помощью отсылки сообщений. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ImportFunctionsFromModule]]&lt;br /&gt;
|form='''ImportFunctionsFromModule'''(''&amp;lt;Путь или имя базы данных (STRING)&amp;gt;''{{Optional|,&amp;lt;Имя модуля (STRING)&amp;gt;{{Default|{{Eq}}&amp;quot;Module&amp;quot;}},&amp;lt;Пространство имен (STRING)&amp;gt;{{Default|{{Eq}}&amp;quot;&amp;quot;}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция позволяет импортировать в текущий выполняющийся модуль функции другого модуля, после импорта функции можно исполнять, как будто они были созданы в текущем модуле. Если при импорте, имя создаваемой функции уже существует, будет вызвано исключение. Часть кода, не находящаяся внутри функций, будет игнорирована. Чтобы увеличить устойчивость загрузки из разных источников, можно использовать дополнительный идентификатор -- пространство имен. Идентификатор не должен содержать знаков, недоступных в наименованиях функций и знаков &amp;quot;.&amp;quot;. После импорта новые функции можно будет вызвать с помощью конструкции &amp;lt;code&amp;gt;&amp;lt;Идентификатор&amp;gt;.&amp;lt;Имя функции&amp;gt;([...])&amp;lt;/code&amp;gt;. Функцию можно использовать для увеличения функциональности, доступной во внешних модулях, к примеру, если модуль производит выгрузку, которая зависит от поключенного устройства, можно импортировать функции модуля, который был создан для конкретного устройства.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ImportFunctionsFromText]]&lt;br /&gt;
|form='''ImportFunctionsFromText'''(''&amp;lt;Строка с кодом для компиляции (STRING)&amp;gt;''{{Optional|,&amp;lt;Пространство имен (STRING)&amp;gt;{{Default|{{Eq}}&amp;quot;&amp;quot;}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция позволяет импортировать в текущий выполняющийся модуль функции из строки текста. Перед началом импорта, текст будет скомпилирован в контексте текущего модуля. Если при импорте, имя создаваемой функции уже существует, будет вызвано исключение. Часть кода, не находящаяся внутри функций, будет игнорирована. Чтобы увеличить устойчивость загрузки из разных источников, можно использовать дополнительный идентификатор -- пространство имен. Идентификатор не должен содержать знаков, недоступных в наименованиях функций и знаков &amp;quot;.&amp;quot;. После импорта новые функции можно будет вызвать с помощью конструкции &amp;lt;code&amp;gt;&amp;lt;Идентификатор&amp;gt;.&amp;lt;Имя функции&amp;gt;([...])&amp;lt;/code&amp;gt;. Функцию можно использовать для увеличения функциональности, доступной во внешних модулях, к примеру, если модуль производит выгрузку, которая зависит от поключенного устройства, можно импортировать функции текста кода, который был создан для конкретного устройства.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[RemoveImportedFunctions]]&lt;br /&gt;
|form='''RemoveImportedFunctions'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция удаляет из контекста текущего модуля все функции, импортированные из других модулей или текстовых строк (см. [[ImportFunctionsFromModule]] и [[ImportFunctionsFromText]]).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[OpenObject]]&lt;br /&gt;
|form='''OpenObject'''(''&amp;lt;Объект базы данных (DB)&amp;gt;'',''&amp;lt;Режим просмотра (INT)&amp;gt;'',''&amp;lt;Способ вызова (INT)&amp;gt;''{{OptionalByRef|,&amp;lt;Параметр&amp;gt;,&amp;lt;Опция&amp;gt;}}{{Optional|,&amp;lt;Имя модуля (STRING)&amp;gt;,&amp;lt;Имя формы (STRING)&amp;gt;}}):''&amp;lt;Результат модального выполнения&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция позволяет загружать и инициировать выполнение модуля и формы, связанных с заданным объектом, при этом сам объект загружается в форму для редактирования или просмотра. Модуль может быть загружен как модально к текущему потоку (если текущий поток не является корневым), так и создавать новый поток, передавая ему два аргумента. В случае модального исполнения, функция не возвратит результат до тех пор, пока модуль не закончит работы, при этом, модуль может возвратить результат и изменить переданные параметры, если они представляли собой переменные. Функция может возвратить особые текстовые результаты, если требуемый объект был заблокирован другим пользователем. Для полной информации см. описание функции.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[SelectObject]], '''AskObject'''&lt;br /&gt;
|form='''SelectObject'''(''&amp;lt;Путь или имя базы данных (STRING)&amp;gt;''{{OptionalByRef|,&amp;lt;Параметр&amp;gt;,&amp;lt;Опция&amp;gt;}}{{Optional|,&amp;lt;Имя модуля (STRING)&amp;gt;{{Default|{{Eq}}&amp;quot;Module&amp;quot;}},&amp;lt;Имя формы (STRING)&amp;gt;{{Default|{{Eq}}&amp;quot;SelectForm&amp;quot;}},&amp;lt;Объект для позиционирования&amp;gt;,&amp;lt;Наименование объекта формы, осуществляющего выбор (STRING)&amp;gt;,&amp;lt;Заголовок формы (STRING)&amp;gt;,&amp;lt;Дополнительные установки (INT)&amp;gt;}}):''&amp;lt;Выбранный объект или пустое значение&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция позволяет загружать и инициировать выполнение модуля и формы в модальном режиме для выбора объекта базы данных из списка объектов, при этом возможно начальное позиционирование на указанный объект, определение требуемого объекта формы списка объектов (если их несколько), изменение заголовка формы, использование других возможностей. Функция не возвратит результат до тех пор, пока модуль не закончит работы, при этом, модуль может изменить переданные параметры, если они представляли собой переменные. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[MassSelectObjects]]&lt;br /&gt;
|form='''MassSelectObjects'''(''&amp;lt;Имя функции для принятия результата выбора (STRING)&amp;gt;'',''&amp;lt;Путь или имя базы данных (STRING)&amp;gt;''{{OptionalByRef|,&amp;lt;Параметр&amp;gt;,&amp;lt;Опция&amp;gt;}}{{Optional|,&amp;lt;Имя модуля (STRING)&amp;gt;{{Default|{{Eq}}&amp;quot;Module&amp;quot;}},&amp;lt;Имя формы (STRING)&amp;gt;{{Default|{{Eq}}&amp;quot;SelectForm&amp;quot;}},&amp;lt;Объект для позиционирования&amp;gt;,&amp;lt;Наименование объекта формы, осуществляющего выбор (STRING)&amp;gt;,&amp;lt;Заголовок формы (STRING)&amp;gt;,&amp;lt;Параметр функции принятия выбора&amp;gt;,&amp;lt;Дополнительные установки (INT)&amp;gt;{{Default|{{Eq}}0}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция позволяет загружать и инициировать выполнение модуля и формы в модальном режиме для выбора множества объектов базы данных из списка объектов, при этом возможно начальное позиционирование на указанный объект, определение требуемого объекта формы списка объектов (если их несколько), изменение заголовка формы, использование других возможностей. В момент выбора очередного объекта пользователем, система вызывает особую функцию выбора (возможно с доп. параметром), имя которой задается в первом аргументе. Функция не возвратится до тех пор, пользователь не закроет исполняемый модуль, при этом, модуль может изменить переданные параметры, если они представляли собой переменные. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[SendMessageToForm]]&lt;br /&gt;
|form='''SendMessageToForm'''(''&amp;lt;Серийный номер формы (INT)&amp;gt;'',''&amp;lt;Код сообщения (INT)&amp;gt;''{{OptionalByRef|,&amp;lt;Параметр&amp;gt;,&amp;lt;Опция&amp;gt;}}{{Optional|,&amp;lt;Гарантировать доставку (INT)&amp;gt;{{Default|{{Eq}}1}},&amp;lt;Имя макроса или страницы объекта формы (STRING)&amp;gt;{{Default|{{Eq}}&amp;quot;&amp;quot;}}}}):''&amp;lt;Сообщение не было доставлено 0 или результат выполнения OnMessage&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=1&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция осуществляет доставку пользовательского сообщения с параметрами указанной по серийному номеру форме. Для формы будет вызвано визуальное событие [[Студия/OnMessage|OnMessage]]. Доставка также может быть осуществлена макросу, располагающемуся на форме или указанной по имени странице страничного элемента. Функция возвращается после обработки сообщения формой или ошибке при доставке.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[PostMessageToForm]]&lt;br /&gt;
|form='''PostMessageToForm'''(''&amp;lt;Серийный номер формы (INT)&amp;gt;'',''&amp;lt;Код сообщения (INT)&amp;gt;''{{Optional|,&amp;lt;Параметр&amp;gt;,&amp;lt;Опция&amp;gt;,&amp;lt;Гарантировать доставку (INT)&amp;gt;{{Default|{{Eq}}1}},&amp;lt;Имя макроса или страницы объекта формы (STRING)&amp;gt;{{Default|{{Eq}}&amp;quot;&amp;quot;}}}}):''&amp;lt;Сообщение было отправлено 0 или 1 (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=1&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция осуществляет доставку пользовательского сообщения с параметрами указанной по серийному номеру форме. Для формы будет вызвано визуальное событие [[Студия/OnMessage|OnMessage]]. Доставка также может быть осуществлена макросу, располагающемуся на форме или указанной по имени странице страничного элемента. Функция возвращается сразу после успешной отправки сообщения или ошибке при отправке. Измененные формой параметры не будут переданы назад.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[BroadcastGlobalMessage]]&lt;br /&gt;
|form='''BroadcastGlobalMessage'''(''&amp;lt;Код сообщения (INT)&amp;gt;'',''&amp;lt;Содержимое сообщения (STRING)&amp;gt;''{{Optional|,&amp;lt;Для всех пользователей (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Сообщение успешно отправлено (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция рассылает пакеты, которые вызывают исполнения событий ''OnMessage'' для всех открытых форм (в момент когда они активны или когда они станут активными), в текущей системе или глобально всем клиентам сервера. В последнем случае, нужно быть осторожным, чтобы не перегружать сервер внезапным большим количеством запросов, даже с учетом того, что серверная часть использует особую систему замедления отправки запросов клиентам.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[BroadcastMessage]]&lt;br /&gt;
|form='''BroadcastMessage'''(''&amp;lt;Код сообщения (INT)&amp;gt;''{{Optional|,&amp;lt;Параметр&amp;gt;,&amp;lt;Опция&amp;gt;,&amp;lt;Тип форм-получателей (INT)&amp;gt;{{Default|{{Eq}}1}},&amp;lt;Имя макроса или страницы объекта формы (STRING)&amp;gt;{{Default|{{Eq}}&amp;quot;&amp;quot;}}}}):''&amp;lt;Сообщение было отправлено 0 или 1 (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция осуществляет доставку пользовательского сообщения с параметрами всем открытым в данный момент в системе формам с указанным типом. Для форм будет вызвано визуальное событие [[Студия/OnMessage|OnMessage]]. Доставка также может быть осуществлена макросу, располагающемуся на формах или указанной по имени странице страничного элемента. Функция возвращается сразу после успешной отправки сообщений или ошибке при отправке. Измененные формой параметры не будут переданы назад.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[BroadcastChannelSubscribe]]&lt;br /&gt;
|form='''BroadcastChannelSubscribe'''(''&amp;lt;Имя канала (STRING)&amp;gt;''{{Optional|,&amp;lt;Форма-получатель или ее серийный номер (FORM,INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Числовой идентификатор канала (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция подписывается на сообщения глобального канала сообщений, заданного по его имени (первый аргумент). Если указана форма-получатель сообщений, они будут приходить в виде события OnMessage в момент, когда форма ожидает действий пользователя (idle). Если форма не указана, программе необходимо получать сообщения самостоятельно с помощью функции [[BroadcastChannelReceiveMessage]]. Подписка действует для текущего потока, если сообщения не забираются, они будут накапливаться на сервере. Для отказа от подписки, используйте [[BroadcastChannelUnsubscribe]]. Подписка удаляется автоматически, когда поток с подпиской заканчивает работу. Если указана форма и она будет закрыта, но поток продолжит работать, подписка не будет отменена (однако сообщения приходить не будут, так как отсутствует форма). Функция возвращает цифровой идентификатор канала, по которому к нему можно выполнять обращения (чуть быстрее, чем по имени). Идентификатор корректен до момента вызова [[BroadcastChannelUnsubscribe]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[BroadcastChannelUnsubscribe]]&lt;br /&gt;
|form='''BroadcastChannelUnsubscribe'''(''&amp;lt;Имя или идентификатор канала (INT,STRING)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция отменяет подписку на сообщения глобального канала сообщений, заданного по его имени или идентификатору (первый аргумент). См. описание [[BroadcastChannelSubscribe]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[BroadcastChannelSendMessage]]&lt;br /&gt;
|form='''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;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция выполняет отсылку сообщения (состоящего из произвольного числового идентификатора и произвольного текста) всем абонентам, подписанным на канал сообщений, заданный по его имени или идентификатору. Для подписчиков, использующих форму (см. [[BroadcastChannelSubscribe]]), сообщения доставляются сразу же (однако, может пройти долгое время, пока форма закончит текущую работу, и даже когда она ожидает действий пользователя, может пройти до нескольких секунд). Доставка будет осуществляться по такому же принципу, как доставляются сообщения [[BroadcastGlobalMessage]]. Если форма больше не существует, сообщение для таких подписчиков доставлены не будут. Подписчикам без указания формы, подтребуется вызвать функцию [[BroadcastChannelReceiveMessage]], чтобы забрать первое из сообщений из очереди. Разрешается использовать функцию из потоков, которые не подписаны на канал, для которого происходит отправка. Функцию также можно использовать для каналов, на которые не подписан ни один абонент (в этом случае, сообщение будет проигнорировано). Функция возвращает количество отосланных сообщений (которое совпадает с количеством абонентов канала на момент вызова функции).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[BroadcastChannelReceiveMessage]]&lt;br /&gt;
|form='''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;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция выполняет получение одного сообщения из очереди сообщений для канала сообщений, заданного по его имени или идентификатору. Полученные сообщения удаляются из очереди. Функция используется только для абонентов подписки, для которых при подписке не была указана форма (см. [[BroadcastChannelSubscribe]]). Если сообщение в очереди отсутствует, функция может ожидать его появления некоторое время (заданное вторым аргументом). Функция возвращает '''1''', если сообщение получено и '''0''' в ином случае. Полученное сообщение возвращается в виде трех переменных -- числовой идентификатор сообщение, текст сообщения и текстовый код, определяющий отправителя (состоящий из номера канала клиента и идентификатора потока клиента).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ModuleTag]]&lt;br /&gt;
|form='''ModuleTag'''({{Optional|&amp;lt;Новое значение&amp;gt;}}):''&amp;lt;Предыдущее значение&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает или изменяет свободную переменную, привязанную к текущему (исполняемому) модулю. Значение может использоваться по усмотрению разработчика.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[IsKeyComboActive]]&lt;br /&gt;
|form='''IsKeyComboActive'''(''&amp;lt;Комбинация клавиш (STRING)&amp;gt;''):''&amp;lt;Комбинация активирована в данный момент, 0 или 1 (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция проверяет, активирована ли в данный момент пользователем заданная комбинация клавиш (к примеру, &amp;lt;code&amp;gt;&amp;quot;Ctrl+Alt+D&amp;quot;&amp;lt;/code&amp;gt;).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ObjectToString]]&lt;br /&gt;
|form='''ObjectToString'''(''&amp;lt;Значение&amp;gt;''):''&amp;lt;Значение, закодированное в строку (ANSI STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция кодирует внутрисистемным образом заданное значение в строку, значение может быть почти любым. К примеру, может представлять собой список, таблицу, объект базы данных, OLE-объект и пр.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ObjectFromString]]&lt;br /&gt;
|form='''ObjectFromString'''(''&amp;lt;Закодированное значение (STRING)&amp;gt;''):''&amp;lt;Значение&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция перекодирует строку в значение, закодированное внутрисистемным образом.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ObjectToFile]]&lt;br /&gt;
|form='''ObjectToFile'''(''&amp;lt;Значение&amp;gt;'',''&amp;lt;Имя файла (STRING)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция кодирует внутрисистемным образом заданное значение в строку, значение может быть почти любым. К примеру, может представлять собой список, таблицу, объект базы данных, OLE-объект и пр. Значение, затем, будет сохранено в заданный файл. При наличии ошибки при сохранении в файл, будет вызвано исключение.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ObjectFromFile]]&lt;br /&gt;
|form='''ObjectFromFile'''(''&amp;lt;Имя файла (STRING)&amp;gt;''):''&amp;lt;Значение&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает строку из указанного файла и перекодирует строку в значение, закодированное внутрисистемным образом.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Swap]]&lt;br /&gt;
|form='''Swap'''({{ByRef|&amp;lt;Переменная 1&amp;gt;,&amp;lt;Переменная 2&amp;gt;}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция меняет местами значения переменных.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[DoesFunctionExist]]&lt;br /&gt;
|form='''DoesFunctionExist'''(''&amp;lt;Имя функции (STRING)&amp;gt;''{{Optional|,&amp;lt;Глубина поиска или компилированная функция (INT, COMPILEDFUNCTION)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Существует ли функция (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция проверяет, существует ли функция с указанным именем в текущем контексте исполнения, способ поиска задается вторым аргументом.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ArgumentsNumber]]&lt;br /&gt;
|form='''ArgumentsNumber'''(''&amp;lt;Имя функции (STRING)&amp;gt;''{{Optional|,&amp;lt;Глубина поиска или компилированная функция (INT, COMPILEDFUNCTION)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Количество аргументов (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает количество аргументов функции с указанным именем в текущем контексте исполнения, способ поиска задается вторым аргументом. Если искомая функция не существует, будет возвращено значение -1.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ExecuteFunction]]&lt;br /&gt;
|form='''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;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция инициирует исполнение функции с указанным именем в текущем контексте исполнения с заданными аргументами, способ поиска задается вторым аргументом. Если искомая функция не существует, пропущен обязательный аргумент или заданное количество аргументов слишком велико, будет создано исключение. Функция может использоваться как более быстрая альтернатива функции &amp;lt;code&amp;gt;Eval&amp;lt;/code&amp;gt; (если необходимо вызвать только одну функцию).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[AsyncExecuteFunction]]&lt;br /&gt;
|form='''AsyncExecuteFunction'''(''&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;Результат исполнения функции&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция инициирует исполнение функции с указанным именем в текущем контексте исполнения с заданными аргументами, способ поиска задается вторым аргументом. Если искомая функция не существует, пропущен обязательный аргумент, заданное количество аргументов слишком велико или исполнение в визуальном контексте невозможно, будет создано исключение. Функция будет исполнена в визуальном контексте [[Студия/Визуальные события|асинхронно]], в момент, когда он будет свободен (если это не произойдет в течение некотрого промежутка времени, функция не будет выполнена). Подобный способ исполнения можно использовать, к примеру, в обработчике события OnOpen, с тем, чтобы функция была запущена когда обработчик закончит исполнение и форма будет ожидать действия пользователя. См. также [[Form.InvokeEventAsync]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GlobalBegPeriodDate]]&lt;br /&gt;
|form='''GlobalBegPeriodDate'''({{Optional|&amp;lt;Дата начала периода изменения периодических значений (DATE)&amp;gt;}}):''&amp;lt;Предыдущая дата начала периода изменения периодических значений (DATE)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает или/и изменяет дату начала изменения периодических значений при визуальном сохранении элементов с наличием таких значений.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GlobalEndPeriodDate]]&lt;br /&gt;
|form='''GlobalEndPeriodDate'''({{Optional|&amp;lt;Дата окончания периода изменения периодических значений (DATE)&amp;gt;}}):''&amp;lt;Предыдущая дата окончания периода изменения периодических значений (DATE)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает или/и изменяет дату окончания изменения периодических значений при визуальном сохранении элементов с наличием таких значений. Данная дата совпадает с датой просмотра периодических значений в визуально открытом элементе базы данных или таблице с такими элементами.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[MinPeriodicalAccessDate]]&lt;br /&gt;
|form='''MinPeriodicalAccessDate'''({{Optional|&amp;lt;Новая минимальная дата просмотра периодических реквизитов (DATE)&amp;gt;}}):''&amp;lt;Текущая минимальная дата просмотра периодических реквизитов (DATE)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает и/или изменяет минимальную дату просмотра периодических значений реквизитов в стандартных формах периодических реквизитов. Значения с датой менее данной не будут отображаться при выводе формы просмотра или редактирования, невозможно будет также создать новые записи с датами, ранее указанной. Дата используется для всех потоков клиента, но не влияет на программное получение периодических данных.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[MinPeriodicalEditDate]]&lt;br /&gt;
|form='''MinPeriodicalEditDate'''({{Optional|&amp;lt;Новая минимальная дата редактирования периодических реквизитов (DATE)&amp;gt;}}):''&amp;lt;Текущая минимальная дата редактирования периодических реквизитов (DATE)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает и/или изменяет минимальную дату редактирования периодических значений реквизитов в стандартных формах периодических реквизитов. Значения с датой менее данной не будут доступны для редактирования, невозможно будет также создать новые записи с датами, ранее указанной. Дата используется для всех потоков клиента, но не влияет на программное получение периодических данных.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GlobalDefaultSystemFont]]&lt;br /&gt;
|form='''GlobalDefaultSystemFont'''({{Optional|&amp;lt;Новое значение шрифта системы по умолчанию (STRING)&amp;gt;}}):''&amp;lt;Предыдущее значение шрифта системы по умолчанию (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает или/и изменяет внутрисистемный шрифт по умолчанию. Будут обновлены значения глобальных коэффициентов масштабирования форм. В зависимости от новых установок, текст и формы будут выглядеть крупнее или мельче. Шрифт умолчания для систем на Windows XP и более ранних &amp;quot;MS Sans Serif, 8&amp;quot; (не поддерживает международные символы), умолчания для более новых систем &amp;quot;Tahoma, 8&amp;quot; (поддерживает международные символы).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GlobalFormScaleFactorX]]&lt;br /&gt;
|form='''GlobalFormScaleFactorX'''({{Optional|&amp;lt;Новое значение горизонтального коэффициента глобального масштабирования форм (REAL)&amp;gt;}}):''&amp;lt;Предыдущее значение горизонтального коэффициента глобального масштабирования форм (REAL)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает или/и изменяет значение горизонтального коэффициента глобального масштабирования форм. Значение этого коэффициента по умолчанию равно 1. Если значение больше 1, элементы всех форм будут растянуты по горизонтали, если меньше 1, элементы будут сжаты.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GlobalFormScaleFactorY]]&lt;br /&gt;
|form='''GlobalFormScaleFactorY'''({{Optional|&amp;lt;Новое значение вертикального коэффициента глобального масштабирования форм (REAL)&amp;gt;}}):''&amp;lt;Предыдущее значение вертикального коэффициента глобального масштабирования форм (REAL)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает или/и изменяет значение вертикального коэффициента глобального масштабирования форм. Значение этого коэффициента по умолчанию равно 1. Если значение больше 1, элементы всех форм будут растянуты по вертикали, если меньше 1, элементы будут сжаты.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[DefaultTablesRestrictMode]]&lt;br /&gt;
|form='''DefaultTablesRestrictMode'''({{Optional|&amp;lt;Новое значение режима доступа по умолчанию для новых таблиц (INT)&amp;gt;}}):''&amp;lt;Предыдущее значение режима доступа по умолчанию для новых таблиц (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает или/и изменяет значение режима доступа по умолчанию для новых таблиц. При создании таблицы режим доступа устанавливается в соответствии с режимом по умолчанию. Режим можно изменить с помощью свойства [[Table.Restrict]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[DefaultHighlightMode]]&lt;br /&gt;
|form='''DefaultHighlightMode'''(''&amp;lt;Режим подсветки таблиц по умолчанию (INT)&amp;gt;''{{Optional|,&amp;lt;Цвет нечетных строк (INT)&amp;gt;,&amp;lt;Процент цвета нечетных строк (INT)&amp;gt;,&amp;lt;Цвет выделения строки или столбца курсора (INT)&amp;gt;,&amp;lt;Процент цвета выделения строки или столбца курсора (INT)&amp;gt;}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция изменяет глобальный режим подсветки строк всех таблиц. Для изменения подсветки конкретной таблицы см. функцию [[Tab.HighlightMode]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Eval]]&lt;br /&gt;
|form='''Eval'''(''&amp;lt;Выражение для вычисления (STRING)&amp;gt;''):''&amp;lt;Результат вычисления выражения&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит компиляцию и вычисление выражения, заданного на внутреннем языке. Выражение исполняется в контексте текущей функции с доступом к именам, совпадающим с доступом из кода, вызвавшего функцию. Функция вызывает прерывание, если аргумент не может быть скомпилирован из-за ошибки, либо он не является вычисляемым выражением. Функция возвращает результат вычисления выражения.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Exec]]&lt;br /&gt;
|form='''Exec'''(''&amp;lt;Блок для исполнения или компилированная функция (STRING, COMPILEDFUNCTION)&amp;gt;''):''&amp;lt;Исполнение завершено удачно 1 или 0 (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит компиляцию и исполнение блока текста, заданного на внутреннем языке, или компилированной заранее функции. Блок исполняется в контексте текущей функции с доступом к именам, совпадающим с доступом из кода, вызвавшего функцию. Функция вызывает прерывание, если аргумент не может быть скомпилирован из-за ошибки. Исполняемый код обладает свойствами кода внутри новой функции (счетчик циклов равен нулю, создаваемые переменные не будут переданы в вызывавшую функцию), однако, имеет доступ к локальным переменным вызывавшей функции.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ExecEx]]&lt;br /&gt;
|form='''ExecEx'''(''&amp;lt;Блок для исполнения или компилированная функция (STRING, COMPILEDFUNCTION)&amp;gt;''{{Optional|,&amp;lt;Установки ограничения исполнения (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Ограничение по времени в мс. (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Наименование функции, получающей выводимую в лог информацию (STRING)&amp;gt;,&amp;lt;Глубина поиска (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Ограничение по использованию памяти потоком (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Значение переменной Result при исполнении функции&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит компиляцию и исполнение блока текста, заданного на внутреннем языке, или компилированной заранее функции в контролируемой среде исполнения. Аргументы могут ограничить возможности, предоставляемые исполняемому коду, как функционально (некоторые группы функций будут запрещены к использованию), или в заданных пределах доступа к переменным и функциям, так и с ограничением по времени исполнения или по выделяемой памяти. Функция может использоваться для исполнения кода, который может быть опасным или злонамеренным, либо кода из неизвестного источника.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Compile]]&lt;br /&gt;
|form='''Compile'''(''&amp;lt;Блок для компилирования (STRING)&amp;gt;''{{Optional|,&amp;lt;Степень изолированности (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Добавочные переменные (STRING)&amp;gt;,&amp;lt;Свойства исходного текста для отладчика (STRING,INT)&amp;gt;}}):''&amp;lt;Компилированная функция в виде объекта (COMPILEDFUNCTION)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит компиляцию блока текста, заданного на внутреннем языке, и возвращает объект, представляющий результат компиляции. В зависимости от второго аргумента, блок может компилироваться в контексте текущей функции, глобальных модулей или без доступа к внешним переменным и функциям. Функция вызывает прерывание, если компиляция прервана из-за ошибки. Результирующий объект можно использовать многократно с функциями [[Exec]] и [[ExecEx]], это быстрее, чем компилировать блок текста при каждом вызове.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[LoadFunctionFromBuffer]]&lt;br /&gt;
|form='''LoadFunctionFromBuffer'''(''&amp;lt;Экспортированная в память компилированная функция (BUFFER, STRING)&amp;gt;''{{Optional|,&amp;lt;Путь к исходному тексту (STRING),&amp;lt;Исходный текст (STRING)&amp;gt;}}):''&amp;lt;Компилированная функция в виде объекта (COMPILEDFUNCTION)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит импорт из памяти экспортированной ранее с помощью [[SaveFunctionToBuffer]] компилированной функции. Функция возвращает объект аналогичный результату функции [[Compile]], который можно использовать многократно с функциями [[Exec]] и [[ExecEx]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[SaveFunctionToBuffer]]&lt;br /&gt;
|form='''SaveFunctionToBuffer'''(''&amp;lt;Компилированная функция (COMPILEDFUNCTION)&amp;gt;''):''&amp;lt;Экспортированная в память компилированная функция (BUFFER)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит экспорт в память компилированной функции. Функция возвращает буфер с содержимым подобным файлам с компилированными модулями системы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GetModuleFunction]]&lt;br /&gt;
|form='''GetModuleFunction'''({{Optional|&amp;lt;Уровень родительской функции от текущей (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Требуемая функция в виде объекта (COMPILEDFUNCTION)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция отдает объект компилированной функции, находящейся на требуемом уровне над текущей исполняемой функцией (этот объект, если найден, всегда включает текущую исполняемую функцию). В дальнейшем этот объект можно использовать для вызова функций по именам (см. [[ExecuteFunction]]), или экспортирования функции.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[InfoPanelClose]]&lt;br /&gt;
|form='''InfoPanelClose'''({{Optional|&amp;lt;Очистить панель (INT)&amp;gt;{{Default|{{Eq}}0}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция закрывает информационную панель (панель логов) визуального клиента, очищая текущий текст в ней при необходимости.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[InfoPanelClear]]&lt;br /&gt;
|form='''InfoPanelClear'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция очищает текст в информационной панели (панели логов) визуального клиента.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[InfoPanelOpen]]&lt;br /&gt;
|form='''InfoPanelOpen'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция открывает информационную панель (панель логов) визуального клиента.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[IsInfoPanelOpen]]&lt;br /&gt;
|form='''IsInfoPanelOpen'''():''&amp;lt;Результат 0 или 1 (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция проверяет, открыта ли в данный момент информационная панель (панель логов) визуального клиента.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[HideControlPanel]]&lt;br /&gt;
|form='''HideControlPanel'''(''&amp;lt;Идентификатор панели инструментов (STRING)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция прячет всех окон указанную панель инструментов. Пользовательские панели инструментов задаются в свойствах проекта, кроме пользовательских панелей, можно использовать специальные следующие идентификаторы для адресации стандартных панелей: '''COMMON''', '''TABLE''', '''TEXT'''. См. также функцию для определенного окна [[Form.HideControlPanel]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ShowControlPanel]]&lt;br /&gt;
|form='''ShowControlPanel'''(''&amp;lt;Идентификатор панели инструментов (STRING)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция отображает для всех окон указанную панель инструментов. Пользовательские панели инструментов задаются в свойствах проекта, кроме пользовательских панелей, можно использовать специальные следующие идентификаторы для адресации стандартных панелей: '''COMMON''', '''TABLE''', '''TEXT'''. См. также функцию для определенного окна [[Form.ShowControlPanel]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[InterThreadWindowsMode]]&lt;br /&gt;
|form='''InterThreadWindowsMode'''({{Optional|&amp;lt;Новый режим отображения окон всех потоков (INT)&amp;gt;}}):''&amp;lt;Текущий режим отображения окон всех потоков (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция возвращает и/или изменяет текущий режим отображения окон всех потоков. Для более подробной информации см. описание.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[StandardOutputHook]]&lt;br /&gt;
|form='''StandardOutputHook'''({{Optional|&amp;lt;Тип перехватываемого события (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Наименование функции, вызываемой при перехвате (STRING)&amp;gt;,&amp;lt;Глубина поиска (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Параметр для передачи в функцию&amp;gt;}}):''&amp;lt;Наименование предыдущей функции-перехватчика (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция добавляет или удаляет ссылку на функцию-перехватчик визуальных событий (к примеру, вывода информации в лог или панель состояния формы). Может использоваться, к примеру, для получения и вывод на экран информации об обработках, протекающих в скрытом потоке. Крайне желательно использование конструкции &amp;lt;code&amp;gt;Try .. Finally&amp;lt;/code&amp;gt;, чтобы гарантированно вернуть предыдущее состояние перехватчика после того, как работа будет завершена.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[RemoveUnacceptablePathChars]]&lt;br /&gt;
|form='''RemoveUnacceptablePathChars'''(''&amp;lt;Имя файла, которое необходимо очистить от недопустимых символов (STRING)&amp;gt;''{{Optional|,&amp;lt;Заменить недопустимые символы на (STRING)&amp;gt;{{Default|{{Eq}}&amp;quot;&amp;quot;}}}}):''&amp;lt;Очищенное имя файла (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция очищает имя файла (без имен папок) от непечатных и недопустимых символов (удаляются сл. печатные символы &amp;lt;code&amp;gt;&amp;lt;, &amp;gt;, :, &amp;quot;, /, \, |, ?, *&amp;lt;/code&amp;gt;). Удаляемые символы могут быть заменены на указанный.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GetPath]]&lt;br /&gt;
|form='''GetPath'''(''&amp;lt;Имя файла с папками (STRING)&amp;gt;''):''&amp;lt;Имена папок без имени файла (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает из полного имени файла строку пути с папками (пример, строка &amp;lt;code&amp;gt;C:\Folder\My.File.txt&amp;lt;/code&amp;gt; будет превращена в &amp;lt;code&amp;gt;C:\Folder\&amp;lt;/code&amp;gt;).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GetFileName]]&lt;br /&gt;
|form='''GetFileName'''(''&amp;lt;Имя файла с папками (STRING)&amp;gt;''):''&amp;lt;Имя файла без папок (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает из полного имени файла с папками, имя файла без папок (пример, строка &amp;lt;code&amp;gt;C:\Folder\My.File.txt&amp;lt;/code&amp;gt; будет превращена в &amp;lt;code&amp;gt;My.File.txt&amp;lt;/code&amp;gt;).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GetExt]]&lt;br /&gt;
|form='''GetExt'''(''&amp;lt;Имя файла (STRING)&amp;gt;''):''&amp;lt;Расширение файла (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает из имени файла его расширение (пример, строка &amp;lt;code&amp;gt;C:\Folder\My.File.txt&amp;lt;/code&amp;gt; будет превращена в &amp;lt;code&amp;gt;txt&amp;lt;/code&amp;gt;).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[AddBackslash]]&lt;br /&gt;
|form='''AddBackslash'''(''&amp;lt;Путь с папками (STRING)&amp;gt;''):''&amp;lt;Преобразованный путь (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция добавляет в конец строки знак &amp;lt;code&amp;gt;\&amp;lt;/code&amp;gt;, если он там уже не присутствует. Пустая строка не будет изменена.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[RemoveBackslash]]&lt;br /&gt;
|form='''RemoveBackslash'''(''&amp;lt;Путь с папками (STRING)&amp;gt;''):''&amp;lt;Преобразованный путь (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция удаляет с конца строки знак &amp;lt;code&amp;gt;\&amp;lt;/code&amp;gt;, если он там был.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[RemoveExt]]&lt;br /&gt;
|form='''RemoveExt'''(''&amp;lt;Имя файла (STRING)&amp;gt;''):''&amp;lt;Имя файла без расширения (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция удаляет из имени файла его расширение (пример, строка &amp;lt;code&amp;gt;C:\Folder\My.File.txt&amp;lt;/code&amp;gt; будет превращена в &amp;lt;code&amp;gt;C:\Folder\My.File&amp;lt;/code&amp;gt;).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GetAccountNames]]&lt;br /&gt;
|form='''GetAccountNames'''():''&amp;lt;Список учетных записей системы (LIST)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает список текущих учетных записей системы (сервера). Для исполнения функции необходимо наличие административных прав. Значениями списка будут строки с наименованиями учетных записей, имена списка будут представлены в виде строки с флагами соответствующих учетных записей.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[UserCredentialsLock]]&lt;br /&gt;
|form='''UserCredentialsLock'''({{OptionalByRef|&amp;lt;Заблокировано пользователем (STRING)&amp;gt;}},{{OptionalByRef|&amp;lt;Заблокировано на машине (STRING)&amp;gt;}},{{OptionalByRef|&amp;lt;Время блокировки (DATE)&amp;gt;}}):''&amp;lt;0 или 1 (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция временно блокирует доступ к редактору учетных записей пользователей (для подготовки к изменениям). Для исполнения функции необходимо наличие административных прав. '''Внимание''': после функции должен следовать блок  &amp;lt;code&amp;gt;&amp;lt;Try&amp;gt; ... &amp;lt;Finally&amp;gt;&amp;lt;EndTry&amp;gt;&amp;lt;/code&amp;gt; для гарантированного вызова функции разблокировки [[UserCredentialsUnlock]]. Если доступ уже был заблокирован ранее, функция возвращает имя пользователя, машины и время, когда он был заблокирован.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[UserCredentialsUnlock]]&lt;br /&gt;
|form='''UserCredentialsUnlock'''():''&amp;lt;0 или 1 (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция разблокирует доступ к редактору учетных записей пользователей, заблокированному ранее функцией [[UserCredentialsLock]]. Для исполнения функции необходимо наличие административных прав.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[UserCredentialsLoad]]&lt;br /&gt;
|form='''UserCredentialsLoad'''():''&amp;lt;Файл учетных записей сервера в виде строки (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает строку-содежимое файла учетных записей пользователей с сервера. Для исполнения функции необходимо наличие административных прав. Строку можно использовать, к примеру, для заполнения объекта [[Ini-файл|ini-файла]]. Чтение учетных записей пользователей, без их предвариельной блокировки функцией [[UserCredentialsLock]], разрешено, однако если данные будут изменяться, необходимо убедиться, что вы читаете актуальную копию данных, поэтому необходимо использование [[UserCredentialsLock]] до начала чтения.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[UserCredentialsStore]]&lt;br /&gt;
|form='''UserCredentialsStore'''(''&amp;lt;Файл учетных записей сервера в виде строки (STRING)&amp;gt;''):''&amp;lt;0 или 1 (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция сохраняет строку-содежимое файла учетных записей пользователей на сервер. Для исполнения функции необходимо наличие административных прав. Перед вызовом данной функции строго рекомендуется использовать функцию блокировки доступа к редактору учетных записей [[UserCredentialsLock]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ValidateUserPassword]]&lt;br /&gt;
|form='''ValidateUserPassword'''(''&amp;lt;Имя пользователя (STRING)&amp;gt;'',''&amp;lt;Пароль пользователя (STRING)&amp;gt;''{{OptionalByRef|,''&amp;lt;Ошибка или ответ сервера (STRING,INT)&amp;gt;''}}):''&amp;lt;Упешная проверка учетной записи (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция проверяет корректность имени пользователя и пароля с точки зрения учетных записей сервера (иначе говоря, проверяет, сможет ли этот пользователь зарегистрироваться на сервере под указанным паролем). Если регистрация невозможна, функция возвращает краткое описание причины третьим аргументом, если регистрация удачна, функция возвращает уровень полномочий пользователя третьим аргументом.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[SendChatMessage]]&lt;br /&gt;
|form='''SendChatMessage'''(''&amp;lt;Получатели через запятую (STRING)&amp;gt;'',''&amp;lt;Текст сообщения (STRING)&amp;gt;''):''&amp;lt;Сообщение успешно отправлено (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция отправляет сообщение во встроенный чат клиентов, зарегистрированных под пользователями, которые указаны, как получатели сообщения в первом аргументе.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GetStandardIcon]]&lt;br /&gt;
|form='''GetStandardIcon'''(''&amp;lt;Объект базы данных (DB)&amp;gt;''{{Optional|,''&amp;lt;Закрепленная строка папок (INT)&amp;gt;''{{Default|{{Eq}}0}}}}):''&amp;lt;Индекс стандартной иконки объекта (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает индекс стандартной иконки указанного объекта базы данных, данные индексы не совпадают с номерами иконок из библиотеки иконок и могут быть использованы только для столбцов визуальных таблиц, имеющих тип &amp;quot;стандартная иконка&amp;quot;. Различное состояние объекта (удален, новый и пр.) отображается разными иконками. Возможно также указание на то, что иконка находится для открытой папки справочника.&lt;br /&gt;
}}&lt;br /&gt;
{{function footer}}&lt;br /&gt;
&lt;br /&gt;
== Функции диалога с пользователем==&lt;br /&gt;
В данный раздел входят функции, осуществляющие вывод на экран различных диалогов для получения информации от пользователя. Большинство этих функций не будет работать в консольных клиентах.&lt;br /&gt;
{{function header}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Box]], '''MsgBox'''&lt;br /&gt;
|form='''Box'''(''&amp;lt;Сообщение (STRING)&amp;gt;''{{Optional|,&amp;lt;Тип диалога (INT)&amp;gt;{{Default|{{Eq}}Q_OK}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция выводит модальное окно с текстом сообщения, при этом стиль окна будет зависеть от второго аргумента.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[AskQuestion]]&lt;br /&gt;
|form='''AskQuestion'''(''&amp;lt;Текст вопроса (STRING)&amp;gt;'',''&amp;lt;Тип диалога и его кнопки (INT)&amp;gt;''{{Optional|,&amp;lt;Индекс кнопки по умолчанию (INT)&amp;gt;{{Default|{{Eq}}1}}}}):''&amp;lt;Идентификатор выбранной кнопки (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция выводит модальное окно с текстом вопроса со стилем и кнопками, заданными вторым аргументом. При необходимости, нужную кнопку можно выделить, как кнопку по умолчанию. Пользователь не может закрыть окно, без выбора одной из кнопок, идентификатор которой будет возвращен в результате функции. Для задания режимов и кнопок диалога рекомендуется использовать [[Константы#Константы диалогов|константы диалогов]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[SelectDataType]]&lt;br /&gt;
|form='''SelectDataType'''({{Optional|&amp;lt;Список типов объектов для выбора (STRING)&amp;gt;,&amp;lt;Заголовок формы (STRING)&amp;gt;}}):''&amp;lt;Тип и имя выбранного объекта или пустая строка (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция позволяет выбрать тип (включая типы и виды объектов базы данных) из списка типов, ограниченного, если необходимо, первым аргументом. Функция возвращает выбранный пользователем тип или пустую строку, если пользователь отказался от выбора.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[SelectFormSettingsFile]]&lt;br /&gt;
|form='''SelectFormSettingsFile'''(''&amp;lt;Загрузка установок (INT)&amp;gt;'',{{ByRef|&amp;lt;Путь файла установок (STRING)&amp;gt;,&amp;lt;Имя файла установок (STRING)&amp;gt;}}):''&amp;lt;Пользователь осуществил выбор 1 или 0 (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция показывает диалог сохранения или загрузки установок формы. Если пользователь выбрал файл установок (для загрузки или сохранения), будут заполнены переменные путь к файлу или имя файла установок, и функция возвратится с результатом 1.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[OpenFileDialog]]&lt;br /&gt;
|form='''OpenFileDialog'''({{ByRef|&amp;lt;Имя файла (STRING)&amp;gt;}}{{Optional|,&amp;lt;Заголовок диалога (STRING)&amp;gt;,&amp;lt;Доступные фильтры файлов (STRING)&amp;gt;,&amp;lt;Тип диалога (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Расширение по умолчанию (STRING)&amp;gt;}}):''&amp;lt;Пользователь выбрал файл (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция выводит стандартный системный диалог открытия файла с заголовком и установками, определяемыми аргументами. Результат выбора возвращается в переменной, задающей первый аргумент.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[SaveFileDialog]]&lt;br /&gt;
|form='''SaveFileDialog'''({{ByRef|&amp;lt;Имя файла (STRING)&amp;gt;}}{{Optional|,&amp;lt;Заголовок диалога (STRING)&amp;gt;,&amp;lt;Доступные фильтры файлов (STRING)&amp;gt;,&amp;lt;Тип диалога (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Расширение по умолчанию (STRING)&amp;gt;}}):''&amp;lt;Пользователь нажал на ОК (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция выводит стандартный системный диалог сохранения файла с заголовком и установками, определяемыми аргументами. Выбранное имя файла для сохранения возвращается в переменной, задающей первый аргумент.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[OpenFileDialogServer]]&lt;br /&gt;
|form='''OpenFileDialogServer'''({{ByRef|&amp;lt;Имя файла (STRING)&amp;gt;}}{{Optional|,&amp;lt;Заголовок диалога (STRING)&amp;gt;,&amp;lt;Доступные фильтры файлов (STRING)&amp;gt;,&amp;lt;Тип диалога (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Расширение по умолчанию (STRING)&amp;gt;,&amp;lt;Ограничить доступ этим каталогом (STRING)&amp;gt;}}):''&amp;lt;Пользователь выбрал файл (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция выводит стандартный системный диалог открытия файла на стороне сервера с заголовком и установками, определяемыми аргументами. Результат выбора возвращается в переменной, задающей первый аргумент.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[SaveFileDialogServer]]&lt;br /&gt;
|form='''SaveFileDialogServer'''({{ByRef|&amp;lt;Имя файла (STRING)&amp;gt;}}{{Optional|,&amp;lt;Заголовок диалога (STRING)&amp;gt;,&amp;lt;Доступные фильтры файлов (STRING)&amp;gt;,&amp;lt;Тип диалога (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Расширение по умолчанию (STRING)&amp;gt;,&amp;lt;Ограничить доступ этим каталогом (STRING)&amp;gt;}}):''&amp;lt;Пользователь нажал на ОК (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция выводит стандартный системный диалог сохранения файла на стороне сервера с заголовком и установками, определяемыми аргументами. Выбранное имя файла для сохранения возвращается в переменной, задающей первый аргумент.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[SelectFontDialog]]&lt;br /&gt;
|form='''SelectFontDialog'''({{ByRef|&amp;lt;Наименования шрифта с его свойствами (STRING)&amp;gt;}}{{Optional|,&amp;lt;Запретить выбор стилей (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Минимальный размер шрифта (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Максимальный размер шрифта (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Пользователь нажал на ОК (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция выводит стандартный системный диалог выбора шрифта с установками, определяемыми аргументами. Выбранное имя шрифта и его свойства возвращаются в переменной, задающей первый аргумент.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[SelectIconDialog]]&lt;br /&gt;
|form='''SelectIconDialog'''({{ByRef|&amp;lt;Индекс выбранной иконки или ноль (INT)&amp;gt;}}{{Optional|,&amp;lt;Заголовок диалога (STRING)&amp;gt;}}):''&amp;lt;Пользователь выполнил выбор (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция выводит стандартный модальный диалог выбора иконки из библиотеки иконок. Если пользователь выберет какую-либо иконку или пункт &amp;quot;без картинки&amp;quot;, функция возвратит 1, иначе 0.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[SelectFolderDialog]]&lt;br /&gt;
|form='''SelectFolderDialog'''({{ByRef|&amp;lt;Имя папки (STRING)&amp;gt;}}{{Optional|,&amp;lt;Заголовок диалога (STRING)&amp;gt;}}):''&amp;lt;Пользователь выбрал папку (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция выводит стандартный системный диалог выбора папки с файлами с заголовком, определяемым вторым аргументом. Результат выбора возвращается в переменной, задающей первый аргумент.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[EditScriptDialog]]&lt;br /&gt;
|form='''EditScriptDialog'''({{ByRef|&amp;lt;Исходный текст программы (STRING)&amp;gt;}}{{Optional|,&amp;lt;Заголовок диалога (STRING)&amp;gt;,&amp;lt;Внешние переменные ч/з запятые (STRING)&amp;gt;}}):''&amp;lt;Пользователь нажал на ОК (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция выводит модальный диалог редактирования исходного текста программы, заданного первым аргументом. Диалог имеет стандартную подсветку текста и позволяет провести синтаксический контроль при необходимости. Результат редактирования возвращается в переменной, задающей первый аргумент.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[AskString]]&lt;br /&gt;
|form='''AskString'''({{ByRef|&amp;lt;Текст для редактирования (STRING)&amp;gt;}}{{Optional|,&amp;lt;Заголовок диалога (STRING)&amp;gt;,&amp;lt;Максимальная длина строки (INT)&amp;gt;{{Default|{{Eq}}256}},&amp;lt;Тип строки (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Пользователь нажал на ОК (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция выводит модальный диалог редактирования текста, заданного первым аргументом. Текст может содержать как одну строку, так быть и многострочным. Результат редактирования возвращается в переменной, задающей первый аргумент.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[AskNumber]]&lt;br /&gt;
|form='''AskNumber'''({{ByRef|&amp;lt;Число для редактирования (NUMBER)&amp;gt;}}{{Optional|,&amp;lt;Заголовок диалога (STRING)&amp;gt;,&amp;lt;Максимальная длина числа (INT)&amp;gt;{{Default|{{Eq}}30}},&amp;lt;Количество знаков после точки (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Пользователь нажал на ОК (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция выводит модальный диалог редактирования числа, заданного первым аргументом. Число может быть как целым, так и вещественным. В диалоге имеется возможность вызова калькулятора. Результат редактирования возвращается в переменной, задающей первый аргумент.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[AskDate]]&lt;br /&gt;
|form='''AskDate'''({{Optional|&amp;lt;Дата по умолчанию (DATE)&amp;gt;,&amp;lt;Заголовок диалога (STRING)&amp;gt;,&amp;lt;Режим показа диалога (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Выбранная дата или 0 (DATE,INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция выводит диалог в виде поля или календаря для выбора даты. В режиме поля, у пользователя есть возможность вызвать календарь. Функция возвращает результат выбора или ноль, если пользователь отказался от выбора.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[AskPeriod]]&lt;br /&gt;
|form='''AskPeriod'''({{ByRef|&amp;lt;Начальная дата периода (DATE)&amp;gt;,&amp;lt;Конечная дата периода (DATE)&amp;gt;}}{{Optional|,&amp;lt;Заголовок диалога (STRING)&amp;gt;,&amp;lt;Тип ограничения при выборе периода (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Пользователь нажал на ОК (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция выводит диалог для выбора периода времени. На возможность выбора могут быть наложены ограничения (к примеру, выбирать только периоды в целый месяц). Результат выбора возвращается в переменных, задающих первые два аргумента.&lt;br /&gt;
}}&lt;br /&gt;
{{function footer}}&lt;br /&gt;
&lt;br /&gt;
== Функции, связанные с сервером и базой данных==&lt;br /&gt;
В данном разделе собраны функции, напрямую или косвенно связанные с сервером базы данных. Если клиент работает в локальном режиме, без подключения к серверу базы данных, многие функции этой группы не будут иметь значения.&lt;br /&gt;
{{Общие функции, связанные с БД}}&lt;br /&gt;
&lt;br /&gt;
== Глобальные функции строк-массивов значений ==&lt;br /&gt;
Группа функций, позволяющая хранить строки-флаги с префиксами на сервере в виде быстрой небольшой базы данных с двумя столбцами (значение и префикс). Функции можно использовать, когда нужно проверять существует ли группа строк в массиве, добавлять строки в массив или удалять их. Массивы доступны для всех клиентов, так как хранятся в памяти сервера. По этой же причине не рекомендуется использование слишком больших массивов или слишком больших строк, так как на сервере может не остаться памяти на выполнение других запросов. При перезапуске сервера, массивы автоматически не восстанавливаются. Если требуется запомнить их содержимое, чтобы не заполнять их всякий раз при запуске сервера, при создании массива можно указать на бинарный файл, в который массив будет периодически сохраняться после изменений после определенного времени. Такой подход не гарантирует, что текущее изменение будет сохранено, если сервер будет остановлен. Существует также подобная группа функций для клиентской стороны (см. [[Строковые_функции#Функции строк-массивов значений|Функции строк-массивов значений]]), но имеет несколько другой функционал.&lt;br /&gt;
&lt;br /&gt;
{{function header}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GlobalStringsHeaps]]&lt;br /&gt;
|form='''GlobalStringsHeaps''':''&amp;lt;Массивы, созданные на сервере (LIST)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает список всех массивов, созданных на данный момент на сервере. Возвращается список, элементами которого являются идентификаторы массивов (числовые значения), а наименованиями -- имена массивов.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GlobalStringsHeapsFind]]&lt;br /&gt;
|form='''GlobalStringsHeapsFind'''(''&amp;lt;Имя массива (STRING)&amp;gt;''):''&amp;lt;Идентификатор или ноль (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция проверяет, существует ли на сервере массив по его наименованию. Если массив существует, будет возвращен его идентификатор, иначе ноль.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GlobalStringsHeapsAdd]]&lt;br /&gt;
|form='''GlobalStringsHeapsAdd'''(''&amp;lt;Имя массива (STRING)&amp;gt;''{{Optional|,&amp;lt;Строка-разделитель (STRING)&amp;gt;{{Default|{{Eq}}Chr(0)}},&amp;lt;Разделитель префикса (STRING)&amp;gt;{{Default|{{Eq}}&amp;quot;&amp;quot;}},&amp;lt;Параметры массива (LIST)&amp;gt;}}):''&amp;lt;Идентификатор массива (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция создает на сервере массив по его имени, с указанным разделителем значений и префиксов и указанными параметрами, задающимися в виде списка, и возвращает идентификатор созданного массива. Если массив уже существует, будет возвращен его идентификатор без каких-либо дополнительных изменений.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GlobalStringsHeapsRemove]]&lt;br /&gt;
|form='''GlobalStringsHeapsRemove'''(''&amp;lt;Имя или идентификатор массива (STRING,INT)&amp;gt;''):''&amp;lt;0 или 1 (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция удаляет массив с сервера по его наименованию или идентификатору. Если массив удален (найден на сервере), функция возвращает ''1'', иначе ''0''.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GlobalStringsAdd]]&lt;br /&gt;
|form='''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;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция добавляет произвольное количество строк из списка или одной строки с разделителями в массив, заданный по его наименованию или идентификатору. Режим функции задает условие добавления, а также формат ответа (последний может быть как числовым, так и в виде списка).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GlobalStringsRemove]]&lt;br /&gt;
|form='''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;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция удаляет произвольное количество строк из списка или одной строки с разделителями из массива, заданного по его наименованию или идентификатору. Режим функции задает условие удаления, а также формат ответа (последний может быть как числовым, так и в виде списка).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GlobalStringsFind]]&lt;br /&gt;
|form='''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;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция выполняет поиск произвольного количества строк, заданных в списке или в одной строке с разделителями, в массиве по его наименованию или идентификатору. Режим функции задает условие поиска, а также формат ответа (последний может быть как числовым, так и в виде списка).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GlobalStringsShrink]]&lt;br /&gt;
|form='''GlobalStringsShrink'''(''&amp;lt;Имя или идентификатор массива (STRING,INT)&amp;gt;''{{Optional|,''&amp;lt;Порог сжатия в % (INT)&amp;gt;''{{Default|{{Eq}}0}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция форсирует процедуру сжатия памяти буферов массива, которая обычно выполняется автоматически после определенного количества удалений из массива.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GlobalStringsSaveToFile]]&lt;br /&gt;
|form='''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;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция выполняет сохранение массива на диск в файловой системе сервера в виде файла. Обычно она выполняется автоматически, если в массиве были изменения после определенного количества времени.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GlobalStringsAddFromFile]]&lt;br /&gt;
|form='''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;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция выполняет добавление сохраненного ранее массива с диска в файловой системе сервера к массиву, заданному по наименованию или идентификатору. Обычно она выполняется автоматически при создании массива, если указан файл его хранения.&lt;br /&gt;
}}&lt;br /&gt;
{{function footer}}&lt;br /&gt;
&lt;br /&gt;
== Функции отладки ==&lt;br /&gt;
Функции, собранные здесь, используются для изменения параметров и работы со встроенным отладчиком. Отладчик доступен как для визуальных, так и для консольных клиентов.&lt;br /&gt;
{{function header}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[DebuggingRights]]&lt;br /&gt;
|form='''DebuggingRights'''({{Optional|&amp;lt;Режим отладки 0 или 1 (INT)&amp;gt;}}):''&amp;lt;Текущий режим отладки (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает или/и изменяет текущий режим отладки. Если режим отладки не включен, встроенный отладчик не будет выведен в момент появления исключения или нажатия Ctrl+Alt+C.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Debugbreak]]&lt;br /&gt;
|form='''Debugbreak'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция приостанавливает выполнение и открывает окно отладчика на текущей инструкции, если это позволяет текущий режим отладки. Функция не должна быть последней в модуле.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ProfilerStart]]&lt;br /&gt;
|form='''ProfilerStart'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция включает встроенный профайлер, если это позволяет текущий режим отладки. Данные, накопленные профайлером ранее не изменяются. При включенном профайлере программа исполняется несколько медленнее.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ProfilerStop]]&lt;br /&gt;
|form='''ProfilerStop'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция отключает встроенный профайлер. Данные, накопленные профайлером ранее не изменяются.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ProfilerClear]]&lt;br /&gt;
|form='''ProfilerClear'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция очищает данные, накопленные профайлером.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Assert]]&lt;br /&gt;
|form='''Assert'''(''&amp;lt;Условие утверждения (INT)&amp;gt;''{{Optional|,&amp;lt;Описание ошибки утверждения (STRING)&amp;gt;}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция проверяет истинность утверждения, заданного первым аргументом, если утверждение ложно, функция вызывает исключение 71 (ERR_ASSERTIONERROR) с требуемым описанием, если необходимо.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[AssertMode]]&lt;br /&gt;
|form='''AssertMode'''(''&amp;lt;Режим ошибок утверждения (INT)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция изменяет способ обработки ошибок утверждения (&amp;lt;code&amp;gt;[[Assert]]&amp;lt;/code&amp;gt;). Режим используется для всех потоков клиента.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Raise]]&lt;br /&gt;
|form='''Raise''' {{Optional|&amp;lt;Описание исключения (STRING)&amp;gt;}}&lt;br /&gt;
|type=2&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция вызывает исключение 41 (ERR_USER) с требуемым описанием, если необходимо.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Reraise]]&lt;br /&gt;
|form='''Reraise'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция может использоваться внутри блока &amp;lt;code&amp;gt;Except ... EndTry&amp;lt;/code&amp;gt; для того, чтобы снова вызвать подавленное конструкцией &amp;lt;code&amp;gt;Except&amp;lt;/code&amp;gt; исключение.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[PopError]]&lt;br /&gt;
|form='''PopError'''({{Optional|&amp;lt;Режим (INT)&amp;gt;{{Default|{{Eq}}15}}}}):''&amp;lt;Описание исключения (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает описание текущего исключения, собирая его из требуемых частей. Информация об исключении удаляется из очереди (но не само исключение). Функцию рекомендуется использовать внутри блока &amp;lt;code&amp;gt;Except ... EndTry&amp;lt;/code&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[PeekError]]&lt;br /&gt;
|form='''PeekError'''({{Optional|&amp;lt;Режим (INT)&amp;gt;{{Default|{{Eq}}15}}}}):''&amp;lt;Описание исключения (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает описание текущего исключения, собирая его из требуемых частей. Информация об исключении не удаляется из очереди. Функцию можно использовать внутри блоков &amp;lt;code&amp;gt;Except ... EndTry&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;Finally ... EndTry&amp;lt;/code&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[SuppressException]]&lt;br /&gt;
|form='''SuppressException'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция может использоваться только внутри блока &amp;lt;code&amp;gt;Finally ... EndTry&amp;lt;/code&amp;gt;. Текущее исключение в очереди исключений будет удалено, оно не будет инициировано после выполнения &amp;lt;code&amp;gt;EndTry&amp;lt;/code&amp;gt;. Функция позволяет превратить конструкцию &amp;lt;code&amp;gt;Try ... Finally&amp;lt;/code&amp;gt; в аналог конструции &amp;lt;code&amp;gt;Try ... Except&amp;lt;/code&amp;gt; программно.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Writeln]]&lt;br /&gt;
|form='''Writeln'''(''&amp;lt;Аргумент&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Отладочная функция выводит строковое представление аргумента в [[Визуальный лог клиента|лог]] клиента. Функция является упрощенной версией функции [[Message]].&lt;br /&gt;
}}&lt;br /&gt;
{{function footer}}&lt;br /&gt;
&lt;br /&gt;
=== Внутренние отладочные функции ===&lt;br /&gt;
Данная группа функций обычно напрямую не используется в рабочих программах, но может пригодиться для целей отладки и исправления ошибок.&lt;br /&gt;
{{function header}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[RefCount]]&lt;br /&gt;
|form='''RefCount'''(''&amp;lt;Аргумент&amp;gt;''):''&amp;lt;Значения счетчика ссылок объекта (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает значение счетчика внешних ссылок сложного объекта (см. [[Объекты]]), либо -1, если аргумент не является сложным объектом.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[BusyCount]]&lt;br /&gt;
|form='''BusyCount'''(''&amp;lt;Аргумент&amp;gt;''):''&amp;lt;Значения счетчика занятости однопоточных объектов (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция отладки позволяет узнать величину свойства &amp;quot;занят&amp;quot; для однопоточных объектов.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[dbgVarStackSize]]&lt;br /&gt;
|form='''dbgVarStackSize'''():''&amp;lt;Количество переменных в стеке (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Отладочная функция возвращает общее количество переменных в стеке переменных текущего потока.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[dbgVarDump]]&lt;br /&gt;
|form='''dbgVarDump'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Отладочная функция выводит в консоль или панель логов визуального клиента отладочную информацию по текущему состоянию стека переменных текущего потока.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[dbgObjectHeapsNumber]]&lt;br /&gt;
|form='''dbgObjectHeapsNumber'''():''&amp;lt;Количество объектных стеков в системе (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Отладочная функция получает количество стеков объектов, существующих во всех работающих потоках, а также стеков объектов, которые принадлежали закрытым потокам, однако, содержащих адресуемые объекты.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[dbgEvalObjectsNumber]]&lt;br /&gt;
|form='''dbgEvalObjectsNumber'''():''&amp;lt;Количество объектов в стеке исполнения (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Отладочная функция получает количество объектов в стеке исполнения текущего потока.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[dbgObjectsNumber]]&lt;br /&gt;
|form='''dbgObjectsNumber'''({{Optional|&amp;lt;Объект, стек которого необходимо использовать&amp;gt;}}):''&amp;lt;Количество объектов в стеке объектов (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Отладочная функция получает количество объектов в стеке объектов текущего потока исполнения, либо потока, в котором был создан объект аргумента.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[dbgMemoryAllocated]]&lt;br /&gt;
|form='''dbgMemoryAllocated'''():''&amp;lt;Объем памяти, выделенный системой (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Отладочная функция получает текущий объем памяти в байтах, выделенный системой (с учетом всех внутренних переменных, стеков потоков, объектных стеков и пр.)&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[dbgShowAllocInfo]]&lt;br /&gt;
|form='''dbgShowAllocInfo'''(''&amp;lt;Включение режима накопления информации по объектам текущего стека объектов (INT)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Отладочная функция должна использоваться дважды. В первый раз до выполнения операции, которая может произвести утечку объектов с параметром 1 (включить), затем второй раз после операции с параметром 0 (выключить), после чего функция выводит в консоль информацию по всем объектам, созданным за время операции, оставшимся в памяти после ее окончания. Функция может использоваться только в консольном клиенте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[dbgOLEMethodsList]]&lt;br /&gt;
|form='''dbgOLEMethodsList'''(''&amp;lt;OLE-объект (OLE)&amp;gt;''):''&amp;lt;Дерево методов и свойств объекта (TREE)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Отладочная функция, позволяет получить внутренний список имен методов и свойств OLE-объекта в виде дерева. Может использоваться, чтобы найти имя метода, если документация недоступна или недостаточно подробна.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[dbgStackTrace]]&lt;br /&gt;
|form='''dbgStackTrace'''():''&amp;lt;Стек вызовов текущего потока (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Отладочная функция получает языковый стек вызовов текущего исполняемого потока в виде строки.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[dbgSysStackTrace]]&lt;br /&gt;
|form='''dbgSysStackTrace'''():''&amp;lt;Системный стек вызовов текущего потока (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Отладочная функция получает системный стек вызовов текущего исполняемого потока в виде строки. Без наличия соответствующего &amp;lt;code&amp;gt;.map&amp;lt;/code&amp;gt; файла клиента, стек будет иметь неописательную информацию.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[dbgSysStackTraceVisual]]&lt;br /&gt;
|form='''dbgSysStackTraceVisual'''():''&amp;lt;Системный стек вызовов визуального потока (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Отладочная функция получает системный стек вызовов визуального потока в виде строки. Без наличия соответствующего &amp;lt;code&amp;gt;.map&amp;lt;/code&amp;gt; файла клиента, стек будет иметь неописательную информацию. Функция может быть вызвана только для визуального клиента.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[dbgSysLastExceptionStackTrace]]&lt;br /&gt;
|form='''dbgSysLastExceptionStackTrace'''():''&amp;lt;Системный стек вызовов последнего системного исключения (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Отладочная функция получает системный стек вызовов последнего исключения на уровне системы в виде строки. Без наличия соответствующего &amp;lt;code&amp;gt;.map&amp;lt;/code&amp;gt; файла клиента, стек будет иметь неописательную информацию.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[dbgHRPCAvailable]]&lt;br /&gt;
|form='''dbgHRPCAvailable'''():''&amp;lt;Можно ли использовать т.в.т. (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Отладочная функция проверяет, включен ли на данной машине таймер высокой точности (обычно включение происходит в BIOS компьютера).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[dbgHRPCCurrent]]&lt;br /&gt;
|form='''dbgHRPCCurrent'''():''&amp;lt;Текущее значение т.в.т. (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Отладочная функция получает текущее значение таймера высокой точности. Если таймер не включен на системном уровне, функция возвращает 0.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[dbgHRPCGetPeriod]]&lt;br /&gt;
|form='''dbgHRPCGetPeriod'''(''&amp;lt;Предыдущее значение т.в.т. (INT)&amp;gt;''):''&amp;lt;Прошедшее время в наносекундах (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Отладочная функция получает промежуток времени, прошедший от предыдущего значения таймера высокой точности (заданного аргументом) до текущего момента, выраженное в наносекундах. Если таймер не включен на системном уровне, функция возвращает пустое значение. Перевод периода в секунды можно осуществить по формуле &amp;lt;code&amp;gt;&amp;lt;Результат&amp;gt;/1000000000&amp;lt;/code&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[dbgWriteLog]]&lt;br /&gt;
|form='''dbgWriteLog'''(''&amp;lt;Строка лога (STRING)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Отладочная функция сохраняет информацию в текстовом логе клиента.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[dbgToFileTime]]&lt;br /&gt;
|form='''dbgToFileTime'''(''&amp;lt;Дата (DATE)&amp;gt;''):''&amp;lt;Дата в формате FILETIME (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Отладочная функция превращает дату в 64-битное число в формате FILETIME (формат, в котором система хранит даты).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[dbgFromFileTime]]&lt;br /&gt;
|form='''dbgFromFileTime'''(''&amp;lt;Дата в формате FILETIME (INT)&amp;gt;''):''&amp;lt;Дата (DATE)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Отладочная функция превращает 64-битное число в формате FILETIME (формат, в котором система хранит даты) в дату.&lt;br /&gt;
}}&lt;br /&gt;
{{function footer}}&lt;br /&gt;
&lt;br /&gt;
=== Объект сторожевого пса ===&lt;br /&gt;
Основная характеристика консольных клиентов, работающих в режиме сервера, это их постоянная доступность. Если консольное приложение вызывает внешние функции, есть вероятность зависания, если в этих внешних функциях содержатся ошибки (OLE-объекты могут зависнут, либо, печать на принтер, драйвер которого, может войти в вечный цикл ожидания или вывести сообщение об ошибке на экран, ожидая действия пользователя и пр.). Функции сторожевого пса помогают при появлении зависаний перезапустить программу-клиент. Каждый объект сторожевого пса в активном состоянии работает в отдельном системном потоке, наличие большого количества таких объектов может негативно сказаться на ресурсах системы.&lt;br /&gt;
{{function header}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Watchdog.Create|Create]]&lt;br /&gt;
|form={{Grey|Watchdog.}}'''Create'''({{Optional|&amp;lt;Режим сторожевого пса (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Новый объект сторожевого пса (Watchdog)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция создает новый объект сторожевого пса с указанным режимом. Сторожевой пес создается в неактивном состоянии. Для активации необходимо использовать функцию [[Watchdog.Create|Guard]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Watchdog.Guard|Guard]]&lt;br /&gt;
|form={{Grey|Watchdog.}}'''Guard'''(''&amp;lt;Количество миллисекунд (INT)&amp;gt;''):''&amp;lt;Сторожевой пес удачно активирован 1 или 0 (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит включение режима сторожевого пса с указанным периодом слежения. Функция может использоваться только в консольном клиенте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Watchdog.Feed|Feed]]&lt;br /&gt;
|form={{Grey|Watchdog.}}'''Feed'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция обнуляет время ожидания в режиме сторожевого пса. Функция может использоваться только в консольном клиенте. Функция должна исполняться периодически, чтобы пес не инициировал перезагрузку консольного клиента. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Watchdog.Sleep|Sleep]]&lt;br /&gt;
|form={{Grey|Watchdog.}}'''Sleep'''():''&amp;lt;Сторожевой пес удачно деактивирован 1 или 0 (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит выключение (деактивацию) сторожевого пса. Деактивация будет произведена автоматически в момент удаления объекта из системы, если он был в активном состоянии в момент удаления. Функция может использоваться только в консольном клиенте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Watchdog.Mode|Mode]]&lt;br /&gt;
|form={{Grey|Watchdog.}}'''Mode'''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут получает или изменяет режим сторожевого пса. Изменения можно производить даже если пес еще не активирован.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Watchdog.Active|Active]]&lt;br /&gt;
|form={{Grey|Watchdog.}}'''Active'''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает 1, если сторожевой пес активирован, иначе возвращает 0. Атрибут доступен только для чтения.&lt;br /&gt;
}}&lt;br /&gt;
{{function footer}}&lt;br /&gt;
&lt;br /&gt;
== Функции криптографии ==&lt;br /&gt;
Криптографическое функции используются для кодирования информации при пересылке по ненадежным каналам, либо нахождения контрольных сумм или хэшей, используемых в работе с web стандартами.&lt;br /&gt;
{{function header}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[CreateKeySchedule]]&lt;br /&gt;
|form='''CreateKeySchedule'''(''&amp;lt;Стандарт кодирования (STRING)&amp;gt;'',''&amp;lt;Ключ (пароль) (STRING,BUFFER)&amp;gt;''{{Optional|,&amp;lt;Для декодирования (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Параметр кодировщика (BUFFER)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция позволяет создать из текстового ключа объект, необходимый для кодирования или декодирования информации с помощью этого ключа. В дальнейшем этот объект может использоваться для вызова функций кодирования [[Encrypt]] или декодирования [[Decrypt]]. Первый аргумент задает стандарт кодирования, к примеру, &amp;quot;AES256&amp;quot;.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Encrypt]]&lt;br /&gt;
|form='''Encrypt'''(''&amp;lt;Стандарт кодирования (STRING)&amp;gt;'',''&amp;lt;Информация для кодирования (STRING,BUFFER)&amp;gt;''{{Optional|,''&amp;lt;Параметр кодировщика (расписание кодирования) (BUFFER)&amp;gt;'',&amp;lt;Источник в формате UTF-16 (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Закодированная строка или 1&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит кодирование строки или буфера по стандарту, заданному первым аргументом. Размер строки или буфера должен быть кратен определенному количеству байт, заданному стандартом кодирования (к примеру, для AES-256, это число 16); если размер не будет кратен нужному количеству байт, функция вызове исключение. Нужно иметь в виду, что для UTF-16 строк, размер в байтах в два раза больше, чем количество символов в строке. Если первым параметром служит буфер, в результате функция возвратит единицу, а содержимое буфера будет закодировано, если первым параметром была передана строка, функция возвратит ANSI строку.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Decrypt]]&lt;br /&gt;
|form='''Decrypt'''(''&amp;lt;Стандарт кодирования (STRING)&amp;gt;'',''&amp;lt;Информация для декодирования (STRING,BUFFER)&amp;gt;''{{Optional|,''&amp;lt;Параметр декодировщика (расписание декодирования) (BUFFER)&amp;gt;'',&amp;lt;Результат в формате UTF-16 (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Декодированная строка или 1&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит декодирование строки или буфера, закодированных по стандарту, заданному первым аргументом. Размер строки или буфера должен быть кратен количеству байт, заданному стандартом кодирования (к примеру, для AES-256, это число 16); если размер не будет кратен нужному количеству байт, функция вызове исключение. Нужно иметь в виду, что для UTF-16 строк, размер в байтах в два раза больше, чем количество символов в строке. Если первым параметром служит буфер, в результате функция возвратит единицу, а содержимое буфера будет декодировано, если первым параметром была передана строка, функция возвратит ANSI или UTF-16 строку, в зависимости от значения третьего аргумента.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[CalculateHash]]&lt;br /&gt;
|form='''CalculateHash'''(''&amp;lt;Информация для нахождения контрольной суммы (STRING,BUFFER)&amp;gt;''{{Optional|,&amp;lt;Алгоритм (STRING)&amp;gt;{{Default|{{Eq}}&amp;quot;INTERNAL&amp;quot;}},&amp;lt;Завершающий блок (INT)&amp;gt;{{Default|{{Eq}}1}},&amp;lt;Сумма или состояние предыдущего блока (STRING,BUFFER)&amp;gt;,&amp;lt;Дополнительный параметр (STRING)&amp;gt;{{Default|{{Eq}}&amp;quot;&amp;quot;}}}}):''&amp;lt;Сумма или текущее состояние (STRING,BUFFER)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=1&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция подсчет контрольной суммы или хэша буфера или строки по указанному алгоритму, имеется также возможность подсчитать сумму нескольких блоков, как единого целого, вызывая эту функцию для каждого из блоков один раз. В список алгоритмов входят такие, как &amp;quot;MD5&amp;quot;, &amp;quot;CRC32&amp;quot;, &amp;quot;SHA-1&amp;quot; и пр.&lt;br /&gt;
}}&lt;br /&gt;
{{function footer}}&lt;br /&gt;
&lt;br /&gt;
== Функции архивации ==&lt;br /&gt;
Функции архивации помогают распаковать или упаковать информацию без необходимости использования внешних исполняемых файлов или библиотек. [[StreamCompress]] и [[StreamDecompress]] упаковывают и распаковывают поток данных, не связанный с файлами на диске, позволяя сжимать информацию передаваемую по WEB или создавать сжатые данные произвольного размера.&lt;br /&gt;
{{function header}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[StreamCompress]]&lt;br /&gt;
|form='''StreamCompress'''(''&amp;lt;Данные для упаковки (STRING,BUFFER,TEXT)&amp;gt;''{{Optional|,&amp;lt;Алгоритм (STRING)&amp;gt;{{Default|{{Eq}}&amp;quot;ZLIB&amp;quot;}},&amp;lt;Уровень (INT)&amp;gt;{{Default|{{Eq}}6}},&amp;lt;Завершающий блок (INT)&amp;gt;{{Default|{{Eq}}1}}{{ByRef|,&amp;lt;Словарь упаковки&amp;gt;}}}}):''&amp;lt;Результат упаковки (STRING,BUFFER)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит упаковку блока данных по заданному алгоритму. Для последовательной упаковки частей одного большого блока данных, функцию необходимо вызвать несколько раз с каждой частью блока данных.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[StreamDecompress]]&lt;br /&gt;
|form='''StreamDecompress'''(''&amp;lt;Данные для распаковки (STRING,BUFFER)&amp;gt;''{{Optional|,&amp;lt;Алгоритм (STRING)&amp;gt;{{Default|{{Eq}}&amp;quot;ZLIB&amp;quot;}},&amp;lt;Завершающий блок (INT)&amp;gt;{{Default|{{Eq}}1}}{{ByRef|,&amp;lt;Словарь распаковки или общий размер упакованного блока (INT,?)&amp;gt;}}}}):''&amp;lt;Результат распаковки (STRING,BUFFER)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит распаковку блока данных по заданному алгоритму. Для последовательной распаковки частей одного большого блока данных, функцию необходимо вызвать несколько раз с каждой частью блока данных.&lt;br /&gt;
}}&lt;br /&gt;
{{function footer}}&lt;br /&gt;
&lt;br /&gt;
== Функции штрихкодов и символов ==&lt;br /&gt;
Функции штрихкодов и символов позволяют создавать штрихкоды в виду картинок, которые затем можно добавить на форму, напечатать, вывести на web-странице и пр.&lt;br /&gt;
{{function header}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Generate1DBarcode]]&lt;br /&gt;
|form='''Generate1DBarcode'''(''&amp;lt;Тип штрихкода (STRING)&amp;gt;''{{ByRef|,&amp;lt;Ширина (INT)&amp;gt;,&amp;lt;Высота (INT)&amp;gt;}},''&amp;lt;Кодируемое сообщение (STRING)&amp;gt;''{{Optional|,&amp;lt;Установки (STRING)&amp;gt;}}):''&amp;lt;Результат (PICTURE)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция генерирует линейный штрихкод указанного типа с указанными размерами, если необходимо. Параметры генерации настраиваются с помощью дополнительных установок, если необходимо. Функция поддерживает следующие виды штрихкодов: '''Code 128''','''UPC''','''EAN''','''Code 39''','''ISBN''','''Code 93''','''ITF''' (Interleaved 2 of 5),'''MSI''','''Codabar'''.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Generate2DBarcode]]&lt;br /&gt;
|form='''Generate2DBarcode'''(''&amp;lt;Тип символа (STRING)&amp;gt;''{{ByRef|,&amp;lt;Ширина (INT)&amp;gt;,&amp;lt;Высота (INT)&amp;gt;}},''&amp;lt;Кодируемое сообщение (STRING)&amp;gt;''{{Optional|,&amp;lt;Установки (STRING)&amp;gt;}}):''&amp;lt;Результат (PICTURE)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=1&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция генерирует двумерный символ указанного типа с указанными размерами, если необходимо. Параметры генерации настраиваются с помощью дополнительных установок, если необходимо. Функция поддерживает следующие виды символов: '''PDF 417''', '''Aztec Code''', '''QR Code''', '''Data Matrix''', '''MaxiCode'''.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[CountBarcodeCRC]]&lt;br /&gt;
|form='''CountBarcodeCRC'''(''&amp;lt;Тип контрольной суммы (STRING)&amp;gt;'',''&amp;lt;Полное кодируемое сообщение (STRING)&amp;gt;''):''&amp;lt;Контрольная сумма (INT,STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция используется для случаев, когда кодируемое сообщение разделено на несколько символов (или штрихкодов), при этом необходима контрольная сумма всего сообщения, чтобы программа декодирования смогла проверить корректность результата.&lt;br /&gt;
}}&lt;br /&gt;
{{function footer}}&lt;br /&gt;
&lt;br /&gt;
== Функции среды исполнения ==&lt;br /&gt;
Данная группа функций используется для программного получения информации о разнообразных свойствах среды исполнения, запуска системных приложений и пр.&lt;br /&gt;
{{function header}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[SysExecNoConsole]]&lt;br /&gt;
|form='''SysExecNoConsole'''(''&amp;lt;Командная строка исполнения (STRING)&amp;gt;''{{Optional|,&amp;lt;Не возвращаться до завершения (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Код, возвращенный приложением (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит запуск приложения с параметрами в командной строке, подавляя создание консоли при запуске, приложение может находиться на сервере, в этом случае, оно сначала будет перенесено на локальный диск.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[SysExec]]&lt;br /&gt;
|form='''SysExec'''(''&amp;lt;Командная строка исполнения (STRING)&amp;gt;''{{Optional|,&amp;lt;Не возвращаться до завершения (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Код, возвращенный приложением (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит запуск приложения с параметрами в командной строке, приложение может находиться на сервере, в этом случае, оно сначала будет перенесено на локальный диск.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[SysExecNoConsoleLocal]]&lt;br /&gt;
|form='''SysExecNoConsoleLocal'''(''&amp;lt;Командная строка исполнения (STRING)&amp;gt;''{{Optional|,&amp;lt;Не возвращаться до завершения (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Код, возвращенный приложением (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит запуск приложения с параметрами в командной строке, подавляя создание консоли при запуске, приложение может находиться только на локальном компьютере, разбор командной строки не производится.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[SysExecLocal]]&lt;br /&gt;
|form='''SysExecLocal'''(''&amp;lt;Командная строка исполнения (STRING)&amp;gt;''{{Optional|,&amp;lt;Не возвращаться до завершения (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Код, возвращенный приложением (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит запуск приложения с параметрами в командной строке, приложение может находиться только на локальном компьютере, разбор командной строки не производится.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[SysExecServer]]&lt;br /&gt;
|form='''SysExecServer'''(''&amp;lt;Командная строка исполнения (STRING)&amp;gt;''{{Optional|,&amp;lt;Не возвращаться до завершения (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Код, возвращенный приложением (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит запуск приложения с параметрами в командной строке на стороне сервера, разбор командной строки не производится. Пользователь должен обладать административными правами для использования этой функции. Также нужно понимать, что запуск с флагом ожидания завершения (второй аргумент) приведет к &amp;quot;зависшей&amp;quot; сессии на сервере, если приложение не будет завершено. Этой функцией следует пользоваться в исключительных обстоятельствах и только когда поведение запускаемого приложения хорошо известно заранее.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[StdStreamsSysExec]]&lt;br /&gt;
|form='''StdStreamsSysExec'''(''&amp;lt;Командная строка исполнения (STRING)&amp;gt;'',{{ByRef|&amp;lt;Буфер с дескрипторами (BUFFER)&amp;gt;}}{{Optional|,&amp;lt;Не возвращаться до завершения (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Код, возвращенный приложением (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит запуск приложения с параметрами в командной строке, подавляя создание консоли при запуске, приложение может находиться на сервере, в этом случае, оно сначала будет перенесено на локальный диск. Переменная, заданная вторым аргументом, получает набор дескрипторов для манипуляции со стандартными потоками и самим приложением. Для закрытия дескрипторов должна быть использована функция [[StdStreamsCloseHandles]]&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[StdStreamsTransfer]]&lt;br /&gt;
|form='''StdStreamsTransfer'''(''&amp;lt;Текст для отправки (STRING)&amp;gt;'',''&amp;lt;Буфер с дескрипторами (BUFFER)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит выгрузку текста в StdIn потока запущенного ранее приложения.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[StdStreamsRead]]&lt;br /&gt;
|form='''StdStreamsRead'''(''&amp;lt;Буфер с дескрипторами (BUFFER)&amp;gt;''{{Optional|,&amp;lt;StdErr поток (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Полученный текст (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит получение текста из StdOut или StdErr потоков запущенного ранее приложения.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[StdStreamsCloseHandles]]&lt;br /&gt;
|form='''StdStreamsCloseHandles'''(''&amp;lt;Буфер с дескрипторами (BUFFER)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция закрывает дескрипторы, полученные ранее при запуске приложения. Если не пользоваться этой функцией, в системе будет наблюдаться утечка ресурсов. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[StdStreamsApplicationExited]]&lt;br /&gt;
|form='''StdStreamsApplicationExited'''(''&amp;lt;Буфер с дескрипторами (BUFFER)&amp;gt;''):''&amp;lt;Завершена ли работа приложения (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция проверяет, завершена ли работа приложения, идентифицируемого дескрипторами, полученными при его запуске.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[StdStreamsTerminateApplication]]&lt;br /&gt;
|form='''StdStreamsTerminateApplication'''(''&amp;lt;Буфер с дескрипторами (BUFFER)&amp;gt;''):''&amp;lt;Приложение было завершено (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит попытку завершить работу приложения, идентифицируемого дескрипторами, полученными при его запуске.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[SysEmulateKeystroke]]&lt;br /&gt;
|form='''SysEmulateKeystroke'''(''&amp;lt;Виртуальный код клавиши (INT)&amp;gt;'',''&amp;lt;Произведено нажатие (INT)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция эмулирует нажатие или отпускание клавиши по ее виртуальному коду. Эмуляция производится средствами системы и выполняется даже если окно клиента не является активным окном.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[SysParamCount]]&lt;br /&gt;
|form='''SysParamCount'''():''&amp;lt;Количество параметров командной строки клиента (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает количество параметров, которые были переданы в командной строке при запуске клиента.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[SysParam]]&lt;br /&gt;
|form='''SysParam'''(''&amp;lt;Номер параметра (INT)&amp;gt;''):''&amp;lt;Параметр командной строки (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает параметр командной строки запуска клиента с требуемым номером.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[SysSetEnvValue]]&lt;br /&gt;
|form='''SysSetEnvValue'''(''&amp;lt;Имя переменной (STRING)&amp;gt;'',''&amp;lt;Значение переменной (STRING)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция изменяет переменную системного окружения (environment)&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[SysGetEnvValue]]&lt;br /&gt;
|form='''SysGetEnvValue'''(''&amp;lt;Имя переменной (STRING)&amp;gt;''):''&amp;lt;Значение переменной (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает значение переменной системного окружения (environment). Если переменная не была установлена, будет возвращена пустая строка.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[CopyFileToTemp]]&lt;br /&gt;
|form='''CopyFileToTemp'''(''&amp;lt;Файл на сервере (STRING)&amp;gt;''):''&amp;lt;Путь и имя файла в локальной временной папке (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция копирует файл во временную папку, отдавая его путь и имя. Исходный файл может находиться на сервере или локальном диске.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ClipboardGetText]]&lt;br /&gt;
|form='''ClipboardGetText'''({{Optional|&amp;lt;Формат текста буфера (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Текст из буфера или пустая строка (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает текст из буфера обмена операционной системы в требуемом формате. При ошибке или отсуствии нужного формата, функция возвращает пустую строку.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ClipboardPutText]]&lt;br /&gt;
|form='''ClipboardPutText'''(''&amp;lt;Текст (STRING)&amp;gt;''{{Optional|,&amp;lt;Формат текста буфера (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Удачно изменен системный буфер (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция помещает текст в буфер обмена операционной системы в требуемом формате.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ExitProgram]]&lt;br /&gt;
|form='''ExitProgram'''({{Optional|&amp;lt;Вопрос о сохранении данных (INT)&amp;gt;{{Default|{{Eq}}1}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция позволяет завершить выполнения клиента, по умолчанию, создавая запрос о сохранении текущих форм, требующих сохранения. Все незавершенные транзакции будут либо отменены, либо приняты. Событие [[OnSystemExit]] может отменить действие этой функции.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[CloseProgram]]&lt;br /&gt;
|form='''CloseProgram'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция завершает выполнение клиента без каких-либо дополнительных предупреждений и вопросов. Все незавершенные транзации будут отменены в следствии разрыва связи клиентом. Событие [[OnSystemExit]] не будет вызвано.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[RestartProgram]]&lt;br /&gt;
|form='''RestartProgram'''({{Optional|&amp;lt;Мгновенный перезапуск (INT)&amp;gt;{{Default|{{Eq}}1}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция может использоваться только для консольного клиента. Если аргумент равен 1, функция завершает выполнение клиента без каких-либо дополнительных предупреждений и вопросов. Все незавершенные транзации будут отменены в следствии разрыва связи клиентом. Событие [[OnSystemExit]] не будет вызвано. В случае, если аргумент равен 0, функция закрывает транзакции корректным образом, событие [[OnSystemExit]] может отменить действие этой функции. После завершения работы клиента, будет произведена попытка его повторного запуска.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[sysIsTerminalMode]]&lt;br /&gt;
|form='''sysIsTerminalMode'''():''&amp;lt;Клиент работает в терминальном режиме (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция проверяет, запущен ли текущий клиент в терминальном режиме (1), либо в режиме локального компьютера (0).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[sysTerminalGetComputerName]]&lt;br /&gt;
|form='''sysTerminalGetComputerName'''():''&amp;lt;Наименование клиентского компьютера (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция находит наименование клиентского компьютера, с которого он осуществляет работу на терминальном сервере. Если работа не ведется на терминальном сервере, будет возвращена пустая строка.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[sysLowVideoMemoryMode]]&lt;br /&gt;
|form='''sysLowVideoMemoryMode'''({{Optional|&amp;lt;Включить режим экономия видеопамяти (INT)&amp;gt;}}):''&amp;lt;Состояние режима экономии видеопамяти (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает или/и изменяет состояние режима экономии видеопамяти (рекомендуется для терминальных клиентов).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[MainWindowCaption]]&lt;br /&gt;
|form='''MainWindowCaption'''({{Optional|&amp;lt;Заголовок основного окна клиента (STRING)&amp;gt;}}):''&amp;lt;Текущее заголовок основного окна (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция изменяет заголовок основного окна клиента на необходимый.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ReturnToForeground]]&lt;br /&gt;
|form='''ReturnToForeground'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция делает приложение активным и возвращает ему фокус. Функция может пригодиться после модального вызова внешних библиотек или приложений, которые выводят информацию или окна на экран. После завершения такого приложения (в зависимости от его функциональности) окно программы может не быть активировано корректно или вообще быть скрыто.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[CurrentFormCaption]]&lt;br /&gt;
|form='''CurrentFormCaption'''(''&amp;lt;Заголовок текущей формы клиента (STRING)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция изменяет заголовок текущей формы клиента на необходимый. Функция является аналогом функции [[Form.Caption]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ComputerName]]&lt;br /&gt;
|form='''ComputerName'''():''&amp;lt;Сетевое имя машины клиента (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает сетевое имя машины (компьютера), на которой запущен клиент.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[UserName]]&lt;br /&gt;
|form='''UserName'''():''&amp;lt;Имя учетной записи пользователя на текущей машине (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает имя учетной записи, под которой работает пользователь на текущей машине (компьютере).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ServerUserName]], '''LogonName'''&lt;br /&gt;
|form='''ServerUserName'''():''&amp;lt;Имя учетной записи сервера базы данных (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает имя учетной записи сервера базы данных под которым работает клиент, если клиент не зарегистрирован на сервере базы данных (локальный клиент), функция может возвратить пустую строку.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[IsDBAdministrator]]&lt;br /&gt;
|form='''IsDBAdministrator'''():''&amp;lt;Уровень административных полномочий клиента (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция отдает 0, если клиент зарегистрирован на сервере в режиме обычного пользователя, 1 -- в режиме ограниченного администратора, и 2 -- в режиме администратора (может выполнять привилегированные команды, редактировать учетные записи пользователей и пр.). &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[IsSlowConnection]]&lt;br /&gt;
|form='''IsSlowConnection'''():''&amp;lt;Используется медленное соединение (необходима оптимизация) (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция отдает 1, если для базы данных активен режим &amp;quot;медленное соединение&amp;quot;. В этом режиме клиент будет оптимизировать некоторые запросы к серверу (пытаться уменьшить количество запросов за счет включения нескольких запросов в один), данная функция может служить флагом для программной оптимизации или даже загрузки другого интерфейса для пользователей, работающих по Интернету, а не по локальной сети.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ServerName]]&lt;br /&gt;
|form='''ServerName'''():''&amp;lt;Внутреннее наименование сервера БД (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает короткое наименование сервера базы данных. Если клиент не зарегистрирован на сервере базы данных (локальный клиент), функция возвратит пустую строку.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ServerDescription]]&lt;br /&gt;
|form='''ServerDescription'''():''&amp;lt;Внутреннее описание сервера БД (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает описание сервера базы данных. Если клиент не зарегистрирован на сервере базы данных (локальный клиент), функция возвратит пустую строку.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[DBMSVersion]]&lt;br /&gt;
|form='''DBMSVersion'''():''&amp;lt;Версия ПО СУБД сервера базы данных (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает версию ПО СУБД, которая используется сервером базы данных.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GetTempDirectory]]&lt;br /&gt;
|form='''GetTempDirectory'''():''&amp;lt;Папка временных файлов (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает путь к папке временных файлов. Вне зависимости от прав пользователя в системе, он имеет доступ к чтению и записи внутри такой папки. Папка находится на локальном компьютере.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GetDatabaseDirectory]]&lt;br /&gt;
|form='''GetDatabaseDirectory'''():''&amp;lt;Путь к файлам текущей локальной конфигурации (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция работает только для локальных клиентов (не связанных с сервером базы данных), и возвращает локальный (или сетевой) путь к файлам текущей конфигурации.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GetBinaryDirectory]]&lt;br /&gt;
|form='''GetBinaryDirectory'''():''&amp;lt;Путь к папке, из которой запущен исполняемый файл клиента (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает путь к папке, из которой запущен исполняемый файл клиента (консольного или визуального).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GetUserDirectory]]&lt;br /&gt;
|form='''GetUserDirectory'''():''&amp;lt;Путь к личной папке пользователя (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает путь к личной папке пользователя, при наличии подключения к серверу, этот путь указывает на папку на сервере, и выглядит &amp;lt;code&amp;gt;UserSettings\&amp;lt;Имя пользователя&amp;gt;\&amp;lt;/code&amp;gt;, если клиент работает без подключения к серверу, этот путь указывает на локальную папку, и будет выглядеть &amp;lt;code&amp;gt;&amp;lt;Путь с файлам конфигурации&amp;gt;\UserSettings\&amp;lt;Имя пользователя&amp;gt;\&amp;lt;/code&amp;gt;. В данной папке можно хранить установки, предпочтения и другие файлы, связанные с текущим пользователем. Клиент также сохраняет свои установки форм и печати внутри этой папки, поэтому, нельзя рассчитывать, что она будет пустой.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[CurrentLanguage]]&lt;br /&gt;
|form='''CurrentLanguage'''():''&amp;lt;Код текущего языка по умолчанию (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает код текущего языка по умолчанию. Язык по умолчанию используется в функциях прописи и подобных, где есть возможность кодирования на разных языках. Код языка обычно состоит из двух букв (&amp;lt;code&amp;gt;RU,EN...&amp;lt;/code&amp;gt;). См. также функцию [[SelectLanguage]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[SelectLanguage]]&lt;br /&gt;
|form='''SelectLanguage'''(''&amp;lt;Код языка по умолчанию (STRING)&amp;gt;''):''&amp;lt;Код текущего языка по умолчанию (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция изменяет код текущего языка по умолчанию, возвращая предыдущий. Язык по умолчанию используется в функциях прописи и подобных, где есть возможность кодирования на разных языках. Код языка обычно состоит из двух букв (&amp;lt;code&amp;gt;RU,EN...&amp;lt;/code&amp;gt;). &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[OSVersion]]&lt;br /&gt;
|form='''OSVersion'''():''&amp;lt;Версия операционной системы (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает версию операционной системы, под которой запущен клиент в виде &amp;lt;code&amp;gt;&amp;lt;Тип&amp;gt; Version X.X (Build XXXX: &amp;lt;Название пакета обновления&amp;gt;)&amp;lt;/code&amp;gt; (к примеру '''Windows Version 6.1 (Build 7601: Service Pack 1)''').&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ProgramVersion]]&lt;br /&gt;
|form='''ProgramVersion'''():''&amp;lt;Версия клиента (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает текущую версию клиента в виде &amp;lt;code&amp;gt;X.X (Build: XXXXXX)&amp;lt;/code&amp;gt; (к примеру '''1.1 (Build: 190511)'''). Функция работает как для консольных, так и для визуальных клиентов.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ProgramMode]]&lt;br /&gt;
|form='''ProgramMode'''():''&amp;lt;Тип клиента (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает код типа клиента текущей сессии. 0 -- консольный режим, 1 -- визуальный клиент.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ProgramArchitecture]]&lt;br /&gt;
|form='''ProgramArchitecture'''():''&amp;lt;Тип архитектуры приложения клиента (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает тип архитектуры приложения клиента (к примеру, '''x64''' или '''x86''').&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[PointerSize]]&lt;br /&gt;
|form='''PointerSize'''():''&amp;lt;Размер системного указателя в байтах (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает размер системного указателя в байтах. Для x86 размер равен 4, для x64 размер равен 8.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ProjectVersion]]&lt;br /&gt;
|form='''ProjectVersion'''():''&amp;lt;Номер сборки проекта (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает номер сборки проекта (конфигурации) в виде &amp;lt;code&amp;gt;Build: XXXX&amp;lt;/code&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ProjectName]], '''DBCaption'''&lt;br /&gt;
|form='''ProjectName'''():''&amp;lt;Наименование проекта (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает наименование проекта (конфигурации), как оно было задано в Студии.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[DBDescription]]&lt;br /&gt;
|form='''DBDescription'''():''&amp;lt;Описание проекта (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает описание проекта (конфигурации), как оно было задано в Студии. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ProjectGUID]]&lt;br /&gt;
|form='''ProjectGUID'''():''&amp;lt;GUID проекта (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает GUID проекта (конфигурации) в виде &amp;lt;code&amp;gt;{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}&amp;lt;/code&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[UnsupportedServerFeatures]]&lt;br /&gt;
|form='''UnsupportedServerFeatures'''():''&amp;lt;Возможности, не поддерживаемые сервером (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает строку с кодами возможностей, не поддерживаемых текущим сервером базы данных. Некоторые серверы могут не поддерживать все возможности, предоставляемые программой, в этом случае, при выполнении запроса к серверу, будет создаваться исключение и запрос не будет выполнен. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[IsAsyncExecutionMode]]&lt;br /&gt;
|form='''IsAsyncExecutionMode'''():''&amp;lt;Текущий контекст асинхронный 1 или 0 (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает 1, если исполнение производится внутри [[Студия/Визуальные события|асинхронного]] визуального события, иначе будет возвращен 0.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[IsRootThread]]&lt;br /&gt;
|form='''IsRootThread'''():''&amp;lt;Результат 0 или 1 (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает 1, если текущая программа исполняется в корневом потоке, иначе будет возвращен 0.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[IsExecutingInSeparateThread]]&lt;br /&gt;
|form='''IsExecutingInSeparateThread'''():''&amp;lt;Результат 0 или 1 (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает 1, если текущая программа исполняется в потоке, созданном функцией [[Mutex.ExecuteFunctionInSeparateThread|ExecuteFunctionInSeparateThread]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[IsExecutingInSeparateProcess]]&lt;br /&gt;
|form='''IsExecutingInSeparateProcess'''({{OptionalByRef|&amp;lt;Идентификатор процесса (STRING)&amp;gt;}}):''&amp;lt;Результат 0 или 1 (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает 1, если текущая программа исполняется в процессе, созданном функцией [[Mutex.InitializeSeparateProcess|InitializeSeparateProcess]]. Также может получить идентификатор процесса, заданный при его создании. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[IsExecutingInExternalModule]]&lt;br /&gt;
|form='''IsExecutingInExternalModule'''({{OptionalByRef|&amp;lt;Путь и имя файла внешнего объекта (STRING)&amp;gt;}}):''&amp;lt;Результат 0 или 1 (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает 1, если текущая программа исполняется в контексте внешнего объекта (*.sfo). Также функция может получить имя файла объекта, с помощью которого, можно получить сам объект (см. [[ExternalObject.Load]]), если это необходимо. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ThreadSerial]]&lt;br /&gt;
|form='''ThreadSerial'''():''&amp;lt;Серийный номер (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает уникальный для данной сессии серийный номер потока. Данный серийный номер может использоваться для получения временно-уникального имени семафора или папки для временного хранения данных.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ThreadCount]]&lt;br /&gt;
|form='''ThreadCount'''():''&amp;lt;Количество программных потоков в текущей сессии (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает количество программных потоков в текущей сессии. После запуска и инициализации клиента, эта функция будет возвращать 1.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GetThreadForm]]&lt;br /&gt;
|form='''GetThreadForm'''(''&amp;lt;Серийный номер потока (INT)&amp;gt;''):''&amp;lt;Верхнее окно потока (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция объект формы для верхнего окна потока, заданного его серийным номером, если поток с указанным серийным номером отсутствует, функция возвращает пустое значение.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GetInstalledPrinters]]&lt;br /&gt;
|form='''GetInstalledPrinters'''():''&amp;lt;Список принтеров системы (LIST)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает список текущих принтеров системы. Значениями списка будут строки с наименованиями принтеров, имена списка будут представлены в виде &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;
{{function entry&lt;br /&gt;
|name=[[GetDefaultPrinter]]&lt;br /&gt;
|form='''GetDefaultPrinter'''():''&amp;lt;Имя принтера по умолчанию (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает наименование принтера, заданного в системе по умолчанию, либо пустую строку, если такого принтера не существует.&lt;br /&gt;
}}&lt;br /&gt;
{{function footer}}&lt;br /&gt;
&lt;br /&gt;
== Внешний загружаемый объект ==&lt;br /&gt;
Внешние объекты представляют собой файлы с расширением '''sfo''', созданные в [[Общая информация и интерфейс Студии|Студии]]. Файл ''sfo'' является архивом, и содержит набор модулей, форм, таблиц или бинарных файлов, необходимых для выполнения какого-то действия (обработки, отчета и пр.), помещение которого в основном проект по каким-то причинам неудобно или нецелесообразно. Такой внешний объект можно загрузить из главного меню, но иногда необходимо получить программный доступ к файлам объекта, либо запустить модуль и форму объекта из основного проекта. При работе с внешними объектами, полезно знать:&lt;br /&gt;
* Файл внешнего объекта находится в памяти системы, пока открыт, по крайней мере, один модуль или одна форма из него, либо существуют переменные, содержащие данный объект. Если объект находится памяти (даже если его открыл пользователь), функция [[ExternalObject.Load]] не будет вызывать его повторной загрузки с диска или сервера, а просто увеличит внутренний счетчик обращений к нему.&lt;br /&gt;
* Путь к файлу задается стандартным образом (элементы пути отделяются помощью знаков '''\'''), однако, для элементов пути внутри файла используются уже знаки '''/''' (см. [[Имена файлов]]). К примеру &amp;lt;code&amp;gt;c:\Обработки\Обрабока.sfo/Modules/FreeForms/Таблицы/Table.sft&amp;lt;/code&amp;gt;. Для загрузки других модулей и форм объекта из форм самого объекта системный путь к файлу ''sfo'' можно опустить (пример: &amp;lt;code&amp;gt;/Modules/FreeForms/Таблицы/Table.sft&amp;lt;/code&amp;gt;), если модуль форма или таблица находятся в той же папке объекта, как и текущий модуль, из которого происходит запрос, достаточно указать знак '''/''', без какого либо дополнительного пути. Стандартную часть &amp;lt;code&amp;gt;/Modules/FreeForms&amp;lt;/code&amp;gt; можно пустить, но путь всегда должен начитаться на знак '''/'''.&lt;br /&gt;
* См. также функцию [[IsExecutingInExternalModule]], позволяющую определить среду исполнения для внешних объектов.&lt;br /&gt;
&lt;br /&gt;
{{function header}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ExternalObject.FileName|FileName]]&lt;br /&gt;
|form={{Grey|ExternalObject.}}'''FileName''':''&amp;lt;Путь и имя файла внешнего объекта (STRING)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут позволяет получить путь и имя файла внешнего объекта. Объект должен быть загруженным.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ExternalObject.Load|Load]]&lt;br /&gt;
|form={{Grey|ExternalObject.}}'''Load'''(''&amp;lt;Путь и имя файла внешнего объекта (STRING)&amp;gt;''):''&amp;lt;Загруженный внешний объект (EXTERNALOBJECT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция загружает (или находит в системе) внешний объект и отдает его, как результат. Если в процессе загрузки произошла ошибка, функция вызывает исключение. Функция может быть вызвана для интерфейса ExternalObject. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ExternalObject.DoesFileExist|DoesFileExist]]&lt;br /&gt;
|form={{Grey|ExternalObject.}}'''DoesFileExist'''(''&amp;lt;Путь и имя файла внутри объекта (STRING)&amp;gt;''):''&amp;lt;Существует ли указанный файл (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция проверяет наличие произвольного файла внутри загруженного внешнего объекта. При указании пути используется разделитель '''/''', начальная часть пути ''Modules/FreeForms'' обязательна к указанию, если файл находится внутри этой ветки (к примеру: &amp;lt;code&amp;gt;Modules/FreeForms/Таблицы/Table.sft&amp;lt;/code&amp;gt;).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ExternalObject.LoadFileNames|LoadFileNames]]&lt;br /&gt;
|form={{Grey|ExternalObject.}}'''LoadFileNames'''(''&amp;lt;Путь и маска для выборки файлов (STRING)&amp;gt;''{{Optional|,&amp;lt;Включать вложенные папки (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Список с файлами выборки (LIST)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает список файлов внутри загруженного внешнего объекта с указанным путем и маской.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ExternalObject.FileToString|FileToString]]&lt;br /&gt;
|form={{Grey|ExternalObject.}}'''FileToString'''(''&amp;lt;Путь и имя файла файла внутри объекта (STRING)&amp;gt;''{{Optional|,&amp;lt;Кодовая страница (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Результат (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция загружает указанный файл внешнего объекта в строку, используя указанную кодовую страницу.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ExternalObject.FileToBuffer|FileToBuffer]]&lt;br /&gt;
|form={{Grey|ExternalObject.}}'''FileToBuffer'''(''&amp;lt;Путь и имя файла файла внутри объекта (STRING)&amp;gt;''):''&amp;lt;Результат (BUFFER)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция загружает указанный файл внешнего объекта в буфер.&lt;br /&gt;
}}&lt;br /&gt;
{{function footer}}&lt;br /&gt;
&lt;br /&gt;
== Объект семафор и многозадачность ==&lt;br /&gt;
Семафор -- сложный объект, позволяющий реализовать совокупность методов, для синхронизацию в многозадачном режиме, выполнения частей кода в отдельных потоках и пр. Объект можно применять:&lt;br /&gt;
* Как именованный системный объект, позволяющий синхронизировать доступ к файлам и другим внешним ресурсам в пределах одной машины. Пока семафор существует в операционной системе, другая программа, запущенная на той же машине, а также другой программный поток, программы, создавшей семафор, не смогут получить к нему доступ (создать). Такой способ синхронизации позволяет избежать, к примеру, записи в один и тот же временный файл двумя копиями программы. Вторая копия программы, которая не смогла создать семафор с именем файла, может пытаться это сделать с другим именем до тех пор, пока не получится создать семафор.&lt;br /&gt;
* Как системное событие, использующееся для синхронизации между потоками в многозадачной среде. Событие имеет два состояния: установлено или сброшено, и позволяет организовать цикл ожидания состояния ''установлено''. Такие циклы используются, чтобы исключить паузу между поступлением команды из другого рабочего потока и началом ее выполнения. Существует также возможность создания цикла ожидания для нескольких семафоров одновременно.&lt;br /&gt;
* Как указатель на среду функции, создающийся в момент начала выполнения функции в отдельном потоке. Функции, выполняющиеся в отдельных потоках, являются подчиненными вызвавшему потоку, при завершении основного потока, система автоматически вызывает функцию [[Mutex.TerminateThread|TerminateThread]] для всех работающих в данных момент подчиненных потоков. Поток также завершается автоматически при завершении работы функции.&lt;br /&gt;
* Как указатель на среду процесса, создающийся в момент начала выполнения функции в отдельном процессе. Функции, выполняющиеся в отдельных процессах, могут использоваться для изолирования кода исполнения, к примеру когда внешняя библиотека (или OLE объект) работают со сбоями и могут испортить системную память, тем самым вызывая завершение с ошибкой всего процесса клиента. После инициализации режима с помощью функции [[Mutex.InitializeSeparateProcess|InitializeSeparateProcess]], процесс будет находиться в режиме ожидания исполнения, клиент же может периодически вызывать функцию [[Mutex.InterProcessExecuteFunction|InterProcessExecuteFunction]] для исполнения программы в ожидающем процессе. После удаления объекта семафора из системы, подчиненный процесс также будет завершен. Исполнение всегда происходит в синхронном режиме (функция ''InterProcessExecuteFunction'' ожидает окончания исполнения удаленной функции и только после этого возвращает результат), асинхронный режим для большей гибкости при работате планируется в будущем.&lt;br /&gt;
&lt;br /&gt;
{{function header}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Mutex.CreateMutex|CreateMutex]]&lt;br /&gt;
|form={{Grey|Mutex.}}'''CreateMutex'''(''&amp;lt;Имя семафора (STRING)&amp;gt;''):''&amp;lt;Ноль или новый объект семафора (INT,MUTEX)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция создает именованный семафор с указанным именем, либо возвращает ноль, если семафор с таким именем уже существует в системе. В момент, когда объект будет удален из системы, созданный семафор также удаляется.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Mutex.CheckMutex|CheckMutex]]&lt;br /&gt;
|form={{Grey|Mutex.}}'''CheckMutex'''(''&amp;lt;Имя семафора (STRING)&amp;gt;''):''&amp;lt;Существует ли семафор (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция проверяет, существует ли в системе именованный семафор с указанным именем. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Mutex.CreateEvent|CreateEvent]]&lt;br /&gt;
|form={{Grey|Mutex.}}'''CreateEvent'''({{Optional|&amp;lt;Начальное состояние (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Новый объект события (MUTEX)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция создает новое системное событие с возможным указанием его начального состояния. Событие может принимать два состояния: ''установлено'' и ''сброшено'', и может использоваться при вызове функций [[Mutex.WaitForEvent|WaitForEvent]] или [[Mutex.WaitForEvents|WaitForEvents]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Mutex.WaitForEvent|WaitForEvent]]&lt;br /&gt;
|form={{Grey|Mutex.}}'''WaitForEvent'''({{Optional|&amp;lt;Время ожидания в мс. (INT)&amp;gt;{{Default|{{Eq}}-1}}}}):''&amp;lt;0, если время закончилось, 1, если произошло событие (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция выполняет цикл ожидания для текущего события в течение указанного времени (по умолчанию, время не ограничено). Если событие произошло (было ''установлено'' функцией [[Mutex.SignalEvent|SignalEvent]]), функция возвращает 1 и автоматически сбрасывает состояние события.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Mutex.WaitForEvents|WaitForEvents]]&lt;br /&gt;
|form={{Grey|Mutex.}}'''WaitForEvents'''(''&amp;lt;Список событий (LIST)&amp;gt;''{{Optional|,&amp;lt;Время ожидания в мс. (INT)&amp;gt;{{Default|{{Eq}}-1}}}}):''&amp;lt;0, если время закончилось, иначе индекс произошедшего события (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция выполняет цикл ожидания для списка с событиями в течение указанного времени (по умолчанию, время не ограничено). Если одно из событий произошло (было ''установлено'' функцией [[Mutex.SignalEvent|SignalEvent]]), функция возвращает индекс этого события и автоматически сбрасывает его (и только его) состояние. Функция может быть вызвана для интерфейса Mutex.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Mutex.SignalEvent|SignalEvent]]&lt;br /&gt;
|form={{Grey|Mutex.}}'''SignalEvent'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция меняет состояние текущего события на ''установлено''.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Mutex.ResetEvent|ResetEvent]]&lt;br /&gt;
|form={{Grey|Mutex.}}'''ResetEvent'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция меняет состояние текущего события на ''сброшено''. Функция не рекомендуется к использованию (так как есть вероятность потерять одно событие), кроме как внутри конструкции блокировки объекта с помощью [[LockObject]] и проверке [[Mutex.EventState|EventState]] до ее вызова.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Mutex.EventState|EventState]]&lt;br /&gt;
|form={{Grey|Mutex.}}'''EventState'''():''&amp;lt;0, если сброшено, 1, если установлено (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает текущее состояние события, при этом состояние не изменяется.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Mutex.ExecuteFunctionInSeparateThread|ExecuteFunctionInSeparateThread]]&lt;br /&gt;
|form={{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;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция создает новый поток для указанной функции, поток будет создан, как подчиненный текущему и будет автоматически завершен, если выполнение функции завершится (в т.ч. из-за исключения), либо если основной поток будет завершен. При завершении подчиненного потока, система не ждет полного окончания завершения, так как оно может занять продолжительное время, если функция выполняет внешний вызов OLE и пр., чтобы убедиться, что поток завершен, можно использовать функцию [[Mutex.TerminateThread|TerminateThread]]. Функция может быть вызвана для интерфейса Mutex.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Mutex.TerminateThread|TerminateThread]]&lt;br /&gt;
|form={{Grey|Mutex.}}'''TerminateThread'''({{Optional|&amp;lt;Без ожидания (INT)&amp;gt;{{Default|{{Eq}}0}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция безусловно завершает выполнение подчиненного потока, с ожиданием окончания завершения, если необходимо. При завершении потока, будут выполнены все вложенные конструкции ''Finally'', как будто поток был завершен по требованию пользователя.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Mutex.IsThreadActive|IsThreadActive]]&lt;br /&gt;
|form={{Grey|Mutex.}}'''IsThreadActive'''():''&amp;lt;Исполняется ли текущий поток (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция проверяет, работает ли адресуемый текущим объектом подчиненный поток (1), либо он уже завершен (0).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Mutex.InitializeSeparateProcess|InitializeSeparateProcess]]&lt;br /&gt;
|form={{Grey|Mutex.}}'''InitializeSeparateProcess'''({{Optional|&amp;lt;Идентификатор процесса (STRING)&amp;gt;,&amp;lt;Скомпилированная функция или текст модуля (STRING, COMPILEDFUNCTION)&amp;gt;}}):''&amp;lt;Указатель на среду процесса (MUTEX)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция создает новый процесс для указанного модуля (или текущего, если модуль не указан). Процесс может быть создан как для визуального, так и для консольного клиента. После инициализации, процесс ожидает выполнения функций, доступных для указанного модуля. Процесс завершается автоматически, когда объект семаформа будет удален. Функция может быть вызвана для интерфейса Mutex.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Mutex.InterProcessExecuteFunction|InterProcessExecuteFunction]]&lt;br /&gt;
|form={{Grey|Mutex.}}'''InterProcessExecuteFunction'''(''&amp;lt;Имя функции (STRING)&amp;gt;''{{OptionalByRef|,&amp;lt;Аргумент 1&amp;gt;,&amp;lt;Аргумент 2&amp;gt;...}}):''&amp;lt;Результат исполнения функции&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция вызывает исполнение указанной функции в подчиненном процессе, созданном ранее функцией [[Mutex.InitializeSeparateProcess|InitializeSeparateProcess]], и возвращает ошибку или результат ее исполнения. При вызове в функцию разрешено передавать объекты произвольного вида (однако, есть определенные особенности для которых см. описание), изменяемые аргументы-переменные также могут быть обновлены после исполнения.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Mutex.InterProcessTimeout|InterProcessTimeout]]&lt;br /&gt;
|form={{Grey|Mutex.}}'''InterProcessTimeout'''({{Optional|&amp;lt;Тайм-аут в мс.&amp;gt;}}):''&amp;lt;Предыдущий тайм-аут в мс. (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция включает сторожевого пса для контроля зависания подчиненного процесса. Процесс будет считаться неработоспособным, если за указанное время основной поток исполнения ни разу не ответил на запрос о состоянии (основной поток создает такие ответы после исполнения каждой команды, а также в моменты бездействия).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[InterProcessServerTimeout]]&lt;br /&gt;
|form='''InterProcessServerTimeout'''({{Optional|&amp;lt;Тайм-аут в мс.&amp;gt;}}):''&amp;lt;Предыдущий тайм-аут в мс. (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция позволяет получать или изменять тайм-аут сторожевого пса родительского процесса на стороне подчиненного процесса. Это позволяет, к примеру, для более длительных операций увеличить тайм-аут или временно отключить его. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Mutex.TerminateProcess|TerminateProcess]]&lt;br /&gt;
|form={{Grey|Mutex.}}'''TerminateProcess'''({{Optional|&amp;lt;Без ожидания (INT)&amp;gt;{{Default|{{Eq}}0}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция безусловно завершает выполнение подчиненного процесса, с ожиданием окончания завершения, если необходимо.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Mutex.IsProcessActive|IsProcessActive]]&lt;br /&gt;
|form={{Grey|Mutex.}}'''IsProcessActive'''():''&amp;lt;Активен ли подчиненный процесс (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция проверяет, активен ли (не завершился ли) адресуемый текущим объектом подчиненный процесс.&lt;br /&gt;
}}&lt;br /&gt;
{{function footer}}&lt;br /&gt;
&lt;br /&gt;
{{Объекты}}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://sfsys.ru/index.php?title=%D0%A2%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D0%B0&amp;diff=5242</id>
		<title>Таблица</title>
		<link rel="alternate" type="text/html" href="http://sfsys.ru/index.php?title=%D0%A2%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D0%B0&amp;diff=5242"/>
		<updated>2026-04-01T10:01:35Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{infobox object&lt;br /&gt;
|image=tab.png&lt;br /&gt;
|visual=[[Студия/Таблица значений|Таблица значений]]&lt;br /&gt;
|object=Tab&lt;br /&gt;
|status=2&lt;br /&gt;
|create=[[Tab.Create|Create]]}}&lt;br /&gt;
{{HeadLinks|&lt;br /&gt;
* [[Main_Page|Начальная страница]]&lt;br /&gt;
* [[Общее_описание_языка|Общее описание]]&lt;br /&gt;
* [[Объекты]]}}&lt;br /&gt;
&amp;lt;p&amp;gt;Объект '''таблица''' позволяет хранить большие объемы данных любого типа в виде таблиц, а также сортировать их, объединять таблицы, задавать определенные типы данных столбцам таблицы, хранить информацию о флажках или иконках. Таблицы представлены на формах [[Студия/Таблица значений|таблицами значений]], результаты запросов представлены таблицами, таблицы используются в разнообразных функциях и объектах и являются неотъемлемой частью системы. Функции работы с таблицами имеют ряд оптимизаций, доступных разработчикам.&amp;lt;/p&amp;gt;&lt;br /&gt;
Таблица имеет три внутренних указателя:&lt;br /&gt;
* Текущая строка (''CurLine'') -- внутренний указатель, использующийся при изменении ячеек таблицы по наименованию столбца (к примеру, &amp;lt;code&amp;gt;aTab.&amp;lt;Столбец&amp;gt;:=&amp;lt;Значение&amp;gt;&amp;lt;/code&amp;gt;). Указатель меняется при добавлении, удалении или сдвиге строк, а также при выборке строк таблицы с помощью функции [[Tab.Select|Select]], поиске значений и пр. Нумерация строк начинается с единицы.&lt;br /&gt;
* Выбранная строка (''SelectedLine'') -- внутренний указатель, совпадающий с положением курсора (выделенной ячейки) внутри таблицы, когда она представлена на экране в виде элемента формы. Изменение указателя автоматически перемещает курсор. Использование указателя для невизуальных таблиц не запрещено. Нумерация строк начинается с единицы.&lt;br /&gt;
* Выбранный столбец (''SelectedColumn'') -- внутренний указатель, совпадающий с положением курсора (выделенного столбца) внутри таблицы, когда она представлена на экране в виде элемента формы. Изменение указателя автоматически перемещает курсор. Использование указателя для невизуальных таблиц не запрещено. Нумерация столбцов начинается с единицы.&lt;br /&gt;
&lt;br /&gt;
== Атрибуты и функции==&lt;br /&gt;
{{function header}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Array|[&amp;lt;Индекс столбца (INT,STRING)&amp;gt;]]], [[Tab.Array|[&amp;lt;Индекс столбца (INT,STRING)&amp;gt;,&amp;lt;Индекс строки (INT)&amp;gt;]]]&lt;br /&gt;
|form={{Grey|Tab}}'''[&amp;lt;Индекс или наименование столбца (INT,STRING)&amp;gt;{{Optional|,&amp;lt;Индекс строки (INT)&amp;gt;}}]''':''&amp;lt;Значение&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Использование синтаксиса массивов позволяет получить или изменить значение таблицы по индексу (аргументом является число) или наименованию (аргументом является строка) его столбца для текущей строки таблицы, если не задан второй аргумент, иначе для строки таблицы заданной индексом, указанным во втором аргументе.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.ColumnName|&amp;lt;Имя столбца&amp;gt;]]&lt;br /&gt;
|form={{Grey|Tab.}}'''&amp;lt;Имя столбца&amp;gt;''':''&amp;lt;Значение ячейки&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Получить значение таблицы, находящееся в столбце ''&amp;lt;Имя столбца&amp;gt;'' и строке с индексом CurLine&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.CurLine|CurLine]]&lt;br /&gt;
|form={{Grey|Tab.}}'''CurLine''':''&amp;lt;Индекс текущей строки (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Получить индекс текущей строки таблицы (первая строка=1). Текущая строка и выбранная пользователем строка визуального объекта, привязанного к таблице, могут иметь разные значения. Текущая строка используется в функциях выборки строк таблицы [[Tab.Select|Select]] и пр.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.SelectedLine|SelectedLine]]&lt;br /&gt;
|form={{Grey|Tab.}}'''SelectedLine''':''&amp;lt;Индекс выбранной строки (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Получить индекс выбранной строки визуального объекта (первая строка=1). Текущая строка и выбранная пользователем строка визуального объекта, привязанного к таблице, могут иметь разные значения.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.SelectedColumn|SelectedColumn]]&lt;br /&gt;
|form={{Grey|Tab.}}'''SelectedColumn''':''&amp;lt;Индекс выбранного столбца (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Получить индекс выбранного столбца визуального объекта (первый столбец=1). Скрытые в визуальной таблице столбцы также участвуют в подсчете индекса.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.SelectedColumnName|SelectedColumnName]]&lt;br /&gt;
|form={{Grey|Tab.}}'''SelectedColumnName''':''&amp;lt;Наименование выбранного столбца (STRING)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Получить наименование выбранного столбца визуального объекта, как оно было заданно в Студии. Наименование всегда хранится в верхнем регистре.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.MultiSelection|MultiSelection]]&lt;br /&gt;
|form={{Grey|Tab.}}'''MultiSelection''':''&amp;lt;Таблица с выбранными регионами (TAB)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Получить таблицу, описывающую все регионы, выделенные пользователем, для визуальных таблиц с возможностью выделения регионов. Таблица не будет содержать ни одной строки, если таблица не привязана к визуальному объекту, либо в объекте не выбрана ни одна строка.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.IsEditorActive|IsEditorActive]]&lt;br /&gt;
|form={{Grey|Tab.}}'''IsEditorActive''':''&amp;lt;Статус редактора ячейки (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут проверяет, активен ли редактор ячейки таблицы в данный момент.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Create|Create]]&lt;br /&gt;
|form={{Grey|Tab.}}'''Create'''({{Optional|&amp;lt;Список столбцов через запятую (STRING)&amp;gt;}}):''&amp;lt;Новый объект (TAB)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает новый объект типа [[Таблица]], создавая столбцы с заданными именами, если необходимо.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Column|Column]]&lt;br /&gt;
|form={{Grey|Tab.}}'''Column'''(''&amp;lt;Наименование или индекс столбца (INT,STRING)&amp;gt;''):''&amp;lt;Объект столбца таблицы (TAB)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает подчиненный объект типа [[Таблица#Объект столбца таблицы|столбец таблицы]]. Доступ к свойствам столбцов таким образом опасен для многопоточных объектов. Необходимо использовать функции [[LockObject]] и [[UnlockObject]], когда объект используется в нескольких потоках.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Size|Size]], '''Lines'''&lt;br /&gt;
|form={{Grey|Tab.}}'''Size'''({{Optional|&amp;lt;Новое количество строк (INT)&amp;gt;}}):''&amp;lt;Текущее количество строк в таблице (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает или/и изменяет количество строк в таблице.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Columns|Columns]]&lt;br /&gt;
|form={{Grey|Tab.}}'''Columns'''({{Optional|&amp;lt;Новое количество столбцов (INT)&amp;gt;}}):''&amp;lt;Текущее количество столбцов в таблице (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает или/и изменяет количество столбцов в таблице.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.AddColumn|AddColumn]]&lt;br /&gt;
|form={{Grey|Tab.}}'''AddColumn'''({{Optional|&amp;lt;Наименование столбца (STRING)&amp;gt;,&amp;lt;Заголовок столбца (STRING)&amp;gt;,&amp;lt;Тип данных столбца (STRING)&amp;gt;,&amp;lt;Ширина столбца (INT)&amp;gt;,&amp;lt;Режим выравнивания столбца (INT)&amp;gt;,&amp;lt;Видимость столбца (INT)&amp;gt;}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция добавляет столбец в таблицу, устанавливая его свойства, если необходимо. Если количество строк в таблице больше нуля, ячейки столбца заполняются пустым значением, либо принимают неинициализированное значение в соответствии с типом данных столбца, если последний задан.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.InsertColumn|InsertColumn]]&lt;br /&gt;
|form={{Grey|Tab.}}'''InsertColumn'''(''&amp;lt;Индекс вставляемого столбца (INT)&amp;gt;''{{Optional|,&amp;lt;Наименование столбца (STRING)&amp;gt;,&amp;lt;Заголовок столбца (STRING)&amp;gt;,&amp;lt;Тип данных столбца (STRING)&amp;gt;,&amp;lt;Ширина столбца (INT)&amp;gt;,&amp;lt;Режим выравнивания столбца (INT)&amp;gt;,&amp;lt;Видимость столбца (INT)&amp;gt;}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция добавляет столбец в таблицу с указанным индексом, устанавливая его свойства, если необходимо. Если количество строк в таблице больше нуля, ячейки столбца заполняются пустым значением, либо принимают неинициализированное значение в соответствии с типом данных столбца, если последний задан.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.RemoveColumn|RemoveColumn]]&lt;br /&gt;
|form={{Grey|Tab.}}'''RemoveColumn'''(''&amp;lt;Наименование или индекс столбца (INT,STRING)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция удаляет столбец с указанным индексом или наименованием из таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.SetColumn|SetColumn]]&lt;br /&gt;
|form={{Grey|Tab.}}'''SetColumn'''(''&amp;lt;Наименование или индекс столбца (INT,STRING)&amp;gt;''{{Optional|,&amp;lt;Заголовок столбца (STRING)&amp;gt;,&amp;lt;Тип данных столбца (STRING)&amp;gt;,&amp;lt;Ширина столбца (INT)&amp;gt;,&amp;lt;Режим выравнивания столбца (INT)&amp;gt;,&amp;lt;Видимость столбца (INT)&amp;gt;}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция изменяет свойства столбца с указанным индексом или наименование. Если новый тип данных столбца задан, все существующие ячейки таблицы в данном столбце будут приведены к новому типу данных.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.GetColumnIndex|GetColumnIndex]]&lt;br /&gt;
|form={{Grey|Tab.}}'''GetColumnIndex'''(''&amp;lt;Наименование столбца (STRING)&amp;gt;''):''&amp;lt;Индекс столбца (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает индекс столбца с заданным наименованием. Если столбец не существует, функция возвращает ноль.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.GetColumnName|GetColumnName]]&lt;br /&gt;
|form={{Grey|Tab.}}'''GetColumnName'''(''&amp;lt;Индекс столбца (INT)&amp;gt;''):''&amp;lt;Наименование столбца таблицы (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает наименование столбца с заданным индексом. Наименования столбцов всегда хранятся в верхнем регистре.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.NewLine|NewLine]]&lt;br /&gt;
|form={{Grey|Tab.}}'''NewLine'''({{Optional|&amp;lt;Индекс новой строки (INT)&amp;gt;}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция добавляет в конец таблицы новую строку и помечает ее как текущую. Строка также может быть вставлена в таблицу по определенному индексу, если он задан.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.AddLine|AddLine]]&lt;br /&gt;
|form={{Grey|Tab.}}'''AddLine'''(''&amp;lt;Наименования столбцов через запятую (STRING)&amp;gt;''{{Optional|,&amp;lt;Значение столбца 1&amp;gt;,&amp;lt;Значение столбца 2&amp;gt;...}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция добавляет в конец таблицы новую строку и помечает ее как текущую. Указанные в первом аргументе столбцы таблицы, в добавленной строке будут заполнены значениями, заданными последующими аргументами.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.AddLineSorted|AddLineSorted]]&lt;br /&gt;
|form={{Grey|Tab.}}'''AddLineSorted'''(''&amp;lt;Наименования столбцов сортировки через запятую (STRING)&amp;gt;'',''&amp;lt;Наименования столбцов добавления через запятую (STRING)&amp;gt;''{{Optional|,&amp;lt;Значение столбца 1&amp;gt;,&amp;lt;Значение столбца 2&amp;gt;...}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция добавляет новую строку и помечает ее как текущую. Указанные во втором аргументе столбцы таблицы, в добавленной строке будут заполнены значениями, заданными последующими аргументами. Строка вставляется в таблицу таким образом, чтобы не нарушить сортировку, заданную наименованиями столбцов первого аргумента.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.UpdateLineEx|UpdateLineEx]]&lt;br /&gt;
|form={{Grey|Tab.}}'''UpdateLineEx'''(''&amp;lt;Наименования столбцов поиска через запятую (STRING)&amp;gt;''{{OptionalByRef|,''&amp;lt;Начальный индекс поиска, результирующий индекс (INT)&amp;gt;''}}{{Optional|,&amp;lt;Значение столбца поиска 1&amp;gt;,&amp;lt;Значение столбца поиска 2&amp;gt;...,&amp;lt;Таблица сортирована по столбцам поиска (INT)&amp;gt;,&amp;lt;Наименования столбцов обновления через запятую (STRING)&amp;gt;,&amp;lt;Значение обновления столбца 1&amp;gt;,&amp;lt;Значение обновления столбца 2&amp;gt;...}}):''&amp;lt;0, если строка добавлена, иначе количество обновленных строк (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция обновляет строки, заданные аргументами для поиска или добавляет новую строку. Поиск начинается со строки, заданной вторым аргументом. Для всех строк, удовлетворящих условиям поиска, значения в столбцах, заданных аргументов с наименования столбцов обновления, будут изменены на аргументы, идущие за аргументом с наименованиями. Если ни одна строка не найдена, будет добавлена одна новая строка. Если применяется сортированный поиск (аргумент сортироки равен 1), строка вставляется в таблицу таким образом, чтобы не нарушить сортировку, заданную наименованиями столбцов первого аргумента. Если второй аргумент является переменной, в ней будет возвращен индекс добавленной строки или общее количество найденных и измененных строк в соотвествии с результатами поиска. Данная функция не использует текущую строку таблицы, что позволяет ее применять при работе с нескольми потоками (thread-safe).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.InsertLine|InsertLine]]&lt;br /&gt;
|form={{Grey|Tab.}}'''InsertLine'''(''&amp;lt;Индекс добавляемой строки (INT)&amp;gt;'',''&amp;lt;Наименования столбцов через запятую (STRING)&amp;gt;''{{Optional|,&amp;lt;Значение столбца 1&amp;gt;,&amp;lt;Значение столбца 2&amp;gt;...}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция вставляет строку в таблицу по указанному индексу и помечает ее как текущую. Указанные в первом аргументе столбцы таблицы, в добавленной строке будут заполнены значениями, заданными последующими аргументами.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.CopyLine|CopyLine]]&lt;br /&gt;
|form={{Grey|Tab.}}'''CopyLine'''({{Optional|&amp;lt;Индекс копируемой строки (INT)&amp;gt;,&amp;lt;Индекс новой строки (INT)&amp;gt;,&amp;lt;Количество добавляемых строк (INT)&amp;gt;{{Default|{{Eq}}1}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция добавляет новую строку по указанному во втором аргументе индексу (или в конец таблицы, если второй аргумент опущен) и заполняет ее значениями из строки, указанной в первом аргументе (или текущей строки, если первый аргумент опущен).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Remove|Remove]]&lt;br /&gt;
|form={{Grey|Tab.}}'''Remove'''(''&amp;lt;Индекс удаляемой строки (INT)&amp;gt;''{{Optional|,&amp;lt;Количество удаляемых строк (INT)&amp;gt;{{Default|{{Eq}}1}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция удаляет указанное количество строк (либо одну строку, если второй аргумент опущен), начиная с индекса, заданного первым аргументом.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.ClearLines|ClearLines]]&lt;br /&gt;
|form={{Grey|Tab.}}'''ClearLines'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция удаляет все строки из таблицы (при этом количество столбцов не изменяется).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Clear|Clear]]&lt;br /&gt;
|form={{Grey|Tab.}}'''Clear'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция удаляет все строки и столбцы из таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Select|Select]]&lt;br /&gt;
|form={{Grey|Tab.}}'''Select'''():''&amp;lt;В таблице есть по крайней мере одна строка (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция начинает выборку по строкам таблицы (ее действие аналогично фрагменту &amp;lt;code&amp;gt;&amp;lt;Таблица&amp;gt;.CurLine:=0&amp;lt;/code&amp;gt;). Функция возвращает 1, если в выборке есть по крайней мере одна строка, иначе возвращается ноль. Функция используется в начале цикла по обходу всех строк таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Next|Next]]&lt;br /&gt;
|form={{Grey|Tab.}}'''Next'''():''&amp;lt;Найдена следующая строка (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция перемещает указатель текущей строки на следующую строку и возвращает единицу, если следующая строка существует, иначе возвращает ноль. Действие функции аналогично фрагменту &amp;lt;code&amp;gt;&amp;lt;Таблица&amp;gt;.CurLine:=?(&amp;lt;Таблица&amp;gt;.CurLine=&amp;lt;Таблица&amp;gt;.Size(),&amp;lt;Таблица&amp;gt;.CurLine,&amp;lt;Таблица&amp;gt;.CurLine+1)&amp;lt;/code&amp;gt;. Функция используется внутри цикла по обходу всех строк таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Prev|Prev]]&lt;br /&gt;
|form={{Grey|Tab.}}'''Prev'''():''&amp;lt;Найдена предыдущая строка (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция перемещает указатель текущей строки на предыдущую строку, если указатель больше нуля, и возвращает единицу, если предыдущая строка существует, иначе возвращает ноль. Действие функции аналогично фрагменту &amp;lt;code&amp;gt;&amp;lt;Таблица&amp;gt;.CurLine:=?(&amp;lt;Таблица&amp;gt;.CurLine=0,&amp;lt;Таблица&amp;gt;.CurLine,&amp;lt;Таблица&amp;gt;.CurLine-1)&amp;lt;/code&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Goto|Goto]]&lt;br /&gt;
|form={{Grey|Tab.}}'''Goto'''(''&amp;lt;Индекс строки (INT)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция перемещает указатель текущей строки на строку с указанным индексом. Действие функции аналогично фрагменту &amp;lt;code&amp;gt;&amp;lt;Таблица&amp;gt;.CurLine:=&amp;lt;Индекс&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Move|Move]]&lt;br /&gt;
|form={{Grey|Tab.}}'''Move'''(''&amp;lt;Индекс перемещаемой строки (INT)&amp;gt;'',''&amp;lt;Расстояние перемещения (INT)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция сдвигает строку с индексом, задаваемым первым аргументом, внутри таблицы на указанное количество строк. Расстояние сдвига может быть отрицательным числом. При положительном сдвиге, строка из конца таблицы переходит в ее начало, при отрицательном сдвиге строка с начала таблицы переходит в конец.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Set|Set]]&lt;br /&gt;
|form={{Grey|Tab.}}'''Set'''({{Optional|&amp;lt;Индекс строки (INT)&amp;gt;}},''&amp;lt;Наименование или индекс столбца (INT,STRING)&amp;gt;'',''&amp;lt;Устанавливаемое значение&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция устанавливает значение ячейки с наименованием или индексом столбца, заданным вторым аргументом, индекс строки ячейки задается первым аргументом или используется текущая строка, если первый аргумент не задан.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Get|Get]]&lt;br /&gt;
|form={{Grey|Tab.}}'''Get'''({{Optional|&amp;lt;Индекс строки (INT)&amp;gt;}},''&amp;lt;Наименование или индекс столбца (INT,STRING)&amp;gt;''):''&amp;lt;Значение ячейки таблицы&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает значение ячейки с наименованием или индексом столбца, заданным вторым аргументом, индекс строки ячейки задается первым аргументом или используется текущая строка, если первый аргумент не задан.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Find|Find]]&lt;br /&gt;
|form={{Grey|Tab.}}'''Find'''(''&amp;lt;Значение поиска&amp;gt;''{{OptionalByRef|,&amp;lt;Начальный индекс поиска, результирующий индекс (INT)&amp;gt;,&amp;lt;Наименование или индекс столбца поиска, индекс результирующего столбца (STRING,INT)&amp;gt;}}{{Optional|,&amp;lt;Таблица сортирована по столбцу поиска (INT)&amp;gt;}}):''&amp;lt;Значение найдено 1 или 0 (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит поиск значения в таблице, с возможным указанием начального индекса поиска, возможным указанием столбца поиска. Поиск может принимать во внимание факт того, что таблица сортирована по указанному столбцу по неубыванию, что может значительно ускорить нахождение значения. Если значение найдено, индекс строки или/и столбца, где оно было найдено, возвращается в переменных второго и третьего аргументов.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.FindAndGoto|FindAndGoto]]&lt;br /&gt;
|form={{Grey|Tab.}}'''FindAndGoto'''(''&amp;lt;Значение поиска&amp;gt;''{{OptionalByRef|,&amp;lt;Начальный индекс поиска, результирующий индекс (INT)&amp;gt;,&amp;lt;Наименование или индекс столбца поиска, индекс результирующего столбца (STRING,INT)&amp;gt;}}{{Optional|,&amp;lt;Таблица сортирована по столбцу поиска (INT)&amp;gt;}}):''&amp;lt;Значение найдено 1 или 0 (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит поиск значения в таблице, с возможным указанием начального индекса поиска, возможным указанием столбца поиска. Поиск может принимать во внимание факт того, что таблица сортирована по указанному столбцу по неубыванию, что может значительно ускорить нахождение значения. Если значение найдено, индекс строки или/и столбца, где оно было найдено, возвращается в переменных второго и третьего аргументов, функция также автоматически изменяет индекс текущей строки на индекс строки найденного значения, текущая строка не изменяется, если значение не найдено.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.FindAndGet|FindAndGet]]&lt;br /&gt;
|form={{Grey|Tab.}}'''FindAndGet'''(''&amp;lt;Наименование или индекс столбца значения результата (STRING,INT)&amp;gt;'',''&amp;lt;Значение поиска&amp;gt;''{{OptionalByRef|,&amp;lt;Начальный индекс поиска, результирующий индекс (INT)&amp;gt;,&amp;lt;Наименование или индекс столбца поиска, индекс результирующего столбца (STRING,INT)&amp;gt;}}{{Optional|,&amp;lt;Таблица сортирована по столбцу поиска (INT)&amp;gt;}}):''&amp;lt;Полученное значение или пустое значение&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит поиск значения в таблице, с возможным указанием начального индекса поиска, возможным указанием столбца поиска. Поиск может принимать во внимание факт того, что таблица сортирована по указанному столбцу по неубыванию, что может значительно ускорить нахождение значения. Если значение найдено, индекс строки или/и столбца, где оно было найдено, возвращается в переменных третьего и четвертого аргументов. Функция возвращает значение в столбце, заданном первым аргументом, из строки, в которой было найдено значение поиска, либо возвращает пустое значение, если поиск не был завершен успешно.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.FindInLine|FindInLine]]&lt;br /&gt;
|form={{Grey|Tab.}}'''FindInLine'''(''&amp;lt;Значение поиска&amp;gt;''{{Optional|,&amp;lt;Индекс строки поиска (INT)&amp;gt;}}{{OptionalByRef|,&amp;lt;Наименование или индекс начального столбца поиска, индекс результирующего столбца (STRING,INT)&amp;gt;}}):''&amp;lt;Значение найдено 1 или 0 (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит поиск значения в таблице в текущей строке или строке с заданным индексом, возможным указанием начального индекса столбца поиска. Если значение найдено, индекс столбца, где оно было найдено, возвращается в переменной третьего аргумента.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Locate|Locate]]&lt;br /&gt;
|form={{Grey|Tab.}}'''Locate'''(''&amp;lt;Список наименований столбцов поиска через запятую (STRING)&amp;gt;''{{Optional|,&amp;lt;Значение поиска столбца 1&amp;gt;,&amp;lt;Значение поиска столбца 2&amp;gt;...,&amp;lt;Таблица сортирована по столбцам поиска (INT)&amp;gt;}}):''&amp;lt;Индекс найденной строки таблицы (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит поиск заданного списком столбцов количества значений в таблице. Поиск всегда начинается с первой строки таблицы. Поиск может принимать во внимание факт того, что таблица сортирована по всем столбцам поиска по неубыванию, что может значительно ускорить нахождение значения. Если значение найдено, индекс строки где оно было найдено, возвращается в результате функции, иначе функция возвращает ноль.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.LocateEx|LocateEx]]&lt;br /&gt;
|form={{Grey|Tab.}}'''LocateEx'''(''&amp;lt;Список наименований столбцов поиска через запятую (STRING)&amp;gt;''{{OptionalByRef|,&amp;lt;Начальный индекс поиска, результирующий индекс (INT)&amp;gt;}}{{Optional|,&amp;lt;Значение поиска столбца 1&amp;gt;,&amp;lt;Значение поиска столбца 2&amp;gt;...,&amp;lt;Таблица сортирована по столбцам поиска (INT)&amp;gt;}}):''&amp;lt;Индекс найденной строки таблицы (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит поиск заданного списком столбцов количества значений в таблице. Поиск начинается со строки, указанной в переменной второго аргумента или с первой строки, если аргумент пропущен. Поиск может принимать во внимание факт того, что таблица сортирована по всем столбцам поиска по неубыванию, что может значительно ускорить нахождение значения. Если значение найдено, индекс строки где оно было найдено, возвращается в результате функции и в переменной второго аргумента, если она задана. Если значение не было найдено, функция возвращает ноль и переменная не изменяется.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.LocateAndGoto|LocateAndGoto]]&lt;br /&gt;
|form={{Grey|Tab.}}'''LocateAndGoto'''(''&amp;lt;Список наименований столбцов поиска через запятую (STRING)&amp;gt;''{{Optional|,&amp;lt;Значение поиска столбца 1&amp;gt;,&amp;lt;Значение поиска столбца 2&amp;gt;...,&amp;lt;Таблица сортирована по столбцам поиска (INT)&amp;gt;}}):''&amp;lt;Индекс найденной строки таблицы (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит поиск заданного списком столбцов количества значений в таблице. Поиск всегда начинается со строки таблицы, следующей за текущей строкой (чтобы поиск начинался с начала таблицы, можно выполнить операцию &amp;lt;code&amp;gt;&amp;lt;Таблица&amp;gt;.CurLine:=0&amp;lt;/code&amp;gt;). Поиск может принимать во внимание факт того, что таблица сортирована по всем столбцам поиска по неубыванию, что может значительно ускорить нахождение значения. Если значение найдено, индекс строки где оно было найдено, возвращается в результате функции и обновляет текущую строку таблицы, иначе функция возвращает ноль.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Sort|Sort]]&lt;br /&gt;
|form={{Grey|Tab.}}'''Sort'''(''&amp;lt;Наименование столбцов сортировки с суффиксами через запятую (STRING)&amp;gt;''{{Optional|,&amp;lt;Алгоритм сортировки (INT)&amp;gt;{{Default|{{Eq}}1}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция выполняет сортировку строк таблицы по значениям указанных столбцов (направление сортировки может быть выбрано для каждого из столбцов в отдельности).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Sum|Sum]]&lt;br /&gt;
|form={{Grey|Tab.}}'''Sum'''(''&amp;lt;Наименование или индекс столбца (INT,STRING)&amp;gt;''{{Optional|,&amp;lt;Строки превращать в числа (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Индекс начальной строки (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Индекс конечной строки (INT)&amp;gt;{{Default|{{Eq}}&amp;lt;Последняя строка таблицы&amp;gt;}},&amp;lt;Округление при суммировании (INT)&amp;gt;{{Default|{{Eq}}-1}}}}):''&amp;lt;Результирующая сумма (NUMBER)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция находит сумму значений указанного столбца таблицы в указанном диапазоне строк таблицы. Значения, представленные строками, могут быть превращены в числа при сложении, если необходимо. Для исключения накопления неточности при сложении вещественных чисел, можно указать требуемое количество цифр после точки.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Compute|Compute]]&lt;br /&gt;
|form={{Grey|Tab.}}'''Compute'''(''&amp;lt;Наименование или индекс столбца (INT,STRING)&amp;gt;''{{Optional|,&amp;lt;Тип операции (STRING)&amp;gt;{{Default|{{Eq}}&amp;quot;SUM&amp;quot;}},&amp;lt;Строки превращать в числа (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Индекс начальной строки (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Индекс конечной строки (INT)&amp;gt;{{Default|{{Eq}}&amp;lt;Последняя строка таблицы&amp;gt;}},&amp;lt;Округление при суммировании или нахождении среднего (INT)&amp;gt;{{Default|{{Eq}}-1}}}}):''&amp;lt;Результат вычисления (NUMBER)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция выполняет одну из следующих операций на значениях указанного столбца таблицы в указанном диапазоне строк таблицы: сумма, минимум, максимум, среднее, количество значений. Значения, представленные строками, могут быть превращены в числа при сложении, если необходимо. Для исключения накопления неточности при сложении вещественных чисел, можно указать требуемое количество цифр после точки.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.SumLine|SumLine]]&lt;br /&gt;
|form={{Grey|Tab.}}'''SumLine'''(''&amp;lt;Индекс строки суммирования (INT)&amp;gt;''{{Optional|,&amp;lt;Строки превращать в числа (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Округление при суммировании (INT)&amp;gt;{{Default|{{Eq}}-1}}}}):''&amp;lt;Результирующая сумма (NUMBER)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция находит сумму значений указанной строки таблицы. Значения, представленные строками, могут быть превращены в числа при сложении, если необходимо. Для исключения накопления неточности при сложении вещественных чисел, можно указать требуемое количество цифр после точки.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Fill|Fill]]&lt;br /&gt;
|form={{Grey|Tab.}}'''Fill'''(''&amp;lt;Значение для заполнения&amp;gt;''{{Optional|,&amp;lt;Индекс начальной строки (INT)&amp;gt;,&amp;lt;Индекс конечной строки (INT)&amp;gt;,&amp;lt;Индекс или наименование столбца (INT,STRING)&amp;gt;}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция выполняет заполнение ячеек в указанном столбце таблицы для строк таблицы в указанном диапазоне указанным значением.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Copy|Copy]]&lt;br /&gt;
|form={{Grey|Tab.}}'''Copy'''({{Optional|&amp;lt;Только создать столбцы (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Новая таблица (TAB)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция создает новый объект таблицы и заполняет ее столбцами, строками и значениями из текущей таблицы. Значения скопированы не будут, если первый аргумент равен ''1''.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.CopyTo|CopyTo]]&lt;br /&gt;
|form={{Grey|Tab.}}'''CopyTo'''({{ByRef|''&amp;lt;Объект в который происходит копирование&amp;gt;''}}{{Optional|,&amp;lt;Индекс начальной строки (INT)&amp;gt;,&amp;lt;Количество строк для копирования (INT)&amp;gt;,&amp;lt;Наименования столбцов копирования через запятую (STRING)&amp;gt;,&amp;lt;Наименования столбцов для фильтрации (STRING)&amp;gt;,&amp;lt;Фильтр столбца 1&amp;gt;,&amp;lt;Фильтр столбца 2&amp;gt;...}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция позволяет произвести копирование ячеек указанного столбца из текущей таблицы в заданный список, либо ячеек, указанных столбцов из текущей таблицы в заданную таблицу. Строки для копирования могут быть ограничены определенным диапазоном и выбраны с помощью заданного фильтра.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Group|Group]]&lt;br /&gt;
|form={{Grey|Tab.}}'''Group'''({{Optional|&amp;lt;Наименования столбцов группировки через запятую (STRING)&amp;gt;,&amp;lt;Наименования столбцов для агрегации с типами операций (STRING)&amp;gt;,&amp;lt;Округление при суммировании (INT)&amp;gt;{{Default|{{Eq}}-1}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит группировку таблицы по указанным столбцам, строки, где совокупность значений столбцов группировки повторяется, будут удалены, при этом над столбцами агрегации для всех строк дублей и строки, оставшейся в таблице, будет произведена указанная операция агрегации. Столбцы, не перечисленные в столбцах группировки и столбцах агрегации, будут удалены. Для исключения накопления неточности при сложении вещественных чисел, можно указать требуемое количество цифр после точки при выполнении операций агрегации. После выполнения операции, в таблице сохраняется порядок следования строк, существовавший до операции.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.InnerJoin|InnerJoin]], '''Join'''&lt;br /&gt;
|form={{Grey|Tab.}}'''InnerJoin'''(''&amp;lt;Таблица, с которой объединяется текущая (TAB)&amp;gt;''{{Optional|,&amp;lt;Наименования столбцов группировки через запятую (STRING)&amp;gt;,&amp;lt;Наименования столбцов для агрегации с типами операций (STRING)&amp;gt;,&amp;lt;Округление при суммировании (INT)&amp;gt;{{Default|{{Eq}}-1}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция оставляет в текущей таблице только строки, для которых присутствуют эквивалентные в указанной таблице (эквивалентной считается строка, для которой значения всех столбцов группировки в обеих таблицах будет одинаковым). При этом ячейки в столбцах агрегации будут представлять результат операции агрегации над оставленными строками исходной таблицы и всеми эквивалентными строками указанной таблицы. Для исключения накопления неточности при сложении вещественных чисел, можно указать требуемое количество цифр после точки при выполнении операций агрегации. После выполнения операции, в таблице сохраняется порядок следования строк, существовавший до операции.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.LeftOuterJoin|LeftOuterJoin]], '''LeftJoin'''&lt;br /&gt;
|form={{Grey|Tab.}}'''LeftOuterJoin'''(''&amp;lt;Таблица, с которой объединяется текущая (TAB)&amp;gt;''{{Optional|,&amp;lt;Наименования столбцов группировки через запятую (STRING)&amp;gt;,&amp;lt;Наименования столбцов для агрегации с типами операций (STRING)&amp;gt;,&amp;lt;Округление при суммировании (INT)&amp;gt;{{Default|{{Eq}}-1}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция выполняет агрегацию строк текущей таблицы с эквивалентными строками указанной таблицы (эквивалентной считается строка, для которой значения всех столбцов группировки в обеих таблицах будет одинаковым). При этом ячейки в столбцах агрегации будут представлять результат операции агрегации над строками исходной таблицы и всеми эквивалентными строками указанной таблицы. Для исключения накопления неточности при сложении вещественных чисел, можно указать требуемое количество цифр после точки при выполнении операций агрегации. После выполнения операции, в таблице сохраняется порядок следования строк, существовавший до операции.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.FullOuterJoin|FullOuterJoin]], '''FullJoin'''&lt;br /&gt;
|form={{Grey|Tab.}}'''FullOuterJoin'''(''&amp;lt;Таблица, с которой объединяется текущая (TAB)&amp;gt;''{{Optional|,&amp;lt;Наименования столбцов группировки через запятую (STRING)&amp;gt;,&amp;lt;Наименования столбцов для агрегации с типами операций (STRING)&amp;gt;,&amp;lt;Округление при суммировании (INT)&amp;gt;{{Default|{{Eq}}-1}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция выполняет агрегацию строк текущей таблицы с эквивалентными строками указанной таблицы (эквивалентной считается строка, для которой значения всех столбцов группировки в обеих таблицах будет одинаковым), строки указанной таблицы, для которых нет эквивалента в текущей таблице, будут добавлены в последнюю с конца таблицы. При этом ячейки в столбцах агрегации будут представлять результат операции агрегации над строками исходной таблицы и всеми эквивалентными строками указанной таблицы. Для исключения накопления неточности при сложении вещественных чисел, можно указать требуемое количество цифр после точки при выполнении операций агрегации. После выполнения операции, в таблице сохраняется порядок следования строк, существовавший до операции.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Combine|Combine]]&lt;br /&gt;
|form={{Grey|Tab.}}'''Combine'''(''&amp;lt;Таблица для выполнения операции (TAB)&amp;gt;'',''&amp;lt;Наименования или индексы столбцов для сравнения (STRING)&amp;gt;''{{Optional|,&amp;lt;Тип операции (STRING)&amp;gt;{{Default|{{Eq}}&amp;quot;ADD&amp;quot;}},&amp;lt;Таблица сортирована по столбцам поиска (INT)&amp;gt;{{Default|{{Eq}}0}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция выполняет операцию объединения, заданную вторым аргументом, над текущей таблицей и таблицей, заданной первым аргументом. Результат операции сохраняется в текущей таблице. Аргегаьных операций не выполняется. Функцией удобно пользоваться, когда нет необходимости выполнять аргегатные операции, она проще и быстрее чем функции группы ''Join''.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.RemoveLocated|RemoveLocated]]&lt;br /&gt;
|form={{Grey|Tab.}}'''RemoveLocated'''({{Optional|&amp;lt;Наименования столбцов поиска через запятую (STRING)&amp;gt;,&amp;lt;Значение столбца 1&amp;gt;,&amp;lt;Значение столбца 2&amp;gt;...,&amp;lt;Таблица сортирована по столбцам поиска (INT)&amp;gt;}}):''&amp;lt;Удален по крайней мере один элемент (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит поиск заданного списком столбцов количества значений в таблице. Строки, подходящие под фильтр поиска, будут удалены из таблицы. Поиск начинается со строки таблицы, следующей за текущей. Поиск может принимать во внимание факт того, что таблица сортирована по всем столбцам поиска по неубыванию, что может значительно ускорить операцию.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.RemoveLocatedEx|RemoveLocatedEx]]&lt;br /&gt;
|form={{Grey|Tab.}}'''RemoveLocatedEx'''({{Optional|&amp;lt;Наименования столбцов поиска через запятую (STRING)&amp;gt;,{{OptionalByRef|&amp;lt;Начальный индекс поиска, результирующий индекс (INT)&amp;gt;}},&amp;lt;Значение столбца 1&amp;gt;,&amp;lt;Значение столбца 2&amp;gt;...,&amp;lt;Таблица сортирована по столбцам поиска (INT)&amp;gt;}}):''&amp;lt;Удален по крайней мере один элемент (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит поиск заданного списком столбцов количества значений в таблице. Строки, подходящие под фильтр поиска, будут удалены из таблицы. Поиск начинается со строки таблицы, заданной вторым аргументом. Поиск может принимать во внимание факт того, что таблица сортирована по всем столбцам поиска по неубыванию, что может значительно ускорить операцию. Строка за последним найденным значением будет возвращена в переменной, заданной вторым аргументом, если таковая присутствует. В отличие от [[Tab.RemoveLocatedEx|RemoveLocatedEx]] функция не использует текущую строку, что позволяет ее применять при работе с нескольми потоками (thread-safe).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Compare|Compare]]&lt;br /&gt;
|form={{Grey|Tab.}}'''Compare'''(''&amp;lt;Таблица для сравнения (TAB)&amp;gt;''{{Optional|,&amp;lt;Столбцы для сравнения (STRING)&amp;gt;}}):''&amp;lt;Сравниваемая таблица совпадает с текущей (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция сравнивает текущую таблицу с заданной по указанным правилам, и возвращает 1, если таблицы эквивалентны. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.RescaleColumns|RescaleColumns]]&lt;br /&gt;
|form={{Grey|Tab.}}'''RescaleColumns'''({{Optional|&amp;lt;Процент использования ширины таблицы (INT)&amp;gt;{{Default|{{Eq}}100}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция выполняет изменение размеров видимых столбцов таблицы таким образом, чтобы они занимали всю ширину таблицы на экране, либо ее требуемую часть, если задан первый аргумент.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.FixedLines|FixedLines]]&lt;br /&gt;
|form={{Grey|Tab.}}'''FixedLines'''({{Optional|&amp;lt;Новое количество закрепленных строк (INT)&amp;gt;}}):''&amp;lt;Текущее количество закрепленных строк (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция производит закрепление заданного количества строк в верхней части визуального представления таблицы. Вне зависимости от положения курсора внутри таблицы, выбранные строки всегда будут показаны на экране.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.FixedColumns|FixedColumns]]&lt;br /&gt;
|form={{Grey|Tab.}}'''FixedColumns'''({{Optional|&amp;lt;Новое количество закрепленных столбцов (INT)&amp;gt;}}):''&amp;lt;Текущее количество закрепленных столбцов (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция производит закрепление заданного количества столбцов в верхней части визуального представления таблицы. Вне зависимости от положения курсора внутри таблицы, выбранные столбцы всегда будут показаны на экране.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Check|Check]]&lt;br /&gt;
|form={{Grey|Tab.}}'''Check'''(''&amp;lt;Индекс строки галочки (INT)&amp;gt;'',''&amp;lt;Индекс или наименование столбца галочки (INT,STRING)&amp;gt;''{{Optional|,&amp;lt;Новое состояние галочки (INT)&amp;gt;}}):''&amp;lt;Текущее состояние галочки (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция считывает или устанавливает значение галочки в указанном столбце таблицы. Функция может использоваться также для невизуальных таблиц.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Icon|Icon]]&lt;br /&gt;
|form={{Grey|Tab.}}'''Icon'''(''&amp;lt;Индекс строки иконки (INT)&amp;gt;''{{Optional|,&amp;lt;Индекс или наименование столбца иконки (INT,STRING)&amp;gt;,&amp;lt;Новый индекс иконки (INT)&amp;gt;}}):''&amp;lt;Текущий индекс иконки (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция считывает или устанавливает значение индекса иконки в указанном столбце таблицы. Функция может использоваться также для невизуальных таблиц.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.BackgroundColor|BackgroundColor]]&lt;br /&gt;
|form={{Grey|Tab.}}'''BackgroundColor'''({{Optional|&amp;lt;Индекс строки ячейки (INT)&amp;gt;,&amp;lt;Индекс или наименование столбца ячейки (INT,STRING)&amp;gt;,&amp;lt;Новый цвет фона ячейки (INT)&amp;gt;}}):''&amp;lt;Текущий цвет фона ячейки (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция считывает или устанавливает значение цвета фона ячейки в указанном столбце таблицы. Если столбец таблицы не указан цвет меняется для всей строки, если строка не указана для всех строк столбца или для всей таблицы, если не указана ни строка ни столбец. Функция может использоваться также для невизуальных таблиц.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.FontColor|FontColor]]&lt;br /&gt;
|form={{Grey|Tab.}}'''FontColor'''(''&amp;lt;Индекс строки ячейки (INT)&amp;gt;''{{Optional|,&amp;lt;Индекс или наименование столбца ячейки (INT,STRING)&amp;gt;,&amp;lt;Новый цвет текста ячейки (INT)&amp;gt;}}):''&amp;lt;Текущий цвет текста ячейки (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция считывает или устанавливает значение цвета текста в указанном столбце таблицы. Если столбец таблицы не указан цвет меняется для всей строки. Функция может использоваться также для невизуальных таблиц.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.FontStyle|FontStyle]]&lt;br /&gt;
|form={{Grey|Tab.}}'''FontStyle'''(''&amp;lt;Индекс строки ячейки (INT)&amp;gt;''{{Optional|,&amp;lt;Индекс или наименование столбца ячейки (INT,STRING)&amp;gt;,&amp;lt;Новый стиль текста ячейки (INT)&amp;gt;}}):''&amp;lt;Текущий стиль текста ячейки (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция считывает или устанавливает значение стиля текста в указанном столбце таблицы. Если столбец таблицы не указан стиль меняется для всей строки. Функция может использоваться также для невизуальных таблиц.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.HighlightMode|HighlightMode]]&lt;br /&gt;
|form={{Grey|Tab.}}'''HighlightMode'''(''&amp;lt;Режим подсветки таблиц по умолчанию (INT)&amp;gt;''{{Optional|,&amp;lt;Цвет нечетных строк (INT)&amp;gt;,&amp;lt;Процент цвета нечетных строк (INT)&amp;gt;,&amp;lt;Цвет выделения строки или столбца курсора (INT)&amp;gt;,&amp;lt;Процент цвета выделения строки или столбца курсора (INT)&amp;gt;}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция изменяет режим подсветки строк текущей таблицы. Для глобального изменения подсветки всех таблиц см. функцию [[DefaultHighlightMode]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.StartEdit|StartEdit]]&lt;br /&gt;
|form={{Grey|Tab.}}'''StartEdit'''({{Optional|&amp;lt;Индекс строки ячейки (INT)&amp;gt;,&amp;lt;Индекс или наименование столбца ячейки (INT,STRING)&amp;gt;}}):''&amp;lt;Редактирование инициировано (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция производит попытку запустить редактор ячейки таблицы для указанной ячейки таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.FinishEdit|FinishEdit]]&lt;br /&gt;
|form={{Grey|Tab.}}'''FinishEdit'''({{Optional|&amp;lt;Режим окончания редактирования (INT)&amp;gt;,&amp;lt;Индекс выделенного столбца после окончания редактирования или ноль (INT,STRING)&amp;gt;}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция инициирует окончание редактирования ячейки таблицы в указанном режиме.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Lock|Lock]]&lt;br /&gt;
|form={{Grey|Tab.}}'''Lock'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция запрещает выполнения обновления визуальной таблицы при любом ее изменении до тех пор, пока не будет вызвана функция [[Tab.Unlock|Unlock]]. Функция может использоваться перед большим количеством обновлений или заполнении большой таблицы для получения значительного ускорения операции. Функцию необходимо использовать совместно с конструкцией &amp;lt;code&amp;gt;Try .. Finally&amp;lt;/code&amp;gt; для исключения вероятности появления нерабочей таблицы на форме.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Unlock|Unlock]]&lt;br /&gt;
|form={{Grey|Tab.}}'''Unlock'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция разрешает запрещенное ранее функцией [[Tab.Lock|Lock]] выполнения обновления визуальной таблицы при любом ее изменении. См. функцию [[Tab.Lock|Lock]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.IsLocked|IsLocked]]&lt;br /&gt;
|form={{Grey|Tab.}}'''IsLocked'''():''&amp;lt;Обновление запрещено (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция проверяет, запрещено ли в данный момент обновление таблицы при ее изменении, запрет инициируется с помощью функции [[Tab.Lock|Lock]].&lt;br /&gt;
}}&lt;br /&gt;
{{function footer}}&lt;br /&gt;
&lt;br /&gt;
== Объект столбца таблицы ==&lt;br /&gt;
Подчиненный объект, ссылающийся на таблицу, используется для доступа к свойствам столбцов таблицы. Так как объект будет ссылаться на определенный столбец таблицы, существует вероятность удаления этого столбца в другом потоке до того, как программа закончит работу с объектом, это может создать ошибочную ситуацию. Чтобы обойти проблему, необходимо либо убедиться, что объект будет использоваться только в одном потоке, столбцы не будут удаляться в других потоках или использовать функции [[LockObject]] и [[UnlockObject]] (однако, их нельзя использовать с визуальными объектами). Функции, типа [[TypeStr]] будут возвращать такие же значения для этого объекта, как и для объекта основной таблицы.&lt;br /&gt;
&lt;br /&gt;
{{function header}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Column.Name|Name]]&lt;br /&gt;
|form={{Grey|Tab.Column.}}'''Name''':''&amp;lt;Имя столбца (STRING)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут позволяет получать или изменять имя столбца таблицы. Имена столбцов всегда хранятся в верхнем регистре.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Column.Caption|Caption]]&lt;br /&gt;
|form={{Grey|Tab.Column.}}'''Caption''':''&amp;lt;Заголовок столбца (STRING)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут позволяет получать или изменять заголовок столбца таблицы. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Column.DataType|DataType]]&lt;br /&gt;
|form={{Grey|Tab.Column.}}'''DataType''':''&amp;lt;Тип данных столбца (STRING)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут позволяет получать или изменять тип данных столбца таблицы. При изменении типа данных всех существующие ячейки таблицы в данном столбце, будут преобразованы в новый тип данных.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Column.Width|Width]]&lt;br /&gt;
|form={{Grey|Tab.Column.}}'''Width''':''&amp;lt;Ширина столбца (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут позволяет получать или изменять ширину столбца таблицы в пикселях.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Column.Align|Align]]&lt;br /&gt;
|form={{Grey|Tab.Column.}}'''Align''':''&amp;lt;Режим выравнивания столбца (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут позволяет получать или изменять режим выравнивания при выводе текста в столбце таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Column.Mask|Mask]]&lt;br /&gt;
|form={{Grey|Tab.Column.}}'''Mask''':''&amp;lt;Шаблон редактирования столбца (STRING)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут позволяет получать или изменять шаблон маски редактирования ячеек столбца таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Column.IsVisible|IsVisible]]&lt;br /&gt;
|form={{Grey|Tab.Column.}}'''IsVisible''':''&amp;lt;Видимость столбца (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут позволяет получать состояние или изменять видимость столбца на экране.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Column.Value|Value]]&lt;br /&gt;
|form={{Grey|Tab.Column.}}'''Value''':''&amp;lt;Значение столбца в строке CurLine (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут позволяет получать или изменять значение ячейки столбца в текущей строке таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Column.ShowCheckboxes|ShowCheckboxes]]&lt;br /&gt;
|form={{Grey|Tab.Column.}}'''ShowCheckboxes''':''&amp;lt;Показывать галки в столбце (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут позволяет получать состояние или изменять видимость галочек в столбце таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Column.ShowIcons|ShowIcons]]&lt;br /&gt;
|form={{Grey|Tab.Column.}}'''ShowIcons''':''&amp;lt;Показывать иконки в столбце (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут позволяет получать состояние или изменять видимость иконок в столбце таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Column.RedNegative|RedNegative]]&lt;br /&gt;
|form={{Grey|Tab.Column.}}'''RedNegative''':''&amp;lt;Выделять отрицательные числа красным в столбце (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут позволяет получать состояние или изменять режим выделения красным ячеек таблицы, содержащих отрицательные числа в столбце таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Column.Hint|Hint]]&lt;br /&gt;
|form={{Grey|Tab.Column.}}'''Hint''':''&amp;lt;Всплывающая подсказка для столбца (STRING)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут позволяет получать или изменять строку подсказки при наведении мышью на заголовок столбца таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Column.IsEditable|IsEditable]]&lt;br /&gt;
|form={{Grey|Tab.Column.}}'''IsEditable''':''&amp;lt;Данные в столбце можно редактировать (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут позволяет получать или изменять разрешение редактирования столбца таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Column.IsSortable|IsSortable]]&lt;br /&gt;
|form={{Grey|Tab.Column.}}'''IsSortable''':''&amp;lt;Режим сортировки столбца (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут позволяет получать или изменять разрешение визуальной сортировки столбца таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Column.IsInEnterChain|IsInEnterChain]]&lt;br /&gt;
|form={{Grey|Tab.Column.}}'''IsInEnterChain''':''&amp;lt;Столбец находить в Enter-цепочке (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут позволяет получать или изменять режим участия ячеек столбца таблицы в визуальной цепочке ввода.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Column.IsReadonly|IsReadonly]]&lt;br /&gt;
|form={{Grey|Tab.Column.}}'''IsReadonly''':''&amp;lt;Столбец имеет атрибут только для чтения (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут позволяет получать или изменять режим только для чтения при редактировании ячеек столбца таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Column.MinWidth|MinWidth]]&lt;br /&gt;
|form={{Grey|Tab.Column.}}'''MinWidth''':''&amp;lt;Минимальная ширина столбца (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут позволяет получать или изменять минимальную ширину столбца таблицы в пикселях.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Column.MaxWidth|MaxWidth]]&lt;br /&gt;
|form={{Grey|Tab.Column.}}'''MaxWidth''':''&amp;lt;Максимальная ширина столбца (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут позволяет получать или изменять максимальную ширину столбца таблицы в пикселях.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Column.Filter|Filter]]&lt;br /&gt;
|form={{Grey|Tab.Column.}}'''Filter''':''&amp;lt;Текущий визуальный фильтр столбца (STRING)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут позволяет получать текущий визуальный фильтр столбца таблицы (строку, введенную пользователем в этом столбце, для быстрого фильтрования элементов таблицы).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Column.ForbidMassLoad|ForbidMassLoad]]&lt;br /&gt;
|form={{Grey|Tab.Column.}}'''ForbidMassLoad''':''&amp;lt;Запретить загрузку столбца функцией Massload (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут позволяет получать или изменять режим запрета загрузки элементов ячеек столбца таблицы из базы данных при вызове функции [[MassLoadObjects]].&lt;br /&gt;
}}&lt;br /&gt;
{{function footer}}&lt;br /&gt;
&lt;br /&gt;
{{Объекты}}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>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</id>
		<title>Установки сервера</title>
		<link rel="alternate" type="text/html" href="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"/>
		<updated>2026-04-01T10:01:35Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{HeadLinks|&lt;br /&gt;
* [[Main_Page|Начальная страница]]&lt;br /&gt;
* [[Общая информация о сервере базы данных]]}}&lt;br /&gt;
__TOC__&lt;br /&gt;
Сервер хранит настройки в нескольких файлах инициализации, основной из которых по умолчанию называется &amp;lt;code&amp;gt;sfsrv.ini&amp;lt;/code&amp;gt; (однако с помощью [[Ключи запуска сервера из командной строки|ключей запуска из командной строки]], можно использовать другой файл для загрузки основных настроек). Обычно файлы настроек являются текстовыми файлами в форматах ANSI или UTF-16. Для формата UTF-16 в файле всегда должен присутствовать соответствующий [[BOM]]. Файл инициализации имеет структуру дерева и делится на ветки и переменные. Каждая ветка содержит полный путь и записывается в квадратных скобках (см. пример ниже). Каждая переменная записывается в виде &amp;lt;code&amp;gt;&amp;lt;ИмяПеременной&amp;gt;=&amp;quot;&amp;lt;Значение переменной&amp;gt;&amp;quot;&amp;lt;/code&amp;gt;. При этом кавычки разрешается опускать. Файлы могут содержать комментарии. Комментарием является строка, начинающаяся на знак ''';''' (точка с запятой). Многие файлы создаются и обновляются автоматически, поэтому, комментарии, введенные вручную, могут быть утеряны. Также нужно понимать, что изменения в файлах инициализации, обычно не становятся рабочими до остановки и запуска сервера (при остановке сервера все пользователи, имеющие соединение с ним в данный момент, форсированно завершат работу и все их несохраненные данные будут утеряны). Пример обычного файла инициализации:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
;Начало ветки Common&lt;br /&gt;
[Common]&lt;br /&gt;
&lt;br /&gt;
;Переменные ветки Common&lt;br /&gt;
LogType=&amp;quot;0&amp;quot;&lt;br /&gt;
Path=&amp;quot;c:\files\data\&amp;quot;&lt;br /&gt;
&lt;br /&gt;
;Начало ветки Common\Comm&lt;br /&gt;
[Common\Comm]&lt;br /&gt;
&lt;br /&gt;
;Переменные ветки Common\Comm&lt;br /&gt;
ExecutablePathAndCmdLine=&amp;quot;c:\files\data\file.exe &amp;quot;arg 1&amp;quot; &amp;quot;arg 2&amp;quot; 2&amp;quot;&lt;br /&gt;
DllPath=&amp;quot;c:\files\data\file.dll&amp;quot;&lt;br /&gt;
&lt;br /&gt;
;Начало ветки Update&lt;br /&gt;
[Update]&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ниже дана информация по всем файлам, связанным с изменением свойств работы сервера:&lt;br /&gt;
&lt;br /&gt;
== Основной файл настроек ''sfsrv.ini'' ==&lt;br /&gt;
Файл обычно хранится в бинарном каталоге сервера, и содержит основные настройки сервера, путь к файлам проекта, путь к библиотеке базы данных, а также настройки базы данных, которыми пользуется эта библиотека. Если в командной строке не указано иного, сервер загружает файл &amp;lt;code&amp;gt;sfsrv.ini&amp;lt;/code&amp;gt; по умолчанию. Файл представляется собой текстовый файл инициализации в формате ANSI или UTF-16. В случае UTF-16, в файле должен присутствовать заголовок [[BOM]]. Ниже дается список веток и переменных, которые используются сервером в файле. Если ветка или переменная необходимы, они помечены как таковые, большинство же веток и переменных можно опустить. При установке системы с помощью программы-установщика в файле инициализации сервера могут присутствовать не все ветки и переменные, описанные ниже.&lt;br /&gt;
&lt;br /&gt;
* Ветка '''Common''' хранит общие установки сервера.&lt;br /&gt;
** Переменная '''ServiceName''' указывает на имя сервиса, используемое данной копией программы сервера. По умолчанию это имя &amp;quot;''sfsrv''&amp;quot;. В случае, когда на одной машине используется более одного сервера базы данных, до регистрации сервиса в системе, необходимо указать другое имя сервиса, так как в системе не может существовать более одного сервиса с одним и тем же именем. Регистрацию и удаление сервиса можно произвести непосредственно из командной строки, нет необходимости использовать программы-установщики. К примеру, чтобы изменить имя сервиса текущей базы данных с ''sfsrv'' на ''sfsrv2'', нужно остановить сервер &amp;lt;code&amp;gt;sfsrv.exe stop&amp;lt;/code&amp;gt;, отменить регистрацию сервиса &amp;lt;code&amp;gt;sfsrv.exe deinstall&amp;lt;/code&amp;gt;, изменить значение этой переменной на ''sfsrv2'' (или добавить переменную, если ее не существовало), зарегистрировать сервис снова &amp;lt;code&amp;gt;sfsrv.exe install&amp;lt;/code&amp;gt; и запустить его &amp;lt;code&amp;gt;sfsrv.exe start&amp;lt;/code&amp;gt;. Для дополнительной информации, см. статью [[Ключи запуска сервера из командной строки]].&lt;br /&gt;
** Переменная '''Loglevel''' задает то, насколько подробной будет информация в логах сервера (обычно это файл &amp;lt;code&amp;gt;sfsrv.log&amp;lt;/code&amp;gt;). Значением переменной может быть число от ''0'' до ''2'', при этом при ''0'' логи записываться не будут, ''2'' в логах будет вестись максимально подробная информация. По умолчанию значение этой переменной равно '''1'''.&lt;br /&gt;
** Переменная '''LogFile''' задает имя файла для ведения логов сервером. По умолчанию это &amp;lt;code&amp;gt;sfsrv.log&amp;lt;/code&amp;gt;, располагающийся в папке исполняемого файла сервера.&lt;br /&gt;
** Переменная '''UpdateCataloguesRescanPeriod''' задает время сканирования каталогов обновлений клиентов ''_DeploymentBin_ConsoleClient'' и ''_DeploymentBin_GUIClient'', находящихся в каталоге файлов проекта. Повторное сканирование необходимо для того, чтобы сервер заметил изменения файлов в этом каталоге. Если администратор выложил обновления этих файлов с помощью Студии или вручную, сервер получает из контрольные суммы и передает клиентам при их соединении с сервером, после чего клиент сравнивает их со своими локальными копиями исполняемых файлов и, если значения отличаются, запрашивает на сервере обновление. Переменная задается в секундах и по умолчанию имеет значение ''20''.&lt;br /&gt;
** Переменная '''NoExecutableUpdates''' задает режим, когда исполняемые файлы сервера не будут обновляться при получении обновлений из Студии. Этот режим может быть полезен для старых баз, которые могут по-прежнему требовать обновлений проекта, однако, исполняемые файлы при этом обновлять не нужно. Кроме того, эту переменную необходимо установить разработчику, производящему изменения и компиляцию бинарных файлов сервера, это позволит остановить попытку из замены на старые файлы при каждом соединении Студии с локальным сервером разработчика. Переменная может принимать значения ''0'' (по умолчанию) и ''1''.&lt;br /&gt;
** Переменная '''AcceptCrashLogs''' задает режим, когда логи отказов и ошибок программы принимаются сервером от клиентов и складываются в подкаталоги каталога ''CrashLogs'', находящегося в папке с бинарными файлами сервера. Для доп. информации, см. [[Общая информация о сервере базы данных]]. По умолчанию, эта переменная равна ''1'' (принимать файлы). Так как на клиентах логи создаются во временной папке компьютера, при отсылке их на сервер, клиент не знает, при соединении с какой базой произошла ошибка. Если данный сервер является старой базой данных, собирать такие логи не имеет смысла, так как они, скорее всего, принадлежат другой базе данных, кроме того, для администраторов удобнее собирать логи в одном месте.&lt;br /&gt;
* Ветка '''Connection''' (обязательна). Ветка хранит установки, связанные с регистрацией клиента на сервере. Эта ветка обязательно должна присутствовать.&lt;br /&gt;
** Переменная '''Name''' задает имя базы данных. Эта информация является справочной.&lt;br /&gt;
** Переменная '''Description''' задает краткое описание базы данных. Эта информация является справочной.&lt;br /&gt;
** Переменная '''Source''' (обязательна) задает путь к папке с компилированными файлами проекта. Эта переменная обязательно должна присутствовать.&lt;br /&gt;
** Переменная '''TCPPorts''' (обязательна) задает TCP/IP порты по которым сервер будет слушать подключения клиентов или Студии. Каждый порт может иметь номер от ''1'' до ''65535''. Обычно задается один порт, использование более одного порта может потребоваться в более сложных конфигурациях. Все порты при соединении будут равнозначны. В системе обычно невозможно открыть более одного порта с одним и тем же номером, поэтому для сервера старой базы, работающей на этом же компьютере, необходимо использовать другой порт, не совпадающий с портом рабочей базы. Если при запуске сервер не может открыть все порты для прослушивания, запуск будет завершен с ошибкой. По умолчанию, сервер использует порт ''13521'', однако использование этого порта строго не рекомендуется, если порт доступен из Интернета.&lt;br /&gt;
** Переменная '''TCPPassword''' (обязательна) задает пароль сервера при TCP/IP соединении. Клиент должен использовать такой же пароль, чтобы иметь возможность регистрации на сервере. '''Внимание''': этот пароль не имеет ничего общего с паролем пользователя при входе в программу клиент. Это внутренний пароль при соединении клиента с сервером до того, как пользователь начинает вводить свое имя и пароль.&lt;br /&gt;
** Переменная '''TCPTimeout''' задает тайм-аут ожидания данных сервером до того, как сервер будет считать, что его связь с клиентом была разорвана. Если клиент соединяется с сервером с помощью интернета, из-за проблем со связью, может возникнуть ситуация, когда клиент потерял связь с сервером, но сервер в данный момент не знает этого. Часто клиент блокирует какие-либо объекты или создает транзакцию, и серверу необходимо отключить клиента, если он связь с ним утеряна, чтобы освободить объекты и ресурсы системы. Поэтому, при загрузке или отправке пакетов, после определенного времени &amp;quot;молчания&amp;quot; отсутствия новой информации, сервер отключает клиента автоматически. Здесь задается такой период в миллисекундах. По умолчанию, это значение соответствует числу ''300000'' (5 минут), для локальных сетей рекомендуется устанавливать его в размере ''60000'' (1 минута).&lt;br /&gt;
** Переменная '''AllowIPRanges''' позволяет задать диапазоны IP-адресов, подключения с которых будут разрешены. По умолчанию, сервер разрешает подключения с любых IP-адресов, если же эта переменная задана, сервер будет разрывать входящее подключение, если оно производится не с адреса, входящего в заданный диапазон. В данный момент можно задать только IPv4 диапазоны. Используется следующий формат, при задании диапазона адресов: &amp;lt;code&amp;gt;&amp;lt;Адрес&amp;gt;/&amp;lt;Маска&amp;gt;[+&amp;lt;Адрес 2&amp;gt;/&amp;lt;Маска 2&amp;gt;...]&amp;lt;/code&amp;gt; (к примеру, ''127.0.0.1/255.255.255.0+192.168.0.0/255.255.0.0'').&lt;br /&gt;
** Переменная '''CompressionMode''' позволяет задать форсированный режим сжатия пакетов при работе клиентов. Сжатие пакетов увеличивает нагрузку на процессор машины, на которой работает сервер, однако, это увеличение весьма незначительно. Кроме того, для сжатия пакета тратится дополнительное время, поэтому, для подключения по локальной сети, сжатие замедляет получение ответов сервера. Замедление также очень незначительное, поэтому, его влияние можно проигнорировать. В случае если сеть постоянно загружена, либо клиент подключен с сервером с помощью Интернета, сжатие может значительно ускорить работу с сервером, так как пакеты становятся меньше и пересылка их осуществляется быстрее. Даже для локальной сети сжатие может положительно сказаться на общей ее загрузке. Обычно сжатие настраивается на стороне клиента, однако, данная переменная задает форсированный режим сжатия. Переменная может принимать следующие значения:&lt;br /&gt;
*** '''0''' (по умолчанию) -- разрешить сжатие (сжатие будет настраиваться на стороне клиента).&lt;br /&gt;
*** '''1''' -- запретить сжатие (кроме IP адресов, указанных в переменной ''CompressionRanges'').&lt;br /&gt;
*** '''2''' -- форсировать сжатие на любом подключении (кроме IP адресов, указанных в переменной ''NoCompressionRanges'').&lt;br /&gt;
** Переменная '''CompressionRanges''' позволяет задать диапазоны IP-адресов, при подключениях с которых сжатие пакетов (см. выше) будет форсировано. В данный момент можно задать только IPv4 диапазоны. Используется следующий формат, при задании диапазона адресов: &amp;lt;code&amp;gt;&amp;lt;Адрес&amp;gt;/&amp;lt;Маска&amp;gt;[+&amp;lt;Адрес 2&amp;gt;/&amp;lt;Маска 2&amp;gt;...]&amp;lt;/code&amp;gt; (к примеру, ''127.0.0.1/255.255.255.0+192.168.0.0/255.255.0.0'').&lt;br /&gt;
** Переменная '''NoCompressionRanges''' позволяет задать диапазоны IP-адресов, при подключениях с которых сжатие пакетов (см. выше) будет запрещено. В данный момент можно задать только IPv4 диапазоны. Используется следующий формат, при задании диапазона адресов: &amp;lt;code&amp;gt;&amp;lt;Адрес&amp;gt;/&amp;lt;Маска&amp;gt;[+&amp;lt;Адрес 2&amp;gt;/&amp;lt;Маска 2&amp;gt;...]&amp;lt;/code&amp;gt; (к примеру, ''127.0.0.1/255.255.255.0+192.168.0.0/255.255.0.0'').&lt;br /&gt;
* Ветка '''DBase''' (обязательна). Ветка хранит установки, связанные с базой данных, с загрузкой библиотеки для работы с базой данных, а также установки самой библиотеки.&lt;br /&gt;
** Переменная '''SingleUserModeOnUpdates''' задает режим, когда при обновлении (изменении) структуры базы данных, библиотека будет устанавливать эксклюзивный однопользовательский режим. Изменение структуры обычно производится после обновления из Студии и, если к базе данных подключены внешние программы (к примеру, SQL Server Management Studio), есть вероятность, что обновление будет невозможно выполнить из-за занятости таблицы. Для того, чтобы убедиться, что внешние программы не влияют на обновление, сервер инициирует однопользовательский режим, производит требуемые изменения и возвращает к обычному режиму. Такой подход к обновлениям работает по умолчанию и рекомендуется к использованию. Данная переменная может принимать следующие значения:&lt;br /&gt;
*** '''0''' -- не использовать однопользовательский режим при обновлении (не рекомендуется).&lt;br /&gt;
*** '''1''' (по умолчанию) -- использовать однопользовательский режим при обновлении.&lt;br /&gt;
*** '''2''' (по умолчанию) -- производить попытку перехода в однопользовательский режим при обновлении, если он недоступен, оставлять сообщение в логах сервера, и продолжить выполнять обновление в обычном режиме (не рекомендуется).&lt;br /&gt;
** Переменная '''EnsureUptimeBeforeStart''' задает режим ожидания готовности СУБД компьютера сразу после его перезапуска. Переменная имеет значение только если сервер находится на том же компьютере, что и СУБД, к которому он производит подключение. Из-за того, что сразу после запуска компьютера, сервис сервера может быть запущен до запуска ПО СУБД (и даже если ПО СУБД запускается раньше, его готовность к работе может наступить через 1-2 минуты после запуска), может возникнуть ситуация, когда сервер базы данных не сможет подключиться к базе данных, либо подключится к ней, но база данных будет отсутствовать, либо база данных будет найдена, но не будет принимать запросы, так как не будет готова. Это может привести к ошибкам в работе сервера, это представляет особенную проблему при подключении к СУБД в режиме ADO, так как последний представляет очень ограниченную информацию о состоянии СУБД и базы данных в момент подключения. Чтобы избежать проблем при подключении и увеличить устойчивость запуска сервера после перезагрузки машины, переменная задает время ожидания в секундах после запуска машины сервера до того момента, как сервер выполнит попытку подключения к СУБД. По умолчанию это время равно 60 секундам, обычно этого времени достаточно, однако, если база данных очень большая, либо СУБД работает с большим количеством баз данных одновременно, и сервер работает в режиме ADO, можно увеличить это время до 2 и более минут. Не для всех типов СУБД эта переменная актуальна, при работе с СУБД SQLite3, к примеру, ее можно сделать равной нулю без какого-либо риска.&lt;br /&gt;
** Переменная '''WorkerDll''' (обязательна) задает относительный или абсолютный путь к библиотеке, которая будет создавать подключения к базе данных. Обычно библиотека находится в той же папке, где располагается исполняемый файл сервера, но она также может находиться в подпапке папки сервера или в другой папке диска. Название файла библиотеки зависит от типа СУБД, к которой она производит подключение. Пример: &amp;lt;code&amp;gt;Dll\MSSQL-ADO\MSSQL_ADO.dll&amp;lt;/code&amp;gt;. Большинство переменных ниже зависят от типа библиотеки, для одного типа они могут быть обязательны, для другого типа не иметь значения.&lt;br /&gt;
** Переменная '''ADOProvider''' (MSSQL, для ADO подключений) задает наименование поставщика ADO (тип OLE-сервера ADO) при использовании библиотеки работающей с MS SQL с помощью ADO. По умолчанию это значение равно ''SQLOLEDB''.&lt;br /&gt;
** Переменная '''ODBCConnectionString''' (для ODBC подключений) задает полную строку подключения к ODBC драйверу. Если эта переменная не задана, библиотека подключения создаст строку самостоятельно из переменных ''ServerAddress'', ''DatabaseName'' и т.п., при этом наименование драйвера ODBC будет задано в зависимости от используемой библиотеки подключения. Если Вы не знаете наименование установленного драйвера, для OS Windows, необходимо запустить администратор ODBC (''odbcad32.exe'') где будет полный список имен драйверов, нужно также понимать, что для 32-битного сервера необходимо запустить 32-битный администратор ODBC, который часто располагается в папке ''SysWOW64'' Windows (32-битные и 64-битные драйверы устанавливаются отдельно!). Ниже заданы умолчания для определенных библиотек:&lt;br /&gt;
*** '''MariaDB-ODBC''': &amp;lt;code&amp;gt;DRIVER={MariaDB ODBC 3.0 Driver};SERVER='''ServerAddress''';USER='''ServerLogin''';PASSWORD='''ServerPassword''';DATABASE='''DatabaseName''';NO_PROMPT=1;PORT=3306;OPTION=67108866&amp;lt;/code&amp;gt;.&lt;br /&gt;
*** '''MySQL-ODBC''': &amp;lt;code&amp;gt;DRIVER={MySQL ODBC 5.3 Unicode Driver};SERVER='''ServerAddress''';USER='''ServerLogin''';PASSWORD='''ServerPassword''';DATABASE='''DatabaseName''';NO_PROMPT=1;PORT=3306;OPTION=67109130&amp;lt;/code&amp;gt;&lt;br /&gt;
*** '''PostgreSQL-ODBC''': &amp;lt;code&amp;gt;DRIVER={PostgreSQL ODBC Driver(UNICODE)};SERVER='''ServerAddress''';UID='''ServerLogin''';PASSWORD='''ServerPassword''';DATABASE='''DatabaseName''';PORT=5432;&amp;lt;/code&amp;gt;&lt;br /&gt;
** Переменная '''ServerAddress''' (MSSQL и др., обязательна) задает адрес (или наименование машины) и наименование типа сервера (в режиме ADO), если это необходимо. Переменная записывается в виде &amp;lt;code&amp;gt;&amp;lt;Адрес или имя машины&amp;gt;[\&amp;lt;Тип сервера&amp;gt;]&amp;lt;/code&amp;gt;. ''Адрес или имя машины'' могут представлять собой как IP-адрес SQL сервера (к примеру, ''127.0.0.1''), так и сетевое имя компьютера сервера (для локального компьютера можно использовать точку (''.'')). ''Тип сервера'' обычно не указывается, но может представлять наименование ''Instance'' MSSQL сервера, если она отличается от умолчания. Для ''Express'' версии MSSQL, ''необходимо'' указать &amp;lt;code&amp;gt;\SQLExpress&amp;lt;/code&amp;gt;. Примеры: &amp;lt;code&amp;gt;.\SQLExpress&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Server1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;192.168.0.3&amp;lt;/code&amp;gt; и т.п.&lt;br /&gt;
** Переменная '''DatabaseName''' (MSSQL и др., обязательна) задает наименование базы данных, с которой будет происходить работа. '''Важно''': сервер никогда не создает базу данных автоматически, если она отсутствовала в СУБД. Это важно из-за того, что администратор должен точно знать, где находятся файлы базы данных, чтобы они не создались на неверном диске и чтобы иметь быстрый доступ к ним. По умолчанию MSQSL располагает файлы баз данных глубоко в структуре папок диска в общей папке с файлами других базы данных, что не является оптимальным расположением файлов (файлы могут быть утеряны или забыты при переустановке операционной системы на компьютере). Поэтому, при настройке новой базы данных, администратор должен самостоятельно создать и назвать новую базу данных в ПО СУБД и указать в файле инициализации имя существующей БД.&lt;br /&gt;
** Переменная '''TempDatabaseName''' (MySQL, MariaDB, PostgreSQL) задает наименование базы данных, используемой для хранения таблиц функций [[Временная таблица базы данных|временных таблиц базы данных]]. Данная база данных всегда очищается при запуске сервера и хранит информацию только в момент выполнения запросов к временным таблицам. Если эта переменная не задана, сервер автоматически создает базу данных с именем, подобным основной базе данных с добавледением суфикса. База данных будет создана в каталоге данных СУБД по умолчанию. См. также переменную ''SQLiteTempDBFile''.&lt;br /&gt;
** Переменная '''ServerLogin''' (MSSQL и др., обязательна) задает имя пользователя для подключения к СУБД и базе данных. Обычно это административная учетная запись, для MSSQL часто '''sa'''. Учетная запись должна иметь полные права в СУБД для работы с базой данных. '''Внимание''': учетная запись, задающаяся здесь, обычно не имеет отношения к учетным записям компьютера (для некоторых СУБД, это может быть не так).&lt;br /&gt;
** Переменная '''ServerPassword''' (MSSQL и др., обязательна) задает пароль пользователя для подключения к СУБД и базе данных для логина, задающегося переменной ''ServerLogin''.&lt;br /&gt;
** Переменная '''QueryTimeout''' задает максимальное время исполнения запроса в СУБД в миллисекундах. Если эта переменная не задана, установка максимального времени выполнения запроса не будет изменена (будет использовано значение по умолчанию конкретной СУБД). Данная установка может помочь в случае взаимной блокировки таблиц (ситуация теоретически маловероятна, так как сервер имеет собственную защиту от таких событий, но при исключительной стечении обстоятельств, либо из-за ошибки в СУБД, такое может произойти). После ожидания окончания выполнения запроса в течение указанного времени, запрос останавливается с ошибкой и сервер передает эту ошибку клиенту, тем самым разрешая ситуацию взаимной блокировки. '''Внимание''': установка этой переменной на слишком маленькое значение может сделать невозможным выполнение длительных запросов. Не рекомендуется устанавливать значение переменной ниже 10 минут.&lt;br /&gt;
** Переменная '''LockTimeout''' задает максимальное время ожидания блокировки таблицы в СУБД в миллисекундах. Если эта переменная не задана, установка максимального времени ожидания блокировки не будет изменена (обычно по умолчанию, это время не ограничено). Данная установка отличается от ''QueryTimeout'' тем, что используется только для того, чтобы избежать взаимной блокировки таблиц при записи (ситуация теоретически маловероятна, так как сервер имеет собственную защиту от таких событий, но при исключительной стечении обстоятельств, либо из-за ошибки в СУБД, такое может произойти), тогда как ''QueryTimeout'' может срабатывать также в случаях очень длительных запросов (к примеру, при запросе, оперирующим большим количеством записей, когда СУБД сильно загружена запросами других пользователей). После ожидания блокировки таблицы в течение указанного времени, запрос СУБД останавливается с ошибкой и сервер передает эту ошибку клиенту, тем самым разрешая ситуацию взаимной блокировки. '''Внимание''': установка этой переменной на слишком маленькое значение может вызывать частые ошибки при обработке документов, особенно в момент проведения резервного копирования. &lt;br /&gt;
** Переменная '''FTS_configuration''' (PostgreSQL, рекомендуется) задает конфигурацию полнотекстового поиска (для практических целей эта переменная совпадает с языком поиска). По умолчанию, будет использована конфигурация &amp;lt;code&amp;gt;simple&amp;lt;/code&amp;gt;. Для русского языка необходимо указать слово &amp;lt;code&amp;gt;russian&amp;lt;/code&amp;gt;.&lt;br /&gt;
** Переменная '''SQLiteDll''' (SQLite, обязательна) задает относительный или абсолютный путь к библиотеке SQLite3, которая будет выполнять функции СУБД. Обычно библиотека находится в той же папке, где располагается исполняемый файл сервера, но она также может находиться в подпапке папки сервера или в другой папке диска. Обычно библиотека имеет название &amp;lt;code&amp;gt;sqlite3.dll&amp;lt;/code&amp;gt;, она доступная для свободного скачивания с официального сайта SQLite. Кроме этой библиотеки, для работы с SQLite не требуется скачивание и установка других файлов. '''Важно''': тип библиотеки (''x86'' или ''x64'') должен совпадать с типом исполняемого файла сервера. '''Важно''': библиотека должна иметь версию не ниже ''3.33.0''.&lt;br /&gt;
** Переменная '''SQLiteCacheSize''' (SQLite, желательна) задает количество памяти, выделяемой под буфер таблиц при работе SQlite3. Переменная задается в мегабайтах. Чем больше это число, тем быстрее будут происходить повторные запросы к таблицам базы данных. Однако, так как исполняемый файл сервера и библиотека СУБД в случае SQLite3 находятся в одном процессе и делят адресное пространство, может получиться ситуация, когда библиотека SQLite3 использует большую часть памяти для своих нужд и сервер не сможет нормально работать при обслуживании запросов пользователей. Чтобы избежать такой ситуации для больших базы данных, необходимо использовать ''x64'' версию сервера на машине с большим объемом памяти. Минимально возможное значение устанавливается в размере 2 Мб, максимальное возможное значение для ''x86'' версий сервера устанавливается в размере 1400Мб, максимальное значение для ''x64'' версий сервера не задано. Значение по умолчанию рассчитывается по следующему алгоритму:&lt;br /&gt;
*** Для ''x86'' версий: 67% от полного размера физической памяти машины, но не больше 1400Мб и не меньше 2Мб.&lt;br /&gt;
*** Для ''x64'' версий: 67% от полного размера физической памяти машины, но не меньше 2Мб.&lt;br /&gt;
** Переменная '''SQLiteHeapLimit''' (SQLite) задает ограничение на полное использование памяти библиотекой SQLite. Это значение включает размер буфера, заданного в переменной ''SQLiteCacheSize'' а также временный буфер запросов, переменные и пр. Обычно это значение не установлено (по умолчанию равно нулю), так как ''SQLiteCacheSize'' чаще всего использует львиную долю затраченной памяти. При неверной установке, объемные запросы будут выдавать ошибку нехватки памяти. Значение не рекомендуется к изменению.&lt;br /&gt;
** Переменная '''SQLiteCleanFloats''' (SQLite) задает режим граничной очистки (округления) вещественных чисел, получаемых от SQLite. Очистка производится по алгоритму системы (см. [[Числа]], [[NumberToStr]]). Так как SQLite работает с числами средней точности ''Double'', результаты вычислений могут накапливать ошибку в младших дробных знаках числа. Такие результаты могут немного отличаться от обычно получаемые от других СУБД, что может быть нежелательно для работы, поэтому по умолчанию эта переменная равна ''1'', позволяя уменьшить влияние расчетов с такими числами на результат. Переменную рекомендуется оставить включенной, однако, если база данных работает не с финансовой информацией, а с информацией произвольной точности (математические вычисления и пр.), данная переменная может иногда вносить (минимальные) искажения в результаты вычислений, поэтому, в этом случае, ее выгоднее отключить.&lt;br /&gt;
** Переменная '''SQLiteDatabaseCollationPage''' (SQLite) задает кодовую страницу, которая будет использоваться при перекодировании текста из UTF-8 в ANSI. По умолчанию это значение равно ''1251'' для кириллической сборки библиотеки сервера. Подобное перекодирование обычно не производится для строковых данных, поэтому, эта переменная не является очень важной.&lt;br /&gt;
** Переменная '''DatabaseFile''' (SQLite, обязательна) задает путь и имя файла базы данных SQLite. Кроме этого файла в том же каталоге, где он располагается, SQLite может создавать временные файлы с добавлением префиксов к расширению (к примеру ''-shm'' или ''-wal'' (Внимание! Файл ''&amp;lt;Имя&amp;gt;.&amp;lt;Расширение&amp;gt;-wal'' не является временным, а представляет собой часть базы данных SQLite, см. ниже)), либо временные файлы с расширением ''sftempdb''. При создании новой базы данных, файл может отсутствовать, SQLite3 создаст его самостоятельно, после чего, при проведении аудита, в файле будет создана полная структура базы данных проекта.&lt;br /&gt;
** Переменная '''SQLiteTempDBFile''' (SQLite) задает путь и имя файла базы данных, который будет использоваться для работы с функциями [[Временная таблица базы данных|временных таблиц]]. Обычно система сама определяет имя этого файла на основании имени основной базы данных, и помещает его в тот же самый каталог, что и файл базы данных. Однако, если администратору необходимо, он может поместить этот файл в другой каталог или изменить его название по умолчанию. После остановки работы сервера, файл можно удалить, так как он не содержит каких-либо данных, имеющих значение, при запуске сервера, этот файл автоматически очищается. Файл должен располагаться на быстром носителе, иначе работа с функциями временных таблиц может быть замедлена.&lt;br /&gt;
** Переменная '''SQLiteSynchronousWriting''' (SQLite) задает режим буферизации записи данных на диск SQLite (см. описание ''PRAGMA synchronous'' в документации SQLite). По умолчанию это значение не устанавливается и используется внутреннее умолчание библиотеки SQLite3.dll. Использование значений меньше 2 строго не рекомендуется. Переменная может принимать следующие значения:&lt;br /&gt;
*** '''0''' -- будет разрешен буфер записи операционной системы при записи. В данном режиме запись данных будет производиться гораздо быстрее, однако, существует очень высокая вероятность потерять данные или испортить базу данных при сбое питания на сервере.&lt;br /&gt;
*** '''1''' -- запись будет вестись в режиме &amp;quot;нормальный&amp;quot; с меньшей нагрузкой на диск и очень небольшой опасностью потерять данные, чем в режиме 2. В режиме записи ''WAL'' документация SQLite утверждает, что вероятность потерять данные практически отсутствует.&lt;br /&gt;
*** '''2''' -- запись будет вестись в режиме &amp;quot;полный&amp;quot; с большей нагрузкой на диск, чем в режиме &amp;quot;нормальный&amp;quot;. Этот режим медленнее, чем &amp;quot;нормальный&amp;quot;, однако, вероятность потерять данные из-за сбоя питания машине сервера отсутствует. Данный режим рекомендуется к использованию.&lt;br /&gt;
*** '''3''' -- запись будет вестись в режиме &amp;quot;дополнительный&amp;quot; с еще большей нагрузкой на диск, чем в режиме &amp;quot;полный&amp;quot;. Этот режим может дополнительно повысить безопасность при записи в базу данных.&lt;br /&gt;
** Переменная '''KeepTraceLogs''' (SQLite,MariaDB,MySQL) задает режим, когда все запросы к базе данных и время их исполнения будут также фиксироваться в особом логе сервера. Этот режим отключен по умолчанию и может использоваться для отладки разработчиком системы. Так как при работе с SQLite невозможно использование внешнего профайлера, как, примеру, с MSSQL, библиотека сервера может вести собственный лог профайлера, который может потребоваться разработчику для оптимизации или исправления ошибок в запросах.&lt;br /&gt;
** Переменная '''JournalMode''' (SQLite) задает режим записи в базу данных SQLite (см. описание ''PRAGMA journal_mode'' в документации SQLite). Режим имеет очень важное значение, так как напрямую влияет на скорость записи данных в базу данных. Переменная может принимать следующие значения:&lt;br /&gt;
*** '''DELETE''' -- журнал записи (дополнительный файл на диске) создается в момент транзактной записи и удаляется по ее окончании. Это самый медленный режим, он не рекомендуется к использованию.&lt;br /&gt;
*** '''TRUNCATE''' -- журнал записи (дополнительный файл на диске) создается в момент транзактной записи и очищается по ее окончании. Это медленный режим, он не рекомендуется к использованию.&lt;br /&gt;
*** '''PERSIST''' -- журнал записи (дополнительный файл на диске) создается в момент транзактной записи и его заголовок заполняется нулями по ее окончании. Это сравнительно медленный режим, он может быть использован, если режим ''WAL'' по какой-либо причине не подходит.&lt;br /&gt;
*** '''WAL''' (по умолчанию) -- журнал записи ведется как отдельный файл, данные поступают в него при любой записи и в определенные моменты, данные из него копируются в основной файл базы данных. Этот режим в 3-5 раз быстрее при обработке документов или сложной транзактной записи, чем другие безопасные режимы SQLite. У этого режима, однако, есть две важные особенности: при загрузке базы данных в режиме ''WAL'', ее невозможно в дальнейшем перевести в любой другой режим; файл журнала на диске (обычно имеет расширение с суффиксом ''-wal''), является частью базы данных (при копировании базы данных, в момент, когда сервер отключен, необходимо также скопировать и этот файл). Данный режим рекомендуется к использованию.&lt;br /&gt;
*** '''MEMORY''' -- журнал записи создается и ведется в системной памяти, если во время транзакции сервер будет остановлен или пропадет питание, информация в базе данных будет испорчена. Режим не рекомендуется к использованию, и может работать, для тестирования базы данных или ее быстрого заполнения с тем, чтобы потом использовать ее в других режимах.&lt;br /&gt;
*** '''OFF''' -- журнал записи не ведется вообще. Данный режим несовместим с работой системы, так как он не позволяет отменить транзакцию при ошибке внутри нее. С практической точки зрения, этот режим превращает базу данных в файл прямой записи без возможности работы с транзакциями.&lt;br /&gt;
** Переменная '''MySQL_sql_mode''' (MariaDB,MySQL) задает умолчания для инициализации переменной ''sql_mode'' СУБД MariaDB и MySQL. Используйте документацию соответствующей СУБД для получения информации по возможным значениям переменной ''sql_mode''. '''Внимание''': некорректная установка этой переменной может сделать сервер неработоспособным, есть также вероятность потерять данные! Не изменяйте переменную без того, чтобы внимательно прочитать документацию СУБД. Установка по-умолчанию соответствует строке &amp;lt;code&amp;gt;NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION,PIPES_AS_CONCAT,ANSI_QUOTES&amp;lt;/code&amp;gt;.&lt;br /&gt;
** Переменная '''IsMariaDB''' (MariaDB или MySQL) задает, к какой из СУБД будет осуществлять соединение сервер. '''&amp;quot;1&amp;quot;''' -- MariaDB, '''&amp;quot;0&amp;quot;''' -- MySQL. Если эта переменная не указана, сервер определит тип сервера из наименования драйвера ODBC. Однако, если для СУБД MariaDB используется драйвер ODBC MySQL (это позволяется), необходимо обязательно указать эту переменную.&lt;br /&gt;
** Переменная '''SimpleDBases''' задает список имен дополнительных баз данных, к таблицам которым имеет доступ СУБД и к которым может обращаться программа с помощью функций [[Временная таблица базы данных|временных таблиц баз данных]]. Наименования баз данных перечисляются через запятую и должны совпадать с именами баз данных, уже созданных на сервер СУБД. Для SQLite используются имена файлов с полными путями. Все базы данных из этой переменной будут автоматически включены в резервную копию, которая создается сервером (см. переменную ''BackupServer'' ниже).&lt;br /&gt;
* Ветка '''EventLogs'''. Ветка хранит установки, связанные с ведением журнала регистрации событий базы данных.&lt;br /&gt;
** Переменная '''LogsMode''' задает режим ведения таблицы журнала регистрации событий. Переменная может принимать следующие значения:&lt;br /&gt;
*** '''0''' (по умолчанию) -- таблица журнала регистрации событий ведется в текущей базе данных. Такой способ ведения журнала рекомендован. Если запись в журнал ведется внутри транзакции, она будет отменена в момент отмены транзакции совместно с отменой остальных изменений. Минусом такого подхода является увеличение скорости роста базы данных, так как журнал событий может накопить большое количество строк. В отличие от остальных таблиц базы данных, журнал разрешается очищать внешними средствами, если в этом есть необходимость.&lt;br /&gt;
*** '''1''' -- таблица журнала регистрации событий ведется в другой базе данных. Такой способ ведения журнала может использоваться, если необходимо заботиться о размере базы данных (к примеру, если используется MSSQL Express). Базу данных с журналом можно заархивировать и создать заново в любой момент, кроме того сервер с базой данных может находиться на другой машине. Однако, для такого способа ведения журнала нужно понимать, что если запись в журнал ведется внутри транзакции, она '''не''' будет отменена в момент отмены транзакции совместно с отменой остальных изменений. Этот минус не затрагивает базы данных в SQLite, для которых записи в журнал, находящийся в отдельной базе данных, входят в одну транзакцию с записями в основную базу данных.&lt;br /&gt;
*** '''2''' -- таблица журнала регистрации событий ведется в текстовом файле. События поступают в один файл в течение календарного месяца, после чего, создается новый файл. Файлы создаются в каталоге &amp;lt;code&amp;gt;EventLogs&amp;lt;/code&amp;gt; каталога файлов проекта. Такой способ ведения журнала не рекомендуется к использованию, так как, как и для способа ''1'', если запись в журнал ведется внутри транзакции, она '''не''' будет отменена в момент отмены транзакции совместно с отменой остальных изменений, но самое важное, сервер в данный момент не поддерживает запросы к текстовому журналу, поэтому функция [[Logs.Query|Query]] будет недоступна. Файл журнала ведется в формате UTF-16 и в нем могут присутствовать знаки с кодами &amp;lt;32.&lt;br /&gt;
*** '''3''' -- таблица журнала регистрации событий не будет вестись вообще.&lt;br /&gt;
** Переменная '''ODBCLogsConnectionString''' (для ODBC подключений) задает полную строку подключения к ODBC драйверу для базы данных, в которой будут храниться логи (если значение перменной ''LogsMode'' равно 1). Если эта переменная не задана, библиотека подключения создаст строку самостоятельно из переменных ''LogsServerAddress'', ''LogsDatabaseName'' и т.п., при этом наименование драйвера ODBC будет задано в зависимости от используемой библиотеки подключения. Ниже заданы умолчания для определенных библиотек:&lt;br /&gt;
*** '''MariaDB-ODBC''': &amp;lt;code&amp;gt;DRIVER={MariaDB ODBC 3.0 Driver};SERVER='''LogsServerAddress''';USER='''LogsServerLogin''';PASSWORD='''LogsServerPassword''';DATABASE='''LogsDatabaseName''';NO_PROMPT=1;PORT=3306;OPTION=67108865&amp;lt;/code&amp;gt;.&lt;br /&gt;
*** '''MySQL-ODBC''': &amp;lt;code&amp;gt;DRIVER={MySQL ODBC 5.3 Unicode Driver};SERVER='''LogsServerAddress''';USER='''LogsServerLogin''';PASSWORD='''LogsServerPassword''';DATABASE='''LogsDatabaseName''';NO_PROMPT=1;PORT=3306;OPTION=67109130&amp;lt;/code&amp;gt;&lt;br /&gt;
*** '''PostgreSQL-ODBC''': &amp;lt;code&amp;gt;DRIVER={PostgreSQL ODBC Driver(UNICODE)};SERVER='''LogsServerAddress''';UID='''LogsServerLogin''';PASSWORD='''LogsServerPassword''';DATABASE='''LogsDatabaseName''';PORT=5432;&amp;lt;/code&amp;gt;&lt;br /&gt;
** Переменная '''LogsServerAddress''' (MSSQL и др.) задает адрес (или наименование машины) и наименование типа сервера (в режиме ADO), для хранения базы данных журнала регистрации событий. Эта переменная используется только, если переменная ''EventLogs'' равна 1. Переменная записывается в виде &amp;lt;code&amp;gt;&amp;lt;Адрес или имя машины&amp;gt;[\&amp;lt;Тип сервера&amp;gt;]&amp;lt;/code&amp;gt;. ''Адрес или имя машины'' могут представлять собой как IP-адрес SQL сервера (к примеру, ''127.0.0.1''), так и сетевое имя компьютера сервера (для локального компьютера можно использовать точку (''.'')). ''Тип сервера'' обычно не указывается, но может представлять наименование ''Instance'' MSSQL сервера, если она отличается от умолчания. Для ''Express'' версии MSSQL, ''необходимо'' указать &amp;lt;code&amp;gt;\SQLExpress&amp;lt;/code&amp;gt;. Примеры: &amp;lt;code&amp;gt;.\SQLExpress&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Server1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;192.168.0.3&amp;lt;/code&amp;gt; и т.п.&lt;br /&gt;
** Переменная '''LogsDatabaseName''' (MSSQL и др.) задает наименование базы данных журнала регистрации событий. Эта переменная используется только, если переменная ''EventLogs'' равна 1. '''Важно''': сервер никогда не создает базу данных автоматически, если она отсутствовала в СУБД. Это важно из-за того, что администратор должен точно знать, где находятся файлы базы данных, чтобы они не создались на неверном диске и чтобы иметь быстрый доступ к ним. По умолчанию MSQSL располагает файлы баз данных глубоко в структуре папок диска в общей папке с файлами других баз данных, что не является оптимальным расположением файлов (файлы могут быть утеряны или забыты при переустановке операционной системы на компьютере). Поэтому, при настройке новой базы данных, администратор должен самостоятельно создать и назвать новую базу данных в ПО СУБД и указать в файле инициализации имя существующей БД.&lt;br /&gt;
** Переменная '''LogsServerLogin''' (MSSQL и др.) задает имя пользователя для подключения к СУБД и базе данных журнала регистрации событий. Обычно это административная учетная запись, для MSSQL часто '''sa'''. Эта переменная используется только, если переменная ''EventLogs'' равна 1. Учетная запись должна иметь полные права в СУБД для работы с базой данных. '''Внимание''': учетная запись, задающаяся здесь, обычно не имеет отношения к учетным записям компьютера (для некоторых СУБД, это может быть не так).&lt;br /&gt;
** Переменная '''LogsServerPassword''' (MSSQL и др.) задает пароль пользователя для подключения к СУБД и базе данных журнала регистрации событий для логина, задающегося переменной ''ServerLogin''. Эта переменная используется только, если переменная ''EventLogs'' равна 1.&lt;br /&gt;
** Переменная '''LogsDatabaseFile''' (SQLite) задает путь и имя файла базы данных журнала регистрации событий SQLite. Эта переменная используется только, если переменная ''EventLogs'' равна 1.&lt;br /&gt;
** Переменная '''UserNameFieldSize''' задает размер в символах поля ''UserName'' таблицы журнала регистрации событий. По умолчанию эта переменная равна нулю (поле имеет неограниченную длину и тип ''TEXT'').&lt;br /&gt;
** Переменная '''CommentFieldSize''' задает размер в символах поля ''Comment'' таблицы журнала регистрации событий. По умолчанию эта переменная равна нулю (поле имеет неограниченную длину и тип ''TEXT'').&lt;br /&gt;
* Ветка '''BackupServer''' хранит установки, связанные созданием резервных копий базы данных по расписанию, либо для возможности инициации создания таких копий с помощью функций [[InitiateBackupCreation]] и [[QueryBackupProgress]]. Ветка содержит произвольное количество подчиненных веток, каждая из которых должна быть названа уникально. Название подчиненных веток должно иметь вид: &amp;lt;code&amp;gt;Task&amp;lt;Уникальное имя протокола копирования&amp;gt;&amp;lt;/code&amp;gt; (к примеру, ''Task132''). Каждая из таких веток будет являться протоколом (задачей) резервного копирования. Ниже даны все возможные переменные, которые используются для задания алгоритма задачи резервного копирования.&lt;br /&gt;
** Общие переменные (внутри ветки ''BackupServer'', но вне веток протоколов копирования):&lt;br /&gt;
*** Переменная '''BackupToolCommandline''' (MariaDB, MySQL, PostgreSQL) задает имя исполняемого файла программы, используемой для инициации резервного копирования. Переменная используется для СУБД, у которых отсутствуют возможности инициации резервного копирования непосредственно из текста SQL, поэтому необходимо использование внешней исполняемой утилиты, входящей в комплект СУБД. Особенности переменной следующие: &lt;br /&gt;
**** MariaDB и MySQL: По умолчанию используется утилита '''mariabackup.exe''' для MariaDB и '''mysqldump.exe''' для MySQL. При задании переменной, в ней задается имя утилиты со всеми параметрами командной строки. Путь к файлу утилиты задавать не обязательно (будет использован путь к бинарным файлам СУБД). Строка, используемая по умолчанию, выглядит следующим образом: &amp;lt;code&amp;gt;mariabackup.exe --backup --target-dir=%1% --databases=&amp;quot;%2%&amp;quot; --host=%3% --port=3306 --user=%4% --password=%5% --no-defaults&amp;lt;/code&amp;gt;. '''Важно:''' резервная копия базы данных, создаваемая утилитой состоит из множества файлов, сервер комбинирует эти файлы в один '''.tar''' архив. Файлы, не связанные с базой данных (метаданные, тексты проекта и пр.) копируются обычным образом, как для остальных СУБД. &lt;br /&gt;
**** PostgreSQL: По умолчанию используется утилита '''pg_dump.exe'''. При задании переменной, в ней задается имя утилиты со всеми параметрами командной строки. Если папка с данными ''data'' PostgreSQL находится не в пути по-умолчанию, переменная '''должна''' присутствовать, так как иначе сервер не сможет найти положение утилиты ''pg_dump.exe''. Строка, используемая по умолчанию, выглядит следующим образом: &amp;lt;code&amp;gt;pg_dump.exe -Fc --schema=public --file=%1% --host=%3% --port=5432 --username=%4% --no-password %2%&amp;lt;/code&amp;gt;. ''pg_dump.exe'' не принимает пароль базы данных в командной строке, поэтому сервер передает пароль в переменных окружения.&lt;br /&gt;
**** Строка запуска утилиты резервного копирования может содержать следующие макросы:&lt;br /&gt;
***** '''%1%''' -- Папка, в которую утилита будет производить резервное копирование (система поменяет макрос на путь к временной папке в момент запуска утилиты).&lt;br /&gt;
***** '''%2%''' -- Заменяется на имя базы данных в момент запуска утилиты.&lt;br /&gt;
***** '''%3%''' -- Заменяется на адрес или DNS сервера базы данных в момент запуска утилиты.&lt;br /&gt;
***** '''%4%''' -- Заменяется на имя пользователя базы данных (администратора с правами резервного копирования) в момент запуска утилиты. Важно: здесь указывается имя пользователя СУБД, не имя пользователя OS или сервера.&lt;br /&gt;
***** '''%5%''' -- Заменяется на пароль пользователя базы данных в момент запуска утилиты.&lt;br /&gt;
***** '''%6%''' -- Заменяется на имя базы данных в момент запуска утилиты, для MariaDB и MySQL отличается от ''%2%'' тем, что не содержит имя базы данных ''mysql''.&lt;br /&gt;
** Переменная '''TaskName''' (обязательна) используется для задания короткого уникального имени протокола копирования. По этому имени, задача может быть доступна из функции [[InitiateBackupCreation]].&lt;br /&gt;
** Переменная '''ExcludedPaths''' хранит список путей каталога данных проекта, которые необходимо исключить из резервного копирования. Пути всегда относительные, и могут содержать более одного наименования папки. К примеру, &amp;lt;code&amp;gt;_DeploymentBin_ConsoleClient,_DeploymentBin_GUIClient,Temp\Касса&amp;lt;/code&amp;gt;. Из резервного копирования, к примеру, можно исключить каталог с картинками, если таковой имеется и он очень объемный. Этот каталог можно включить в резервное копирование раз в день, а каждые 2-4 часа производить копирование без этого каталога. '''Внимание''': из резервного копирования необходимо исключать файлы, которые невозможно открыть на чтение, иначе копирование закончится неудачно, поэтому, если файлы базы данных, хранятся в каталоге файлов проекта, папку с этими файлами необходимо исключить с помощью этой переменной.&lt;br /&gt;
** Переменная '''BackupTo''' (обязательна) задает путь в который будет выложен результат резервного копирования (копия). Результатом может быть как папка, так и файл архива (если заданы свойства архиватора). Данный путь может находиться в сети, в этом случае, программа выполнит создание резервной копии базы данных во временной папке текущего компьютера, прежде чем переместить его в место назначения.&lt;br /&gt;
** Переменная '''TempFolder''' задает путь к папке с временными файлами. Если эта переменная не задана, используется системная папка временных файлов, однако, при создании резервной копии базы данных, если системная папка располагается на том же носителе, что и файлы базы данных, копирование может быть замедлено и будет увеличивать нагрузку на жесткий диск. В этом случае, выгодно указать папку на другом диске.&lt;br /&gt;
** Переменная '''MaximalBackupsCount''' задает максимальное количество старых резервных копий, которые будут храниться в папке результата. Если выполнение резервного копирования закончится удачно и по окончании процесса в папке располагается большее количество копий, чем задано в этой переменной, копии сортируются по времени создания и самые старые лишние копии (папки или файлы) будут удалены. По умолчанию эта переменная равно ''10''. Количество хранимых копий зависит от размера одной резервной копии и вместимости жесткого диска папки назначения.&lt;br /&gt;
** Переменная '''Schedule''' задает расписание, руководствуясь которым, резервное копирование будет происходить автоматически. Без задания расписания, протокол копирования может быть вызван только с помощью функции [[InitiateBackupCreation]], которая, однако, может исполнять и те протоколы (задачи), для которых задано расписание. Расписание представляет собой список времен событий, отделенных запятыми. Каждое время события может быть задано в одном из следующих видов:&lt;br /&gt;
*** &amp;lt;code&amp;gt;MMMM&amp;lt;/code&amp;gt; -- событие, заданное числом, будет исполняться каждые MMMM минут. К примеру, ''30'' будет исполняться каждые полчаса.&lt;br /&gt;
*** &amp;lt;code&amp;gt;[-][&amp;lt;День недели&amp;gt;:]HH:MM&amp;lt;/code&amp;gt; -- событие, состоящее только из чисел, задает день в неделе, час и минуту, когда оно будет инициировано. День недели представляет собой число от 1 до 7. Первым днем считается понедельник, последним воскресенье. Если день недели не задан, событие будет выполняться каждый день в указанный час и минуту. Если при задании события первым символом идет минус (''-''), дата и время этого события будут исключены из расписания. Таким образом можно исключить создание резервной копии, к примеру, в воскресенье, когда изменения в базе данных не производятся (пример такого расписания: ''05:00,-7:05:00''). Если событие по каким-то причинам не состоялось в указанное время (возможно в это время выполнялось другое событие резервного копирования), оно может быть инициировано позже, но не более чем на полчаса после своего расписания.&lt;br /&gt;
*** &amp;lt;code&amp;gt;[-]D&amp;lt;День месяца&amp;gt;:HH:MM&amp;lt;/code&amp;gt; -- событие, начинающееся с буквы ''D'', задает день в месяце, час и минуту, когда оно будет инициировано. Если рабочий месяц не содержит указанного дня (указано число 30, и текущий месяц февраль), оно будет пропущено. Если при задании события первым символом идет минус (''-''), дата и время этого события будут исключены из расписания. Таким образом можно исключить создание резервной копии, к примеру, в определенные дни месяца, когда копирование будет выполняться по другой задаче в другую папку (пример такого расписания: ''7:05:00,-D1:05:00,-D10:05:00,-D20:05:00'' -- событие будет выполняться каждое воскресенье в пять утра, за исключением 1, 10 и 20 числа каждого месяца). Если событие по каким-то причинам не состоялось в указанное время (возможно в это время выполнялось другое событие резервного копирования), оно может быть инициировано позже, но не более чем на полчаса после своего расписания.&lt;br /&gt;
** Переменная '''Archiver''' задает строку выполнения архиватора. Если эта переменная и переменная ''ArchiverExtension'' заданы, результатом работы протокола резервного копирования будут файлы архива, а не папки с файлами-копиями. Можно использовать любой архиватор, работающий из командной строки. Необходимо использовать ключи, которые запретят любые запросы к пользователю, так как на них некому будет отвечать и протокол копирования зависнет в ожидании и никогда не будет выполнен. Пример строки архиватора для ''7zip'': &amp;lt;code&amp;gt;&amp;quot;C:\Program Files\7-Zip\7z.exe&amp;quot; a &amp;quot;%1%\%3%&amp;quot; -mx4 -sse -y -r &amp;quot;%1%\%2%\*.*&amp;quot;&amp;lt;/code&amp;gt; (заметьте, что в строке используются макросы, а использование кавычек обусловлено тем, что путь может содержать пробелы). При создании строки выполнения, можно использовать следующие макросы:&lt;br /&gt;
*** '''%1%''' -- полный путь к папке, в которой находится папка с файлами для архивации (она может находиться в папке временных файлов или временной папке в папке назначения, но она всегда находится на локальном диске, и не в сети).&lt;br /&gt;
*** '''%2%''' -- имя папки, в которой располагаются файлы архивации (обычно эта папка входит в архив).&lt;br /&gt;
*** '''%3%''' -- имя архивного файла в расширением, который требуется создать. Это имя может включать временный суффикс, который будет удален сервером при успешном окончании процесса архивации. Имя архива должно полностью совпадать с заданным в этом макросе, так как серверу необходимо точно знать, какой файл был создан.&lt;br /&gt;
** Переменная '''ArchiverExtension''' задает расширение файла архиватора (для ''7zip'', к примеру, эта переменная должна быть задана как ''7z''). Если эта переменная и переменная ''Archiver'' заданы, результатом работы протокола резервного копирования будут файлы архива, а не папки с файлами-копиями.&lt;br /&gt;
** Переменная '''ShrinkLogs''' задает режим, когда после выполнения резервного копирования базы данных, сервер выполнит процедуру резервного копирования и сжатия логов базы данных. Для некоторых типов СУБД (к примеру, SQLite), такая процедура не имеет значения. В этом случае, переменная будет игнорирована. По умолчанию эта переменная не задана. Для MSSQL важно выполнять периодическое сжатие логов базы данных, иначе, через определенное время, логи станут больше по размеру, чем сама база данных, и, если не следить за ними, могут заполнить носитель на котором содержится база данных, и тем самым вызвать остановку работы с базой данных.&lt;br /&gt;
* Ветка '''ProxyServer''' хранит разрешения для использования серверного соединения, как TCP прокси. Такое прокси соединение можно выполнить на клиенте, использовав функцию [[IPConnection.UseProxy|UseProxy]] при соединении. Ветка может содержать до трех переменных:&lt;br /&gt;
** Переменные '''AdministratorProxy''', '''PowerUserProxy''' и '''UserProxy''' содержат разрешенные диапазоны адресов (на данный момент только IPv4 {{Planned}}), разрешающие соединение для пользователей с соответствующими правами. При этом для администраторов будут разрешены соединения, описанные во врсех трех переменных, для опытных пользователей, -- описанные в переменных ''PowerUserProxy'' и ''UserProxy'', и для обычных пользователей -- только в переменной ''UserProxy''. Адреса и порты, не описанные в этих переменных, будут запрещены для использования сервером. Любую из переменных можно не указывать. Если не указать ни одной переменной, любые прокси соединения через сервер будут запрещены. Все три переменные имеют один и тот же формат, описанный в следующем пункте.&lt;br /&gt;
** Переменные имеют формат &amp;lt;code&amp;gt;&amp;lt;Разрешенные диапазоны адресов прокси&amp;gt;[:,=]&amp;lt;Разрешенный диапазон портов&amp;gt;&amp;lt;/code&amp;gt;. Разрешенные диапазоны адресов имеют такой же формат, как и переменная ''AllowIPRanges''. Разрешенный диапазон портов, имеет следующий формат: &amp;lt;code&amp;gt;&amp;lt;Начальный порт 1&amp;gt;[-&amp;lt;Конечный порт 1&amp;gt;[,&amp;lt;Начальный порт 2&amp;gt;...]]&amp;lt;/code&amp;gt;. Примеры содержимого переменных:&lt;br /&gt;
*** '''0.0.0.0/0.0.0.0:80''' -- разрешает соединения на порт 80 на любые адреса, доступные серверу.&lt;br /&gt;
*** '''192.168.0.0/255.255.0.0=21-22,5000-6000''' -- разрешает соединения на порты 21,22 и от 5000 до 6000 на любые адреса, из диапазона 192.168.0.0 - 192.168.255.255. Разделитель порта можно записывать как в виде двоеточия, так и в виде знака равно.&lt;br /&gt;
* Ветка '''UpdateServer''' устарела и больше не используется.&lt;br /&gt;
&lt;br /&gt;
=== Сводная таблица настроек и их применимости к разным СУБД ===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;border-collapse:collapse;font-size:80%;width=95%;&amp;quot;&lt;br /&gt;
! width=10%|Ветка Ini-файла&lt;br /&gt;
! width=15%|Имя установки&lt;br /&gt;
! width=10%|Обязательна&lt;br /&gt;
! width=17%|Применимость к СУБД&lt;br /&gt;
! Краткое описание&lt;br /&gt;
|-&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Common&lt;br /&gt;
|ServiceName&lt;br /&gt;
|Нет&lt;br /&gt;
| -&lt;br /&gt;
|Указывает на имя сервиса&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Common&lt;br /&gt;
|Loglevel&lt;br /&gt;
|Нет&lt;br /&gt;
| -&lt;br /&gt;
|Задает уровень информации, помещаемой в лог сервера&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Common&lt;br /&gt;
|LogFile&lt;br /&gt;
|Нет&lt;br /&gt;
| -&lt;br /&gt;
|Задает имя файла лога сервера&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Common&lt;br /&gt;
|UpdateCataloguesRescanPeriod&lt;br /&gt;
|Нет&lt;br /&gt;
| -&lt;br /&gt;
|Задает время сканирования каталогов обновлений клиентов&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Common&lt;br /&gt;
|NoExecutableUpdates&lt;br /&gt;
|Нет&lt;br /&gt;
| -&lt;br /&gt;
|Задает режим, когда исполняемые файлы сервера не будут обновляться при получении обновлений из Студии&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Common&lt;br /&gt;
|AcceptCrashLogs&lt;br /&gt;
|Нет&lt;br /&gt;
| -&lt;br /&gt;
|Задает режим, когда логи отказов и ошибок программы принимаются сервером от клиентов в каталог на сервере&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Connection&lt;br /&gt;
|Name&lt;br /&gt;
|Нет&lt;br /&gt;
| -&lt;br /&gt;
|Задает имя базы данных (описательное)&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Connection&lt;br /&gt;
|Description&lt;br /&gt;
|Нет&lt;br /&gt;
| -&lt;br /&gt;
|Задает краткое описание базы данных&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Connection&lt;br /&gt;
|Source&lt;br /&gt;
|'''Да'''&lt;br /&gt;
| -&lt;br /&gt;
|Задает путь к папке с компилированными файлами проекта&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Connection&lt;br /&gt;
|TCPPorts&lt;br /&gt;
|'''Да'''&lt;br /&gt;
| -&lt;br /&gt;
|Задает TCP/IP порты по которым сервер будет слушать подключения клиентов или Студии&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Connection&lt;br /&gt;
|TCPPassword&lt;br /&gt;
|'''Да'''&lt;br /&gt;
| -&lt;br /&gt;
|Задает пароль сервера при TCP/IP соединении&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Connection&lt;br /&gt;
|TCPTimeout&lt;br /&gt;
|Нет&lt;br /&gt;
| -&lt;br /&gt;
|Задает тайм-аут ожидания данных сервером до того, как сервер будет считать, что его связь с клиентом была разорвана&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Connection&lt;br /&gt;
|AllowIPRanges&lt;br /&gt;
|Нет&lt;br /&gt;
| -&lt;br /&gt;
|Задает диапазоны IP-адресов, подключения с которых будут разрешены&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Connection&lt;br /&gt;
|CompressionMode&lt;br /&gt;
|Нет&lt;br /&gt;
| -&lt;br /&gt;
|Задает форсированный режим сжатия пакетов при работе клиентов&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Connection&lt;br /&gt;
|CompressionRanges&lt;br /&gt;
|Нет&lt;br /&gt;
| -&lt;br /&gt;
|Задает диапазоны IP-адресов, при подключениях с которых сжатие пакетов будет форсировано&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Connection&lt;br /&gt;
|NoCompressionRanges&lt;br /&gt;
|Нет&lt;br /&gt;
| -&lt;br /&gt;
|Задает диапазоны IP-адресов, при подключениях с которых сжатие пакетов будет запрещено&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|DBase&lt;br /&gt;
|SingleUserModeOnUpdates&lt;br /&gt;
|Нет&lt;br /&gt;
|MS SQL, SQLite3, MySQL (MariaDB), PostgreSQL&lt;br /&gt;
|Задает режим, когда при обновлении (изменении) структуры базы данных, библиотека будет устанавливать эксклюзивный однопользовательский режим. PostgreSQL не имеет возможности эксклюзивного режима, поэтому, перед началом изменения структуры, при работе с PostgreSQL, библиотека будет ожидать, пока в базе не останется других пользователей.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|DBase&lt;br /&gt;
|EnsureUptimeBeforeStart&lt;br /&gt;
|Нет&lt;br /&gt;
| -&lt;br /&gt;
|Задает режим ожидания готовности СУБД компьютера сразу после его перезапуска.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|DBase&lt;br /&gt;
|WorkerDll&lt;br /&gt;
|'''Да'''&lt;br /&gt;
| -&lt;br /&gt;
|Задает относительный или абсолютный путь к библиотеке, которая будет создавать подключения к базе данных&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|DBase&lt;br /&gt;
|ADOProvider&lt;br /&gt;
|Нет&lt;br /&gt;
|MS SQL, подключения по ADO&lt;br /&gt;
|Задает наименование поставщика ADO&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|DBase&lt;br /&gt;
|ODBCConnectionString&lt;br /&gt;
|Нет&lt;br /&gt;
|MySQL (MariaDB), PostgreSQL, подключения по ODBC&lt;br /&gt;
|Задает полную строку подключения к ODBC драйверу&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|DBase&lt;br /&gt;
|ServerAddress&lt;br /&gt;
|'''Да'''&lt;br /&gt;
|MS SQL, MySQL (MariaDB), PostgreSQL&lt;br /&gt;
|Задает адрес (или наименование машины) и наименование типа сервера (в режиме ADO), если это необходимо&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|DBase&lt;br /&gt;
|DatabaseName&lt;br /&gt;
|'''Да'''&lt;br /&gt;
|MS SQL, MySQL (MariaDB), PostgreSQL&lt;br /&gt;
|Задает наименование базы данных, с которой будет происходить работа&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|DBase&lt;br /&gt;
|TempDatabaseName&lt;br /&gt;
|Нет&lt;br /&gt;
|MySQL (MariaDB), PostgreSQL&lt;br /&gt;
|Задает наименование базы данных, используемой для хранения таблиц функций [[Временная таблица базы данных|временных таблиц базы данных]]. Так как в PostgreSQL невозможна адресация разных баз данных в одном запросе, вместо базы данных, будет создана другая схема (''Schema'') с указанным именем.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|DBase&lt;br /&gt;
|ServerLogin&lt;br /&gt;
|'''Да'''&lt;br /&gt;
|MS SQL, MySQL (MariaDB), PostgreSQL&lt;br /&gt;
|Задает имя пользователя для подключения к СУБД и базе данных&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|DBase&lt;br /&gt;
|ServerPassword&lt;br /&gt;
|'''Да'''&lt;br /&gt;
|MS SQL, MySQL (MariaDB), PostgreSQL&lt;br /&gt;
|Задает пароль пользователя для подключения к СУБД&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|DBase&lt;br /&gt;
|QueryTimeout&lt;br /&gt;
|Нет&lt;br /&gt;
|MS SQL, SQLite3, MySQL (MariaDB), PostgreSQL&lt;br /&gt;
|Задает максимальное время исполнения запроса в СУБД в миллисекундах&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|DBase&lt;br /&gt;
|LockTimeout&lt;br /&gt;
|Нет&lt;br /&gt;
|PostgreSQL, SQLite3&lt;br /&gt;
|Задает максимальное время ожидания блокировки таблицы в СУБД в миллисекундах&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|DBase&lt;br /&gt;
|FTS_configuration&lt;br /&gt;
|Нет&lt;br /&gt;
|PostgreSQL&lt;br /&gt;
|Задает конфигурацию (язык) полнотекстового поиска&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|DBase&lt;br /&gt;
|SQLiteDll&lt;br /&gt;
|'''Да'''&lt;br /&gt;
|SQLite3&lt;br /&gt;
|Задает относительный или абсолютный путь к библиотеке SQLite3, которая будет выполнять функции СУБД&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|DBase&lt;br /&gt;
|SQLiteCacheSize&lt;br /&gt;
|Нет&lt;br /&gt;
|SQLite3&lt;br /&gt;
|Задает количество памяти, выделяемой под буфер таблиц при работе SQlite3&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|DBase&lt;br /&gt;
|SQLiteHeapLimit&lt;br /&gt;
|Нет&lt;br /&gt;
|SQLite3&lt;br /&gt;
|Задает ограничение на полное использование памяти библиотекой SQLite&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|DBase&lt;br /&gt;
|SQLiteCleanFloats&lt;br /&gt;
|Нет&lt;br /&gt;
|SQLite3&lt;br /&gt;
|Задает режим граничной очистки (округления) вещественных чисел, получаемых от SQLite&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|DBase&lt;br /&gt;
|SQLiteDatabaseCollationPage&lt;br /&gt;
|Нет&lt;br /&gt;
|SQLite3&lt;br /&gt;
|Задает кодовую страницу, которая будет использоваться при перекодировании текста из UTF-8 в ANSI&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|DBase&lt;br /&gt;
|DatabaseFile&lt;br /&gt;
|'''Да'''&lt;br /&gt;
|SQLite3&lt;br /&gt;
|Задает путь и имя файла базы данных SQLite&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|DBase&lt;br /&gt;
|SQLiteTempDBFile&lt;br /&gt;
|Нет&lt;br /&gt;
|SQLite3&lt;br /&gt;
|Задает путь и имя файла базы данных, который будет использоваться для работы с функциями [[Временная таблица базы данных|временных таблиц]]&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|DBase&lt;br /&gt;
|SQLiteSynchronousWriting&lt;br /&gt;
|Нет&lt;br /&gt;
|SQLite3&lt;br /&gt;
|Задает режим буферизации записи данных на диск SQLite&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|DBase&lt;br /&gt;
|KeepTraceLogs&lt;br /&gt;
|Нет&lt;br /&gt;
|SQLite3, MySQL (MariaDB)&lt;br /&gt;
|Задает режим, когда все запросы к базе данных и время их исполнения будут также фиксироваться в особом логе сервера&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|DBase&lt;br /&gt;
|JournalMode&lt;br /&gt;
|Нет&lt;br /&gt;
|SQLite3&lt;br /&gt;
|Задает режим записи в базу данных SQLite&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|DBase&lt;br /&gt;
|MySQL_sql_mode&lt;br /&gt;
|Нет&lt;br /&gt;
|MySQL (MariaDB)&lt;br /&gt;
|Задает умолчания для инициализации переменной sql_mode СУБД MariaDB и MySQL&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|DBase&lt;br /&gt;
|IsMariaDB&lt;br /&gt;
|Нет&lt;br /&gt;
|MySQL (MariaDB)&lt;br /&gt;
|Задает, к какой из СУБД будет осуществлять соединение сервер&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|EventLogs&lt;br /&gt;
|LogsMode&lt;br /&gt;
|Нет&lt;br /&gt;
| -&lt;br /&gt;
|Задает режим ведения таблицы журнала регистрации событий&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|EventLogs&lt;br /&gt;
|ODBCLogsConnectionString&lt;br /&gt;
|Нет&lt;br /&gt;
|MySQL (MariaDB), PostgreSQL, подключения по ODBC &lt;br /&gt;
|Задает полную строку подключения к ODBC драйверу для базы данных, в которой будут храниться логи&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|EventLogs&lt;br /&gt;
|LogsServerAddress&lt;br /&gt;
|'''Да''', если логи ведутся в отдельной базе&lt;br /&gt;
|MS SQL, MySQL (MariaDB), PostgreSQL&lt;br /&gt;
|Задает адрес (или наименование машины) и наименование типа сервера (в режиме ADO), для хранения базы данных журнала регистрации событий&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|EventLogs&lt;br /&gt;
|LogsDatabaseName&lt;br /&gt;
|'''Да''', если логи ведутся в отдельной базе&lt;br /&gt;
|MS SQL, MySQL (MariaDB), PostgreSQL&lt;br /&gt;
|Задает наименование базы данных журнала регистрации событий&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|EventLogs&lt;br /&gt;
|LogsServerLogin&lt;br /&gt;
|'''Да''', если логи ведутся в отдельной базе&lt;br /&gt;
|MS SQL, MySQL (MariaDB), PostgreSQL&lt;br /&gt;
|Задает имя пользователя для подключения к СУБД и базе данных журнала регистрации событий.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|EventLogs&lt;br /&gt;
|LogsServerPassword &lt;br /&gt;
|'''Да''', если логи ведутся в отдельной базе&lt;br /&gt;
|MS SQL, MySQL (MariaDB), PostgreSQL&lt;br /&gt;
|Задает пароль пользователя для подключения к СУБД и базе данных журнала регистрации событий&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|EventLogs&lt;br /&gt;
|LogsDatabaseFile&lt;br /&gt;
|'''Да''', если логи ведутся в отдельной базе&lt;br /&gt;
|SQLite3&lt;br /&gt;
|Задает путь и имя файла базы данных журнала регистрации событий SQLite&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|EventLogs&lt;br /&gt;
|UserNameFieldSize&lt;br /&gt;
|Нет&lt;br /&gt;
|MS SQL, SQLite3, MySQL (MariaDB), PostgreSQL&lt;br /&gt;
|Задает размер в символах поля UserName таблицы журнала регистрации событий&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|EventLogs&lt;br /&gt;
|CommentFieldSize&lt;br /&gt;
|Нет&lt;br /&gt;
|MS SQL, SQLite3, MySQL (MariaDB), PostgreSQL&lt;br /&gt;
|Задает размер в символах поля Comment таблицы журнала регистрации событий&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|BackupServer&lt;br /&gt;
|BackupToolCommandline&lt;br /&gt;
|Нет&lt;br /&gt;
|MySQL (MariaDB), PostgreSQL&lt;br /&gt;
|Задает имя исполняемого файла программы, используемой для инициации резервного копирования&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|BackupServer\&amp;lt;Имя задачи&amp;gt;&lt;br /&gt;
|TaskName&lt;br /&gt;
|Нет ('''Да''', для задач резервного копирования)&lt;br /&gt;
|MS SQL, SQLite3, MySQL (MariaDB), PostgreSQL&lt;br /&gt;
|Используется для задания короткого уникального имени протокола копирования&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|BackupServer\&amp;lt;Имя задачи&amp;gt;&lt;br /&gt;
|ExcludedPaths&lt;br /&gt;
|Нет&lt;br /&gt;
|MS SQL, SQLite3, MySQL (MariaDB), PostgreSQL&lt;br /&gt;
|Хранит список путей каталога данных проекта, которые необходимо исключить из резервного копирования&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|BackupServer\&amp;lt;Имя задачи&amp;gt;&lt;br /&gt;
|BackupTo&lt;br /&gt;
|Нет ('''Да''', для задач резервного копирования)&lt;br /&gt;
|MS SQL, SQLite3, MySQL (MariaDB), PostgreSQL&lt;br /&gt;
|Задает путь в который будет выложен результат резервного копирования (копия).&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|BackupServer\&amp;lt;Имя задачи&amp;gt;&lt;br /&gt;
|TempFolder&lt;br /&gt;
|Нет&lt;br /&gt;
|MS SQL, SQLite3, MySQL (MariaDB), PostgreSQL&lt;br /&gt;
|Задает путь к папке с временными файлами&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|BackupServer\&amp;lt;Имя задачи&amp;gt;&lt;br /&gt;
|MaximalBackupsCount&lt;br /&gt;
|Нет&lt;br /&gt;
|MS SQL, SQLite3, MySQL (MariaDB), PostgreSQL&lt;br /&gt;
|Задает максимальное количество старых резервных копий, которые будут храниться в папке результата&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|BackupServer\&amp;lt;Имя задачи&amp;gt;&lt;br /&gt;
|Schedule&lt;br /&gt;
|Нет&lt;br /&gt;
|MS SQL, SQLite3, MySQL (MariaDB), PostgreSQL&lt;br /&gt;
|Задает расписание, руководствуясь которым, резервное копирование будет происходить автоматически&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|BackupServer\&amp;lt;Имя задачи&amp;gt;&lt;br /&gt;
|Archiver&lt;br /&gt;
|Нет&lt;br /&gt;
|MS SQL, SQLite3, MySQL (MariaDB), PostgreSQL&lt;br /&gt;
|Задает строку с шаблоном исполнения архиватора&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|BackupServer\&amp;lt;Имя задачи&amp;gt;&lt;br /&gt;
|ArchiverExtension&lt;br /&gt;
|Нет&lt;br /&gt;
|MS SQL, SQLite3, MySQL (MariaDB), PostgreSQL&lt;br /&gt;
|Задает расширение файла архиватора&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|BackupServer\&amp;lt;Имя задачи&amp;gt;&lt;br /&gt;
|ShrinkLogs&lt;br /&gt;
|Нет&lt;br /&gt;
|MS SQL&lt;br /&gt;
|Задает режим, когда после выполнения резервного копирования базы данных, сервер выполнит процедуру резервного копирования и сжатия логов базы данных&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|ProxyServer&lt;br /&gt;
|AdministratorProxy, PowerUserProxy, UserProxy&lt;br /&gt;
|Нет&lt;br /&gt;
| -&lt;br /&gt;
|Разрешает диапазоны адресов и портов (в разрезе групп пользователей), для которых можно использовать прокси соединение через сервер (см. функцию [[IPConnection.UseProxy|UseProxy]]).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Файлы настроек, располагающиеся в папке LocalConfig папки проекта ==&lt;br /&gt;
&lt;br /&gt;
Кроме основного файла инициализации, сервер также использует установки из файлов инициализации, хранящихся в папке ''LocalConfig'' папки файлов проекта. В отличие от основного файла инициализации, установки в этих файлах обычно связаны с файлами проекта, это настройки доступа пользователей в систему и настройки проекта, используемые клиентами. Ниже рассматриваются некоторые из этих файлов:&lt;br /&gt;
* Файл '''loginoptions.ini''' используется для настроек подключения клиентов к системе. Он представляет собой файл инициализации описанного выше формата (в формате ANSI или UTF-16). В файле присутствуют следующие ветки:&lt;br /&gt;
** Ветка '''Common''' используется для задания общих установок входа.&lt;br /&gt;
*** Переменная '''StoreHashesOnly''' позволяет включать режим, когда пароли, введенные пользователями, не сохраняются в файле учетных записей, вместо паролей будут сохраняться хэши MD5. Это позволяет не открывать пароли пользователей администраторам системы. По умолчанию эта переменная равна нулю.&lt;br /&gt;
*** Переменные, связанные с формированием минимальной и максимальной длины паролей, а также их уровнем сложности также планируются для использования в данной ветке.&lt;br /&gt;
** Ветка '''NTLM''' задает режим использования аутентификации с помощью NTLM для регистрации пользователей. Не наличия такой ветки, новые учетные записи пользователей могут быть введены только с помощью редактора учетных записей в клиенте или непосредственно с помощью текстового редактора в файл ''usercreds.ini''.&lt;br /&gt;
*** Переменная '''UseNTLM''' задает режим, когда NTLM будет использован (значение должно быть равно 1). По умолчанию значение переменной равно нулю.&lt;br /&gt;
*** Переменная '''NTLMDomain''' задает домен или имя компьютера, к которому будут переадресовываться запросы по аутентификации пользователей. Если значение не задано, при запуске, сервер попытается найти это значение автоматически, и будет использовать имя домена, в который включен компьютер на котором быть запущен сервер.&lt;br /&gt;
*** Переменная '''UsersGroups''' задает группы пользователей (как они заданы в панели управления компьютера или в ''Active Directory'' домена), имеющих доступ к серверу. Группы пользователей должны перечисляться через запятые. Если эта переменная не задана, любые пользователи, имеющие учетную запись в домене, или учетные запись в файле ''usercreds.ini'' (некоторые учетные записи могут быть не связаны с NTLM и заданы вручную из редактора учетных записей в клиенте). будут иметь возможность работать на сервере. Если переменная задан, только пользователи, принадлежащие указанным группам (или группам последующих двух переменных) смогут регистрироваться на сервере. Рекомендуется задавать эту переменную, так как это повышает безопасность в сети.&lt;br /&gt;
*** Переменная '''PowerUsersGroups''' задает группы пользователей (как они заданы в панели управления компьютера или в ''Active Directory'' домена), которые будут обладать правами ограниченных администраторов (см. [[Общая информация о сервере базы данных]]). Группы пользователей должны перечисляться через запятые. &lt;br /&gt;
*** Переменная '''AdministratorsGroups''' задает группы пользователей (как они заданы в панели управления компьютера или в ''Active Directory'' домена), которые будут обладать полными правами администраторов (см. [[Общая информация о сервере базы данных]]). Группы пользователей должны перечисляться через запятые. Эту переменную рекомендуется задавать, если администраторов достаточно много, если же в программе работает две один-два администратора, безопаснее, установить свойства их учетных записей, как административные и отвязать их от аутентификации NTLM.&lt;br /&gt;
* Файл '''usercreds.ini''' создается и ведется сервером автоматически, редактирование его с помощью текстового редактора возможно, но не рекомендуется. При редактировании файла с помощью редактора, сервер должен быть выключен. Файл обычно создается в формате UTF-16 с BOM и представляет собой стандартный файл инициализации, описанный выше. При редактировании учетных записей в визуальном клиенте (см. [[Общая информация о консольном и визуальном клиентах]]), сервер получает изменения и сохраняется их в этом файле. Файл также хранит дату и время первого и последнего входа каждого пользователя, поэтому, файл будет обновляться достаточно часто. Наряду с оригинальной версией файла, сервер хранит его предыдущую версию '''usercreds.bak''', которая может пригодиться, если оригинальный файл был испорчен из-за сбоя или по каким-то другим причинам.&lt;br /&gt;
* Файл '''dbaseLocal.ini''' обычно создается администратором вручную с помощью текстового редактора и может содержать те же переменные, что и файл ''dbase.ini'', хранящийся в корневой папке файлов проекта и создаваемый непосредственно в Студии. Любая переменная локального файла заменяет значение файла, пришедшего с обменом из Студии. Это актуально и может использоваться для клиентов, если необходимо задать для текущей базы данных другое название, отображаемое в заголовке программы и в диалоге входа пользователя, чтобы пользователи не перепутали разные базы данных. Для редактирования этого файла из Студии см. [[Студия/Установки проекта|Установки проекта]]. Локальный файл установок базы данных может содержать следующие переменные:&lt;br /&gt;
** '''Name''' -- позволяет задать наименование проекта (в данном случае, может использоваться для задания наименования локальной базы данных).&lt;br /&gt;
** '''BuildNumber''', '''VersionName''' -- задает программные свойства проекта, доступные как из диалогов клиента, так и программно.&lt;br /&gt;
** '''ExcludedFolders''' -- задает папки, исключенные из обмена при получении обновлений из Студии.&lt;br /&gt;
&lt;br /&gt;
== Резервное копирование с помощью сервера базы данных и восстановление резервной копии базы данных ==&lt;br /&gt;
Резервное копирование важный процесс, помогающий избежать утери базы данных, которая могла бы обернуться неделями работы и финансовыми потерями для предприятия. При использовании системы рекомендуется проводить регулярное резервное копирование на дисковый накопитель, физически отличающийся от накопителя, на котором находится база данных. Кроме того, желательно осуществлять резервное копирование на другое устройство в сети. Даже если в Вашей организации используется raid массив или другие защитные технологии, резервное копирование необходимо осуществлять на регулярной основе. См. также статью [[Общая информация о сервере базы данных]].&lt;br /&gt;
&lt;br /&gt;
Резервное копирование можно осуществлять из командной строки, либо доверить эту работу серверу, настроив в его файле инициализации автоматическое резервное копирование (см. выше). Настройка резервного копирования с помощью сервера базы данных рекомендуется. Резервное копирование с помощью возможностей сервера базы данных обладает следующими возможностями: &lt;br /&gt;
* В файле инициализации можно задать произвольное количество задач для резервного копирования, с разным расписанием или для программного запуска. Каждая задача может осуществлять копию в свой каталог резервного копирования.&lt;br /&gt;
* Сервер датирует копии и может хранить определенное количество, удаляя более старые копии по мере появления новых.&lt;br /&gt;
* Сервер может осуществлять резервное копирование на сетевые диски. '''Внимание''': в системе Windows при работе сервера базы данных в виде сервиса системы (режим по умолчанию) для доступа сервера на сетевые диски, необходимо настроить вход сервиса с учетной записью отличной от &amp;quot;Локальной системы&amp;quot;, так как последняя не будет иметь доступ к сети.&lt;br /&gt;
* Сервер следит за корректностью и полнотой резервной копии, если резервное копирование было прервано в результате внезапного выключения сервера или отключения его от сети, в будущем, неверная копия будет автоматически удалена из набора резервных копий.&lt;br /&gt;
* В резервную копию попадает не только копия базы данных, но и все файлы проекта сервера, а также отдельная копия базы данных журнала регистрации событий, если последний хранится в базе данных, отличной от основной базы данных.&lt;br /&gt;
* Сервер может автоматически архивировать копии базы данных, для их более компактного размещения в каталоге резервных копий в виде одного файла на резервную копию.&lt;br /&gt;
* Для СУБД типа MySQL и MariaDB, которые создают резервную копию базы данных как множество файлов и каталогов, сервер автоматически объединяет файлы копии базы данных в один файл в формате ''tar'' без использования компрессии. &lt;br /&gt;
* Используя возможности сервера, администратор может не опасаться, что сервер не сможет запуститься из-за того, что во время обновления проекта из Студии и перезапуска сервера, он не смог войти в эксклюзивный режим базы данных, так как в этот момент работала внешняя программа резервного копирования. Тем самым исключается необходимость в дополнительных действиях на сервере и повторной инициации обновления.&lt;br /&gt;
&lt;br /&gt;
Инициировать резервное копирование с помощью сервера базы данных можно тремя способами:&lt;br /&gt;
* Сервер инициирует процесс копирования по расписанию заданному в установках задачи резервного копирования (см. выше).&lt;br /&gt;
* С помощью функций [[InitiateBackupCreation]] и [[QueryBackupProgress]] можно запускать задачи резервного копирования программно и следить за их выполнением.&lt;br /&gt;
* С помощью командной строки исполняемого файла сервера (процесс сервера при этом должен быть запущен) в формате &amp;lt;code&amp;gt;sfsrv.exe &amp;quot;BACKUP &amp;lt;Имя задачи резервного копирования&amp;gt;&amp;quot;&amp;lt;/code&amp;gt; можно инициировать резервное копирование и отследить его выполнение (см. статью [[Ключи запуска сервера из командной строки]]).&lt;br /&gt;
&lt;br /&gt;
Восстановление резервной копии всегда зависит от конкретного вида СУБД. Обычно алгоритм восстановления резервной копии следующий:&lt;br /&gt;
* Остановка сервера базы данных.&lt;br /&gt;
* Удаление каталога файлов проекта.&lt;br /&gt;
* Копирование каталога файлов проекта из резервной копии.&lt;br /&gt;
* Удаление или отключение текущей базы данных.&lt;br /&gt;
* Восстановление базы данных из резервной копии базы данных. Для разных СУБД, этот процесс может несколько отличаться:&lt;br /&gt;
** Для MS SQL резервная копия может быть восстановлена с помощью графического интерфейса СУБД.&lt;br /&gt;
** Для SQLite3 резервная копия представляет собой рабочий файл базы данных, который можно скопировать в рабочий каталог.&lt;br /&gt;
** Для PostgreSQL резервная копия по умолчанию представляет собой бинарный сжатый файл, который можно восстановить в рабочую базу данных с помощью утилиты '''pg_restore'''.&lt;br /&gt;
** Для MySQL или MariaDB см. статью ниже.&lt;br /&gt;
* Запуск сервера.&lt;br /&gt;
&lt;br /&gt;
=== Резервное копирование и восстановление базы данных для СУБД MariaDB и MySQL ===&lt;br /&gt;
В отличие от MS SQL, где базу данных можно восстановить из резервной копии с помощью графического интерфейса или SQLite3, который создает резервную копию в виде рабочего файла данных, который можно использовать как базу данных сразу после резервного копирования, восстановление базы данных MariaDB и MySQL может быть связано с определенными сложностями.&lt;br /&gt;
&lt;br /&gt;
Для осуществлении резервного копирования ''online'' (т.е., при работающих пользователях), необходимо использовать утилиту '''mariabackup''', входящую в состав файлов установки СУБД MariaDB, для MySQL можно использовать совместимую утилиту '''Xtrabackup''', либо потенциально более медленную '''mysqldump'''.&lt;br /&gt;
&lt;br /&gt;
По умолчанию подразумевается использование утилит ''mariabackup'' или ''Xtrabackup'', а не утилиты ''mysqldump'', так как последняя делает логическую текстовую резервную копию, создание которой может занимать более продолжительное время. В процессе резервного копирования блокируются таблицы и увеличивается активностью диска и длительный процесс копирования для больших баз данных может очень негативно сказаться на работе пользователей. Обычно простое копирование файлов (''mariabackup'') должно осуществляться быстрее, чем создание файлов путем получения информации из базы данных (''mysqldump''), однако, дамп, полученный с помощью ''mysqldump'' более компактный по размеру (часто в 2.5-3 раза), поэтому, для определенных серверов ''mysqldump'' может работать быстрее и меньше увеличивать активность диска.&lt;br /&gt;
&lt;br /&gt;
При использовании утилиты ''mysqldump'' вместо ''mariabackup'', в переменной ''BackupToolCommandline'' можно указать следующую строку: &amp;lt;code&amp;gt;[Путь к бинарным файлам СУБД\]mysqldump --allow-keywords --complete-insert --hex-blob --host=%3% --user=%4% --password=%5% --port=3306 --single-transaction --databases %6%&amp;lt;/code&amp;gt; (макрос '''%6%''' тут используется для указания на список баз данных без базы данных ''mysql'', которая не требуется при таком резервном копировании). Так как утилита ''mysqldump'' выгружает дамп в стандартный поток вывода (stdout) и перенаправить его в файл при запуске процесса из приложения используя только командную строку невозможно, сервер будет определять необходимость в получении данных из стандартного потока по наименованию утилиты. Если используется другая утилита с выгрузкой в стандартный поток, имя которой не соответствует ''mysqldump'', необходимо запускать ее через какую-либо программу, которая сама перенаправит стандартный поток в файл (макрос ''%1%'').&lt;br /&gt;
&lt;br /&gt;
Дальнейшая информация параграфа относится только к ''mariabackup''.&lt;br /&gt;
&lt;br /&gt;
Резервное копирование рекомендуется осуществлять строго возможностями сервера базы данных (по причинам сложности и капризности резервного копирования данных СУБД), если все-таки оно выполняется сторонней утилитой, для его осуществления с помощью ''mariabackup'' должна используется командная строка &amp;lt;code&amp;gt;mariabackup --backup --target-dir=&amp;lt;Папка, в которую происходит копирование&amp;gt; --databases=&amp;quot;mysql &amp;lt;Имя базы данных&amp;gt;&amp;quot; --host=&amp;lt;Адрес сервера&amp;gt; --port=&amp;lt;Порт сервера&amp;gt; --user=&amp;lt;Имя администратора сервера&amp;gt; --password=&amp;lt;Пароль администратора&amp;gt; --no-defaults&amp;lt;/code&amp;gt;. Обратите внимание: папка резервного копирования должна иметь обратные косые знаки '''/''' вместо прямых, даже если рабочей средой является система Windows (к примеру, &amp;lt;code&amp;gt;G:/Temp/Backup/&amp;lt;/code&amp;gt;), папка также не должна содержать специальных символов длинного пути (''\\?\'') или сетевого пути (''\\''). Также обратите внимание: имя базы данных всегда указывается в нижнем регистре, кроме имени базы данных указывается также база данных ''mysql'', которая хранит информацию по всем метаданным СУБД, иначе резервную копию не удастся восстановить простым способом. Если резервное копирование осуществляется средствами сервера базы данных, командную строку и расположение утилиты он подберет автоматически.&lt;br /&gt;
&lt;br /&gt;
Перед восстановлением резервной копии базы данных, необходимо принять во внимания следующие ограничения и особенности процесса восстановления:&lt;br /&gt;
* При восстановлении все другие базы данных на сервере СУБД будут удалены. После успешного процесса восстановления в СУБД останутся только две рабочие базы данных: ''mysql'' (сервисная база данных) и восстановленная база данных. Это может стать проблемой в случае, если в СУБД используются другие базы данных. Обойти это ограничение не так просто. Но так как восстановление резервной копии -- процесс очень редкий и связанный с катастрофическими событиями, можно, к примеру, восстановить базу данных на другой машине с СУБД, сделать ее резервную копию с помощью утилиты ''mysqldump'', затем восстановить ее в рабочую копию СУБД из полученного текстового дампа. В Интернете есть информация по другим способам восстановления.&lt;br /&gt;
* При описанном здесь процессе восстановления невозможно изменить имя восстанавливаемой базы данных. Восстановленная база данных всегда будет иметь такое же имя, как и оригинальная, для которой создавалась резервная копия.&lt;br /&gt;
* Восстанавливать базу данных необходимо той же версией СУБД, которая создавала резервную копию.&lt;br /&gt;
&lt;br /&gt;
Общий процесс восстановления резервной копии описан выше в параграфе о резервном копировании, здесь описывается обычный и самый простой процесс восстановления базы данных в СУБД из резервной копии, созданной утилитой ''mariabackup'':&lt;br /&gt;
* Остановите СУБД.&lt;br /&gt;
* Удалите или переместите папку ''Data'', в которой хранятся все базы данных СУБД. Создайте снова эту папку, с тем, чтобы она не содержала никаких файлов. Сохраните файл my.ini из удаляемого каталога (только для MariaDB, MySQL хранит этот файл в другой папке). Для Windows папка ''Data'' для MariaDB обычно находится в каталоге установочных файлов MariaDB (в ''Program Files''), для MySQL в папке ''ProgramData\MySQL\...''.&lt;br /&gt;
* Распакуйте ''tar'' архив, в котором содержатся файлы резервной копии базы данных в формате СУБД. Скажем, содержимое файла было распаковано в папку ''c:\backup\''.&lt;br /&gt;
* В каталоге с бинарными файлами СУБД выполните следующую команду &amp;lt;code&amp;gt;mariabackup --prepare --target-dir=&amp;quot;c:/backup/&amp;quot;&amp;lt;/code&amp;gt; (здесь указан путь, куда мы распаковали ''tar'' архив). Этот шаг позволяет подготовить резервную копию к восстановлению.&lt;br /&gt;
* В каталоге с бинарными файлами СУБД выполните следующую команду &amp;lt;code&amp;gt;mariabackup --copy-back --target-dir=&amp;quot;c:/backup/&amp;quot;&amp;lt;/code&amp;gt; (здесь указан путь, куда мы распаковали ''tar'' архив). Этот шаг выполняет копирование файлов восстановления в каталог ''Data'' СУБД.&lt;br /&gt;
* Добавьте сохраненный файл my.ini в заполненный каталог ''Data'' (только для MariaDB).&lt;br /&gt;
* Добавьте разрешения полного доступа для всех пользователей ко всем файлам и подкаталогам каталога ''Data''. '''Важно''': не пропускайте этот шаг, СУБД активно использует системные разрешения и не будет работать корректно, если сервису не дать разрешения на запись к файлам восстановленного каталога с данными ''Data''. Если Вы знаете, под каким пользователем запускается сервис СУБД, достаточно добавить разрешения только для учетной записи, под которой он работает.&lt;br /&gt;
* Запустите СУБД и сервер базы данных. Резервная копия успешно восстановлена.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При восстановлении резервной копии, особенно если это делается в первый раз, можно испортить установку MariaDB и MySQL. Ниже даются возможные случаи, когда СУБД становится неработоспособной и способы исправления аварийной ситуации:&lt;br /&gt;
* '''Q''': Сервис СУБД не запускается, однако, СУБД запускается из командной строки. '''A''': Вероятнее всего, сервис не может получить доступ записи в каталог ''data'' СУБД. Для исправления, необходимо изменить разрешения на каталоге ''Data'' и всех его подкаталогах и файлах, к примеру, добавив полный доступ всем пользователям.&lt;br /&gt;
* '''Q''': СУБД запускается, но восстановленные таблицы базы данных недоступны (ошибка: &amp;quot;таблица не существует на данном сервере&amp;quot;). '''A''': Сервисная база данных ''mysql'', в которой содержится информация по метаданным базы данных, не была восстановлена вместе с базой данных. Необходимо восстановить резервную копию еще раз. Если в резервной копии не содержится копии БД ''mysql'', восстановление приобретает нетривиальных характер, и его обсуждение выходит за пределы этой документации. В Интернете есть информация, позволяющая выполнить такую задачу.&lt;br /&gt;
* '''Q''': Восстановленная или рабочая база данных содержит повреждения или ошибки, что не позволяет удалить ее из СУБД. '''A''': Для сброса СУБД и удаления всех ее баз данных, необходимо остановить СУБД, удалить каталог ''Data'' и запустить утилиту '''mysql_install_db''', находящуюся в каталоге бинарных файлов СУБД. Данная утилита создаст и заполнит каталог ''Data'' заново и позволит избежать необходимости переустановки СУБД.&lt;br /&gt;
&lt;br /&gt;
Для дополнительной информации, см. внешнюю статью [https://mariadb.com/kb/en/full-backup-and-restore-with-mariabackup/ full-backup-and-restore-with-mariabackup] на mariadb.com.&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>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</id>
		<title>Проект Розница</title>
		<link rel="alternate" type="text/html" href="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"/>
		<updated>2026-04-01T10:01:28Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{HeadLinks|&lt;br /&gt;
* [[Main_Page|Начальная страница]]&lt;br /&gt;
* [[Проект Розница|Общее описание розницы]]&lt;br /&gt;
* [[Установка проекта Розница|Пошаговая установка проекта розница]]}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
Проект &amp;quot;розница&amp;quot; является абсолютно '''бесплатной''' альтернативой коммерческим кассовым и учетным системам для розничной торговли. Проект может использоваться как на рабочем месте кассира, так и как учетная программа для розничной компании. Эта статья пытается дать исчерпывающую информацию о том, какими ограничениями обладает данная версия, что она уже умеет и какие предполагаются дальнейшие шаги по ее развитию, а также о том, каким образом начать с ней работать.&lt;br /&gt;
&lt;br /&gt;
Проект появился для того, чтобы каким-то образом облегчить положение мелких розничных точек на рынке. Существующие программы слишком сложные в настройке, не обладают достаточной гибкостью, медленные в работе или заставляют торговые точки платить немалые деньги, в условиях, когда прибыль небольших магазинов постоянно сокращается из-за увеличения конкуренции с федеральными сетями. Мы представляем бесплатное решение, которое не только не требует какого-либо лицензирования, но и может быть модифицировано Вашими специалистами или сторонними организациями. В программе не используется реклама, нет ограничений по времени, скрытых платежей и пр. Если Ваша модель кассового или периферийного оборудования пока не поддерживается текстами драйверов проекта, Вы можете оставить заявку для создания драйвера (на github) или создать его самостоятельно. Данный Wiki-портал содержит описание всех программных возможностей системы, на которой работает проект, все статьи, связанные с описанием программных функций, имеют примеры. Любой человек, немного разбирающийся в программировании, сможет модифицировать текст проекта для изменения или увеличения функциональности. Также для пошаговой информации по установке проекта в магазине, смотрите статью '''[[Установка проекта Розница]]'''.&lt;br /&gt;
&lt;br /&gt;
==== Лицензионное соглашение на использование проекта ====&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы скачивать, устанавливать, работать с проектом или модифицировать его с помощью исполняемых файлов проекта, Вам необходимо согласиться с лицензионным соглашением на использование исполняемых файлов проекта. Соглашение имеет определенные ограничения в использовании, для того, чтобы проект мог применяться только небольшими и средними организациями. Соглашение не относится к исходным текстам проекта, распространяемым на сервере github (или подобном), тексты проекта могут быть использованы в любых целях без ограничения. &lt;br /&gt;
&lt;br /&gt;
* [http://{{SERVERNAME}}/download/EULASOFT.txt &amp;lt;big&amp;gt;'''Полный текст соглашения для использования исполняемых файлов (программного обеспечения) проекта.'''&amp;lt;/big&amp;gt;]. Исполняемые файлы доступны для скачивания с данного портала (см. ниже ссылки для скачивания).&lt;br /&gt;
* [http://{{SERVERNAME}}/download/EULASRC.txt &amp;lt;big&amp;gt;'''Полный текст соглашения для использования исходных текстов проекта.'''&amp;lt;/big&amp;gt;]. Свежую версию исходных текстов проекта можно скачать со страницы проекта на [https://github.com/sfsys132/project-free-Russian-retail github].&lt;br /&gt;
&lt;br /&gt;
Ниже дается краткий свод ограничений соглашения на использование исполняемых файлов проекта (для понимания общей картины):&lt;br /&gt;
* Соглашение запрещает скачивать '''исполняемые файлы''', устанавливать их, или использовать их в коммерческих целях (в работе коммерческой организации) в случаях:&lt;br /&gt;
** Если проект будет использоваться в любой другой организации, кроме торговой розничной организации. Использование проекта для случаев, когда точка продает только через сеть Интернет, также не допускается.&lt;br /&gt;
** Если в розничной организации, использующей проект, зарегистрировано более десяти торговых точек на одном юридическом лице, за исключением юридических лиц, которые получили на это соответствующее разрешение у организации, распространяющей проект. Таким юридическим лицам будут предоставлены другие (коммерческие) исполняемые файлы системы.&lt;br /&gt;
** Если десять или более розничных точек используют одну контролирующую организацию или связанную группу организаций, им необходимо получить дополнительное разрешение у организации, распространяющей проект. Таким организациям будут предоставлены другие (коммерческие) исполняемые файлы системы.&lt;br /&gt;
** Организациям, производящим внедрение и обслуживание проекта, на более чем десяти торговых точках с целью продвижения своего продукта в эти торговые точки, необходимо получить дополнительное разрешение у организации, распространяющей проект. Таким организациям будут предоставлены другие (коммерческие) исполняемые файлы системы.&lt;br /&gt;
* Однако соглашение не запрещает использовать любые части '''исходных текстов проекта''', находящихся на сервере github (или подобном), в коммерческих или других целях, в других системах программного обеспечения или в системе SunFlurry.&lt;br /&gt;
* Организация, распространяющая проект, может в любой момент без предварительного оповещения изменить текст лицензионного соглашения, однако:&lt;br /&gt;
** Последняя версия исходных текстов проекта, распространяемая на сервере github (или подобном), а также любые исходные тексты, созданные сторонними разработчиками в рамках лицензионного соглашения до момента его изменения, ни при каких условиях не потеряют бесплатный статус.&lt;br /&gt;
** Последние версии исполняемых файлов, распространявшихся до момента изменения лицензионного соглашения, ни при каких условиях не потеряют бесплатный статус, эти старые версии можно будет использовать в рамках текста лицензионного соглашения до момента его изменения.&lt;br /&gt;
* Проект распространяется без какой-либо гарантии со стороны распространяющей организации (&amp;quot;как есть&amp;quot;). Организация не несет ответственности за возможный ущерб, причиненный программой, ее сбоями, возможностью или невозможностью ее использования (включая убытки и потерю информации).&lt;br /&gt;
&lt;br /&gt;
Если Вы не можете использовать проект, так как деятельность или величина Вашей организация не удовлетворяет условиям лицензионного соглашения, однако у Вас есть интерес к системе или какие-либо коммерческие предложения, вы можете связаться с нами с помощью электронной почты, используя следующий адрес: '''&amp;lt;nowiki&amp;gt;sf@sfs&amp;amp;#x79;s.ru&amp;lt;/nowiki&amp;gt;'''. Мы читаем всю почту, но можем задержаться с ответом из-за высокой загруженности. Если Вы не получили ответ в течение недели, возможно дежурный сотрудник находится в отпуске. Из-за большого количества спама, приходящего на почту, наш почтовый сервер использует спам-фильтры. Если наш сервер отвергает Ваше письмо, попробуйте отослать его с бесплатных почтовых серверов.&lt;br /&gt;
&lt;br /&gt;
==== Возможности проекта розница ====&lt;br /&gt;
&lt;br /&gt;
Бесплатный проект розница состоит серверной части, клиентской части и файлов проекта. &lt;br /&gt;
&lt;br /&gt;
Серверная часть хранит базу данных и обслуживает запросы к ней. Для одного магазина должна быть установлена одна серверная часть, даже если работа с базой данных будет происходить с нескольких машин одновременно. Некоммерческий проект розница использует '''x86''' '''SQLite3''' сервер ([[Общая информация о сервере базы данных#Доступные СУБД и особенности их использования|См. статью]]). Это ограничивает масштабируемость одной базы данных, и слишком большое количество пользователей может замедлить работу в ней. 32-битная версия сервера также накладывает некоторое ограничение на размер базы данных, так как слишком большие базы данных могут работать медленнее из-за невозможности использования буфера запросов больше предела в ~2Гб. Однако для розничных точек это не должно стать проблемой, так как базы данных в них обычно небольшие. Нужно добавить, что сама база данных не имеет никаких искусственных ограничений по размеру (максимальный размер определяется возможностями SQLite3). Для небольших магазинов, серверная часть обычно устанавливается на компьютер с кассовым оборудованием, где клиентская часть выступает как кассовый терминал.&lt;br /&gt;
&lt;br /&gt;
[[Общая информация о консольном и визуальном клиентах|Клиентская часть]] проекта розница использует '''x86''' бинарный файл. Клиентская часть может использоваться как кассовый терминал, так и как учетная система и может быть установлена на любое количество компьютеров для работы с одним сервером магазина. Возможности клиентской части определяются исходными текстами проекта, поэтому, они постоянно дополняются и изменяются. Любой человек, разбирающийся в программировании, может изменить текст проекта и добавить в него новые возможности. На момент написания статьи, проект умеет:&lt;br /&gt;
&lt;br /&gt;
* При использовании проекта, как учетной системы:&lt;br /&gt;
** Ведение любого количества юридических лиц и магазинов в одной базе.&lt;br /&gt;
** Анализы продаж и закупок, ABC, XYZ-анализы, анализы наценки и прибыли, прогнозирование закупки товаров.&lt;br /&gt;
** Система ценообразования и формирования цен, распечатка ценников.&lt;br /&gt;
** Ведение бухгалтерского учета, ручные проводки, ведение учета по основным средствам.&lt;br /&gt;
*** Книга покупок и книга продаж, книга доходов и расходов, бух. баланс и отчет по прибыли.&lt;br /&gt;
** Ведение финансового учета, ведение затрат, затраты по оплате и начислению.&lt;br /&gt;
*** Операционный капитал, отчет по прибылям и убыткам, маржинальная прибыль.&lt;br /&gt;
** Ведение и учет маркетинга поставщиков (начисление и закрытие скидок и т.д.).&lt;br /&gt;
** Ведение и анализы взаиморасчетов с поставщиками, платежная ведомость.&lt;br /&gt;
** Ведение кассовых и банковских остатков. Ведение подотчета.&lt;br /&gt;
** Ведение складских остатков в разрезе партий, марочный учет ЕГАИС и ГИС МТ.&lt;br /&gt;
** Обрезание, объединение и перенос базы данных.&lt;br /&gt;
** Обмен между базами данных, возможность выгрузки документов из периферийных баз данных в центральную.&lt;br /&gt;
** Система прав отдельных пользователей.&lt;br /&gt;
** Возможности обмена с другими информационными базами:&lt;br /&gt;
*** При разрелении центральной базы и локальных баз магазинов, возможность использования простого обмена по протоколу Фронтол.&lt;br /&gt;
*** Возможно выгрузки и зарузки из баз 1С по проколу EnterpriseData.&lt;br /&gt;
*** Возможность использования внутреннего протокола обмена с центральной базой.&lt;br /&gt;
* При использовании проекта, как кассового терминала:&lt;br /&gt;
** Драйверы для популярных ККМ (Атол, Штрих-М, Вики Принт, другие драйверы будут добавлены позже).&lt;br /&gt;
*** Продажа марочного товара ЕГАИС (алкоголь) и ГИС МТ (сигареты, молочная продукция и пр.). Работа с ФФД 1.2. &lt;br /&gt;
*** Продажа на несколько касс одновременно (если, к примеру, торговля алкоголем ведется от одного юр. лица, а все остальное продается от другого).&lt;br /&gt;
** Приемка поступлений ЕГАИС, автоматическое создание партий, работа с регистром 2, отчеты по сравнению с реальными остатками и прочее. Полный учет ЕГАИС.&lt;br /&gt;
*** Доступ к УТМ ЕГАИС через сервер позволяет принимать документы в ЕГАИС, работая с базой через Интернет без необходимости перенаправления соединения с УТМ.&lt;br /&gt;
*** Формирование декларации об объемах продаж алкоголя.&lt;br /&gt;
** Прием поступлений от поставщиков марочной продукции ГИС МТ.&lt;br /&gt;
** Использование концепции &amp;quot;рабочее место&amp;quot; и &amp;quot;магазин&amp;quot;, что позволяет настроить оборудование в ККТ магазина нужным образом и исключить проблемы с путаницей между оборудованием и пользователями.&lt;br /&gt;
** Возможность выгружать и загружать информацию по протоколу Фронтол (к примеру, если центральная база будет использовать другую учетную систему). Другие способы обмена могут быть созданы Вашими или сторонними IT-специалистами.&lt;br /&gt;
** Возможность программировать запреты на продажу алкоголя.&lt;br /&gt;
** Вскрывать тару ЕГАИС непосредственно в интерфейсе продавца.&lt;br /&gt;
** Блок макетинга покупателей:&lt;br /&gt;
*** Использование торговых акций с скидкой на позиции, скидкой от суммы документа, акции типа 2+1, возможность добавления исходного кода для реализации более сложных акций.&lt;br /&gt;
*** Работа со скидочными картами, работа с подарочными картами, работа с депозитами.&lt;br /&gt;
*** Учет маркетинговых акций и скидок покупателям.&lt;br /&gt;
** Удобная и простая самомасштабируемая форма рабочего места продавца.&lt;br /&gt;
*** Операции типа: отложить чек, продолжить чек, возврат, аванс, кредит, временная замена прав для выполнения нужной операции и т.д. &lt;br /&gt;
*** Возможности подбора товаров в чек, в т.ч. с помощью терминала сбора данных.&lt;br /&gt;
*** Быстрое закрытие чека, быстрая работа с комбинированными оплатами.&lt;br /&gt;
*** Добавление часто выбираемых товаров в интерфейс рабочего места продавца, частые кнопки могут содержать исходный код для произвольных операций.&lt;br /&gt;
*** Возможность перехвата специальным исходным кодом управления в любой момент или при нажатии на стандартные кнопки. Примеры кода для кафе с номерами столов и депозитами.&lt;br /&gt;
* Возможности сервера базы данных:&lt;br /&gt;
** Автоматическое создание резервных копий базы данных.&lt;br /&gt;
* Возможность получения самых свежих обновлений из официального репозитория.&lt;br /&gt;
&lt;br /&gt;
Требования к оборудованию для работы серверной и клиентской части проекта:&lt;br /&gt;
* Операционная система: Windows 2000, XP, 7, 8, 10 или 11&lt;br /&gt;
* Процессор: 1.1ГГц и выше (также поддерживаются младшие модели Celeron и Atom)&lt;br /&gt;
* Оперативная память: 2Гб и выше (4Гб и выше для Windows 10 и 11)&lt;br /&gt;
Проект будет работать практически на любом оборудовании. Помните, что если вся Ваша оперативная память используется, работа с компьютером будет замедлена, и это может негативно сказаться на кассовых продажах. Убедитесь, что у Вас достаточно оперативной памяти. Для баз данных, обычного размера, сервер не требует много дополнительной памяти, однако, если база данных будет очень большой (2Гб и более), сервер также будет использовать значительное количество памяти.&lt;br /&gt;
&lt;br /&gt;
В проект также входит специальная версия [[Общая информация и интерфейс Студии|Студии]], программы, которая позволяет изменять исходный код проекта и его визуальные формы, а также, разворачивать эти изменения на существующих торговых точках простым нажатием нескольких клавиш. Студия используется в работе техническими специалистами и обычно не устанавливается в самих магазинах. Данный портал содержит исчерпывающую документацию для начала работы со Студией для изменения исходного кода проекта.&lt;br /&gt;
&lt;br /&gt;
Для пошаговой информации по установке проекта в магазине, смотрите статью '''[[Установка проекта Розница]]'''.&lt;br /&gt;
&lt;br /&gt;
==== Изменения, планируемые в будущем ====&lt;br /&gt;
&lt;br /&gt;
На данный момент не все планируемые возможности проекта реализованы. Изменения в его исходном коде будут загружаться на [https://github.com/sfsys132/project-free-Russian-retail официальную страницу github] и бета-версии всегда доступы в официальном репозитории (см. параграф ниже), их можно будет скачать, и обновить рабочие базы данных магазинов. Среди планируемых изменений и добавлений, можно выделить следующие:&lt;br /&gt;
* Особый и более удобный инферфейс для кафе и ресторанов (сейчас есть возможность работы с номерами столов и пр. с помощью перехвата функций из интерфейса кассира).&lt;br /&gt;
* Расширение возможностей системы (внешние модули, создание собственных объектов в язывке (пользовательское ООП) и т.д.)&lt;br /&gt;
* Дополнительные функции редактора исходных Студии (выделенные уровни блоков текста, переходы к функциям, т.п.)&lt;br /&gt;
* Добавление новых драйверов для ККМ, банковских терминалов, т.с.д., электронных весов и дисплеев покупателей&lt;br /&gt;
* Работа над исправлением найденных ошибок&lt;br /&gt;
&lt;br /&gt;
==== Официальный репозиторий исходных текстов проекта ====&lt;br /&gt;
&lt;br /&gt;
Ссылка на официальный репозиторий исходных текстов проекта находится в списке серверов при установки Студии из комплекта бесплатного проекта Розница. Официальный репозиторий содержит самые свежие изменения в проекте и самые свежие исполняемые файлы. Изменения можно скачать выборочно при синхронизации с репозиторием из Студии (пункт меню &amp;quot;развертывание&amp;quot; - &amp;quot;развернуть проект&amp;quot; - галочка на репозитории). Пользователи проекта не могут изменить исходные тексты репозитория, им предоставляется доступ только для чтения. Важно понимать, что репозиторий может содержать непроверенные или мало проверенные изменения, скачивание которых в рабочий проект и затем развертывание в рабочие базы, может привести к ошибкам. Вы можете использовать репозиторий на свой страх и риск, в случаях, к примеру, если новое изменение еще не появилось в новом выпуске или на github, однако, оно необходимо. Проверяйте работу магазина после каждого обновления из репозитория!&lt;br /&gt;
&lt;br /&gt;
==== Ссылки для скачивания бинарных файлов проекта ====&lt;br /&gt;
&lt;br /&gt;
Приведенная здесь ссылка содержит текущую версию программы установки. Программа позволяет установить как клиентскую и серверную части, так и систему разработки Студия. Несмотря на то, что исходные файлы проекта в этой программе установки достаточно свежие, вероятно, они не содержат всех недавних изменений, которые доступны на сервере [https://github.com/sfsys132/project-free-Russian-retail github]. Если Вам необходимо обновить исходные тексты до самой свежей версии, Вы можете скачать их в виде архива или с помощью специальных инструментов (типа [https://tortoisegit.org/ tortoisegit]). Для подобной операции могут потребоваться дополнительные знания. Для пошаговой информации по установке проекта в магазине, смотрите статью '''[[Установка проекта Розница]]'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;Программа установки, а также бинарные файлы проекта не содержат вирусов, однако при скачивании любых исполняемых файлов из Интернета, всегда рекомендуется использовать антивирус со свежими базами обновлений!&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://{{SERVERNAME}}/download/sf_retail_x86_20260401_install.exe &amp;lt;big&amp;gt;'''Скачать файл установки проекта Розница.'''&amp;lt;/big&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
==== Ссылка для скачивания простой демонстрации графических возможностей системы -- tetris.sfo ====&lt;br /&gt;
&lt;br /&gt;
Для простой демонстрации графических возможностей системы был создан внешний объект системы ([[Функции общего назначения#Внешний загружаемый объект|Внешний загружаемый объект]]) '''Tetris'''. Вы можете скачать файл объекта и открыть его в визуальном клиенте. Для работы необходимы установленные драйверы видеокарты и OpenGL не ниже 2.1 (любая современная видеокарта, в т.ч. встроенные). Внешний объект также содержит исходный текст, его можно редактировать и изменять по желанию, если открыть в [[Общая информация и интерфейс Студии|Студии]]. Объект в свободном распространении. Копия, данная на скачивание здесь, возможно, будет в дальнейшем немного изменяться, чтобы улучшить читаемость. Ниже дана ссылка на скачивание:&lt;br /&gt;
&lt;br /&gt;
[http://{{SERVERNAME}}/download/tetris.sfo '''Скачать демонстрацию графического объекта Tetris.''']&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Контактная информация====&lt;br /&gt;
&lt;br /&gt;
Вы можете связаться с нами, используя следующий почтовый адрес: &amp;lt;big&amp;gt;'''&amp;lt;nowiki&amp;gt;sf@sfs&amp;amp;#x79;s.ru&amp;lt;/nowiki&amp;gt;'''&amp;lt;/big&amp;gt;. Нам интересно будет услышать любые Ваши предложения. Мы читаем всю почту, но можем задержаться с ответом из-за высокой загруженности. Если Вы не получили ответ в течение недели, возможно дежурный сотрудник находится в отпуске. Из-за большого количества спама, приходящего на почту, наш почтовый сервер использует спам-фильтры. Если наш сервер отвергает Ваше письмо, попробуйте отослать его с бесплатных почтовых серверов.&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>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</id>
		<title>Объект запрос базы данных</title>
		<link rel="alternate" type="text/html" href="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"/>
		<updated>2026-04-01T10:01:26Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{infobox object&lt;br /&gt;
|object=Query&lt;br /&gt;
|status=2&lt;br /&gt;
|create=[[Query.Create|Create]],[[Query.CreateFromTable|CreateFromTable]]}}&lt;br /&gt;
{{HeadLinks|&lt;br /&gt;
* [[Main_Page|Начальная страница]]&lt;br /&gt;
* [[Общее_описание_языка|Общее описание]]&lt;br /&gt;
* [[Объекты]]}}&lt;br /&gt;
__TOC__&lt;br /&gt;
Запрос базы данных является объектом, имеющим свой внутренний язык, позволяющий описать к какой таблице или таблицам базы данных будет произведен запрос и по каким правилам он будет выполнен. После выполнения запроса объект позволяет возвратить его результат в виде таблицы значений, автоматически подсчитать промежуточные итоги, сгруппировать строки таблицы в уровни для удобного вывода в виде отчета, добавить в таблицу структуру папок справочника и подсчитать промежуточные итоги по каждой из папок, если это необходимо. Объект запроса имеет тенденцию использованию большого количества памяти, особенно, когда в запрос входит объекты БД, имеющие множество реквизитов. Для уменьшения потребности к памяти, имеется ряд оптимизаций, некоторые из них позволяют также ускорить выполнение запроса. Для дополнительной информации по работе с базой данных, смотрите также другие разделы документации: [[Объект базы данных|объект базы данных]], [[Объект структуры базы данных|объект структуры базы данных]], [[Временная таблица базы данных|объект временной таблицы базы данных]].&lt;br /&gt;
&lt;br /&gt;
==Структура языка запроса базы данных==&lt;br /&gt;
Большинство запросов к базе данных имеют текст, описывающий правила, по которым необходимо выполнить запрос. Этот текст задается на языке, не совпадающем (но похожем) с основным языком программ системы. Данный язык далее будем называть языком запросов. Основная функция языка запросов, это задать источник данных для одного или нескольких запросов, связать эти запросы требуемыми операциями объединения, в каждом из запросов задать условия отбора информации, реквизиты группировки информации, реквизиты сортировки информации, правила агрегации числовой информации. Кроме того, язык позволяет задать правила постобработки информации. В общем виде, текст запроса выглядит следующим образом:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;Группа запросов&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
[Postprocessing (&lt;br /&gt;
&amp;lt;Установка постобработки 1&amp;gt;;&lt;br /&gt;
&amp;lt;Установка постобработки 2&amp;gt;;&lt;br /&gt;
...)]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Где &amp;lt;code&amp;gt;&amp;lt;Группа запросов&amp;gt;&amp;lt;/code&amp;gt; может быть представлена в следующем виде:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
([Name &amp;lt;Наименование запроса&amp;gt;]&lt;br /&gt;
[&amp;lt;Задание периода работы с остатками накопителя&amp;gt;;]&lt;br /&gt;
[&amp;lt;Необязательные опции запроса&amp;gt;;]&lt;br /&gt;
&amp;lt;Задание переменной запроса 1&amp;gt;;&lt;br /&gt;
&amp;lt;Задание переменной запроса 2&amp;gt;;&lt;br /&gt;
...&lt;br /&gt;
[Condition &amp;lt;Условия отбора записей 1&amp;gt;;&lt;br /&gt;
Condition &amp;lt;Условия отбора записей 2&amp;gt;;&lt;br /&gt;
...]&lt;br /&gt;
[&amp;lt;Порядок группировки или/и сортировки&amp;gt;;]) &lt;br /&gt;
&lt;br /&gt;
[&amp;lt;Операция объединения запросов 1&amp;gt;&lt;br /&gt;
(&amp;lt;Запрос 2&amp;gt;) On (&amp;lt;Условие объединения запросов&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
[&amp;lt;Операция объединения запросов 2&amp;gt;&lt;br /&gt;
  ... ]]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Описание основных свойств, операторов, переменных и полей текста запроса:&lt;br /&gt;
* Каждый запрос имеет определенный ''источник запроса''. Источником называют указание на объект базы данных: справочник, вид документов или накопитель. Внутри запроса могут быть заданы ссылки на другие справочники, виды документов или табличные части, но эти ссылки всегда связаны с источником запроса через его реквизиты. К примеру, запрос осуществляется к справочнику ''Адреса'', который является подчиненным справочника ''Контрагенты''. Чтобы произвести отбор получаемых в запросе адресов с помощью списка контрагентов, достаточно применить фильтр к ссылке на справочник контрагенты, полученной из источника запроса справочника адреса как &amp;lt;code&amp;gt;Ref.Адреса.@Parent&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Каждый запрос оперирует ''переменными запроса''. Переменная запроса, это именованное указание на реквизит или объект, либо вычисляемое выражение, включающее другие переменные, функции и арифметические или логические операторы. Все заданные переменные по умолчанию возвращаются в результате выполнения запроса. Программа, получившая результат запроса, имеет доступ ко всем таким переменным. Если переменную не требуется возвращать в результате, для уменьшения таблицы запроса, ускорения получения ее с сервера и обработки локальной системой, можно использовать условие постобработки ''SkipVariables'' (см. ниже). Имена переменных должны быть уникальными в теле одного запроса и должны подчиняться обычным правилам задания имен переменным. Если группа запросов содержит более одного запроса, важно понимать, что при объединении этих запросов в один результат, система трактует переменные, имеющие одинаковые имена в разных запросах, как одну переменную в результате запроса, то есть в разных запросах переменные с одинаковыми именами должны указывать на данные одного вида. Задание переменной имеет вид: &amp;lt;code&amp;gt;&amp;lt;Имя переменной&amp;gt;:=&amp;lt;Значение переменной&amp;gt;;&amp;lt;/code&amp;gt;. При этом ''значение переменной'', может быть произвольной формулой или указанием на определенный реквизит или объект (полный путь, начинающийся с источника запроса). Используя пример предыдущего пункта, можно создать переменную ''зКонтрагент'': &amp;lt;code&amp;gt;зКонтрагент:=Ref.Адреса.@Parent;&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Кроме переменных, в запросе также могут содержаться ''условия запроса''. Условия являются логическими выражениями с использованием заданных ранее переменных запроса, констант, переменных внешней программы, функций, арифметических или логических операторов, и позволяют отобрать записи, попадающие в результат запроса. При отборе записей базы данных, каждое из условий выполняется для каждой из записей и, если все условия вычисляются как ''правда'', проверяемая запись попадает в результат запроса. Задание условия имеет вид: &amp;lt;code&amp;gt;Condition(&amp;lt;Выражение&amp;gt;);&amp;lt;/code&amp;gt;. Используя пример предыдущих пунктов, можно задать условие, по которому в результат запроса войдут только адреса, контрагенты которых содержатся в списке ''спКонтрагенты'': &amp;lt;code&amp;gt;Condition(зКонтрагент IN спКонтрагенты);&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Запрос может выполняться с использованием агрегации получаемых данных или без оной. При наличии агрегации данные группируются по одной или нескольким группам и числовые переменные находятся в результате суммы отдельных полей записей, полученных из базы данных. Запрос, выполняемый таким образом, должен содержать операторы группировки ''Group'', ''HorGroup'' или ''VerGroup''. Операторов группировки может быть более одного, в этом случае, запрос будет последовательно группироваться по каждой из переменной, указанной в операторе группировки. Переменные также можно указывать через запятые. Общий вид оператора группировки выглядит сл. образом: &amp;lt;code&amp;gt;&amp;lt;Оператор группировки&amp;gt; &amp;lt;Переменная группировки 1&amp;gt;[{+,-}][ with folders][,&amp;lt;Переменная группировки 2&amp;gt;...];&amp;lt;/code&amp;gt;. После каждой переменной можно указать направление сортировки после выполнения группировки. По умолчанию будет использоваться сортировка по невозрастанию (''+''). Для переменных, указывающих на объекты справочников, имеющих папки, можно также указать суффикс ''with folders''. Этот суффикс будет обработан в момент постобработки таблицы запроса (см. ''этапы выполнения запроса базы данных'' ниже), в таблицу будут добавлены особые группировки по папкам справочника, на который указывала переменная запроса. Строки таблицы будут отсортированы таким образом, что элементы справочников будут следовать за папками справочников, в которые они входят в самом справочнике, тоже самое правило сортировки будет соблюдаться и для самих папок. Внутри же одной папки, элементы будут отсортированы в соответствии с указанным порядком сортировки. При подсчете переменных агрегации, строки с папками справочника будут вычислены на основе строк элементов, входящих в эти папки. Для аналогии с группировкой таблиц значений, см. статью [[Tab.Group|Group]].&lt;br /&gt;
** Обычный оператор группировки &amp;lt;code&amp;gt;Group&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;VerGroup&amp;lt;/code&amp;gt; не добавляет записи в таблицу-результат запроса. Оператор горизонтальной группировки &amp;lt;code&amp;gt;HorGroup&amp;lt;/code&amp;gt; используется для формирования отчетов с горизонтальными группировками. В процессе постобработки в таблицу запроса добавляются записи таким образом, чтобы для под каждой из верхних группировок, было одинаковое количество записей текущей горизонтальной группировки. Это достигается путем добавления недостающих записей в таблицу результата, таблица, полученная таким образом, может быть выведена в отчет по строкам и столбцам, используя для обхода обычный оператор [[Query.Next|Next]]. Все горизонтальные группировки должны следовать после обычных (вертикальных).&lt;br /&gt;
** Кроме операторов группировки может использоваться оператор сортировки &amp;lt;code&amp;gt;Sort &amp;lt;Переменная сортировки 1&amp;gt;[{+,-}][,&amp;lt;Переменная сортировки 2&amp;gt;...];&amp;lt;/code&amp;gt;. Оператор осуществляет сортировку сгруппированных и отсортированных строк предыдущих группировок. Если после оператора сортировки следует оператор группировки, он должен использовать такой же путь или являться частью пути, который был использован для сортировки. К примеру, справочник ''Номенклатура'' имеет реквизит ''Тип'', являющийся ссылкой на справочник ''Типы номенклатуры''. При выполнении запроса необходимо группировать результат по элементам справочника номенклатура, однако, необходимо также отсортировать полученную номенклатуру по типу. Текст запроса будет выглядеть следующим образом: &amp;lt;code&amp;gt;зН:=Ref.Номенклатура;зТип:=Ref.Номенклатура.Тип;Sort зТип;Group зН;&amp;lt;/code&amp;gt;. Так как группировка зН использует путь, являющийся частью пути сортировки зТип, такой запрос будет выполнен и результирующая таблица будет отсортирована сначала по реквизиту Тип элементов справочника Номенклатура, потом уже по самим элементам справочника. Для параллелей сортировки таблиц значений, см. статью [[Tab.Sort|Sort]].&lt;br /&gt;
** Если запрос не имеет операторов группировки, он называется простым запросом по элементам (документам) источника запроса, переменные такого запроса не должны содержать функций агрегации (см. ниже). Однако, признак агрегации запроса можно форсировать с помощью особого оператора &amp;lt;code&amp;gt;ForceAggregate;&amp;lt;/code&amp;gt;, размещенного в теле запроса. В этом случае, запрос возвратит только одну строку, и использованные функции агрегации будут применены ко всем записям запроса.&lt;br /&gt;
** Переменные, использующиеся в запросе агрегации, чаще всего содержат функции агрегации (см. ниже), но даже если переменная не содержит функцию агрегации, она будет возвращена в результате выполнения запроса, однако, содержание такой переменной не будет определено (она может содержать любое из значений, поглощенных при агрегации), поэтому для переменных, которые будут использованы в программе, создавшей запрос, необходимо использовать функции агрегации.&lt;br /&gt;
* Если источником запроса служит накопитель, имеющий таблицу остатков (см. [[Объект базы данных]]), кроме обычных функций агрегации, можно использовать особые функции агрегации, для нахождения начального или конечного остатка активов накопителя (к примеру, &amp;lt;code&amp;gt;BegTotals&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;EndTotals&amp;lt;/code&amp;gt;). При запросе к таким накопителям, в теле запроса также необходимо указать период выполнения запроса. Период задается в следующем виде: &amp;lt;code&amp;gt;Period from &amp;lt;Начальная дата&amp;gt; to &amp;lt;Конечная дата&amp;gt;;&amp;lt;/code&amp;gt;. Где ''начальная дата'' и ''конечная дата'' -- константы или выражения для нахождения начальной и конечной даты запроса.&lt;br /&gt;
* ''Операция объединения запросов'' и ''Условие объединения запросов'' задают метод объединения двух последовательных запросов в один. По аналогии с объединением таблиц значений (см., к примеру, [[Tab.InnerJoin|Join]]). Условие запроса представляет собой произвольное логическое выражение, в котором можно использовать операции, функции локальный переменные программы и переменные обоих запросов. Условие обычно используется в виде &amp;lt;code&amp;gt;&amp;lt;Переменная первого запроса&amp;gt;=&amp;lt;Переменная второго запроса&amp;gt;&amp;lt;/code&amp;gt;, при этом переменные указывают на одинаковый тип данных и часто являются ссылками на источник запроса. Пример см. ниже. Таблица результата после объединения включает переменные первого и второго запроса, если переменная имеет одинаковое имя и в первом и во втором запросе, в таблице результата она будет присутствовать как одна переменная, в зависимости от операции объединения, могут быть использованы значения как из первого, так и из второго запроса. Следующие операции доступны при объединении запросов:&lt;br /&gt;
** '''Inner Join''' или '''Join''': В таблицу результата будут входить только записи, для которых выполняется условие объединения.&lt;br /&gt;
** '''Left Join''' или '''Left Outer Join''': В таблицу результата будут входить все записи первого запроса, из второго запроса будут использованы значения переменных, отсутствовавших в первом запросе, если для записи выполняется условие объединения.&lt;br /&gt;
** '''Right Join''' или '''Right Outer Join''': В таблицу результата будут входить все записи второго запроса, из первого запроса будут использованы значения переменных, отсутствовавших во втором запросе, если для записи выполняется условие объединения.&lt;br /&gt;
** '''Full Join''' или '''Full Outer Join''': В таблицу результата будут входить все записи обоих запросов, для которых выполняется условие объединения. '''Внимание''': SQL сервера базы данных проверяют выполнение условия для каждой из пары записей двух запросов (т.е., выполнение условия для первой записи первого запроса проверяется на выполнение с каждой записью второй запроса, затем та же самая процедура выполняется для второй записи первого запроса и т.д. Для каждого выполнения условия добавляется новая запись в результат, таким образом записи могут иметь множество дублей, что в подавляющем большинстве случаев нежелательно), сервер будет пытаться добавить определенные выражения в условие объединения запроса, чтобы минимизировать эту проблему, однако, к такому типу объединения нужно подходить с осторожностью (рекомендовано использование операции ''Union All'' вместо ''Full Join'').&lt;br /&gt;
** '''Union All''': В таблицу будут входить все записи первого и второго запросов, конструкция ''условие объединения запросов'' не нужна, так как никаких проверок при объединении не производится. После выполнения постобработки запроса, результаты подобного вида чаще всего аналогичны выполнению ''Full Join'', так как при постобработке дублирующиеся записи будут помещены в одинаковые блоки нулевого уровня группировки (см. ниже), однако, операции агрегации будут давать суммы обоих записей, поэтому наименования переменных агрегации в обоих запросах должны быть разными. Пример см. ниже. &lt;br /&gt;
* Наименование запроса является необязательных элементом и служит для улучшения читабельности текста запроса, когда группа запросов содержит более одного запроса. Наименование не должно содержать знаков и пробелов. Вне запроса переменные из запроса могут использоваться только в формулах условий объединения запросов. Если переменные условия из обоих объединяемых запросов имеют одинаковые имена, системе необходимо каким-то образом отличать переменную одного запроса от другого, поэтому для переменных вне запроса к имени переменных всегда добавляется префиксы. Допускается использование следующих префиксов: &lt;br /&gt;
** '''#&amp;lt;Имя запроса&amp;gt;.&amp;lt;Наименование переменной&amp;gt;''' -- указание на переменную запроса с использованием наименования запроса.&lt;br /&gt;
** '''##Q&amp;lt;Порядковый номер запроса&amp;gt;.&amp;lt;Наименование переменной&amp;gt;''' -- указание на переменную запроса с использованием порядкового номера запроса. Данная конструкция может быть использована, если запросы не имеют наименования.&lt;br /&gt;
* ''Необязательные опции запроса'' -- общее название набора дополнительных опций запроса (к примеру, &amp;lt;code&amp;gt;ForceAggregate;&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;Limit &amp;lt;Количество возвращаемых записей&amp;gt;;&amp;lt;/code&amp;gt;), которые могут использоваться в тексте запроса. Для полного списка доступных опций, см. [[Объект запрос базы данных#Список операторов и функций языка запроса|Список операторов и функций языка запроса]].&lt;br /&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;
* При задании переменной, как '''пути''' к требуемому реквизиту, необходимо придерживаться правила, что путь всегда должен начинаться с указания на источник запроса, все переменные должны быть адресуемыми посредством источника (см. описание выше). В случае задания переменной, как пути, синтаксис выглядит следующим образом: &amp;lt;code&amp;gt;&amp;lt;Имя переменной&amp;gt;:=&amp;lt;Тип данных&amp;gt;.&amp;lt;Вид данных&amp;gt;[[.&amp;lt;Наименование строчной части&amp;gt;].&amp;lt;Наименование реквизита или особого реквизита&amp;gt;[(&amp;lt;Дата значения периодического реквизита&amp;gt;)][[..&amp;lt;Тип данных приведения типа&amp;gt;.&amp;lt;Вид данных приведения типа&amp;gt;].&amp;lt;Наименование реквизита или особого реквизита&amp;gt;...]]&amp;lt;/code&amp;gt;. Рассмотрим некоторые части такого пути:&lt;br /&gt;
** ''Дата значения периодического реквизита'' -- выражение или константа, задающая дату реквизита. Данное выражение должно следовать за наименованием периодического реквизита. Пример: &amp;lt;code&amp;gt;зЦена:=Ref.Номенклатура.Цена(CurDate());&amp;lt;/code&amp;gt;.&lt;br /&gt;
** ''Наименование строчной части'' -- используется для доступа к реквизитам строчной части объекта источника запроса. Пример: &amp;lt;code&amp;gt;зСумма:=Doc.Реализация.НоменклатураИЦены.Сумма;&amp;lt;/code&amp;gt;.&lt;br /&gt;
** ''Доступ к реквизитам других объектов'' -- путь к данным может иметь неограниченную длину, если, к примеру, адресуемый в пути реквизит имеет тип объекта базы данных, можно продолжить путь, указав наименование реквизита этого объекта, для которого, в свою очередь путь может быть продолжен. При выполнении запроса, если адресуемый реквизит в объекте не определен (выбран), переменная получит пустой тип базы данных (''NULL''), который после окончания выполнения запроса будет преобразован в пустое значение.&lt;br /&gt;
** ''Выражения преобразования типа'' -- иногда при адресации различных реквизитов объектов встречается ситуация, когда реквизит может иметь несколько типов данных БД или вообще иметь произвольный тип базы данных. Получение дальнейших ссылок к реквизитам таких объектов невозможно без прямого указания типа и вида требуемого объекта (приведения или преобразования типа). Преобразование типа может также применяться к особым реквизитам (к примеру, ''@Parent'', когда объект может быть подчинен более чем одному справочнику-родителю). Как и с обычными реквизитами, в случаях, если реквизит объекта содержит ссылку на объект с типом, не совпадающим с указанным при преобразовании, значение переменной этого объекта будет пустым. Преобразование типов может быть записано в виде &amp;lt;code&amp;gt;... &amp;lt;Реквизит&amp;gt;..&amp;lt;Тип данных приведения типа&amp;gt;.&amp;lt;Вид данных приведения типа&amp;gt; ...&amp;lt;/code&amp;gt;, либо &amp;lt;code&amp;gt;... &amp;lt;Реквизит&amp;gt; AS &amp;lt;Тип данных приведения типа&amp;gt;.&amp;lt;Вид данных приведения типа&amp;gt; ...&amp;lt;/code&amp;gt;.&lt;br /&gt;
** Особые реквизиты объектов, которые можно использовать при создании пути переменной:&lt;br /&gt;
*** '''@ELEMENT''' или '''@HEADER''' -- реквизит, дающий ссылку на сам элемент или документ из реквизита строчной части документов или справочников.&lt;br /&gt;
*** '''@LINK''' -- реквизит, дающий ссылку на объект, поместивший запись в журнал, при запросе к объекту журналу (см. [[DB.LinkedObject|LinkedObject]]), либо объект, создавший запись в накопителе, при запросе к последнему.&lt;br /&gt;
*** '''@ISFOLDER''' -- Задает числовое значение, является ли текущий объект справочника папкой (''1'') или обычным элементом (''0''), также может использоваться для записей строчных частей справочников.&lt;br /&gt;
*** '''@FOLDER''' -- Задает ссылку на объект папки, в которой находится текущий объект справочника, также может использоваться для записей строчных частей справочников.&lt;br /&gt;
*** '''@PARENT''' -- Задает ссылку на объект родителя, которому подчинен текущий объект справочника.&lt;br /&gt;
*** '''@STATUS''' -- Задает числовое значение статуса текущего объекта. Для справочников и элементов журналов справочников это значение может быть ''0'' -- для обычного элемента, ''1'' -- для удаленного элемента. Для документов и элементов журналов документов это значение может быть ''0'' -- для обычного объекта, ''1'' -- для удаленного объекта, ''2''..''200'' -- для обработанного объекта с указанным индексом обработки (см. [[DB.PublishedMark|PublishedMark]]).&lt;br /&gt;
*** '''@LINE''', '''@LINEID''' -- Задает номер строки строчной части или номер записи в накопителе.&lt;br /&gt;
*** '''@EXPENSE''' -- Задает флаг расхода для накопителей, имеющих такой флаг.&lt;br /&gt;
*** '''@PARENTDOC''' -- Задает ссылку на таблицу документов, которым подчинен текущий документ.&lt;br /&gt;
*** '''@CHILDDOC''' -- Задает ссылку на таблицу документов, которые подчинены текущему документу.&lt;br /&gt;
*** '''@TRIGGER''' -- Задает значение триггера изменения для элементов справочников или документов, для которых такой триггер задан.&lt;br /&gt;
*** '''@DATE''' -- Задает дату записи для накопителей, записи которых датированы.&lt;br /&gt;
*** '''@SECOND''' -- Задает дату записи для накопителей, записи которых датированы. Время даты корректируется на начало секунды. Позволяет производить группировку движений накопителя в разрезе секунд. Внимание: большой период формирования может сильно замедлить формирование и вернуть очень большую таблицу результата.&lt;br /&gt;
*** '''@MINUTE''' -- Задает дату записи для накопителей, записи которых датированы. Время даты корректируется на начало минуты. Позволяет производить группировку движений накопителя в разрезе минут. Внимание: большой период формирования может сильно замедлить формирование и вернуть очень большую таблицу результата.&lt;br /&gt;
*** '''@HOUR''' -- Задает дату записи для накопителей, записи которых датированы. Время даты корректируется на начало часа. Позволяет производить группировку движений накопителя в разрезе часов. Внимание: большой период формирования может сильно замедлить формирование и вернуть очень большую таблицу результата.&lt;br /&gt;
*** '''@DAY''' -- Задает дату записи для накопителей, записи которых датированы. Время даты корректируется на начало дней. Позволяет производить группировку движений накопителя в разрезе дней.&lt;br /&gt;
*** '''@WEEK''' -- Задает дату записи для накопителей, записи которых датированы. Время даты корректируется на начало недель. Позволяет производить группировку движений накопителя в разрезе недель.&lt;br /&gt;
*** '''@MONTH''' -- Задает дату записи для накопителей, записи которых датированы. Время даты корректируется на начало месяцев. Позволяет производить группировку движений накопителя в разрезе месяцев.&lt;br /&gt;
*** '''@QUARTER''' -- Задает дату записи для накопителей, записи которых датированы. Время даты корректируется на начало кварталов. Позволяет производить группировку движений накопителя в разрезе кварталов.&lt;br /&gt;
*** '''@YEAR''' -- Задает дату записи для накопителей, записи которых датированы. Время даты корректируется на начало года. Позволяет производить группировку движений накопителя в разрезе лет.&lt;br /&gt;
* При задании переменной или условия запроса, как '''выражения''', можно использовать следующие части выражения (порядок их описания здесь соответствует порядку их поиска при компиляции выражений, поэтому, к примеру, функция ''Date'' означает внутреннюю функцию языка запросов, а не начало внешнего выражения языка):&lt;br /&gt;
** Скобки '''(''', ''')'''; &lt;br /&gt;
** Особый оператор конкатенации строк '''||'''. Обычно для конкатенации строк используется оператор ''+'', однако, некоторые серверы базы данных (к примеру, SQLite) не поддерживают конкатенацию строк с помощью этого оператора, и при переводе выражений на язык используемого сервера баз данных, системе очень трудно определить тип операции -- математическое сложение или конкатенация строк. Поэтому, для того, чтобы запросы были совместимы со всеми серверами баз данных, рекомендуется использование оператора конкатенации ''||'' вместо оператора сложения ''+''.&lt;br /&gt;
** Математические операторы: '''+''', '''-''', '''/''', '''\''' ('''DIV''') -- целочисленное деление, '''*''', '''%''' ('''MOD''') -- остаток от деления, '''&amp;amp;''' -- математическое ''и'', '''|''' -- математическое ''или'', '''^''' -- математическая операция ''исключающее или'', '''~''' -- математическое обращение. К сожалению, использование ''And'' и ''Or'' как для логических выражений, так и для математических, которое практикуется внутри языка системы, не поддерживается многими серверами баз данных, и, при переводе выражений на язык сервера, система не сможет определить, какого рода оператор используется, поэтому для математических операций были введены дополнительные операторы ''&amp;amp;'', ''|'' (не используйте в начале строки!) и ''~''. Нужно также заметить, что, в отличие от операций с датами и временем в выражениях, используемых в языке системы, язык запросов не позволяет прибавлять числа к датам. Чтобы изменить дату на требуемое число дней, необходимо использовать функцию ''AddDay''.&lt;br /&gt;
** Логические операторы: '''&amp;lt;''', '''&amp;gt;''', '''=''', '''&amp;lt;=''', '''=&amp;gt;''', '''&amp;lt;&amp;gt;''', '''!''' ('''NOT''') -- логическое обращение, '''AND''', '''OR'''&lt;br /&gt;
** Особые логические операторы:&lt;br /&gt;
*** '''IN''' -- операция проверяет присутствие значения в списке, другом запросе или папке справочника. Операция записывается в виде &amp;lt;code&amp;gt;&amp;lt;Имя переменной&amp;gt; IN &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;/code&amp;gt;, для проверки наличия записи во внешней таблице, значение указанного столбца которой совпадает с проверяемым объектом; &lt;br /&gt;
**** '''переменная подзапроса''' в виде &amp;lt;code&amp;gt;&amp;lt;Наименование переменной подзапроса&amp;gt; From (&amp;lt;Подзапрос&amp;gt;)&amp;lt;/code&amp;gt;, для проверки вхождения текущего объекта в результат выполнения подзапроса, подзапрос является обычным запросов языка запросов, который может использовать все его возможности, однако, в подзапросах не разрешено использование группировок.&lt;br /&gt;
*** '''NOT IN''' -- операция обратная операции ''IN''. См. выше.&lt;br /&gt;
** Внутренние функции языка запросов, транслируемые для исполнения на сервере (см. ниже в параграфе ''Список операторов и функций языка запроса''). Каждая из функций имеет свой синтаксис, в аргументах функции также могут использоваться '''выражения'''.&lt;br /&gt;
** Внутренние переменные запроса, в том числе переменные другого запроса группы запросов с указанием на номер запроса (см. выше), если выражение принадлежит условию объединения запросов.&lt;br /&gt;
** Свободное указание на путь к реквизиту, не описывавшийся ранее в какой-либо переменной.&lt;br /&gt;
** Внешние константы (к примеру, &amp;lt;code&amp;gt;_NEWLINE&amp;lt;/code&amp;gt;) или переменные языка. Значение внешних переменных передается на сервер и используется как константа в запросе.&lt;br /&gt;
** Числовые, строковое или временные константы, записанные в тексте запроса. Запись констант осуществляется в соответствии с их записью в теле обычных программ языка (см. [[Общее описание языка#Константы в исходных текстах|Общее описание языка]]):&lt;br /&gt;
*** Числа записываются без ограничителей. Разделителем дробной части является десятичная точка. В математической записи чисел можно использовать признак экспоненты ('''E'''). Кроме десятичной нотации, можно использовать шестнадцатеричную (&amp;lt;code&amp;gt;$FFFF0000&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;0xFF00&amp;lt;/code&amp;gt;), восьмеричную (&amp;lt;code&amp;gt;0o177400&amp;lt;/code&amp;gt;) или двоичную (&amp;lt;code&amp;gt;0b1111111100000000&amp;lt;/code&amp;gt;).&lt;br /&gt;
*** Строки отделяется кавычками: '''&amp;quot;'''.&lt;br /&gt;
*** Дата и время отделяется апострофами: '''&amp;lt;nowiki&amp;gt;'&amp;lt;/nowiki&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;
(Name зНоменклатура;&lt;br /&gt;
зН:=Ref.Номенклатура;&lt;br /&gt;
зТип:=Ref.Номенклатура.Тип;&lt;br /&gt;
Condition(зТип=Enum.ТипыНоменклатуры.Товар);&lt;br /&gt;
Group зН;)&lt;br /&gt;
  Left Join&lt;br /&gt;
(Name зОстатки;&lt;br /&gt;
Period From '01.01.2024' to '01.01.2024';&lt;br /&gt;
зН:=Stor.Остатки.Номенклатура;&lt;br /&gt;
зТип:=Stor.Остатки.Номенклатура.Тип;&lt;br /&gt;
зОстаток:=EndTotals(Количество);&lt;br /&gt;
Condition(зТип=Enum.ТипыНоменклатуры.Товар);&lt;br /&gt;
Group зН;) On (#зНоменклатура.зН=#зОстатки.зН)&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;
(Period From '01.01.2024' to '01.01.2024';&lt;br /&gt;
зН:=Stor.Остатки.Номенклатура;&lt;br /&gt;
зОстаток:=EndTotals(Количество);&lt;br /&gt;
Group зН;)&lt;br /&gt;
  Union All&lt;br /&gt;
(Period From '01.01.2024' to '01.01.2024';&lt;br /&gt;
зН:=Stor.Резервы.Номенклатура;&lt;br /&gt;
зРезерв:=EndTotals(Количество);&lt;br /&gt;
Group зН;)&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;
//aEl -- текущий документ&lt;br /&gt;
//aTab -- визуальная таблица, в которую будет выведен результат&lt;br /&gt;
КонДата:=aEl.DocDate;&lt;br /&gt;
ТЗ:=&amp;quot;PeriodT From КонДата to КонДата;&lt;br /&gt;
|зД:=Storage.РезервыТМЦ.Договор;&lt;br /&gt;
|зН:=Storage.РезервыТМЦ.Номенклатура;&lt;br /&gt;
|зСк:=Storage.РезервыТМЦ.Склад;&lt;br /&gt;
|зКл:=EndTotals(Количество);&lt;br /&gt;
|зСм:=EndTotals(Сумма);&lt;br /&gt;
|Condition(зСк=aEl.Склад);&lt;br /&gt;
|Group зСк,зД,зН;&amp;quot;;&lt;br /&gt;
  &lt;br /&gt;
З:=Query.Create();&lt;br /&gt;
З.Execute(ТЗ);&lt;br /&gt;
&lt;br /&gt;
//Запрос выполнен, произведем обход результата по всем трем вложенным группировкам, используемым здесь для сортировки таблицы&lt;br /&gt;
aTab.ClearLines();&lt;br /&gt;
While З.Next(1) Do&lt;br /&gt;
  While З.Next(2) Do&lt;br /&gt;
    While З.Next(3) Do&lt;br /&gt;
      If (З.зКл&amp;lt;&amp;gt;0)or(З.зСм&amp;lt;&amp;gt;0) Then&lt;br /&gt;
        //Добавим в таблицу одну строку З.зКл и З.зСм -- переменные агрегации, остальные переменные являются переменными группировок&lt;br /&gt;
        aTab.AddLine(&amp;quot;Номенклатура,Договор,Склад,Количество,Сумма&amp;quot;,З.зН,З.зД,З.зСк,З.зКл,З.зСм);&lt;br /&gt;
      EndIf;&lt;br /&gt;
    EndDo;&lt;br /&gt;
  EndDo;&lt;br /&gt;
EndDo;    &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;
КонДата:=aEl.DocDate;&lt;br /&gt;
ТЗ:=&amp;quot;(PeriodT From КонДата to КонДата;&lt;br /&gt;
|зД:=Storage.РезервыТМЦ.Договор;&lt;br /&gt;
|зН:=Storage.РезервыТМЦ.Номенклатура;&lt;br /&gt;
|зТип:=Storage.РезервыТМЦ.Номенклатура.ТипНоменклатуры;&lt;br /&gt;
|Condition(зТип=0);&lt;br /&gt;
|зСк:=Storage.РезервыТМЦ.Склад;&lt;br /&gt;
|зАктив:=Storage.РезервыТМЦ.Склад.Активность;&lt;br /&gt;
|Condition(зАктив=0);&lt;br /&gt;
|зКл:=EndTotals(Количество);&lt;br /&gt;
|зСм:=EndTotals(Сумма);&lt;br /&gt;
|Condition(зСк=aEl.Склад);&lt;br /&gt;
|Group зСк,зД,зН;)&lt;br /&gt;
|Postprocessing (&lt;br /&gt;
|RemoveLev0Lines 1;&lt;br /&gt;
|SkipVariables зТип,зАктив;)&amp;quot;;&lt;br /&gt;
  &lt;br /&gt;
З:=Query.Create();&lt;br /&gt;
З.Execute(ТЗ);&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;
//Пример заполняет визуальную таблицу MainTab документами списания и оприходования, строки которых пересчитаны по требуемым ценам.&lt;br /&gt;
//Пример может использоваться для вывода таблицы в табличный процессор с универсальными группировками, однако, здесь он используется &lt;br /&gt;
//       с тремя группировками для упрощения понимания.&lt;br /&gt;
//Документ РегистрацияТМЦ может быть как списанием, так и оприходованием в зависимости от его реквизита КодОперации.&lt;br /&gt;
//       Документ имеет срочную часть с именем Номенклатура к которой происходит обращение.&lt;br /&gt;
//При выводе в таблицу склады группируются по папкам справочника складов&lt;br /&gt;
//Группировка по номенклатуре используется для нахождения внутренних цен номенклатуры, но в таблицу не выводится&lt;br /&gt;
//зСм:=SUM(0) -- используется для простого указания на то, что зСм должна находиться методом агрегации, однако, начальное заполнение этой переменной не требуется&lt;br /&gt;
//               Альтернативно можно было бы использовать опции постобработки.&lt;br /&gt;
//зКл будет положительным или отрицательным в зависимости от типа документа&lt;br /&gt;
//    Doc.РегистрацияТМЦ.КодОперации не превращен в переменную и используется в формуле &amp;quot;на лету&amp;quot;.&lt;br /&gt;
ТЗ:=&amp;quot;зДата:=BegOfDay(Doc.РегистрацияТМЦ.DocDate);Condition((зДата&amp;gt;=НачДата)And(зДата&amp;lt;=КонДата));&lt;br /&gt;
|зСтатус:=Doc.РегистрацияТМЦ.@Status;Condition(зСтатус&amp;gt;1);&lt;br /&gt;
|зСк:=Doc.РегистрацияТМЦ.Склад;&lt;br /&gt;
|зДок:=Doc.РегистрацияТМЦ;&lt;br /&gt;
|зН:=Doc.РегистрацияТМЦ.Номенклатура.Номенклатура;&lt;br /&gt;
|зКл0:=Doc.РегистрацияТМЦ.Номенклатура.Количество;&lt;br /&gt;
|зСм:=SUM(0);&lt;br /&gt;
|зКл:=SUM(?(Doc.РегистрацияТМЦ.КодОперации=Enum.коРегистрацияТМЦ.СписаниеТМЦ,-зКл0,зКл0));&lt;br /&gt;
|Group зСк with folders,зДок,зН;&amp;quot;;&lt;br /&gt;
З:=Query.Create();&lt;br /&gt;
//Выполнение останавливается после первого этапа&lt;br /&gt;
З.Execute(ТЗ,0);&lt;br /&gt;
//Заполним столбец зСм таблицы запроса расчетными значениями, зависящими от Номенклатуры, Склада и даты документа.&lt;br /&gt;
aTab:=З.ResultTable;&lt;br /&gt;
aTab.Select();&lt;br /&gt;
While aTab.Next() Do&lt;br /&gt;
  //На данном этапе можно не только заполнять таблицу, но и удалять и добавлять в нее нужные строки&lt;br /&gt;
  aTab.зСм:=ПолучитьНужнуюЦену(aTab.зН,aTab.зСк,aTab.зДата)*aTab.зКл;&lt;br /&gt;
EndDo;&lt;br /&gt;
//Выполним постобработку, которая автоматически создаст группировки, добавит папки складов и подсчитает переменные зСм и зКл.&lt;br /&gt;
З.Postprocess();&lt;br /&gt;
&lt;br /&gt;
//Заполним таблицу MainTab &lt;br /&gt;
MainTab.ClearLines();&lt;br /&gt;
While З.Next(1) Do&lt;br /&gt;
  While З.Next(2) Do&lt;br /&gt;
    If not З.зСк.IsFolder() Then&lt;br /&gt;
      aTab.AddLine(&amp;quot;Документ,Склад,Сумма&amp;quot;,З.зДок,З.зСк,З.зСм);&lt;br /&gt;
    Else&lt;br /&gt;
      //Для папок складов нет смысла выводить документ, а только общую сумму документов по папке&lt;br /&gt;
      aTab.AddLine(&amp;quot;Склад,Сумма&amp;quot;,З.зСк,З.зСм);&lt;br /&gt;
    EndIf;&lt;br /&gt;
  EndDo;&lt;br /&gt;
EndDo;    &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Этапы выполнения запроса базы данных, постобработка запроса==&lt;br /&gt;
Обычно запрос выполняется в два больших этапа, которые могут быть разделены по времени, и любой из которых может отсутствовать. Каждый из этапов делится на более простые подэтапы. В общем случае, картина выполнения запроса выглядит следующим образом:&lt;br /&gt;
* Этап компиляции и выполнения запроса.&lt;br /&gt;
** Производится компиляция запроса на локальной машине, если при компиляции были выявлены ошибки, выполнение запроса будет остановлено. В процессе компиляции выполняются локальные функции и выражения, функции и выражения запроса переносятся в бинарный файл компиляции.&lt;br /&gt;
** Скомпилированный запрос передается на сервер&lt;br /&gt;
** Скомпилированный запрос превращается на сервере в запрос к базе данных и исполняется, если в процессе исполнения произошли ошибки, сервер возвращает ошибку клиенту, который создает соответствующее исключение.&lt;br /&gt;
** Результат запроса передается с сервера на клиент, где система создает локальную таблицу значения, содержащую результат запроса. Таблица на этом этапе не содержит группировок и называется ''необработанной таблицей запроса'' (см. ниже &amp;quot;Формат таблицы значений результата запроса&amp;quot;), программа имеет доступ к такой таблице и может изменять ее до начала второго этапа запроса.&lt;br /&gt;
* Этап постобработки запроса.&lt;br /&gt;
** Система производит загрузку объектов таблицы запроса с помощью функции [[MassLoadObjects]] по правилам, заданным в свойствах запроса и при вызове функции выполнения запроса.&lt;br /&gt;
** Производится сортировка таблицы запроса. Таблица, полученная с сервера, чаще всего уже отсортирована, однако, установки сортировки сервера могут отличаться от установок сортировки системы, кроме того, таблица могла быть изменена программой до начала этого этапа. Если запрос выполняется в линейном режиме (см. [[Query.Execute|Execute]]), этап постобработки будет завершен в этот момент.&lt;br /&gt;
** В таблице запроса создается столбец &amp;lt;code&amp;gt;@LEVEL&amp;lt;/code&amp;gt;, после чего в таблицу добавляются строки группировки, для которых заполняется новый столбец уровня группировки, в строки также будут скопированы значения соответствующих столбцов группировки и заполнены столбцы, не вычисляемые с помощью функций агрегации.&lt;br /&gt;
** Если определенные группировки по элементам справочников имеют суффикс ''with folders'', в таблицу запроса будет добавлен еще один столбец &amp;lt;code&amp;gt;@FLEVEL&amp;lt;/code&amp;gt;, для каждой из группировок будет произведен запрос на сервер для получения структуры папок этих справочников, после чего, в таблицу будут добавлены строки с папками справочника с учетом предыдущих группировок и типа этих группировок (горизонтальных или вертикальных).&lt;br /&gt;
** Система производит подсчет столбцов агрегации для добавленных строк с учетом столбцов уровня группировки (''@LEVEL'') и столбцов уровня вложения папок (''@FLEVEL''), столбцы с простыми функциями агрегации находятся путем сложения столбцов нижних группировок, для столбцов со сложными функциями агрегации система создает, компилирует и выполняет выражения, для нахождения результатов агрегации.&lt;br /&gt;
** Если установки запроса позволяют, система удаляет оригинальные строки запроса (с уровнем ''@LEVEL'' равным 0), для экономии памяти, так как новые строки содержат все необходимые данные.&lt;br /&gt;
* Программа может использовать результат запроса в режиме выборки ([[Query.Next|Next]]) и получать значения переменных запроса на каждом из его уровней. Программа также может использовать ''обработанную таблицу запроса'' напрямую.&lt;br /&gt;
&lt;br /&gt;
===Замечания по оптимизации выполнения запроса===&lt;br /&gt;
Полная загрузка всех объектов в таблицу запроса может происходить достаточно долго, большое количество объектов использует много памяти, может даже получиться ситуация, когда для выполнения запроса программе не хватает памяти. Выполнение запроса можно оптимизировать. Ниже даны обычные способы оптимизации запросов:&lt;br /&gt;
* Для запросов, не использующих данные оригинальных строк запроса, -- самой нижней группировки запроса, можно использовать функцию постобработки &amp;lt;code&amp;gt;RemoveLev0Lines&amp;lt;/code&amp;gt; для удаления этих строк после окончания выполнения запроса, что освобождает некоторое количество памяти после выполнения запроса.&lt;br /&gt;
* Если запрос оперирует большим числом объектов, можно производить загрузку объектов в режиме только заголовков (см. [[Query.Execute|Execute]]). В запросе с полной постобработкой невозможно оставить объекты в столбцах группировки полностью незагруженными, так как в момент сортировки таблицы запроса для таких объектов необходимо присутствие реквизитов по которым происходит сортировка. Нужно также иметь в виду при обходе таблицы запроса с помощью функции [[Query.Next|Next]], что объекты из таблицы необходимо получать копированием (&amp;lt;code&amp;gt;&amp;lt;Запрос&amp;gt;.&amp;lt;Имя переменной&amp;gt;.Copy()&amp;lt;/code&amp;gt;), либо использовать [[Сборщик объектов]], иначе эти объекты будут полностью загружены из базы данных в процессе выполнения обработки и останутся в памяти до удаления запроса (так как они будут присутствовать в таблице запроса), что нивелирует попытку оптимизации.&lt;br /&gt;
* После выполнения первого этапа запроса, можно осуществить загрузку только тех объектов, которые участвуют в группировке и требуются при обработке запроса, остальные столбцы можно удалить, либо использовать функцию постобработки &amp;lt;code&amp;gt;SkipVariables&amp;lt;/code&amp;gt; для того, чтобы пропустить создание определенных столбцов в таблице результата. Если же какие-то столбцы по-прежнему требуются в таблице запроса, однако, их загрузка не имеет смысла, можно использовать функцию постобработки &amp;lt;code&amp;gt;DoNotMassLoadBeforeAggregation&amp;lt;/code&amp;gt;, чтобы в момент выполнения второго этапа исключить загрузку объектов (нужно помнить, однако, что объекты в столбцах сортировки должны быть уже загружены в полном или частичном режимах, иначе в момент сортировки каждый из объектов будет загружаться при его добавлении в сортированную таблицу, что замедлит выполнение сортировки).&lt;br /&gt;
* Если нет необходимости в использовании горизонтальных группировок или группировок по папкам справочником, а также, если столбцы агрегации не содержат сложных функций агрегации, можно выполнить запрос в линейном режиме. Это позволит остановить второй этап выполнения запроса на моменте сортировки таблицы, после чего результат запроса можно обходить с помощью функции [[Query.Next|Next]] и получить значения переменных, в том числе переменных агрегации (для последних применяются особые функции запроса [[Query.Compute|Compute]], [[Query.BegTotals|BegTotals]] и [[Query.EndTotals|EndTotals]]). Так как в таблицу запроса не будут добавлены дополнительные строки группировки, ее размер может существенно уменьшиться (особенно для запросов с большим количеством группировок), однако, системе придется вычислять значения агрегации &amp;quot;на лету&amp;quot;, что может замедлить вывод результата запроса на экран, кроме того функция [[Query.Next|Next]] будет работать медленнее.&lt;br /&gt;
* Если при выводе результата запроса на экран будут применяться дополнительные условия, отбирающие отдельные записи запроса, эти условия можно выполнить после окончания первого этапа выполнения запроса, до начала выполнения второго этапа, при этом ненужные строки можно удалять непосредственно из необработанной таблицы запроса. Уменьшение размера таблицы запроса уменьшит количество загружаемых объектов, что уменьшит потребность в памяти.&lt;br /&gt;
* Если результат запроса выгружается во внешний источник в виде линейной таблицы, нет необходимости в выполнении второго этапа запроса вообще. Программа может использовать необработанную таблицу запроса, получая из нее данные по своему усмотрению, однако, не нужно забывать, что для экономии памяти, объекты из таблицы нужно получать с помощью копирования (см. выше) или с использованием [[Сборщик объектов|сборщика объектов]].&lt;br /&gt;
* Если, даже после всех оптимизаций, запрос получается настолько большим, что не вмещается в память, можно рассмотреть либо вариант работы с запросом в среде 64-битного клиента на машине с увеличенным объемом памяти, либо использование [[Временная таблица базы данных|временных таблиц базы данных]], которые перекладывают бремя хранения данных запроса на сервер базы данных.&lt;br /&gt;
&lt;br /&gt;
===Формат таблицы значений результата запроса===&lt;br /&gt;
Доступ к таблице результата запроса можно получить с помощью атрибута объекта запроса [[Query.ResultTable|ResultTable]]. Таблица запроса будет содержать следующие столбцы:&lt;br /&gt;
* '''&amp;lt;Наименование переменной&amp;gt;''' -- столбец, наименование которого совпадает с наименованием переменных запроса, в таких столбцах хранятся значения (в т.ч. значения агрегации) соответствующих переменных запроса.&lt;br /&gt;
* '''@LEVEL''' -- столбец, добавляемый на втором этапе выполнения запроса (который, однако, программа может добавить сама в конце первого этапа выполнения). Столбец содержит значение уровня группировки строки таблицы запроса. При этом, для оригинальных строк запроса, значение это столбца равно нулю, для строк запроса, являющихся записями первой, самой нижней группировки запроса, значение равно 1, последующие значения столбца для верхних группировок будут увеличиваться. Строки с верхними группировками запроса следуют до строк с низкими (вложенными) группировками. В обработанной таблице запроса первой строкой следует первая запись самой верхней ''n''-ной группировки запроса (где ''n'' -- количество группировок запроса), за ней следует запись более низкой ''n-1''-ой группировки запроса, и т.д. до оригинальной записи запроса с уровнем 0 (таких записей может быть более одной). Далее вся структура записей повторяется начиная с определенных уровней в зависимости от данных таблицы запроса. Строки, для которых значение в столбце ''@LEVEL'' равно '''-1''', будут пропущены при обработке запроса на втором этапе, таким образом можно исключить строки из запроса, не удаляя их. '''Внимание:''' индексы группировки в этом столбце противоположны индексам, использующимся в функциях [[Query.First|First]], [[Query.Last|Last]], [[Query.Next|Next]] и [[Query.Prev|Prev]]!&lt;br /&gt;
* '''@FLEVEL''' -- столбец, добавляемый на втором этапе выполнения запроса, для запросов имеющих столбцы с группировкой по папкам справочников. Столбец содержит уровни вложения папок для строки с текущей группировкой (столбец ''@LEVEL''). Для оригинальных элементов группировки значение этого столбца будет равным нулю или пустым значением, для папок самого верхнего уровня значение этого столбца будет равным '''1''', для вложенных папок второго уровня, значение этого столбца будет равным '''2''' и т.д. Нужно понимать, что значения столбца уровня группировки папок имеют значение только для строк таблицу с соответствующей группировкой, вне этих строк значение столбца не определено или соответствует значениям уровня папок других группировок, если они тоже группируются по своей структуре папок.&lt;br /&gt;
&lt;br /&gt;
==Список операторов и функций языка запроса==&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;border-collapse:collapse;font-size:80%;width=95%;&amp;quot;&lt;br /&gt;
! width=10%|Тип оператора или функции&lt;br /&gt;
! width=10%|Идентификатор&lt;br /&gt;
! width=10%|Применимость&lt;br /&gt;
! width=20%|Вид&lt;br /&gt;
! Описание&lt;br /&gt;
|-&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Опции запроса&lt;br /&gt;
|'''Name'''&lt;br /&gt;
|Тело запроса&lt;br /&gt;
|&amp;lt;code&amp;gt;Name &amp;lt;Имя запроса&amp;gt;;&amp;lt;/code&amp;gt;&lt;br /&gt;
|Задает наименование запроса&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Опции запроса&lt;br /&gt;
|'''Period'''&lt;br /&gt;
|Тело запроса&lt;br /&gt;
|&amp;lt;code&amp;gt;Period From &amp;lt;Начальная дата&amp;gt; to &amp;lt;Конечная дата&amp;gt;;&amp;lt;/code&amp;gt;&lt;br /&gt;
|Задает период нахождения остатков накопителей с точностью до дня (период находится в диапазоне &amp;gt;= BegOfDay(''Начальная дата''),&amp;lt; BegOfDay(''Конечная дата'')+1)&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Опции запроса&lt;br /&gt;
|'''PeriodT'''&lt;br /&gt;
|Тело запроса&lt;br /&gt;
|&amp;lt;code&amp;gt;PeriodT From &amp;lt;Начальная дата&amp;gt; to &amp;lt;Конечная дата&amp;gt;;&amp;lt;/code&amp;gt;&lt;br /&gt;
|Задает период нахождения остатков накопителей с точностью до миллисекунды (период находится в диапазоне &amp;gt;= ''Начальная дата'',&amp;lt; ''Конечная дата'')&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Опции запроса&lt;br /&gt;
|'''Limit''', '''Top'''&lt;br /&gt;
|Тело запроса&lt;br /&gt;
|&amp;lt;code&amp;gt;Limit &amp;lt;Количество записей&amp;gt;;&amp;lt;/code&amp;gt;&lt;br /&gt;
|Ограничивает результат запроса указанным количеством записей. По умолчанию ограничение отсутствует.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Опции запроса&lt;br /&gt;
|'''ForceAggregate'''&lt;br /&gt;
|Тело запроса&lt;br /&gt;
|&amp;lt;code&amp;gt;ForceAggregate;&amp;lt;/code&amp;gt;&lt;br /&gt;
|Форсирует использование режима агрегации для запроса без группировок. В этом режиме такой запрос вернет не более одной записи.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Директивы запроса&lt;br /&gt;
|'''&amp;lt;Назначение переменной&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;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Директивы запроса&lt;br /&gt;
|'''Condition''', '''Where'''&lt;br /&gt;
|Тело запроса&lt;br /&gt;
|&amp;lt;code&amp;gt;Condition &amp;lt;Условие&amp;gt;;&amp;lt;/code&amp;gt;&lt;br /&gt;
|Задает условие для отбора записей запроса.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Директивы запроса&lt;br /&gt;
|'''Sort'''&lt;br /&gt;
|Тело запроса&lt;br /&gt;
|&amp;lt;code&amp;gt;Sort &amp;lt;Переменная&amp;gt;[{+,-}][,&amp;lt;Переменная 2&amp;gt;[{+,-}]...];&amp;lt;/code&amp;gt;&lt;br /&gt;
|Задает директиву сортировки записей запроса. Может использоваться совместно и вперемешку с директивами ''Group'', ''HorGroup'', ''VerGroup''.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Директивы запроса&lt;br /&gt;
|'''Group''', '''VerGroup'''&lt;br /&gt;
|Тело запроса&lt;br /&gt;
|&amp;lt;code&amp;gt;Group &amp;lt;Переменная&amp;gt;[{+,-}][ With Folders][,&amp;lt;Переменная 2&amp;gt;[{+,-}][ With Folders]...];&amp;lt;/code&amp;gt;&lt;br /&gt;
|Задает директиву вертикальной группировки записей запроса. Может использоваться совместно и вперемешку с директивами ''Sort'', ''HorGroup''.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Директивы запроса&lt;br /&gt;
|'''HorGroup'''&lt;br /&gt;
|Тело запроса&lt;br /&gt;
|&amp;lt;code&amp;gt;HorGroup &amp;lt;Переменная&amp;gt;[{+,-}][ With Folders][,&amp;lt;Переменная 2&amp;gt;[{+,-}][ With Folders]...];&amp;lt;/code&amp;gt;&lt;br /&gt;
|Задает директиву горизонтальной группировки записей запроса. Может использоваться совместно и вперемешку с директивой ''Sort'', и следовать за директивами ''Group'', ''VerGroup''.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Операции объединения запросов&lt;br /&gt;
|'''Union All'''&lt;br /&gt;
|Между запросами в группе запросов&lt;br /&gt;
|&amp;lt;code&amp;gt;(&amp;lt;Запрос 1&amp;gt;) Union All (&amp;lt;Запрос 2&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Задает операцию объединения записей двух запросов без дополнительных условий&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Операции объединения запросов&lt;br /&gt;
|'''Inner Join''', '''Join'''&lt;br /&gt;
|Между запросами в группе запросов&lt;br /&gt;
|&amp;lt;code&amp;gt;(&amp;lt;Запрос 1&amp;gt;) Join (&amp;lt;Запрос 2&amp;gt;) On (&amp;lt;Условие объединения запросов&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Задает операцию объединения записей двух запросов с помощью конъюнкции по условию&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Операции объединения запросов&lt;br /&gt;
|'''Full Join''', '''Full Outer Join'''&lt;br /&gt;
|Между запросами в группе запросов&lt;br /&gt;
|&amp;lt;code&amp;gt;(&amp;lt;Запрос 1&amp;gt;) Full Join (&amp;lt;Запрос 2&amp;gt;) On (&amp;lt;Условие объединения запросов&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Задает операцию объединения записей двух запросов с помощью дизъюнкции по условию&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Операции объединения запросов&lt;br /&gt;
|'''Left Join''', '''Left Outer Join'''&lt;br /&gt;
|Между запросами в группе запросов&lt;br /&gt;
|&amp;lt;code&amp;gt;(&amp;lt;Запрос 1&amp;gt;) Left Join (&amp;lt;Запрос 2&amp;gt;) On (&amp;lt;Условие объединения запросов&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Задает операцию дополнения записей первого запроса переменными из второго запроса, идентификация записей происходит по условию&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Операции объединения запросов&lt;br /&gt;
|'''Right Join''', '''Right Outer Join'''&lt;br /&gt;
|Между запросами в группе запросов&lt;br /&gt;
|&amp;lt;code&amp;gt;(&amp;lt;Запрос 1&amp;gt;) Right Join (&amp;lt;Запрос 2&amp;gt;) On (&amp;lt;Условие объединения запросов&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Задает операцию дополнения записей второго запроса переменными из первого запроса, идентификация записей происходит по условию&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Директивы группы запросов&lt;br /&gt;
|'''Postprocessing'''&lt;br /&gt;
|Между запросами в группе запросов&lt;br /&gt;
|&amp;lt;code&amp;gt;Postprocessing (&amp;lt;Тело текста постобработки&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Задает директиву начала текста постобработки&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Опции постобработки&lt;br /&gt;
|'''Sort'''&lt;br /&gt;
|В теле текста постобработки&lt;br /&gt;
|&amp;lt;code&amp;gt;Sort &amp;lt;Переменная&amp;gt;[{+,-}][,&amp;lt;Переменная 2&amp;gt;[{+,-}]...];&amp;lt;/code&amp;gt;&lt;br /&gt;
|Задает директиву сортировки записей результата запроса во время выполнения постобработки. Может использоваться совместно и вперемешку с директивами ''Group'', ''HorGroup'', ''VerGroup''. Использование по крайней мере одной из директив сортировки или группировки в теле текста постобработки полностью игнорирует директивы сортировки или группировки из текстов запросов в момент выполнения постобработки и использует директивы из этого текста.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Опции постобработки&lt;br /&gt;
|'''Group''', '''VerGroup'''&lt;br /&gt;
|В теле текста постобработки&lt;br /&gt;
|&amp;lt;code&amp;gt;Group &amp;lt;Переменная&amp;gt;[{+,-}][ With Folders][,&amp;lt;Переменная 2&amp;gt;[{+,-}][ With Folders]...];&amp;lt;/code&amp;gt;&lt;br /&gt;
|Задает директиву вертикальной группировки записей запроса во время выполнения постобработки. Может использоваться совместно и вперемешку с директивами ''Sort'', ''HorGroup''. Использование по крайней мере одной из директив сортировки или группировки в теле текста постобработки полностью игнорирует директивы сортировки или группировки из текстов запросов в момент выполнения постобработки и использует директивы из этого текста.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Опции постобработки&lt;br /&gt;
|'''HorGroup'''&lt;br /&gt;
|В теле текста постобработки&lt;br /&gt;
|&amp;lt;code&amp;gt;HorGroup &amp;lt;Переменная&amp;gt;[{+,-}][ With Folders][,&amp;lt;Переменная 2&amp;gt;[{+,-}][ With Folders]...];&amp;lt;/code&amp;gt;&lt;br /&gt;
|Задает директиву горизонтальной группировки записей запроса во время выполнения постобработки. Может использоваться совместно и вперемешку с директивой ''Sort'', и следовать за директивами ''Group'', ''VerGroup''. Использование по крайней мере одной из директив сортировки или группировки в теле текста постобработки полностью игнорирует директивы сортировки или группировки из текстов запросов в момент выполнения постобработки и использует директивы из этого текста.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Опции постобработки&lt;br /&gt;
|'''No Grouping'''&lt;br /&gt;
|В теле текста постобработки&lt;br /&gt;
|&amp;lt;code&amp;gt;No Grouping;&amp;lt;/code&amp;gt;&lt;br /&gt;
|Задает директиву запрета выполнения группировки на этапе постобработки. Таблица запроса, после ее получения с сервера, будет представлена как результат выполнения линейного запроса по элементам без агрегации&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Опции постобработки&lt;br /&gt;
|'''Aggregate'''&lt;br /&gt;
|В теле текста постобработки&lt;br /&gt;
|&amp;lt;code&amp;gt;Aggregate &amp;lt;Имя переменной&amp;gt; As &amp;lt;Выражение&amp;gt;;&amp;lt;/code&amp;gt;&lt;br /&gt;
|Задает способ агрегации переменной на этапе выполнения постобработки. По умолчанию формула агрегации переменных берутся из тела запроса, однако, это поведение можно изменить. Заданные формулы будут использоваться для агрегации переменных для любых уровней группировки запроса. Выражение имеют некоторые ограничения по сравнения с выражениями запросов, а именно:&lt;br /&gt;
* Невозможно использование свободного пути к реквизиту (на этапе постобработки система работает только с данными таблицы результата)&lt;br /&gt;
* Функции агрегации ''BegTotals'', ''EndTotals'', ''Income'', ''Expense'' эмулируют поведение соответствующих функций на сервере, но в отличие от серверных функций могут использовать обычные выражения, как свои аргументы, и не могут использовать наименование актива. В этом режиме функции отличаются от функции суммы только при наличии группировок по времени (день, неделя, месяц, год).&lt;br /&gt;
* Некоторые функции могут выполняться несколько иначе (функции сервера базы данных могут немного отличаться по действию от функций локальной системы)&lt;br /&gt;
* Возможно использование внешних функций программы не только для нахождения констант, но и как элементов выражений.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Опции постобработки&lt;br /&gt;
|'''Aggregate1'''&lt;br /&gt;
|В теле текста постобработки&lt;br /&gt;
|&amp;lt;code&amp;gt;Aggregate1 &amp;lt;Имя переменной&amp;gt; As &amp;lt;Выражение&amp;gt;;&amp;lt;/code&amp;gt;&lt;br /&gt;
|Задает способ агрегации переменной на этапе выполнения постобработки. По умолчанию формула агрегации переменных берутся из тела запроса, однако, это поведение можно изменить. Заданные формулы будут использоваться для агрегации переменных только для нижнего (первого) уровня группировки запроса, для уровней выше первого будут использованы формулы из тела запроса или указанные в директиве постобработки ''Aggregate''. См. также директиву ''Aggregate'' для описания ограничений выражения.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Опции постобработки&lt;br /&gt;
|'''No Aggregation'''&lt;br /&gt;
|В теле текста постобработки&lt;br /&gt;
|&amp;lt;code&amp;gt;No Aggregation For &amp;lt;Имя переменной&amp;gt;;&amp;lt;/code&amp;gt;&lt;br /&gt;
|Запрещает выполнение агрегации для указанной переменной. Переменные будут трактоваться, как переменные без агрегации, и их значение будет копироваться на все уровни группировки запроса без выполнения формул агрегации.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Опции постобработки&lt;br /&gt;
|'''ForceAggregateSingleLineLev1'''&lt;br /&gt;
|В теле текста постобработки&lt;br /&gt;
|&amp;lt;code&amp;gt;ForceAggregateSingleLineLev1 &amp;lt;1 или 0&amp;gt;;&amp;lt;/code&amp;gt; (по умолчанию '''0''')&lt;br /&gt;
|Форсирует выполнения формул агрегации для нахождения значения переменной для первого уровня группировки. По умолчанию система будет осуществлять более быструю операцию копирования значений без выполнения формулы агрегации в случае, когда агрегация выполняется простой функцией сложения и когда на нулевом уровне группировки содержится всего одна строка, соответствующая текущему первому уровню группировки.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Опции постобработки&lt;br /&gt;
|'''ForceAggregateSingleLine'''&lt;br /&gt;
|В теле текста постобработки&lt;br /&gt;
|&amp;lt;code&amp;gt;ForceAggregateSingleLine &amp;lt;1 или 0&amp;gt;;&amp;lt;/code&amp;gt; (по умолчанию '''0''')&lt;br /&gt;
|Форсирует выполнения формул агрегации для нахождения значения переменной для любого уровня группировки. По умолчанию система будет осуществлять более быструю операцию копирования значений без выполнения формулы агрегации в случае, когда агрегация выполняется простой функцией сложения и когда на предыдущем уровне группировки содержится всего одна строка, соответствующая текущему уровню группировки.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Опции постобработки&lt;br /&gt;
|'''DoNotAggregate'''&lt;br /&gt;
|В теле текста постобработки&lt;br /&gt;
|&amp;lt;code&amp;gt;DoNotAggregate &amp;lt;1 или 0&amp;gt;;&amp;lt;/code&amp;gt; (по умолчанию '''0''')&lt;br /&gt;
|Опция запрещает выполнение агрегации для всех переменных запроса. Все переменные будут трактоваться, как переменные без агрегации, и их значения будут копироваться на все уровни группировки запроса без выполнения формул агрегации.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Опции постобработки&lt;br /&gt;
|'''DoNotMassLoadBeforeAggregation'''&lt;br /&gt;
|В теле текста постобработки&lt;br /&gt;
|&amp;lt;code&amp;gt;DoNotMassLoadBeforeAggregation &amp;lt;1 или 0&amp;gt;;&amp;lt;/code&amp;gt; (по умолчанию '''0''')&lt;br /&gt;
|Опция запрещает выполнение функции [[MassLoadObjects]] до начала сортировки в момент выполнения этапа постобработки. Программа должна самостоятельно выполнить функцию ''MassLoadObjects'' для требуемых столбцов таблицы в требуемом режиме до вызова второго этапа запроса, иначе сортировка таблицы запроса будет выполняться медленнее.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Опции постобработки&lt;br /&gt;
|'''RemoveLev0Lines'''&lt;br /&gt;
|В теле текста постобработки&lt;br /&gt;
|&amp;lt;code&amp;gt;RemoveLev0Lines &amp;lt;1 или 0&amp;gt;;&amp;lt;/code&amp;gt; (по умолчанию '''0''')&lt;br /&gt;
|Опция удаляет оригинальные записи запроса после выполнения постобработки. Данные записи уже не имеют значения, если обработка результата запроса осуществляется стандартными средствами запроса (''Next'' и пр.). Опция не работает для линейных запросов. Опция может освободить некоторое количество памяти для запросов с большими таблицами результатов, также она полезна для групп запросов, состоящих из более чем одного запроса.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Опции постобработки&lt;br /&gt;
|'''AllowIncompatibleSortPaths'''&lt;br /&gt;
|Тело запроса, тело текста постобработки&lt;br /&gt;
|&amp;lt;code&amp;gt;AllowIncompatibleSortPaths &amp;lt;1 или 0&amp;gt;;&amp;lt;/code&amp;gt; (по умолчанию '''0''')&lt;br /&gt;
|Опция отключает проверку совместимости путей сортировки и группировки в процессе постобработки. Функция может использоваться, если переменные заполняются программно до этапа постобработки, и они совместимы с последующими переменными группировки, но программа не может знать об этом. Опция должна следовать до директив сортировки или группировки. Для примера, см. статью [[Query.AllowIncompatibleSortPaths|AllowIncompatibleSortPaths]].&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Опции постобработки&lt;br /&gt;
|'''SkipVariables'''&lt;br /&gt;
|В теле текста постобработки&lt;br /&gt;
|&amp;lt;code&amp;gt;SkipVariables &amp;lt;Переменная 1&amp;gt;[, &amp;lt;Переменная 2&amp;gt;...];&amp;lt;/code&amp;gt;&lt;br /&gt;
|Опция позволяет исключить ненужные переменные из таблицы результата запроса, что экономит память.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Опции постобработки&lt;br /&gt;
|'''Copy''', '''CopyTo'''&lt;br /&gt;
|В теле текста постобработки&lt;br /&gt;
|&amp;lt;code&amp;gt;Copy &amp;lt;Переменная с временной таблицей базы данных&amp;gt;[:&amp;lt;Переменная 1&amp;gt;, &amp;lt;Переменная 2&amp;gt; ...];&amp;lt;/code&amp;gt;&lt;br /&gt;
|Опция позволяет не возвращать результат запроса в виде таблицы результата, а копировать его записи в указанную временную таблицу базы данных. Так как временные таблицы базы данных хранятся в базе данных, такой подход позволит выполнять запросы, не помещающиеся в память в обычном режиме. Копируемые переменные запроса должны иметь имена, совпадающие с именами временной таблицы. Если не указывать список переменных, будут скопированы все переменные, для которых в таблице присутствуют соответствующие имена.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Опции постобработки&lt;br /&gt;
|'''ExactSumVariables''' {{Planned}}&lt;br /&gt;
|В теле текста постобработки&lt;br /&gt;
|&amp;lt;code&amp;gt;ExactSumVariables &amp;lt;Имя переменной&amp;gt;:&amp;lt;Количество знаков&amp;gt;[,&amp;lt;Имя переменной 2&amp;gt;:&amp;lt;Количество знаков&amp;gt;...];&amp;lt;/code&amp;gt;&lt;br /&gt;
|Опция позволяет использовать точное сложение для функции сложения при агрегации указанных переменных. См. статью [[Tab.Sum|Sum]] для дополнительного описания.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''?''', '''_If'''&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;
|Функция возвращает результат выражения, заданного во втором аргументе, если логическое выражение, заданное в первом аргументе возвращает правду, иначе функция возвращает результат выражения, заданного во третьем аргументе&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''_Case'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;_Case(&amp;lt;Выражение&amp;gt;,&amp;lt;Значение 1&amp;gt;,&amp;lt;Выражение-результат 1&amp;gt;[,&amp;lt;Значение 2&amp;gt;,&amp;lt;Выражение-результат 2&amp;gt;...])&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция возвращает результат выражения, заданного третьим аргументом, если результат вычисления первого выражения равен результату вычисления выражения, заданного вторым аргументом, иначе проверка соответствия результата первого вычисления выражения происходит последовательно для четвертого, шестого и т.п. аргументов, если они заданы и функция возврати соответствующее значение выражения-результата. Если ни одно из условий не выполняется, функция возвращает NULL (пустое значение сервера базы данных).&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''CASE'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;CASE &amp;lt;Выражение&amp;gt; WHEN &amp;lt;Значение 1&amp;gt; THEN &amp;lt;Выражение-результат 1&amp;gt; [WHEN &amp;lt;Значение 2&amp;gt; THEN &amp;lt;Выражение-результат 2&amp;gt;][ELSE &amp;lt;Выражение-результат по умолчанию&amp;gt;] END&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция является альтернативной записью функции ''_Case'', включающей также выражение по умолчанию, возвращаемое вместо NULL, когда ни одного из условий функции не выполнено.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции агрегации языка запросов&lt;br /&gt;
|'''Sum'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;Sum(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция агрегации, находящая сумму выражений каждой из записей базы данных, поглощенных в результат агрегации&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции агрегации языка запросов&lt;br /&gt;
|'''Min'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;Min(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция агрегации, находящая минимальное из всех значений выражения для каждой из записей базы данных, поглощенных в результат агрегации. Результатом выражения могут быть не только числовые значения.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции агрегации языка запросов&lt;br /&gt;
|'''Max'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;Max(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция агрегации, находящая максимальное из всех значений выражения для каждой из записей базы данных, поглощенных в результат агрегации. Результатом выражения могут быть не только числовые значения.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции агрегации языка запросов&lt;br /&gt;
|'''Avg'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;Avg(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция агрегации, находящая среднее из всех значений выражения для каждой из записей базы данных, поглощенных в результат агрегации&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции агрегации языка запросов&lt;br /&gt;
|'''Count'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;Count()&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция агрегации, количество записей базы данных, поглощенных в результат агрегации&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции агрегации языка запросов&lt;br /&gt;
|'''BegTotals'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;BegTotals(&amp;lt;Наименование актива накопителя&amp;gt;[,&amp;lt;Дата нахождения сальдо&amp;gt;])&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция агрегации, позволяющая найти начальное сальдо актива накопителя на начальную дату запроса, либо дату, указанную вторым аргументом. Сальдо находит с точностью до дня даты.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции агрегации языка запросов&lt;br /&gt;
|'''BegTotalsT'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;BegTotalsT(&amp;lt;Наименование актива накопителя&amp;gt;[,&amp;lt;Дата нахождения сальдо&amp;gt;])&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция агрегации, позволяющая найти начальное сальдо актива накопителя на начальную дату запроса, либо дату, указанную вторым аргументом. Сальдо находит с точностью до секунды даты.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции агрегации языка запросов&lt;br /&gt;
|'''EndTotals'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;EndTotals(&amp;lt;Наименование актива накопителя&amp;gt;[,&amp;lt;Дата нахождения сальдо&amp;gt;])&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция агрегации, позволяющая найти конечное сальдо актива накопителя на конечную дату запроса, либо дату, указанную вторым аргументом. Сальдо находит с точностью до дня даты (включает весь день даты).&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции агрегации языка запросов&lt;br /&gt;
|'''EndTotalsT'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;EndTotalsT(&amp;lt;Наименование актива накопителя&amp;gt;[,&amp;lt;Дата нахождения сальдо&amp;gt;])&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция агрегации, позволяющая найти конечное сальдо актива накопителя на конечную дату запроса, либо дату, указанную вторым аргументом. Сальдо находит с точностью до секунды даты (включает все записи до и включая указанную секунду даты).&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции агрегации языка запросов&lt;br /&gt;
|'''Debit''', '''Expense'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;Expense(&amp;lt;Наименование актива накопителя&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция агрегации, позволяющая найти расход актива накопителя за период запроса с точностью до дня периода (конец период включает весь день конечной даты). Для накопителей, имеющих признак записей &amp;quot;приход&amp;quot; или &amp;quot;расход&amp;quot;, данная функция будет находить только сумму записей с признаком &amp;quot;расход&amp;quot;, для остальных накопителей, функция будет находить сумму записей со значением актива меньше нуля.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции агрегации языка запросов&lt;br /&gt;
|'''Credit''', '''Income'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;Income(&amp;lt;Наименование актива накопителя&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция агрегации, позволяющая найти приход актива накопителя за период запроса с точностью до дня периода (конец период включает весь день конечной даты). Для накопителей, имеющих признак записей &amp;quot;приход&amp;quot; или &amp;quot;расход&amp;quot;, данная функция будет находить только сумму записей с признаком &amp;quot;приход&amp;quot;, для остальных накопителей, функция будет находить сумму записей со значением актива больше нуля.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''FilterProperty'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;FilterProperty(&amp;lt;Выражение&amp;gt;,&amp;lt;Тип базы данных для проверки&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция возвращает значение выражения, указанного в первом аргументе, если это значение является объектом с типом, заданным вторым аргументом, иначе функция возвращает NULL (пустое значение). Пример: &amp;lt;code&amp;gt;FilterProperty(Ref.Номенклатура.СкладИлиАвтомашина,Ref.Склады)&amp;lt;code&amp;gt;.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''CaseGetProperty'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;CaseGetProperty(&amp;lt;Выражение&amp;gt;,&amp;lt;Тип базы данных для проверки&amp;gt;,&amp;lt;Путь к реквизиту&amp;gt;[,&amp;lt;Тип базы данных для проверки 2&amp;gt;,&amp;lt;Путь к реквизиту 2&amp;gt;...])&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция возвращает значение реквизита, указанного с помощью пути в третьем аргументе, это значение выражения первого аргумента является объектом с типом, заданным вторым аргументом, иначе функция сравнивает тип выражения первого аргумента с типом 4-го аргумента, и возвращает значение реквизита, заданного пятым аргументом и т.д. Если ни одно из условий не выполняется, функция возвращает NULL (пустое значение).&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''Coalesce'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;Coalesce(&amp;lt;Выражение 1&amp;gt;[,&amp;lt;Выражение 2&amp;gt;...])&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция первое из непустых (NULL) аргументов. Может применяться, к примеру, после объединений запросов (особенно для объединений типа ''Full Join'')&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''IsNULL'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;IsNULL(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция возвращает правду, если выражение является пустым значением (NULL), иначе функция возвращает ложь. Может применяться, к примеру, после объединений запросов (особенно для объединений типа ''Full Join'')&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''IsEmpty'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;IsEmpty(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция возвращает правду, если выражение является пустым объектом базы данных, иначе функция возвращает ложь. ''Внимание'': функция работает только с объектами, она будет неверно работать со строками, числами или датами (в отличие от функции системы [[IsEmpty]])&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''IsType'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;IsType(&amp;lt;Выражение&amp;gt;,&amp;lt;Тип БД 1&amp;gt;[,&amp;lt;Тип БД 2&amp;gt;...])&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция возвращает правду, если выражение является объектом с типом, заданным любым из последующих аргументов, иначе функция возвращает ложь. Пример: &amp;lt;code&amp;gt;IsType(зПеременная,Ref.Номенклатура,Ref.ОсновныеСредства)&amp;lt;/code&amp;gt;. Кроме полного типа и вида данных, разрешается также задавать только тип данных. Пример: &amp;lt;code&amp;gt;IsType(зПеременная,Ref)&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''Str'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;Str(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция превращает значение выражения в строку&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''Length'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;Length(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция возвращает длину строки выражения&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''Left'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;Left(&amp;lt;Выражение&amp;gt;,&amp;lt;Выражение, число символов&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция возвращает левую подстроку с указанным числом символов из исходной строки&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''Right'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;Right(&amp;lt;Выражение&amp;gt;,&amp;lt;Выражение, число символов&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция возвращает правую подстроку с указанным числом символов из исходной строки&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''Mid'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;Mid(&amp;lt;Выражение&amp;gt;,&amp;lt;Выражение, начальный символ&amp;gt;[,&amp;lt;Выражение, число символов&amp;gt;])&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция возвращает подстроку с указанным начальным символом и длиной, если длина не указана, функция возвращает подстроку с начальным символом и до конца строки&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''Pos'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;Pos(&amp;lt;Выражение, подстрока&amp;gt;,&amp;lt;Выражение, строка поиска&amp;gt;[,&amp;lt;Выражение, начинать поиск с символа&amp;gt;])&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция возвращает позицию найденной подстроки в указанной строке (если требуется, поиск будет происходить начиная с указанного символа), либо 0, если подстрока не найдена. Даже при наличии третьего аргумента, будет возвращена позиция в оригинальной строке поиска (с учетом числа пропущенных с начала строки символов).&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''UpperCase'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;UpperCase(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция возвращает строковое выражение, переведенное в верхний регистр&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''LowerCase'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;LowerCase(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция возвращает строковое выражение, переведенное в нижний регистр&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''Asc'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;Asc(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция возвращает код первого символа строкового выражения&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''Chr'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;Chr(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция возвращает символ с кодом, заданным аргументом&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''Replace'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;Replace(&amp;lt;Выражение, строка поиска&amp;gt;,&amp;lt;Выражение, подстрока&amp;gt;,&amp;lt;Выражение, строка замены&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция возвращает строку, заданную первым аргументом, в которой все вхождения подстроки, заданной вторым аргументом, заменены на подстроку, заданную третьим аргументом&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''RepeatStr'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;RepeatStr(&amp;lt;Выражение, подстрока&amp;gt;,&amp;lt;Выражение, количество повторов&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция возвращает строку созданную из подстроки, заданной первым аргументом, повторенной количество раз, заданное вторым аргументом&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''Reverse'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;Reverse(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция возвращает строку, обращенную посимвольно из строки, заданной в первом аргументе&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''TrimL'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;TrimL(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция возвращает строку, полученную из первого аргумента путем удаления пробелов с начала строки (в отличие от функции языка [[TrimL]], функция запроса удаляет только пробелы)&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''TrimR'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;TrimR(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция возвращает строку, полученную из первого аргумента путем удаления пробелов с конца строки (в отличие от функции языка [[TrimR]], функция запроса удаляет только пробелы)&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''Trim'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;Trim(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция возвращает строку, полученную из первого аргумента путем удаления пробелов с начала и с конца строки (в отличие от функции языка [[Trim]], функция запроса удаляет только пробелы)&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''Abs'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;Abs(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция абсолютное (не отрицательное) значение числа, заданного первым аргументом&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''Degrees'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;Degrees(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция переводит число, заданное первым аргументом, из радианов в градусы&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''Radians'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;Radians(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция переводит число, заданное первым аргументом, из градусов в радианы&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''Round'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;Round(&amp;lt;Выражение&amp;gt;,[&amp;lt;Выражение для количества знаков&amp;gt;])&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция находит округленное значение первого аргумента до количества знаков после точки, определяемое вторым аргументом.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''_PI'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;_PI()&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция возвращает число π (пи)&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''_E'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;_E()&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция возвращает число e (основание натурального логарифма)&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''Log'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;Log(&amp;lt;Выражение&amp;gt;,&amp;lt;Выражение для основания&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция возвращает логарифм числа, заданного первым аргументом по основанию, заданному вторым аргументом&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''Log10'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;Log10(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция возвращает десятичный логарифм числа, заданного первым аргументом&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''Ln'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;Ln(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция возвращает натуральный логарифм числа, заданного первым аргументом&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''Arccos'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;Arccos(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция находит арккосинус числа, заданного первым аргументом&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''Arcsin'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;Arcsin(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция находит арксинус числа, заданного первым аргументом&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''Arctg'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;Arctg(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция находит арктангенс числа, заданного первым аргументом&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''Arcctg'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;Arcctg(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция находит арккотангенс числа, заданного первым аргументом&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''Cos'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;Cos(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция находит косинус числа, заданного в радианах первым аргументом&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''Sin'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;Sin(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция находит синус числа, заданного в радианах первым аргументом&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''Tg'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;Tg(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция находит тангенс числа, заданного первым аргументом&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''Ctg'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;Ctg(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция находит котангенс числа, заданного первым аргументом&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''Sqrt'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;Sqrt(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция находит квадратный корень числа, заданного первым аргументом&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''Exp'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;Exp(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция находит экспоненту числа, заданного первым аргументом (т.е. результат возведения основания натурального логарифма в степень, заданную аргументом)&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''Pow'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;Pow(&amp;lt;Выражение&amp;gt;,&amp;lt;Выражение, показатель степени&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция находит результат возведения первого аргумента в степень, определяемую вторым аргументом&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''Sqr'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;Sqr(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция находит квадрат числа, заданного первым аргументом&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''Sign'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;Sign(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция возвращает знак числа, заданного первым аргументом. Для положительных значений функция возвратит 1, для отрицательных -1, для нулевых, ноль&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''Floor'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;Floor(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция возвращает аргумент, округленный до целого в меньшую сторону&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''Ceiling'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;Ceiling(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция возвращает аргумент, округленный до целого в большую сторону&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''Trunc''', '''Int'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;Trunc(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция возвращает целую часть аргумента а также может использоваться для превращения строки в целое число&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''Frac'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;Frac(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция возвращает вещественную (дробную) часть аргумента&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''Number'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;Number(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция превращает строковой аргумент в число&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''Date'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;Date(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция конвертирует строковой аргумент в дату. Строка должна быть задана в виде &amp;lt;code&amp;gt;YYYY-MM-DD[ HH:MM:SS[.sss]]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''AddMonth'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;AddMonth(&amp;lt;Выражение&amp;gt;[,&amp;lt;Выражение для количества месяцев&amp;gt;])&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция добавляет к аргументу-дате заданное вторым аргументом количество месяцев. Добавляемое количество может быть отрицательным&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''AddDay'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;AddDay(&amp;lt;Выражение&amp;gt;[,&amp;lt;Выражение для количества дней&amp;gt;])&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция добавляет к аргументу-дате заданное вторым аргументом количество дней. Добавляемое количество может быть отрицательным&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''BegOfDay'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;BegOfDay(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция возвращает дату, заданную первым аргументом, измененную на начало дня&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''EndOfDay'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;EndOfDay(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция возвращает дату, заданную первым аргументом, время которой изменено на 23:59:59.999&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''BegOfMonth'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;BegOfMonth(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция возвращает дату, заданную первым аргументом, измененную на начало месяца&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''EndOfMonth'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;EndOfMonth(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция возвращает дату, заданную первым аргументом, измененную на начало последнего дня месяца&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''EndOfMonthT'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;EndOfMonthT(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция возвращает дату, заданную первым аргументом, измененную на последний день месяца, при этом время изменено на 23:59:59.999&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''BegOfQuarter'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;BegOfQuarter(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция возвращает дату, заданную первым аргументом, измененную на начало квартала&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''EndOfQuarter'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;EndOfQuarter(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция возвращает дату, заданную первым аргументом, измененную на начало последнего дня квартала&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''EndOfQuarterT'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;EndOfQuarterT(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция возвращает дату, заданную первым аргументом, измененную на последний день квартала, при этом время изменено на 23:59:59.999&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''BegOfYear'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;BegOfYear(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция возвращает дату, заданную первым аргументом, измененную на начало года&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''EndOfYear'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;EndOfYear(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция возвращает дату, заданную первым аргументом, измененную на начало последнего дня года&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''EndOfYearT'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;EndOfYearT(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция возвращает дату, заданную первым аргументом, измененную на последний день года, при этом время изменено на 23:59:59.999&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''BegOfWeek'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;BegOfWeek(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция возвращает дату, заданную первым аргументом, измененную на начало недели&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''EndOfWeek'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;EndOfWeek(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция возвращает дату, заданную первым аргументом, измененную на начало последнего дня недели&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''EndOfWeekT'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;EndOfWeekT(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция возвращает дату, заданную первым аргументом, измененную на последний день недели, при этом время изменено на 23:59:59.999&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''GetYear'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;GetYear(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция возвращает номер года даты-аргумента. Год возвращается в полном формате (YYYY)&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''GetMonth'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;GetMonth(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция возвращает номер месяца года даты-аргумента&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''GetDay'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;GetDay(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция возвращает номер дня месяца даты-аргумента&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''GetHour'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;GetHour(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция возвращает номер часа времени даты-аргумента&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''GetMinute'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;GetMinute(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция возвращает номер минуты времени даты-аргумента&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''GetSecond'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;GetSecond(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция возвращает номер секунды времени даты-аргумента&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''GetMSecond'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;GetMSecond(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция возвращает номер миллисекунды времени даты-аргумента&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''WeekOfYear'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;WeekOfYear(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция возвращает номер недели года даты-аргумента&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''DayOfYear'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;DayOfYear(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция возвращает номер дня года даты-аргумента&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Функции языка запросов&lt;br /&gt;
|'''DayOfWeek'''&lt;br /&gt;
|В выражениях&lt;br /&gt;
|&amp;lt;code&amp;gt;DayOfWeek(&amp;lt;Выражение&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Функция возвращает номер дня недели даты-аргумента&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Функции и атрибуты объекта запроса==&lt;br /&gt;
{{function header}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Query.ResultTable|ResultTable]]&lt;br /&gt;
|form={{Grey|Query.}}'''ResultTable''':''&amp;lt;Таблица результата запроса (TAB)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Получить таблицу результата запроса. Запрос должен быть выполненным.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Query.ForceAggregateSingleLineLev1|ForceAggregateSingleLineLev1]]&lt;br /&gt;
|form={{Grey|Query.}}'''ForceAggregateSingleLineLev1''':''&amp;lt;Значение режима форсирования суммирования срок первого уровня группировки (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Получить или установить значение режима форсирования суммирования строк первого уровня группировки при постобработке запроса. Атрибут соответствует опции постобработки ''ForceAggregateSingleLineLev1''. Атрибут имеет смысл изменять после первого этапа выполнения запроса до начала второго.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Query.ForceAggregateSingleLine|ForceAggregateSingleLine]]&lt;br /&gt;
|form={{Grey|Query.}}'''ForceAggregateSingleLine''':''&amp;lt;Значение режима форсирования суммирования срок любого уровня группировки (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Получить или установить значение режима форсирования суммирования строк любого уровня группировки при постобработке запроса. Атрибут соответствует опции постобработки ''ForceAggregateSingleLine''. Атрибут имеет смысл изменять после первого этапа выполнения запроса до начала второго.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Query.DoNotAggregate|DoNotAggregate]]&lt;br /&gt;
|form={{Grey|Query.}}'''DoNotAggregate''':''&amp;lt;Значение запрета режима агрегации (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Получить или установить значение запрета режима агрегации при постобработке запроса. Атрибут соответствует опции постобработки ''DoNotAggregate''. Атрибут имеет смысл изменять после первого этапа выполнения запроса до начала второго.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Query.DoNotMassLoadBeforeAggregation|DoNotMassLoadBeforeAggregation]]&lt;br /&gt;
|form={{Grey|Query.}}'''DoNotMassLoadBeforeAggregation''':''&amp;lt;Значение запрета режима загрузки (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Получить или установить значение запрета режима загрузки при постобработке запроса. Атрибут соответствует опции постобработки ''DoNotMassLoadBeforeAggregation''. Атрибут имеет смысл изменять после первого этапа выполнения запроса до начала второго.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Query.RemoveLev0Lines|RemoveLev0Lines]]&lt;br /&gt;
|form={{Grey|Query.}}'''RemoveLev0Lines''':''&amp;lt;Значение режима удаления оригинальных строк таблицы запроса (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Получить или установить значение режима удаления оригинальных строк таблицы запроса. Атрибут соответствует опции постобработки ''RemoveLev0Lines''. Атрибут имеет смысл изменять после первого этапа выполнения запроса до начала второго.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Query.AllowIncompatibleSortPaths|AllowIncompatibleSortPaths]]&lt;br /&gt;
|form={{Grey|Query.}}'''AllowIncompatibleSortPaths''':''&amp;lt;Значение режима отключения в постобработке проверки несовместимых директив сортировки (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Получить или установить значение режима отключения в постобработке проверки несовместимых директив сортировки. Атрибут соответствует опции постобработки ''AllowIncompatibleSortPaths''. Атрибут имеет смысл изменять после первого этапа выполнения запроса до начала второго.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Query.ColumnName|&amp;lt;Имя столбца&amp;gt;]]&lt;br /&gt;
|form={{Grey|Query.}}'''&amp;lt;Имя столбца&amp;gt;''':''&amp;lt;Значение ячейки&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Получить или установить значение столбца текущей строки таблицы результата запроса, для линейных запросов вычислений значений столбцов агрегации не производится. Запрос должен быть выполненным.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Query.Get|Get]]&lt;br /&gt;
|form={{Grey|Query.}}'''Get''':(''&amp;lt;Наименование или индекс столбца (INT,STRING)&amp;gt;''):''&amp;lt;Значение ячейки столбца (TAB)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Получить значение столбца текущей строки таблицы результата запроса по наименованию или индексу столбца, для линейных запросов вычислений значений столбцов агрегации не производится. Запрос должен быть выполненным. Выполнение этой функции соответствует выражению &amp;lt;code&amp;gt;&amp;lt;Запрос&amp;gt;.ResultTable.Get(,&amp;lt;Наименование или индекс столбца&amp;gt;)&amp;lt;/code&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Query.LinearLevelPos|LinearLevelPos]]&lt;br /&gt;
|form={{Grey|Query.}}'''LinearLevelPos''':''&amp;lt;Текущий уровень группировки линейного запроса (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут получает или устанавливает текущий уровень группировки при прохождении строк таблицы запроса в режиме линейного запроса. Нижний уровень группировки соответствует значению ''1'', верхний -- общему количеству группировок в запросе. Запрос должен быть выполненным.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Query.GroupCount|GroupCount]]&lt;br /&gt;
|form={{Grey|Query.}}'''GroupCount'''():''&amp;lt;Общее количество группировок в запросе (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает общее количество группировок в запросе. Запрос должен быть выполненным.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Query.Groups|Groups]]&lt;br /&gt;
|form={{Grey|Query.}}'''Groups'''(''&amp;lt;Индекс группировки (INT)&amp;gt;''):''&amp;lt;Наименование группировки (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает наименование группировки запроса по ее индексу. Запрос должен быть выполненным.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Query.Create|Create]]&lt;br /&gt;
|form={{Grey|Query.}}'''Create'''():''&amp;lt;Новый объект запроса (QUERY)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция создает новый объект запроса. Функция может быть вызвана с интерфейсом запроса.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Query.Check|Check]]&lt;br /&gt;
|form={{Grey|Query.}}'''Check'''(''&amp;lt;Текст запроса (STRING)&amp;gt;''{{Optional|,&amp;lt;Проверить постобработку (INT)&amp;gt;{{Default|{{Eq}}1}}}}):''&amp;lt;Результат (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция проверяет текст запроса и постобработки на наличие ошибок при компиляции, однако, выполнения запроса не производится. В результате отдается пустая строка, если ошибок не найдено, иначе отдается строка с сообщением об ошибке в виде &amp;lt;code&amp;gt;(&amp;lt;Номер ошибки&amp;gt; at &amp;lt;Номер строки&amp;gt;:&amp;lt;Позиция&amp;gt;) &amp;lt;Описание ошибки&amp;gt;&amp;lt;/code&amp;gt;. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Query.Execute|Execute]]&lt;br /&gt;
|form={{Grey|Query.}}'''Execute'''(''&amp;lt;Текст запроса (STRING)&amp;gt;''{{Optional|,&amp;lt;Режим запроса (INT)&amp;gt;{{Default|{{Eq}}1}},&amp;lt;Выполнять агрегацию столбцов (INT)&amp;gt;{{Default|{{Eq}}1}},&amp;lt;Столбцы с объектами, загружаемыми в режиме заголовка (STRING)&amp;gt;{{Default|{{Eq}}&amp;quot;&amp;quot;}}}}):''&amp;lt;Таблица результата запроса (TAB)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция выполняет запрос, заданный текстом в нужном режиме с необходимыми свойствами. Функция отдает таблицу результата запроса, если это необходимо. Если в процессе запроса будет найдена ошибка, функция вызовет исключение.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Query.CreateFromTable|CreateFromTable]]&lt;br /&gt;
|form={{Grey|Query.}}'''CreateFromTable'''(''&amp;lt;Таблица для создания результата запроса (TAB)&amp;gt;'',''&amp;lt;Столбцы группировки с настройками (STRING)&amp;gt;'',''&amp;lt;Столбцы агрегации с операциями (STRING)&amp;gt;''{{Optional|,&amp;lt;Режим запроса (INT)&amp;gt;{{Default|{{Eq}}1}}}}):''&amp;lt;Новый объект запроса (QUERY)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=1&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция создает объект запроса из существующей линейной таблицы значений. Таким образом полностью будет пропущен первый этап выполнения запроса. Запрос создается с заданными группировками и столбцами агрегации.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Query.Postprocess|Postprocess]]&lt;br /&gt;
|form={{Grey|Query.}}'''Postprocess'''({{Optional|&amp;lt;Выполнять агрегацию столбцов (INT)&amp;gt;{{Default|{{Eq}}1}},&amp;lt;Столбцы с объектами, загружаемыми в режиме заголовка (STRING)&amp;gt;{{Default|{{Eq}}&amp;quot;&amp;quot;}}}}):''&amp;lt;Таблица результата запроса (TAB)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция запускает второй этап выполнения запроса, и должна выполняться после функции [[Query.Execute|Execute]] с параметром ''Режим запроса'' равным нулю. Функция отдает таблицу результата запроса, если это необходимо. Если в процессе выполнения будет найдена ошибка, функция вызовет исключение.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Query.PostprocessLinear|PostprocessLinear]]&lt;br /&gt;
|form={{Grey|Query.}}'''PostprocessLinear'''({{Optional|&amp;lt;Столбцы с объектами, загружаемыми в режиме заголовка (STRING)&amp;gt;{{Default|{{Eq}}&amp;quot;&amp;quot;}}}}):''&amp;lt;Таблица результата запроса (TAB)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция запускает второй этап выполнения запроса в линейном режиме, и должна выполняться после функции [[Query.Execute|Execute]] с параметром ''Режим запроса'' равным нулю. Функция отдает таблицу результата запроса, если это необходимо. Если в процессе выполнения будет найдена ошибка, функция вызовет исключение.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Query.RemovePostprocessing|RemovePostprocessing]]&lt;br /&gt;
|form={{Grey|Query.}}'''RemovePostprocessing'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция удаляет из таблицы запроса строки с уровнем больше 0, а также удаляет столбцы ''@LEVEL'' и ''@FLEVEL'', возвращая таблицу результата в состояние, в котором она находилась после выполнения первого этапа запроса.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Query.First|First]]&lt;br /&gt;
|form={{Grey|Query.}}'''First'''({{Optional|&amp;lt;Индекс или наименование группировки запроса (INT,STRING)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Результат запроса имеет хотя бы одну запись на этом уровне (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция устанавливает текущую строку таблицы запроса на начало указанного уровня группировки, после чего можно начинать обход записей запроса с начала уровня.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Query.Next|Next]]&lt;br /&gt;
|form={{Grey|Query.}}'''Next'''(''&amp;lt;Индекс или наименование группировки запроса (INT,STRING)&amp;gt;''):''&amp;lt;Найдена следующая запись на указанном уровне группировки (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция выполняет шаг внутри указанной группировки запроса при обходе таблицы запроса в прямом направлении. Если следующая запись найдена, функция возвращает 1, иначе 0.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Query.Prev|Prev]]&lt;br /&gt;
|form={{Grey|Query.}}'''Prev'''(''&amp;lt;Индекс или наименование группировки запроса (INT,STRING)&amp;gt;''):''&amp;lt;Найдена следующая запись на указанном уровне группировки (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция выполняет шаг внутри указанной группировки запроса при обходе таблицы запроса в обратном направлении. Если предыдущая запись найдена, функция возвращает 1, иначе 0.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Query.Last|Last]]&lt;br /&gt;
|form={{Grey|Query.}}'''Last'''({{Optional|&amp;lt;Индекс или наименование группировки запроса (INT,STRING)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Результат запроса имеет хотя бы одну запись на этом уровне (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция устанавливает текущую строку таблицы запроса на конец указанного уровня группировки, после чего можно начинать обход записей запроса с помощью функции [[Query.Prev|Prev]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Query.Level|Level]]&lt;br /&gt;
|form={{Grey|Query.}}'''Level'''():''&amp;lt;Текущий уровень группировки (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает индекс уровня группировки, текущей строки таблицы запроса.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Query.FolderLevel|FolderLevel]]&lt;br /&gt;
|form={{Grey|Query.}}'''FolderLevel'''():''&amp;lt;Текущий уровень папок (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает индекс уровня папок, текущей строки таблицы запроса для текущей группировки. Если текущая строка не указывает на папку, функция возвращает ноль, иначе возвращает 1 для самого высокого уровня вложения (корневых папок), 2 для папок, вложенных в корневые папки и т.д. Функция может выполняться только не для линейных запросов.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Query.Compute|Compute]]&lt;br /&gt;
|form={{Grey|Query.}}'''Compute'''(''&amp;lt;Наименование переменной запроса (STRING)&amp;gt;''{{Optional|,&amp;lt;Операция агрегации (STRING)&amp;gt;{{Default|{{Eq}}&amp;quot;SUM&amp;quot;}},&amp;lt;Строки превращать в числа (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Вычислять для уровня (INT)&amp;gt;{{Default|{{Eq}}&amp;lt;Текущий линейный уровень обхода&amp;gt;}}}}):''&amp;lt;Результат вычисления (NUMBER)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция позволяет получить значение столбца агрегации для запроса в линейном режиме (однако, функция может выполняться и для запроса в обычном режиме, но для ее корректной работы в режимах, отличных от суммы, необходимо наличие оригинальных строк с уровнем группировки ноль). По умолчанию, для агрегации используется суммирование значений. Для обычных запросов функция используется только для нахождения итогов по всей таблице значений.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Query.BegTotals|BegTotals]]&lt;br /&gt;
|form={{Grey|Query.}}'''BegTotals'''(''&amp;lt;Наименование переменной запроса (STRING)&amp;gt;''):''&amp;lt;Результат вычисления (NUMBER)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция позволяет получить значение столбца агрегации для запроса в линейном режиме (однако, функция может выполняться и для запроса в обычном режиме, к примеру, для нахождения итого по всей таблице запроса). Агрегация выполняется в режиме начальных остатков для текущего уровня группировки таблицы, т.е. находится сумма всех записей уровня ноль, связанных с первой записью текущего уровня группировки в текущей строке таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Query.EndTotals|EndTotals]]&lt;br /&gt;
|form={{Grey|Query.}}'''EndTotals'''(''&amp;lt;Наименование переменной запроса (STRING)&amp;gt;''):''&amp;lt;Результат вычисления (NUMBER)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция позволяет получить значение столбца агрегации для запроса в линейном режиме (однако, функция может выполняться и для запроса в обычном режиме, к примеру, для нахождения итого по всей таблице запроса). Агрегация выполняется в режиме конечных остатков для текущего уровня группировки таблицы, т.е. находится сумма всех записей уровня ноль, связанных с последней записью текущего уровня группировки в текущей строке таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function footer}}&lt;br /&gt;
&lt;br /&gt;
{{Объекты}}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://sfsys.ru/index.php?title=%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82_MM&amp;diff=5236</id>
		<title>Объект MM</title>
		<link rel="alternate" type="text/html" href="http://sfsys.ru/index.php?title=%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82_MM&amp;diff=5236"/>
		<updated>2026-04-01T10:01:24Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{infobox object&lt;br /&gt;
|object=Мультимедиа&lt;br /&gt;
|status=2&lt;br /&gt;
|create=[[MM.SndCreateMixer|SndCreateMixer]], [[MM.SndLoadSound|SndLoadSound]] и пр.}}&lt;br /&gt;
{{HeadLinks|&lt;br /&gt;
* [[Main_Page|Начальная страница]]&lt;br /&gt;
* [[Общее_описание_языка|Общее описание]]&lt;br /&gt;
* [[Объекты]]}}&lt;br /&gt;
&lt;br /&gt;
Объект мультимедиа на данный момент поддерживает только работу с декодированием и выводом звука. В будущем планируется добавление других функций (к примеру, работу с микрофоном). Двумя основными внутренними объектами мультимедиа являются объект микшера (Mixer) и объект звука (Sound). Микшер, используя объекты звука, выводит данные с помощью определенного API на устройства вывода (наушники, колонки и пр.). Микшер используется, как устройство, которое может сложить множество звуков в один с помощью определенного алгоритма. Одновременно может существовать несколько объектов микшера, однако, определенные API (к примеру, WinMM) могут работать с проблемами, если этих объектов будет слишком много. Каждый из объектов микшера в отдельно взятое время может складывать произвольное количество звуков.&lt;br /&gt;
&lt;br /&gt;
Объекты микшера и звука обладают важными характеристиками: частота дискретизации звука (samples per second), размер образца звука в битах (bits per sample) и количество каналов звука (channels). Для объекта микшера эти характеристики задаются при его создании и не могут быть изменены. Не все возможные комбинации характеристик могут быть приняты операционной системой, в зависимости от API вывода, функция создания микшера может завершиться ошибкой для некоторых комбинаций. Рекомендуется использовать более или менее стандартные значения. Обычными значениями ''samples per second'' являются 48000 или 44100 и их вариации (32000, 24000, 22050, 16000, 12000, 11025, 8000) образцов в секунду. Обычными значениями ''bits per sample'' являются 16 или 32 бит (при создании микшера другие значения пока не поддерживаются). Количество каналов зависит от аппаратной звуковой системы конкретного компьютера. Любой компьютер может использовать одноканальный (моно) или двухканальный (стерео) вывод звука. Некоторые системы могут также выводить звуки в режимах 3+1 (4 канала), 5+1 (6 каналов) и 7+1 (8 каналов). Для более высокой частоты дискретизации звука (''samples per second''), может потребоваться больше ресурсов процессора. &lt;br /&gt;
&lt;br /&gt;
Каждый звук также обладает такими же характеристиками, как и объект микшера, однако, эти характеристики зависят от содержимого файла звука, а не выбираются при его загрузке в систему. Если характеристики звука отличаются от характеристик микшера, система автоматически произведет конвертирование звука (resampling) при его использовании в микшере. Обычно это недорогой с точки зрения ресурсов процесс, но если звуков очень много, он может использовать какое-то количество оперативной памяти и времени центрального процессора. К примеру, конвертирование между частотами 44100 и 48000 достаточно дорогое, так как эти частоты имеют малое количество общих множителей, однако, конвертирование из 44100 в 22050 очень быстрое и дешевое. Обычно рекомендуется использовать звуки, наиболее совместимые с создаваемым микшером, это уменьшит количество требуемых ресурсов, если звуков будет много.&lt;br /&gt;
&lt;br /&gt;
Особой характеристикой при создании микшера является латентность (задержка вывода) звука. Эта величина зависит от внутреннего буфера микшера, API (интерфейса вывода) и драйвера вывода. Пользователь услышит звук, выводимый программой, не мгновенно, а только через какой-то небольшой промежуток времени. При слишком низкой латентности, внутренний буфер опустошается быстрее, чем система успевает его наполнять (наполнение обычно происходит кусками), поэтому звук слышен как совокупность прерывающихся частей. Латентности в 30-50 мс. должно быть достаточно практически для любых целей при выводе звука.&lt;br /&gt;
&lt;br /&gt;
При панорамировании (смещении звука между каналами по определенным правилам) звука в системах с большим количеством колонок, можно создать эффект объемности, когда положение героя относительно источника звука перемещает его от одной колонки к другой или делает его тише или громче. Для работы с многоканальным звуком, перед созданием микшера желательно задать конфигурацию колонок с помощью функции [[MM.SndChannels|SndChannels]], после чего для каждого из проигрываемых звуков в отдельности можно использовать функции [[MMSound.Pan|Pan]] или [[MMSound.Pan2D|Pan2D]].&lt;br /&gt;
&lt;br /&gt;
При проигрывании иногда необходимо знать текущую позицию звука, играющуюся в данный момент, к примеру, чтобы обновить индикатор проигрывания. Для таких случаев, можно использовать функции [[MMSound.Status|Status]] или [[MMSound.Position|Position]] (последняя также может изменить текущую позицию). Функции позиции проигрывания оперируют количеством образцов или сэмплов (samples), а не временем, чтобы иметь максимальную точность. Номер проигрываемого образца можно превратить во время проигрывания с помощью функции [[MMSound.SampleToSecond|SampleToSecond]], и обратно с помощью функции [[MMSound.SecondToSample|SecondToSample]]. Получить размер звука в образцах можно с помощью функции [[MMSound.GetTotalSamples|GetTotalSamples]]. Важно также заметить, что номер образца (сэмпла) будет зависеть от характеристик микшера. При перекодировании звука под определенный микшер, его частота дискретизации может быть изменена, таким образом изменится количество дискретных образцов в нем, поэтому, использовать эти функции для звука, проигрывающегося в данный момент, нужно с указанием микшера. К примеру, звук с частотой дискретизации 11025 и длительностью ровно в 60 секунд содержит 661500 образцов (сэмплов), если проигрывать этот звук на микшере с частотой дискретизации в 44100, количество образов в проигрываемом звуке будет автоматически увеличено в 4 раза (до 2646000).&lt;br /&gt;
&lt;br /&gt;
При создании микшера и загрузке звука есть также возможность выбрать API (интерфейс или стандарт) из поддерживаемых системой, и хотя обычно в этом нет необходимости, разные интерфейсы обладают разными возможностями. Система позволяет создавать микшеры со следующими характеристиками:&lt;br /&gt;
* Частота дискретизации образцов звука (samples per second): произвольная, но операционная система не поддерживает все частоты, рекомендуется использовать: 44100, 48000, 32000, 24000, 22050, 16000, 12000, 11025, 8000.&lt;br /&gt;
* Размер образца звука (bits per sample): 16 или 32.&lt;br /&gt;
* Количество каналов звука (channels): произвольное, но аппаратное обеспечение может поддерживать только определенное количество. Чтобы выяснить количество акустических колонок (каналов звука) в системе, можно использовать функцию [[MM.DeviceList|DeviceList]].&lt;br /&gt;
* При выводе звука используются следующие API: &lt;br /&gt;
** ''WinMM''/''MME'' (Windows Multimedia API / Microsoft Multimedia Environment). Старый стандарт, доступный в любой версии Windows. Начиная с Windows Vista, для его реализации используется эмуляция на основании других API, что добавляет латентности. Ограничения и возможности API:&lt;br /&gt;
*** Латентность не ниже 30 мс (рекомендуется 50 мс)&lt;br /&gt;
*** Создание микшеров с &amp;quot;экзотическими&amp;quot; частотами дискретизации и другими характеристиками будет вызывать ошибку (поддерживается только то, что поддерживает драйвер звука операционной системы).&lt;br /&gt;
*** При изменении уровня (громкости) системного звука (см. [[MM.SndSetVolume|SndSetVolume]]) может только изменить громкость приложения (не общесистемную громкость). При изменении громкости используются только два канала. Общую громкость отдельных каналов многоканального звука изменить нельзя (система позволяет изменять громкость отдельных звуков и микшеров, вне зависимости от API вывода).&lt;br /&gt;
*** Имеет дополнительные возможности, к примеру [[MMixer.Pitch|Pitch]] или [[MMixer.PlaybackRate|PlaybackRate]].&lt;br /&gt;
** ''WASAPI'' / ''Core Audio'' (Windows Audio Session API / Core Audio API). Стандарт доступен, начиная с Windows Vista. Работает в двух режимах: в режиме общей сессии и в эксклюзивном режиме. Эксклюзивный режим не позволяет другим программам операционной системы иметь доступ к устройству вывода. В этом режиме можно создать единственный микшер и драйвер будет пытаться подстроиться под характеристики создаваемого микшера, и при попытке использования &amp;quot;экзотических&amp;quot; характеристик будет возвращать ошибку. Однако, в этом режиме можно добиться минимальной латентности. Ограничения и возможности API:&lt;br /&gt;
*** В режиме общей сессии латентность до 30 мс. (она и рекомендуется). В эксклюзивном режиме латентность до 5-15 мс.&lt;br /&gt;
*** В режиме общей сессии поддерживаются практически любые частоты дискретизации и количество каналов. Перекодировка будет автоматически производиться ''WASAPI'' или системой.&lt;br /&gt;
*** В режиме общей сессии при изменении уровня (громкости) системного звука (см. [[MM.SndSetVolume|SndSetVolume]]), может изменить общесистемную громкость, громкость приложения (без разреза каналов) и громкость сессии в разрезе каналов.&lt;br /&gt;
*** Не поддерживает функции, типа [[MMixer.Pitch|Pitch]] или [[MMixer.PlaybackRate|PlaybackRate]].&lt;br /&gt;
** ''XAudio2'' (Windows 7+). Планируется к добавлению в будущем.&lt;br /&gt;
&lt;br /&gt;
Система позволяет загружать звуки следующих форматов (и характеристик):&lt;br /&gt;
* '''WAV''' без компрессии (PCM): произвольная частота дискретизации (samples per second), произвольное количество каналов, размер образца: 8, 16, 24, 32 бита. Система выполняет автоматически перекодировку (resampling) между звуками без компрессии с разными характеристиками, также можно использовать функцию [[MMSound.ConvertTo|ConvertTo]].&lt;br /&gt;
* '''WAV''' с компрессией: декодируются форматы '''GSM6.10''', '''u-law''', '''A-law''', '''MS ADPCM'''. Декодирование выполняется с помощью API ''ACM'' (Audio Compression Manager).&lt;br /&gt;
* '''MP3'''. Декодирование выполняется с помощью API ''ACM'' (Audio Compression Manager) или ''WMF'' (Windows Media Format, Windows XP+). Рекомендуется использовать декодер ''WMF'', однако, он может добавить некоторое количество тишины в конце звука.&lt;br /&gt;
* '''WMA'''. Декодирование выполняется с помощью API ''WMF'' (Windows Media Format, Windows XP+). Рекомендуется использовать ''MP3'' вместо этого формата.&lt;br /&gt;
* '''AC3''', '''AAC''', '''OGG''' -- Планируется к добавлению в будущем.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Простые примеры создания микшера и загрузки и проигрывания звука ==&lt;br /&gt;
Внешний демонстрационный объект [http://{{SERVERNAME}}/download/sound.sfo sound.sfo] является примитивным проигрывателем звуковых файлов, поддерживаемых системой. Его можно открыть в Студии и изучить код. Кроме того, ниже предлагается простой пример создания микшера, загрузки и проигрывания звука: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  //Создадим микшер с частотой дискретизации 44100, 16-битным, стерео звуком для устройства вывода по умолчанию.&lt;br /&gt;
  aMixer:=MM.SndCreateMixer(,&amp;quot;44100,16,2&amp;quot;,2);&lt;br /&gt;
&lt;br /&gt;
  //Загрузим в память звук с диска.&lt;br /&gt;
  Try&lt;br /&gt;
    aSound:=MM.SndLoadSound(&amp;quot;c:\sounds\sound.mp3&amp;quot;);&lt;br /&gt;
  Except&lt;br /&gt;
    Box(&amp;quot;Невозможно загрузить файл: &amp;quot;+PopError(),Q_STOP);&lt;br /&gt;
    Exit;&lt;br /&gt;
  EndTry;&lt;br /&gt;
&lt;br /&gt;
  //Начать проигрывание звука на микшере aMixer.&lt;br /&gt;
  aSound.Play(aMixer);&lt;br /&gt;
&lt;br /&gt;
  //Ждать, пока звук не будет полностью проигран (Status()=0).&lt;br /&gt;
  Repeat&lt;br /&gt;
    Sleep(100);&lt;br /&gt;
  Until aSound.Status()=0;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Основные атрибуты и функции ==&lt;br /&gt;
=== Атрибуты и функции объекта мультимедиа и микшера ===&lt;br /&gt;
&lt;br /&gt;
{{function header}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[MM.API|API]]&lt;br /&gt;
|form={{Grey|MM.}}'''API'''(''&amp;lt;Тип стандарта (STRING)&amp;gt;''{{Optional|,&amp;lt;Стандарт (STRING)&amp;gt;,&amp;lt;Параметры&amp;gt;}}):''&amp;lt;Предыдущее значение стандарта (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция вызывается из интерфейса ''MM'' и задает использование API (стандартов) для определенных процессов.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[MM.DeviceList|DeviceList]]&lt;br /&gt;
|form={{Grey|MM.}}'''DeviceList'''({{Optional|&amp;lt;Тип устройств (STRING,INT)&amp;gt;{{Default|{{Eq}}&amp;quot;SOUND&amp;quot;}}}}):''&amp;lt;Список доступных устройств с их свойствами (LIST)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция вызывается из интерфейса ''MM'' и возвращает список доступных устройств со свойствами по их типу. К примеру, список устройств для вывода звука. Возвращаемые свойства и даже сами устройства могут зависеть от используемого стандарта при запросе. Стандарт можно задать перед вызовом функции с помощью функции [[MM.API|API]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[MM.SndSetVolume|SndSetVolume]]&lt;br /&gt;
|form={{Grey|MM.}}'''SndSetVolume'''(''&amp;lt;Код устройства или микшер (MIXER,STRING,INT)&amp;gt;''{{Optional|,&amp;lt;Уровень канала 1 (REAL)&amp;gt;,&amp;lt;Уровень канала 2 (REAL)&amp;gt;...}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция вызывается из интерфейса ''MM'' и задает уровень глобальной громкости, громкость, применительно к приложению или текущей сессии в разрезе колонок. Уровень задается в виде вещественных чисел от 0 (тишина) до 100 (макс. громкость). Работа функции сильно зависит от используемого стандарта (API). Для дополнительной информации, см. описание.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[MM.SndChannels|SndChannels]], '''SndSpeakers'''&lt;br /&gt;
|form={{Grey|MM.}}'''SndChannels'''({{Optional|,&amp;lt;Шаблон используемых колонок или код шаблона по умолчанию (STRING,INT)&amp;gt;}}):''&amp;lt;Предыдущий шаблон (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция вызывается из интерфейса ''MM'' и задает шаблон использующихся колонок для вывода звука. Также можно задать один из кодов шаблонов по умолчанию. Для дополнительной информации, см. описание.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[MM.SndCreateMixer|SndCreateMixer]]&lt;br /&gt;
|form={{Grey|MM.}}'''SndCreateMixer'''({{Optional|&amp;lt;Код устройства (STRING,INT)&amp;gt;,&amp;lt;Параметры звука (STRING)&amp;gt;{{Default|{{Eq}}&amp;quot;44100,16&amp;quot;}},&amp;lt;Метод миксации (INT)&amp;gt;{{Default|{{Eq}}2}},&amp;lt;Желаемая латентность (INT)&amp;gt;,&amp;lt;Режим или маска конвертирования каналов (INT,STRING)&amp;gt;}}):''&amp;lt;Объект созданного микшера (MIXER)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция вызывается из интерфейса ''MM'' и позволяет создать новый микшер. По умолчанию микшер использует предпочтительный из доступных стандарт (API), однако, стандарт может быть выбран с помощью функции [[MM.API|API]]. Если код устройства не указан, микшер будет создан на устройстве по умолчанию. Желаемая латентность может быть уменьшена до минимально возможной, либо будет использовано умолчание, если аргумент не задан. Для получения результирующей латентности, используйте атрибут [[MMixer.Latency|Latency]]. При проигрывании звуков с другим количеством каналов используется особая маска (или режим) конвертации каналов, задаваемая пятым аргументом.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[MMixer.MixMethod|MixMethod]]&lt;br /&gt;
|form={{Grey|MMixer.}}'''MixMethod''':''&amp;lt;Метод миксации (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает метод миксации звуков для текущего микшера.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[MMixer.Latency|Latency]]&lt;br /&gt;
|form={{Grey|MMixer.}}'''Latency''':''&amp;lt;Текущая латентность (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает текущую латентность для текущего микшера. Обычно это значение не изменяется в процессе работы микшера, и оно может отличаться от требуемого в момент создания микшера функцией [[MM.SndCreateMixer|SndCreateMixer]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[MMixer.BufferHealth|BufferHealth]]&lt;br /&gt;
|form={{Grey|MMixer.}}'''BufferHealth''':''&amp;lt;Заполненность буфера вывода (REAL)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает заполненность буфера миксования на данный момент в процентах. Если это число близко к нулю, это означает, что латентность слишком низкая и буфер не успевает заполняться данными в достаточной степени, чтобы обеспечить бесперебойное проигрывание звука.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[MM.SndLoadSound|SndLoadSound]]&lt;br /&gt;
|form={{Grey|MM.}}'''SndLoadSound'''(''&amp;lt;Источник (STRING,BUFFER)&amp;gt;''{{Optional|,&amp;lt;Тип источника (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Параметры для конвертирования (STRING,MIXER)&amp;gt;{{Default|{{Eq}}&amp;quot;&amp;quot; (без конвертирования)}},&amp;lt;Режим или маска конвертирования каналов (INT,STRING)&amp;gt;,&amp;lt;Формат конвертирования (STRING)&amp;gt;}}):''&amp;lt;Объект загруженного звука (SOUND)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция загружает звук с диска из буфера или из строки с бинарными данными. Звук может быть сконвертирован при загрузке (поддержвается указание микшера для автоматического подбора параметров конвертирования). После загрузки, звук может быть проигран на микшере ([[MMSound.Play|Play]]), либо сохранен ([[MMSound.Save|Save]]). Один объект звука может проигрываться только на одном микшере в отдельно взятый момент, однако, если необходимо проигрывать множество копий одного звука, объект звука можно дублировать с помощью функции [[MMSound.Copy|Copy]], при этом сами загруженные в память бинарные данные не будут продублированы. Принимаются звуки разных форматов. Для дополнительной информации, смотрите описание функции.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[MMixer.Stop|Stop]]&lt;br /&gt;
|form={{Grey|MMixer.}}'''Stop'''({{Optional|&amp;lt;Время затухания звуков в мс. (fade-out) (INT)&amp;gt;{{Default|{{Eq}}0}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция останавливает проигрывание всех звуков текущего микшера. Возможно использование затухания для более гладкой ощущаемой остановки. Запуск для проигрывания новых звуков на микшере по-прежнему разрешен, останаливается проигрывание только звуков, которые играются в данный момент.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[MMixer.SetVolume|SetVolume]]&lt;br /&gt;
|form={{Grey|MMixer.}}'''SetVolume'''({{Optional|&amp;lt;Уровень канала 1 (REAL)&amp;gt;,&amp;lt;Уровень канала 2 (REAL)&amp;gt;...}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция изменяет уровень звука для текущего микшера. Уровень задается в виде вещественных чисел от 0 (тишина) до 400 (в 4 раза громче оригинальной громкости). При значении 100, уровень проигрываемых звуков не будет изменяться (индивидуальные уровни громкости доступны для каждого объекта звука). При значении больше 100, уровень всех звуков будет пропорционально увеличен, при этом могут произойти искажения, если звук был достаточно громким из без этого увеличения. Используется линейный уровень (не логарифмический, как он обычно воспринимается человеческим ухом). При указании всего одного аргумента, уровень будет установлен для всех каналов. Если в микшере больше каналов, чем задано аргументов для функции, для остальных каналов будет использован уровень, заданный последним аргументом. Если аргументов не задано, уровень не изменяется.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[MMixer.GetVolume|GetVolume]]&lt;br /&gt;
|form={{Grey|MMixer.}}'''GetVolume'''():''&amp;lt;Список уровней звуков (LIST)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает список уровней звуков для текущего микшера.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[MMixer.Pitch|Pitch]]&lt;br /&gt;
|form={{Grey|MMixer.}}'''Pitch'''({{Optional|&amp;lt;Высота звука (REAL)&amp;gt;}}):''&amp;lt;Текущая высота звука (REAL)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция изменяет высоту звуков для всего микшера. Может использоваться только для определенных API (WinMM). Рекомендуется использовать функции DPS вместо данной.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[MMixer.PlaybackRate|PlaybackRate]]&lt;br /&gt;
|form={{Grey|MMixer.}}'''PlaybackRate'''({{Optional|&amp;lt;Скорость проигрывания (REAL)&amp;gt;}}):''&amp;lt;Текущая скорость проигрывания (REAL)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция изменяет скорость проигрывания звуков для всего микшера. Может использоваться только для определенных API (WinMM). Рекомендуется использовать функции DPS вместо данной.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[MMixer.GetFormat|GetFormat]]&lt;br /&gt;
|form={{Grey|MMixer.}}'''GetFormat'''({{OptionalByRef|&amp;lt;Частота дискретизации микшера (INT)&amp;gt;,&amp;lt;Размер образца звука микшера (INT)&amp;gt;,&amp;lt;Количество каналов микшера (INT)&amp;gt;}}):''&amp;lt;Формат строкой (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает звуковые характеристики для текущего микшера.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[MMixer.AddDSP|AddDSP]]&lt;br /&gt;
|form={{Grey|MMixer.}}'''AddDSP'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция добавляет процессор цифровой обработки звука для данного микшера.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[MMixer.RemoveDSP|RemoveDSP]]&lt;br /&gt;
|form={{Grey|MMixer.}}'''RemoveDSP'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция удаляет процессор цифровой обработки звука для данного микшера.&lt;br /&gt;
}}&lt;br /&gt;
{{function footer}}&lt;br /&gt;
&lt;br /&gt;
=== Атрибуты и функции объекта звука ===&lt;br /&gt;
&lt;br /&gt;
{{function header}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[MMSound.Play|Play]]&lt;br /&gt;
|form={{Grey|MMSound.}}'''Play'''(''&amp;lt;Микшер для проигрывания (MIXER)&amp;gt;''{{Optional|,&amp;lt;Начинать с образца (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Количество повторений (INT)&amp;gt;{{Default|{{Eq}}1}},&amp;lt;Время увеличения громкости до рабочей, мс. (fade-in) (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Режим или маска конвертирования каналов (INT,STRING)&amp;gt;}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция инициирует проигрывание звука на заданном микшере, если звук уже находился в состоянии проигрывания, оно будет сначала остановлено. Звук может начинать проигрывание с заданного образца (сэмпла) с учетом частоты дискретизации текущего микшера (т.е., после конвертирования звука, если таковое происходит). Проигрывание звука может повторяться указанное количество раз (при указании значения ''-1'', звук будет повторяться неограниченное количество раз). Также возможно задать время увеличения громкости звука до рабочей (fade-in), т.е. начальная громкость звука будет увеливаться плавно до рабочей после чего проигрываться с рабочей громкостью до конца. Может быть задана особая маска (или режим) конвертации каналов, если количество каналов в звуке отличается от такового в микшере, если аргумент конвертирования каналов не задан, будет использован способ конвертирования, указанный при создании микшера. Один объект звука может проигрываться только на одном микшере в отдельно взятый момент, однако, если необходимо проигрывать множество копий одного звука, объект звука можно дублировать с помощью функции [[MMSound.Copy|Copy]], при этом сами загруженные в память бинарные данные не будут продублированы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[MMSound.SetVolume|SetVolume]]&lt;br /&gt;
|form={{Grey|MMSound.}}'''SetVolume'''({{Optional|&amp;lt;Уровень канала 1 (REAL)&amp;gt;,&amp;lt;Уровень канала 2 (REAL)&amp;gt;...}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция изменяет уровень звука для текущего звука. Функцию можно вызывать как для звука, который проигрывается в данный момент, так и для звука, который не проигрывается. Уровень задается в виде вещественных чисел от 0 (тишина) до 400 (в 4 раза громче оригинальной громкости). При значении 100, уровень проигрываемого звука не будет изменяться. При значении больше 100, уровень звука будет пропорционально увеличен, при этом могут произойти искажения, если звук был достаточно громким из без этого увеличения. Используется линейный уровень (не логарифмический, как он обычно воспринимается человеческим ухом). При указании всего одного аргумента, уровень будет установлен для всех каналов. Если в микшере больше каналов, чем задано аргументов для функции, для остальных каналов будет использован уровень, заданный последним аргументом. Если аргументов не задано, уровень не изменяется.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[MMSound.GetVolume|GetVolume]]&lt;br /&gt;
|form={{Grey|MMSound.}}'''GetVolume'''():''&amp;lt;Список уровней громкости (LIST)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает список уровней громкости для текущего звука.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[MMSound.Pan|Pan]]&lt;br /&gt;
|form={{Grey|MMSound.}}'''Pan'''(''&amp;lt;Формула панорамирования (STRING,BUFFER)&amp;gt;''{{Optional|,&amp;lt;Для микшера (MIXER)&amp;gt;}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция задает формулу панорамирования для звука (изменения громкости звука по разным каналам в зависимости от канала). Звук может проигрываться в данный момент. Если звук не проигрывается, необходимо указать также микшер (вторым аргументом), из установок которого будет использована конфигурация каналов. Данная функция универсальна, настроить ее для 2D или 3D положения звука сложно, для упрощения можно использовать функции [[MMSound.Pan2D|Pan2D]] и [[MMSound.Pan3D|Pan3D]], которые автоматически подбирают формулу панорамирования.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[MMSound.Pan2D|Pan2D]]&lt;br /&gt;
|form={{Grey|MMSound.}}'''Pan2D'''(''&amp;lt;Позиция X источника звука (REAL)&amp;gt;'',''&amp;lt;Позиция Y источника звука (REAL)&amp;gt;''{{Optional|,&amp;lt;Интенсивность звука в точке 0,0 (REAL)&amp;gt;{{Default|{{Eq}}1.0}},&amp;lt;Для микшера (MIXER)&amp;gt;}}):''&amp;lt;&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция вычисляет формулу панорамирования, когда источник звука находится в точке X,Y в плоской системе координат (шкала Y направлена от наблюдателя на колонку FC (front center)), а слушатель находится в точке 0,0. Для многоколоночной конфигурации, разные колонки будут выводить звук с разной громкостью. Если источник звука будет находиться в точке 0,0, оригинальные громкости всех колонок будут умножены на коэффициент третьего аргумента, но их положение в колонках изменено не будет. Звук может проигрываться в данный момент. Если звук не проигрывается, необходимо указать также микшер (четвертым аргументом), из установок которого будет использована конфигурация каналов. Для прямого указания формулы панорамирования, используется более универсальная функция [[MMSound.Pan|Pan]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[MMSound.Pan3D|Pan3D]]&lt;br /&gt;
|form={{Grey|MMSound.}}'''Pan3D'''():''&amp;lt;&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[MMSound.GetFormat|GetFormat]]&lt;br /&gt;
|form={{Grey|MMSound.}}'''GetFormat'''():''&amp;lt;&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[MMSound.GetTotalSamples|GetTotalSamples]]&lt;br /&gt;
|form={{Grey|MMSound.}}'''GetTotalSamples'''():''&amp;lt;&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[MMSound.Status|Status]]&lt;br /&gt;
|form={{Grey|MMSound.}}'''Status'''():''&amp;lt;&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[MMSound.Position|Position]]&lt;br /&gt;
|form={{Grey|MMSound.}}'''Position'''():''&amp;lt;&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[MMSound.SampleToSecond|SampleToSecond]]&lt;br /&gt;
|form={{Grey|MMSound.}}'''SampleToSecond'''():''&amp;lt;&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[MMSound.SecondToSample|SecondToSample]]&lt;br /&gt;
|form={{Grey|MMSound.}}'''SecondToSample'''():''&amp;lt;&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[MMSound.Stop|Stop]]&lt;br /&gt;
|form={{Grey|MMSound.}}'''Stop'''():''&amp;lt;&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[MMSound.Copy|Copy]]&lt;br /&gt;
|form={{Grey|MMSound.}}'''Copy'''():''&amp;lt;&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[MMSound.Resample|Resample]]&lt;br /&gt;
|form={{Grey|MMSound.}}'''Resample'''():''&amp;lt;&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[MMSound.ConvertTo|ConvertTo]]&lt;br /&gt;
|form={{Grey|MMSound.}}'''ConvertTo'''():''&amp;lt;&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[MMSound.Save|Save]]&lt;br /&gt;
|form={{Grey|MMSound.}}'''Save'''():''&amp;lt;&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=&lt;br /&gt;
}}&lt;br /&gt;
{{function footer}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Объекты}}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>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</id>
		<title>Общее описание языка</title>
		<link rel="alternate" type="text/html" href="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"/>
		<updated>2026-04-01T10:01:23Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{HeadLinks|&lt;br /&gt;
* [[Main_Page|Начальная страница]]}}&lt;br /&gt;
== Вводная информация ==&lt;br /&gt;
&amp;lt;p&amp;gt;Встроенный язык (скрипт) системы является интерпретатором, компилирующим (переводящим) тексты, написанные по определенным правилам, в байтовый код для ускорения выполнения программы. Перевод из байтового кода в машинный код не осуществляется (таким образом сохраняя сравнительную независимость от платформы исполнения). Такой способ сродни общеизвестным языкам, типа Java или C#. Являясь императивным языком (т.е., языком, использующим инструкции), он поддерживает процедурное и объектно-ориентированное программирование (однако, в данный момент не создано возможности определения новых объектов непосредственно из кода).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Являясь также специализированным языком для поддержки работы программной среды, он обладает рядом особенностей, таких как [[Типизация|слабая типизация]] (необходимая для упрощения написания текстов и адресации данных более удобным способом), многопоточность, асинхронные и прерывающие события. Компилированные тексты программы могут находиться, как в особых файлах исполнения (модулях), так и быть привязанными к визуальным объектам или метаданным (работая, к примеру, как триггеры), пунктам меню и пр. Язык обладает широкой бибилиотекой встроенных функций и объектов, позволяющих осуществлять ввод и вывод информации в разных файловых форматах, обращение и работу с базой данных, манипуляцию данными, визуальное представление данных с помощью форм и электронных таблиц.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;При создании языка делался упор как на удобство программирования, уменьшения количества возможных ошибок при написании программ и полноту предоставляемого инструментария, так и на скорость исполнения и оптимизацию функций.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Иерархия текстов программ ==&lt;br /&gt;
&amp;lt;p&amp;gt;При запуске системы, некоторые программы выполняются до того, как пользователь получает возможность управления системой или ввода информации в нее. Эти стартовые программы называются глобальными и после исполнения находятся в памяти для того, чтобы другие программы имели возможность вызывать созданные ими функции и работать с определенными ими переменными. Каждая программа подобного рода располагается в отдельном файле. Такие файлы называются модулями. Кроме глобальных модулей, любой объект системы, будь то объект метаданных или внешняя обработка и пр. (см. [[Студия/Конфигурация данных проекта|Конфигурация данных проекта]]) имеет свой набор подобных модулей. Программы хранятся не только в модулях, но и привязаны к визуальным объектам (обработчики визуальных событий), к объектам метаданных (триггеры событий метаданных), к пунктам меню (обработчики событий меню), к ячейкам и объектам электронных таблиц (однако, вызов не происходит напрямую) и в других контейнерах по усмотрению создателя конфигурации.&amp;lt;/p&amp;gt;&lt;br /&gt;
При инициализации и старте системы, глобальные модули исполняются последовательно по следующему принципу:&lt;br /&gt;
# Первым всегда исполняется модуль с именем '''Module'''.&lt;br /&gt;
# Последующие модули всегда исполняются в алфавитном порядке их наименований.&lt;br /&gt;
&amp;lt;p&amp;gt;Любые функции или переменные, определенные в этих модулях с постфиксом '''Export''', будут доступны во всех других модулях и функциях, вызываемых из них (см. ниже описание переменных и функций).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Система позволяет использовать многозадачность при исполнении программ, для этого при запуске программы создается один рабочий поток -- ''корневой поток'' (root thread). Для визуальных клиентов этот поток обслуживает работу пользователя при исполнении пунктов главного меню, окон, загруженных в глобальном режиме, и пр. Программы, исполняемые в данном потоке, могут создать новые потоки (к примеру, с помощью вызова '''[[LoadModule]]'''). Количество рабочих потоков в среде ограничено только ресурсами операционной системы. Вызовы нового модуля из текущего могут также не создавать новый поток, в этом случае, создается вложенный вызов модуля и предыдущий модуль остается в памяти, пока работа последующего не завершена. Во вложенном модуле доступны не только переменные и функции глобальных модулей, но и переменные и функции модуля, из которого произошел вызов (см. также [[#Вложенность функций и модулей, уровни вложенности|Вложенность функций и модулей, уровни вложенности]]). Переменные созданные в одном потоке (или в корневом потоке), могут быть использованы в других потоках, блокировки доступа к переменным в многозадачной среде выполняются системой автоматически (см. также доп. [[Объекты#Многопоточные и однопоточные объекты, внутренний механизм блокировки|информацию по блокировкам]]).&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Построение текста программ с помощью инструкций ==&lt;br /&gt;
Любая программа в языке состоит из блоков. Каждый блок делится на некоторое количество инструкций (команд), разделенных знаком &amp;quot;;&amp;quot;. Знак перевода строки после каждой инструкции необязателен, но помогает улучшить читаемость программы, позволяя, тем самым избежать ошибок:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;Начало блока 1&amp;gt;&lt;br /&gt;
Инструкция 1;&lt;br /&gt;
Инструкция 2;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;Окончание блока 1&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Начало блока 2&amp;gt;&lt;br /&gt;
Инструкция 1;Инструкция 2;Инструкция 3; ...&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;Окончание блока 2&amp;gt;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Блоки могут быть как объявлениями функций, так, к примеру, и наборами инструкций при выполнении какого либо условия (см. конструкцию ''If''). После объявления начала блока не требуется знак разделителя инструкций (;), однако, его наличие не будет приводить к ошибкам. Пустые инструкции, состоящие только из знака &amp;quot;;&amp;quot; допустимы и не являются ошибкой.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Комментарии (свободный текст, не подлежащий интерпретации и компилированию) могут быть использованы в любом месте программы. Комментарии можно задать двумя способами: с помощью двух знаков &amp;quot;/&amp;quot;, при этом, любой текст после этого набора знаков до окончания текущей строки будет пропущен при компиляции. Также комментарии задаются, как блок текста, начинающийся знаком &amp;quot;{&amp;quot; и заканчивающийся знаком &amp;quot;}&amp;quot;. Символы перевода строки внутри этого блока будут принадлежать части комментария и пропускаются при компиляции. После начала комментария одного типа, и до его окончания, невозможно создать комментарий другого типа, так как текст внутри комментария не подлежит интерпретации. Пример использования комментариев дан ниже:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Инструкция 1;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Комментарий 1&lt;br /&gt;
Инструкция 2;&lt;br /&gt;
//Комментарий 2&lt;br /&gt;
...&lt;br /&gt;
Инструкция 100;&lt;br /&gt;
//Инструкция 101;&amp;amp;#9;&amp;amp;#9;//Инструкция не будет компилироваться (принадлежит комментарию)&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
Инструкция 102;&lt;br /&gt;
Инструкция 103;}&amp;amp;#9;&amp;amp;#9;//Инструкции 102 и 103 принадлежат комментарию&lt;br /&gt;
Инструкция 104{Комментарии внутри инструкции допустимы};&lt;br /&gt;
...&lt;br /&gt;
{Инструкция 200;&lt;br /&gt;
Инструкция 201;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Неверный комментарий,} данный текст будет считаться частью программы и вызовет ошибку компиляции&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;При написании программы рекомендуется каждую инструкцию помещать в отдельную строку и для каждого логического блока инструкций использовать отступ, если блок находится внутри другого блока, отступ рекомендуется увеличивать. Такой подход улучшит читаемость текста программ. Размер единицы отступа обычно совпадает с шириной знака табуляции. Последнюю можно задать в свойствах редактора текста, однако по умолчанию рекомендованное значение равно двум знакоместам. Символ табуляции в редакторе текста программ не используется, а заменяется на необходимое количество пробелов, это сделано для удобства редактирования текстов и обычно не мешает написанию программ, устраняя невидимый и неудобный в работе символ. Для добавления к строковым выражениям символа табуляции, можно использовать либо константу _TAB, либо конструкцию Chr(9). Пример использования отступов:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
If a=1 Then&lt;br /&gt;
  Message(&amp;quot;a равно 1&amp;quot;);&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Инструкция внутри логического блока конструкции If имеет отступ в 2 пробела&lt;br /&gt;
Else&lt;br /&gt;
  Message(&amp;quot;a не равно 1&amp;quot;);&amp;amp;#9;&amp;amp;#9;//Инструкции (эта и далее) внутри логического блока конструкции If имеет отступ в 2 пробела&lt;br /&gt;
  If a&amp;gt;0 Then&lt;br /&gt;
    Message(&amp;quot;Однако, a больше нуля&amp;quot;);&amp;amp;#9;//Инструкция внутри вложенного логического блока конструкции If имеет отступ в 4 пробела&lt;br /&gt;
  EndIf;&lt;br /&gt;
EndIf;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Особые конструкции языка ==&lt;br /&gt;
&amp;lt;p&amp;gt;Особыми называются конструкции языка, не являющиеся функциями (но могут быть магическими функциями), процедурами или частями вычисляемых выражений. Такие конструкции могут включать в себя один или более логических блоков, которые могут состоять из любого количества инструкций. Регистр не имеет значения при указании составных частей конструкций (&amp;lt;code&amp;gt;begin&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;BEgin&amp;lt;/code&amp;gt; будут восприняты компилятором одинаково). Определения, используемые в этих конструкциях, являются зарезервированными словами, создание переменных или функций с зарезервированным именем запрещено (к примеру строка &amp;lt;code&amp;gt;If:=1;&amp;lt;/code&amp;gt; вызовет ошибку при компиляции). На данный момент в языке существуют следующие конструкции и магические функции (далее по тексту &amp;lt;логический блок&amp;gt; заменяет любое количество инструкций языка, внутри квадратных скобок &amp;lt;nowiki&amp;gt;[...]&amp;lt;/nowiki&amp;gt; находятся необязательные части конструкций, внутри фигурных скобок &amp;lt;nowiki&amp;gt;{...}&amp;lt;/nowiki&amp;gt; перечислены две или более части конструкций, одна из которых должна обязательно присутствовать):&amp;lt;/p&amp;gt;&lt;br /&gt;
==== Конструкция объявления переменной ====&lt;br /&gt;
::&amp;lt;code&amp;gt;Var &amp;lt;переменная&amp;gt; [Export][, &amp;lt;переменная&amp;gt; [Export]];&amp;lt;/code&amp;gt;&lt;br /&gt;
Переменные обычно создаются автоматически при первом присваивании и удаляются при выходе за [[Границы видимости переменных‏‎|границы существования]], однако при объявлении переменных с постфиксом Export, они становятся видимыми для функций и модулей более низкого уровня (вызываемых внутри данной функции или модуля). Пример см. ниже:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Var a1 Export, a2;&lt;br /&gt;
&lt;br /&gt;
Function ВложеннаяФункция()&lt;br /&gt;
  a1:=1;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Обращение к a1 внутри функции возможно&lt;br /&gt;
  a2:=2;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//При обращении к a2 создается новая переменная с границами видимости функции ВложеннаяФункция()&lt;br /&gt;
EndFunction&lt;br /&gt;
&lt;br /&gt;
a1:=0;&lt;br /&gt;
a2:=0;&lt;br /&gt;
ВложеннаяФункция();&lt;br /&gt;
Message(a1);&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Выводит 1&lt;br /&gt;
Message(a2);&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Выводит 0, так как оригинальная переменная a2 не была изменена&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Кроме того, объявление переменных можно использовать для небольшого ускорения, когда к переменной происходит очень много вызовов, так как поиск переменных, при обращении к ним, осуществляется по имени (в текущей реализации), это занимает определенное время, поэтому случаи, когда переменная была найдена в стеке сразу же, и когда она была найдена после пропуска нескольких неподходящих, занимают несколько разное время. Иными словами, переменные, объявленные позже, будут найдены при обращении быстрее. Разница во времени достаточно мала, однако в синтетическом тесте, показанном ниже, она весьма заметна:&lt;br /&gt;
[[image:Var_Example.png|thumb|right|Пример выполнения кода с результатами [[Встроенный профайлер|профилирования]]]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Var a1,a2,a3,a4,a5,a6,a7,a8,a9,a10;&lt;br /&gt;
&lt;br /&gt;
ProfilerClear();&lt;br /&gt;
ProfilerStart();&lt;br /&gt;
For i:=1 to 1000000 Do&lt;br /&gt;
  a1:=0;&lt;br /&gt;
EndDo;&lt;br /&gt;
For i:=1 to 1000000 Do&lt;br /&gt;
  a10:=0;&lt;br /&gt;
EndDo;&lt;br /&gt;
ProfilerStop();&lt;br /&gt;
DebugBreak;&lt;br /&gt;
Message(&amp;quot;Done!&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Конструкция логического блока ====&lt;br /&gt;
::&amp;lt;code&amp;gt;Begin&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;code&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;логический блок&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;code&amp;gt;End;&amp;lt;/code&amp;gt;&lt;br /&gt;
Конструкция имеет декоративную функцию.&lt;br /&gt;
&lt;br /&gt;
==== Конструкция проверки выражения ====&lt;br /&gt;
::&amp;lt;code&amp;gt;If &amp;lt;выражение&amp;gt; Then&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;code&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;логический блок&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;code&amp;gt;[ElseIf &amp;lt;выражение&amp;gt; Then&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;code&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;логический блок&amp;gt;]&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;code&amp;gt;[Else&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;code&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;логический блок&amp;gt;]&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;code&amp;gt;EndIf;&amp;lt;/code&amp;gt;&lt;br /&gt;
Конструкция служит для логического выполнения инструкций в зависимости от результатов вычисления выражений. Если выполнение выражения возвращает логическую единицу (см. ниже), будет исполнен блок, идущий после оператора &amp;lt;code&amp;gt;Then&amp;lt;/code&amp;gt;, иначе будет осуществлена новая проверка (если используется оператор &amp;lt;code&amp;gt;ElseIf&amp;lt;/code&amp;gt;, который может повторяться требуемое количество раз), будет произведено безусловное исполнение блока (если используется оператор &amp;lt;code&amp;gt;Else&amp;lt;/code&amp;gt;), либо интерпретатор перейдет к последующим инструкциям программы (если используется оператор &amp;lt;code&amp;gt;EndIf&amp;lt;/code&amp;gt;). Наличие оператора &amp;lt;code&amp;gt;EndIf&amp;lt;/code&amp;gt; обязательно, как метки окончания конструкции.&lt;br /&gt;
==== Конструкция переключателя (case) ====&lt;br /&gt;
{{planned}}&lt;br /&gt;
&lt;br /&gt;
==== Конструкция цикла с предусловием ====&lt;br /&gt;
::&amp;lt;code&amp;gt;While &amp;lt;выражение&amp;gt; Do&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;code&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;логический блок&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;code&amp;gt;EndDo;&amp;lt;/code&amp;gt;&lt;br /&gt;
Конструкция создает цикл, выполняя блок инструкций, пока выражение возвращает правду. Если выражение возвратит ложь при первом вызове, блок инструкций не будет выполнен ни разу.&lt;br /&gt;
&lt;br /&gt;
==== Конструкция цикла &amp;quot;пока&amp;quot; с постусловием ====&lt;br /&gt;
::&amp;lt;code&amp;gt;Repeat&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;code&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;логический блок&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;code&amp;gt;DoWhile &amp;lt;выражение&amp;gt;;&amp;lt;/code&amp;gt;&lt;br /&gt;
Конструкция создает цикл, выполняя блок инструкций, пока выражение возвращает правду. Проверка выражения осуществляется после выполнения блока инструкций, поэтому последний будет выполнен по крайней мере один раз.&lt;br /&gt;
&lt;br /&gt;
==== Конструкция цикла &amp;quot;пока не&amp;quot; с постусловием ====&lt;br /&gt;
::&amp;lt;code&amp;gt;Repeat&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;code&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;логический блок&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;code&amp;gt;Until &amp;lt;выражение&amp;gt;;&amp;lt;/code&amp;gt;&lt;br /&gt;
Конструкция создает цикл, выполняя блок инструкций до тех пор, пока выражение не возвратит правду, после чего выполнение прекратится. Проверка выражения осуществляется после выполнения блока инструкций, поэтому последний будет выполнен по крайней мере один раз.&lt;br /&gt;
&lt;br /&gt;
==== Конструкция цикла с перечислением ====&lt;br /&gt;
::&amp;lt;code&amp;gt;For &amp;lt;переменная&amp;gt;:=&amp;lt;выражение&amp;gt; {To,Downto} &amp;lt;выражение&amp;gt; Do&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;code&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;логический блок&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;code&amp;gt;EndDo;&amp;lt;/code&amp;gt;&lt;br /&gt;
Конструкция создает цикл, инициализируя переменную вычисленным значением первого выражения. В зависимости от использования ключевого слова '''To''' или ключевого слова '''DownTo''':&lt;br /&gt;
* (ключевое слово '''To''') Блок инструкций выполняется до тех пор, пока значение переменной не будет больше вычисленного значения второго выражения. После выполнения блока инструкций, переменная увеличивается на единицу.&lt;br /&gt;
* (ключевое слово '''DownTo''') Блок инструкций выполняется до тех пор, пока значение переменной не будет меньше вычисленного значения второго выражения. После выполнения блока инструкций, переменная уменьшается на единицу.&lt;br /&gt;
Если значение переменной, при вычислении ее начального значения, сразу же будет удовлетворять условию окончания цикла, блок инструкций не будет выполнен ни разу. Такие циклы выполняются быстрее, чем циклы ''While'' или ''Repeat'', когда необходимо выполнить цикл известное заранее число раз, так как система не вычисляет значение второго выражение после каждого оборота цикла.&lt;br /&gt;
&lt;br /&gt;
==== Конструкция прерывания цикла ====&lt;br /&gt;
::&amp;lt;code&amp;gt;Break [&amp;lt;выражение&amp;gt;];&amp;lt;/code&amp;gt;&lt;br /&gt;
Конструкция прерывает выполнение любого из циклов любого уровня вложенности и продолжает его с первой инструкции вне прерываемого цикла. Каждый цикл имеет блок (набор) инструкций, выполняющийся внутри него определенное количество раз. Эти инструкции выполняются в цикле первого уровня. Если внутри цикла имеется второй цикл (любого вида, будь-то '''For''' или '''While''', в этом случае не имеет значения), инструкции внутри его выполняются в цикле второго уровня. Вложенность циклов неограниченна. Иногда требуется прервать выполнение цикла на определенном этапе и продолжить выполнение программы, как будто цикл был завершен. Для этого существует конструкция '''Break'''. Дополнительный необязательный аргумент конструкции позволяет прервать определенное количество уровней цикла (т.е., буквально выйти из ''n'' уровня цикла на ''p''), встречаются ситуации, когда подобный подход сильно сокращает сложность программы. Пример использования '''Break &amp;lt;Аргумент&amp;gt;''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Сокет:=0;&lt;br /&gt;
ПопыткиМин:=60*1000;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Максимальное время, которое можно затратить на попытки соединения (60 с.)&lt;br /&gt;
НачВремя:=Date();&lt;br /&gt;
While GetPeriodMs(НачВремя)&amp;lt;=ПопыткиМин Do&lt;br /&gt;
  СрвНом:=0;&lt;br /&gt;
  While СрвНом&amp;lt;СпСервер.Size() Do&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Осуществляется проход по всем серверам из списка и попытка соединения последовательно с каждым&lt;br /&gt;
    СрвНом:=СрвНом+1;&lt;br /&gt;
    Сервер:=СпСервер.Get(СрвНом);&lt;br /&gt;
    Сокет:=TCPConnection.ConnectRaw(Сервер);&lt;br /&gt;
    If Сокет.isConnected() Then&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Когда соединение установлено успешно, продолжим работу, прервав оба цикла&lt;br /&gt;
      Break 2;&lt;br /&gt;
    EndIf;  &lt;br /&gt;
  EndDo;&lt;br /&gt;
EndDo;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Конструкция прерывания цикла с продолжением ====&lt;br /&gt;
::&amp;lt;code&amp;gt;Continue [&amp;lt;выражение&amp;gt;];&amp;lt;/code&amp;gt;&lt;br /&gt;
Конструкция прерывает выполнение любого из циклов любого уровня вложенности и продолжает его с первой инструкции самого внешнего цикла (см. описание '''Break''' для понимания терминов, типа уровня цикла). Иногда требуется прервать выполнение цикла на определенном этапе и перейти в его начало, как будто цикл совершил целый оборот. Для этого существует конструкция '''Continue'''. Дополнительный необязательный аргумент конструкции позволяет прервать определенное количество уровней цикла (т.е., буквально выйти из ''n'' уровня цикла на ''p'') и &amp;quot;продолжить&amp;quot; выполнение на самом внешнем уровне. Таким образом '''Continue''' без аргументов просто переходит в начало цикла. Для циклов '''For''' и '''While''' конструкция переходит к условию, которое может прервать выполнение цикла, для циклов '''Repeat''', у которых условие находится в конце цикла, будет гарантировано начато новое выполнение цикла. Пример использования '''Continue''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Тб -- таблица с документами для выгрузки&lt;br /&gt;
Тб.Select();&lt;br /&gt;
While Тб.Next() Do&lt;br /&gt;
  If Тб.Статус=1 Then&lt;br /&gt;
    Continue;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Пропускаем строки таблицы со столбиком Статус, равным 1&lt;br /&gt;
  EndIf;&lt;br /&gt;
  зДок:=Тб.Документ;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Получаем документ из таблицы&lt;br /&gt;
  aTab:=зДок.LineParts(&amp;quot;Номенклатура&amp;quot;);&lt;br /&gt;
  aTab.Select();&lt;br /&gt;
  While aTab.Next() Do&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Производим проверку строк документа&lt;br /&gt;
    зН:=aTab.Номенклатура;&lt;br /&gt;
    If зН.флАлкогольнаяПродукция=0 Then&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Проверяем только строки с алкогольной продукцией&lt;br /&gt;
      Continue;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Если это продукция другого типа, переходим к следующей строке&lt;br /&gt;
    EndIf;&lt;br /&gt;
    If aTab.Партия.Selected()=0 Then&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Во всех проверяемых строках, должен быть заполнен реквизит &amp;quot;Партия&amp;quot;&lt;br /&gt;
      Message(&amp;quot;В документе &amp;quot;+зДок+&amp;quot; не указана партия для номенклатуры &amp;quot;+зН+&amp;quot; (&amp;quot;+зН.Code+&amp;quot;)!&amp;quot;,&amp;quot;!&amp;quot;);&lt;br /&gt;
      Continue 2;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Данный документ содержит неверные строки, пропустим его и перейдем к следующему документу (в начало первого цикла While)&lt;br /&gt;
    EndIf;&lt;br /&gt;
  EndDo;&lt;br /&gt;
&lt;br /&gt;
...&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Выполним необходимую работу по выгрузке документа зДок&lt;br /&gt;
&lt;br /&gt;
EndDo;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Конструкция выхода с параметрами ====&lt;br /&gt;
::&amp;lt;code&amp;gt;Exit [&amp;lt;выражение результата&amp;gt;[,&amp;lt;выражение количества уровней&amp;gt;]];&amp;lt;/code&amp;gt;&lt;br /&gt;
Конструкция прерывает выполнение любой [[#Функции и процедуры|функции]] любого уровня вложенности и, выборочно изменяет значение '''Result''' (переменная значения возврата из функции). По окончании прерывания выполнение программы продолжается непосредственно после вызова функции, используя значение, которое она возвращает или игнорируя его, если функция вызывается, как обычная инструкция. При вызове любой функции, в начале выполнения ее кода, к внутреннему счетчику вложенности функции добавляется единица. Счетчик, однако, всегда равен нулю в начале загрузки нового модуля (см. '''[[LoadModule]]'''). Важная функция Exit не только в окончании выполнения функции в нужный момент, но и в возвращении ее значения. Для каждой функции возвращаемое значение хранится в переменной ''Result'', которая доступна как для записи, так и для чтения в любой момент в пределах текущего уровня функции. Изменение этой переменной перед окончанием функции или выходом из нее возможно, но '''Exit &amp;lt;выражение&amp;gt;''' позволяет это сделать быстрее, и при этом упростить исходный код. Иногда встречаются ситуации, когда удобно выйти сразу из нескольких функций (в таких случаях, обычно в системах без возможностей, которыми обладает '''Exit''' в данной системе, создаются исключения '''Raise''' с тем, чтобы отловить их на нужном уровне, однако, такой подход может быть неудобен из-за вероятности реальных исключений), для этого и необходим второй аргумент, определяющий количество функций, из которых необходимо выйти. Нужно иметь в виду, однако, что за пределы загруженного модуля конструкция '''Exit''' выйти не сможет. В роли функции могут выступать не только обычные определяемые функции, но и контейнеры событий форм или триггеры метаданных и пр. Пример использования '''Exit''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Функция возвращает 0, если заполнение выполнено не полностью, текст ошибки в стрОшибка&lt;br /&gt;
Function ПроверитьПолнотуЗаполнения(зК,ByRef стрОшибка)&lt;br /&gt;
  Function ПроверитьРеквизит(Стр,Имя)&lt;br /&gt;
    If IsEmpty(Стр) Then&lt;br /&gt;
      стрОшибка:=&amp;quot;Не заполнен реквизит &amp;quot;+Имя+&amp;quot;!&amp;quot;;&lt;br /&gt;
      Exit 0,2;&lt;br /&gt;
    EndIf;&lt;br /&gt;
  EndFunction&lt;br /&gt;
&lt;br /&gt;
  стрОшибка:=&amp;quot;&amp;quot;;&lt;br /&gt;
  Result:=0;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Мы не сможем изменить Result этого уровня из вложенной функции&lt;br /&gt;
  ПроверитьРеквизит(зК.Name,&amp;quot;наименование&amp;quot;);&lt;br /&gt;
  ПроверитьРеквизит(зК.ИНН,&amp;quot;ИНН&amp;quot;);&lt;br /&gt;
  ПроверитьРеквизит(зК.ЮрАдрес,&amp;quot;юридический адрес&amp;quot;);&lt;br /&gt;
  ПроверитьРеквизит(зК.ФактАдрес,&amp;quot;фактический адрес&amp;quot;);&lt;br /&gt;
  Result:=1;&lt;br /&gt;
EndFunction&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Конструкция отлова исключения ====&lt;br /&gt;
::&amp;lt;code&amp;gt;Try&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;code&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;логический блок&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;code&amp;gt;Except&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;code&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;логический блок&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;code&amp;gt;EndTry;&amp;lt;/code&amp;gt;&lt;br /&gt;
Конструкция позволяет обнаружить и подавить возникновение [[#Исключения|исключения]] внутри первого блока инструкций, при возникновении исключения, будет выполнен второй блок инструкций. Если же исключение не возникло, второй блок инструкций будет пропущен. Исключение будет подавлено после выполнения второго блока инструкций, дальнейшее исполнение будет продолжаться, как будто исключительная ситуация никогда не возникала. При возникновении исключения, внутри второго блока инструкций можно использовать функции типа '''[[PopError]]''' или '''[[PeekError]]''', чтобы выяснить, какого рода исключение было отловлено, также, при необходимости, можно вызвать новое исключение (к примеру, с помощью конструкции '''Raise'''. Выполнение второго блока инструкций также разрешается прерывать с помощью конструкций типа '''Break''', '''Continue''' или '''Exit'''. Конструкция будет выполнена даже если пользователь [[Общая информация о консольном и визуальном клиентах#Интерфейс и визуальных клиентов|прервал]] выполнение программы, однако, конструкция не сможет подавить исключение, созданное при попытке пользователя прервать выполнение (сразу после выполнения блока ''Except'' данное исключение будет вызвано снова, таким образом гарантируется, что рано или поздно исполнение программы будет прервано, однако, также гарантируется выполнение необходимых действий до завершения выполнения).&lt;br /&gt;
&lt;br /&gt;
==== Конструкция гарантированного выполнения ====&lt;br /&gt;
::&amp;lt;code&amp;gt;Try&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;code&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;логический блок&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;code&amp;gt;Finally&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;code&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;логический блок&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;code&amp;gt;EndTry;&amp;lt;/code&amp;gt;&lt;br /&gt;
Конструкция позволяет выполнить второй блок инструкций вне зависимости от того, произошло ли исключение в первом блоке инструкций, также гарантируется исполнение, если в первом блоке были вызваны команды прерывания '''Continue''', '''Break''' или команда возврата '''Exit'''. При наличии, исключение не будет подавлено после выполнения второго блока инструкций, и дальнейшее исполнение будет прервано, как будто исключение возникло сразу же за последней инструкцией второго блока (это поведение можно изменить, если вызвать функцию '''[[SuppressException]]''' внутри блока ''Finally''). При возникновении исключения, внутри второго блока инструкций можно использовать функции типа '''[[PopError]]''' или '''[[PeekError]]''', чтобы выяснить, какого рода исключение было отловлено, однако, при использовании '''PopError''', информация об исключении будет удалена из стека исключений, и исключение возникнет без какой-либо информации к нему, поэтому, рекомендуется использовать только функцию '''PeekError'''. Конструкция будет выполнена даже если пользователь [[Общая информация о консольном и визуальном клиентах#Интерфейс и визуальных клиентов|прервал]] выполнение программы. Пример использования конструкции дан ниже:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//aEl -- документ, который необходимо обработать&lt;br /&gt;
аПольз:=&amp;quot;&amp;quot;;аМаш:=&amp;quot;&amp;quot;;аВремя:=&amp;quot;&amp;quot;;&lt;br /&gt;
If aEl.Lock(аПольз,аМаш,аВремя)=0 Then&lt;br /&gt;
  Message(&amp;quot;Невозможно заблокировать документ, так как в данный момент с ним работает пользователь &amp;quot;+аПольз+&amp;quot; на &amp;quot;+аМаш+&amp;quot; в &amp;quot;+аВремя+&amp;quot;!&amp;quot;,&amp;quot;!&amp;quot;);&lt;br /&gt;
  Exit;&lt;br /&gt;
EndIf;  &lt;br /&gt;
Фл:=0;&lt;br /&gt;
Try&lt;br /&gt;
  aEl.Reload();&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Необходимо обновить содержимое aEl после блокирования, чтобы исключить вероятность устаревания информации&lt;br /&gt;
  aEl.Publish();&lt;br /&gt;
Finally&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Вне зависимости, произошло ли исключение в строке aEl.Publish(), необходимо разблокировать документ.&lt;br /&gt;
  If not isEmpty(PeekError(6)) Then&lt;br /&gt;
    Message(&amp;quot;Документ &amp;quot;+aEl+&amp;quot; невозможно обработать, причина: &amp;quot;+PopError(6),&amp;quot;!&amp;quot;);//SuppressException() подавит исключение, поэтому, мы можем удалить информацию о нем из стека исключений&lt;br /&gt;
    SuppressException();&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Подавить созданное исключение, Finally работает здесь частично, как Except&lt;br /&gt;
    Фл:=1;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Флаг того, что исключение произошло&lt;br /&gt;
  EndIf;&lt;br /&gt;
  aEl.Unlock();&lt;br /&gt;
EndTry;&lt;br /&gt;
If Фл Then&lt;br /&gt;
  ...&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Блок инструкций, исполняемый, если документ невозможно было обработать&lt;br /&gt;
EndIf;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Синтетический пример, показывающий, что блок инструкций ''Finally'' выполняется даже при использовании прерывания исполнения или команды выхода.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
For i:=1 to 10 Do&lt;br /&gt;
  Try&lt;br /&gt;
    If i&amp;gt;7 Then&lt;br /&gt;
      Exit;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Для значения счетчика 8 будет произведен выход из цикла, цикл для значений 9 и 10 продолжен не будет&lt;br /&gt;
    ElseIf i&amp;gt;3 Then&lt;br /&gt;
      Continue;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Для значений счетчика 4,5,6,7 тело цикла будет пропущено&lt;br /&gt;
    EndIf;&lt;br /&gt;
&lt;br /&gt;
    Message(&amp;quot;Тело цикла, счетчик=&amp;quot;+i);&lt;br /&gt;
&lt;br /&gt;
  Finally&lt;br /&gt;
    Message(&amp;quot;Блок обяз. исполнения, счетчик=&amp;quot;+i);&lt;br /&gt;
  EndTry;&lt;br /&gt;
EndDo;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Результатом исполнения будет вывод (обратите внимание, что несмотря на конструкции ''Continue'' и ''Exit'', блок ''Finally'' все равно выполняется, при значении счетчика 8 цикл будет окончен):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Тело цикла, счетчик=1&lt;br /&gt;
Блок обяз. исполнения, счетчик=1&lt;br /&gt;
Тело цикла, счетчик=2&lt;br /&gt;
Блок обяз. исполнения, счетчик=2&lt;br /&gt;
Тело цикла, счетчик=3&lt;br /&gt;
Блок обяз. исполнения, счетчик=3&lt;br /&gt;
Блок обяз. исполнения, счетчик=4&lt;br /&gt;
Блок обяз. исполнения, счетчик=5&lt;br /&gt;
Блок обяз. исполнения, счетчик=6&lt;br /&gt;
Блок обяз. исполнения, счетчик=7&lt;br /&gt;
Блок обяз. исполнения, счетчик=8&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Конструкция создания исключения ====&lt;br /&gt;
::&amp;lt;code&amp;gt;Raise [&amp;lt;выражение&amp;gt;];&amp;lt;/code&amp;gt;&lt;br /&gt;
Конструкция позволяет создать пользовательское исключение с описанием '''&amp;lt;выражение&amp;gt;'''. Поведение созданного исключения будет аналогичным обычному исключению. Общая информация об исключении будет представлена строкой '''&amp;quot;User defined error&amp;quot;''' (см. описание функции '''[[PopError]]'''). Иногда необходимо создать исключение, чтобы прервать выполнение после получения для этого веского основания. К примеру, если запись документа подразумевает обработку нескольких подчиненных документов и обработать их не удалось из-за того, что один из них был заблокирован другим пользователем, можно создать исключение, чтобы гарантированно прервать исполнение, как будто оно произошло на программном уровне при записи (см. пример). ''Raise'' также можно использовать, чтобы создать исключение заново внутри блока '''Except''' (к примеру: &amp;lt;Code&amp;gt;Raise PopError();&amp;lt;/Code&amp;gt;).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Мы находимся в функции OnSave, которая вызывается при записи документа (aEl), процедура должна осуществить вызов aEl.Save(); самостоятельно&lt;br /&gt;
//aList -- список документов, которые необходимо обработать при записи текущего (aEl)&lt;br /&gt;
Try&lt;br /&gt;
  СтрОш:=&amp;quot;&amp;quot;;&lt;br /&gt;
  For i:=1 To aList.Size() Do&lt;br /&gt;
    зДок:=aList.Get(i);&lt;br /&gt;
    аПольз:=&amp;quot;&amp;quot;;аМаш:=&amp;quot;&amp;quot;;аВремя:=&amp;quot;&amp;quot;;&lt;br /&gt;
    If зДок.Lock(аПольз,аМаш,аВремя)=0 Then&lt;br /&gt;
      СтрОш:=&amp;quot;Невозможно заблокировать документ &amp;quot;+зДок+&amp;quot;, так как в данный момент с ним работает пользователь &amp;quot;+аПольз+&amp;quot; на &amp;quot;+аМаш+&amp;quot; в &amp;quot;+аВремя+&amp;quot;!&amp;quot;,&amp;quot;!&amp;quot;);&lt;br /&gt;
      Break;&lt;br /&gt;
    EndIf;&lt;br /&gt;
  EndDo;&lt;br /&gt;
  If СтрОш&amp;lt;&amp;gt;&amp;quot;&amp;quot; Then&lt;br /&gt;
    Raise СтрОш;&lt;br /&gt;
  EndIf;&lt;br /&gt;
  ...&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Обработка заблокированных документов (блок опущен для читабельности)&lt;br /&gt;
  aEl.Save();&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Вызов этой функции также может создать исключение, поэтому предыдущий Raise будет обработан таким же образом, &lt;br /&gt;
&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//как было бы обработано такое исключение&lt;br /&gt;
Finally&lt;br /&gt;
  aList.MassUnlock();&lt;br /&gt;
EndTry;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Конструкция объявления функции ====&lt;br /&gt;
::&amp;lt;code&amp;gt;Function &amp;lt;имя&amp;gt;([[&amp;lt;способ адресации&amp;gt; ]&amp;lt;имя аргумента&amp;gt;[=&amp;lt;выражение&amp;gt;][,..]]) [Export] {Forward,&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;code&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;логический блок&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;code&amp;gt;EndFunction};&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Конструкция позволяет определить функцию с именем &amp;lt;имя&amp;gt; и заданным количеством аргументов, а также закрепляет за ней логический блок инструкций. В этом блоке инструкций допускается определения вложенных функций, таким образом создается иерархия функций с разным уровнем вложения. В некоторых случаях вложенные функции позволяют упростить написание программы и сделать ее более читабельной и понятной.&amp;lt;/p&amp;gt;&lt;br /&gt;
Имя функции не зависит от регистра написания, при его написании могут быть использованы международные символы (к примеру ''関数''), но должно подчиняться следующим правилам: &lt;br /&gt;
* не должно совпадать с именем другой функции, находящейся на том же уровне вложенности в блоке инструкций одной функции или одного модуля, либо функции, имеющей префикс '''Export''', находящейся на верхних уровнях вложенности.&lt;br /&gt;
* не должно совпадать с именем переменной, если она была задана до определения функции на том же самом уровне вложенности в блоке инструкций одной функции или одного модуля, либо переменной, имеющей префикс '''Export''', находящейся на верхних уровнях вложенности.&lt;br /&gt;
* не должно совпадать с определениями, используемыми в особых конструкциях (к примеру, запрещено создавать функции с именем '''To''' или '''Function''') и вычисляемых выражениях (к примеру, '''And''').&lt;br /&gt;
* не должно содержать нелитерных и нецифровых знаков. Знаки, которые могут быть использованы в имени функций: &amp;quot;0&amp;quot;..&amp;quot;9&amp;quot;, &amp;quot;?&amp;quot;, &amp;quot;A&amp;quot;..&amp;quot;Z&amp;quot;, &amp;quot;_&amp;quot;, &amp;quot;a&amp;quot;..&amp;quot;z&amp;quot;, все символы с кодами &amp;gt;=128.&lt;br /&gt;
===== Аргументы функции =====&lt;br /&gt;
&amp;lt;p&amp;gt;Функция может иметь неограниченное количество аргументов. Свойствами каждого из аргументов являются его имя, способ его адресации и наличие выражения по умолчанию. Имена аргументов подчиняются таким же правилам, как и имена функций. В момент исполнения блока инструкций функции каждый из аргументов может быть адресован по имени, как обычная переменная. Имена аргументов попадают в стек имен последними, при исполнении функции, поэтому, если какое-то имя совпадает с именем переменной с префиксом '''Export''', более высокого уровня вложенности, при обращение к имени будет использован аргумент, а не указанная переменная. Во время вызова функции, к аргументам можно обращаться в функциях более низкого уровня вложенности того же самого модуля (т.е. функция, вызываемая, к примеру, из глобального модуля, не будет видеть аргумент вызывающей функции, находящейся в другом модуле). Иными словами, аргументы функции более высокого уровня вложенности будут доступны только в функциях, вложенных в нее. Агрументы функций можно сделать видимыми из вызываемых функций любого уровня вложенности и любого модуля, если использовать префикс '''Export'''. В этом отношении, они будут подобны переменным с таким префиксом.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Способ адресации аргумента определяет возможность изменения внешней переменной или метода объекта из тела самой функции, а также видимость этого аргумента в вызываемых функциях. Существует два вида адресации аргументов. Оба можно использовать при задании аргументов одновременно (т.е. разрешены комбинации &amp;lt;code&amp;gt;ByRef Export&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Export ByVal&amp;lt;/code&amp;gt; и т.п.): &lt;br /&gt;
* Правила изменения аргумента-переменной. Можно использовать один из указанных префиксов:&lt;br /&gt;
** '''ByVal''', используемый по умолчанию, когда при изменении аргументов внутри функции, внешние переменные не будут изменены (однако, нужно учесть, что, если переменная содержит объект, то аргумент будет содержать тот же самый объект и изменения, производимые в объекте при его адресации с помощью аргумента, будут также видны при его адресации с помощью внешней переменной, пример см. ниже).&lt;br /&gt;
** '''ByRef''', при задании адресации таким способом, после окончания выполнения функции, переменная, использовавшаяся при вызове функции, будет обновлена значением аргумента. Важно понимать, что обновление значения переменных не происходит при каждом изменении аргумента, а только один раз после окончания выполнения функции (пример см. ниже)&lt;br /&gt;
* Видимость аргумента. По умолчанию аргумент будет обычным, если не задан префикс ''Export'':&lt;br /&gt;
** '''Export''' -- при поиске, к этому аргументу будут применяться такие же правила, как и к переменным с префиксом ''Export''.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;При определении аргумента можно также использовать дополнительное выражение, называемое выражением по умолчанию. Если выражение по умолчанию определено, аргумент считается необязательным, его указание при вызове функции не требуется, к примеру для функции &amp;lt;code&amp;gt;Func&amp;lt;/code&amp;gt; с аргументами &amp;lt;code&amp;gt;Func(a,b=1,c=2)&amp;lt;/code&amp;gt; аргументы b и с можно опустить, при пропуске только переменной ''b'', можно осуществить вызов функции в виде, к примеру, &amp;lt;code&amp;gt;Func(1,,3)&amp;lt;/code&amp;gt;, при пропуске только переменной ''c'', функцию можно вызвать, к примеру, &amp;lt;code&amp;gt;Func(1,2)&amp;lt;/code&amp;gt;, при пропуске же обоих аргументов функцию можно вызвать просто как &amp;lt;code&amp;gt;Func(2)&amp;lt;/code&amp;gt;. Выражение, указываемое при определении аргумента, будет использоваться для его инициализации при вызове функции без указания аргумента. Выражения могут быть как простыми константами, так как сложными выражениями с использованием математических, логических функций и даже вызовов других функций объявленных в тексте программы. В случаях сложных выражений их вычисление происходит в момент вызова функции при помещении аргументов в стек переменных до исполнения блока инструкций самой функции.&amp;lt;/p&amp;gt;&lt;br /&gt;
Синтетический пример, показывающий инициализацию и работу с функциями, содержащими разные типы аргументов:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var ПерА export, ПерА2 export;&lt;br /&gt;
&lt;br /&gt;
Function Функ1(ByRef ПерА,ByRef ПерБ=Sin(ПерА),ПерВ)&lt;br /&gt;
&lt;br /&gt;
  Function Функ2()&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Вложенная функция без аргументов&lt;br /&gt;
    ПерА:=1;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Здесь адресуется аргумент Функ1, а не внешняя переменная ПерА, заданная в начале текста&lt;br /&gt;
    ПерА2:=2;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Здесь адресуется внешняя переменная ПерА2, заданная с постфиксом Export&lt;br /&gt;
    ПерБ:=3;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Адресуется аргумент Функ1&lt;br /&gt;
    ПерВ:=4;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Адресуется аргумент Функ1&lt;br /&gt;
  EndFunction&lt;br /&gt;
&lt;br /&gt;
  Message(&amp;quot;Вызов осуществлен с аргументами: &amp;quot;+ПерА+&amp;quot;, &amp;quot;+ПерБ+&amp;quot;, &amp;quot;+ПерВ);&lt;br /&gt;
  Функ2();&lt;br /&gt;
EndFunction;&lt;br /&gt;
&lt;br /&gt;
ПерА:=1;&lt;br /&gt;
Функ1(0,0,0);&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Произойдет вывод &amp;quot;Вызов осуществлен с аргументами: 0, 0, 0&amp;quot;&lt;br /&gt;
Message(ПерА);&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Будет выведено число 1 (функция не изменяла эту переменную)&lt;br /&gt;
Message(ПерА2);&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Будет выведено число 2 (функция изменила эту переменную)&lt;br /&gt;
Пер1:=0;Пер2:=0;Пер3:=0;&lt;br /&gt;
Функ1(Пер1,Пер2,Пер3);&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Произойдет вывод &amp;quot;Вызов осуществлен с аргументами: 0, 0, 0&amp;quot;&lt;br /&gt;
Message(Пер1);&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Будет выведено число 1 (функция изменила эту переменную, при изменении аргумента)&lt;br /&gt;
Message(Пер2);&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Будет выведено число 3 (функция изменила эту переменную, при изменении аргумента)&lt;br /&gt;
Message(Пер3);&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Будет выведено число 0 (способ адресации аргумента не позволил транслировать его изменение на внешнюю переменную)&lt;br /&gt;
Функ1(1,,2);&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Произойдет вывод &amp;quot;Вызов осуществлен с аргументами: 1, 0.841470984807896508, 2&amp;quot;&lt;br /&gt;
//Замечание: аргумент ПерБ был инициализирован значением по умолчанию Sin(ПерА) (т.е. Sin(1))&lt;br /&gt;
&lt;br /&gt;
aTab:=Tab.Create(&amp;quot;Имя,Значение&amp;quot;);&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Создание таблицы со столбцами &amp;quot;Имя&amp;quot; и &amp;quot;Значение&amp;quot;&lt;br /&gt;
aTab.AddLine(&amp;quot;Имя,Значение&amp;quot;,&amp;quot;Первый&amp;quot;,0);&lt;br /&gt;
Пер2:=0;&lt;br /&gt;
Функ1(aTab.Значение,(Пер2),0);&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Произойдет вывод &amp;quot;Вызов осуществлен с аргументами: 0, 0, 0&amp;quot;&lt;br /&gt;
Message(Пер2);&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Будет выведено число 0, так аргументом вызова функции была не переменная, а выражение &amp;quot;(Пер2)&amp;quot;&lt;br /&gt;
Message(aTab.Значение);&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Будет выведено число 0&lt;br /&gt;
//Изменения внутри функции транслируются только на переменные, но не на свойства объектов, так как это может создавать скрытые ошибки, которые тяжело будет найти:&lt;br /&gt;
//  Изменение свойства, это не всегда просто сохранение значения, в случае с объектами базы данных это может быть нежелательно&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Результат функции =====&lt;br /&gt;
При вызове любой функции, после создания и заполнения ее аргументов, создается также особая переменная '''Result''', заполняемая пустым значением. Эта переменная будет возвращена как результат функции, однако, ее поведение соответствует поведению обычной переменной, ее можно изменять и использовать ее значение в любых выражениях. Если в результате выполнения функции нет необходимости, нет смысла использовать эту переменную. Значение этой переменной можно также изменить при использовании конструкции выхода '''Exit''', если у конструкции указан первый аргумент, он будет вычислен, и полученное значение будет помещено в переменную '''Result'''. Так как ''Result'' создается при вызове любой функции, у вложенной функции нет возможности обратиться напрямую к результату функции более высокого порядка вложенности. Пример использования '''Result''' см. ниже:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Function Функ1(ПерА)&lt;br /&gt;
  Result:=0;&lt;br /&gt;
  If ПерА&amp;gt;1 Then&lt;br /&gt;
    Result:=ПерА*2;&lt;br /&gt;
  ElseIf ПерА&amp;lt;0 Then&lt;br /&gt;
    Exit _Pi();&lt;br /&gt;
  EndIf;&lt;br /&gt;
EndFunction;&lt;br /&gt;
&lt;br /&gt;
Message(Функ1(-2));&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Возвращает 3.14159265358979325&lt;br /&gt;
Message(Функ1(2));&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Возвращает 4&lt;br /&gt;
Message(Функ1(1));&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Возвращает 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Вложенность функций и модулей, уровни вложенности =====&lt;br /&gt;
&amp;lt;p&amp;gt;При создании нового потока, после его вызова (к примеру, с помощью '''[[LoadModule]]'''), счетчик вложенности циклов обнуляется, а счетчик вложенности функций приравнивается единице (см. выше, к примеру, конструкции ''Break'' и ''Exit''). Поэтому конструкция ''Exit'' не сможет завершить исполнение программ в предыдущем модуле, а конструкции ''Break'' и ''Continue'' не смогут передать управление программе, находящейся в другом модуле, даже если поток создавался из тела цикла. При вызове функции, счетчик вложенности циклов также обнуляется и, после возврата из функции, восстанавливается его предыдущее значение. Защита подобного рода помогает исключить ошибки, нахождение которых было бы затруднительно.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;При объявлении функции в блоке исполнения другой функции, такая функция называется вложенной. В данной документации понятие ''функция более низкого уровня вложенности'' означает функцию, вложенную внутрь текущей, а ''функция более высокого уровня вложенности'', функцию, в которую была вложена текущая. Вложенные функции имеют доступ к локальным переменным и своим аргументам, к аргументам функций в которые они были вложены, а также к переменным и функциям более высокого уровня вложенности, если они определены с постфиксом '''Export''' (см. аргументы функции).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Следует понимать различие между термином уровни вложенности применительно к исходным текстам программы и к вызову функций из блоков инструкций других функций в процессе исполнения. В последнем случае, функция, к примеру, может вызывать сама себя определенное количество раз, создавая рекурсию. Правила доступности и адресуемости переменных и других функций, однако, применимы для процесса исполнения таким же образом, как и для процесса компиляции.&amp;lt;/p&amp;gt;&lt;br /&gt;
Ниже даны правила доступности переменных, аргументов и имен функций:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #e0e0e0&amp;quot;&lt;br /&gt;
|rowspan=2 width=55% |'''Положение проверяемой функции (или модуля)''' &lt;br /&gt;
|colspan=3 |'''Доступность из блока инструкций исполняемой'''&lt;br /&gt;
|- style=&amp;quot;background: #e0e0e0&amp;quot;&lt;br /&gt;
|width=15% |'''Аргументы'''&lt;br /&gt;
|width=15% |'''Переменные'''&lt;br /&gt;
|width=15% |'''Вложенные функции'''&lt;br /&gt;
|-&lt;br /&gt;
|Проверяемая функция вложена в исполняемую (с любым уровнем вложенности)&lt;br /&gt;
|Нет&lt;br /&gt;
|Нет&lt;br /&gt;
|Нет&lt;br /&gt;
|-&lt;br /&gt;
|Проверяемая функция является исполняемой&lt;br /&gt;
|Да&lt;br /&gt;
|Да&lt;br /&gt;
|Да&lt;br /&gt;
|-&lt;br /&gt;
|Исполняемая функция вложена в проверяемую (с любым уровнем вложенности).&lt;br /&gt;
|Да&lt;br /&gt;
|С постфиксом ''Export''&lt;br /&gt;
|На том же уровне вложенности, что и исполняемая, объявлены до исполняемой&lt;br /&gt;
|-&lt;br /&gt;
|Исполняемая функция вложена в функцию (с любым уровнем вложенности), в которую также вложена проверяемая (с любым уровнем вложенности). Исполняемая функция, однако, не вложена в проверяемую (с любым уровнем вложенности). См. пример ниже.&lt;br /&gt;
|Нет&lt;br /&gt;
|Нет&lt;br /&gt;
|Нет&lt;br /&gt;
|-&lt;br /&gt;
|Исполняемая функция вложена непосредственно в проверяемый модуль.&lt;br /&gt;
|Да&lt;br /&gt;
|С постфиксом ''Export''&lt;br /&gt;
|Объявлены до исполняемой, верхний уровень вложенности&lt;br /&gt;
|-&lt;br /&gt;
|Исполняемая функция вложена в модуль, который был вызван из проверяемого (с любым уровнем вложенности).&lt;br /&gt;
|Нет&lt;br /&gt;
|С постфиксом ''Export''&lt;br /&gt;
|С постфиксом ''Export'', верхний уровень вложенности&lt;br /&gt;
|-&lt;br /&gt;
|Проверяемый модуль является глобальным.&lt;br /&gt;
|Недоступно&lt;br /&gt;
|С постфиксом ''Export''&lt;br /&gt;
|С постфиксом ''Export'', верхний уровень вложенности&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Пример для случая №4:&lt;br /&gt;
Function ВерхнийУровень()&lt;br /&gt;
  Function Проверяемая(АргументыПр)&lt;br /&gt;
    Var ПеременныеПр Export;&lt;br /&gt;
    Function ПроверяемаяПр() Export&lt;br /&gt;
    EndFunction;&lt;br /&gt;
  EndFunction;&lt;br /&gt;
&lt;br /&gt;
  Function Исполняемая()&lt;br /&gt;
    //АргументыПр, ПеременныеПр и функция ПроверяемаяПр() не будут доступны из этого исполняемого блока&lt;br /&gt;
  EndFunction;&lt;br /&gt;
EndFunction;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Объявление заголовков функций =====&lt;br /&gt;
Иногда в процессе написания программы из определенной функции требуется вызвать функцию, которая была описана ниже по тексту, это может происходить, при создании сложной рекурсивной конструкции, либо, чтобы избежать переносов функций внутри модуля, особенно, когда они уже сгруппированы по определенному принципу. С точки зрения исполнения, такой вызов не должен представлять проблему, так как к началу исполнения все функции в модуле определены и известны системе. Однако, что касается компиляции программных текстов, возникает проблема того, что в момент вызова, компилятор еще не знает о существовании (определении) вызываемой функции, что вызовет ошибку компиляции (такой подход позволяет также избежать определенных ошибок при написании программ). Выходом из положения, в данном случае, является возможность объявления заголовка функции заранее без ее блока описания, после чего, в нужном месте модуля, функция будет описана полностью. При объявлении заголовка функции, после перечисления ее аргументов и возможного префикса '''Export''' следует зарезервированное слово '''Forward''', после чего объявление заголовка заканчивается. Сама функция, объявленная &amp;quot;в кредит&amp;quot; таким образом, должна присутствовать позже в том же самом модуле, иначе система вернет ошибку при компиляции. Пример использования '''Forward''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Кусок кода, показывающий необходимость в сложной рекурсии. Элементы разных справочников ищутся по внешнему коду стрКод, в справочнике &amp;quot;СопоставленныеЭлементы&amp;quot;&lt;br /&gt;
//Функция ВыбратьЭлемент должна дать возможность пользователю визуально выбрать нужный элемент с учетом возможных родителей (см. описание справочников БД)&lt;br /&gt;
&lt;br /&gt;
//Здесь описывает только заголовок рекурсивной функции&lt;br /&gt;
Function НайтиРодителя(ВидСпр,Префикс,стрКод,БезВыбора=0) Forward;&lt;br /&gt;
&lt;br /&gt;
//Функция визуально выбирает элемент справочника ВидСпр, который и отдается, как результат&lt;br /&gt;
//  Если пользователь не выбрал элемент, функция возвращает 0.&lt;br /&gt;
//стрКод -- код в промежуточном справочнике сопоставления &amp;quot;СопоставленныеЭлементы&amp;quot;, имеет вид &amp;quot;&amp;lt;КодЭлемента&amp;gt;@&amp;lt;ВидРодителя&amp;gt;#&amp;lt;КодРодителяЭлемента&amp;gt;@&amp;lt;ВидРодителяРодителя&amp;gt;#&amp;lt;КодРодителяРодителяЭлемента&amp;gt;...&amp;quot;&lt;br /&gt;
Function ВыбратьЭлемент(ВидСпр,стрКод)&lt;br /&gt;
  аРод:=0;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Элемент родителя, если он необходим&lt;br /&gt;
  if Struct.Ref(ВидСпр).Parents.Count()&amp;gt;0 Then&lt;br /&gt;
    //Справочник имеет родителей, необходимо сначала осуществить выбор родителя&lt;br /&gt;
    аРод:=НайтиРодителя(ВидСпр,стрКод);&lt;br /&gt;
    If аРод=0 Then&lt;br /&gt;
      Exit 0;&lt;br /&gt;
    EndIf;    &lt;br /&gt;
  EndIf;&lt;br /&gt;
&lt;br /&gt;
  //Вызываем функцию визуального выбора и отдаем ей в первом параметре найденного родителя или 0, если родитель не требуется&lt;br /&gt;
  аЭл:=SelectObject(&amp;quot;Ref.&amp;quot;+ВидСпр,аРод,0,&amp;quot;Module&amp;quot;,&amp;quot;SelectForm&amp;quot;,,,&amp;quot;Выберите требуемый элемент справочника:&amp;quot;,0);&lt;br /&gt;
  Exit ?(not isEmpty(аЭл),аЭл,0);&lt;br /&gt;
EndFunction&lt;br /&gt;
&lt;br /&gt;
Function НайтиРодителя(ВидСпр,стрКод,БезВыбора=0)&lt;br /&gt;
  аЭл:=Ref.СопоставленныеЭлементы;&amp;amp;#9;//Создаем объект элемента справочника СопоставленныеЭлементы&lt;br /&gt;
  TearStr(стрКод,&amp;quot;@&amp;quot;);&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Удаляем код текущего элемента, оставляем внешний код родителя и его вид&lt;br /&gt;
  ВидРод:=TearStr(стрКод,&amp;quot;#&amp;quot;);&amp;amp;#9;&amp;amp;#9;//Находим вид родителя и оставляем только внешний код элемента-родителя&lt;br /&gt;
  If аЭл.Find(&amp;quot;ВидСправочника,ВнешнийКод&amp;quot;,ВидРод,стрКод) Then&lt;br /&gt;
    Exit аЭл.Элемент;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Родитель уже сопоставлен, нет необходимости выбирать что-то визуально&lt;br /&gt;
  ElseIf БезВыбора Then&lt;br /&gt;
    Exit 0;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Родитель не сопоставлен, но визуальный выбор запрещен&lt;br /&gt;
  EndIf;&lt;br /&gt;
  бЭл:=ВыбратьЭлемент(ВидРод,стрКод);&amp;amp;#9;//Вызываем ВыбратьЭлемент уже для родителя&lt;br /&gt;
  Exit бЭл;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Если оператор отказался от выбора возвратится 0, иначе выбранный элемент  &lt;br /&gt;
EndFunction&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Другая функция ниже по модулю, подбирающая возможные варианты выбора&lt;br /&gt;
Function ПодобратьВарианты(ВидСпр,Эл)&lt;br /&gt;
  СпВар:=List.Create();&lt;br /&gt;
  ...&lt;br /&gt;
  If ВидСпр=&amp;quot;ПартииНоменклатуры&amp;quot; Then&lt;br /&gt;
    аЭл:=НайтиРодителя(ВидСпр,Trim(Эл.ВнешнийКод),1);&lt;br /&gt;
    If аЭл=0 Then&lt;br /&gt;
      Exit СпВар;&lt;br /&gt;
    EndIf;&lt;br /&gt;
    ...&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Заполняется СпВар с учетом выбранного родителя&lt;br /&gt;
  EndIf;&lt;br /&gt;
  ...&lt;br /&gt;
EndFunction&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Использование синтаксиса массивов для доступа к значениям объектов ====&lt;br /&gt;
Система не имеет выделенной структуры массивов, так как существуют объекты (списки, таблицы, деревья), которые в полной мере могут заменить подобную структуру. Однако, доступ к элементам массивов с помощью квадратных скобок хорошо понятен, читабелен и может упростить код программы. Система использует подобный доступ к значениям избранных объектов, как будто доступ производится к элементам массивов. Так же, как и с обычными массивами, доступны как чтение, так и запись, вложенность индексов и текстовые индексы для определенных объектов. Получение значения с помощью синтаксиса массива выполняется в следующем виде: &amp;lt;code&amp;gt;&amp;lt;Объект&amp;gt;[&amp;lt;Индекс 1&amp;gt;,...]&amp;lt;/code&amp;gt;, конструкцию вызова массива можно повторять сколько угодно раз (пример, &amp;lt;code&amp;gt;aObj[1,2][&amp;quot;foo&amp;quot;,1]&amp;lt;/code&amp;gt;), изменение значения можно выполнить с помощью команды: &amp;lt;code&amp;gt;&amp;lt;Объект&amp;gt;[&amp;lt;Индекс 1&amp;gt;,...]:=&amp;lt;Значение&amp;gt;&amp;lt;/code&amp;gt;. Если с помощью первого индекса в массиве программа получает элемент из списка значений по его индексу или наименованию, второй и последующий индексы массива будут применены к полученному элементу (и, если этот элемент не является подходящим объектом, к которому можно применить синтаксис массива, будет вызвано исключение). На данный момент синтаксис массивов применим к следующим объектам системы:&lt;br /&gt;
* Для '''строковых значений''' (переменная, содержащая [[Строки|строку]] в ANSI или UTF-16 кодировках) используется один индекс, указывающий на определенный символ строки. Нумерация символов начинается с единицы. Операция получения символа, аналогична выполнению функции [[Mid]]. При изменении символа, кроме строкового значения, можно также указывать числовое значение, оно будет использовано как код присваиваемого символа, это немного быстрее и может использоваться в случае, когда строка хранит бинарные данные.&lt;br /&gt;
* '''Список значений''' (List) использует один индекс массива, который может быть текстовым (в этом случае, выполняется операция аналогичная вызовам функций [[List.GetByName|GetByName]] или [[List.SetByName|SetByName]]), либо числовым (в этом случае, выполняется операция аналогичная вызовам функций [[List.Get|Get]] или [[List.Set|Set]]). &lt;br /&gt;
* '''Таблица значений''' (Tab) использует один или два индекса массива. Если задан всего один индекс массива, он используется как индекс или наименование столбца для получения или изменения значения ячейки таблицы в ее текущей строке (операции &amp;lt;code&amp;gt;&amp;lt;Таблица&amp;gt;.&amp;lt;Имя столбца&amp;gt;&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;&amp;lt;Таблица&amp;gt;.Get(,&amp;lt;Индекс столбца&amp;gt;)&amp;lt;/code&amp;gt;). Если задано более одного индекса массива, первый из индексов используется для указания на столбец таблицы, второй на ее строку (второй индекс может быть только числовым), т.е. выполняется операции &amp;lt;code&amp;gt;&amp;lt;Таблица&amp;gt;.Get(&amp;lt;Индекс 2&amp;gt;,&amp;lt;Индекс 1&amp;gt;)&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;&amp;lt;Таблица&amp;gt;.Set(&amp;lt;Индекс 2&amp;gt;,&amp;lt;Индекс 1&amp;gt;,&amp;lt;Значение&amp;gt;)&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''Дерево значений''' (Tree) использует один или более индексов массива, индекс может быть текстовым (в этом случае, выполняется операция аналогичная вызовам функций [[Tree.GetByName|GetByName]] или [[Tree.SetByName|SetByName]]), либо числовым (в этом случае, выполняется операция аналогичная вызовам функций [[Tree.Get|Get]] или [[Tree.Set|Set]]). Если даны несколько индексов, все операции, кроме последней, получают не значение, а ветку (т.е., для промежуточных индексов используются операции, аналогичные функциям [[Tree.ByIndex|ByIndex]] или [[Tree.FindByName|FindByName]]).&lt;br /&gt;
* '''Текст''' (Text) использует один числовой индекс массива, который указывает на номер строки объекта текста (то есть, выполняется операция аналогичная вызовам функций [[Text.GetLine|GetLine]] или [[Text.SetString|SetString]]).&lt;br /&gt;
* '''Буфер''' (Buffer) использует один или два индекса массива. Первый индекс массива используется как позиция в буфере (первый байт буфера адресуется с нуля), второй аргумент массива, если указан, задает величину данных (доступны значения 1 (по умолчанию, байт без знака), 2 (слово без знака), 4 (двойное слово без знака), 8 или -8 (64-битное числовое значение со знаком), -1 (байт со знаком), -2 (слово со знаком), -4 (двойное слово со знаком)). &lt;br /&gt;
* '''Запись данных''' (MemoryRecord) использует индекс массива для доступа к полям, являющимся массивами. Индексирование начинается с нуля.&lt;br /&gt;
&lt;br /&gt;
Скорость доступа к значениям объектов с помощью синтаксиса массивов обычно не отличается от скорости доступа с помощью обычных функций. Однако, если для доступа используется несколько индексов, адресующих разные объекты, массивы будут работать несколько быстрее.&lt;br /&gt;
&lt;br /&gt;
==== Магические функции ====&lt;br /&gt;
Магическими называются функции, нестандартная работа с аргументами которых, не позволяет создать их обычными средствами языка. Для обычных функций каждый из аргументов вычисляется до того, как будет произведено обращение к функции, тогда как магические функции работают как конструкции языка с блоками инструкций, и вычисления аргументов производятся только когда это необходимо. В отличие от конструкций языка, однако, магические функции не могут представлять самостоятельные инструкции или содержать блоки инструкций, а используются только в выражениях и могут содержать только выражения в своих аргументах. Кроме описанных здесь магических функций, существуют и другие (к примеру, [[Coalesce]], [[InSet]], [[InRange]], [[If2|??]] и т.д.), они помечены как магические в описании и в списке функций. Эти функции, в отличие от описанных здесь, могут использоваться не только в выражениях, но и как самостоятельные инструкции (к примеру, &amp;lt;code&amp;gt;?(pos(&amp;quot;code&amp;quot;,Стр)&amp;gt;0,TearStr(Стр,&amp;quot;code&amp;quot;),TearStr(Стр,&amp;quot;,&amp;quot;));&amp;lt;/code&amp;gt; вызовет ошибку без оператора присваивания, однако использование &amp;lt;code&amp;gt;??(pos(&amp;quot;code&amp;quot;,Стр)&amp;gt;0,TearStr(Стр,&amp;quot;code&amp;quot;),TearStr(Стр,&amp;quot;,&amp;quot;));&amp;lt;/code&amp;gt; допустимо). {{Planned}} Все функции, описанные здесь, в будущем можно будет использовать, как самостоятельные инструкции.&lt;br /&gt;
&lt;br /&gt;
===== Магическая функция логическое &amp;quot;и&amp;quot; =====&lt;br /&gt;
::&amp;lt;code&amp;gt;_And(&amp;lt;выражение&amp;gt;[,&amp;lt;выражение&amp;gt;[,...]])&amp;lt;/code&amp;gt;&lt;br /&gt;
Функция возвращает результат логической конъюнкции своих аргументов. Вычисление аргументов останавливается, после того как встретится первый аргумент возвративший &amp;quot;ложь&amp;quot;. В отличие от конструкции &amp;lt;code&amp;gt;(&amp;lt;выражение&amp;gt;)And(&amp;lt;выражение&amp;gt;)And...&amp;lt;/code&amp;gt;, для которой всегда выполняются все выражения, так как она может являться как логической, так и математической, '''_And''' прекращает исполнение аргументов, как только встречается &amp;quot;ложь&amp;quot;, это позволяет как оптимизировать по скорости условия конструкций типа '''If''', так и пройти каскадное условие доступности, для которого необходимо бы было использовать несколько вложенных функций '''If''', чтобы избежать исключения. Пример разницы между '''And''' и '''_And''' см. ниже:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Function ВывестиАргумент(Арг)&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Функция возвращает переданный ей аргумент и выводит его в лог&lt;br /&gt;
  Message(Арг);&lt;br /&gt;
  Exit Арг;&lt;br /&gt;
EndFunction&lt;br /&gt;
&lt;br /&gt;
//В лог будет выведено 1, 2 и 3. &amp;quot;Проверка пройдена!&amp;quot; выведена не будет. &lt;br /&gt;
If (ВывестиАргумент(1)&amp;lt;2)And(ВывестиАргумент(2)&amp;lt;2)And(ВывестиАргумент(3)&amp;lt;2) Then&lt;br /&gt;
  Message(&amp;quot;Проверка пройдена!&amp;quot;);&lt;br /&gt;
EndIf;&lt;br /&gt;
&lt;br /&gt;
//В лог будет выведено 1, 2. &amp;quot;Проверка пройдена!&amp;quot; выведена не будет. Функция ВывестиАргумент(3) не была вызвана&lt;br /&gt;
If _And(ВывестиАргумент(1)&amp;lt;2,ВывестиАргумент(2)&amp;lt;2,ВывестиАргумент(3)&amp;lt;2) Then&lt;br /&gt;
  Message(&amp;quot;Проверка пройдена!&amp;quot;);&lt;br /&gt;
EndIf;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
//аОбъект -- переменная, содержащая объект неопределенного вида или строковое выражение&lt;br /&gt;
//Нам необходимо проверить, является ли объект элементом справочника &amp;quot;Номенклатура&amp;quot; и, если его реквизит Тип равен единице, вывести в лог его код (реквизит Code)&lt;br /&gt;
аОбъект:=&amp;quot;Не объект&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//Конструкция каскадной проверки, основанная на _And, не вызовет исключений&lt;br /&gt;
If _And(not isEmpty(аОбъект),IsDBObject(аОбъект),аОбъект.DBName()=&amp;quot;Номенклатура&amp;quot;,аОбъект.Тип=1) Then&lt;br /&gt;
  Message(аОбъект.Code);&lt;br /&gt;
EndIf;&lt;br /&gt;
&lt;br /&gt;
//Конструкция с аналогичным использованием And вызовет исключение при вычислении выражения аОбъект.DBName(), так как аОбъект не является объектом&lt;br /&gt;
If (not isEmpty(аОбъект))And(IsDBObject(аОбъект))And(аОбъект.DBName()=&amp;quot;Номенклатура&amp;quot;)And(аОбъект.Тип=1) Then&lt;br /&gt;
  Message(аОбъект.Code);&lt;br /&gt;
EndIf;&lt;br /&gt;
&lt;br /&gt;
//Конструкция каскадной проверки, логически совпадающая с первой, однако не использующая _And, тоже не будет вызывать исключений.&lt;br /&gt;
//Данная конструкция, однако, выполняется медленнее чем первая и более сложна для понимания.&lt;br /&gt;
If (not isEmpty(аОбъект))And(IsDBObject(аОбъект)) Then&lt;br /&gt;
  If аОбъект.DBName()=&amp;quot;Номенклатура&amp;quot; Then&lt;br /&gt;
      If аОбъект.Тип=1 Then&lt;br /&gt;
        Message(аОбъект.Code);&lt;br /&gt;
      EndIf;&lt;br /&gt;
  EndIf;&lt;br /&gt;
EndIf;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Магическая функция логическое &amp;quot;или&amp;quot; =====&lt;br /&gt;
::&amp;lt;code&amp;gt;_Or(&amp;lt;выражение&amp;gt;[,&amp;lt;выражение&amp;gt;[,...]])&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция возвращает результат логической дизъюнкции своих аргументов. Вычисление аргументов останавливается, после того как встретится первый аргумент возвративший &amp;quot;правда&amp;quot;. В отличие от конструкции &amp;lt;code&amp;gt;(&amp;lt;выражение&amp;gt;)Or(&amp;lt;выражение&amp;gt;)Or...&amp;lt;/code&amp;gt;, для которой всегда выполняются все выражения, так как она может являться как логической, так и математической, '''_Or''' прекращает исполнение аргументов, как только встречается &amp;quot;правда&amp;quot;, это позволяет как оптимизировать по скорости условия конструкций типа '''If''', так и превратить несколько условий прерывания исполнения в одно. См. также пример функции '''_And'''.&lt;br /&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;
::&amp;lt;code&amp;gt;_If(&amp;lt;выражение&amp;gt;,&amp;lt;выражение если правда&amp;gt;[,&amp;lt;выражение если ложь&amp;gt;])&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
Функция вычисляет первый аргумент, и, если результатом является логическая &amp;quot;правда&amp;quot;, возвращает вычисленное выражение, следующее вторым аргументом, иначе возвращает вычисленное выражение, следующее третьим аргументом, если он указан или пустое значение, если третий аргумент не указан. Функция производит вычисление второго аргумента только в случае, если первый возвратил &amp;quot;правду&amp;quot;, иначе второй аргумент не будет вычислен. Тоже самое касается третьего аргумента. Функция может использоваться как для быстрой проверки типов, для того, чтобы избежать исключений, так и вместо более громоздких конструкций '''If'''. Позволяет не только уменьшить размер кода, улучшить его читаемость, но также ускорить его исполнение. Записи '''?''' и '''_If''' равнозначны. См. также пример функции '''_And'''.&lt;br /&gt;
&lt;br /&gt;
== Инструкция языка ==&lt;br /&gt;
Любая программа состоит из инструкций собираемых в блоки, использующиеся внутри функций или особых конструкций языка. Инструкции в одном блоке выполняются последовательно. Инструкции разделены между собой знаком ''';''' (точка с запятой) и могут быть двух типов:&lt;br /&gt;
# '''Инструкция исполнения'''. Инструкция представляет собой обращение к функции (функция не может быть магической), вычисляемые выражения могут быть только частью аргументов функции. Если функция возвращает какой-либо результат, он не будет использован. Общий вид инструкции: '''&amp;lt;ИмяФункции&amp;gt;'''{{Optional|(''&amp;lt;Аргумент 1&amp;gt;'',&amp;lt;Аргумент 2&amp;gt;,...)}};.&lt;br /&gt;
# '''Инструкция присваивания'''. Инструкция представляет собой вычисляемое выражение, значением которого обновляется значение переменной или свойства объекта. Между именем переменной и выражением используется знак присваивания ''':='''. Использование знака равенства ('''=''') в этом случае допускается, но не рекомендуется, так как это может ухудшить читаемость текста программы. Общий вид инструкции: '''&amp;lt;ИмяПеременнойИлиСвойства&amp;gt;''':='''&amp;lt;Выражение&amp;gt;''';. &lt;br /&gt;
Пример использования инструкций обоих типов:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Message(&amp;quot;12&amp;quot;);&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Инструкция исполнения выводит в лог программы значение &amp;quot;12&amp;quot;&lt;br /&gt;
a:=1;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Инструкция присваивания создает новую переменную a и присваивает ей значение 1&lt;br /&gt;
a:=Sin(a)*1.5-Cos(a/2)/_Pi*2;&amp;amp;#9;&amp;amp;#9;//Инструкция присваивания изменяет значение переменной a в соответствии с результатом вычисления выражения&lt;br /&gt;
a:=Message(&amp;quot;12&amp;quot;);&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Каждая функция возвращает результат, функция Message возвращает пустой результат, который присваивается переменной а.&lt;br /&gt;
&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Данная инструкция, в отличие от самой первой в этом блоке, уже является инструкцией присваивания, при этом, она по-прежнему выводит строку &amp;quot;12&amp;quot;&lt;br /&gt;
Message(&amp;quot;12&amp;quot;)+1;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Ошибочная инструкция, содержащая только выражение, компиляция будет остановлена&lt;br /&gt;
?(a=1,2,3);&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Ошибочная инструкция, магическая функция ? может использоваться только в выражениях, и не может быть самостоятельной инструкцией исполнения.&lt;br /&gt;
a:=?(a=1,2,3);&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Инструкция присваивания, с использованием магической функции в ее выражении не вызовет ошибки.&lt;br /&gt;
a:=a=1;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Инструкция присваивания, результат логического выражения a=1 (0 или 1) присваивается переменной а&lt;br /&gt;
&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Данная инструкция показывает, почему пара &amp;quot;:=&amp;quot; при присваивании предпочтительна простому знаку &amp;quot;=&amp;quot;&lt;br /&gt;
aTab.CurLine:=12;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Инструкция присваивания записывает 12 в свойство CurLine объекта, задаваемого переменной aTab (в данном примере объект типа таблица)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Вычисляемые выражения и старшинство операций при вычислении ==&lt;br /&gt;
&lt;br /&gt;
Вычисляемые выражения представляют собой математические или логические формулы с участием числовых, строковых или временных констант, заданных непосредственно в тексте программы, переменных, свойств объектов и функций, связанных между собой знаками или определениями операций и скобками. Простым примером вычисляемого выражения является математическое выражение (к примеру '''1+2'''). Математические знаки и определения операций в основном совпадают с операциями в других языках, общее количество используемых операций невелико (см. ниже). Выражения вычисляются всегда слева направо, даже с учетом приоритета операций и скобок. Функции, используемые в выражении, всегда будут вычислены последовательно без пропусков (см. пример ниже), однако правило может не работать для функций, использующихся в аргументах магических функций. Каждая операция имеет свой приоритет. Если внутри одного уровня скобок встречаются несколько последовательных операций, связывающих разные аргументы (операнды), результат вычисления выражения будет зависеть от приоритетности операций. Ниже дается список приоритетности и список возможных операций языка:&lt;br /&gt;
# '''(''', ''')''' -- скобки позволяют вычислять группы операций вместе, и являются самыми приоритетными знаками операций (хотя скобки это не операции в обычном смысле, они приведены в списке для полноты).&lt;br /&gt;
# '''NOT''' -- унарная логическая и математическая операция инвертирования&lt;br /&gt;
# '''SHL''', '''SHR''' -- бинарные операции математического сдвига&lt;br /&gt;
# '''AND''', '''OR''', '''XOR''' -- бинарные логические и математические операции ''и'', ''или'' и ''исключающего или''.&lt;br /&gt;
# '''*''', '''/''', '''\''', '''%''' ('''MOD''') -- бинарные математические операции ''умножения'', ''деления'', ''целочисленного деления'' и ''нахождения остатка от деления''&lt;br /&gt;
# '''+''', '''-''' -- бинарные математические операции ''сложения'' и ''вычитания'', а также унарные математические операции ''подтверждения знака'' и ''обращения знака''&lt;br /&gt;
# '''=''', '''&amp;lt;&amp;gt;''', '''&amp;lt;''', '''&amp;gt;''', '''&amp;lt;=''', '''&amp;gt;=''' -- бинарные логические операции ''равно'', ''не равно'', ''меньше'', ''больше'', ''меньше или равно'', ''больше или равно''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//В данном примере показано, что вне зависимости от приоритета, функции в вычисляемых выражениях всегда вычисляются последовательно.&lt;br /&gt;
Function Проверка(Аргумент)&lt;br /&gt;
  Message(Аргумент);&lt;br /&gt;
  Exit Аргумент;&lt;br /&gt;
EndFunction;&lt;br /&gt;
&lt;br /&gt;
a:=Проверка(1)+Проверка(2)*Проверка(3) shl Проверка(4);&lt;br /&gt;
//На экран будет выведена последовательность 1,2,3 и 4. С математической точки зрения, необходимо сначала вычислить выражение Проверка(3) shl Проверка(4), &lt;br /&gt;
//  потом результат умножить на Проверка(2) и сложить с Проверка(1).&lt;br /&gt;
&lt;br /&gt;
a:=((Проверка(1)=0)And(Проверка(2)=0)And(Проверка(3)=0))Or(Проверка(4)=0);&lt;br /&gt;
//На экран будет выведена последовательность 1,2,3 и 4. С логической точки зрения, достаточно произвести вычисление Проверка(1)=0, чтобы понять, что проверки Проверка(2)=0 и Проверка(3)=0&lt;br /&gt;
//  можно пропустить, получив значение &amp;quot;ложь&amp;quot;, после этого нужно будет вычислить значение Проверка(4)=0.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Логические выражения ====&lt;br /&gt;
Булева функция может принимать два значения &amp;quot;ложь&amp;quot; и &amp;quot;правда&amp;quot;. Любое логическое выражение оперирует и возвращает одно из двух возможных значений булевой функции. В системе, однако, нет выделенного булевого типа, вместо него используется обычный целочисленный тип. При логической проверке конструкциями '''If''', '''While''' и пр. или магическими функциями '''?''', '''_And''' и пр. и везде, где должен быть указан булевый аргумент, в системе используется целочисленный. Значение этого аргумента будет являться &amp;quot;правдой&amp;quot;, если его младший бит установлен, и &amp;quot;ложью&amp;quot;, если его младший бит сброшен. В таком представлении любые целочисленные логические функции, типа '''And''', '''Or''', '''Xor''' будут также работать с логическими аргументами, надобность в дополнительном типе данных пропадает, программирование системы упрощается. Ниже даны несколько примеров работы с логическими функциями в системе:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
If 1 Then&lt;br /&gt;
  Message(&amp;quot;Этот текст всегда будет выведен, так как 1 соответствует логическому значению 'правда'&amp;quot;);&lt;br /&gt;
EndIf;&lt;br /&gt;
&lt;br /&gt;
Message(1&amp;gt;2);&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Выводит число 0 (&amp;quot;ложь&amp;quot;)&lt;br /&gt;
Message(3&amp;gt;=2);&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Выводит число 1 (&amp;quot;правда&amp;quot;)&lt;br /&gt;
Message((Sin(1))Or(2)Or(2&amp;gt;1));&amp;amp;#9;&amp;amp;#9;//Бессмысленное выражение, смешивающее вещественные числа, целочисленную логику и булеву логику, &lt;br /&gt;
&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//вычисление которого, между тем, не приводит к ошибке (в лог выводится число 3).&lt;br /&gt;
Message(Sqrt(20) And 65535);&amp;amp;#9;&amp;amp;#9;//При операциях с целочисленной логикой, вещественные числа приводятся к целым (отбрасывается дробная часть), это выражение выведет 4.&lt;br /&gt;
&lt;br /&gt;
//В данном примере на экран выводится стиль шрифта элемента формы с именем &amp;quot;Поле&amp;quot;. Свойство FontStyle отдает число, представляющее битовую маску с битами: &lt;br /&gt;
//   1 -- жирный, 2 -- наклонный, 3 -- подчеркнутый, 4 -- зачеркнутый. Пример пользуется тем, что логические функции учитывают только младший бит числа.&lt;br /&gt;
аСтиль:=Form.ControlByName(&amp;quot;Поле&amp;quot;).FontStyle;&lt;br /&gt;
Message(&amp;quot;Стиль элемента &amp;quot;&amp;quot;Поле&amp;quot;&amp;quot;: &amp;quot;+?(аСтиль,&amp;quot;жирный &amp;quot;)+?(аСтиль\2,&amp;quot;наклонный &amp;quot;)+?(аСтиль\4,&amp;quot;подчеркнутый &amp;quot;)+?(аСтиль\8,&amp;quot;зачеркнутый &amp;quot;));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Константы в исходных текстах ==&lt;br /&gt;
При написании исходных текстов часто приходится использовать заранее известные значения -- числа, строки или даты. Данные значения называются константами. При компиляции текста, они превращаются в нужный тип данных и сохраняются в компилированном файле с тем, чтобы позже, использоваться при исполнении выражений. Способ задания констант в исходных текстах программы следующий:&lt;br /&gt;
* '''Числа''' (вещественные или целые) записываются в стандартной математической форме, кроме десятичных констант система позволяет записывать числа в шестнадцатеричной, восьмеричной и двоичной системах исчисления. Принимаются следующие форматы записи чисел:&lt;br /&gt;
# &amp;lt;code&amp;gt;{+,-}*[E{+,-}*]&amp;lt;/code&amp;gt; (где ''*'' заменяет любое количество знаков ''0''..''9'') -- используется для записи десятичных целых или вещественных чисел. Число может содержать только следующие знаки ''+'',''-'',''0''..''9'',''.'',''E'' (или ''e'', используется для указания мантиссы вещественных чисел). Разделителем целой и вещественной части служит ''точка'' ('''.'''). Примеры: &amp;lt;code&amp;gt;1.23&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;1000000000000&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;1.73E+100&amp;lt;/code&amp;gt;.&lt;br /&gt;
# &amp;lt;code&amp;gt;$*&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;0x*&amp;lt;/code&amp;gt; (где ''*'' заменяет любое количество знаков ''0''..''9'', ''a''..''f'') -- используется для записи шестнадцатеричных целых чисел. Число может содержать только следующие знаки ''0''..''9'',''x'',''X'',''a''..''f'',''A''..''F''. Ввод вещественных чисел в шестнадцатеричной нотации не допускается. Примеры: &amp;lt;code&amp;gt;$fffaa&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;0x76AB&amp;lt;/code&amp;gt;.&lt;br /&gt;
# &amp;lt;code&amp;gt;0o*&amp;lt;/code&amp;gt; (где ''*'' заменяет любое количество знаков ''0''..''7'') -- используется для записи восьмеричных целых чисел. Число может содержать только следующие знаки ''0''..''7'',''o'',''O''. Ввод вещественных чисел в восьмеричной нотации не допускается. Примеры: &amp;lt;code&amp;gt;0o7601&amp;lt;/code&amp;gt;.&lt;br /&gt;
# &amp;lt;code&amp;gt;0b*&amp;lt;/code&amp;gt; (где ''*'' заменяет любое количество знаков ''0''..''1'') -- используется для записи двоичных целых чисел. Число может содержать только следующие знаки ''0''..''1'',''b'',''B''. Ввод вещественных чисел в двоичной нотации не допускается. Примеры: &amp;lt;code&amp;gt;0b11010001&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''Строки''' всегда заключены в ''двойные кавычки'' ('''&amp;quot;'''). Для того, чтобы добавить двойную кавычку в строку, ее нужно употребить два раза. К примеру, выражение &amp;lt;code&amp;gt;&amp;quot;Строка &amp;quot;&amp;quot;в кавычках&amp;quot;&amp;quot;&amp;quot;&amp;lt;/code&amp;gt; представляет с собой строку ''Строка &amp;quot;в кавычках&amp;quot;''. Строковая константа всегда должна быть закончена до окончания строки, если необходимо добавить в строку перевод строки, можно использовать [[константы|именованную константу]] '''_NEWLINE'''. Однако, можно также указать в начале следующей строки символ конкатенации строковых констант '''|'''. В этом случае, компилятор продолжит набор строковой константы со следующей строки, а вместо символа '''|''' будет добавлен знак перевода строки. Пример показан ниже:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ТЗ:=&amp;quot;Period From НачДата to КонДата;&lt;br /&gt;
|зБс:=Storage.Банк.БанковскийСчет;&lt;br /&gt;
|зЮЛ:=Storage.Банк.ЮрЛицо;&lt;br /&gt;
|зСмП:=Income(Сумма);&lt;br /&gt;
|зСмР:=Expense(Сумма);&lt;br /&gt;
|зСмНО:=BegTotals(Сумма);&lt;br /&gt;
|зСмКО:=EndTotals(Сумма);&lt;br /&gt;
|Condition(NOT IsEmpty(зЮЛ));&amp;quot;;&lt;br /&gt;
//В данном примере создается длинная строковая константа, располагающаяся на нескольких строках, вместо знаков | будет добавлен перевод строки.&lt;br /&gt;
//Важно понимать, что внутри строк до их завершения невозможно использовать комментарии. Пример: &lt;br /&gt;
а:=&amp;quot;Некая строка //Данный текст не является комментарием, а будет частью строковой константы&lt;br /&gt;
|Другая строка&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
а:=&amp;quot;Некая строка&amp;quot;+_NEWLINE+ //Данный уже будет являться комментарием&lt;br /&gt;
&amp;quot;Другая строка&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* '''Константы даты и времени''' всегда заключены в ''апострофы''  ('''&amp;lt;nowiki&amp;gt;'&amp;lt;/nowiki&amp;gt;'''). Понимаются следующие форматы записи даты и времени:&lt;br /&gt;
# &amp;lt;code&amp;gt;[Д]Д.[М]М.ГГ[ГГ][ [Ч]Ч:[М]М[:[С]С]]&amp;lt;/code&amp;gt; -- Стандартный формат записи. Примеры: &amp;lt;code&amp;gt;'10.12.2012'&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;'31.01.2020 12:00'&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;'3.6.25 4:12:11'&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;[М]М/[Д]Д/ГГ[ГГ][ [Ч]Ч:[М]М[:[С]С]]&amp;lt;/code&amp;gt; -- Американский формат, разделителем является знак '''/'''. Время по-прежнему задается в 24-х часовом формате. Примеры: &amp;lt;code&amp;gt;'12/10/2012'&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;'01/31/2020 12:00'&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;'6/3/25 4:12:11'&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;[Д]Д-[М]М-ГГ[ГГ][ [Ч]Ч:[М]М[:[С]С]]&amp;lt;/code&amp;gt; -- Стандартный формат с разделителем '''-'''. Примеры: &amp;lt;code&amp;gt;'10-12-2012'&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;'31-01-2020 12:00'&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;'3-6-25 4:12:11'&amp;lt;/code&amp;gt;&lt;br /&gt;
При попытке использовать другие форматы в тексте исходного кода, компиляция будет остановлена с ошибкой. Если при указании даты временная часть опускается, она считается равной 00:00:00. Если при указании временной части, секундная часть опускается, она считается равной нулю секунд.&lt;br /&gt;
&lt;br /&gt;
== Исключения ==&lt;br /&gt;
&amp;lt;p&amp;gt;Исключения могут возникать в моменты ошибочных ситуаций в программах, а могут быть вызваны специально, как прием прерывания выполнения, когда условия не удовлетворяют проверке и продолжение исполнения невозможно. Большинство функций способны вызвать исключение, если, к примеру, они получают в своих аргументах неожиданные или неверные значения (слишком большое число, индекс, выходящих за пределы списка или таблицы и пр.) -- такие исключения сигнализируют об ошибках в написании кода программы, возможны также исключения из-за внешних событий (к примеру, отсутствие файла или его некорректный формат) -- такие исключения невозможно предугадать, поэтому разработчик должен предусмотреть и запрограммировать реакцию программы при их возникновении. Поведением по умолчанию при возникновении исключения является остановка программы на текущей инструкции, текущий модуль, при этом, закрыт не будет (кроме ситуаций, когда исключение возникло в предопределенном событии '''OnOpen''' или в момент исполнения события формы '''OnOpen'''), управление будет отдано пользователю.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Важно понимать, что в данном тексте под исключениями понимаются внутренние события, возникающие на уровне языка. Системные исключения, сигнализирующие ошибки внутри операционной системы или внешние катастрофические события, не затрагиваются этой темой, см. статью &amp;quot;[[Исключения в программе и отладка исключений]]&amp;quot;.&amp;lt;/p&amp;gt; &lt;br /&gt;
Разнообразные конструкции и функции системы помогают настроить работу с исключениями, как это необходимо разработчику. В данный список входят функции и конструкции, которые:&lt;br /&gt;
* Изменяют поведение системы по умолчанию при возникновении исключений: конструкции '''Try/Except''', '''Try/Finally''' (описание см. выше)&lt;br /&gt;
* Вызывают или подавляют исключения: конструкция '''Raise''' (см. выше), функции '''[[SuppressException]]''', '''[[Assert]]''', '''[[Reraise]]'''.&lt;br /&gt;
* Получают информацию по возникшим исключениям: функции '''[[PopError]]''', '''[[PeekError]]'''.&lt;br /&gt;
* Получают информацию по стеку исполнения программы: функция '''[[dbgStackTrace]]'''.&lt;br /&gt;
&lt;br /&gt;
== Типы данных, объекты и обращение к ним ==&lt;br /&gt;
&amp;lt;p&amp;gt;Каждая переменная в системе содержит какой-либо объект. Объекты разделяются на сложные и простые. Простые объекты (пустое значение, числа, даты, строки) всегда копируются при копировании переменной в другую переменную (&amp;lt;code&amp;gt;a:=b;&amp;lt;/code&amp;gt;), а также при передаче переменных в виде аргументов в функцию (т.е., изменение аргумента функции не вызовут изменение внешней переменной, даже если для аргумента использован префикс '''ByRef''', однако, в последнем случае, изменение будет скопировано в назад переменную после окончания выполнения функции). Сложные объекты (количество которых может варьироваться в зависимости от подключения внешних библиотек, сборки системы и пр.) не хранятся непосредственно в переменных, а представлены ссылками. При копировании содержания переменной, или передаче ее в виде аргумента в тело функции, в новой переменной создается дополнительная ссылка на сложный объект (и его внутренний счетчик ссылок увеличивается на единицу). См. также статью [[Объекты]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Каждый сложный объект принадлежит определенному набору функций и свойств, называемому ''интерфейсом''. Интерфейсы имеют свои имена и к ним можно обращаться, однако, обычно не несут важной функции, кроме как создание новых объектов из них (однако, есть исключения). Интерфейс можно себе представить как трафарет, а объект, как рисунок, полученный с помощью этого трафарета. Интерфейсы не содержат реальных данных, это программный набор функций, он не занимает в памяти дополнительного места. Как только создается объект, в памяти отводится определенное место под его данные (разное для разных объектов), при этом, используя этот созданный объект, можно вызывать функции его интерфейса, чтобы модифицировать его и производить манипуляцию данными с помощью его свойств. Любое обращение к внутренним возможностям объектов и интерфейсов происходит с помощью разделителя &amp;lt;b&amp;gt;.&amp;lt;/b&amp;gt; (точка) за которым следует наименование функции или свойства. Некоторые функции или свойства объектов могут возвратить новый (или существовавший ранее) объект. В этом случае, разделитель можно применить повторно, чтобы обратиться к функциям возвращаемого объекта. Таким образом можно создавать конструкции каскадных обращений к объектам с помощью разделителей, которые могли иначе бы занять много строк текста. К примеру, строка &amp;lt;code&amp;gt;аИмя:=Ref.тмцНоменклатура.Find(&amp;quot;Code&amp;quot;,&amp;quot;000000001355&amp;quot;).Name&amp;lt;/code&amp;gt;, начинается с обращения к интерфейсу &amp;lt;b&amp;gt;Ref&amp;lt;/b&amp;gt;, далее созданию [[Объект базы данных|объекта базы данных]] с типом ''справочник тмцНоменклатура'', затем для свежесозданного объекта вызывается функция '''Find''', которая заполняет объект реальным значением из базы данных, после чего находится свойство с именем реквизита базы данных ''Name'', оно и присваивается переменной ''аИмя''.&amp;lt;/p&amp;gt;&lt;br /&gt;
Интерфейсы (и их объекты) обычно содержат следующие элементы, с помощью которых можно обращаться к ним:&lt;br /&gt;
* '''Функция создания нового объекта'''. Вызывается непосредственно из интерфейса. Обычно она называется '''Create''', но может иметь и другие названия, таких функций может быть множество, иногда она может отсутствовать. Зачастую такие функции также можно вызвать из объектов, что, в прочем, не имеет особого смысла (к примеру, &amp;lt;code&amp;gt;aList:=List.Create(1,2,3);bList:=aList.Create();&amp;lt;/code&amp;gt; ''bList'' создан вызовом из объекта, а не интерфейса, как это обычно бывает). Замечание: наличие функции удаления объекта не требуется, так как он удаляется автоматически системой, после того, как удалены все его ссылки. &lt;br /&gt;
* '''Функции, вызываемые непосредственно из интерфейса''' (включая функции создания новых объектов). Большинство функций интерфейса могут быть вызваны только из объекта, так как им необходимы данные, которые могут ассоциироваться только с объектами, однако, существуют абстрактные функции, которые можно вызывать непосредственно из интерфейса, а есть и такие, которые работают только в совокупности с интерфейсом и не будут работать в объекте. &lt;br /&gt;
* '''Свойства объекта'''. Свойства предоставляют доступ к внутренним данным объекта, в отличие от функций обычно не имеют аргументов и часто существует возможность их изменения, т.е., употребления свойства с левой стороны инструкции присваивания (к примеру, &amp;lt;code&amp;gt;aTab.CurLine:=12&amp;lt;/code&amp;gt;, ''CurLine'' здесь является свойством объекта ''aTab'' с интерфейсом ''[[Таблица|Tab]]''). Присвоение значений функциям не имеет смысла.&lt;br /&gt;
* '''Функции объекта'''. Все остальные функции, перечисленные в интерфейсе и доступные для использования в его объектах.&lt;br /&gt;
&lt;br /&gt;
== Компиляция и способ хранения текстов ==&lt;br /&gt;
Исходные тексты программы хранятся не только в модулях системы (отдельных текстовых файлах, специально предназначенных для хранения таких текстов), но также могут быть привязаны к данным другого вида, в последнем случае, они являются событиями или триггерами. Исполнения программ только из модулей недостаточно, чтобы удобно описать взаимодействие пользователя с пользовательским интерфейсом или некоторых объектов базы данных и основной программы, поэтому тексты программ приходится привязывать к визуальным объектам, чтобы, к примеру, выполнить какое-либо действие после того, как пользователь нажал на кнопку или изменилась выделенная строка в таблице. Также удобнее, к примеру, описать механизм отмены обработки документа в специальном месте, привязанном к объекту базы данных, в частности, это позволяет вызывать такую программу-триггер как в момент вызова программой функций '''[[DB.Unpublish|Unpublish()]]''' или '''[[DB.Mark|Mark()]]''' (без какой-либо необходимости что-то дополнительно описывать, передавать в параметрах имя процедуры обработки и пр.), так и при визуальном удалении документа из журнала, упрощая программирование системы и уменьшая число возможных ошибок. Ниже представлены разнообразные способы хранения исходных текстов в системе:&lt;br /&gt;
* '''Модули''' (в т.ч. глобальные). Отдельные файлы, полностью отданные под хранение модулей.&lt;br /&gt;
* '''Визуальные события'''. Тексты событий хранятся внутри особых контейнеров внутри файлов-описаний форм. События, описанные таким образом, могут быть привязаны как к элементам формы (причем каждому элементу может быть задано множество событий), так и к самой форме в общем.&lt;br /&gt;
* '''События пунктов меню''' и '''события панели инструментов'''. Тексты триггеров событий хранятся внутри файлов с описанием меню и панелей инструментов. События выполняются, когда пользователь выбирает определенный пункт меню или нажимает на кнопку на панели инструментов.&lt;br /&gt;
* '''Триггеры объектов базы данных'''. Тексты хранятся внутри файла метаданных и вызываются в моменты создания, записи или обработки объектов.&lt;br /&gt;
Для увеличения скорости исполнения все тексты (включая события и триггеры) до передачи на сервер базы данных подвергаются компиляции. Компиляция это необратимое преобразование текстового файла программы в бинарный файл, не являющийся файлом машинного кода, но более понятный и удобный для исполнения машине, чем текстовый файл. Компилированные файлы невозможно в полной мере превратить назад в тот вид, какими они были до компиляции (при компиляции, к примеру, теряются комментарии, возможно меняются имена переменных и пр.). Поэтому, такие файлы хранятся только на сервере, тогда как разработчик может продолжать производить требуемые изменения в тестах проекта. Компиляция выполняется автоматически программой разработки [[Общая информация и интерфейс Студии|'''Студия''']], при этом в компиляции участвуют и подвергаются обновлению на сервере только те файлы, в которых производились изменения.&lt;br /&gt;
&lt;br /&gt;
== Предопределенные события ==&lt;br /&gt;
&amp;lt;p&amp;gt;В некоторых случаях, более удобно описать какое-либо событие внутри модуля, нежели в контейнере обработчике событий. Иногда это связано с тем, что такое событие будет вызвано по умолчанию, и, если его разместить в глобальном модуле, можно изменить поведение всего проекта при наступлении какого-либо события в любом его месте, после чего для определенных форм это поведение можно модифицировать в обработчиках событий. Иногда же, такой способ является единственно возможным (к примеру, файлы электронных таблиц на данный момент не подразумевают наличия своего хранилища событий, поэтому, события, связанные со свободными окнами электронных таблиц вызываются только из модуля, из которого эти таблицы были созданы (данный модуль будет оставаться в памяти системы, до того, как будет закрыта последняя таблица); однако, для электронной таблицы, помещенной на форму, как ее элемент, уже можно задать свои события из редактора форм.&amp;lt;/p&amp;gt;&lt;br /&gt;
С учетом внешних событий или событий, задаваемых подключаемыми модулями, количество типов предопределенных событий в системе не ограничено. Однако основные события, описанные на уровне системы, поддаются полному описанию. Для получения информации см. статью [[Предопределенные события]].&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>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</id>
		<title>Временная таблица базы данных</title>
		<link rel="alternate" type="text/html" href="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"/>
		<updated>2026-04-01T10:01:20Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{infobox object&lt;br /&gt;
|object=TempDB&lt;br /&gt;
|status=2&lt;br /&gt;
|create=[[TempDB.Create|Create]]}}&lt;br /&gt;
{{HeadLinks|&lt;br /&gt;
* [[Main_Page|Начальная страница]]&lt;br /&gt;
* [[Общее_описание_языка|Общее описание]]&lt;br /&gt;
* [[Объекты]]}}&lt;br /&gt;
&amp;lt;p&amp;gt;Объект '''временная таблица базы данных''' работает в двух режимах -- как несохраняемая в базе данных таблица СУБД, которая будет удалена при уничтожении объекта временной таблицы, либо как постоянная таблица не связанная с метаданными в другой базе данных, к которой имеет доступ текущая СУБД. В первом режиме (временной таблицы), объект может использоваться для создания выгрузок во внешние источники больших объемов данных, полученных из нескольких объектов базы данных и объединенных сложным образом. Также любая выгрузка или обработка, оперирующая данными, которая проходит без участия пользователя (консольный клиент), имеющая потенциально большой объем информации, может быть написана с использованием временных таблиц баз данных вместо [[Объект запрос базы данных|запросов баз данных]]. Второй режим позволяет использовать внешние базы данных для хранения большого объема информации, который не выгодно держать в рабочей базе данных, либо информация будет использоваться или изменяться внешними программами. К примеру, это могут быть логи, бинарные файлы, данные, которые зависят от времени с большим объемом, которыми, возможно пользуется другая база данных и т.п. Для того, чтобы использовать такие базы данных, они должны быть сначала перечислены в файле инициализации сервера (см. [[Установки сервера]], ветка '''SimpleDBases'''). Функционально работа между двумя режимами не имеет отличий (за исключением того, что есть функции, которые работают только с режимом временной базы данных (к. примеру [[TempDB.Group|Group]]), а есть, которые только в режиме постоянной базы данных (к примеру, [[TempDB.DeleteTable|DeleteTable]]). В данном описании объекты обоих режимов называются &amp;quot;временными таблицами&amp;quot; по наименованию исходного объекта языка.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Работа с информацией с помощью временных таблиц сильно отличается от таковой при работе с запросами. Основное отличие заключается в том, что временные таблицы всегда хранятся на сервере базы данных и получение информации из них происходит в последний момент, когда все или большинство операций преобразования информации уже выполнено. Таблицы не хранятся в памяти машины текущего клиента, и информация доставляется до программы с помощью выборки по несколько записей одновременно, это позволяет использовать таблицы для преобразования информации неограниченного объема. Однако, работа с таблицами происходит с помощью наборов данных, а не выборкой по каждой записи, как это обычно делается программно при обработке результатов запроса, это может усложнить написание программы, и сделать ее более сложной для понимания. При использовании временных таблиц для вывода информации на экран, удобно пропускать получаемые данных через [[Сборщик объектов|сборщик объектов]], это позволит ускорить вывод и сэкономить память. См. также статью [[Оптимизация отчетов и обработок]].&amp;lt;/p&amp;gt;&lt;br /&gt;
'''Плюсы''' при использовании временных таблиц баз данных:&lt;br /&gt;
* Работа с данными неограниченного объема.&lt;br /&gt;
* Значительное ускорение процесса обработки по сравнению с запросами в случаях, когда вычисления можно выполнить с помощью наборов данных.&lt;br /&gt;
* Возможность хранить &amp;quot;внешние&amp;quot; данные неограниченного объема в виде простых таблиц, для произвольных целей.&lt;br /&gt;
&lt;br /&gt;
'''Минусы''' использования временных таблиц баз данных:&lt;br /&gt;
* Некоторое увеличение нагрузки на сервер баз данных (увеличение расхода памяти и объема записи на диск).&lt;br /&gt;
* Значительное усложнение читабельности программного текста по сравнению с запросами.&lt;br /&gt;
* Усложнение написания программного текста за счет другой идеологии обработки информации.&lt;br /&gt;
* Замедление процесса обработки по сравнению с запросами в случаях, когда вычисления невозможно выполнить с помощью наборов данных, так как выборка данных временных таблиц происходит медленнее, чем получение всех данных запроса одновременно.&lt;br /&gt;
&lt;br /&gt;
==Формулы при вычислении полей записей временной таблицы базы данных==&lt;br /&gt;
При работе с функциями, использующими формулы для вычисления отдельных столбцов, а также при использовании формул в фильтрах записей, возникает вопрос, какие функции могут быть использованы в подобных формулах и каким образом производить адресацию внешних переменных, наименований столбцов и т.п. В формулах, связанных с временными таблицами базы данных, используются стандартные возможности [[Объект запрос базы данных|языка запросов]], однако, необходимо выделить некоторые важные моменты использования формул:&lt;br /&gt;
* В формулах разрешается использование всех операторов и функций языка запросов (см. [[Объект запрос базы данных#Список операторов и функций языка запроса|Список операторов и функций языка запроса]]), кроме агрегатных функций для работы с сальдо накопителей (''Income'', ''Expence'', ''BegTotals'', ''EndTotals'', ''BegTotalsT'', ''EndTotalsT''), данная возможность планируется.&lt;br /&gt;
* Использовании пути и приведение типов данных для путей типов данных (см. [[Объект запрос базы данных#Выражения и задание переменной в виде пути к реквизиту|Выражения и задание переменной в виде пути к реквизиту]]) разрешено. Если выражение указывает на периодический реквизит, также как и в случае с запросами, необходимо задать дату получения его значения с помощью конструкции &amp;lt;code&amp;gt;&amp;lt;Путь и наименование реквизита&amp;gt;(&amp;lt;Дата реквизита&amp;gt;)&amp;lt;/code&amp;gt;. Все особые реквизиты по-прежнему работают как при их использовании в запросе, однако, есть исключение для особых реквизитов ''@ELEMENT'' и ''@HEADER'' применимо к запросам к строчным частям объектов.&lt;br /&gt;
** '''@ELEMENT''' -- задает внутренний код строки строчной части объекта (не на сам элемент, которому принадлежит строчная часть, как это происходит в запросах)&lt;br /&gt;
** '''@HEADER''' -- задает элемент, которому принадлежит текущая строка строчной части (тождественно тому, как это происходит в запросах)&lt;br /&gt;
* При указании на столбцы временной таблицы, доступно специальное наименование '''@ID''', являющееся уникальным идентификатором записи. Такие идентификаторы содержат числовые значения и присутствуют в любой временной таблице. Использовать их можно, к примеру, в случае получения данных из таблицы с помощью функции [[TempDB.Unload|Unload]], изменения их каким-либо образом, затем сопоставлением с оригинальными записями таблицы.&lt;br /&gt;
* Так как при работе с временными таблицами базы данных нет возможности определения дополнительных переменных в формулах запроса, задание пути и адресация реквизитов возможны непосредственно после указания полей текущей временной таблицы, реквизитов адресуемого объекта базы данных или полей другой адресуемой временной таблицы. Путь можно начинать задавать непосредственно после указания на поле. К примеру, если в текущей таблице существует поле (столбец) с наименованием ''Номенклатура'', который был задан, как тип данных ''DB'' и нам необходимо с помощью фильтра выбрать только те записи временной таблицы, поле Номенклатура которых содержит номенклатуру с реквизитом ТоварнаяГруппа, значение которого, входит в список спТоварныеГруппы, можно задать для фильтра следующее логическое выражение: &amp;lt;code&amp;gt;Номенклатура..Ref.Номенклатура.ТоварнаяГруппа IN спТоварныеГруппы&amp;lt;/code&amp;gt;. Приведение типа здесь используется, так как тип данных столбца определен таким образом, что система не знает, ссылки на какой объект в нем хранятся (''DB'').&lt;br /&gt;
* Функции агрегации (''AVG'', ''MAX'', ''MIN'', ''SUM'', ''COUNT'') применимы только в случае выполнения агрегатных запросов, к примеру, в функции [[TempDB.LoadFrom|LoadFrom]]. Однако, по умолчанию всегда выполняется обычный запрос, для использования запросов агрегации необходимо дополнительное указание на тип запроса.&lt;br /&gt;
* При работе с наименованиями внешних переменных, полями временной таблицы базы данных, а также наименованиями реквизитов объектов базы данных, может получиться ситуация неопределенной адресации (ambiguity), когда наименования поля и реквизита совпадают, для таких случаев для указания на источник наименования предусмотрен особый префикс (особенно это важно для функции [[TempDB.LoadFrom|LoadFrom]], которая оперирует дополнительным источником данных, который может быть не только объектом базы данных, но и другой временной таблицей базы данных). Система ищет объект наименования в следующей приоритетной последовательности:&lt;br /&gt;
** Поиск реквизитов объектов базы данных с указанным наименованием, либо наименований полей другой временной таблицы базы данных (см. [[TempDB.LoadFrom|LoadFrom]]).&lt;br /&gt;
** Поиск наименований полей текущей временной таблицы базы данных. Если необходимо форсировать указание на то, что данное наименование это имя поля текущей временной таблицы, для него можно использовать префикс ''':''' (пример: &amp;lt;code&amp;gt;:ИмяПоляТаблицы&amp;lt;/code&amp;gt;).&lt;br /&gt;
** Поиск наименований внешних переменных языка или констант языка. Если необходимо форсировать указание на то, что данное наименование это имя внешней переменной или константы, для него можно использовать префикс '''::''' (пример: &amp;lt;code&amp;gt;::aList&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
==Пример синергичной работы сборщика объектов и временной таблицы базы данных==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Пример показывает рабочий цикл с объектами из временной таблицы, используя сборщик объектов для уменьшения расхода памяти&lt;br /&gt;
//MainTab -- визуальная таблица, в которую будут копироваться результаты обработки временной таблицы БД&lt;br /&gt;
&lt;br /&gt;
//Создание сборщика объектов&lt;br /&gt;
ObjC:=ObjectCollector.Create();&lt;br /&gt;
&lt;br /&gt;
MainTab.Lock();&lt;br /&gt;
Try&lt;br /&gt;
  //Очистка визуальной таблицы&lt;br /&gt;
  MainTab.ClearLines();&lt;br /&gt;
&lt;br /&gt;
  //Создание и загрузка сложной временной таблицы БД, детали загрузки не имеют особого значения для нашего примера&lt;br /&gt;
  аТемп:=TempDB.Create(&amp;quot;зДок:DB,зЗад:DB,зВып:DB,зДата:DATE,зНомерСтроки:NUMBER.10,Номенклатура:DB,Смена:DB,Работники:STRING.200,Количество:NUMBER.15.5&amp;quot;);&lt;br /&gt;
  аТемп.LoadFrom(&amp;quot;Doc.РегистрацияВыпускаПродукции.Содержание&amp;quot;,&amp;quot;@HEADER-&amp;gt;зДок,@HEADER.DocDate-&amp;gt;зДата,@HEADER.ВыпускПродукции-&amp;gt;зВып,@HEADER.ВыпускПродукции..Doc.ВыпускПродукции.ДокОснование-&amp;gt;зЗад,&amp;quot;+&lt;br /&gt;
    &amp;quot;@LINE-&amp;gt;зНомерСтроки,Материал-&amp;gt;Номенклатура,КоличествоОпераций-&amp;gt;Количество,Работники-&amp;gt;Работники,Смена-&amp;gt;Смена&amp;quot;,&lt;br /&gt;
    &amp;quot;ТипЗаписи=1&amp;quot;,&amp;quot;not isEmpty(@HEADER.ВыпускПродукции)&amp;quot;,&amp;quot;IsType(@HEADER.ВыпускПродукции,Doc.ВыпускПродукции)&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  Всего:=аТемп.Size();&lt;br /&gt;
  aNum:=0;&lt;br /&gt;
  аТемп.Select(&amp;quot;зВып+,зДата+,зДок+,зНомерСтроки+&amp;quot;);&lt;br /&gt;
  While аТемп.Next() Do&lt;br /&gt;
    aNum:=aNum+1;&lt;br /&gt;
    If aNum%20=0 Then&lt;br /&gt;
      Form.StatusText(&amp;quot;Обработано строк: &amp;quot;+aNum+&amp;quot; из &amp;quot;+Всего);&lt;br /&gt;
    EndIf;&lt;br /&gt;
    зНом:=ObjC.Get(аТемп.Номенклатура);&lt;br /&gt;
    зЗад:=ObjC.Get(аТемп.зЗад);&lt;br /&gt;
    зВып:=ObjC.Get(аТемп.зВып);&lt;br /&gt;
    зДок:=ObjC.Get(аТемп.зДок);&lt;br /&gt;
    MainTab.AddLine(&amp;quot;Документ,Номенклатура,Ед,Количество,Смена,зДок,НомСтр,зВып,зЗад,Работники,Индекс&amp;quot;,зЗад.DocNum+&amp;quot; от &amp;quot;+зЗад.DocDate,зНом,ObjC.Get(зНом.базЕдиница),аТемп.Количество,&lt;br /&gt;
      ObjC.Get(аТемп.Смена),зДок,аТемп.зНомерСтроки,зВып,зЗад,ПолучитьСписокРаботников(Trim(аТемп.Работники),ТРаботники),зДок.DocNum+&amp;quot;@&amp;quot;+зДок.DocDate+&amp;quot;@&amp;quot;+аТемп.зНомерСтроки);&lt;br /&gt;
  EndDo;&lt;br /&gt;
  MassLoadObjects(MainTab);&lt;br /&gt;
Finally&lt;br /&gt;
  MainTab.Unlock();&lt;br /&gt;
EndTry;&lt;br /&gt;
Form.MainTab.SetFocus();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Атрибуты и функции==&lt;br /&gt;
{{function header}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[TempDB.Create|Create]]&lt;br /&gt;
|form={{Grey|TempDB.}}'''Create'''({{Optional|&amp;lt;Наименования столбцов с типами данных (STRING)&amp;gt;,&amp;lt;Имя внешней БД и наименование ее таблицы (STRING)&amp;gt;}}):''&amp;lt;Новый объект (TEMPDB)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция создает новый объект временной таблицы базы данных с заданными столбцами и их типами данных, если это необходимо. При указании второго аргумента, функция создает или открывает постоянную таблицу внешней базы данных по их именам. Если таблица уже существовала, сервер проверит последовательность и типы данных столбцов таблицы. Если какой-то их типов отличается, функция вызовет исключение, иначе будет создан объект, с помощью которого можно обращаться к этой таблице. Имена БД должны быть предварительно перечислены [[Установки сервера|установках сервера]] (ветка '''SimpleDBases'''). Для наименований таблиц рекомендуется использовать латиницу или цифры, запрещено использовать знаки &amp;quot;.&amp;quot; или &amp;quot;,&amp;quot;. Таблица может содержать большее количество столбцов, тем указано в функции, если таблица содержит меньшее количество, недостающие столбцы будут созданы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[TempDB.DeleteTable|DeleteTable]]&lt;br /&gt;
|form={{Grey|TempDB.}}'''DeleteTable'''(''&amp;lt;Имя внешней БД и наименование ее таблицы (STRING)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция удалят постоянную таблицу из внешней базы данных по ее имени. Если таблица не существовала, исключение не будет создано. Функция не работает с временными таблицами (которые удаляются автоматически при удалении объекта из системы). Функция вызывается с помощью интерфейса.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[TempDB.Copy|Copy]]&lt;br /&gt;
|form={{Grey|TempDB.}}'''Copy'''():''&amp;lt;Копия ссылки на внешнюю БД (TEMPDB)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция создает локальную копию (дубль) ссылки на постоянную таблицу внешней базы данных. Функция не работает с временными таблицами. Дублирование объекта может пригодиться, к примеру, в многопоточном режиме, когда множество потоков выполняют запросы к такой таблице. Если выполнять запросы с помощью одного объекта, следующий запрос будет ожидать окончания предыдущего. Также, эта функция работает гораздо быстрее, чем [[TempDB.Create|Create]], так как не обращается к серверу и не проверяет корректность структуры таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[TempDB.LoadFrom|LoadFrom]]&lt;br /&gt;
|form={{Grey|TempDB.}}'''LoadFrom'''(''&amp;lt;Источник данных (DB,STRING,TEMPDB)&amp;gt;'',''&amp;lt;Формулы для вычисления столбцов (STRING)&amp;gt;''{{Optional|,&amp;lt;Стандартные фильтры&amp;gt;...}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция выполняет загрузку записей из указанного источника данных (таблицы объекта проекта или другой временной таблицы базы данных), при этом указанные столбцы таблицы заполняются требуемым образом. Запрос к источнику базы данных может быть выполнен с использованием агрегации или без оной. Если выполняется запрос агрегации, для вычисления столбцов возможно применять функции агрегации.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[TempDB.Update|Update]]&lt;br /&gt;
|form={{Grey|TempDB.}}'''Update'''({{Optional|&amp;lt;Источник данных (STRING,TEMPDB)&amp;gt;}},''&amp;lt;Формулы для вычисления столбцов (STRING)&amp;gt;''{{Optional|,&amp;lt;Стандартные фильтры&amp;gt;...}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция выполняет групповые вычисления и обновления указанных столбцов указанным образом, при этом можно использовать дополнительный источник данных для вычисления значений столбцов. Источником может быть указание на объект базы данных проекта или другая временная таблица базы данных. Также можно использовать постоянные таблицы из текущей или других внешних БД.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[TempDB.AddColumns|AddColumns]]&lt;br /&gt;
|form={{Grey|TempDB.}}'''AddColumns'''(''&amp;lt;Наименования столбцов с типами данных (STRING)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция добавляет указанные столбцы к существующей временной таблице базы данных.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[TempDB.RemoveColumns|RemoveColumns]]&lt;br /&gt;
|form={{Grey|TempDB.}}'''RemoveColumns'''(''&amp;lt;Наименования столбцов (STRING)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция удаляет указанные столбцы из существующей временной таблицы базы данных.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[TempDB.AddLine|AddLine]]&lt;br /&gt;
|form={{Grey|TempDB.}}'''AddLine'''({{Optional|&amp;lt;Наименования столбцов (STRING)&amp;gt;,&amp;lt;Значение столбца 1&amp;gt;,&amp;lt;Значение столбца 2&amp;gt;...}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция добавляет одну запись к временной таблице базы данных. В записи заполняются указанные столбцы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[TempDB.Size|Size]], '''SizeL'''&lt;br /&gt;
|form={{Grey|TempDB.}}'''Size'''({{Optional|&amp;lt;Стандартные фильтры&amp;gt;...}}):''&amp;lt;Количество записей (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает количество записей, входящих в указанных фильтр&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[TempDB.SizeC|SizeC]]&lt;br /&gt;
|form={{Grey|TempDB.}}'''SizeC'''():''&amp;lt;Количество столбцов (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает количество столбцов в текущей временной таблице базы данных.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[TempDB.GetColumnName|GetColumnName]]&lt;br /&gt;
|form={{Grey|TempDB.}}'''GetColumnName'''(''&amp;lt;Индекс столбца (INT)&amp;gt;''):''&amp;lt;Наименование столбца (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает наименование столбца по его индексу&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[TempDB.GetColumnIndex|GetColumnIndex]]&lt;br /&gt;
|form={{Grey|TempDB.}}'''GetColumnIndex'''(''&amp;lt;Наименование столбца (STRING)&amp;gt;''):''&amp;lt;Индекс столбца (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает индекс столбца по его наименованию. Если столбца с указанным именем не существует, функция возвращает 0.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[TempDB.GetColumnDataType|GetColumnDataType]]&lt;br /&gt;
|form={{Grey|TempDB.}}'''GetColumnDataType'''(''&amp;lt;Наименование или индекс столбца (INT,STRING)&amp;gt;''):''&amp;lt;Тип данных столбца (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает тип данных столбца, заданный во время добавления столбца в таблицу.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[TempDB.GetColumnFlags|GetColumnFlags]]&lt;br /&gt;
|form={{Grey|TempDB.}}'''GetColumnFlags'''(''&amp;lt;Наименование или индекс столбца (INT,STRING)&amp;gt;''):''&amp;lt;Дополнительные флаги столбца (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает совокупность дополнительных флагов столбца (в данный момент &amp;quot;I&amp;quot; -- столбец индексируется, &amp;quot;U&amp;quot; -- текст столбца имеет кодировку UTF-16), заданных во время добавления столбца в таблицу.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[TempDB.SetColumnName|SetColumnName]]&lt;br /&gt;
|form={{Grey|TempDB.}}'''SetColumnName'''(''&amp;lt;Индекс столбца (INT)&amp;gt;'',''&amp;lt;Наименование столбца (STRING)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция изменяет наименование столбца, заданного его индексом.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[TempDB.Remove|Remove]]&lt;br /&gt;
|form={{Grey|TempDB.}}'''Remove'''({{Optional|&amp;lt;Стандартные фильтры&amp;gt;...}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция удаляет из временной таблицы базы данных записи, входящие в фильтр.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[TempDB.Upload|Upload]], '''CopyFrom'''&lt;br /&gt;
|form={{Grey|TempDB.}}'''Upload'''(''&amp;lt;Источник данных (TAB,LIST)&amp;gt;''{{Optional|,&amp;lt;Наименования столбцов для загрузки (STRING)&amp;gt;,&amp;lt;Наименования столбцов для фильтрации (STRING)&amp;gt;,&amp;lt;Фильтр столбца 1&amp;gt;,&amp;lt;Фильтр столбца 2&amp;gt;...}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция добавляет в текущую временную таблицу базы данных информацию из таблицы значений или списка значений. При использовании списка, значения добавляются в указанный во втором аргументе столбец таблицы, при использовании таблицы значений, указанные во втором аргументе наименования столбцов таблицы должны соответствовать наименованиям столбцов временной таблицы базы данных.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[TempDB.Unload|Unload]], '''CopyTo'''&lt;br /&gt;
|form={{Grey|TempDB.}}'''Unload'''({{ByRef|''&amp;lt;Объект в который происходит копирование&amp;gt;''}}{{Optional|,&amp;lt;Наименования столбцов для копирования (STRING)&amp;gt;,&amp;lt;Стандартные фильтры&amp;gt;...}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция осуществляет загрузку записей из временной таблицы базы данных в список значений или таблицу значений. Записи отбираются с помощью фильтра. При загрузке в список значений, указывается столбец загрузки, при загрузке в таблицу, указывает список столбцов, если соответствующий столбец в таблице отсутствует, он будет создан. Объекты базы данных в таблице значений или списке будут незагруженными.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[TempDB.Select|Select]]&lt;br /&gt;
|form={{Grey|TempDB.}}'''Select'''({{Optional|&amp;lt;Наименования столбцов сортировки с направлением сортировки (STRING)&amp;gt;,&amp;lt;Стандартные фильтры&amp;gt;...}}):''&amp;lt;Найдена по крайней мере одна запись (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция открывает выборку записей из временной таблицы базы данных. К выборке применяется заданный фильтр, записи сортируются в соответствии с заданным направлением сортировки. При сортировке объектов базы данных нужно учитывать, что сортировка на сервере осуществляется только по внутреннему коду базы данных, а не по реквизиту сортировки объекта. Чтобы осуществить сортировку по требуемому реквизиту сортировки (к примеру, по наименованию или по дате документа), необходимо добавить столбец в таблицу и заполнить его значением требуемого реквизита и осуществлять сортировку по новому столбцу.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[TempDB.Next|Next]]&lt;br /&gt;
|form={{Grey|TempDB.}}'''Next'''():''&amp;lt;Найдена и загружена следующая запись (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает следующую запись выгрузки, открытой ранее с помощью функции [[TempDB.Select|Select]]. Запись загружается во внутренний буфер объекта, столбцы будут доступны по наименованию или с помощью функции [[TempDB.Get|Get]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[TempDB.PeekNext|PeekNext]]&lt;br /&gt;
|form={{Grey|TempDB.}}'''PeekNext'''():''&amp;lt;Найдена и загружена следующая запись (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает следующую запись выгрузки, открытой ранее с помощью функции [[TempDB.Select|Select]], однако, шаг курсора не происходит, поэтому следующий вызов функции [[TempDB.Next|Next]] вернет эту же самую запись. Запись загружается во внутренний буфер объекта, столбцы будут доступны по наименованию или с помощью функции [[TempDB.Get|Get]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[TempDB.UseOption|UseOption]]&lt;br /&gt;
|form={{Grey|TempDB.}}'''UseOption'''(''&amp;lt;Наименование установки (STRING)&amp;gt;''{{Optional|,&amp;lt;Значение установки&amp;gt;}}):''&amp;lt;Текущее значение установки&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает или устанавливает значение дополнительных режимов загрузки или выборки текущего объекта временной таблицы базы данных. На данный момент докумен режим ограничения количества запрашиваемых за один раз элементов при выборке из с помощью [[TempDB.Select|Select]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[TempDB.Get|Get]]&lt;br /&gt;
|form={{Grey|TempDB.}}'''Get'''(''&amp;lt;Наименования столбца (STRING)&amp;gt;''):''&amp;lt;Значение столбца&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает значение указанного по наименованию столбца таблицы в случае, если запись уже загружена с помощью функций [[TempDB.Next|Next]], [[TempDB.PeekNext|PeekNext]] или [[TempDB.Find|Find]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[TempDB.Set|Set]]&lt;br /&gt;
|form={{Grey|TempDB.}}'''Set'''(''&amp;lt;Наименования столбца (STRING)&amp;gt;'',''&amp;lt;Значение столбца&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция изменяет значение указанного по наименованию столбца таблицы в случае, если запись уже загружена с помощью функций [[TempDB.Next|Next]], [[TempDB.PeekNext|PeekNext]] или [[TempDB.Find|Find]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[TempDB.ColumnName|&amp;lt;Имя столбца&amp;gt;]]&lt;br /&gt;
|form={{Grey|TempDB.}}'''&amp;lt;Имя столбца&amp;gt;''':''&amp;lt;Значение столбца&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут получает или изменяет значение указанного по наименованию столбца таблицы в случае, если запись уже загружена с помощью функций [[TempDB.Next|Next]], [[TempDB.PeekNext|PeekNext]] или [[TempDB.Find|Find]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[TempDB.Find|Find]]&lt;br /&gt;
|form={{Grey|TempDB.}}'''Find'''({{Optional|&amp;lt;Стандартные фильтры&amp;gt;...}}):''&amp;lt;Запись найдена (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция останавливает текущую выборку, если таковая существует и загружает в буфер выборки запись, идентифицируемую фильтром. Если запись загружена, функция возвращает 1, иначе 0.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[TempDB.New|New]]&lt;br /&gt;
|form={{Grey|TempDB.}}'''New'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция создает новую пустую запись в буфере выборки. Поля записи в дальнейшем можно заполнить, и запись можно сохранить. После сохранения запись будет добавлена во временную таблицу.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[TempDB.Save|Save]]&lt;br /&gt;
|form={{Grey|TempDB.}}'''Save'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция сохраняет изменения в столбцах текущей записи, находящейся в буфере выборки. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[TempDB.Group|Group]]&lt;br /&gt;
|form={{Grey|TempDB.}}'''Group'''({{Optional|&amp;lt;Столбцы группировки (STRING)&amp;gt;,&amp;lt;Столбцы агрегации с операциями (STRING)&amp;gt;}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция выполняет операцию группировки над записями таблицы, в таблице результате остаются только столбцы группировки и столбцы агрегации. См. также [[Tab.Group|Group]]. Функция не будет работать для постоянных таблиц внешних БД (будет вызывать исключение), если необъходимо ее использовать, можно предварительно скопировать содержимое постоянной таблицы во временную. {{Planned}} Также планируется возможность работы с постоянными таблицами, когда функция возвратит результат в новой временной таблице.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[TempDB.UpdateFromGroups|UpdateFromGroups]]&lt;br /&gt;
|form={{Grey|TempDB.}}'''UpdateFromGroups'''(''&amp;lt;Условие для определения строк группировки (STRING)&amp;gt;'',''&amp;lt;Наименования столбцов сортировки с направлением сортировки (STRING)&amp;gt;'',''&amp;lt;Наименования заполняемых столбцов (STRING)&amp;gt;''{{Optional|,&amp;lt;Стандартные фильтры&amp;gt;...}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция выполняет заполнение обычных столбцов значениями столбцов группировки. Функция используется, при загрузке из сложных строчных частей с промежуточными группировками или подобных случаев. Выполнение функции может занимать продолжительное время, так как серверы базы данных (типа SQL) не имеют функционала для выполнения таких операции с помощью функций, оперирующих наборами записей.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[TempDB.Gross1|Gross1]], '''Compute1'''&lt;br /&gt;
|form={{Grey|TempDB.}}'''Gross1'''(''&amp;lt;Наименование столбца (STRING)&amp;gt;''{{Optional|,&amp;lt;Тип операции агрегации (STRING)&amp;gt;{{Default|{{Eq}}&amp;quot;SUM&amp;quot;}},&amp;lt;Стандартные фильтры&amp;gt;...}}):''&amp;lt;Результат агрегации&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция вычисляет значение агрегации указанного столбца таблицы среди записей, входящих в указанный фильтр.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[TempDB.Compute|Compute]]&lt;br /&gt;
|form={{Grey|TempDB.}}'''Compute'''(''&amp;lt;Наименование столбцов группировки (STRING)&amp;gt;'',''&amp;lt;Список столбцов агрегации с типами операций (STRING)&amp;gt;''{{Optional|,&amp;lt;Стандартные фильтры&amp;gt;...}}):''&amp;lt;Результат вычисления (TAB)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит выборку с агрегацией с помощью указанных фильтров. Результат выборки возвращается в виде таблицы значений со столбцами группировки и агрегации.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[TempDB.AddIndex|AddIndex]]&lt;br /&gt;
|form={{Grey|TempDB.}}'''AddIndex'''(''&amp;lt;Наименования столбцов индекса с направлениями сортировки (STRING)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция добавляет индекс во временную таблицу базы данных. Индекс может быть как простым (использовать один столбец), так и композитным (использовать несколько столбцов). Простые индексы можно задать при добавлении столбцов в таблицу.&lt;br /&gt;
}}&lt;br /&gt;
{{function footer}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Объекты}}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://sfsys.ru/index.php?title=TempDB.Update&amp;diff=5230</id>
		<title>TempDB.Update</title>
		<link rel="alternate" type="text/html" href="http://sfsys.ru/index.php?title=TempDB.Update&amp;diff=5230"/>
		<updated>2026-04-01T10:00:51Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&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;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://sfsys.ru/index.php?title=TempDB.Create&amp;diff=5222</id>
		<title>TempDB.Create</title>
		<link rel="alternate" type="text/html" href="http://sfsys.ru/index.php?title=TempDB.Create&amp;diff=5222"/>
		<updated>2026-04-01T10:00:50Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&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;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://sfsys.ru/index.php?title=TempDB.DeleteTable&amp;diff=5224</id>
		<title>TempDB.DeleteTable</title>
		<link rel="alternate" type="text/html" href="http://sfsys.ru/index.php?title=TempDB.DeleteTable&amp;diff=5224"/>
		<updated>2026-04-01T10:00:50Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&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;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://sfsys.ru/index.php?title=TempDB.Group&amp;diff=5226</id>
		<title>TempDB.Group</title>
		<link rel="alternate" type="text/html" href="http://sfsys.ru/index.php?title=TempDB.Group&amp;diff=5226"/>
		<updated>2026-04-01T10:00:50Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&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;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://sfsys.ru/index.php?title=TempDB.LoadFrom&amp;diff=5228</id>
		<title>TempDB.LoadFrom</title>
		<link rel="alternate" type="text/html" href="http://sfsys.ru/index.php?title=TempDB.LoadFrom&amp;diff=5228"/>
		<updated>2026-04-01T10:00:50Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&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;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://sfsys.ru/index.php?title=TempDB.Copy&amp;diff=5220</id>
		<title>TempDB.Copy</title>
		<link rel="alternate" type="text/html" href="http://sfsys.ru/index.php?title=TempDB.Copy&amp;diff=5220"/>
		<updated>2026-04-01T10:00:49Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&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;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://sfsys.ru/index.php?title=Table.RenderToPicture&amp;diff=5218</id>
		<title>Table.RenderToPicture</title>
		<link rel="alternate" type="text/html" href="http://sfsys.ru/index.php?title=Table.RenderToPicture&amp;diff=5218"/>
		<updated>2026-04-01T10:00:48Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&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;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://sfsys.ru/index.php?title=Tab.Copy&amp;diff=5216</id>
		<title>Tab.Copy</title>
		<link rel="alternate" type="text/html" href="http://sfsys.ru/index.php?title=Tab.Copy&amp;diff=5216"/>
		<updated>2026-04-01T10:00:24Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&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;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://sfsys.ru/index.php?title=Mutex.ExecuteFunctionInSeparateThread&amp;diff=5214</id>
		<title>Mutex.ExecuteFunctionInSeparateThread</title>
		<link rel="alternate" type="text/html" href="http://sfsys.ru/index.php?title=Mutex.ExecuteFunctionInSeparateThread&amp;diff=5214"/>
		<updated>2026-04-01T09:59:36Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&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;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://sfsys.ru/index.php?title=Lib.CreateCallbackFunction&amp;diff=5212</id>
		<title>Lib.CreateCallbackFunction</title>
		<link rel="alternate" type="text/html" href="http://sfsys.ru/index.php?title=Lib.CreateCallbackFunction&amp;diff=5212"/>
		<updated>2026-04-01T09:59:32Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&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;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://sfsys.ru/index.php?title=GlobalStringsSaveToFile&amp;diff=5208</id>
		<title>GlobalStringsSaveToFile</title>
		<link rel="alternate" type="text/html" href="http://sfsys.ru/index.php?title=GlobalStringsSaveToFile&amp;diff=5208"/>
		<updated>2026-04-01T09:59:06Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&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;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://sfsys.ru/index.php?title=GlobalStringsShrink&amp;diff=5210</id>
		<title>GlobalStringsShrink</title>
		<link rel="alternate" type="text/html" href="http://sfsys.ru/index.php?title=GlobalStringsShrink&amp;diff=5210"/>
		<updated>2026-04-01T09:59:06Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&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;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://sfsys.ru/index.php?title=GlobalStringsAdd&amp;diff=5198</id>
		<title>GlobalStringsAdd</title>
		<link rel="alternate" type="text/html" href="http://sfsys.ru/index.php?title=GlobalStringsAdd&amp;diff=5198"/>
		<updated>2026-04-01T09:59:05Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&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;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://sfsys.ru/index.php?title=GlobalStringsAddFromFile&amp;diff=5200</id>
		<title>GlobalStringsAddFromFile</title>
		<link rel="alternate" type="text/html" href="http://sfsys.ru/index.php?title=GlobalStringsAddFromFile&amp;diff=5200"/>
		<updated>2026-04-01T09:59:05Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&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;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://sfsys.ru/index.php?title=GlobalStringsFind&amp;diff=5202</id>
		<title>GlobalStringsFind</title>
		<link rel="alternate" type="text/html" href="http://sfsys.ru/index.php?title=GlobalStringsFind&amp;diff=5202"/>
		<updated>2026-04-01T09:59:05Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&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;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://sfsys.ru/index.php?title=GlobalStringsHeapsFind&amp;diff=5204</id>
		<title>GlobalStringsHeapsFind</title>
		<link rel="alternate" type="text/html" href="http://sfsys.ru/index.php?title=GlobalStringsHeapsFind&amp;diff=5204"/>
		<updated>2026-04-01T09:59:05Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&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;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://sfsys.ru/index.php?title=GlobalStringsRemove&amp;diff=5206</id>
		<title>GlobalStringsRemove</title>
		<link rel="alternate" type="text/html" href="http://sfsys.ru/index.php?title=GlobalStringsRemove&amp;diff=5206"/>
		<updated>2026-04-01T09:59:05Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&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;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://sfsys.ru/index.php?title=GetModuleFunction&amp;diff=5196</id>
		<title>GetModuleFunction</title>
		<link rel="alternate" type="text/html" href="http://sfsys.ru/index.php?title=GetModuleFunction&amp;diff=5196"/>
		<updated>2026-04-01T09:59:04Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&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;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://sfsys.ru/index.php?title=GIObject.LinkEvent&amp;diff=5194</id>
		<title>GIObject.LinkEvent</title>
		<link rel="alternate" type="text/html" href="http://sfsys.ru/index.php?title=GIObject.LinkEvent&amp;diff=5194"/>
		<updated>2026-04-01T09:59:03Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&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;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://sfsys.ru/index.php?title=GI.LinkEvent&amp;diff=5192</id>
		<title>GI.LinkEvent</title>
		<link rel="alternate" type="text/html" href="http://sfsys.ru/index.php?title=GI.LinkEvent&amp;diff=5192"/>
		<updated>2026-04-01T09:59:01Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&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;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://sfsys.ru/index.php?title=ExecuteFunction&amp;diff=5190</id>
		<title>ExecuteFunction</title>
		<link rel="alternate" type="text/html" href="http://sfsys.ru/index.php?title=ExecuteFunction&amp;diff=5190"/>
		<updated>2026-04-01T09:58:39Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&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;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://sfsys.ru/index.php?title=DoesFunctionExist&amp;diff=5188</id>
		<title>DoesFunctionExist</title>
		<link rel="alternate" type="text/html" href="http://sfsys.ru/index.php?title=DoesFunctionExist&amp;diff=5188"/>
		<updated>2026-04-01T09:58:38Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&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;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://sfsys.ru/index.php?title=BroadcastChannelReceiveMessage&amp;diff=5180</id>
		<title>BroadcastChannelReceiveMessage</title>
		<link rel="alternate" type="text/html" href="http://sfsys.ru/index.php?title=BroadcastChannelReceiveMessage&amp;diff=5180"/>
		<updated>2026-04-01T09:57:50Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&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;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://sfsys.ru/index.php?title=BroadcastChannelSendMessage&amp;diff=5182</id>
		<title>BroadcastChannelSendMessage</title>
		<link rel="alternate" type="text/html" href="http://sfsys.ru/index.php?title=BroadcastChannelSendMessage&amp;diff=5182"/>
		<updated>2026-04-01T09:57:50Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&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;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://sfsys.ru/index.php?title=BroadcastChannelSubscribe&amp;diff=5184</id>
		<title>BroadcastChannelSubscribe</title>
		<link rel="alternate" type="text/html" href="http://sfsys.ru/index.php?title=BroadcastChannelSubscribe&amp;diff=5184"/>
		<updated>2026-04-01T09:57:50Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&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;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://sfsys.ru/index.php?title=BroadcastChannelUnsubscribe&amp;diff=5186</id>
		<title>BroadcastChannelUnsubscribe</title>
		<link rel="alternate" type="text/html" href="http://sfsys.ru/index.php?title=BroadcastChannelUnsubscribe&amp;diff=5186"/>
		<updated>2026-04-01T09:57:50Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&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;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://sfsys.ru/index.php?title=ArgumentsNumber&amp;diff=5178</id>
		<title>ArgumentsNumber</title>
		<link rel="alternate" type="text/html" href="http://sfsys.ru/index.php?title=ArgumentsNumber&amp;diff=5178"/>
		<updated>2026-04-01T09:57:49Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&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;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://sfsys.ru/index.php?title=Template:%D0%9E%D0%B1%D1%89%D0%B8%D0%B5_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8,_%D1%81%D0%B2%D1%8F%D0%B7%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81_%D0%91%D0%94&amp;diff=5176</id>
		<title>Template:Общие функции, связанные с БД</title>
		<link rel="alternate" type="text/html" href="http://sfsys.ru/index.php?title=Template:%D0%9E%D0%B1%D1%89%D0%B8%D0%B5_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8,_%D1%81%D0%B2%D1%8F%D0%B7%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81_%D0%91%D0%94&amp;diff=5176"/>
		<updated>2025-12-27T17:09:36Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{function header}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[DBCodeLength]]&lt;br /&gt;
|form='''DBCodeLength'''():''&amp;lt;Длина строки внутреннего кода объекта БД (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает число 20, являющееся длиной строки [[DBObjectFromDBCode|внутреннего кода объекта]] базы данных.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[DBTypeStr]]&lt;br /&gt;
|form='''DBTypeStr'''(''&amp;lt;Аргумент&amp;gt;''):''&amp;lt;Тип объекта базы данных (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает тип объекта базы данных в виде строки. Пример возвращаемых значений: &amp;lt;code&amp;gt;DOC&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;REF&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ENUM&amp;lt;/code&amp;gt; и т.п. В случае, если аргумент не является объектом базы данных, будет возвращена пустая строка.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[DBObjectName]]&lt;br /&gt;
|form='''DBObjectName'''(''&amp;lt;Аргумент&amp;gt;''):''&amp;lt;Вид объекта базы данных (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает вид объекта базы данных в виде строки. Пример для элемента справочника &amp;lt;code&amp;gt;REF.Справочник1&amp;lt;/code&amp;gt; будет возвращена строка &amp;lt;code&amp;gt;Справочник1&amp;lt;/code&amp;gt;. Результат функции соответствует конструкции &amp;lt;code&amp;gt;&amp;lt;Переменная&amp;gt;.DBName()&amp;lt;/code&amp;gt;. В случае, если аргумент не является объектом базы данных или вид объекта не выбран, будет возвращена пустая строка.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[IsDBObject]]&lt;br /&gt;
|form='''IsDBObject'''(''&amp;lt;Аргумент&amp;gt;''):''&amp;lt;Является ли аргумент объектом БД (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает 1, если аргумент является объектом базы данных, иначе будет возвращен 0.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[MassLockWithWait]]&lt;br /&gt;
|form='''MassLockWithWait'''(''&amp;lt;Список с объектами для блокировки (LIST)&amp;gt;''{{Optional|,&amp;lt;Режим пропуска (INT)&amp;gt;{{OptionalDefault|{{eq}}0}},&amp;lt;Разблокировка при ошибках (INT)&amp;gt;{{OptionalDefault|{{eq}}1}},&amp;lt;Период ожидания млс. (INT)&amp;gt;{{OptionalDefault|{{eq}}0}},{{OptionalByRef|&amp;lt;Объект ошибки&amp;gt;}},{{OptionalByRef|&amp;lt;Заблокировано пользователем (STRING)&amp;gt;}},{{OptionalByRef|&amp;lt;Заблокировано на машине (STRING)&amp;gt;}},{{OptionalByRef|&amp;lt;Время блокировки (DATE)&amp;gt;}}}}):''&amp;lt;0 или 1 (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция позволяет установить блокировку на множестве объектов базы данных (или/и семафорах), блокировка происходит по указанным правилам (см. полное описание)&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[MassUnlock]]&lt;br /&gt;
|form='''MassUnlock'''(''&amp;lt;Список с объектами для разблокировки (LIST)&amp;gt;''{{OptionalByRef|,&amp;lt;Объект ошибки&amp;gt;}},{{Optional|{{OptionalByRef|&amp;lt;Заблокировано пользователем (STRING)&amp;gt;}},{{OptionalByRef|&amp;lt;Заблокировано на машине (STRING)&amp;gt;}},{{OptionalByRef|&amp;lt;Время блокировки (DATE)&amp;gt;}}}}):''&amp;lt;0 или 1 (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция позволяет снять блокировку со множества объектов базы данных (или/и семафоров) по указанным правилам (см. полное описание)&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[DBLockStringMutex]]&lt;br /&gt;
|form='''DBLockStringMutex'''(''&amp;lt;Имя семафора (STRING)&amp;gt;''{{OptionalByRef|,&amp;lt;Заблокировано пользователем (STRING)&amp;gt;,&amp;lt;Заблокировано на машине (STRING)&amp;gt;,&amp;lt;Время блокировки (DATE)&amp;gt;}}{{Optional|,&amp;lt;Время ожидания блокировки (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Результат (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция осуществляет блокировку именованного серверного семафора, либо возвращает данные пользователя, который его заблокировал.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[DBIsStringMutexLocked]]&lt;br /&gt;
|form='''DBIsStringMutexLocked'''(''&amp;lt;Имя семафора (STRING)&amp;gt;''{{OptionalByRef|,&amp;lt;Заблокировано пользователем (STRING)&amp;gt;,&amp;lt;Заблокировано на машине (STRING)&amp;gt;,&amp;lt;Время блокировки (DATE)&amp;gt;}}):''&amp;lt;Результат (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция проверяет, заблокирован ли именованный серверный семафор, и возвращает данные пользователя, который его заблокировал при необходимости.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[DBUnlockStringMutex]]&lt;br /&gt;
|form='''DBUnlockStringMutex'''(''&amp;lt;Имя семафора (STRING)&amp;gt;''{{OptionalByRef|,&amp;lt;Заблокировано пользователем (STRING)&amp;gt;,&amp;lt;Заблокировано на машине (STRING)&amp;gt;,&amp;lt;Время блокировки (DATE)&amp;gt;}}):''&amp;lt;Результат (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция осуществляет разблокировку именованного серверного семафора, либо возвращает данные пользователя, который его заблокировал.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[StoreValue]]&lt;br /&gt;
|form='''StoreValue'''(''&amp;lt;Имя переменной (STRING)&amp;gt;'',''&amp;lt;Значение переменной&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция сохраняет на сервере для текущего пользователя произвольное значение под выбранным именем. Функция работает только если клиент имеет подключение к серверу.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[RestoreValue]]&lt;br /&gt;
|form='''RestoreValue'''(''&amp;lt;Имя переменной (STRING)&amp;gt;''):''&amp;lt;Значение переменной&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает, сохраненное ранее на сервере для текущего пользователя произвольное значение с выбранным именем. Функция работает только если клиент имеет подключение к серверу. Если значение с указанным именем не было сохранено, будет возвращено пустое значение.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[StoreGlobalTempString]]&lt;br /&gt;
|form='''StoreGlobalTempString'''(''&amp;lt;Имя переменной (STRING)&amp;gt;'',''&amp;lt;Значение переменной (STRING)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция изменяет значение временной именной переменной на сервере, которая будет доступна другим пользователям, однако, будет потеряна при перезагрузке сервера.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[RestoreGlobalTempString]]&lt;br /&gt;
|form='''RestoreGlobalTempString'''(''&amp;lt;Имя переменной (STRING)&amp;gt;''):''&amp;lt;Значение переменной (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает значение временной именной переменной на сервере. Подобные переменные доступны другим пользователям, однако, теряются при перезагрузке сервера.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[BroadcastDBUpdate]]&lt;br /&gt;
|form='''BroadcastDBUpdate'''(''&amp;lt;Тип базы данных (STRING)&amp;gt;''{{Optional|,&amp;lt;Для всех пользователей (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Сообщение успешно отправлено (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция рассылает запросы на обновление форм, содержащих таблицы базы данных указанного типа в текущей системе или глобально по всем клиентам сервера. В последнем случае, нужно быть осторожным, чтобы не перегружать сервер внезапным большим количеством запросов, даже с учетом того, что серверная часть использует особую систему замедления отправки запросов клиентам.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[DBObjectFromDBCode]]&lt;br /&gt;
|form='''DBObjectFromDBCode'''(''&amp;lt;Внутренний код базы данных (STRING)&amp;gt;''):''&amp;lt;Объект базы данных (DB)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция создает объект базы данных по его внутреннему коду. Нужно понимать, что внутренний код является уникальным в пределах текущей базы данных, при перенесении информации в другую базу данных, внутренние коды объектов будут совсем другими.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[MassLoadObjects]]&lt;br /&gt;
|form='''MassLoadObjects'''(''&amp;lt;Объект для загрузки&amp;gt;''{{Optional|,&amp;lt;Аргумент 1&amp;gt;,&amp;lt;Аргумент 2&amp;gt;,&amp;lt;Также загружать периодические реквизиты (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Производить загрузку заголовков (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Доп. реквизиты при загрузке заголовков (STRING)&amp;gt;{{Default|{{Eq}}&amp;quot;&amp;quot;}}}}):''&amp;lt;Количество объектов, которые были загружены (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит загрузку большого количества объектов из списка, таблицы или являющихся реквизитами объекта БД, одновременно, что быстрее, чем загрузка этих объектов один за другим. Дополнительные параметры позволяют настроить загрузку, в т.ч. ограничить ее загрузкой только заголовков.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[LockDBPath]]&lt;br /&gt;
|form='''LockDBPath'''(''&amp;lt;Путь или объект для блокировки (STRING,DB)&amp;gt;''{{OptionalByRef|,&amp;lt;Заблокировано пользователем (STRING)&amp;gt;,&amp;lt;Заблокировано на машине (STRING)&amp;gt;,&amp;lt;Время блокировки (DATE)&amp;gt;}}):''&amp;lt;0 или 1 (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит попытку блокировки всей таблицы указанных объектов (к примеру, всего справочника с указанным видом).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[UnlockDBPath]]&lt;br /&gt;
|form='''UnlockDBPath'''(''&amp;lt;Путь или объект для разблокировки (STRING,DB)&amp;gt;''{{OptionalByRef|,&amp;lt;Описание ошибки (STRING)&amp;gt;}}):''&amp;lt;0 или 1 (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит разблокировки всей таблицы указанных объектов (к примеру, всего справочника с указанным видом), заблокированных ранее функцией [[LockDBPath]]&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GetServerLocksInformation]]&lt;br /&gt;
|form='''GetServerLocksInformation'''({{Optional|&amp;lt;Перекрестная проверка (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Таблица блокировок сервера (TAB)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает полный список блокированных в данный момент объектов на сервере (включая именованные семафоры).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GetServerStoragesInformation]]&lt;br /&gt;
|form='''GetServerStoragesInformation'''({{Optional|&amp;lt;Имена накопителей через запятую (STRING)&amp;gt;{{Default|{{Eq}}&amp;quot;&amp;quot;}}}}):''&amp;lt;Информация по накопителям (TAB)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает информацию по всем накопителям проекта с сервера в виде таблицы. В ней присутствует информация по крайним документам, дате остатков и пр.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GetServerUsedSpaceInformation]]&lt;br /&gt;
|form='''GetServerUsedSpaceInformation'''():''&amp;lt;Информация по объему таблиц БД (TAB)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает информацию по затраченному месту в базе данных по всем объектам проекта и системным таблицам с сервера в виде таблицы. В таблице также присутствует информация строчным частям и таблицам периодических значений.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[CheckDBConsistency]]&lt;br /&gt;
|form='''CheckDBConsistency'''({{Optional|&amp;lt;Путь или объект (STRING,DB)&amp;gt;{{Default|{{Eq}}&amp;quot;&amp;quot;}},&amp;lt;Режим (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Информация по проблемам БД (TAB)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция осуществляет проверку корректности информации на сервере для всех таблиц или таблиц с заданным путем. Информация возвращается в виде таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[BeginTransaction]]&lt;br /&gt;
|form='''BeginTransaction'''():''&amp;lt;Уровень вложения транзакции (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция инициирует начало транзактного изменения объектов БД. По умолчанию транзакция на сервере не включена и возникает периодически при записи объектов или обработке документов. Каждый поток имеет свой уровень вложения транзакции. Функция опасна и при некорректном использовании может привести к порче данных. См. полное описание.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[CommitTransaction]]&lt;br /&gt;
|form='''CommitTransaction'''():''&amp;lt;Уровень вложения транзакции (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция уменьшает текущий уровень транзакции на единицу и, если он равен нулю, фиксирует изменения в базе данных. См. также [[BeginTransaction]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[RollbackTransaction]]&lt;br /&gt;
|form='''RollbackTransaction'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция отменяет все изменения, произведенные в текущей транзакции и уменьшает уровень транзакции до нуля. См. также [[BeginTransaction]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[IsTransactionActive]]&lt;br /&gt;
|form='''IsTransactionActive'''():''&amp;lt;0 или 1 (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает 1 в случае, если в данном потоке уровень транзакции больше нуля (транзакция активна).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[CollectObjectsLinks]]&lt;br /&gt;
|form='''CollectObjectsLinks'''(''&amp;lt;Список объектов (LIST)&amp;gt;''):''&amp;lt;Таблица ссылок данных объектов (TAB)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает полную таблицу ссылок всех объектов БД из заданного списка. К примеру, если объект содержится в движениях накопителя или выбран в реквизите другого объекта (в т.ч. периодическом), в таблицу добавится запись о такой ссылке. Функция может использоваться перед физическим удалением объектов из БД, чтобы убедиться, что никакие другие таблицы БД не имеют на них ссылок. Функция может сильно загрузить сервер базы данных.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[LockStorage]]&lt;br /&gt;
|form='''LockStorage'''(''&amp;lt;Наименование накопителя (STRING)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит блокировку указанного накопителя для всех пользователей сервера. Если накопитель был заблокирован другим пользователем, функция вызовет исключение. Функция вызывается автоматически при обработке документов с включенным режимом автоматической транзакции. Время между блокировкой и разблокировкой необходимо минимизировать, чтобы улучшить производительность базы данных. При ошибке, функция не предлагает имени пользователя, заблокировавшего накопитель, если такая информация необходима, разработчик может использовать функцию [[LockDBPath]] вместо текущей. Обычно функция используется вне модуля обработки документа. В отличие от функции [[UnlockStorage]], функция может использоваться как внутри транзакции, так и вне оной.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[UnlockStorage]]&lt;br /&gt;
|form='''UnlockStorage'''(''&amp;lt;Наименование накопителя (STRING)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит разблокировку указанного накопителя, при его блокировке функцией [[LockStorage]]. Функция может использоваться только '''вне режима транзакции''', так как при окончании транзакции, все заблокированные накопители автоматически будут разблокированы системой.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[InitiateBackupCreation]]&lt;br /&gt;
|form='''InitiateBackupCreation'''(''&amp;lt;Идентификатор протокола резервного копирования (STRING)&amp;gt;''{{Optional|,&amp;lt;Ожидать завершения процесса (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Внутренний код процесса резервного копирования (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция инициирует (и ожидает завершения, если необходимо) процесс резервного копирования базы данных и сопутствующих файлов проекта по протоколу, заданному в файлах инициализации сервера. Идентификатор протокола задается из установок в файле инициализации сервера. Если ожидание окончания процесса не задано, функция возвращается сразу же после инициации процесса резервного копирования, иначе только после окончания процесса или возникновения ошибки. Для получения информации по асинхронному процессу, а также для получения описания ошибки, остановившей процесс, используется функция [[QueryBackupProgress]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[QueryBackupProgress]]&lt;br /&gt;
|form='''QueryBackupProgress'''(''&amp;lt;Код процесса резервного копирования (INT)&amp;gt;''{{OptionalByRef|,&amp;lt;Текущее сообщение процесса копирования или сообщение об ошибке (STRING)&amp;gt;,&amp;lt;Дата и время начала последнего процесса (DATE)&amp;gt;}}):''&amp;lt;Код состояния процесса резервного копирования (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция используется для получения информации об окончании или состоянии процесса резервного копирования, инициированого функцией [[InitiateBackupCreation]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[QueryScheduledBackupFailure]]&lt;br /&gt;
|form='''QueryScheduledBackupFailure'''({{OptionalByRef|&amp;lt;Идентификатор протокола последней ошибки резервного копирования (STRING)&amp;gt;,&amp;lt;Сообщение об ошибке, произошедшей во время резервного копирования (STRING)&amp;gt;,&amp;lt;Дата и время начала последнего процесса (DATE)&amp;gt;}}):''&amp;lt;Ошибка происходила (1), ошибки не было (0) (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает информацию по последней ошибке при резервном копировании, выполнявшемся по расписанию. Если ошибка произошла при инициации копирования функцией [[InitiateBackupCreation]], она не будет возвращена этой функцией. Функция может выполняться при запуске клиента с административными правами, чтобы предупредить администратора о том, что какой-либо из процессов резервного копирования закончился с ошибкой. Чтобы очистить информацию об ошибке, необходимо удалить сохраненный файл ошибки в каталоге проекта на сервере.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[SysRebuildIndexes]]&lt;br /&gt;
|form='''SysRebuildIndexes'''({{Optional|&amp;lt;Наименование объекта, для которого необходимо выполнить процедуру перестроения индексов (STRING)&amp;gt;}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция выполняет процедуру перестроения индексов для указанного объекта базы данных или для всех объектов базы данных. Данная процедура может занять продолжительное время. Необходимость в такой процедуре может появляться при обновлении сервера базы данных или порче данных в базе данных и т.д. Для некоторых типов СУБД нет возможности выполнить такую процедуру с помощью сторонних утилит, к примеру, для ''SQLite3'' использование особых типов сравнения для текстовых данных, делает невозможным использование сторонних утилит, поэтому, эта функция становится особенно важной. Альтернативой перестроения индексов может служить выгрузка дампа базы данных и создание с помощью него новой базы данных.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[SysExecServer]]&lt;br /&gt;
|form='''SysExecServer'''(''&amp;lt;Командная строка исполнения (STRING)&amp;gt;''{{Optional|,&amp;lt;Не возвращаться до завершения (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Код, возвращенный приложением (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит запуск приложения с параметрами в командной строке на стороне сервера, разбор командной строки не производится. Пользователь должен обладать административными правами для использования этой функции. Также нужно понимать, что запуск с флагом ожидания завершения (второй аргумент) приведет к &amp;quot;зависшей&amp;quot; сессии на сервере, если приложение не будет завершено. Этой функцией следует пользоваться в исключительных обстоятельствах и только когда поведение запускаемого приложения хорошо известно заранее.&lt;br /&gt;
}}&lt;br /&gt;
{{function footer}}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://sfsys.ru/index.php?title=Template:Infobox_function&amp;diff=5174</id>
		<title>Template:Infobox function</title>
		<link rel="alternate" type="text/html" href="http://sfsys.ru/index.php?title=Template:Infobox_function&amp;diff=5174"/>
		<updated>2025-12-27T17:09:35Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;lt;div style=&amp;quot;float:right; margin:0px 30px 0px 10px&amp;quot;&amp;gt;&lt;br /&gt;
{|cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot; style=&amp;quot;border: 0px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;font-size:80%; width:350px;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;text-align:left; vertical-align:middle&amp;quot;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color:#99cff4; color:#000000; font-size:120%; padding:5px;&amp;quot; | &amp;amp;nbsp;&amp;amp;nbsp;{{#if:{{{image|}}}|[[Image:{{{image|}}}|16px]]&amp;amp;nbsp;&amp;amp;nbsp;}}{{{name|}}}{{#if:{{{caption|}}}|&amp;amp;nbsp;({{{caption}}})|}}&lt;br /&gt;
|- style=&amp;quot;text-align:left;&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;padding:0px;&amp;quot; | &amp;lt;table width=&amp;quot;100%&amp;quot;&amp;gt;{{#if:{{{object|}}}|&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;width:40%;text-align:left;&amp;quot;&amp;gt;'''Объект:'''&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;width:60%;text-align:left;&amp;quot;&amp;gt;'''{{{object|}}}'''&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;|}}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;{{#if:{{{element|}}}|&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;width:40%;text-align:left;&amp;quot;&amp;gt;'''Применимость:'''&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;width:60%;text-align:left;&amp;quot;&amp;gt;{{{element}}}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;|}}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;{{#if:{{{eventtype|}}}|&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;width:40%;text-align:left;&amp;quot;&amp;gt;'''Тип события:'''&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;width:60%;text-align:left;&amp;quot;&amp;gt;{{{eventtype}}}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;|}}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;width:40%;text-align:left;&amp;quot;&amp;gt;'''Статус разработки:'''&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;width:60%;text-align:left;&amp;quot;&amp;gt;{{#if:{{{status|}}}|{{#ifeq:{{{status|}}}|0|&amp;lt;font style=&amp;quot;color:#8F0000;&amp;quot;&amp;gt;'''Планируется'''|{{#ifeq:{{{status|}}}|1|&amp;lt;font style=&amp;quot;color:#00008F;&amp;quot;&amp;gt;'''Частичная реализация'''|{{#ifeq:{{{status|}}}|2|&amp;lt;font style=&amp;quot;color:#008F00;&amp;quot;&amp;gt;'''Реализована'''|&amp;lt;font&amp;gt;?}}}}}}&amp;lt;/font&amp;gt;|?}}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;{{#if:{{{type|}}}|&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;width:40%;text-align:left;&amp;quot;&amp;gt;'''Тип:'''&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;width:60%;text-align:left;&amp;quot;&amp;gt;{{#ifeq:{{{type|}}}|0|Атрибут|{{#ifeq:{{{type|}}}|1|Функция|{{#ifeq:{{{type|}}}|2|Магическая функция или конструкция|?}}}}}}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;|}}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;{{#if:{{{db|}}}|&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;width:40%;text-align:left;&amp;quot;&amp;gt;'''[[Обращение к базе данных (описание)|Обращение к БД]]:'''&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;width:60%;text-align:left;&amp;quot;&amp;gt;{{#ifeq:{{{db|}}}|1|Сервер|{{#ifeq:{{{db|}}}|2|Сервер и БД|{{#ifeq:{{{db|}}}|4|В зав. от аргументов|Нет}}}}}}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;|}}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;{{#if:{{{location|}}}|&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;width:40%;text-align:left;&amp;quot;&amp;gt;'''Расположение:'''&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;width:60%;text-align:left;&amp;quot;&amp;gt;{{{location}}}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;|}}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;{{#if:{{{rw|}}}|&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;width:40%;text-align:left;&amp;quot;&amp;gt;'''Доступность:'''&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;width:60%;text-align:left;&amp;quot;&amp;gt;{{#ifeq:{{{rw|}}}|1|Только чтение|{{#ifeq:{{{rw|}}}|2|Только запись|Чтение и запись}}}}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;|}}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;{{#if:{{{exception|}}}|&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;width:40%;text-align:left;&amp;quot;&amp;gt;'''[[Исключения]]:'''&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;width:60%;text-align:left;&amp;quot;&amp;gt;{{{exception|}}}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;|}}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;{{#if:{{{visual|}}}|&amp;lt;tr&amp;gt;&amp;lt;td style=&amp;quot;width:40%;text-align:left;&amp;quot;&amp;gt;'''[[Визуальные функции|Визуальность]]:'''&amp;lt;/td&amp;gt;&amp;lt;td style=&amp;quot;width:60%;text-align:left;&amp;quot;&amp;gt;{{#ifeq:{{{visual|}}}|1|Да|Нет}}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;|}}&amp;lt;/table&amp;gt;&lt;br /&gt;
|}&amp;lt;/div&amp;gt;[[Category:Functions and properties]]__NOTOC__&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://sfsys.ru/index.php?title=Template:Function_entry&amp;diff=5172</id>
		<title>Template:Function entry</title>
		<link rel="alternate" type="text/html" href="http://sfsys.ru/index.php?title=Template:Function_entry&amp;diff=5172"/>
		<updated>2025-12-27T17:09:34Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|{{{name}}}&lt;br /&gt;
|{{#if:{{{status|}}}|{{#ifeq:{{{status|}}}|0|&amp;lt;font style=&amp;quot;color:#8F0000;&amp;quot;&amp;gt;'''Планируется'''|{{#ifeq:{{{status|}}}|1|&amp;lt;font style=&amp;quot;color:#00008F;&amp;quot;&amp;gt;'''Частичная реализация'''|{{#ifeq:{{{status|}}}|2|&amp;lt;font style=&amp;quot;color:#008F00;&amp;quot;&amp;gt;'''Реализована'''|&amp;lt;font&amp;gt;?}}}}}}&amp;lt;/font&amp;gt;|?}}&lt;br /&gt;
|{{#if:{{{type|}}}|{{#ifeq:{{{type|}}}|0|Атрибут|{{#ifeq:{{{type|}}}|1|Функция|{{#ifeq:{{{type|}}}|2|Магическая функция|?}}}}}}|?}}&lt;br /&gt;
|{{#ifeq:{{{visual|}}}|1|&amp;lt;div align=&amp;quot;center&amp;quot; style=&amp;quot;color:#8F0000;&amp;quot;&amp;gt;Да&amp;lt;/div&amp;gt;|}}&lt;br /&gt;
|{{{form}}}&lt;br /&gt;
|{{{description}}}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>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=5170</id>
		<title>Электронная таблица SFT</title>
		<link rel="alternate" type="text/html" href="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=5170"/>
		<updated>2025-12-27T17:09:09Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{infobox object&lt;br /&gt;
|image=table.png&lt;br /&gt;
|visual=[[Студия/Электронная таблица SFT|Таблица SFT]]&lt;br /&gt;
|object=Table&lt;br /&gt;
|status=2&lt;br /&gt;
|create=[[Table.Create|Create]]}}&lt;br /&gt;
{{HeadLinks|&lt;br /&gt;
* [[Main_Page|Начальная страница]]&lt;br /&gt;
* [[Общее_описание_языка|Общее описание]]&lt;br /&gt;
* [[Объекты]]}}&lt;br /&gt;
Объект '''электронная таблица SFT''' дает возможность создания, заполнения, вывода на экран и принтер, а также чтения данных и проведения других операций с электронными таблицами SFT. Обычно объект используется для создания и вывода на экран отчетов и печатных форм документов. В таких случаях, алгоритм работы с объектом следующий:&lt;br /&gt;
* Создается новый объект и задается таблица-шаблон (по умолчанию файл шаблона '''Table''' должен находиться в той же папке (объекте), где находится модуль, создающий объект, однако, путь и имя таблицы-шаблона можно задать с помощью функции [[Table.SetSourceName|SetSourceName]]). Создавать таблицу с нуля, программно изменяя шрифт каждой ячейки, тип границ и объединения, является очень сложной и трудоемкой задачей, поэтому, такой подход на практике не применяется, а используется таблица-шаблон (или несколько таких таблиц). Шаблон представляет собой обычную таблицу, при создании отчета или печатной формы документа, заданные части шаблона будут копироваться в новую создаваемую таблицу. При копировании частей шаблона, система автоматически заполняет ячейки с формулами результатом их выполнения (такие ячейки в таблице-шаблоне имеют галочку &amp;quot;Текст представляет собой выражения для вычисления&amp;quot;, см. [[Студия/Редактор электронных таблиц|Редактор электронных таблиц]]), это дает возможность предусмотреть в шаблоне ячейки с сальдо, наименованиями и реквизитами юридических лиц и прочим, в зависимости от типа выводимой формы. Для удобства написания программ, нужные куски таблицы-шаблона отмечаются на этапе редактирования, им присваиваются свои наименования, по которым программа может обращаться к ним, чтобы из этих кусков сконструировать таблицу-результат.&lt;br /&gt;
* Выполняется запрос или требуемые данные подготавливаются другим путем.&lt;br /&gt;
* Происходит обход по результату запроса или другим данным и последовательное добавление нужных частей таблицы-шаблона в таблицу результат с заполнением ячеек данными, полученными в цикле обхода (Для копирования частей таблицы-шаблона можно использовать функции [[Table.CopyByX|CopyByX]], [[Table.CopyByY|CopyByY]], [[Table.CopyTitles|CopyTitles]], [[Table.Area.CopyTo|CopyTo]]).&lt;br /&gt;
* Созданная новая электронная таблица выводится на экран или принтер.&lt;br /&gt;
&amp;lt;p&amp;gt;При программной работе с объектом нужно различать четыре типа объектов: сама электронная таблица SFT, объект область таблицы (''Area'') (получаемая с помощью вызова функций типа [[Table.Area|Area]] и необходимая для проведения прямого изменения в ячейках области), объект свойств таблицы (''Options'') (включающий множество подобъектов, к примеру, ''выделение'' или ''свойства печати'') и объект визуальных элементов (объектов) таблицы (''Objects''). Все объекты связаны с электронной таблицей SFT, которая не будет удалена из памяти до тех пор, пока останется по крайней мере один объект, ссылающийся на нее. Ячейки таблицы могут содержать объекты языка любого вида, поэтому кроме внешних ссылок на таблицу, иногда может возникнуть ситуация, когда внутри какой-либо ячейки (или визуального элемента) хранится ссылка на самую же таблицу, это бывает, к примеру, когда в визуальной кнопке таблицы для обновления результата отчета, хранится список с данными, связанными с этим отчетом, в том числе сама таблица. Для таблиц, которые хранят ссылки на самих себя требуется указывать количество таких ссылок с помощью атрибута [[Table.SelfReferenceCount|SelfReferenceCount]], иначе после удаления последнего объекта, ссылающегося на таблицу, таблица останется в памяти (см. [[Объекты#Ссылки на самого себя|Ссылки на самого себя]]).&amp;lt;/p&amp;gt;&lt;br /&gt;
Основные свойства ячейки таблицы перечислены ниже:&lt;br /&gt;
* Таблица может иметь практически неограниченное количество столбцов и строк (до 2 млрд.), сдвигая видимое поле, пользователь может увидеть любую ячейку таблицы. Память для хранения ячеек выделяется только для определенного количества столбцов и строк таблицы, этот диапазон задает высоту и ширину таблицы. При изменении текста или других свойств ячейки вне диапазона этих строк и столбцов, выделенный диапазон автоматически расширяется.&lt;br /&gt;
* Ячейка содержит текст в ANSI или UTF-16 кодировках, либо текст шаблона, представляющего собой программу на встроенном языке, программа будет исполнена и результат будет записан, как текст ячейки в момент копирования частей таблицы-шаблона в таблицу результат.&lt;br /&gt;
* Ячейка содержит произвольный объект встроенного языка, использующийся как значение ячейки при клике по ячейке или редактировании оной. Вместо объекта языка в ячейке может находиться текст шаблона, представляющего собой программу на встроенном языке, программа будет исполнена и результат будет записан, как значение ячейки в момент копирования частей таблицы-шаблона в таблицу результат.&lt;br /&gt;
* Текст ячейки может иметь стандартные свойства форматирования: шрифт, выделение, цвет фона, цвет текста и рамки и пр., либо для ячейки может быть задан шаблон цвета (color template). В последнем случае, пользователи смогут выбирать другую палитру цветов, по своему желанию, поэтому, использование шаблонов цвета предпочтительнее при формировании результатов отчетов.&lt;br /&gt;
* Ячейки могут быть объединены между собой в группы ячеек. Текст в такой группе будет использовать все пространство группы и будет получен из верхней левой ячейки группы.&lt;br /&gt;
* Ячейки имеют разнообразные свойства переноса текста, выравнивания по горизонтали и вертикали, отступов по горизонтали и вертикали, угол направления текста и пр.&lt;br /&gt;
* Каждая ячейка имеет четыре границы вокруг себя, каждая из границ может иметь свой рисунок и цвет. Из-за использования шаблонов для создания таблиц-результата, двух границ для каждой ячейки недостаточно.&lt;br /&gt;
* Столбцы и строки таблицы имеют дополнительное свойство &amp;quot;автоматическое расширение&amp;quot;, обычно номера таких строк или столбцов выделены визуально для удобства создания таблиц-шаблонов. Строки или столбцы со свойством &amp;quot;автоматическое расширение&amp;quot; будут автоматически изменять размеры, в зависимости от текста, помещенного внутрь их ячеек.&lt;br /&gt;
* При печати больших таблиц, происходит их распределение на несколько листов, иногда важно, чтобы определенные блоки текста (строки или столбцы) не разделялись и шли всегда вместе (к примеру, блок с подписями и печатями), для этого предусмотрены блоки строк или столбцов без разделения.&lt;br /&gt;
Основные свойства визуальных элементов (объектов) таблицы перечислены ниже:&lt;br /&gt;
* Объекты могут быть добавлены в любое место таблицы и могут представлять собой не только текстовые поля, но и рисунки, OLE-объекты и пр.&lt;br /&gt;
* Объект содержит текст в ANSI или UTF-16 кодировках, либо текст шаблона, представляющего собой программу на встроенном языке. Для шаблонов, программа будет исполнена и результат будет записан, как текст ячейки в момент копирования частей таблицы-шаблона в таблицу результат.&lt;br /&gt;
* Объект содержит произвольный объект встроенного языка, использующийся как значение ячейки при клике по ячейке или редактировании оной. Вместо объекта языка в ячейке может находиться текст шаблона, представляющего собой программу на встроенном языке, программа будет исполнена и результат будет записан, как значение ячейки в момент копирования частей таблицы-шаблона в таблицу результат.&lt;br /&gt;
* Текст объекта может иметь стандартные свойства форматирования: шрифт, выделение, цвет фона, цвет текста и рамки и пр., либо для ячейки может быть задан шаблон цвета (color template). В последнем случае, пользователи смогут выбирать другую палитру цветов, по своему желанию, поэтому, использование шаблонов цвета предпочтительнее при формировании результатов отчетов.&lt;br /&gt;
* Объекты имеют разнообразные свойства переноса текста, выравнивания по горизонтали и вертикали, отступов по горизонтали и вертикали, угол направления текста и пр.&lt;br /&gt;
* Каждый объект имеет четыре границы вокруг себя, каждая из границ может иметь свой рисунок и цвет. &lt;br /&gt;
* Объект может не выводиться на печать, если это необходимо&lt;br /&gt;
* Объект может иметь наименование, по которому можно обратиться к нему из текста программы&lt;br /&gt;
* Положение и размеры объекта могут быть привязаны к абсолютной координате внутри таблицы или к определенной ячейке таблицы. Таким образом можно создать объекты, которые не будут перемещаться или/и изменять размеры при изменении размеров ячеек таблицы, либо будут привязаны к определенным ячейкам.&lt;br /&gt;
&lt;br /&gt;
Не стоит путать электронные таблицы SFT (наименование интерфейса объекта '''Table''') и [[Таблица|таблицы значений]] (наименование интерфейса объекта '''Tab'''), это совершенно разные объекты.&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;
//ДатаФормирования -- дата нахождения цены&lt;br /&gt;
&lt;br /&gt;
//Выполняем запрос для получения горизонтального разреза&lt;br /&gt;
ТЗ:=&amp;quot;зН:=Ref.Номенклатура;&lt;br /&gt;
|зСтатус:=Ref.Номенклатура.@STATUS;Condition(зСтатус=0);&lt;br /&gt;
|зПапка:=Ref.Номенклатура.@ISFOLDER;&lt;br /&gt;
|Condition(зПапка=0);&lt;br /&gt;
|Condition(зН IN спНоменклатура);&lt;br /&gt;
|Group зН with folders;&amp;quot;;&lt;br /&gt;
  &lt;br /&gt;
З:=Query.Create();&lt;br /&gt;
З.Execute(ТЗ);&lt;br /&gt;
&lt;br /&gt;
Т:=Table.Create();&lt;br /&gt;
Т.SetSourceName(&amp;quot;Отчет&amp;quot;);&lt;br /&gt;
//Здесь и далее переменные с префиксом &amp;quot;п&amp;quot; используются в таблице-шаблоне &amp;quot;Отчет&amp;quot; в соответствующих ячейках,&lt;br /&gt;
//  при копировании куска таблицы с помощью CopyByX, ячейки автоматически заполняются значениями нужных переменных.&lt;br /&gt;
пЗагол:=&amp;quot;Отчет по ценам номенклатуры&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//Копирование из таблицы-шаблона будет осуществляться слева направо и затем сверху вниз&lt;br /&gt;
//Столбец &amp;quot;h1&amp;quot; в таблице-шаблоне содержит столбец с наименованием номенклатурной позиции, левый отступ, порядковый номер и пр.&lt;br /&gt;
//Столбец &amp;quot;h2&amp;quot; -- цена текущей позиции по типу цен из спТипыЦен&lt;br /&gt;
//Столбец &amp;quot;h3&amp;quot; -- завершает таблицу (правая граница)&lt;br /&gt;
//Строка &amp;quot;v1&amp;quot; таблицы-шаблона содержит заголовок отчета с заголовками столбцов&lt;br /&gt;
//Строка &amp;quot;v2&amp;quot; таблицы-шаблона содержит одну строку отчета&lt;br /&gt;
//Строка &amp;quot;v3&amp;quot; таблицы-шаблона содержит одну строку папки отчета, цены для папок не выводятся&lt;br /&gt;
//Строка &amp;quot;v4&amp;quot; таблицы-шаблона завершает отчет снизу (нижняя граница)&lt;br /&gt;
&lt;br /&gt;
//Первый блок добавляется &amp;quot;с начала строки&amp;quot;&lt;br /&gt;
Т.CopyByX(&amp;quot;v1|h1&amp;quot;,1);&lt;br /&gt;
For i:=1 to спТипыЦен.Size() Do&lt;br /&gt;
  пТипЦен:=спТипыЦен.Get(i);&lt;br /&gt;
  //Последующие блоки добавляются слева направо без перевода на другую строку, пТипЦен выводится в заголовки столбцов&lt;br /&gt;
  Т.CopyByX(&amp;quot;v1|h2&amp;quot;);&lt;br /&gt;
EndDo;&lt;br /&gt;
//Окончание вывода блока заголовка таблицы&lt;br /&gt;
Т.CopyByX(&amp;quot;v1|h3&amp;quot;);&lt;br /&gt;
//Фиксирование заголовка, чтобы он всегда был на экране при перемещении курсора по таблице&lt;br /&gt;
Т.Options.FixedLine:=Т.Height();&lt;br /&gt;
&lt;br /&gt;
пКолВо:=0;&lt;br /&gt;
While З.Next(1) Do&lt;br /&gt;
  //Переменные используются в столбце &amp;quot;h1&amp;quot;&lt;br /&gt;
  пН:=З.зН;&lt;br /&gt;
  пКод:=пН.Code;&lt;br /&gt;
&lt;br /&gt;
  If пН.IsFolder() Then&lt;br /&gt;
    //Вывод строки с папкой&lt;br /&gt;
    Т.CopyByX(&amp;quot;v3|h1&amp;quot;,1);&lt;br /&gt;
    For i:=1 to спТипыЦен.Size() Do&lt;br /&gt;
      Т.CopyByX(&amp;quot;v3|h2&amp;quot;);&lt;br /&gt;
    EndDo;&lt;br /&gt;
    Т.CopyByX(&amp;quot;v3|h3&amp;quot;);&lt;br /&gt;
    пКолВо:=пКолВо+1;&lt;br /&gt;
  Else&lt;br /&gt;
    //Вывод обычной строки&lt;br /&gt;
    Т.CopyByX(&amp;quot;v2|h1&amp;quot;,1);&lt;br /&gt;
    For i:=1 to спТипыЦен.Size() Do&lt;br /&gt;
      пЦ:=глНайтиЦену(З.зН,спТипыЦен.Get(i),ДатаФормирования);&lt;br /&gt;
      Т.CopyByX(&amp;quot;v2|h2&amp;quot;);&lt;br /&gt;
    EndDo;&lt;br /&gt;
    Т.CopyByX(&amp;quot;v2|h3&amp;quot;);&lt;br /&gt;
  EndIf;&lt;br /&gt;
&lt;br /&gt;
  //Вывод информации о состоянии формирования отчета&lt;br /&gt;
  пКолВо:=пКолВо+1;&lt;br /&gt;
  //Этот текст выводится в строку состояния&lt;br /&gt;
  Form.StatusText(&amp;quot;&amp;quot;+пКолВо+&amp;quot; из &amp;quot;+З.ResultTable.Size());&lt;br /&gt;
  //Этот текст выводится в виде индикатора выполнения, как подсказка при наведении курсора мыши на кнопку задачи отчета&lt;br /&gt;
  Form.UpdateProgress(пКолВо,З.ResultTable.Size());&lt;br /&gt;
EndDo;&lt;br /&gt;
//Выведем нижнюю границу отчета&lt;br /&gt;
Т.CopyByX(&amp;quot;v4|h1&amp;quot;,1);&lt;br /&gt;
For i:=1 to спТипыЦен.Size() Do&lt;br /&gt;
  Т.CopyByX(&amp;quot;v4|h2&amp;quot;);&lt;br /&gt;
EndDo;&lt;br /&gt;
Т.CopyByX(&amp;quot;v4|h3&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
//Изменим параметры печати&lt;br /&gt;
Т.Printing.Orientation:=1;&lt;br /&gt;
Т.Printing.ScaleMode:=1;&lt;br /&gt;
//Режим просмотра для удобства пользователя&lt;br /&gt;
Т.EditorMode:=1;&lt;br /&gt;
//Выводим на экран или принтер?&lt;br /&gt;
If флВывестиСразуНаПринтер Then&lt;br /&gt;
  Т.Printing.Printer:=тПринтер;&lt;br /&gt;
  Т.Print();&lt;br /&gt;
Else&lt;br /&gt;
  Т.Show(пЗагол);&lt;br /&gt;
EndIf;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Основные атрибуты и функции ==&lt;br /&gt;
Данный раздел содержит основные функции, которые используются совместно с объектом электронной таблицы.&lt;br /&gt;
&lt;br /&gt;
{{function header}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Create|Create]]&lt;br /&gt;
|form={{Grey|Table.}}'''Create'''():''&amp;lt;Новый объект электронной таблицы (TABLE)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция создает новый объект электронной таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.CurLine|CurLine]]&lt;br /&gt;
|form={{Grey|Table.}}'''CurLine''':''&amp;lt;Строка визуального курсора таблицы (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Получить или изменить текущую строку курсора таблицы. Курсор таблицы только косвенно связан с выделенными ячейками таблицы и не зависит от текущего выделения, для получения информации по выделению в таблице, используйте атрибут [[Table.Selection|Selection]]. Нумерация строк начинается с единицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.CurColumn|CurColumn]], '''CurCol'''&lt;br /&gt;
|form={{Grey|Table.}}'''CurColumn''':''&amp;lt;Столбец визуального курсора таблицы (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Получить или изменить текущий столбец курсора таблицы. Курсор таблицы только косвенно связан с выделенными ячейками таблицы и не зависит от текущего выделения, для получения информации по выделению в таблице, используйте атрибут [[Table.Selection|Selection]]. Нумерация столбцов начинается с единицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.CurPutX|CurPutX]]&lt;br /&gt;
|form={{Grey|Table.}}'''CurPutX''':''&amp;lt;Столбец курсора добавления областей к таблице (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Получить или изменить текущий столбец курсора добавления областей к таблице. Курсор добавления областей используется в момент вызова функций [[Table.CopyByX|CopyByX]] и [[Table.CopyByY|CopyByY]] и определяет место добавления следующей области из таблицы-шаблона. Нумерация столбцов начинается с единицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.CurPutY|CurPutY]]&lt;br /&gt;
|form={{Grey|Table.}}'''CurPutY''':''&amp;lt;Строка курсора добавления областей к таблице (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Получить или изменить текущую строку курсора добавления областей к таблице. Курсор добавления областей используется в момент вызова функций [[Table.CopyByX|CopyByX]] и [[Table.CopyByY|CopyByY]] и определяет место добавления следующей области из таблицы-шаблона. Нумерация строк начинается с единицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.EditorMode|EditorMode]]&lt;br /&gt;
|form={{Grey|Table.}}'''EditorMode''':''&amp;lt;Режим редактирования таблицы (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Получить или изменить режим редактирования таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Restrict|Restrict]]&lt;br /&gt;
|form={{Grey|Table.}}'''Restrict''':''&amp;lt;Режимы запрета работы с таблицей (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Получить или изменить режимы запрета работы с таблицей.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Scale|Scale]]&lt;br /&gt;
|form={{Grey|Table.}}'''Scale''':''&amp;lt;Масштаб отображения таблицы (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Получить или изменить масштаб отображения таблицы на экране. Масштаб по умолчанию равен 100.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.SelectionMode|SelectionMode]]&lt;br /&gt;
|form={{Grey|Table.}}'''SelectionMode''':''&amp;lt;Тип текущего выделения ячеек (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Получить тип текущего выделения ячеек или визуальных элементов таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.SelfReferenceCount|SelfReferenceCount]]&lt;br /&gt;
|form={{Grey|Table.}}'''SelfReferenceCount''':''&amp;lt;Количество ссылок на себя в объектах таблицы (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут позволяет получить или изменить количество ссылок на себя, хранящихся в объектах таблицы. Если не установить это число корректно, таблица не может быть удалена из памяти, так как количество ссылок на нее останется больше нуля, когда она будет удалена из ссылающейся последней переменной, и это приведет к утечке памяти.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.AttachedModule|AttachedModule]]&lt;br /&gt;
|form={{Grey|Table.}}'''AttachedModule''':''&amp;lt;Связать текущий модуль с событиями таблицы (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут позволяет получить или изменить свойство связи текущего модуля со свободной таблицей. Если модуль будет закрыт позже, а таблица останется открытой, события таблиц типа [[OnDoubleClick]] будут вызываться сначала в этом связанном модуле, а уже потом в модуле, под которым работает таблица, или в глобальном модуле. Это удобно для отчетов, которые производят определенные действия при работе со свободными таблицами, получаемыми в результате их выполнения. Таким образом можно избежать утери этой функциональности, если обработка отчета будет закрыта, но нужно понимать, что вызванное таким образом событие, возможно будет работать со стеком и переменными другого модуля. Также стоит заметить, что функция [[ModuleTag]] понимает эту связь и будет отдавать переменную, привязанную именно к модулю таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.PrintSettingsChanged|PrintSettingsChanged]]&lt;br /&gt;
|form={{Grey|Table.}}'''PrintSettingsChanged'''():''&amp;lt;Были изменены установки печати таблицы (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает 1, если были изменены любые установки, связанные с печатью таблицы (кроме названия принтера). После выполнения печати этот атрибут автоматически сбрасывается. Атрибут может использоваться в универсальных обработчиках печати, а также для сохранения индивидуальных изменений печатных форм.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.ResetCursor|ResetCursor]]&lt;br /&gt;
|form={{Grey|Table.}}'''ResetCursor'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция сдвигает видимое пространство таблицы таким образом, чтобы ячейка, в которой находится визуальный курсор, была видна на экране, если визуальный курсор уже виден на экране, функция не производит никаких изменений. Положение курсора не изменяется.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.SetCursor|SetCursor]]&lt;br /&gt;
|form={{Grey|Table.}}'''SetCursor'''(''&amp;lt;Столбец курсора (INT)&amp;gt;'',''&amp;lt;Строка курсора (INT)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция перемещает визуальный курсор в требуемую ячейку таблицы. При этом сдвига видимого пространства таблицы не происходит и курсор может оказаться за пределами видимости.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.AddObject|AddObject]]&lt;br /&gt;
|form={{Grey|Table.}}'''AddObject'''(''&amp;lt;Тип визуального объекта (INT)&amp;gt;''{{Optional|,&amp;lt;Наименование объекта (STRING)&amp;gt;,&amp;lt;Источник объекта&amp;gt;,&amp;lt;Тип координат объекта (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Координаты объекта (STRING)&amp;gt;}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция добавляет новый объект в таблицу. Для объекта указывается тип, координаты, наименование. Если объект имеет тип OLE или картинка, также задается дополнительный параметр &amp;quot;источник объекта&amp;quot;.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Lock|Lock]]&lt;br /&gt;
|form={{Grey|Table.}}'''Lock'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция блокирует отображения изменений в таблице до вызова функции [[Table.Unlock|Unlock]]. Функция может использоваться перед большим количеством обновлений или заполнении таблицы для получения значительного ускорения операции. Функцию не имеет смысла вызывать для таблиц, которые (еще) не были выведены на экран, так как такие таблицы не обновляются визуально.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Unlock|Unlock]]&lt;br /&gt;
|form={{Grey|Table.}}'''Unlock'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция снимает блокировку отображения изменений в таблице, установленную функцией [[Table.Lock|Lock]], и вызывает полное визуальное обновление таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Update|Update]]&lt;br /&gt;
|form={{Grey|Table.}}'''Update'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция вызывает полное визуальное обновление таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Size|Size]], '''Lines''', '''Height'''&lt;br /&gt;
|form={{Grey|Table.}}'''Size'''({{Optional|&amp;lt;Новое количество выделенных строк в таблице (INT)&amp;gt;}}):''&amp;lt;Количество выделенных строк в таблице (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает или изменяет высоту таблицы (количество строк в таблице, где производились какие-либо изменения, либо строки были скопированы из таблицы-шаблона и т.п.). При уменьшении количества строк, удаление будет происходить с конца таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.SizeC|SizeC]], '''Columns''', '''Width'''&lt;br /&gt;
|form={{Grey|Table.}}'''SizeC'''({{Optional|&amp;lt;Новое количество выделенных столбцов в таблице (INT)&amp;gt;}}):''&amp;lt;Количество выделенных столбцов в таблице (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает или изменяет ширину таблицы (количество столбцов в таблице, где производились какие-либо изменения, либо столбцы были скопированы из таблицы-шаблона и т.п.). При уменьшении количества столбцов, удаление будет происходить с конца таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.InsertColumns|InsertColumns]]&lt;br /&gt;
|form={{Grey|Table.}}'''InsertColumns'''(''&amp;lt;Начиная со столбца (INT)&amp;gt;''{{Optional|,&amp;lt;Количество столбцов (INT)&amp;gt;{{Default|{{Eq}}1}},&amp;lt;Ширина вставляемых столбцов (INT)&amp;gt;,&amp;lt;Автоматическая ширина столбцов (INT)&amp;gt;{{Default|{{Eq}}0}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция вставляет требуемое количество столбцов начиная с требуемой позиции. Вставка столбцов может вызвать разъединение областей ячеек, если области включают позицию добавления.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.InsertLines|InsertLines]]&lt;br /&gt;
|form={{Grey|Table.}}'''InsertLines'''(''&amp;lt;Начиная со строки (INT)&amp;gt;''{{Optional|,&amp;lt;Количество строк (INT)&amp;gt;{{Default|{{Eq}}1}},&amp;lt;Высота вставляемых строк (INT)&amp;gt;,&amp;lt;Автоматическая высота строк (INT)&amp;gt;{{Default|{{Eq}}1}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция вставляет требуемое количество строк начиная с требуемой позиции. Вставка строк может вызвать разъединение областей ячеек, если области включают позицию добавления.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.RemoveColumns|RemoveColumns]]&lt;br /&gt;
|form={{Grey|Table.}}'''RemoveColumns'''(''&amp;lt;Начиная со столбца (INT)&amp;gt;''{{Optional|,&amp;lt;Количество столбцов (INT)&amp;gt;{{Default|{{Eq}}1}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция удаляет требуемое количество столбцов начиная с требуемой позиции. Удаление столбцов может вызвать разъединение областей ячеек, если области включают удаляемые столбцы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.RemoveLines|RemoveLines]]&lt;br /&gt;
|form={{Grey|Table.}}'''RemoveLines'''(''&amp;lt;Начиная со строки (INT)&amp;gt;''{{Optional|,&amp;lt;Количество строк (INT)&amp;gt;{{Default|{{Eq}}1}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция удаляет требуемое количество строк начиная с требуемой позиции. Удаление строк может вызвать разъединение областей ячеек, если области включают удаляемые строки.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Copy|Copy]]&lt;br /&gt;
|form={{Grey|Table.}}'''Copy'''():''&amp;lt;Копия таблицы (TABLE)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция создает полную копию таблицы в памяти.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Clear|Clear]]&lt;br /&gt;
|form={{Grey|Table.}}'''Clear'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция удаляет все столбцы и ячейки и объекты из таблицы и устанавливает все свойства таблицы по умолчанию.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Find|Find]]&lt;br /&gt;
|form={{Grey|Table.}}'''Find'''(''&amp;lt;Текст для поиска (STRING)&amp;gt;''{{Optional|,&amp;lt;Установки поиска (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Область поиска (STRING)&amp;gt;,&amp;lt;Переместить курсор на найденную ячейку (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Найденная ячейка (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит поиск строки или части строки в тексте ячеек указанной области таблицы (или во всей таблице), руководствуясь заданными правилами. Если ячейка найдена, функция возвращает ее координату в виде строки &amp;lt;code&amp;gt;&amp;quot;&amp;lt;Столбец&amp;gt;:&amp;lt;Строка&amp;gt;&amp;quot;&amp;lt;/code&amp;gt; (пример ''&amp;quot;12:100&amp;quot;'') и перемещает курсор в найденную ячейку, если это необходимо, если ячейка не найдена, функция возвращает пустую строку.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.FindByValue|FindByValue]]&lt;br /&gt;
|form={{Grey|Table.}}'''FindByValue'''(''&amp;lt;Значение для поиска&amp;gt;''{{Optional|,&amp;lt;Установки поиска (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Область поиска (STRING)&amp;gt;,&amp;lt;Переместить курсор на найденную ячейку (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Найденная ячейка (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит поиск строки или части строки в значениях ячеек указанной области таблицы (или во всей таблице), руководствуясь заданными правилами. Если ячейка найдена, функция возвращает ее координату в виде строки &amp;lt;code&amp;gt;&amp;quot;&amp;lt;Столбец&amp;gt;:&amp;lt;Строка&amp;gt;&amp;quot;&amp;lt;/code&amp;gt; (пример ''&amp;quot;12:100&amp;quot;'') и перемещает курсор в найденную ячейку, если это необходимо, если ячейка не найдена, функция возвращает пустую строку.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Show|Show]]&lt;br /&gt;
|form={{Grey|Table.}}'''Show'''({{Optional|&amp;lt;Заголовок формы с таблицей (STRING)&amp;gt;,&amp;lt;Наименования файла по умолчанию при сохранении таблицы (STRING)&amp;gt;,&amp;lt;Выводить окно на передний план (INT)&amp;gt;{{Default|{{Eq}}1}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция выводит таблицу на экран в виде самостоятельной формы, подчиненной текущей форме. Окно имеет требуемый заголовок, при сохранении таблицы в виде файла, по умолчанию используется имя файла, которое можно задать в аргументе этой функции.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.ShowOnParent|ShowOnParent]]&lt;br /&gt;
|form={{Grey|Table.}}'''ShowOnParent'''({{Optional|&amp;lt;Заголовок формы с таблицей (STRING)&amp;gt;,&amp;lt;Наименования файла по умолчанию при сохранении таблицы (STRING)&amp;gt;,&amp;lt;Выводить окно на передний план (INT)&amp;gt;{{Default|{{Eq}}1}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция выводит таблицу на экран в виде самостоятельной формы, подчиненной верхней родительской форме. Окно имеет требуемый заголовок, при сохранении таблицы в виде файла, по умолчанию используется имя файла, которое можно задать в аргументе этой функции. Если таблица формируется из потока, модуля или функции, не отображаемых на экране в виде формы, либо текущая форма вызывает другую, с тем, чтобы последняя вывела таблицу на экран и закрылась после вывода, эта функция может закрепить выведенную таблицу за верхней родительской формой, вместо текущей, это позволит избежать ситуации запрета исполнения родительской формы до тех пор, пока не будут закрыты все печатные формы, созданные подчиненной. См. также [[Форма]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Hide|Hide]]&lt;br /&gt;
|form={{Grey|Table.}}'''Hide'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция позволяет закрыть открытую ранее форму таблицы и сделать таблицу невизуальной.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.HasWindow|HasWindow]]&lt;br /&gt;
|form={{Grey|Table.}}'''HasWindow'''():''&amp;lt;Режим вывода таблицы на экран (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция возвращает 0, если таблица не выведена на экран, 1 -- если она выведена, как самостоятельная форма, 2 -- если она является частью элемента формы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.NavigationState|NavigationState]]&lt;br /&gt;
|form={{Grey|Table.}}'''NavigationState'''({{Optional|&amp;lt;Новое состояние навигации (STRING)&amp;gt;}}):''&amp;lt;Текущее состояние навигации (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция возвращает или/и изменяет состояние навигации в таблице. В это понятие включается: первая видимая верхняя левая ячейка, количество закрепленных строк и столбцов, положение курсора в таблице. Сохранение и восстановление состояния, к примеру, удобно использовать при обновлении отчета, чтобы после обновления вернуть курсор в ячейку, в которой он находился до обновления.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.ShowPreview|ShowPreview]]&lt;br /&gt;
|form={{Grey|Table.}}'''ShowPreview'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция выводит стандартный диалог предварительного просмотра перед печатью.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.ShowPrintProperties|ShowPrintProperties]]&lt;br /&gt;
|form={{Grey|Table.}}'''ShowPrintProperties'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция выводит стандартный диалог установок печати таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Print|Print]]&lt;br /&gt;
|form={{Grey|Table.}}'''Print'''({{Optional|&amp;lt;Показать стандартный диалог печати до ее осуществления (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Наименование задания на принтере (STRING)&amp;gt;,&amp;lt;Режим диалога отмены печати (INT)&amp;gt;{{Default|{{Eq}}0}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит печать на принтер, с выводом стандартного диалога печати, если это необходимо. После деления данных на страницы при печати, функция изменяет текст колонтитулов созданных страниц, подставляя вместо выражения &amp;lt;code&amp;gt;#P&amp;lt;/code&amp;gt; номер соответствующей страницы, а вместо &amp;lt;code&amp;gt;#Q&amp;lt;/code&amp;gt; общее количество страниц при печати. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.CreatePageIndex|CreatePageIndex]]&lt;br /&gt;
|form={{Grey|Table.}}'''CreatePageIndex'''({{Optional|&amp;lt;Максимальное время ожидания освобождения принтера (INT)&amp;gt;{{Default|{{Eq}}5000}}}}):''&amp;lt;Список размеров страниц (LIST)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция создает или обновляет список страниц, которые будут выведены на печать, если текущие установки таблицы не изменятся. '''Внимание:''' функция может выполняться достаточно длительное время, из-за того, что установки печати записываются в свойства принтера перед подсчетом, кроме того, функция пересчитывает все параметры ячеек с изменяемыми размерами, поэтому, чем больше таблица по размеру, тем медленнее работает эта функция. Если принтер занят в данный момент печатью, функция также ожидает ее окончания, максимальное время этого ожидания задается в первом аргументе в миллисекундах.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Load|Load]]&lt;br /&gt;
|form={{Grey|Table.}}'''Load'''(''&amp;lt;Наименование файла (STRING)&amp;gt;''{{Optional|,&amp;lt;Формат (INT,STRING)&amp;gt;,&amp;lt;Индекс или наименование листа (INT,STRING)&amp;gt;}}):''&amp;lt;Наименование загруженного листа или список с листами (STRING,LIST)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит загрузку текущей таблицы из файла в указанном формате, предыдущие данные, находившиеся в таблице, будут утеряны.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Save|Save]]&lt;br /&gt;
|form={{Grey|Table.}}'''Save'''(''&amp;lt;Наименование файла (STRING)&amp;gt;''{{Optional|,&amp;lt;Формат (INT,STRING)&amp;gt;,&amp;lt;Список таблиц для сохранения в листы книги (LIST)&amp;gt;}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит сохранение текущей таблицы в файл в указанном формате.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.LoadFromBuffer|LoadFromBuffer]]&lt;br /&gt;
|form={{Grey|Table.}}'''LoadFromBuffer'''(''&amp;lt;Объект буфера или строка (BUFFER,STRING)&amp;gt;''{{Optional|,&amp;lt;Начальная позиция буфера (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Размер таблицы в буфере (INT)&amp;gt;,&amp;lt;Формат (INT,STRING)&amp;gt;,&amp;lt;Индекс или наименование листа (INT,STRING)&amp;gt;}}):''&amp;lt;Наименование загруженного листа или список с листами (STRING,LIST)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит загрузку текущей таблицы из буфера в указанном формате, предыдущие данные, находившиеся в таблице, будут утеряны.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.SaveToBuffer|SaveToBuffer]]&lt;br /&gt;
|form={{Grey|Table.}}'''SaveToBuffer'''(''&amp;lt;Объект буфера (BUFFER)&amp;gt;''{{Optional|,&amp;lt;Начальная позиция буфера (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Формат (INT,STRING)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Установки (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Список таблиц для сохранения в листы книги (LIST)&amp;gt;}}):''&amp;lt;Размер в байтах, добавленный в буфер (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит сохранение текущей таблицы в буфер в указанном формате с указанными установками.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.SetSourceName|SetSourceName]]&lt;br /&gt;
|form={{Grey|Table.}}'''SetSourceName'''(''&amp;lt;Наименование таблицы-шаблона (STRING)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция задает новое наименование (и путь, если необходимо) таблицы-шаблона из которого функции, типа [[Table.CopyByX|CopyByX]] будут копировать информацию в текущую таблицу. Имя таблицы задается без расширения. Функция не проверяет существование таблицы с заданным именем, таблица будет загружена в момент, когда будет производиться копирование из нее.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.GetSourceName|GetSourceName]]&lt;br /&gt;
|form={{Grey|Table.}}'''GetSourceName'''():''&amp;lt;Наименование таблицы-шаблона (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает текущее наименование таблицы-шаблона из которого функции, типа [[Table.CopyByX|CopyByX]] будут копировать информацию в текущую таблицу.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.SetSource|SetSource]]&lt;br /&gt;
|form={{Grey|Table.}}'''SetSource'''(''&amp;lt;Таблица-шаблон (TABLE)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция задает таблицу-шаблон из которой функции, типа [[Table.CopyByX|CopyByX]] будут копировать информацию в текущую таблицу.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Source|Source]]&lt;br /&gt;
|form={{Grey|Table.}}'''Source'''():''&amp;lt;Таблица-шаблон (TABLE)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает текущую таблицу-шаблон. Функция возвращает значение типа ''таблица SFT'' только в случае, когда таблица уже загружена (т.е., работа с ней уже велась). Если таблица не была загружена, функция возвращает пустое значение.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.CopyTitles|CopyTitles]]&lt;br /&gt;
|form={{Grey|Table.}}'''CopyTitles'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция выполняет копирование колонтитулов из таблицы-шаблона в текущую таблицу. В момент копирования тексты колонтитулов, являющиеся шаблонами, будут превращены в результаты их вычисления.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.CopyByX|CopyByX]]&lt;br /&gt;
|form={{Grey|Table.}}'''CopyByX'''(''&amp;lt;Указание на область таблицы-шаблона (STRING)&amp;gt;''{{Optional|,&amp;lt;Перейти на новую строку до добавления области (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Не производить изменения размеров столбцов или строк (INT)&amp;gt;{{Default|{{Eq}}0}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция выполняет копирование указанной области ячеек и объектов, находящихся внутри этой области из таблицы-шаблона в текущую таблицу, начиная с ячейки, заданной атрибутами [[Table.CurPutX|CurPutX]] и [[Table.CurPutY|CurPutY]]. В момент копирования тексты и значения ячеек и объектов, являющиеся шаблонами, будут превращены в результаты их вычисления. Если третий аргумент равен 1, до начала копирования, функция переводит курсор копирования в левый столбик и производит сдвиг курсора по вертикали (размер сдвига по вертикали определяется высотой копируемой области). После окончания копирования функция переводит курсор копирования вправо на ширину области копирования. Если четвертый аргумент равен 1, функция не будет изменять размеры строк или столбцов в соответствии с размерами строк и столбцов копируемой области, однако, при копировании текста в ячейки, автоматически рассчитываемые размеры строк или столбцов по-прежнему будут изменены, если это необходимо. После копирования любого визуального объекта, функция вызывает событие [[OnFinishCopyObject]], если оно существует в текущем или глобальном модуле.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.CopyByY|CopyByY]]&lt;br /&gt;
|form={{Grey|Table.}}'''CopyByY'''(''&amp;lt;Указание на область таблицы-шаблона (STRING)&amp;gt;''{{Optional|,&amp;lt;Перейти на новый столбец до добавления области (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Не производить изменения размеров столбцов или строк (INT)&amp;gt;{{Default|{{Eq}}0}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция выполняет копирование указанной области ячеек и объектов, находящихся внутри этой области из таблицы-шаблона в текущую таблицу, начиная с ячейки, заданной атрибутами [[Table.CurPutX|CurPutX]] и [[Table.CurPutY|CurPutY]]. В момент копирования тексты и значения ячеек и объектов, являющиеся шаблонами, будут превращены в результаты их вычисления. Если третий аргумент равен 1, до начала копирования, функция переводит курсор копирования на первую строку и производит сдвиг курсора по горизонтали (размер сдвига по горизонтали определяется шириной копируемой области). После окончания копирования функция переводит курсор копирования вниз на высоту области копирования. Если четвертый аргумент равен 1, функция не будет изменять размеры строк или столбцов в соответствии с размерами строк и столбцов копируемой области, однако, при копировании текста в ячейки, автоматически рассчитываемые размеры строк или столбцов по-прежнему будут изменены, если это необходимо. После копирования любого визуального объекта, функция вызывает событие [[OnFinishCopyObject]], если оно существует в текущем или глобальном модуле.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.RecalcColumnWidth|RecalcColumnWidth]]&lt;br /&gt;
|form={{Grey|Table.}}'''RecalcColumnWidth'''(''&amp;lt;Столбец начала пересчета (INT)&amp;gt;''{{Optional|,&amp;lt;Количество пересчитываемых столбцов (INT)&amp;gt;{{Default|{{Eq}}1}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция пересчитывает ширину указанных столбцов, если их ширина рассчитывается автоматически.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.RecalcLineHeight|RecalcLineHeight]]&lt;br /&gt;
|form={{Grey|Table.}}'''RecalcLineHeight'''(''&amp;lt;Строка начала пересчета (INT)&amp;gt;''{{Optional|,&amp;lt;Количество пересчитываемых строк (INT)&amp;gt;{{Default|{{Eq}}1}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция пересчитывает высоту указанных строк, если их высота рассчитывается автоматически.&lt;br /&gt;
}}&lt;br /&gt;
{{function footer}}&lt;br /&gt;
&lt;br /&gt;
== Атрибуты и функции вспомогательных объектов (Table.Options, Table.Printing и т.п.) ==&lt;br /&gt;
Данный раздел содержит функции, применяемые к подчиненным объектам, связанным с основным объектом таблицы. Данные группа объектов имеет тип ''Table.Options'' и включает следующие объекты:&lt;br /&gt;
* Объект визуального выделения ячеек таблицы&lt;br /&gt;
* Объект списка выделенных визуальных элементов (объектов) таблицы&lt;br /&gt;
* Объект работы с визуальными уровнями таблицы&lt;br /&gt;
* Объект общих настроек таблицы&lt;br /&gt;
* Объект работы с разбиениями таблицы на отдельные страницы при печати&lt;br /&gt;
* Объект настройки параметров печати, полей окружения страницы и колонтитулов&lt;br /&gt;
* Объект работы с со строками или столбцами таблицы, выводящимися на каждой странице&lt;br /&gt;
{{function header}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Selection|Selection]]&lt;br /&gt;
|form={{Grey|Table.}}'''Selection'''():''&amp;lt;Объект выделения таблицы (TABLE.OPTIONS)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция возвращает объект текущего выделения ячеек. С объектом можно вызывать функции, типа [[Table.Selection.Add|Add]] и пр.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Selection.Count|Count]]&lt;br /&gt;
|form={{Grey|Table.Selection.}}'''Count'''():''&amp;lt;Количество областей визуального выделения (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция возвращает количество областей визуального выделения в таблице. Выделение не удаляется даже если пользователь выберет визуальный объект. При выделении объекта, выделение ячеек остается, но будет скрыто. Чтобы узнать, что выделено в данный момент, можно использовать атрибут [[Table.SelectionMode|SelectionMode]]. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Selection.Add|Add]]&lt;br /&gt;
|form={{Grey|Table.Selection.}}'''Add'''(''&amp;lt;Левый столбец выделения (INT)&amp;gt;'',''&amp;lt;Верхняя строка выделения (INT)&amp;gt;'',''&amp;lt;Правый столбец выделения (INT)&amp;gt;'',''&amp;lt;Нижняя строка выделения (INT)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция добавляет к визуально выделенным областям еще одну заданную область.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Selection.Delete|Delete]]&lt;br /&gt;
|form={{Grey|Table.Selection.}}'''Delete'''(''&amp;lt;Индекс области выделения (INT)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция удаляет область визуального выделения с указанным индексом. Первая область выделения имеет индекс 1.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Selection.Get|Get]]&lt;br /&gt;
|form={{Grey|Table.Selection.}}'''Get'''(''&amp;lt;Индекс области выделения (INT)&amp;gt;'',''&amp;lt;Тип границы выделения (INT)&amp;gt;''):''&amp;lt;Столбец или строка выделения (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция получает строку или столбец визуального выделения с указанным индексом.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Selection.GetArea|GetArea]]&lt;br /&gt;
|form={{Grey|Table.Selection.}}'''GetArea'''(''&amp;lt;Индекс области выделения (INT)&amp;gt;'',{{ByRef|&amp;lt;Левый столбец выделения (INT)&amp;gt;,&amp;lt;Верхняя строка выделения (INT)&amp;gt;,&amp;lt;Правый столбец выделения (INT)&amp;gt;,&amp;lt;Нижняя строка выделения (INT)&amp;gt;}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция получает координаты визуального выделения с указанным индексом.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Selection.Clear|Clear]]&lt;br /&gt;
|form={{Grey|Table.Selection.}}'''Clear'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция удаляет все области выделения; остается одна область, совпадающая с положением визуального курсора.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.SelectedObjects|SelectedObjects]]&lt;br /&gt;
|form={{Grey|Table.}}'''SelectedObjects'''():''&amp;lt;Выделенные визуальные объекты таблицы (TABLE.OPTIONS)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция возвращает объект выделенных визуальных объектов таблицы. С объектом можно вызывать функции, типа [[Table.SelectedObjects.Get|Get]] и пр.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.SelectedObjects.Count|Count]]&lt;br /&gt;
|form={{Grey|Table.SelectedObjects.}}'''Count'''():''&amp;lt;Количество выделенных визуальных объектов (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция возвращает количество выделенных визуальных объектов в таблице. Чтобы узнать, что выделено в данный момент, можно использовать атрибут [[Table.SelectionMode|SelectionMode]]. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.SelectedObjects.Add|Add]]&lt;br /&gt;
|form={{Grey|Table.SelectedObjects.}}'''Add'''(''&amp;lt;Индекс добавляемого к выделенным объекта (INT)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция добавляет к выделенным в данный момент объектам указанный по индексу объект. Если до момента вызова функции был активен режим выделения ячеек, после вызова функции активируется режим выделения визуальных объектов с единственным выбранным объектом.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.SelectedObjects.Delete|Delete]]&lt;br /&gt;
|form={{Grey|Table.SelectedObjects.}}'''Delete'''(''&amp;lt;Индекс исключаемого из выделения объекта (INT)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция исключает из выделенных в данный момент объектов указанный по индексу объект.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.SelectedObjects.Get|Get]]&lt;br /&gt;
|form={{Grey|Table.SelectedObjects.}}'''Get'''(''&amp;lt;Индекс выделенного объекта (INT)&amp;gt;''):''&amp;lt;Визуальный объект (TABLE.OBJECT&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция получает визуальный объект таблицы по индексу в массиве выделенных в данный момент объектов&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.SelectedObjects.Clear|Clear]]&lt;br /&gt;
|form={{Grey|Table.SelectedObjects.}}'''Clear'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция исключает все выделенные объекты из массива выделенных объектов и активирует режим выделения ячеек.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Levels|Levels]]&lt;br /&gt;
|form={{Grey|Table.}}'''Levels'''({{Optional|&amp;lt;Тип уровня (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Индекс уровня (INT)&amp;gt;,&amp;lt;Индекс дочернего уровня (INT)&amp;gt;...}}):''&amp;lt;Визуальные уровни таблицы (TABLE.OPTIONS)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция возвращает объект визуальных уровней таблицы. Уровни используются для выделения групп столбцов или строк таблицы. Уровни можно закрывать или открыть. Если уровень закрыт, строки или столбцы, входящие в него (кроме основной строки/столбца) будут скрыты. Уровни могут быть вложенными друг в друга. С объектом можно вызывать функции, типа [[Table.Levels.Open|Open]] и пр. Функция содержит указание на конкретный уровень (если заданы индексы), после чего к нему можно добавить дочерние уровни, либо указание на корневой уровень (если индексы не заданы).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Levels.Child|Child]]&lt;br /&gt;
|form={{Grey|Table.Levels.}}'''Child'''(''&amp;lt;Индекс уровня (INT)&amp;gt;''):''&amp;lt;Объект вложенного уровня по его индексу (TABLE.OPTIONS)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция получает объект уровня, вложенного в текущий, по его индексу. Индексация начинается с единицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Levels.Parent|Parent]]&lt;br /&gt;
|form={{Grey|Table.Levels.}}'''Parent'''():''&amp;lt;Объект уровня, в который вложен данный (TABLE.OPTIONS)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция получает уровень, в который вложен данный. Если функция вызывается с объектом верхнего уровня, она возвращает пустое значение.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Levels.Index|Index]]&lt;br /&gt;
|form={{Grey|Table.Levels.}}'''Index'''():''&amp;lt;Индекс текущего уровня внутри родительского (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция получает индекс текущего уровня относительно родительского уровня. Индексация начинается с единицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Levels.Add|Add]]&lt;br /&gt;
|form={{Grey|Table.Levels.}}'''Add'''(''&amp;lt;Направление уровня (INT)&amp;gt;'',''&amp;lt;Начальная позиция уровня (INT)&amp;gt;'',''&amp;lt;Конечная позиция уровня (INT)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция добавляет визуальный уровень к текущему, либо к одному из детей текущего уровня, если начальная и конечная позиции располагаются полностью внутри дочернего уровня.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Levels.Delete|Delete]]&lt;br /&gt;
|form={{Grey|Table.Levels.}}'''Delete'''({{Optional|&amp;lt;Начальная позиция (INT)&amp;gt;,&amp;lt;Конечная позиция (INT)&amp;gt;,&amp;lt;Рекурсивно удалить дочерние уровни (INT)&amp;gt;{{Default|{{Eq}}1}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция удаляет указанные с помощью границ визуальные уровни, если необходимо, со всеми подчиненными уровнями. Если текущий объект указывает на существующий, а не корневой уровень, аргументы можно опустить и функция удалит текущей уровень со всеми его подчиненными подуровнями.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Levels.Count|Count]]&lt;br /&gt;
|form={{Grey|Table.Levels.}}'''Count'''():''&amp;lt;Количество дочерних уровней (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция получает общее количество уровней, дочерних по отношению к данному.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Levels.Beg|Beg]]&lt;br /&gt;
|form={{Grey|Table.Levels.}}'''Beg''':''&amp;lt;Начальная позиция текущего уровня (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает начальную позицию текущего уровня, функция не может применяться для корневого уровня (не имеющего видимый переключатель в таблице)&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Levels.End|End]]&lt;br /&gt;
|form={{Grey|Table.Levels.}}'''End''':''&amp;lt;Конечная позиция текущего уровня (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает конечную позицию текущего уровня, функция не может применяться для корневого уровня (не имеющего видимый переключатель в таблице)&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Levels.IsClosed|IsClosed]]&lt;br /&gt;
|form={{Grey|Table.Levels.}}'''IsClosed''':''&amp;lt;Текущий уровень закрыт (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает статус, открыт ли текущий уровень, функция не может применяться для корневого уровня (не имеющего видимый переключатель в таблице)&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Levels.Open|Open]]&lt;br /&gt;
|form={{Grey|Table.Levels.}}'''Open'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция открывает текущий уровень. При применении функции к верхнему уровню, она открывает все уровни таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Levels.Close|Close]]&lt;br /&gt;
|form={{Grey|Table.Levels.}}'''Close'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция закрывает текущий уровень. При применении функции к верхнему уровню, она закрывает все уровни таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Options|Options]]&lt;br /&gt;
|form={{Grey|Table.}}'''Options''':''&amp;lt;Объект установок таблицы (TABLE.OPTIONS)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает объект установок таблицы. С объектом можно вызывать функции, типа [[Table.Options.FixedLine|FixedLine]] и пр.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Options.ShowGrid|ShowGrid]]&lt;br /&gt;
|form={{Grey|Table.Options.}}'''ShowGrid''':''&amp;lt;Показывать сетку редактирования (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут возвращает или изменяет режим отображения сетки редактирования в таблице.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Options.ShowCaptions|ShowCaptions]]&lt;br /&gt;
|form={{Grey|Table.Options.}}'''ShowCaptions''':''&amp;lt;Показывать заголовки строк и столбцов (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут возвращает или изменяет режим отображения заголовков строк и столбцов в таблице.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Options.FixedLine|FixedLine]]&lt;br /&gt;
|form={{Grey|Table.Options.}}'''FixedLine''':''&amp;lt;Закрепить на экране указанное количество строк (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут возвращает или изменяет количество строк, закрепленных на экране. При сдвиге отображаемого поля таблицы закрепленные строки останутся видимыми. По умолчанию этот атрибут равен 0 (нет закрепленных строк).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Options.FixedColumn|FixedColumn]]&lt;br /&gt;
|form={{Grey|Table.Options.}}'''FixedColumn''':''&amp;lt;Закрепить на экране указанное количество столбцов (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут возвращает или изменяет количество столбцов, закрепленных на экране. При сдвиге отображаемого поля таблицы закрепленные столбцы останутся видимыми. По умолчанию этот атрибут равен 0 (нет закрепленных столбцов).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Options.GroupsVisible|GroupsVisible]]&lt;br /&gt;
|form={{Grey|Table.Options.}}'''GroupsVisible''':''&amp;lt;Видимость группировок таблиц-шаблонов (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут возвращает или изменяет режим отображения наименований группировок, используемых в таблицах-шаблонах для получения областей таблиц по наименованиям.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Options.LevelsVisible|LevelsVisible]]&lt;br /&gt;
|form={{Grey|Table.Options.}}'''LevelsVisible''':''&amp;lt;Видимость уровней группировок (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут возвращает или изменяет режим отображения уровней группировок таблицы. Уровни используются для группировки строк или столбцов, каждый уровень может быть закрыт (тогда его столбцы или строки не будут отображаться на экране), либо открыт. Уровни могут быть вложенными.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Options.Scrollable|Scrollable]]&lt;br /&gt;
|form={{Grey|Table.Options.}}'''Scrollable''':''&amp;lt;Разрешить сдвиг отображаемой части таблицы (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут возвращает или изменяет режим разрешения сдвига отображаемой части таблицы. При запрете сдвига на экране будет отображаться только верхняя левая часть таблицы, сдвинуть ее вверх или влево будет невозможно.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Options.IsChanged|IsChanged]]&lt;br /&gt;
|form={{Grey|Table.Options.}}'''IsChanged''':''&amp;lt;Производились ли изменения в таблице (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут возвращает или изменяет признак того, были ли произведены визуальные изменения в таблице с момента ее предыдущего сохранения. Для таблицы, выведенных на экран, признак виден в заголовке таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.PageBreaks|PageBreaks]]&lt;br /&gt;
|form={{Grey|Table.}}'''PageBreaks''':''&amp;lt;Объект разбиения на страницы (TABLE.OPTIONS)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает объект разбиения таблицы на страницы. Таблицу можно разбить на страницы в нужных строках и нужных столбцах, разбитые области будут выводиться отдельными страницами при печати, даже если активна установка печати &amp;quot;помещать на одной странице&amp;quot;. С объектом можно вызывать функции, типа [[Table.PageBreaks.Add|Add]] и пр.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.PageBreaks.Add|Add]]&lt;br /&gt;
|form={{Grey|Table.PageBreaks.}}'''Add'''({{Optional|&amp;lt;Строка разбиения (INT)&amp;gt;}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция позволяет добавить новое разбиение страницы по горизонтали.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.PageBreaks.AddVertical|AddVertical]]&lt;br /&gt;
|form={{Grey|Table.PageBreaks.}}'''AddVertical'''({{Optional|&amp;lt;Столбец разбиения (INT)&amp;gt;''}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция позволяет добавить новое разбиение страницы по вертикали.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.PageBreaks.Count|Count]]&lt;br /&gt;
|form={{Grey|Table.PageBreaks.}}'''Count'''({{Optional|&amp;lt;Вертикальные разбиения (INT)&amp;gt;{{Eq}}1}}):''&amp;lt;Количество разбиений на страницы (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут отдает количество (горизонтальных или вертикальных) разбиений на страницы в данной таблице.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.PageBreaks.Delete|Delete]]&lt;br /&gt;
|form={{Grey|Table.PageBreaks.}}'''Delete'''(''&amp;lt;Индекс разбиения (INT)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция удаляет разбиение с указанным индексом.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.PageBreaks.GetPosition|GetPosition]]&lt;br /&gt;
|form={{Grey|Table.PageBreaks.}}'''GetPosition'''(''&amp;lt;Индекс разбиения (INT)&amp;gt;''{{Optional|,&amp;lt;Вертикальные разбиения (INT)&amp;gt;{{Eq}}1}}):''&amp;lt;Позиция разбиения (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает столбец (если разбиение горизонтальное) или строку разбиения (если разбиение вертикальное) по индексу разбиения.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing|Printing]]&lt;br /&gt;
|form={{Grey|Table.}}'''Printing''':''&amp;lt;Объект установок печати (TABLE.OPTIONS)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает объект установок печати таблицы. С объектом можно вызывать функции, типа [[Table.Printing.Printer|Printer]] и пр.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.Orientation|Orientation]]&lt;br /&gt;
|form={{Grey|Table.Printing.}}'''Orientation''':''&amp;lt;Ориентация листа при печати (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут получает или устанавливает ориентацию листа при печати (0 -- в виде портрета, 1 -- в виде ландшафта).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.ScaleMode|ScaleMode]]&lt;br /&gt;
|form={{Grey|Table.Printing.}}'''ScaleMode''':''&amp;lt;Режим масштабирования при печати (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут получает или устанавливает режим масштабирования страниц при печати. Возможные значения: 0 -- сжимать таблицу до ширины листа, 1 -- сжимать или увеличивать таблицу до ширины листа, 2 -- использовать заданный масштаб при печати страницы (см. [[Table.Printing.Scale|Scale]]), 3 -- сжимать или увеличивать таблицу, чтобы она умещалась на одном листе. Важно понимать, что в таблицах, где использовано разбиение на страницы (см. [[Table.PageBreaks|PageBreaks]]), сжатие и расширение (в т.ч. размещение на одном листе) происходит для каждой страницы, полученной в результате разбиения.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.Scale|Scale]]&lt;br /&gt;
|form={{Grey|Table.Printing.}}'''Scale''':''&amp;lt;Масштаб в режиме печати с заданным масштабом (REAL)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут получает или устанавливает масштаб печати в режиме печати с заданным масштабом. Масштаб устанавливается в процентах и может быть вещественным числом. По умолчанию этот атрибут равен 100.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.Printer|Printer]]&lt;br /&gt;
|form={{Grey|Table.Printing.}}'''Printer''':''&amp;lt;Наименование текущего принтера (STRING)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут получает или устанавливает наименование текущего принтера для печати таблицы. Если этому атрибуту присваивается пустая строка, будет использован принтер по умолчанию..&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.Copies|Copies]]&lt;br /&gt;
|form={{Grey|Table.Printing.}}'''Copies''':''&amp;lt;Количество копий при печати (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут получает или устанавливает количество копий при печати таблицы. По умолчанию, этот атрибут равен единице.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.PageOptions|PageOptions]]&lt;br /&gt;
|form={{Grey|Table.Printing.}}'''PageOptions''':''&amp;lt;Дополнительные установки печати (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут получает или устанавливает дополнительные установки страницы. Атрибут имеет тип битовой маски, возможные значения перечислены в статье [[Константы#Константы свойств таблиц|Константы]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.Fields|Fields]]&lt;br /&gt;
|form={{Grey|Table.Printing.}}'''Fields''':''&amp;lt;Объект установок полей таблицы при печати (TABLE.OPTIONS)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает объект установок полей таблицы при печати. С объектом можно вызывать функции, типа [[Table.Printing.Fields.Left|Left]] и пр.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.Fields.Left|Left]]&lt;br /&gt;
|form={{Grey|Table.Printing.Fields.}}'''Left''':''&amp;lt;Ширина левого поля в мм. (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут получает или устанавливает ширину пустого левого поля при печати страницы. По умолчанию ширина поля равна 10 мм.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.Fields.Right|Right]]&lt;br /&gt;
|form={{Grey|Table.Printing.Fields.}}'''Right''':''&amp;lt;Ширина правого поля в мм. (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут получает или устанавливает ширину пустого правого поля при печати страницы. По умолчанию ширина поля равна 10 мм.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.Fields.Up|Up]]&lt;br /&gt;
|form={{Grey|Table.Printing.Fields.}}'''Up''':''&amp;lt;Ширина верхнего поля в мм. (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут получает или устанавливает ширину пустого верхнего поля при печати страницы. По умолчанию ширина поля равна 10 мм. Поле следует до начала верхнего колонтитула и не включается в ширину колонтитула.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.Fields.Down|Down]]&lt;br /&gt;
|form={{Grey|Table.Printing.Fields.}}'''Down''':''&amp;lt;Ширина нижнего поля в мм. (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут получает или устанавливает ширину пустого нижнего поля при печати страницы. По умолчанию ширина поля равна 10 мм. Поле следует после нижнего колонтитула и не включается в ширину колонтитула.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.Titles|Titles]]&lt;br /&gt;
|form={{Grey|Table.Printing.}}'''Titles''':''&amp;lt;Объект установок колонтитулов таблицы при печати (TABLE.OPTIONS)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает объект установок колонтитулов таблицы при печати. С объектом можно вызывать функции, типа [[Table.Printing.Titles.Up|Up]] и пр.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.Titles.Up|Up]]&lt;br /&gt;
|form={{Grey|Table.Printing.Titles.}}'''Up''':''&amp;lt;Объект установок верхнего колонтитула таблицы при печати (TABLE.OPTIONS)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает объект установок верхнего колонтитула таблицы при печати. С объектом можно вызывать функции, типа [[Table.Printing.Titles.Text|Text]] и пр.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.Titles.Down|Down]]&lt;br /&gt;
|form={{Grey|Table.Printing.Titles.}}'''Down''':''&amp;lt;Объект установок нижнего колонтитула таблицы при печати (TABLE.OPTIONS)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает объект установок нижнего колонтитула таблицы при печати. С объектом можно вызывать функции, типа [[Table.Printing.Titles.Text|Text]] и пр.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.Titles.Size|Size]]&lt;br /&gt;
|form={{Grey|Table.Printing.Titles.&amp;lt;Тип колонтитула&amp;gt;.}}'''Size''':''&amp;lt;Ширина выбранного колонтитула в мм. (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут получает или устанавливает ширину выбранного колонтитула при печати таблицы. По умолчанию ширина колонтитула равна 7 мм.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.Titles.Text|Text]]&lt;br /&gt;
|form={{Grey|Table.Printing.Titles.&amp;lt;Тип колонтитула&amp;gt;.}}'''Text''':''&amp;lt;Текст или шаблон колонтитула (STRING)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут получает или устанавливает текст или шаблон выбранного колонтитула при печати таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.Titles.TextOptions|TextOptions]]&lt;br /&gt;
|form={{Grey|Table.Printing.Titles.&amp;lt;Тип колонтитула&amp;gt;.}}'''TextOptions''':''&amp;lt;Установки форматирования колонтитула (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут получает или устанавливает установки форматирования выбранного колонтитула при печати таблицы. Значение является битовой маской и использует сл. биты: биты 0..1: режим выравнивания по горизонтали, биты 2..3: режим выравнивания по вертикали.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.Titles.Orientation|Orientation]]&lt;br /&gt;
|form={{Grey|Table.Printing.Titles.&amp;lt;Тип колонтитула&amp;gt;.}}'''Orientation''':''&amp;lt;Угол направления текста (REAL)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет угол направления прорисовки текста выбранного колонтитула при печати таблицы. По умолчанию это значение равно 0 (горизонтальный текст).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.Titles.TitleOptions|TitleOptions]]&lt;br /&gt;
|form={{Grey|Table.Printing.Titles.&amp;lt;Тип колонтитула&amp;gt;.}}'''TitleOptions''':''&amp;lt;Дополнительные установки колонтитула (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут получает или устанавливает дополнительные установки выбранного колонтитула при печати таблицы. Значение является битовой маской и использует сл. биты: бит 0: режим шаблона для текста активен, бит 2: при переносе текста принимать во внимание границы слов.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.Titles.PrintFromPage|PrintFromPage]]&lt;br /&gt;
|form={{Grey|Table.Printing.Titles.&amp;lt;Тип колонтитула&amp;gt;.}}'''PrintFromPage''':''&amp;lt;Начинать печатать колонтитул с указанной страницы (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут получает или устанавливает номер страницы, с которой будет начитать печататься колонтитул. По умолчанию, этот атрибут равен единице.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.Titles.ColorProfile|ColorProfile]]&lt;br /&gt;
|form={{Grey|Table.Printing.Titles.&amp;lt;Тип колонтитула&amp;gt;.}}'''ColorProfile''':''&amp;lt;Шаблон цвета колонтитула (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет номер шаблона цвета выбранного колонтитула таблицы. По умолчанию это значение равно 0 (цвета и стиль форматирования определяется соответствующими атрибутами колонтитула, а не номером шаблона). Номера шаблонов можно найти в [[Номера шаблонов цветов ячеек таблицы|этой статье]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.Titles.BackgroundColor|BackgroundColor]]&lt;br /&gt;
|form={{Grey|Table.Printing.Titles.&amp;lt;Тип колонтитула&amp;gt;.}}'''BackgroundColor''':''&amp;lt;Номер цвета фона колонтитула (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет номер цвета фона выбранного колонтитула таблицы. Система получает цвет по номеру из палитры, для прямого указания цвета используйте атрибут [[Table.Printing.Titles.BackgroundColorRGB|BackgroundColorRGB]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.Titles.BackgroundColorRGB|BackgroundColorRGB]]&lt;br /&gt;
|form={{Grey|Table.Printing.Titles.&amp;lt;Тип колонтитула&amp;gt;.}}'''BackgroundColorRGB''':''&amp;lt;Цвет фона колонтитула (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет цвет фона выбранного колонтитула таблицы по его 24-битному значению. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.Titles.FontColor|FontColor]]&lt;br /&gt;
|form={{Grey|Table.Printing.Titles.&amp;lt;Тип колонтитула&amp;gt;.}}'''FontColor''':''&amp;lt;Номер цвета текста колонтитула (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет номер цвета текста выбранного колонтитула таблицы. Система получает цвет по номеру из палитры, для прямого указания цвета используйте атрибут [[Table.Printing.Titles.FontColorRGB|FontColorRGB]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.Titles.FontColorRGB|FontColorRGB]]&lt;br /&gt;
|form={{Grey|Table.Printing.Titles.&amp;lt;Тип колонтитула&amp;gt;.}}'''FontColorRGB''':''&amp;lt;Цвет текста колонтитула (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет цвет текста выбранного колонтитула таблицы по его 24-битному значению. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.Titles.FontStyle|FontStyle]]&lt;br /&gt;
|form={{Grey|Table.Printing.Titles.&amp;lt;Тип колонтитула&amp;gt;.}}'''FontStyle''':''&amp;lt;Стиль текста колонтитула (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет стиль текста выбранного колонтитула таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.Titles.FontSize|FontSize]]&lt;br /&gt;
|form={{Grey|Table.Printing.Titles.&amp;lt;Тип колонтитула&amp;gt;.}}'''FontSize''':''&amp;lt;Размер шрифта колонтитула (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет размер шрифта текста выбранного колонтитула таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.Titles.Font|Font]]&lt;br /&gt;
|form={{Grey|Table.Printing.Titles.&amp;lt;Тип колонтитула&amp;gt;.}}'''Font''':''&amp;lt;Наименование шрифта текста колонтитула (STRING)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет наименование шрифта текста выбранного колонтитула таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.ContinualLines|ContinualLines]]&lt;br /&gt;
|form={{Grey|Table.Printing.}}'''ContinualLines''':''&amp;lt;Объект установок строк таблицы, печатающихся на каждой странице (TABLE.OPTIONS)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает объект установок строк таблицы, выводящихся на печать на каждой странице. К примеру, для таблиц данных, которые занимают несколько страниц при печати, удобно печатать заголовок на каждой новой страницы до момента, когда таблица закончится. С объектом можно вызывать функции, типа [[Table.Printing.ContinualPrinting.From|From]] и пр.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.ContinualColumns|ContinualColumns]]&lt;br /&gt;
|form={{Grey|Table.Printing.}}'''ContinualColumns''':''&amp;lt;Объект установок столбцов таблицы, печатающихся на каждой странице (TABLE.OPTIONS)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает объект установок столбцов таблицы, выводящихся на печать на каждой странице. С объектом можно вызывать функции, типа [[Table.Printing.ContinualPrinting.From|From]] и пр.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.ContinualPrinting.From|From]]&lt;br /&gt;
|form={{Grey|Table.Printing.&amp;lt;Тип объекта&amp;gt;.}}'''From''':''&amp;lt;Строка или столбец начала области (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или устанавливает строку или столбец, с которой начинается область, печатающаяся на каждой странице.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.ContinualPrinting.To|To]]&lt;br /&gt;
|form={{Grey|Table.Printing.&amp;lt;Тип объекта&amp;gt;.}}'''To''':''&amp;lt;Строка или столбец окончания области (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или устанавливает строку или столбец, на которой заканчивается область, печатающаяся на каждой странице. Копия области будет выведена на следующей по горизонтали или вертикали странице (в зависимости от типа объекта).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Printing.ContinualPrinting.EndCell|EndCell]]&lt;br /&gt;
|form={{Grey|Table.Printing.&amp;lt;Тип объекта&amp;gt;.}}'''EndCell''':''&amp;lt;Строка или столбец, после которого, заданная область, печатавшаяся на каждой странице, больше не выводится (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или устанавливает строку или столбец, после вывода на печать которых, заданная область, печатавшаяся на каждой странице, больше не выводится.&lt;br /&gt;
}}&lt;br /&gt;
{{function footer}}&lt;br /&gt;
&lt;br /&gt;
== Атрибуты и функции объекта области таблицы (Table.Area) ==&lt;br /&gt;
Данный раздел содержит функции, применяемые к объекту области таблицы. Объект области позволяет получить или изменять параметры ячеек, входящих в нее. При создании объекта, не производится копирования области в памяти, а создается только ссылка на нее.&lt;br /&gt;
{{function header}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area|Area]]&lt;br /&gt;
|form={{Grey|Table.}}'''Area'''(''&amp;lt;Левый столбец области (INT)&amp;gt;'',''&amp;lt;Верхняя строка области (INT)&amp;gt;''{{Optional|,&amp;lt;Правый столбец области (INT)&amp;gt;,&amp;lt;Нижняя строка области (INT)&amp;gt;}}):''&amp;lt;Объект области таблицы (TABLE.AREA)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает объект области таблицы. С объектом можно вызывать функции, типа [[Table.Area.Text|Text]] и пр. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.Text|Text]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''Text''':''&amp;lt;Текст ячеек области (STRING)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет текст ячеек области таблицы. Текст получается для крайней левой верхней ячейки области, и устанавливается для всех ячеек таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.Value|Value]], '''Formula'''&lt;br /&gt;
|form={{Grey|Table.Area.}}'''Value''':''&amp;lt;Значение ячеек таблицы&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет значение, ассоциированное с ячейками области таблицы. Значение получается для крайней левой верхней ячейки области, и устанавливается для всех ячеек таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.ValueTemplate|ValueTemplate]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''ValueTemplate''':''&amp;lt;Формула шаблона ячейки (STRING)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет текст формулы шаблона, ассоциированной с ячейками области таблицы. Значение получается для крайней левой верхней ячейки области, и устанавливается для всех ячеек таблицы. Формула шаблона использует тоже самое место хранения, что и значение ячейки. Для ячейки может быть задана либо формула, либо значение.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.WrappingMode|WrappingMode]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''WrappingMode''':''&amp;lt;Режим переноса текста (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет значение режима переноса текста ячеек области таблицы. Значение получается для крайней левой верхней ячейки области, и устанавливается для всех ячеек таблицы. Значение 0 задает режим переноса с соблюдением границы слов, 1 -- без соблюдения.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.IsTemplate|IsTemplate]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''IsTemplate''':''&amp;lt;Является ли текст формулой шаблона (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет признак того, является ли текст ячеек области таблицы шаблоном (шаблон выполняется при копировании области в другую таблицу). Значение признака получается для крайней левой верхней ячейки области, и устанавливается для всех ячеек таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.IsValueTemplate|IsValueTemplate]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''IsValueTemplate''':''&amp;lt;Является ли значение формулой шаблона (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет признак того, является ли значения ячеек области таблицы шаблоном (шаблон выполняется при копировании области в другую таблицу). Значение признака получается для крайней левой верхней ячейки области, и устанавливается для всех ячеек таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.HAlign|HAlign]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''HAlign''':''&amp;lt;Выравнивание по горизонтали (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет режим выравнивания текста ячеек области таблицы по горизонтали. Значение признака получается для крайней левой верхней ячейки области, и устанавливается для всех ячеек таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.VAlign|VAlign]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''VAlign''':''&amp;lt;Выравнивание по вертикали (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет режим выравнивания текста ячеек области таблицы по вертикали. Значение признака получается для крайней левой верхней ячейки области, и устанавливается для всех ячеек таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.ClipMode|ClipMode]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''ClipMode''':''&amp;lt;Контроль границы ячейки (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет режим контроля выхода за границу ячейки текста ячеек области таблицы. Значение признака получается для крайней левой верхней ячейки области, и устанавливается для всех ячеек таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.RedNegative|RedNegative]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''RedNegative''':''&amp;lt;Отрицательные красным (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет режим выделения красным текста ячеек области таблицы, когда они содержат отрицательные числа. Значение признака получается для крайней левой верхней ячейки области, и устанавливается для всех ячеек таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.Protected|Protected]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''Protected''':''&amp;lt;Защита от изменения в режиме просмотра (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет режим защиты ячеек области таблицы от изменения в режиме просмотра (игнорируется в режиме редактирования и запрета изменений). По умолчанию признак защиты установлен. Значение признака получается для крайней левой верхней ячейки области, и устанавливается для всех ячеек таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.Orientation|Orientation]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''Orientation''':''&amp;lt;Угол направления текста (REAL)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет угол направления прорисовки текста ячеек области таблицы. По умолчанию это значение равно 0 (горизонтальный текст). Значение признака получается для крайней левой верхней ячейки области, и устанавливается для всех ячеек таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.ParentCell|ParentCell]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''ParentCell''':''&amp;lt;Тип объединения ячейки (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает тип объединения, связанный с крайней левой верхней ячейкой области таблицы. Получаемый атрибут может принимать следующие значения: 0 -- ячейка не участвует в объединении ячеек, 1 -- это крайняя левая ячейка области объединения (основная ячейка, из свойств которой используются цвета, шрифт, текст и пр. для всей области), 2 -- эта ячейка участвует в объединении, как подчиненная ячейка.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.ExtentX|ExtentX]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''ExtentX''':''&amp;lt;Ссылка по горизонтали на основную ячейку объединения (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Для крайней левой верхней ячейкой области атрибут возвращает расстояние в ячейках по горизонтали от текущей ячейки до основной ячейки объединения (отрицательное число); количество ячеек в области объединения по горизонтали, если это основная ячейка (см. [[Table.Area.ParentCell|ParentCell]]); либо 0, если ячейка не участвует в объединении ячеек.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.ExtentY|ExtentY]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''ExtentY''':''&amp;lt;Ссылка по вертикали на основную ячейку объединения (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Для крайней левой верхней ячейкой области атрибут возвращает расстояние в ячейках по вертикали от текущей ячейки до основной ячейки объединения (отрицательное число); количество ячеек в области объединения по вертикали, если это основная ячейка (см. [[Table.Area.ParentCell|ParentCell]]); либо 0, если ячейка не участвует в объединении ячеек.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.IndentX|IndentX]], '''Indent'''&lt;br /&gt;
|form={{Grey|Table.Area.}}'''IndentX''':''&amp;lt;Отступ текста по горизонтали (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет отступ текста по горизонтали от границы ячеек области таблицы. По умолчанию это значение равно 0 (отступ отсутствует). Значение признака получается для крайней левой верхней ячейки области, и устанавливается для всех ячеек таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.IndentY|IndentY]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''IndentY''':''&amp;lt;Отступ текста по вертикали (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет отступ текста по вертикали от границы ячеек области таблицы. По умолчанию это значение равно 0 (отступ отсутствует). Значение признака получается для крайней левой верхней ячейки области, и устанавливается для всех ячеек таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.ColorProfile|ColorProfile]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''ColorProfile''':''&amp;lt;Шаблон цвета ячейки (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет номер шаблона цвета ячеек области таблицы. По умолчанию это значение равно 0 (цвета и стиль форматирования определяется соответствующими атрибутами ячейки, а не номером шаблона). Номера шаблонов можно найти в [[Номера шаблонов цветов ячеек таблицы|этой статье]]. Значение признака получается для крайней левой верхней ячейки области, и устанавливается для всех ячеек таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.BackgroundColor|BackgroundColor]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''BackgroundColor''':''&amp;lt;Номер цвета фона ячейки (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет номер цвета фона ячеек области таблицы. Система получает цвет по номеру из палитры, для прямого указания цвета используйте атрибут [[Table.Area.BackgroundColorRGB|BackgroundColorRGB]]. Значение признака получается для крайней левой верхней ячейки области, и устанавливается для всех ячеек таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.BackgroundColorRGB|BackgroundColorRGB]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''BackgroundColorRGB''':''&amp;lt;Цвет фона ячейки (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет цвет фона ячеек области таблицы по его RGB значению. Значение признака получается для крайней левой верхней ячейки области, и устанавливается для всех ячеек таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.FontColor|FontColor]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''FontColor''':''&amp;lt;Номер цвета текста ячейки (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет номер цвета текста ячеек области таблицы. Система получает цвет по номеру из палитры, для прямого указания цвета используйте атрибут [[Table.Area.FontColorRGB|FontColorRGB]]. Значение признака получается для крайней левой верхней ячейки области, и устанавливается для всех ячеек таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.FontColorRGB|FontColorRGB]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''FontColorRGB''':''&amp;lt;Цвет текста ячейки (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет цвет текста ячеек области таблицы по его RGB значению. Значение признака получается для крайней левой верхней ячейки области, и устанавливается для всех ячеек таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.FrameColor|FrameColor]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''FrameColor''':''&amp;lt;Номер цвета границы ячейки (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет номер цвета границы ячеек области таблицы. Система получает цвет по номеру из палитры, для прямого указания цвета используйте атрибут [[Table.Area.FrameColorRGB|FrameColorRGB]]. Значение признака получается для крайней левой верхней ячейки области, и устанавливается для всех ячеек таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.FrameColorRGB|FrameColorRGB]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''FrameColorRGB''':''&amp;lt;Цвет границы ячейки (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет цвет границы ячеек области таблицы по его RGB значению. Значение признака получается для крайней левой верхней ячейки области, и устанавливается для всех ячеек таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.FontStyle|FontStyle]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''FontStyle''':''&amp;lt;Стиль текста ячейки (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет стиль текста ячеек области таблицы. Значение признака получается для крайней левой верхней ячейки области, и устанавливается для всех ячеек таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.FontSize|FontSize]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''FontSize''':''&amp;lt;Размер шрифта текста ячейки (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет размер шрифта текста ячеек области таблицы. Значение признака получается для крайней левой верхней ячейки области, и устанавливается для всех ячеек таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.Font|Font]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''Font''':''&amp;lt;Наименование шрифта текста ячейки (STRING)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет наименование шрифта текста ячеек области таблицы. Значение признака получается для крайней левой верхней ячейки области, и устанавливается для всех ячеек таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.Frame|Frame]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''Frame''':''&amp;lt;Рисунок и наличие 4-х границ вокруг ячейки (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет рисунок и наличие четырех границ вокруг каждой ячейки из области таблицы. Значение представляет собой битовую маску, где на каждую из границ используется по 4 бита. По умолчанию, это значение равно 0 (ячейка не окружена границами). Значение признака получается для крайней левой верхней ячейки области, и устанавливается для всех ячеек таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.RowAutoSize|RowAutoSize]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''RowAutoSize''':''&amp;lt;Признак автоматического изменения высоты строки (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет признак автоматического изменения высоты строк ячеек области таблицы. Значение признака получается для строки верхних ячеек области, и устанавливается для всех строк области таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.ColAutoSize|ColAutoSize]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''ColAutoSize''':''&amp;lt;Признак автоматического изменения ширины столбца (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет признак автоматического изменения ширины столбцов ячеек области таблицы. Значение признака получается для столбца левых ячеек области, и устанавливается для всех столбцов области таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.RowHeight|RowHeight]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''RowHeight''':''&amp;lt;Высота строки в пикселях (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет высоту строк ячеек области таблицы. Значение признака получается для строки верхних ячеек области, и устанавливается для всех строк области таблицы. При установке этого атрибута, атрибут [[Table.Area.RowAutoSize|RowAutoSize]] автоматически принимает нулевое значение.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.ColWidth|ColWidth]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''ColWidth''':''&amp;lt;Ширина столбца в пикселях (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет ширину столбцов ячеек области таблицы. Значение признака получается для столбца левых ячеек области, и устанавливается для всех столбцов области таблицы. При установке этого атрибута, атрибут [[Table.Area.ColAutoSize|ColAutoSize]] автоматически принимает нулевое значение.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.ContinuousRegionX|ContinuousRegionX]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''ContinuousRegionX''':''&amp;lt;Признак неразрывности горизонтального региона (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет признак неразрывности при печати горизонтального региона ячеек области таблицы. При установке признака можно использовать значения 0 (регион теряет все свойства неразрывности) или 1 (регион становится неразрывным). При чтении, возможны следующие значения: 0 -- в регионе отсутствуют неразрывные диапазоны, 1 -- весь регион представляет собой неразрывный диапазон, 2 -- регион содержит определенное количество неразрывных диапазонов или их частей. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.ContinuousRegionY|ContinuousRegionY]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''ContinuousRegionY''':''&amp;lt;Признак неразрывности вертикального региона (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет признак неразрывности при печати вертикального региона ячеек области таблицы. При установке признака можно использовать значения 0 (регион теряет все свойства неразрывности) или 1 (регион становится неразрывным). При чтении, возможны следующие значения: 0 -- в регионе отсутствуют неразрывные диапазоны, 1 -- весь регион представляет собой неразрывный диапазон, 2 -- регион содержит определенное количество неразрывных диапазонов или их частей. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.Merge|Merge]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''Merge'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция объединяет ячейки области таблицы в один регион объединения. Если с областью граничили или находились внутри области другие регионы объединения, они будут разъединены до выполнения объединения текущей области.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.Demerge|Demerge]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''Demerge'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция разъединяет ячейки области таблицы, это относится ко всем регионам объединения входящим в или граничащим с текущей областью таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.CopyTo|CopyTo]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''CopyTo'''(''&amp;lt;Таблица в которую происходит копирование (TABLE)&amp;gt;'',''&amp;lt;Столбец таблицы для вставки (INT)&amp;gt;'',''&amp;lt;Строка таблицы для вставки (INT)&amp;gt;''{{Optional|,&amp;lt;Копировать также объекты (INT)&amp;gt;{{Default|{{Eq}}1}},&amp;lt;Превращать шаблоны в их значения (INT)&amp;gt;{{Default|{{Eq}}0}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция копирует текущую область в указанную таблицу по начиная с указанной ячейки, таблица результат может также быть текущей таблицей.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.Copy|Copy]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''Copy'''({{Optional|&amp;lt;Копировать также объекты (INT)&amp;gt;{{Default|{{Eq}}1}}}}):''&amp;lt;Копия области в виде новой таблицы (TABLE)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция создает новую таблицу и заполняет ее ячейками текущей области. Область копируется в таблицу начиная с первой верхней левой ячейки.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.Execute|Execute]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''Execute'''({{Optional|&amp;lt;Также находить значения шаблонов для объектов (INT)&amp;gt;{{Default|{{Eq}}1}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция превращает все тексты шаблонов ячеек (и объектов) области в их значения.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.Modify|Modify]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''Modify'''(''&amp;lt;Левый столбец (INT)&amp;gt;'',''&amp;lt;Верхняя строка (INT)&amp;gt;''{{Optional|,&amp;lt;Правый столбец (INT)&amp;gt;,&amp;lt;Нижняя строка (INT)&amp;gt;}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция изменяет размеры и положение текущей области в соответствующей ей таблице. Т.е., действие функции соответствует вызову [[Table.Area|Area]], только на существующем объекте, который после исполнения функции будет указывать на другую область.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Area.Clear|Clear]]&lt;br /&gt;
|form={{Grey|Table.Area.}}'''Clear'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция разъединяет все объединенные ячейки области, очищает весь текст и значения ячеек, стили, границы, цвета и пр. устанавливает в состояние по умолчанию.&lt;br /&gt;
}}&lt;br /&gt;
{{function footer}}&lt;br /&gt;
&lt;br /&gt;
== Атрибуты и функции визуальных объектов таблицы (Table.Object) ==&lt;br /&gt;
Данный раздел содержит функции, применяемые к совокупности или к одному визуальному элементу (объекту) таблицы. Объект позволяет получить или изменять параметры элементов, которые он адресует. Визуальным элементом (объектом), к примеру, может быть рисунок, или текст, добавленные в произвольное место таблицы и имеющие произвольный размер. Такие элементы выводятся на печать и их содержимое закрывает текст ячеек, находящихся непосредственно под ними.&lt;br /&gt;
{{function header}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Objects|Objects]]&lt;br /&gt;
|form={{Grey|Table.}}'''Objects'''({{Optional|&amp;lt;Индекс или наименование определенного объекта (INT,STRING)&amp;gt;}}):''&amp;lt;Визуальный объект таблицы или все визуальные объекты (TABLE.OBJECT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает объект доступа к визуальным объектам таблицы. При указании на определенный визуальный объект, текущим объектом можно пользоваться для изменения его свойств, иначе текущий объект будет указывать на всю совокупность объектов таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.Count|Count]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''Count''':''&amp;lt;Общее количество объектов таблицы (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает общее количество объектов в таблице.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.Type|Type]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''Type''':''&amp;lt;Тип текущего объекта (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает цифровой тип текущего объекта таблицы. Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.Name|Name]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''Name''':''&amp;lt;Наименование текущего объекта (STRING)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет наименование текущего объекта таблицы. Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.Text|Text]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''Text''':''&amp;lt;Текст текущего объекта (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет текст, ассоциированный с текущим объектом таблицы. Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.ValueTemplate|ValueTemplate]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''ValueTemplate''':''&amp;lt;Формула шаблона объекта (STRING)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет текст формулы шаблона, ассоциированной с текущим объектом таблицы. Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте. Формула шаблона использует тоже самое место хранения, что и значение объекта. Для объекта может быть задана либо формула, либо значение. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.Value|Value]], '''Formula'''&lt;br /&gt;
|form={{Grey|Table.Object.}}'''Value''':''&amp;lt;Значение объекта&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет произвольное значение, ассоциированной с текущим объектом таблицы. Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.WrappingMode|WrappingMode]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''WrappingMode''':''&amp;lt;Режим переноса текста (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет значение режима переноса текста текущего объекта таблицы. Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.IsTemplate|IsTemplate]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''IsTemplate''':''&amp;lt;Является ли текст формулой шаблона (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет признак того, является ли текст визуального объекта таблицы шаблоном (шаблон выполняется при копировании области в другую таблицу). Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.IsValueTemplate|IsValueTemplate]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''IsValueTemplate''':''&amp;lt;Является ли значение формулой шаблона (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет признак того, является ли значение визуального объекта таблицы шаблоном (шаблон выполняется при копировании области в другую таблицу). Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.HAlign|HAlign]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''HAlign''':''&amp;lt;Выравнивание по горизонтали (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет режим выравнивания текста визуального объекта таблицы по горизонтали. Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.VAlign|VAlign]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''VAlign''':''&amp;lt;Выравнивание по вертикали (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет режим выравнивания текста визуального объекта таблицы по вертикали. Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.ClipMode|ClipMode]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''ClipMode''':''&amp;lt;Контроль границы для текста объекта (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет режим контроля выхода за границу текста визуального объекта таблицы. Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.RedNegative|RedNegative]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''RedNegative''':''&amp;lt;Отрицательные красным (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет режим выделения красным текста визуального объекта таблицы, когда он содержит отрицательное число. Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.Protected|Protected]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''Protected''':''&amp;lt;Защита от изменения в режиме просмотра (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет режим защиты визуального объекта от изменения в режиме просмотра (игнорируется в режиме редактирования и запрета изменений). По умолчанию признак защиты установлен. Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.Orientation|Orientation]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''Orientation''':''&amp;lt;Угол направления текста объекта (REAL)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет угол направления прорисовки текста визуального объекта таблицы. Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.IsAnchoredPosition|IsAnchoredPosition]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''IsAnchoredPosition''':''&amp;lt;Изменяется ли положение объекта при изменении размеров ячеек (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет признак того, изменяется ли положение объекта при изменении размеров ячеек.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.IsAnchoredSize|IsAnchoredSize]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''IsAnchoredSize''':''&amp;lt;Изменяются ли ширина и высота объекта при изменении размеров ячеек (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет признак того, изменяются ли ширина и высота объекта при изменении размеров ячеек.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.AbsoluteCoordinates|AbsoluteCoordinates]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''AbsoluteCoordinates''':''&amp;lt;Абсолютные координаты объекта (STRING)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет координаты объекта, заданные в абсолютной величине (в точках) от начала таблицы. Возвращаемое значение представляет собой следующий строку: &amp;lt;code&amp;gt;&amp;lt;Координата левой границы&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;
{{function entry&lt;br /&gt;
|name=[[Table.Object.RelativeCoordinates|RelativeCoordinates]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''RelativeCoordinates''':''&amp;lt;Относительные координаты объекта (STRING)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет координаты объекта, заданные в относительных величинах (смещениях ячеек). Возвращаемое значение представляет собой следующий строку: &amp;lt;code&amp;gt;&amp;lt;Столбец левой верхней точки объекта&amp;gt;:&amp;lt;Смещение в столбце&amp;gt;,&amp;lt;Строка левой верхней точки объекта&amp;gt;:&amp;lt;Смещение в строке&amp;gt;,&amp;lt;Столбец правой нижней точки объекта&amp;gt;:&amp;lt;Смещение в столбце&amp;gt;,&amp;lt;Строка правой нижней точки объекта&amp;gt;:&amp;lt;Смещение в строке&amp;gt;&amp;lt;/code&amp;gt;. Смещения задаются как цифровой индекс от 0 до 65535. 0 означает левый край столбца или верхний край строки, 65535 означает самая правая крайняя точка столбца или самая крайняя нижняя точка строки. Все, что между этими числами пропорционально лежит внутри крайних точек. При установке атрибута, правые и нижние координаты можно пропустить, в этом случае, ширина и высота объекта изменяться не будет.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.Width|Width]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''Width''':''&amp;lt;Ширина объекта в пикселях (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет ширину объекта в пикселях. Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.Height|Height]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''Height''':''&amp;lt;Высота объекта в пикселях (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет высоту объекта в пикселях. Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.ScaleOption|ScaleOption]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''ScaleOption''':''&amp;lt;Способ масштабирования объекта (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет способ масштабирования объекта. Доступны следующие значения: 0 -- оригинальный размер, 1 -- уменьшать размер, если это необходимо, 2 -- уменьшать или увеличивать размер если необходимо. Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.Proportional|Proportional]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''Proportional''':''&amp;lt;Пропорциональность при масштабировании объекта (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет режим соблюдения пропорции при масштабировании содержимого объекта (картинки или OLE-объекта). Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.NotForPrinting|NotForPrinting]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''NotForPrinting''':''&amp;lt;Запрет вывода объекта на печать (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет режим запрета вывода объекта на печать. Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.Picture|Picture]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''Picture''':''&amp;lt;Картинка объекта (PICTURE)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает объект картинки в случае, если текущий объект является картинкой. Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.OLE|OLE]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''OLE''':''&amp;lt;OLE-объект (OLE)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает ассоциированный OLE-объект в случае, если текущий объект является OLE-объектом. Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.ColorProfile|ColorProfile]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''ColorProfile''':''&amp;lt;Шаблон стиля объекта (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет номер шаблона стиля визуального объекта таблицы. По умолчанию это значение равно 0 (цвета и стиль форматирования определяется соответствующими атрибутами объекта, а не номером шаблона). Номера шаблонов можно найти в [[Номера шаблонов цветов ячеек таблицы|этой статье]]. Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.BackgroundColor|BackgroundColor]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''BackgroundColor''':''&amp;lt;Номер цвета фона объекта (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет номер цвета фона визуального объекта таблицы. Система получает цвет по номеру из палитры, для прямого указания цвета используйте атрибут [[Table.Object.BackgroundColorRGB|BackgroundColorRGB]]. Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.BackgroundColorRGB|BackgroundColorRGB]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''BackgroundColorRGB''':''&amp;lt;Цвет фона объекта (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет цвет фона визуального объекта таблицы по его RGB значению. Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.FontColor|FontColor]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''FontColor''':''&amp;lt;Номер цвета текста объекта (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет номер цвета текста визуального объекта таблицы. Система получает цвет по номеру из палитры, для прямого указания цвета используйте атрибут [[Table.Object.FontColorRGB|FontColorRGB]]. Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.FontColorRGB|FontColorRGB]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''FontColorRGB''':''&amp;lt;Цвет текста объекта (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет цвет текста визуального объекта таблицы по его RGB значению. Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.FrameColor|FrameColor]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''FrameColor''':''&amp;lt;Номер цвета обрамления объекта (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет номер цвета обрамления визуального объекта таблицы. Система получает цвет по номеру из палитры, для прямого указания цвета используйте атрибут [[Table.Object.FrameColorRGB|FrameColorRGB]]. Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.FrameColorRGB|FrameColorRGB]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''FrameColorRGB''':''&amp;lt;Цвет обрамления объекта (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет цвет обрамления визуального объекта таблицы по его RGB значению. Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.FontStyle|FontStyle]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''FontStyle''':''&amp;lt;Стиль текста объекта (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет стиль текста визуального объекта таблицы. Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.FontSize|FontSize]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''FontSize''':''&amp;lt;Размер шрифта текста объекта (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет размер шрифта текста визуального объекта таблицы. Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.Font|Font]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''Font''':''&amp;lt;Наименование шрифта текста объекта (STRING)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет наименование шрифта текста визуального объекта таблицы. Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.Frame|Frame]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''Frame''':''&amp;lt;Рисунок и наличие 4-х границ обрамления объекта (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает или изменяет рисунок и наличие четырех границ обрамления визуального объекта таблицы. Значение представляет собой битовую маску, где на каждую из границ используется по 4 бита. По умолчанию, это значение равно 0 (объект не имеет обрамления). Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.LastLoadedImagePath|LastLoadedImagePath]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''LastLoadedImagePath''':''&amp;lt;Наименование файла последней загруженной картинки (STRING)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает наименование файла последней загруженной картинки для визуальных объектов таблицы с типом картинка. Признак сохраняется в объекте, к примеру, для универсальных обработчиков печати, и будет заполнен только если картинка была загружена в виде файла. Атрибут работает только, когда визуальный объект был выбран для работы в текущем объекте.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Table.Object.Delete|Delete]]&lt;br /&gt;
|form={{Grey|Table.Object.}}'''Delete'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция удаляет текущий объект из таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function footer}}&lt;br /&gt;
&lt;br /&gt;
{{Объекты}}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>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=5168</id>
		<title>Функции общего назначения</title>
		<link rel="alternate" type="text/html" href="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=5168"/>
		<updated>2025-12-27T17:09:06Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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;
{{function header}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[TypeStr]]&lt;br /&gt;
|form='''TypeStr'''(''&amp;lt;Аргумент&amp;gt;''):''&amp;lt;Тип аргумента (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает строку, соответствующую типу аргумента или типу объекта аргумента. Пример возвращаемых значений: &amp;lt;code&amp;gt;NUMBER&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;STRING&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;DATE&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;LIST&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;TAB&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;DB.REF.&amp;lt;Вид справочника&amp;gt;&amp;lt;/code&amp;gt;, и т.п.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[TypeNum]]&lt;br /&gt;
|form='''TypeNum'''(''&amp;lt;Аргумент&amp;gt;''):''&amp;lt;Тип аргумента (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает число, соответствующую типу аргумента или типу объекта аргумента. Числа является внутренними идентификаторами типов объектов. Пример возвращаемых значений: &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; (пустое значение), &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; (целое число), &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; (вещественное число), &amp;lt;code&amp;gt;50&amp;lt;/code&amp;gt; (список), &amp;lt;code&amp;gt;54&amp;lt;/code&amp;gt; (таблица), &amp;lt;code&amp;gt;61&amp;lt;/code&amp;gt; (объект базы данных), и т.п.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[NumeralTypeStr]]&lt;br /&gt;
|form='''NumeralTypeStr'''(''&amp;lt;Аргумент&amp;gt;''):''&amp;lt;Тип числового аргумента (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает строку &amp;quot;REAL&amp;quot;, в случае, если числовое представление аргумента является вещественным, иначе будет возвращена строка &amp;quot;INT&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[StringTypeStr]]&lt;br /&gt;
|form='''StringTypeStr'''(''&amp;lt;Аргумент&amp;gt;''):''&amp;lt;Тип строкового аргумента (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает строку &amp;quot;ANSI&amp;quot;, в случае, если строковое представление аргумента использует однобайтовую кодировку (ANSI), иначе будет возвращена строка &amp;quot;UNICODE&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[IsEmpty]]&lt;br /&gt;
|form='''IsEmpty'''(''&amp;lt;Аргумент&amp;gt;''):''&amp;lt;Является ли аргумент пустым объектом (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает 1, если аргумент является пустым объектом (пустое значение, 0, пустая строка, объект базы данных с невыбранным типом или видом и пр.), иначе будет возвращен 0.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Coalesce]]&lt;br /&gt;
|form='''Coalesce'''({{Optional|&amp;lt;Аргумент 1&amp;gt;,&amp;lt;Аргумент 2&amp;gt;...}}):''&amp;lt;Первый не пустой или не БД объект&amp;gt;''&lt;br /&gt;
|type=2&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает первый из аргументов, который не является пустым (не выбранным) объектом базы данных, пустым значением, либо не является объектом базы данных. Функция является магической (вычисление следующего аргумента не выполняется, если текущий удовлетворяет условию функции).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[CoalesceEx]]&lt;br /&gt;
|form='''CoalesceEx'''({{Optional|&amp;lt;Режим&amp;gt;{{Default|{{Eq}}1}}}}{{Default|}}{{Optional|,&amp;lt;Аргумент 1&amp;gt;,&amp;lt;Аргумент 2&amp;gt;...}}):''&amp;lt;Первый не пустой объект по правилам, заданым режимом&amp;gt;''&lt;br /&gt;
|type=2&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает первый из аргументов, который не является пустым объектом по правилам, заданным режимом. В режиме ''0'' функция работает аналогично функции [[Coalesce]]. Функция является магической (вычисление следующего аргумента не выполняется, если текущий удовлетворяет условию функции).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Sleep]]&lt;br /&gt;
|form='''Sleep'''(''&amp;lt;Период в миллисекундах (INT)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция выполняет цикл ожидания в течение указанного в миллисекундах времени.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GetNothing]], '''Nothing'''&lt;br /&gt;
|form='''GetNothing'''({{Optional|&amp;lt;Тип базы данных (STRING)&amp;gt;{{Default|{{Eq}}&amp;quot;&amp;quot;}}}}):''&amp;lt;Пустое значение или пустое значение базы данных&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает пустое значение, если аргумент не указан, либо не выбранный объект базы данных, если аргумент указан.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[DisableGUIInterrupts]]&lt;br /&gt;
|form='''DisableGUIInterrupts'''(''&amp;lt;Защита (INT)&amp;gt;''{{Optional|,&amp;lt;Текст защиты (STRING)&amp;gt;{{Default|{{Eq}}&amp;quot;&amp;quot;}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция позволяет запретить прерывание выполнения потока или закрытие программы, если первый аргумент равен 1, до того, как она будет вызвана повторно с первым аргументом, равным 0. Дополнительный текст будет показан пользователю, в момент попытки прерывания или закрытия программы. Функция работает только для визуального режима, и должна использоваться только с блоком &amp;lt;code&amp;gt;Try ... Finally&amp;lt;/code&amp;gt;, так как в ином случае существует опасность получить состояние клиента, когда он не отвечает на попытки закрытия корректным образом.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[FlushMessages]]&lt;br /&gt;
|form='''FlushMessages'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция выполняет все ожидающие в очереди визуальные сообщения. Функцию можно использовать, к примеру, если необходимо убедиться, что нужные изменения на экране выполнены (закрыто окно, полностью обновлена таблица на форме и пр.).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[If|_If]], '''?'''&lt;br /&gt;
|form='''_If'''(''&amp;lt;Условие&amp;gt;'',''&amp;lt;Результат, если условие выполнено&amp;gt;''{{Optional|,&amp;lt;Результат, если условие не выполнено&amp;gt;{{Default|{{Eq}}&amp;lt;NOTHING&amp;gt;}}}}):''&amp;lt;Результат&amp;gt;''&lt;br /&gt;
|type=2&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Магическая функция позволяет превратить конструкцию '''If''' в вычисляемое выражение.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[If2|__If]], '''??'''&lt;br /&gt;
|form='''__If'''(''&amp;lt;Условие&amp;gt;'',''&amp;lt;Результат, если условие выполнено&amp;gt;''{{Optional|,&amp;lt;Условие 2&amp;gt;,&amp;lt;Результат, если условие 2 выполнено&amp;gt;,...&amp;lt;Результат, если не выполнено ни одно из условий&amp;gt;{{Default|{{Eq}}&amp;lt;NOTHING&amp;gt;}}}}):''&amp;lt;Результат&amp;gt;''&lt;br /&gt;
|type=2&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Магическая функция позволяет превратить несколько последовательных конструкций '''If''' в вычисляемое выражение.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[And|_And]]&lt;br /&gt;
|form='''_And'''(''&amp;lt;Условие 1&amp;gt;''{{Optional|,&amp;lt;Условие 2&amp;gt;,&amp;lt;Условие 3&amp;gt; ...}}):''&amp;lt;Результат 0 или 1 (INT)&amp;gt;''&lt;br /&gt;
|type=2&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Магическая функция позволяет вычислять только требуемые условия, для получения результата -- логического &amp;quot;и&amp;quot;.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Or|_Or]]&lt;br /&gt;
|form='''_Or'''(''&amp;lt;Условие 1&amp;gt;''{{Optional|,&amp;lt;Условие 2&amp;gt;,&amp;lt;Условие 3&amp;gt; ...}}):''&amp;lt;Результат 0 или 1 (INT)&amp;gt;''&lt;br /&gt;
|type=2&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Магическая функция позволяет вычислять только требуемые условия, для получения результата -- логического &amp;quot;или&amp;quot;.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[InSet]]&lt;br /&gt;
|form='''InSet'''(''&amp;lt;Значение поиска&amp;gt;''{{Optional|,&amp;lt;Значение множества 1&amp;gt;,&amp;lt;Значение множества 2&amp;gt;...}}):''&amp;lt;Искомое значение присутствует во множестве (INT)&amp;gt;''&lt;br /&gt;
|type=2&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Магическая функция проверяет, присутствует ли значение поиска во множетсве значений для проверки. Может упростить конструкцию ''If''.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[InRange]]&lt;br /&gt;
|form='''InRange'''(''&amp;lt;Значение поиска&amp;gt;''{{Optional|,&amp;lt;Начало диапазона 1&amp;gt;,&amp;lt;Конец диапазона 1&amp;gt;,&amp;lt;Начало диапазона 2&amp;gt;,&amp;lt;Конец диапазона 2&amp;gt;...}}):''&amp;lt;Искомое значение присутствует в диапазоне (диапазонах) (INT)&amp;gt;''&lt;br /&gt;
|type=2&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Магическая функция проверяет, присутствует ли значение поиска в диапазонах значений для проверки. Искомое значение может быть числом, датой или строкой. Функция может упростить конструкцию ''If''. Для проверки используются нестрогие неравенства (&amp;lt;code&amp;gt; &amp;gt;= или =&amp;lt; &amp;lt;/code&amp;gt;). Функция возвращает ''1'', если искомое значение присутствует по крайней мере в одном диапазоне.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[InRangeEx]]&lt;br /&gt;
|form='''InRangeEx'''({{Optional|&amp;lt;Режим (INT)&amp;gt;{{Default|{{Eq}}0}}}},''&amp;lt;Значение поиска&amp;gt;''{{Optional|,&amp;lt;Начало диапазона 1&amp;gt;,&amp;lt;Конец диапазона 1&amp;gt;,&amp;lt;Начало диапазона 2&amp;gt;,&amp;lt;Конец диапазона 2&amp;gt;...}}):''&amp;lt;Искомое значение присутствует в диапазоне (диапазонах) (INT)&amp;gt;''&lt;br /&gt;
|type=2&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Магическая функция проверяет, присутствует ли значение поиска в диапазонах значений для проверки. Искомое значение может быть числом, датой или строкой. Функция может упростить конструкцию ''If''. В зависимости от режима (первый аргумент), для проверки используются строгие или нестрогие неравенства. В зависимости от режима, функция возвращает ''1'', если искомое значение присутствует по крайней мере в одном диапазоне или во всех диапазонах.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[CreateOLE]]&lt;br /&gt;
|form='''CreateOLE'''(''&amp;lt;Идентификатор объекта OLE (STRING)&amp;gt;''):''&amp;lt;Новый объект OLE (OLE)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция создает новый объект OLE (COM) по строке идентификатора&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[CreateThreadedOLE]]&lt;br /&gt;
|form='''CreateThreadedOLE'''(''&amp;lt;Идентификатор объекта OLE (STRING)&amp;gt;''):''&amp;lt;Новый объект OLE (OLE)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция создает новый объект OLE (COM) по строке идентификатора. Объект может быть доступен в любом потоке, не только в том, который создал объект. Вызовы к таким объектам осуществляются несколько медленнее.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[OLE.SetTimeout|SetTimeout]]&lt;br /&gt;
|form={{Grey|OLE.}}'''SetTimeout'''({{Optional|&amp;lt;Время ожидания исполнения команд в мс. (INT)&amp;gt;}}):''&amp;lt;Предыдущее время ожидания исполнения команд в мс. (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция задает или получает для объекта максимальное время ожидания исполнения команд. По умолчанию при создании объекта, это время равно 0 (не ограничено). При истечении времени ожидания система произведет отсоединение от текущего OLE-объекта и выполнявшаяся функция вызовет исключение.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[IsMultithreaded]]&lt;br /&gt;
|form='''IsMultithreaded'''(''&amp;lt;Аргумент&amp;gt;''):''&amp;lt;Является ли объект многопоточным (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция проверяет, является ли объект, содержащийся в переменной-аргументе многопоточным или однопоточным (см. статью [[Объекты]])&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[SetMultiThreaded]]&lt;br /&gt;
|form='''SetMultiThreaded'''(''&amp;lt;Аргумент&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция позволяет безусловно установить флаг многопоточности на объекте, содержащемся в переменной-аргументе. Функция может использоваться при работе с объектами, содержащими ссылки на самого себя (см. статью [[Объекты]])&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[LockObject]]&lt;br /&gt;
|form='''LockObject'''(''&amp;lt;Аргумент&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция позволяет заблокировать доступ к сложному объекту из других программных потоков. Обычно система выполняет это действие автоматически, однако, если состояние непротиворечивости объекта требует нескольких вызовов функций изменения, эта функция может стать гарантом его непротиворечивости в других потоках. После окончания выполнения кода изменения объекта, необходимо вызвать функцию ''UnlockObject''. Функция не должна применяться к визуальным объектам, кроме того внутри кода изменения существуют ограничения по вызову визуальных функций.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[UnlockObject]]&lt;br /&gt;
|form='''UnlockObject'''(''&amp;lt;Аргумент&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция позволяет разблокировать доступ к сложному объекту, заблокированному ранее с помощью функции ''LockObject''. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[LockCount]]&lt;br /&gt;
|form='''LockCount'''(''&amp;lt;Аргумент&amp;gt;''):''&amp;lt;Количество вложенных блокировок (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция позволяет получить количество вложенных блокировок объекта (осуществленных с помощью функции [[LockObject]] или системой) даже если объект не удерживается текущим потоком (таким образом ее можно также использовать, как индикатор того, что объект заблокирован другим потоком, если известно, что текущий поток его не блокировал, однако, нужно понимать, что объекты, могут автоматически блокироваться системой на время вызова функций, вероятность обнаружить такую блокировку может быть высока, если объект, используется в потоке, который выполняет какую-то работу в данный момент).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Message]]&lt;br /&gt;
|form='''Message'''(''&amp;lt;Аргумент&amp;gt;''{{Optional|,&amp;lt;Тип текста (STRING)&amp;gt;{{Default|{{Eq}}&amp;quot;&amp;quot;}},&amp;lt;Интерактивный объект 1 для подстановки в текст&amp;gt;,&amp;lt;Интерактивный объект 2 для подстановки в текст&amp;gt;...}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция выводит строковое представление аргумента в [[Визуальный лог клиента|лог]] клиента, при этом текст может быть выделен, если необходимо, как ошибка или информация.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[LoadModule]]&lt;br /&gt;
|form='''LoadModule'''(''&amp;lt;Способ вызова (INT)&amp;gt;'',''&amp;lt;Путь или имя базы данных (STRING)&amp;gt;''{{OptionalByRef|,&amp;lt;Параметр&amp;gt;,&amp;lt;Опция&amp;gt;}}{{Optional|,&amp;lt;Имя модуля (STRING)&amp;gt;{{Default|{{Eq}}&amp;quot;Module&amp;quot;}},&amp;lt;Имя формы (STRING)&amp;gt;{{Default|{{Eq}}&amp;quot;SelectForm&amp;quot;}}}}{{OptionalByRef|,&amp;lt;Серийный номер потока, в котором происходит исполнение (INT)&amp;gt;}}):''&amp;lt;Результат модального выполнения&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция позволяет загружать и инициировать выполнение произвольного модуля с произвольной формой. Модуль может быть загружен как модально к текущему потоку (если текущий поток не является корневым), так и создавать новый поток, передавая ему два аргумента. В случае модального исполнения, функция не возвратит результат до тех пор, пока модуль не закончит работы, при этом, модуль может возвратить результат и изменить переданные параметры, если они представляли собой переменные.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[LoadToolForm]]&lt;br /&gt;
|form='''LoadToolForm'''(''&amp;lt;Способ вызова (INT)&amp;gt;'',''&amp;lt;Режим загрузки формы (INT)&amp;gt;'',''&amp;lt;Путь или имя базы данных (STRING)&amp;gt;''{{OptionalByRef|,&amp;lt;Параметр&amp;gt;,&amp;lt;Опция&amp;gt;}}{{Optional|,&amp;lt;Имя формы (STRING)&amp;gt;{{Default|{{Eq}}&amp;quot;Form&amp;quot;}}}}{{OptionalByRef|,&amp;lt;Объект открытой формы (FORM)&amp;gt;}}):''&amp;lt;Результат, возвращенный при инициализации формы&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция позволяет загружать произвольную форму в режиме инструментария. Формы в таком режиме не имеют модулей и работают в контексте текущего модуля, либо в контексте корневого модуля, в зависимости от параметров загрузки. Функция может возвратить серийный номер открытой формы, чтобы программа могла осуществлять переговоры с ней с помощью отсылки сообщений. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ImportFunctionsFromModule]]&lt;br /&gt;
|form='''ImportFunctionsFromModule'''(''&amp;lt;Путь или имя базы данных (STRING)&amp;gt;''{{Optional|,&amp;lt;Имя модуля (STRING)&amp;gt;{{Default|{{Eq}}&amp;quot;Module&amp;quot;}},&amp;lt;Пространство имен (STRING)&amp;gt;{{Default|{{Eq}}&amp;quot;&amp;quot;}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция позволяет импортировать в текущий выполняющийся модуль функции другого модуля, после импорта функции можно исполнять, как будто они были созданы в текущем модуле. Если при импорте, имя создаваемой функции уже существует, будет вызвано исключение. Часть кода, не находящаяся внутри функций, будет игнорирована. Чтобы увеличить устойчивость загрузки из разных источников, можно использовать дополнительный идентификатор -- пространство имен. Идентификатор не должен содержать знаков, недоступных в наименованиях функций и знаков &amp;quot;.&amp;quot;. После импорта новые функции можно будет вызвать с помощью конструкции &amp;lt;code&amp;gt;&amp;lt;Идентификатор&amp;gt;.&amp;lt;Имя функции&amp;gt;([...])&amp;lt;/code&amp;gt;. Функцию можно использовать для увеличения функциональности, доступной во внешних модулях, к примеру, если модуль производит выгрузку, которая зависит от поключенного устройства, можно импортировать функции модуля, который был создан для конкретного устройства.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ImportFunctionsFromText]]&lt;br /&gt;
|form='''ImportFunctionsFromText'''(''&amp;lt;Строка с кодом для компиляции (STRING)&amp;gt;''{{Optional|,&amp;lt;Пространство имен (STRING)&amp;gt;{{Default|{{Eq}}&amp;quot;&amp;quot;}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция позволяет импортировать в текущий выполняющийся модуль функции из строки текста. Перед началом импорта, текст будет скомпилирован в контексте текущего модуля. Если при импорте, имя создаваемой функции уже существует, будет вызвано исключение. Часть кода, не находящаяся внутри функций, будет игнорирована. Чтобы увеличить устойчивость загрузки из разных источников, можно использовать дополнительный идентификатор -- пространство имен. Идентификатор не должен содержать знаков, недоступных в наименованиях функций и знаков &amp;quot;.&amp;quot;. После импорта новые функции можно будет вызвать с помощью конструкции &amp;lt;code&amp;gt;&amp;lt;Идентификатор&amp;gt;.&amp;lt;Имя функции&amp;gt;([...])&amp;lt;/code&amp;gt;. Функцию можно использовать для увеличения функциональности, доступной во внешних модулях, к примеру, если модуль производит выгрузку, которая зависит от поключенного устройства, можно импортировать функции текста кода, который был создан для конкретного устройства.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[RemoveImportedFunctions]]&lt;br /&gt;
|form='''RemoveImportedFunctions'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция удаляет из контекста текущего модуля все функции, импортированные из других модулей или текстовых строк (см. [[ImportFunctionsFromModule]] и [[ImportFunctionsFromText]]).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[OpenObject]]&lt;br /&gt;
|form='''OpenObject'''(''&amp;lt;Объект базы данных (DB)&amp;gt;'',''&amp;lt;Режим просмотра (INT)&amp;gt;'',''&amp;lt;Способ вызова (INT)&amp;gt;''{{OptionalByRef|,&amp;lt;Параметр&amp;gt;,&amp;lt;Опция&amp;gt;}}{{Optional|,&amp;lt;Имя модуля (STRING)&amp;gt;,&amp;lt;Имя формы (STRING)&amp;gt;}}):''&amp;lt;Результат модального выполнения&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция позволяет загружать и инициировать выполнение модуля и формы, связанных с заданным объектом, при этом сам объект загружается в форму для редактирования или просмотра. Модуль может быть загружен как модально к текущему потоку (если текущий поток не является корневым), так и создавать новый поток, передавая ему два аргумента. В случае модального исполнения, функция не возвратит результат до тех пор, пока модуль не закончит работы, при этом, модуль может возвратить результат и изменить переданные параметры, если они представляли собой переменные. Функция может возвратить особые текстовые результаты, если требуемый объект был заблокирован другим пользователем. Для полной информации см. описание функции.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[SelectObject]], '''AskObject'''&lt;br /&gt;
|form='''SelectObject'''(''&amp;lt;Путь или имя базы данных (STRING)&amp;gt;''{{OptionalByRef|,&amp;lt;Параметр&amp;gt;,&amp;lt;Опция&amp;gt;}}{{Optional|,&amp;lt;Имя модуля (STRING)&amp;gt;{{Default|{{Eq}}&amp;quot;Module&amp;quot;}},&amp;lt;Имя формы (STRING)&amp;gt;{{Default|{{Eq}}&amp;quot;SelectForm&amp;quot;}},&amp;lt;Объект для позиционирования&amp;gt;,&amp;lt;Наименование объекта формы, осуществляющего выбор (STRING)&amp;gt;,&amp;lt;Заголовок формы (STRING)&amp;gt;,&amp;lt;Дополнительные установки (INT)&amp;gt;}}):''&amp;lt;Выбранный объект или пустое значение&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция позволяет загружать и инициировать выполнение модуля и формы в модальном режиме для выбора объекта базы данных из списка объектов, при этом возможно начальное позиционирование на указанный объект, определение требуемого объекта формы списка объектов (если их несколько), изменение заголовка формы, использование других возможностей. Функция не возвратит результат до тех пор, пока модуль не закончит работы, при этом, модуль может изменить переданные параметры, если они представляли собой переменные. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[MassSelectObjects]]&lt;br /&gt;
|form='''MassSelectObjects'''(''&amp;lt;Имя функции для принятия результата выбора (STRING)&amp;gt;'',''&amp;lt;Путь или имя базы данных (STRING)&amp;gt;''{{OptionalByRef|,&amp;lt;Параметр&amp;gt;,&amp;lt;Опция&amp;gt;}}{{Optional|,&amp;lt;Имя модуля (STRING)&amp;gt;{{Default|{{Eq}}&amp;quot;Module&amp;quot;}},&amp;lt;Имя формы (STRING)&amp;gt;{{Default|{{Eq}}&amp;quot;SelectForm&amp;quot;}},&amp;lt;Объект для позиционирования&amp;gt;,&amp;lt;Наименование объекта формы, осуществляющего выбор (STRING)&amp;gt;,&amp;lt;Заголовок формы (STRING)&amp;gt;,&amp;lt;Параметр функции принятия выбора&amp;gt;,&amp;lt;Дополнительные установки (INT)&amp;gt;{{Default|{{Eq}}0}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция позволяет загружать и инициировать выполнение модуля и формы в модальном режиме для выбора множества объектов базы данных из списка объектов, при этом возможно начальное позиционирование на указанный объект, определение требуемого объекта формы списка объектов (если их несколько), изменение заголовка формы, использование других возможностей. В момент выбора очередного объекта пользователем, система вызывает особую функцию выбора (возможно с доп. параметром), имя которой задается в первом аргументе. Функция не возвратится до тех пор, пользователь не закроет исполняемый модуль, при этом, модуль может изменить переданные параметры, если они представляли собой переменные. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[SendMessageToForm]]&lt;br /&gt;
|form='''SendMessageToForm'''(''&amp;lt;Серийный номер формы (INT)&amp;gt;'',''&amp;lt;Код сообщения (INT)&amp;gt;''{{OptionalByRef|,&amp;lt;Параметр&amp;gt;,&amp;lt;Опция&amp;gt;}}{{Optional|,&amp;lt;Гарантировать доставку (INT)&amp;gt;{{Default|{{Eq}}1}},&amp;lt;Имя макроса или страницы объекта формы (STRING)&amp;gt;{{Default|{{Eq}}&amp;quot;&amp;quot;}}}}):''&amp;lt;Сообщение не было доставлено 0 или результат выполнения OnMessage&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=1&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция осуществляет доставку пользовательского сообщения с параметрами указанной по серийному номеру форме. Для формы будет вызвано визуальное событие [[Студия/OnMessage|OnMessage]]. Доставка также может быть осуществлена макросу, располагающемуся на форме или указанной по имени странице страничного элемента. Функция возвращается после обработки сообщения формой или ошибке при доставке.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[PostMessageToForm]]&lt;br /&gt;
|form='''PostMessageToForm'''(''&amp;lt;Серийный номер формы (INT)&amp;gt;'',''&amp;lt;Код сообщения (INT)&amp;gt;''{{Optional|,&amp;lt;Параметр&amp;gt;,&amp;lt;Опция&amp;gt;,&amp;lt;Гарантировать доставку (INT)&amp;gt;{{Default|{{Eq}}1}},&amp;lt;Имя макроса или страницы объекта формы (STRING)&amp;gt;{{Default|{{Eq}}&amp;quot;&amp;quot;}}}}):''&amp;lt;Сообщение было отправлено 0 или 1 (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=1&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция осуществляет доставку пользовательского сообщения с параметрами указанной по серийному номеру форме. Для формы будет вызвано визуальное событие [[Студия/OnMessage|OnMessage]]. Доставка также может быть осуществлена макросу, располагающемуся на форме или указанной по имени странице страничного элемента. Функция возвращается сразу после успешной отправки сообщения или ошибке при отправке. Измененные формой параметры не будут переданы назад.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[BroadcastGlobalMessage]]&lt;br /&gt;
|form='''BroadcastGlobalMessage'''(''&amp;lt;Код сообщения (INT)&amp;gt;'',''&amp;lt;Содержимое сообщения (STRING)&amp;gt;''{{Optional|,&amp;lt;Для всех пользователей (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Сообщение успешно отправлено (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция рассылает пакеты, которые вызывают исполнения событий ''OnMessage'' для всех открытых форм (в момент когда они активны или когда они станут активными), в текущей системе или глобально всем клиентам сервера. В последнем случае, нужно быть осторожным, чтобы не перегружать сервер внезапным большим количеством запросов, даже с учетом того, что серверная часть использует особую систему замедления отправки запросов клиентам.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[BroadcastMessage]]&lt;br /&gt;
|form='''BroadcastMessage'''(''&amp;lt;Код сообщения (INT)&amp;gt;''{{Optional|,&amp;lt;Параметр&amp;gt;,&amp;lt;Опция&amp;gt;,&amp;lt;Тип форм-получателей (INT)&amp;gt;{{Default|{{Eq}}1}},&amp;lt;Имя макроса или страницы объекта формы (STRING)&amp;gt;{{Default|{{Eq}}&amp;quot;&amp;quot;}}}}):''&amp;lt;Сообщение было отправлено 0 или 1 (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция осуществляет доставку пользовательского сообщения с параметрами всем открытым в данный момент в системе формам с указанным типом. Для форм будет вызвано визуальное событие [[Студия/OnMessage|OnMessage]]. Доставка также может быть осуществлена макросу, располагающемуся на формах или указанной по имени странице страничного элемента. Функция возвращается сразу после успешной отправки сообщений или ошибке при отправке. Измененные формой параметры не будут переданы назад.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ModuleTag]]&lt;br /&gt;
|form='''ModuleTag'''({{Optional|&amp;lt;Новое значение&amp;gt;}}):''&amp;lt;Предыдущее значение&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает или изменяет свободную переменную, привязанную к текущему (исполняемому) модулю. Значение может использоваться по усмотрению разработчика.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[IsKeyComboActive]]&lt;br /&gt;
|form='''IsKeyComboActive'''(''&amp;lt;Комбинация клавиш (STRING)&amp;gt;''):''&amp;lt;Комбинация активирована в данный момент, 0 или 1 (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция проверяет, активирована ли в данный момент пользователем заданная комбинация клавиш (к примеру, &amp;lt;code&amp;gt;&amp;quot;Ctrl+Alt+D&amp;quot;&amp;lt;/code&amp;gt;).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ObjectToString]]&lt;br /&gt;
|form='''ObjectToString'''(''&amp;lt;Значение&amp;gt;''):''&amp;lt;Значение, закодированное в строку (ANSI STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция кодирует внутрисистемным образом заданное значение в строку, значение может быть почти любым. К примеру, может представлять собой список, таблицу, объект базы данных, OLE-объект и пр.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ObjectFromString]]&lt;br /&gt;
|form='''ObjectFromString'''(''&amp;lt;Закодированное значение (STRING)&amp;gt;''):''&amp;lt;Значение&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция перекодирует строку в значение, закодированное внутрисистемным образом.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ObjectToFile]]&lt;br /&gt;
|form='''ObjectToFile'''(''&amp;lt;Значение&amp;gt;'',''&amp;lt;Имя файла (STRING)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция кодирует внутрисистемным образом заданное значение в строку, значение может быть почти любым. К примеру, может представлять собой список, таблицу, объект базы данных, OLE-объект и пр. Значение, затем, будет сохранено в заданный файл. При наличии ошибки при сохранении в файл, будет вызвано исключение.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ObjectFromFile]]&lt;br /&gt;
|form='''ObjectFromFile'''(''&amp;lt;Имя файла (STRING)&amp;gt;''):''&amp;lt;Значение&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает строку из указанного файла и перекодирует строку в значение, закодированное внутрисистемным образом.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Swap]]&lt;br /&gt;
|form='''Swap'''({{ByRef|&amp;lt;Переменная 1&amp;gt;,&amp;lt;Переменная 2&amp;gt;}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция меняет местами значения переменных.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[DoesFunctionExist]]&lt;br /&gt;
|form='''DoesFunctionExist'''(''&amp;lt;Имя функции (STRING)&amp;gt;''{{Optional|,&amp;lt;Глубина поиска или компилированная функция (INT, COMPILEDFUNCTION)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Существует ли функция (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция проверяет, существует ли функция с указанным именем в текущем контексте исполнения, способ поиска задается вторым аргументом.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ArgumentsNumber]]&lt;br /&gt;
|form='''ArgumentsNumber'''(''&amp;lt;Имя функции (STRING)&amp;gt;''{{Optional|,&amp;lt;Глубина поиска или компилированная функция (INT, COMPILEDFUNCTION)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Количество аргументов (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает количество аргументов функции с указанным именем в текущем контексте исполнения, способ поиска задается вторым аргументом. Если искомая функция не существует, будет возвращено значение -1.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ExecuteFunction]]&lt;br /&gt;
|form='''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;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция инициирует исполнение функции с указанным именем в текущем контексте исполнения с заданными аргументами, способ поиска задается вторым аргументом. Если искомая функция не существует, пропущен обязательный аргумент или заданное количество аргументов слишком велико, будет создано исключение. Функция может использоваться как более быстрая альтернатива функции &amp;lt;code&amp;gt;Eval&amp;lt;/code&amp;gt; (если необходимо вызвать только одну функцию).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[AsyncExecuteFunction]]&lt;br /&gt;
|form='''AsyncExecuteFunction'''(''&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;Результат исполнения функции&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция инициирует исполнение функции с указанным именем в текущем контексте исполнения с заданными аргументами, способ поиска задается вторым аргументом. Если искомая функция не существует, пропущен обязательный аргумент, заданное количество аргументов слишком велико или исполнение в визуальном контексте невозможно, будет создано исключение. Функция будет исполнена в визуальном контексте [[Студия/Визуальные события|асинхронно]], в момент, когда он будет свободен (если это не произойдет в течение некотрого промежутка времени, функция не будет выполнена). Подобный способ исполнения можно использовать, к примеру, в обработчике события OnOpen, с тем, чтобы функция была запущена когда обработчик закончит исполнение и форма будет ожидать действия пользователя. См. также [[Form.InvokeEventAsync]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GlobalBegPeriodDate]]&lt;br /&gt;
|form='''GlobalBegPeriodDate'''({{Optional|&amp;lt;Дата начала периода изменения периодических значений (DATE)&amp;gt;}}):''&amp;lt;Предыдущая дата начала периода изменения периодических значений (DATE)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает или/и изменяет дату начала изменения периодических значений при визуальном сохранении элементов с наличием таких значений.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GlobalEndPeriodDate]]&lt;br /&gt;
|form='''GlobalEndPeriodDate'''({{Optional|&amp;lt;Дата окончания периода изменения периодических значений (DATE)&amp;gt;}}):''&amp;lt;Предыдущая дата окончания периода изменения периодических значений (DATE)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает или/и изменяет дату окончания изменения периодических значений при визуальном сохранении элементов с наличием таких значений. Данная дата совпадает с датой просмотра периодических значений в визуально открытом элементе базы данных или таблице с такими элементами.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[MinPeriodicalAccessDate]]&lt;br /&gt;
|form='''MinPeriodicalAccessDate'''({{Optional|&amp;lt;Новая минимальная дата просмотра периодических реквизитов (DATE)&amp;gt;}}):''&amp;lt;Текущая минимальная дата просмотра периодических реквизитов (DATE)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает и/или изменяет минимальную дату просмотра периодических значений реквизитов в стандартных формах периодических реквизитов. Значения с датой менее данной не будут отображаться при выводе формы просмотра или редактирования, невозможно будет также создать новые записи с датами, ранее указанной. Дата используется для всех потоков клиента, но не влияет на программное получение периодических данных.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[MinPeriodicalEditDate]]&lt;br /&gt;
|form='''MinPeriodicalEditDate'''({{Optional|&amp;lt;Новая минимальная дата редактирования периодических реквизитов (DATE)&amp;gt;}}):''&amp;lt;Текущая минимальная дата редактирования периодических реквизитов (DATE)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает и/или изменяет минимальную дату редактирования периодических значений реквизитов в стандартных формах периодических реквизитов. Значения с датой менее данной не будут доступны для редактирования, невозможно будет также создать новые записи с датами, ранее указанной. Дата используется для всех потоков клиента, но не влияет на программное получение периодических данных.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GlobalDefaultSystemFont]]&lt;br /&gt;
|form='''GlobalDefaultSystemFont'''({{Optional|&amp;lt;Новое значение шрифта системы по умолчанию (STRING)&amp;gt;}}):''&amp;lt;Предыдущее значение шрифта системы по умолчанию (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает или/и изменяет внутрисистемный шрифт по умолчанию. Будут обновлены значения глобальных коэффициентов масштабирования форм. В зависимости от новых установок, текст и формы будут выглядеть крупнее или мельче. Шрифт умолчания для систем на Windows XP и более ранних &amp;quot;MS Sans Serif, 8&amp;quot; (не поддерживает международные символы), умолчания для более новых систем &amp;quot;Tahoma, 8&amp;quot; (поддерживает международные символы).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GlobalFormScaleFactorX]]&lt;br /&gt;
|form='''GlobalFormScaleFactorX'''({{Optional|&amp;lt;Новое значение горизонтального коэффициента глобального масштабирования форм (REAL)&amp;gt;}}):''&amp;lt;Предыдущее значение горизонтального коэффициента глобального масштабирования форм (REAL)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает или/и изменяет значение горизонтального коэффициента глобального масштабирования форм. Значение этого коэффициента по умолчанию равно 1. Если значение больше 1, элементы всех форм будут растянуты по горизонтали, если меньше 1, элементы будут сжаты.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GlobalFormScaleFactorY]]&lt;br /&gt;
|form='''GlobalFormScaleFactorY'''({{Optional|&amp;lt;Новое значение вертикального коэффициента глобального масштабирования форм (REAL)&amp;gt;}}):''&amp;lt;Предыдущее значение вертикального коэффициента глобального масштабирования форм (REAL)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает или/и изменяет значение вертикального коэффициента глобального масштабирования форм. Значение этого коэффициента по умолчанию равно 1. Если значение больше 1, элементы всех форм будут растянуты по вертикали, если меньше 1, элементы будут сжаты.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[DefaultTablesRestrictMode]]&lt;br /&gt;
|form='''DefaultTablesRestrictMode'''({{Optional|&amp;lt;Новое значение режима доступа по умолчанию для новых таблиц (INT)&amp;gt;}}):''&amp;lt;Предыдущее значение режима доступа по умолчанию для новых таблиц (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает или/и изменяет значение режима доступа по умолчанию для новых таблиц. При создании таблицы режим доступа устанавливается в соответствии с режимом по умолчанию. Режим можно изменить с помощью свойства [[Table.Restrict]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[DefaultHighlightMode]]&lt;br /&gt;
|form='''DefaultHighlightMode'''(''&amp;lt;Режим подсветки таблиц по умолчанию (INT)&amp;gt;''{{Optional|,&amp;lt;Цвет нечетных строк (INT)&amp;gt;,&amp;lt;Процент цвета нечетных строк (INT)&amp;gt;,&amp;lt;Цвет выделения строки или столбца курсора (INT)&amp;gt;,&amp;lt;Процент цвета выделения строки или столбца курсора (INT)&amp;gt;}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция изменяет глобальный режим подсветки строк всех таблиц. Для изменения подсветки конкретной таблицы см. функцию [[Tab.HighlightMode]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Eval]]&lt;br /&gt;
|form='''Eval'''(''&amp;lt;Выражение для вычисления (STRING)&amp;gt;''):''&amp;lt;Результат вычисления выражения&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит компиляцию и вычисление выражения, заданного на внутреннем языке. Выражение исполняется в контексте текущей функции с доступом к именам, совпадающим с доступом из кода, вызвавшего функцию. Функция вызывает прерывание, если аргумент не может быть скомпилирован из-за ошибки, либо он не является вычисляемым выражением. Функция возвращает результат вычисления выражения.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Exec]]&lt;br /&gt;
|form='''Exec'''(''&amp;lt;Блок для исполнения или компилированная функция (STRING, COMPILEDFUNCTION)&amp;gt;''):''&amp;lt;Исполнение завершено удачно 1 или 0 (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит компиляцию и исполнение блока текста, заданного на внутреннем языке, или компилированной заранее функции. Блок исполняется в контексте текущей функции с доступом к именам, совпадающим с доступом из кода, вызвавшего функцию. Функция вызывает прерывание, если аргумент не может быть скомпилирован из-за ошибки. Исполняемый код обладает свойствами кода внутри новой функции (счетчик циклов равен нулю, создаваемые переменные не будут переданы в вызывавшую функцию), однако, имеет доступ к локальным переменным вызывавшей функции.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ExecEx]]&lt;br /&gt;
|form='''ExecEx'''(''&amp;lt;Блок для исполнения или компилированная функция (STRING, COMPILEDFUNCTION)&amp;gt;''{{Optional|,&amp;lt;Установки ограничения исполнения (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Ограничение по времени в мс. (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Наименование функции, получающей выводимую в лог информацию (STRING)&amp;gt;,&amp;lt;Глубина поиска (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Ограничение по использованию памяти потоком (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Значение переменной Result при исполнении функции&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит компиляцию и исполнение блока текста, заданного на внутреннем языке, или компилированной заранее функции в контролируемой среде исполнения. Аргументы могут ограничить возможности, предоставляемые исполняемому коду, как функционально (некоторые группы функций будут запрещены к использованию), или в заданных пределах доступа к переменным и функциям, так и с ограничением по времени исполнения или по выделяемой памяти. Функция может использоваться для исполнения кода, который может быть опасным или злонамеренным, либо кода из неизвестного источника.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Compile]]&lt;br /&gt;
|form='''Compile'''(''&amp;lt;Блок для компилирования (STRING)&amp;gt;''{{Optional|,&amp;lt;Степень изолированности (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Добавочные переменные (STRING)&amp;gt;,&amp;lt;Свойства исходного текста для отладчика (STRING,INT)&amp;gt;}}):''&amp;lt;Компилированная функция в виде объекта (COMPILEDFUNCTION)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит компиляцию блока текста, заданного на внутреннем языке, и возвращает объект, представляющий результат компиляции. В зависимости от второго аргумента, блок может компилироваться в контексте текущей функции, глобальных модулей или без доступа к внешним переменным и функциям. Функция вызывает прерывание, если компиляция прервана из-за ошибки. Результирующий объект можно использовать многократно с функциями [[Exec]] и [[ExecEx]], это быстрее, чем компилировать блок текста при каждом вызове.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[LoadFunctionFromBuffer]]&lt;br /&gt;
|form='''LoadFunctionFromBuffer'''(''&amp;lt;Экспортированная в память компилированная функция (BUFFER, STRING)&amp;gt;''{{Optional|,&amp;lt;Путь к исходному тексту (STRING),&amp;lt;Исходный текст (STRING)&amp;gt;}}):''&amp;lt;Компилированная функция в виде объекта (COMPILEDFUNCTION)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит импорт из памяти экспортированной ранее с помощью [[SaveFunctionToBuffer]] компилированной функции. Функция возвращает объект аналогичный результату функции [[Compile]], который можно использовать многократно с функциями [[Exec]] и [[ExecEx]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[SaveFunctionToBuffer]]&lt;br /&gt;
|form='''SaveFunctionToBuffer'''(''&amp;lt;Компилированная функция (COMPILEDFUNCTION)&amp;gt;''):''&amp;lt;Экспортированная в память компилированная функция (BUFFER)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит экспорт в память компилированной функции. Функция возвращает буфер с содержимым подобным файлам с компилированными модулями системы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[InfoPanelClose]]&lt;br /&gt;
|form='''InfoPanelClose'''({{Optional|&amp;lt;Очистить панель (INT)&amp;gt;{{Default|{{Eq}}0}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция закрывает информационную панель (панель логов) визуального клиента, очищая текущий текст в ней при необходимости.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[InfoPanelClear]]&lt;br /&gt;
|form='''InfoPanelClear'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция очищает текст в информационной панели (панели логов) визуального клиента.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[InfoPanelOpen]]&lt;br /&gt;
|form='''InfoPanelOpen'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция открывает информационную панель (панель логов) визуального клиента.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[IsInfoPanelOpen]]&lt;br /&gt;
|form='''IsInfoPanelOpen'''():''&amp;lt;Результат 0 или 1 (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция проверяет, открыта ли в данный момент информационная панель (панель логов) визуального клиента.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[HideControlPanel]]&lt;br /&gt;
|form='''HideControlPanel'''(''&amp;lt;Идентификатор панели инструментов (STRING)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция прячет всех окон указанную панель инструментов. Пользовательские панели инструментов задаются в свойствах проекта, кроме пользовательских панелей, можно использовать специальные следующие идентификаторы для адресации стандартных панелей: '''COMMON''', '''TABLE''', '''TEXT'''. См. также функцию для определенного окна [[Form.HideControlPanel]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ShowControlPanel]]&lt;br /&gt;
|form='''ShowControlPanel'''(''&amp;lt;Идентификатор панели инструментов (STRING)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция отображает для всех окон указанную панель инструментов. Пользовательские панели инструментов задаются в свойствах проекта, кроме пользовательских панелей, можно использовать специальные следующие идентификаторы для адресации стандартных панелей: '''COMMON''', '''TABLE''', '''TEXT'''. См. также функцию для определенного окна [[Form.ShowControlPanel]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[InterThreadWindowsMode]]&lt;br /&gt;
|form='''InterThreadWindowsMode'''({{Optional|&amp;lt;Новый режим отображения окон всех потоков (INT)&amp;gt;}}):''&amp;lt;Текущий режим отображения окон всех потоков (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция возвращает и/или изменяет текущий режим отображения окон всех потоков. Для более подробной информации см. описание.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[StandardOutputHook]]&lt;br /&gt;
|form='''StandardOutputHook'''({{Optional|&amp;lt;Тип перехватываемого события (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Наименование функции, вызываемой при перехвате (STRING)&amp;gt;,&amp;lt;Глубина поиска (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Параметр для передачи в функцию&amp;gt;}}):''&amp;lt;Наименование предыдущей функции-перехватчика (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция добавляет или удаляет ссылку на функцию-перехватчик визуальных событий (к примеру, вывода информации в лог или панель состояния формы). Может использоваться, к примеру, для получения и вывод на экран информации об обработках, протекающих в скрытом потоке. Крайне желательно использование конструкции &amp;lt;code&amp;gt;Try .. Finally&amp;lt;/code&amp;gt;, чтобы гарантированно вернуть предыдущее состояние перехватчика после того, как работа будет завершена.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[RemoveUnacceptablePathChars]]&lt;br /&gt;
|form='''RemoveUnacceptablePathChars'''(''&amp;lt;Имя файла, которое необходимо очистить от недопустимых символов (STRING)&amp;gt;''{{Optional|,&amp;lt;Заменить недопустимые символы на (STRING)&amp;gt;{{Default|{{Eq}}&amp;quot;&amp;quot;}}}}):''&amp;lt;Очищенное имя файла (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция очищает имя файла (без имен папок) от непечатных и недопустимых символов (удаляются сл. печатные символы &amp;lt;code&amp;gt;&amp;lt;, &amp;gt;, :, &amp;quot;, /, \, |, ?, *&amp;lt;/code&amp;gt;). Удаляемые символы могут быть заменены на указанный.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GetPath]]&lt;br /&gt;
|form='''GetPath'''(''&amp;lt;Имя файла с папками (STRING)&amp;gt;''):''&amp;lt;Имена папок без имени файла (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает из полного имени файла строку пути с папками (пример, строка &amp;lt;code&amp;gt;C:\Folder\My.File.txt&amp;lt;/code&amp;gt; будет превращена в &amp;lt;code&amp;gt;C:\Folder\&amp;lt;/code&amp;gt;).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GetFileName]]&lt;br /&gt;
|form='''GetFileName'''(''&amp;lt;Имя файла с папками (STRING)&amp;gt;''):''&amp;lt;Имя файла без папок (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает из полного имени файла с папками, имя файла без папок (пример, строка &amp;lt;code&amp;gt;C:\Folder\My.File.txt&amp;lt;/code&amp;gt; будет превращена в &amp;lt;code&amp;gt;My.File.txt&amp;lt;/code&amp;gt;).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GetExt]]&lt;br /&gt;
|form='''GetExt'''(''&amp;lt;Имя файла (STRING)&amp;gt;''):''&amp;lt;Расширение файла (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает из имени файла его расширение (пример, строка &amp;lt;code&amp;gt;C:\Folder\My.File.txt&amp;lt;/code&amp;gt; будет превращена в &amp;lt;code&amp;gt;txt&amp;lt;/code&amp;gt;).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[AddBackslash]]&lt;br /&gt;
|form='''AddBackslash'''(''&amp;lt;Путь с папками (STRING)&amp;gt;''):''&amp;lt;Преобразованный путь (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция добавляет в конец строки знак &amp;lt;code&amp;gt;\&amp;lt;/code&amp;gt;, если он там уже не присутствует. Пустая строка не будет изменена.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[RemoveBackslash]]&lt;br /&gt;
|form='''RemoveBackslash'''(''&amp;lt;Путь с папками (STRING)&amp;gt;''):''&amp;lt;Преобразованный путь (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция удаляет с конца строки знак &amp;lt;code&amp;gt;\&amp;lt;/code&amp;gt;, если он там был.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[RemoveExt]]&lt;br /&gt;
|form='''RemoveExt'''(''&amp;lt;Имя файла (STRING)&amp;gt;''):''&amp;lt;Имя файла без расширения (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция удаляет из имени файла его расширение (пример, строка &amp;lt;code&amp;gt;C:\Folder\My.File.txt&amp;lt;/code&amp;gt; будет превращена в &amp;lt;code&amp;gt;C:\Folder\My.File&amp;lt;/code&amp;gt;).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GetAccountNames]]&lt;br /&gt;
|form='''GetAccountNames'''():''&amp;lt;Список учетных записей системы (LIST)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает список текущих учетных записей системы (сервера). Для исполнения функции необходимо наличие административных прав. Значениями списка будут строки с наименованиями учетных записей, имена списка будут представлены в виде строки с флагами соответствующих учетных записей.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[UserCredentialsLock]]&lt;br /&gt;
|form='''UserCredentialsLock'''({{OptionalByRef|&amp;lt;Заблокировано пользователем (STRING)&amp;gt;}},{{OptionalByRef|&amp;lt;Заблокировано на машине (STRING)&amp;gt;}},{{OptionalByRef|&amp;lt;Время блокировки (DATE)&amp;gt;}}):''&amp;lt;0 или 1 (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция временно блокирует доступ к редактору учетных записей пользователей (для подготовки к изменениям). Для исполнения функции необходимо наличие административных прав. '''Внимание''': после функции должен следовать блок  &amp;lt;code&amp;gt;&amp;lt;Try&amp;gt; ... &amp;lt;Finally&amp;gt;&amp;lt;EndTry&amp;gt;&amp;lt;/code&amp;gt; для гарантированного вызова функции разблокировки [[UserCredentialsUnlock]]. Если доступ уже был заблокирован ранее, функция возвращает имя пользователя, машины и время, когда он был заблокирован.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[UserCredentialsUnlock]]&lt;br /&gt;
|form='''UserCredentialsUnlock'''():''&amp;lt;0 или 1 (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция разблокирует доступ к редактору учетных записей пользователей, заблокированному ранее функцией [[UserCredentialsLock]]. Для исполнения функции необходимо наличие административных прав.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[UserCredentialsLoad]]&lt;br /&gt;
|form='''UserCredentialsLoad'''():''&amp;lt;Файл учетных записей сервера в виде строки (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает строку-содежимое файла учетных записей пользователей с сервера. Для исполнения функции необходимо наличие административных прав. Строку можно использовать, к примеру, для заполнения объекта [[Ini-файл|ini-файла]]. Чтение учетных записей пользователей, без их предвариельной блокировки функцией [[UserCredentialsLock]], разрешено, однако если данные будут изменяться, необходимо убедиться, что вы читаете актуальную копию данных, поэтому необходимо использование [[UserCredentialsLock]] до начала чтения.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[UserCredentialsStore]]&lt;br /&gt;
|form='''UserCredentialsStore'''(''&amp;lt;Файл учетных записей сервера в виде строки (STRING)&amp;gt;''):''&amp;lt;0 или 1 (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция сохраняет строку-содежимое файла учетных записей пользователей на сервер. Для исполнения функции необходимо наличие административных прав. Перед вызовом данной функции строго рекомендуется использовать функцию блокировки доступа к редактору учетных записей [[UserCredentialsLock]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ValidateUserPassword]]&lt;br /&gt;
|form='''ValidateUserPassword'''(''&amp;lt;Имя пользователя (STRING)&amp;gt;'',''&amp;lt;Пароль пользователя (STRING)&amp;gt;''{{OptionalByRef|,''&amp;lt;Ошибка или ответ сервера (STRING,INT)&amp;gt;''}}):''&amp;lt;Упешная проверка учетной записи (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция проверяет корректность имени пользователя и пароля с точки зрения учетных записей сервера (иначе говоря, проверяет, сможет ли этот пользователь зарегистрироваться на сервере под указанным паролем). Если регистрация невозможна, функция возвращает краткое описание причины третьим аргументом, если регистрация удачна, функция возвращает уровень полномочий пользователя третьим аргументом.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[SendChatMessage]]&lt;br /&gt;
|form='''SendChatMessage'''(''&amp;lt;Получатели через запятую (STRING)&amp;gt;'',''&amp;lt;Текст сообщения (STRING)&amp;gt;''):''&amp;lt;Сообщение успешно отправлено (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция отправляет сообщение во встроенный чат клиентов, зарегистрированных под пользователями, которые указаны, как получатели сообщения в первом аргументе.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GetStandardIcon]]&lt;br /&gt;
|form='''GetStandardIcon'''(''&amp;lt;Объект базы данных (DB)&amp;gt;''{{Optional|,''&amp;lt;Закрепленная строка папок (INT)&amp;gt;''{{Default|{{Eq}}0}}}}):''&amp;lt;Индекс стандартной иконки объекта (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает индекс стандартной иконки указанного объекта базы данных, данные индексы не совпадают с номерами иконок из библиотеки иконок и могут быть использованы только для столбцов визуальных таблиц, имеющих тип &amp;quot;стандартная иконка&amp;quot;. Различное состояние объекта (удален, новый и пр.) отображается разными иконками. Возможно также указание на то, что иконка находится для открытой папки справочника.&lt;br /&gt;
}}&lt;br /&gt;
{{function footer}}&lt;br /&gt;
&lt;br /&gt;
== Функции диалога с пользователем==&lt;br /&gt;
В данный раздел входят функции, осуществляющие вывод на экран различных диалогов для получения информации от пользователя. Большинство этих функций не будет работать в консольных клиентах.&lt;br /&gt;
{{function header}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Box]], '''MsgBox'''&lt;br /&gt;
|form='''Box'''(''&amp;lt;Сообщение (STRING)&amp;gt;''{{Optional|,&amp;lt;Тип диалога (INT)&amp;gt;{{Default|{{Eq}}Q_OK}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция выводит модальное окно с текстом сообщения, при этом стиль окна будет зависеть от второго аргумента.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[AskQuestion]]&lt;br /&gt;
|form='''AskQuestion'''(''&amp;lt;Текст вопроса (STRING)&amp;gt;'',''&amp;lt;Тип диалога и его кнопки (INT)&amp;gt;''{{Optional|,&amp;lt;Индекс кнопки по умолчанию (INT)&amp;gt;{{Default|{{Eq}}1}}}}):''&amp;lt;Идентификатор выбранной кнопки (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция выводит модальное окно с текстом вопроса со стилем и кнопками, заданными вторым аргументом. При необходимости, нужную кнопку можно выделить, как кнопку по умолчанию. Пользователь не может закрыть окно, без выбора одной из кнопок, идентификатор которой будет возвращен в результате функции. Для задания режимов и кнопок диалога рекомендуется использовать [[Константы#Константы диалогов|константы диалогов]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[SelectDataType]]&lt;br /&gt;
|form='''SelectDataType'''({{Optional|&amp;lt;Список типов объектов для выбора (STRING)&amp;gt;,&amp;lt;Заголовок формы (STRING)&amp;gt;}}):''&amp;lt;Тип и имя выбранного объекта или пустая строка (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция позволяет выбрать тип (включая типы и виды объектов базы данных) из списка типов, ограниченного, если необходимо, первым аргументом. Функция возвращает выбранный пользователем тип или пустую строку, если пользователь отказался от выбора.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[SelectFormSettingsFile]]&lt;br /&gt;
|form='''SelectFormSettingsFile'''(''&amp;lt;Загрузка установок (INT)&amp;gt;'',{{ByRef|&amp;lt;Путь файла установок (STRING)&amp;gt;,&amp;lt;Имя файла установок (STRING)&amp;gt;}}):''&amp;lt;Пользователь осуществил выбор 1 или 0 (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция показывает диалог сохранения или загрузки установок формы. Если пользователь выбрал файл установок (для загрузки или сохранения), будут заполнены переменные путь к файлу или имя файла установок, и функция возвратится с результатом 1.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[OpenFileDialog]]&lt;br /&gt;
|form='''OpenFileDialog'''({{ByRef|&amp;lt;Имя файла (STRING)&amp;gt;}}{{Optional|,&amp;lt;Заголовок диалога (STRING)&amp;gt;,&amp;lt;Доступные фильтры файлов (STRING)&amp;gt;,&amp;lt;Тип диалога (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Расширение по умолчанию (STRING)&amp;gt;}}):''&amp;lt;Пользователь выбрал файл (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция выводит стандартный системный диалог открытия файла с заголовком и установками, определяемыми аргументами. Результат выбора возвращается в переменной, задающей первый аргумент.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[SaveFileDialog]]&lt;br /&gt;
|form='''SaveFileDialog'''({{ByRef|&amp;lt;Имя файла (STRING)&amp;gt;}}{{Optional|,&amp;lt;Заголовок диалога (STRING)&amp;gt;,&amp;lt;Доступные фильтры файлов (STRING)&amp;gt;,&amp;lt;Тип диалога (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Расширение по умолчанию (STRING)&amp;gt;}}):''&amp;lt;Пользователь нажал на ОК (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция выводит стандартный системный диалог сохранения файла с заголовком и установками, определяемыми аргументами. Выбранное имя файла для сохранения возвращается в переменной, задающей первый аргумент.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[OpenFileDialogServer]]&lt;br /&gt;
|form='''OpenFileDialogServer'''({{ByRef|&amp;lt;Имя файла (STRING)&amp;gt;}}{{Optional|,&amp;lt;Заголовок диалога (STRING)&amp;gt;,&amp;lt;Доступные фильтры файлов (STRING)&amp;gt;,&amp;lt;Тип диалога (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Расширение по умолчанию (STRING)&amp;gt;,&amp;lt;Ограничить доступ этим каталогом (STRING)&amp;gt;}}):''&amp;lt;Пользователь выбрал файл (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция выводит стандартный системный диалог открытия файла на стороне сервера с заголовком и установками, определяемыми аргументами. Результат выбора возвращается в переменной, задающей первый аргумент.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[SaveFileDialogServer]]&lt;br /&gt;
|form='''SaveFileDialogServer'''({{ByRef|&amp;lt;Имя файла (STRING)&amp;gt;}}{{Optional|,&amp;lt;Заголовок диалога (STRING)&amp;gt;,&amp;lt;Доступные фильтры файлов (STRING)&amp;gt;,&amp;lt;Тип диалога (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Расширение по умолчанию (STRING)&amp;gt;,&amp;lt;Ограничить доступ этим каталогом (STRING)&amp;gt;}}):''&amp;lt;Пользователь нажал на ОК (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция выводит стандартный системный диалог сохранения файла на стороне сервера с заголовком и установками, определяемыми аргументами. Выбранное имя файла для сохранения возвращается в переменной, задающей первый аргумент.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[SelectFontDialog]]&lt;br /&gt;
|form='''SelectFontDialog'''({{ByRef|&amp;lt;Наименования шрифта с его свойствами (STRING)&amp;gt;}}{{Optional|,&amp;lt;Запретить выбор стилей (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Минимальный размер шрифта (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Максимальный размер шрифта (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Пользователь нажал на ОК (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция выводит стандартный системный диалог выбора шрифта с установками, определяемыми аргументами. Выбранное имя шрифта и его свойства возвращаются в переменной, задающей первый аргумент.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[SelectIconDialog]]&lt;br /&gt;
|form='''SelectIconDialog'''({{ByRef|&amp;lt;Индекс выбранной иконки или ноль (INT)&amp;gt;}}{{Optional|,&amp;lt;Заголовок диалога (STRING)&amp;gt;}}):''&amp;lt;Пользователь выполнил выбор (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция выводит стандартный модальный диалог выбора иконки из библиотеки иконок. Если пользователь выберет какую-либо иконку или пункт &amp;quot;без картинки&amp;quot;, функция возвратит 1, иначе 0.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[SelectFolderDialog]]&lt;br /&gt;
|form='''SelectFolderDialog'''({{ByRef|&amp;lt;Имя папки (STRING)&amp;gt;}}{{Optional|,&amp;lt;Заголовок диалога (STRING)&amp;gt;}}):''&amp;lt;Пользователь выбрал папку (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция выводит стандартный системный диалог выбора папки с файлами с заголовком, определяемым вторым аргументом. Результат выбора возвращается в переменной, задающей первый аргумент.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[EditScriptDialog]]&lt;br /&gt;
|form='''EditScriptDialog'''({{ByRef|&amp;lt;Исходный текст программы (STRING)&amp;gt;}}{{Optional|,&amp;lt;Заголовок диалога (STRING)&amp;gt;,&amp;lt;Внешние переменные ч/з запятые (STRING)&amp;gt;}}):''&amp;lt;Пользователь нажал на ОК (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция выводит модальный диалог редактирования исходного текста программы, заданного первым аргументом. Диалог имеет стандартную подсветку текста и позволяет провести синтаксический контроль при необходимости. Результат редактирования возвращается в переменной, задающей первый аргумент.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[AskString]]&lt;br /&gt;
|form='''AskString'''({{ByRef|&amp;lt;Текст для редактирования (STRING)&amp;gt;}}{{Optional|,&amp;lt;Заголовок диалога (STRING)&amp;gt;,&amp;lt;Максимальная длина строки (INT)&amp;gt;{{Default|{{Eq}}256}},&amp;lt;Тип строки (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Пользователь нажал на ОК (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция выводит модальный диалог редактирования текста, заданного первым аргументом. Текст может содержать как одну строку, так быть и многострочным. Результат редактирования возвращается в переменной, задающей первый аргумент.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[AskNumber]]&lt;br /&gt;
|form='''AskNumber'''({{ByRef|&amp;lt;Число для редактирования (NUMBER)&amp;gt;}}{{Optional|,&amp;lt;Заголовок диалога (STRING)&amp;gt;,&amp;lt;Максимальная длина числа (INT)&amp;gt;{{Default|{{Eq}}30}},&amp;lt;Количество знаков после точки (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Пользователь нажал на ОК (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция выводит модальный диалог редактирования числа, заданного первым аргументом. Число может быть как целым, так и вещественным. В диалоге имеется возможность вызова калькулятора. Результат редактирования возвращается в переменной, задающей первый аргумент.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[AskDate]]&lt;br /&gt;
|form='''AskDate'''({{Optional|&amp;lt;Дата по умолчанию (DATE)&amp;gt;,&amp;lt;Заголовок диалога (STRING)&amp;gt;,&amp;lt;Режим показа диалога (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Выбранная дата или 0 (DATE,INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция выводит диалог в виде поля или календаря для выбора даты. В режиме поля, у пользователя есть возможность вызвать календарь. Функция возвращает результат выбора или ноль, если пользователь отказался от выбора.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[AskPeriod]]&lt;br /&gt;
|form='''AskPeriod'''({{ByRef|&amp;lt;Начальная дата периода (DATE)&amp;gt;,&amp;lt;Конечная дата периода (DATE)&amp;gt;}}{{Optional|,&amp;lt;Заголовок диалога (STRING)&amp;gt;,&amp;lt;Тип ограничения при выборе периода (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Пользователь нажал на ОК (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция выводит диалог для выбора периода времени. На возможность выбора могут быть наложены ограничения (к примеру, выбирать только периоды в целый месяц). Результат выбора возвращается в переменных, задающих первые два аргумента.&lt;br /&gt;
}}&lt;br /&gt;
{{function footer}}&lt;br /&gt;
&lt;br /&gt;
== Функции, связанные с сервером и базой данных==&lt;br /&gt;
В данном разделе собраны функции, напрямую или косвенно связанные с сервером базы данных. Если клиент работает в локальном режиме, без подключения к серверу базы данных, многие функции этой группы не будут иметь значения.&lt;br /&gt;
{{Общие функции, связанные с БД}}&lt;br /&gt;
&lt;br /&gt;
== Глобальные функции строк-массивов значений ==&lt;br /&gt;
Группа функций, позволяющая хранить строки-флаги с префиксами на сервере в виде быстрой небольшой базы данных с двумя столбцами (значение и префикс). Функции можно использовать, когда нужно проверять существует ли группа строк в массиве, добавлять строки в массив или удалять их. Массивы доступны для всех клиентов, так как хранятся в памяти сервера. По этой же причине не рекомендуется использование слишком больших массивов или слишком больших строк, так как на сервере может не остаться памяти на выполнение других запросов. При перезапуске сервера, массивы автоматически не восстанавливаются. Если требуется запомнить их содержимое, чтобы не заполнять их всякий раз при запуске сервера, при создании массива можно указать на бинарный файл, в который массив будет периодически сохраняться после изменений после определенного времени. Такой подход не гарантирует, что текущее изменение будет сохранено, если сервер будет остановлен. Существует также подобная группа функций для клиентской стороны (см. [[Строковые_функции#Функции строк-массивов значений|Функции строк-массивов значений]]), но имеет несколько другой функционал.&lt;br /&gt;
&lt;br /&gt;
{{function header}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GlobalStringsHeaps]]&lt;br /&gt;
|form='''GlobalStringsHeaps''':''&amp;lt;Массивы, созданные на сервере (LIST)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает список всех массивов, созданных на данный момент на сервере. Возвращается список, элементами которого являются идентификаторы массивов (числовые значения), а наименованиями -- имена массивов.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GlobalStringsHeapsFind]]&lt;br /&gt;
|form='''GlobalStringsHeapsFind'''(''&amp;lt;Имя массива (STRING)&amp;gt;''):''&amp;lt;Идентификатор или ноль (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция проверяет, существует ли на сервере массив по его наименованию. Если массив существует, будет возвращен его идентификатор, иначе ноль.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GlobalStringsHeapsAdd]]&lt;br /&gt;
|form='''GlobalStringsHeapsAdd'''(''&amp;lt;Имя массива (STRING)&amp;gt;''{{Optional|,&amp;lt;Строка-разделитель (STRING)&amp;gt;{{Default|{{Eq}}Chr(0)}},&amp;lt;Разделитель префикса (STRING)&amp;gt;{{Default|{{Eq}}&amp;quot;&amp;quot;}},&amp;lt;Параметры массива (LIST)&amp;gt;}}):''&amp;lt;Идентификатор массива (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция создает на сервере массив по его имени, с указанным разделителем значений и префиксов и указанными параметрами, задающимися в виде списка, и возвращает идентификатор созданного массива. Если массив уже существует, будет возвращен его идентификатор без каких-либо дополнительных изменений.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GlobalStringsHeapsRemove]]&lt;br /&gt;
|form='''GlobalStringsHeapsRemove'''(''&amp;lt;Имя или идентификатор массива (STRING,INT)&amp;gt;''):''&amp;lt;0 или 1 (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция удаляет массив с сервера по его наименованию или идентификатору. Если массив удален (найден на сервере), функция возвращает ''1'', иначе ''0''.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GlobalStringsAdd]]&lt;br /&gt;
|form='''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;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция добавляет произвольное количество строк из списка или одной строки с разделителями в массив, заданный по его наименованию или идентификатору. Режим функции задает условие добавления, а также формат ответа (последний может быть как числовым, так и в виде списка).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GlobalStringsRemove]]&lt;br /&gt;
|form='''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;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция удаляет произвольное количество строк из списка или одной строки с разделителями из массива, заданного по его наименованию или идентификатору. Режим функции задает условие удаления, а также формат ответа (последний может быть как числовым, так и в виде списка).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GlobalStringsFind]]&lt;br /&gt;
|form='''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;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция выполняет поиск произвольного количества строк, заданных в списке или в одной строке с разделителями, в массиве по его наименованию или идентификатору. Режим функции задает условие поиска, а также формат ответа (последний может быть как числовым, так и в виде списка).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GlobalStringsShrink]]&lt;br /&gt;
|form='''GlobalStringsShrink'''(''&amp;lt;Имя или идентификатор массива (STRING,INT)&amp;gt;''{{Optional|,''&amp;lt;Порог сжатия в % (INT)&amp;gt;''{{Default|{{Eq}}0}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция форсирует процедуру сжатия памяти буферов массива, которая обычно выполняется автоматически после определенного количества удалений из массива.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GlobalStringsSaveToFile]]&lt;br /&gt;
|form='''GlobalStringsSaveToFile'''(''&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;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция выполняет сохранение массива на диск в файловой системе сервера в виде файла. Обычно она выполняется автоматически, если в массиве были изменения после определенного количества времени.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GlobalStringsAddFromFile]]&lt;br /&gt;
|form='''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;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция выполняет добавление сохраненного ранее массива с диска в файловой системе сервера к массиву, заданному по наименованию или идентификатору. Обычно она выполняется автоматически при создании массива, если указан файл его хранения.&lt;br /&gt;
}}&lt;br /&gt;
{{function footer}}&lt;br /&gt;
&lt;br /&gt;
== Функции отладки ==&lt;br /&gt;
Функции, собранные здесь, используются для изменения параметров и работы со встроенным отладчиком. Отладчик доступен как для визуальных, так и для консольных клиентов.&lt;br /&gt;
{{function header}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[DebuggingRights]]&lt;br /&gt;
|form='''DebuggingRights'''({{Optional|&amp;lt;Режим отладки 0 или 1 (INT)&amp;gt;}}):''&amp;lt;Текущий режим отладки (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает или/и изменяет текущий режим отладки. Если режим отладки не включен, встроенный отладчик не будет выведен в момент появления исключения или нажатия Ctrl+Alt+C.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Debugbreak]]&lt;br /&gt;
|form='''Debugbreak'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция приостанавливает выполнение и открывает окно отладчика на текущей инструкции, если это позволяет текущий режим отладки. Функция не должна быть последней в модуле.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ProfilerStart]]&lt;br /&gt;
|form='''ProfilerStart'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция включает встроенный профайлер, если это позволяет текущий режим отладки. Данные, накопленные профайлером ранее не изменяются. При включенном профайлере программа исполняется несколько медленнее.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ProfilerStop]]&lt;br /&gt;
|form='''ProfilerStop'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция отключает встроенный профайлер. Данные, накопленные профайлером ранее не изменяются.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ProfilerClear]]&lt;br /&gt;
|form='''ProfilerClear'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция очищает данные, накопленные профайлером.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Assert]]&lt;br /&gt;
|form='''Assert'''(''&amp;lt;Условие утверждения (INT)&amp;gt;''{{Optional|,&amp;lt;Описание ошибки утверждения (STRING)&amp;gt;}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция проверяет истинность утверждения, заданного первым аргументом, если утверждение ложно, функция вызывает исключение 71 (ERR_ASSERTIONERROR) с требуемым описанием, если необходимо.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[AssertMode]]&lt;br /&gt;
|form='''AssertMode'''(''&amp;lt;Режим ошибок утверждения (INT)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция изменяет способ обработки ошибок утверждения (&amp;lt;code&amp;gt;[[Assert]]&amp;lt;/code&amp;gt;). Режим используется для всех потоков клиента.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Raise]]&lt;br /&gt;
|form='''Raise''' {{Optional|&amp;lt;Описание исключения (STRING)&amp;gt;}}&lt;br /&gt;
|type=2&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция вызывает исключение 41 (ERR_USER) с требуемым описанием, если необходимо.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Reraise]]&lt;br /&gt;
|form='''Reraise'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция может использоваться внутри блока &amp;lt;code&amp;gt;Except ... EndTry&amp;lt;/code&amp;gt; для того, чтобы снова вызвать подавленное конструкцией &amp;lt;code&amp;gt;Except&amp;lt;/code&amp;gt; исключение.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[PopError]]&lt;br /&gt;
|form='''PopError'''({{Optional|&amp;lt;Режим (INT)&amp;gt;{{Default|{{Eq}}15}}}}):''&amp;lt;Описание исключения (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает описание текущего исключения, собирая его из требуемых частей. Информация об исключении удаляется из очереди (но не само исключение). Функцию рекомендуется использовать внутри блока &amp;lt;code&amp;gt;Except ... EndTry&amp;lt;/code&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[PeekError]]&lt;br /&gt;
|form='''PeekError'''({{Optional|&amp;lt;Режим (INT)&amp;gt;{{Default|{{Eq}}15}}}}):''&amp;lt;Описание исключения (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает описание текущего исключения, собирая его из требуемых частей. Информация об исключении не удаляется из очереди. Функцию можно использовать внутри блоков &amp;lt;code&amp;gt;Except ... EndTry&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;Finally ... EndTry&amp;lt;/code&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[SuppressException]]&lt;br /&gt;
|form='''SuppressException'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция может использоваться только внутри блока &amp;lt;code&amp;gt;Finally ... EndTry&amp;lt;/code&amp;gt;. Текущее исключение в очереди исключений будет удалено, оно не будет инициировано после выполнения &amp;lt;code&amp;gt;EndTry&amp;lt;/code&amp;gt;. Функция позволяет превратить конструкцию &amp;lt;code&amp;gt;Try ... Finally&amp;lt;/code&amp;gt; в аналог конструции &amp;lt;code&amp;gt;Try ... Except&amp;lt;/code&amp;gt; программно.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Writeln]]&lt;br /&gt;
|form='''Writeln'''(''&amp;lt;Аргумент&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Отладочная функция выводит строковое представление аргумента в [[Визуальный лог клиента|лог]] клиента. Функция является упрощенной версией функции [[Message]].&lt;br /&gt;
}}&lt;br /&gt;
{{function footer}}&lt;br /&gt;
&lt;br /&gt;
=== Внутренние отладочные функции ===&lt;br /&gt;
Данная группа функций обычно напрямую не используется в рабочих программах, но может пригодиться для целей отладки и исправления ошибок.&lt;br /&gt;
{{function header}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[RefCount]]&lt;br /&gt;
|form='''RefCount'''(''&amp;lt;Аргумент&amp;gt;''):''&amp;lt;Значения счетчика ссылок объекта (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает значение счетчика внешних ссылок сложного объекта (см. [[Объекты]]), либо -1, если аргумент не является сложным объектом.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[BusyCount]]&lt;br /&gt;
|form='''BusyCount'''(''&amp;lt;Аргумент&amp;gt;''):''&amp;lt;Значения счетчика занятости однопоточных объектов (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция отладки позволяет узнать величину свойства &amp;quot;занят&amp;quot; для однопоточных объектов.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[dbgVarStackSize]]&lt;br /&gt;
|form='''dbgVarStackSize'''():''&amp;lt;Количество переменных в стеке (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Отладочная функция возвращает общее количество переменных в стеке переменных текущего потока.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[dbgVarDump]]&lt;br /&gt;
|form='''dbgVarDump'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Отладочная функция выводит в консоль или панель логов визуального клиента отладочную информацию по текущему состоянию стека переменных текущего потока.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[dbgObjectHeapsNumber]]&lt;br /&gt;
|form='''dbgObjectHeapsNumber'''():''&amp;lt;Количество объектных стеков в системе (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Отладочная функция получает количество стеков объектов, существующих во всех работающих потоках, а также стеков объектов, которые принадлежали закрытым потокам, однако, содержащих адресуемые объекты.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[dbgEvalObjectsNumber]]&lt;br /&gt;
|form='''dbgEvalObjectsNumber'''():''&amp;lt;Количество объектов в стеке исполнения (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Отладочная функция получает количество объектов в стеке исполнения текущего потока.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[dbgObjectsNumber]]&lt;br /&gt;
|form='''dbgObjectsNumber'''({{Optional|&amp;lt;Объект, стек которого необходимо использовать&amp;gt;}}):''&amp;lt;Количество объектов в стеке объектов (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Отладочная функция получает количество объектов в стеке объектов текущего потока исполнения, либо потока, в котором был создан объект аргумента.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[dbgMemoryAllocated]]&lt;br /&gt;
|form='''dbgMemoryAllocated'''():''&amp;lt;Объем памяти, выделенный системой (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Отладочная функция получает текущий объем памяти в байтах, выделенный системой (с учетом всех внутренних переменных, стеков потоков, объектных стеков и пр.)&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[dbgShowAllocInfo]]&lt;br /&gt;
|form='''dbgShowAllocInfo'''(''&amp;lt;Включение режима накопления информации по объектам текущего стека объектов (INT)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Отладочная функция должна использоваться дважды. В первый раз до выполнения операции, которая может произвести утечку объектов с параметром 1 (включить), затем второй раз после операции с параметром 0 (выключить), после чего функция выводит в консоль информацию по всем объектам, созданным за время операции, оставшимся в памяти после ее окончания. Функция может использоваться только в консольном клиенте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[dbgOLEMethodsList]]&lt;br /&gt;
|form='''dbgOLEMethodsList'''(''&amp;lt;OLE-объект (OLE)&amp;gt;''):''&amp;lt;Дерево методов и свойств объекта (TREE)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Отладочная функция, позволяет получить внутренний список имен методов и свойств OLE-объекта в виде дерева. Может использоваться, чтобы найти имя метода, если документация недоступна или недостаточно подробна.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[dbgStackTrace]]&lt;br /&gt;
|form='''dbgStackTrace'''():''&amp;lt;Стек вызовов текущего потока (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Отладочная функция получает языковый стек вызовов текущего исполняемого потока в виде строки.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[dbgSysStackTrace]]&lt;br /&gt;
|form='''dbgSysStackTrace'''():''&amp;lt;Системный стек вызовов текущего потока (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Отладочная функция получает системный стек вызовов текущего исполняемого потока в виде строки. Без наличия соответствующего &amp;lt;code&amp;gt;.map&amp;lt;/code&amp;gt; файла клиента, стек будет иметь неописательную информацию.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[dbgSysStackTraceVisual]]&lt;br /&gt;
|form='''dbgSysStackTraceVisual'''():''&amp;lt;Системный стек вызовов визуального потока (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Отладочная функция получает системный стек вызовов визуального потока в виде строки. Без наличия соответствующего &amp;lt;code&amp;gt;.map&amp;lt;/code&amp;gt; файла клиента, стек будет иметь неописательную информацию. Функция может быть вызвана только для визуального клиента.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[dbgSysLastExceptionStackTrace]]&lt;br /&gt;
|form='''dbgSysLastExceptionStackTrace'''():''&amp;lt;Системный стек вызовов последнего системного исключения (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Отладочная функция получает системный стек вызовов последнего исключения на уровне системы в виде строки. Без наличия соответствующего &amp;lt;code&amp;gt;.map&amp;lt;/code&amp;gt; файла клиента, стек будет иметь неописательную информацию.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[dbgHRPCAvailable]]&lt;br /&gt;
|form='''dbgHRPCAvailable'''():''&amp;lt;Можно ли использовать т.в.т. (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Отладочная функция проверяет, включен ли на данной машине таймер высокой точности (обычно включение происходит в BIOS компьютера).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[dbgHRPCCurrent]]&lt;br /&gt;
|form='''dbgHRPCCurrent'''():''&amp;lt;Текущее значение т.в.т. (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Отладочная функция получает текущее значение таймера высокой точности. Если таймер не включен на системном уровне, функция возвращает 0.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[dbgHRPCGetPeriod]]&lt;br /&gt;
|form='''dbgHRPCGetPeriod'''(''&amp;lt;Предыдущее значение т.в.т. (INT)&amp;gt;''):''&amp;lt;Прошедшее время в наносекундах (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Отладочная функция получает промежуток времени, прошедший от предыдущего значения таймера высокой точности (заданного аргументом) до текущего момента, выраженное в наносекундах. Если таймер не включен на системном уровне, функция возвращает пустое значение. Перевод периода в секунды можно осуществить по формуле &amp;lt;code&amp;gt;&amp;lt;Результат&amp;gt;/1000000000&amp;lt;/code&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[dbgWriteLog]]&lt;br /&gt;
|form='''dbgWriteLog'''(''&amp;lt;Строка лога (STRING)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Отладочная функция сохраняет информацию в текстовом логе клиента.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[dbgToFileTime]]&lt;br /&gt;
|form='''dbgToFileTime'''(''&amp;lt;Дата (DATE)&amp;gt;''):''&amp;lt;Дата в формате FILETIME (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Отладочная функция превращает дату в 64-битное число в формате FILETIME (формат, в котором система хранит даты).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[dbgFromFileTime]]&lt;br /&gt;
|form='''dbgFromFileTime'''(''&amp;lt;Дата в формате FILETIME (INT)&amp;gt;''):''&amp;lt;Дата (DATE)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Отладочная функция превращает 64-битное число в формате FILETIME (формат, в котором система хранит даты) в дату.&lt;br /&gt;
}}&lt;br /&gt;
{{function footer}}&lt;br /&gt;
&lt;br /&gt;
=== Объект сторожевого пса ===&lt;br /&gt;
Основная характеристика консольных клиентов, работающих в режиме сервера, это их постоянная доступность. Если консольное приложение вызывает внешние функции, есть вероятность зависания, если в этих внешних функциях содержатся ошибки (OLE-объекты могут зависнут, либо, печать на принтер, драйвер которого, может войти в вечный цикл ожидания или вывести сообщение об ошибке на экран, ожидая действия пользователя и пр.). Функции сторожевого пса помогают при появлении зависаний перезапустить программу-клиент. Каждый объект сторожевого пса в активном состоянии работает в отдельном системном потоке, наличие большого количества таких объектов может негативно сказаться на ресурсах системы.&lt;br /&gt;
{{function header}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Watchdog.Create|Create]]&lt;br /&gt;
|form={{Grey|Watchdog.}}'''Create'''({{Optional|&amp;lt;Режим сторожевого пса (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Новый объект сторожевого пса (Watchdog)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция создает новый объект сторожевого пса с указанным режимом. Сторожевой пес создается в неактивном состоянии. Для активации необходимо использовать функцию [[Watchdog.Create|Guard]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Watchdog.Guard|Guard]]&lt;br /&gt;
|form={{Grey|Watchdog.}}'''Guard'''(''&amp;lt;Количество миллисекунд (INT)&amp;gt;''):''&amp;lt;Сторожевой пес удачно активирован 1 или 0 (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит включение режима сторожевого пса с указанным периодом слежения. Функция может использоваться только в консольном клиенте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Watchdog.Feed|Feed]]&lt;br /&gt;
|form={{Grey|Watchdog.}}'''Feed'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция обнуляет время ожидания в режиме сторожевого пса. Функция может использоваться только в консольном клиенте. Функция должна исполняться периодически, чтобы пес не инициировал перезагрузку консольного клиента. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Watchdog.Sleep|Sleep]]&lt;br /&gt;
|form={{Grey|Watchdog.}}'''Sleep'''():''&amp;lt;Сторожевой пес удачно деактивирован 1 или 0 (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит выключение (деактивацию) сторожевого пса. Деактивация будет произведена автоматически в момент удаления объекта из системы, если он был в активном состоянии в момент удаления. Функция может использоваться только в консольном клиенте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Watchdog.Mode|Mode]]&lt;br /&gt;
|form={{Grey|Watchdog.}}'''Mode'''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут получает или изменяет режим сторожевого пса. Изменения можно производить даже если пес еще не активирован.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Watchdog.Active|Active]]&lt;br /&gt;
|form={{Grey|Watchdog.}}'''Active'''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут возвращает 1, если сторожевой пес активирован, иначе возвращает 0. Атрибут доступен только для чтения.&lt;br /&gt;
}}&lt;br /&gt;
{{function footer}}&lt;br /&gt;
&lt;br /&gt;
== Функции криптографии ==&lt;br /&gt;
Криптографическое функции используются для кодирования информации при пересылке по ненадежным каналам, либо нахождения контрольных сумм или хэшей, используемых в работе с web стандартами.&lt;br /&gt;
{{function header}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[CreateKeySchedule]]&lt;br /&gt;
|form='''CreateKeySchedule'''(''&amp;lt;Стандарт кодирования (STRING)&amp;gt;'',''&amp;lt;Ключ (пароль) (STRING,BUFFER)&amp;gt;''{{Optional|,&amp;lt;Для декодирования (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Параметр кодировщика (BUFFER)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция позволяет создать из текстового ключа объект, необходимый для кодирования или декодирования информации с помощью этого ключа. В дальнейшем этот объект может использоваться для вызова функций кодирования [[Encrypt]] или декодирования [[Decrypt]]. Первый аргумент задает стандарт кодирования, к примеру, &amp;quot;AES256&amp;quot;.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Encrypt]]&lt;br /&gt;
|form='''Encrypt'''(''&amp;lt;Стандарт кодирования (STRING)&amp;gt;'',''&amp;lt;Информация для кодирования (STRING,BUFFER)&amp;gt;''{{Optional|,''&amp;lt;Параметр кодировщика (расписание кодирования) (BUFFER)&amp;gt;'',&amp;lt;Источник в формате UTF-16 (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Закодированная строка или 1&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит кодирование строки или буфера по стандарту, заданному первым аргументом. Размер строки или буфера должен быть кратен определенному количеству байт, заданному стандартом кодирования (к примеру, для AES-256, это число 16); если размер не будет кратен нужному количеству байт, функция вызове исключение. Нужно иметь в виду, что для UTF-16 строк, размер в байтах в два раза больше, чем количество символов в строке. Если первым параметром служит буфер, в результате функция возвратит единицу, а содержимое буфера будет закодировано, если первым параметром была передана строка, функция возвратит ANSI строку.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Decrypt]]&lt;br /&gt;
|form='''Decrypt'''(''&amp;lt;Стандарт кодирования (STRING)&amp;gt;'',''&amp;lt;Информация для декодирования (STRING,BUFFER)&amp;gt;''{{Optional|,''&amp;lt;Параметр декодировщика (расписание декодирования) (BUFFER)&amp;gt;'',&amp;lt;Результат в формате UTF-16 (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Декодированная строка или 1&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит декодирование строки или буфера, закодированных по стандарту, заданному первым аргументом. Размер строки или буфера должен быть кратен количеству байт, заданному стандартом кодирования (к примеру, для AES-256, это число 16); если размер не будет кратен нужному количеству байт, функция вызове исключение. Нужно иметь в виду, что для UTF-16 строк, размер в байтах в два раза больше, чем количество символов в строке. Если первым параметром служит буфер, в результате функция возвратит единицу, а содержимое буфера будет декодировано, если первым параметром была передана строка, функция возвратит ANSI или UTF-16 строку, в зависимости от значения третьего аргумента.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[CalculateHash]]&lt;br /&gt;
|form='''CalculateHash'''(''&amp;lt;Информация для нахождения контрольной суммы (STRING,BUFFER)&amp;gt;''{{Optional|,&amp;lt;Алгоритм (STRING)&amp;gt;{{Default|{{Eq}}&amp;quot;INTERNAL&amp;quot;}},&amp;lt;Завершающий блок (INT)&amp;gt;{{Default|{{Eq}}1}},&amp;lt;Сумма или состояние предыдущего блока (STRING,BUFFER)&amp;gt;,&amp;lt;Дополнительный параметр (STRING)&amp;gt;{{Default|{{Eq}}&amp;quot;&amp;quot;}}}}):''&amp;lt;Сумма или текущее состояние (STRING,BUFFER)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=1&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция подсчет контрольной суммы или хэша буфера или строки по указанному алгоритму, имеется также возможность подсчитать сумму нескольких блоков, как единого целого, вызывая эту функцию для каждого из блоков один раз. В список алгоритмов входят такие, как &amp;quot;MD5&amp;quot;, &amp;quot;CRC32&amp;quot;, &amp;quot;SHA-1&amp;quot; и пр.&lt;br /&gt;
}}&lt;br /&gt;
{{function footer}}&lt;br /&gt;
&lt;br /&gt;
== Функции архивации ==&lt;br /&gt;
Функции архивации помогают распаковать или упаковать информацию без необходимости использования внешних исполняемых файлов или библиотек. [[StreamCompress]] и [[StreamDecompress]] упаковывают и распаковывают поток данных, не связанный с файлами на диске, позволяя сжимать информацию передаваемую по WEB или создавать сжатые данные произвольного размера.&lt;br /&gt;
{{function header}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[StreamCompress]]&lt;br /&gt;
|form='''StreamCompress'''(''&amp;lt;Данные для упаковки (STRING,BUFFER,TEXT)&amp;gt;''{{Optional|,&amp;lt;Алгоритм (STRING)&amp;gt;{{Default|{{Eq}}&amp;quot;ZLIB&amp;quot;}},&amp;lt;Уровень (INT)&amp;gt;{{Default|{{Eq}}6}},&amp;lt;Завершающий блок (INT)&amp;gt;{{Default|{{Eq}}1}}{{ByRef|,&amp;lt;Словарь упаковки&amp;gt;}}}}):''&amp;lt;Результат упаковки (STRING,BUFFER)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит упаковку блока данных по заданному алгоритму. Для последовательной упаковки частей одного большого блока данных, функцию необходимо вызвать несколько раз с каждой частью блока данных.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[StreamDecompress]]&lt;br /&gt;
|form='''StreamDecompress'''(''&amp;lt;Данные для распаковки (STRING,BUFFER)&amp;gt;''{{Optional|,&amp;lt;Алгоритм (STRING)&amp;gt;{{Default|{{Eq}}&amp;quot;ZLIB&amp;quot;}},&amp;lt;Завершающий блок (INT)&amp;gt;{{Default|{{Eq}}1}}{{ByRef|,&amp;lt;Словарь распаковки или общий размер упакованного блока (INT,?)&amp;gt;}}}}):''&amp;lt;Результат распаковки (STRING,BUFFER)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит распаковку блока данных по заданному алгоритму. Для последовательной распаковки частей одного большого блока данных, функцию необходимо вызвать несколько раз с каждой частью блока данных.&lt;br /&gt;
}}&lt;br /&gt;
{{function footer}}&lt;br /&gt;
&lt;br /&gt;
== Функции штрихкодов и символов ==&lt;br /&gt;
Функции штрихкодов и символов позволяют создавать штрихкоды в виду картинок, которые затем можно добавить на форму, напечатать, вывести на web-странице и пр.&lt;br /&gt;
{{function header}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Generate1DBarcode]]&lt;br /&gt;
|form='''Generate1DBarcode'''(''&amp;lt;Тип штрихкода (STRING)&amp;gt;''{{ByRef|,&amp;lt;Ширина (INT)&amp;gt;,&amp;lt;Высота (INT)&amp;gt;}},''&amp;lt;Кодируемое сообщение (STRING)&amp;gt;''{{Optional|,&amp;lt;Установки (STRING)&amp;gt;}}):''&amp;lt;Результат (PICTURE)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция генерирует линейный штрихкод указанного типа с указанными размерами, если необходимо. Параметры генерации настраиваются с помощью дополнительных установок, если необходимо. Функция поддерживает следующие виды штрихкодов: '''Code 128''','''UPC''','''EAN''','''Code 39''','''ISBN''','''Code 93''','''ITF''' (Interleaved 2 of 5),'''MSI''','''Codabar'''.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Generate2DBarcode]]&lt;br /&gt;
|form='''Generate2DBarcode'''(''&amp;lt;Тип символа (STRING)&amp;gt;''{{ByRef|,&amp;lt;Ширина (INT)&amp;gt;,&amp;lt;Высота (INT)&amp;gt;}},''&amp;lt;Кодируемое сообщение (STRING)&amp;gt;''{{Optional|,&amp;lt;Установки (STRING)&amp;gt;}}):''&amp;lt;Результат (PICTURE)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=1&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция генерирует двумерный символ указанного типа с указанными размерами, если необходимо. Параметры генерации настраиваются с помощью дополнительных установок, если необходимо. Функция поддерживает следующие виды символов: '''PDF 417''', '''Aztec Code''', '''QR Code''', '''Data Matrix''', '''MaxiCode'''.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[CountBarcodeCRC]]&lt;br /&gt;
|form='''CountBarcodeCRC'''(''&amp;lt;Тип контрольной суммы (STRING)&amp;gt;'',''&amp;lt;Полное кодируемое сообщение (STRING)&amp;gt;''):''&amp;lt;Контрольная сумма (INT,STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция используется для случаев, когда кодируемое сообщение разделено на несколько символов (или штрихкодов), при этом необходима контрольная сумма всего сообщения, чтобы программа декодирования смогла проверить корректность результата.&lt;br /&gt;
}}&lt;br /&gt;
{{function footer}}&lt;br /&gt;
&lt;br /&gt;
== Функции среды исполнения ==&lt;br /&gt;
Данная группа функций используется для программного получения информации о разнообразных свойствах среды исполнения, запуска системных приложений и пр.&lt;br /&gt;
{{function header}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[SysExecNoConsole]]&lt;br /&gt;
|form='''SysExecNoConsole'''(''&amp;lt;Командная строка исполнения (STRING)&amp;gt;''{{Optional|,&amp;lt;Не возвращаться до завершения (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Код, возвращенный приложением (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит запуск приложения с параметрами в командной строке, подавляя создание консоли при запуске, приложение может находиться на сервере, в этом случае, оно сначала будет перенесено на локальный диск.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[SysExec]]&lt;br /&gt;
|form='''SysExec'''(''&amp;lt;Командная строка исполнения (STRING)&amp;gt;''{{Optional|,&amp;lt;Не возвращаться до завершения (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Код, возвращенный приложением (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит запуск приложения с параметрами в командной строке, приложение может находиться на сервере, в этом случае, оно сначала будет перенесено на локальный диск.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[SysExecNoConsoleLocal]]&lt;br /&gt;
|form='''SysExecNoConsoleLocal'''(''&amp;lt;Командная строка исполнения (STRING)&amp;gt;''{{Optional|,&amp;lt;Не возвращаться до завершения (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Код, возвращенный приложением (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит запуск приложения с параметрами в командной строке, подавляя создание консоли при запуске, приложение может находиться только на локальном компьютере, разбор командной строки не производится.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[SysExecLocal]]&lt;br /&gt;
|form='''SysExecLocal'''(''&amp;lt;Командная строка исполнения (STRING)&amp;gt;''{{Optional|,&amp;lt;Не возвращаться до завершения (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Код, возвращенный приложением (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит запуск приложения с параметрами в командной строке, приложение может находиться только на локальном компьютере, разбор командной строки не производится.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[SysExecServer]]&lt;br /&gt;
|form='''SysExecServer'''(''&amp;lt;Командная строка исполнения (STRING)&amp;gt;''{{Optional|,&amp;lt;Не возвращаться до завершения (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Код, возвращенный приложением (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит запуск приложения с параметрами в командной строке на стороне сервера, разбор командной строки не производится. Пользователь должен обладать административными правами для использования этой функции. Также нужно понимать, что запуск с флагом ожидания завершения (второй аргумент) приведет к &amp;quot;зависшей&amp;quot; сессии на сервере, если приложение не будет завершено. Этой функцией следует пользоваться в исключительных обстоятельствах и только когда поведение запускаемого приложения хорошо известно заранее.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[StdStreamsSysExec]]&lt;br /&gt;
|form='''StdStreamsSysExec'''(''&amp;lt;Командная строка исполнения (STRING)&amp;gt;'',{{ByRef|&amp;lt;Буфер с дескрипторами (BUFFER)&amp;gt;}}{{Optional|,&amp;lt;Не возвращаться до завершения (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Код, возвращенный приложением (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит запуск приложения с параметрами в командной строке, подавляя создание консоли при запуске, приложение может находиться на сервере, в этом случае, оно сначала будет перенесено на локальный диск. Переменная, заданная вторым аргументом, получает набор дескрипторов для манипуляции со стандартными потоками и самим приложением. Для закрытия дескрипторов должна быть использована функция [[StdStreamsCloseHandles]]&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[StdStreamsTransfer]]&lt;br /&gt;
|form='''StdStreamsTransfer'''(''&amp;lt;Текст для отправки (STRING)&amp;gt;'',''&amp;lt;Буфер с дескрипторами (BUFFER)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит выгрузку текста в StdIn потока запущенного ранее приложения.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[StdStreamsRead]]&lt;br /&gt;
|form='''StdStreamsRead'''(''&amp;lt;Буфер с дескрипторами (BUFFER)&amp;gt;''{{Optional|,&amp;lt;StdErr поток (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Полученный текст (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит получение текста из StdOut или StdErr потоков запущенного ранее приложения.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[StdStreamsCloseHandles]]&lt;br /&gt;
|form='''StdStreamsCloseHandles'''(''&amp;lt;Буфер с дескрипторами (BUFFER)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция закрывает дескрипторы, полученные ранее при запуске приложения. Если не пользоваться этой функцией, в системе будет наблюдаться утечка ресурсов. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[StdStreamsApplicationExited]]&lt;br /&gt;
|form='''StdStreamsApplicationExited'''(''&amp;lt;Буфер с дескрипторами (BUFFER)&amp;gt;''):''&amp;lt;Завершена ли работа приложения (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция проверяет, завершена ли работа приложения, идентифицируемого дескрипторами, полученными при его запуске.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[StdStreamsTerminateApplication]]&lt;br /&gt;
|form='''StdStreamsTerminateApplication'''(''&amp;lt;Буфер с дескрипторами (BUFFER)&amp;gt;''):''&amp;lt;Приложение было завершено (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит попытку завершить работу приложения, идентифицируемого дескрипторами, полученными при его запуске.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[SysEmulateKeystroke]]&lt;br /&gt;
|form='''SysEmulateKeystroke'''(''&amp;lt;Виртуальный код клавиши (INT)&amp;gt;'',''&amp;lt;Произведено нажатие (INT)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция эмулирует нажатие или отпускание клавиши по ее виртуальному коду. Эмуляция производится средствами системы и выполняется даже если окно клиента не является активным окном.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[SysParamCount]]&lt;br /&gt;
|form='''SysParamCount'''():''&amp;lt;Количество параметров командной строки клиента (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает количество параметров, которые были переданы в командной строке при запуске клиента.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[SysParam]]&lt;br /&gt;
|form='''SysParam'''(''&amp;lt;Номер параметра (INT)&amp;gt;''):''&amp;lt;Параметр командной строки (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает параметр командной строки запуска клиента с требуемым номером.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[SysSetEnvValue]]&lt;br /&gt;
|form='''SysSetEnvValue'''(''&amp;lt;Имя переменной (STRING)&amp;gt;'',''&amp;lt;Значение переменной (STRING)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция изменяет переменную системного окружения (environment)&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[SysGetEnvValue]]&lt;br /&gt;
|form='''SysGetEnvValue'''(''&amp;lt;Имя переменной (STRING)&amp;gt;''):''&amp;lt;Значение переменной (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает значение переменной системного окружения (environment). Если переменная не была установлена, будет возвращена пустая строка.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[CopyFileToTemp]]&lt;br /&gt;
|form='''CopyFileToTemp'''(''&amp;lt;Файл на сервере (STRING)&amp;gt;''):''&amp;lt;Путь и имя файла в локальной временной папке (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция копирует файл во временную папку, отдавая его путь и имя. Исходный файл может находиться на сервере или локальном диске.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ClipboardGetText]]&lt;br /&gt;
|form='''ClipboardGetText'''({{Optional|&amp;lt;Формат текста буфера (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Текст из буфера или пустая строка (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает текст из буфера обмена операционной системы в требуемом формате. При ошибке или отсуствии нужного формата, функция возвращает пустую строку.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ClipboardPutText]]&lt;br /&gt;
|form='''ClipboardPutText'''(''&amp;lt;Текст (STRING)&amp;gt;''{{Optional|,&amp;lt;Формат текста буфера (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Удачно изменен системный буфер (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция помещает текст в буфер обмена операционной системы в требуемом формате.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ExitProgram]]&lt;br /&gt;
|form='''ExitProgram'''({{Optional|&amp;lt;Вопрос о сохранении данных (INT)&amp;gt;{{Default|{{Eq}}1}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция позволяет завершить выполнения клиента, по умолчанию, создавая запрос о сохранении текущих форм, требующих сохранения. Все незавершенные транзакции будут либо отменены, либо приняты. Событие [[OnSystemExit]] может отменить действие этой функции.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[CloseProgram]]&lt;br /&gt;
|form='''CloseProgram'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция завершает выполнение клиента без каких-либо дополнительных предупреждений и вопросов. Все незавершенные транзации будут отменены в следствии разрыва связи клиентом. Событие [[OnSystemExit]] не будет вызвано.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[RestartProgram]]&lt;br /&gt;
|form='''RestartProgram'''({{Optional|&amp;lt;Мгновенный перезапуск (INT)&amp;gt;{{Default|{{Eq}}1}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция может использоваться только для консольного клиента. Если аргумент равен 1, функция завершает выполнение клиента без каких-либо дополнительных предупреждений и вопросов. Все незавершенные транзации будут отменены в следствии разрыва связи клиентом. Событие [[OnSystemExit]] не будет вызвано. В случае, если аргумент равен 0, функция закрывает транзакции корректным образом, событие [[OnSystemExit]] может отменить действие этой функции. После завершения работы клиента, будет произведена попытка его повторного запуска.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[sysIsTerminalMode]]&lt;br /&gt;
|form='''sysIsTerminalMode'''():''&amp;lt;Клиент работает в терминальном режиме (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция проверяет, запущен ли текущий клиент в терминальном режиме (1), либо в режиме локального компьютера (0).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[sysTerminalGetComputerName]]&lt;br /&gt;
|form='''sysTerminalGetComputerName'''():''&amp;lt;Наименование клиентского компьютера (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция находит наименование клиентского компьютера, с которого он осуществляет работу на терминальном сервере. Если работа не ведется на терминальном сервере, будет возвращена пустая строка.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[sysLowVideoMemoryMode]]&lt;br /&gt;
|form='''sysLowVideoMemoryMode'''({{Optional|&amp;lt;Включить режим экономия видеопамяти (INT)&amp;gt;}}):''&amp;lt;Состояние режима экономии видеопамяти (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает или/и изменяет состояние режима экономии видеопамяти (рекомендуется для терминальных клиентов).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[MainWindowCaption]]&lt;br /&gt;
|form='''MainWindowCaption'''({{Optional|&amp;lt;Заголовок основного окна клиента (STRING)&amp;gt;}}):''&amp;lt;Текущее заголовок основного окна (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция изменяет заголовок основного окна клиента на необходимый.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ReturnToForeground]]&lt;br /&gt;
|form='''ReturnToForeground'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция делает приложение активным и возвращает ему фокус. Функция может пригодиться после модального вызова внешних библиотек или приложений, которые выводят информацию или окна на экран. После завершения такого приложения (в зависимости от его функциональности) окно программы может не быть активировано корректно или вообще быть скрыто.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[CurrentFormCaption]]&lt;br /&gt;
|form='''CurrentFormCaption'''(''&amp;lt;Заголовок текущей формы клиента (STRING)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция изменяет заголовок текущей формы клиента на необходимый. Функция является аналогом функции [[Form.Caption]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ComputerName]]&lt;br /&gt;
|form='''ComputerName'''():''&amp;lt;Сетевое имя машины клиента (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает сетевое имя машины (компьютера), на которой запущен клиент.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[UserName]]&lt;br /&gt;
|form='''UserName'''():''&amp;lt;Имя учетной записи пользователя на текущей машине (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает имя учетной записи, под которой работает пользователь на текущей машине (компьютере).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ServerUserName]], '''LogonName'''&lt;br /&gt;
|form='''ServerUserName'''():''&amp;lt;Имя учетной записи сервера базы данных (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает имя учетной записи сервера базы данных под которым работает клиент, если клиент не зарегистрирован на сервере базы данных (локальный клиент), функция может возвратить пустую строку.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[IsDBAdministrator]]&lt;br /&gt;
|form='''IsDBAdministrator'''():''&amp;lt;Уровень административных полномочий клиента (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция отдает 0, если клиент зарегистрирован на сервере в режиме обычного пользователя, 1 -- в режиме ограниченного администратора, и 2 -- в режиме администратора (может выполнять привилегированные команды, редактировать учетные записи пользователей и пр.). &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[IsSlowConnection]]&lt;br /&gt;
|form='''IsSlowConnection'''():''&amp;lt;Используется медленное соединение (необходима оптимизация) (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция отдает 1, если для базы данных активен режим &amp;quot;медленное соединение&amp;quot;. В этом режиме клиент будет оптимизировать некоторые запросы к серверу (пытаться уменьшить количество запросов за счет включения нескольких запросов в один), данная функция может служить флагом для программной оптимизации или даже загрузки другого интерфейса для пользователей, работающих по Интернету, а не по локальной сети.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ServerName]]&lt;br /&gt;
|form='''ServerName'''():''&amp;lt;Внутреннее наименование сервера БД (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает короткое наименование сервера базы данных. Если клиент не зарегистрирован на сервере базы данных (локальный клиент), функция возвратит пустую строку.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ServerDescription]]&lt;br /&gt;
|form='''ServerDescription'''():''&amp;lt;Внутреннее описание сервера БД (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает описание сервера базы данных. Если клиент не зарегистрирован на сервере базы данных (локальный клиент), функция возвратит пустую строку.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[DBMSVersion]]&lt;br /&gt;
|form='''DBMSVersion'''():''&amp;lt;Версия ПО СУБД сервера базы данных (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает версию ПО СУБД, которая используется сервером базы данных.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GetTempDirectory]]&lt;br /&gt;
|form='''GetTempDirectory'''():''&amp;lt;Папка временных файлов (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает путь к папке временных файлов. Вне зависимости от прав пользователя в системе, он имеет доступ к чтению и записи внутри такой папки. Папка находится на локальном компьютере.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GetDatabaseDirectory]]&lt;br /&gt;
|form='''GetDatabaseDirectory'''():''&amp;lt;Путь к файлам текущей локальной конфигурации (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция работает только для локальных клиентов (не связанных с сервером базы данных), и возвращает локальный (или сетевой) путь к файлам текущей конфигурации.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GetBinaryDirectory]]&lt;br /&gt;
|form='''GetBinaryDirectory'''():''&amp;lt;Путь к папке, из которой запущен исполняемый файл клиента (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает путь к папке, из которой запущен исполняемый файл клиента (консольного или визуального).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GetUserDirectory]]&lt;br /&gt;
|form='''GetUserDirectory'''():''&amp;lt;Путь к личной папке пользователя (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает путь к личной папке пользователя, при наличии подключения к серверу, этот путь указывает на папку на сервере, и выглядит &amp;lt;code&amp;gt;UserSettings\&amp;lt;Имя пользователя&amp;gt;\&amp;lt;/code&amp;gt;, если клиент работает без подключения к серверу, этот путь указывает на локальную папку, и будет выглядеть &amp;lt;code&amp;gt;&amp;lt;Путь с файлам конфигурации&amp;gt;\UserSettings\&amp;lt;Имя пользователя&amp;gt;\&amp;lt;/code&amp;gt;. В данной папке можно хранить установки, предпочтения и другие файлы, связанные с текущим пользователем. Клиент также сохраняет свои установки форм и печати внутри этой папки, поэтому, нельзя рассчитывать, что она будет пустой.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[CurrentLanguage]]&lt;br /&gt;
|form='''CurrentLanguage'''():''&amp;lt;Код текущего языка по умолчанию (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает код текущего языка по умолчанию. Язык по умолчанию используется в функциях прописи и подобных, где есть возможность кодирования на разных языках. Код языка обычно состоит из двух букв (&amp;lt;code&amp;gt;RU,EN...&amp;lt;/code&amp;gt;). См. также функцию [[SelectLanguage]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[SelectLanguage]]&lt;br /&gt;
|form='''SelectLanguage'''(''&amp;lt;Код языка по умолчанию (STRING)&amp;gt;''):''&amp;lt;Код текущего языка по умолчанию (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция изменяет код текущего языка по умолчанию, возвращая предыдущий. Язык по умолчанию используется в функциях прописи и подобных, где есть возможность кодирования на разных языках. Код языка обычно состоит из двух букв (&amp;lt;code&amp;gt;RU,EN...&amp;lt;/code&amp;gt;). &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[OSVersion]]&lt;br /&gt;
|form='''OSVersion'''():''&amp;lt;Версия операционной системы (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает версию операционной системы, под которой запущен клиент в виде &amp;lt;code&amp;gt;&amp;lt;Тип&amp;gt; Version X.X (Build XXXX: &amp;lt;Название пакета обновления&amp;gt;)&amp;lt;/code&amp;gt; (к примеру '''Windows Version 6.1 (Build 7601: Service Pack 1)''').&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ProgramVersion]]&lt;br /&gt;
|form='''ProgramVersion'''():''&amp;lt;Версия клиента (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает текущую версию клиента в виде &amp;lt;code&amp;gt;X.X (Build: XXXXXX)&amp;lt;/code&amp;gt; (к примеру '''1.1 (Build: 190511)'''). Функция работает как для консольных, так и для визуальных клиентов.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ProgramMode]]&lt;br /&gt;
|form='''ProgramMode'''():''&amp;lt;Тип клиента (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает код типа клиента текущей сессии. 0 -- консольный режим, 1 -- визуальный клиент.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ProgramArchitecture]]&lt;br /&gt;
|form='''ProgramArchitecture'''():''&amp;lt;Тип архитектуры приложения клиента (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает тип архитектуры приложения клиента (к примеру, '''x64''' или '''x86''').&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[PointerSize]]&lt;br /&gt;
|form='''PointerSize'''():''&amp;lt;Размер системного указателя в байтах (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает размер системного указателя в байтах. Для x86 размер равен 4, для x64 размер равен 8.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ProjectVersion]]&lt;br /&gt;
|form='''ProjectVersion'''():''&amp;lt;Номер сборки проекта (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает номер сборки проекта (конфигурации) в виде &amp;lt;code&amp;gt;Build: XXXX&amp;lt;/code&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ProjectName]], '''DBCaption'''&lt;br /&gt;
|form='''ProjectName'''():''&amp;lt;Наименование проекта (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает наименование проекта (конфигурации), как оно было задано в Студии.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[DBDescription]]&lt;br /&gt;
|form='''DBDescription'''():''&amp;lt;Описание проекта (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает описание проекта (конфигурации), как оно было задано в Студии. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ProjectGUID]]&lt;br /&gt;
|form='''ProjectGUID'''():''&amp;lt;GUID проекта (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает GUID проекта (конфигурации) в виде &amp;lt;code&amp;gt;{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}&amp;lt;/code&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[UnsupportedServerFeatures]]&lt;br /&gt;
|form='''UnsupportedServerFeatures'''():''&amp;lt;Возможности, не поддерживаемые сервером (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает строку с кодами возможностей, не поддерживаемых текущим сервером базы данных. Некоторые серверы могут не поддерживать все возможности, предоставляемые программой, в этом случае, при выполнении запроса к серверу, будет создаваться исключение и запрос не будет выполнен. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[IsAsyncExecutionMode]]&lt;br /&gt;
|form='''IsAsyncExecutionMode'''():''&amp;lt;Текущий контекст асинхронный 1 или 0 (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает 1, если исполнение производится внутри [[Студия/Визуальные события|асинхронного]] визуального события, иначе будет возвращен 0.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[IsRootThread]]&lt;br /&gt;
|form='''IsRootThread'''():''&amp;lt;Результат 0 или 1 (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает 1, если текущая программа исполняется в корневом потоке, иначе будет возвращен 0.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[IsExecutingInSeparateThread]]&lt;br /&gt;
|form='''IsExecutingInSeparateThread'''():''&amp;lt;Результат 0 или 1 (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает 1, если текущая программа исполняется в потоке, созданном функцией [[Mutex.ExecuteFunctionInSeparateThread|ExecuteFunctionInSeparateThread]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[IsExecutingInSeparateProcess]]&lt;br /&gt;
|form='''IsExecutingInSeparateProcess'''({{OptionalByRef|&amp;lt;Идентификатор процесса (STRING)&amp;gt;}}):''&amp;lt;Результат 0 или 1 (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает 1, если текущая программа исполняется в процессе, созданном функцией [[Mutex.InitializeSeparateProcess|InitializeSeparateProcess]]. Также может получить идентификатор процесса, заданный при его создании. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[IsExecutingInExternalModule]]&lt;br /&gt;
|form='''IsExecutingInExternalModule'''({{OptionalByRef|&amp;lt;Путь и имя файла внешнего объекта (STRING)&amp;gt;}}):''&amp;lt;Результат 0 или 1 (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает 1, если текущая программа исполняется в контексте внешнего объекта (*.sfo). Также функция может получить имя файла объекта, с помощью которого, можно получить сам объект (см. [[ExternalObject.Load]]), если это необходимо. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ThreadSerial]]&lt;br /&gt;
|form='''ThreadSerial'''():''&amp;lt;Серийный номер (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает уникальный для данной сессии серийный номер потока. Данный серийный номер может использоваться для получения временно-уникального имени семафора или папки для временного хранения данных.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ThreadCount]]&lt;br /&gt;
|form='''ThreadCount'''():''&amp;lt;Количество программных потоков в текущей сессии (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает количество программных потоков в текущей сессии. После запуска и инициализации клиента, эта функция будет возвращать 1.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GetThreadForm]]&lt;br /&gt;
|form='''GetThreadForm'''(''&amp;lt;Серийный номер потока (INT)&amp;gt;''):''&amp;lt;Верхнее окно потока (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция объект формы для верхнего окна потока, заданного его серийным номером, если поток с указанным серийным номером отсутствует, функция возвращает пустое значение.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GetInstalledPrinters]]&lt;br /&gt;
|form='''GetInstalledPrinters'''():''&amp;lt;Список принтеров системы (LIST)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает список текущих принтеров системы. Значениями списка будут строки с наименованиями принтеров, имена списка будут представлены в виде &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;
{{function entry&lt;br /&gt;
|name=[[GetDefaultPrinter]]&lt;br /&gt;
|form='''GetDefaultPrinter'''():''&amp;lt;Имя принтера по умолчанию (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает наименование принтера, заданного в системе по умолчанию, либо пустую строку, если такого принтера не существует.&lt;br /&gt;
}}&lt;br /&gt;
{{function footer}}&lt;br /&gt;
&lt;br /&gt;
== Внешний загружаемый объект ==&lt;br /&gt;
Внешние объекты представляют собой файлы с расширением '''sfo''', созданные в [[Общая информация и интерфейс Студии|Студии]]. Файл ''sfo'' является архивом, и содержит набор модулей, форм, таблиц или бинарных файлов, необходимых для выполнения какого-то действия (обработки, отчета и пр.), помещение которого в основном проект по каким-то причинам неудобно или нецелесообразно. Такой внешний объект можно загрузить из главного меню, но иногда необходимо получить программный доступ к файлам объекта, либо запустить модуль и форму объекта из основного проекта. При работе с внешними объектами, полезно знать:&lt;br /&gt;
* Файл внешнего объекта находится в памяти системы, пока открыт, по крайней мере, один модуль или одна форма из него, либо существуют переменные, содержащие данный объект. Если объект находится памяти (даже если его открыл пользователь), функция [[ExternalObject.Load]] не будет вызывать его повторной загрузки с диска или сервера, а просто увеличит внутренний счетчик обращений к нему.&lt;br /&gt;
* Путь к файлу задается стандартным образом (элементы пути отделяются помощью знаков '''\'''), однако, для элементов пути внутри файла используются уже знаки '''/''' (см. [[Имена файлов]]). К примеру &amp;lt;code&amp;gt;c:\Обработки\Обрабока.sfo/Modules/FreeForms/Таблицы/Table.sft&amp;lt;/code&amp;gt;. Для загрузки других модулей и форм объекта из форм самого объекта системный путь к файлу ''sfo'' можно опустить (пример: &amp;lt;code&amp;gt;/Modules/FreeForms/Таблицы/Table.sft&amp;lt;/code&amp;gt;), если модуль форма или таблица находятся в той же папке объекта, как и текущий модуль, из которого происходит запрос, достаточно указать знак '''/''', без какого либо дополнительного пути. Стандартную часть &amp;lt;code&amp;gt;/Modules/FreeForms&amp;lt;/code&amp;gt; можно пустить, но путь всегда должен начитаться на знак '''/'''.&lt;br /&gt;
* См. также функцию [[IsExecutingInExternalModule]], позволяющую определить среду исполнения для внешних объектов.&lt;br /&gt;
&lt;br /&gt;
{{function header}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ExternalObject.FileName|FileName]]&lt;br /&gt;
|form={{Grey|ExternalObject.}}'''FileName''':''&amp;lt;Путь и имя файла внешнего объекта (STRING)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут позволяет получить путь и имя файла внешнего объекта. Объект должен быть загруженным.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ExternalObject.Load|Load]]&lt;br /&gt;
|form={{Grey|ExternalObject.}}'''Load'''(''&amp;lt;Путь и имя файла внешнего объекта (STRING)&amp;gt;''):''&amp;lt;Загруженный внешний объект (EXTERNALOBJECT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция загружает (или находит в системе) внешний объект и отдает его, как результат. Если в процессе загрузки произошла ошибка, функция вызывает исключение. Функция может быть вызвана для интерфейса ExternalObject. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ExternalObject.DoesFileExist|DoesFileExist]]&lt;br /&gt;
|form={{Grey|ExternalObject.}}'''DoesFileExist'''(''&amp;lt;Путь и имя файла внутри объекта (STRING)&amp;gt;''):''&amp;lt;Существует ли указанный файл (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция проверяет наличие произвольного файла внутри загруженного внешнего объекта. При указании пути используется разделитель '''/''', начальная часть пути ''Modules/FreeForms'' обязательна к указанию, если файл находится внутри этой ветки (к примеру: &amp;lt;code&amp;gt;Modules/FreeForms/Таблицы/Table.sft&amp;lt;/code&amp;gt;).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ExternalObject.LoadFileNames|LoadFileNames]]&lt;br /&gt;
|form={{Grey|ExternalObject.}}'''LoadFileNames'''(''&amp;lt;Путь и маска для выборки файлов (STRING)&amp;gt;''{{Optional|,&amp;lt;Включать вложенные папки (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Список с файлами выборки (LIST)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает список файлов внутри загруженного внешнего объекта с указанным путем и маской.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ExternalObject.FileToString|FileToString]]&lt;br /&gt;
|form={{Grey|ExternalObject.}}'''FileToString'''(''&amp;lt;Путь и имя файла файла внутри объекта (STRING)&amp;gt;''{{Optional|,&amp;lt;Кодовая страница (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Результат (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция загружает указанный файл внешнего объекта в строку, используя указанную кодовую страницу.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ExternalObject.FileToBuffer|FileToBuffer]]&lt;br /&gt;
|form={{Grey|ExternalObject.}}'''FileToBuffer'''(''&amp;lt;Путь и имя файла файла внутри объекта (STRING)&amp;gt;''):''&amp;lt;Результат (BUFFER)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция загружает указанный файл внешнего объекта в буфер.&lt;br /&gt;
}}&lt;br /&gt;
{{function footer}}&lt;br /&gt;
&lt;br /&gt;
== Объект семафор и многозадачность ==&lt;br /&gt;
Семафор -- сложный объект, позволяющий реализовать совокупность методов, для синхронизацию в многозадачном режиме, выполнения частей кода в отдельных потоках и пр. Объект можно применять:&lt;br /&gt;
* Как именованный системный объект, позволяющий синхронизировать доступ к файлам и другим внешним ресурсам в пределах одной машины. Пока семафор существует в операционной системе, другая программа, запущенная на той же машине, а также другой программный поток, программы, создавшей семафор, не смогут получить к нему доступ (создать). Такой способ синхронизации позволяет избежать, к примеру, записи в один и тот же временный файл двумя копиями программы. Вторая копия программы, которая не смогла создать семафор с именем файла, может пытаться это сделать с другим именем до тех пор, пока не получится создать семафор.&lt;br /&gt;
* Как системное событие, использующееся для синхронизации между потоками в многозадачной среде. Событие имеет два состояния: установлено или сброшено, и позволяет организовать цикл ожидания состояния ''установлено''. Такие циклы используются, чтобы исключить паузу между поступлением команды из другого рабочего потока и началом ее выполнения. Существует также возможность создания цикла ожидания для нескольких семафоров одновременно.&lt;br /&gt;
* Как указатель на среду функции, создающийся в момент начала выполнения функции в отдельном потоке. Функции, выполняющиеся в отдельных потоках, являются подчиненными вызвавшему потоку, при завершении основного потока, система автоматически вызывает функцию [[Mutex.TerminateThread|TerminateThread]] для всех работающих в данных момент подчиненных потоков. Поток также завершается автоматически при завершении работы функции.&lt;br /&gt;
* Как указатель на среду процесса, создающийся в момент начала выполнения функции в отдельном процессе. Функции, выполняющиеся в отдельных процессах, могут использоваться для изолирования кода исполнения, к примеру когда внешняя библиотека (или OLE объект) работают со сбоями и могут испортить системную память, тем самым вызывая завершение с ошибкой всего процесса клиента. После инициализации режима с помощью функции [[Mutex.InitializeSeparateProcess|InitializeSeparateProcess]], процесс будет находиться в режиме ожидания исполнения, клиент же может периодически вызывать функцию [[Mutex.InterProcessExecuteFunction|InterProcessExecuteFunction]] для исполнения программы в ожидающем процессе. После удаления объекта семафора из системы, подчиненный процесс также будет завершен. Исполнение всегда происходит в синхронном режиме (функция ''InterProcessExecuteFunction'' ожидает окончания исполнения удаленной функции и только после этого возвращает результат), асинхронный режим для большей гибкости при работате планируется в будущем.&lt;br /&gt;
&lt;br /&gt;
{{function header}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Mutex.CreateMutex|CreateMutex]]&lt;br /&gt;
|form={{Grey|Mutex.}}'''CreateMutex'''(''&amp;lt;Имя семафора (STRING)&amp;gt;''):''&amp;lt;Ноль или новый объект семафора (INT,MUTEX)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция создает именованный семафор с указанным именем, либо возвращает ноль, если семафор с таким именем уже существует в системе. В момент, когда объект будет удален из системы, созданный семафор также удаляется.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Mutex.CheckMutex|CheckMutex]]&lt;br /&gt;
|form={{Grey|Mutex.}}'''CheckMutex'''(''&amp;lt;Имя семафора (STRING)&amp;gt;''):''&amp;lt;Существует ли семафор (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция проверяет, существует ли в системе именованный семафор с указанным именем. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Mutex.CreateEvent|CreateEvent]]&lt;br /&gt;
|form={{Grey|Mutex.}}'''CreateEvent'''({{Optional|&amp;lt;Начальное состояние (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Новый объект события (MUTEX)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция создает новое системное событие с возможным указанием его начального состояния. Событие может принимать два состояния: ''установлено'' и ''сброшено'', и может использоваться при вызове функций [[Mutex.WaitForEvent|WaitForEvent]] или [[Mutex.WaitForEvents|WaitForEvents]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Mutex.WaitForEvent|WaitForEvent]]&lt;br /&gt;
|form={{Grey|Mutex.}}'''WaitForEvent'''({{Optional|&amp;lt;Время ожидания в мс. (INT)&amp;gt;{{Default|{{Eq}}-1}}}}):''&amp;lt;0, если время закончилось, 1, если произошло событие (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция выполняет цикл ожидания для текущего события в течение указанного времени (по умолчанию, время не ограничено). Если событие произошло (было ''установлено'' функцией [[Mutex.SignalEvent|SignalEvent]]), функция возвращает 1 и автоматически сбрасывает состояние события.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Mutex.WaitForEvents|WaitForEvents]]&lt;br /&gt;
|form={{Grey|Mutex.}}'''WaitForEvents'''(''&amp;lt;Список событий (LIST)&amp;gt;''{{Optional|,&amp;lt;Время ожидания в мс. (INT)&amp;gt;{{Default|{{Eq}}-1}}}}):''&amp;lt;0, если время закончилось, иначе индекс произошедшего события (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция выполняет цикл ожидания для списка с событиями в течение указанного времени (по умолчанию, время не ограничено). Если одно из событий произошло (было ''установлено'' функцией [[Mutex.SignalEvent|SignalEvent]]), функция возвращает индекс этого события и автоматически сбрасывает его (и только его) состояние. Функция может быть вызвана для интерфейса Mutex.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Mutex.SignalEvent|SignalEvent]]&lt;br /&gt;
|form={{Grey|Mutex.}}'''SignalEvent'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция меняет состояние текущего события на ''установлено''.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Mutex.ResetEvent|ResetEvent]]&lt;br /&gt;
|form={{Grey|Mutex.}}'''ResetEvent'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция меняет состояние текущего события на ''сброшено''. Функция не рекомендуется к использованию (так как есть вероятность потерять одно событие), кроме как внутри конструкции блокировки объекта с помощью [[LockObject]] и проверке [[Mutex.EventState|EventState]] до ее вызова.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Mutex.EventState|EventState]]&lt;br /&gt;
|form={{Grey|Mutex.}}'''EventState'''():''&amp;lt;0, если сброшено, 1, если установлено (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает текущее состояние события, при этом состояние не изменяется.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Mutex.ExecuteFunctionInSeparateThread|ExecuteFunctionInSeparateThread]]&lt;br /&gt;
|form={{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;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция создает новый поток для указанной функции, поток будет создан, как подчиненный текущему и будет автоматически завершен, если выполнение функции завершится (в т.ч. из-за исключения), либо если основной поток будет завершен. При завершении подчиненного потока, система не ждет полного окончания завершения, так как оно может занять продолжительное время, если функция выполняет внешний вызов OLE и пр., чтобы убедиться, что поток завершен, можно использовать функцию [[Mutex.TerminateThread|TerminateThread]]. Функция может быть вызвана для интерфейса Mutex.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Mutex.TerminateThread|TerminateThread]]&lt;br /&gt;
|form={{Grey|Mutex.}}'''TerminateThread'''({{Optional|&amp;lt;Без ожидания (INT)&amp;gt;{{Default|{{Eq}}0}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция безусловно завершает выполнение подчиненного потока, с ожиданием окончания завершения, если необходимо. При завершении потока, будут выполнены все вложенные конструкции ''Finally'', как будто поток был завершен по требованию пользователя.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Mutex.IsThreadActive|IsThreadActive]]&lt;br /&gt;
|form={{Grey|Mutex.}}'''IsThreadActive'''():''&amp;lt;Исполняется ли текущий поток (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция проверяет, работает ли адресуемый текущим объектом подчиненный поток (1), либо он уже завершен (0).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Mutex.InitializeSeparateProcess|InitializeSeparateProcess]]&lt;br /&gt;
|form={{Grey|Mutex.}}'''InitializeSeparateProcess'''({{Optional|&amp;lt;Идентификатор процесса (STRING)&amp;gt;,&amp;lt;Скомпилированная функция или текст модуля (STRING, COMPILEDFUNCTION)&amp;gt;}}):''&amp;lt;Указатель на среду процесса (MUTEX)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция создает новый процесс для указанного модуля (или текущего, если модуль не указан). Процесс может быть создан как для визуального, так и для консольного клиента. После инициализации, процесс ожидает выполнения функций, доступных для указанного модуля. Процесс завершается автоматически, когда объект семаформа будет удален. Функция может быть вызвана для интерфейса Mutex.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Mutex.InterProcessExecuteFunction|InterProcessExecuteFunction]]&lt;br /&gt;
|form={{Grey|Mutex.}}'''InterProcessExecuteFunction'''(''&amp;lt;Имя функции (STRING)&amp;gt;''{{OptionalByRef|,&amp;lt;Аргумент 1&amp;gt;,&amp;lt;Аргумент 2&amp;gt;...}}):''&amp;lt;Результат исполнения функции&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция вызывает исполнение указанной функции в подчиненном процессе, созданном ранее функцией [[Mutex.InitializeSeparateProcess|InitializeSeparateProcess]], и возвращает ошибку или результат ее исполнения. При вызове в функцию разрешено передавать объекты произвольного вида (однако, есть определенные особенности для которых см. описание), изменяемые аргументы-переменные также могут быть обновлены после исполнения.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Mutex.InterProcessTimeout|InterProcessTimeout]]&lt;br /&gt;
|form={{Grey|Mutex.}}'''InterProcessTimeout'''({{Optional|&amp;lt;Тайм-аут в мс.&amp;gt;}}):''&amp;lt;Предыдущий тайм-аут в мс. (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция включает сторожевого пса для контроля зависания подчиненного процесса. Процесс будет считаться неработоспособным, если за указанное время основной поток исполнения ни разу не ответил на запрос о состоянии (основной поток создает такие ответы после исполнения каждой команды, а также в моменты бездействия).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[InterProcessServerTimeout]]&lt;br /&gt;
|form='''InterProcessServerTimeout'''({{Optional|&amp;lt;Тайм-аут в мс.&amp;gt;}}):''&amp;lt;Предыдущий тайм-аут в мс. (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция позволяет получать или изменять тайм-аут сторожевого пса родительского процесса на стороне подчиненного процесса. Это позволяет, к примеру, для более длительных операций увеличить тайм-аут или временно отключить его. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Mutex.TerminateProcess|TerminateProcess]]&lt;br /&gt;
|form={{Grey|Mutex.}}'''TerminateProcess'''({{Optional|&amp;lt;Без ожидания (INT)&amp;gt;{{Default|{{Eq}}0}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция безусловно завершает выполнение подчиненного процесса, с ожиданием окончания завершения, если необходимо.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Mutex.IsProcessActive|IsProcessActive]]&lt;br /&gt;
|form={{Grey|Mutex.}}'''IsProcessActive'''():''&amp;lt;Активен ли подчиненный процесс (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция проверяет, активен ли (не завершился ли) адресуемый текущим объектом подчиненный процесс.&lt;br /&gt;
}}&lt;br /&gt;
{{function footer}}&lt;br /&gt;
&lt;br /&gt;
{{Объекты}}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://sfsys.ru/index.php?title=%D0%A4%D0%BE%D1%80%D0%BC%D0%B0&amp;diff=5166</id>
		<title>Форма</title>
		<link rel="alternate" type="text/html" href="http://sfsys.ru/index.php?title=%D0%A4%D0%BE%D1%80%D0%BC%D0%B0&amp;diff=5166"/>
		<updated>2025-12-27T17:09:03Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{infobox object&lt;br /&gt;
|object=Form, Menu&lt;br /&gt;
|status=2&lt;br /&gt;
|create=[[Form (Interface)|Form]],[[Форма#Функции и атрибуты объекта главного меню|Menu]]...}}&lt;br /&gt;
{{HeadLinks|&lt;br /&gt;
* [[Main_Page|Начальная страница]]&lt;br /&gt;
* [[Общее_описание_языка|Общее описание]]&lt;br /&gt;
* [[Объекты]]}}&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&amp;lt;p&amp;gt;Объект '''форма''' используется для доступа к объектам формы, и позволяет менять их положение, текст, видимость, доступность и прочие свойства, объект также дает доступ к разнообразным визуальным свойствам форм (таким как заголовок окна, флаг изменения данных формы, редактируемый объект и пр.), позволяет сменить текущую форму, сохраняя все данные, измененные пользователем, вызывать визуальные события, сохранять или загружать состояние формы и пр. В большинстве случаев, объект формы используется при работе визуального клиента, однако, некоторые функции могут быть полезны также в консольном клиенте.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Объект формы оперирует внутрисистемным понятием формы, связанным с рабочим потоком. При создании, каждый поток имеет свой выделенный объект формы, даже если на экран не выведено визуальное окно с полями редактирования. При вызове функций, создающих новую модальную форму (к примеру, [[SelectObject]] или [[LoadModule]] в нужном режиме), в массив форм текущего потока добавляется дочерняя форма, при выводе табличных форм отчетов или тестовых файлов, в структуру  подчинения текущей формы также будет добавлена дочерняя форма с таблицей или текстом. Функции, типа [[Form.GetParentForm|GetParentForm]] или [[Form.GetChildForm|GetChildForm]] позволяют получать доступ к дочерним или родительским формам текущей формы. Каждая форма имеет свой серийный номер, уникальный в пределах текущей сессии для всех потоков клиента. Этот номер (доступный с помощью атрибута [[Form.SerialNumber|SerialNumber]]) можно использовать, к примеру, для создания уникальной идентификации текущей рабочей формы, в семафорах, именах файлов и пр.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Для работы со свойствами формы и свойствами элементов формы обычно используется прямое обращение к интерфейсу [[Form|Form]], к которому применимы все функции и атрибуты, применимые к объекту формы. При вызове таких функций, интерфейс будет указывать на текущую рабочую форму потока (к примеру, &amp;lt;code&amp;gt;Form.Control(&amp;quot;Таблица&amp;quot;)&amp;lt;/code&amp;gt;). Однако, интерфейс не хранит данных или ссылок, при помещении его в переменную и вызове в другом потоке, он будет указывать уже на другую форму, являющуюся рабочей для этого потока , поэтому, он применяется исключительно для работы с текущей формой, не имеет смысла его передача или хранение. Чтобы получить доступ к объекту текущей формы, который будет указывать на определенную форму вне зависимости от того, где произошел вызов, используйте, к примеру, функцию [[Form.ThisForm|ThisForm]]. Полученные с использованием интерфейса объекты элементов формы ([[Form.Control]]) уже являются самостоятельными объектами и могут передаваться в другие потоки.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Особым типом экранных форм является форма, открытая в режиме инструментария. Такие формы могут быть загружены как для текущего потока, так и для корневого потока. Формы в подобном режиме не имеют загруженного модуля, вся выполняемая работа должна происходить в обработчиках визуальных событий (к примеру, в обработчиках нажатия на кнопку). Формы обычно не имеют доступа к переменным модуля (так как они могут быть открыты в контексте разных модулей, поэтому, для хранения необходимых данных, может использоваться, к примеру, атрибут [[Form.Tag|Tag]], привязанный к определенному элементу формы, функции типа [[Form.StorageGetValue|StorageGetValue]], [[Form.StorageSetValue|StorageSetValue]], либо глобальные переменные. Формы, загруженные в режиме инструментария, для текущего потока будут закрыты по требованию пользователя, либо при закрытии самого потока. Формы, загруженные глобально, будут закрыты по требованию пользователя, либо при окончании работы системы.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Частным случаем открытия формы в режиме инструментария для текущего потока является режим всплывающего окна. В этом режиме форма существует только до тех пор, пока не потеряет фокус, после чего закрывается. Данный режим удобен для создания сложных всплывающих окон, когда простое меню ([[List.Select]]) не имеет достаточной гибкости для выполнения задуманной функции выбора.&amp;lt;/p&amp;gt;&lt;br /&gt;
===Порядок загрузки форм, и его влияние на доступность функций интерфейса в разные этапы загрузки===&lt;br /&gt;
Загрузка визуальных форм в визуальных и консольных клиентах происходит по следующему алгоритму (см. также описание [[LoadModule]]):&lt;br /&gt;
* Создание нового внутреннего объекта формы, подчиненной родительской, если создается модельное окно. Форма на этом этапе не имеет визуального представления на экране.&lt;br /&gt;
* Создание новых переменных для среды исполнения (''Param'', ''Option'', ''ModalResult'')&lt;br /&gt;
* Загрузка модуля формы в формате ''sfc'' (или ''sf'', если первый отсутствует). Если внешний файл уже загружался ранее и не изменялся с тех пор, загрузка будет производиться из внутреннего буфера, для оптимизации скорости загрузки.&lt;br /&gt;
* Выполнение загруженного модуля (который может создавать и изменять переменные, однако, визуальный контекст формы пока не доступен). На данном этапе возможно обращение к интерфейсу формы только для некоторых функций и атрибутов, к примеру, [[Form.Type|Type]], [[Form.IsFullyInitialized|IsFullyInitialized]], [[Form.Mode|Mode]], [[Form.Object|Object]] и пр. Если при выполнении модуля возникнет исключение, загрузка формы продолжена не будет.&lt;br /&gt;
* Выполнение функции [[OnOpen]], если она присутствует в загруженном модуле. Для выполняемого кода действуют ограничения, описанные в предыдущем пункте. Если при выполнении функции возникнет исключение, либо функция возвратит ноль, загрузка формы продолжена не будет. Данный этап является последним для консольных клиентов, также как и для для модулей, не имеющих форм.&lt;br /&gt;
** Для консольного клиента вызывается также функция [[OnConsoleWork]], если таковая присутствует.&lt;br /&gt;
** После того, как функция закончит работу, будет вызвана функция ''OnExit'', если она существует, если функция возвратит ноль, система снова вызовет [[OnConsoleWork]].&lt;br /&gt;
* Загрузка файла формы в формате ''sfgc'' (или ''sfg'', если первый отсутствует), см. выше информацию для ''sfc''. Если файл формы отсутствует, будет вызвано исключение и загрузка продолжена будет.&lt;br /&gt;
* Создание и заполнение визуального объекта формы из загруженного файла формы, при ошибке импорта, система создает исключение и загрузка продолжена будет.&lt;br /&gt;
* Выполнение функции [[OnPostOpen]], если она присутствует в загруженном модуле. См. комментарии для функции [[OnOpen]].&lt;br /&gt;
* Вывод формы на экран, создание кнопки на панели задач системы, вызов визуального события [[Студия/Визуальные события|''OnOpen'']], заполнение таблиц формы информацией из базы данных, вызов сопутствующих событий, типа [[OnInitLine]]. События, вызываемые на данном этапе, могут свободно оперировать всеми визуальными свойствами формы. Однако, функция [[Form.IsFullyInitialized|IsFullyInitialized]] будет по-прежнему возвращать ноль.&lt;br /&gt;
* Устанавливается флаг того, что форма полностью загружена, функция [[Form.IsFullyInitialized|IsFullyInitialized]] будет в дальнейшем возвращать единицу.&lt;br /&gt;
* При закрытии визуальной формы:&lt;br /&gt;
** Если на форме установлен флаг изменения, будет задан вопрос о целесообразности потери данных.&lt;br /&gt;
** Будет вызвано визуальное событие ''OnClose'' внутри которого можно отменить закрытие формы.&lt;br /&gt;
** Будет произведено автоматическое сохранение установок формы, если это предусмотрено ее свойствами.&lt;br /&gt;
** Будет произведено удаление визуальных элементов и объектов языка, связанных с формой.&lt;br /&gt;
===Наследование форм===&lt;br /&gt;
&amp;lt;p&amp;gt;При создании нового потока создается также новая виртуальная форма. В момент, когда происходит загрузка файла формы, форма становится визуальной. Если форма, в процессе работы, создает новые табличные ([[Table.Show]]) или текстовые формы, они будут ассоциированы с текущей формой, как дочерние. При закрытии текущей формы, текущий модуль и поток не будут закрыты до тех пор, пока не закрыты все дочерние табличные или иные формы. Это связано с тем, что табличная форма может иметь интерактивные элементы, обработка которых осуществляется с помощью функций локального модуля (см. к примеру, событие [[OnDoubleClick]]), удаление модуля из памяти сделало бы обработку таких событий невозможным. Если форма создает другую форму в модальном режиме (см. [[LoadModule]]), новая форма также становится дочерней формой текущей, и текущая форма будет недоступна для работы до тех пор, пока не закрыта новая модальная форма и все ее дочерние формы.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;В определенных случаях, такое сложное подчинение может создать некорректную ситуацию, когда для подчиненной формы были открыты табличные формы (печатные формы), не являющиеся интерактивными, форма была закрыта, однако система не позволяет пользователю продолжить работу с формой верхнего уровня, так как у подчиненной формы остались открытые табличные формы, что не позволило закрыть модуль подчиненной формы и отдать управление материнской. Это помешает работе пользователя. Чтобы избежать такой ситуации, можно использовать функцию [[Form.Destroy|Destroy]] вместо [[Form.Close|Close]] при закрытии формы. Это позволит перенести все созданные свободные табличные формы в подчинение родительской формы. Как альтернатива, можно либо использовать функцию [[Table.ShowOnParent]] вместо [[Table.Show]] при выводе печатных форм на экран.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Функции и атрибуты объекта формы или элемента формы==&lt;br /&gt;
Функции и атрибуты этой группы применяются к объекту формы или интерфейсу формы. Для получения объекта формы из объекта элемента формы, можно применить функцию [[Form.Form|&amp;lt;Элемент&amp;gt;.Form()]].&lt;br /&gt;
{{function header}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form (Interface)|Form]]&lt;br /&gt;
|form='''Form''':''&amp;lt;Интерфейс формы, по умолчанию обращающийся к текущей форме потока (INTERFACE)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Интерфейс формы позволяет использовать обычные функции, доступные для объекта формы. При работе с интерфейсом, он всегда указывает на текущую форму того потока, в котором он был вызван. Чтобы получить неизменяемую ссылку на текущую форму, используйте функцию [[Form.ThisForm|ThisForm]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.ThisForm|ThisForm]]&lt;br /&gt;
|form={{Grey|Form.}}'''ThisForm'''():''&amp;lt;Объект текущей формы потока (FORM)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция получает ссылку на текущую форму потока, если она была использована совместно с интерфейсом формы, либо на форму, связанную с текущим объектом (к примеру, если объект адресует визуальный элемент формы).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.IsForm|IsForm]]&lt;br /&gt;
|form={{Grey|Form.}}'''IsForm'''():''&amp;lt;Является ли визуальный объект формой (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция возвращает единицу, если визуальный объект адресует форму, иначе функция возвращает ноль (объект адресует элемент формы или макрос).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.ControlName|&amp;lt;Наименование элемента формы&amp;gt;]]&lt;br /&gt;
|form={{Grey|Form.}}'''&amp;lt;Наименование элемента формы&amp;gt;''':''&amp;lt;Визуальный объект формы по его наименованию (FORM)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает визуальный элемент текущей формы по его наименованию (наименование задается при редактировании формы в Студии, по умолчанию элементы не имеют наименований). Если визуальный элемент не существует, будет вызвано исключение. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.Control|Control]], '''ControlByName'''&lt;br /&gt;
|form={{Grey|Form.}}'''Control'''(''&amp;lt;Наименование визуального элемента с наименованием макроса, если необходимо (STRING)&amp;gt;''):''&amp;lt;Найденный визуальный элемент или ноль (FORM,INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция получает визуальный элемент текущей формы по его наименованию (наименование задается при редактировании формы в Студии, по умолчанию элементы не имеют наименований). При указании наименования, можно также указать наименование элемента макроса, в который включен искомый элемент. Наименование макроса следует первым, затем после точки задается наименование элемента. Если визуальный элемент не найден, функция возвращает ноль.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.AddControl|AddControl]]&lt;br /&gt;
|form={{Grey|Form.}}'''AddControl'''(''&amp;lt;Тип визуального элемента (INT)&amp;gt;''{{Optional|,&amp;lt;Имя элемента (STRING)&amp;gt;,&amp;lt;Значение элемента&amp;gt;,&amp;lt;Якоря элемента (INT)&amp;gt;}},''&amp;lt;Координаты элемента (STRING)&amp;gt;''{{Optional|,&amp;lt;Параметры элемента (LIST)&amp;gt;,&amp;lt;События элемента (LIST)&amp;gt;}}):''&amp;lt;Созданный визуальный элемент (FORM)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция создает и помещает на форму новый визуальный элемент с указанными параметрами и событиями.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.Type|Type]]&lt;br /&gt;
|form={{Grey|Form.}}'''Type'''():''&amp;lt;Тип формы (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция возвращает тип адресуемой объектом формы. Возможны следующие значения: -1 - форма не имеет визуального окна, либо окно пока не было создано, 0 - обычная визуальная форма, 1 - свободная табличная форма (SFT), 2 - свободная текстовая форма, 1000 - другая неизвестная форма. Атрибут может использоваться до инициализации формы и в консольном клиенте.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.ToolMode|ToolMode]]&lt;br /&gt;
|form={{Grey|Form.}}'''ToolMode'''():''&amp;lt;Тип формы инструментария (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция получает тип адресуемой формы. Возможные следующие значения: '''-1''' -- данная форма не загружена в режиме инструментария, '''0''' -- данная форма является глобальным инструментарием, '''1''' -- данная форма является локальным инструментарием, '''2''' -- данная форма загружена в режиме всплывающего окошка, '''10''' -- данная форма загружена в режиме модального диалога (не инструментальная форма). Функция может использоваться до инициализации формы и в консольном клиенте.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.Mode|Mode]]&lt;br /&gt;
|form={{Grey|Form.}}'''Mode'''():''&amp;lt;Режим загрузки формы (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция получает индекс рабочего режима формы. Возможные следующие значения: '''0''' -- обычный режим загрузки, '''1''' -- форма загружена в режиме выбора значения (см. [[SelectObject]], [[MassSelectObjects]]), '''2''' -- форма загружена в режиме инструментария или режиме диалога, '''3''' -- форма загружена в режиме редактирования объекта базы данных, '''4''' -- форма загружена в режиме просмотра объекта базы данных (редактирование запрещено). Функция может использоваться до инициализации формы и в консольном клиенте.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.MassSelectMode|MassSelectMode]]&lt;br /&gt;
|form={{Grey|Form.}}'''MassSelectMode'''():''&amp;lt;Форма загружена в режиме множественного выбора (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция возвращает единицу, если форма загружена в режиме множественного выбора (см. [[MassSelectObjects]]), иначе возвращается ноль. Функция может использоваться до инициализации формы и в консольном клиенте.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.IsActive|IsActive]]&lt;br /&gt;
|form={{Grey|Form.}}'''IsActive'''():''&amp;lt;Активная ли форма в данный момент (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция возвращает 1, если выбранная форма активна в данный момент (имеет фокус), иначе возвращается 0. Функция не может быть вызвана из интерфейса, так как интерфейс обычно указывает на активное окно потока, это может явиться причиной неверной логики.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.DoSelectObject|DoSelectObject]], '''SelectObject'''&lt;br /&gt;
|form={{Grey|Form.}}'''DoSelectObject'''(''&amp;lt;Выбранный объект (DB)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция работает для форм, загруженных в режиме выбора объекта (см. [[SelectObject]], [[MassSelectObjects]]) и позволяет программно эмулировать событие, когда клиент осуществил выбор объекта. В процессе фиксации выбора, для случая множественного выбора, система вызывает функцию выбора объекта, которая была задана в момент вызова [[MassSelectObjects]]. Для случая простого выбора ([[SelectObject]]) по окончании выбора форма будет закрыта.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.Object|Object]], '''Value''', '''EditObject'''&lt;br /&gt;
|form={{Grey|Form.}}'''Object''':''&amp;lt;Объект редактирования формы (DB)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут используется для форм, открытых в режиме редактирования или просмотра объекта базы данных ([[OpenObject]]) и позволяет получить редактируемый (или просматриваемых) в данный момент объект. Атрибут может использоваться до инициализации формы и в консольном клиенте.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.IsResizable|IsResizable]]&lt;br /&gt;
|form={{Grey|Form.}}'''IsResizable''':''&amp;lt;Режим изменения размеров элементов формы (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут возвращает или устанавливает режим изменения размеров всех элементов на форме при изменении размеров формы. 1 - изменение размеров разрешено, иначе запрещено. Атрибут используется только для загруженных визуальных форм.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.IsVisible|IsVisible]]&lt;br /&gt;
|form={{Grey|Form.}}'''IsVisible''':''&amp;lt;Форма отображается на экране (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут возвращает 1, если форма отображается на экране и 0 в другом случае (форма может быть загружена, но еще не выведена на экран). Атрибут используется только для загруженных визуальных форм.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.IsFullyInitialized|IsFullyInitialized]]&lt;br /&gt;
|form={{Grey|Form.}}'''IsFullyInitialized''':''&amp;lt;Форма загружена и инициализирована (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут возвращает 1, если форма загружена, выведена на экран и прошла полный цикл начальной инициализации (см. описание [[Форма]]), иначе возвращается ноль. Атрибут может использоваться до инициализации формы и в консольном клиенте.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.DisableControls|DisableControls]]&lt;br /&gt;
|form={{Grey|Form.}}'''DisableControls'''(''&amp;lt;Сделать недоступными элементы формы или подчиненные элементы элемента формы (INT)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция используется для группового изменения доступности всех элементов формы (при вызове функции с объектом формы) или элементов, находящихся на выбранной закладке группы страниц. Чтобы сделать элементы недоступными, первый аргумент должен быть равен единице, чтобы вернуть элементы в доступное состояние, нулю. Функция используется только для загруженный визуальных форм. Флаг доступности, используемый этой функцией, не изменяется функциями, типа [[Form.IsDisabled|IsDisabled]], поэтому, запрещая доступность формы с помощью этой функции можно не опасаться, что во время инициализации, отдельные элементы формы снова станут доступными.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.Caption|Caption]]&lt;br /&gt;
|form={{Grey|Form.}}'''Caption''':''&amp;lt;Заголовок формы (STRING)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет заголовок текущей формы. Атрибут используется только для загруженных визуальных форм.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.Count|Count]]&lt;br /&gt;
|form={{Grey|Form.}}'''Count'''():''&amp;lt;Количество форм верхнего уровня (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает количество форм верхнего уровня (включая виртуальную форму корневого потока). Обычно количество таких форм совпадает с количеством рабочих потоков в системе (даже если эти потоки не имеют визуальных форм на экране). Функция может использоваться до инициализации формы и в консольном клиенте.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.GetForm|GetForm]]&lt;br /&gt;
|form={{Grey|Form.}}'''GetForm'''(''&amp;lt;Индекс формы верхнего уровня (INT)&amp;gt;''):''&amp;lt;Объект формы (FORM)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает объект формы верхнего уровня по ее индексу. Объект виртуальной формы корневого потока всегда имеет индекс 1. Функция может использоваться до инициализации формы и в консольном клиенте.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.Handle|Handle]]&lt;br /&gt;
|form={{Grey|Form.}}'''Handle''':''&amp;lt;Системный указатель на окно (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут отдает системный указатель текущего окна или визуальный элемент окна. Указатель можно использовать в системных вызовах (к примеру, функция Windows ''PostMessage'').&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.SerialNumber|SerialNumber]]&lt;br /&gt;
|form={{Grey|Form.}}'''SerialNumber''':''&amp;lt;Порядковый (серийный) номер визуальной формы (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает порядковый (серийный) номер визуальной формы, который в дальнейшем может использоваться для ее уникальной идентификации. Номер является уникальным для текущей сессии для всех уже созданных или закрытых форм, а также форм, которые могут быть созданы в будущем. Атрибут используется только для загруженных визуальных форм, поток без визуальной формы не имеет серийного номера формы (но имеет серийный номер потока см. [[ThreadSerial]]). В одном потоке могут быть инициализированы несколько форм, каждая будет иметь свой уникальный номер. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.ChildrenCount|ChildrenCount]]&lt;br /&gt;
|form={{Grey|Form.}}'''ChildrenCount'''():''&amp;lt;Количество дочерних форм текущей формы (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает количество дочерних форм текущей формы. Форма может быть не выведена на экран. Дочерними формами могут быть, к примеру окна с текстом, окна с таблицами (печатные формы), формы, открытые в модальном режиме (см. [[LoadModule]]). В список дочерних форм не включаются формы, открытые в режиме окна инструментария (см. [[LoadToolForm]]). Функция может использоваться до инициализации формы и в консольном клиенте.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.GetChildForm|GetChildForm]]&lt;br /&gt;
|form={{Grey|Form.}}'''GetChildForm'''(''&amp;lt;Индекс дочерней формы (INT)&amp;gt;''):''&amp;lt;Объект дочерней формы (FORM)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает дочернюю форму текущей формы по ее индексу. Форма может быть не выведена на экран. Дочерними формами могут быть, к примеру окна с текстом, окна с таблицами (печатные формы), формы, открытые в модальном режиме (см. [[LoadModule]]). В список дочерних форм не включаются формы, открытые в режиме окна инструментария (см. [[LoadToolForm]]). Функция может использоваться до инициализации формы и в консольном клиенте.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.GetParentForm|GetParentForm]]&lt;br /&gt;
|form={{Grey|Form.}}'''GetParentForm'''():''&amp;lt;Родительская форма текущей формы или пустое значение (FORM)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает родительскую форму текущей формы, либо возвращает пустое значение, если текущая форма является формой верхнего уровня. Функция может использоваться до инициализации формы и в консольном клиенте.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.ToolWindowsCount|ToolWindowsCount]]&lt;br /&gt;
|form={{Grey|Form.}}'''ToolWindowsCount''':''&amp;lt;Количество дочерних форм в режиме инструментария (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция получает количество дочерних форм текущей формы, загруженных в режиме инструментария. Форма может быть не выведена на экран. Функция может использоваться до инициализации формы и в консольном клиенте.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.GetToolWindow|GetToolWindow]]&lt;br /&gt;
|form={{Grey|Form.}}'''GetToolWindow'''(''&amp;lt;Индекс дочерней формы, загруженной в режиме инструментария (INT)&amp;gt;''):''&amp;lt;Объект дочерней формы (FORM)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция получает дочернюю форму текущей формы, загруженную в режиме инструментария, по ее индексу. Форма может быть не выведена на экран. Функция может использоваться до инициализации формы и в консольном клиенте.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.SwitchToForm|SwitchToForm]]&lt;br /&gt;
|form={{Grey|Form.}}'''SwitchToForm'''(''&amp;lt;Наименование формы (STRING)&amp;gt;''{{Optional|,&amp;lt;Не загружать данные текущей формы в новую форму (INT)&amp;gt;{{Default|{{Eq}}0}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция позволяет загрузить форму с указанным именем вместо загруженной в данный момент формы. При загрузке формы, поля редактирования с одинаковыми именами будут сохранять свое содержимое. Для новых полей будет использовано содержимое по умолчанию (если они связаны с реквизитами объекта базы данных, они будут загружены из базы данных). Инициализацию визуальных элементов значениями текущей формы можно при необходимости отключить. Форма теряет признак полной загрузки ([[Form.IsFullyInitialized|IsFullyInitialized]]) на время загрузки.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.Close|Close]]&lt;br /&gt;
|form={{Grey|Form.}}'''Close'''({{Optional|&amp;lt;Задавать вопрос о сохранении данных (INT)&amp;gt;{{Default|{{Eq}}1}},&amp;lt;Запретить автоматическое сохранение настроек формы (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Закрытие разрешено, форма закрывается (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция выполняет закрытие текущей формы. Если форма имеет флаг изменения, будет задан вопрос о целесообразности закрытия формы без сохранения данных (вопрос можно отключить). Также можно запретить автоматическое сохранение настроек формы, если таковое предусмотрено установками формы. Пользователь может отказать в закрытии формы, либо обработчики событий, типа [[Студия/Визуальные события|''OnClose'']] могут отменить попытку закрытия. В случае, если форму не удалось закрыть, функция возвращает 0, иначе 1. В случае успешного выполнения функции, форма не будет закрыта до тех пор, пока текущий код не закончит исполнение, так как внутри кода могут быть другие вызовы к элементам и свойствам формы. Если код не возвращает управление слишком долгое время, система производит отмену закрытия формы, форма закрыта не будет. Из-за такого механизма защиты, рекомендуется после вызова функции закрытия сразу же выйти из исполняемого модуля.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.Destroy|Destroy]]&lt;br /&gt;
|form={{Grey|Form.}}'''Destroy'''({{Optional|&amp;lt;Задавать вопрос о сохранении данных (INT)&amp;gt;{{Default|{{Eq}}1}},&amp;lt;Запретить автоматическое сохранение настроек формы (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Закрытие разрешено, форма закрывается (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция выполняет закрытие текущей формы. Если форма имеет флаг изменения, будет задан вопрос о целесообразности закрытия формы без сохранения данных (вопрос можно отключить). Также можно запретить автоматическое сохранение настроек формы, если таковое предусмотрено установками формы. Пользователь может отказать в закрытии формы, либо обработчики событий, типа [[Студия/Визуальные события|''OnClose'']] могут отменить попытку закрытия. В случае, если форму не удалось закрыть, функция возвращает 0, иначе 1. В случае успешного выполнения функции, форма не будет закрыта до тех пор, пока текущий код не закончит исполнение, так как внутри кода могут быть другие вызовы к элементам и свойствам формы. Если код не возвращает управление слишком долгое время, система производит отмену закрытия формы, форма закрыта не будет. Из-за такого механизма защиты, рекомендуется после вызова функции закрытия сразу же выйти из исполняемого модуля. В отличии от функции [[Form.Close|Close]], данная функция также переносит все простые дочерние формы (таблицы, текстовые формы и пр.) в подчинение родительской формы, если таковая существует. Это позволяет закрыть модальный модуль текущей формы и перейти к исполнению формы-родителя. См. описание [[Форма]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.IsChanged|IsChanged]]&lt;br /&gt;
|form={{Grey|Form.}}'''IsChanged'''({{Optional|&amp;lt;Установить флаг изменения формы (INT)&amp;gt;}}):''&amp;lt;Текущий флаг изменения формы (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция получает, устанавливает или снимает флаг изменения формы. Флаг изменения может быть установлен только для загруженных визуальных форм, при изменении флага также изменяется заголовок формы (если он не изменялся программой), к заголовку добавляется признак изменения. После изменения также гарантирован вызов визуального события [[Студия/Визуальные события|''OnStatusChange'']], если таковое было объявлено.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.CallOnStatusChange|CallOnStatusChange]]&lt;br /&gt;
|form={{Grey|Form.}}'''CallOnStatusChange'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция инициирует визуальное событие [[Студия/Визуальные события|''OnStatusChange'']], если таковое было объявлено для формы. Функция не дожидается начала выполнения события, а просто устанавливает флаг в необходимости его выполнения. Функция используется только для загруженных визуальных форм. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.CurrentEventControl|CurrentEventControl]]&lt;br /&gt;
|form={{Grey|Form.}}'''CurrentEventControl'''():''&amp;lt;Элемент формы, инициировавший событие (FORM)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция получает элемент формы, который был активным в момент вызова текущего визуального события, если такой элемент не определен, функция возвращает пустое значение. Если она вызывается не из визуального события, результат функции не определен. Для [[Студия/Визуальные события|визуальных событий]] ''OnOpen'', ''OnReopen'', ''OnSaveRequest'' и ''OnStatusChange'', функция будет возвращать объект макроса, для которого было инициировано это событие, если событие инициировано для самой формы, функция возвратит пустое значение.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.FocusedControl|FocusedControl]]&lt;br /&gt;
|form={{Grey|Form.}}'''FocusedControl'''():''&amp;lt;Активный визуальный элемент формы или пустое значение (FORM,NOTHING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция применяется к загруженной визуальной форме и возвращает текущий активный визуальный элемент формы (элемент с фокусом), либо пустое значение, если ни один из визуальных элементов не является активным.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.StorageGetValue|StorageGetValue]]&lt;br /&gt;
|form={{Grey|Form.}}'''StorageGetValue'''(''&amp;lt;Наименование значения коллекции значений формы (STRING)&amp;gt;''):''&amp;lt;Значение по его наименованию&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает значение, привязанное к текущей форме по его наименованию. Форма может быть не загруженной и не визуальной. Программа может хранить произвольное количество значений в контексте формы, доступных по их наименованиям.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.StorageSetValue|StorageSetValue]]&lt;br /&gt;
|form={{Grey|Form.}}'''StorageSetValue'''(''&amp;lt;Наименование значения коллекции значений формы (STRING)&amp;gt;'',''&amp;lt;Значение&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция сохраняет значение, привязанное к текущей форме по его наименованию. Форма может быть не загруженной и не визуальной. Программа может хранить произвольное количество значений в контексте формы, доступных по их наименованиям.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.ContainsPeriodicalValues|ContainsPeriodicalValues]]&lt;br /&gt;
|form={{Grey|Form.}}'''ContainsPeriodicalValues''':''&amp;lt;Форма или элемент содержат периодические значения (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут применяется к форме или визуальному элементу, и позволяет получить или изменить флаг того, что элемент или форма содержат периодические значения базы данных. При установке этого флага к заголовку формы добавляется дата на которую отображаются реквизиты периодических значений. При загрузке формы в режиме редактирования, если по крайней мере одно из полей редактирования привязано к периодическому реквизиту, флаг будет установлен автоматически.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.SettingsLoaded|SettingsLoaded]]&lt;br /&gt;
|form={{Grey|Form.}}'''SettingsLoaded''':''&amp;lt;Для формы были загружены установки (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут применяется к форме, и позволяет получить флаг того, что для формы были загружены сохраненные ранее установки. Флаг заполняется сразу после загрузки визуальной формы до выполнения визуальных событий, и, к примеру, в момент исполнения [[Студия/Визуальные события|''OnOpen'']], если загрузка происходила, он уже установлен.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.CollectSettings|CollectSettings]]&lt;br /&gt;
|form={{Grey|Form.}}'''CollectSettings'''():''&amp;lt;Таблица с установками формы (TAB)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция применяется к загруженной визуальной форме и получает таблицу со всеми ее установками. Сбор информации на форме происходит по правилам, которые работают для обычного сохранения и загрузки установок, поэтому определенные элементы формы могут быть пропущены (элементы для которых установлен признак &amp;quot;не сохранять состояние в установках формы&amp;quot;, таблицы, привязанные к базе данных и пр.). Таблица-результат имеет следующие столбцы: '''ControlType''', '''ControlName''', '''Value''', '''Selected''', '''Tag'''.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.ControlsToString|ControlsToString]]&lt;br /&gt;
|form={{Grey|Form.}}'''ControlsToString'''({{Optional|&amp;lt;Наименование элементов для создания настройки (STRING)&amp;gt;}}):''&amp;lt;Строка с установками формы (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция применяется к загруженной визуальной форме и получает строку со всеми ее установками (либо установками определенных элементов). Сбор информации на форме происходит по правилам, которые работают для обычного сохранения и загрузки установок, поэтому определенные элементы формы могут быть пропущены (элементы для которых установлен признак &amp;quot;не сохранять состояние в установках формы&amp;quot;, таблицы, привязанные к базе данных и пр.). Созданная строка-результат имеет формат ANSI и может быть сохранена в виде текста во внешних источниках, однако, элементы базы данных содержатся в ней в виде внутренних кодов, поэтому, загрузка в другую базу данных приведет к позиционированию на неверных элементах. Аргумент может содержать наименования элементов для создания настройки через запятую, если аргумент не задан, будут использованы все элементы формы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.ControlsFromString|ControlsFromString]]&lt;br /&gt;
|form={{Grey|Form.}}'''ControlsFromString'''(''&amp;lt;Строка с установками формы (STRING)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция применяется к загруженной визуальной форме и загружает установки элементов формы, содержащиеся в строке, созданной с помощью функции [[Form.ControlsToString|ControlsToString]]. Установки включают значение полей, позицию в таблицах, содержимое таблиц (если они не привязаны к базе данных) и пр. Загрузка строки, созданной в другой базе данных, приведет к позиционированию на неверных элементах. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.OnTimerInterval|OnTimerInterval]]&lt;br /&gt;
|form={{Grey|Form.}}'''OnTimerInterval''':''&amp;lt;Интервал выполнения события OnTimer в мс. (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут применяется к загруженной визуальной форме и получает или позволяет изменять интервал выполнения визуального события ''OnTimer'' в миллисекундах. При установке нулевого значения, событие будет отключено.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.StatusText|StatusText]]&lt;br /&gt;
|form={{Grey|Form.}}'''StatusText'''({{Optional|&amp;lt;Новая строка статуса выполнения (STRING)&amp;gt;}}):''&amp;lt;Текущая строка статуса выполнения (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция получает или изменяет текст статуса выполнения, выводимый в полосе статуса в самом низу окна клиента. Статус выполнения выводится для каждого потока отдельно и будет показан только пока поток занят исполнением программы. Для консольного клиента информация по статусу обычно выводится в заголовок консоли. Функция может использоваться до инициализации формы и в консольном клиенте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.UpdateProgress|UpdateProgress]]&lt;br /&gt;
|form={{Grey|Form.}}'''UpdateProgress'''(''&amp;lt;Текущий прогресс выполнения (INT)&amp;gt;''{{Optional|,&amp;lt;Максимальный прогресс выполнения (INT)&amp;gt;,&amp;lt;Текущий текст выполнения (STRING)&amp;gt;}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция изменяет текст и рисунок статуса выполнения, выводимый на текущей кнопке панели задач формы, а также во всплывающей подсказке при наведении курсора мыши на эту кнопку. Статус выполнения выводится для каждого окна отдельно. Текущий прогресс не может быть равен нулю, при передаче аргумента, равного ''-1'', процесс не будет выводиться в виде процента выполнения (режим неопределенного прогресса). Кроме рисунка процента выполнения, можно также указать текст для задания этапа выполнения. Рисование статуса выполнения автоматически останавливается, когда программа завершает работу. Функция может использоваться до инициализации формы. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.StopProgress|StopProgress]]&lt;br /&gt;
|form={{Grey|Form.}}'''StopProgress'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция удаляет текст и рисунок статуса выполнения, выводившийся функцией [[Form.UpdateProgress|UpdateProgress]]. Функция может использоваться до инициализации формы. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.TaskbarIcon|TaskbarIcon]]&lt;br /&gt;
|form={{Grey|Form.}}'''TaskbarIcon'''({{Optional|&amp;lt;Новый индекс иконки кнопки панели задач (INT)&amp;gt;,&amp;lt;Тип кнопки панели задач (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Текущий индекс иконки кнопки панели задач (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция получает или изменяет индекс иконки кнопки панели задач. Кнопка может быть как локальной (кнопка текущего окна), так и глобальной (кнопка потока). Функция может использоваться до инициализации формы. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.GetFormLocationName|GetFormLocationName]]&lt;br /&gt;
|form={{Grey|Form.}}'''GetFormLocationName'''({{Optional|&amp;lt;В виде стандартного пути без изменения (INT)&amp;gt;{{Default|{{Eq}}1}}}}):''&amp;lt;Путь загрузки текущей формы (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает полный путь загрузки текущей формы (без указания на имя файла загрузки). Для форм, загруженных для объектом базы данных, путь может выглядеть, как стандартный (&amp;lt;code&amp;gt;Ref.Номенклатура&amp;lt;/code&amp;gt;, для чего аргумент должен быть равен 1), либо будет переведен на основной язык проекта (&amp;lt;code&amp;gt;Справочник.Номенклатура&amp;lt;/code&amp;gt;, для чего аргумент должен быть равен 0). Функция может использоваться до инициализации формы и в консольном клиенте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.GetFormFileName|GetFormFileName]]&lt;br /&gt;
|form={{Grey|Form.}}'''GetFormFileName'''():''&amp;lt;Путь загрузки и имя файла текущей формы (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает полный путь загрузки текущей формы с указанием на имя файла загрузки (к примеру, &amp;lt;code&amp;gt;Ref.Номенклатура\Form.sfgc&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;Modules\FreeForms\Касса\РеестрДоверенностей\SelectForm.sfgc&amp;lt;/code&amp;gt;). Функция может использоваться до инициализации формы и в консольном клиенте. Объект должен указывать на визуальную форму. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.GetModuleFileName|GetModuleFileName]]&lt;br /&gt;
|form={{Grey|Form.}}'''GetModuleFileName'''():''&amp;lt;Путь загрузки и имя файла текущего модуля (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает полный путь загрузки текущего модуля с указанием на имя файла загрузки (к примеру, &amp;lt;code&amp;gt;Ref.Номенклатура\Module.sfc&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;Modules\FreeForms\Касса\РеестрДоверенностей\Module.sfc&amp;lt;/code&amp;gt;). Функция может использоваться до инициализации формы и в консольном клиенте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.BegPeriodDate|BegPeriodDate]]&lt;br /&gt;
|form={{Grey|Form.}}'''BegPeriodDate'''({{Optional|&amp;lt;Дата начала периода периодических реквизитов формы (DATE)&amp;gt;}}):''&amp;lt;Текущая дата начала периода периодических реквизитов формы (DATE)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает или изменяет начальную дату сохранения периодических реквизитов формы. Данная дата присутствует для любой формы, однако, используется только для форм, выводящих таблицы с объектами базы данных. Для форм с редактируемыми объектами базы данных используется дата, хранящаяся в свойствах объекта (см. [[DB.UsePeriod]]). См. также описание функций [[GlobalBegPeriodDate]] и [[GlobalEndPeriodDate]]. Функция может использоваться до инициализации формы и в консольном клиенте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.EndPeriodDate|EndPeriodDate]]&lt;br /&gt;
|form={{Grey|Form.}}'''EndPeriodDate'''({{Optional|&amp;lt;Дата окончания периода и отображения периодических реквизитов формы (DATE)&amp;gt;}}):''&amp;lt;Текущая дата окончания периода и отображения периодических реквизитов формы (DATE)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает или изменяет конечную дату сохранения периодических реквизитов формы, также используемую как дату отображения реквизитов. Данная дата присутствует для любой формы, однако, используется только для форм, выводящих таблицы с объектами базы данных. Для форм с редактируемыми объектами базы данных используется дата, хранящаяся в свойствах объекта (см. [[DB.UsePeriod]]). См. также описание функций [[GlobalBegPeriodDate]] и [[GlobalEndPeriodDate]]. Функция может использоваться до инициализации формы и в консольном клиенте. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.DefaultFont|DefaultFont]]&lt;br /&gt;
|form={{Grey|Form.}}'''DefaultFont'''({{Optional|&amp;lt;Новое значение шрифта формы по умолчанию (STRING)&amp;gt;}}):''&amp;lt;Предыдущее значение шрифта формы по умолчанию (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция возвращает или/и изменяет шрифт формы по умолчанию. При изменении будут обновлены значения коэффициентов масштабирования формы. В зависимости от новых установок, текст и элементы формы будут выглядеть крупнее или мельче. Значение шрифта можно изменять только до того, как форма была загружена (т.е. при инициализации модуля формы или в его событии [[OnOpen]]).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.ScaleFactorX|ScaleFactorX]]&lt;br /&gt;
|form={{Grey|Form.}}'''ScaleFactorX'''({{Optional|&amp;lt;Новое значение горизонтального коэффициента масштабирования формы (REAL)&amp;gt;}}):''&amp;lt;Предыдущее значение горизонтального коэффициента масштабирования формы (REAL)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция возвращает или/и изменяет значение горизонтального коэффициента масштабирования формы. По умолчанию используется значение глобального коэффициента масштабирования, см. [[GlobalFormScaleFactorX]], данное значение отменяет действие глобального только для текущей формы. Если значение больше 1, элементы всех форм будут растянуты по горизонтали, если меньше 1, элементы будут сжаты. Значение коэффициента можно изменять только до того, как форма была загружена (т.е. при инициализации модуля формы или в его событии [[OnOpen]]).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.ScaleFactorY|ScaleFactorY]]&lt;br /&gt;
|form={{Grey|Form.}}'''ScaleFactorY'''({{Optional|&amp;lt;Новое значение вертикального коэффициента масштабирования формы (REAL)&amp;gt;}}):''&amp;lt;Предыдущее значение вертикального коэффициента масштабирования формы (REAL)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция возвращает или/и изменяет значение вертикального коэффициента масштабирования формы. По умолчанию используется значение глобального коэффициента масштабирования, см. [[GlobalFormScaleFactorY]], данное значение отменяет действие глобального только для текущей формы. Если значение больше 1, элементы всех форм будут растянуты по вертикали, если меньше 1, элементы будут сжаты. Значение коэффициента можно изменять только до того, как форма была загружена (т.е. при инициализации модуля формы или в его событии [[OnOpen]]).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.AutoScaleMode|AutoScaleMode]]&lt;br /&gt;
|form={{Grey|Form.}}'''AutoScaleMode''':''&amp;lt;Значение режима автоматического масштабирования формы (REAL)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут изменяет значение режима автоматического масштабирования формы (см. статью [[Студия/Редактор форм|Редактор форм]]). Значение режима можно изменять только до того, как форма была загружена (т.е. при инициализации модуля формы или в его событии [[OnOpen]]).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.InvokeEvent|InvokeEvent]]&lt;br /&gt;
|form={{Grey|Form.}}'''InvokeEvent'''(''&amp;lt;Имя события (STRING)&amp;gt;'',''&amp;lt;Имена переменных, передаваемых событию, через запятые (STRING)&amp;gt;''{{OptionalByRef|,&amp;lt;Значение переменной 1&amp;gt;,&amp;lt;Значение переменной 2&amp;gt;...}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция инициирует выполнение указанного визуального события привязанного либо к визуальному элементу формы (если оный адресуется объектом, к примеру [[Студия/Визуальные события|''OnInitLine'']]), либо к самой форме (к примеру [[Студия/Визуальные события|''OnOpen'']]). Разработчик должен указать все переменные, участвующие в событие и задать их значения. Если какая-то из переменных не будет указана, при обращении к ней в момент выполнения события будет вызвано исключение. Событие выполняется в синхронном режиме (т.е. является прерывающим событием), управление не будет возвращено до тех пор, пока не закончится выполнение события. Изменения в переменных внутри события будут транслированы на переменные, переданные в виде аргументов события в момент окончания выполнения события. Некоторые события (к примеру, ''OnOpen'') могут быть вызваны несколько раз, если они заданы на вложенных формах макросов или закладках. Для списка возможных событий см. описание Студии. Функция применяется к загруженной визуальной форме или ее элементу.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.InvokeEventAsync|InvokeEventAsync]]&lt;br /&gt;
|form={{Grey|Form.}}'''InvokeEventAsync'''(''&amp;lt;Имя события (STRING)&amp;gt;'',''&amp;lt;Имена переменных, передаваемых событию, через запятые (STRING)&amp;gt;''{{Optional|,&amp;lt;Значение переменной 1&amp;gt;,&amp;lt;Значение переменной 2&amp;gt;...}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция инициирует выполнение указанного визуального события привязанного либо к визуальному элементу формы (если оный адресуется объектом, к примеру [[Студия/Визуальные события|''OnInitLine'']]), либо к самой форме (к примеру [[Студия/Визуальные события|''OnOpen'']]). Разработчик должен указать все переменные, участвующие в событие и задать их значения. Если какая-то из переменных не будет указана, при обращении к ней в момент выполнения события будет вызвано исключение. Событие выполняется в асинхронном режиме (т.е. может быть выполнено только в момент, когда программа ожидает действий пользователя), управление будет возвращено до того, как начнется выполнение события. Для списка возможных событий см. описание Студии. Функция применяется к загруженной визуальной форме или ее элементу.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.InvokeSystemAttachButtonEvent|InvokeSystemAttachButtonEvent]]&lt;br /&gt;
|form={{Grey|Form.}}'''InvokeSystemAttachButtonEvent'''(''&amp;lt;Индекс связанного элемента (INT)&amp;gt;''{{Optional|,&amp;lt;Метод вызова (INT)&amp;gt;,&amp;lt;Объект, связанный с вызовом&amp;gt;}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция инициирует выполнение стандартного события, ассоциированного со связанным элементом текущего визуального элемента формы. Вызывается стандартное действие, ассоциированное со связанным элементом, даже если для него задано программное событие.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.HideControlPanel|HideControlPanel]]&lt;br /&gt;
|form={{Grey|Form.}}'''HideControlPanel'''(''&amp;lt;Идентификатор панели инструментов (STRING)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция прячет для текущего активного окна указанную панель инструментов. Пользовательские панели инструментов задаются в свойствах проекта. Панель может быть отражена, при переключении на другое активное окно, однако, будет снова спрятана, при активации оригинального окна. См. также общую функцию [[HideControlPanel]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.ShowControlPanel|ShowControlPanel]]&lt;br /&gt;
|form={{Grey|Form.}}'''ShowControlPanel'''(''&amp;lt;Идентификатор панели инструментов (STRING)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция отображает для текущего активного окна указанную панель инструментов. Пользовательские панели инструментов задаются в свойствах проекта. Панель может быть спрятана, при переключении на другое активное окно, однако, будет снова отображена, при активации оригинального окна. См. также общую функцию [[ShowControlPanel]].&lt;br /&gt;
}}&lt;br /&gt;
{{function footer}}&lt;br /&gt;
&lt;br /&gt;
===Функции и атрибуты элементов формы===&lt;br /&gt;
Функции и атрибуты этой группы применяются к объектам элементов формы. Чтобы получить из объекта формы (или интерфейса формы) объект элемента, можно найти нужный элемент по имени с помощью функции [[Form.Control]] или напрямую из интерфейса &amp;lt;code&amp;gt;Form.&amp;lt;Наименование элемента&amp;gt;&amp;lt;/code&amp;gt;. Наименования элементов задаются при редактировании формы в Студии.&lt;br /&gt;
{{function header}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.Form|Form]]&lt;br /&gt;
|form={{Grey|Form.}}'''Form''':''&amp;lt;Форма текущего визуального элемента (FORM)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает объект формы, которому принадлежит текущий визуальный элемент.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.Macro|Macro]]&lt;br /&gt;
|form={{Grey|Form.}}'''Macro''':''&amp;lt;Объект макроса, к которому принадлежит текущий элемент формы или пустое значение (FORM)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает объект макроса или страницы группы страниц, к которому принадлежит текущий элемент формы. Если элемент не принадлежит макросу или странице, атрибут возвращает пустое значение.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.TypeNum|TypeNum]]&lt;br /&gt;
|form={{Grey|Form.}}'''TypeNum''':''&amp;lt;Цифровой тип визуального элемента (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает тип текущего визуального элемента в виде числа.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.Height|Height]]&lt;br /&gt;
|form={{Grey|Form.}}'''Height''':''&amp;lt;Высота визуального элемента в пикселях (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет высоту текущего визуального элемента в пикселях.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.Width|Width]]&lt;br /&gt;
|form={{Grey|Form.}}'''Width''':''&amp;lt;Ширина визуального элемента в пикселях (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет ширину текущего визуального элемента в пикселях.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.Left|Left]]&lt;br /&gt;
|form={{Grey|Form.}}'''Left''':''&amp;lt;Отступ слева от начала формы или макроса в пикселях (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет отступ слева от начала формы или макроса в пикселях текущего визуального элемента.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.Top|Top]]&lt;br /&gt;
|form={{Grey|Form.}}'''Top''':''&amp;lt;Отступ сверху от начала формы или макроса в пикселях (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет отступ сверху от начала формы или макроса в пикселях текущего визуального элемента.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.Name|Name]]&lt;br /&gt;
|form={{Grey|Form.}}'''Name''':''&amp;lt;Идентификатор визуального элемента (STRING)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает строковой идентификатор текущего визуального элемента.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.Control.Caption|Caption]], '''Text'''&lt;br /&gt;
|form={{Grey|Form.}}'''Caption''':''&amp;lt;Заголовок визуального элемента (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет заголовок текущего визуального элемента. Атрибут может приняться даже к элементам, не имеющим видимого заголовка.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.Font|Font]]&lt;br /&gt;
|form={{Grey|Form.}}'''Font''':''&amp;lt;Шрифт визуального элемента (STRING)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет шрифт текущего визуального элемента. Атрибут может приняться даже к элементам, для которых изменение шрифта не имеет смысла. Шрифт задается во внутреннем формате, см. статью [[Формат записи шрифтов в системе]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.FontStyle|FontStyle]]&lt;br /&gt;
|form={{Grey|Form.}}'''FontStyle''':''&amp;lt;Стиль штрифта визуального элемента (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет цифровой стиль шрифта текущего визуального элемента. Атрибут может приняться даже к элементам, для которых изменение шрифта не имеет смысла. Стиль шрифта представляет собой число-битовую маску.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.FontColor|FontColor]]&lt;br /&gt;
|form={{Grey|Form.}}'''FontColor''':''&amp;lt;Цвет текста визуального элемента (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет цвет текста текущего визуального элемента. Атрибут может приняться даже к элементам, для которых изменение цвета текста не имеет смысла. Цвет представлен 3 байтами (24 бит).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.Anchors|Anchors]]&lt;br /&gt;
|form={{Grey|Form.}}'''Anchors''':''&amp;lt;Визуальные якоря элемента (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет якоря текущего визуального элемента. Значение представляет собой число-битовую маску, которая определяет какие части элемента будут увеличены или сужены при изменении размеров формы, а какие будут оставаться без изменения.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.Color|Color]]&lt;br /&gt;
|form={{Grey|Form.}}'''Color''':''&amp;lt;Цвет визуального элемента (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет цвет текущего визуального элемента. Атрибут может приняться даже к элементам, для которых изменение цвета не имеет смысла. Цвет представлен 3 байтами (24 бит).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.HAlign|HAlign]]&lt;br /&gt;
|form={{Grey|Form.}}'''HAlign''':''&amp;lt;Горизонтальное выравнивание текста элемента (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет горизонтальное выравнивание текста текущего визуального элемента. Атрибут может применяться даже к элементам, для которых горизонтальное выравнивание текста не имеет смысла.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.VAlign|VAlign]]&lt;br /&gt;
|form={{Grey|Form.}}'''VAlign''':''&amp;lt;Вертикальное выравнивание текста элемента (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет вертикальное выравнивание текста текущего визуального элемента. Атрибут может применяться даже к элементам, для которых вертикальное выравнивание текста не имеет смысла.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.Glyph|Glyph]]&lt;br /&gt;
|form={{Grey|Form.}}'''Glyph''':''&amp;lt;Номер иконки, отображаемой на элементе (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет номер иконки, отображаемой на визуальном элементе. Атрибут может применяться даже к элементам, для которых отображение иконки не имеет смысла.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.GroupName|GroupName]]&lt;br /&gt;
|form={{Grey|Form.}}'''GroupName''':''&amp;lt;Наименование группы переключателей (STRING)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает наименование группы переключателей, к которой принадлежит на визуальный элемент.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.Mask|Mask]]&lt;br /&gt;
|form={{Grey|Form.}}'''Mask''':''&amp;lt;Маска редактирования элемента (STRING)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет маску редактирования визуального элемента. Обычно маска используется для поля редактирования или при редактировании ячеек таблицы. См. также [[Tab.Column.Mask|Mask]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.Hotkey|Hotkey]]&lt;br /&gt;
|form={{Grey|Form.}}'''Hotkey''':''&amp;lt;Сочетание клавиш для быстрого доступа к элементу (STRING)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет сочетание клавиш, используемое для быстрого доступа к визуальному элементу. Сочетание записывается в формате &amp;lt;code&amp;gt;[&amp;lt;Модификатор&amp;gt;+]&amp;lt;Клавиша&amp;gt;&amp;lt;/code&amp;gt; (к примеру &amp;lt;code&amp;gt;Alt+F1&amp;lt;/code&amp;gt;).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.Scale|Scale]]&lt;br /&gt;
|form={{Grey|Form.}}'''Scale''':''&amp;lt;Режим поведения картинки визуального элемента (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет режим поведения картинки визуального элемента. Атрибут используется только для визуальных элементов типа картинка и позволяет определить поведение картинки, если ее внутренние размеры больше или меньше фактических размеров элемента.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.SelectedPage|SelectedPage]]&lt;br /&gt;
|form={{Grey|Form.}}'''SelectedPage''':''&amp;lt;Индекс текущей страницы группы страниц с закладками (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет индекс текущей страницы группы страниц с закладками. Атрибут используется только для визуальных элементов типа группа страниц.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.Hint|Hint]]&lt;br /&gt;
|form={{Grey|Form.}}'''Hint''':''&amp;lt;Всплывающая подсказка к визуальному элементу (STRING)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет всплывающую подсказку к визуальному элементу.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.IsDisabled|IsDisabled]]&lt;br /&gt;
|form={{Grey|Form.}}'''IsDisabled''':''&amp;lt;Режим недоступности визуального элемента (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет режим недоступности визуального элемента. В режиме недоступности любой доступ к элементу будет запрещен, пользователь не сможет, к примеру, выделить и поместить в буфер обмена содержание поля редактирования. Для запрета редактирования полей редактирования можно использовать атрибут [[Form.IsReadOnly|IsReadOnly]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.IsInvisible|IsInvisible]]&lt;br /&gt;
|form={{Grey|Form.}}'''IsInvisible''':''&amp;lt;Режим невидимости визуального элемента (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет режим невидимости визуального элемента. В этом режиме элемент не будет отображен на экране.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.IsChecked|IsChecked]]&lt;br /&gt;
|form={{Grey|Form.}}'''IsChecked''':''&amp;lt;Индекс галочки визуального элемента флажка (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет индекс галочки визуального элемента флажка. Флажок поддерживает три положения (включенный, выключенный и неопределенный).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.IsWithCheckboxes|IsWithCheckboxes]]&lt;br /&gt;
|form={{Grey|Form.}}'''IsWithCheckboxes''':''&amp;lt;Режим отображения флажков в списке (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет режим отображения флажков в визуальных элементах списков.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.IsInEnterChain|IsInEnterChain]]&lt;br /&gt;
|form={{Grey|Form.}}'''IsInEnterChain''':''&amp;lt;Элемент входит в цепочку редактирования (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает флаг принадлежности визуального элемента цепочке редактирования (Enter-цепочке).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.IfSetChangeFlag|IfSetChangeFlag]]&lt;br /&gt;
|form={{Grey|Form.}}'''IfSetChangeFlag''':''&amp;lt;Режим автоматической установки флага изменения формы при изменении элемента (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет режим автоматической установки флага изменения формы при изменении элемента.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.IfNotInSettings|IfNotInSettings]]&lt;br /&gt;
|form={{Grey|Form.}}'''IfNotInSettings''':''&amp;lt;Запрет сохранения состояния визуального элемента в установки формы (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет запрет сохранения состояния визуального элемента при создании установок формы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.IsDefault|IsDefault]]&lt;br /&gt;
|form={{Grey|Form.}}'''IsDefault''':''&amp;lt;Флаг кнопки по умолчанию (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет флаг того, что визуальный элемент кнопки используется по умолчанию. На форме должна быть только одна кнопка, использующаяся по умолчанию. Такая кнопка имеет особую подсветку, и активируется автоматически при активации пользователем комбинации клавиш &amp;lt;code&amp;gt;Ctrl+Enter&amp;lt;/code&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.HasNoFocus|HasNoFocus]]&lt;br /&gt;
|form={{Grey|Form.}}'''HasNoFocus''':''&amp;lt;Кнопка не принимает фокус (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут отдает флаг того, что визуальный элемент кнопки не может иметь фокус (задается в Студии). Такой режим может использоваться на формах без элементов с фокусом, к примеру, для сенсорных экранов.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.IsAsyncMode|IsAsyncMode]]&lt;br /&gt;
|form={{Grey|Form.}}'''IsAsyncMode''':''&amp;lt;Событие кнопки выполняется в асинхронном режиме (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут отдает флаг того, событие, связанное с кнопкой будет выполняться в асинхронном режиме (1, по умолчанию) или в режиме прерывания (0).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.NoDisable|NoDisable]]&lt;br /&gt;
|form={{Grey|Form.}}'''NoDisable''':''&amp;lt;Элемент не может быть недоступным (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает флаг того, что визуальный элемент кнопки не будет недоступным в режиме только для чтения формы или при использовании DisableControls. Такой режим может использоваться для кнопок не выполняющий действия по изменению информации (к примеру, вызывающих помощь).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.IsNoGridLines|IsNoGridLines]]&lt;br /&gt;
|form={{Grey|Form.}}'''IsNoGridLines''':''&amp;lt;Не отображать линии сетки для списков и таблиц (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет флаг запрета отображения линий сетки для списков, таблиц и электронных таблиц.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.IsPassword|IsPassword]]&lt;br /&gt;
|form={{Grey|Form.}}'''IsPassword''':''&amp;lt;Не отображать символы, вводимые в поле редактирования (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет режим отображения символов, вводимых в поле редактирования. Если режим пароля установлен, вместо информации в поле редактирования будут отражены знаки '''*'''.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.IsNoCaptions|IsNoCaptions]]&lt;br /&gt;
|form={{Grey|Form.}}'''IsNoCaptions''':''&amp;lt;Не отображать заголовок для списков и таблиц (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет флаг запрета отображения заголовка столбцов для списков, таблиц и электронных таблиц.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.IsMultiLine|IsMultiLine]]&lt;br /&gt;
|form={{Grey|Form.}}'''IsMultiLine''':''&amp;lt;Режим, в котором поле редактирования может содержать более одной строки (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет режим, в котором поле редактирования может содержать более одной строки.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.IsNoLevels|IsNoLevels]]&lt;br /&gt;
|form={{Grey|Form.}}'''IsNoLevels''':''&amp;lt;Не отображать уровни итогов в электронной таблице (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет режим, в котором уровни итогов в электронной таблице не будут отображены.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.IsReadOnly|IsReadOnly]]&lt;br /&gt;
|form={{Grey|Form.}}'''IsReadOnly''':''&amp;lt;Режим запрета редактирования для полей редактирования и таблиц (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет режим запрета редактирования для полей редактирования и таблиц. В отличии от режима запрета доступа ([[Form.IsDisabled|IsDisabled]]), режим запрета редактирования позволяет просматривать информацию в полях или таблицах, однако, не позволяет ее изменять.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.IsEditable|IsEditable]]&lt;br /&gt;
|form={{Grey|Form.}}'''IsEditable''':''&amp;lt;Режим разрешения редактирования для электронных таблиц (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет режим разрешения редактирования для электронных таблиц.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.IsWrapped|IsWrapped]]&lt;br /&gt;
|form={{Grey|Form.}}'''IsWrapped''':''&amp;lt;Режим переноса текста на другую строчку для текстовых полей (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет режим переноса текста на другую строчку для текстовых полей.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.IsHyperLink|IsHyperLink]]&lt;br /&gt;
|form={{Grey|Form.}}'''IsHyperLink''':''&amp;lt;Режим отображения текстового поля в виде интерактивной подчеркнутой ссылки (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет режим отображения текстового поля в виде интерактивной подчеркнутой ссылки.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.IsShowGroups|IsShowGroups]]&lt;br /&gt;
|form={{Grey|Form.}}'''IsShowGroups''':''&amp;lt;Отображать наименований групп в электронной таблице (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет режим отображения наименований групп в электронной таблице.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.IsBeveled|IsBeveled]]&lt;br /&gt;
|form={{Grey|Form.}}'''IsBeveled''':''&amp;lt;Режим объемного отображения разделителя (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет режим объемного отображения разделителя.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.IsNoScrolling|IsNoScrolling]]&lt;br /&gt;
|form={{Grey|Form.}}'''IsNoScrolling''':''&amp;lt;Запретить прокрутку ячеек в электронной таблице (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет режим запрета прокрутки ячеек в электронной таблице.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.IsMoveable|IsMoveable]]&lt;br /&gt;
|form={{Grey|Form.}}'''IsMoveable''':''&amp;lt;Разрешение сдвига мышью визуального элемента разделителя (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет режим разрешения сдвига мышью визуального элемента разделителя.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.IsProportional|IsProportional]]&lt;br /&gt;
|form={{Grey|Form.}}'''IsProportional''':''&amp;lt;Режим сохранения пропорции картинки при изменении размеров (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет режим сохранения пропорции картинки визуального элемента. Атрибут используется только для визуальных элементов типа картинка.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.IsOutlined|IsOutlined]]&lt;br /&gt;
|form={{Grey|Form.}}'''IsOutlined''':''&amp;lt;Режим отображения контура картинки (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет отображения контура картинки визуального элемента. Атрибут используется только для визуальных элементов типа картинка.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.IsDBAutoUpdate|IsDBAutoUpdate]]&lt;br /&gt;
|form={{Grey|Form.}}'''IsDBAutoUpdate''':''&amp;lt;Режим автоматического обновления элемента из базы данных через определенные промежутки времени (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет режим автоматического обновления элемента из базы данных через определенные промежутки времени. Время автоматического обновления задается в свойствах проекта.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.AreFoldersSelectable|AreFoldersSelectable]]&lt;br /&gt;
|form={{Grey|Form.}}'''AreFoldersSelectable''':''&amp;lt;Режим разрешения выбора папок для табличных элементов форм, открытых в режиме выбора (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет режим разрешения выбора папок для табличных элементов форм, открытых в режиме выбора. Данный режим используется по умолчанию, однако, при вызове формы, он может быть изменен программой.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.IfQFiltersAlwaysAllowed|IfQFiltersAlwaysAllowed]]&lt;br /&gt;
|form={{Grey|Form.}}'''IfQFiltersAlwaysAllowed''':''&amp;lt;Режим разрешения использования быстрых фильтров для таблиц, не связанных с базой данных (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет режим разрешения использования быстрых фильтров (фильтры вводятся непосредственно в столбиках таблицы) для таблиц, не связанных с базой данных.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.IsMultiSelectAllowed|IsMultiSelectAllowed]]&lt;br /&gt;
|form={{Grey|Form.}}'''IsMultiSelectAllowed''':''&amp;lt;Режим разрешения выделения диапазонов строк в таблицах (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет режим разрешения выделения диапазонов строк в таблицах (вместо выделения только одной ячейки).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.MultiSelectMode|MultiSelectMode]]&lt;br /&gt;
|form={{Grey|Form.}}'''MultiSelectMode''':''&amp;lt;Тип режима выделения диапазонов (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет тип режима выделения диапазонов строк в таблицах.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.ContainsPeriodicalValues|ContainsPeriodicalValues]]&lt;br /&gt;
|form={{Grey|Form.}}'''ContainsPeriodicalValues''':''&amp;lt;Флаг того, что элемент содержит периодические значения (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет флаг того, что элемент (таблица) содержит периодические значения. При установке такого флага, форма получает признак того, что в ней используются периодические элементы и в заголовке будет выведена дата отображения элементов формы. Флаг обычно устанавливается автоматически при инициализации формы, однако, при использовании функции [[Form.BindToProperty|BindToProperty]], возможно необходимо установить этот флаг программно.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.PartialLoadingModeColumns|PartialLoadingModeColumns]]&lt;br /&gt;
|form={{Grey|Form.}}'''PartialLoadingModeColumns''':''&amp;lt;Список реквизитов для частичной загрузки объектов таблицы (STRING)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет список реквизитов для частичной загрузки объектов таблицы. Реквизиты перечисляются через запятую.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.BevelShape|BevelShape]]&lt;br /&gt;
|form={{Grey|Form.}}'''BevelShape''':''&amp;lt;Форма объемного региона оформления (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет форму объемного региона оформления (горизонтальная линия, вертикальная линия, ящик, рамка).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.BevelStyle|BevelStyle]]&lt;br /&gt;
|form={{Grey|Form.}}'''BevelStyle''':''&amp;lt;Стиль объемного региона оформления (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет стиль объемного региона оформления (вдавленный, выпуклый). &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.TrackbarMode|TrackbarMode]]&lt;br /&gt;
|form={{Grey|Form.}}'''TrackbarMode''':''&amp;lt;Режим отображения бегунка и выделения (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет режим отображения бегунка и выделения для элемента выбор бегунком.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.TicksMode|TicksMode]]&lt;br /&gt;
|form={{Grey|Form.}}'''TicksMode''':''&amp;lt;Режим отображения отметок (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет режим отображения отметок для элемента выбора бегунком.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.OnChangeMode|OnChangeMode]]&lt;br /&gt;
|form={{Grey|Form.}}'''OnChangeMode''':''&amp;lt;Режим изменения бегунка (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет режим выполнения и отображения изменений бегунка пользователем для элемента выбора бегунком.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.LinesFrequency|LinesFrequency]]&lt;br /&gt;
|form={{Grey|Form.}}'''LinesFrequency''':''&amp;lt;Частота отображения отметок на элементе (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет частоту (в точках) отображения отметок для элемента выбора бегунком.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.LineSize|LineSize]]&lt;br /&gt;
|form={{Grey|Form.}}'''LineSize''':''&amp;lt;Шаг бегунка стрелками (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет величину увеличения или уменьшения значения бегунка для элемента выбора бегунком при использовании стрелок на клавиатуре.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.PageSize|PageSize]]&lt;br /&gt;
|form={{Grey|Form.}}'''PageSize''':''&amp;lt;Шаг бегунка кнопками PgUp, PgDown (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет величину увеличения или уменьшения значения бегунка для элемента выбора бегунком при использовании кнопок PageUp / PageDown на клавиатуре.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.MinValue|MinValue]]&lt;br /&gt;
|form={{Grey|Form.}}'''MinValue''':''&amp;lt;Минимальное значение элемента (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет минимальное возможное значения элемента (для элементов выбора бегунком или индикатора выполнения).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.MaxValue|MaxValue]]&lt;br /&gt;
|form={{Grey|Form.}}'''MaxValue''':''&amp;lt;Минимальное значение элемента (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет максимальное возможное значения элемента (для элементов выбора бегунком или индикатора выполнения).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.PaperColor|PaperColor]]&lt;br /&gt;
|form={{Grey|Form.}}'''PaperColor''':''&amp;lt;Цвет окна (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет цвет окна элемента индикатора выполнения.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.InkColor|InkColor]]&lt;br /&gt;
|form={{Grey|Form.}}'''InkColor''':''&amp;lt;Цвет заливки (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет цвет заливки элемента индикатора выполнения.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.SelectionStart|SelectionStart]]&lt;br /&gt;
|form={{Grey|Form.}}'''SelectionStart''':''&amp;lt;Начало выделенного региона (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет начало выделенного региона для элемента выбора бегунком.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.SelectionEnd|SelectionEnd]]&lt;br /&gt;
|form={{Grey|Form.}}'''SelectionEnd''':''&amp;lt;Окончание выделенного региона (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет окончание выделенного региона для элемента выбора бегунком.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.Folders|Folders]]&lt;br /&gt;
|form={{Grey|Form.}}'''Folders''':''&amp;lt;Режим отображения папок табличного элемента (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает режим отображения папок табличного элемента (отображать в общей структуре, отображать сверху списка, не отображать, отображать только папки). &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.Value|Value]]&lt;br /&gt;
|form={{Grey|Form.}}'''Value''':''&amp;lt;Значение (содержимое) визуального элемента&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет значение визуального элемента. Не для всех элементов значение может быть изменено (к примеру, для таблиц или списков изменять значение нельзя). Для разных типов элементов это значение может иметь разный тип. К примеру, для поля редактирования, тип зависит от типа данных поля, для группы переключателей, это значение принимает целый числовой индекс активного в данный момент переключателя, для картинки, это значение будет представлять объект картинки. Задание OLE-объектов таким образом разрешено, однако, инициализация объектов может происходить в асинхронном режиме, поэтому, после присваивания OLE-объекту, необходимо подождать окончания его полной инициализации.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.Tag|Tag]]&lt;br /&gt;
|form={{Grey|Form.}}'''Tag''':''&amp;lt;Произвольное дополнительное значение элемента&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет произвольное дополнительное значение элемента. Значение может использоваться программно для хранения различной информации, ассоциированной с визуальным элементом.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.LayerName|LayerName]]&lt;br /&gt;
|form={{Grey|Form.}}'''LayerName''':''&amp;lt;Наименование слоя, которому принадлежит элемент (STRING)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=1&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет наименование слоя, которому принадлежит элемент. На любой форме существует по крайней мере один слой. Часть слоев может быть видимой, часть не отображаться. Для доступа к свойствам слоев формы, используется атрибут [[Form.Layers|Layers]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.DropdownCount|DropdownCount]]&lt;br /&gt;
|form={{Grey|Form.}}'''DropdownCount''':''&amp;lt;Количество строк, показываемых полем со списком при активации списка (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет количество строк, показываемых полем со списком при активации списка.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.OutlineColor|OutlineColor]]&lt;br /&gt;
|form={{Grey|Form.}}'''OutlineColor''':''&amp;lt;Цвет контура картинки (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет количество цвет контура визуального элемента картинки. Цвет представлен 3 байтами (24 бит).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.IsHorizontal|IsHorizontal]]&lt;br /&gt;
|form={{Grey|Form.}}'''IsHorizontal''':''&amp;lt;Является ли элемент горизонтальным (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает тип элемента. 0 -- вертикальный, 1 -- горизонтальный.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.NoFoldersMode|NoFoldersMode]]&lt;br /&gt;
|form={{Grey|Form.}}'''NoFoldersMode''':''&amp;lt;Режим отображения таблицы вне структуры папок (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет режим отображения таблицы вне структуры папок. 0 -- таблица отображена с учетом папок (если папки поддерживаются), 1 -- папки отражены в общей структуре, как обычные элементы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.Buttons|Buttons]]&lt;br /&gt;
|form={{Grey|Form.}}'''Buttons''':(''&amp;lt;Идентификатор кнопки-связанного элемента (INT)&amp;gt;'',''&amp;lt;Тип свойства кнопки-связанного элемента (STRING)&amp;gt;''{{Optional|,&amp;lt;Новое значение свойства кнопки-связанного элемента&amp;gt;}}):''&amp;lt;Текущее значение свойства кнопки-связанного элемента&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция позволяет получить доступ к связанным элементам (кнопкам), определенным для текущего визуального элемента. Кнопка задается по цифровому идентификатору. Для получения или изменения доступны следующие типы свойств: '''Font''', '''Caption''', '''IsDisabled''', '''Hint''', '''Color'''.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.OLE|OLE]]&lt;br /&gt;
|form={{Grey|Form.}}'''OLE''':''&amp;lt;OLE-объект визуального элемента (OLE)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет значение OLE-объекта визуального элемента. При изменении объекта, в визуальном элементе создается его копия со всеми текущими настройками, присваиваемый объект не будет тем же самым объектом, что и объект, отображаемый на форме. Инициализация объектов может происходить в асинхронном режиме, поэтому, после присваивания OLE-объекту, необходимо подождать окончания его полной инициализации. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.Picture|Picture]]&lt;br /&gt;
|form={{Grey|Form.}}'''Picture''':''&amp;lt;Объект картинки визуального элемента (PICTURE)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает объект картинки визуального элемента. Атрибут используется только для визуальных элементов типа картинка. Применяя функции объекта картинки к полученном объекту, его можно изменить, загрузить с диска и пр. См. статью [[Картинка]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.SetFocus|SetFocus]]&lt;br /&gt;
|form={{Grey|Form.}}'''SetFocus'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция позволяет активизировать текущий визуальный элемент (т.е., элемент получает фокус).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.SetFilter|SetFilter]]&lt;br /&gt;
|form={{Grey|Form.}}'''SetFilter'''(''&amp;lt;Наименование фильтра (STRING)&amp;gt;''{{Optional|,&amp;lt;Значение фильтра&amp;gt;}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция работает для табличных элементов, связанных с базой данных и позволяет установить или сбросить один фильтр по его наименованию, остальные фильтры, применяемые к таблице, не будут изменены. Начальные фильтры могут быть заданы в Студии при редактировании формы. Фильтры позволяют отображать содержимое таблицы в требуемом разрезе. Если второй аргумент отсутствует, фильтр будет удален. В наименование фильтра можно включать дополнительные признаки (префиксы), позволяющие задавать способ применения фильтра. Для более полной информации см. статью [[Стандартные фильтры]] (простой режим). Пример: &amp;lt;code&amp;gt;Form.MainTab.SetFilter(&amp;quot;&amp;lt;&amp;gt;@Status&amp;quot;,1)&amp;lt;/code&amp;gt;. Табличный элемент будет обновлен после каждого применения функции, если необходимо установить несколько фильтров, предпочтительнее пользоваться функциями [[Form.SetFilters|SetFilters]] или [[Form.SetFiltersAndPositionOnElement|SetFiltersAndPositionOnElement]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.SetFilters|SetFilters]]&lt;br /&gt;
|form={{Grey|Form.}}'''SetFilters'''(''&amp;lt;Наименования фильтров через запятые (STRING)&amp;gt;''{{Optional|,&amp;lt;Значение фильтра 1&amp;gt;,&amp;lt;Значение фильтра 2&amp;gt;...}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция работает для табличных элементов, связанных с базой данных и позволяет установить фильтры таблицы. Фильтры, не указанные в списке фильтров, будут удалены. Начальные фильтры могут быть заданы в Студии при редактировании формы. Фильтры позволяют отображать содержимое таблицы в требуемом разрезе. В наименование фильтра можно включать дополнительные признаки (префиксы), позволяющие задавать способ применения фильтра. Для более полной информации см. статью [[Стандартные фильтры]] (простой режим). Пример: &amp;lt;code&amp;gt;Form.MainTab.SetFilters(&amp;quot;&amp;lt;&amp;gt;@Status,&amp;gt;=DocDate,&amp;lt;DocDate&amp;quot;,1,'01.01.2025','01.02.2025')&amp;lt;/code&amp;gt;. Если необходимо изменить или добавить один фильтр таблицы и не трогать остальные, можно воспользоваться функцией [[Form.SetFilter|SetFilter]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.GetFilters|GetFilters]]&lt;br /&gt;
|form={{Grey|Form.}}'''GetFilters'''():''&amp;lt;Список текущих фильтров таблицы и их значений (LIST)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция работает для табличных элементов, и позволяет получить текущие фильтры таблицы. Имена элементов полученного списка будут представлять имена столбцов таблицы и операции над ними (к примеру, &amp;lt;code&amp;gt;&amp;lt;=DocDate&amp;lt;/code&amp;gt;). Значениями будут являться значения фильтров. Данная функция включает как быстрые текстовые фильтры над столбцами таблицы, так и внутренние фильтры (фильтры режима показа по папкам и т.п.), однако, не все режимы могут полностью поддерживаться.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.PositionOnElement|PositionOnElement]]&lt;br /&gt;
|form={{Grey|Form.}}'''PositionOnElement'''(''&amp;lt;Объект позиционирования&amp;gt;''{{Optional|,&amp;lt;Дождаться окончания загрузки и позиционирования в таблице (INT)&amp;gt;{{Default|{{Eq}}0}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция используется для обновления содержимого табличного элемента из базы данных и позиционировании его на указанном объекте. Функция может применяться к таблице, дереву или списку, которые привязаны к базе данных. При необходимости, функция может дождаться окончания загрузки и позиционирования, однако, подобный вызов из обработчиков событий может привести к непредсказуемым последствиям, рекомендуется подходить к этому режиму с осторожностью.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.SetFiltersAndPositionOnElement|SetFiltersAndPositionOnElement]]&lt;br /&gt;
|form={{Grey|Form.}}'''SetFiltersAndPositionOnElement'''({{Optional|&amp;lt;Элемент для позиционирования&amp;gt;}},''&amp;lt;Наименования фильтров через запятые (STRING)&amp;gt;''{{Optional|,&amp;lt;Значение фильтра 1&amp;gt;,&amp;lt;Значение фильтра 2&amp;gt;...}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция работает для табличных элементов, связанных с базой данных и позволяет установить фильтры таблицы. Фильтры, не указанные в списке фильтров, будут удалены. Начальные фильтры могут быть заданы в Студии при редактировании формы. Фильтры позволяют отображать содержимое таблицы в требуемом разрезе. В наименование фильтра можно включать дополнительные признаки (префиксы), позволяющие задавать способ применения фильтра. Для более полной информации см. статью [[Стандартные фильтры]] (простой режим). Пример: &amp;lt;code&amp;gt;Form.MainTab.SetFiltersAndPositionOnElement(aEl,&amp;quot;&amp;lt;&amp;gt;@Status,&amp;gt;=DocDate,&amp;lt;DocDate&amp;quot;,1,'01.01.2025','01.02.2025')&amp;lt;/code&amp;gt;. В отличие от функции [[Form.SetFilters|SetFilters]], данная функция не только устанавливает фильтры таблицы, но и позиционируется на требуемом элементе таблицы за одно обновление, тем самым включая в нее функцию [[Form.PositionOnElement|PositionOnElement]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.SortString|SortString]]&lt;br /&gt;
|form={{Grey|Form.}}'''SortString''':''&amp;lt;Порядок сортировки таблицы, связанной с базой данных (STRING)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет порядок визуальной сортировки таблицы. Порядок сортировки представляет собой перечисление реквизитов (столбцов) сортировки через запятую с суффиксами направления сортировки. См. также статью [[DB.UseOrder|UseOrder]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.QuickFilters|QuickFilters]]&lt;br /&gt;
|form={{Grey|Form.}}'''QuickFilters''':''&amp;lt;Список с текущими быстрыми фильтрами столбцов таблицы, связанной с базой данных (LIST)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает список, наименованиями элементов которого являются столбцы таблицы, в которых пользователь ввел значения в быстрый фильтр отбора (быстрые фильтры отображаются в заголовках столбиков таблицы, к которым они были применены), значения элементов заполнены текстовыми значениями фильтров.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.HeadElement|HeadElement]]&lt;br /&gt;
|form={{Grey|Form.}}'''HeadElement''':''&amp;lt;Объект, которому принадлежит строчная часть, отображаемая в текущей таблице (DB)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет объект, которому принадлежит строчная часть, отображаемая в текущей таблице. Если таблица не отображает строчную часть, использование атрибута не имеет смысла. Изменять объект можно только для строчных частей, которые не привязаны к объекту, открытому в данный момент на форме (см. [[Form.Object|Object]]). Т.е., таблица строчной части должна быть свободной, не принадлежащей объекту формы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.FolderElement|FolderElement]], '''Folder'''&lt;br /&gt;
|form={{Grey|Form.}}'''FolderElement''':''&amp;lt;Папка, для которой отображается содержимое текущей таблицы (DB)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет папку (объект), для которой отображается содержимое текущей таблицы (таблица может отображать, к примеру, справочник с папками или строчную часть с папками). При изменении объекта, в таблице будет отображено содержимое указанной папки (произойдет перепозиционирование таблицы).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.ParentElement|ParentElement]], '''Parent'''&lt;br /&gt;
|form={{Grey|Form.}}'''ParentElement''':''&amp;lt;Родительский элемент текущей таблицы (DB)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет родительский элемент справочника (объект), которому подчинены элементы текущей таблицы. Изменять атрибут можно только для таблиц, которые не привязаны к объекту, открытому в данный момент на форме (см. [[Form.Object|Object]]). Т.е., таблица должна быть свободной, не принадлежащей объекту формы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.SelectedElement|SelectedElement]]&lt;br /&gt;
|form={{Grey|Form.}}'''SelectedElement'''():''&amp;lt;Выбранный в данный момент элемент таблицы или дерева, связанных с базой данных (DB)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция получает выбранный в данный момент элемент таблицы или дерева (т.е., элемент на котором установлен курсор). Функция не работает для таблиц, содержащих строчные части (так как строка строчной части не является элементом). Если ни один из элементов не выбран, атрибут возвращает пустое значение. Атрибут заменяет более сложную конструкцию (пример дан для таблиц, без доп. проверок): &amp;lt;code&amp;gt;aTab.Get(aTab.SelectedLine,&amp;quot;@ELEMENT&amp;quot;)&amp;lt;/code&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.SelectedLine|SelectedLine]]&lt;br /&gt;
|form={{Grey|Form.}}'''SelectedLine''':''&amp;lt;Выбранная в данный момент строка таблицы (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает выбранную в данный момент строку таблицы (см. [[Tab.SelectedLine]]). Используется, как сокращение конструкции &amp;lt;code&amp;gt;aTab.Value.SelectedLine&amp;lt;/code&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.SelectedColumn|SelectedColumn]]&lt;br /&gt;
|form={{Grey|Form.}}'''SelectedColumn''':''&amp;lt;Индекс выбранного в данный момент столбца таблицы (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает индекс выбранного в данный момент столбца таблицы (см. [[Tab.SelectedColumn]]). Используется, как сокращение конструкции &amp;lt;code&amp;gt;aTab.Value.SelectedColumn&amp;lt;/code&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.SelectedColumnName|SelectedColumnName]]&lt;br /&gt;
|form={{Grey|Form.}}'''SelectedColumnName''':''&amp;lt;Наименование выбранного в данный момент столбца таблицы (STRING)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает наименование выбранного в данный момент столбца таблицы (см. [[Tab.SelectedColumnName]]). Используется, как сокращение конструкции &amp;lt;code&amp;gt;aTab.Value.SelectedColumnName&amp;lt;/code&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.Reload|Reload]]&lt;br /&gt;
|form={{Grey|Form.}}'''Reload'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция производит обновление свободной таблицы, связанной с базой данных из базы данных, сохраняя текущую позицию курсора в ней, если это возможно. Обновление выполняется только для таблиц, которые не привязаны к объекту, открытому в данный момент на форме (см. [[Form.Object|Object]]). Т.е., таблица должна быть свободной, не принадлежащей объекту формы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.Reinit|Reinit]]&lt;br /&gt;
|form={{Grey|Form.}}'''Reinit'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция помечает все элементы таблицы, как не участвовавшие в визуальном обновлении. В дальнейшем для них будет вызвано одно из визуальных событий ''OnInitLine'' или ''OnShowLine''. Функция используется, как простая альтернатива функции [[Form.InvokeEvent|InvokeEvent]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.RereadValue|RereadValue]]&lt;br /&gt;
|form={{Grey|Form.}}'''RereadValue'''({{Optional|&amp;lt;Новое значение редактирования&amp;gt;}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция используется для таблицы, в ячейке которой происходит редактирование, функция обновляет содержимое редактора ячейки текущим значением ячейки таблицы (как будто пользователь нажал ''ESC'' и отказался от введенного значения, однако, функция не закрывает редактор). При наличии аргумента, функция заменяет редактируемое значение на указанное, а не на оригинальное значение ячейки таблицы. Функцию удобно использовать как результат нажатия на связанный элемент. Это позволяет, к примеру, не выходя из режима редактирования ячейки, выбрать объект редактирования с помощью связанного элемента, либо вернуть значение по умолчанию при нажатии на очистку значения редактирования и пр.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.PasteText|PasteText]]&lt;br /&gt;
|form={{Grey|Form.}}'''PasteText'''(''&amp;lt;Текст для добавления (STRING)&amp;gt;''{{Optional|,&amp;lt;Способ добавления (INT)&amp;gt;{{Default|{{Eq}}0}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция используется для поля редактирования и позволяет добавить или вставить произвольный текст в поле. В зависимости от способа добавления текст может быть вставлен в начало существующего текста, в его конец или начиная с позиции, где установлен курсор.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.UpdateValue|UpdateValue]]&lt;br /&gt;
|form={{Grey|Form.}}'''UpdateValue'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция используется для поля редактирования, активного в данный момент, функция обновляет содержимое поля редактируемым значением (текстовые поля могут задерживать обновление до потери фокуса, данная функция форсирует это обновление). Таким образом можно получить значение поля, редактируемого в данный момент. Функцию удобно использовать, если поле текстовое или числовое, для получения значения поля, пока оно все еще активно. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.BindToProperty|BindToProperty]]&lt;br /&gt;
|form={{Grey|Form.}}'''BindToProperty'''(''&amp;lt;Наименование реквизита объекта (STRING)&amp;gt;''):''&amp;lt;Операция выполнена успешно (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция используется для привязки текущего визуального элемента к реквизиту редактируемого в данный момент на форме объекта. Визуальный элемент может быть следующих типов: поле редактирования, флажок, группа переключателей, поле со списком. Визуальный элемент должен быть свободным и не привязанным к какому-либо реквизиту. Функция может использоваться, к примеру, в формах макросов, чтобы привязать визуальный элемент формы макроса к определенному реквизиту, вне зависимости от того, где этот макрос будет использован.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.BindToObject|BindToObject]]&lt;br /&gt;
|form={{Grey|Form.}}'''BindToObject'''(''&amp;lt;Наименование объекта (STRING)&amp;gt;''):''&amp;lt;Операция выполнена успешно (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=1&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция используется для привязки текущего табличного элемента (на данный момент только дерева) к определенному объекту проекта. Визуальный элемент должен быть свободным и не привязанным к строчной части объекта. Функция может использоваться, к примеру, в формах макросов, чтобы привязать визуальный элемент формы макроса к определенному объекту. Наименование объекта записывается в стандартном виде &amp;lt;code&amp;gt;&amp;lt;Тип объекта&amp;gt;.&amp;lt;Вид объекта&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.SetType|SetType]]&lt;br /&gt;
|form={{Grey|Form.}}'''SetType'''({{Optional|&amp;lt;Устанавливаемый тип поля редактирования (STRING)&amp;gt;}}):''&amp;lt;Текущий тип поля редактирования (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция используется для полей редактирования, имеющих сложный составной тип или несколько типов данных. Функция получает текущий тип поля, либо задает его, если указан первый аргумент. Если тип данных поля задан, пользователю не придется выбирать его из списка при начале редактирования поля. Тип данных записывается в стандартном виде &amp;lt;code&amp;gt;&amp;lt;Тип объекта&amp;gt;.&amp;lt;Вид объекта&amp;gt;&amp;lt;/code&amp;gt;. (см. [[Tab.Column.DataType|DataType]]).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.Lock|Lock]]&lt;br /&gt;
|form={{Grey|Form.}}'''Lock'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция запрещает выполнения обновления визуальной таблицы или списка при их любом изменении до тех пор, пока не будет вызвана функция [[Form.Unlock|Unlock]]. Для таблицы функция аналогична [[Tab.Lock]] и используется, как сокращение конструкции &amp;lt;code&amp;gt;aTab.Value.Lock()&amp;lt;/code&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.Unlock|Unlock]]&lt;br /&gt;
|form={{Grey|Form.}}'''Unlock'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция разрешает запрещенное ранее функцией [[Form.Lock|Lock]] выполнения обновления визуальной таблицы или списка при их любом изменении. Для таблицы функция аналогична [[Tab.Unlock]] и используется, как сокращение конструкции &amp;lt;code&amp;gt;aTab.Value.Unlock()&amp;lt;/code&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.IsLocked|IsLocked]]&lt;br /&gt;
|form={{Grey|Form.}}'''IsLocked'''():''&amp;lt;Обновление запрещено (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция проверяет, запрещено ли в данный момент обновление таблицы или списка при их изменении, инициированное с помощью функции [[Form.Lock|Lock]]. Для таблицы функция аналогична [[Tab.IsLocked]] и используется, как сокращение конструкции &amp;lt;code&amp;gt;aTab.Value.IsLocked()&amp;lt;/code&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{function footer}}&lt;br /&gt;
&lt;br /&gt;
===Функции и атрибуты группы страниц с закладками===&lt;br /&gt;
Функции и атрибуты этой группы применяются к визуальному объекту группы страниц с закладками и позволяют изменять свойства страниц, активировать страницы, прятать или делать их недоступными.&lt;br /&gt;
{{function header}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.Pages|Pages]]&lt;br /&gt;
|form={{Grey|Form.}}'''Pages''':''&amp;lt;Объект свойств группы страниц с закладками (FORM)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает объект свойств группы страниц с закладками.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.Pages.PagesCount|PagesCount]]&lt;br /&gt;
|form={{Grey|Form.Pages.}}'''PagesCount''':''&amp;lt;Количество страниц (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает количество страниц в группе страниц с закладками. В подсчет включаются невидимые закладки.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.Pages.SelectedPage|SelectedPage]]&lt;br /&gt;
|form={{Grey|Form.Pages.}}'''SelectedPage''':''&amp;lt;Индекс активной страницы (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет выбранную в данный момент (активную) страницу визуального объекта группы страниц с закладками.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.Pages.Page|Page]]&lt;br /&gt;
|form={{Grey|Form.Pages.}}'''Page'''(''&amp;lt;Индекс или идентификатор страницы (INT,STRING)&amp;gt;''):''&amp;lt;Объект страницы группы страниц с закладками (FORM)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция получает объект страницы группы страниц с закладками.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.Page.IsDisabled|IsDisabled]]&lt;br /&gt;
|form={{Grey|Form.Page.}}'''IsDisabled''':''&amp;lt;Признак недоступности страницы (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет признак недоступности страницы группы страниц с закладками.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.Page.IsInvisible|IsInvisible]]&lt;br /&gt;
|form={{Grey|Form.Page.}}'''IsInvisible''':''&amp;lt;Признак отображения страницы (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет признак отображения страницы группы страниц с закладками.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.Page.Caption|Caption]]&lt;br /&gt;
|form={{Grey|Form.Page.}}'''Caption''':''&amp;lt;Заголовок страницы (STRING)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет заголовок страницы группы страниц с закладками.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.Page.Hint|Hint]]&lt;br /&gt;
|form={{Grey|Form.Page.}}'''Hint''':''&amp;lt;Всплывающая подсказка страницы (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет всплывающую подсказку при наведении курсора мыши на заголовок страницы группы страниц с закладками.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.Page.Name|Name]]&lt;br /&gt;
|form={{Grey|Form.Page.}}'''Name''':''&amp;lt;Идентификатор страницы (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает идентификатор страницы группы страниц с закладками.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.Page.PageIndex|PageIndex]]&lt;br /&gt;
|form={{Grey|Form.Page.}}'''PageIndex''':''&amp;lt;Индекс (номер) текущей страницы группы страниц (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут используется совместно с объектом страницы группы страниц и возвращает индекс этой страницы.&lt;br /&gt;
}}&lt;br /&gt;
{{function footer}}&lt;br /&gt;
&lt;br /&gt;
===Функции и атрибуты слоев формы, макроса или группы страниц с закладками===&lt;br /&gt;
Функции и атрибуты этой группы работают со слоями. Слои позволяют прятать и показывать группы элементов. Их удобно использовать, когда использование группы страниц с закладками неудобно. Слои задаются в Студии в общем для формы или для объектов подчиненных форм, такими объектами на данный момент являются [[Студия/Пользовательский компонент интерфейса|Макросы редактора форм]] и страницы группы страниц с закладками.&lt;br /&gt;
{{function header}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.Layers|Layers]]&lt;br /&gt;
|form={{Grey|Form.}}'''Layers''':''&amp;lt;Объект свойств слоев формы, макроса или группы страниц с закладками (FORM)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает объект свойств слоев формы, макроса или группы страниц с закладками. Для группы страниц с закладками, атрибут применяется к объекту выбранной страницы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.Layers.DoesLayerExist|DoesLayerExist]]&lt;br /&gt;
|form={{Grey|Form.Layers.}}'''DoesLayerExist'''(''&amp;lt;Идентификатор слоя (STRING)&amp;gt;''):''&amp;lt;Существует ли слой с указанным идентификатором (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция проверяет наличие слоя по его идентификатору.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.Layers.GetLayers|GetLayers]]&lt;br /&gt;
|form={{Grey|Form.Layers.}}'''GetLayers''':''&amp;lt;Список идентификаторов активных (видимых) в данный момент слоев через запятую (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция получает список идентификаторов активных (видимых) в данный момент слоев через запятую. Пример: &amp;lt;code&amp;gt;Form.оЗакладки.Pages.Page(&amp;quot;Основное&amp;quot;).Layers.GetLayers()&amp;lt;/code&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.Layers.SetLayers|SetLayers]]&lt;br /&gt;
|form={{Grey|Form.Layers.}}'''SetLayers'''(''&amp;lt;Активировать слои по списку идентификаторов через запятую (STRING)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция делает видимыми слои по списоку их идентификаторов через запятую. Слои, не указанные в списке будут скрыты. Пример: &amp;lt;code&amp;gt;Form.оЗакладки.Pages.Page(&amp;quot;Основное&amp;quot;).Layers.SetLayers(&amp;quot;Main,Контрагент,Услуга&amp;quot;)&amp;lt;/code&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{function footer}}&lt;br /&gt;
&lt;br /&gt;
==Функции и атрибуты объекта главного меню==&lt;br /&gt;
Функции и атрибуты этой группы позволяют работать с главным меню. В Студии можно задать несколько меню, каждое из которых можно в любой момент показать в клиенте. Таким образом, для разных операторов клиента может быть использовано разное меню. Система также позволяет изменять свойства отдельных пунктов меню программно. Функция [[Menu.Invoke|Invoke]] также позволяет вызвать различные системные диалоги и функции, не доступные для вызова другими способами.&lt;br /&gt;
{{function header}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Menu.Initialize|Initialize]]&lt;br /&gt;
|form={{Grey|Menu.}}'''Initialize'''(''&amp;lt;Идентификатор или индекс (INT,STRING)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция активирует главное меню по его идентификатору (заданному при редактировании проекта), либо его индексу среди всех главных меню. Предыдущее главное меню будет удалено. Функция применима только для визуального клиента.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Menu.GetCurrentMenuID|GetCurrentMenuID]]&lt;br /&gt;
|form={{Grey|Menu.}}'''GetCurrentMenuID'''():''&amp;lt;Идентификатор, загруженного в данный момент меню (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция получает идентификатор, загруженного в данный момент главного меню. Функция применима только для визуального клиента.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Menu.Count|Count]]&lt;br /&gt;
|form={{Grey|Menu.}}'''Count'''():''&amp;lt;Количество главных меню в системе (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция получает общее количество главных меню, заданных при редактировании проекта. Функция применима только для визуального клиента.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Menu.MenuName|MenuName]]&lt;br /&gt;
|form={{Grey|Menu.}}'''MenuName'''(''&amp;lt;Индекс меню (INT)&amp;gt;''):''&amp;lt;Идентификатор меню с указанным индексом (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция возвращает идентификатор (наименование) меню по его индексу&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Menu.ItemCount|ItemCount]]&lt;br /&gt;
|form={{Grey|Menu.}}'''ItemCount'''({{Optional|&amp;lt;Индекс меню (INT)&amp;gt;}}):''&amp;lt;Количество верхних пунктов указанного меню (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция получает количество верхних пунктов меню, указываемого индексом.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Menu.Invoke|Invoke]]&lt;br /&gt;
|form={{Grey|Menu.}}'''Invoke'''(''&amp;lt;Идентификатор или код стандартного действия (INT,STRING)&amp;gt;''{{Optional|,&amp;lt;Параметры&amp;gt;}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция выполняет стандартное действие главного меню (к примеру, вывод калькулятора или вызов административной панели). Действие может быть задано в виде числового идентификатора или строки-кода. См. описание.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Menu.Item|Item]]&lt;br /&gt;
|form={{Grey|Menu.}}'''Item'''(''&amp;lt;Идентификатор или индекс верхнего пункта меню (INT,STRING)&amp;gt;''{{Optional|,&amp;lt;Идентификатор или индекс меню (INT,STRING)&amp;gt;}}):''&amp;lt;Искомый пункт меню (MENUITEM)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция получает ссылку на пункт меню по его индексу или идентификатору. Если второй аргумент не задан, пункт ищется в активном в данный момент меню, иначе в меню заданном индексом или идентификатором.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Menu.Item.Name|Name]]&lt;br /&gt;
|form={{Grey|Menu.Item.}}'''Name''':''&amp;lt;Идентификатор текущего пункта меню (STRING)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает идентификатор текущего пункта меню.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Menu.Item.Caption|Caption]]&lt;br /&gt;
|form={{Grey|Menu.Item.}}'''Caption''':''&amp;lt;Текст текущего пункта меню (STRING)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет текст текущего пункта меню.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Menu.Item.Check|Check]]&lt;br /&gt;
|form={{Grey|Menu.Item.}}'''Check''':''&amp;lt;Пометка текущего пункта меню (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет пометку (галочку) текущего пункта меню.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Menu.Item.Icon|Icon]]&lt;br /&gt;
|form={{Grey|Menu.Item.}}'''Icon''':''&amp;lt;Иконка текущего пункта меню (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет иконку текущего пункта меню.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Menu.Item.IsCheckable|IsCheckable]]&lt;br /&gt;
|form={{Grey|Menu.Item.}}'''IsCheckable''':''&amp;lt;Автоматически ставить галочку на пункте меню (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает или изменяет режим, когда галочка ставится или снимается автоматически при выборе пользователем текущего пункта меню.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Menu.Item.Count|Count]]&lt;br /&gt;
|form={{Grey|Menu.Item.}}'''Count'''():''&amp;lt;Количество подпунктов текущего пункта меню (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция получает количество подчиненных пунктов (подменю) текущего пункта меню.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Menu.Item.Child|Child]]&lt;br /&gt;
|form={{Grey|Menu.Item.}}'''Child'''(''&amp;lt;Идентификатор или индекс подчиненного пункта меню (INT,STRING)&amp;gt;''):''&amp;lt;Искомый пункт меню (MENUITEM)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция получает подпункт текущего пункта меню по его индексу или идентификатору.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Menu.Item.Parent|Parent]]&lt;br /&gt;
|form={{Grey|Menu.Item.}}'''Parent'''():''&amp;lt;Родительский пункт меню или пустое значение (MENUITEM,NOTHING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция получает родительский пункт текущего пункта меню, если текущий пункт меню является верхним, функция отдает пустое значение.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Menu.Item.Add|Add]]&lt;br /&gt;
|form={{Grey|Menu.Item.}}'''Add'''({{Optional|&amp;lt;Индекс вставки пункта меню (INT)&amp;gt;,&amp;lt;Идентификатор пункта меню (STRING)&amp;gt;}},''&amp;lt;Текст пункта меню (STRING)&amp;gt;''{{Optional|,&amp;lt;Программа для исполнения при выборе пункта меню (STRING)&amp;gt;,&amp;lt;Иконка пункта меню (INT)&amp;gt;,&amp;lt;Режим автоматической установки галочки на пункте меню (INT)&amp;gt;}}):''&amp;lt;Новый пункт меню (MENUITEM)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция добавляет или вставляет новый пункт меню в массив пунктов, подчиненных текущему.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Menu.Item.Remove|Remove]]&lt;br /&gt;
|form={{Grey|Menu.Item.}}'''Remove'''(''&amp;lt;Идентификатор или индекс пункта меню (STRING,INT)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция удаляет пункт меню, подчиненный текущему по его индексу или идентификатору.&lt;br /&gt;
}}&lt;br /&gt;
{{function footer}}&lt;br /&gt;
&lt;br /&gt;
==Функции и атрибуты объекта меню кнопки панели задач==&lt;br /&gt;
Функции и атрибуты этой группы позволяют работать с меню кнопки панели задач. При нажатии правой кнопки мыши выводится стандартное меню, которое можно изменить. Любые пункты нового меню при активации будут вызывать визуальное событие ''OnTaskbarMenuClick'' заданное в свойствах формы (см. [[Студия/Визуальные события|Визуальные события]]).&lt;br /&gt;
{{function header}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.TaskbarMenu|TaskbarMenu]]&lt;br /&gt;
|form={{Grey|Form.}}'''TaskbarMenu''':''&amp;lt;Объект меню кнопки панели задач второго уровня (FORM)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает объект меню кнопки панели задач второго уровня текущей формы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.GlobalTaskbarMenu|GlobalTaskbarMenu]]&lt;br /&gt;
|form={{Grey|Form.}}'''GlobalTaskbarMenu''':''&amp;lt;Объект меню кнопки панели задач первого уровня (FORM)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут получает объект меню кнопки панели задач первого уровня (кнопки панели задач потока).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.TaskbarMenu.Clear|Clear]]&lt;br /&gt;
|form={{Grey|Form.TaskbarMenu.}}'''Clear'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция применяется к объекту меню кнопки панели задач, и производит очистку меню (меню заменяется на стандартное).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.TaskbarMenu.IsPresent|IsPresent]]&lt;br /&gt;
|form={{Grey|Form.TaskbarMenu.}}'''IsPresent'''():''&amp;lt;Задано дополнительное меню (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция применяется к объекту меню кнопки панели задач, возвращает 1, если меню задано, 0, в ином случае (стандартное меню).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.TaskbarMenu.LoadFromList|LoadFromList]]&lt;br /&gt;
|form={{Grey|Form.TaskbarMenu.}}'''LoadFromList'''(''&amp;lt;Список с пунктами меню (LIST)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция применяется к объекту меню кнопки панели задач, и производит загрузку меню из списка значений, меню, существовавшее до этого, будет очищено. Список может быть многоуровневым (содержать элементы, являющиеся списками). Для элементов меню будут использованы следующие свойства значений списка: представление значения списка (наименование), статус галочки значения списка, иконка значения списка. Если пользователь активирует новый пункт меню, будет вызвано визуальное событие ''OnTaskbarMenuClick''. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.TaskbarMenu.SaveToList|SaveToList]]&lt;br /&gt;
|form={{Grey|Form.TaskbarMenu.}}'''SaveToList'''():''&amp;lt;Список для сохранения пунктов меню (LIST)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция применяется к объекту меню кнопки панели задач, и получает текущее заданное меню в виде списка. Многоуровневое меню будет представлено в виде подчиненных списков.   &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Form.TaskbarMenu.Hint|Hint]]&lt;br /&gt;
|form={{Grey|Form.TaskbarMenu.}}'''Hint'''({{Optional|&amp;lt;Новая всплывающая подсказка (STRING)&amp;gt;}}):''&amp;lt;Текущая всплывающая подсказка (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция применяется к объекту меню кнопки панели задач, и получает или изменяет всплывающую подсказку, показываемую при наведении курсора мыши на кнопку панели задач.&lt;br /&gt;
}}&lt;br /&gt;
{{function footer}}&lt;br /&gt;
&lt;br /&gt;
{{Объекты}}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://sfsys.ru/index.php?title=%D0%A2%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D0%B0&amp;diff=5164</id>
		<title>Таблица</title>
		<link rel="alternate" type="text/html" href="http://sfsys.ru/index.php?title=%D0%A2%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D0%B0&amp;diff=5164"/>
		<updated>2025-12-27T17:09:00Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{infobox object&lt;br /&gt;
|image=tab.png&lt;br /&gt;
|visual=[[Студия/Таблица значений|Таблица значений]]&lt;br /&gt;
|object=Tab&lt;br /&gt;
|status=2&lt;br /&gt;
|create=[[Tab.Create|Create]]}}&lt;br /&gt;
{{HeadLinks|&lt;br /&gt;
* [[Main_Page|Начальная страница]]&lt;br /&gt;
* [[Общее_описание_языка|Общее описание]]&lt;br /&gt;
* [[Объекты]]}}&lt;br /&gt;
&amp;lt;p&amp;gt;Объект '''таблица''' позволяет хранить большие объемы данных любого типа в виде таблиц, а также сортировать их, объединять таблицы, задавать определенные типы данных столбцам таблицы, хранить информацию о флажках или иконках. Таблицы представлены на формах [[Студия/Таблица значений|таблицами значений]], результаты запросов представлены таблицами, таблицы используются в разнообразных функциях и объектах и являются неотъемлемой частью системы. Функции работы с таблицами имеют ряд оптимизаций, доступных разработчикам.&amp;lt;/p&amp;gt;&lt;br /&gt;
Таблица имеет три внутренних указателя:&lt;br /&gt;
* Текущая строка (''CurLine'') -- внутренний указатель, использующийся при изменении ячеек таблицы по наименованию столбца (к примеру, &amp;lt;code&amp;gt;aTab.&amp;lt;Столбец&amp;gt;:=&amp;lt;Значение&amp;gt;&amp;lt;/code&amp;gt;). Указатель меняется при добавлении, удалении или сдвиге строк, а также при выборке строк таблицы с помощью функции [[Tab.Select|Select]], поиске значений и пр. Нумерация строк начинается с единицы.&lt;br /&gt;
* Выбранная строка (''SelectedLine'') -- внутренний указатель, совпадающий с положением курсора (выделенной ячейки) внутри таблицы, когда она представлена на экране в виде элемента формы. Изменение указателя автоматически перемещает курсор. Использование указателя для невизуальных таблиц не запрещено. Нумерация строк начинается с единицы.&lt;br /&gt;
* Выбранный столбец (''SelectedColumn'') -- внутренний указатель, совпадающий с положением курсора (выделенного столбца) внутри таблицы, когда она представлена на экране в виде элемента формы. Изменение указателя автоматически перемещает курсор. Использование указателя для невизуальных таблиц не запрещено. Нумерация столбцов начинается с единицы.&lt;br /&gt;
&lt;br /&gt;
== Атрибуты и функции==&lt;br /&gt;
{{function header}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Array|[&amp;lt;Индекс столбца (INT,STRING)&amp;gt;]]], [[Tab.Array|[&amp;lt;Индекс столбца (INT,STRING)&amp;gt;,&amp;lt;Индекс строки (INT)&amp;gt;]]]&lt;br /&gt;
|form={{Grey|Tab}}'''[&amp;lt;Индекс или наименование столбца (INT,STRING)&amp;gt;{{Optional|,&amp;lt;Индекс строки (INT)&amp;gt;}}]''':''&amp;lt;Значение&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Использование синтаксиса массивов позволяет получить или изменить значение таблицы по индексу (аргументом является число) или наименованию (аргументом является строка) его столбца для текущей строки таблицы, если не задан второй аргумент, иначе для строки таблицы заданной индексом, указанным во втором аргументе.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.ColumnName|&amp;lt;Имя столбца&amp;gt;]]&lt;br /&gt;
|form={{Grey|Tab.}}'''&amp;lt;Имя столбца&amp;gt;''':''&amp;lt;Значение ячейки&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Получить значение таблицы, находящееся в столбце ''&amp;lt;Имя столбца&amp;gt;'' и строке с индексом CurLine&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.CurLine|CurLine]]&lt;br /&gt;
|form={{Grey|Tab.}}'''CurLine''':''&amp;lt;Индекс текущей строки (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Получить индекс текущей строки таблицы (первая строка=1). Текущая строка и выбранная пользователем строка визуального объекта, привязанного к таблице, могут иметь разные значения. Текущая строка используется в функциях выборки строк таблицы [[Tab.Select|Select]] и пр.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.SelectedLine|SelectedLine]]&lt;br /&gt;
|form={{Grey|Tab.}}'''SelectedLine''':''&amp;lt;Индекс выбранной строки (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Получить индекс выбранной строки визуального объекта (первая строка=1). Текущая строка и выбранная пользователем строка визуального объекта, привязанного к таблице, могут иметь разные значения.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.SelectedColumn|SelectedColumn]]&lt;br /&gt;
|form={{Grey|Tab.}}'''SelectedColumn''':''&amp;lt;Индекс выбранного столбца (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Получить индекс выбранного столбца визуального объекта (первый столбец=1). Скрытые в визуальной таблице столбцы также участвуют в подсчете индекса.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.SelectedColumnName|SelectedColumnName]]&lt;br /&gt;
|form={{Grey|Tab.}}'''SelectedColumnName''':''&amp;lt;Наименование выбранного столбца (STRING)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Получить наименование выбранного столбца визуального объекта, как оно было заданно в Студии. Наименование всегда хранится в верхнем регистре.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.MultiSelection|MultiSelection]]&lt;br /&gt;
|form={{Grey|Tab.}}'''MultiSelection''':''&amp;lt;Таблица с выбранными регионами (TAB)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Получить таблицу, описывающую все регионы, выделенные пользователем, для визуальных таблиц с возможностью выделения регионов. Таблица не будет содержать ни одной строки, если таблица не привязана к визуальному объекту, либо в объекте не выбрана ни одна строка.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.IsEditorActive|IsEditorActive]]&lt;br /&gt;
|form={{Grey|Tab.}}'''IsEditorActive''':''&amp;lt;Статус редактора ячейки (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут проверяет, активен ли редактор ячейки таблицы в данный момент.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Create|Create]]&lt;br /&gt;
|form={{Grey|Tab.}}'''Create'''({{Optional|&amp;lt;Список столбцов через запятую (STRING)&amp;gt;}}):''&amp;lt;Новый объект (TAB)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает новый объект типа [[Таблица]], создавая столбцы с заданными именами, если необходимо.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Column|Column]]&lt;br /&gt;
|form={{Grey|Tab.}}'''Column'''(''&amp;lt;Наименование или индекс столбца (INT,STRING)&amp;gt;''):''&amp;lt;Объект столбца таблицы (TAB)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает подчиненный объект типа [[Таблица#Объект столбца таблицы|столбец таблицы]]. Доступ к свойствам столбцов таким образом опасен для многопоточных объектов. Необходимо использовать функции [[LockObject]] и [[UnlockObject]], когда объект используется в нескольких потоках.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Size|Size]], '''Lines'''&lt;br /&gt;
|form={{Grey|Tab.}}'''Size'''({{Optional|&amp;lt;Новое количество строк (INT)&amp;gt;}}):''&amp;lt;Текущее количество строк в таблице (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает или/и изменяет количество строк в таблице.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Columns|Columns]]&lt;br /&gt;
|form={{Grey|Tab.}}'''Columns'''({{Optional|&amp;lt;Новое количество столбцов (INT)&amp;gt;}}):''&amp;lt;Текущее количество столбцов в таблице (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает или/и изменяет количество столбцов в таблице.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.AddColumn|AddColumn]]&lt;br /&gt;
|form={{Grey|Tab.}}'''AddColumn'''({{Optional|&amp;lt;Наименование столбца (STRING)&amp;gt;,&amp;lt;Заголовок столбца (STRING)&amp;gt;,&amp;lt;Тип данных столбца (STRING)&amp;gt;,&amp;lt;Ширина столбца (INT)&amp;gt;,&amp;lt;Режим выравнивания столбца (INT)&amp;gt;,&amp;lt;Видимость столбца (INT)&amp;gt;}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция добавляет столбец в таблицу, устанавливая его свойства, если необходимо. Если количество строк в таблице больше нуля, ячейки столбца заполняются пустым значением, либо принимают неинициализированное значение в соответствии с типом данных столбца, если последний задан.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.InsertColumn|InsertColumn]]&lt;br /&gt;
|form={{Grey|Tab.}}'''InsertColumn'''(''&amp;lt;Индекс вставляемого столбца (INT)&amp;gt;''{{Optional|,&amp;lt;Наименование столбца (STRING)&amp;gt;,&amp;lt;Заголовок столбца (STRING)&amp;gt;,&amp;lt;Тип данных столбца (STRING)&amp;gt;,&amp;lt;Ширина столбца (INT)&amp;gt;,&amp;lt;Режим выравнивания столбца (INT)&amp;gt;,&amp;lt;Видимость столбца (INT)&amp;gt;}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция добавляет столбец в таблицу с указанным индексом, устанавливая его свойства, если необходимо. Если количество строк в таблице больше нуля, ячейки столбца заполняются пустым значением, либо принимают неинициализированное значение в соответствии с типом данных столбца, если последний задан.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.RemoveColumn|RemoveColumn]]&lt;br /&gt;
|form={{Grey|Tab.}}'''RemoveColumn'''(''&amp;lt;Наименование или индекс столбца (INT,STRING)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция удаляет столбец с указанным индексом или наименованием из таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.SetColumn|SetColumn]]&lt;br /&gt;
|form={{Grey|Tab.}}'''SetColumn'''(''&amp;lt;Наименование или индекс столбца (INT,STRING)&amp;gt;''{{Optional|,&amp;lt;Заголовок столбца (STRING)&amp;gt;,&amp;lt;Тип данных столбца (STRING)&amp;gt;,&amp;lt;Ширина столбца (INT)&amp;gt;,&amp;lt;Режим выравнивания столбца (INT)&amp;gt;,&amp;lt;Видимость столбца (INT)&amp;gt;}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция изменяет свойства столбца с указанным индексом или наименование. Если новый тип данных столбца задан, все существующие ячейки таблицы в данном столбце будут приведены к новому типу данных.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.GetColumnIndex|GetColumnIndex]]&lt;br /&gt;
|form={{Grey|Tab.}}'''GetColumnIndex'''(''&amp;lt;Наименование столбца (STRING)&amp;gt;''):''&amp;lt;Индекс столбца (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает индекс столбца с заданным наименованием. Если столбец не существует, функция возвращает ноль.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.GetColumnName|GetColumnName]]&lt;br /&gt;
|form={{Grey|Tab.}}'''GetColumnName'''(''&amp;lt;Индекс столбца (INT)&amp;gt;''):''&amp;lt;Наименование столбца таблицы (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает наименование столбца с заданным индексом. Наименования столбцов всегда хранятся в верхнем регистре.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.NewLine|NewLine]]&lt;br /&gt;
|form={{Grey|Tab.}}'''NewLine'''({{Optional|&amp;lt;Индекс новой строки (INT)&amp;gt;}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция добавляет в конец таблицы новую строку и помечает ее как текущую. Строка также может быть вставлена в таблицу по определенному индексу, если он задан.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.AddLine|AddLine]]&lt;br /&gt;
|form={{Grey|Tab.}}'''AddLine'''(''&amp;lt;Наименования столбцов через запятую (STRING)&amp;gt;''{{Optional|,&amp;lt;Значение столбца 1&amp;gt;,&amp;lt;Значение столбца 2&amp;gt;...}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция добавляет в конец таблицы новую строку и помечает ее как текущую. Указанные в первом аргументе столбцы таблицы, в добавленной строке будут заполнены значениями, заданными последующими аргументами.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.AddLineSorted|AddLineSorted]]&lt;br /&gt;
|form={{Grey|Tab.}}'''AddLineSorted'''(''&amp;lt;Наименования столбцов сортировки через запятую (STRING)&amp;gt;'',''&amp;lt;Наименования столбцов добавления через запятую (STRING)&amp;gt;''{{Optional|,&amp;lt;Значение столбца 1&amp;gt;,&amp;lt;Значение столбца 2&amp;gt;...}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция добавляет новую строку и помечает ее как текущую. Указанные во втором аргументе столбцы таблицы, в добавленной строке будут заполнены значениями, заданными последующими аргументами. Строка вставляется в таблицу таким образом, чтобы не нарушить сортировку, заданную наименованиями столбцов первого аргумента.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.UpdateLineEx|UpdateLineEx]]&lt;br /&gt;
|form={{Grey|Tab.}}'''UpdateLineEx'''(''&amp;lt;Наименования столбцов поиска через запятую (STRING)&amp;gt;''{{OptionalByRef|,''&amp;lt;Начальный индекс поиска, результирующий индекс (INT)&amp;gt;''}}{{Optional|,&amp;lt;Значение столбца поиска 1&amp;gt;,&amp;lt;Значение столбца поиска 2&amp;gt;...,&amp;lt;Таблица сортирована по столбцам поиска (INT)&amp;gt;,&amp;lt;Наименования столбцов обновления через запятую (STRING)&amp;gt;,&amp;lt;Значение обновления столбца 1&amp;gt;,&amp;lt;Значение обновления столбца 2&amp;gt;...}}):''&amp;lt;0, если строка добавлена, иначе количество обновленных строк (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция обновляет строки, заданные аргументами для поиска или добавляет новую строку. Поиск начинается со строки, заданной вторым аргументом. Для всех строк, удовлетворящих условиям поиска, значения в столбцах, заданных аргументов с наименования столбцов обновления, будут изменены на аргументы, идущие за аргументом с наименованиями. Если ни одна строка не найдена, будет добавлена одна новая строка. Если применяется сортированный поиск (аргумент сортироки равен 1), строка вставляется в таблицу таким образом, чтобы не нарушить сортировку, заданную наименованиями столбцов первого аргумента. Если второй аргумент является переменной, в ней будет возвращен индекс добавленной строки или общее количество найденных и измененных строк в соотвествии с результатами поиска. Данная функция не использует текущую строку таблицы, что позволяет ее применять при работе с нескольми потоками (thread-safe).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.InsertLine|InsertLine]]&lt;br /&gt;
|form={{Grey|Tab.}}'''InsertLine'''(''&amp;lt;Индекс добавляемой строки (INT)&amp;gt;'',''&amp;lt;Наименования столбцов через запятую (STRING)&amp;gt;''{{Optional|,&amp;lt;Значение столбца 1&amp;gt;,&amp;lt;Значение столбца 2&amp;gt;...}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция вставляет строку в таблицу по указанному индексу и помечает ее как текущую. Указанные в первом аргументе столбцы таблицы, в добавленной строке будут заполнены значениями, заданными последующими аргументами.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.CopyLine|CopyLine]]&lt;br /&gt;
|form={{Grey|Tab.}}'''CopyLine'''({{Optional|&amp;lt;Индекс копируемой строки (INT)&amp;gt;,&amp;lt;Индекс новой строки (INT)&amp;gt;,&amp;lt;Количество добавляемых строк (INT)&amp;gt;{{Default|{{Eq}}1}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция добавляет новую строку по указанному во втором аргументе индексу (или в конец таблицы, если второй аргумент опущен) и заполняет ее значениями из строки, указанной в первом аргументе (или текущей строки, если первый аргумент опущен).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Remove|Remove]]&lt;br /&gt;
|form={{Grey|Tab.}}'''Remove'''(''&amp;lt;Индекс удаляемой строки (INT)&amp;gt;''{{Optional|,&amp;lt;Количество удаляемых строк (INT)&amp;gt;{{Default|{{Eq}}1}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция удаляет указанное количество строк (либо одну строку, если второй аргумент опущен), начиная с индекса, заданного первым аргументом.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.ClearLines|ClearLines]]&lt;br /&gt;
|form={{Grey|Tab.}}'''ClearLines'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция удаляет все строки из таблицы (при этом количество столбцов не изменяется).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Clear|Clear]]&lt;br /&gt;
|form={{Grey|Tab.}}'''Clear'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция удаляет все строки и столбцы из таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Select|Select]]&lt;br /&gt;
|form={{Grey|Tab.}}'''Select'''():''&amp;lt;В таблице есть по крайней мере одна строка (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция начинает выборку по строкам таблицы (ее действие аналогично фрагменту &amp;lt;code&amp;gt;&amp;lt;Таблица&amp;gt;.CurLine:=0&amp;lt;/code&amp;gt;). Функция возвращает 1, если в выборке есть по крайней мере одна строка, иначе возвращается ноль. Функция используется в начале цикла по обходу всех строк таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Next|Next]]&lt;br /&gt;
|form={{Grey|Tab.}}'''Next'''():''&amp;lt;Найдена следующая строка (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция перемещает указатель текущей строки на следующую строку и возвращает единицу, если следующая строка существует, иначе возвращает ноль. Действие функции аналогично фрагменту &amp;lt;code&amp;gt;&amp;lt;Таблица&amp;gt;.CurLine:=?(&amp;lt;Таблица&amp;gt;.CurLine=&amp;lt;Таблица&amp;gt;.Size(),&amp;lt;Таблица&amp;gt;.CurLine,&amp;lt;Таблица&amp;gt;.CurLine+1)&amp;lt;/code&amp;gt;. Функция используется внутри цикла по обходу всех строк таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Prev|Prev]]&lt;br /&gt;
|form={{Grey|Tab.}}'''Prev'''():''&amp;lt;Найдена предыдущая строка (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция перемещает указатель текущей строки на предыдущую строку, если указатель больше нуля, и возвращает единицу, если предыдущая строка существует, иначе возвращает ноль. Действие функции аналогично фрагменту &amp;lt;code&amp;gt;&amp;lt;Таблица&amp;gt;.CurLine:=?(&amp;lt;Таблица&amp;gt;.CurLine=0,&amp;lt;Таблица&amp;gt;.CurLine,&amp;lt;Таблица&amp;gt;.CurLine-1)&amp;lt;/code&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Goto|Goto]]&lt;br /&gt;
|form={{Grey|Tab.}}'''Goto'''(''&amp;lt;Индекс строки (INT)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция перемещает указатель текущей строки на строку с указанным индексом. Действие функции аналогично фрагменту &amp;lt;code&amp;gt;&amp;lt;Таблица&amp;gt;.CurLine:=&amp;lt;Индекс&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Move|Move]]&lt;br /&gt;
|form={{Grey|Tab.}}'''Move'''(''&amp;lt;Индекс перемещаемой строки (INT)&amp;gt;'',''&amp;lt;Расстояние перемещения (INT)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция сдвигает строку с индексом, задаваемым первым аргументом, внутри таблицы на указанное количество строк. Расстояние сдвига может быть отрицательным числом. При положительном сдвиге, строка из конца таблицы переходит в ее начало, при отрицательном сдвиге строка с начала таблицы переходит в конец.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Set|Set]]&lt;br /&gt;
|form={{Grey|Tab.}}'''Set'''({{Optional|&amp;lt;Индекс строки (INT)&amp;gt;}},''&amp;lt;Наименование или индекс столбца (INT,STRING)&amp;gt;'',''&amp;lt;Устанавливаемое значение&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция устанавливает значение ячейки с наименованием или индексом столбца, заданным вторым аргументом, индекс строки ячейки задается первым аргументом или используется текущая строка, если первый аргумент не задан.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Get|Get]]&lt;br /&gt;
|form={{Grey|Tab.}}'''Get'''({{Optional|&amp;lt;Индекс строки (INT)&amp;gt;}},''&amp;lt;Наименование или индекс столбца (INT,STRING)&amp;gt;''):''&amp;lt;Значение ячейки таблицы&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает значение ячейки с наименованием или индексом столбца, заданным вторым аргументом, индекс строки ячейки задается первым аргументом или используется текущая строка, если первый аргумент не задан.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Find|Find]]&lt;br /&gt;
|form={{Grey|Tab.}}'''Find'''(''&amp;lt;Значение поиска&amp;gt;''{{OptionalByRef|,&amp;lt;Начальный индекс поиска, результирующий индекс (INT)&amp;gt;,&amp;lt;Наименование или индекс столбца поиска, индекс результирующего столбца (STRING,INT)&amp;gt;}}{{Optional|,&amp;lt;Таблица сортирована по столбцу поиска (INT)&amp;gt;}}):''&amp;lt;Значение найдено 1 или 0 (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит поиск значения в таблице, с возможным указанием начального индекса поиска, возможным указанием столбца поиска. Поиск может принимать во внимание факт того, что таблица сортирована по указанному столбцу по неубыванию, что может значительно ускорить нахождение значения. Если значение найдено, индекс строки или/и столбца, где оно было найдено, возвращается в переменных второго и третьего аргументов.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.FindAndGoto|FindAndGoto]]&lt;br /&gt;
|form={{Grey|Tab.}}'''FindAndGoto'''(''&amp;lt;Значение поиска&amp;gt;''{{OptionalByRef|,&amp;lt;Начальный индекс поиска, результирующий индекс (INT)&amp;gt;,&amp;lt;Наименование или индекс столбца поиска, индекс результирующего столбца (STRING,INT)&amp;gt;}}{{Optional|,&amp;lt;Таблица сортирована по столбцу поиска (INT)&amp;gt;}}):''&amp;lt;Значение найдено 1 или 0 (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит поиск значения в таблице, с возможным указанием начального индекса поиска, возможным указанием столбца поиска. Поиск может принимать во внимание факт того, что таблица сортирована по указанному столбцу по неубыванию, что может значительно ускорить нахождение значения. Если значение найдено, индекс строки или/и столбца, где оно было найдено, возвращается в переменных второго и третьего аргументов, функция также автоматически изменяет индекс текущей строки на индекс строки найденного значения, текущая строка не изменяется, если значение не найдено.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.FindAndGet|FindAndGet]]&lt;br /&gt;
|form={{Grey|Tab.}}'''FindAndGet'''(''&amp;lt;Наименование или индекс столбца значения результата (STRING,INT)&amp;gt;'',''&amp;lt;Значение поиска&amp;gt;''{{OptionalByRef|,&amp;lt;Начальный индекс поиска, результирующий индекс (INT)&amp;gt;,&amp;lt;Наименование или индекс столбца поиска, индекс результирующего столбца (STRING,INT)&amp;gt;}}{{Optional|,&amp;lt;Таблица сортирована по столбцу поиска (INT)&amp;gt;}}):''&amp;lt;Полученное значение или пустое значение&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит поиск значения в таблице, с возможным указанием начального индекса поиска, возможным указанием столбца поиска. Поиск может принимать во внимание факт того, что таблица сортирована по указанному столбцу по неубыванию, что может значительно ускорить нахождение значения. Если значение найдено, индекс строки или/и столбца, где оно было найдено, возвращается в переменных третьего и четвертого аргументов. Функция возвращает значение в столбце, заданном первым аргументом, из строки, в которой было найдено значение поиска, либо возвращает пустое значение, если поиск не был завершен успешно.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.FindInLine|FindInLine]]&lt;br /&gt;
|form={{Grey|Tab.}}'''FindInLine'''(''&amp;lt;Значение поиска&amp;gt;''{{Optional|,&amp;lt;Индекс строки поиска (INT)&amp;gt;}}{{OptionalByRef|,&amp;lt;Наименование или индекс начального столбца поиска, индекс результирующего столбца (STRING,INT)&amp;gt;}}):''&amp;lt;Значение найдено 1 или 0 (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит поиск значения в таблице в текущей строке или строке с заданным индексом, возможным указанием начального индекса столбца поиска. Если значение найдено, индекс столбца, где оно было найдено, возвращается в переменной третьего аргумента.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Locate|Locate]]&lt;br /&gt;
|form={{Grey|Tab.}}'''Locate'''(''&amp;lt;Список наименований столбцов поиска через запятую (STRING)&amp;gt;''{{Optional|,&amp;lt;Значение поиска столбца 1&amp;gt;,&amp;lt;Значение поиска столбца 2&amp;gt;...,&amp;lt;Таблица сортирована по столбцам поиска (INT)&amp;gt;}}):''&amp;lt;Индекс найденной строки таблицы (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит поиск заданного списком столбцов количества значений в таблице. Поиск всегда начинается с первой строки таблицы. Поиск может принимать во внимание факт того, что таблица сортирована по всем столбцам поиска по неубыванию, что может значительно ускорить нахождение значения. Если значение найдено, индекс строки где оно было найдено, возвращается в результате функции, иначе функция возвращает ноль.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.LocateEx|LocateEx]]&lt;br /&gt;
|form={{Grey|Tab.}}'''LocateEx'''(''&amp;lt;Список наименований столбцов поиска через запятую (STRING)&amp;gt;''{{OptionalByRef|,&amp;lt;Начальный индекс поиска, результирующий индекс (INT)&amp;gt;}}{{Optional|,&amp;lt;Значение поиска столбца 1&amp;gt;,&amp;lt;Значение поиска столбца 2&amp;gt;...,&amp;lt;Таблица сортирована по столбцам поиска (INT)&amp;gt;}}):''&amp;lt;Индекс найденной строки таблицы (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит поиск заданного списком столбцов количества значений в таблице. Поиск начинается со строки, указанной в переменной второго аргумента или с первой строки, если аргумент пропущен. Поиск может принимать во внимание факт того, что таблица сортирована по всем столбцам поиска по неубыванию, что может значительно ускорить нахождение значения. Если значение найдено, индекс строки где оно было найдено, возвращается в результате функции и в переменной второго аргумента, если она задана. Если значение не было найдено, функция возвращает ноль и переменная не изменяется.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.LocateAndGoto|LocateAndGoto]]&lt;br /&gt;
|form={{Grey|Tab.}}'''LocateAndGoto'''(''&amp;lt;Список наименований столбцов поиска через запятую (STRING)&amp;gt;''{{Optional|,&amp;lt;Значение поиска столбца 1&amp;gt;,&amp;lt;Значение поиска столбца 2&amp;gt;...,&amp;lt;Таблица сортирована по столбцам поиска (INT)&amp;gt;}}):''&amp;lt;Индекс найденной строки таблицы (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит поиск заданного списком столбцов количества значений в таблице. Поиск всегда начинается со строки таблицы, следующей за текущей строкой (чтобы поиск начинался с начала таблицы, можно выполнить операцию &amp;lt;code&amp;gt;&amp;lt;Таблица&amp;gt;.CurLine:=0&amp;lt;/code&amp;gt;). Поиск может принимать во внимание факт того, что таблица сортирована по всем столбцам поиска по неубыванию, что может значительно ускорить нахождение значения. Если значение найдено, индекс строки где оно было найдено, возвращается в результате функции и обновляет текущую строку таблицы, иначе функция возвращает ноль.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Sort|Sort]]&lt;br /&gt;
|form={{Grey|Tab.}}'''Sort'''(''&amp;lt;Наименование столбцов сортировки с суффиксами через запятую (STRING)&amp;gt;''{{Optional|,&amp;lt;Алгоритм сортировки (INT)&amp;gt;{{Default|{{Eq}}1}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция выполняет сортировку строк таблицы по значениям указанных столбцов (направление сортировки может быть выбрано для каждого из столбцов в отдельности).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Sum|Sum]]&lt;br /&gt;
|form={{Grey|Tab.}}'''Sum'''(''&amp;lt;Наименование или индекс столбца (INT,STRING)&amp;gt;''{{Optional|,&amp;lt;Строки превращать в числа (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Индекс начальной строки (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Индекс конечной строки (INT)&amp;gt;{{Default|{{Eq}}&amp;lt;Последняя строка таблицы&amp;gt;}},&amp;lt;Округление при суммировании (INT)&amp;gt;{{Default|{{Eq}}-1}}}}):''&amp;lt;Результирующая сумма (NUMBER)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция находит сумму значений указанного столбца таблицы в указанном диапазоне строк таблицы. Значения, представленные строками, могут быть превращены в числа при сложении, если необходимо. Для исключения накопления неточности при сложении вещественных чисел, можно указать требуемое количество цифр после точки.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Compute|Compute]]&lt;br /&gt;
|form={{Grey|Tab.}}'''Compute'''(''&amp;lt;Наименование или индекс столбца (INT,STRING)&amp;gt;''{{Optional|,&amp;lt;Тип операции (STRING)&amp;gt;{{Default|{{Eq}}&amp;quot;SUM&amp;quot;}},&amp;lt;Строки превращать в числа (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Индекс начальной строки (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Индекс конечной строки (INT)&amp;gt;{{Default|{{Eq}}&amp;lt;Последняя строка таблицы&amp;gt;}},&amp;lt;Округление при суммировании или нахождении среднего (INT)&amp;gt;{{Default|{{Eq}}-1}}}}):''&amp;lt;Результат вычисления (NUMBER)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция выполняет одну из следующих операций на значениях указанного столбца таблицы в указанном диапазоне строк таблицы: сумма, минимум, максимум, среднее, количество значений. Значения, представленные строками, могут быть превращены в числа при сложении, если необходимо. Для исключения накопления неточности при сложении вещественных чисел, можно указать требуемое количество цифр после точки.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.SumLine|SumLine]]&lt;br /&gt;
|form={{Grey|Tab.}}'''SumLine'''(''&amp;lt;Индекс строки суммирования (INT)&amp;gt;''{{Optional|,&amp;lt;Строки превращать в числа (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Округление при суммировании (INT)&amp;gt;{{Default|{{Eq}}-1}}}}):''&amp;lt;Результирующая сумма (NUMBER)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция находит сумму значений указанной строки таблицы. Значения, представленные строками, могут быть превращены в числа при сложении, если необходимо. Для исключения накопления неточности при сложении вещественных чисел, можно указать требуемое количество цифр после точки.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Fill|Fill]]&lt;br /&gt;
|form={{Grey|Tab.}}'''Fill'''(''&amp;lt;Значение для заполнения&amp;gt;''{{Optional|,&amp;lt;Индекс начальной строки (INT)&amp;gt;,&amp;lt;Индекс конечной строки (INT)&amp;gt;,&amp;lt;Индекс или наименование столбца (INT,STRING)&amp;gt;}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция выполняет заполнение ячеек в указанном столбце таблицы для строк таблицы в указанном диапазоне указанным значением.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Copy|Copy]]&lt;br /&gt;
|form={{Grey|Tab.}}'''Copy'''():''&amp;lt;Новая таблица (TAB)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция создает новый объект таблицы и заполняет ее столбцами, строками и значениями из текущей таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.CopyTo|CopyTo]]&lt;br /&gt;
|form={{Grey|Tab.}}'''CopyTo'''({{ByRef|''&amp;lt;Объект в который происходит копирование&amp;gt;''}}{{Optional|,&amp;lt;Индекс начальной строки (INT)&amp;gt;,&amp;lt;Количество строк для копирования (INT)&amp;gt;,&amp;lt;Наименования столбцов копирования через запятую (STRING)&amp;gt;,&amp;lt;Наименования столбцов для фильтрации (STRING)&amp;gt;,&amp;lt;Фильтр столбца 1&amp;gt;,&amp;lt;Фильтр столбца 2&amp;gt;...}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция позволяет произвести копирование ячеек указанного столбца из текущей таблицы в заданный список, либо ячеек, указанных столбцов из текущей таблицы в заданную таблицу. Строки для копирования могут быть ограничены определенным диапазоном и выбраны с помощью заданного фильтра.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Group|Group]]&lt;br /&gt;
|form={{Grey|Tab.}}'''Group'''({{Optional|&amp;lt;Наименования столбцов группировки через запятую (STRING)&amp;gt;,&amp;lt;Наименования столбцов для агрегации с типами операций (STRING)&amp;gt;,&amp;lt;Округление при суммировании (INT)&amp;gt;{{Default|{{Eq}}-1}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит группировку таблицы по указанным столбцам, строки, где совокупность значений столбцов группировки повторяется, будут удалены, при этом над столбцами агрегации для всех строк дублей и строки, оставшейся в таблице, будет произведена указанная операция агрегации. Столбцы, не перечисленные в столбцах группировки и столбцах агрегации, будут удалены. Для исключения накопления неточности при сложении вещественных чисел, можно указать требуемое количество цифр после точки при выполнении операций агрегации. После выполнения операции, в таблице сохраняется порядок следования строк, существовавший до операции.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.InnerJoin|InnerJoin]], '''Join'''&lt;br /&gt;
|form={{Grey|Tab.}}'''InnerJoin'''(''&amp;lt;Таблица, с которой объединяется текущая (TAB)&amp;gt;''{{Optional|,&amp;lt;Наименования столбцов группировки через запятую (STRING)&amp;gt;,&amp;lt;Наименования столбцов для агрегации с типами операций (STRING)&amp;gt;,&amp;lt;Округление при суммировании (INT)&amp;gt;{{Default|{{Eq}}-1}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция оставляет в текущей таблице только строки, для которых присутствуют эквивалентные в указанной таблице (эквивалентной считается строка, для которой значения всех столбцов группировки в обеих таблицах будет одинаковым). При этом ячейки в столбцах агрегации будут представлять результат операции агрегации над оставленными строками исходной таблицы и всеми эквивалентными строками указанной таблицы. Для исключения накопления неточности при сложении вещественных чисел, можно указать требуемое количество цифр после точки при выполнении операций агрегации. После выполнения операции, в таблице сохраняется порядок следования строк, существовавший до операции.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.LeftOuterJoin|LeftOuterJoin]], '''LeftJoin'''&lt;br /&gt;
|form={{Grey|Tab.}}'''LeftOuterJoin'''(''&amp;lt;Таблица, с которой объединяется текущая (TAB)&amp;gt;''{{Optional|,&amp;lt;Наименования столбцов группировки через запятую (STRING)&amp;gt;,&amp;lt;Наименования столбцов для агрегации с типами операций (STRING)&amp;gt;,&amp;lt;Округление при суммировании (INT)&amp;gt;{{Default|{{Eq}}-1}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция выполняет агрегацию строк текущей таблицы с эквивалентными строками указанной таблицы (эквивалентной считается строка, для которой значения всех столбцов группировки в обеих таблицах будет одинаковым). При этом ячейки в столбцах агрегации будут представлять результат операции агрегации над строками исходной таблицы и всеми эквивалентными строками указанной таблицы. Для исключения накопления неточности при сложении вещественных чисел, можно указать требуемое количество цифр после точки при выполнении операций агрегации. После выполнения операции, в таблице сохраняется порядок следования строк, существовавший до операции.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.FullOuterJoin|FullOuterJoin]], '''FullJoin'''&lt;br /&gt;
|form={{Grey|Tab.}}'''FullOuterJoin'''(''&amp;lt;Таблица, с которой объединяется текущая (TAB)&amp;gt;''{{Optional|,&amp;lt;Наименования столбцов группировки через запятую (STRING)&amp;gt;,&amp;lt;Наименования столбцов для агрегации с типами операций (STRING)&amp;gt;,&amp;lt;Округление при суммировании (INT)&amp;gt;{{Default|{{Eq}}-1}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция выполняет агрегацию строк текущей таблицы с эквивалентными строками указанной таблицы (эквивалентной считается строка, для которой значения всех столбцов группировки в обеих таблицах будет одинаковым), строки указанной таблицы, для которых нет эквивалента в текущей таблице, будут добавлены в последнюю с конца таблицы. При этом ячейки в столбцах агрегации будут представлять результат операции агрегации над строками исходной таблицы и всеми эквивалентными строками указанной таблицы. Для исключения накопления неточности при сложении вещественных чисел, можно указать требуемое количество цифр после точки при выполнении операций агрегации. После выполнения операции, в таблице сохраняется порядок следования строк, существовавший до операции.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Combine|Combine]]&lt;br /&gt;
|form={{Grey|Tab.}}'''Combine'''(''&amp;lt;Таблица для выполнения операции (TAB)&amp;gt;'',''&amp;lt;Наименования или индексы столбцов для сравнения (STRING)&amp;gt;''{{Optional|,&amp;lt;Тип операции (STRING)&amp;gt;{{Default|{{Eq}}&amp;quot;ADD&amp;quot;}},&amp;lt;Таблица сортирована по столбцам поиска (INT)&amp;gt;{{Default|{{Eq}}0}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция выполняет операцию объединения, заданную вторым аргументом, над текущей таблицей и таблицей, заданной первым аргументом. Результат операции сохраняется в текущей таблице. Аргегаьных операций не выполняется. Функцией удобно пользоваться, когда нет необходимости выполнять аргегатные операции, она проще и быстрее чем функции группы ''Join''.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.RemoveLocated|RemoveLocated]]&lt;br /&gt;
|form={{Grey|Tab.}}'''RemoveLocated'''({{Optional|&amp;lt;Наименования столбцов поиска через запятую (STRING)&amp;gt;,&amp;lt;Значение столбца 1&amp;gt;,&amp;lt;Значение столбца 2&amp;gt;...,&amp;lt;Таблица сортирована по столбцам поиска (INT)&amp;gt;}}):''&amp;lt;Удален по крайней мере один элемент (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит поиск заданного списком столбцов количества значений в таблице. Строки, подходящие под фильтр поиска, будут удалены из таблицы. Поиск начинается со строки таблицы, следующей за текущей. Поиск может принимать во внимание факт того, что таблица сортирована по всем столбцам поиска по неубыванию, что может значительно ускорить операцию.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.RemoveLocatedEx|RemoveLocatedEx]]&lt;br /&gt;
|form={{Grey|Tab.}}'''RemoveLocatedEx'''({{Optional|&amp;lt;Наименования столбцов поиска через запятую (STRING)&amp;gt;,{{OptionalByRef|&amp;lt;Начальный индекс поиска, результирующий индекс (INT)&amp;gt;}},&amp;lt;Значение столбца 1&amp;gt;,&amp;lt;Значение столбца 2&amp;gt;...,&amp;lt;Таблица сортирована по столбцам поиска (INT)&amp;gt;}}):''&amp;lt;Удален по крайней мере один элемент (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит поиск заданного списком столбцов количества значений в таблице. Строки, подходящие под фильтр поиска, будут удалены из таблицы. Поиск начинается со строки таблицы, заданной вторым аргументом. Поиск может принимать во внимание факт того, что таблица сортирована по всем столбцам поиска по неубыванию, что может значительно ускорить операцию. Строка за последним найденным значением будет возвращена в переменной, заданной вторым аргументом, если таковая присутствует. В отличие от [[Tab.RemoveLocatedEx|RemoveLocatedEx]] функция не использует текущую строку, что позволяет ее применять при работе с нескольми потоками (thread-safe).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Compare|Compare]]&lt;br /&gt;
|form={{Grey|Tab.}}'''Compare'''(''&amp;lt;Таблица для сравнения (TAB)&amp;gt;''{{Optional|,&amp;lt;Столбцы для сравнения (STRING)&amp;gt;}}):''&amp;lt;Сравниваемая таблица совпадает с текущей (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция сравнивает текущую таблицу с заданной по указанным правилам, и возвращает 1, если таблицы эквивалентны. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.RescaleColumns|RescaleColumns]]&lt;br /&gt;
|form={{Grey|Tab.}}'''RescaleColumns'''({{Optional|&amp;lt;Процент использования ширины таблицы (INT)&amp;gt;{{Default|{{Eq}}100}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция выполняет изменение размеров видимых столбцов таблицы таким образом, чтобы они занимали всю ширину таблицы на экране, либо ее требуемую часть, если задан первый аргумент.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.FixedLines|FixedLines]]&lt;br /&gt;
|form={{Grey|Tab.}}'''FixedLines'''({{Optional|&amp;lt;Новое количество закрепленных строк (INT)&amp;gt;}}):''&amp;lt;Текущее количество закрепленных строк (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция производит закрепление заданного количества строк в верхней части визуального представления таблицы. Вне зависимости от положения курсора внутри таблицы, выбранные строки всегда будут показаны на экране.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.FixedColumns|FixedColumns]]&lt;br /&gt;
|form={{Grey|Tab.}}'''FixedColumns'''({{Optional|&amp;lt;Новое количество закрепленных столбцов (INT)&amp;gt;}}):''&amp;lt;Текущее количество закрепленных столбцов (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция производит закрепление заданного количества столбцов в верхней части визуального представления таблицы. Вне зависимости от положения курсора внутри таблицы, выбранные столбцы всегда будут показаны на экране.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Check|Check]]&lt;br /&gt;
|form={{Grey|Tab.}}'''Check'''(''&amp;lt;Индекс строки галочки (INT)&amp;gt;'',''&amp;lt;Индекс или наименование столбца галочки (INT,STRING)&amp;gt;''{{Optional|,&amp;lt;Новое состояние галочки (INT)&amp;gt;}}):''&amp;lt;Текущее состояние галочки (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция считывает или устанавливает значение галочки в указанном столбце таблицы. Функция может использоваться также для невизуальных таблиц.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Icon|Icon]]&lt;br /&gt;
|form={{Grey|Tab.}}'''Icon'''(''&amp;lt;Индекс строки иконки (INT)&amp;gt;''{{Optional|,&amp;lt;Индекс или наименование столбца иконки (INT,STRING)&amp;gt;,&amp;lt;Новый индекс иконки (INT)&amp;gt;}}):''&amp;lt;Текущий индекс иконки (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция считывает или устанавливает значение индекса иконки в указанном столбце таблицы. Функция может использоваться также для невизуальных таблиц.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.BackgroundColor|BackgroundColor]]&lt;br /&gt;
|form={{Grey|Tab.}}'''BackgroundColor'''({{Optional|&amp;lt;Индекс строки ячейки (INT)&amp;gt;,&amp;lt;Индекс или наименование столбца ячейки (INT,STRING)&amp;gt;,&amp;lt;Новый цвет фона ячейки (INT)&amp;gt;}}):''&amp;lt;Текущий цвет фона ячейки (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция считывает или устанавливает значение цвета фона ячейки в указанном столбце таблицы. Если столбец таблицы не указан цвет меняется для всей строки, если строка не указана для всех строк столбца или для всей таблицы, если не указана ни строка ни столбец. Функция может использоваться также для невизуальных таблиц.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.FontColor|FontColor]]&lt;br /&gt;
|form={{Grey|Tab.}}'''FontColor'''(''&amp;lt;Индекс строки ячейки (INT)&amp;gt;''{{Optional|,&amp;lt;Индекс или наименование столбца ячейки (INT,STRING)&amp;gt;,&amp;lt;Новый цвет текста ячейки (INT)&amp;gt;}}):''&amp;lt;Текущий цвет текста ячейки (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция считывает или устанавливает значение цвета текста в указанном столбце таблицы. Если столбец таблицы не указан цвет меняется для всей строки. Функция может использоваться также для невизуальных таблиц.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.FontStyle|FontStyle]]&lt;br /&gt;
|form={{Grey|Tab.}}'''FontStyle'''(''&amp;lt;Индекс строки ячейки (INT)&amp;gt;''{{Optional|,&amp;lt;Индекс или наименование столбца ячейки (INT,STRING)&amp;gt;,&amp;lt;Новый стиль текста ячейки (INT)&amp;gt;}}):''&amp;lt;Текущий стиль текста ячейки (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция считывает или устанавливает значение стиля текста в указанном столбце таблицы. Если столбец таблицы не указан стиль меняется для всей строки. Функция может использоваться также для невизуальных таблиц.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.HighlightMode|HighlightMode]]&lt;br /&gt;
|form={{Grey|Tab.}}'''HighlightMode'''(''&amp;lt;Режим подсветки таблиц по умолчанию (INT)&amp;gt;''{{Optional|,&amp;lt;Цвет нечетных строк (INT)&amp;gt;,&amp;lt;Процент цвета нечетных строк (INT)&amp;gt;,&amp;lt;Цвет выделения строки или столбца курсора (INT)&amp;gt;,&amp;lt;Процент цвета выделения строки или столбца курсора (INT)&amp;gt;}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция изменяет режим подсветки строк текущей таблицы. Для глобального изменения подсветки всех таблиц см. функцию [[DefaultHighlightMode]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.StartEdit|StartEdit]]&lt;br /&gt;
|form={{Grey|Tab.}}'''StartEdit'''({{Optional|&amp;lt;Индекс строки ячейки (INT)&amp;gt;,&amp;lt;Индекс или наименование столбца ячейки (INT,STRING)&amp;gt;}}):''&amp;lt;Редактирование инициировано (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция производит попытку запустить редактор ячейки таблицы для указанной ячейки таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.FinishEdit|FinishEdit]]&lt;br /&gt;
|form={{Grey|Tab.}}'''FinishEdit'''({{Optional|&amp;lt;Режим окончания редактирования (INT)&amp;gt;,&amp;lt;Индекс выделенного столбца после окончания редактирования или ноль (INT,STRING)&amp;gt;}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция инициирует окончание редактирования ячейки таблицы в указанном режиме.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Lock|Lock]]&lt;br /&gt;
|form={{Grey|Tab.}}'''Lock'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция запрещает выполнения обновления визуальной таблицы при любом ее изменении до тех пор, пока не будет вызвана функция [[Tab.Unlock|Unlock]]. Функция может использоваться перед большим количеством обновлений или заполнении большой таблицы для получения значительного ускорения операции. Функцию необходимо использовать совместно с конструкцией &amp;lt;code&amp;gt;Try .. Finally&amp;lt;/code&amp;gt; для исключения вероятности появления нерабочей таблицы на форме.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Unlock|Unlock]]&lt;br /&gt;
|form={{Grey|Tab.}}'''Unlock'''()&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция разрешает запрещенное ранее функцией [[Tab.Lock|Lock]] выполнения обновления визуальной таблицы при любом ее изменении. См. функцию [[Tab.Lock|Lock]].&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.IsLocked|IsLocked]]&lt;br /&gt;
|form={{Grey|Tab.}}'''IsLocked'''():''&amp;lt;Обновление запрещено (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Функция проверяет, запрещено ли в данный момент обновление таблицы при ее изменении, запрет инициируется с помощью функции [[Tab.Lock|Lock]].&lt;br /&gt;
}}&lt;br /&gt;
{{function footer}}&lt;br /&gt;
&lt;br /&gt;
== Объект столбца таблицы ==&lt;br /&gt;
Подчиненный объект, ссылающийся на таблицу, используется для доступа к свойствам столбцов таблицы. Так как объект будет ссылаться на определенный столбец таблицы, существует вероятность удаления этого столбца в другом потоке до того, как программа закончит работу с объектом, это может создать ошибочную ситуацию. Чтобы обойти проблему, необходимо либо убедиться, что объект будет использоваться только в одном потоке, столбцы не будут удаляться в других потоках или использовать функции [[LockObject]] и [[UnlockObject]] (однако, их нельзя использовать с визуальными объектами). Функции, типа [[TypeStr]] будут возвращать такие же значения для этого объекта, как и для объекта основной таблицы.&lt;br /&gt;
&lt;br /&gt;
{{function header}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Column.Name|Name]]&lt;br /&gt;
|form={{Grey|Tab.Column.}}'''Name''':''&amp;lt;Имя столбца (STRING)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут позволяет получать или изменять имя столбца таблицы. Имена столбцов всегда хранятся в верхнем регистре.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Column.Caption|Caption]]&lt;br /&gt;
|form={{Grey|Tab.Column.}}'''Caption''':''&amp;lt;Заголовок столбца (STRING)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут позволяет получать или изменять заголовок столбца таблицы. &lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Column.DataType|DataType]]&lt;br /&gt;
|form={{Grey|Tab.Column.}}'''DataType''':''&amp;lt;Тип данных столбца (STRING)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут позволяет получать или изменять тип данных столбца таблицы. При изменении типа данных всех существующие ячейки таблицы в данном столбце, будут преобразованы в новый тип данных.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Column.Width|Width]]&lt;br /&gt;
|form={{Grey|Tab.Column.}}'''Width''':''&amp;lt;Ширина столбца (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут позволяет получать или изменять ширину столбца таблицы в пикселях.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Column.Align|Align]]&lt;br /&gt;
|form={{Grey|Tab.Column.}}'''Align''':''&amp;lt;Режим выравнивания столбца (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут позволяет получать или изменять режим выравнивания при выводе текста в столбце таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Column.Mask|Mask]]&lt;br /&gt;
|form={{Grey|Tab.Column.}}'''Mask''':''&amp;lt;Шаблон редактирования столбца (STRING)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут позволяет получать или изменять шаблон маски редактирования ячеек столбца таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Column.IsVisible|IsVisible]]&lt;br /&gt;
|form={{Grey|Tab.Column.}}'''IsVisible''':''&amp;lt;Видимость столбца (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут позволяет получать состояние или изменять видимость столбца на экране.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Column.Value|Value]]&lt;br /&gt;
|form={{Grey|Tab.Column.}}'''Value''':''&amp;lt;Значение столбца в строке CurLine (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут позволяет получать или изменять значение ячейки столбца в текущей строке таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Column.ShowCheckboxes|ShowCheckboxes]]&lt;br /&gt;
|form={{Grey|Tab.Column.}}'''ShowCheckboxes''':''&amp;lt;Показывать галки в столбце (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут позволяет получать состояние или изменять видимость галочек в столбце таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Column.ShowIcons|ShowIcons]]&lt;br /&gt;
|form={{Grey|Tab.Column.}}'''ShowIcons''':''&amp;lt;Показывать иконки в столбце (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут позволяет получать состояние или изменять видимость иконок в столбце таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Column.RedNegative|RedNegative]]&lt;br /&gt;
|form={{Grey|Tab.Column.}}'''RedNegative''':''&amp;lt;Выделять отрицательные числа красным в столбце (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут позволяет получать состояние или изменять режим выделения красным ячеек таблицы, содержащих отрицательные числа в столбце таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Column.Hint|Hint]]&lt;br /&gt;
|form={{Grey|Tab.Column.}}'''Hint''':''&amp;lt;Всплывающая подсказка для столбца (STRING)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут позволяет получать или изменять строку подсказки при наведении мышью на заголовок столбца таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Column.IsEditable|IsEditable]]&lt;br /&gt;
|form={{Grey|Tab.Column.}}'''IsEditable''':''&amp;lt;Данные в столбце можно редактировать (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут позволяет получать или изменять разрешение редактирования столбца таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Column.IsSortable|IsSortable]]&lt;br /&gt;
|form={{Grey|Tab.Column.}}'''IsSortable''':''&amp;lt;Режим сортировки столбца (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут позволяет получать или изменять разрешение визуальной сортировки столбца таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Column.IsInEnterChain|IsInEnterChain]]&lt;br /&gt;
|form={{Grey|Tab.Column.}}'''IsInEnterChain''':''&amp;lt;Столбец находить в Enter-цепочке (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут позволяет получать или изменять режим участия ячеек столбца таблицы в визуальной цепочке ввода.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Column.IsReadonly|IsReadonly]]&lt;br /&gt;
|form={{Grey|Tab.Column.}}'''IsReadonly''':''&amp;lt;Столбец имеет атрибут только для чтения (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут позволяет получать или изменять режим только для чтения при редактировании ячеек столбца таблицы.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Column.MinWidth|MinWidth]]&lt;br /&gt;
|form={{Grey|Tab.Column.}}'''MinWidth''':''&amp;lt;Минимальная ширина столбца (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут позволяет получать или изменять минимальную ширину столбца таблицы в пикселях.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Column.MaxWidth|MaxWidth]]&lt;br /&gt;
|form={{Grey|Tab.Column.}}'''MaxWidth''':''&amp;lt;Максимальная ширина столбца (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут позволяет получать или изменять максимальную ширину столбца таблицы в пикселях.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Column.Filter|Filter]]&lt;br /&gt;
|form={{Grey|Tab.Column.}}'''Filter''':''&amp;lt;Текущий визуальный фильтр столбца (STRING)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=1&lt;br /&gt;
|description=Атрибут позволяет получать текущий визуальный фильтр столбца таблицы (строку, введенную пользователем в этом столбце, для быстрого фильтрования элементов таблицы).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Tab.Column.ForbidMassLoad|ForbidMassLoad]]&lt;br /&gt;
|form={{Grey|Tab.Column.}}'''ForbidMassLoad''':''&amp;lt;Запретить загрузку столбца функцией Massload (INT)&amp;gt;''&lt;br /&gt;
|type=0&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Атрибут позволяет получать или изменять режим запрета загрузки элементов ячеек столбца таблицы из базы данных при вызове функции [[MassLoadObjects]].&lt;br /&gt;
}}&lt;br /&gt;
{{function footer}}&lt;br /&gt;
&lt;br /&gt;
{{Объекты}}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://sfsys.ru/index.php?title=%D0%A1%D1%82%D1%83%D0%B4%D0%B8%D1%8F/%D0%9A%D0%BD%D0%BE%D0%BF%D0%BA%D0%B0&amp;diff=5162</id>
		<title>Студия/Кнопка</title>
		<link rel="alternate" type="text/html" href="http://sfsys.ru/index.php?title=%D0%A1%D1%82%D1%83%D0%B4%D0%B8%D1%8F/%D0%9A%D0%BD%D0%BE%D0%BF%D0%BA%D0%B0&amp;diff=5162"/>
		<updated>2025-12-27T17:08:57Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{HeadLinks|&lt;br /&gt;
* [[Main_Page|Начальная страница]]&lt;br /&gt;
* [[Общая информация и интерфейс Студии]]&lt;br /&gt;
* [[Студия/Редактор форм|Редактор форм]]}}&lt;br /&gt;
&amp;lt;gallery widths=599px heights=33px&amp;gt;&lt;br /&gt;
Studio Button 1.png||Пример набора кнопок в нижней части формы документа&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Кнопки используются для закрытия формы, принятия и сохранения изменений, вывода отчетов и запуска обработок, т.е., везде, где необходимо осуществить какие-либо программно заданное действие. Кнопки не имеют привязки к базе данных и не содержат значений. С точки зрения системы не связанная с другими элементами кнопка отличается от связанных элементов-кнопок (для дополнительной информации по ним см. выше параграф &amp;quot;Связанные визуальные элементы&amp;quot;). Кнопки имеют следующие визуальные свойства:&lt;br /&gt;
* Закладка '''Визуальные''':&lt;br /&gt;
** '''Caption''' (заголовок) -- задает текст, который будет выведен на этой кнопке. &lt;br /&gt;
** '''Anchor''' (якоря) -- задает якоря визуального элемента.&lt;br /&gt;
** '''Top''', '''Left''' (координата верхнего левого угла) -- задает координату (в точках) верхнего левого угла элемента относительно начала формы.&lt;br /&gt;
** '''Width''', '''Height''' (высота и ширина) -- задает высоту и ширину (в точках) элемента.&lt;br /&gt;
** '''MaxWidth''', '''MaxHeight''' (максимальная высота и ширина) -- задает максимальную высоту и ширину (в точках) элемента. Иногда бывает необходимо ограничить увеличение размера элемента вместе с размерами формы, так как излишнее увеличение может ухудшить читаемость и осложнить работу с элементом. К примеру, слишком длинное поле редактирования неудобно для чтения и т.п. Максимальные размеры позволяют ограничить увеличение элементов до приемлемых величин.&lt;br /&gt;
** '''Layer''' (слой формы) -- задает слой формы, которому принадлежит текущий элемент. Для описания редактора слоев, см. [[Студия/Редактор свойств#Редактор слоев|следующую статью]].&lt;br /&gt;
** '''Font''' (шрифт элемента) -- задает шрифт, размер и цвет текста элемента. Для описания редактора шрифтов, см. [[Студия/Редактор свойств#Редактор шрифтов|следующую статью]].&lt;br /&gt;
** '''FontColor''' (цвет текста элемента) -- задает цвет текста элемента. Для описания редактора цветов, см. [[Студия/Редактор свойств#Диалог выбора цветов|следующую статью]].&lt;br /&gt;
** '''Color''' (цвет фона элемента) -- задает цвет фона элемента. Для описания редактора цветов, см. [[Студия/Редактор свойств#Диалог выбора цветов|следующую статью]].&lt;br /&gt;
** '''IsDisabled''' (недоступность элемента) -- устанавливает режим недоступности элемента. При установке режима на кнопку, она становится недоступной для нажатия, изменяется ее вид.&lt;br /&gt;
** '''IsInvisible''' (невидимость элемента) -- элемент (и его связанных элементы) становится невидимым в рабочем режиме. В режиме редактирования в Студии, элемент по-прежнему отображен.&lt;br /&gt;
** '''HasNoFocus''' (отсутствие фокуса) -- кнопка не может получить фокус (может использоваться на формах без элементов с фокусом, к примеру, для сенсорных экранов), она становится плоской и такие свойства, как ''IsDefault'' не будут применимы к ней. Кнопка также исключается из цепочки обхода (Enter-цепочка).&lt;br /&gt;
** '''IsAsyncMode''' (режим выполнения) -- событие, связанное с нажатием на кнопку, будет выполняться как прерывающее, а не асинхронное.&lt;br /&gt;
** '''NoDisable''' (запрет недоступности) -- кнопка не будет недоступна в режиме только для чтения формы или при использовании DisableControls (обычно для кнопок, вызывающих помощь).&lt;br /&gt;
** '''IsDefault''' (кнопка по умолчанию) -- задает эту кнопку, как кнопку по умолчанию на текущей форме. Кнопка будет выделена дополнительно и при использовании комбинации ''Ctrl+Enter'', если эта комбинация не задана на других элементах, эта кнопка будет автоматически активирована. На форме обычно разрешается наличие только одной кнопки по умолчанию.&lt;br /&gt;
** '''IfResizeWithParentX''', '''IfResizeWithParentY''' (привязка размеров к группе элементов) -- Особые установки, работающие совместно с ''MaxWidth'' и ''MaxHeight'', если последние заданы для группы элементов, на которой находится текущий элемент, его размеры будут привязаны не к самой форме, а к элементу группы. Без такого условия, невозможно было бы использовать ''MaxWidth'' и ''MaxHeight'' для форм со сложным расположением элементов.&lt;br /&gt;
** '''Picture''' (картинка) -- определяет наличие на кнопке картинки из библиотеки картинок (см. [[Студия/Библиотека картинок|Библиотека картинок]]).&lt;br /&gt;
** '''Hint''' (всплывающая подсказка) -- определяет текст всплывающей подсказки при наведении курсора мыши на элемент. Если свойство не задано (пустая строка), подсказка не будет выводиться.&lt;br /&gt;
* Закладка '''Данные''':&lt;br /&gt;
** '''Name''' (наименование) -- задает наименование элемента, с помощью которого к нему можно будет обращаться из программных модулей. Если свойства элемента не будут изменяться программно, наименование можно оставить пустым.&lt;br /&gt;
** '''IsInEnterChain''' (включение в Enter-цепочку) -- задает режим включения данного элемента в цепочку обхода элементов с помощью клавиши Enter. При вводе информации на форме, когда требуется это сделать быстро, возникает необходимость использовать только клавиатуру, так как использовании мыши может замедлить ввод. Обычно без использования мыши, оператор может активировать элемент с помощью комбинации клавиш ''Tab'' или ''Shift-Tab'', однако, эти комбинации последовательно активируют все элементы формы, для которых возможно редактирование. В формах ввода, которые используются очень часто, удобно пропускать элементы, которые обычно не участвуют в редактировании. Для этого существует особая очередь элементов, которые будут последовательно активированы с помощью клавиши ''Enter'', так называемая Enter-цепочка. Такая очередь позволяет оператору быстро обойти нужные элементы при вводе информации и сохранить содержимое формы с тем, чтобы начать ввод новой. См. [[Студия/Редактор форм#Редактор Enter-цепочки|редактор Enter-цепочки]].&lt;br /&gt;
** '''HotKey''' (комбинация клавиш для активации элемента) -- задает комбинация клавиш для мгновенной активации элемента. Для описания редактора горячих клавиш см. [[Студия/Редактор свойств#Редактор горячих клавиш|следующую статью]].&lt;br /&gt;
* Закладка '''События''' предоставляет доступ к следующим событиям (см. [[Студия/Визуальные события|Визуальные события]]): &lt;br /&gt;
** [[Студия/OnGetCaption|'''OnGetCaption''']] -- событие получает заголовок кнопки при любом обновлении.&lt;br /&gt;
** [[Студия/OnClick|'''OnClick''']] -- событие, возникающее при кнопке по полю мышью или нажатии ''Enter''.&lt;br /&gt;
** [[Студия/OnRightClick|'''OnRightClick''']] -- событие, возникающее при правом клике по полю мышью.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Дополнительная информация:&lt;br /&gt;
* Для работы со свойствами объектов формы из программы, см. статью [[Форма]].&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://sfsys.ru/index.php?title=%D0%A1%D1%82%D1%80%D0%BE%D0%BA%D0%BE%D0%B2%D1%8B%D0%B5_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=5160</id>
		<title>Строковые функции</title>
		<link rel="alternate" type="text/html" href="http://sfsys.ru/index.php?title=%D0%A1%D1%82%D1%80%D0%BE%D0%BA%D0%BE%D0%B2%D1%8B%D0%B5_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=5160"/>
		<updated>2025-12-27T17:08:55Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{infobox object&lt;br /&gt;
|image=&lt;br /&gt;
|visual=&lt;br /&gt;
|object=&lt;br /&gt;
|status=2&lt;br /&gt;
|create=&lt;br /&gt;
}}&lt;br /&gt;
{{HeadLinks|&lt;br /&gt;
* [[Main_Page|Начальная страница]]&lt;br /&gt;
* [[Общее_описание_языка|Общее описание]]}}&lt;br /&gt;
__TOC__&lt;br /&gt;
Строковые функции работают со строками, их модификацией и превращением в разные кодировки и пр. Важно понимать, что в системе есть два вида строковых объектов -- однобайтовый (ANSI) и многобайтовый (Unicode). Более подробно см. [[Строки]].&lt;br /&gt;
&lt;br /&gt;
== Основные функции ==&lt;br /&gt;
{{function header}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Str]]&lt;br /&gt;
|form='''Str'''(''&amp;lt;Аргумент&amp;gt;''{{Optional|,''&amp;lt;Тип&amp;gt;''{{Default|{{Eq}}0}}}}):''&amp;lt;Строковое представление (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Превращение объекта в строковое представление с возможностью указания типа получаемой строки.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[StringTypeStr]]&lt;br /&gt;
|form='''StringTypeStr'''(''&amp;lt;Аргумент&amp;gt;''):''&amp;lt;Тип строкового аргумента (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает строку &amp;quot;ANSI&amp;quot;, в случае, если строковое представление аргумента использует однобайтовую кодировку (ANSI), иначе будет возвращена строка &amp;quot;UNICODE&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Length]]&lt;br /&gt;
|form='''Length'''(''&amp;lt;Аргумент&amp;gt;''):''&amp;lt;Длина строки в символах (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Нахождение длины строки&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[IsBlankString]]&lt;br /&gt;
|form='''IsBlankString'''(''&amp;lt;Аргумент&amp;gt;''):''&amp;lt;1 или 0 (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция проверяет, является ли аргумент пустой строкой (в строке позволяются пробелы, знаки табуляции и знаки перевода строки)&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[TrimL]]&lt;br /&gt;
|form='''TrimL'''(''&amp;lt;Аргумент&amp;gt;''):''&amp;lt;Результат (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция убирает пробелы, знаки табуляции и знаки переноса строки с начала строки строкового аргумента.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[TrimR]]&lt;br /&gt;
|form='''TrimR'''(''&amp;lt;Аргумент&amp;gt;''):''&amp;lt;Результат (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция убирает пробелы, знаки табуляции и знаки переноса строки с конца строки строкового аргумента.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Trim]]&lt;br /&gt;
|form='''Trim'''(''&amp;lt;Аргумент&amp;gt;''):''&amp;lt;Результат (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция убирает пробелы, знаки табуляции и знаки переноса строки с начала и с конца строки строкового аргумента.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Left]]&lt;br /&gt;
|form='''Left'''(''&amp;lt;Аргумент&amp;gt;'',''&amp;lt;Количество символов (INT)&amp;gt;''):''&amp;lt;Результат (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает левую часть строки аргумента с указанным размером&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Right]]&lt;br /&gt;
|form='''Right'''(''&amp;lt;Аргумент&amp;gt;'',''&amp;lt;Количество символов (INT)&amp;gt;''):''&amp;lt;Результат (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает правую часть строки аргумента с указанным размером&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Mid]]&lt;br /&gt;
|form='''Mid'''(''&amp;lt;Аргумент&amp;gt;'',''&amp;lt;Индекс начального символа (INT)&amp;gt;''{{Optional|,&amp;lt;Количество символов (INT)&amp;gt;}}):''&amp;lt;Результат (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция получает произвольную часть строки аргумента&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Pos]]&lt;br /&gt;
|form='''Pos'''(''&amp;lt;Подстрока поиска&amp;gt;'',''&amp;lt;Строка в которой происходит поиск&amp;gt;''{{Optional|,&amp;lt;Индекс начального символа (INT)&amp;gt;}}):''&amp;lt;Индекс в строке поиска (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Находит вхождение подстроки в указанную строку поиска, начиная с указанной позиции, если подстрока не найдена, возвращает ноль&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[PosNoCase]]&lt;br /&gt;
|form='''PosNoCase'''(''&amp;lt;Подстрока поиска&amp;gt;'',''&amp;lt;Строка в которой происходит поиск&amp;gt;''{{Optional|,&amp;lt;Индекс начального символа (INT)&amp;gt;}}):''&amp;lt;Индекс в строке поиска (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Находит вхождение подстроки в указанную строку поиска, начиная с указанной позиции, если подстрока не найдена, возвращает ноль. Поиск ведется без учета регистра&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[RightPos]]&lt;br /&gt;
|form='''RightPos'''(''&amp;lt;Подстрока поиска&amp;gt;'',''&amp;lt;Строка в которой происходит поиск&amp;gt;''{{Optional|,&amp;lt;Индекс начального символа (INT)&amp;gt;}}):''&amp;lt;Индекс в строке поиска (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Находит вхождение подстроки в указанную строку поиска, начиная с указанной позиции, если подстрока не найдена, возвращает ноль. Поиск производится справа-налево.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[RightPosNoCase]]&lt;br /&gt;
|form='''RightPosNoCase'''(''&amp;lt;Подстрока поиска&amp;gt;'',''&amp;lt;Строка в которой происходит поиск&amp;gt;''{{Optional|,&amp;lt;Индекс начального символа (INT)&amp;gt;}}):''&amp;lt;Индекс в строке поиска (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Находит вхождение подстроки в указанную строку поиска, начиная с указанной позиции, если подстрока не найдена, возвращает ноль. Поиск производится справа-налево. Поиск ведется без учета регистра&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Replace]]&lt;br /&gt;
|form='''Replace'''(''&amp;lt;Строка в которой происходит замена&amp;gt;'',''&amp;lt;Подстрока поиска&amp;gt;'',''&amp;lt;Подстрока замены&amp;gt;''):''&amp;lt;Результат (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Заменяет все вхождения строки второго аргумента в строке первого аргумента на строку третьего аргумента. Третий аргумент может содержать в себе строку второго аргумента.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ReplaceCharacters]]&lt;br /&gt;
|form='''ReplaceCharacters'''(''&amp;lt;Строка в которой происходит замена&amp;gt;'',''&amp;lt;Заменяемые символы&amp;gt;'',''&amp;lt;Заменяющие символы&amp;gt;''):''&amp;lt;Результат (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит множественную замену определенных символов на другие и возвращает ее результат.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ReplaceNoCase]]&lt;br /&gt;
|form='''ReplaceNoCase'''(''&amp;lt;Строка в которой происходит замена&amp;gt;'',''&amp;lt;Подстрока поиска&amp;gt;'',''&amp;lt;Подстрока замены&amp;gt;''):''&amp;lt;Результат (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Заменяет все вхождения строки второго аргумента в строке первого аргумента на строку третьего аргумента. Третий аргумент может содержать в себе строку второго аргумента. Поиск ведется без учета регистра&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[RepeatStr]]&lt;br /&gt;
|form='''RepeatStr'''(''&amp;lt;Аргумент&amp;gt;'',''&amp;lt;Количество повторений (INT)&amp;gt;''):''&amp;lt;Результат (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Повторяет строковое представление аргумента указанное количество раз&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Reverse]]&lt;br /&gt;
|form='''Reverse'''(''&amp;lt;Аргумент&amp;gt;''):''&amp;lt;Результат (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Получает строку набранную с конца до начала строкого представления аргумента&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[StrCount]]&lt;br /&gt;
|form='''StrCount'''(''&amp;lt;Подстрока поиска&amp;gt;'',''&amp;lt;Строка в которой происходит поиск&amp;gt;''):''&amp;lt;Количество вхождений (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Находит количество вхождений подстроки поиска в строку, представленную вторым аргументом. После нахождения вхождения индекс поиска сдвигается на размер строки поиска.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[LinesCount]]&lt;br /&gt;
|form='''LinesCount'''(''&amp;lt;Аргумент&amp;gt;''):''&amp;lt;Количество строк (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Находит количество вхождений знака перевода строки в строковое представление аргумента и увеличивает результат на единицу&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GetLine]]&lt;br /&gt;
|form='''GetLine'''(''&amp;lt;Аргумент&amp;gt;'',''&amp;lt;Номер строки (INT)&amp;gt;''):''&amp;lt;Результат (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=В строковом представлении аргумента, разделенного знаками перевода строки, находит и возвращает подстроку с указанным индексом.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[UpperCase]]&lt;br /&gt;
|form='''UpperCase'''(''&amp;lt;Аргумент&amp;gt;''):''&amp;lt;Результат (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Возвращает строковое представление аргумента, переведенное в верхний регистр&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[LowerCase]]&lt;br /&gt;
|form='''LowerCase'''(''&amp;lt;Аргумент&amp;gt;''):''&amp;lt;Результат (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Возвращает строковое представление аргумента, переведенное в нижний регистр&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Capitalize]]&lt;br /&gt;
|form='''Capitalize'''(''&amp;lt;Аргумент&amp;gt;''):''&amp;lt;Результат (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция возвращает строковое представление аргумента, переводя первый его символ в верхний регистр.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[RemoveNonPrintableChars]]&lt;br /&gt;
|form='''RemoveNonPrintableChars'''(''&amp;lt;Аргумент&amp;gt;''{{Optional|,''&amp;lt;Оставить символы перевода строки (INT)&amp;gt;''{{Default|{{Eq}}0}}}}):''&amp;lt;Результат (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Удаляет из текстового представления аргумента непечатные символы (символы с кодом &amp;lt;32), оставляя символы перевода строки при необходимости&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Chr]]&lt;br /&gt;
|form='''Chr'''(''&amp;lt;Код символа (INT)&amp;gt;''{{Optional|,''&amp;lt;Тип (INT)&amp;gt;''{{Default|{{Eq}}0}}}}):''&amp;lt;Символ (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Возвращает строку, состоящую из одного символа по указанному коду в ANSI или UTF-16 кодировке.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Asc]]&lt;br /&gt;
|form='''Asc'''(''&amp;lt;Аргумент&amp;gt;''):''&amp;lt;Код символа (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Возвращает код первого символа строкового представления аргумента.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ContainsOnlyCharacters]]&lt;br /&gt;
|form='''ContainsOnlyCharacters'''(''&amp;lt;Аргумент&amp;gt;'',''&amp;lt;Набор символов&amp;gt;''):''&amp;lt;0 или 1 (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Проверяет, содержит ли строковое представление первого аргумента только символы, указанные в строковом представлении второго аргумента.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[CompareStrings]]&lt;br /&gt;
|form='''CompareStrings'''(''&amp;lt;Аргумент 1&amp;gt;'',''&amp;lt;Аргумент 2&amp;gt;''{{Optional|,''&amp;lt;Метод (INT)&amp;gt;''{{Default|{{Eq}}1}}}}{{OptionalByRef|,''&amp;lt;Ошибка&amp;gt;''{{Default|{{Eq}}&amp;quot;&amp;quot;}}}}):''&amp;lt;0, 1 или -1 (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Сравнивает две строки, используя указанный метод, возвращает -1, если первая строка меньше второй, 0, если строки равны и 1 в ином случае.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[IsUnicode]]&lt;br /&gt;
|form='''IsUnicode'''(''&amp;lt;Аргумент&amp;gt;''):''&amp;lt;0 или 1 (INT)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Проверяет, является ли строковое представление аргумента строкой UTF-16 или ANSI (см. [[Строки]])&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Unicode]]&lt;br /&gt;
|form='''Unicode'''(''&amp;lt;Аргумент&amp;gt;''):''&amp;lt;Результат (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Безусловно переводит строковое представление аргумента в строку UTF-16&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[UnicodeToUTF8]]&lt;br /&gt;
|form='''UnicodeToUTF8'''(''&amp;lt;Аргумент&amp;gt;''):''&amp;lt;Результат (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Превращает строковое представление аргумента (не обязательно строку в формате UTF-16) в строку ANSI с закодированным текстом в формате UTF-8&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[UTF8ToUnicode]]&lt;br /&gt;
|form='''UTF8ToUnicode'''(''&amp;lt;Аргумент&amp;gt;''):''&amp;lt;Результат (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Превращает перекодирует результат из формата UTF-8 в формат UTF-16.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Ansi]]&lt;br /&gt;
|form='''Ansi'''(''&amp;lt;Аргумент&amp;gt;''):''&amp;lt;Результат (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Безусловно переводит строковое представление аргумента в строку ANSI, используя системную кодовую страницу.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[OemToAnsi]]&lt;br /&gt;
|form='''OemToAnsi'''(''&amp;lt;Аргумент&amp;gt;''):''&amp;lt;Результат (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Производит перекодировку строкового представления аргумента из кодовой страницы OEM в ANSI, используя системную кодовую страницу.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[AnsiToOem]]&lt;br /&gt;
|form='''AnsiToOem'''(''&amp;lt;Аргумент&amp;gt;''):''&amp;lt;Результат (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Производит перекодировку строкового представления аргумента из кодовой страницы ANSI в OEM, используя системную кодовую страницу.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[AnsiToUTF8]]&lt;br /&gt;
|form='''AnsiToUTF8'''(''&amp;lt;Аргумент&amp;gt;''):''&amp;lt;Результат (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Производит перекодировку строкового представления аргумента из кодовой страницы ANSI в UTF-8, используя системную кодовую страницу.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[UTF8ToAnsi]]&lt;br /&gt;
|form='''UTF8ToAnsi'''(''&amp;lt;Аргумент&amp;gt;''):''&amp;lt;Результат (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Производит перекодировку строкового представления аргумента из UTF-8 в кодовую страницу ANSI, используя системную кодовую страницу.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[TranslateFrom]]&lt;br /&gt;
|form='''TranslateFrom'''(''&amp;lt;Аргумент&amp;gt;'',''&amp;lt;Кодовая страница (INT)&amp;gt;''{{Optional|,''&amp;lt;Удалять BOM (INT)&amp;gt;''{{Default|{{Eq}}1}}}}):''&amp;lt;Результат (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Производит перекодировку строкового представления аргумента из кодовой страницы, заданной вторым аргументом в UTF-16, при необходимости удаляет BOM&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[TranslateTo]]&lt;br /&gt;
|form='''TranslateTo'''(''&amp;lt;Аргумент&amp;gt;'',''&amp;lt;Кодовая страница (INT)&amp;gt;''{{Optional|,''&amp;lt;Добавить BOM (INT)&amp;gt;''{{Default|{{Eq}}0}}}}):''&amp;lt;Результат (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Производит перекодировку строкового представления аргумента из UTF-16 в кодовую страницу, заданную вторым аргументом, при необходимости добавляя BOM&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[Translate]]&lt;br /&gt;
|form='''Translate'''(''&amp;lt;Аргумент&amp;gt;'',''&amp;lt;Кодовая страница источник (INT)&amp;gt;'',''&amp;lt;Кодовая страница приемник (INT)&amp;gt;''{{Optional|,''&amp;lt;Удалять и добавлять BOM (INT)&amp;gt;''{{Default|{{Eq}}0}}}}):''&amp;lt;Результат (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Производит перекодировку строкового представления аргумента из кодовой страницы, заданной вторым аргументом в кодовую страницу, заданную третьим аргументом, при необходимости удаляя и добавляя BOM&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[FormatDate]]&lt;br /&gt;
|form='''FormatDate'''(''&amp;lt;Дата&amp;gt;''{{Optional|,&amp;lt;Шаблон форматирования (STRING)&amp;gt;,&amp;lt;Язык форматирования (STRING)&amp;gt;}}):''&amp;lt;Результат (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Производит перекодировку даты и времени в строковой формат по указанному шаблону, используя указанный язык&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[FormatPeriod]]&lt;br /&gt;
|form=&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Производит перекодировку периода между двумя датами в строковой формат по указанному шаблону, используя указанный язык&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[FormatNumber]]&lt;br /&gt;
|form='''FormatNumber'''(''&amp;lt;Число&amp;gt;''{{Optional|,''&amp;lt;Нули пустой строкой (INT)&amp;gt;''{{Default|{{Eq}}1}}}}{{Optional|,''&amp;lt;Разделитель тысяч (STRING)&amp;gt;''{{Default|{{Eq}}&amp;quot;'&amp;quot;}}}}{{Optional|,''&amp;lt;Точность после точки (INT)&amp;gt;''{{Default|{{Eq}}2}}}}):''&amp;lt;Результат (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Производит перекодировку и формирование числа в строковой формат, используя указанные установки&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[SpellNumber]]&lt;br /&gt;
|form='''SpellNumber'''(''&amp;lt;Число&amp;gt;''{{Optional|,''&amp;lt;Язык кодирования (STRING)&amp;gt;''}}{{Optional|,''&amp;lt;Род результата (STRING)&amp;gt;''{{Default|{{Eq}}&amp;quot;М&amp;quot;}}}}):''&amp;lt;Результат (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Превращает число в его прописное представление, используя указанный язык и грамматический род результата&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[FormatCurrency]]&lt;br /&gt;
|form='''FormatCurrency'''(''&amp;lt;Число&amp;gt;''{{Optional|,''&amp;lt;Режим (INT)&amp;gt;''{{Default|{{Eq}}0}}}}{{Optional|,''&amp;lt;Тип валюты (STRING)&amp;gt;''{{Default|{{Eq}}&amp;quot;USD&amp;quot;}}}}{{Optional|,''&amp;lt;Язык форматирования (STRING)&amp;gt;''}}):''&amp;lt;Результат (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Создает прописное представление денежной номинации по указанным правилам, для указанной валюты, используя указанный язык&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[TearStr]]&lt;br /&gt;
|form='''TearStr'''({{ByRef|''&amp;lt;Строка&amp;gt;''}}{{Optional|,''&amp;lt;Подстрока-разделитель&amp;gt;''{{Default|{{Eq}}&amp;quot;@&amp;quot;}}}}):''&amp;lt;Результат (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Производит деление исходного строкового представления на две строки, разделенные вторым аргументом, возвращая в результате первую подстроку, и обновляя значение переменной первого аргумента второй строкой, если первый аргумент был переменной.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GetSubStr]]&lt;br /&gt;
|form='''GetSubStr'''(''&amp;lt;Строка&amp;gt;'',{{ByRef|''&amp;lt;Индекс (INT)&amp;gt;''}}{{Optional|,''&amp;lt;Подстрока-разделитель&amp;gt;''{{Default|{{Eq}}&amp;quot;@&amp;quot;}}}}):''&amp;lt;Результат (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Получает подстроку исходной строки, начиная с индекса символа, указанного во втором аргументе до следуюшего вхождения строки-разделителя в исходную строку. Индекс обновляется до позиции, непосредственно за найденной строкой-разделителем.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[AppendStringToBufferedString]]&lt;br /&gt;
|form='''AppendStringToBufferedString'''({{ByRef|''&amp;lt;Строка&amp;gt;''}},''&amp;lt;Добавляемая строка&amp;gt;''{{Optional|,''&amp;lt;Шаг увеличения буфера (INT)&amp;gt;''}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Добавляет к строке в указанной в переменной, следующей первым аргументом, строку, заданную вторым аргументом. Используется для оптимизации скорости выполнения для длинных строк с большим количеством приращений.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[FileToString]]&lt;br /&gt;
|form='''FileToString'''(''&amp;lt;Имя файла&amp;gt;''{{Optional|,''&amp;lt;Кодовая страница (INT)&amp;gt;''{{Default|{{Eq}}0}}}}):''&amp;lt;Результат (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Загружает указанный файл в строку, используя указанную кодовую страницу. Результирующая строка будет перекодирована в UTF-16, если кодовая страница равна нулю и присутвует [[BOM]] или больше нуля&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[StringToFile]]&lt;br /&gt;
|form='''StringToFile'''(''&amp;lt;Строка&amp;gt;'',''&amp;lt;Имя файла&amp;gt;''{{Optional|,''&amp;lt;Кодовая страница (INT)&amp;gt;''{{Default|{{Eq}}0}}}}{{Optional|,''&amp;lt;Добавить BOM (INT)&amp;gt;''{{Default|{{Eq}}0}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Сохраняет строку в файл, при необходимости перекодируя ее в нужную кодировку и добавляя BOM. Вызывает исключение при ошибке.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[AppendStringToFile]]&lt;br /&gt;
|form='''AppendStringToFile'''(''&amp;lt;Строка&amp;gt;'',''&amp;lt;Имя файла&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Дополняет содержимое файла указанной строкой. Строка добавляется без перекодировки, если нужна определенная кодовая страница, строку необходимо предварительно подготовить. Функция вызывает исключение при ошибке.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[EncodeXMLString]]&lt;br /&gt;
|form='''EncodeXMLString'''(''&amp;lt;Строка&amp;gt;''):''&amp;lt;Результат (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Перекодирует знаки, запрещенные в теле файлов в XML формате, в разрешенную форму (к примеру &amp;quot;&amp;amp;&amp;quot; превращается в &amp;lt;code&amp;gt;&amp;lt;span&amp;gt;&amp;amp;&amp;lt;/span&amp;gt;amp;&amp;lt;/code&amp;gt;)&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[DecodeXMLString]], '''DecodeHTMLString'''&lt;br /&gt;
|form='''DecodeXMLString'''(''&amp;lt;Строка&amp;gt;''):''&amp;lt;Результат (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Перекодирует текст в HTML/XML нотации в обычный текст, т.е. последовательности типа &amp;lt;code&amp;gt;&amp;lt;span&amp;gt;&amp;amp;&amp;lt;/span&amp;gt;amp;&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;&amp;lt;span&amp;gt;&amp;amp;&amp;lt;/span&amp;gt;#9829;&amp;lt;/code&amp;gt; в соответствующие знаки&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[EncodeHTMLString]]&lt;br /&gt;
|form='''EncodeXMLString'''(''&amp;lt;Строка&amp;gt;''):''&amp;lt;Результат (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=0&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Перекодирует знаки, запрещенные в теле файлов в HTML формате, в разрешенную форму (к примеру &amp;quot;&amp;amp;&amp;quot; превращается в &amp;lt;code&amp;gt;&amp;lt;span&amp;gt;&amp;amp;&amp;lt;/span&amp;gt;amp;&amp;lt;/code&amp;gt;). В отличии от XML версии, производится перекодировка большего количества знаков, которые разрешены в XML, однако, запрещены в HTML.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[CreateGUID]]&lt;br /&gt;
|form='''CreateGUID'''():''&amp;lt;Результат (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Формирует новый GUID идентификатор системным медотом&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ReformatXML]]&lt;br /&gt;
|form='''ReformatXML'''(''&amp;lt;Строка или текст (STRING,TEXT)&amp;gt;''{{Optional|,''&amp;lt;Режимы (INT)&amp;gt;''{{Default|{{Eq}}3}}}}):''&amp;lt;Результат (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=1&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Приводит текст в XML нотации к каноническому простому виду с тем, чтобы его можно было разобрать обычными текстовыми функциями. Позволяет настроить глубину упрощения текста&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[LoadJSONFromString]]&lt;br /&gt;
|form='''LoadJSONFromString'''({{ByRef|&amp;lt;Строка (STRING)&amp;gt;}}{{Optional|,''&amp;lt;Тип возвращаемого объекта (INT)&amp;gt;''{{Default|{{Eq}}0}}}}):''&amp;lt;Результат (TREE,LIST)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция загружает часть текста или весь текст в формате JSON и возвращает его представление в виде объекта дерева или списка.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[SaveJSONToString]]&lt;br /&gt;
|form='''SaveJSONToString'''(''&amp;lt;Объект дерева, ветки или списка (STRING)&amp;gt;''):''&amp;lt;Результат (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция превращает объект дерева, ветки или списка в текст JSON.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[EncodeString]]&lt;br /&gt;
|form='''EncodeString'''(''&amp;lt;Строка или буфер (STRING,BUFFER)&amp;gt;''{{Optional|,''&amp;lt;Формат кодирования (STRING)&amp;gt;''{{Default|{{Eq}}&amp;quot;INTERNAL&amp;quot;}}}}{{Optional|,''&amp;lt;Параметры кодирования (STRING)&amp;gt;''}}):''&amp;lt;Результат (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=1&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Производит кодирование строки в указанный формат (к примеру, &amp;quot;Base64&amp;quot; или &amp;quot;UUE&amp;quot;). Могут кодироваться как ANSI, так и Unicode строки, информация также может получаться из буфера.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[DecodeString]]&lt;br /&gt;
|form='''DecodeString'''(''&amp;lt;Строка (STRING)&amp;gt;''{{Optional|,''&amp;lt;Формат декодирования (STRING)&amp;gt;''{{Default|{{Eq}}&amp;quot;INTERNAL&amp;quot;}}}}{{Optional|,''&amp;lt;Результат в формате UTF-16 (INT)&amp;gt;''{{Default|{{Eq}}0}}}}{{Optional|,''&amp;lt;Параметры декодирования (STRING)&amp;gt;''}}):''&amp;lt;Результат (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=1&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Производит декодирование строки из указанного формата (к примеру, &amp;quot;Base64&amp;quot; или &amp;quot;UUE&amp;quot;). Могут декодироваться как ANSI, так и Unicode строки.&lt;br /&gt;
}}&lt;br /&gt;
{{function footer}}&lt;br /&gt;
&lt;br /&gt;
== Функции строк-массивов значений ==&lt;br /&gt;
Функции можно использовать для массивов строк, хранящихся в одной большой строке и разделенных строками-разделителями. Строки могут быть произвольного размера и содержать строку-префикс. Данный подход хранения очень компактен в памяти, но из-за того, что каждой из функций приходится создавать индекс до начала работы, имеет ограниченную применимость из-за более медленной работы по сравнению с таблицами или списками. Фактически одна строка-массив будет интерпретироваться как таблица с двумя столбцами -- индексным (само значение) и произвольного назначения (префикс). Подобная группа функций существует и для сервера, когда другие пользователи и потоки также имеют доступ к строке-массиву (см. [[Функции_общего_назначения#Глобальные функции строк-массивов значений|глобальные строки-массивы]]), однако, имеет несколько другой функционал.&lt;br /&gt;
&lt;br /&gt;
{{function header}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[AssertStringValues]]&lt;br /&gt;
|form='''AssertStringValues'''(''&amp;lt;Аргумент 1&amp;gt;'',''&amp;lt;Аргумент 2&amp;gt;'',''&amp;lt;Строка-разделитель&amp;gt;'',''&amp;lt;Тип операции (INT)&amp;gt;''{{Optional|,''&amp;lt;Разделитель префикса&amp;gt;''{{Default|{{Eq}}&amp;quot;&amp;quot;}}}})&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Производит проверку двух строк-массивов значений, имеющих префиксы, если необходимо, указанным методом. Если проверка неудачна, создает исключение.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[JoinStringValues]]&lt;br /&gt;
|form='''JoinStringValues'''(''&amp;lt;Аргумент 1&amp;gt;'',''&amp;lt;Аргумент 2&amp;gt;'',''&amp;lt;Строка-разделитель&amp;gt;'',''&amp;lt;Тип операции (STRING)&amp;gt;''{{Default|{{Eq}}&amp;quot;OR&amp;quot;}}{{Optional|,''&amp;lt;Разделитель префикса&amp;gt;''{{Default|{{Eq}}&amp;quot;&amp;quot;}}}}):''&amp;lt;Результат (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Выполняет указанную логическую операцию над двумя строками-массивами значений, имеющих префиксы, если необходимо. Возвращает результирующую строку-массив значений.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GetStringValuesByPrefix]]&lt;br /&gt;
|form='''GetStringValuesByPrefix'''(''&amp;lt;Аргумент&amp;gt;'',''&amp;lt;Строка-разделитель (STRING)&amp;gt;'',''&amp;lt;Разделитель префикса (STRING)&amp;gt;'',''&amp;lt;Значение префикса&amp;gt;''):''&amp;lt;Результат (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Возвращает строку-массив значений, состоящую только из значений строки-массива значений аргумента с указанным префиксом&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GroupStringValues]]&lt;br /&gt;
|form='''GroupStringValues'''(''&amp;lt;Аргумент&amp;gt;'',''&amp;lt;Строка-разделитель&amp;gt;''{{Optional|,''&amp;lt;Разделитель префикса&amp;gt;''{{Default|{{Eq}}&amp;quot;&amp;quot;}}}}):''&amp;lt;Результат (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Возвращает строку-массив значений, которая содержит только уникальные значения исходной строки-массива значений.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[SortStringValues]]&lt;br /&gt;
|form='''SortStringValues'''(''&amp;lt;Аргумент&amp;gt;'',''&amp;lt;Строка-разделитель&amp;gt;''{{Optional|,''&amp;lt;Направление (INT)&amp;gt;''{{Default|{{Eq}}0}}}}{{Optional|,''&amp;lt;Разделитель префикса&amp;gt;''{{Default|{{Eq}}&amp;quot;&amp;quot;}}}}):''&amp;lt;Результат (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Возвращает строку-массив значений, полученную путем регистро-зависимой сортировки в указанном направлении значений исходной строки-массива значений.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[GetPrefixesFromStringValues]]&lt;br /&gt;
|form='''GetPrefixesFromStringValues'''(''&amp;lt;Аргумент&amp;gt;'',''&amp;lt;Строка-разделитель&amp;gt;'',''&amp;lt;Разделитель префикса&amp;gt;''):''&amp;lt;Результат (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Возвращает строку-массив значений, состоящую только из префиксов исходной строки-массива значений.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[CopyStringValuesTo]]&lt;br /&gt;
|form='''CopyStringValuesTo'''(''&amp;lt;Аргумент&amp;gt;'',''&amp;lt;Строка-разделитель&amp;gt;'',''&amp;lt;Разделитель префикса&amp;gt;'',''&amp;lt;Объект для заполнения (LIST,TAB)&amp;gt;'')&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Функция производит копирование массива значений из строки-массива в список или таблицу.&lt;br /&gt;
}}&lt;br /&gt;
{{function footer}}&lt;br /&gt;
&lt;br /&gt;
== Функции для работы с регулярными выражениями (regular expressions, RegExp) ==&lt;br /&gt;
Функции этой группы позволяют использовать регулярные выражения для поиска, замены или разделения строк. Функции всегда работают с UTF-16 строками (если строка имеет формат ANSI, она будет превращена в UTF-16 перед работой, если строка имеет формат UTF-8, ее необходимо превратить в UTF-16 с помощью функции [[UTF8ToUnicode]]). Следует также понимать, что разбор длинной строки с помощью функций [[TearStr]] или подобных будет всегда быстрее, чем применение регулярных выражений (так как регулярные выражения подразумевают перебор, а не прямой поиск). Также важно учесть, что переводы строки в строке поиска должны состоять из последовательности (&amp;lt;Code&amp;gt;Chr(13)+Chr(10)&amp;lt;/Code&amp;gt;, т.е. ''_NEWLINE''), иначе специальные символы '''^''' и '''$''' не будут работать корректно.&lt;br /&gt;
&lt;br /&gt;
Система имеет свою интерпретацию синтаксиса регулярных выражений, она близка к JavaScript с дополнениями, присущими другим языкам. Ниже дана таблица конструкций и последовательностей символов в шаблоне регулярных выражений, которые понимаются системой, а также краткое описание каждой записи:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;border-collapse:collapse;font-size:80%;width=95%;&amp;quot;&lt;br /&gt;
! width=10%|Тип&lt;br /&gt;
! width=10%|Последовательность&lt;br /&gt;
! Описание&lt;br /&gt;
|-&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Спец. символы&lt;br /&gt;
|'''\n'''&lt;br /&gt;
|Символ перевода строки, Chr(10).&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Спец. символы&lt;br /&gt;
|'''\r'''&lt;br /&gt;
|Символ перевода каретки, Chr(13).&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Спец. символы&lt;br /&gt;
|'''\t'''&lt;br /&gt;
|Символ табуляции, Chr(9).&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Спец. символы&lt;br /&gt;
|'''\v'''&lt;br /&gt;
|Символ Chr(11).&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Спец. символы&lt;br /&gt;
|'''\h'''&lt;br /&gt;
|Любой из знаков пробела (любой из символов юникода со следующими кодами: &amp;lt;code&amp;gt;32, 9, 160, 5760, 6158, 8192-8202, 8239, 8287, 12288&amp;lt;/code&amp;gt;).&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Спец. символы&lt;br /&gt;
|'''\H'''&lt;br /&gt;
|Любой символ, кроме знаков пробела (любой из символов, кроме символов юникода со следующими кодами: &amp;lt;code&amp;gt;32, 9, 160, 5760, 6158, 8192-8202, 8239, 8287, 12288&amp;lt;/code&amp;gt;).&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Спец. символы&lt;br /&gt;
|'''\f'''&lt;br /&gt;
|Символ разделения страниц, Chr(12).&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Спец. символы&lt;br /&gt;
|'''[\b]'''&lt;br /&gt;
|Символ забоя, Chr(8) (используется только внутри набора символов).&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Спец. символы&lt;br /&gt;
|'''\0'''&lt;br /&gt;
|Символ Chr(0).&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Спец. символы&lt;br /&gt;
|'''\R'''&lt;br /&gt;
|Набор символов перевода строки, соответствует любой из следующих комбинаций: &amp;lt;code&amp;gt;Chr(10), Chr(11), Chr(12), Chr(13), Chr(133), Chr(13)+Chr(10)&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Спец. символы&lt;br /&gt;
|'''\N'''&lt;br /&gt;
|Обратно ''\R''. соответствует любому символу, кроме последовательностей из следующих комбинаций: &amp;lt;code&amp;gt;Chr(10), Chr(11), Chr(12), Chr(13), Chr(133), Chr(13)+Chr(10)&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Кодирование символов&lt;br /&gt;
|'''\cX'''&lt;br /&gt;
|''X'' может принимать значения от '''A''' до '''Z'''. Соответствует символу с кодом, равным позиции буквы латинского алфавита, заданной после ''\c''. То есть, &amp;lt;code&amp;gt;\cA&amp;lt;/code&amp;gt; будет соответствовать символу с кодом ''1'', тогда как &amp;lt;code&amp;gt;\cZ&amp;lt;/code&amp;gt;, символу с кодом ''26''.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Кодирование символов&lt;br /&gt;
|'''\x??'''&lt;br /&gt;
|Соответствует символу с кодом, заданным шестнадцатеричным числом &amp;lt;code&amp;gt;??&amp;lt;/code&amp;gt;. К примеру, &amp;lt;code&amp;gt;\x20&amp;lt;/code&amp;gt; (пробел).&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Кодирование символов&lt;br /&gt;
|'''\u????'''&lt;br /&gt;
|Соответствует символу с кодом, заданным шестнадцатеричным числом &amp;lt;code&amp;gt;????&amp;lt;/code&amp;gt;. К примеру, &amp;lt;code&amp;gt;\x042F&amp;lt;/code&amp;gt; (буква '''Я'''). Нужно заметить, что коды символов здесь не могут превышать 65535.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Кодирование символов&lt;br /&gt;
|'''\u{N}''', '''\x{N}'''&lt;br /&gt;
|Соответствует символу с кодом, заданным шестнадцатеричным числом &amp;lt;code&amp;gt;??????&amp;lt;/code&amp;gt;. К примеру, &amp;lt;code&amp;gt;\u{1F642}&amp;lt;/code&amp;gt; (символ эмоции '''🙂'''). '''N''' может находиться в диапазоне '''0'''..'''10FFFF'''.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Кодирование символов&lt;br /&gt;
|'''\?'''&lt;br /&gt;
|Символ экранирования '''\''' может использоваться для вставки символов, которые иначе трактовались бы как особые последовательности или спец. символы. К примеру &amp;lt;code&amp;gt;\\&amp;lt;/code&amp;gt; (задает сам символ ''\'') или &amp;lt;code&amp;gt;\[&amp;lt;/code&amp;gt; (задает сам символ ''[''). '''?''' может быть любым символом из набора: &amp;quot; &amp;quot;..&amp;quot;@&amp;quot;, &amp;quot;[&amp;quot;, &amp;quot;\&amp;quot;, &amp;quot;]&amp;quot;, &amp;quot;^&amp;quot;, &amp;quot;_&amp;quot;, &amp;quot;`&amp;quot;, &amp;quot;{&amp;quot; и далее до конца таблицы юникода.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Кодирование символов&lt;br /&gt;
|'''\Q ... \E'''&lt;br /&gt;
|Экранирование группы символов &amp;quot;...&amp;quot; начинается с помощью последовательности ''\Q'' и заканчивается последовательностью ''\E'', все символы внутри не будут трактоваться как особые последовательности или спец. символы. К примеру &amp;lt;code&amp;gt;\Q+*\E&amp;lt;/code&amp;gt; (задает два символа ''+*'').&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Наборы символов&lt;br /&gt;
|'''[...]'''&lt;br /&gt;
|Конструкция задает набор символов, символ сравниваемого текста будет соответствовать, если он будет равен любому символу из списка, представленного данным набором. Внутри конструкции можно использовать не только символы, но и последовательности символов (&amp;lt;code&amp;gt;A-Z&amp;lt;/code&amp;gt;), конструкции экранирования ''\Q ... \E'' и ''\?'', конструкции кодирования символов (''\x??'' и пр.), спец. символы (''\n'' и пр.), спец. наборы (''\d'' или ''\D'') и наборы юникода (''\p{Decimal_Digit_Number}'' и пр.).&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Наборы символов&lt;br /&gt;
|'''[^...]'''&lt;br /&gt;
|Конструкция задает набор символов, символ сравниваемого текста будет соответствовать, если он не будет равен ни одному символу из списка, представленного данным набором. Внутри конструкции можно использовать не только символы, но и последовательности символов (&amp;lt;code&amp;gt;A-Z&amp;lt;/code&amp;gt;), конструкции экранирования ''\Q ... \E'' и ''\?'', конструкции кодирования символов (''\x??'' и пр.), спец. символы (''\n'' и пр.), спец. наборы (''\d'' или ''\D'') и наборы юникода (''\p{Decimal_Digit_Number}'' и пр.).&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Наборы символов&lt;br /&gt;
|'''.'''&lt;br /&gt;
|Специальный символ соответствует любому символу текста, кроме набора [\r\n\u2028\u2029].&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Наборы символов&lt;br /&gt;
|'''\C'''&lt;br /&gt;
|Конструкция соответствует коду символа, полученному из двух байтов текста -- data point (каждый UTF-16 символ может быть представлен как двумя, так и четырьмя знаками см. [[Строки]]). Не рекомендуется к использованию.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Наборы символов&lt;br /&gt;
|'''\d'''&lt;br /&gt;
|Конструкция задает набор числовых символов, соответствующий набору &amp;lt;code&amp;gt;[0-9]&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Наборы символов&lt;br /&gt;
|'''\D'''&lt;br /&gt;
|Конструкция задает набор нечисловых символов, соответствующий набору &amp;lt;code&amp;gt;[^0-9]&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Наборы символов&lt;br /&gt;
|'''\w'''&lt;br /&gt;
|Конструкция задает набор числовых и литерных символов, соответствующий набору &amp;lt;code&amp;gt;[A-Za-z0-9_]&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Наборы символов&lt;br /&gt;
|'''\W'''&lt;br /&gt;
|Конструкция задает набор не числовых и не литерных символов, соответствующий набору &amp;lt;code&amp;gt;[^A-Za-z0-9_]&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Наборы символов&lt;br /&gt;
|'''\s'''&lt;br /&gt;
|Конструкция задает набор символов пробела и невидимых символов, соответствующий набору &amp;lt;code&amp;gt;[\f\n\r\t\v\u0020\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Наборы символов&lt;br /&gt;
|'''\S'''&lt;br /&gt;
|Конструкция задает набор символов, не соответствующих символам пробела и невидимым символам. Соответствует набору &amp;lt;code&amp;gt;[^\f\n\r\t\v\u0020\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Наборы символов&lt;br /&gt;
|'''\p?'''&lt;br /&gt;
|Конструкция задает набор символов, соответствующих одной из групп таблицы юникода. '''?''' может соответствовать символам: '''L''' -- буквенные символы (letter), '''M''' -- символы разметки (mark), '''N''' -- числовые символы (number), '''P''' -- символы пунктуации (punctuation), '''S''' -- рисунки и прочие символы (symbol), '''Z''' -- символы разделителей (separator), '''C''' -- остальные коды (other). Подробнее см. сл. [https://www.fileformat.info/info/unicode/category/index.htm таблицу].&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Наборы символов&lt;br /&gt;
|'''\P?'''&lt;br /&gt;
|Конструкция задает набор символов, не соответствующих одной из групп таблицы юникода, и является обратной по отношению к '''\p?'''.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Наборы символов&lt;br /&gt;
|'''\p{Group}'''&lt;br /&gt;
|Конструкция задает набор символов, соответствующих разнообразным группам таблицы юникода. '''Group''' чувствительна к регистру и может соответствовать комбинациям: &amp;lt;code&amp;gt;L, Letter, Ll, Lowercase_Letter, Lu, Uppercase_Letter, Lt, Titlecase_Letter, L&amp;amp;, Cased_Letter, Lm, Modifier_Letter, Lo, Other_Letter, M, Mark, Mn, Non_Spacing_Mark, Mc, Spacing_Combining_Mark, Me, Enclosing_Mark, Z, Separator, Zs, Space_Separator, Zl, Line_Separator, Zp, Paragraph_Separator, S, Symbol, Sm, Math_Symbol, Sc, Currency_Symbol, Sk, Modifier_Symbol, So, Other_Symbol, N, Number, Nd, Decimal_Digit_Number, Nl, Letter_Number, No, Other_Number, P, Punctuation, Pd, Dash_Punctuation, Ps, Open_Punctuation, Pe, Close_Punctuation, Pi, Initial_Punctuation, Pf, Final_Punctuation, Pc, Connector_Punctuation, Po, Other_Punctuation, C, Other, Cc, Control, Cf, Format, Co, Private_Use, Cs, Surrogate, Cn, Unassigned, InBasic_Latin, InLatin-1_Supplement, InLatin_Extended-A, InLatin_Extended-B, InIPA_Extensions, InSpacing_Modifier_Letters, InCombining_Diacritical_Marks, InGreek_and_Coptic, InCyrillic, InCyrillic_Supplementary, InArmenian, InHebrew, InArabic, InSyriac, InThaana, InDevanagari, InBengali, InGurmukhi, InGujarati, InOriya, InTamil, InTelugu, InKannada, InMalayalam, InSinhala, InThai, InLao, InTibetan, InMyanmar, InGeorgian, InHangul_Jamo, InEthiopic, InCherokee, InUnified_Canadian_Aboriginal_Syllabics, InOgham, InRunic, InTagalog, InHanunoo, InBuhid, InTagbanwa, InKhmer, InMongolian, InLimbu, InTai_Le, InKhmer_Symbols, InPhonetic_Extensions, InLatin_Extended_Additional, InGreek_Extended, InGeneral_Punctuation, InSuperscripts_and_Subscripts, InCurrency_Symbols, InCombining_Diacritical_Marks_for_Symbols, InLetterlike_Symbols, InNumber_Forms, InArrows, InMathematical_Operators, InMiscellaneous_Technical, InControl_Pictures, InOptical_Character_Recognition, InEnclosed_Alphanumerics, InBox_Drawing, InBlock_Elements, InGeometric_Shapes, InMiscellaneous_Symbols, InDingbats,InMiscellaneous_Mathematical_Symbols-A, InSupplemental_Arrows-A,InBraille_Patterns, InSupplemental_Arrows-B, InMiscellaneous_Mathematical_Symbols-B, InSupplemental_Mathematical_Operators, InMiscellaneous_Symbols_and_Arrows, InCJK_Radicals_Supplement, InKangxi_Radicals, InIdeographic_Description_Characters, InCJK_Symbols_and_Punctuation, InHiragana, InKatakana, InBopomofo, InHangul_Compatibility_Jamo, InKanbun, InBopomofo_Extended, InKatakana_Phonetic_Extensions, InEnclosed_CJK_Letters_and_Months, InCJK_Compatibility, InCJK_Unified_Ideographs_Extension_A, InYijing_Hexagram_Symbols, InCJK_Unified_Ideographs, InYi_Syllables, InYi_Radicals, InHangul_Syllables, InHigh_Surrogates, InHigh_Private_Use_Surrogates, InLow_Surrogates, InPrivate_Use_Area, InCJK_Compatibility_Ideographs, InAlphabetic_Presentation_Forms, InArabic_Presentation_Forms-A, InVariation_Selectors, InCombining_Half_Marks, InCJK_Compatibility_Forms, InSmall_Form_Variants, InArabic_Presentation_Forms-B, InHalfwidth_and_Fullwidth_Forms, InSpecials&amp;lt;/code&amp;gt;. Для дополнительной информации, см. [https://www.fileformat.info/info/unicode/category/index.htm таблицу простых наборов], [https://www.regular-expressions.info/unicode.html#category описание категорий и диапазонов] или [http://www.unicode.org/Public/UNIDATA/UnicodeData.txt полную таблицу выделенных символов юникода].&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Наборы символов&lt;br /&gt;
|'''\P{Group}'''&lt;br /&gt;
|Конструкция задает набор символов, не соответствующих одной из групп таблицы юникода, заданных словом ''Group'', и является обратной по отношению к '''\p{Group}'''.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Конструкции проверки позиции&lt;br /&gt;
|'''^'''&lt;br /&gt;
|Конструкция соответствует положению в тексте, перед началом всего текста или любой строки (строки разделяются двумя символами \x0D\x0A). Поведение можно модифицировать (не включать начало каждой строки с помощью аргумента ''Флаги'' функций для работы с регулярными выражениями).&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Конструкции проверки позиции&lt;br /&gt;
|'''\A'''&lt;br /&gt;
|Конструкция соответствует положению в тексте, перед началом всего текста (в отличие ''^'' не модифицируется).&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Конструкции проверки позиции&lt;br /&gt;
|'''$'''&lt;br /&gt;
|Конструкция соответствует положению в тексте, после окончания всего текста или после последнего символа любой строки (строки разделяются двумя символами \x0D\x0A). Поведение можно модифицировать (не включать конец каждой строки с помощью аргумента ''Флаги'' функций для работы с регулярными выражениями).&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Конструкции проверки позиции&lt;br /&gt;
|'''\Z'''&lt;br /&gt;
|Конструкция соответствует положению в тексте, после окончания всего текста, но перед последним символов перевод строки (\x0D\x0A), если таковой присутствует.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Конструкции проверки позиции&lt;br /&gt;
|'''\z'''&lt;br /&gt;
|Конструкция соответствует положению в тексте, после окончания всего текста.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Конструкции проверки позиции&lt;br /&gt;
|'''\b'''&lt;br /&gt;
|Конструкция &amp;quot;граница слов&amp;quot; соответствует положению в тексте, где предыдущий и последующий символы принадлежат разным группам из наборов &amp;lt;code&amp;gt;[A-Za-z0-9_]&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;[^A-Za-z0-9_]&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Конструкции проверки позиции&lt;br /&gt;
|'''\B'''&lt;br /&gt;
|Конструкция &amp;quot;не граница слов&amp;quot; соответствует положению в тексте, где предыдущий и последующий символы принадлежат одинаковым группам из наборов &amp;lt;code&amp;gt;[A-Za-z0-9_]&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;[^A-Za-z0-9_]&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Конструкция перечисления&lt;br /&gt;
|'''&amp;lt;nowiki&amp;gt;...|...|... ...&amp;lt;/nowiki&amp;gt;'''&lt;br /&gt;
|Конструкция перечисления соответствует месту в тексте, которому соответствует любое из выражений внутри ее. Конструкция может работать как для всего регулярного выражения, так и для конкретной группы. Каждое выражение конструкции может быть произвольным регулярным выражением. Примеры: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;red|green&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\b(red|green|blue)\b&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Группы проверки&lt;br /&gt;
|'''&amp;lt;nowiki&amp;gt;(?=...)&amp;lt;/nowiki&amp;gt;'''&lt;br /&gt;
|Положительная группа проверки вперед соответствует положению в тексте после которого будет следовать кусок текста, соответствующий регулярному выражению в группе. Проверка не передвигает позицию сравнения, она остается на прежнем месте. Пример: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\S+\s+(?=XVI?)[IVX]+&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; найдет &amp;quot;Людовик XV&amp;quot; в строке &amp;quot;Людовик XV — король Франции c 1 сентября 1715 года&amp;quot;.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Группы проверки&lt;br /&gt;
|'''&amp;lt;nowiki&amp;gt;(?!...)&amp;lt;/nowiki&amp;gt;'''&lt;br /&gt;
|Отрицательная группа проверки вперед соответствует положению в тексте после которого не будет следовать кусок текста, соответствующий регулярному выражению в группе. Проверка не передвигает позицию сравнения, она остается на прежнем месте. Пример: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\S+\s+(?!XVI)[VXI]+&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; найдет &amp;quot;Людовик XV&amp;quot; в строке &amp;quot;Людовик XV — король Франции c 1 сентября 1715 года&amp;quot;, однако, не найден ничего в строке &amp;quot;Людовик XVI — король Франции c 4 сентября 1791 года&amp;quot;.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Группы проверки&lt;br /&gt;
|'''&amp;lt;nowiki&amp;gt;(?&amp;lt;=...)&amp;lt;/nowiki&amp;gt;'''&lt;br /&gt;
|Положительная группа проверки назад соответствует положению в тексте перед которым должен находиться кусок текста, соответствующий регулярному выражению в группе. Проверка не передвигает позицию сравнения, она остается на прежнем месте. Пример: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\S+(?&amp;lt;=Людовик)\s+[IVX]+&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; найдет &amp;quot;Людовик XV&amp;quot; в строке &amp;quot;Людовик XV — король Франции c 1 сентября 1715 года&amp;quot;.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Группы проверки&lt;br /&gt;
|'''&amp;lt;nowiki&amp;gt;(?&amp;lt;=...)&amp;lt;/nowiki&amp;gt;'''&lt;br /&gt;
|Отрицательная группа проверки назад соответствует положению в тексте перед которым не должен находиться кусок текста, соответствующий регулярному выражению в группе. Проверка не передвигает позицию сравнения, она остается на прежнем месте. Пример: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\S+(?&amp;lt;!Луи)\s+[IVX]+&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; найдет &amp;quot;Людовик XV&amp;quot; в строке &amp;quot;Людовик XV — король Франции c 1 сентября 1715 года&amp;quot;.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Группы выражений&lt;br /&gt;
|'''(...)'''&lt;br /&gt;
|Группа, содержащая произвольное регулярное выражение. Используется для удобства квантификации с символами типа &amp;quot;*&amp;quot;, &amp;quot;+&amp;quot; и пр., для конструкций перечисления, а также возвращает последний найденный результат в соответствующих режимах функции [[MatchRE]]. Внутри групп разрешено использование других групп. Каждая группа имеет свой индекс, нумерация начинается с 1 и задается в последовательности левых открывающихся скобок (это имеет значение только для вложенных групп).&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Группы выражений&lt;br /&gt;
|'''(&amp;lt;Group&amp;gt;...)'''&lt;br /&gt;
|Именованная группа, отличается от '''(...)''' только тем, что имеет кроме номера еще и имя. При обращении к результатам групп (к примеру с помощью '''\g{?}''') можно указывать, как номер группы, так и наименование. При возврате результатов групп в функции [[MatchRE]] для именованных групп будет использовано имя, а для безымянных -- индекс.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Группы выражений&lt;br /&gt;
|'''(?:...)'''&lt;br /&gt;
|Группа без результата, отличается от '''(...)''' только тем, что не будет присутствовать в результатах функции [[MatchRE]] и также не будет иметь индекса группы, т.е., к ней нельзя будет обратиться к помощью конструкций '''\g{?}''' или подобных.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Группа комментария&lt;br /&gt;
|'''(?#...)'''&lt;br /&gt;
|Текст внутри данной группы не будет разбираться и участвовать в поиске результата.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Ссылки на группы&lt;br /&gt;
|'''\N''', '''\gN''', '''\g{N}'''&lt;br /&gt;
|Число '''N''' задает индекс обычной или именованной группы, текущий из результатов которой будет использован для поиска для текущей позиции сравнения. Фактически является ссылкой на результат группы. Нумерация групп начинается с 1 и задается в последовательности левых открывающихся скобок (это имеет значение только для вложенных групп).&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Ссылки на группы&lt;br /&gt;
|'''\k&amp;lt;Group&amp;gt;''', '''\g{Group}'''&lt;br /&gt;
|'''Group''' задает имя именованной группы, текущий из результатов которой будет использован для поиска для текущей позиции сравнения. Фактически является ссылкой на результат группы по ее имени.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Ссылки на группы&lt;br /&gt;
|'''\g{-N}'''&lt;br /&gt;
|Число '''N''' задает индекс обычной или именованной группы по отношению к последней заданной группе на данном этапе разбора шаблона, текущий из результатов которой будет использован для поиска для текущей позиции сравнения. Фактически является ссылкой на результат группы относительно к последней заданной. Нумерация групп начинается с 1 и задается в последовательности левых открывающихся скобок (это имеет значение только для вложенных групп).&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Ссылки на группы&lt;br /&gt;
|'''\g&amp;lt;N&amp;gt;''', '''\g&amp;lt;Group&amp;gt;''', '''\g&amp;lt;-N&amp;gt;'''&lt;br /&gt;
|Текст шаблона группы, заданной индексом, именем или индексом отношения будет использован, начиная с текущей позиции шаблона. Фактически является ссылкой на шаблон группы, для упрощения общего шаблона, если в нем есть несколько одинаковых по описанию групп. Нумерация групп начинается с 1 и задается в последовательности левых открывающихся скобок (это имеет значение только для вложенных групп). Пример: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;(\S+) и (\g&amp;lt;1&amp;gt;)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; найдет &amp;quot;мам и пап&amp;quot; в строке &amp;quot;мам и пап&amp;quot;, значение группы 1 будет равно &amp;quot;мам&amp;quot;, а значение группы 2 будет равно &amp;quot;пап&amp;quot;. Ссылка создает копию группы без результата, поэтому в примере, она добавлена в еще одну группу с результатом, чтобы показать разницу между ''\g{N}'' и ''\g&amp;lt;N&amp;gt;''.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Условия в шаблоне&lt;br /&gt;
|'''&amp;lt;nowiki&amp;gt;(?(N)...|...)&amp;lt;/nowiki&amp;gt;'''&lt;br /&gt;
|Число '''N''' задает индекс обычной или именованной группы, если группа вернула какое-либо значение (группа могла не вернуть значение, если она не была выполнена из-за предыдущего условия, либо не задавала квантификацию с количеством ноль), для дальнейшего поиска будет использован первый из шаблонов внутри конструкции, иначе -- второй (после знака ''&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;''). Пример: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;(а)?(?(1)ма|па)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; найдет &amp;quot;ама&amp;quot; и два раза &amp;quot;па&amp;quot; в строке &amp;quot;мама и папа&amp;quot;.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Условия в шаблоне&lt;br /&gt;
|'''&amp;lt;nowiki&amp;gt;(?(?=...)...|...)&amp;lt;/nowiki&amp;gt;''', '''&amp;lt;nowiki&amp;gt;(?(?!...)...|...)&amp;lt;/nowiki&amp;gt;''', '''&amp;lt;nowiki&amp;gt;(?(?&amp;lt;=...)...|...)&amp;lt;/nowiki&amp;gt;''', '''&amp;lt;nowiki&amp;gt;(?(?&amp;lt;!...)...|...)&amp;lt;/nowiki&amp;gt;'''&lt;br /&gt;
|Внутри условия задается одна из четырех групп проверки (см. выше), при поиске результата, если группа поиска нашла значение, для дальнейшего поиска будет использован первый из шаблонов внутри конструкции, иначе -- второй (после знака ''&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;''). Пример: &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;(?(?&amp;lt;=а)м|п)&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; найдет &amp;quot;м&amp;quot; с позицией 3 и &amp;quot;п&amp;quot; с позицией 8 в строке &amp;quot;мама и папа&amp;quot;.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Квантификаторы&lt;br /&gt;
|'''?''' (жадная конструкция, greedy)&lt;br /&gt;
|Проверяет текст с текущей позиции поиска на совпадение с предыдущим символом (если указан после символа), группой (если указан после группы) или конструкции (перечисления, проверки позиции и т.д.), если указан после конструкции. Если совпадение не найдено, не передвигает позицию поиска, иначе передвигает ее. Иными словами, ищет 0 или 1 совпадений с предыдущим шаблоном.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Квантификаторы&lt;br /&gt;
|'''*''' (жадная конструкция, greedy)&lt;br /&gt;
|Проверяет текст с текущей позиции поиска на совпадение с предыдущим символом (если указан после символа), группой (если указан после группы) или конструкцией (перечисления, проверки позиции и т.д.), если указан после конструкции. Если совпадение не найдено, не передвигает позицию поиска, иначе пытается найти как можно больше последовательных совпадений, и передвигает позицию поиска за последним найденным. Иными словами, ищет 0 или более совпадений с предыдущим шаблоном.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Квантификаторы&lt;br /&gt;
|'''+''' (жадная конструкция, greedy)&lt;br /&gt;
|Проверяет текст с текущей позиции поиска на совпадение с предыдущим символом (если указан после символа), группой (если указан после группы) или конструкцией (перечисления, проверки позиции и т.д.), если указан после конструкции. Если совпадение не найдено, поиск для данной позиции будет завершен неудачей, иначе пытается найти как можно больше последовательных совпадений, и передвигает позицию поиска за последним найденным. Иными словами, ищет 1 или более совпадений с предыдущим шаблоном.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Квантификаторы&lt;br /&gt;
|'''{N}''', '''{N,}''', '''{N,M}''' (жадные конструкции, greedy)&lt;br /&gt;
|Находит максимально возможное количество последовательных совпадений текста в диапазоне от ''N'' до ''M'' с текущей позиции поиска с предыдущим символом (если указан после символа), группой (если указан после группы) или конструкцией (перечисления, проверки позиции и т.д.), если указан после конструкции. Если совпадения не найдены, поиск для данной позиции будет завершен неудачей, позицию поиска передвигается за последним найденным. Для конструкции ''{N}'' ищется точное ''N'' совпадений, для ''{N,}'' -- максимальное количество, но не меньше ''N'', для ''{N,M}'' -- максимальное количество из диапазона [''N''..''M'']. Иными словами, ищет от ''N'' до ''M'' совпадений с предыдущим шаблоном.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Квантификаторы&lt;br /&gt;
|'''??''', '''*?''', '''+?''', '''{N}?''', '''{N,}?''', '''{N,M}?''' (ленивые конструкции, lazy)&lt;br /&gt;
|В отличие от жадных квантификаторов (см. выше), данные находят минимальное возможное количество совпадений.&lt;br /&gt;
|-align=&amp;quot;left&amp;quot;&lt;br /&gt;
|Квантификаторы&lt;br /&gt;
|'''?+''', '''*+''', '''++''', '''{N}+''', '''{N,}+''', '''{N,M}+''' (собственнические конструкции, possessive)&lt;br /&gt;
|В отличие от жадных квантификаторов (см. выше), данные находят максимально возможное количество совпадений, и не отдают результата, если для него требуется меньшее, чем максимальное найденное количество совпадений. Использование таких квантификаторов совместно с жадными или ленивыми в объемном тексте может привести с многократному замедлению поиска (до многих порядков), так как системе придется перебирать гораздо большее количество шагов, поэтому использовать их нужно с осторожностью (к примеру &amp;lt;code&amp;gt;.+(.++)ы+&amp;lt;/code&amp;gt; для сравнительно небольшого текста будет являться причиной миллионов итераций).&lt;br /&gt;
|} &lt;br /&gt;
&lt;br /&gt;
{{function header}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[MatchRE]], '''PosRE'''&lt;br /&gt;
|form='''MatchRE'''(''&amp;lt;Выражение (STRING)&amp;gt;'',''&amp;lt;Строка, в которой происходит поиск (STRING)&amp;gt;''{{Optional|,''&amp;lt;Позиция начала поиска (INT)&amp;gt;''{{Default|{{Eq}}0}}}}{{OptionalByRef|,&amp;lt;Длина найденного (INT)&amp;gt;}}{{Optional|,&amp;lt;Режим поиска (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Флаги поиска (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Позиция, список или таблица (INT,LIST,TAB)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Производит проверку шаблона регулярных выражений, заданного первым аргументом в тексте, заданным вторым аргументом. В зависимости от режима поиска может возвратить найденную позицию или ноль, список найденных значений (и значений групп поиска), либо таблицу позиций найденных значений (и значений групп поиска).&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[ReplaceRE]]&lt;br /&gt;
|form='''ReplaceRE'''(''&amp;lt;Строка, в которой происходит поиск (STRING)&amp;gt;'',''&amp;lt;Выражение (STRING)&amp;gt;'',''&amp;lt;Шаблон для замены (STRING)&amp;gt;''{{Optional|,''&amp;lt;Позиция начала поиска (INT)&amp;gt;''{{Default|{{Eq}}0}},&amp;lt;Максимальное количество замен (INT)&amp;gt;''{{Default|{{Eq}}0}},&amp;lt;Флаги поиска (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Текст результата (STRING)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Производит проверку шаблона регулярных выражений, заданного вторым аргументом в тексте, заданном первым аргументом. Возвращает текст, с заменой найденных в нем значений на текст или шаблон, заданный третьим аргументом.&lt;br /&gt;
}}&lt;br /&gt;
{{function entry&lt;br /&gt;
|name=[[TearStrRE]]&lt;br /&gt;
|form='''TearStrRE'''(''&amp;lt;Строка, в которой происходит поиск (STRING)&amp;gt;'',''&amp;lt;Выражение (STRING)&amp;gt;''{{Optional|,&amp;lt;Максимальное количество результатов для деления (INT)&amp;gt;''{{Default|{{Eq}}0}},&amp;lt;Флаги поиска (INT)&amp;gt;{{Default|{{Eq}}0}}}}):''&amp;lt;Список результатов деления (LIST)&amp;gt;''&lt;br /&gt;
|type=1&lt;br /&gt;
|status=2&lt;br /&gt;
|visual=0&lt;br /&gt;
|description=Производит проверку шаблона регулярных выражений, заданного вторым аргументом в тексте, заданном первым аргументом. Возвращает список отрывков текста, находившихся между найденными выражениями. Останавливает процесс деления текста при достижении максимального количества делений, последний отрезок текста (для которого, возможно, проверка не была закончена), также добавляется в результирующий список.&lt;br /&gt;
}}&lt;br /&gt;
{{function footer}}&lt;br /&gt;
&lt;br /&gt;
{{Объекты}}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>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=5158</id>
		<title>Проект Розница</title>
		<link rel="alternate" type="text/html" href="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=5158"/>
		<updated>2025-12-27T17:08:53Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{HeadLinks|&lt;br /&gt;
* [[Main_Page|Начальная страница]]&lt;br /&gt;
* [[Проект Розница|Общее описание розницы]]&lt;br /&gt;
* [[Установка проекта Розница|Пошаговая установка проекта розница]]}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
Проект &amp;quot;розница&amp;quot; является абсолютно '''бесплатной''' альтернативой коммерческим кассовым и учетным системам для розничной торговли. Проект может использоваться как на рабочем месте кассира, так и как учетная программа для розничной компании. Эта статья пытается дать исчерпывающую информацию о том, какими ограничениями обладает данная версия, что она уже умеет и какие предполагаются дальнейшие шаги по ее развитию, а также о том, каким образом начать с ней работать.&lt;br /&gt;
&lt;br /&gt;
Проект появился для того, чтобы каким-то образом облегчить положение мелких розничных точек на рынке. Существующие программы слишком сложные в настройке, не обладают достаточной гибкостью, медленные в работе или заставляют торговые точки платить немалые деньги, в условиях, когда прибыль небольших магазинов постоянно сокращается из-за увеличения конкуренции с федеральными сетями. Мы представляем бесплатное решение, которое не только не требует какого-либо лицензирования, но и может быть модифицировано Вашими специалистами или сторонними организациями. В программе не используется реклама, нет ограничений по времени, скрытых платежей и пр. Если Ваша модель кассового или периферийного оборудования пока не поддерживается текстами драйверов проекта, Вы можете оставить заявку для создания драйвера (на github) или создать его самостоятельно. Данный Wiki-портал содержит описание всех программных возможностей системы, на которой работает проект, все статьи, связанные с описанием программных функций, имеют примеры. Любой человек, немного разбирающийся в программировании, сможет модифицировать текст проекта для изменения или увеличения функциональности. Также для пошаговой информации по установке проекта в магазине, смотрите статью '''[[Установка проекта Розница]]'''.&lt;br /&gt;
&lt;br /&gt;
==== Лицензионное соглашение на использование проекта ====&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы скачивать, устанавливать, работать с проектом или модифицировать его с помощью исполняемых файлов проекта, Вам необходимо согласиться с лицензионным соглашением на использование исполняемых файлов проекта. Соглашение имеет определенные ограничения в использовании, для того, чтобы проект мог применяться только небольшими и средними организациями. Соглашение не относится к исходным текстам проекта, распространяемым на сервере github (или подобном), тексты проекта могут быть использованы в любых целях без ограничения. &lt;br /&gt;
&lt;br /&gt;
* [http://{{SERVERNAME}}/download/EULASOFT.txt &amp;lt;big&amp;gt;'''Полный текст соглашения для использования исполняемых файлов (программного обеспечения) проекта.'''&amp;lt;/big&amp;gt;]. Исполняемые файлы доступны для скачивания с данного портала (см. ниже ссылки для скачивания).&lt;br /&gt;
* [http://{{SERVERNAME}}/download/EULASRC.txt &amp;lt;big&amp;gt;'''Полный текст соглашения для использования исходных текстов проекта.'''&amp;lt;/big&amp;gt;]. Свежую версию исходных текстов проекта можно скачать со страницы проекта на [https://github.com/sfsys132/project-free-Russian-retail github].&lt;br /&gt;
&lt;br /&gt;
Ниже дается краткий свод ограничений соглашения на использование исполняемых файлов проекта (для понимания общей картины):&lt;br /&gt;
* Соглашение запрещает скачивать '''исполняемые файлы''', устанавливать их, или использовать их в коммерческих целях (в работе коммерческой организации) в случаях:&lt;br /&gt;
** Если проект будет использоваться в любой другой организации, кроме торговой розничной организации. Использование проекта для случаев, когда точка продает только через сеть Интернет, также не допускается.&lt;br /&gt;
** Если в розничной организации, использующей проект, зарегистрировано более десяти торговых точек на одном юридическом лице, за исключением юридических лиц, которые получили на это соответствующее разрешение у организации, распространяющей проект. Таким юридическим лицам будут предоставлены другие (коммерческие) исполняемые файлы системы.&lt;br /&gt;
** Если десять или более розничных точек используют одну контролирующую организацию или связанную группу организаций, им необходимо получить дополнительное разрешение у организации, распространяющей проект. Таким организациям будут предоставлены другие (коммерческие) исполняемые файлы системы.&lt;br /&gt;
** Организациям, производящим внедрение и обслуживание проекта, на более чем десяти торговых точках с целью продвижения своего продукта в эти торговые точки, необходимо получить дополнительное разрешение у организации, распространяющей проект. Таким организациям будут предоставлены другие (коммерческие) исполняемые файлы системы.&lt;br /&gt;
* Однако соглашение не запрещает использовать любые части '''исходных текстов проекта''', находящихся на сервере github (или подобном), в коммерческих или других целях, в других системах программного обеспечения или в системе SunFlurry.&lt;br /&gt;
* Организация, распространяющая проект, может в любой момент без предварительного оповещения изменить текст лицензионного соглашения, однако:&lt;br /&gt;
** Последняя версия исходных текстов проекта, распространяемая на сервере github (или подобном), а также любые исходные тексты, созданные сторонними разработчиками в рамках лицензионного соглашения до момента его изменения, ни при каких условиях не потеряют бесплатный статус.&lt;br /&gt;
** Последние версии исполняемых файлов, распространявшихся до момента изменения лицензионного соглашения, ни при каких условиях не потеряют бесплатный статус, эти старые версии можно будет использовать в рамках текста лицензионного соглашения до момента его изменения.&lt;br /&gt;
* Проект распространяется без какой-либо гарантии со стороны распространяющей организации (&amp;quot;как есть&amp;quot;). Организация не несет ответственности за возможный ущерб, причиненный программой, ее сбоями, возможностью или невозможностью ее использования (включая убытки и потерю информации).&lt;br /&gt;
&lt;br /&gt;
Если Вы не можете использовать проект, так как деятельность или величина Вашей организация не удовлетворяет условиям лицензионного соглашения, однако у Вас есть интерес к системе или какие-либо коммерческие предложения, вы можете связаться с нами с помощью электронной почты, используя следующий адрес: '''&amp;lt;nowiki&amp;gt;sf@sfs&amp;amp;#x79;s.ru&amp;lt;/nowiki&amp;gt;'''. Мы читаем всю почту, но можем задержаться с ответом из-за высокой загруженности. Если Вы не получили ответ в течение недели, возможно дежурный сотрудник находится в отпуске. Из-за большого количества спама, приходящего на почту, наш почтовый сервер использует спам-фильтры. Если наш сервер отвергает Ваше письмо, попробуйте отослать его с бесплатных почтовых серверов.&lt;br /&gt;
&lt;br /&gt;
==== Возможности проекта розница ====&lt;br /&gt;
&lt;br /&gt;
Бесплатный проект розница состоит серверной части, клиентской части и файлов проекта. &lt;br /&gt;
&lt;br /&gt;
Серверная часть хранит базу данных и обслуживает запросы к ней. Для одного магазина должна быть установлена одна серверная часть, даже если работа с базой данных будет происходить с нескольких машин одновременно. Некоммерческий проект розница использует '''x86''' '''SQLite3''' сервер ([[Общая информация о сервере базы данных#Доступные СУБД и особенности их использования|См. статью]]). Это ограничивает масштабируемость одной базы данных, и слишком большое количество пользователей может замедлить работу в ней. 32-битная версия сервера также накладывает некоторое ограничение на размер базы данных, так как слишком большие базы данных могут работать медленнее из-за невозможности использования буфера запросов больше предела в ~2Гб. Однако для розничных точек это не должно стать проблемой, так как базы данных в них обычно небольшие. Нужно добавить, что сама база данных не имеет никаких искусственных ограничений по размеру (максимальный размер определяется возможностями SQLite3). Для небольших магазинов, серверная часть обычно устанавливается на компьютер с кассовым оборудованием, где клиентская часть выступает как кассовый терминал.&lt;br /&gt;
&lt;br /&gt;
[[Общая информация о консольном и визуальном клиентах|Клиентская часть]] проекта розница использует '''x86''' бинарный файл. Клиентская часть может использоваться как кассовый терминал, так и как учетная система и может быть установлена на любое количество компьютеров для работы с одним сервером магазина. Возможности клиентской части определяются исходными текстами проекта, поэтому, они постоянно дополняются и изменяются. Любой человек, разбирающийся в программировании, может изменить текст проекта и добавить в него новые возможности. На момент написания статьи, проект умеет:&lt;br /&gt;
&lt;br /&gt;
* При использовании проекта, как учетной системы:&lt;br /&gt;
** Ведение любого количества юридических лиц и магазинов в одной базе.&lt;br /&gt;
** Анализы продаж и закупок, ABC, XYZ-анализы, анализы наценки и прибыли, прогнозирование закупки товаров.&lt;br /&gt;
** Система ценообразования и формирования цен, распечатка ценников.&lt;br /&gt;
** Ведение бухгалтерского учета, ручные проводки, ведение учета по основным средствам.&lt;br /&gt;
*** Книга покупок и книга продаж, книга доходов и расходов, бух. баланс и отчет по прибыли.&lt;br /&gt;
** Ведение финансового учета, ведение затрат, затраты по оплате и начислению.&lt;br /&gt;
*** Операционный капитал, отчет по прибылям и убыткам, маржинальная прибыль.&lt;br /&gt;
** Ведение и учет маркетинга поставщиков (начисление и закрытие скидок и т.д.).&lt;br /&gt;
** Ведение и анализы взаиморасчетов с поставщиками, платежная ведомость.&lt;br /&gt;
** Ведение кассовых и банковских остатков. Ведение подотчета.&lt;br /&gt;
** Ведение складских остатков в разрезе партий, марочный учет ЕГАИС и ГИС МТ.&lt;br /&gt;
** Обрезание, объединение и перенос базы данных.&lt;br /&gt;
** Обмен между базами данных, возможность выгрузки документов из периферийных баз данных в центральную.&lt;br /&gt;
** Система прав отдельных пользователей.&lt;br /&gt;
** Возможности обмена с другими информационными базами:&lt;br /&gt;
*** При разрелении центральной базы и локальных баз магазинов, возможность использования простого обмена по протоколу Фронтол.&lt;br /&gt;
*** Возможно выгрузки и зарузки из баз 1С по проколу EnterpriseData.&lt;br /&gt;
*** Возможность использования внутреннего протокола обмена с центральной базой.&lt;br /&gt;
* При использовании проекта, как кассового терминала:&lt;br /&gt;
** Драйверы для популярных ККМ (Атол, Штрих-М, Вики Принт, другие драйверы будут добавлены позже).&lt;br /&gt;
*** Продажа марочного товара ЕГАИС (алкоголь) и ГИС МТ (сигареты, молочная продукция и пр.). Работа с ФФД 1.2. &lt;br /&gt;
*** Продажа на несколько касс одновременно (если, к примеру, торговля алкоголем ведется от одного юр. лица, а все остальное продается от другого).&lt;br /&gt;
** Приемка поступлений ЕГАИС, автоматическое создание партий, работа с регистром 2, отчеты по сравнению с реальными остатками и прочее. Полный учет ЕГАИС.&lt;br /&gt;
*** Доступ к УТМ ЕГАИС через сервер позволяет принимать документы в ЕГАИС, работая с базой через Интернет без необходимости перенаправления соединения с УТМ.&lt;br /&gt;
*** Формирование декларации об объемах продаж алкоголя.&lt;br /&gt;
** Прием поступлений от поставщиков марочной продукции ГИС МТ.&lt;br /&gt;
** Использование концепции &amp;quot;рабочее место&amp;quot; и &amp;quot;магазин&amp;quot;, что позволяет настроить оборудование в ККТ магазина нужным образом и исключить проблемы с путаницей между оборудованием и пользователями.&lt;br /&gt;
** Возможность выгружать и загружать информацию по протоколу Фронтол (к примеру, если центральная база будет использовать другую учетную систему). Другие способы обмена могут быть созданы Вашими или сторонними IT-специалистами.&lt;br /&gt;
** Возможность программировать запреты на продажу алкоголя.&lt;br /&gt;
** Вскрывать тару ЕГАИС непосредственно в интерфейсе продавца.&lt;br /&gt;
** Блок макетинга покупателей:&lt;br /&gt;
*** Использование торговых акций с скидкой на позиции, скидкой от суммы документа, акции типа 2+1, возможность добавления исходного кода для реализации более сложных акций.&lt;br /&gt;
*** Работа со скидочными картами, работа с подарочными картами, работа с депозитами.&lt;br /&gt;
*** Учет маркетинговых акций и скидок покупателям.&lt;br /&gt;
** Удобная и простая самомасштабируемая форма рабочего места продавца.&lt;br /&gt;
*** Операции типа: отложить чек, продолжить чек, возврат, аванс, кредит, временная замена прав для выполнения нужной операции и т.д. &lt;br /&gt;
*** Возможности подбора товаров в чек, в т.ч. с помощью терминала сбора данных.&lt;br /&gt;
*** Быстрое закрытие чека, быстрая работа с комбинированными оплатами.&lt;br /&gt;
*** Добавление часто выбираемых товаров в интерфейс рабочего места продавца, частые кнопки могут содержать исходный код для произвольных операций.&lt;br /&gt;
*** Возможность перехвата специальным исходным кодом управления в любой момент или при нажатии на стандартные кнопки. Примеры кода для кафе с номерами столов и депозитами.&lt;br /&gt;
* Возможности сервера базы данных:&lt;br /&gt;
** Автоматическое создание резервных копий базы данных.&lt;br /&gt;
* Возможность получения самых свежих обновлений из официального репозитория.&lt;br /&gt;
&lt;br /&gt;
Требования к оборудованию для работы серверной и клиентской части проекта:&lt;br /&gt;
* Операционная система: Windows 2000, XP, 7, 8, 10 или 11&lt;br /&gt;
* Процессор: 1.1ГГц и выше (также поддерживаются младшие модели Celeron и Atom)&lt;br /&gt;
* Оперативная память: 2Гб и выше (4Гб и выше для Windows 10 и 11)&lt;br /&gt;
Проект будет работать практически на любом оборудовании. Помните, что если вся Ваша оперативная память используется, работа с компьютером будет замедлена, и это может негативно сказаться на кассовых продажах. Убедитесь, что у Вас достаточно оперативной памяти. Для баз данных, обычного размера, сервер не требует много дополнительной памяти, однако, если база данных будет очень большой (2Гб и более), сервер также будет использовать значительное количество памяти.&lt;br /&gt;
&lt;br /&gt;
В проект также входит специальная версия [[Общая информация и интерфейс Студии|Студии]], программы, которая позволяет изменять исходный код проекта и его визуальные формы, а также, разворачивать эти изменения на существующих торговых точках простым нажатием нескольких клавиш. Студия используется в работе техническими специалистами и обычно не устанавливается в самих магазинах. Данный портал содержит исчерпывающую документацию для начала работы со Студией для изменения исходного кода проекта.&lt;br /&gt;
&lt;br /&gt;
Для пошаговой информации по установке проекта в магазине, смотрите статью '''[[Установка проекта Розница]]'''.&lt;br /&gt;
&lt;br /&gt;
==== Изменения, планируемые в будущем ====&lt;br /&gt;
&lt;br /&gt;
На данный момент не все планируемые возможности проекта реализованы. Изменения в его исходном коде будут загружаться на [https://github.com/sfsys132/project-free-Russian-retail официальную страницу github] и бета-версии всегда доступы в официальном репозитории (см. параграф ниже), их можно будет скачать, и обновить рабочие базы данных магазинов. Среди планируемых изменений и добавлений, можно выделить следующие:&lt;br /&gt;
* Особый и более удобный инферфейс для кафе и ресторанов (сейчас есть возможность работы с номерами столов и пр. с помощью перехвата функций из интерфейса кассира).&lt;br /&gt;
* Расширение возможностей системы (внешние модули, создание собственных объектов в язывке (пользовательское ООП) и т.д.)&lt;br /&gt;
* Дополнительные функции редактора исходных Студии (выделенные уровни блоков текста, переходы к функциям, т.п.)&lt;br /&gt;
* Добавление новых драйверов для ККМ, банковских терминалов, т.с.д., электронных весов и дисплеев покупателей&lt;br /&gt;
* Работа над исправлением найденных ошибок&lt;br /&gt;
&lt;br /&gt;
==== Официальный репозиторий исходных текстов проекта ====&lt;br /&gt;
&lt;br /&gt;
Ссылка на официальный репозиторий исходных текстов проекта находится в списке серверов при установки Студии из комплекта бесплатного проекта Розница. Официальный репозиторий содержит самые свежие изменения в проекте и самые свежие исполняемые файлы. Изменения можно скачать выборочно при синхронизации с репозиторием из Студии (пункт меню &amp;quot;развертывание&amp;quot; - &amp;quot;развернуть проект&amp;quot; - галочка на репозитории). Пользователи проекта не могут изменить исходные тексты репозитория, им предоставляется доступ только для чтения. Важно понимать, что репозиторий может содержать непроверенные или мало проверенные изменения, скачивание которых в рабочий проект и затем развертывание в рабочие базы, может привести к ошибкам. Вы можете использовать репозиторий на свой страх и риск, в случаях, к примеру, если новое изменение еще не появилось в новом выпуске или на github, однако, оно необходимо. Проверяйте работу магазина после каждого обновления из репозитория!&lt;br /&gt;
&lt;br /&gt;
==== Ссылки для скачивания бинарных файлов проекта ====&lt;br /&gt;
&lt;br /&gt;
Приведенная здесь ссылка содержит текущую версию программы установки. Программа позволяет установить как клиентскую и серверную части, так и систему разработки Студия. Несмотря на то, что исходные файлы проекта в этой программе установки достаточно свежие, вероятно, они не содержат всех недавних изменений, которые доступны на сервере [https://github.com/sfsys132/project-free-Russian-retail github]. Если Вам необходимо обновить исходные тексты до самой свежей версии, Вы можете скачать их в виде архива или с помощью специальных инструментов (типа [https://tortoisegit.org/ tortoisegit]). Для подобной операции могут потребоваться дополнительные знания. Для пошаговой информации по установке проекта в магазине, смотрите статью '''[[Установка проекта Розница]]'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;Программа установки, а также бинарные файлы проекта не содержат вирусов, однако при скачивании любых исполняемых файлов из Интернета, всегда рекомендуется использовать антивирус со свежими базами обновлений!&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://{{SERVERNAME}}/download/sf_retail_x86_20251227_install.exe &amp;lt;big&amp;gt;'''Скачать файл установки проекта Розница.'''&amp;lt;/big&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
==== Ссылка для скачивания простой демонстрации графических возможностей системы -- tetris.sfo ====&lt;br /&gt;
&lt;br /&gt;
Для простой демонстрации графических возможностей системы был создан внешний объект системы ([[Функции общего назначения#Внешний загружаемый объект|Внешний загружаемый объект]]) '''Tetris'''. Вы можете скачать файл объекта и открыть его в визуальном клиенте. Для работы необходимы установленные драйверы видеокарты и OpenGL не ниже 2.1 (любая современная видеокарта, в т.ч. встроенные). Внешний объект также содержит исходный текст, его можно редактировать и изменять по желанию, если открыть в [[Общая информация и интерфейс Студии|Студии]]. Объект в свободном распространении. Копия, данная на скачивание здесь, возможно, будет в дальнейшем немного изменяться, чтобы улучшить читаемость. Ниже дана ссылка на скачивание:&lt;br /&gt;
&lt;br /&gt;
[http://{{SERVERNAME}}/download/tetris.sfo '''Скачать демонстрацию графического объекта Tetris.''']&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Контактная информация====&lt;br /&gt;
&lt;br /&gt;
Вы можете связаться с нами, используя следующий почтовый адрес: &amp;lt;big&amp;gt;'''&amp;lt;nowiki&amp;gt;sf@sfs&amp;amp;#x79;s.ru&amp;lt;/nowiki&amp;gt;'''&amp;lt;/big&amp;gt;. Нам интересно будет услышать любые Ваши предложения. Мы читаем всю почту, но можем задержаться с ответом из-за высокой загруженности. Если Вы не получили ответ в течение недели, возможно дежурный сотрудник находится в отпуске. Из-за большого количества спама, приходящего на почту, наш почтовый сервер использует спам-фильтры. Если наш сервер отвергает Ваше письмо, попробуйте отослать его с бесплатных почтовых серверов.&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>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=5156</id>
		<title>Общее описание языка</title>
		<link rel="alternate" type="text/html" href="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=5156"/>
		<updated>2025-12-27T17:08:49Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{HeadLinks|&lt;br /&gt;
* [[Main_Page|Начальная страница]]}}&lt;br /&gt;
== Вводная информация ==&lt;br /&gt;
&amp;lt;p&amp;gt;Встроенный язык (скрипт) системы является интерпретатором, компилирующим (переводящим) тексты, написанные по определенным правилам, в байтовый код для ускорения выполнения программы. Перевод из байтового кода в машинный код не осуществляется (таким образом сохраняя сравнительную независимость от платформы исполнения). Такой способ сродни общеизвестным языкам, типа Java или C#. Являясь императивным языком (т.е., языком, использующим инструкции), он поддерживает процедурное и объектно-ориентированное программирование (однако, в данный момент не создано возможности определения новых объектов непосредственно из кода).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Являясь также специализированным языком для поддержки работы программной среды, он обладает рядом особенностей, таких как [[Типизация|слабая типизация]] (необходимая для упрощения написания текстов и адресации данных более удобным способом), многопоточность, асинхронные и прерывающие события. Компилированные тексты программы могут находиться, как в особых файлах исполнения (модулях), так и быть привязанными к визуальным объектам или метаданным (работая, к примеру, как триггеры), пунктам меню и пр. Язык обладает широкой бибилиотекой встроенных функций и объектов, позволяющих осуществлять ввод и вывод информации в разных файловых форматах, обращение и работу с базой данных, манипуляцию данными, визуальное представление данных с помощью форм и электронных таблиц.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;При создании языка делался упор как на удобство программирования, уменьшения количества возможных ошибок при написании программ и полноту предоставляемого инструментария, так и на скорость исполнения и оптимизацию функций.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Иерархия текстов программ ==&lt;br /&gt;
&amp;lt;p&amp;gt;При запуске системы, некоторые программы выполняются до того, как пользователь получает возможность управления системой или ввода информации в нее. Эти стартовые программы называются глобальными и после исполнения находятся в памяти для того, чтобы другие программы имели возможность вызывать созданные ими функции и работать с определенными ими переменными. Каждая программа подобного рода располагается в отдельном файле. Такие файлы называются модулями. Кроме глобальных модулей, любой объект системы, будь то объект метаданных или внешняя обработка и пр. (см. [[Студия/Конфигурация данных проекта|Конфигурация данных проекта]]) имеет свой набор подобных модулей. Программы хранятся не только в модулях, но и привязаны к визуальным объектам (обработчики визуальных событий), к объектам метаданных (триггеры событий метаданных), к пунктам меню (обработчики событий меню), к ячейкам и объектам электронных таблиц (однако, вызов не происходит напрямую) и в других контейнерах по усмотрению создателя конфигурации.&amp;lt;/p&amp;gt;&lt;br /&gt;
При инициализации и старте системы, глобальные модули исполняются последовательно по следующему принципу:&lt;br /&gt;
# Первым всегда исполняется модуль с именем '''Module'''.&lt;br /&gt;
# Последующие модули всегда исполняются в алфавитном порядке их наименований.&lt;br /&gt;
&amp;lt;p&amp;gt;Любые функции или переменные, определенные в этих модулях с постфиксом '''Export''', будут доступны во всех других модулях и функциях, вызываемых из них (см. ниже описание переменных и функций).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Система позволяет использовать многозадачность при исполнении программ, для этого при запуске программы создается один рабочий поток -- ''корневой поток'' (root thread). Для визуальных клиентов этот поток обслуживает работу пользователя при исполнении пунктов главного меню, окон, загруженных в глобальном режиме, и пр. Программы, исполняемые в данном потоке, могут создать новые потоки (к примеру, с помощью вызова '''[[LoadModule]]'''). Количество рабочих потоков в среде ограничено только ресурсами операционной системы. Вызовы нового модуля из текущего могут также не создавать новый поток, в этом случае, создается вложенный вызов модуля и предыдущий модуль остается в памяти, пока работа последующего не завершена. Во вложенном модуле доступны не только переменные и функции глобальных модулей, но и переменные и функции модуля, из которого произошел вызов (см. также [[#Вложенность функций и модулей, уровни вложенности|Вложенность функций и модулей, уровни вложенности]]). Переменные созданные в одном потоке (или в корневом потоке), могут быть использованы в других потоках, блокировки доступа к переменным в многозадачной среде выполняются системой автоматически (см. также доп. [[Объекты#Многопоточные и однопоточные объекты, внутренний механизм блокировки|информацию по блокировкам]]).&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Построение текста программ с помощью инструкций ==&lt;br /&gt;
Любая программа в языке состоит из блоков. Каждый блок делится на некоторое количество инструкций (команд), разделенных знаком &amp;quot;;&amp;quot;. Знак перевода строки после каждой инструкции необязателен, но помогает улучшить читаемость программы, позволяя, тем самым избежать ошибок:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;Начало блока 1&amp;gt;&lt;br /&gt;
Инструкция 1;&lt;br /&gt;
Инструкция 2;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;Окончание блока 1&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Начало блока 2&amp;gt;&lt;br /&gt;
Инструкция 1;Инструкция 2;Инструкция 3; ...&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;Окончание блока 2&amp;gt;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Блоки могут быть как объявлениями функций, так, к примеру, и наборами инструкций при выполнении какого либо условия (см. конструкцию ''If''). После объявления начала блока не требуется знак разделителя инструкций (;), однако, его наличие не будет приводить к ошибкам. Пустые инструкции, состоящие только из знака &amp;quot;;&amp;quot; допустимы и не являются ошибкой.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Комментарии (свободный текст, не подлежащий интерпретации и компилированию) могут быть использованы в любом месте программы. Комментарии можно задать двумя способами: с помощью двух знаков &amp;quot;/&amp;quot;, при этом, любой текст после этого набора знаков до окончания текущей строки будет пропущен при компиляции. Также комментарии задаются, как блок текста, начинающийся знаком &amp;quot;{&amp;quot; и заканчивающийся знаком &amp;quot;}&amp;quot;. Символы перевода строки внутри этого блока будут принадлежать части комментария и пропускаются при компиляции. После начала комментария одного типа, и до его окончания, невозможно создать комментарий другого типа, так как текст внутри комментария не подлежит интерпретации. Пример использования комментариев дан ниже:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Инструкция 1;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Комментарий 1&lt;br /&gt;
Инструкция 2;&lt;br /&gt;
//Комментарий 2&lt;br /&gt;
...&lt;br /&gt;
Инструкция 100;&lt;br /&gt;
//Инструкция 101;&amp;amp;#9;&amp;amp;#9;//Инструкция не будет компилироваться (принадлежит комментарию)&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
Инструкция 102;&lt;br /&gt;
Инструкция 103;}&amp;amp;#9;&amp;amp;#9;//Инструкции 102 и 103 принадлежат комментарию&lt;br /&gt;
Инструкция 104{Комментарии внутри инструкции допустимы};&lt;br /&gt;
...&lt;br /&gt;
{Инструкция 200;&lt;br /&gt;
Инструкция 201;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Неверный комментарий,} данный текст будет считаться частью программы и вызовет ошибку компиляции&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;При написании программы рекомендуется каждую инструкцию помещать в отдельную строку и для каждого логического блока инструкций использовать отступ, если блок находится внутри другого блока, отступ рекомендуется увеличивать. Такой подход улучшит читаемость текста программ. Размер единицы отступа обычно совпадает с шириной знака табуляции. Последнюю можно задать в свойствах редактора текста, однако по умолчанию рекомендованное значение равно двум знакоместам. Символ табуляции в редакторе текста программ не используется, а заменяется на необходимое количество пробелов, это сделано для удобства редактирования текстов и обычно не мешает написанию программ, устраняя невидимый и неудобный в работе символ. Для добавления к строковым выражениям символа табуляции, можно использовать либо константу _TAB, либо конструкцию Chr(9). Пример использования отступов:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
If a=1 Then&lt;br /&gt;
  Message(&amp;quot;a равно 1&amp;quot;);&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Инструкция внутри логического блока конструкции If имеет отступ в 2 пробела&lt;br /&gt;
Else&lt;br /&gt;
  Message(&amp;quot;a не равно 1&amp;quot;);&amp;amp;#9;&amp;amp;#9;//Инструкции (эта и далее) внутри логического блока конструкции If имеет отступ в 2 пробела&lt;br /&gt;
  If a&amp;gt;0 Then&lt;br /&gt;
    Message(&amp;quot;Однако, a больше нуля&amp;quot;);&amp;amp;#9;//Инструкция внутри вложенного логического блока конструкции If имеет отступ в 4 пробела&lt;br /&gt;
  EndIf;&lt;br /&gt;
EndIf;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Особые конструкции языка ==&lt;br /&gt;
&amp;lt;p&amp;gt;Особыми называются конструкции языка, не являющиеся функциями (но могут быть магическими функциями), процедурами или частями вычисляемых выражений. Такие конструкции могут включать в себя один или более логических блоков, которые могут состоять из любого количества инструкций. Регистр не имеет значения при указании составных частей конструкций (&amp;lt;code&amp;gt;begin&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;BEgin&amp;lt;/code&amp;gt; будут восприняты компилятором одинаково). Определения, используемые в этих конструкциях, являются зарезервированными словами, создание переменных или функций с зарезервированным именем запрещено (к примеру строка &amp;lt;code&amp;gt;If:=1;&amp;lt;/code&amp;gt; вызовет ошибку при компиляции). На данный момент в языке существуют следующие конструкции и магические функции (далее по тексту &amp;lt;логический блок&amp;gt; заменяет любое количество инструкций языка, внутри квадратных скобок &amp;lt;nowiki&amp;gt;[...]&amp;lt;/nowiki&amp;gt; находятся необязательные части конструкций, внутри фигурных скобок &amp;lt;nowiki&amp;gt;{...}&amp;lt;/nowiki&amp;gt; перечислены две или более части конструкций, одна из которых должна обязательно присутствовать):&amp;lt;/p&amp;gt;&lt;br /&gt;
==== Конструкция объявления переменной ====&lt;br /&gt;
::&amp;lt;code&amp;gt;Var &amp;lt;переменная&amp;gt; [Export][, &amp;lt;переменная&amp;gt; [Export]];&amp;lt;/code&amp;gt;&lt;br /&gt;
Переменные обычно создаются автоматически при первом присваивании и удаляются при выходе за [[Границы видимости переменных‏‎|границы существования]], однако при объявлении переменных с постфиксом Export, они становятся видимыми для функций и модулей более низкого уровня (вызываемых внутри данной функции или модуля). Пример см. ниже:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Var a1 Export, a2;&lt;br /&gt;
&lt;br /&gt;
Function ВложеннаяФункция()&lt;br /&gt;
  a1:=1;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Обращение к a1 внутри функции возможно&lt;br /&gt;
  a2:=2;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//При обращении к a2 создается новая переменная с границами видимости функции ВложеннаяФункция()&lt;br /&gt;
EndFunction&lt;br /&gt;
&lt;br /&gt;
a1:=0;&lt;br /&gt;
a2:=0;&lt;br /&gt;
ВложеннаяФункция();&lt;br /&gt;
Message(a1);&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Выводит 1&lt;br /&gt;
Message(a2);&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Выводит 0, так как оригинальная переменная a2 не была изменена&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Кроме того, объявление переменных можно использовать для небольшого ускорения, когда к переменной происходит очень много вызовов, так как поиск переменных, при обращении к ним, осуществляется по имени (в текущей реализации), это занимает определенное время, поэтому случаи, когда переменная была найдена в стеке сразу же, и когда она была найдена после пропуска нескольких неподходящих, занимают несколько разное время. Иными словами, переменные, объявленные позже, будут найдены при обращении быстрее. Разница во времени достаточно мала, однако в синтетическом тесте, показанном ниже, она весьма заметна:&lt;br /&gt;
[[image:Var_Example.png|thumb|right|Пример выполнения кода с результатами [[Встроенный профайлер|профилирования]]]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Var a1,a2,a3,a4,a5,a6,a7,a8,a9,a10;&lt;br /&gt;
&lt;br /&gt;
ProfilerClear();&lt;br /&gt;
ProfilerStart();&lt;br /&gt;
For i:=1 to 1000000 Do&lt;br /&gt;
  a1:=0;&lt;br /&gt;
EndDo;&lt;br /&gt;
For i:=1 to 1000000 Do&lt;br /&gt;
  a10:=0;&lt;br /&gt;
EndDo;&lt;br /&gt;
ProfilerStop();&lt;br /&gt;
DebugBreak;&lt;br /&gt;
Message(&amp;quot;Done!&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Конструкция логического блока ====&lt;br /&gt;
::&amp;lt;code&amp;gt;Begin&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;code&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;логический блок&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;code&amp;gt;End;&amp;lt;/code&amp;gt;&lt;br /&gt;
Конструкция имеет декоративную функцию.&lt;br /&gt;
&lt;br /&gt;
==== Конструкция проверки выражения ====&lt;br /&gt;
::&amp;lt;code&amp;gt;If &amp;lt;выражение&amp;gt; Then&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;code&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;логический блок&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;code&amp;gt;[ElseIf &amp;lt;выражение&amp;gt; Then&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;code&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;логический блок&amp;gt;]&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;code&amp;gt;[Else&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;code&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;логический блок&amp;gt;]&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;code&amp;gt;EndIf;&amp;lt;/code&amp;gt;&lt;br /&gt;
Конструкция служит для логического выполнения инструкций в зависимости от результатов вычисления выражений. Если выполнение выражения возвращает логическую единицу (см. ниже), будет исполнен блок, идущий после оператора &amp;lt;code&amp;gt;Then&amp;lt;/code&amp;gt;, иначе будет осуществлена новая проверка (если используется оператор &amp;lt;code&amp;gt;ElseIf&amp;lt;/code&amp;gt;, который может повторяться требуемое количество раз), будет произведено безусловное исполнение блока (если используется оператор &amp;lt;code&amp;gt;Else&amp;lt;/code&amp;gt;), либо интерпретатор перейдет к последующим инструкциям программы (если используется оператор &amp;lt;code&amp;gt;EndIf&amp;lt;/code&amp;gt;). Наличие оператора &amp;lt;code&amp;gt;EndIf&amp;lt;/code&amp;gt; обязательно, как метки окончания конструкции.&lt;br /&gt;
==== Конструкция переключателя (case) ====&lt;br /&gt;
{{planned}}&lt;br /&gt;
&lt;br /&gt;
==== Конструкция цикла с предусловием ====&lt;br /&gt;
::&amp;lt;code&amp;gt;While &amp;lt;выражение&amp;gt; Do&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;code&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;логический блок&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;code&amp;gt;EndDo;&amp;lt;/code&amp;gt;&lt;br /&gt;
Конструкция создает цикл, выполняя блок инструкций, пока выражение возвращает правду. Если выражение возвратит ложь при первом вызове, блок инструкций не будет выполнен ни разу.&lt;br /&gt;
&lt;br /&gt;
==== Конструкция цикла &amp;quot;пока&amp;quot; с постусловием ====&lt;br /&gt;
::&amp;lt;code&amp;gt;Repeat&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;code&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;логический блок&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;code&amp;gt;DoWhile &amp;lt;выражение&amp;gt;;&amp;lt;/code&amp;gt;&lt;br /&gt;
Конструкция создает цикл, выполняя блок инструкций, пока выражение возвращает правду. Проверка выражения осуществляется после выполнения блока инструкций, поэтому последний будет выполнен по крайней мере один раз.&lt;br /&gt;
&lt;br /&gt;
==== Конструкция цикла &amp;quot;пока не&amp;quot; с постусловием ====&lt;br /&gt;
::&amp;lt;code&amp;gt;Repeat&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;code&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;логический блок&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;code&amp;gt;Until &amp;lt;выражение&amp;gt;;&amp;lt;/code&amp;gt;&lt;br /&gt;
Конструкция создает цикл, выполняя блок инструкций до тех пор, пока выражение не возвратит правду, после чего выполнение прекратится. Проверка выражения осуществляется после выполнения блока инструкций, поэтому последний будет выполнен по крайней мере один раз.&lt;br /&gt;
&lt;br /&gt;
==== Конструкция цикла с перечислением ====&lt;br /&gt;
::&amp;lt;code&amp;gt;For &amp;lt;переменная&amp;gt;:=&amp;lt;выражение&amp;gt; {To,Downto} &amp;lt;выражение&amp;gt; Do&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;code&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;логический блок&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;code&amp;gt;EndDo;&amp;lt;/code&amp;gt;&lt;br /&gt;
Конструкция создает цикл, инициализируя переменную вычисленным значением первого выражения. В зависимости от использования ключевого слова '''To''' или ключевого слова '''DownTo''':&lt;br /&gt;
* (ключевое слово '''To''') Блок инструкций выполняется до тех пор, пока значение переменной не будет больше вычисленного значения второго выражения. После выполнения блока инструкций, переменная увеличивается на единицу.&lt;br /&gt;
* (ключевое слово '''DownTo''') Блок инструкций выполняется до тех пор, пока значение переменной не будет меньше вычисленного значения второго выражения. После выполнения блока инструкций, переменная уменьшается на единицу.&lt;br /&gt;
Если значение переменной, при вычислении ее начального значения, сразу же будет удовлетворять условию окончания цикла, блок инструкций не будет выполнен ни разу. Такие циклы выполняются быстрее, чем циклы ''While'' или ''Repeat'', когда необходимо выполнить цикл известное заранее число раз, так как система не вычисляет значение второго выражение после каждого оборота цикла.&lt;br /&gt;
&lt;br /&gt;
==== Конструкция прерывания цикла ====&lt;br /&gt;
::&amp;lt;code&amp;gt;Break [&amp;lt;выражение&amp;gt;];&amp;lt;/code&amp;gt;&lt;br /&gt;
Конструкция прерывает выполнение любого из циклов любого уровня вложенности и продолжает его с первой инструкции вне прерываемого цикла. Каждый цикл имеет блок (набор) инструкций, выполняющийся внутри него определенное количество раз. Эти инструкции выполняются в цикле первого уровня. Если внутри цикла имеется второй цикл (любого вида, будь-то '''For''' или '''While''', в этом случае не имеет значения), инструкции внутри его выполняются в цикле второго уровня. Вложенность циклов неограниченна. Иногда требуется прервать выполнение цикла на определенном этапе и продолжить выполнение программы, как будто цикл был завершен. Для этого существует конструкция '''Break'''. Дополнительный необязательный аргумент конструкции позволяет прервать определенное количество уровней цикла (т.е., буквально выйти из ''n'' уровня цикла на ''p''), встречаются ситуации, когда подобный подход сильно сокращает сложность программы. Пример использования '''Break &amp;lt;Аргумент&amp;gt;''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Сокет:=0;&lt;br /&gt;
ПопыткиМин:=60*1000;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Максимальное время, которое можно затратить на попытки соединения (60 с.)&lt;br /&gt;
НачВремя:=Date();&lt;br /&gt;
While GetPeriodMs(НачВремя)&amp;lt;=ПопыткиМин Do&lt;br /&gt;
  СрвНом:=0;&lt;br /&gt;
  While СрвНом&amp;lt;СпСервер.Size() Do&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Осуществляется проход по всем серверам из списка и попытка соединения последовательно с каждым&lt;br /&gt;
    СрвНом:=СрвНом+1;&lt;br /&gt;
    Сервер:=СпСервер.Get(СрвНом);&lt;br /&gt;
    Сокет:=TCPConnection.ConnectRaw(Сервер);&lt;br /&gt;
    If Сокет.isConnected() Then&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Когда соединение установлено успешно, продолжим работу, прервав оба цикла&lt;br /&gt;
      Break 2;&lt;br /&gt;
    EndIf;  &lt;br /&gt;
  EndDo;&lt;br /&gt;
EndDo;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Конструкция прерывания цикла с продолжением ====&lt;br /&gt;
::&amp;lt;code&amp;gt;Continue [&amp;lt;выражение&amp;gt;];&amp;lt;/code&amp;gt;&lt;br /&gt;
Конструкция прерывает выполнение любого из циклов любого уровня вложенности и продолжает его с первой инструкции самого внешнего цикла (см. описание '''Break''' для понимания терминов, типа уровня цикла). Иногда требуется прервать выполнение цикла на определенном этапе и перейти в его начало, как будто цикл совершил целый оборот. Для этого существует конструкция '''Continue'''. Дополнительный необязательный аргумент конструкции позволяет прервать определенное количество уровней цикла (т.е., буквально выйти из ''n'' уровня цикла на ''p'') и &amp;quot;продолжить&amp;quot; выполнение на самом внешнем уровне. Таким образом '''Continue''' без аргументов просто переходит в начало цикла. Для циклов '''For''' и '''While''' конструкция переходит к условию, которое может прервать выполнение цикла, для циклов '''Repeat''', у которых условие находится в конце цикла, будет гарантировано начато новое выполнение цикла. Пример использования '''Continue''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Тб -- таблица с документами для выгрузки&lt;br /&gt;
Тб.Select();&lt;br /&gt;
While Тб.Next() Do&lt;br /&gt;
  If Тб.Статус=1 Then&lt;br /&gt;
    Continue;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Пропускаем строки таблицы со столбиком Статус, равным 1&lt;br /&gt;
  EndIf;&lt;br /&gt;
  зДок:=Тб.Документ;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Получаем документ из таблицы&lt;br /&gt;
  aTab:=зДок.LineParts(&amp;quot;Номенклатура&amp;quot;);&lt;br /&gt;
  aTab.Select();&lt;br /&gt;
  While aTab.Next() Do&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Производим проверку строк документа&lt;br /&gt;
    зН:=aTab.Номенклатура;&lt;br /&gt;
    If зН.флАлкогольнаяПродукция=0 Then&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Проверяем только строки с алкогольной продукцией&lt;br /&gt;
      Continue;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Если это продукция другого типа, переходим к следующей строке&lt;br /&gt;
    EndIf;&lt;br /&gt;
    If aTab.Партия.Selected()=0 Then&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Во всех проверяемых строках, должен быть заполнен реквизит &amp;quot;Партия&amp;quot;&lt;br /&gt;
      Message(&amp;quot;В документе &amp;quot;+зДок+&amp;quot; не указана партия для номенклатуры &amp;quot;+зН+&amp;quot; (&amp;quot;+зН.Code+&amp;quot;)!&amp;quot;,&amp;quot;!&amp;quot;);&lt;br /&gt;
      Continue 2;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Данный документ содержит неверные строки, пропустим его и перейдем к следующему документу (в начало первого цикла While)&lt;br /&gt;
    EndIf;&lt;br /&gt;
  EndDo;&lt;br /&gt;
&lt;br /&gt;
...&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Выполним необходимую работу по выгрузке документа зДок&lt;br /&gt;
&lt;br /&gt;
EndDo;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Конструкция выхода с параметрами ====&lt;br /&gt;
::&amp;lt;code&amp;gt;Exit [&amp;lt;выражение результата&amp;gt;[,&amp;lt;выражение количества уровней&amp;gt;]];&amp;lt;/code&amp;gt;&lt;br /&gt;
Конструкция прерывает выполнение любой [[#Функции и процедуры|функции]] любого уровня вложенности и, выборочно изменяет значение '''Result''' (переменная значения возврата из функции). По окончании прерывания выполнение программы продолжается непосредственно после вызова функции, используя значение, которое она возвращает или игнорируя его, если функция вызывается, как обычная инструкция. При вызове любой функции, в начале выполнения ее кода, к внутреннему счетчику вложенности функции добавляется единица. Счетчик, однако, всегда равен нулю в начале загрузки нового модуля (см. '''[[LoadModule]]'''). Важная функция Exit не только в окончании выполнения функции в нужный момент, но и в возвращении ее значения. Для каждой функции возвращаемое значение хранится в переменной ''Result'', которая доступна как для записи, так и для чтения в любой момент в пределах текущего уровня функции. Изменение этой переменной перед окончанием функции или выходом из нее возможно, но '''Exit &amp;lt;выражение&amp;gt;''' позволяет это сделать быстрее, и при этом упростить исходный код. Иногда встречаются ситуации, когда удобно выйти сразу из нескольких функций (в таких случаях, обычно в системах без возможностей, которыми обладает '''Exit''' в данной системе, создаются исключения '''Raise''' с тем, чтобы отловить их на нужном уровне, однако, такой подход может быть неудобен из-за вероятности реальных исключений), для этого и необходим второй аргумент, определяющий количество функций, из которых необходимо выйти. Нужно иметь в виду, однако, что за пределы загруженного модуля конструкция '''Exit''' выйти не сможет. В роли функции могут выступать не только обычные определяемые функции, но и контейнеры событий форм или триггеры метаданных и пр. Пример использования '''Exit''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Функция возвращает 0, если заполнение выполнено не полностью, текст ошибки в стрОшибка&lt;br /&gt;
Function ПроверитьПолнотуЗаполнения(зК,ByRef стрОшибка)&lt;br /&gt;
  Function ПроверитьРеквизит(Стр,Имя)&lt;br /&gt;
    If IsEmpty(Стр) Then&lt;br /&gt;
      стрОшибка:=&amp;quot;Не заполнен реквизит &amp;quot;+Имя+&amp;quot;!&amp;quot;;&lt;br /&gt;
      Exit 0,2;&lt;br /&gt;
    EndIf;&lt;br /&gt;
  EndFunction&lt;br /&gt;
&lt;br /&gt;
  стрОшибка:=&amp;quot;&amp;quot;;&lt;br /&gt;
  Result:=0;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Мы не сможем изменить Result этого уровня из вложенной функции&lt;br /&gt;
  ПроверитьРеквизит(зК.Name,&amp;quot;наименование&amp;quot;);&lt;br /&gt;
  ПроверитьРеквизит(зК.ИНН,&amp;quot;ИНН&amp;quot;);&lt;br /&gt;
  ПроверитьРеквизит(зК.ЮрАдрес,&amp;quot;юридический адрес&amp;quot;);&lt;br /&gt;
  ПроверитьРеквизит(зК.ФактАдрес,&amp;quot;фактический адрес&amp;quot;);&lt;br /&gt;
  Result:=1;&lt;br /&gt;
EndFunction&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Конструкция отлова исключения ====&lt;br /&gt;
::&amp;lt;code&amp;gt;Try&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;code&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;логический блок&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;code&amp;gt;Except&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;code&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;логический блок&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;code&amp;gt;EndTry;&amp;lt;/code&amp;gt;&lt;br /&gt;
Конструкция позволяет обнаружить и подавить возникновение [[#Исключения|исключения]] внутри первого блока инструкций, при возникновении исключения, будет выполнен второй блок инструкций. Если же исключение не возникло, второй блок инструкций будет пропущен. Исключение будет подавлено после выполнения второго блока инструкций, дальнейшее исполнение будет продолжаться, как будто исключительная ситуация никогда не возникала. При возникновении исключения, внутри второго блока инструкций можно использовать функции типа '''[[PopError]]''' или '''[[PeekError]]''', чтобы выяснить, какого рода исключение было отловлено, также, при необходимости, можно вызвать новое исключение (к примеру, с помощью конструкции '''Raise'''. Выполнение второго блока инструкций также разрешается прерывать с помощью конструкций типа '''Break''', '''Continue''' или '''Exit'''. Конструкция будет выполнена даже если пользователь [[Общая информация о консольном и визуальном клиентах#Интерфейс и визуальных клиентов|прервал]] выполнение программы, однако, конструкция не сможет подавить исключение, созданное при попытке пользователя прервать выполнение (сразу после выполнения блока ''Except'' данное исключение будет вызвано снова, таким образом гарантируется, что рано или поздно исполнение программы будет прервано, однако, также гарантируется выполнение необходимых действий до завершения выполнения).&lt;br /&gt;
&lt;br /&gt;
==== Конструкция гарантированного выполнения ====&lt;br /&gt;
::&amp;lt;code&amp;gt;Try&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;code&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;логический блок&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;code&amp;gt;Finally&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;code&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;логический блок&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;code&amp;gt;EndTry;&amp;lt;/code&amp;gt;&lt;br /&gt;
Конструкция позволяет выполнить второй блок инструкций вне зависимости от того, произошло ли исключение в первом блоке инструкций, также гарантируется исполнение, если в первом блоке были вызваны команды прерывания '''Continue''', '''Break''' или команда возврата '''Exit'''. При наличии, исключение не будет подавлено после выполнения второго блока инструкций, и дальнейшее исполнение будет прервано, как будто исключение возникло сразу же за последней инструкцией второго блока (это поведение можно изменить, если вызвать функцию '''[[SuppressException]]''' внутри блока ''Finally''). При возникновении исключения, внутри второго блока инструкций можно использовать функции типа '''[[PopError]]''' или '''[[PeekError]]''', чтобы выяснить, какого рода исключение было отловлено, однако, при использовании '''PopError''', информация об исключении будет удалена из стека исключений, и исключение возникнет без какой-либо информации к нему, поэтому, рекомендуется использовать только функцию '''PeekError'''. Конструкция будет выполнена даже если пользователь [[Общая информация о консольном и визуальном клиентах#Интерфейс и визуальных клиентов|прервал]] выполнение программы. Пример использования конструкции дан ниже:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//aEl -- документ, который необходимо обработать&lt;br /&gt;
аПольз:=&amp;quot;&amp;quot;;аМаш:=&amp;quot;&amp;quot;;аВремя:=&amp;quot;&amp;quot;;&lt;br /&gt;
If aEl.Lock(аПольз,аМаш,аВремя)=0 Then&lt;br /&gt;
  Message(&amp;quot;Невозможно заблокировать документ, так как в данный момент с ним работает пользователь &amp;quot;+аПольз+&amp;quot; на &amp;quot;+аМаш+&amp;quot; в &amp;quot;+аВремя+&amp;quot;!&amp;quot;,&amp;quot;!&amp;quot;);&lt;br /&gt;
  Exit;&lt;br /&gt;
EndIf;  &lt;br /&gt;
Фл:=0;&lt;br /&gt;
Try&lt;br /&gt;
  aEl.Reload();&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Необходимо обновить содержимое aEl после блокирования, чтобы исключить вероятность устаревания информации&lt;br /&gt;
  aEl.Publish();&lt;br /&gt;
Finally&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Вне зависимости, произошло ли исключение в строке aEl.Publish(), необходимо разблокировать документ.&lt;br /&gt;
  If not isEmpty(PeekError(6)) Then&lt;br /&gt;
    Message(&amp;quot;Документ &amp;quot;+aEl+&amp;quot; невозможно обработать, причина: &amp;quot;+PopError(6),&amp;quot;!&amp;quot;);//SuppressException() подавит исключение, поэтому, мы можем удалить информацию о нем из стека исключений&lt;br /&gt;
    SuppressException();&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Подавить созданное исключение, Finally работает здесь частично, как Except&lt;br /&gt;
    Фл:=1;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Флаг того, что исключение произошло&lt;br /&gt;
  EndIf;&lt;br /&gt;
  aEl.Unlock();&lt;br /&gt;
EndTry;&lt;br /&gt;
If Фл Then&lt;br /&gt;
  ...&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Блок инструкций, исполняемый, если документ невозможно было обработать&lt;br /&gt;
EndIf;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Синтетический пример, показывающий, что блок инструкций ''Finally'' выполняется даже при использовании прерывания исполнения или команды выхода.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
For i:=1 to 10 Do&lt;br /&gt;
  Try&lt;br /&gt;
    If i&amp;gt;7 Then&lt;br /&gt;
      Exit;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Для значения счетчика 8 будет произведен выход из цикла, цикл для значений 9 и 10 продолжен не будет&lt;br /&gt;
    ElseIf i&amp;gt;3 Then&lt;br /&gt;
      Continue;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Для значений счетчика 4,5,6,7 тело цикла будет пропущено&lt;br /&gt;
    EndIf;&lt;br /&gt;
&lt;br /&gt;
    Message(&amp;quot;Тело цикла, счетчик=&amp;quot;+i);&lt;br /&gt;
&lt;br /&gt;
  Finally&lt;br /&gt;
    Message(&amp;quot;Блок обяз. исполнения, счетчик=&amp;quot;+i);&lt;br /&gt;
  EndTry;&lt;br /&gt;
EndDo;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Результатом исполнения будет вывод (обратите внимание, что несмотря на конструкции ''Continue'' и ''Exit'', блок ''Finally'' все равно выполняется, при значении счетчика 8 цикл будет окончен):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Тело цикла, счетчик=1&lt;br /&gt;
Блок обяз. исполнения, счетчик=1&lt;br /&gt;
Тело цикла, счетчик=2&lt;br /&gt;
Блок обяз. исполнения, счетчик=2&lt;br /&gt;
Тело цикла, счетчик=3&lt;br /&gt;
Блок обяз. исполнения, счетчик=3&lt;br /&gt;
Блок обяз. исполнения, счетчик=4&lt;br /&gt;
Блок обяз. исполнения, счетчик=5&lt;br /&gt;
Блок обяз. исполнения, счетчик=6&lt;br /&gt;
Блок обяз. исполнения, счетчик=7&lt;br /&gt;
Блок обяз. исполнения, счетчик=8&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Конструкция создания исключения ====&lt;br /&gt;
::&amp;lt;code&amp;gt;Raise [&amp;lt;выражение&amp;gt;];&amp;lt;/code&amp;gt;&lt;br /&gt;
Конструкция позволяет создать пользовательское исключение с описанием '''&amp;lt;выражение&amp;gt;'''. Поведение созданного исключения будет аналогичным обычному исключению. Общая информация об исключении будет представлена строкой '''&amp;quot;User defined error&amp;quot;''' (см. описание функции '''[[PopError]]'''). Иногда необходимо создать исключение, чтобы прервать выполнение после получения для этого веского основания. К примеру, если запись документа подразумевает обработку нескольких подчиненных документов и обработать их не удалось из-за того, что один из них был заблокирован другим пользователем, можно создать исключение, чтобы гарантированно прервать исполнение, как будто оно произошло на программном уровне при записи (см. пример). ''Raise'' также можно использовать, чтобы создать исключение заново внутри блока '''Except''' (к примеру: &amp;lt;Code&amp;gt;Raise PopError();&amp;lt;/Code&amp;gt;).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Мы находимся в функции OnSave, которая вызывается при записи документа (aEl), процедура должна осуществить вызов aEl.Save(); самостоятельно&lt;br /&gt;
//aList -- список документов, которые необходимо обработать при записи текущего (aEl)&lt;br /&gt;
Try&lt;br /&gt;
  СтрОш:=&amp;quot;&amp;quot;;&lt;br /&gt;
  For i:=1 To aList.Size() Do&lt;br /&gt;
    зДок:=aList.Get(i);&lt;br /&gt;
    аПольз:=&amp;quot;&amp;quot;;аМаш:=&amp;quot;&amp;quot;;аВремя:=&amp;quot;&amp;quot;;&lt;br /&gt;
    If зДок.Lock(аПольз,аМаш,аВремя)=0 Then&lt;br /&gt;
      СтрОш:=&amp;quot;Невозможно заблокировать документ &amp;quot;+зДок+&amp;quot;, так как в данный момент с ним работает пользователь &amp;quot;+аПольз+&amp;quot; на &amp;quot;+аМаш+&amp;quot; в &amp;quot;+аВремя+&amp;quot;!&amp;quot;,&amp;quot;!&amp;quot;);&lt;br /&gt;
      Break;&lt;br /&gt;
    EndIf;&lt;br /&gt;
  EndDo;&lt;br /&gt;
  If СтрОш&amp;lt;&amp;gt;&amp;quot;&amp;quot; Then&lt;br /&gt;
    Raise СтрОш;&lt;br /&gt;
  EndIf;&lt;br /&gt;
  ...&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Обработка заблокированных документов (блок опущен для читабельности)&lt;br /&gt;
  aEl.Save();&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Вызов этой функции также может создать исключение, поэтому предыдущий Raise будет обработан таким же образом, &lt;br /&gt;
&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//как было бы обработано такое исключение&lt;br /&gt;
Finally&lt;br /&gt;
  aList.MassUnlock();&lt;br /&gt;
EndTry;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Конструкция объявления функции ====&lt;br /&gt;
::&amp;lt;code&amp;gt;Function &amp;lt;имя&amp;gt;([[&amp;lt;способ адресации&amp;gt; ]&amp;lt;имя аргумента&amp;gt;[=&amp;lt;выражение&amp;gt;][,..]]) [Export] {Forward,&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;code&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;логический блок&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
::&amp;lt;code&amp;gt;EndFunction};&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Конструкция позволяет определить функцию с именем &amp;lt;имя&amp;gt; и заданным количеством аргументов, а также закрепляет за ней логический блок инструкций. В этом блоке инструкций допускается определения вложенных функций, таким образом создается иерархия функций с разным уровнем вложения. В некоторых случаях вложенные функции позволяют упростить написание программы и сделать ее более читабельной и понятной.&amp;lt;/p&amp;gt;&lt;br /&gt;
Имя функции не зависит от регистра написания, при его написании могут быть использованы международные символы (к примеру ''関数''), но должно подчиняться следующим правилам: &lt;br /&gt;
* не должно совпадать с именем другой функции, находящейся на том же уровне вложенности в блоке инструкций одной функции или одного модуля, либо функции, имеющей префикс '''Export''', находящейся на верхних уровнях вложенности.&lt;br /&gt;
* не должно совпадать с именем переменной, если она была задана до определения функции на том же самом уровне вложенности в блоке инструкций одной функции или одного модуля, либо переменной, имеющей префикс '''Export''', находящейся на верхних уровнях вложенности.&lt;br /&gt;
* не должно совпадать с определениями, используемыми в особых конструкциях (к примеру, запрещено создавать функции с именем '''To''' или '''Function''') и вычисляемых выражениях (к примеру, '''And''').&lt;br /&gt;
* не должно содержать нелитерных и нецифровых знаков. Знаки, которые могут быть использованы в имени функций: &amp;quot;0&amp;quot;..&amp;quot;9&amp;quot;, &amp;quot;?&amp;quot;, &amp;quot;A&amp;quot;..&amp;quot;Z&amp;quot;, &amp;quot;_&amp;quot;, &amp;quot;a&amp;quot;..&amp;quot;z&amp;quot;, все символы с кодами &amp;gt;=128.&lt;br /&gt;
===== Аргументы функции =====&lt;br /&gt;
&amp;lt;p&amp;gt;Функция может иметь неограниченное количество аргументов. Свойствами каждого из аргументов являются его имя, способ его адресации и наличие выражения по умолчанию. Имена аргументов подчиняются таким же правилам, как и имена функций. В момент исполнения блока инструкций функции каждый из аргументов может быть адресован по имени, как обычная переменная. Имена аргументов попадают в стек имен последними, при исполнении функции, поэтому, если какое-то имя совпадает с именем переменной с префиксом '''Export''', более высокого уровня вложенности, при обращение к имени будет использован аргумент, а не указанная переменная. Во время вызова функции, аргументы автоматически получают префикс '''Export''', поэтому к ним можно обращаться в функциях более низкого уровня вложенности. При этом, нужно учитывать, что аргументы функции более высокого уровня вложенности будут доступны только в функциях, вложенных в нее. К примеру, функция, вызванная из глобального модуля системы, не сможет получить доступ к аргументам, вызывающей функции, находящейся в другом модуле.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Способ адресации аргумента определяет возможность изменения внешней переменной или метода объекта из тела самой функции. Существует два способа адресации аргументов: &lt;br /&gt;
* '''ByVal''', используемый по умолчанию, когда при изменении аргументов внутри функции, внешние переменные не будут изменены (однако, нужно учесть, что, если переменная содержит объект, то аргумент будет содержать тот же самый объект и изменения, производимые в объекте при его адресации с помощью аргумента, будут также видны при его адресации с помощью внешней переменной, пример см. ниже).&lt;br /&gt;
* '''ByRef''', при задании адресации таким способом, после окончания выполнения функции, переменная, использовавшаяся при вызове функции, будет обновлена значением аргумента. Важно понимать, что обновление значения переменных не происходит при каждом изменении аргумента, а только один раз после окончания выполнения функции (пример см. ниже)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;При определении аргумента можно также использовать дополнительное выражение, называемое выражением по умолчанию. Если выражение по умолчанию определено, аргумент считается необязательным, его указание при вызове функции не требуется, к примеру для функции &amp;lt;code&amp;gt;Func&amp;lt;/code&amp;gt; с аргументами &amp;lt;code&amp;gt;Func(a,b=1,c=2)&amp;lt;/code&amp;gt; аргументы b и с можно опустить, при пропуске только переменной ''b'', можно осуществить вызов функции в виде, к примеру, &amp;lt;code&amp;gt;Func(1,,3)&amp;lt;/code&amp;gt;, при пропуске только переменной ''c'', функцию можно вызвать, к примеру, &amp;lt;code&amp;gt;Func(1,2)&amp;lt;/code&amp;gt;, при пропуске же обоих аргументов функцию можно вызвать просто как &amp;lt;code&amp;gt;Func(2)&amp;lt;/code&amp;gt;. Выражение, указываемое при определении аргумента, будет использоваться для его инициализации при вызове функции без указания аргумента. Выражения могут быть как простыми константами, так как сложными выражениями с использованием математических, логических функций и даже вызовов других функций объявленных в тексте программы. В случаях сложных выражений их вычисление происходит в момент вызова функции при помещении аргументов в стек переменных до исполнения блока инструкций самой функции.&amp;lt;/p&amp;gt;&lt;br /&gt;
Синтетический пример, показывающий инициализацию и работу с функциями, содержащими разные типы аргументов:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var ПерА export, ПерА2 export;&lt;br /&gt;
&lt;br /&gt;
Function Функ1(ByRef ПерА,ByRef ПерБ=Sin(ПерА),ПерВ)&lt;br /&gt;
&lt;br /&gt;
  Function Функ2()&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Вложенная функция без аргументов&lt;br /&gt;
    ПерА:=1;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Здесь адресуется аргумент Функ1, а не внешняя переменная ПерА, заданная в начале текста&lt;br /&gt;
    ПерА2:=2;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Здесь адресуется внешняя переменная ПерА2, заданная с постфиксом Export&lt;br /&gt;
    ПерБ:=3;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Адресуется аргумент Функ1&lt;br /&gt;
    ПерВ:=4;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Адресуется аргумент Функ1&lt;br /&gt;
  EndFunction&lt;br /&gt;
&lt;br /&gt;
  Message(&amp;quot;Вызов осуществлен с аргументами: &amp;quot;+ПерА+&amp;quot;, &amp;quot;+ПерБ+&amp;quot;, &amp;quot;+ПерВ);&lt;br /&gt;
  Функ2();&lt;br /&gt;
EndFunction;&lt;br /&gt;
&lt;br /&gt;
ПерА:=1;&lt;br /&gt;
Функ1(0,0,0);&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Произойдет вывод &amp;quot;Вызов осуществлен с аргументами: 0, 0, 0&amp;quot;&lt;br /&gt;
Message(ПерА);&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Будет выведено число 1 (функция не изменяла эту переменную)&lt;br /&gt;
Message(ПерА2);&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Будет выведено число 2 (функция изменила эту переменную)&lt;br /&gt;
Пер1:=0;Пер2:=0;Пер3:=0;&lt;br /&gt;
Функ1(Пер1,Пер2,Пер3);&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Произойдет вывод &amp;quot;Вызов осуществлен с аргументами: 0, 0, 0&amp;quot;&lt;br /&gt;
Message(Пер1);&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Будет выведено число 1 (функция изменила эту переменную, при изменении аргумента)&lt;br /&gt;
Message(Пер2);&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Будет выведено число 3 (функция изменила эту переменную, при изменении аргумента)&lt;br /&gt;
Message(Пер3);&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Будет выведено число 0 (способ адресации аргумента не позволил транслировать его изменение на внешнюю переменную)&lt;br /&gt;
Функ1(1,,2);&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Произойдет вывод &amp;quot;Вызов осуществлен с аргументами: 1, 0.841470984807896508, 2&amp;quot;&lt;br /&gt;
//Замечание: аргумент ПерБ был инициализирован значением по умолчанию Sin(ПерА) (т.е. Sin(1))&lt;br /&gt;
&lt;br /&gt;
aTab:=Tab.Create(&amp;quot;Имя,Значение&amp;quot;);&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Создание таблицы со столбцами &amp;quot;Имя&amp;quot; и &amp;quot;Значение&amp;quot;&lt;br /&gt;
aTab.AddLine(&amp;quot;Имя,Значение&amp;quot;,&amp;quot;Первый&amp;quot;,0);&lt;br /&gt;
Пер2:=0;&lt;br /&gt;
Функ1(aTab.Значение,(Пер2),0);&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Произойдет вывод &amp;quot;Вызов осуществлен с аргументами: 0, 0, 0&amp;quot;&lt;br /&gt;
Message(Пер2);&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Будет выведено число 0, так аргументом вызова функции была не переменная, а выражение &amp;quot;(Пер2)&amp;quot;&lt;br /&gt;
Message(aTab.Значение);&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Будет выведено число 0&lt;br /&gt;
//Изменения внутри функции транслируются только на переменные, но не на свойства объектов, так как это может создавать скрытые ошибки, которые тяжело будет найти:&lt;br /&gt;
//  Изменение свойства, это не всегда просто сохранение значения, в случае с объектами базы данных это может быть нежелательно&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Результат функции =====&lt;br /&gt;
При вызове любой функции, после создания и заполнения ее аргументов, создается также особая переменная '''Result''', заполняемая пустым значением. Эта переменная будет возвращена как результат функции, однако, ее поведение соответствует поведению обычной переменной, ее можно изменять и использовать ее значение в любых выражениях. Если в результате выполнения функции нет необходимости, нет смысла использовать эту переменную. Значение этой переменной можно также изменить при использовании конструкции выхода '''Exit''', если у конструкции указан первый аргумент, он будет вычислен, и полученное значение будет помещено в переменную '''Result'''. Так как ''Result'' создается при вызове любой функции, у вложенной функции нет возможности обратиться напрямую к результату функции более высокого порядка вложенности. Пример использования '''Result''' см. ниже:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Function Функ1(ПерА)&lt;br /&gt;
  Result:=0;&lt;br /&gt;
  If ПерА&amp;gt;1 Then&lt;br /&gt;
    Result:=ПерА*2;&lt;br /&gt;
  ElseIf ПерА&amp;lt;0 Then&lt;br /&gt;
    Exit _Pi();&lt;br /&gt;
  EndIf;&lt;br /&gt;
EndFunction;&lt;br /&gt;
&lt;br /&gt;
Message(Функ1(-2));&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Возвращает 3.14159265358979325&lt;br /&gt;
Message(Функ1(2));&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Возвращает 4&lt;br /&gt;
Message(Функ1(1));&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Возвращает 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Вложенность функций и модулей, уровни вложенности =====&lt;br /&gt;
&amp;lt;p&amp;gt;При создании нового потока, после его вызова (к примеру, с помощью '''[[LoadModule]]'''), счетчик вложенности циклов обнуляется, а счетчик вложенности функций приравнивается единице (см. выше, к примеру, конструкции ''Break'' и ''Exit''). Поэтому конструкция ''Exit'' не сможет завершить исполнение программ в предыдущем модуле, а конструкции ''Break'' и ''Continue'' не смогут передать управление программе, находящейся в другом модуле, даже если поток создавался из тела цикла. При вызове функции, счетчик вложенности циклов также обнуляется и, после возврата из функции, восстанавливается его предыдущее значение. Защита подобного рода помогает исключить ошибки, нахождение которых было бы затруднительно.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;При объявлении функции в блоке исполнения другой функции, такая функция называется вложенной. В данной документации понятие ''функция более низкого уровня вложенности'' означает функцию, вложенную внутрь текущей, а ''функция более высокого уровня вложенности'', функцию, в которую была вложена текущая. Вложенные функции имеют доступ к локальным переменным и своим аргументам, к аргументам функций в которые они были вложены, а также к переменным и функциям более высокого уровня вложенности, если они определены с постфиксом '''Export''' (см. аргументы функции).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Следует понимать различие между термином уровни вложенности применительно к исходным текстам программы и к вызову функций из блоков инструкций других функций в процессе исполнения. В последнем случае, функция, к примеру, может вызывать сама себя определенное количество раз, создавая рекурсию. Правила доступности и адресуемости переменных и других функций, однако, применимы для процесса исполнения таким же образом, как и для процесса компиляции.&amp;lt;/p&amp;gt;&lt;br /&gt;
Ниже даны правила доступности переменных, аргументов и имен функций:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #e0e0e0&amp;quot;&lt;br /&gt;
|rowspan=2 width=55% |'''Положение проверяемой функции (или модуля)''' &lt;br /&gt;
|colspan=3 |'''Доступность из блока инструкций исполняемой'''&lt;br /&gt;
|- style=&amp;quot;background: #e0e0e0&amp;quot;&lt;br /&gt;
|width=15% |'''Аргументы'''&lt;br /&gt;
|width=15% |'''Переменные'''&lt;br /&gt;
|width=15% |'''Вложенные функции'''&lt;br /&gt;
|-&lt;br /&gt;
|Проверяемая функция вложена в исполняемую (с любым уровнем вложенности)&lt;br /&gt;
|Нет&lt;br /&gt;
|Нет&lt;br /&gt;
|Нет&lt;br /&gt;
|-&lt;br /&gt;
|Проверяемая функция является исполняемой&lt;br /&gt;
|Да&lt;br /&gt;
|Да&lt;br /&gt;
|Да&lt;br /&gt;
|-&lt;br /&gt;
|Исполняемая функция вложена в проверяемую (с любым уровнем вложенности).&lt;br /&gt;
|Да&lt;br /&gt;
|С постфиксом ''Export''&lt;br /&gt;
|На том же уровне вложенности, что и исполняемая, объявлены до исполняемой&lt;br /&gt;
|-&lt;br /&gt;
|Исполняемая функция вложена в функцию (с любым уровнем вложенности), в которую также вложена проверяемая (с любым уровнем вложенности). Исполняемая функция, однако, не вложена в проверяемую (с любым уровнем вложенности). См. пример ниже.&lt;br /&gt;
|Нет&lt;br /&gt;
|Нет&lt;br /&gt;
|Нет&lt;br /&gt;
|-&lt;br /&gt;
|Исполняемая функция вложена непосредственно в проверяемый модуль.&lt;br /&gt;
|Да&lt;br /&gt;
|С постфиксом ''Export''&lt;br /&gt;
|Объявлены до исполняемой, верхний уровень вложенности&lt;br /&gt;
|-&lt;br /&gt;
|Исполняемая функция вложена в модуль, который был вызван из проверяемого (с любым уровнем вложенности).&lt;br /&gt;
|Нет&lt;br /&gt;
|С постфиксом ''Export''&lt;br /&gt;
|С постфиксом ''Export'', верхний уровень вложенности&lt;br /&gt;
|-&lt;br /&gt;
|Проверяемый модуль является глобальным.&lt;br /&gt;
|Недоступно&lt;br /&gt;
|С постфиксом ''Export''&lt;br /&gt;
|С постфиксом ''Export'', верхний уровень вложенности&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Пример для случая №4:&lt;br /&gt;
Function ВерхнийУровень()&lt;br /&gt;
  Function Проверяемая(АргументыПр)&lt;br /&gt;
    Var ПеременныеПр Export;&lt;br /&gt;
    Function ПроверяемаяПр() Export&lt;br /&gt;
    EndFunction;&lt;br /&gt;
  EndFunction;&lt;br /&gt;
&lt;br /&gt;
  Function Исполняемая()&lt;br /&gt;
    //АргументыПр, ПеременныеПр и функция ПроверяемаяПр() не будут доступны из этого исполняемого блока&lt;br /&gt;
  EndFunction;&lt;br /&gt;
EndFunction;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Объявление заголовков функций =====&lt;br /&gt;
Иногда в процессе написания программы из определенной функции требуется вызвать функцию, которая была описана ниже по тексту, это может происходить, при создании сложной рекурсивной конструкции, либо, чтобы избежать переносов функций внутри модуля, особенно, когда они уже сгруппированы по определенному принципу. С точки зрения исполнения, такой вызов не должен представлять проблему, так как к началу исполнения все функции в модуле определены и известны системе. Однако, что касается компиляции программных текстов, возникает проблема того, что в момент вызова, компилятор еще не знает о существовании (определении) вызываемой функции, что вызовет ошибку компиляции (такой подход позволяет также избежать определенных ошибок при написании программ). Выходом из положения, в данном случае, является возможность объявления заголовка функции заранее без ее блока описания, после чего, в нужном месте модуля, функция будет описана полностью. При объявлении заголовка функции, после перечисления ее аргументов и возможного префикса '''Export''' следует зарезервированное слово '''Forward''', после чего объявление заголовка заканчивается. Сама функция, объявленная &amp;quot;в кредит&amp;quot; таким образом, должна присутствовать позже в том же самом модуле, иначе система вернет ошибку при компиляции. Пример использования '''Forward''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Кусок кода, показывающий необходимость в сложной рекурсии. Элементы разных справочников ищутся по внешнему коду стрКод, в справочнике &amp;quot;СопоставленныеЭлементы&amp;quot;&lt;br /&gt;
//Функция ВыбратьЭлемент должна дать возможность пользователю визуально выбрать нужный элемент с учетом возможных родителей (см. описание справочников БД)&lt;br /&gt;
&lt;br /&gt;
//Здесь описывает только заголовок рекурсивной функции&lt;br /&gt;
Function НайтиРодителя(ВидСпр,Префикс,стрКод,БезВыбора=0) Forward;&lt;br /&gt;
&lt;br /&gt;
//Функция визуально выбирает элемент справочника ВидСпр, который и отдается, как результат&lt;br /&gt;
//  Если пользователь не выбрал элемент, функция возвращает 0.&lt;br /&gt;
//стрКод -- код в промежуточном справочнике сопоставления &amp;quot;СопоставленныеЭлементы&amp;quot;, имеет вид &amp;quot;&amp;lt;КодЭлемента&amp;gt;@&amp;lt;ВидРодителя&amp;gt;#&amp;lt;КодРодителяЭлемента&amp;gt;@&amp;lt;ВидРодителяРодителя&amp;gt;#&amp;lt;КодРодителяРодителяЭлемента&amp;gt;...&amp;quot;&lt;br /&gt;
Function ВыбратьЭлемент(ВидСпр,стрКод)&lt;br /&gt;
  аРод:=0;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Элемент родителя, если он необходим&lt;br /&gt;
  if Struct.Ref(ВидСпр).Parents.Count()&amp;gt;0 Then&lt;br /&gt;
    //Справочник имеет родителей, необходимо сначала осуществить выбор родителя&lt;br /&gt;
    аРод:=НайтиРодителя(ВидСпр,стрКод);&lt;br /&gt;
    If аРод=0 Then&lt;br /&gt;
      Exit 0;&lt;br /&gt;
    EndIf;    &lt;br /&gt;
  EndIf;&lt;br /&gt;
&lt;br /&gt;
  //Вызываем функцию визуального выбора и отдаем ей в первом параметре найденного родителя или 0, если родитель не требуется&lt;br /&gt;
  аЭл:=SelectObject(&amp;quot;Ref.&amp;quot;+ВидСпр,аРод,0,&amp;quot;Module&amp;quot;,&amp;quot;SelectForm&amp;quot;,,,&amp;quot;Выберите требуемый элемент справочника:&amp;quot;,0);&lt;br /&gt;
  Exit ?(not isEmpty(аЭл),аЭл,0);&lt;br /&gt;
EndFunction&lt;br /&gt;
&lt;br /&gt;
Function НайтиРодителя(ВидСпр,стрКод,БезВыбора=0)&lt;br /&gt;
  аЭл:=Ref.СопоставленныеЭлементы;&amp;amp;#9;//Создаем объект элемента справочника СопоставленныеЭлементы&lt;br /&gt;
  TearStr(стрКод,&amp;quot;@&amp;quot;);&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Удаляем код текущего элемента, оставляем внешний код родителя и его вид&lt;br /&gt;
  ВидРод:=TearStr(стрКод,&amp;quot;#&amp;quot;);&amp;amp;#9;&amp;amp;#9;//Находим вид родителя и оставляем только внешний код элемента-родителя&lt;br /&gt;
  If аЭл.Find(&amp;quot;ВидСправочника,ВнешнийКод&amp;quot;,ВидРод,стрКод) Then&lt;br /&gt;
    Exit аЭл.Элемент;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Родитель уже сопоставлен, нет необходимости выбирать что-то визуально&lt;br /&gt;
  ElseIf БезВыбора Then&lt;br /&gt;
    Exit 0;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Родитель не сопоставлен, но визуальный выбор запрещен&lt;br /&gt;
  EndIf;&lt;br /&gt;
  бЭл:=ВыбратьЭлемент(ВидРод,стрКод);&amp;amp;#9;//Вызываем ВыбратьЭлемент уже для родителя&lt;br /&gt;
  Exit бЭл;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Если оператор отказался от выбора возвратится 0, иначе выбранный элемент  &lt;br /&gt;
EndFunction&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Другая функция ниже по модулю, подбирающая возможные варианты выбора&lt;br /&gt;
Function ПодобратьВарианты(ВидСпр,Эл)&lt;br /&gt;
  СпВар:=List.Create();&lt;br /&gt;
  ...&lt;br /&gt;
  If ВидСпр=&amp;quot;ПартииНоменклатуры&amp;quot; Then&lt;br /&gt;
    аЭл:=НайтиРодителя(ВидСпр,Trim(Эл.ВнешнийКод),1);&lt;br /&gt;
    If аЭл=0 Then&lt;br /&gt;
      Exit СпВар;&lt;br /&gt;
    EndIf;&lt;br /&gt;
    ...&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Заполняется СпВар с учетом выбранного родителя&lt;br /&gt;
  EndIf;&lt;br /&gt;
  ...&lt;br /&gt;
EndFunction&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Использование синтаксиса массивов для доступа к значениям объектов ====&lt;br /&gt;
Система не имеет выделенной структуры массивов, так как существуют объекты (списки, таблицы, деревья), которые в полной мере могут заменить подобную структуру. Однако, доступ к элементам массивов с помощью квадратных скобок хорошо понятен, читабелен и может упростить код программы. Система использует подобный доступ к значениям избранных объектов, как будто доступ производится к элементам массивов. Так же, как и с обычными массивами, доступны как чтение, так и запись, вложенность индексов и текстовые индексы для определенных объектов. Получение значения с помощью синтаксиса массива выполняется в следующем виде: &amp;lt;code&amp;gt;&amp;lt;Объект&amp;gt;[&amp;lt;Индекс 1&amp;gt;,...]&amp;lt;/code&amp;gt;, конструкцию вызова массива можно повторять сколько угодно раз (пример, &amp;lt;code&amp;gt;aObj[1,2][&amp;quot;foo&amp;quot;,1]&amp;lt;/code&amp;gt;), изменение значения можно выполнить с помощью команды: &amp;lt;code&amp;gt;&amp;lt;Объект&amp;gt;[&amp;lt;Индекс 1&amp;gt;,...]:=&amp;lt;Значение&amp;gt;&amp;lt;/code&amp;gt;. Если с помощью первого индекса в массиве программа получает элемент из списка значений по его индексу или наименованию, второй и последующий индексы массива будут применены к полученному элементу (и, если этот элемент не является подходящим объектом, к которому можно применить синтаксис массива, будет вызвано исключение). На данный момент синтаксис массивов применим к следующим объектам системы:&lt;br /&gt;
* Для '''строковых значений''' (переменная, содержащая [[Строки|строку]] в ANSI или UTF-16 кодировках) используется один индекс, указывающий на определенный символ строки. Нумерация символов начинается с единицы. Операция получения символа, аналогична выполнению функции [[Mid]]. При изменении символа, кроме строкового значения, можно также указывать числовое значение, оно будет использовано как код присваиваемого символа, это немного быстрее и может использоваться в случае, когда строка хранит бинарные данные.&lt;br /&gt;
* '''Список значений''' (List) использует один индекс массива, который может быть текстовым (в этом случае, выполняется операция аналогичная вызовам функций [[List.GetByName|GetByName]] или [[List.SetByName|SetByName]]), либо числовым (в этом случае, выполняется операция аналогичная вызовам функций [[List.Get|Get]] или [[List.Set|Set]]). &lt;br /&gt;
* '''Таблица значений''' (Tab) использует один или два индекса массива. Если задан всего один индекс массива, он используется как индекс или наименование столбца для получения или изменения значения ячейки таблицы в ее текущей строке (операции &amp;lt;code&amp;gt;&amp;lt;Таблица&amp;gt;.&amp;lt;Имя столбца&amp;gt;&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;&amp;lt;Таблица&amp;gt;.Get(,&amp;lt;Индекс столбца&amp;gt;)&amp;lt;/code&amp;gt;). Если задано более одного индекса массива, первый из индексов используется для указания на столбец таблицы, второй на ее строку (второй индекс может быть только числовым), т.е. выполняется операции &amp;lt;code&amp;gt;&amp;lt;Таблица&amp;gt;.Get(&amp;lt;Индекс 2&amp;gt;,&amp;lt;Индекс 1&amp;gt;)&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;&amp;lt;Таблица&amp;gt;.Set(&amp;lt;Индекс 2&amp;gt;,&amp;lt;Индекс 1&amp;gt;,&amp;lt;Значение&amp;gt;)&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''Дерево значений''' (Tree) использует один или более индексов массива, индекс может быть текстовым (в этом случае, выполняется операция аналогичная вызовам функций [[Tree.GetByName|GetByName]] или [[Tree.SetByName|SetByName]]), либо числовым (в этом случае, выполняется операция аналогичная вызовам функций [[Tree.Get|Get]] или [[Tree.Set|Set]]). Если даны несколько индексов, все операции, кроме последней, получают не значение, а ветку (т.е., для промежуточных индексов используются операции, аналогичные функциям [[Tree.ByIndex|ByIndex]] или [[Tree.FindByName|FindByName]]).&lt;br /&gt;
* '''Текст''' (Text) использует один числовой индекс массива, который указывает на номер строки объекта текста (то есть, выполняется операция аналогичная вызовам функций [[Text.GetLine|GetLine]] или [[Text.SetString|SetString]]).&lt;br /&gt;
* '''Буфер''' (Buffer) использует один или два индекса массива. Первый индекс массива используется как позиция в буфере (первый байт буфера адресуется с нуля), второй аргумент массива, если указан, задает величину данных (доступны значения 1 (по умолчанию, байт без знака), 2 (слово без знака), 4 (двойное слово без знака), 8 или -8 (64-битное числовое значение со знаком), -1 (байт со знаком), -2 (слово со знаком), -4 (двойное слово со знаком)). &lt;br /&gt;
* '''Запись данных''' (MemoryRecord) использует индекс массива для доступа к полям, являющимся массивами. Индексирование начинается с нуля.&lt;br /&gt;
&lt;br /&gt;
Скорость доступа к значениям объектов с помощью синтаксиса массивов обычно не отличается от скорости доступа с помощью обычных функций. Однако, если для доступа используется несколько индексов, адресующих разные объекты, массивы будут работать несколько быстрее.&lt;br /&gt;
&lt;br /&gt;
==== Магические функции ====&lt;br /&gt;
Магическими называются функции, нестандартная работа с аргументами которых, не позволяет создать их обычными средствами языка. Для обычных функций каждый из аргументов вычисляется до того, как будет произведено обращение к функции, тогда как магические функции работают как конструкции языка с блоками инструкций, и вычисления аргументов производятся только когда это необходимо. В отличие от конструкций языка, однако, магические функции не могут представлять самостоятельные инструкции или содержать блоки инструкций, а используются только в выражениях и могут содержать только выражения в своих аргументах. Кроме описанных здесь магических функций, существуют и другие (к примеру, [[Coalesce]], [[InSet]], [[InRange]], [[If2|??]] и т.д.), они помечены как магические в описании и в списке функций.&lt;br /&gt;
&lt;br /&gt;
===== Магическая функция логическое &amp;quot;и&amp;quot; =====&lt;br /&gt;
::&amp;lt;code&amp;gt;_And(&amp;lt;выражение&amp;gt;[,&amp;lt;выражение&amp;gt;[,...]])&amp;lt;/code&amp;gt;&lt;br /&gt;
Функция возвращает результат логической конъюнкции своих аргументов. Вычисление аргументов останавливается, после того как встретится первый аргумент возвративший &amp;quot;ложь&amp;quot;. В отличие от конструкции &amp;lt;code&amp;gt;(&amp;lt;выражение&amp;gt;)And(&amp;lt;выражение&amp;gt;)And...&amp;lt;/code&amp;gt;, для которой всегда выполняются все выражения, так как она может являться как логической, так и математической, '''_And''' прекращает исполнение аргументов, как только встречается &amp;quot;ложь&amp;quot;, это позволяет как оптимизировать по скорости условия конструкций типа '''If''', так и пройти каскадное условие доступности, для которого необходимо бы было использовать несколько вложенных функций '''If''', чтобы избежать исключения. Пример разницы между '''And''' и '''_And''' см. ниже:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Function ВывестиАргумент(Арг)&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Функция возвращает переданный ей аргумент и выводит его в лог&lt;br /&gt;
  Message(Арг);&lt;br /&gt;
  Exit Арг;&lt;br /&gt;
EndFunction&lt;br /&gt;
&lt;br /&gt;
//В лог будет выведено 1, 2 и 3. &amp;quot;Проверка пройдена!&amp;quot; выведена не будет. &lt;br /&gt;
If (ВывестиАргумент(1)&amp;lt;2)And(ВывестиАргумент(2)&amp;lt;2)And(ВывестиАргумент(3)&amp;lt;2) Then&lt;br /&gt;
  Message(&amp;quot;Проверка пройдена!&amp;quot;);&lt;br /&gt;
EndIf;&lt;br /&gt;
&lt;br /&gt;
//В лог будет выведено 1, 2. &amp;quot;Проверка пройдена!&amp;quot; выведена не будет. Функция ВывестиАргумент(3) не была вызвана&lt;br /&gt;
If _And(ВывестиАргумент(1)&amp;lt;2,ВывестиАргумент(2)&amp;lt;2,ВывестиАргумент(3)&amp;lt;2) Then&lt;br /&gt;
  Message(&amp;quot;Проверка пройдена!&amp;quot;);&lt;br /&gt;
EndIf;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
//аОбъект -- переменная, содержащая объект неопределенного вида или строковое выражение&lt;br /&gt;
//Нам необходимо проверить, является ли объект элементом справочника &amp;quot;Номенклатура&amp;quot; и, если его реквизит Тип равен единице, вывести в лог его код (реквизит Code)&lt;br /&gt;
аОбъект:=&amp;quot;Не объект&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//Конструкция каскадной проверки, основанная на _And, не вызовет исключений&lt;br /&gt;
If _And(not isEmpty(аОбъект),IsDBObject(аОбъект),аОбъект.DBName()=&amp;quot;Номенклатура&amp;quot;,аОбъект.Тип=1) Then&lt;br /&gt;
  Message(аОбъект.Code);&lt;br /&gt;
EndIf;&lt;br /&gt;
&lt;br /&gt;
//Конструкция с аналогичным использованием And вызовет исключение при вычислении выражения аОбъект.DBName(), так как аОбъект не является объектом&lt;br /&gt;
If (not isEmpty(аОбъект))And(IsDBObject(аОбъект))And(аОбъект.DBName()=&amp;quot;Номенклатура&amp;quot;)And(аОбъект.Тип=1) Then&lt;br /&gt;
  Message(аОбъект.Code);&lt;br /&gt;
EndIf;&lt;br /&gt;
&lt;br /&gt;
//Конструкция каскадной проверки, логически совпадающая с первой, однако не использующая _And, тоже не будет вызывать исключений.&lt;br /&gt;
//Данная конструкция, однако, выполняется медленнее чем первая и более сложна для понимания.&lt;br /&gt;
If (not isEmpty(аОбъект))And(IsDBObject(аОбъект)) Then&lt;br /&gt;
  If аОбъект.DBName()=&amp;quot;Номенклатура&amp;quot; Then&lt;br /&gt;
      If аОбъект.Тип=1 Then&lt;br /&gt;
        Message(аОбъект.Code);&lt;br /&gt;
      EndIf;&lt;br /&gt;
  EndIf;&lt;br /&gt;
EndIf;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Магическая функция логическое &amp;quot;или&amp;quot; =====&lt;br /&gt;
::&amp;lt;code&amp;gt;_Or(&amp;lt;выражение&amp;gt;[,&amp;lt;выражение&amp;gt;[,...]])&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция возвращает результат логической дизъюнкции своих аргументов. Вычисление аргументов останавливается, после того как встретится первый аргумент возвративший &amp;quot;правда&amp;quot;. В отличие от конструкции &amp;lt;code&amp;gt;(&amp;lt;выражение&amp;gt;)Or(&amp;lt;выражение&amp;gt;)Or...&amp;lt;/code&amp;gt;, для которой всегда выполняются все выражения, так как она может являться как логической, так и математической, '''_Or''' прекращает исполнение аргументов, как только встречается &amp;quot;правда&amp;quot;, это позволяет как оптимизировать по скорости условия конструкций типа '''If''', так и превратить несколько условий прерывания исполнения в одно. См. также пример функции '''_And'''.&lt;br /&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;
::&amp;lt;code&amp;gt;_If(&amp;lt;выражение&amp;gt;,&amp;lt;выражение если правда&amp;gt;[,&amp;lt;выражение если ложь&amp;gt;])&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
Функция вычисляет первый аргумент, и, если результатом является логическая &amp;quot;правда&amp;quot;, возвращает вычисленное выражение, следующее вторым аргументом, иначе возвращает вычисленное выражение, следующее третьим аргументом, если он указан или пустое значение, если третий аргумент не указан. Функция производит вычисление второго аргумента только в случае, если первый возвратил &amp;quot;правду&amp;quot;, иначе второй аргумент не будет вычислен. Тоже самое касается третьего аргумента. Функция может использоваться как для быстрой проверки типов, для того, чтобы избежать исключений, так и вместо более громоздких конструкций '''If'''. Позволяет не только уменьшить размер кода, улучшить его читаемость, но также ускорить его исполнение. Записи '''?''' и '''_If''' равнозначны. См. также пример функции '''_And'''.&lt;br /&gt;
&lt;br /&gt;
== Инструкция языка ==&lt;br /&gt;
Любая программа состоит из инструкций собираемых в блоки, использующиеся внутри функций или особых конструкций языка. Инструкции в одном блоке выполняются последовательно. Инструкции разделены между собой знаком ''';''' (точка с запятой) и могут быть двух типов:&lt;br /&gt;
# '''Инструкция исполнения'''. Инструкция представляет собой обращение к функции (функция не может быть магической), вычисляемые выражения могут быть только частью аргументов функции. Если функция возвращает какой-либо результат, он не будет использован. Общий вид инструкции: '''&amp;lt;ИмяФункции&amp;gt;'''{{Optional|(''&amp;lt;Аргумент 1&amp;gt;'',&amp;lt;Аргумент 2&amp;gt;,...)}};.&lt;br /&gt;
# '''Инструкция присваивания'''. Инструкция представляет собой вычисляемое выражение, значением которого обновляется значение переменной или свойства объекта. Между именем переменной и выражением используется знак присваивания ''':='''. Использование знака равенства ('''=''') в этом случае допускается, но не рекомендуется, так как это может ухудшить читаемость текста программы. Общий вид инструкции: '''&amp;lt;ИмяПеременнойИлиСвойства&amp;gt;''':='''&amp;lt;Выражение&amp;gt;''';. &lt;br /&gt;
Пример использования инструкций обоих типов:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Message(&amp;quot;12&amp;quot;);&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Инструкция исполнения выводит в лог программы значение &amp;quot;12&amp;quot;&lt;br /&gt;
a:=1;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Инструкция присваивания создает новую переменную a и присваивает ей значение 1&lt;br /&gt;
a:=Sin(a)*1.5-Cos(a/2)/_Pi*2;&amp;amp;#9;&amp;amp;#9;//Инструкция присваивания изменяет значение переменной a в соответствии с результатом вычисления выражения&lt;br /&gt;
a:=Message(&amp;quot;12&amp;quot;);&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Каждая функция возвращает результат, функция Message возвращает пустой результат, который присваивается переменной а.&lt;br /&gt;
&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Данная инструкция, в отличие от самой первой в этом блоке, уже является инструкцией присваивания, при этом, она по-прежнему выводит строку &amp;quot;12&amp;quot;&lt;br /&gt;
Message(&amp;quot;12&amp;quot;)+1;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Ошибочная инструкция, содержащая только выражение, компиляция будет остановлена&lt;br /&gt;
?(a=1,2,3);&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Ошибочная инструкция, магическая функция ? может использоваться только в выражениях, и не может быть самостоятельной инструкцией исполнения.&lt;br /&gt;
a:=?(a=1,2,3);&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Инструкция присваивания, с использованием магической функции в ее выражении не вызовет ошибки.&lt;br /&gt;
a:=a=1;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Инструкция присваивания, результат логического выражения a=1 (0 или 1) присваивается переменной а&lt;br /&gt;
&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Данная инструкция показывает, почему пара &amp;quot;:=&amp;quot; при присваивании предпочтительна простому знаку &amp;quot;=&amp;quot;&lt;br /&gt;
aTab.CurLine:=12;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Инструкция присваивания записывает 12 в свойство CurLine объекта, задаваемого переменной aTab (в данном примере объект типа таблица)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Вычисляемые выражения и старшинство операций при вычислении ==&lt;br /&gt;
&lt;br /&gt;
Вычисляемые выражения представляют собой математические или логические формулы с участием числовых, строковых или временных констант, заданных непосредственно в тексте программы, переменных, свойств объектов и функций, связанных между собой знаками или определениями операций и скобками. Простым примером вычисляемого выражения является математическое выражение (к примеру '''1+2'''). Математические знаки и определения операций в основном совпадают с операциями в других языках, общее количество используемых операций невелико (см. ниже). Выражения вычисляются всегда слева направо, даже с учетом приоритета операций и скобок. Функции, используемые в выражении, всегда будут вычислены последовательно без пропусков (см. пример ниже), однако правило может не работать для функций, использующихся в аргументах магических функций. Каждая операция имеет свой приоритет. Если внутри одного уровня скобок встречаются несколько последовательных операций, связывающих разные аргументы (операнды), результат вычисления выражения будет зависеть от приоритетности операций. Ниже дается список приоритетности и список возможных операций языка:&lt;br /&gt;
# '''(''', ''')''' -- скобки позволяют вычислять группы операций вместе, и являются самыми приоритетными знаками операций (хотя скобки это не операции в обычном смысле, они приведены в списке для полноты).&lt;br /&gt;
# '''NOT''' -- унарная логическая и математическая операция инвертирования&lt;br /&gt;
# '''SHL''', '''SHR''' -- бинарные операции математического сдвига&lt;br /&gt;
# '''AND''', '''OR''', '''XOR''' -- бинарные логические и математические операции ''и'', ''или'' и ''исключающего или''.&lt;br /&gt;
# '''*''', '''/''', '''\''', '''%''' ('''MOD''') -- бинарные математические операции ''умножения'', ''деления'', ''целочисленного деления'' и ''нахождения остатка от деления''&lt;br /&gt;
# '''+''', '''-''' -- бинарные математические операции ''сложения'' и ''вычитания'', а также унарные математические операции ''подтверждения знака'' и ''обращения знака''&lt;br /&gt;
# '''=''', '''&amp;lt;&amp;gt;''', '''&amp;lt;''', '''&amp;gt;''', '''&amp;lt;=''', '''&amp;gt;=''' -- бинарные логические операции ''равно'', ''не равно'', ''меньше'', ''больше'', ''меньше или равно'', ''больше или равно''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//В данном примере показано, что вне зависимости от приоритета, функции в вычисляемых выражениях всегда вычисляются последовательно.&lt;br /&gt;
Function Проверка(Аргумент)&lt;br /&gt;
  Message(Аргумент);&lt;br /&gt;
  Exit Аргумент;&lt;br /&gt;
EndFunction;&lt;br /&gt;
&lt;br /&gt;
a:=Проверка(1)+Проверка(2)*Проверка(3) shl Проверка(4);&lt;br /&gt;
//На экран будет выведена последовательность 1,2,3 и 4. С математической точки зрения, необходимо сначала вычислить выражение Проверка(3) shl Проверка(4), &lt;br /&gt;
//  потом результат умножить на Проверка(2) и сложить с Проверка(1).&lt;br /&gt;
&lt;br /&gt;
a:=((Проверка(1)=0)And(Проверка(2)=0)And(Проверка(3)=0))Or(Проверка(4)=0);&lt;br /&gt;
//На экран будет выведена последовательность 1,2,3 и 4. С логической точки зрения, достаточно произвести вычисление Проверка(1)=0, чтобы понять, что проверки Проверка(2)=0 и Проверка(3)=0&lt;br /&gt;
//  можно пропустить, получив значение &amp;quot;ложь&amp;quot;, после этого нужно будет вычислить значение Проверка(4)=0.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Логические выражения ====&lt;br /&gt;
Булева функция может принимать два значения &amp;quot;ложь&amp;quot; и &amp;quot;правда&amp;quot;. Любое логическое выражение оперирует и возвращает одно из двух возможных значений булевой функции. В системе, однако, нет выделенного булевого типа, вместо него используется обычный целочисленный тип. При логической проверке конструкциями '''If''', '''While''' и пр. или магическими функциями '''?''', '''_And''' и пр. и везде, где должен быть указан булевый аргумент, в системе используется целочисленный. Значение этого аргумента будет являться &amp;quot;правдой&amp;quot;, если его младший бит установлен, и &amp;quot;ложью&amp;quot;, если его младший бит сброшен. В таком представлении любые целочисленные логические функции, типа '''And''', '''Or''', '''Xor''' будут также работать с логическими аргументами, надобность в дополнительном типе данных пропадает, программирование системы упрощается. Ниже даны несколько примеров работы с логическими функциями в системе:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
If 1 Then&lt;br /&gt;
  Message(&amp;quot;Этот текст всегда будет выведен, так как 1 соответствует логическому значению 'правда'&amp;quot;);&lt;br /&gt;
EndIf;&lt;br /&gt;
&lt;br /&gt;
Message(1&amp;gt;2);&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Выводит число 0 (&amp;quot;ложь&amp;quot;)&lt;br /&gt;
Message(3&amp;gt;=2);&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//Выводит число 1 (&amp;quot;правда&amp;quot;)&lt;br /&gt;
Message((Sin(1))Or(2)Or(2&amp;gt;1));&amp;amp;#9;&amp;amp;#9;//Бессмысленное выражение, смешивающее вещественные числа, целочисленную логику и булеву логику, &lt;br /&gt;
&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;&amp;amp;#9;//вычисление которого, между тем, не приводит к ошибке (в лог выводится число 3).&lt;br /&gt;
Message(Sqrt(20) And 65535);&amp;amp;#9;&amp;amp;#9;//При операциях с целочисленной логикой, вещественные числа приводятся к целым (отбрасывается дробная часть), это выражение выведет 4.&lt;br /&gt;
&lt;br /&gt;
//В данном примере на экран выводится стиль шрифта элемента формы с именем &amp;quot;Поле&amp;quot;. Свойство FontStyle отдает число, представляющее битовую маску с битами: &lt;br /&gt;
//   1 -- жирный, 2 -- наклонный, 3 -- подчеркнутый, 4 -- зачеркнутый. Пример пользуется тем, что логические функции учитывают только младший бит числа.&lt;br /&gt;
аСтиль:=Form.ControlByName(&amp;quot;Поле&amp;quot;).FontStyle;&lt;br /&gt;
Message(&amp;quot;Стиль элемента &amp;quot;&amp;quot;Поле&amp;quot;&amp;quot;: &amp;quot;+?(аСтиль,&amp;quot;жирный &amp;quot;)+?(аСтиль\2,&amp;quot;наклонный &amp;quot;)+?(аСтиль\4,&amp;quot;подчеркнутый &amp;quot;)+?(аСтиль\8,&amp;quot;зачеркнутый &amp;quot;));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Константы в исходных текстах ==&lt;br /&gt;
При написании исходных текстов часто приходится использовать заранее известные значения -- числа, строки или даты. Данные значения называются константами. При компиляции текста, они превращаются в нужный тип данных и сохраняются в компилированном файле с тем, чтобы позже, использоваться при исполнении выражений. Способ задания констант в исходных текстах программы следующий:&lt;br /&gt;
* '''Числа''' (вещественные или целые) записываются в стандартной математической форме, кроме десятичных констант система позволяет записывать числа в шестнадцатеричной, восьмеричной и двоичной системах исчисления. Принимаются следующие форматы записи чисел:&lt;br /&gt;
# &amp;lt;code&amp;gt;{+,-}*[E{+,-}*]&amp;lt;/code&amp;gt; (где ''*'' заменяет любое количество знаков ''0''..''9'') -- используется для записи десятичных целых или вещественных чисел. Число может содержать только следующие знаки ''+'',''-'',''0''..''9'',''.'',''E'' (или ''e'', используется для указания мантиссы вещественных чисел). Разделителем целой и вещественной части служит ''точка'' ('''.'''). Примеры: &amp;lt;code&amp;gt;1.23&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;1000000000000&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;1.73E+100&amp;lt;/code&amp;gt;.&lt;br /&gt;
# &amp;lt;code&amp;gt;$*&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;0x*&amp;lt;/code&amp;gt; (где ''*'' заменяет любое количество знаков ''0''..''9'', ''a''..''f'') -- используется для записи шестнадцатеричных целых чисел. Число может содержать только следующие знаки ''0''..''9'',''x'',''X'',''a''..''f'',''A''..''F''. Ввод вещественных чисел в шестнадцатеричной нотации не допускается. Примеры: &amp;lt;code&amp;gt;$fffaa&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;0x76AB&amp;lt;/code&amp;gt;.&lt;br /&gt;
# &amp;lt;code&amp;gt;0o*&amp;lt;/code&amp;gt; (где ''*'' заменяет любое количество знаков ''0''..''7'') -- используется для записи восьмеричных целых чисел. Число может содержать только следующие знаки ''0''..''7'',''o'',''O''. Ввод вещественных чисел в восьмеричной нотации не допускается. Примеры: &amp;lt;code&amp;gt;0o7601&amp;lt;/code&amp;gt;.&lt;br /&gt;
# &amp;lt;code&amp;gt;0b*&amp;lt;/code&amp;gt; (где ''*'' заменяет любое количество знаков ''0''..''1'') -- используется для записи двоичных целых чисел. Число может содержать только следующие знаки ''0''..''1'',''b'',''B''. Ввод вещественных чисел в двоичной нотации не допускается. Примеры: &amp;lt;code&amp;gt;0b11010001&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''Строки''' всегда заключены в ''двойные кавычки'' ('''&amp;quot;'''). Для того, чтобы добавить двойную кавычку в строку, ее нужно употребить два раза. К примеру, выражение &amp;lt;code&amp;gt;&amp;quot;Строка &amp;quot;&amp;quot;в кавычках&amp;quot;&amp;quot;&amp;quot;&amp;lt;/code&amp;gt; представляет с собой строку ''Строка &amp;quot;в кавычках&amp;quot;''. Строковая константа всегда должна быть закончена до окончания строки, если необходимо добавить в строку перевод строки, можно использовать [[константы|именованную константу]] '''_NEWLINE'''. Однако, можно также указать в начале следующей строки символ конкатенации строковых констант '''|'''. В этом случае, компилятор продолжит набор строковой константы со следующей строки, а вместо символа '''|''' будет добавлен знак перевода строки. Пример показан ниже:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ТЗ:=&amp;quot;Period From НачДата to КонДата;&lt;br /&gt;
|зБс:=Storage.Банк.БанковскийСчет;&lt;br /&gt;
|зЮЛ:=Storage.Банк.ЮрЛицо;&lt;br /&gt;
|зСмП:=Income(Сумма);&lt;br /&gt;
|зСмР:=Expense(Сумма);&lt;br /&gt;
|зСмНО:=BegTotals(Сумма);&lt;br /&gt;
|зСмКО:=EndTotals(Сумма);&lt;br /&gt;
|Condition(NOT IsEmpty(зЮЛ));&amp;quot;;&lt;br /&gt;
//В данном примере создается длинная строковая константа, располагающаяся на нескольких строках, вместо знаков | будет добавлен перевод строки.&lt;br /&gt;
//Важно понимать, что внутри строк до их завершения невозможно использовать комментарии. Пример: &lt;br /&gt;
а:=&amp;quot;Некая строка //Данный текст не является комментарием, а будет частью строковой константы&lt;br /&gt;
|Другая строка&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
а:=&amp;quot;Некая строка&amp;quot;+_NEWLINE+ //Данный уже будет являться комментарием&lt;br /&gt;
&amp;quot;Другая строка&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* '''Константы даты и времени''' всегда заключены в ''апострофы''  ('''&amp;lt;nowiki&amp;gt;'&amp;lt;/nowiki&amp;gt;'''). Понимаются следующие форматы записи даты и времени:&lt;br /&gt;
# &amp;lt;code&amp;gt;[Д]Д.[М]М.ГГ[ГГ][ [Ч]Ч:[М]М[:[С]С]]&amp;lt;/code&amp;gt; -- Стандартный формат записи. Примеры: &amp;lt;code&amp;gt;'10.12.2012'&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;'31.01.2020 12:00'&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;'3.6.25 4:12:11'&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;[М]М/[Д]Д/ГГ[ГГ][ [Ч]Ч:[М]М[:[С]С]]&amp;lt;/code&amp;gt; -- Американский формат, разделителем является знак '''/'''. Время по-прежнему задается в 24-х часовом формате. Примеры: &amp;lt;code&amp;gt;'12/10/2012'&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;'01/31/2020 12:00'&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;'6/3/25 4:12:11'&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;[Д]Д-[М]М-ГГ[ГГ][ [Ч]Ч:[М]М[:[С]С]]&amp;lt;/code&amp;gt; -- Стандартный формат с разделителем '''-'''. Примеры: &amp;lt;code&amp;gt;'10-12-2012'&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;'31-01-2020 12:00'&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;'3-6-25 4:12:11'&amp;lt;/code&amp;gt;&lt;br /&gt;
При попытке использовать другие форматы в тексте исходного кода, компиляция будет остановлена с ошибкой. Если при указании даты временная часть опускается, она считается равной 00:00:00. Если при указании временной части, секундная часть опускается, она считается равной нулю секунд.&lt;br /&gt;
&lt;br /&gt;
== Исключения ==&lt;br /&gt;
&amp;lt;p&amp;gt;Исключения могут возникать в моменты ошибочных ситуаций в программах, а могут быть вызваны специально, как прием прерывания выполнения, когда условия не удовлетворяют проверке и продолжение исполнения невозможно. Большинство функций способны вызвать исключение, если, к примеру, они получают в своих аргументах неожиданные или неверные значения (слишком большое число, индекс, выходящих за пределы списка или таблицы и пр.) -- такие исключения сигнализируют об ошибках в написании кода программы, возможны также исключения из-за внешних событий (к примеру, отсутствие файла или его некорректный формат) -- такие исключения невозможно предугадать, поэтому разработчик должен предусмотреть и запрограммировать реакцию программы при их возникновении. Поведением по умолчанию при возникновении исключения является остановка программы на текущей инструкции, текущий модуль, при этом, закрыт не будет (кроме ситуаций, когда исключение возникло в предопределенном событии '''OnOpen''' или в момент исполнения события формы '''OnOpen'''), управление будет отдано пользователю.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Важно понимать, что в данном тексте под исключениями понимаются внутренние события, возникающие на уровне языка. Системные исключения, сигнализирующие ошибки внутри операционной системы или внешние катастрофические события, не затрагиваются этой темой, см. статью &amp;quot;[[Исключения в программе и отладка исключений]]&amp;quot;.&amp;lt;/p&amp;gt; &lt;br /&gt;
Разнообразные конструкции и функции системы помогают настроить работу с исключениями, как это необходимо разработчику. В данный список входят функции и конструкции, которые:&lt;br /&gt;
* Изменяют поведение системы по умолчанию при возникновении исключений: конструкции '''Try/Except''', '''Try/Finally''' (описание см. выше)&lt;br /&gt;
* Вызывают или подавляют исключения: конструкция '''Raise''' (см. выше), функции '''[[SuppressException]]''', '''[[Assert]]''', '''[[Reraise]]'''.&lt;br /&gt;
* Получают информацию по возникшим исключениям: функции '''[[PopError]]''', '''[[PeekError]]'''.&lt;br /&gt;
* Получают информацию по стеку исполнения программы: функция '''[[dbgStackTrace]]'''.&lt;br /&gt;
&lt;br /&gt;
== Типы данных, объекты и обращение к ним ==&lt;br /&gt;
&amp;lt;p&amp;gt;Каждая переменная в системе содержит какой-либо объект. Объекты разделяются на сложные и простые. Простые объекты (пустое значение, числа, даты, строки) всегда копируются при копировании переменной в другую переменную (&amp;lt;code&amp;gt;a:=b;&amp;lt;/code&amp;gt;), а также при передаче переменных в виде аргументов в функцию (т.е., изменение аргумента функции не вызовут изменение внешней переменной, даже если для аргумента использован префикс '''ByRef''', однако, в последнем случае, изменение будет скопировано в назад переменную после окончания выполнения функции). Сложные объекты (количество которых может варьироваться в зависимости от подключения внешних библиотек, сборки системы и пр.) не хранятся непосредственно в переменных, а представлены ссылками. При копировании содержания переменной, или передаче ее в виде аргумента в тело функции, в новой переменной создается дополнительная ссылка на сложный объект (и его внутренний счетчик ссылок увеличивается на единицу). См. также статью [[Объекты]].&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Каждый сложный объект принадлежит определенному набору функций и свойств, называемому ''интерфейсом''. Интерфейсы имеют свои имена и к ним можно обращаться, однако, обычно не несут важной функции, кроме как создание новых объектов из них (однако, есть исключения). Интерфейс можно себе представить как трафарет, а объект, как рисунок, полученный с помощью этого трафарета. Интерфейсы не содержат реальных данных, это программный набор функций, он не занимает в памяти дополнительного места. Как только создается объект, в памяти отводится определенное место под его данные (разное для разных объектов), при этом, используя этот созданный объект, можно вызывать функции его интерфейса, чтобы модифицировать его и производить манипуляцию данными с помощью его свойств. Любое обращение к внутренним возможностям объектов и интерфейсов происходит с помощью разделителя &amp;lt;b&amp;gt;.&amp;lt;/b&amp;gt; (точка) за которым следует наименование функции или свойства. Некоторые функции или свойства объектов могут возвратить новый (или существовавший ранее) объект. В этом случае, разделитель можно применить повторно, чтобы обратиться к функциям возвращаемого объекта. Таким образом можно создавать конструкции каскадных обращений к объектам с помощью разделителей, которые могли иначе бы занять много строк текста. К примеру, строка &amp;lt;code&amp;gt;аИмя:=Ref.тмцНоменклатура.Find(&amp;quot;Code&amp;quot;,&amp;quot;000000001355&amp;quot;).Name&amp;lt;/code&amp;gt;, начинается с обращения к интерфейсу &amp;lt;b&amp;gt;Ref&amp;lt;/b&amp;gt;, далее созданию [[Объект базы данных|объекта базы данных]] с типом ''справочник тмцНоменклатура'', затем для свежесозданного объекта вызывается функция '''Find''', которая заполняет объект реальным значением из базы данных, после чего находится свойство с именем реквизита базы данных ''Name'', оно и присваивается переменной ''аИмя''.&amp;lt;/p&amp;gt;&lt;br /&gt;
Интерфейсы (и их объекты) обычно содержат следующие элементы, с помощью которых можно обращаться к ним:&lt;br /&gt;
* '''Функция создания нового объекта'''. Вызывается непосредственно из интерфейса. Обычно она называется '''Create''', но может иметь и другие названия, таких функций может быть множество, иногда она может отсутствовать. Зачастую такие функции также можно вызвать из объектов, что, в прочем, не имеет особого смысла (к примеру, &amp;lt;code&amp;gt;aList:=List.Create(1,2,3);bList:=aList.Create();&amp;lt;/code&amp;gt; ''bList'' создан вызовом из объекта, а не интерфейса, как это обычно бывает). Замечание: наличие функции удаления объекта не требуется, так как он удаляется автоматически системой, после того, как удалены все его ссылки. &lt;br /&gt;
* '''Функции, вызываемые непосредственно из интерфейса''' (включая функции создания новых объектов). Большинство функций интерфейса могут быть вызваны только из объекта, так как им необходимы данные, которые могут ассоциироваться только с объектами, однако, существуют абстрактные функции, которые можно вызывать непосредственно из интерфейса, а есть и такие, которые работают только в совокупности с интерфейсом и не будут работать в объекте. &lt;br /&gt;
* '''Свойства объекта'''. Свойства предоставляют доступ к внутренним данным объекта, в отличие от функций обычно не имеют аргументов и часто существует возможность их изменения, т.е., употребления свойства с левой стороны инструкции присваивания (к примеру, &amp;lt;code&amp;gt;aTab.CurLine:=12&amp;lt;/code&amp;gt;, ''CurLine'' здесь является свойством объекта ''aTab'' с интерфейсом ''[[Таблица|Tab]]''). Присвоение значений функциям не имеет смысла.&lt;br /&gt;
* '''Функции объекта'''. Все остальные функции, перечисленные в интерфейсе и доступные для использования в его объектах.&lt;br /&gt;
&lt;br /&gt;
== Компиляция и способ хранения текстов ==&lt;br /&gt;
Исходные тексты программы хранятся не только в модулях системы (отдельных текстовых файлах, специально предназначенных для хранения таких текстов), но также могут быть привязаны к данным другого вида, в последнем случае, они являются событиями или триггерами. Исполнения программ только из модулей недостаточно, чтобы удобно описать взаимодействие пользователя с пользовательским интерфейсом или некоторых объектов базы данных и основной программы, поэтому тексты программ приходится привязывать к визуальным объектам, чтобы, к примеру, выполнить какое-либо действие после того, как пользователь нажал на кнопку или изменилась выделенная строка в таблице. Также удобнее, к примеру, описать механизм отмены обработки документа в специальном месте, привязанном к объекту базы данных, в частности, это позволяет вызывать такую программу-триггер как в момент вызова программой функций '''[[DB.Unpublish|Unpublish()]]''' или '''[[DB.Mark|Mark()]]''' (без какой-либо необходимости что-то дополнительно описывать, передавать в параметрах имя процедуры обработки и пр.), так и при визуальном удалении документа из журнала, упрощая программирование системы и уменьшая число возможных ошибок. Ниже представлены разнообразные способы хранения исходных текстов в системе:&lt;br /&gt;
* '''Модули''' (в т.ч. глобальные). Отдельные файлы, полностью отданные под хранение модулей.&lt;br /&gt;
* '''Визуальные события'''. Тексты событий хранятся внутри особых контейнеров внутри файлов-описаний форм. События, описанные таким образом, могут быть привязаны как к элементам формы (причем каждому элементу может быть задано множество событий), так и к самой форме в общем.&lt;br /&gt;
* '''События пунктов меню''' и '''события панели инструментов'''. Тексты триггеров событий хранятся внутри файлов с описанием меню и панелей инструментов. События выполняются, когда пользователь выбирает определенный пункт меню или нажимает на кнопку на панели инструментов.&lt;br /&gt;
* '''Триггеры объектов базы данных'''. Тексты хранятся внутри файла метаданных и вызываются в моменты создания, записи или обработки объектов.&lt;br /&gt;
Для увеличения скорости исполнения все тексты (включая события и триггеры) до передачи на сервер базы данных подвергаются компиляции. Компиляция это необратимое преобразование текстового файла программы в бинарный файл, не являющийся файлом машинного кода, но более понятный и удобный для исполнения машине, чем текстовый файл. Компилированные файлы невозможно в полной мере превратить назад в тот вид, какими они были до компиляции (при компиляции, к примеру, теряются комментарии, возможно меняются имена переменных и пр.). Поэтому, такие файлы хранятся только на сервере, тогда как разработчик может продолжать производить требуемые изменения в тестах проекта. Компиляция выполняется автоматически программой разработки [[Общая информация и интерфейс Студии|'''Студия''']], при этом в компиляции участвуют и подвергаются обновлению на сервере только те файлы, в которых производились изменения.&lt;br /&gt;
&lt;br /&gt;
== Предопределенные события ==&lt;br /&gt;
&amp;lt;p&amp;gt;В некоторых случаях, более удобно описать какое-либо событие внутри модуля, нежели в контейнере обработчике событий. Иногда это связано с тем, что такое событие будет вызвано по умолчанию, и, если его разместить в глобальном модуле, можно изменить поведение всего проекта при наступлении какого-либо события в любом его месте, после чего для определенных форм это поведение можно модифицировать в обработчиках событий. Иногда же, такой способ является единственно возможным (к примеру, файлы электронных таблиц на данный момент не подразумевают наличия своего хранилища событий, поэтому, события, связанные со свободными окнами электронных таблиц вызываются только из модуля, из которого эти таблицы были созданы (данный модуль будет оставаться в памяти системы, до того, как будет закрыта последняя таблица); однако, для электронной таблицы, помещенной на форму, как ее элемент, уже можно задать свои события из редактора форм.&amp;lt;/p&amp;gt;&lt;br /&gt;
С учетом внешних событий или событий, задаваемых подключаемыми модулями, количество типов предопределенных событий в системе не ограничено. Однако основные события, описанные на уровне системы, поддаются полному описанию. Для получения информации см. статью [[Предопределенные события]].&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://sfsys.ru/index.php?title=Table.LoadFromBuffer&amp;diff=5154</id>
		<title>Table.LoadFromBuffer</title>
		<link rel="alternate" type="text/html" href="http://sfsys.ru/index.php?title=Table.LoadFromBuffer&amp;diff=5154"/>
		<updated>2025-12-27T17:07:41Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{infobox function&lt;br /&gt;
|name=LoadFromBuffer&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;
Функция производит загрузку текущей таблицы из буфера в указанном формате, предыдущие данные, находившиеся в таблице, будут утеряны.&lt;br /&gt;
&lt;br /&gt;
== Синтаксис ==&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
{{Grey|Table.}}'''LoadFromBuffer'''(''&amp;lt;Объект буфера или строка (BUFFER,STRING)&amp;gt;''{{Optional|,&amp;lt;Начальная позиция буфера (INT)&amp;gt;{{Default|{{Eq}}0}},&amp;lt;Размер таблицы в буфере (INT)&amp;gt;,&amp;lt;Формат (INT,STRING)&amp;gt;,&amp;lt;Индекс или наименование листа (INT,STRING)&amp;gt;}}):''&amp;lt;Наименование загруженного листа или список с листами (STRING,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;Объект буфера (BUFFER)&amp;gt;''&amp;lt;/code&amp;gt; - Аргумент задает объект буфера, откуда будет производиться загрузка таблицы. Также может быть указана ANSI строка с бинарной информацией.&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}} Аргумент задает размер таблицы в буфере в байтах, если аргумент опущен, размер будет найден автоматически.&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Формат (INT,STRING)&amp;gt;''&amp;lt;/code&amp;gt; - {{Optional}} Аргумент задает формат загружаемого файла в строковом или числовом виде. Если аргумент опущен, разгрузка будет происходить в формате соответствующем содержимому буфера (формат будет определен автоматически). Доступны следующие значения:&lt;br /&gt;
** '''0''' или '''SFT''' (по умолчанию) -- файл во внутреннем формате системы (sft)&lt;br /&gt;
** '''1''' или '''XLS''' -- файл в формате Excel (xls). Особенности импорта из формата ''xls'': &lt;br /&gt;
*** Система распознает разные форматы Excel (от biff2 до biff8). Импорт файлов, созданных в старых версиях Excel разрешен.&lt;br /&gt;
*** Внедренный текст и картинки не будут импортированы для файлов с версией формата '''старше''' biff7 (т.е. только для Excel 95 и младше).&lt;br /&gt;
*** Внедренные OLE-объекты, Word Art, диаграммы, чертежи и прочее не будут импортированы.&lt;br /&gt;
*** При импорте чисел и дат с нестандартными форматами представления, результат может выглядеть несколько иначе, чем, если бы файл был открыт в Excel.&lt;br /&gt;
** '''2''' или '''XLSX''' -- файл в формате Excel (xlsx). Особенности импорта из формата ''xlsx'': &lt;br /&gt;
*** Не будут импортированы внедренные картинки не поддерживаемых форматов (на данный момент не поддерживаются: wmf, emf, tiff, eps).&lt;br /&gt;
*** Поддерживается корректный импорт внедренного текста, картинок и OLE-объектов, однако, OLE-объекты, внедренные в виде значка, будут импортированы как OLE-объекты стандартного внедрения (режим значков пока не поддерживается).&lt;br /&gt;
*** Внедренные объекты Word Art, диаграммы, чертежи и прочее не будут импортированы.&lt;br /&gt;
*** При импорте чисел и дат с нестандартными форматами представления, результат может выглядеть несколько иначе, чем, если бы файл был открыт в Excel.&lt;br /&gt;
*** Цвета ячеек, шрифта и границ областей таблиц данных Excel, не будут корректно импортированы. Также поддерживаются не все эффекты цветов (альфа, гамма и пр.) при импорте, что может исказить цвета некоторых файлов.&lt;br /&gt;
* &amp;lt;code&amp;gt;''&amp;lt;Индекс или наименование листа (INT,STRING)&amp;gt;''&amp;lt;/code&amp;gt; - {{Optional}} Для форматов, хранящих более одного листа в файле (xls, xlsx), аргумент позволяет указать наименование загружаемого листа (если аргумент представляет строку) или индекс загружаемого листа (если аргумент представляет число, первый лист имеет индекс ''1''). Если аргумент опущен, будет загружен активный лист, либо первый лист, если активный лист недоступен. Если указанный по имени или индексу лист не найден, функция вызовет исключение. Также возможно указать два особых значения индекса:&lt;br /&gt;
** '''-1''': (только для форматов '''XLSX''' и '''XLS''') Функция загрузит все листы книги и возвратит их в виде списка, значениями которого будут таблицы, а именами -- наименования листов. Вызов метода с этим индексом можно произвести непосредственно из интерфейса Table, а не из объекта. Если вызов производится из объекта, этот объект изменен не будет.&lt;br /&gt;
** '''-2''': (только для форматов '''XLSX''' и '''XLS''') Функция загрузит все имена листов книги и возвратит их в виде списка. Вызов метода с этим индексом можно произвести непосредственно из интерфейса Table, а не из объекта. Если вызов производится из объекта, этот объект изменен не будет.&lt;br /&gt;
&lt;br /&gt;
==== Возвращаемое значение ====&lt;br /&gt;
В обычных режимах загрузки, для форматов, хранящих более одного листа в файле (xls, xlsx), функция возвращает наименование загруженного листа, для остальных форматов (sft), будет возвращено пустое значение. В особоых режимах, функция возвращает список с таблицами или наименованиями листов.&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Получение буфера из какого-либо источника (к примеру из обмена TCP/IP)&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Таб:=Table.Create();&lt;br /&gt;
Try&lt;br /&gt;
  Таб.LoadFromBuffer(аБуфер,,,&amp;quot;XLS&amp;quot;);&lt;br /&gt;
Except&lt;br /&gt;
  Message(PopError(),&amp;quot;!&amp;quot;);&lt;br /&gt;
  Message(&amp;quot;Полученная таблица имеет неверный формат &amp;quot;+Файл+&amp;quot;! Обратитесь к администратору!&amp;quot;,&amp;quot;!&amp;quot;);&lt;br /&gt;
  Exit 0;&lt;br /&gt;
EndTry;  &lt;br /&gt;
  &lt;br /&gt;
If (Trim(Таб.Area(14,1,14,1).Text)&amp;lt;&amp;gt;&amp;quot;&amp;quot;)or(Trim(Таб.Area(27,1,27,1).Text)&amp;lt;&amp;gt;&amp;quot;&amp;quot;) Then&lt;br /&gt;
  Message(&amp;quot;Таблица имеет неверный формат!&amp;quot;,&amp;quot;!&amp;quot;);&lt;br /&gt;
  Exit 0;  &lt;br /&gt;
EndIf;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
	<entry>
		<id>http://sfsys.ru/index.php?title=Tab.UpdateLineEx&amp;diff=5152</id>
		<title>Tab.UpdateLineEx</title>
		<link rel="alternate" type="text/html" href="http://sfsys.ru/index.php?title=Tab.UpdateLineEx&amp;diff=5152"/>
		<updated>2025-12-27T17:07:39Z</updated>

		<summary type="html">&lt;p&gt;Admin: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{infobox function&lt;br /&gt;
|name=UpdateLineEx&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;
Функция обновляет строки, заданные аргументами для поиска или добавляет новую строку. Поиск начинается со строки, заданной вторым аргументом. Для всех строк, удовлетворящих условиям поиска, значения в столбцах, заданных аргументов с наименования столбцов обновления, будут изменены на аргументы, идущие за аргументом с наименованиями. Если ни одна строка не найдена, будет добавлена одна новая строка (режим добавления можно отключить, добавив знак &amp;quot;-&amp;quot; в начало перечисления столбцов поиска). Если применяется сортированный поиск (аргумент сортироки равен 1), строка вставляется в таблицу таким образом, чтобы не нарушить сортировку, заданную наименованиями столбцов первого аргумента. Если второй аргумент является переменной, в ней будет возвращен индекс добавленной строки или общее количество найденных и измененных строк в соотвествии с результатами поиска. Данная функция не использует текущую строку таблицы, что позволяет ее применять при работе с нескольми потоками (thread-safe). '''Важно''': ни один из столбцов поиска не должен присутствовать в списке столбцов обновления.&lt;br /&gt;
&lt;br /&gt;
== Синтаксис ==&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
{{Grey|Tab.}}'''UpdateLineEx'''(''&amp;lt;Наименования столбцов поиска через запятую (STRING)&amp;gt;''{{OptionalByRef|,''&amp;lt;Начальный индекс поиска, результирующий индекс (INT)&amp;gt;''}}{{Optional|,&amp;lt;Значение столбца поиска 1&amp;gt;,&amp;lt;Значение столбца поиска 2&amp;gt;...,&amp;lt;Таблица сортирована по столбцам поиска (INT)&amp;gt;,&amp;lt;Наименования столбцов обновления через запятую (STRING)&amp;gt;,&amp;lt;Значение обновления столбца 1&amp;gt;,&amp;lt;Значение обновления столбца 2&amp;gt;...}}):''&amp;lt;0, если строка добавлена, иначе количество обновленных строк (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; - Строка содержит список наименований столбцов поиска через запятую. Регистр наименований не имеет значения. Каждый заданный столбец должен присутствовать в таблице. Первый символ этого аргумента может быть знаком &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt;. В случае &amp;quot;+&amp;quot; функция добавляет новую строку, если не будет найдено ни одной существующей строки (это режим по умолчанию), в случае &amp;quot;-&amp;quot;, функция не будет добавлять эту строку.&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;Значение столбца поиска ?&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}} Возможные значения 0 и 1. Если таблица была предварительно отсортирована по всем столбцам поиска по неубыванию (т.е. предварительно выполнена конструкция &amp;lt;code&amp;gt;aTab.Sort(&amp;lt;Столбец1,Столбец2...&amp;gt;)&amp;lt;/code&amp;gt;, либо для заполнения таблицы вызывалась функция &amp;lt;code&amp;gt;aTab.AddLineSorted(&amp;lt;Столбец1,Столбец2...&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;Значение столбца ?&amp;gt;''&amp;lt;/code&amp;gt; - {{Optional}} Значения произвольного типа, которыми будут обновлены ячейки наденных строк таблицы, либо заполнены в добавляемой строке.&lt;br /&gt;
&lt;br /&gt;
==== Возвращаемое значение ====&lt;br /&gt;
Возвращает 0, если строка добавлена, иначе количество обновленных строк.&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,4);&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,4);&lt;br /&gt;
aTab.AddLine(&amp;quot;b1,b2,b3,b4&amp;quot;,5,2,3,4);&lt;br /&gt;
&lt;br /&gt;
Message(aTab.UpdateLineEx(&amp;quot;b1,b2&amp;quot;,,2,2,0,&amp;quot;b3,b4&amp;quot;,9,9));&lt;br /&gt;
//Выводит число 1 (количество изменненных строк)&lt;br /&gt;
//Вторая строка теперь содержит значения: 2,2,9,9.&lt;br /&gt;
&lt;br /&gt;
Message(aTab.UpdateLineEx(&amp;quot;b1,b2&amp;quot;,,9,9,0,&amp;quot;b3,b4&amp;quot;,9,9));&lt;br /&gt;
//Выводит число 0&lt;br /&gt;
//В таблице добавилась строка со значениями 9,9,9,9.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Сравнение скорости работы функций с сортировкой и функций без сортировки ===&lt;br /&gt;
{{Пример поиска в сортированных таблицах}}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
</feed>