В текущих версиях через настройки такого ограничения выставить нельзя (требование зафиксировано). Однако, почему бы не попробовать делать проверку в скрипте на какое-либо событие?
Итак, где же хранится размер файла? Структура прикрепления файлов к карточкам документов (внутренний, входящий, исходящий, универсальный) следующая:
Карточка документа -- Список файлов -- Карточка файла -- Карточка файла с версиями -- Файл.
чертой обозначена ссылка.
Карточка "Список файлов" хранит ссылки на карточки файлов, поэтому в ней навряд-ли хранится размер. Поэтому, смотрим на схему карточки файла. Вот удача! В секции "Основная информация" есть поле 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
Данный скрипт нужно разместить на событие "Закрытие" карточки. Если размер файлов превышен, карточка не будет закрываться.
Спасибо большое за идею, вопрос действительно часто задаваемый. Теперь можно хотя бы в карточках документов, задач ввести такое ограничение.
ОтветитьУдалитьА ограничивать расширение можно?
Что-то не удаётся найти, хранится ли оно где-нибудь. В 4.0. в таблице dvsys_files была колонка Ext - там, вроде, хранились расширения файлов. А в 4.1. такого поля уже нет, в 4.3 - тоже не видно.
В карточке файла есть поле с именем (сейчас нет под рукой CardManager'а). Имя вместе с расширением, его можно "откусить".
ОтветитьУдалитьТакой способ ограничения имеет недостатки. Поскольку проверка производится когда файл уже загружен, то такой способ не снимает нагрузки на канал при добавлении файла.