Скорость выполнения Действий

  • Автор темы Kron
  • Дата начала
K

Kron

#1
:) Все утра Доброго, Вопрос при выполнеии Действий на формирование формы для печати процесс идет очень долго, как можно ускорить размер БД 4 ГБ около 100000 документов. Может важно информация берется в форму из разных форм и представлений вывод по LotusScript
 

morpheus

скриптописец
07.08.2006
3 915
1
#2
Для: Kron
Всё зависит от скрипта(если проход по докам каким нить ГетНехтНТдок), если еще и к представлению долго никто не обращался то канечно затруднит
 
K

Kron

#3
Sub Queryopen(Source As Notesuidocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant)
' Dim ns As notessession
Dim db As notesdatabase
Dim view As notesview
Dim doc1 As notesdocument
Dim doc2 As notesdocument
Dim dc As notesdocumentcollection
Dim i As Integer
Set doc1= source.document
Set db = doc1.parentdatabase
Set view = db.getview("(view1)")
Set dc = view.GetAllDocumentsByKey(doc1.AgentShortName(0))
' i = 0
j=1
For i = 1 To dc.count
Set doc2 = dc.Getnthdocument(i)
' doc1.ReplaceItemValue("F1_"+cstr(i),)
If doc2.PersonalNotPrintInForm(0)<>"НЕ показывать в карточке обновления" Then
If doc2.PersonalDBaseUpdateUser(0)="Ответственный за пополнение БД" Then
Call doc1.ReplaceItemValue("F0_"+Cstr(j),"+")
End If
If doc2.PersonalAccountUser(0)="Получатель платежных документов" Then
Call doc1.ReplaceItemValue("F1_"+Cstr(j),"$")
End If
If doc2.PersonalKodeksUser(0)="Пользователь ИПС Кодекс" Then
Call doc1.ReplaceItemValue("F2_"+Cstr(j),"K")
End If
Call doc1.ReplaceItemValue("F3_"+Cstr(j),doc2.PersonalAllName(0))
Call doc1.ReplaceItemValue("F4_"+Cstr(j),doc2.PersonalDolg(0))
Call doc1.ReplaceItemValue("F5_"+Cstr(j),doc2.PersonalWorkPhone(0))
Call doc1.ReplaceItemValue("F6_"+Cstr(j),doc2.PersonalWorkRoom(0))
If doc2.PersonalBDate(0)<>"" Then
Call doc1.ReplaceItemValue("F7_"+Cstr(j),"*")
End If
j = j + 1
End If
Next
' последние обновления
Set view = db.GetView("(view3)")
Set dc = view.GetAllDocumentsByKey(doc1.AgentShortName(0))
i = 1
Set doc2= dc.GetLastDocument
While i<3 And Not (doc2 Is Nothing)
If doc2.UpdateContactCondition(0)<>"Выдано" Then
Call doc1.ReplaceItemValue("F10_1_"+Cstr(i),doc2.UpdateContactMonth(0))
Call doc1.ReplaceItemValue("F10_2_"+Cstr(i),doc2.UpdateContactWeek(0))
Call doc1.ReplaceItemValue("F10_3_"+Cstr(i),doc2.UpdateContactManager(0))
Call doc1.ReplaceItemValue("F10_4_"+Cstr(i),Format(doc2.UpdateContactFactDate(0),"dd.mm.yyyy"))
' Call doc1.ReplaceItemValue("F10_5_"+Cstr(i),doc2.ColumnValues(7))
Call doc1.ReplaceItemValue("F10_6_"+Cstr(i),Format(doc2.UpdateContactFactTime(0),"hh:mm"))
Call doc1.ReplaceItemValue("F10_10_"+Cstr(i),doc2.Update_number(0))
i = i+1
End If
Set doc2 = dc.GetPrevDocument(doc2)
Wend
' последние контакты
'Set view = db.GetView("(view2)")
'i = 1
'Set doc2=view.GetDocumentByKey(doc1.AgentShortName(0))
'While i<=2 And Not (doc2 Is Nothing)
' Call doc1.ReplaceItemValue("F11_1_"+Cstr(i),Format(doc2.ContactExecutorFactDate(0),"dd.mm.yyyy"))
' Call doc1.ReplaceItemValue("F11_2_"+Cstr(i),Format(doc2.ContactExecutorFactTime(0),"hh:mm"))
' Call doc1.ReplaceItemValue("F11_3_"+Cstr(i),Format(doc2.ContactExecutorPlanDate(0),"dd.mm.yyyy"))
' Call doc1.ReplaceItemValue("F11_4_"+Cstr(i),doc2.ContactDescription(0))
' Call doc1.ReplaceItemValue("F11_5_"+Cstr(i),Format(doc2.ContactDate(0),"dd.mm.yyyy"))
' Call doc1.ReplaceItemValue("F11_6_"+Cstr(i),doc2.ContactRezult(0))
' i = i+1
' Set doc2 = view.GetNextDocument(doc2)
' If Not doc2 Is Nothing Then
' If doc2.ContactAgent(0)<>doc1.AgentShortName(0) Then
' Set doc2 = Nothing
' End If
' End If
'Wend
End Sub



