Примеры описания переменных: NUM Level, Curs, Цена, Сумма ;
CHAR Name:20, Тип:4, Str_1 ;
/* Символьные переменные Name и Тип имеют размер соответственно
20 и 4 байта, а переменная Str_1 - 80 байт */
DATE D_beg, D_end, Дата1, Дата2 ;
2.2.2. Массивы
Массивы описываются тем же способом, что и простые переменные. Число
элементов массива задается константой или выражением, которое заключается в
квадратные скобки [ ].
Для символьных и датовских переменных резервируется ровно столько элементов,
сколько объявлено в описании. Нумерация элементов массива начинается с единицы.
Для числовых переменных резервируется число элементов на единицу больше
объявленного размера. Нумерация элементов числового массива начинается с нуля.
Дополнительный (нулевой) элемент используется, обычно, для накопления некодовых
значений. Пример:
-------
NUM Sum_nal [100], Сумма_Дт [ Codemax( chtab) ] ;
CHAR Names:10 [20] ;
В этом примере массив числовых переменных Sum_nal имеет 101 элемент (от 0 до
100), а массив Сумма_Дт имеет число элементов, на единицу больше числа элементов
кодовой таблицы chtab.dic. Массив символьных элементов Names имеет 20 элементов
длиной по 10 байт каждый.
Описания простых переменных могут чередоваться с описанием массивов внутри
одного описателя, например: NUM Сумма, Sum_nal [100], Цена ;
Суммарная длина внутреннего представления переменных каждого описателя не
должна превышать 64000 байт. Поэтому невозможно зарезервировать числовой массив
размером 8000 элементов ( 8000 элементов * 8 байт на элемент = 64000 байт).
Невозможно также зарезервировать одним оператором два массива по 4000
элементов каждый, но можно это сделать двумя операторами, например: NUM Array_1 [4000] ;
NUM Array_2 [4000] ;
2.2.3. Глобальные переменные
В программах можно использовать без предварительного описания глобальные
переменные. Имена глобальных переменных начинаются символом '@'.
При входе в систему все они автоматически обнуляются (очищаются) , однако
сохраняют свои значения при переходах от одного фрейма к другому, при смене
задачи, при переходе к генерации отчета.
Глобальные переменные (кроме логических) можно инициализировать нужными
значениями внутри файла конфигурации (Z.CFG).
Глобальные переменные типа NUM обозначены символами: @0 - @255 (их
число равно 256).
Глобальные переменные типа DATE обозначены символами @D0 - @D19 (их
число равно 20).
Глобальные переменные типа CHAR обозначены символами @S0 - @S19 (их
число равно 20). Они представляют собой строки длиной 80 байт, что соответствует
ширине экрана.
Глобальные переменные типа LOG обозначены символами @L0 - @L19 (их
число равно 20). Они представляют собой однобайтовые злементы, которые могут
принимать значение .TRUE. (.T.) или .FALSE. (.F.), что соответствует во
внутреннем представлении 1 и 0.
Глобальные индексные переменные @I и @J - переменные целого типа,
которые могут принимать значения в интервале от -32000 до +32000.
Эти переменные используются в качестве индекса для доступа к массивам,
кодовым таблицам и специальным полям базы данных (с этой целью можно
использовать также программные или глобальные переменные или выражения числового
типа).
Переменная @J по умолчанию используется оператором CYCLE в качестве
переменной цикла.
Над глобальными переменными можно производить те же операции, что и над
программными переменными.
Они могут быть использованы для обмена данными между программами. Значения
этих переменных могут быть заданы и изменены "вручную" путем редактирования
(если соответствующая переменная выведена на экран) либо программно оператором
'=>' (и '+>' -для числовых и индексных переменных).
Логическим переменным можно присваивать значения .TRUE. (.T.) или .FALSE.
(.F.), а при редактировании - значения 1 и 0.
2.3. Описание процедур
Используемые в сценарии процедуры (функции) должны быть описаны до их
применения. Описание функции аналогично описанию процедуры, но она возвращают
значение, которое можно использовать в выражениях соответствующего типа.
Описание процедуры /функции имеет следующий вид:
PROC имя_проц ([опис_пар-ров]) тело_проц
где имя_проц - идентификатор процедуры (функции) ;
опис_пар-ров - список параметров вида: тип1 пар-р1, тип2
пар-р2,... ;
тело_проц - простой или составной оператор, выполняемый при вызове
процедуры. Для функции последним должно быть задано выражение, возвращающее
значение. Примеры
-------
Proc Script_( CHAR Vd_, NUM Nm )
{
Vd_ = 'Р' .OR. Vd_ = 'П' ? "" :
Vd_ = 'К' ? {Go (client, Nm) ;
"МФО " + client->Mfob + " PC " + client->Countb ;
} :
Vd_ = 'С' ? "" :
Vd_ = ' ' ? doc->Script [11] :
"????" ;
}
Proc MIN( NUM A, NUM B) A < B ? A : B ;
/* пример вызова */
MIN(Sum_old + Doc->SumDoc - Nal_sum, Sum_out) => Dks->Sum;