4. ЯЗЫК ОПИСАНИЯ КОНТРОЛЕЙ

Настоящий раздел содержит формальное описание языка описания контролей. Лексема <Условие> описывает выражение, которое может быть использовано для формирования атрибута condition элемента control xml-шаблона. Лексема <Логическое выражение> описывает выражение, которое может быть использовано для формирования атрибута rule элемента control xml-шаблона. Лексема <Условие на период> описывает выражение, которое может быть использовано для формирования атрибута periodClause элементов control, cell, row, column xml-шаблона.

Для описания языка используются следующие соглашения и ограничения:

1. Служебные символы - символы, используемые при описании языка контролей:

<> - лексема (грамматическое понятие);

, - альтернатива (либо..., либо...);

[] - необязательный элемент языка (может отсутствовать);

2. Для того чтобы отличать символы языка описания контролей от служебных символов, первые будут выделяться жирным шрифтом и красным цветом ([],);

3. <Число> - целое число или действительное число (дробная часть отделяется ".");

4. <Код> - натуральное число (номер раздела, строки, графы соответственно);

5. <Значение> - значение специфики (допустимые значение для соответствующей графы-специфики);

6. <Наименование функции> - наименование функции (допустимые наименования приведены в табл. 16);

7. <Код периода> - значение кода из справочника s_time или s_mes в зависимости от того, какой из справочников используется в xml-шаблоне;

8. &NP - терминальный символ, обозначающий номер текущего периода, введенный на титульной странице формы;

9. Символ "*" при определении координаты элемента означает "для всех значений";

10. SUM - оператор с одним операндом. Одновременно обозначает групповую операцию и макроподстановку по строкам или графам. Данная операция является контекст-зависимой и может интерпретироваться как

a. Для каждой из перечисленных в элементе строк выполняется сложение по перечисленным графам;

b. Для каждой из перечисленных в элементе граф выполняется сложение по перечисленным строкам;

c. Выполняется сложение всех ячеек на пересечении граф и строк.

Вариант интерпретации определяется вторым операндом выражения. Если есть второй операнд такой, что в обоих операндах одинаковый набор строк, то используется первый вариант. Если есть второй операнд такой, что в обоих операндах одинаковый набор граф, то используется второй вариант. Если второй операнд - скалярное выражение, то используется третий вариант;

11. Не допускается использования вложенного оператора SUM.

<Условие>=<Логическое выражение><Логический предикат><Логическое выражение>

[<Логический предикат><Логическое выражение>]

<Логический предикат>:= AND, OR

<Логическое выражение>:= <Условие на период>,

<Арифметическое выражение> <Логический оператор><Арифметическое выражение>

[<Логический оператор><Арифметическое выражение>]

<Логический оператор>:= |<|, |00000001.wmz|, |=|, |00000002.wmz|, |>|, |<>|

<Арифметическое выражение>:= <Арифметическое выражение><Add><Слагаемое>

<Add>:= +, -

<Арифметическое выражение>:= <Слагаемое>

<Слагаемое>:= <Слагаемое> <Multy> <Множитель>

<Multy>:= *, /

<Слагаемое>:= <Множитель>

<Множитель>:= <Число>, <Элемент>,<Сумма>,<Функция>

<Множитель>:= (<Арифметическое выражение>)

<Функция>:= <Наименование функции>(<Список параметров>)

<Список параметров>:= <Список параметров>, <Арифметическое выражение>

<Список параметров>:= <Арифметическое выражение>

<Сумма>:= SUM<Область действия>

<Область действия>:= <Элемент>, <Функция>, (<Арифметическое выражение>)

<Элемент>:= <За предыдущий период>, <За текущий период>

<За предыдущий период>:= {{<Координаты>}}

<За текущий период>:= {<Координаты>}

<Координаты>:= <Раздел> <Строка> <Графа> [<Список специфик>]

<Список специфик>:= <Специфика> [<Специфика> [<Специфика>]]

<Специфика>:= [<Описание специфики>]

<Описание специфики>:= *, <Список значений>

<Список значений>:= <Список значений>, <Значение>

<Список значений>:= <Значение>

<Раздел>:= [<Код>]

<Строка>:= [<Описание позиций>]

<Графа>:= [<Описание позиций>]

<Описание позиций>:= *, <Список позиций>

<Список позиций>:= <Список позиций>, <Позиция>

<Позиция>:= <Код>, <Диапазон>

<Диапазон>:= <Код> - <Код>

<Условие на период>:= (<Составное выражение>).

<Составное выражение>:= <Составное выражение> <Логический предикат> <Выражение>

<Выражение>:= &NP <Логический оператор> <Код периода>

<Выражение>:= &NP in (<Список периодов>)

<Список периодов>:= <Список периодов>, <Код периода>

<Список периодов>:= <Код периода>

В таблице 16 приведен список допустимых функций.