В текущих версиях через настройки такого ограничения выставить нельзя (требование зафиксировано). Однако, почему бы не попробовать делать проверку в скрипте на какое-либо событие?
Итак, где же хранится размер файла? Структура прикрепления файлов к карточкам документов (внутренний, входящий, исходящий, универсальный) следующая:
Карточка документа -- Список файлов -- Карточка файла -- Карточка файла с версиями -- Файл.
чертой обозначена ссылка.
Карточка "Список файлов" хранит ссылки на карточки файлов, поэтому в ней навряд-ли хранится размер. Поэтому, смотрим на схему карточки файла. Вот удача! В секции "Основная информация" есть поле FileSize. Обытным путем устанавливаем, что это поле хранит размер в килобайтах. Остается только написать скрипт, который будет по ссылкам из списка файлов получать карточки файлов и суммировать размер.
Function DoEvent(UserSession, CardFrame, CardData, ActivateFlags, ModeID, FolderID)
' Check size of all files
MaxSize = 1024 ' max size of files in KB
' Get FileList Card
Set MainRow = CardData.Sections(CardData.Type.Sections.GetByAlias("MainInfo").ID).FirstRow
If Not IsNull(MainRow.Value("FilesID")) Then
FilesID = CStr(MainRow.Value("FilesID")) ' if card has a FileList
Else
Exit Function ' exit
End If
Set FileList = UserSession.CardManager.CardData(FilesID)
' Get FileCard and size
Set FileRefs = FileList.Sections(FileList.Type.Sections.GetByAlias("FileReferences").ID).Rows
SummSize = 0
For Each SingleRow In FileRefs
CardFileID = CStr(SingleRow.Value("CardFileID"))
Set CardFile = UserSession.CardManager.CardData(CardFileID)
Set CardFileMainRow = CardFile.Sections(CardFile.Type.Sections.GetByAlias("MainInfo").ID).FirstRow
SummSize = SummSize + CInt(CardFileMainRow.Value("FileSize"))
Next
If SummSize > MaxSize Then
DoEvent = -1
CardFrame.ShowMessage "Внимание", "Превышен допустимый размер приложенных файлов", , 3
End If
End Function
Данный скрипт нужно разместить на событие "Закрытие" карточки. Если размер файлов превышен, карточка не будет закрываться. Читать дальше
2 коммент.:
Спасибо большое за идею, вопрос действительно часто задаваемый. Теперь можно хотя бы в карточках документов, задач ввести такое ограничение.
А ограничивать расширение можно?
Что-то не удаётся найти, хранится ли оно где-нибудь. В 4.0. в таблице dvsys_files была колонка Ext - там, вроде, хранились расширения файлов. А в 4.1. такого поля уже нет, в 4.3 - тоже не видно.
В карточке файла есть поле с именем (сейчас нет под рукой CardManager'а). Имя вместе с расширением, его можно "откусить".
Такой способ ограничения имеет недостатки. Поскольку проверка производится когда файл уже загружен, то такой способ не снимает нагрузки на канал при добавлении файла.
Отправить комментарий