DEFINEMACROS — различия между версиями
Alexey (обсуждение | вклад) |
Alexey (обсуждение | вклад) |
||
Строка 3: | Строка 3: | ||
|Описание=Функция предназначена для более компактной записи кода. Позволяет определить макрос, который представляет собой последовательность операторов, и в дальнейшем использовать его, указывая только его имя. | |Описание=Функция предназначена для более компактной записи кода. Позволяет определить макрос, который представляет собой последовательность операторов, и в дальнейшем использовать его, указывая только его имя. | ||
<br>В макрос можно передавать данные для обработки. Данные передаются через параметры макроса, которые доступны в его теле двумя способами: | <br>В макрос можно передавать данные для обработки. Данные передаются через параметры макроса, которые доступны в его теле двумя способами: | ||
− | * в стандартных параметрах, т.е. в переменных с именами ''':MacrosParam1''', ''':MacrosParam2''' | + | * в стандартных параметрах, т.е. в переменных с именами ''':MacrosParam1''', ''':MacrosParam2''' и т.д.); |
* в именованых параметрах, т.е. в переменных, имена которых указываются после имени макроса в скобках ''(доступно, начиная с версии ГБ 1.9.0.9)''. | * в именованых параметрах, т.е. в переменных, имена которых указываются после имени макроса в скобках ''(доступно, начиная с версии ГБ 1.9.0.9)''. | ||
И стандартные и именованные параметры макроса являются переменными, локальными для данного макроса, т.е. изменение значения этих параметров в теле макроса не изменит значения переменных с таким же именем, но использующихся вне тела макроса. | И стандартные и именованные параметры макроса являются переменными, локальными для данного макроса, т.е. изменение значения этих параметров в теле макроса не изменит значения переменных с таким же именем, но использующихся вне тела макроса. | ||
− | |Синтаксис=DEFINEMACROS ('''Имя макроса'''(именованные_параметры),'''Текст макроса''') | + | |Синтаксис=DEFINEMACROS ('''Имя макроса'''(именованные_параметры), '''Текст макроса''', Типы параметров, Тип результата, Описание) |
|Аргументы= | |Аргументы= | ||
{{Аргумент | {{Аргумент | ||
Строка 13: | Строка 13: | ||
: После имени макроса в скобках можно указать имена ''параметров'', которые получает данный макрос. Это могут быть параметры-значения или параметры-переменные. Последние объявляют с помощью зарезервированного слова '''var'''. Указание параметров необязательно. | : После имени макроса в скобках можно указать имена ''параметров'', которые получает данный макрос. Это могут быть параметры-значения или параметры-переменные. Последние объявляют с помощью зарезервированного слова '''var'''. Указание параметров необязательно. | ||
}}<br/>{{Аргумент | }}<br/>{{Аргумент | ||
+ | |Название=Текст макроса | ||
+ | |Пояснение=строка со скриптом, либо последовательность операторов, заключенных в круглые скобки. | ||
+ | }} | ||
+ | <br/>{{Аргумент | ||
+ | |Название=типы параметров, тип результата, описание | ||
+ | |Пояснение=необязательные параметры, имеют смысл только для макросов с именованными параметрами. Если указываются, то все три сразу. | ||
+ | :Объявленный макрос появляется в списке функций редактора скриптов. Если в DefineMacros не использовать эти три параметра, то в списке для данного макроса будут указаны "Параметры" = "любой", "Результат" = "любой" и никакого описания. Если заполнить эти три параметра, то в списке функций для данного макроса будут перечислены соответствующие типы входных параметров и тип результата, а так же добавится описание макроса (см. примеры). | ||
+ | *Типы параметров – строка, перечисляющая типы входных параметров, например 'iidi' означает "целое, целое, дата, целое"; | ||
+ | *Тип результата – строка, перечисляющая типы входных параметров, например 'f' означает "число"; | ||
+ | *Описание – строка, текст, описывающий действие макроса. | ||
+ | }} | ||
+ | <br/>{{Аргумент | ||
|Название=Текст макроса | |Название=Текст макроса | ||
|Пояснение=строка со скриптом, либо последовательность операторов, заключенных в круглые скобки. | |Пояснение=строка со скриптом, либо последовательность операторов, заключенных в круглые скобки. |
Версия 12:03, 19 апреля 2018
Функция предназначена для более компактной записи кода. Позволяет определить макрос, который представляет собой последовательность операторов, и в дальнейшем использовать его, указывая только его имя.
В макрос можно передавать данные для обработки. Данные передаются через параметры макроса, которые доступны в его теле двумя способами:
- в стандартных параметрах, т.е. в переменных с именами :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"