OnMark

From SunFlurry wiki
Revision as of 21:40, 2 March 2019 by Admin (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search
  OnMark (События объектов БД)
Статус разработки: Реализована
Тип:Функция
Обращение к БД:Нет
Расположение:Любой глобальный модуль
Визуальность:Да

Событие, вызываемое при попытке удалить (или отменить удаление) открытый для визуального редактирования элемент справочника или документ, либо при попытке удалить (или отменить удаление) элемент справочника или документ в журнале документов или таблице элементов справочника (документов). Параметр пометка равен 0, если производится отмена удаления и 1, если производится удаление. Параметр Разрешить действие может запретить удаление, однако сообщения об ошибке выведено не будет. Если же процедура вернет не пустую строку, действие также произведено не будет, а будет создано исключение с описанием, являющимся результатом исполнения функции.

Данное событие также вызывается для элементов журналов (как журналов документов, так и справочников).

Синтаксис

OnMark(<Элемент>,<Пометка (INT)>,<Разрешить действие (INT,OUT)>=1):<Текст возникшей ошибки (STRING)>

Аргументы

  • <Элемент> - Элемент справочника или документ, для которого производится попытка удаления (отмены удаления).
  • <Пометка (INT)> - Ноль, если производится отмена удаления, единица, если производится удаление.
  • <Разрешить действие (INT,OUT)>=1}} - (возможен аргумент-переменная (ByRef)) При нулевом значении этого аргумента, действие будет остановлено без вывода текста ошибки.

Возвращаемое значение

Функция должна возвратить пустое значение (или пустую строку) для того, чтобы разрешить удаление (отмену удаления) объекта. Для создания исключения результат функции должен содержать текст сообщения о причине невозможности выполнить действие.


Примеры

Function OnMark(Element,Mark,ByRef AllowAction)
  AllowAction:=1;
  If pos("DB.JOURNAL.",typestr(Element))=1 Then
    //Для элементов жерналов, найдем реальный элемент справочника/документ
    Element:=Element.LinkedObject();
  EndIf;
  If DBTypeStr(Element)<>"REF" Then
    Exit;
  EndIf;
  If (Mark=1)And((Element.DBName()="Контрагенты")Or(Element.DBName()="Договоры"))And(not Пользователь.КредитныйКонтролер) Then
    //Запретить удаление элементов справочников Контрагенты и Договоры без требуемых прав.
    Box("Чтобы отменить удаление этого клиента обратитесь к кредитному контролеру!",Q_STOP);
    AllowAction:=0;
    Exit;
  ElseIf (Mark=1)And(Element.DBName()="Номенклатура") Then
    If Element.IsFolder() Then
      Box("Нельзя удалять группы этого справочника!",Q_STOP);
      AllowAction:=0;
      Exit;
    EndIf;
  EndIf;
EndFunction