DEFINEMACROS
Функция предназначена для более компактной записи кода. Позволяет определить макрос, который представляет собой последовательность операторов, и в дальнейшем использовать его, указывая только его имя.
В макрос можно передавать данные для обработки. Данные передаются через параметры макроса, которые доступны в его теле двумя способами:
- в стандартных параметрах, т.е. в переменных с именами :MacrosParam1, :MacrosParam2 (3, 4 и т.д.);
- в именованых параметрах, т.е. в переменных, имена которых указываются после имени макроса в скобках (доступно, начиная с версии ГБ 1.9.0.9).
И стандартные и именованные параметры макроса являются переменными, локальными для данного макроса, т.е. изменение значения этих параметров в теле макроса не изменит значения переменных с таким же именем, но использующихся вне тела макроса.
Синтаксис
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)
Пример 4. Макрос можно использовать как функцию, т.е. он будет возвращать значение.
В примере вычисляется абсолютное значение разности двух параметров макроса:
DefineMacros( "FuncABS(A1;A2)", ":Res:=IIF(:A1<:A2, :A2-:A1, :A1-:A2), :Res" )
Вызов макроса:
Info( FuncABS(2, 10) )
выведет на экран "8"