Автор темы
Суть в чем, есть 4000 контор по алфавиту, в каждой есть поле AgentPressaSalesManager (оно пустое), есть 3 Менегера (Менеджер 1, МЕнеджер 2, Менеджер 3) среди них нужно распределить конторы по 1100 каждому, какие есть варианты?
Краткие тезисы обсуждения со ссылками на ключевые ответы появятся здесь.
Ключевые ответы обсуждения и их оценка появятся здесь.
Участники с сильными ответами в этой теме появятся здесь.
m(1)=1
m(2)=2
m(3)=3
For i = 1 To 3300 Step 3NextFor i = 2 To 3300 Step 3NextFor i = 3 To 3300 Step 3Next
Так, например.как в агенте это будет выглядеть?
i = 1
Set doc=view.GetFirstDocument
While Not (doc Is Nothing)
Call doc.ReplaceItemValue("AgentPressaSalesManager", s(i))
i = i + 1
If i = 4 Then i = 1
Set doc=view.GetNextDocument(doc)
Wend
Sub Click(Source As Button)
Dim ns As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim doc As NotesDocument
Dim s(3) As String
Dim m(3) As Integer
Dim i As Integer
Dim j As Integer
Dim b As Boolean
b=False
m(1)=1100
m(2)=1100
m(3)=1100
s(1)="Киров 4"
s(2)="Киров 5"
s(3)="Киров 6"
Randomize
Set db=ns.CurrentDatabase
Set view=db.GetView("Деловая Пресса\Отдел подписки\Менеджеры\деление")
Set doc=view.GetFirstDocument
While (Not (doc Is Nothing)) And (j<3300)
b=false
While (Not b)
i=((Round(Rnd(),1))*10 mod 3)+1
If m(i)>0 Then
Call doc.ReplaceItemValue("AgentPressaSalesManager" ,s(i))
Call doc.Save(True,True)
m(i)=m(i)-1
b=True
End If
Wend
Set doc=view.GetNextDocument(doc)
j=j+1
If (m(1)>0) Or (m(2)>0) Or (m(3)>0) Then
Exit Sub
End If
Wend
End Sub
Dim ns As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim doc As NotesDocument
Dim s(3) As String
Dim i As Integer
Dim j As Integer
Dim DocCol As NotesDocumentCollection
s(1)="Киров 4"
s(2)="Киров 5"
s(3)="Киров 6"
Randomize
Set db=ns.CurrentDatabase
Set view=db.GetView("Деловая Пресса\Отдел подписки\Менеджеры\деление")
Set DocCol = view.GetAllDocumentsByKey( "1", True ) ' Тут автор сам уточнит условие отбора
Set doc=view.GetFirstDocument
i = DocCol.Count ' или i = 4000 автору должно быть виднее
While DocCol.Count >700
For j = 1 To 3
Set doc = DocCol.GetNthDocument( Rnd( i ) )
If Not doc Is Nothing Then
doc.AgentPressaSalesManager = s( j )
i = i - 1
Call DocCol.DeleteDocument( doc )
End If
Next
Wend
i=i+1
if i=4 then i=1
Интересно, кто-нибудь проверял?кстати... вот такой метод Call doc.ReplaceItemValue("AgentPressaSalesManager" ,s(i)) медленней по произподительности чем doc.AgentPressaSalesManager = s(i)
по условию так1. вопрос. Почему цикл до 3300. Т.е. заведомо откидывается 700 контор? в условии такого небыло
Случайно выбирается мэнеджер. Да и если вьюшка отсортирована не по названиям, то конторы будут в произвольном порядке.2. Почему Set doc=view.GetNextDocument(doc) ? Вчем тогда случайность выбора? Случайный выбор манагеров как не сильно серьезно
А второй способ с ричтекст филдами работает? Вроде не особо. А Крон не указал тип поля.Call это уже вызов внешнего метода/процедуры
doc.AgentPressaSalesManager = s(i) - а тут ничего не вызывается
С чего ты решил, что ничего не вызывается?Ну а если подумать?
Call это уже вызов внешнего метода/процедуры
doc.AgentPressaSalesManager = s(i) - а тут ничего не вызывается