%REM
    Function block_create
    Description: Пробует создать блокировку. В случае успеха возвращает true.
    В случае raiseError=true, в случае ошибки возвращает диалогбокс с содержанием ошибки
%END REM
function block_create(doc As NotesDocument, raiseError As Boolean) As Boolean
    Dim session As New NotesSession
    'Инициализируем базу блокировок
    Dim dbBlock As NotesDatabase
    If Not init(dbBlock, doc, raiseError) Then Exit Function
    'Пробуем блокировать
    Dim flagError As Boolean
    Dim docBlock As NotesDocument
    Set docBlock = dbBlock.Createdocument()
    On Error 4000 GoTo errHandler_4000
    GoSub processDocBlock
m:
    If Not flagError Then
        'Успешно заблокировали
        block_create = True
        Exit Function
    End If
    'Заблокировать не удалось
    On Error 4091 Resume Next
    Set docBlock = dbBlock.Getdocumentbyunid(doc.Universalid)
    If Not docBlock Is Nothing Then
        'Нашли блокировку, значит заблокирован
        Dim nn As NotesName
        Set nn = New NotesName(docBlock.userName(0))
        If raiseError Then MessageBox "Документ заблокирован пользователем "+nn.Abbreviated, 16, "Операция прервана!"
        Exit Function
    End If   
    'Блокировку не нашли
    If raiseError Then MessageBox "Документ заблокировать не удалось, попробуйте еще раз!", 16, "Операция прервана!"   
ex:
    Exit Function
    
errHandler_4000:
    'Такой unid уже есть в базе данных
    flagError = true   
    Resume m
    
processDocBlock:
    With docBlock
        .universalId = doc.universalId
        .server = doc.parentDatabase.Server
        .replicaId = doc.parentDatabase.Replicaid
        .title = doc.parentDatabase.Title
        .filePath = doc.parentDatabase.filePath
        .userName = session.Effectiveusername               
        Dim item As NotesItem
        Set item = .Getfirstitem("userName")
        item.Isauthors = True
        Call .Save(True, True)               
    End With   
    Return   
End Function