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

Операторы if и for: различия между версиями

Материал из Химсофт Вики
 
(не показано 5 промежуточных версий этого же участника)
Строка 7: Строка 7:
==Общие правила пользования операторами==
==Общие правила пользования операторами==


Операторы – это специальные ключевые слова, вставляемые в текст прямоугольника в квадратных скобках.
''Операторы'' – это специальные ключевые слова, вставляемые в текст прямоугольника в квадратных скобках.


Фрагменты текста между операторами вставляются от скобки до скобки, поэтому необходимо помнить, что они должны вплотную прилегать к скобкам, без всяких пробелов и пр.
Фрагменты текста между операторами вставляются от скобки до скобки, поэтому необходимо помнить, что они должны вплотную прилегать к скобкам, без всяких пробелов и пр.


Ключевые слова не чувствительны к регистру букв. То есть, нет разницы, как писать - else, ELSE или Else.
Ключевые слова не чувствительны к регистру букв. То есть, нет разницы, как писать - <code>else</code>, <code>ELSE</code> или <code>Else</code>.


Внутри скобок допустимы пробелы и переходы на новую строку. Также можно менять формат текста внутри скобок – это ни на что не повлияет.  
Внутри скобок допустимы пробелы и переходы на новую строку.  
 
Также можно менять формат текста внутри скобок – это ни на что не повлияет.  


Всё это даёт возможность сделать текст прямоугольника более «читабельным».  
Всё это даёт возможность сделать текст прямоугольника более «читабельным».  
Строка 41: Строка 43:
==If==
==If==


Синтаксис 1:
===Синтаксис 1:===


[if ЛогическоеВыражение]Фрагмент для «истины»[endif]
<code>[if ЛогическоеВыражение]Фрагмент для «истины»[endif]</code>


Смысл:
'''Смысл:'''
Вычисляется логическое выражение, и если результат – истина, то в прямоугольник вставляется фрагмент от закрывающей квадратной скобки оператора if до открывающей квадратной скобки оператора endif. Иначе всё от открывающей скобки оператора if до закрывающей скобки оператора endif пропускается.
Вычисляется логическое выражение, и если результат – истина, то в прямоугольник вставляется фрагмент от закрывающей квадратной скобки оператора <code>if</code> до открывающей квадратной скобки оператора <code>endif</code>.  


Пример:
Иначе всё от открывающей скобки оператора <code>if</code> до закрывающей скобки оператора <code>endif</code> пропускается.
 
'''Пример:'''
<syntaxhighlight>
[if не[Результат анализа -> Значение показателя]:Пусто
[if не[Результат анализа -> Значение показателя]:Пусто
и [Результат анализа -> Значение показателя]!=0
и [Результат анализа -> Значение показателя]!=0
][Результат анализа -> Значение показателя] г/см2[
][Результат анализа -> Значение показателя] г/см2[
endif]
endif]
</syntaxhighlight>


Синтаксис 2:
===Синтаксис 2:===
[if ЛогическоеВыражение]Фрагмент для “истины»[else]Фрагмент для “лжи»[endif]
<code>[if ЛогическоеВыражение]Фрагмент для “истины»[else]Фрагмент для “лжи»[endif]</code>


Смысл:
'''Смысл:'''
Вычисляется логическое выражение, и если результат – истина, то в прямоугольник вставляется фрагмент от закрывающей квадратной скобки оператора if до открывающей квадратной скобки оператора else. Иначе вставляется фрагмент от else до endif.
Вычисляется логическое выражение, и если результат – истина, то в прямоугольник вставляется фрагмент от закрывающей квадратной скобки оператора <code>if</code> до открывающей квадратной скобки оператора <code>else</code>.  


Пример:
Иначе вставляется фрагмент от <code>else</code> до <code>endif</code>.
 
'''Пример:'''
<syntaxhighlight>
[if [Результат анализа -> Значение показателя]<=[Результат анализа -> норма]
[if [Результат анализа -> Значение показателя]<=[Результат анализа -> норма]
][Результат анализа -> Значение показателя][
][Результат анализа -> Значение показателя][
Строка 66: Строка 75:
][Результат анализа -> Значение показателя][
][Результат анализа -> Значение показателя][
endif]
endif]
</syntaxhighlight>


==For==
==For==
Синтаксис 1:
===Синтаксис 1:===
[for Запрос]Фрагмент для повторения[endfor]
<code>[for Запрос]Фрагмент для повторения[endfor]</code>


Смысл:
'''Смысл:'''
Фрагмент повторяется для каждой записи из запроса с указанным названием от первой до последней.
Фрагмент повторяется для каждой записи из запроса с указанным названием от первой до последней.


Пример:
'''Пример:'''
Вывести перечень показателей в ячейке.
Вывести перечень показателей в ячейке.


