DEFINEMACROS
Функция предназначена для более компактной записи кода. Позволяет определить макрос, который представляет собой последовательность операторов, и в дальнейшем использовать его, указывая только его имя.
В макрос можно передавать данные для обработки. Данные передаются через параметры макроса, которые доступны в его теле двумя способами:
- в стандартных параметрах, т.е. в переменных с именами :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"