Не Большой Набор Полезных Функций

  • Автор темы RixPvl
  • Дата начала
R

RixPvl

Функция проверки на наличие не запрещенных символов в поле, где ? - запрещенные символы
Код:
Function Check_BadSymbols(sStr As String) As Boolean
Check_BadSymbols = False
Dim f As String
f = "*[a-z,A-Z,0-9,?,і,?,?,?,?,?,?,?]*"
If sStr Like f Then Check_BadSymbols = True 
End Function

Функция проверки роли, работает даже если пользователь находится в группе
Код:
Function CheckRolls(Rolls As String) As Boolean
Dim ses As New NotesSession
Dim Results,sql As Variant
Doc As NotesDocument
Set Doc = ses.currentdocument
sql = "@IsNotMember("""+Rolls+""";@UserRoles)"
Results = Evaluate(sql, Doc) 
If Results(0)="1" Then CheckRolls=False Else CheckRolls=True
End Function

Функция расчета промежутка между временем, путем вычета 1(-ой) даты из другой
Код:
Function TimeDifference(sData1, sData2 As Variant) As String
Dim buf As Variant
If (sData1="" Or sData2="") Then
TimeDifference = "00:00:00"
Exit Function
End If

If CDbl(sData2) >= CDbl(sData1) Then
buf = CDbl(sData2) - CDbl(sData1) 
Else
buf = CDbl(sData1) - CDbl(sData1) 
End If 
TimeDifference = CStr(Format(CDat(buf), "hh:mm:ss"))
End Function

Чуть позже выложу еще :)
 
H

hosm

вот, каюсь, перенесла сюда пока из Кодебейз, из-за траблов на форуме и пр. руки не дошли опубликовать вовремя.
Есть вопросы автору по Function CheckRolls(Rolls As String) As Boolean -
1) Dim ses As New NotesSession
Set Doc = ses.currentdocument ' wtf?
2) зачем там Evaluate, чем не подошли not Isnull(ArrayGetIndex(ses.CurrentDatabase.QueryAccessRoles(ses.username), Rolls)) ' или ses.Effectiveusername
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
470
сама по себе ф-ция вычисления разницы времени не так ценна, как задачи подсчёта рабочих дней/часов и т.п.
а вот там начнутся таймзоны...
а вот такой код уже здесь пробегал, я ссылку давал на "недоделанную" ф-цию

я это к чему - наработки кода - безусловно полезная тема, но стрктурировать её нужно ближе к реальным задачам (можно указывать - для каких задач использовалось)
 
N

nvyush

Вместо
Код:
If Results(0)="1" Then CheckRolls=False Else CheckRolls=True
не лучше ли
Код:
CheckRolls = (Results(0) <> "1")
 
T

TIA

Добавлю ещё:

TimeDifference
1.Если в параметрах допустимы только строки, так и надо задекларировать их as String вместо Variant
2.Грамотней использовать NotesDateTime.Timedifference
3.Не храните и не работайте с датами как со строками везде, где только возможно.

Заменить как советовали для CheckRolls и в Check_BadSymbols
If sStr Like f Then Check_BadSymbols = True
на
Check_BadSymbols = (sStr Like f)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!