# Sub..end sub

Оператор управления sub..end sub определяет подпрограмму, которая должна вызываться оператором call.

Синтаксис:

Sub name [ ( paramlist )] statements end sub

Аргументы копируются в подпрограмму и снова копируются обратно при выходе из подпрограммы, если соответствующий фактический параметр в операторе call представляет собой имя переменной.

Если в подпрограмме присутствует больше формальных параметров, чем фактических параметров, передаваемых оператором call, то дополнительные параметры инициализируются со значением NULL, и их можно использовать в качестве локальных переменных в подпрограмме.

Поскольку оператор sub является оператором управления и заканчивается точкой с запятой или знаком конца строки, каждое из двух его возможных предложений (sub и end sub) не должно выходить за границу строки.

Аргументы:

аргументы Sub

| Аргумент | Описание |
| --- | --- |
| name | Имя подпрограммы. |
| paramlist | Список имен переменных, разделенных запятой, для формальных параметров подпрограммы. Они могут использоваться как любая другая переменная в подпрограмме. |
| statements | Любая группа, состоящая из одного или нескольких операторов скрипта QlikView. |

Пример 1:

`Sub INCR 
 (I,J)` `I = I + 
 1` `Exit Sub 
 when I < 10` `J = J + 
 1` `End Sub` `Call INCR 
 (X,Y)`

Пример 2: — передача параметра

`Sub ParTrans 
 (A,B,C)` `A=A+1` `B=B+1` `C=C+1` `End Sub` `A=1` `X=1` `C=1` `Call ParTrans 
 (A, (X+1)*2)`

В результате этого локально внутри подпрограммы A будет инициализировано как 1, B как 4 и C как NULL.

При выходе из подпрограммы глобальная переменная А получает значение 2 (скопированное из подпрограммы). Второй фактический параметр (X+1)\*2 не будет копироваться, поскольку не является переменной. Наконец, глобальная переменная С не будет изменена вследствие вызова подпрограммы.

## Подробнее

* [Call](https://help.qlik.com/ru-RU/qlikview/September2026/Subsystems/Client/Content/QV_QlikView/Scripting/ScriptControlStatements/Call.htm)
* [Exit](https://help.qlik.com/ru-RU/qlikview/September2026/Subsystems/Client/Content/QV_QlikView/Scripting/ScriptControlStatements/Exit.htm)
* [End](https://help.qlik.com/ru-RU/qlikview/September2026/Subsystems/Client/Content/QV_QlikView/Scripting/ScriptControlStatements/End.htm)