Инструментальная Система Управления Базами Данных руководство пользователя

Вид материалаРуководство пользователя

Содержание


19.3. Математические операторы
Глобальные и локальные переменные.
Использование переменных, как динамических массивов
Специальные переменные.
Подобный материал:
1   ...   45   46   47   48   49   50   51   52   53

19.3. Математические операторы


Математические операторы предназначены для работы с любыми числами: целыми или имеющими десятичную часть, со знаком или без знака и т.д. Числа в выражениях могут задаваться в виде констант (т.е. непосредственно), переменных или полей базы.




Оператор

Пример

+

Сложение

@A:=3+4 /*переменной @A присвоено значение "7", равное сумме чисел 4 и 3*/



Вычитание

@A:=(@А–2) /*переменной @A присвоено значение "5", равное разности предыдущего значения переменной (7) и числа 2*/



Умножение

@A:=(РГ11*@A) /*переменной @A присвоено значение, равное произведению числа, содержащегося в поле №11 базы данных с мнемокодом РГ, и предыдущего значения переменной*/

/

Деление

@A:=(ЛЦ02/2) /*переменной @A присвоено значение, равное частному числа, содержащегося в поле №2 базы данных с мнемокодом ЛЦ, и числа 2*/

%

Деление по модулю (нахождение остатка от деления)

@A:=(5%2) /* переменной @A присвоено значение, равное остатку от деления, т.е. выражению @A:=5-(INT(5/2))*2 */

Порядок выполнения математических операторов, при вычислении значения выражения: умножение, деление, деление по модулю, сложение, вычитание.

Следует отметить, что существует еще один оператор, который, строго говоря, не относится к математическим операциям, так как предназначен для выполнения действий над любыми значениями (корректно будет сказать, что он работает с любыми строками). Это оператор конкатенации («склейки») значений, который обозначается следующим образом: <<. С его помощью Вы можете соединить, т.е. «склеить» несколько значений и получить одно значение. Например:

@А:= "НПО";

@В:= "Энергия";

@С:=@А<<" "<<@В; /*переменной @С присвоено значение "НПО Энергия"*/

19.4. Переменная.

Глобальные и локальные переменные.


Как уже отмечалось выше, переменные делятся на локальные (начинаются с символа «@») и глобальные (начинаются с символов «@@»). Рассмотрим более подробно, в чем заключаются их различия.
  • Область видимости локальной переменной, во время выполнения одной формулы, ограничена рамками текущей записи. Это означает, что значение локальной переменной, вычисленное при обработке текущей записи, не может использоваться при обработке следующей записи, так как значение такой переменной обнуляется при переходе от одной обрабатываемой записи к другой.
  • Область видимости глобальной переменной, во время выполнения одной формулы, не ограничена рамками текущей записи. Т.е. значение глобальной переменной, вычисленное при обработке текущей записи, можно использовать и при обработке следующей записи66.

Для того чтобы работать с переменной, нет необходимости предварительно объявлять ее или описывать ее свойства. Как только переменная с новым именем появляется в левой части выражения, считается, что она определена. При этом, как уже отмечалось выше, в рамках одной формулы переменная может последовательно содержать различные значения (текстовые, числовые, дату, время) и, следовательно, использоваться в выражениях в различном качестве. Например:

@A:=10; /*переменная @A содержит числовое значение "10" */

РГ11:= @A+4; /*переменная @A является операндом в математическом выражении*/

@A:= "Организация"; /*переменная @A содержит текстовое значение*/

РГ2:= @A;

Использование переменных, как динамических массивов


При создании формул в ИСУБД «CronosPlus» переменные могут обрабатываться как массивы. Это означает, что переменная может одновременно иметь несколько различных значений. При этом количество таких значений, называемых элементами массива, не ограничено, т.е. массив является динамическим.

Каждый элемент массива имеет свой номер, который используется при обращении к данному элементу. Нумерация элементов начинается с 1 и является непрерывной (последовательной), т.е. если происходит обращение к третьему элементу массива, считается, что первые два элемента уже существуют (если эти элементы не заполнялись ранее, они будут иметь пустое значение).