Вот Такой Код вроде ни чего особенного, раньше не тормозило :)
 

morpheus

скриптописец
07.08.2006
3 915
1
#4
хм... как я и думал, первое, постараться избавиться от
Set doc2 = dc.Getnthdocument(i)
 
K

Kron

#5
Set doc2 = dc.Getnthdocument(i) поплывет форма и станет не актуальна, просто проблема в том что при начальном формировании бд заложили несколько форм Agent (карточка организации),Personal(карточка физ лица в этой организации),Contact(контакты с физлицом),UpdateContact(контакты обновления физ лица), вот и затык может проще по новой все написать? :)
 

morpheus

скриптописец
07.08.2006
3 915
1
#6
хм..
Код:
For i = 1 To dc.count
Set doc2 = dc.Getnthdocument(i)
' doc1.ReplaceItemValue("F1_"+cstr(i),)
If doc2.PersonalNotPrintInForm(0)<>"НЕ показывать в карточке обновления" Then
If doc2.PersonalDBaseUpdateUser(0)="Ответственный за пополнение БД" Then
Call doc1.ReplaceItemValue("F0_"+Cstr(j),"+")
End If
If doc2.PersonalAccountUser(0)="Получатель платежных документов" Then
Call doc1.ReplaceItemValue("F1_"+Cstr(j),"$")
End If 
If doc2.PersonalKodeksUser(0)="Пользователь ИПС Кодекс" Then
Call doc1.ReplaceItemValue("F2_"+Cstr(j),"K")
End If
Call doc1.ReplaceItemValue("F3_"+Cstr(j),doc2.PersonalAllName(0))
Call doc1.ReplaceItemValue("F4_"+Cstr(j),doc2.PersonalDolg(0))
Call doc1.ReplaceItemValue("F5_"+Cstr(j),doc2.PersonalWorkPhone(0))
Call doc1.ReplaceItemValue("F6_"+Cstr(j),doc2.PersonalWorkRoom(0)) 
If doc2.PersonalBDate(0)<>"" Then
Call doc1.ReplaceItemValue("F7_"+Cstr(j),"*") 
End If
j = j + 1
End If
Next
заметь

Код:
Set doc2 = dc.GetFirstdocument
i = 0
While Not doc2 Is Nothing
' doc1.ReplaceItemValue("F1_"+cstr(i),)
If doc2.PersonalNotPrintInForm(0)<>"НЕ показывать в карточке обновления" Then
If doc2.PersonalDBaseUpdateUser(0)="Ответственный за пополнение БД" Then
Call doc1.ReplaceItemValue("F0_"+Cstr(j),"+")
End If
If doc2.PersonalAccountUser(0)="Получатель платежных документов" Then
Call doc1.ReplaceItemValue("F1_"+Cstr(j),"$")
End If 
If doc2.PersonalKodeksUser(0)="Пользователь ИПС Кодекс" Then
Call doc1.ReplaceItemValue("F2_"+Cstr(j),"K")
End If
Call doc1.ReplaceItemValue("F3_"+Cstr(j),doc2.PersonalAllName(0))
Call doc1.ReplaceItemValue("F4_"+Cstr(j),doc2.PersonalDolg(0))
Call doc1.ReplaceItemValue("F5_"+Cstr(j),doc2.PersonalWorkPhone(0))
Call doc1.ReplaceItemValue("F6_"+Cstr(j),doc2.PersonalWorkRoom(0)) 
If doc2.PersonalBDate(0)<>"" Then
Call doc1.ReplaceItemValue("F7_"+Cstr(j),"*") 
End If
j = j + 1
i = i + 1
End If
Set doc2 = dc.GetNextdocument(doc2)
Wend
вроде так

З,Ы, непонятно почуму используеться i и зачем j
 
K

Kron

#7
;) Не прошло увеличение скорости, нрешу больше на количество документов, так как при сокращении на половину, скорость выполнения возвращается, придеться еще и по отделам репликами разбивать, чтобы потом с каждого на сервер сливалось :)
 

morpheus

скриптописец
07.08.2006
3 915
1
#8
Хм.. возможно тут можно решить покопавшись со стороны администратора, но это уже не ко мне :)
может кто ещё чтото подскажет
 
K

Kron

#9
Подождем, со стороны администратора, хм... не знаю смотрел уже сервер по самое ни хочу с утра до вечера загружен. Будем ждать еще кого нить :) а может сервер поставить ксион ;)