DEFINEMACROS

Материал из GB wiki
Перейти к: навигация, поиск

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

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

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

Синтаксис

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

Аргументы

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


типы параметров, тип результата, описание
необязательные параметры, имеют смысл только для макросов с именованными параметрами. Если указываются, то все три сразу.
Объявленный макрос появляется в списке функций редактора скриптов. Если в DefineMacros не использовать эти три параметра, то в списке для данного макроса будут указаны "Параметры" = "любой", "Результат" = "любой" и никакого описания. Если заполнить эти три параметра, то в списке функций для данного макроса будут перечислены соответствующие типы входных параметров и тип результата, а так же добавится описание макроса (см. примеры).
  • Типы параметров – строка, перечисляющая типы входных параметров, например 'iidi' означает "целое, целое, дата, целое";
  • Тип результата – строка, перечисляющая типы входных параметров, например 'f' означает "число";
  • Описание – строка, текст, описывающий действие макроса.


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

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

Нет

Примеры

Пример 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"