Difference between revisions of "ExecuteFunction"
m (1 revision imported) |
|||
(2 intermediate revisions by 2 users not shown) | |||
Line 17: | Line 17: | ||
== Синтаксис == | == Синтаксис == | ||
<code> | <code> | ||
− | '''ExecuteFunction'''(''<Имя функции (STRING)>''{{Optional|,<Глубина поиска (INT)>{{Default|{{Eq}}0}}{{ByRef|,<Аргумент 1>,<Аргумент 2>...}}}}):''<Результат исполнения функции>'' | + | '''ExecuteFunction'''(''<Имя функции (STRING)>''{{Optional|,<Глубина поиска или компилированная функция (INT, COMPILEDFUNCTION)>{{Default|{{Eq}}0}}{{ByRef|,<Аргумент 1>,<Аргумент 2>...}}}}):''<Результат исполнения функции>'' |
</code> | </code> | ||
==== Аргументы ==== | ==== Аргументы ==== | ||
* <code>''<Имя функции (STRING)>''</code> - Имя функции, которую необходимо исполнить | * <code>''<Имя функции (STRING)>''</code> - Имя функции, которую необходимо исполнить | ||
* <code>''<Глубина поиска (INT)>''</code> - {{Optional}} Может принимать следующие значения: | * <code>''<Глубина поиска (INT)>''</code> - {{Optional}} Может принимать следующие значения: | ||
− | ** 0 (по умолчанию) -- выполнять поиск | + | ** 0 (по умолчанию) -- выполнять поиск во всех модулях [[Общее описание языка#Вложенность функций и модулей, уровни вложенности|большего уровня вложенности]] (родительских) и во всех глобальных модулях. |
** 1 -- выполнять поиск только внутри текущего модуля. | ** 1 -- выполнять поиск только внутри текущего модуля. | ||
** 2 -- выполнять поиск только внутри родительского модуля. | ** 2 -- выполнять поиск только внутри родительского модуля. | ||
** 3..x -- выполнять поиск только внутри родительского модуля указанного уровня (к примеру, для уровня 3, выполнять поиск только в родителе родителя текущего модуля). | ** 3..x -- выполнять поиск только внутри родительского модуля указанного уровня (к примеру, для уровня 3, выполнять поиск только в родителе родителя текущего модуля). | ||
+ | ** Объект типа [[Compile|компилированная функция]] -- выполнять поиск функции внутри заданной компилированной функции (только среди функций верхнего уровня). | ||
* <code>''<Аргумент ?>''</code> - {{Optional}} {{ByRef}} Аргументы, передаваемые исполняемой функции | * <code>''<Аргумент ?>''</code> - {{Optional}} {{ByRef}} Аргументы, передаваемые исполняемой функции | ||
Line 69: | Line 70: | ||
ExecuteFunction("OnAfterDocumentSaveOrPublish",1,1,флПарам); | ExecuteFunction("OnAfterDocumentSaveOrPublish",1,1,флПарам); | ||
EndIf; | EndIf; | ||
+ | </pre> | ||
+ | |||
+ | |||
+ | <pre> | ||
+ | //Пример показывает исполнение определенной функции из компилированного блока текста | ||
+ | //Заметьте: вызванная таким образом функция HelloWorld не имеет доступа к переменной Перем1, заданной в блоке для компиляции | ||
+ | |||
+ | //Блок текста для компиляции | ||
+ | Стр:="Var Перем1 Export; | ||
+ | | | ||
+ | |Function HelloWorld(Arg1) | ||
+ | | Message(""Аргумент: ""+Arg1); | ||
+ | | Result:=132; | ||
+ | |EndFunction; | ||
+ | | | ||
+ | |Message(""Исполнение вне функции HelloWorld"");"; | ||
+ | |||
+ | //Компилируем блок текста, получаем объект аФунк | ||
+ | аФунк:=Compile(Стр); | ||
+ | |||
+ | //На экран будет выведено последовательно: | ||
+ | //"Аргумент: Строковой аргумент" | ||
+ | //"Результат: 132" | ||
+ | Message("Результат: "+ExecuteFunction("HelloWorld",аФунк,"Строковой аргумент")); | ||
</pre> | </pre> |
Latest revision as of 18:05, 20 November 2021
ExecuteFunction (Системные функции) | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Функция инициирует исполнение функции с указанным именем в текущем контексте исполнения с заданными аргументами, способ поиска задается вторым аргументом. Если искомая функция не существует, пропущен обязательный аргумент или заданное количество аргументов слишком велико, будет создано исключение. Функции этой группы могут использоваться в макросах форм для вызова заранее определенных функций-событий. От использования Exec функции DoesFunctionExist и ExecuteFunction отличаются избирательным поиском функций, к примеру, Exec может исполнить функцию с таким же именем в глобальном модуле, тогда как, возможно, это нежелательно.
Синтаксис
ExecuteFunction(<Имя функции (STRING)>,<Глубина поиска или компилированная функция (INT, COMPILEDFUNCTION)>=0,<Аргумент 1>,<Аргумент 2>...):<Результат исполнения функции>
Аргументы
<Имя функции (STRING)>
- Имя функции, которую необходимо исполнить<Глубина поиска (INT)>
- (необязательный аргумент) Может принимать следующие значения:- 0 (по умолчанию) -- выполнять поиск во всех модулях большего уровня вложенности (родительских) и во всех глобальных модулях.
- 1 -- выполнять поиск только внутри текущего модуля.
- 2 -- выполнять поиск только внутри родительского модуля.
- 3..x -- выполнять поиск только внутри родительского модуля указанного уровня (к примеру, для уровня 3, выполнять поиск только в родителе родителя текущего модуля).
- Объект типа компилированная функция -- выполнять поиск функции внутри заданной компилированной функции (только среди функций верхнего уровня).
<Аргумент ?>
- (необязательный аргумент) (возможен аргумент-переменная (ByRef)) Аргументы, передаваемые исполняемой функции
Возвращаемое значение
Возвращает результат исполнения функции.
Примеры
//Визуальное событие OnClick в макросе, состоящем из группы кнопок //Событие вызывает функции в локальном модуле, на форме которого размещен макрос //Событие в локальном модуле может отменить обработку документа //флПарам -- параметр, передаваемый в модуль обработки документа, может быть изменен функцией OnBeforeDocumentSaveOrPublish //ФлТип -- если OnBeforeDocumentSaveOrPublish возвратит 0, обработка будет отменена // 1 -- обработка будет выполнена // 2 -- обработку выполнила сама функция OnBeforeDocumentSaveOrPublish, выполнять ее здесь не требуется флПарам:=0; ФлТип:=0; If DoesFunctionExist("OnBeforeDocumentSaveOrPublish",1) Then ФлТип:=Number(ExecuteFunction("OnBeforeDocumentSaveOrPublish",1,1,флПарам)); If ФлТип=0 Then Exit; EndIf; EndIf; //Далее следует блок обработки документа If ФлТип<>2 Then Try If aEl.Status()<0 Then //Документ необходимо записать, если он новый aEl.Save(); EndIf; if not aEl.Publish(флПарам) Then Exit; EndIf; Except Message(глПодготовитьОшибкуОбработки(),"!"); Exit; EndTry; EndIf; //Событие в локальном модуле может произвести действия, необходимые после обработки документа If DoesFunctionExist("OnAfterDocumentSaveOrPublish",1) Then ExecuteFunction("OnAfterDocumentSaveOrPublish",1,1,флПарам); EndIf;
//Пример показывает исполнение определенной функции из компилированного блока текста //Заметьте: вызванная таким образом функция HelloWorld не имеет доступа к переменной Перем1, заданной в блоке для компиляции //Блок текста для компиляции Стр:="Var Перем1 Export; | |Function HelloWorld(Arg1) | Message(""Аргумент: ""+Arg1); | Result:=132; |EndFunction; | |Message(""Исполнение вне функции HelloWorld"");"; //Компилируем блок текста, получаем объект аФунк аФунк:=Compile(Стр); //На экран будет выведено последовательно: //"Аргумент: Строковой аргумент" //"Результат: 132" Message("Результат: "+ExecuteFunction("HelloWorld",аФунк,"Строковой аргумент"));