Что можно придумать?

  • Автор темы Guest
  • Дата начала
G

Guest

#1
У меня есть форма, которая формирует выборку (в личные папки) запрошенных документов (см. рис).
Все верхние поля заполняются списком, а вот последние три...
ЦФО заполняется в соотвествии с разрешениями сотрудника (есть такая форма учетная запись и формы разрешений).

Код:
Kod:=@Trim(@Explode(Razr_Sotr;";"));
@If(@IsError(Kod);"";"ВСЕ":Kod)
ЦФУ любая.
Сотрудник - все сотрудники, которые имеют возможность создавать бюджеты, для выбранных/ой в ЦФО служб/ы.
В этом поле просто страшный код на формулах:

Код:
@If(!@IsNull(SRazr_CFO);
@Do(
@If(@IsMember("ВСЕ";SRazr_CFO);list:=@Trim(@Explode(Razr_Sotr;";"));list:=SRazr_CFO);

list2 := @Unique(@DbLookup("":"NoCache";"":"";"(PermissionNaz)";"ОБЩИЕ РАСХОДЫ / ДОХОДЫ";2));
@If(@IsError(list2);"";@If(@IsMember("ОБЩИЕ РАСХОДЫ / ДОХОДЫ";list);Kod:= Kod:@Unique(@DbLookup("":"NoCache";"":"";"(PermissionNaz)";"ОБЩИЕ РАСХОДЫ / ДОХОДЫ";2));""));
list2 := @Unique(@DbLookup("":"NoCache";"":"";"(PermissionNaz)";"КОММЕРЧЕСКАЯ СЛУЖБА ПО ОКАЗАНИЮ ФОТОУСЛУГ И ТОРГОВЛИ ФОТОТОВАРАМИ";2));
@If(@IsError(list2);"";@If(@IsMember("КОММЕРЧЕСКАЯ СЛУЖБА ПО ОКАЗАНИЮ ФОТОУСЛУГ И ТОРГОВЛИ ФОТОТОВАРАМИ";list);Kod:= Kod:@Unique(@DbLookup("":"NoCache";"":"";"(PermissionNaz)";"КОММЕРЧЕСКАЯ СЛУЖБА ПО ОКАЗАНИЮ ФОТОУСЛУГ И ТОРГОВЛИ ФОТОТОВАРАМИ";2));""));
list2 := @Unique(@DbLookup("":"NoCache";"":"";"(PermissionNaz)";"АДМИНИСТРАТИВНАЯ СЛУЖБА";2));

.... и тд

@If(@IsError(Kod);"";"ВСЕ":@Sort(@Unique(Kod)))
);"")
Что делать? Как можно корректно переписать этот код, чтобы в зависимости от текущего количества служб он нормально отрабатывал?
 

Вложения

G

Guest

#3
Такой код:

Код:
Sub Click(Source As Button)
Set ws=New NotesUiWorkSpace
Set session=New NotesSession

Dim db As NotesDatabase
Dim doc As NotesDocument
Dim coll As NotesDocumentCollection
Dim view As NotesView 
Dim dateTime As NotesDateTime
Dim uidoc As NotesUIDocument

Set db=session.CurrentDataBase
Set DialogDoc = New NotesDocument (db)
Set uidoc = ws.CurrentDocument
Set doc = uidoc.Document

On Error Goto Errhandle

Set view = db.GetView("Мною исполняемые")
Set vc = view.AllEntries
Call vc.RemoveAllFromFolder("Движение ДС")
'Call vc.RemoveAllFromFolder("Отчет - ДС")	

Dim SRazr_CFO As Variant
Dim SRazr_CFU As Variant
Dim SRazr_FIO As Variant
Dim SStat As Variant
Dim SCur As Variant
Dim FSYear, FSMonth As Variant
Dim list_Razr_Sotr As Variant
SRazr_CFO = doc.GetItemValue("SRazr_CFO")
SRazr_CFU = doc.GetItemValue("SRazr_CFU")
SRazr_FIO=doc.GetItemValue("SRazr_FIO")
SStat = doc.GetItemValue("SStat")
SCur = doc.GetItemValue("SCur")
FSYear = uidoc.FieldGetText("FSYear")
FSMonth = uidoc.FieldGetText("FSMonth")
Razr_Sotr = doc.GetItemValue("Razr_Sotr")
list_Razr_Sotr = Split(Razr_Sotr(0), "; ")