Формально элемент массива рассматривается как переменная, что позволяет использовать его в любом контексте, где допустимо использование простых переменных. Для обращения к элементу массива (т.е. доступа к соответствующему значению) используется имя массива (переменной) и номер элемента, заключенный в круглые скобки. В предыдущих версиях системы (в том числе, в DOS-версии), для обращения к элементам массива использовались специальные функции GETIZN и SETIZN. Теперь эти функции не используются.

Следует отметить, что к кратным полям баз данных (имеющим несколько значений) можно обращаться также как к динамическим массивам, указывая номер значения в круглых скобках. Если при работе с массивом (переменной) или кратным полем круглые скобки не используются, считается, что он состоит из одного значения, которое включает все элементы массива, разделенные специальным символом. Например:

@A:=10; /*переменная @A содержит одно значение "10" */

@A(2):=20; /*переменная @A содержит два значения "10" и "20" */

@A(1):=40; /*переменная @A содержит два значения "40" и "20" */

@RET:=@A; /*на экран будет выведено значение "102040" (где  специальный символ, разделяющий элементы массива) */

@A:=30; /*переменная @A содержит только одно значение "30" */

На уровне структуры массива (на физическом уровне) элементы отделяются друг от друга специальным символом, называемым разделителем. Разделитель задается системой автоматически в специальной переменной @VALUESEPARATOR (подробнее о специальных переменных рассказано в следующем пункте раздела).

@A:=11<<@VALUESEPARATOR<<22; /* переменная @А содержит два значения "11" и "22", разделенных специальным символом */

Следует отметить, что поле базы, как и переменная, может обрабатываться как динамический массив. Более подробно этот вопрос рассмотрен ниже (см. «Функции работы с множественными полями (динамическими массивами)»).

Специальные переменные.


При создании формул, Вы можете использовать специальные переменные, значение которых определяется системой автоматически. Перечислим эти переменные:

@NOFSELECT - в переменной хранится количество отобранных записей корневой базы;

@CURRENTTIME - в переменной хранится текущее время в формате ЧЧ:ММ;

@CURRENTDATE - в переменной хранится текущая дата в формате ДД.ММ.ГГГГ;

@USERNAME - в переменной хранится имя пользователя;

@BANKNAME - в переменной хранится имя текущего банка данных;

@BASENAME - в переменной хранится название текущей базы данных;

@BASEMNEMOCODE - в переменной хранится мнемокод (имя) текущей базы данных;

@SYSNOMER - в переменной хранится системный номер текущего объекта, т.е. системный номер записи, обрабатываемой по формуле;

@TEMPDIR - в переменной хранится адрес на диске папки, в которую помещаются временные файлы, появляющиеся при выполнении формул (эта папка задается в глобальных параметрах – см. главу 20);

@VALUESEPARATOR - в переменной хранится разделитель элементов динамического массива (специальный служебный символ).

Вы можете использовать значения, содержащиеся в специальных переменных для определения значений полей баз данных или других (неспециальных) переменных. Например:

ЛЦ09:= @CURRENTDATA; /*в поле №9 (тип Дата) обрабатываемой записи базы ЛЦ, будет помещена текущая дата*/

@A:= @SYSNOMER; /*в переменную @A помещен системный номер обрабатываемой записи*/

Кроме перечисленных выше, существует еще одна специальная переменная @RET, которая используется в формулах в выходных формах. Для того чтобы какое-то значение было выведено на экран в соответствующем месте формы, необходимо поместить это значение в специальную переменную @RET. Если эта переменная не определена (т.е. не имеет значения), в форме выводиться ничего не будет. Например, Вы хотите вывести на экран значение переменной @А и поля №2 базы данных, имеющей мнемокод ЛЦ:

@RET:= @A; /*на экран выведется значение переменной @A */

@RET:=ЛЦ02; /*на экран выведется значение поля №2 базы ЛЦ */

Следует отметить, что если в формуле специальной переменной @RET несколько раз присваиваются различные значения, на экран в результате будет выведено последнее из них. Например, если формула состоит из двух строк, таких как в вышеприведенном примере, на экран будет выведено только одно значение - значение поля №2 базы ЛЦ.