<syntaxhighlight>
[for Показатели  
[for Показатели  
][Показатели -> Название]
][Показатели -> Название]
[endfor]
[endfor]
В результате все показатели будут перечислены в столбик (каждый – на новой строке, т.к. строка кончается до открывающей скобки endfor.
</syntaxhighlight>
 
В результате все показатели будут перечислены в столбик (каждый – на новой строке, т.к. строка кончается до открывающей скобки <code>endfor</code>.


Синтаксис 2:
===Синтаксис 2:===
[for Запрос]Фрагмент для повторения[!]Фрагмент-разделитель[endfor]
<code>[for Запрос]Фрагмент для повторения[!]Фрагмент-разделитель[endfor]</code>


Смысл:
'''Смысл:'''
Для каждой записи указанного запроса, от первой до последней, в прямоугольник вставляются фрагменты для повторения. После каждого фрагмента, кроме последнего, следует фрагмент-разделитель.
Для каждой записи указанного запроса, от первой до последней, в прямоугольник вставляются фрагменты для повторения. После каждого фрагмента, кроме последнего, следует фрагмент-разделитель.


Пример:
'''Пример:'''
Вывести перечень показателей в ячейке через символ «;»
Вывести перечень показателей в ячейке через символ <code>;</code>


<syntaxhighlight>
[for Показатели  
[for Показатели  
][Показатели -> Название][
][Показатели -> Название][
!]; [
!]; [
endfor]
endfor]
Примечание. Если в запросе пустота, то функция отрабатывает один раз с значением ПУСТО.
</syntaxhighlight>
Т.е. если выводится только значение
 
[for Примечание][Примечание -> Строка][!], [endfor]
'''Примечание.''' Если в запросе пустота, то функция отрабатывает один раз с значением <code>ПУСТО</code>.
то вы ничего не заметите
Т.е. если выводится только значение <code>[for Примечание][Примечание -> Строка][!], [endfor]</code>
но, если внутри функции есть какие-то дополнительные символы/переменные, то выходит некорректно
то вы ничего не заметите  
[for Примечание][Примечание -> Строка] - значение[!], [endfor] -> в результате будет
но, если внутри функции есть какие-то дополнительные символы/переменные,  
-значение.
то выходит некорректно <code>[for Примечание][Примечание -> Строка] - значение[!], [endfor] -></code>
в результате будет - значение.

Текущая версия от 06:35, 18 февраля 2026

Операторы if и for – это замена для функций if и str2.

Дело в том, что функции работают в выражениях внутри квадратных скобок, где все изменения формата текста игнорируются.

Операторы работают непосредственно с форматированным текстом, что открывает множество возможностей.

Общие правила пользования операторами

Операторы – это специальные ключевые слова, вставляемые в текст прямоугольника в квадратных скобках.

Фрагменты текста между операторами вставляются от скобки до скобки, поэтому необходимо помнить, что они должны вплотную прилегать к скобкам, без всяких пробелов и пр.

Ключевые слова не чувствительны к регистру букв. То есть, нет разницы, как писать - else, ELSE или Else.

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

Также можно менять формат текста внутри скобок – это ни на что не повлияет.

Всё это даёт возможность сделать текст прямоугольника более «читабельным».

Пример: [if не [Результаты->Значение]:Пусто][if [Результаты->Значение]<[Результаты->Минимум]][Результаты->Минимум][else][Результаты->Значение][endif][else] - [endif]

Это же самое выражение можно записать следующим образом:

[if не [Результаты->Значение]:Пусто][
if [Результаты->Значение]<[Результаты->Минимум]]<[Результаты->Минимум][
else
][Результаты->Значение][
endif][
else
] - [
endif]

Фрагменты текста из операторов не просто вставляются, а интерпретируются точно так же, как обычный исходный текст прямоугольника.

То есть внутри этих фрагментов также можно использовать операторы.

Примечание: обратите внимание на оформление вложенных друг в друга операторов "лесенкой". Рекомендуется делать так же, т.к. будет намного легче читать прописанное условие.

If

Синтаксис 1:

[if ЛогическоеВыражение]Фрагмент для «истины»[endif]

Смысл: Вычисляется логическое выражение, и если результат – истина, то в прямоугольник вставляется фрагмент от закрывающей квадратной скобки оператора if до открывающей квадратной скобки оператора endif.

Иначе всё от открывающей скобки оператора if до закрывающей скобки оператора endif пропускается.

Пример:

[if не[Результат анализа -> Значение показателя]:Пусто
и [Результат анализа -> Значение показателя]!=0
][Результат анализа -> Значение показателя] г/см2[
endif]

Синтаксис 2:

[if ЛогическоеВыражение]Фрагмент для “истины»[else]Фрагмент для “лжи»[endif]

Смысл: Вычисляется логическое выражение, и если результат – истина, то в прямоугольник вставляется фрагмент от закрывающей квадратной скобки оператора if до открывающей квадратной скобки оператора else.

Иначе вставляется фрагмент от else до endif.

Пример:

[if [Результат анализа -> Значение показателя]<=[Результат анализа -> норма]
][Результат анализа -> Значение показателя][
else
][Результат анализа -> Значение показателя][
endif]

For

Синтаксис 1:

[for Запрос]Фрагмент для повторения[endfor]

Смысл: Фрагмент повторяется для каждой записи из запроса с указанным названием от первой до последней.

Пример: Вывести перечень показателей в ячейке.

[for Показатели 
][Показатели -> Название]
[endfor]

В результате все показатели будут перечислены в столбик (каждый – на новой строке, т.к. строка кончается до открывающей скобки endfor.

Синтаксис 2:

[for Запрос]Фрагмент для повторения[!]Фрагмент-разделитель[endfor]

Смысл: Для каждой записи указанного запроса, от первой до последней, в прямоугольник вставляются фрагменты для повторения. После каждого фрагмента, кроме последнего, следует фрагмент-разделитель.

Пример: Вывести перечень показателей в ячейке через символ ;

[for Показатели 
][Показатели -> Название][
!]; [
endfor]

Примечание. Если в запросе пустота, то функция отрабатывает один раз с значением ПУСТО. Т.е. если выводится только значение [for Примечание][Примечание -> Строка][!], [endfor] то вы ничего не заметите но, если внутри функции есть какие-то дополнительные символы/переменные, то выходит некорректно [for Примечание][Примечание -> Строка] - значение[!], [endfor] -> в результате будет - значение.