DEFINEMACROS — различия между версиями
Alexey (обсуждение | вклад) |
Alexey (обсуждение | вклад) |
||
Строка 11: | Строка 11: | ||
|Название=Имя макроса | |Название=Имя макроса | ||
|Пояснение=строка, которая в дальнейшем будет использована для вызова макроса. | |Пояснение=строка, которая в дальнейшем будет использована для вызова макроса. | ||
− | : После имени макроса в скобках можно указать имена ''параметров'', которые получает данный макрос. Это могут быть параметры-значения или параметры- | + | : После имени макроса в скобках можно указать имена ''параметров'', которые получает данный макрос. Это могут быть параметры-значения или параметры-переменные. Последние объявляют с помощью зарезервированного слова '''var'''. Указание параметров необязательно. |
}}<br/>{{Аргумент | }}<br/>{{Аргумент | ||
|Название=Текст макроса | |Название=Текст макроса |
Версия 11:37, 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"