Примитивы Абриса
|
2 Примитивы языка Абрис1.ADD - Прибавление числа к числовому значению локальной переменной<#ADD local-var-name numeric-expression >
Описание Присваивает результат сложения числа numeric-expression и числового значения локальной переменной local-var-name переменной local-var-name. Ничего не возвращает. Пример Функция подсчитывает и возвращает количество строк в тексте txt: <#FUNC LineCount=(PARAM txt; SCAN TEXT=(txt) AS=LINES INIT=(i=0) (ADD i 1); (i) ) > AFT - Строковое сравнение: больше (после)<#AFT source pattern [onmatch-action
{pattern onmatch-action}* [default-action]] >
Описание Последовательно производит строковое сравнение 'больше' значения первого аргумента source со значением четных аргументов pattern. Если найден аргумент pattern, удовлетворяющий условию сравнения, выполняется единственное действие onmatch-action. В случае неуспеха операции сравнения, выполняется действие default-action. Возвращает либо результат выполненного действия, если оно указано, либо непустое значение (символ 'пробел'), если указаны всего два аргумента и результат сравнения - истина, либо пусто. Пример Функция возвращает список только тех строк текста, которые начинаются с латинстких букв (A-Z). <#FUNC AZList=(PARAM text; SCAN TEXT=(text) AS=LINES INIT=(res="") (AFT (str) "Z" "" (BEF (str) "A" "" (LOCALS res APP=(str)))); (res) ) >См. также: A, Операции сравнения., Строчные операции, Ленивые примитивы., Простые примитивы., AND - Логическое 'И'<#AND {expression}*>
Описание Возвращает результат вычисления последнего аргумента expression, если результаты вычислений всех аргументов не пустые, в остальных случаях пусто. Пример Функция ShowItems возвращает в виде таблицы объекты класса. <#FUNC msg1="У этого класса могут быть представители, но сейчас их нет." msg2=("Объекты этого класса - безымянные."\ "Доступ к ним организуется через другие (имеющие имена) объекты." ) msg3=("Объекты этого класса - подчиненные."\ "Доступ к ним организуется через другие (старшие) объекты." ) msg4=("У этого класса нет представителей."\ "<br>Это абстрактный класс, играющий роль общего предка для других классов," " и объединяющий группу общих свойств для своих потомков." ) ShowItems=(OR (AND (NEMPTY (ITEMS)) (ShowItemTable) ) (CAT "<B> " (OR (AND (ClassIsSUPER) (msg4) ) (AND (CLassIsDATA) (msg2) ) (AND(IS (Class_Categ_Name) VALUE) (msg2) ) (AND (NEMPTY "GENLK\GENLK") (msg3) ) (msg1) ) "</B>" ) ) >См. также: A, Логические операции., Ленивые примитивы., Простые примитивы., APP - Конкатенация строкового значения локальной переменной и строки<#APP local-var-name[\] expression[\] >
Описание Дописывает в конец строкового значения переменной с именем local-var-name значение выражения expression, упакованное в строку (переводы строк заменены пробелами). Переменной local-var-name присваивает новое значение. Обратный слэш ("\") выполняет роль символа перевода строки. Если отсутствует переменная с указанным именем, или значение переменной не присвоено, или указан только первый аргумент - не выполняет никаких действий. Ничего не возвращает. Пример Добавляем к имени файла расширение ".bak". <#APP dbName ".bak" >См. также: A, Строчные операции, Ленивые примитивы., Простые примитивы., ASLITERAL - Преобразование строки в литерал JScript<#ASLITERAL text [quote] >
Описание Преобразует исходную строку или текст в литерал JavaScript. В исходной строке или тексте text, перед символами кавычка (''), апостроф ('), обратный слэш (\), табуляция, новая строка, перевод строки, вставляет символ обратный слэш (\). Затем, если указан второй аргумент quote, результат заключается в кавычки, состоящие из символов quote. Возвращает полученную таким образом строку или текст. Пример Вызываем при наведении указателя мышки смену рисунка. <img border=0 src='Img\img1.gif' onmouseover=<#ASLITERAL 'this.src = "Img\img2.gif";' "'"> onmouseout=<#ASLITERAL 'this.src = "Img\img1.gif";' "'"> >См. также: A, Строчные операции, Ленивые примитивы., Простые примитивы., ASP - Получение изображения или ссылки для значения бинарного аспекта<#ASP [[AN=]aspect-name | A=aspect]
[O=object] [D=dbname]
[TO=target-aspect-name] [ATAG=atag]
[M=method | ACT=action] [NEAR={offset
| FIRST | LAST | NEXT | PREV}]
{Custom=expression}* [[RET=]reference-image] >
Описание Формирует изображение/ссылку для значения бинарного аспекта объекта (значения атрибута), в общем виде: <a href='ab://ab/[&D=dbname] [&O=object] [&A=aspect] [AN=aspect-name] [&TO=target-aspect-name] [&M=method] [&ACT=action] [&POS=segment-start] [&NUM=segment-size] [{&Custom=expression}*] ' [atag]> [ref-image] </a> Значение атрибута 'href=' A-тега формируется следующим образом: К URL - программы (ab://ab/) добавляются с аналогичными атрибутами все указанные именованные параметры, кроме RET и ATAG, а также значение первого безымянного аргумента и значения по умолчанию. С атрибутом ATAG могут быть указаны дополнительные параметры -тега (name=, id=, frame=, title=, methods=, accesskey= ... ). С атрибутом RET или без него последним аргументом, может быть явно указано изображение ссылки reference-image. В тело A-тега добавляется изображение ссылки ref-image - вычисленное значение reference-image. По умолчанию в качестве изображения ссылки ref-image устанавливается значение атрибута объекта. Внутри цикла FORASP значение атрибута определяется по очередной связи, вне цикла FORASP - по первой из имеющихся связей объекта по аспекту. Исходный аспект может быть указан либо своим именем aspect-name с атрибутом AN, или без него, первым аргументом, либо с атрибутом A числовым идентификатором aspect. По умолчанию в качестве исходного используется текущий аспект. Целевой аспект может быть указан своим именем target-aspect-name. Для многоместных аспектов объекта целевой аспект необходимо задавать явно с атрибутом TO. По умолчанию берется целевой аспект альтернативный исходному. Объект может быть указан с атрибутом O числовым идентификатором object. По умолчанию используется текущий объект. Если указана БД dbname, отличная от текущей, то необходимо явно указывать объект и аспект (исходный и целевой для многоместных аспектов). По умолчанию используется текущая БД. Могут быть указаны также любые именованные параметры Custom=expression, которые будут включены в ссылку для передачи параметров обрабатывающему методу. В их числе могут быть NUM, POS, определяющие сегмент итераций по умолчанию в циклах обрабатывающего метода. В случае успеха возвращает сформированный таким образом A-тег (изображение/ссылку), иначе пусто. Если указан атрибут NEAR, то в зависимости от его значения возвращает:
Пример Ученая степень Иванова И.И. Ученая степень Иванова И.И.: <#FORDB D=((XBASE)"Test\AIS.ab")> <#ASP AN="уч-ст\ученая степень" O=(OBJ N="Иванов ИИ" C="Личность") TO="уч-ст\об-ты уч-ст"> <#/>См. также: A, Просмотр и навигация по БД, Обращение к БД через HTML-ссылку., Ленивые примитивы., Простые примитивы., ASPECT - Получение стандартного изображения аспекта объекта<#ASPECT [[AN=]aspect-name |
A=aspect] [{[N=]object-name
[C=]class-name} | O=object] [D=dbname]
>
Описание Формирует стандартное изображение аспекта объекта. Стандартным изображением является, в зависимости от категории аспекта - либо HTML-таблица, либо список (через 'пробел') либо одиночное изображение объекта, которое является в свою очередь либо текстом значения объекта для объектов-значений или простейшей гиперссылкой на объект, для всех остальных классов. Аспект может быть указан числовым идентификатором aspect или своим именем aspect-name, без атрибута AN ожидается в качестве первого аргумента. По умолчанию используется текущий аспект. Объект может быть указан числовым идентификатором object или своим именем object-name и именем своего класса class-name, без атрибутов N,C, ожидается в качестве второго и третьего аргументов. По умолчанию используется текущий объект. Если указана БД dbname, отличная от текущей, то необходимо явно указывать объект и аспект. По умолчанию используется текущая БД. В случае успеха возвращает стандартное изображение аспекта объекта, иначе пусто. Пример Выводим текст с фамилией, именем, отчеством личности Иванов ИИ. <#ASPECT AN="фио\ФИО" N="Иванов ИИ" C="Личность" D=((XBASE)"Test\AIS.ab") >См. также: A, Просмотр и навигация по БД, Ленивые примитивы., Простые примитивы., ASPID - Получение идентификатора аспекта<#ASPID [[AN=]aspect-name]
[D=dbname]>
Описание Определяет по имени аспекта его числовой идентификатор. Аспект должен быть указан своим именем aspect-name, без атрибута AN ожидается в качестве первого аргумента. По умолчанию используется текущий аспект. Если указана БД dbname, отличная от текущей, необходимо явно указывать имя аспекта. По умолчанию используется текущая БД. В случае успеха возвращает числовой идентификатор аспекта, иначе пусто (#0). Пример Выводим форму для редактирования ФИО Иванова ИИ HTML-редактором. <#ON (OBJ "Иванов ИИ" "Личность") AN="фио\ФИО" D=((XBASE)"Test\AIS.ab") RET=(_HtmlEd(OBJ)(ASPID) 200 600) >См. также: A, Просмотр и навигация по БД, Ленивые примитивы., Простые примитивы., ASPSIZE - Определение количества связей по аспекту<#ASPSIZE [[AN=]aspect-name |
A=aspect] [{N=object-name
C=class-name} | O=object] [D=dbname]
>
Описание Вычисляет количество наличных связей по аспекту объекта. Исходный аспект может быть указан либо именем аспекта, с атрибутом AN= или без него, первым аргументом, либо с атрибутом A= числовым идентификатором. По умолчанию используется текущий аспект. Объект может быть указан либо именем объекта с атрибутом N=, или без него, вторым аргументом, и именем класса объекта с атрибутом C=, или без него, третьим аргументом, либо с атрибутом O= числовым идентификатором. По умолчанию используется текущий объект. Если с атрибутом D= БД указана явно, то необходимо явно указывать объект и аспект. По умолчанию используется текущая БД. Возвращает число наличных связей по аспекту объекта. Пример: Получаем количество увлечений Иванова ИИ. <#asz=(ASPSIZE "увлечения" N="Иванов ИИ" C="Личность")> AT - Получение идентификатора объекта - значения атрибута<#AT [[AN=]aspect-name | A=aspect]
[[O=]object] [D=dbname]
[TO=target-aspect-name] [NEAR={offset | FIRST
| LAST | NEXT | PREV | ISFIRST | ISLAST |
POS | TOTAL}]>
Описание По связи исходного аспекта с целевым аспектом определяется объект - значение атрибута заданного объекта. Для бинарных аспектов по умолчанию используется целевой аспект, альтернативный заданному. Внутри цикла FORASP/FORLINE значение атрибута определяется по очередной связи, вне цикла - по первой из имеющихся связей объекта по аспекту. Исходный аспект может быть указан числовым идентификатором aspect или своим именем aspect-name, без атрибута AN ожидается в качестве первого аргумента. По умолчанию используется текущий аспект. Целевой аспект может быть указан своим именем target-aspect-name. Для многоместных аспектов объекта целевой аспект необходимо задавать явно с атрибутом TO. По умолчанию берется целевой аспект, альтернативный исходному. Объект может быть указан числовым идентификатором object, без атрибута O ожидается в качестве второго аргумента. По умолчанию используется текущий объект. Если указана БД dbname, отличная от текущей, то необходимо явно указывать объект и исходный аспект. По умолчанию используется текущая БД. В случае успеха возвращает числовой идентификатор найденного объекта - значения аспекта, иначе пусто. Если указан атрибут NEAR, то в зависимости от его значения выполняет одно из действий:
Пример Функция Last возвращает id атрибута объекта последней связи в списке связей по аспекту объекта. <#FUNC Last=(PARAM AN O; FORASP(AN) O=(O) (AT NEAR=LAST) ) Part=(PARAM O; AT(APartOf) O=(O)) >См. также: A, Просмотр и навигация по БД, Ленивые примитивы., Простые примитивы., BEF - Строковое сравнение: меньше (перед)<#BEF source pattern [onmatch-action
{pattern onmatch-action}* [default-action]] >
Описание Последовательно производит строковое сравнение 'меньше' значения первого аргумента source со значением четных аргументов pattern. Если найден аргумент pattern, удовлетворяющий условию сравнения, выполняется единственное действие onmatch-action. В случае неуспеха операции сравнения, выполняется действие default-action. Возвращает либо результат выполненного действия, если оно указано, либо непустое значение (символ 'пробел'), если указаны всего два аргумента и результат сравнения - истина, либо пусто. Пример Функция возвращает список всех строк исходного текста text, которые меньше строки patt. <#FUNC ListBefore=(PARAM text patt; SCAN TEXT=(text) AS=LINES INIT=(res="") (BEF (VALUE) (patt) (LOCALS res APP=(str))); (res) ) >См. также: B, Операции сравнения., Ленивые примитивы., Простые примитивы., BREAK - Отделение разделителя внутри циклического тега<#BREAK>
Описание Внутри цикла, на последнем шаге, игнорируются все последующие содержимое. Ничего не возвращает. Пример Функция возвращает список ссылок на объекты по указанному аспекту указанного объекта, обрамляемый при необходимости префиксом prefix (открывающий тэг), постфиксом postfix (закрывающий тэг), и разделенные текстом delim (по умолчанию запятая). <#FUNC AspList=(PARAM AN O delim prefix postfix; PARAM O=(OBJ) delim=", "; FORALLOBJ(AN) O=(O) ((prefix) (REFER PAGE ATAG="title='Перейти'" (ASPECT NICKNAME|NAME)) (postfix) (BREAK) (delim)\ ) ) >См. также: B, Составные примитивы. , Энергичные примитивы., CAT - Конкатенация строк<#CAT [\] {text[\]}* >
Описание Преобразует текст значений аргументов в строки и соединяет их в единый текст. В значениях аргументов expression переводы строк заменяются на символ 'пробел' - текст аргумента пакуется в одну строку. Обратный слэш ("\") перед первым аргументом или между аргументами выполняет роль символа перевода строки, которые подставляются в текст результата. Возвращает полученный таким образом текст. Пример Функция возвращает относительный путь к файлу гифа с указанным именем. <#FUNC FindImgFile=(CAT (OR(FILEEXIST((PATH TYPE=DBASE)"Img\"(1)".gif")&("Img\"(1)".gif")) (FILEEXIST((PATH TYPE=DBASE)(1)".gif")&((1)".gif")) (FILEEXIST((PATH TYPE=HOME)"Img\"(1)".gif")) ) ) >См. также: C, Строчные операции, Энергичные примитивы., Простые примитивы., CLASS - Получение идентификатора класса<#CLASS [{[N=]object-name
[C=]class-name} | O=object] >
Описание Определяет числовой идентификатор объекта - словаря (класса указанного объекта) текущей БД. Объект может быть указан числовым идентификатором object либо своим именем object-name и именем своего класса class-name, без атрибутов N,C, ожидается в качестве первого и второго аргумента. По умолчанию используется текущий объект текущей БД. В случае успеха возвращает числовой идентификатор объекта - словаря (класса указанного объекта), иначе пусто (#0). Пример Функция ClassName возвращает имя класса указанного или текущего объекта. <#FUNC ClassName=(PARAM O; PARAM O=(OBJ); (NAME(CLASS O=(O))) ) >См. также: C, Просмотр и навигация по БД, Ленивые примитивы., Простые примитивы., CLOSE - Закрытие БД<#CLOSE [D=dbname] [TYPE={NOSAVE |
DELETE}]>
Описание Закрывает БД dbname с возможным сохранением или удалением. Без атрибута TYPE БД сохраняется в ассоциированном с БД файле. В зависимости от значения атрибута TYPE:
По умолчанию сохраняет и закрывает текущую БД. Ничего не возвращает. Пример Закрываем БД "MyDB.ab" и удаляем ассоциированный с БД файл. <#CLOSE "MyDB.ab" TYPE=DELETE>См. также: C, Операции со всей базой данных., Ленивые примитивы., Простые примитивы., CODE - Получение текста DDL-кода БД полностью или частично<#CODE [TYPE={ALL | DATA | STRUCT |
{OBJ [{N=object-name C=class-name} |
O=object]} | {CLA C=class-name} | {REL
R=relation-name}}] [D=dbname]>
Описание Возвращает текст на языке описания данных (DDL-код) содержимого БД dbname или текущей (по умолчанию) полностью или частично. В зависимости от значения аргумента атрибута TYPE возвращается:
Пример Загружаем в текущую БД DDL-код объектов класса "Личность" из БД "AIS.AB" <#LOAD TEXT=(CODE D=((XBASE)"Test\AIS.AB") TYPE=CLA C="Личность" )>См. также: C, Операции со всей базой данных., Ленивые примитивы., Простые примитивы., COMP - Строковое сравнение<#COMP source pattern>
Описание Сравнивает две строки c учетом регистра. Возвращает результат сравнения в числовом виде:
Пример Функция GtList1 возвращает список строк текста txt, строки которых больше указанной строки str (сравнение без учета регистра). <#FUNC GtList1=(PARAM list str; SCAN TEXT=(list) AS=LINES INIT=(pos=1) (GT (COMP(VALUE)(str)) 0 (LIST res APP=(VALUE))); (res) ) >См. также: C, Операции сравнения., Ленивые примитивы., Простые примитивы., COMPIC - Строковое сравнение без учета регистра<#COMPIC source pattern>
Описание Сравнивает две строки без учета регистра. Возвращает результат сравнения в числовом виде:
Пример Функция GtList2 возвращает список строк текста txt, строки которых больше указанной строки str (сравнение c учетом регистра). <#FUNC GtList2=(PARAM list str; SCAN TEXT=(list) AS=LINES INIT=(pos=1) (GT (COMPIC(VALUE)(str)) 0 (LIST res APP=(VALUE))); (res) ) >См. также: C, Операции сравнения., Ленивые примитивы., Простые примитивы., COND - Выбор действия по условию<#COND {condition onmatch-action}+ [default-action]
>
Описание Последовательно проверяет каждое из представленных условий condition. При выполнении одного из условий выполняется единственное действие onmatch-action. Если не выполняется ни одно из условий, выполняется действие по умолчанию default-action. Возвращает результат выполненного действия. Пример Функция Save - сохраняет в указанный или текущий файл всю БД целиком или только указанный класс. <#FUNC Save=(PARAM File Class; COND(Class) (COND(File)(SAVE FILE=(File) TYPE=CLA C=(Class)) (SAVE FILE=((PATH TYPE=DBASE)"AB\"(Class)".ab") TYPE=CLA C=(Class)) ) (COND(File)(SAVE FILE=(File)) (SAVE) ) ) >См. также: C, Условные операторы., Ленивые примитивы., Простые примитивы., CONV - Преобразования строки, заданной выражением<#CONV {{UPP | LOW | ARRANGE | SORT |
W2D | D2W | ENCODE | DECODE | NAMECHK |
IDCHK | NAMEVER} = text} | {MATCH=text
MASK=mask}>
Описание В соответствии с атрибутом производит различные преобразования текста:
Возвращает результат преобразования текста. Пример Функция MaskList возвращает только строки исходного текста text соответствующие маске mask. <#FUNC MaskList=(PARAM text mask; CONV MATCH=(text) MASK=(mask) ) >См. также: C, Строчные операции, Ленивые примитивы., Простые примитивы., DBASE - Получение пути к файлу текущей БД<#DBASE>
Описание Возвращает полный путь к файлу текущей БД, если с текущей БД ассоциирован файл, иначе пусто. Пример <#SET CurrDB=(DBASE)>См. также: D, Просмотр и навигация по БД, Энергичные примитивы., Простые примитивы., DIAL_ASK - Диалог подтверждения или отказа<#DIAL_ASK [[PROMPT=]prompt]
[[YES=]positive-ansver]>
Описание Выдает пользователю диалог с информационным сообщением prompt для подтверждения или отказа. Возвращает в случае подтверждения пользователем positive-ansver или по умолчанию строку YES, иначе пусто. Примечания:Параметры могут быть либо все позиционные, либо все ключевые. Пример <#COND (DIAL_ASK "Удалить текущую БД?") (CLOSE TYPE=DELETE) >См. также: D, Диалоги с пользователем., Ленивые примитивы., Простые примитивы., DIAL_INFO - Диалог с информационным сообщением<#DIAL_INFO [[PROMPT=]prompt] >
Описание Выдает пользователю информационное сообщение. Ничего не возвращает. Пример <#DIAL_INFO "ОШИБКА! Повторите ввод">См. также: D, Диалоги с пользователем., Ленивые примитивы., Простые примитивы., DIAL_INPUT - Диалог ввода с информационным сообщением<#DIAL_INPUT [[CAPT=]caption]
[[PROMPT=]prompt] [[INIT=]init-string] >
Описание Выдает пользователю диалог ввода с заголовком caption подсказкой prompt и значением по умолчанию init-string. Возвращает введенное пользователем значение. Если ввод отменен (кнопка [Cancel]), возвращается значение по умолчанию init-string. Примечания:Параметры могут быть либо все позиционные, либо все ключевые. Пример <#DIAL_INPUT "Ввод имени" "Имя:" "">См. также: D, Диалоги с пользователем., Ленивые примитивы., Простые примитивы., DIV - Арифметическое деление<#DIV numeric-expression-1 numeric-expression-2
>
Описание Производит деление числа divider на число devisor. Отсутствующие аргументы и нечисловые значения указанных аргументов заменяются нулем (0). Возвращает результат деления, если делитель не равен нулю, иначе - максимально допустимое положительное действительное число. Пример <#SET Len=(DIV (x) 2)>См. также: D, Арифметические операции., Ленивые примитивы., Простые примитивы., DO - Выполнение последовательности действий<#DO {action}+ >
Описание Выполняет заданную последовательность действий. Возвращает результат последнего действия. Пример Функция Menu возвращает ссылку с гифом. <#FUNC Menu=(DO (PARAM mac gif bar hint tag) (t1=(r_body (gif) (bar) (hint))) ((tag) (COND (AND (IS(MACNAME)(mac))(IS(D)(DBASE) Y "" Y )(EQ(ENV O)(O))) (t1) (AND (O)(D)) (REFER M=(mac) D=(D) O=(O) ATAG=("title='"(hint)"'") (t1)) (O) (REFER M=(mac) O=(O) ATAG=("title='"(hint)"'") (t1)) (D) (REFER M=(mac) D=(D) ATAG=("title='"(hint)"'") (t1)) (REFER M=(mac) ATAG=("title='"(hint)"'") (t1)) ) ) ) >См. также: D, Ленивые примитивы., Простые примитивы., ELSE - Отделение тела блока 'ИНАЧЕ' внутри условия<#{IF | IFNOT} condition> [then-body]
[<#ELSE> [else-body]]<#/>
Описание Отделяет блок else-body внутри IF, IFNOT. Пример <#IF (FILEEXIST "MyDB.ab")> <#LOAD "MyDB.ab"> <#ELSE> <#ERROR "Файл MyDB.ab отсутствует!"> </#>См. также: E, Условные операторы., Составные примитивы. , Энергичные примитивы., EMPTY - Проверка на пустоту аспекта объекта<#EMPTY [[AN=]aspect-name | A=aspect]
[[O=]object] [D=dbname]>
Описание Проверяет, имеет ли объект связи по аспекту. Аспект может быть указан числовым идентификатором aspect или своим именем aspect-name, без атрибута AN ожидается в качестве первого аргумента. По умолчанию используется текущий аспект. Объект может быть указан числовым идентификатором object, без атрибута O ожидается в качестве второго аргумента. По умолчанию используется текущий объект. Если указана БД dbname, отличная от текущей, то необходимо явно указывать объект и аспект. По умолчанию используется текущая БД. Возвращает непустое значение (символ 'пробел'), если указанный аспект объекта пустой (отсутствуют связи по аспекту объекта), иначе пусто. Пример Функция NodeType возвращает тип узла дерева. <FUNC NodeType=(PARAM O;PARAM O=(OBJ); (COND(EMPTY(APartOf) O=(O)) "r" (COND(HelpIsLast(O))"l" "t")) ) >См. также: E, Просмотр и навигация по БД, Ленивые примитивы., Простые примитивы., ENV - Операции с массивом параметров вызова страницы<#ENV {{[NUM=]index} | {[KEY=]name}}*
[{[KEY=]{# | #L | #C}} | {LINES={index
| name}} | {SIZE={index | name}} |
{HAS=name} | {DEL={index | name}} |
{PUT=value} | {APP=value}] >
Описание Производит различные действия с массивом параметров вызова страницы. Параметры вызова страницы передаются в командной строке запроса к БД сразу после указания URL через символ "&" парами вида name=value. При поступлении запроса к БД параметры вызова страницы пакуются в специальный массив. Операция ENV позволяет обращаться с параметрами вызова страницы как с обычным массивом. Для доступа к внутренней структуре значения параметров вызова используется цепочка индексных параметров.
Пример <#FUNC aid=(ENV A) Ob1=(COND (Asp_Back(aid)) (OBJ) (ENV O)) Ob2=(COND (Asp_Back(aid)) (ENV O) (OBJ) ) Obj_Ref_Item=(COND (REFER) ((COND(Mode_Edit) (REFER ACT="_Delk2O" R=(NAME(Asp_Rel(aid))) O1=(Ob1) O2=(Ob2) (img1 gif=delete alt="Удалить СВЯЗЬ с этим объектом!"), " " ) ) (REFER) ) ) >См. также: E, Ленивые примитивы., Простые примитивы., EQ - Числовое сравнение: равно<#EQ numberic-source numberic-pattern
[onmatch-action {numberic-pattern onmatch-action}*
[default-action]]>
Описание Последовательно производит числовое сравнение 'равно' значения первого аргумента numberic-source со значением четных аргументов numberic-pattern. Нечисловые значения исходного выражения или образца заменяются нулем (0). Если найден аргумент numberic-pattern, удовлетворяющий условию сравнения, выполняется единственное действие onmatch-action. В случае неуспеха операции сравнения, выполняется действие default-action. Возвращает либо результат выполненного действия, если оно указано, либо непустое значение (символ 'пробел'), если указаны всего два аргумента и результат сравнения - истина, либо пусто. Пример Функция ErrorText возвращает текст ошибки по ее номеру. <#FUNC ErrorText=(PARAM errnum; EQ(errnum) 1 "Отсутствует идентификатор" 2 "Неверно задан идентификатор" 3 "Отсутствует описание" "Неизвестная ошибка" ) >См. также: E, Операции сравнения., Ленивые примитивы., Простые примитивы., ERROR - Операции с массивом ошибок<#ERROR {{[NUM=]index} |
{[KEY=]name}}* [{[KEY=]{# | #L | #C}}
| {LINES={index | name}} | {SIZE={index |
name}} | {HAS=name} | {DEL={index |
name}} | {PUT=value} | {APP=value}] >
Описание Производит различные действия с потоком ошибок в зависимости от параметров. Передача и обработка ошибок, возникающих внутри макросов и функций осуществляется через специальный массив - поток ошибок. В отличие от глобальных переменных время жизни потока ошибок ограничено - перед началом формирования каждой страницы поток ошибок автоматически очищается. Операция ERROR позволяет обращаться с потоком ошибок как с обычным массивом.
Пример <#ERROR PUT="Ошибка 1"> <#ERROR APP="Ошибка 2"> <#ERROR>См. также: E, Энергичные примитивы., Простые примитивы., EXEC - Выполнение внешней программы<#EXEC [PATH=]path [[ARG=]parameters]
[TYPE=[START | EXPLORE | PRINT | CMD |
OVER | DETACH | NOWAIT | WAIT]] >
Описание Выполняет одно из действий в соответствии со значением атрибута TYPE. По умолчанию TYPE=START. С атрибутом PATH или без него, первым аргументом, в зависимости от аргумента атрибута TYPE, ожидается path - это может быть команда ОС либо имя файла программы, документа или папки. Для аргументов атрибута 'TYPE={OVER | DETACH | NOWAIT | WAIT}' с атрибутом ARG или без него, вторым аргументом, могут быть указаны параметры parameters передаваемые программе при вызове - это строка в которой параметры должны быть разделены символами 'пробел', общая длина строки не должна превышать 260 символов.
Коды возможных ошибок:
Для поиска указанного файла path используется стандартный алгоритм ОС. Если в имени файла отсутствует расширение или точка, ищет точное имя файла. Если файл не найден, ищет файл сначала с расширением '.exe', потом '.com', затем '.bat'. Если же расширение имеется, ищет только точное имя файла. Если имеется точка без расширения, ищет только имя файла без расширения. Если в имени файла явно не указан путь, ищет сначала в директории откуда запущено текущее приложение (Абриаль), затем в текущей директории, затем в директории Windows \System, затем директории Windows, далее в директориях из списка переменной окружающей среды ОС 'PATH'. За исключением TYPE=OVER, после запуска активизируется и показывается окно текущего приложения (Абриаль). Если окно минимизировано или максимизировано, восстанавливает к его первоначальному размеру и положению на экране. Пример Функция Print запускает печать документа. <#FUNC Print=(PARAM File; EXEC (File) TYPE=PRINT; ) >См. также: E, Ленивые примитивы., Простые примитивы., FILE - Операции с файлами<#FILE [APP | IN | OUT | REC |
NDX | LIST | ALL | CLOSE | DEL | END |
GET | LINES | ON | SAVE=]file-id
{{[NUM=]index} | {[KEY=]name}}*
[{[KEY=]{# | #L | #C}} {LINES={index |
name}} | {SIZE={index | name}} |
{HAS=name} | {DEL={index | name}} |
{PUT=value} | {APP=value} |
{SAVEAS=file-name}} [PATH=file-name]
[FROM=in-file-name] [TO=out-file-name]
[SIZE=max-size] >
Описание Производит различние операции с текстовыми файлами в зависимости от указанных параметров. Обращение к файлу организовано через идентификаторы файлов - любое допустимое уникальное имя переменной. Идентификатор файла в операции FILE доступен в любом макросе или функции подобно глобальной переменной с момента открытия файла до момента закрытия файла. Любой операции доступа к файлу должна предшествовать операция открытия файла. Способ открытия файла определяет способ доступа к содержимому файла. Некоторые операции допустимы только при одном определенном способе открытия файла. Операции открытия файла в общем виде:
1-3) открытие файла с произвольным доступом к содержимому для чтения и записи. Содержимое файла рассматривается как массив с именем идентификатора файла. Идентификатор файла и тип доступа к содержимому файла задается атрибутами:
Если предполагается, чтение и запись будут производиться в один и тот же файл, то путь к файлу может быть указан одним атрибутом PATH. Если же предполагается, что чтение будет производиться из одного файла, а запись изменений в другой, то пути к входному и выходному файлам могут быть указаны соответственно с атрибутами FROM и TO или в комбинациях: PATH, TO либо FROM, PATH. Если путь не задан (не указаны атрибуты PATH, FROM, TO) с файлом можно работать в памяти как с обычным массивом, т.е открывается пустой файл, затем используется как временное хранилище и никуда не сохраняется в конце. Принципиальное отличие от переменной - необходимость открытия, где указывается тип файла. Практическое отличие - более эффективная работа с большими файлами в памяти. 4-5) - открытие файла с последовательным доступом только для записи (построчная запись). Содержимое файла рассматривается как текст, очередная операция записи дописывает порцию текста с новой строки в конец файла. Идентификатор файла задается атрибутами:
Выходной файл должен быть указан атрибутом PATH или TO. 6) - открытие файла с последовательным доступом только для чтения (построчное чтение). Идентификатор файла задается атрибутом IN. Входной файл должен быть указан атрибутом PATH или FROM. Файлы, открытые с атрибутами REC, NDX, LIST рассматриваются как массивы. Для них допустимы операции с массивами использующиеся в GLOBALS, LOCALS ..), вместо имен переменных/массивов задаются идентификаторы файлов. Все опрерации открытия файлов в случае успеха возвращают указанный идентификатор файла. Операции чтения:
Операции записи:
Удаление элемента массива:
Сохранение файла:
Закрытие файла:
Получение информации об открытых файлах.
Информация об открытых файлах возвращается в виде структуры:
Другие:
Пример: Разные действия с глобальными переменными и настройками. <#FUNC // открыть Globs_Open=(FILE REC=Globs PATH=(Data_Path Globals ini) SIZE=400;) // получить указнанный именными индексами элемент Globs_Get=(FILE Globs KEY=(1) KEY=(2)) // получить значение Globs_Val=(FILE Globs KEY=(1) KEY=VAL) // сохранить Globs_Put=(FILE Globs KEY=(1) KEY=(2) PUT=(3)) // значение сохранить Globs_Put_Val=(Globs_Put(1) VAL (2);GLOBALS (1) PUT=(2);FILE SAVE=Globs) Globs_Name=(FILE Globs KEY=(1) KEY=NAME) // Наименование Globs_Size=(FILE Globs KEY=(1) KEY=SIZE) // ширина поля редактир-я Globs_Sav=(FILE Globs KEY=(1) KEY=SAV) // сохранять ли? Globs_Load=(/// загрузка в память сохраненных глобалов из файла Globs_Open; /// открыли файл глобалов SCAN KEYFILE=Globs ( // сканируем файл GLOBALS (KEY) PUT=(VALUE KEY=VAL); // сохраняем у всех элементов атрибут VAL (DBG&DIAL_INFO ("Берем Глобал=" (KEY) " со значением="(VALUE KEY=VAL) \ ,GLOBALS (KEY) ) ); ); ) Globs_Save=( // сохранение в файле сохраняемых глобалов и самого файла Globs_Open; SCAN TEXT=(GLOBALS) AS=REC ( val=VAlUE; COND (Globs_Sav(KEY)) // Если там есть такой элемент с непустым атрибутом SAV (Globs_Put_Val(KEY)(val)); // то сохраняем в нем ); FILE SAVE=Globs; // и наконец сохраняем сам файл ) Globs_New_Elem=( // создаем элемент с именем Key значением Val // названием Nam размером редакт-я Siz PARAM Key Val Nam Siz Sav; FILE Globs KEY=(Key) PUT=(REC NAME (Nam) VAL (Val) SIZE (Siz) SAV (Sav)); // то сохраняем в нем IF (Sav) // если есть признак сохранения - сохраняем за одно и сам файл (FILE SAVE=Globs; ) ) > FILEAPPEND - Добавление текста в конец файла<#FILEAPPEND file-name appendix-text>
Описание Дописывает в конец файла file-name текст appendix-text. В случае успеха возвращает имя файла без изменений, иначе пусто. Пример Дописываем текст файла "text.txt" в конец "result.txt", в случае неудачи генерируем ошибку. <#IFNOT (FILEAPPEND "result.txt" (FILELOAD "text.txt"))> <#ERROR "Ошибка записи"> <#/>См. также: F, Операции с файлами., Ленивые примитивы., Простые примитивы., FILEEXIST - Проверка наличия файла<#FILEEXIST file-name>
Описание Проверяет наличие файла по указанному пути file-name. Возвращает имя файла без изменений, если файл существует, иначе пусто. Пример Выводим сообщение об ошибке, если указанный файл отсутствует. <#IFNOT (FILEEXIST (FileName))> <#ERROR (CAT "Ошибка! " (FileName) " отсутствует!")> <#/>См. также: F, Операции с файлами., Ленивые примитивы., Простые примитивы., FILELOAD - Получение текста файла<#FILELOAD file-name>
Описание В случае успеха возвращает текст содержимого указанного текстового файла file-name, иначе пусто. Пример Переменной ftext присваиваем текст содержимого файла "Mytext.txt" из текущей директории. <#SET ftext=(FILELOAD "Mytext.txt")>См. также: F, Операции с файлами., Ленивые примитивы., Простые примитивы., FILESAVE - Создание текстового файла и запись текста файла<#FILESAVE file-name text>
Описание Создает текстовый файл с именем file-name, записывает в него указанный текст text. В случае успеха возвращает имя файла без изменений, иначе пусто. Пример Функция BackUp создает резервную копию файла, который указан первым аргументом. <#FUNC BackUp=(PARAM File; FILESAVE (PATH CHANGE=(File) TO=".bak") (FILELOAD (File))) >См. также: F, Операции с файлами., Ленивые примитивы., Простые примитивы., FIND - Поиск подстроки в строке<#FIND source substring>
Описание Производит поиск первого вхождения подстроки substring в исходной строке source. Возвращает номер позиции первого символа подстроки substring в исходной строке source, начиная с единицы, если вхождение найдено, иначе пусто (0). Пример Получаем позицию "." в строке (fname) <#IF (pointpos=(FIND (fname) "."))> найдена "." в позиции <#pointpos> <#ELSE> "." отсутствует <#/>См. также: F, Строчные операции, Ленивые примитивы., Простые примитивы., FOR - Цикл<#FOR initialization condition iteration
[body] > [complex-body] <#/>
Описание Выполняет тело цикла до тех пор, пока выполняется условие condition. Аргументом init-action может быть указано выражение, которое выполняется только перед началом выполнения итераций. Аргументом condition должно быть указано выражение, представляющее собой условие выполнения тела цикла. Если в результате вычисления выражения condition возвращается пустое значение, очередная итерация не выполняется, цикл заканчивается. Аргументом iteration может быть указано выражение, которое выполняется перед проверкой условия condition после очередного шага цикла. Последним аргументом, тело цикла body может быть указано внутри простого тега в функциональном стиле. Возвращает результат выражения init-action объединенный с вычисленным для каждой итерации телом цикла, если оно указано, внутри простого тега, затем внутри сложного тега. Пример Функция SortByNick упорядочивает по имени заголовка подразделы указанного раздела Part. <#FUNC SortByNick=(PARAM Part; PARAM Part=(OBJ); List=(CONV SORT=(FORALLOBJ(AParts) O=(Part) ("Nick="(HelpTitle)" O1="(OBJ)\))); FOR(i=1 sz=(ASPSIZE(AParts)))(LE(i)(sz))(ADD i 1) (obj=(LOCALS List (i) "O1") dlk=(_DELK R=PartOf O1=(obj) O2=(Part)) lnk=(_LINK R=PartOf O1=(obj) O2=(Part)) ) ) >См. также: F, Операторы цикла., Составные примитивы. , Энергичные примитивы., FORALLASP - Цикл по всем аспектам объекта<#FORALLASP [{[N=]object-name
[C=]class-name} | O=object]
[[RET=]body] > [complex-body] <#/>
Описание В теле цикла поочередно для каждого шага устанавливаются текущими все возможные аспекты объекта текущей БД, включая все наследованные, и в том числе от универсального класса TOBJ. Объект может быть указан числовым идентификатором object или своим именем object-name и именем своего класса class-name, без атрибутов N,C, ожидается в качестве первого и второго аргументов. По умолчанию используется текущий объект текущей БД. С атрибутом RET, или без него последним аргументом, тело цикла body может быть указано внутри простого тега в функциональном стиле. В случае успеха возвращает объединенный результат вычислений для каждой итерации тела цикла, сначала внутри простого тега, затем внутри сложного тега. Пример Функция AspNames возвращает список имен аспектов указанного класса. <#FUNC AspNames=(PARAM classname; FORALLASP N=(classname) C="CLASS" ((NAME)\) ) >См. также: F, Операторы цикла., Составные примитивы. , Ленивые примитивы., FORALLOBJ - Цикл по всем объектам - значениям атрибута<#FORALLOBJ [AN=]aspect-name |
A=aspect] [{N=object-name
C=class-name} | O=object] [D=dbname]
[TO=target-aspect-name] [POS=segment-start]
[NUM=segment-size] [BY=step]
[INIT=initialization] [ITER=iteration]
[FROM=begin-condition] [FROMOBJ=begin-obj]
[IF=step-condition] [UNTIL=until-condition]
[WHILE=while-condition] [[RET=]body] >
[complex-body] <#/>
Описание Поочередно перебирает все связи указанного объекта по исходному аспекту. В теле цикла, внутри сегмента итераций, устанавливает текущим объект, участвующий в очередной связи по целевому аспекту. Для бинарных связей целевым аспектом является аспект, альтернативный исходному. Таким образом, в теле цикла поочередно для каждой связи итерации устанавливает текущими объекты - значения атрибута указанного объекта. Итерации не начинаются (не вычисляется тело цикла), если:
Итерации заканчиваются, если:
Очередной шаг пропускается (тело цикла не вычисляется), если выражение, указанное с атрибутом IF принимает значение 'ложь' (пусто). Сегмент итераций может быть задан с атрибутом POS позицией segment-start первой связи, начиная с единицы и, с атрибутом NUM, размером segment-size. По умолчанию POS=1 - сканирование начинается с первой наличной связи. По умолчанию NUM сканируются все наличные связи начиная с указанной в POS позиции. Если с атрибутом BY=step указан шаг итераций, то внутри сегмента пропускаются step-1 связь (берется каждая step связь, начиная с POS) С атрибутом INIT может быть указано выражение, которое вычисляется один раз перед началом цикла, вычисленное значение добавляется к общему результату оператора перед результатом вычислений тела цикла. С атрибутом ITER может быть указано выражение, которое вычисляется на каждом шаге итераций, не влияет на результат оператора. P>Целевой аспект может быть указан с атрибутом TO своим именем target-aspect-name. Если целевой аспект не указан, и по умолчанию, используется целевой аспект, альтернативный исходному. Для бинарных аспектов достаточно указать исходный аспект, для многоместных аспектов необходимо задавать целевой аспект.Объект может быть указан с атрибутом O числовым идентификатором object либо с атрибутом N своим именем object-name и с атрибутом C именем своего класса class-name. По умолчанию используется текущий объект. Если с атрибутом D указана БД dbname, отличная от текущей, то необходимо явно указывать аспект и объект. По умолчанию используется текущая БД. С атрибутом RET, или без него, последним аргументом, тело цикла body может быть указано внутри простого тега в функциональном стиле. В случае успеха возвращает объединенный результат вычислений тела цикла на каждом шаге итераций, сначала внутри простого тега, затем внутри сложного тега. Пример Выводим список увлечений конкретной личности. <#FORALLOBJ AN="увлеч\увлечения" N="Иванов ИИ" C="Личность" D=((XBASE)"Test\AIS.ab")> <#NAME> <#>См. также: F, Операторы цикла., Составные примитивы., Ленивые примитивы., FORASP - Цикл по всем связям аспекта<#FORASP [[AN=]aspect-name |
A=aspect] [{N=object-name
C=class-name} | O=object] [D=dbname]
[POS=segment-start] [NUM=segment-size]
[INIT=initialization] [FROM=begin-condition]
[FROMOBJ=begin-obj] [IF=step-condition]
[BY=step] [ITER=iteration]
[UNTIL=until-condition] [WHILE=while-condition]
[[RET=]body] > [complex-body] <#/>
Описание Поочередно перебирает все связи указанного объекта по исходному аспекту. В теле цикла, для каждой связи внутри сегмента итераций устанавливает текущими указанные объект и исходный аспект. Итерации не начинаются (не вычисляется тело цикла), если:
Итерации заканчиваются, если:
Очередной шаг пропускается (тело цикла не вычисляется), если выражение, указанное с атрибутом IF принимает значение 'ложь' (пусто). Сегмент итераций может быть задан с атрибутом POS позицией segment-start первой связи, начиная с единицы и, с атрибутом NUM, размером segment-size. По умолчанию POS=1 - сканирование начинается с первой наличной связи. По умолчанию NUM сканируются все наличные связи начиная с указанной в POS позиции. Если с атрибутом BY=step указан шаг итераций, то внутри сегмента пропускаются step-1 связь (берется каждая step связь, начиная с POS) С атрибутом INIT может быть указано выражение, которое вычисляется один раз перед началом цикла, вычисленное значение добавляется к общему результату оператора перед результатом вычислений тела цикла. С атрибутом ITER может быть указано выражение, которое вычисляется на каждом шаге итераций, не влияет на результат оператора. Исходный аспект может быть указан числовым идентификатором aspect или своим именем aspect-name, без атрибута AN ожидается в качестве первого аргумента. По умолчанию в качестве исходного аспекта используется текущий. Объект может быть указан с атрибутом O числовым идентификатором object либо с атрибутом N своим именем object-name и с атрибутом C именем своего класса class-name. По умолчанию используется текущий объект. Если с атрибутом D=dbname указана БД, отличная от текущей, то необходимо явно указывать аспект и объект. По умолчанию используется текущая БД. С атрибутом RET, или без него, последним аргументом, тело цикла body может быть указано внутри простого тега в функциональном стиле. В случае успеха возвращает объединенный результат вычислений тела цикла на каждом шаге итераций, сначала внутри простого тега, затем внутри сложного тега. Пример <#FORASP AN="уч-ст\ученая степень" N="Иванов ИИ" C="Личность" D=((XBASE)"Test\AIS.ab")> <#NAME> (<#ASP AN="фио\ФИО" ТО="фио\ФИО для">) <#ASP AN="уч-зв\ученое звание" TO="уч-зв\об-ты уч-зв"> <#ASP TO="уч-ст\об-ты уч-ст"> <#ASP TO="уч-ст\область наук"> <#/>См. также: F, Операторы цикла., Составные примитивы. , Ленивые примитивы., FORCLASSES - Цикл по всем классам БД<#FORCLASSES [D=dbname] [[RET=]body]
> [complex-body] <#/>
Описание В теле цикла поочередно устанавливает текущими объекты - дескрипторы всех пользовательских классов БД dbname или текущей, по умолчанию. С атрибутом RET, или без него последним аргументом, тело цикла body может быть указано внутри простого тега в функциональном стиле. В случае успеха возвращает объединенный результат вычислений для каждой итерации тела цикла, если оно указано, сначала внутри простого тега, затем внутри сложного тега. Пример Выводим имена всех пользовательских классов БД "AIS.ab". <#FORCLASSES D=((XBASE)"Test\AIS.ab") RET="<br>"> <#NAME> <#/>См. также: F, Операторы цикла., Составные примитивы. , Ленивые примитивы., FORDB - Установка текущей БД<#FORDB [D=]dbname [[RET=]body] >
[complex-body] <#/>
Описание В теле body устанавливает текущей указанную БД dbname. С атрибутом RET, или без него последним аргументом, тело body может быть указано внутри простого тега в функциональном стиле. В случае успеха возвращает объединенный результат вычисления тела body, если оно указано, внутри простого тега, затем внутри сложного тега. Пример <#FORDB D=(NewDB)> <#HS_Act F="NewHelp" New_N=(New_N) New_C="DeveloperMan" New_N1=(New_N1) New_N2=(New_N2)> <#_LINK AN=(APartOf) O1=(OBJ "AssocCreation" "DeveloperMan") O2=(RESULT)> <#/>См. также: F, Операторы устанавливающие контекст, Составные примитивы. , Ленивые примитивы., FOREACH - Цикл по всем объектам - значениям атрибута<#FOREACH [AN=]aspect-name |
A=aspect] [{N=object-name
C=class-name} | O=object] [D=dbname]
[TO=target-aspect-name] [POS=segment-start]
[NUM=segment-size] [BY=step]
[INIT=initialization] [ITER=iteration]
[FROM=begin-condition] [FROMOBJ=begin-obj]
[IF=step-condition] [UNTIL=until-condition]
[WHILE=while-condition] [[RET=]body] >
[complex-body] <#/>
Описание Поочередно перебирает все связи указанного объекта по исходному аспекту. В теле цикла, внутри сегмента итераций, устанавливает текущим объект, участвующий в очередной связи по целевому аспекту. Для бинарных связей целевым аспектом является аспект, альтернативный исходному. Таким образом, в теле цикла поочередно для каждой связи итерации устанавливает текущими объекты - значения атрибута указанного объекта. Итерации не начинаются (не вычисляется тело цикла), если:
Итерации заканчиваются, если:
Очередной шаг пропускается (тело цикла не вычисляется), если выражение, указанное с атрибутом IF принимает значение 'ложь' (пусто). Сегмент итераций может быть задан с атрибутом POS позицией segment-start первой связи, начиная с единицы и, с атрибутом NUM, размером segment-size. По умолчанию POS=1 - сканирование начинается с первой наличной связи. По умолчанию NUM сканируются все наличные связи начиная с указанной в POS позиции. Если с атрибутом BY=step указан шаг итераций, то внутри сегмента пропускаются step-1 связь (берется каждая step связь, начиная с POS) С атрибутом INIT может быть указано выражение, которое вычисляется один раз перед началом цикла, вычисленное значение добавляется к общему результату оператора перед результатом вычислений тела цикла. С атрибутом ITER может быть указано выражение, которое вычисляется на каждом шаге итераций, не влияет на результат оператора. P>Целевой аспект может быть указан с атрибутом TO своим именем target-aspect-name. Если целевой аспект не указан, и по умолчанию, используется целевой аспект, альтернативный исходному. Для бинарных аспектов достаточно указать исходный аспект, для многоместных аспектов необходимо задавать целевой аспект.Объект может быть указан с атрибутом O числовым идентификатором object либо с атрибутом N своим именем object-name и с атрибутом C именем своего класса class-name. По умолчанию используется текущий объект. Если с атрибутом D указана БД dbname, отличная от текущей, то необходимо явно указывать аспект и объект. По умолчанию используется текущая БД. С атрибутом RET, или без него, последним аргументом, тело цикла body может быть указано внутри простого тега в функциональном стиле. В случае успеха возвращает объединенный результат вычислений тела цикла на каждом шаге итераций, сначала внутри простого тега, затем внутри сложного тега. Пример Выводим список увлечений конкретной личности. <#FOREACH AN="увлеч\увлечения" N="Иванов ИИ" C="Личность" D=((XBASE)"Test\AIS.ab")> <#NAME> <#>См. также: F, Операторы цикла., Составные примитивы., Ленивые примитивы., FORLINE - Цикл по всем связям аспекта<#FORLINE [[AN=]aspect-name |
A=aspect] [{N=object-name
C=class-name} | O=object] [D=dbname]
[POS=segment-start] [NUM=segment-size]
[INIT=initialization] [FROM=begin-condition]
[FROMOBJ=begin-obj] [IF=step-condition]
[BY=step-size] [ITER=iteration]
[UNTIL=until-condition] [WHILE=while-condition]
[[RET=]body] > [complex-body] <#/>
Описание Поочередно перебирает все связи указанного объекта по исходному аспекту. В теле цикла, для каждой связи внутри сегмента итераций устанавливает текущими указанные объект и исходный аспект. Итерации не начинаются (не вычисляется тело цикла), если:
Итерации заканчиваются, если:
Очередной шаг пропускается (тело цикла не вычисляется), если выражение, указанное с атрибутом IF принимает значение 'ложь' (пусто). Сегмент итераций может быть задан с атрибутом POS позицией segment-start первой связи, начиная с единицы и, с атрибутом NUM, размером segment-size. По умолчанию POS=1 - сканирование начинается с первой наличной связи. По умолчанию NUM сканируются все наличные связи начиная с указанной в POS позиции. Если с атрибутом BY=step указан шаг итераций, то внутри сегмента пропускаются step-1 связь (берется каждая step связь, начиная с POS) С атрибутом INIT может быть указано выражение, которое вычисляется один раз перед началом цикла, вычисленное значение добавляется к общему результату оператора перед результатом вычислений тела цикла. С атрибутом ITER может быть указано выражение, которое вычисляется на каждом шаге итераций, не влияет на результат оператора. Исходный аспект может быть указан числовым идентификатором aspect или своим именем aspect-name, без атрибута AN ожидается в качестве первого аргумента. По умолчанию в качестве исходного аспекта используется текущий. Объект может быть указан с атрибутом O числовым идентификатором object либо с атрибутом N своим именем object-name и с атрибутом C именем своего класса class-name. По умолчанию используется текущий объект. Если с атрибутом D указана БД dbname, отличная от текущей, то необходимо явно указывать аспект и объект. По умолчанию используется текущая БД. С атрибутом RET, или без него, последним аргументом, тело цикла body может быть указано внутри простого тега в функциональном стиле. В случае успеха возвращает объединенный результат вычислений тела цикла на каждом шаге итераций, сначала внутри простого тега, затем внутри сложного тега. Пример <#FORASP AN="уч-ст\ученая степень" N="Иванов ИИ" C="Личность" D=((XBASE)"Test\AIS.ab")> <#NAME> (<#ASP AN="фио\ФИО" ТО="фио\ФИО для">) <#ASP AN="уч-зв\ученое звание" TO="уч-зв\об-ты уч-зв"> <#ASP TO="уч-ст\об-ты уч-ст"> <#ASP TO="уч-ст\область наук"> <#/>См. также: F, Операторы цикла., Составные примитивы. , Ленивые примитивы., FORMEDIT - Редактирование строки<#FORMEDIT [[AN=]aspect-name |
A=aspect] [{[N=]object-name
[C=]class-name}| O=object] [D=dbname]
[LABEL=label] [ROWS=rows] [COLS=cols]
[SIZE=size] [OTHER=other] >
Описание Генерирует форму редактирования значения аспекта заданного объекта с кнопкой подтверждения внесенных изменений, в общем виде: <form name='Fobject_aspect' method='post'
action='ab://ab/D=dbname&O=object&A=aspect&M=method&POS=1'>
где: method-метод формирующий текущую страницу; value-значение аспекта объекта БД dbname. По нажатию кнопки подтверждения, выполняется одно из действий _EDIT или _TEXT. Затем вызывается метод, формирующий текущую страницу (&M=method). Если установлен аспект (текущий или указанный), выполняется действие (&ACT=) _EDIT _VAL=value, иначе выполняется действие (&ACT=)_TEXT _VAL=value. Исходный аспект может быть указан числовым идентификатором aspect или своим именем aspect-name, без атрибута 'AN=' ожидается в качестве первого аргумента. Объект может быть указан числовым идентификатором object или своим именем object-name и именем своего класса class-name, без атрибутов N,C, ожидается в качестве второго и третьего аргумента. По умолчанию используется текущий аспект текущего объекта текущей БД. Если указана БД dbname, отличная от текущей, необходимо явно указывать объект и аспект. Если указаны ROWS или COLS, то формируется тег TEXTAREA для редактирования значения аспекта value с указанным количеством строк rows. <textarea name='_VAL' [rows='rows'] [cols={'cols' | 'size'}] [other]> [value] </textarea> Если rows отрицательный, либо нулевой, либо не указан, то по умолчанию rows=3 (три строки). Ширина области редактирования текста устанавливается либо в columns, если COLS указан, либо в size, если SIZE указан. По умолчанию IE устанавливает стандартную ширину. Если не указаны атрибуты ROWS и COLS, генерирует однострочное поле ввода с шириной size, если SIZE указан. <input type='text' name='_VAL' [size='size'] [other] value='value'> По умолчанию IE устанавливает стандартную ширину. Другие параметры формы ввода задаются аргументом other. ('disabled','maxlength='). Аргументом label устанавливается название кнопки подтверждения По умолчанию LABEL='OK!'. В случае успеха возвращает сформированный тег FORM (форму редактирования значения атрибута), иначе пусто. Пример Выводим форму редактирования ученой степени для личности Иванов ИИ. <br>Ученая степень: <#FORMEDIT AN="уч-ст\ученая степень" N="Иванов ИИ" C="Личность" D=((XBASE)"Test\AIS.ab") LABEL="Изменить">См. также: F, Обращение к БД через HTML-форму, Ленивые примитивы., Простые примитивы., FORNEMPASP - Цикл по всем непустым аспектам объекта<#FORNEMPASP [{[N=]object-name
[C=]class-name} | O=object]
[[RET=]body] > [complex-body] <#/>
Описание В теле цикла поочередно устанавливает текущими все непустые аспекты объекта (имеющие хотя бы одну связь по аспекту объекта). Объект может быть указан своим именем object-name и именем своего класса class-name, без атрибутов N,C, ожидается в качестве первого и второго аргументов. По умолчанию используется текущий объект текущей БД. С атрибутом RET, или без него последним аргументом, тело цикла body может быть указано внутри простого тега в функциональном стиле. В случае успеха возвращает объединенный результат вычислений на каждом шаге тела цикла, если оно указано, сначала внутри простого тега, затем внутри сложного тега. Пример <#FOROBJ (OBJ N="Иванов ИИ" C="Личность") D=((XBASE)"Test\AIS.ab")> <#FORNEMPASP RET="<br>"> <#NAME> <#/> </#>См. также: F, Операторы цикла., Составные примитивы. , Ленивые примитивы., FOROBJ - Установка текущего объекта и аспекта<#FOROBJ [[O=]object] [AN=aspect-name
| A=aspect] [D=dbname] [[RET=]body]
> [complex-body] <#/>
Описание В теле оператора устанавливает текущим объект и аспект. Если указана БД dbname, отличная от текущей, то необходимо явно указывать объект и аспект. По умолчанию используется текущая БД. Объект может быть указан числовым идентификатором object, без атрибута O ожидается в качестве первого аргумента. По умолчанию используется текущий объект. Аспект может быть указан числовым идентификатором aspect или своим именем aspect-name. С атрибутом RET, или без него последним аргументом, тело body может быть указано внутри простого тега в функциональном стиле. В случае успеха возвращает объединенный результат вычисленного тела оператора, если оно указано, сначала внутри простого тега, затем внутри сложного тега. Пример Выводим в виде таблицы свойства класса Names БД "MyDB.ab". <#FOROBJ O=(OBJ N="Names" C="CLASS") D="MyDB.ab" RET="<hr>")> <#OBJFORM> <#/>См. также: F, Операторы устанавливающие контекст, Составные примитивы. , Ленивые примитивы., FUNC - Объявление функций<#FUNC {function-name=function-body}* >
Описание Объявляет функции с именем function-name и телом функции function-body. Ничего не возвращает. Пример <#FUNC HelpTitle=(PARAM O;PARAM O=(OBJ);ASPECT(ATitle) O=(O)|(NAME(O))) HelpText=(PARAM O;PARAM O=(OBJ);ASPECT(AText) O=(O)) >См. также: F, Энергичные примитивы., Простые примитивы., GE - Числовое сравнение: больше или равно<#GE numberic-source numberic-pattern
[onmatch-action {numberic-pattern onmatch-action}*
[default-action]] >
Описание Последовательно производит числовое сравнение 'больше или равно' значения первого аргумента numberic-source со значением четных аргументов numberic-pattern. Нечисловые значения исходного выражения или образца заменяются нулем (0). Если найден аргумент numberic-pattern, удовлетворяющий условию сравнения, выполняется единственное действие onmatch-action. В случае неуспеха операции сравнения, выполняется действие default-action. Возвращает либо результат выполненного действия, если оно указано, либо непустое значение (символ 'пробел'), если указаны всего два аргумента и результат сравнения - истина, либо пусто. Пример Функция WaterTemp возвращает словесное описание температуры воды. <#FUNC WaterTemp=(PARAM t; (GE(t) 100 "кипяток" 80 "очень горячая" 50 "горячая" 30 "теплая" 0 "холодная" "лед" ) ) >См. также: G, Операции сравнения., Ленивые примитивы., Простые примитивы., GLOB - Установка значений глобальным переменным<#GLOB {global-var-name=value}* >
Описание Присваивает глобальным переменным global-var-name вычисленного значения аргумента value. Аргумент value может быть выражением или константой. Ничего не возвращает. Пример <#GLOB GLB_EditMode="Y" GLB_DB=(DBASE) >См. также: G, Ленивые примитивы., Простые примитивы., GLOBALS - Операции с массивом глобальных переменных<#GLOBALS {{[NUM=]index} |
{[KEY=]name}}* [{KEY=]{# | #L | #C}} |
{LINES={index | name}} | {SIZE={index |
name}} | {HAS=name} | {DEL={index |
name}} | {PUT=value} | {APP=value} ]
Описание В зависимости от параметров производит различные операции с глобальными переменными. Глобальные переменные представляют собой элементы самого верхнего уровня массива глобальных переменных. где именам глобальных переменных соответствуют именные индексы, а значениям - значения глобальных переменных. Для доступа к значению глобальной переменной или внутренней структуре переменной используется цепочка индексных параметров.
Пример Выводим значения полей FIO из глобального массива GLB_Array <#FOR(i=1)(LT(i)(N))(ADD i 1) ((i)". "(GLOBALS GLB_Array (i) KEY="FIO")" "\) >См. также: G, Ленивые примитивы., Простые примитивы., GT - Числовое сравнение: больше<#GT numberic-source numberic-pattern
[onmatch-action {numberic-pattern onmatch-action}*
[default-action]] >
Описание Последовательно производит числовое сравнение 'больше' значения первого аргумента numberic-source со значением четных аргументов numberic-pattern. Нечисловые значения исходного выражения или образца заменяются нулем (0). Если найден аргумент numberic-pattern, удовлетворяющий условию сравнения, выполняется единственное действие onmatch-action. В случае неуспеха операции сравнения, выполняется действие default-action. Возвращает либо результат выполненного действия, если оно указано, либо непустое значение (символ 'пробел'), если указаны всего два аргумента и результат сравнения - истина, либо пусто. Пример Функция iref возвращает в виде гифа ссылку на объект. <#FUNC iref=(PARAM gif O hint;PARAM O=(OBJ); (GT(O) 0 (REFER PAGE O=(O) ATAG=("title='"(hint|HelpTitle(O))"'") (img(gif) ("alt='"(hint|HelpTitle(O))"' align='middle'")) ) (img(gif) "style='FILTER: alpha(opacity=40)' align='middle'") ) ) >См. также: G, Операции сравнения., Ленивые примитивы., Простые примитивы., HREF - Формирование ссылки на объект<#HREF [[M=]method | ACT=action]
[{N=object-name C=class-name} |
O=object] [D=dbname] [ATAG=atag]
[{Custom=expression}*] > [reference-image] <#/>
Описание Формирует полную ссылку на объект БД или изображение его значения (A-тег), в общем виде: <a href='ab://ab/[&D=dbname] [&O=object] [&N=object-name&C=class-name] [&M=method] [&ACT=action] [&POS=segment-start] [&NUM=size] [{¶meters}*] ' [atag] < [reference-image] </a>. Значение атрибута 'href=' A-тега формируется аналогично URL/_HREF. Могут быть указаны любые именованные параметры Custom=expression, которые будут включены в ссылку для передачи параметров обрабатывающему методу. В их числе могут быть NUM, POS, определяющие сегмент итераций по умолчанию в циклах обрабатывающего метода. С атрибутом ATAG могут быть указаны дополнительные параметры A-тега. (name=, id=, frame=, title=, methods=, accesskey= ... ). По умолчанию формируется атрибут 'title=' A-тэга, дублирующий текст 'href=' ссылки. Изображение ссылки reference-image внутри сложного тега вычисляется для указанного, или, по умолчанию, для текущего объекта. Возвращает в случае успеха сформированный таким образом A-тег ( изображение/ссылку), иначе пусто. Пример Пункт меню для сохранения БД целиком. <#HREF ACT="_SAVE" ATAG="title='Сохранение изменений внесённых в БД'"> Сохранить <#/>См. также: H-I, Обращение к БД через HTML-ссылку., Составные примитивы. , Ленивые примитивы., IF - Оператор условного выполнения<#IF condition [then-body [else-body]]>
[complex-then-body] [<#ELSE> [complex-else-body]]
<#/>
Описание При выполнении условия (непустом значении первого аргумента) condition выполняет блок then-body, иначе выполняет блок else-body. Тело then-body и else-body могут быть указаны вторым и третьим аргументами внутри простого тега. Возвращает объединенный результат вычисления тела then-body либо else-body, сначала внутри простого тега, затем внутри сложного тега. Пример <#IF (FILEEXIST "MyDB.ab") (OPEN D="MyDB.ab")> <br>Текщая БД: <#DBASE> <#ELSE> <#ERROR "Файл не найден"> <#/>См. также: H-I, Условные операторы., Составные примитивы. , Ленивые примитивы., IFNOT - Оператор условного выполнения<#IFNOT condition [then-body
[else-body]]> [complex-then-body] [<#ELSE>
[complex-else-body]] <#/>
Описание При невыполнении условия (пустом значении первого аргумента) condition выполняет блок then-body, иначе выполняет блок else-body. Тело then-body и else-body могут быть указаны вторым и третьим аргументами внутри простого тега. Возвращает объединенный результат вычисления тела then-body либо else-body, сначала внутри простого тега, затем внутри сложного тега. Пример Обработка результата Функция DeLink_Result удаляет указанную связь. В случае неуспеха возвращает текст ошибки. <#GLOB DeLink_Result=( IFNOT(_DELK D=(D) R=(R) O1=(O1) O2=(O2) ) ("Связь типа" (R) " между " (NAME(O1)) " и " (NAME(O2)) " не удалена/не найдена." ) ) >См. также: H-I, Условные операторы., Составные примитивы. , Ленивые примитивы., IS - Строковое сравнение: равно<#IS source pattern [onmatch-action
{pattern onmatch-action}* [default-action]]>
Описание Последовательно производит строковое сравнение 'равно' значения первого аргумента source со значением четных аргументов pattern. Если найден аргумент pattern, удовлетворяющий условию сравнения, выполняется единственное действие onmatch-action. В случае неуспеха операции сравнения, выполняется действие default-action. Возвращает либо результат выполненного действия, если оно указано, либо непустое значение (символ 'пробел'), если указаны всего два аргумента и результат сравнения - истина, либо пусто. Пример Функция ModeEdit возвращает непусто ("Y"), если включен режим редактирования. <#FUNC ModeEdit=(IS(GLB_Edit_Mode) "YES" "Y" "OK" "Y" ) >См. также: H-I, Операции сравнения., Ленивые примитивы., Простые примитивы., KEY - Сканированное имя ключа<#KEY>
Описание Получает имя ключа на очередном шаге внутри тела цикла SCAN при типе сканирования AS=REC и AS=NAMES. Возвращает имя ключа, сканированное на очередном шаге цикла SCAN. Пример Функция Globs_Save cохраняет в файле глобальные переменные с непустым атрибутом "SAV" в значении переменной. <#FUNC Globs_Save=( FILE REC=Globs PATH=(Globs_Path) SIZE=(GLOBALS #C); SCAN TEXT=(GLOBALS) AS=REC (COND(FILE Globs KEY=(KEY) KEY=SAV) //Если есть элемент с непустым атрибутом SAV (FILE Globs (KEY) VAL PUT=(VALUE)); // то сохраняем ); FILE CLOSE=Globs; ) >См. также: Результаты сканирования текста LE - Числовое сравнение: меньше или равно<#LE numberic-source numberic-pattern
[onmatch-action {numberic-pattern onmatch-action}*
[default-action]]>
Описание Последовательно производит числовое сравнение 'меньше или равно' значения первого аргумента numberic-source со значением четных аргументов numberic-pattern. Нечисловые значения исходного выражения или образца заменяются нулем (0). Если найден аргумент numberic-pattern, удовлетворяющий условию сравнения, выполняется единственное действие onmatch-action. В случае неуспеха операции сравнения, выполняется действие default-action. Возвращает либо результат выполненного действия, если оно указано, либо непустое значение (символ 'пробел'), если указаны всего два аргумента и результат сравнения - истина, либо пусто. Пример Функция Time возвращает название времени суток. <#FUNC Time=(PARAM hour; LE(hour) 4 "ночь" 6 "раннее утро" 11 "утро" 13 "полдень" 17 "день" 23 "вечер" "ночь" ) >См. также: L, Операции сравнения., Ленивые примитивы., Простые примитивы., LEN - Получение длины строки<#LEN expression >
Описание Возвращает длину строки expression. Пример Функция возвращает максимальную длину строки текста text. <#FUNC TextWidth=(PARAM text; SCAN TEXT=(text) AS=LINES (len=(LEN(VALUE)) maxlen=(GT(len)(maxlen)(len)) ) (maxlen) ) >См. также: L, Строчные операции, Ленивые примитивы., Простые примитивы., LIST - Создание списочного массива<#LIST {{[TEXT=]list-item} |
{LIST=list}}* >
Описание Создает списочный массив. Очередным аргументом или атрибутом TEXT может быть указан очередной элемент формируемого списочного массива. Текст указанного значения упаковывается в одну строку и добавляется в список как один элемент массива. Атрибутом LIST может быть задан другой списочный массив, который подключается в формируемый список без предварительной упаковки (1:1). Каждая строка текста указанного значения подключается как отдельный элемент списочного массива. Возвращает собранный таким образом текст списочного массива. Пример <#SET text=(TEXT "Васин ВВ"\"Константинов КК"\"Гаврилов ГГ") list1=(LIST "Иванов ИИ" "Петров ПП") list2=(LIST "Сидоров СС" LIST=(list1)) list3=(LIST LIST=(list2) TEXT=(text)) >См. также: L, Строчные операции, Ленивые примитивы., Простые примитивы. LOAD - Загрузка из файла кода БД<#LOAD [D=dbname] [{FILE=file-name
[SHOW=Y]} | TEXT=ddl-code]>
Описание Загружает текст кода DDL ddl-code или из файла file-name в БД dbname или, по умолчанию, в текущую. С ключом SHOW=Y выводится окно, в котором отображается процесс загрузки в БД текста DDL-кода из указанного файла file-name и кнопками завершения приостановки и продолжения процесса загрузки. По завершению загрузки окно автоматически закрывается. В случае успеха возвращает имя файла file-name без изменений, если текст кода DDL был загружен из файла, непустое значение (символ 'пробел'), если загружен текст кода ddl-code, иначе пусто. Пример Догружаем из файла "C:\Abrial\Bases\MyDataBase.ab" DDL-код в текущую БД, отображаем процесс загрузки. <#LOAD FILE="C:\Abrial\Bases\MyDataBase.ab" SHOW=Y>См. также: L, Операции со всей базой данных., Ленивые примитивы., Простые примитивы., LOCALS - Операции с массивом локальных переменных<#LOCALS {{[NUM=]index} |
{[KEY=]name}}* [{[KEY=]{# | #L |
#C}} | {LINES={index | name}} |
{SIZE={index | name}} | {HAS=name} |
{DEL={index | name}} | {PUT=value} |
{APP=value} ] >
Описание Производит различные операции с локальными переменными в зависимости от указанных параметров. Локальные переменные представляют собой элементы самого верхнего уровня массива локальных переменных. где именам локальных переменных соответствуют именные индексы, а значениям - значения локальных переменных. Для доступа к значению локальной переменной или внутренней структуре переменной используется цепочка индексных параметров.
Пример Функция упорядочивания подразделов хэлпа по заголовку. <#FUNC SortByNick=(PARAM O; PARAM O=(OBJ); List=(CONV SORT=(FORALLOBJ(AParts) O=(O) ("Nick="(HelpTitle)" O1="(OBJ)\))); FOR(i=1 sz=(ASPSIZE(AParts) O=(O)))(LE(i)(sz))(ADD i 1) (nxtobj=(LOCALS List (i) "O1") dlkres=(_DELK R=PartOf O1=(nxtobj) O2=(O)) lnkres=(_LINK R=PartOf O1=(nxtobj) O2=(O)) ) (dlkres)&(lnkres) ) >См. также: G, Ленивые примитивы., Простые примитивы., LT - Числовое сравнение: меньше<#LT numberic-source numberic-pattern
[onmatch-action {numberic-pattern onmatch-action}*
[default-action]] >
Описание Последовательно производит числовое сравнение 'меньше' значения первого аргумента numberic-source со значением четных аргументов numberic-pattern. Нечисловые значения исходного выражения или образца заменяются нулем (0). Если найден аргумент numberic-pattern, удовлетворяющий условию сравнения, выполняется единственное действие onmatch-action. В случае неуспеха операции сравнения, выполняется действие default-action. Возвращает либо результат выполненного действия, если оно указано, либо непустое значение (символ 'пробел'), если указаны всего два аргумента и результат сравнения - истина, либо пусто. Пример Функция img1 выводит рисунок с заданными размерами. <#FUNC img1=(PARAM iname h w; LT (h) 100 (h=100) 600 "" (h=600); LT (w) 200 (w=200) 800 "" (w=800); (img iname ("width="(w)" height="(h))) >См. также: L, Операции сравнения., Ленивые примитивы., Простые примитивы., MACNAME - Получение имени текущего метода<#MACNAME>
Описание Возвращает имя главного метода образующего текущую HTML-страницу. Пример <p>Текущуя HTML-страница формируется методом <#MACNAME></p>См. также: M, Просмотр и навигация по БД, Энергичные примитивы., Простые примитивы., MACRO - Определение макроса<#MACRO macro-name
{parameter-name[=value]}* > [macro-body] <#/>
Описание Задает в тексте тело макроса macro-body с именем macro-name. Если после имени макроса указаны параметры, эти параметры обрабатываются сразу при входе в макрос как аргументы операции PARAM. Второй аргумент MACRO соответвует 1-му аргументу PARAM. Ничего не возвращает. Пример Макрос с параметром 'COL' для формирования в виде таблицы списка имен всех классов текущей БД порциями по указанному в первом параметре (COL) количеству имен в строке. <#MACRO ShowClasses COL> <table><#FORALLOBJ (ITEMS) N=CLASS C=CLASS> <tr> <#PORTION (COL)><td><#(NAME)><#/> <#/></table> <#/>См. также: M, Составные примитивы. , Ленивые примитивы., MOVE - Изменение порядка связей списочного отношения<#MOVE {[AN=]aspect-name |
A=aspect-id} [{N=object-name
C=class-name} | O=object]
{POS=absolute-pos | STEP=offset} >
Описание Перемещает для списочного отношения связь объекта заданного или текущего в аспекте смежного объекта на заданное абсолютно, либо смещением, место. Связь однозначно определяется объектом и аспектом. Аспект может быть задан именем аспекта с атрибутом AN=, или без него первым аргументом, либо числовым идентификатором аспекта с атрибутом A=. Аспект должен быть НЕ списочным аспектом списочного отношения. (Если аспект aspect-name сам списочный, операция теряет смысл, т.к. в остальных аспектах перемещать вручную нельзя и неясно какой из них взять.) Объект связи может быть задан либо именем объекта, с атрибутом N=, и именем класса объекта, с атрибутом C=, либо числовым идентификатором с атрибутом O=. По умолчанию используется текущий объект. Новая позиция связи аспекта должна быть указана явно либо абсолютной позицией, с атрибутом POS=, либо смещением относительно текущей позиции, с атрибутом STEP=. Если новая позиция связи POS= отрицательная или ноль (<=0) или превышает количество наличных связей по аспекту, связь перемещается на последнее место в списке. Отрицательным значениям STEP= (задавать в кавычках!) соответствует перемещение на заданное число к началу списка, положительным - к концу. Если вычисленное значение новой позиции связи выходит за границы списка (<=0 либо превышает размер списка) то новой позицией связи будет граничное значение (первая либо поледняя в списке). В случае успешного перемешения возвращает непустое значение (пробел). Пример Функции перемещения связей в списочном отношении. <#FUNC MoveUp=(PARAM O;MOVE "PartOf\PartOf" O=(O) STEP="-1") MoveDown=(PARAM O;MOVE AN="PartOf" O=(O) STEP=1) MoveFirst=(PARAM O;MOVE A=(ASPID PartOf) O=(O) POS=1) MoveLast=(PARAM Name Class;MOVE PartOf N=(Name) C=(Class) POS=0) MovePos=(PARAM Pos O;MOVE "PartOf" O=(O) POS=(Pos)) >См. также: M, Простые примитивы., Ленивые примитивы., MUL - Числовое умножение<#MUL {numeric-expression}* >
Описание Возвращает 1, если аргументы отсутствуют, если указан единственный аргумент, возвращает его значение, в остальных случаях возвращает результат умножения указанных чисел numeric-expression. Пример <#FUNC S=(MUL (1) (1) 3.14) >См. также: M, Арифметические операции., Ленивые примитивы., Простые примитивы., NA - Строковое сравнение: меньше или равно<#NA source pattern [onmatch-action
{pattern onmatch-action}* [default-action]] >
Описание Последовательно производит строковое сравнение 'меньше или равно' значения первого аргумента source со значением четных аргументов pattern. Если найден аргумент pattern, удовлетворяющий условию сравнения, выполняется единственное действие onmatch-action. В случае неуспеха операции сравнения, выполняется действие default-action. Возвращает либо результат выполненного действия, если оно указано, либо непустое значение (символ 'пробел'), если указаны всего два аргумента и результат сравнения - истина, либо пусто. Пример <#FUNC IsA=(PARAM str; NA(str) (s1) ((s0) " <= "(s1)) (s2) ((s0) " <= "(s2)) ) >См. также: N, Операции сравнения., Ленивые примитивы., Простые примитивы., NAME - Получение имени или значения объекта БД<#NAME [[O=]object] >
Описание Формирует для объекта текущей БД изображение. Изображением может быть имя объекта для объектов-сущностей, либо значение для объектов-значений, либо индекс (числовой идентификатор с символом '#' вначале) для объектов-структур. Объект может быть указан числовым идентификатором object. По умолчанию используется текущий объект текущей БД. В случае успеха возвращает полученное изображение, иначе пусто. Пример Функция ClassName возвращает имя класса объекта. <#FUNC ClassName=(NAME(CLASS O=(1))) >См. также: N, Просмотр и навигация по БД, Ленивые примитивы., Простые примитивы., NB - Строковое сравнение: больше или равно (не перед)<#NB source pattern [onmatch-action
{pattern onmatch-action}* [default-action]] >
Описание Последовательно производит строковое сравнение 'больше или равно' значения первого аргумента source со значением четных аргументов pattern. Если найден аргумент pattern, удовлетворяющий условию сравнения, выполняется единственное действие onmatch-action. В случае неуспеха операции сравнения, выполняется действие default-action. Возвращает либо результат выполненного действия, если оно указано, либо непустое значение (символ 'пробел'), если указаны всего два аргумента и результат сравнения - истина, либо пусто. Пример <#NB (s0) (s1) ((s0) " >= "(s1)) (s2) ((s0) " >= "(s2))>См. также: N, Операции сравнения., Ленивые примитивы., Простые примитивы., NE - Числовое сравнение: не равно<#NE numberic-source numberic-pattern
[onmatch-action {numberic-pattern onmatch-action}*
[default-action]] >
Описание Последовательно производит числовое сравнение 'не равно' значения первого аргумента numberic-source со значением четных аргументов numberic-pattern. Нечисловые значения исходного выражения или образца заменяются нулем (0). Если найден аргумент numberic-pattern, удовлетворяющий условию сравнения, выполняется единственное действие onmatch-action. В случае неуспеха операции сравнения, выполняется действие default-action. Возвращает либо результат выполненного действия, если оно указано, либо непустое значение (символ 'пробел'), если указаны всего два аргумента и результат сравнения - истина, либо пусто. Пример <#NE (x0) (x1) ((x0) " >< "(x1)) (x2) ((x0) " >< "(x2))>См. также: N, Операции сравнения., Ленивые примитивы., Простые примитивы., NEG - Изменение знака числа<#NEG numeric-expression >
Описание Изменяет знак числа - умножает число numeric-expression на (-1). Нечисловой аргумент заменяет нулем (0). Возвращает значение аргумента со знаком минус. Пример <#ADD y (NEG (x))>См. также: N, Арифметические операции., Ленивые примитивы., Простые примитивы., NEMPTY - Проверка на непустоту аспекта<#NEMPTY [[AN=]aspect-name |
A=aspect] [[O=]object] [D=dbname]
>
Описание Проверяет, имеет ли объект связи по аспекту. Аспект может быть указан числовым идентификатором aspect или своим именем aspect-name, без атрибута AN ожидается в качестве первого аргумента. По умолчанию используется текущий аспект. Объект может быть указан числовым идентификатором object, без атрибута O ожидается в качестве второго аргумента. По умолчанию используется текущий объект. Если указана БД dbname, отличная от текущей, то необходимо явно указывать объект и аспект. По умолчанию используется текущая БД. Возвращает непустое значение (символ 'пробел'), если аспект непустой (у объекта имеется как минимум одна связь по аспекту), иначе пусто. Пример Функция HelpPrev возвращает ид предыдущего хэлпа. <FUNC HelpPrev=(PARAM O;PARAM O=(OBJ); part=(AT(APartOf) O=(O)); FORALLOBJ(AParts) O=(part) INIT=(prev=0) WHILE=(NE(OBJ)(O)(prev=(OBJ);"Y")); GT(prev) 0 (COND(NEMPTY(AParts) O=(prev)) (HelpLastChild(prev)) (prev)) (part) ) >См. также: N, Просмотр и навигация по БД, Ленивые примитивы., Простые примитивы., NEW - Создание новой БД<#NEW D=dbname [PROTO=prototype]
>
Описание Создает новую БД с именем dbname. Если с атрибутом PROTO указан файл-прототип БД prototype, то новая БД будет создана как копия БД-прототипа с именем dbname, иначе создается пустая БД. В случае успеха возвращает имя БД dbname без изменений, иначе пусто. Пример Создаем новую БД ассоциированную с файлом "MyDB.am" в каталоге БД Abrial. <#NEW D=(CAT (PATH TYPE=DBASE) "MyDB.am")>См. также: N, Операции со всей базой данных., Ленивые примитивы., Простые примитивы., NI - Строковое сравнение: не равно<#NI source pattern [onmatch-action
{pattern onmatch-action}* [default-action]] >
Описание Последовательно производит строковое сравнение 'не равно' значения первого аргумента source со значением четных аргументов pattern. Если найден аргумент pattern, удовлетворяющий условию сравнения, выполняется единственное действие onmatch-action. В случае неуспеха операции сравнения, выполняется действие default-action. Возвращает либо результат выполненного действия, если оно указано, либо непустое значение (символ 'пробел'), если указаны всего два аргумента и результат сравнения - истина, либо пусто. Пример <#NI (s0) (s1) ((s0) " >< "(s1)) (s2) ((s0) " >< "(s2))>См. также: N, Операции сравнения., Ленивые примитивы., Простые примитивы., NOT - Логическое 'НЕ'<#NOT expression >
Описание Возвращает непустое значение (символ 'пробел') на пустое значение аргумента expression. На непустое значение аргумента - возвращает пусто. Пример Функция AppText добавляет в указанный файл указанный текст. <#FUNC AppText=(PARAM fname text; COND(NOT(FILEEXIST(fname))) (FILESAVE(fname)(text)) (FILEAPPEND(fname)(text)) ) >См. также: N, Логические операции., Ленивые примитивы., Простые примитивы., OBJ - Получение идентификатора объекта<#OBJ [{[N=]object-name
[C=]class-name} | O=object] >
Описание Получает числовой идентификатор объекта текущей БД по имени и имени класса. Объект может быть указан числовым идентификатором object или своим именем object-name и именем своего класса class-name, без атрибутов N,C, ожидается в качестве первого и второго аргументов. По умолчанию возвращает числовой идентификатор текущего объекта текущей БД. Возвращает числовой идентификатор объекта текущей БД, (0) - для несуществующих объектов. Пример Функция db_Insert_In_Grp добавляет в указанную группу БД с указанным именем. <#FUNC db_Insert_In_Grp=(PARAM N GN; _LINK R=InGroup O1=(OBJ N=(N) C=DBase) O2=(OBJ N=(GN) C=Grp) >См. также: O, Просмотр и навигация по БД, Ленивые примитивы., Простые примитивы., OBJFORM - Получение стандартного изображения объекта в виде таблицы<#OBJFORM [{[N=]object-name
[C=]class-name} | O=object]
[D=dbname] >
Описание Формирует в виде таблицы стандартное изображение объекта, в общем виде: <table border=1> <tr align=center><th><a href='ab://ab/D=dbname'>[class-name]</a>[#object]</th><th>[object-name]</th></tr> {<tr><td><b><a href='ab://ab/D=dbname&O=aspect'>aspect-name</a>>/b></td> <td>{<a href='ab://ab/D=dbname&O=value'>value-image</a> }* </td></tr> }+ </table> где: aspect - числовой идентификатор аспекта; aspect-name - имя аспекта; value - числовой идентификатор объекта - значения аспекта; value-image - изображение значения аспекта объекта. Формируется таблица из двух столбцов. В заголовке первого столбца отображается ссылка на класс объекта и числовой идентификатор объекта. В заголовке второго столбца отображается имя объекта. В каждой строке таблицы в первом столбце отображается ссылка на аспект класса объекта, во втором столбце - ссылки на все значения аспекта объекта. Объект может быть указан числовым идентификатором object или своим именем object-name и именем своего класса class-name, без атрибутов N,C, ожидается в качестве первого и второго аргументов. По умолчанию используется текущий объект. Если указана БД dbname, отличная от текущей, то необходимо явно задавать объект. По умолчанию используется текущая БД. В случае успеха возвращает сформированный таким образом тег TABLE (стандартное изображение объекта), иначе пусто. Пример <#OBJFORM N="Иванов ИИ" C="Личность">См. также: O, Обращение к БД через HTML-форму, Ленивые примитивы., Простые примитивы., ON - Установка текущего объекта и аспекта<#ON [[O=]object] [AN=aspect-name |
A=aspect] [D=dbname] [[RET=]body]
>
Описание В теле body устанавливает текущим объект и аспект. Если указана БД dbname, отличная от текущей, то необходимо явно указывать объект и аспект. По умолчанию используется текущая БД. Объект может быть указан числовым идентификатором object, без атрибута O ожидается в качестве первого аргумента. По умолчанию используется текущий объект. Аспект может быть указан числовым идентификатором aspect или своим именем aspect-name. С атрибутом RET, или без него последним аргументом, может быть указано тело body. В случае успеха возвращает результат вычисленного тела body, иначе пусто. Пример Выводим в виде таблицы свойства класса Names БД "MyDB.ab". <#ON (OBJ N="Names" C=CLASS) D="MyDB.ab" RET=(OBJFORM)>См. также: O, Операторы устанавливающие контекст, Ленивые примитивы., Простые примитивы., OPEN - Открытие БД<#OPEN D=dbname>
Описание Открывает БД с именем файла dbname. Стандартными расширениями файла БД являются:
В случае успеха возвращает имя файла открытой БД, иначе пусто. Пример Открываем БД. <#OPEN (CAT (PATH TYPE=DBASE) "MyDB.ab")>См. также: O, Операции со всей базой данных., Ленивые примитивы., Простые примитивы., OR - Логическое 'ИЛИ'<#OR {expression}* >
Описание Возвращает вычисленное значение первого непустого аргумента, если таковой имеется среди указанных аргументов expression, иначе пусто. Пример Функция FindImgFile возвращает путь к файлу гифа. <#FUNC FindImgFile=(CAT (OR(FILEEXIST((PATH TYPE=DBASE)"Img\"(1)".gif")&("Img\"(1)".gif")) (FILEEXIST((PATH TYPE=DBASE)(1)".gif")&((1)".gif")) (FILEEXIST((PATH TYPE=HOME)"Img\"(1)".gif")) ) ) >См. также: O, Логические операции., Ленивые примитивы., Простые примитивы., PARAM - Установка именованных параметров макроса или функции<#PARAM {local-var-name[=value]}+ >
Описание Локальным переменным local-var-name, которым внутри макроса или функции не присвоены значения:
Если внутри макроса или функции перед вызовом PARAM было присвоено непустое значение переменным, указанным в PARAM, значения таких переменных не изменяются. Ничего не возвращает. Пример Функция menuact возвращает ссылку на объект. <#FUNC menuact=(PARAM mac gif bar hint tag;PARAM O=(OBJ); t1=(r_body (gif) (bar) (hint)); ((tag) (OR (AND (O) (D) (REFER ACT=(mac) D=(D) O=(O) ATAG=("title='"(hint)"'") (t1)) ) (AND (O) (REFER ACT=(mac) O=(O) ATAG=("title='"(hint)"'") (t1)) ) (AND (D) (REFER ACT=(mac) D=(D) ATAG=("title='"(hint)"'") (t1)) ) (REFER ACT=(mac) ATAG=("title='"(hint)"'") (t1)) ) ) ) >См. также: P, Ленивые примитивы., Простые примитивы., PATH - Операции с именами файлов<#PATH {{DIR | DRIVE | EXT | EXPAND
| NAME | PATH | DLMAPP | DLMCUT}=file-name}
| {CHANGE=file-name TO=file-extension} |
{MATCH=file-name MASK=mask} |
{TYPE={CURR | HOME | DBASE | TEMP}} >
Описание Выполняет операции над именами файлов в соответствии с указанным атрибутом.
Пример Функция DeleteFile удаляет файл с именем fn. <#FUNC DeleteFile=(PARAM fn; path=(PATH EXPAND=(fn)); COND(DIAL_ASK (CAT "Удалить файл: " (path) "?")) (EXEC TYPE=WAIT PATH="command.com" ARG=(CAT "/C del " (path) )) ) >См. также: P, Строчные операции, Ленивые примитивы., Простые примитивы., PORTION - Установка сегмента повтора внутри цикла<#PORTION rep-number > [complex-body]
<#/>
Описание Задает внутри цикла сегмент повтора complex-body заданное в rep-segment-size количество раз. Разделяет выдачу на порции заданного размера. В цикле перебираются шаги объемлющего цикла и поочередно устанавливает контекст для них. При выходе из сегмента повтора выполняется завершение (и, если цикл еще не окончен - начало) объемлющего цикла. Сегмент повтора всегда выполняется заданное число раз, даже тогда, когда объемлющий цикл оканчивается при неоконченном сегменте повтора. Таким образом, например, в HTML-таблицах формируется заданное число элементов, (строк, столбцов, ячеек), в том числе и не заполненных содержанием. Возвращает объединенный результат вычислений тела порции. Пример Макрос ShowItemTable выводит в виде таблицы объекты класса порциями по 6 столбцов 10 строк. <#MACRO ShowItemTable> <#SET pos=(OR (ENV POS) 1) seg=60> <#LT (pos) 1 (SET pos=1)> <#_pagebar1 p=(pos) n=(seg) a=(ITEMS)> <TABLE border=2 width=100%> <#FORALLOBJ (ITEMS) POS=(pos) NUM=(seg)> <TR> <#PORTION 6> <TD valign=top><TABLE> <#PORTION 10> <TR><TD> <#GT (OBJ) 0 (Obj_Ref_Item) " "> <#/> </TABLE></TD> <#/> </TR> <#/> </TABLE> <#/MACRO>См. также: P, Составные примитивы. , Ленивые примитивы., REC - Создание ассоциативных массивов<#REC {{name value} | {TEXT=text} |
{REC=expression}}* >
Описание Создает ассоциативный массив вида name1=value1 name2=value2 ... Пара name value рассматривается как один элемент списочного массива. Четным аргументом ожидается именной индекс (ключ) очередного элемента массива. Нечетным аргументом ожидается значение для элемента массива, указанного именным индексом (четным аргументом). Текст значения упаковывается в одну строку и добавляется как один элемент массива Значением может быть произвольный текст, строки которого пакуются в одноэлементный массив перед подключением. Атрибутом TEXT может быть указан сырой текст для включения в массив. Каждая строка текста подключается как один элемент массива и ожидается как пара name=value. Все символы от начала строки до первого встреченного знака "=" рассматриваются как именной индекс (ключ name), часть строки после знака "=" рассматривается как значение ключа (value). Атрибутом REC может быть указан текст другого ассоциативного массива, подключаемый 1:1 в данной позиции. Возвращает собранный таким образом текст ассоциативного массива. Пример <#Rec1=(REC Id (i) Name (NAME) Fio (ASPECT(AFio) Age (ASPECT(AAge))>См. также: L, Строчные операции, Ленивые примитивы., Простые примитивы. REFER - Полная ссылка на объект или изображение его значения<#REFER [[M=]method | ACT=action]
[{N=object-name C=class-name} |
O=object] [D=dbname] [ATAG=atag]
{Custom=expression}* [[RET=]reference-image] >
Описание Формирует полную ссылку на объект БД или изображение его значения (A-тег), в общем виде: <a href='ab://ab/[&D=dbname] [&O=object] [&N=object-name&C=class-name] [&M=method] [&ACT=action] [{&Custom=expression}*] ' [atag] > [reference-image] </a>. Значение атрибута 'href=' A-тега формируется аналогично URL/_HREF. Могут быть указаны любые именованные параметры Custom=expression, которые будут включены в ссылку для передачи параметров обрабатывающему методу. В их числе могут быть NUM, POS, определяющие сегмент итераций по умолчанию в циклах обрабатывающего метода. С атрибутом ATAG могут быть указаны дополнительные параметры A-тега. (name=, id=, frame=, title=, methods=, accesskey=, ... ). С атрибутом RET или без него последним аргументом, может быть явно указано изображение ссылки reference-image. Если ссылка внутренняя на значение в качестве изображения reference-image устанавливается значение указанного или текущего объекта БД. Возвращает в случае успеха сформированный таким образом A-тег (изображение/ссылку), иначе пусто. Пример Функция menu возвращает ссылку с изображением. <#FUNC r_body=(CAT (img (1) ("align='middle' alt='"(OR(3)(2))"'")) " " (2) "" ) menu=(DO (PARAM mac gif bar hint tag) (t1=(r_body (gif) (bar) (hint))) ((tag) (COND (AND (IS(MACNAME)(mac))(IS(D)(DBASE) Y "" Y )(EQ(ENV O)(O))) (t1) (AND (O)(D)) (REFER M=(mac) D=(D) O=(O) ATAG=("title='"(hint)"'") (t1)) (O) (REFER M=(mac) O=(O) ATAG=("title='"(hint)"'") (t1)) (D) (REFER M=(mac) D=(D) ATAG=("title='"(hint)"'") (t1)) (REFER M=(mac) ATAG=("title='"(hint)"'") (t1)) ) ) ) >См. также: R, Обращение к БД через HTML-ссылку., Ленивые примитивы., Простые примитивы., REM - Комментарий<#REM comment-text >
Описание Пропускает текст comment, ничего не делает. Пример <#REM Это комментарий>См. также: R, Операторы комментариев., Энергичные примитивы., Простые примитивы., RENAME - Переименование объекта-сущности<#RENAME [{[N=]object-name
[C=]class-name} | O=object]
TO=new-name >
Описание Присваивает указанному объекту-сущности текущей БД новое имя new-name. Объект может быть указан числовым идентификатором object или своим именем object-name и именем своего класса class-name, без атрибутов N,C, ожидается в качестве первого и второго аргументов. По умолчанию присваивает новое имя текущему объекту, если текущий объект - сущность. В случае успешного переименования возвращает непустое значение (символ "пробел"), иначе пусто. Пример <ON N="Иванов ИИ" C="Личность" D=((XBASE)"Test\AIS.ab") RET=(RENAME TO="Петров ПП") >См. также: R, Операции изменяющие БД., Ленивые примитивы., Простые примитивы., RESULT - Операции с массивом результатов глобального действия<#RESULT {{[NUM=]index} |
{[KEY=]name}}* [{[KEY=]{# | #L |
#C}} {LINES={index | name}} |
{SIZE={index | name}} | {HAS=name} |
{DEL={index | name}} | {PUT=value} |
{APP=value}]
Описание Производит различные действия с массивом результата глобального действия в зависимости от указанных параметров. Результаты запросов-действий к БД (в командной строке запроса к БД указан атрибут ACT) помещаются в специальную переменную - результат глобального действия. В отличие от глобальных переменных время жизни результата глобального действия ограничено - перед началом формирования каждой страницы результат автоматически очищается, результат предыдущего запроса-действия также теряется. Операция RESULT позволяет обращаться с результатом глобального действия как с обычным массивом. Для доступа к внутренней структуре результата глобального действия используется цепочка индексных параметров.
Пример Если имеется результат глобального действия и в нем есть элемент FIO со значением Name выводим на экран. <#AND (RESULT) (RESULT KEY=FIO HAS=(Name)) ("ФИО: "(RESULT KEY=FIO)) >См. также: R, Энергичные примитивы., Простые примитивы., ROOTREF - Получение ссылки на текущую страницу<#ROOTREF [[POS=]segment-start]
[[NUM=]segment-size] >
Описание Формирует ссылку на текущую страницу без обрамляющих тегов и без кавычек, добавляя или изменяя в ней параметры POS и NUM. В общем виде: 'ab://ab/D=dbname&O=object&M=method&POS=segment-start[&NUM=segment-size]' где: dbname-полный путь к текущей БД; object-числовой идентификатор текущего объекта текущей БД; method-метод формирующий текущую страницу. При переходе по ссылке с параметрами '&POS=' и '&NUM=', внутри метода method текущие установки POS и NUM заменяются на указанные в ссылке. Внутри метода POS и NUM сами по себе ничего не значат - просто переменные, но могут использоваться в циклах FORALLOBJ, FORASP/FORLINE для выделения сегмента. Это обстоятельство можно использовать для формирования с помощью единственного метода связанного списка страниц для листания длинных списков. Если указан атрибут POS, в ссылку добавляет параметр '&POS=segment-start' со значением абсолютной позиции начала сегмента. Без атрибута POS, первым аргументом, ожидается относительное изменение текущей позиции. К текущей позиции прибавляется указанное смещение segment-start. В ссылку добавляет параметр '&POS=' с новым значением позиции начала сегмента. С атрибутом NUM или без него, вторым аргументом, ожидается размер сегмента segment-size. В ссылку добавляется параметр '&NUM=segment-size'. По умолчанию вносит в ссылку параметр '&POS=1', параметр '&NUM=' не добавляется. Возвращает сформированную таким образом ссылку на текущую страницу. Пример Форма ссылки на и удаления текущего объекта. <#MACRO _delit> <FORM name=<#_frm_nam> action="<#ROOTREF>" method=post> <input type=hidden name=ACT> <input type=hidden name=O> <#REFER> <#_delbtn1> </FORM> <#/>См. также: R, Обращение к БД через HTML-ссылку., Ленивые примитивы., Простые примитивы., SAVE - Сохранение БД в файл полностью или частично<#SAVE [FILE=file-name] [TYPE= {ALL
| DATA | STRUCT | {OBJ [{N=object-name
C=class-name} | O=object]} | {CLA
C=class-name} | {REL R=relation-name}}]
[D=dbname] >
Описание Сохраняет БД dbname в файл file-name полностью или частично. В зависимости от значения атрибута TYPE сохраняется:
Если не указано имя БД dbname, по умолчанию используется текущая БД. Без атрибута FILE по умолчанию используется имя файла, приписанного к текущей БД. Стандартными расширениями файла БД являются:
В случае успеха возвращает имя файла сохраненной БД, иначе пусто. Пример Сохраняем структуру текущей БД в файл "c:/my/mydb.am". <#SAVE FILE="c:\my\struct.ab" TYPE=STRUCT>См. также: S, Операции со всей базой данных., Ленивые примитивы., Простые примитивы., SCAN - Сканирование текста<#SCAN {[TEXT=]text | {{FILE |
FILELIST | KEYFILE}=file-id}} [AS= {{WORDS
WORDSABC=alphabet [DIV=local-var-name]} |
CHARS | LINES | LIST | REC | NAMES |
FORMS ] [VAR=local-var-name]
[POS=start-pos] [NUM=iter-num]
[INIT=initialization] [ITER=iteration]
[FROM=begin-condition] [IF=step-condition]
[BY=step-size] [UNTIL=until-condition]
[WHILE=while-condition] [[RET=]body] >
[complex-body] <#/>
Сканирует исходный текст в соответствии с указанным режимом. Исходный текст для сканирования может быть задан:
Режимы сканирования:
Итерации не начинаются (не вычисляется тело цикла), если:
Итерации заканчиваются, если:
Очередной шаг пропускается (тело цикла не вычисляется), если выражение, указанное с атрибутом IF принимает значение 'ложь' (пусто). Сегмент итераций может быть задан с атрибутом POS позицией segment-start начала сегмента, начиная с единицы и, с атрибутом NUM, размером сегмента segment-size. По умолчанию POS=1 - сканирование начинается с первого элемента (символа, слова, строки, в зависимости от типа сканирования). По умолчанию NUM сканирование продолжается до конца текста, начиная с указанной атрибутом POS позиции. Если с атрибутом BY=step указан шаг итераций, то внутри сегмента пропускаются step-1 шаг (тело вычисляется только на каждом step шаге, начиная с POS). С атрибутом INIT может быть указано выражение, которое вычисляется один раз перед началом цикла, вычисленное значение добавляется к общему результату оператора перед результатом вычислений тела цикла. С атрибутом ITER может быть указано выражение, которое вычисляется на каждом шаге итераций, не влияет на результат оператора. На каждом шаге в теле цикла переменной с указанным в атрибуте VAR именем устанавливается очередное сканированное значение. По умолчанию очередное сканированное значение попадает в специальную переменную с именем VALUE. Для режима AS=WORDS с атрибутом DIV может быть указано имя переменной которой на очередном шаге будет установлено значение разделителя - пропущенных символов исходного текста (не входящих в алфавит). Для режимов AS=REC и AS=NAMES переменной KEY устанавливается значением имя очередного ключа. Тело цикла может быть задано с атрибутом RET или без него, последним аргументом в функциональном стиле. Возвращает объединенный результат вычислений тела цикла, если оно указано, сначала внутри простого тэга, затем внутри сложного тега. Пример: Функция Words_Link связывает текущую словоформу с лексемами. <#FUNC Words_Link=( // si=(OBJ); SCAN TEXT=(FILE wf KEY=(CONV LOW=(NAME))) AS=LIST (_LINK R=prod O1=(_NITM N=(VALUE NUM=2) C=Lex) O2=(_NITM N=(VALUE NUM=1) C=Frm) O3=(si) ; ); ) > SET - Присваивание значений локальным переменным<#[SET] {local-var-name=value}+ >
Описание Объявляет локальные переменные с именами local-var-name, если они не объявлены ранее, и присваивает им значения value. Ничего не возвращает. Пример <#SET path1="c:\my\mydb.am" y=1 x=(y*5/3) >См. также: S, Ленивые примитивы., Простые примитивы., SUB - Числовое вычитание<#SUB numeric-source {subtrahend}+ >
Описание Возвращает результат вычитания из значения numeric-source значений subtrahend. Значения нечисловых аргументов заменяет нулем (0). Пример Результат: z=10-2-5=3 <#SET z=(SUB 10 2 5)>См. также: S, Арифметические операции., Ленивые примитивы., Простые примитивы., SUBSTR - Выделение подстроки в строке<#SUBSTR source start length >
Описание Извлекает подстроку исходного текста source в позиции strart (начиная с единицы) указанной длины length. Переводы строк в исходном тексте заменяются пробелами (исходный текст пакуется в строку). Возвращает извлеченную подстроку. Пример Результат: "our". <#SUBSTR "Source string" 2 3>См. также: S, Строчные операции, Ленивые примитивы., Простые примитивы., SUM - Числовое сложение<#SUM {numeric-expression}* >
Описание Возвращает сумму указанных аргументов numeric-expression. Значения нечисловых аргументов заменяет нулем (0). При отсутствии аргументов возвращает 0. Пример Возвращает результат x=x+y+5. <#SET x=(SUM (x) (y) 5) >См. также: S, Арифметические операции., Ленивые примитивы., Простые примитивы., TEXT - Сборка текста<#[TEXT] [\]{expression[\]}* >
Описание Соединяет в единый текст значения указанных expression. Обратный слэш ("\") выполняет роль символа новой строки. В отличие от CAT никак не изменяет сцепляемые строки, внутренние переводы строк сохраняются. Возвращает полученный таким образом текст. Пример <#TEXT "Name:" (N1) " Age:" (A1) >См. также: T-X, Строчные операции, Энергичные примитивы., Простые примитивы., URL - Получение ссылки на объект без обрамляющего тега<#URL [[M=]method | ACT=action]
[{N=object-name C=class-name} |
O=object] [D=dbname]
[POS=segment-start] [NUM=segment-size]
{Custom=expression}* >
Описание Формирует ссылку на объект БД без обрамляющих тегов и без кавычек, в общем виде: 'ab://ab/[&D=dbname][&O=object] [&N=object-name&C=class-name] [&M=method] [&ACT=action] [&POS=segment-start] [&NUM=segment-size] [{&Custom=expression}*]'. Если не указана БД, используется текущая, формируется внутренняя ссылка. В ссылке формируется параметр '&D=dbname', где dbname - полный путь к файлу текущей БД. Объект может быть указан числовым идентификатором object либо своим именем object-name и именем своего класса class-name. В ссылке формируются параметры: '&O=object[&N=object-name&C=class-name]'. По умолчанию формируется параметр '&O=' с числовым идентификатором текущего объекта. Если явно указана БД dbname, формируется внешняя ссылка. В ссылке формируется параметр с указанным именем БД без изменений '&D=dbname'. Объект может быть указан только своим именем object-name и именем своего класса class-name. По имени и имени класса объекта определяется числовой идентификатор объекта object. В ссылке формируются параметры: '&O=object[&N=object-name&C=class-name]'. Если объект не указан, либо отсутствует, либо указан числовым идентификатором, идентификатор обнуляется ('&O=0'). С атрибутом M, или без него первым аргументом, может быть указан метод method формирующий страницу при переходе по ссылке. Если с атрибутом ACT указано действие action, то при переходе по ссылке выполняется действие action, после выполнения которого вызывается метод формирующий текущую страницу. Могут быть указаны также любые именованные параметры Custom=expression, которые будут включены в ссылку для передачи параметров обрабатывающему методу. В их числе могут быть NUM, POS, определяющие сегмент итераций по умолчанию в циклах обрабатывающего метода. В случае успеха возвращает сформированную таким образом ссылку (значение атрибута 'href=' A-тэга). Пример Макрос Load формирует страничку с формой выбора загружаемого файла. <#MACRO Load O=(OBJ)> <form action='<#URL ACT="HS_Act" F="Load">' method='post'> <table class='cItems'> <thead>Загрузка справочника.</thead> <tr><th>Файл:</th></tr> <tr><td> <input type='file' name='File'> </td></tr> <tr><td><input type='submit' value='Загрузить'></td></tr> </table> </form> <#/>См. также: T-X, Обращение к БД через HTML-ссылку., Ленивые примитивы., Простые примитивы., USE - Подключение библиотечного макроса<#USE library-name >
Описание Подключает библиотечный макрос с именем library-name. В отличие от вызова метода/функции всx содержимое вызванного макроса обрабатывается на том же уровне, что и оператор USE. Все определения функций FUNC и макросов MACRO, встретившиеся внутри библиотечного макроса продолжают действовать и после выхода из макроса и из оператора USE. Библиотечный макрос не ищется среди ранее определенных в тексте FUNC, MACRO, только в БД или на диске. Внутрь библиотечного макроса нельзя передать аргументы, как для функции. В порядке поиска макроса и использовании имени, подключение макроса эквивалентно вызову метода. Имя библиотечного макроса library-name должно быть указано без пути и расширения. Вначале файл ищется в директории БД, потом в директории запуска программы, затем в директории программы. В каждой из них сначала берется поддиректория \tem\, потом сама директория. В каждой из указанных сначала ищется поддиректория с именем базы и с расширением '.tem', потом сама. В указанных директориях ищется сначала файл с именем library-name и расширением '.txt', затем, если не найден, с расширением '.htm'. Возвращает результат вычисления библиотечного макроса. В случае успеха возвращает указанное имя library-name без изменений, иначе пусто. Пример <#USE MyLibrary>См. также: T-X, Ленивые примитивы., Простые примитивы., VALUE - Операции со сканированным значением<#VALUE {{[NUM=]index} |
{[KEY=]name}}* [{[KEY=]{# | #L |
#C}} {LINES={index | name}} |
{SIZE={index | name}} | {HAS=name} |
{DEL={index | name}} | {PUT=value} |
{APP=value}] >
Описание В зависимости от указанных параметров производит различные действия с очередным значением, сканированным из текста. Внутри тела цикла SCAN результат очередного шага сканирования помещаются в специальную переменную - сканированное значение. Для доступа к внутренней структуре сканированного значения используется цепочка индексных параметров.
Пример <#FUNC // загрузка в память сохраненных глобалов из файла Globs_Load=(Globs_Open; /// открыли файл глобалов // сканируем файл SCAN KEYFILE=Globs ( // сохраняем у всех элементов атрибут VAL GLOBALS (KEY) PUT=(VALUE KEY=VAL) ); ) >См. также: Результаты сканирования текста WHILE - Цикл по условию<#WHILE condition [body] >
[complex-body] <#/>
Описание Выполняет тело цикла body до тех пор, пока значение условия condition не пусто. Последним аргументом, тело цикла body может быть указано внутри простого тега в функциональном стиле. Возвращает объединенный результат вычислений на каждом шаге тела цикла body, сначала внутри простого тега, затем внутри сложного тега. Пример Выполняем 5 раз макрос Macro1. <#SET cnt=0 Num=5> <#WHILE (LT (cnt) (Num))> <#Macro1> <#ADD cnt 1> <#/>См. также: T-X, Операторы цикла., Составные примитивы. , Энергичные примитивы., XBASE - Получение пути к директории программы<#XBASE>
Описание Возвращает полный путь к директории программы (Абриаль) с обратным слэшем (символ '\') на конце. Пример Присваиваем переменной Root путь к к директории программы (Абриаль). <#FUNC Root=(XBASE) MyFile=((XBASE)"My\Myfile.txt") >См. также: T-X, Энергичные примитивы., Простые примитивы., XXX - Структурный комментарий<#XXX [comment]> [complex-comment] </#>
Описание Предназначен для временного исключения блоков текста внутри сложных примитивов. Ничего не возвращает. Пример Закомментировали весь блок FORDB, включая вложенные конструкции. <#XXX FORDB D="MyDB.ab"> <#_NITM N="Иванов ИИ" C="Личность" > <#/>См. также: T-X, Операторы комментариев., Составные примитивы. , Ленивые примитивы., _BLNK - Добавление или изменение бинарной связи<#_BLNK [AN=aspect-name | A=aspect]
[O=object] [D=dbname]
[TO=target-object]>
Описание Добавляет или изменяет бинарную связь аспекта объекта с целевым объектом. Создает новый целевой объект, если целевой объект не указан. Исходный аспект может быть указан числовым идентификатором aspect либо своим именем aspect-name. Объект и целевой объект могут быть указаны числовым идентификатором object и target-object. Если указана БД dbname, отличная от текущей, то необходимо явно указывать объект и аспект. По умолчанию используется текущий аспект текущего объекта текущей БД. В случае успеха возвращает числовой идентификатор указанного или созданного целевого объекта, иначе пусто. Пример Устанавливаем объект увлечения у конкретной личности. <#FORDB D=((XBASE)"Test\AIS.ab")> <#_BLNK AN="увлеч\об-ты увлечен" O=(OBJ N="Иванов ИИ" C="Личность") TO=(_NITM N="охота" C="увлечения")> <#/>См. также: _, Операции изменяющие БД., Энергичные примитивы., Простые примитивы., _DELA - Удаление аспекта объекта<#_DELA [[AN=]aspect-name |
A=aspect] [O=object] [D=dbname] >
Описание Удаляет аспект объекта. Если аспект держащий, то удаления не происходит. Аспект может быть указан числовым идентификатором aspect или своим именем aspect-name. Без атрибута AN ожидается в качестве первого аргумента. Объект может быть указан числовым идентификатором object. Если указана БД dbname, отличная от текущей, то необходимо явно указывать аспект и объект. По умолчанию удаляется текущий аспект текущего объекта текущей БД. В случае успеха возвращает непустое значение (символ 'пробел'), иначе пусто. Пример Устанавливаем отсутствие увлечений у конкретной личности. <#FORDB D=((XBASE)"Test\AIS.ab")> <#_DELA AN="увлеч\об-ты увлечен" O=(OBJ N="Иванов ИИ" C="Личность")> <#/>См. также: _, Операции изменяющие БД., Энергичные примитивы., Простые примитивы., _DELI - Удаление объекта<#_DELI [O=object] [D=dbname] >
Описание Удаляет объект из БД. Если указана БД dbname отличная от текущей, то необходимо явно указывать объект числовым идентификатором object. По умолчанию удаляется текущий объект текущей БД. В случае успешного удаления возвращает непустое значение (символ 'пробел'), иначе пусто. Пример Удаляем конкретную личность из БД. <#FORDB D=((XBASE)"Test\AIS.ab")> <#_DELI O=(OBJ N="охота" C="увлечения")> <#/>См. также: _, Операции изменяющие БД., Энергичные примитивы., Простые примитивы., _DELK - Удаление одной связи объекта<#_DELK {LK=link | {{R=relation-name
| RID=relation | AN=aspect-name |
A=aspect} {Oi=object |
Vi=value}+}} [D=dbname] >
Описание Удаляет из БД связь любой размерности, заданную либо числовым идентификатором связи, либо исходным аспектом или отношением и списком целевых объектов или значений. Если указан аспект, и он держащий, то удаления не происходит. Если не указана БД dbname, используется текущая. Связь должна быть указана явно: 1) С атрибутом LK числовым идентификатором связи link; 2)
и списком числовых идентификаторов целевых объектов с атрибутом Oi, или значений с атрибутом Vi, где i=1,2,3...N, N-размерность связи. В случае успеха возвращает числовой идентификатор удаленной связи, иначе пусто. Пример Удаляем связь "уч-ст". <#FORDB D=((XBASE)"Test\AIS.ab")> <#_DELK R="уч-ст" O1=(OBJ N="Иванов ИИ" C="Личность") O2=(OBJ N="доктор" C="ученая степень") O3=(OBJ N="физ.-мат. наук" C="область наук")> <#/>См. также: _, Операции изменяющие БД., Энергичные примитивы., Простые примитивы., _EDIT - Изменение значения атрибута объекта<#_EDIT _VAL=value [AN=aspect-name
| A=aspect] [O=object] [D=dbname]
>
Описание Добавляет или изменяет на value значение атрибута объекта. Аспект может быть указан числовым идентификатором aspect или своим именем aspect-name. Объект может быть указан числовым идентификатором object. Если указана БД dbname, отличная от текущей, то необходимо явно указывать объект и аспект. По умолчанию используется текущий аспект текущего объекта текущей БД. В случае успеха возвращает непустое значение (символ 'пробел'), иначе пусто. Пример Устанавливаем дату рождения личности. <#ON O=(OBJ N="Иванов ИИ" С="Личность") AN="дата-рожд\дата рожд" D=((XBASE)"Test\AIS.ab") RET=(_EDIT _VAL= "25.04.1817") >См. также: _, Операции изменяющие БД., Энергичные примитивы., Простые примитивы., _HREF - Получение чистой ссылки на объект без обрамляющих тегов<#_HREF [[M=]method | ACT=action]
[{N=object-name C=class-name} |
O=object] [D=dbname]
[{Custom=expression}*]>
Описание Формирует ссылку на объект БД без обрамляющих тегов и без кавычек, в общем виде: 'ab://ab/[&D=dbname][&O=object] [&N=object-name&C=class-name] [&M=method] [&ACT=action] [{&Custom=expression}*]'. Если не указана БД, используется текущая, формируется внутренняя ссылка. В ссылке формируется параметр '&D=dbname', где dbname - полный путь к файлу текущей БД. Объект может быть указан числовым идентификатором object либо своим именем object-name и именем своего класса class-name. В ссылке формируются параметры: '&O=object[&N=object-name&C=class-name]'. По умолчанию формируется параметр '&O=' с числовым идентификатором текущего объекта. Если явно указана БД dbname, формируется внешняя ссылка. В ссылке формируется параметр с указанным именем БД без изменений '&D=dbname'. Объект может быть указан только своим именем object-name и именем своего класса class-name. По имени и имени класса объекта определяется числовой идентификатор объекта object. В ссылке формируются параметры: '&O=object[&N=object-name&C=class-name]'. Если объект не указан, либо отсутствует, либо указан числовым идентификатором, идентификатор обнуляется ('&O=0'). С атрибутом M, или без него первым аргументом, может быть указан метод method формирующий страницу при переходе по ссылке. Если с атрибутом ACT указано действие action, то при переходе по ссылке выполняется действие action, после выполнения которого вызывается метод формирующий текущую страницу. Могут быть указаны также любые именованные параметры Custom=expression, которые будут включены в ссылку для передачи параметров обрабатывающему методу. В их числе могут быть NUM, POS, определяющие сегмент итераций по умолчанию в циклах обрабатывающего метода. В случае успеха возвращает сформированную таким образом ссылку (значение атрибута 'href=' A-тэга). Пример Для атрибута 'action=' тэга FORM формируем ссылку-действие с параметрами. <#MACRO RenObj O=(OBJ) SIZE=15> <form action='<#_HREF ACT="acts" O=(O) F="Ren">' method='post'> <input type='text' name='N' value='<#NAME O=(O)>' size='<#SIZE>'> <input type='submit' value='Переименовать'> </form> <#/>См. также: _, Обращение к БД через HTML-ссылку., Ленивые примитивы., Простые примитивы., _LINK - Добавление или изменение связи любой размерности<#_LINK {R=relation-name |
RID=relation | AN=aspect-name |
A=aspect} {Oi=object |
Vi=value}+ [D=dbname] >
Описание Создает или изменяет связь любой размерности. Если не указана БД dbname, используется текущая. Связь должна быть указана явно:
и списком целевых объектов с атрибутом Oi, или значений с атрибутом Vi, где i=1,2,3...N, N-размерность связи. В случае успеха возвращает числовой идентификатор связи, иначе пусто. Пример Создаем связь "уч-ст". <#FORDB D=((XBASE)"Test\AIS.ab")> <#_LINK R="уч-ст" O1=(OBJ N="Иванов ИИ" C="Личность") O2=(OBJ N="доктор" C="ученая степень") O3=(OBJ N="физ.-мат. наук" C="область наук")> <#/>См. также: _, Операции изменяющие БД., Энергичные примитивы., Простые примитивы., _LOAD - Загрузка DDL-кода в БД<#_LOAD [D=dbname] [{FILE=file-name
[SHOW=Y]} | TEXT=ddl-code]>
Описание Загружает текст кода DDL ddl-code или из файла file-name в БД dbname или, по умолчанию, в текущую. С ключом SHOW=Y выводится окно, в котором отображается процесс загрузки в БД текста DDL-кода из указанного файла file-name и кнопками завершения приостановки и продолжения процесса загрузки. По завершению загрузки окно автоматически закрывается. В случае успеха возвращает имя файла file-name без изменений, если текст кода DDL был загружен из файла, непустое значение (символ 'пробел'), если загружен текст кода ddl-code, иначе пусто. Пример Догружаем из файла "MyDB.ab" DDL-код в текущую БД, отображаем процесс загрузки. <#_LOAD FILE=((DBASE)"MyDB.ab") SHOW=Y>См. также: _, Операции со всей базой данных., Ленивые примитивы., Простые примитивы., _NEW - Создание новой БД<#_NEW D=dbname
[PROTO=prototype]>
Описание Создает новую БД с именем dbname. Если с атрибутом PROTO указан файл-прототип БД prototype, то новая БД будет создана как копия БД-прототипа с именем dbname, иначе создается пустая БД. В случае успеха возвращает имя БД dbname без изменений, иначе пусто. Пример Создаем новую БД "New.ab" на основе БД-прототипа "AIS.ab". <#_NEW D=((DBASE)"New.ab") PROTO=((XBASE)"Test\AIS.ab")>См. также: _, Операции со всей базой данных., Ленивые примитивы., Простые примитивы., _NITM - Добавление элемента в БД<#_NITM [N=object-name]
C=class-name [O=object]
[AN=aspect-name | A=aspect]
[D=dbname] >
Описание Создает новый объект с именем object-name класса class-name или присваивает новое имя существующему объекту. С атрибутом O числовым идентификатором object может быть указан объект-словарь. Объект-словарь есть старший объект для порождающей связи (словарь,содержащий имя). Для дескрипторов аспектов такими является дескриптор отношения, для сущностей этим словарем является их дескриптор класса. По умолчанию в качестве объекта-словаря используется текущий объект. Образующий аспект может быть указан с атрибутом A числовым идентификатором aspect либо с атрибутом AN своим именем aspect-name. По умолчанию используется 'NAME/ITEMS'. Если БД dbname указана явно, необходимо явно указывать объект-словарь. По умолчанию используется текущая БД. В случае успеха возвращает идентификатор объекта - или нового или обнаруженного старого с таким именем, иначе пусто. Пример Добавляем увлечение к возможным увлечениям личностей. <#_NITM N="шахматы" C="увлечения" O=(OBJ N="увлечения" C="CLASS") D=((XBASE)"Test\AIS.ab") >См. также: _, Операции изменяющие БД., Энергичные примитивы., Простые примитивы., _OPEN - Открытие БД<#_OPEN D=dbname >
Описание Открывает БД с именем файла dbname. Стандартными расширениями файла БД являются:
В случае успеха возвращает имя файла открытой БД, иначе пусто. Пример Открываем БД. <#_OPEN D=((XBASE)"Test\AIS.ab">См. также: _, Операции со всей базой данных., Ленивые примитивы., Простые примитивы., _SAVE - Сохранение БД полностью или частично<#_SAVE [FILE=file-name] [TYPE=
{ALL | DATA | STRUCT | {OBJ
[{N=object-name C=class-name} |
O=object]} | {CLA C=class-name} |
{REL R=relation-name}}] [D=dbname]>
Описание Сохраняет БД dbname в файл file-name полностью или частично. В зависимости от значения атрибута TYPE сохраняется:
Если не указано имя БД dbname, по умолчанию используется текущая БД. Без атрибута FILE по умолчанию используется имя файла, приписанного к текущей БД. Стандартными расширениями файла БД являются:
В случае успеха возвращает имя файла сохраненной БД, иначе пусто. Пример Сохраняем из БД AIS.ab в файл "c:\my\structAIS.ab" только объекты - дескрипторы данных. <#_SAVE D=((XBASE)"Test\AIS.ab") FILE="c:\my\structAIS.ab" TYPE=STRUCT >См. также: _, Операции со всей базой данных., Ленивые примитивы., Простые примитивы., _SWAP - Переключение связи унарного аспекта объекта<#_SWAP [[AN=]aspect-name |
A=aspect] [O=object] [D=dbname] >
Описание Создает унарную связь объекта, если она отсутствует, либо удаляет, если связь имеется. Унарный аспект должен быть указан числовым идентификатором aspect или своим именем aspect-name, без атрибута AN ожидается в качестве первого аргумента. По умолчанию используется текущий аспект. Объект может быть указан числовым идентификатором object. По умолчанию используется текущий объект. Если указана БД dbname, отличная от текущей, то необходимо явно указывать объект и аспект. По умолчанию используется текущая БД. В случае успеха возвращает непустое значение (символ 'пробел'), иначе пусто. Пример Устанавливаем признак нестандартности мышления для конкретной личности. <#ON O=(OBJ N="Иванов ИИ" С="Личность") AN="нестанд-ть\нестандартность мышления" D=((XBASE)"Test\AIS.ab") RET=(COND (EMPTY) (_SWAP)) >См. также: _, Операции изменяющие БД., Энергичные примитивы., Простые примитивы., _TEXT - Изменение значения объекта<#_TEXT _VAL=value [O=object]
[D=dbname]>
Описание Устанавливает объекту object новое значение valueдля объектов-значений или имя для объектов-сущностей. Новое значение (имя) value должно быть указано с атрибутом _VAL. Объект может быть указан числовым идентификатором object. По умолчанию используется текущий объект. Если указана БД dbname, отличная от текущей, то необходимо явно указывать объект. По умолчанию используется текущая БД. В случае успеха возвращает непустое значение (символ 'пробел'), иначе пусто. Пример Устанавливаем дату рождения конкретной личности. <#ON O=(OBJ N="Иванов ИИ" C="Личность") AN="дата-рожд\дата рожд" D=((XBASE)"Test\AIS.ab") RET=(_TEXT _VAL="25.04.1817" O=(AT)) >См. также: _, Операции изменяющие БД., Энергичные примитивы., Простые примитивы., |
|