DEFINEMACROS

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

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

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

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

Синтаксис

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

Аргументы

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

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

Нет

Примеры

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