<< Click to Display Table of Contents >> Navigation: Для опытных пользователей > Стандартные фрагменты > Метод стандартных фрагментов > Табличные СФ |
Тело СФ табличного типа (ТФ) есть последовательность строк базисного входного языка АВС, открытых строк и операторов. Строки СФ обрабатываются транслятором стандартных фрагментов в той последовательности, как они записаны в ТФ. Строки базисного входного языка и открытые строки представляют собой обычные последовательности символов и, кроме того, могут содержать в себе идентификаторы (имена) переменных параметров, которые выделяются с двух сторон символами "?" и ".", например: ?МАРКА., ?ТИП. и т.д. Операторы СФ табличного типа записываются по специальным правилам (см. ниже). Строки базисного языка переписываются транслятором в текст-результат с подстановкой вместо идентификаторов переменных параметров их значений. Строки базисного языка игнорируются (опускаются) транслятором в следующих случаях: ·в строке содержится переменный параметр, которому к этому моменту не присвоено никакого значения: в этом случае считается, что он отсутствует по умолчанию; ·в строке содержится хотя бы один переменный параметр, которому к этому моменту присвоен в качестве значения символ "?"; ·строка обходится за счет выполнения операторов условного или безусловного перехода. |
В качестве строк тела фрагмента могут применяться любые строки базисного входного языка. Базисные строки могут переписываться транслятором в текст-результат без изменения, а в случае, если они содержат идентификаторы переменных параметров, в них подставляются значения переменных параметров. Переменные параметры могут содержаться в любых строках и могут входить в строку любое количество раз. Идентификаторы переменных параметров при записи в строках выделяются с двух сторон символами "?" и ".", например:
Е1- Т1.'Ф1* Е2- НОМ.'?ПЛ.+?ПЛ1.*
Если перед открытой строкой тела СФ стоит символ "-", то эта строка называется открытой. Особенность трансляции такой строки состоит в том, что в текст-результат она переписываются без первого символа "-" и последнего символа "*", как бы оставаясь открытой, что позволяет производить "сцепление" нескольких строк в одну строку, например, если в исходном тексте записаны строки:
-Е1-100* - '* -Ф100*
то после трансляции получим строку:
Е1-100'Ф100*
В дальнейшем будут продемонстрированы полезные применения открытых строк, а пока отметим, что этот пример показывает применение в качестве строк СФ таких строк, которые не являются базисными строками входного языка АВС и превращаются в базисные уже после трансляции. Если в базисной строке содержится хотя бы один переменный параметр, который к моменту обработки данной строки будет не определён или будет иметь специальное значение - символ "?", то вся строка исключается и в текст-результат не попадает. Этим способом можно без труда исключить все лишние строки стандартного фрагмента: для этого достаточно не указывать значения "лишних" параметров, или задавать в качестве их значений символ "?". |
Переменные параметры вводятся в ТФ с помощью идентификаторов переменных параметров:
<идентификатор>::=<буква>[<буква> I <цифра> I <_>] ...
Буквы могут быть использованы русского и латинского алфавита, как заглавные, так и строчные. Общее правило записи идентификаторов переменных параметров состоит в том, что идентификатор может состоять только из букв, цифр, символов, например:
А10000, БЛОК, ТАБЛИЦА, БЕТОН_МАРКИ_400, Процент_ФЗН и т.д.
Идентификаторы записываются в строках базисного языка, в операторах и в обращениях к стандартным фрагментам. В строках базисного языка идентификаторы выделяются с двух сторон символами "?" и ".", например:
Е1- ТИП.'550'?ЦЕНА.*
В операторах и обращениях к СФ идентификаторы записываются в обычном виде или, там где может возникнуть неоднозначность прочтения, с выделением с двух сторон символами "?" и ".". Подробнее это рассматривается при описании операторов. Идентификаторы могут принимать значения, представляющие собой последовательности строк, не содержащие символов "'" и "*". Эти символы выполняют специальные функции: "'" является разделителем для отдельных параметров строки, а "*" - является признаком конца строки. Как уже отмечалось, переменная может принимать специальное значение - символ "?", которое используется для исключения строк из тела фрагмента. Значение переменной <пусто> не является особым значением. Если переменная принимает одно значение, то она понимается как скалярная переменная, но переменная может принимать несколько значений и в этом случае выполнять роль одномерного массива или вектора. Эта возможность применяется для работы оператора ЦИКЛ.
Пример: Т2=СМЕНА* Т3=100'=200'=300*
Конкретные значения переменные параметры получают при обращении к стандартным фрагментам, а также с помощью операторов вычисления переменных и присваивания значений переменным. В теле фрагмента любой переменный параметр может перевычисляться или переопределяться любое количество раз. Имеются ограничения на перевычисление (переопределение) переменных параметров внутри циклов. |