Difference between revisions of "DoesFunctionExist"
m (1 revision imported) |
1>Admin |
||
| Line 17: | Line 17: | ||
== Синтаксис == | == Синтаксис == | ||
<code> | <code> | ||
| − | '''DoesFunctionExist'''(''<Имя функции (STRING)>''{{Optional|,<Глубина поиска (INT)>{{Default|{{Eq}}0}}}}):''<Существует ли функция (INT)>'' | + | '''DoesFunctionExist'''(''<Имя функции (STRING)>''{{Optional|,<Глубина поиска или компилированная функция (INT, COMPILEDFUNCTION)>{{Default|{{Eq}}0}}}}):''<Существует ли функция (INT)>'' |
</code> | </code> | ||
==== Аргументы ==== | ==== Аргументы ==== | ||
* <code>''<Имя функции (STRING)>''</code> - Имя функции, существование которой нужно проверить. | * <code>''<Имя функции (STRING)>''</code> - Имя функции, существование которой нужно проверить. | ||
* <code>''<Глубина поиска (INT)>''</code> - Может принимать следующие значения: | * <code>''<Глубина поиска (INT)>''</code> - Может принимать следующие значения: | ||
| − | ** 0 (по умолчанию) -- выполнять поиск | + | ** 0 (по умолчанию) -- выполнять поиск во всех модулях [[Общее описание языка#Вложенность функций и модулей, уровни вложенности|большего уровня вложенности]] (родительских) и во всех глобальных модулях. |
** 1 -- выполнять поиск только внутри текущего модуля. | ** 1 -- выполнять поиск только внутри текущего модуля. | ||
** 2 -- выполнять поиск только внутри родительского модуля. | ** 2 -- выполнять поиск только внутри родительского модуля. | ||
** 3..x -- выполнять поиск только внутри родительского модуля указанного уровня (к примеру, для уровня 3, выполнять поиск только в родителе родителя текущего модуля). | ** 3..x -- выполнять поиск только внутри родительского модуля указанного уровня (к примеру, для уровня 3, выполнять поиск только в родителе родителя текущего модуля). | ||
| + | ** Объект типа [[Compile|компилированная функция]] -- выполнять поиск функции внутри заданной компилированной функции (только среди функций верхнего уровня). | ||
==== Возвращаемое значение ==== | ==== Возвращаемое значение ==== | ||
Revision as of 15:15, 27 July 2021
| DoesFunctionExist (Системные функции) | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||
Функция проверяет, существует ли функция с указанным именем в текущем контексте исполнения, способ поиска задается вторым аргументом. Функции этой группы могут использоваться в макросах форм для вызова заранее определенных функций-событий. От использования Exec функции DoesFunctionExist и ExecuteFunction отличаются избирательным поиском функций, к примеру, Exec может исполнить функцию с таким же именем в глобальном модуле, тогда как, возможно, это нежелательно.
Синтаксис
DoesFunctionExist(<Имя функции (STRING)>,<Глубина поиска или компилированная функция (INT, COMPILEDFUNCTION)>=0):<Существует ли функция (INT)>
Аргументы
<Имя функции (STRING)>- Имя функции, существование которой нужно проверить.<Глубина поиска (INT)>- Может принимать следующие значения:- 0 (по умолчанию) -- выполнять поиск во всех модулях большего уровня вложенности (родительских) и во всех глобальных модулях.
- 1 -- выполнять поиск только внутри текущего модуля.
- 2 -- выполнять поиск только внутри родительского модуля.
- 3..x -- выполнять поиск только внутри родительского модуля указанного уровня (к примеру, для уровня 3, выполнять поиск только в родителе родителя текущего модуля).
- Объект типа компилированная функция -- выполнять поиск функции внутри заданной компилированной функции (только среди функций верхнего уровня).
Возвращаемое значение
Возвращает 1, если функция найдена, 0, если она не существует.
Примеры
//Визуальное событие 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;