Set Uimydoc=ws.editdocument(true, Mydoc)

yerke

Well-Known Member
28.08.2007
392
0
33
Алматы
#1
привет всем
собсвенно сабж

1) доки с едитабл рич тескст полями
поля содержат текст формулы и рисунки

2) отбираю эти доки и в цикле копирую их значения рт полей и вставляю в ворд

Код:
Set uimydoc=ws.EditDocument(True, mydoc)
If Not uimydoc.EditMode Then uimydoc.EditMode=True
Call uimydoc.Refresh(True)
Call uimydoc.GotoField("RTF")
Call uimydoc.SelectAll
Call uimydoc.Copy
Call uimydoc.DeselectAll
Call uimydoc.Close(False)
Call wdApp.Application.Selection.PasteAndFormat(20)		
'=
'=
но в определенном месте в цикле возникает ошибка и выводится окошка с "NDS is Running"
и клиент закрывается

помогите разобратся в чем трабла

в NSD файле пишется
### PASS 2 : FATAL THREAD with STACK FRAMES 1/10 [ NLNOTES:1658:1558]
 

yerke

Well-Known Member
28.08.2007
392
0
33
Алматы
#3
Может ошибка на строке Call wdApp.Application.Selection.PasteAndFormat(20)?
нет
точно знаю ошибка в

Set uimydoc=ws.EditDocument(True, mydoc)
пробовал тока его оставить все ровно так выходило


причем эта ошибка в цикле возникает не везде

Set uimydoc=ws.EditDocument(True, mydoc)
иногда работает нормально
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
2
34
Kiev, Ukraine
#4
я немного не с ответом, но, возможно, совет придется к стати...

а что, если не открывать каждый документ, а создать новый, в цикле из каждого выбранного документа взять RT-итем и сложить его в аналогичный в этом новом документе, а в конце открыть только один новый и скопировать оттуда в ворд?..
 

yerke

Well-Known Member
28.08.2007
392
0
33
Алматы
#5
а что, если не открывать каждый документ, а создать новый, в цикле из каждого выбранного документа взять RT-итем и сложить его в аналогичный в этом новом документе, а в конце открыть только один новый и скопировать оттуда в ворд?..
я так и делаю :)

Код:
Function DXL_Q(doc As NotesDocument)
'=
On Error Goto EH
'=
Dim mydoc As NotesDocument
Dim uimydoc As NotesUIDocument
'=
Set rti=doc.GetFirstItem("QUESTION")
If rti Is Nothing Then Exit Function
'=
Set mydoc=cdb.CreateDocument
Call mydoc.ReplaceItemValue("FORM", "FOR-PRINT-TODAYS-RESULTS")
Call rti.CopyItemToDocument(mydoc, "RTF")
Call mydoc.ComputeWithForm(False, False)
'=
Set exporter=ses.CreateDXLExporter
outputer=exporter.Export(mydoc)
'=
isRTI=(Instr(1, outputer, "<picture", 5) > 0) Or (Instr(1, outputer, "<object", 5) > 0)
'=print
Writes(doc.NUMBER(0)+") ")
'=
If isRTI Then		
Set uimydoc=ws.EditDocument(True, mydoc)
If Not uimydoc.EditMode Then uimydoc.EditMode=True
Call uimydoc.Refresh(True)
Call uimydoc.GotoField("RTF")
Call uimydoc.SelectAll
Call uimydoc.Copy
Call uimydoc.DeselectAll
Call uimydoc.Close(False)
Call wdApp.Application.Selection.PasteAndFormat(20)		
Else
Writes(Cstr(rti.Text))
End If
'=
Set mydoc=Nothing
Set uimydoc=Nothing
'=
Writes(Chr(13))
Exit Function
EH:
Resume Next 
End Function
'=
'=

и в цикле вызываю фунцию DXL_Q(doc As NotesDocument)

и On Error Goto EH
тоже не ловит ошибку

блин
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
2
34
Kiev, Ukraine
#6
на сколько я понимаю, то ты получил коллекцию документов и для каждого выполняешь функцию DXL_Q,
которая для каждого документа открывает его (грубо говоря, пусть даже и копируя сначала в новый док)!
и копирует содержимое в ворд

а я тебе говорю, что сначала собери все доки из коллекции в один, и только его! открой и скопируй в ворд!
 

yerke

Well-Known Member
28.08.2007
392
0
33
Алматы
#7
113
вот магическое число лотуса
:D

если вывать в цикле следующую комбинацию
Set uimydoc=ws.EditDocument(True, mydoc)

113 раз
то оказывается клиент лотуса падает :lol:
 

Constantin A Chervonenko

Well-Known Member
Lotus team
#8
если 113 раз вывать в цикле следующую комбинацию
Set uimydoc=ws.EditDocument(True, mydoc)

то оказывается клиент лотуса падает :lol:
Т.е. открыть 113 окон? :D

Хорошо, что он упал отдельно от виндовза...