' Скрипт на закрытие карточки
' Проверяет файлы в карточке на непревышение размера
' v 1.0.1

Option Explicit

Const MAX_FILE_SIZE = 20000 ' Максимальный размер файла в килобайтах

Function DoEvent(UserSession, CardFrame, CardData, ActivateFlags, ModeID, FolderID)

    DoEvent = 0

    Dim FileList, FileRow, FileCard, ErrMessage
    Set FileList = UserSession.CardManager.CardData(MainInfo(CardData).Value("FilesID"))
    ErrMessage = vbNullsTring
    For Each FileRow In Sect(FileList, "FileReferences").Rows
        Set FileCard = UserSession.CardManager.CardData(FileRow.Value("CardFileID"))
        If MainInfo(FileCard).Value("FileSize") > MAX_FILE_SIZE Then
            ErrMessage = ErrMessage & vbCrLf & MainInfo(FileCard).Value("FileName")
        End If
    Next

    If ErrMessage <> vbNullString Then
        MsgBox "Внимание! Размер следующих файлов превышает допустимый:" & ErrMessage & vbCrLf & "Удалите эти файлы до закрытия карточки.", vbOKOnly, "Предупреждение"
        DoEvent = -1
    End If

End Function

' Получение секции карточки по имени
Function Sect(CardData, Alias)
    Set Sect = CardData.Sections(CardData.Type.AllSections.GetByAlias(Alias).ID)
End Function

' Получение подчиненной секции по имени
Function SubSect(RowData, Alias)
    Set SubSect = RowData.ChildSections(RowData.Section.Type.ChildSections.GetByAlias(Alias).ID)
End Function

' Нулевая строка секции MainInfo
Function MainInfo(CardData)
    Set MainInfo = Sect(CardData, "MainInfo").FirstRow
End Function

' Строка свойства
Function Prop(CardData, Alias)
    Set Prop = Nothing
    Dim Row: For Each Row In Sect(CardData, "Properties").Rows
        If Row.Value("Name") = Alias Then
            Set Prop = Row
            Exit Function
        End If
    Next
End Function

' Получение значения свойства
Function GetProp(CardData, Alias, DefaultValue)
    Dim Row: Set Row = Prop(CardData, Alias)
    If Row Is Nothing Then
        GetProp = DefaultValue
    Else
        GetProp = Row.Value("Value")
        If IsNull(GetProp) Then GetProp = DefaultValue
    End If
End Function

' Установка значения свойства
Sub SetProp(CardData, Alias, Value, DisplayValue)
    Prop(CardData, Alias).Value("Value") = Value
    Prop(CardData, Alias).Value("DisplayValue") = DisplayValue
End Sub