Перейти к содержанию

Синтаксис переменных: различия между версиями

Материал из Химсофт Вики
 
(не показаны 4 промежуточные версии этого же участника)
Строка 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>.


==Переменные как флаги==
==Переменные как флаги==
Строка 92: Строка 92:


'''Решение 4:'''
'''Решение 4:'''
В начале раздела обозначают переменные f и fg: ['f':=0] ['fg':=''].
*В начале раздела обозначают переменные <code>f</code> и <code>fg</code>: <code>['f':=0] ['fg':='']</code>.
В прямоугольнике раздела, где выводится идентификатор записи, задают условие:
*В прямоугольнике раздела, где выводится идентификатор записи, задают условие:
[if [Данные -> Идентификатор записи]>=100]['f':={f}+1]['fq':= {fq}+[IIF({f}=1;'';',')]+[STR([Данные -> Идентификатор записи])]][endif].
::<code>[if [Данные -> Идентификатор записи]>=100]['f':={f}+1]['fq':= {fq}+[IIF({f}=1;'';',')]+[STR([Данные -> Идентификатор записи])]][endif]</code>.
В конце раздела выводят условие:
*В конце раздела выводят условие:
[if {f}>0]Конец[else]Конец[endif] [ВЫРЕЗАТЬ({fq};'')].
::<code>[if {f}>0]Конец[else]Конец[endif] [ВЫРЕЗАТЬ({fq};'')]</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:'''
В разделе документа формируется таблица: концентрация раствора Х (мг/дм3) - ошибка контроля У (%). В конце документа необходимо вывести концентрацию, при которой ошибка контроля будет равна 50%.


'''Решение 7:'''
'''Решение 7:'''
В начале раздела обозначают переменные:
*В начале раздела обозначают переменные:
['result':=50]['x_1':='']['x_2':='']['y_1':='']['y_2':=''] и временные переменные ['tmp_x':=''] ['tmp_y':=''].
::<code>['result':=50]['x_1':='']['x_2':='']['y_1':='']['y_2':=''] и временные переменные ['tmp_x':=''] ['tmp_y':='']</code>.
В прямоугольнике раздела, где выводится расчет ошибки контроля [{res}], выводят условие:
*В прямоугольнике раздела, где выводится расчет ошибки контроля <code>[{res}]</code>, выводят условие:
[if ({res}>=50 и [МОД({res}-50)]<{result})]['result':=[МОД({res}-50)]].
::<code>[if ({res}>=50 и [МОД({res}-50)]<{result})]['result':=[МОД({res}-50)]]</code>.
Далее присваивают соответствующие значения:
*Далее присваивают соответствующие значения:
['x_2':=[Показатели -> Сокращённое наименование показателя]]['y_2':={res}] ['x_1':={tmp_x}]['y_1':={tmp_y}][endif].
::<code>['x_2':=[Показатели -> Сокращённое наименование показателя]]['y_2':={res}] ['x_1':={tmp_x}]['y_1':={tmp_y}][endif]</code>.
Теперь после условия проводят переприсвоение временных переменных:
*Теперь после условия проводят переприсвоение временных переменных:
['tmp_x':=[Показатели -> Сокращённое наименование показателя]]['tmp_y':={res}].
::<code>['tmp_x':=[Показатели -> Сокращённое наименование показателя]]['tmp_y':={res}]</code>.
В конце документа вводят формулу расчета интерполяции, т.е.   
*В конце документа вводят формулу расчета интерполяции, т.е.   
ИК50-96 =[1*{x_1}+[[(50-{y_1})*({x_2}-{x_1})]/[{y_2}-{y_1}]]].
::<code>ИК50-96 =[1*{x_1}+[[(50-{y_1})*({x_2}-{x_1})]/[{y_2}-{y_1}]]]</code>.

Текущая версия от 04:42, 20 февраля 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}]]].