DEFINEMACROS — различия между версиями

Материал из GB wiki
Перейти к: навигация, поиск
Строка 15: Строка 15:
 
  |Название=Текст макроса
 
  |Название=Текст макроса
 
  |Пояснение=строка со скриптом, либо последовательность операторов, заключенных в круглые скобки.
 
  |Пояснение=строка со скриптом, либо последовательность операторов, заключенных в круглые скобки.
}}
+
}}<br/>{{Аргумент
<br/>{{Аргумент
+
  |Название=Типы параметров, Тип результата, Описание
  |Название=типы параметров, тип результата, описание
+
  |Пояснение=необязательные параметры, имеют смысл только для макросов со стандартными параметрами. Если указываются, то все три сразу.
  |Пояснение=необязательные параметры, имеют смысл только для макросов с именованными параметрами. Если указываются, то все три сразу.
 
:Объявленный макрос появляется в списке функций редактора скриптов. Если в DefineMacros не использовать эти три параметра, то в списке для данного макроса будут указаны "Параметры" = "любой", "Результат" = "любой" и никакого описания. Если заполнить эти три параметра, то в списке функций для данного макроса будут перечислены соответствующие типы входных параметров и тип результата, а так же добавится описание макроса (см. примеры).
 
 
*Типы параметров &ndash; строка, перечисляющая типы входных параметров, например 'iidi' означает "целое, целое, дата, целое";
 
*Типы параметров &ndash; строка, перечисляющая типы входных параметров, например 'iidi' означает "целое, целое, дата, целое";
 
*Тип результата &ndash; строка, перечисляющая типы входных параметров, например 'f' означает "число";
 
*Тип результата &ndash; строка, перечисляющая типы входных параметров, например 'f' означает "число";
 
*Описание &ndash; строка, текст, описывающий действие макроса.
 
*Описание &ndash; строка, текст, описывающий действие макроса.
}}
+
<blockquote>''Объявленный макрос появляется в списке функций редактора скриптов. Если в DefineMacros не использовать эти три параметра, то в списке для данного макроса будут указаны "Параметры" = "любой", "Результат" = "любой" и никакого описания. Если заполнить эти три параметра, то в списке функций для данного макроса будут перечислены соответствующие типы входных параметров и тип результата, а так же добавится описание макроса (см. примеры). Дополнительно (при указании этих параметров) на этапе редактирования скрипта компилятор будет показывать предупреждение, если количество входных параметров, заданных при вызове макроса, не соответствует описанному.</blockquote>}}
<br/>{{Аргумент
 
|Название=Текст макроса
 
|Пояснение=строка со скриптом, либо последовательность операторов, заключенных в круглые скобки.
 
}}
 
 
|Пример=Пример 1. Макрос без параметров:
 
|Пример=Пример 1. Макрос без параметров:
 
  DefineMacros(
 
  DefineMacros(
Строка 80: Строка 74:
 
  )
 
  )
 
выведет на экран "8"
 
выведет на экран "8"
 +
 +
<br>Пример 5. Макрос со стандартными параметрами и описанием.
 +
DefineMacros(
 +
  `MergeStr`,
 +
  ':MacrosParam1+IIF(:MacrosParam3=1,/,` `)+:MacrosParam2',
 +
  'ssi',
 +
  's',
 +
  'Объединяет строки из первого и второго параметров. Если третий параметр равен 1, то строки объединяются через перевод каретки, иначе - через пробел'
 +
)
 +
В списке функций редактора скриптов входные параметры этого макроса будут описаны как "строка, строка, целое", результат как "строка", и будет такое описание:
 +
<blockquote>[macros] Объединяет строки из первого и второго параметров. Если третий параметр равен 1, то строки объединяются через перевод каретки, иначе - через пробел</blockquote>
 
}}
 
}}

Версия 12:26, 19 апреля 2018

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

  • в стандартных параметрах, т.е. в переменных с именами :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"


Пример 5. Макрос со стандартными параметрами и описанием.

DefineMacros(
  `MergeStr`,
  ':MacrosParam1+IIF(:MacrosParam3=1,/,` `)+:MacrosParam2',
  'ssi',
  's',
  'Объединяет строки из первого и второго параметров. Если третий параметр равен 1, то строки объединяются через перевод каретки, иначе - через пробел'
)

В списке функций редактора скриптов входные параметры этого макроса будут описаны как "строка, строка, целое", результат как "строка", и будет такое описание:

[macros] Объединяет строки из первого и второго параметров. Если третий параметр равен 1, то строки объединяются через перевод каретки, иначе - через пробел