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

RixPvl

Well-Known Member
30.11.2011
85
0
27
#1
Функция проверки на наличие не запрещенных символов в поле, где ? - запрещенные символы
Код:
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
Чуть позже выложу еще :)
 

hosm

* so what *
18.05.2009
2 442
9
42
Kiev, Ukraine
#2
вот, каюсь, перенесла сюда пока из Кодебейз, из-за траблов на форуме и пр. руки не дошли опубликовать вовремя.
Есть вопросы автору по 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
6 433
351
homepage.mac.com
#3
сама по себе ф-ция вычисления разницы времени не так ценна, как задачи подсчёта рабочих дней/часов и т.п.
а вот там начнутся таймзоны...
а вот такой код уже здесь пробегал, я ссылку давал на "недоделанную" ф-цию

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

TIA

:-)
Lotus team
15.05.2009
790
1
#6
Добавлю ещё:

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)