на End Sub агента руагется

AvasKvas

Well-Known Member
03.06.2009
78
0
32
#1
Доброго все дня!

Есть агент по расписанию! Он собирает статистику по документам!
Результат работы - 38 документов со статистикой! Каждый докумеент отправляется отдельному пользователю!

Так вот на конечной строке End Sub агента вываливается ошибка NoRESUME.
Этой ошибки нет, если не вызывать окманду отправки документа почтой doc.send(true, tmp)

Как от этого избавиться? Помогите!


И еще, кто работал в лотус скрипте с многомерными массивами?
Есьт масиив Dim x() as variant

Делаю его двумерным Redim Preserve y(i, 4). Допустим i = 10.
мне надо чтоб i менялось, но когда я вызываю второй раз Redim Preserve y(i, 4) с другим значением i, выдает ошибку! Можно ли как-нибудь это обойти?
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 203
24
38
Киев
ToxaRat.com
#2
наверняка стоит обработчик ошибок и NoRESUME его фраза, которую нужно заканчивать хотя бы Exit Sub
 

AvasKvas

Well-Known Member
03.06.2009
78
0
32
#3
Блин, точно! А я грешил на Call doc.send()!
Спасибо!

У меня тут возник волшебный замкнуты круг!
Поолучил коллекцию!хочу из нее невалидные документы убрать!
Есть функция на проверку валидности!если докумеенто не валидный то вызываю Coll.deleteDocument, но на плохом док-те выдает ошибку, что документ поврежден!
отрывок кода следующий!
Код:
If CSDocCollections.Count > 0 Then
For i = 1 To CSDocCollections.Count
Set CSDoc =CSDocCollections.GetNthDocument(i) ' получаем документ
If IsDocValid(CSDoc)= False Then ' проверяем на валидность	
Call CSDocCollections.DeleteDocument(CSDoc)
End If
Next
End If
Каким образом можно удалить этот документ? При чем у него вообще никаких свойств нет при этом!
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 203
24
38
Киев
ToxaRat.com
#4
может вместо удаления стоит заниматься теми которые нормальные?
зачем лишний раз дергать колекцию?
учитель делать обработку в один проход
 

AvasKvas

Well-Known Member
03.06.2009
78
0
32
#5
Я по размерности коллекции делаю размерность двумерного массива,в который потом запихиваю значения полей документов из этой коллекции! Если плохие документы не удалить, то появляются пустые элементы массива, что не очень хорошо!

Просто сижу и ищу методы решения одной задачи!
 
K

K-Fire

Гость
#6
Обходить коллекцию с помощью цикла for и getNthDocument это самый известная worst practice.

Замените обход коллекции на такой код:

Set doc = coll.getFirstDocument
while not doc is nothing
<тут код заполнения массива>
Set doc = coll.getNextDocument( doc)
end while

Туда же впендюрьте счетчик i, и все будет работать отлично.
 

AvasKvas

Well-Known Member
03.06.2009
78
0
32
#8
Идея не плохая, но будет ли работать с двумерным массивом? Мне до заполнения массива уже надо знать i полностью!
Нужно получить массив где в каждой строке по 4 элемента! А Redim Preserve x(i,4) будет выдавать ошибку!
 
K

K-Fire

Гость
#9
Что-то неясно почему не работает Redim preserve. Полный текст приведите, может где-то ошибка левая закралась.
 

AvasKvas

Well-Known Member
03.06.2009
78
0
32
#11
Это не ошибка, это особонность изменения динамисчких многомерных массивов в лотусе! можно изменить только размерность, но не верхний индекс! А мне нужен конкретно верхний индекс!

Код такой выдаст ошибку
Код:
i = 1
set doc = coll.getFirsDocument
While not doc is nothing
ReDim preserve x(i,4)
i = i + 1
set doc = coll.getNextDocument(doc)
wend
А если было бы ReDim preserve x(4, i) - то все было бы нормально! Но так как то не удобно!Плохо как то воспринимается такой массив!

Хотя пока писал, переосмыслил все!может и нормально!щас попробую!
Спасибо за толчек моей мысли! :) :)
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 429
351
homepage.mac.com
#12
массив может сам содержать массивы
неясен смысл применения именно массива, есть хэши (List), ведь массив создается (как пр-ло) для последующего поиска...
можно просто объявить Variant и фигачить в него...
для строк это так:
Код:
	Dim v As Variant
'содание динамического массива строк
v=Split("","")
Do While Not entry Is Nothing
v=Arrayappend(v,entry.ColumnValues(1))
Set entry=collection.GetNextEntry(entry)
Loop