DEFINEMACROS — различия между версиями

Материал из GB wiki
Перейти к: навигация, поиск
Строка 11: Строка 11:
 
  |Название=Имя макроса
 
  |Название=Имя макроса
 
  |Пояснение=строка, которая в дальнейшем будет использована для вызова макроса.
 
  |Пояснение=строка, которая в дальнейшем будет использована для вызова макроса.
: После имени макроса в скобках можно указать имена ''параметров'', которые получает данный макрос. Указание параметров необязательно.
+
: После имени макроса в скобках можно указать имена ''параметров'', которые получает данный макрос. Это могут быть параметры-значения или параметры-пепеменные. Последние объявляют с помощью зарезервированного слова '''var'''. Указание параметров необязательно.
 
}}<br/>{{Аргумент
 
}}<br/>{{Аргумент
 
  |Название=Текст макроса
 
  |Название=Текст макроса
Строка 39: Строка 39:
 
Вызов макроса:
 
Вызов макроса:
 
  SetTypePartnerKind(23, 100, 704)
 
  SetTypePartnerKind(23, 100, 704)
 +
 +
<br>Пример 3. Макрос с именованными параметрами-значениями и параметрами-переменными:
 +
DefineMacros(
 +
  "TestMacros(Prefix;var Text;PostFix)",
 +
  ":Text:=:Prefix+:Text+:PostFix"
 +
)
 +
Вызов макроса:
 +
:A:=`префикс`,
 +
:B:=` текст `,
 +
:C:=`постфикс`,
 +
TestMacros(:A,:B,:C),
 +
Info(:A+\+:B+\+:C)
 +
Будет показано окно с текстом
 +
префикс
 +
префикс текст постфикс
 +
постфикс
 +
Т.е. значение переменной :B было изменено макросом.
  
 
<br>Пример 4. Макрос можно использовать как функцию, т.е. он будет возвращать значение.
 
<br>Пример 4. Макрос можно использовать как функцию, т.е. он будет возвращать значение.

Версия 11:17, 20 декабря 2017

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

  • в стандартных параметрах, т.е. в переменных с именами :MacrosParam1, :MacrosParam2 (3, 4 и т.д.);
  • в именованых параметрах, т.е. в переменных, имена которых указываются после имени макроса в скобках (доступно, начиная с версии ГБ 1.9.0.9).

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

Синтаксис

DEFINEMACROS (Имя макроса(именованные_параметры),Текст макроса)

Аргументы

Имя макроса
строка, которая в дальнейшем будет использована для вызова макроса.
После имени макроса в скобках можно указать имена параметров, которые получает данный макрос. Это могут быть параметры-значения или параметры-пепеменные. Последние объявляют с помощью зарезервированного слова var. Указание параметров необязательно.
Текст макроса
строка со скриптом, либо последовательность операторов, заключенных в круглые скобки.

Тип результата

Нет

Примеры

Пример 1. Макрос без параметров:

DefineMacros(
  "SetTypePartnerKind",
  "Assign('DataSet.DocType',23), Assign('DataSet.Partner',100), Assign('DataSet.Kind',704)"
)

Вызов макроса :

SetTypePartnerKind()


Пример 2. Макрос с параметрами:

DefineMacros(
  "SetTypePartnerKind",
  "Assign('DataSet.DocType',:MacrosParam1), Assign('DataSet.Partner',:MacrosParam2), Assign('DataSet.Kind',:MacrosParam3)"
)

Вызов макроса:

SetTypePartnerKind(23, 100, 704)


Пример 3. Макрос с именованными параметрами:

DefineMacros(
  "SetTypePartnerKind(DT;PT;KD)",
  "Assign('DataSet.DocType',:DT), Assign('DataSet.Partner',:PT), Assign('DataSet.Kind',:KD)"
)

Вызов макроса:

SetTypePartnerKind(23, 100, 704)


Пример 3. Макрос с именованными параметрами-значениями и параметрами-переменными:

DefineMacros(
  "TestMacros(Prefix;var Text;PostFix)",
  ":Text:=:Prefix+:Text+:PostFix"
)

Вызов макроса:

:A:=`префикс`,
:B:=` текст `,
:C:=`постфикс`,
TestMacros(:A,:B,:C),
Info(:A+\+:B+\+:C)

Будет показано окно с текстом

префикс
префикс текст постфикс
постфикс

Т.е. значение переменной :B было изменено макросом.


Пример 4. Макрос можно использовать как функцию, т.е. он будет возвращать значение.
В примере вычисляется абсолютное значение разности двух параметров макроса:

DefineMacros(
  "FuncABS(A1;A2)",
  ":Res:=IIF(:A1<:A2, :A2-:A1, :A1-:A2), :Res"
)

Вызов макроса:

Info(
  FuncABS(2, 10)
)

выведет на экран "8"