Синтаксис переменных
Основные правила
Для того чтобы в документе обозначить какую-либо переменную, используют следующий синтаксис:
['Переменная':=Выражение]
В качестве Выражения может быть пустота (), 0, число или строка и т.д.
При этом и ПУСТО – это разные функции:
– означает задать,ПУСТО– означает определить.
В Выражении может использоваться подвыражение:
['Переменная':=1+[Значение]]
Изначально формат используемой переменной может быть абсолютно любым, но иногда нужно явное преобразование, например, к числу с ПЗ.
Для этого умножают переменную на 1.0.
Для того чтобы вывести значение переменной в документе, используют следующий синтаксис:
[{Переменная}]
Внимание!
Прежде чем вывести переменную, ее нужно обозначить в документе.
Ячейка с обозначенной переменной должна быть расположена выше ячейки с ее использованием или выводом.
Для этого с помощью кнопок перемещения прямоугольников по дереву выстраивают нужный порядок.
Иными словами, если при построении документа запись [{Переменная}] встретится раньше чем её первое присвоение ('Переменная'), то будет сгенерирована ошибка.
Внимание!
Название переменной не должно совпадать с зарезервированным названием какой-либо функции или названием параметра этой формы НД.
Пример 1: Необходимо пронумеровать по порядку два прямоугольника, которые находятся в одном разделе.
Решение 1:
- В начале раздела обозначают переменную
G:['G':=0]. - В обоих прямоугольниках задают одинаковое условие:
['G':={G}+1][{G}].
Пример 2: Необходимо пронумеровать по порядку прямоугольники в нескольких разделах, лежащих рядом друг с другом.
Решение 2:
- В начале первого раздела или в начале документа объявляют переменную
G:['G':=0]. - В прямоугольнике каждого раздела задают условие:
['G':={G}+1][{G}].
Переменные как флаги
Пример 3:
Необходимо выделить жирным шрифтом слово Конец, расположенное в конце раздела, если встречаются идентификаторы записи больше 100. Далее посчитать и вывести количество идентификаторов записи больше 100 в конце раздела.
Решение 3:
- В начале раздела обозначают переменную
f:['f':=0]. - В прямоугольнике раздела, где выводится идентификатор записи, задают условие:
[if [Данные -> Идентификатор записи]>=100]['f':={f}+1][endif].
- В конце раздела выводят условие:
[if {f}>0]Конец[else]Конец[endif] Итого: [{f}].
В случае если не надо считать количество, то можно поступить следующим образом:
- В начале раздела обозначают переменную
fс пустым значением:['f':= ]. - В прямоугольнике раздела, где выводится идентификатор записи, задают условие:
[if {f}:ПУСТО и [Данные -> Идентификатор записи]>=100]['f':='ДА!'][endif].
- В прямоугольнике конца раздела пишут следующим образом:
[if {f}]Конец[else]Конец[endif].
Такой подход будет работать значительно быстрее и грамотнее, т.к. присвоение будет происходить всего один раз и проверка на пустоту работает быстрее преобразованию к типам (в данном случае к числу {f}>0).
Пример 4: Сделать то же самое, что и в примере 2. Дополнительно вывести все идентификаторы записи, которые больше 100 в строку в конце раздела.
Решение 4:
- В начале раздела обозначают переменные
fиfg:['f':=0] ['fg':=]. - В прямоугольнике раздела, где выводится идентификатор записи, задают условие:
[if [Данные -> Идентификатор записи]>=100]['f':={f}+1]['fq':= {fq}+[IIF({f}=1;;',')]+[STR([Данные -> Идентификатор записи])]][endif].
- В конце раздела выводят условие:
[if {f}>0]Конец[else]Конец[endif] [ВЫРЕЗАТЬ({fq};)].
Пример 5: Необходимо вывести порядковый номер показателя, у которого значение идентификатора записи ближе к 100.
Решение 5:
- В начале раздела обозначают переменные
abs,num:['abs':=100000]['num':=0]. - В прямоугольнике раздела, где выводится идентификатор записи, задают условие:
[if {abs}>=[МОД([[Данные -> Идентификатор записи]-100])]]['abs':=[МОД([[Данные -> Идентификатор записи]-100])]]['num':=[НомерЗаписи(0)]][endif].
- В конце раздела выводят порядковый номер показателя
[{num}].
Пример 6: Необходимо вывести в прямоугольнике: наименование показателя, его идентификатор записи и идентификатор записи выше расположенного показателя.
Решение 6:
В начале раздела обозначают переменную b: ['b':= [Данные -> Идентификатор записи]].
В прямоугольнике раздела, где выводится наименование показателя и его идентификатор записи, выводят следующие данные:
[{b}](предыдущий идентификатор)['b':=[Данные -> Идентификатор записи]][{b}](текущий идентификатор).
Пример 7: В разделе документа формируется таблица: концентрация раствора Х (мг/дм3) - ошибка контроля У (%). В конце документа необходимо вывести концентрацию, при которой ошибка контроля будет равна 50%.
| Концентрация, мг/дм3 | 0,1 | 0,2 | 0,5 | 1,0 | 1,5 | 2,0 | 2,5 |
| Ошибка контроля, % | 17,0 | 24,1 | 31,1 | 38,2 | 50,8 | 58,8 | 67,2 |
Решение 7:
- В начале раздела обозначают переменные:
['result':=50]['x_1':=]['x_2':=]['y_1':=]['y_2':=] и временные переменные ['tmp_x':=] ['tmp_y':=].
- В прямоугольнике раздела, где выводится расчет ошибки контроля
[{res}], выводят условие:
[if ({res}>=50 и [МОД({res}-50)]<{result})]['result':=[МОД({res}-50)]].
- Далее присваивают соответствующие значения:
['x_2':=[Показатели -> Сокращённое наименование показателя]]['y_2':={res}] ['x_1':={tmp_x}]['y_1':={tmp_y}][endif].
- Теперь после условия проводят переприсвоение временных переменных:
['tmp_x':=[Показатели -> Сокращённое наименование показателя]]['tmp_y':={res}].
- В конце документа вводят формулу расчета интерполяции, т.е.
ИК50-96 =[1*{x_1}+[[(50-{y_1})*({x_2}-{x_1})]/[{y_2}-{y_1}]]].