sf= {(FORM = "RequestDoshAdd" | FORM = "RequestRashAdd") & (Visible!="0") } 
If uidoc.FieldGetText("SRazr_CFO") <> "ВСЕ" Then
sf=sf+"& ("
Forall x In SRazr_CFO
If x >< "" Then
 sf=sf+{ Branch = "}+ x +{" | } 
End If
End Forall
sf=sf+{ "" ) }
Else
sf=sf+"& ("
Forall x In list_Razr_Sotr
If x >< "" Then
 sf=sf+{ Branch = "}+ x +{" | } 
End If
End Forall
sf=sf+{ "" ) }
End If

If uidoc.FieldGetText("SRazr_CFU") <> "ВСЕ" Then
sf=sf+"& ("
Forall x In SRazr_CFU
If x >< "" Then
 sf=sf+{ Branch_CFU = "}+ x +{" | } 
End If
End Forall
sf=sf+{ "" ) }
End If

If uidoc.FieldGetText("SRazr_FIO") <> "ВСЕ" And uidoc.FieldGetText("SRazr_FIO") <> "" Then
sf=sf+"& ("
Forall x In SRazr_FIO
If x >< "" Then
 sf=sf+{ Owner = "}+ x +{" | } 
End If
End Forall
sf=sf+{ "" ) }
End If

If uidoc.FieldGetText("SStat") <> "Все" Then
sf=sf+"& ("
Forall x In SStat
If x >< "" Then
 Select Case x
 Case "Составление"       : sf=sf+{ Status = "0" | } 
 Case "На согласовании у руководителя"  : sf=sf+{ Status = "1" | } 
 Case "На согласовании у сотрудника ФС" : sf=sf+{ Status = "3" | } 
 Case "Согласовано"     : sf=sf+{ Status = "4" | } 
 Case "Не согласованно"    : sf=sf+{ Status = "5" | } 
 Case "На согласовании у сотрудника" 	: sf=sf+{ Status = "6" | } 
 Case Else        : sf=sf+{ Status = "7" | } 
 End Select 
End If
End Forall
sf=sf+{ "" ) }
End If

st = doc.GetItemValue("FSWeek")
If st(0) <> "0" Then
sf=sf+{ & ( FPWeek = "}+ st(0) +{" ) }
End If

If uidoc.FieldGetText("SCur") <> "Все" Then
sf=sf+"& ("
Forall x In SCur
If x >< "" Then
 sf=sf+{ Currency = "}+ x +{" | } 
End If
End Forall
sf=sf+{ "" ) }
End If

If Not Isempty(uidoc.FieldGetText("FSYear")) Then
sf=sf+{ & ( FPYear = "}+ FSYear +{" ) } 
End If

If Not Isempty(uidoc.FieldGetText("FSMonth")) Then
sf=sf+{ & ( FPMonth = "}+ FSMonth +{" ) } 
End If


'Msgbox sf
Set coll=db.Search(sf,dateTime,0)
If coll.Count=0 Then
Messagebox "Нет документов, удовлетворяющих заданным критериям",64,"Результата поиска"
Else
Messagebox "Найдено" + Str(coll.Count) + " документов"
End If

Call coll.PutAllInFolder("Движение ДС")	
Call uidoc.Refresh	

Exit Sub
Errhandle:  
If (Err = 4291) Then
Msgbox "Личная папка <Движение ДС> не создана. Перейдите, пожалуйста, к ней, для того, чтобы создать папку."
Exit Sub
End If
Messagebox "Error" & Str(Err) & ": " & Error$
Exit Sub

End Sub