Синтаксис переменных: различия между версиями
Sidminik (обсуждение | вклад) |
Sidminik (обсуждение | вклад) Нет описания правки |
||
| (не показано 13 промежуточных версий этого же участника) | |||
| Строка 7: | Строка 7: | ||
---- | ---- | ||
В качестве <code>Выражения</code> может быть пустота (<code>''</code>), <code>0</code>, число или строка и т.д. | В качестве <code>Выражения</code> может быть пустота (<code><nowiki>''</nowiki></code>), <code>0</code>, число или строка и т.д. | ||
При этом <code>''</code> и <code>ПУСТО</code> – это разные функции: | При этом <code><nowiki>''</nowiki></code> и <code>ПУСТО</code> – это разные функции: | ||
*<code>''</code> – означает задать, | *<code><nowiki>''</nowiki></code> – означает задать, | ||
*<code>ПУСТО</code> – означает определить. | *<code>ПУСТО</code> – означает определить. | ||
---- | ---- | ||
В <code>Выражении</code> может использоваться <code>подвыражение</code>: | В <code>"Выражении"</code> может использоваться <code>"подвыражение"</code>: | ||
<code>['Переменная':=1+[Значение]]</code> | <code>['Переменная':=1+[Значение]]</code> | ||
| Строка 53: | Строка 53: | ||
'''Решение 1:''' | '''Решение 1:''' | ||
*В начале раздела обозначают переменную <code>G</code>: <code>['G':=0]</code>. | *В начале раздела обозначают переменную <code>'G'</code>: <code>['G':=0]</code>. | ||
*В обоих прямоугольниках задают одинаковое условие: <code>['G':={G}+1][{G}]</code>. | *В обоих прямоугольниках задают одинаковое условие: <code>['G':={G}+1][{G}]</code>. | ||
| Строка 62: | Строка 62: | ||
'''Решение 2:''' | '''Решение 2:''' | ||
*В начале первого раздела или в начале документа объявляют переменную <code>G</code>: <code>['G':=0]</code>. | *В начале первого раздела или в начале документа объявляют переменную <code>'G'</code>: <code>['G':=0]</code>. | ||
*В прямоугольнике каждого раздела задают условие: <code>['G':={G}+1][{G}]</code>. | *В прямоугольнике каждого раздела задают условие: <code>['G':={G}+1][{G}]</code>. | ||
| Строка 68: | Строка 68: | ||
'''Пример 3:''' | '''Пример 3:''' | ||
Необходимо выделить жирным шрифтом слово <code>Конец</code>, расположенное в конце раздела, если встречаются идентификаторы записи больше 100. Далее посчитать и вывести количество идентификаторов записи больше 100 в конце раздела. | Необходимо выделить жирным шрифтом слово <code>"Конец"</code>, расположенное в конце раздела, если встречаются идентификаторы записи больше 100. Далее посчитать и вывести количество идентификаторов записи больше 100 в конце раздела. | ||
'''Решение 3:''' | '''Решение 3:''' | ||
*В начале раздела обозначают переменную <code>f</code>: <code>['f':=0]</code>. | *В начале раздела обозначают переменную <code>'f'</code>: <code>['f':=0]</code>. | ||
*В прямоугольнике раздела, где выводится идентификатор записи, задают условие: | *В прямоугольнике раздела, где выводится идентификатор записи, задают условие: | ||
::<code>[if [Данные -> Идентификатор записи]>=100]['f':={f}+1][endif]</code>. | ::<code>[if[Данные -> Идентификатор записи]>=100]['f':={f}+1][endif]</code>. | ||
*В конце раздела выводят условие: | *В конце раздела выводят условие: | ||
::<code>[if {f}>0]Конец[else]Конец[endif] Итого: [{f}]</code>. | ::<code>[if{f}>0]Конец[else]Конец[endif] Итого: [{f}]</code>. | ||
В случае если не надо считать количество, то можно поступить следующим образом: | В случае если не надо считать количество, то можно поступить следующим образом: | ||
*В начале раздела обозначают переменную <code>f</code> с пустым значением: <code>['f':= '']</code>. | *В начале раздела обозначают переменную <code>'f'</code> с пустым значением: <code>['f':= <nowiki>''</nowiki>]</code>. | ||
*В прямоугольнике раздела, где выводится идентификатор записи, задают условие: | *В прямоугольнике раздела, где выводится идентификатор записи, задают условие: | ||
::<code>[if {f}:ПУСТО и [Данные -> Идентификатор записи]>=100]['f':='ДА!'][endif]</code>. | ::<code>[if{f}:ПУСТО и [Данные -> Идентификатор записи]>=100]['f':='ДА!'][endif]</code>. | ||
*В прямоугольнике конца раздела пишут следующим образом: | *В прямоугольнике конца раздела пишут следующим образом: | ||
::<code>[if {f}]Конец[else]Конец[endif]</code>. | ::<code>[if{f}]Конец[else]Конец[endif]</code>. | ||
Такой подход будет работать значительно быстрее и грамотнее, т.к. присвоение будет происходить всего один раз и проверка на пустоту работает быстрее преобразованию к типам (в данном случае к числу <code>{f}>0</code>). | Такой подход будет работать значительно быстрее и грамотнее, т.к. присвоение будет происходить всего один раз и проверка на пустоту работает быстрее преобразованию к типам (в данном случае к числу <code>{f}>0</code>). | ||
| Строка 92: | Строка 92: | ||
'''Решение 4:''' | '''Решение 4:''' | ||
*В начале раздела обозначают переменные <code>f</code> и <code>fg</code>: <code>['f':=0] ['fg':='']</code>. | *В начале раздела обозначают переменные <code>'f'</code> и <code>'fg'</code>: <code>['f':=0] ['fg':=<nowiki>''</nowiki>]</code>. | ||
*В прямоугольнике раздела, где выводится идентификатор записи, задают условие: | *В прямоугольнике раздела, где выводится идентификатор записи, задают условие: | ||
::<code>[if [Данные -> Идентификатор записи]>=100]['f':={f}+1]['fq':= {fq}+[IIF({f}=1;'';',')]+[STR([Данные -> Идентификатор записи])]][endif]</code>. | ::<code>[if[Данные -> Идентификатор записи]>=100]['f':={f}+1]['fq':= {fq}+[IIF({f}=1;<nowiki>''</nowiki>;',')]+[STR([Данные -> Идентификатор записи])]][endif]</code>. | ||
*В конце раздела выводят условие: | *В конце раздела выводят условие: | ||
::<code>[if {f}>0]Конец[else]Конец[endif] [ВЫРЕЗАТЬ({fq};'')]</code>. | ::<code>[if{f}>0]Конец[else]Конец[endif] [ВЫРЕЗАТЬ({fq};<nowiki>''</nowiki>)]</code>. | ||
---- | ---- | ||
| Строка 104: | Строка 104: | ||
'''Решение 5:''' | '''Решение 5:''' | ||
В начале раздела обозначают переменные abs, num: ['abs':=100000]['num':=0]. | *В начале раздела обозначают переменные <code>abs</code>, <code>num</code>: <code>['abs':=100000]['num':=0]</code>. | ||
В прямоугольнике раздела, где выводится идентификатор записи, задают условие: | *В прямоугольнике раздела, где выводится идентификатор записи, задают условие: | ||
[if {abs}>=[МОД([[Данные -> Идентификатор записи]-100])]]['abs':=[МОД([[Данные -> Идентификатор записи]-100])]]['num':=[НомерЗаписи(0)]][endif]. | ::<code>[if {abs}>=[МОД([[Данные -> Идентификатор записи]-100])]]['abs':=[МОД([[Данные -> Идентификатор записи]-100])]]['num':=[НомерЗаписи(0)]][endif]</code>. | ||
В конце раздела выводят порядковый номер показателя [{num}]. | *В конце раздела выводят порядковый номер показателя <code>[{num}]</code>. | ||
---- | ---- | ||
| Строка 115: | Строка 115: | ||
'''Решение 6:''' | '''Решение 6:''' | ||
В начале раздела обозначают переменную b: ['b':= [Данные -> Идентификатор записи]]. | В начале раздела обозначают переменную <code>b</code>: <code>['b':= [Данные -> Идентификатор записи]]</code>. | ||
В прямоугольнике раздела, где выводится наименование показателя и его идентификатор записи, выводят следующие данные: | В прямоугольнике раздела, где выводится наименование показателя и его идентификатор записи, выводят следующие данные: | ||
[{b}] (предыдущий идентификатор) | *<code>[{b}]</code> (предыдущий идентификатор) | ||
['b':=[Данные -> Идентификатор записи]][{b}] (текущий идентификатор). | *<code>['b':=[Данные -> Идентификатор записи]][{b}]</code> (текущий идентификатор). | ||
---- | |||
'''Пример 7:''' | |||
В разделе документа формируется таблица: концентрация раствора Х (мг/дм3) - ошибка контроля У (%). В конце документа необходимо вывести концентрацию, при которой ошибка контроля будет равна 50%. | |||
{|class="wikitable" style="margin:auto; background-color: #fff;" | {|class="wikitable" style="margin:auto; background-color: #fff;" | ||
| Строка 141: | Строка 146: | ||
|- | |- | ||
|} | |} | ||
'''Решение 7:''' | |||
*В начале раздела обозначают переменные: | |||
::<code>['result':=50]['x_1':=<nowiki>''</nowiki>]['x_2':=<nowiki>''</nowiki>]['y_1':=<nowiki>''</nowiki>]['y_2':=<nowiki>''</nowiki>]</code> и временные переменные <code>['tmp_x':=<nowiki>''</nowiki>] ['tmp_y':=<nowiki>''</nowiki>]</code>. | |||
*В прямоугольнике раздела, где выводится расчет ошибки контроля <code>[{res}]</code>, выводят условие: | |||
::<code>[if({res}>=50 и [МОД({res}-50)]<{result})]['result':=[МОД({res}-50)]]</code>. | |||
*Далее присваивают соответствующие значения: | |||
::<code>['x_2':=[Показатели -> Сокращённое наименование показателя]]['y_2':={res}] ['x_1':={tmp_x}]['y_1':={tmp_y}][endif]</code>. | |||
*Теперь после условия проводят переприсвоение временных переменных: | |||
::<code>['tmp_x':=[Показатели -> Сокращённое наименование показателя]]['tmp_y':={res}]</code>. | |||
*В конце документа вводят формулу расчета интерполяции, т.е. | |||
::<code>ИК50-96 =[1*{x_1}+[[(50-{y_1})*({x_2}-{x_1})]/[{y_2}-{y_1}]]]</code>. | |||
---- | ---- | ||
Когда в документе есть два вертикальных раздела, вложенных друг в друга как показано на рисунке 1 (которые будут разворачиваться), то функция <code>[НомерЗаписи()]</code> не применима. Необходимо присвоение переменной. | |||
Для того что бы колонки автоматически и правильно нумеровались, надо объявить переменную выше по дереву, но не в этих разделах. | |||
Переменной присваивается то значение числа, на котором закончилась нумерация. | |||
Например, нумерация закончилась на цифре 6, значит пишем: <code>['G':=6]</code>. | |||
[[Файл:const1.png|704px|center|thumb|Присвоение переменной]] | |||
После объявления переменной, присваиваем ей значение: <code>['G':={G}+1][{G}]</code>. | |||
Это означает, что в каждой последующей колонке после 6 надо прибавлять по единице и выводить значение. | |||
То есть <code>['G':={6}+1][{7}], ['G':={7}+1][{8}]</code>. | |||
Значение присваивается в той колонке, где должна быть продолжена нумерация. | |||
В итоге мы получим следующую картину (рисунок 2). | |||
В | |||
[[Файл:const2.png|469px|center|thumb|Результат присвоения переменных]] | |||
Раздел <code>Показатели</code> развернулся, в нём развернулся раздел <code>Диапазоны</code> и автоматически пронумеровались колонки. | |||
Текущая версия от 09:16, 2 марта 2026
Основные правила
Для того чтобы в документе обозначить какую-либо переменную, используют следующий синтаксис:
['Переменная':=Выражение]
В качестве Выражения может быть пустота (''), 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}]]].
Когда в документе есть два вертикальных раздела, вложенных друг в друга как показано на рисунке 1 (которые будут разворачиваться), то функция [НомерЗаписи()] не применима. Необходимо присвоение переменной.
Для того что бы колонки автоматически и правильно нумеровались, надо объявить переменную выше по дереву, но не в этих разделах.
Переменной присваивается то значение числа, на котором закончилась нумерация.
Например, нумерация закончилась на цифре 6, значит пишем: ['G':=6].

После объявления переменной, присваиваем ей значение: ['G':={G}+1][{G}].
Это означает, что в каждой последующей колонке после 6 надо прибавлять по единице и выводить значение.
То есть ['G':={6}+1][{7}], ['G':={7}+1][{8}].
Значение присваивается в той колонке, где должна быть продолжена нумерация.
В итоге мы получим следующую картину (рисунок 2).

Раздел Показатели развернулся, в нём развернулся раздел Диапазоны и автоматически пронумеровались колонки.