Проблема с Datetimevalue

wowa

Well-Known Member
01.02.2007
845
0
#1
Есть код, он срабатывает при сохранении:

Код:
Set item = doc.GetFirstItem( "OK_Date_14")
Set adt_ApprovalDate(i) = item.DateTimeValue
Ошибка выскакивает на второй строчке "Object variable not set".
Было обновление дизайна, в старых документах этого поля нет. При открытии документа, поле появляется(правда оно скрытое), но в свойствах документа оно видно и оно = "".
Дак вот, если редактируешь документ и сохраняешь, то выскакивает ошибка на этой строчке. Есть точно-но такое же поле = "", ошибки нет.

Уточнение, выскакивает только у одного пользователя, у все все нормально. В чем может быть проблема?
Версия лотуса 8.0.2........

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

nvyush

Well-Known Member
Lotus team
22.04.2009
2 317
0
#2
wowa
Код:
If item Is Nothing Then
'своя обработка
Else
Set adt_ApprovalDate(i) = item.DateTimeValue
End If
 

wowa

Well-Known Member
01.02.2007
845
0
#4
nvy , к сожалению я не могу проверить дебаггером что Item is Nothing в данном случае.
Я почти уверен что он Nothing, вопрос почему?

Если открыть два одинаковых документа, то у одного все хорошо срабатывает, а у второго ошибка
 
D

Darker

Гость
#5
А может без определения Item-а обойтись?
Сразу считывай doc.OK_Date_14(0)
потом не заморачиваясь
Код:
temp=cstr(doc.OK_Date_14(0))
if temp<>"" and len(temp)>=10 then set adt_ApprovalDate(i)=Cdat(left(temp,10))
 

wowa

Well-Known Member
01.02.2007
845
0
#6
Set adt_ApprovalDate(i)
не определен
ToxaRat,

Код:
Dim adt_ApprovalDate(0 To Anz_App_Freigabe) As NotesDateTime

For i = 0 To Anz_App_Freigabe
Set item = doc.GetFirstItem( "OK_Date_"+DocOkApp(i))				 ' Approval Date  
Set adt_ApprovalDate(i) = item.DateTimeValue
Next
Походу не в этом дело, тут вроде все правильно. Там и там от 0 до Anz_App_Freigabe
 

nvyush

Well-Known Member
Lotus team
22.04.2009
2 317
0
#7
nvy , к сожалению я не могу проверить дебаггером что Item is Nothing в данном случае.
Я почти уверен что он Nothing, вопрос почему?

Если открыть два одинаковых документа, то у одного все хорошо срабатывает, а у второго ошибка
А при чём тут дебаггер? Вставляешь вышеприведённый код, вместо коммента свою обработку (заполнить значением по-умолчанию, сообщить пользователю, что о нём думаешь :) и т.п.). Ошибка выскакивать не будет.

P.S. А чтоб вернее разобраться в причинах, добавить обработчик, который бы скидывал в лог значения переменных, юнид документа, текущего пользователя.
Set item = doc.GetFirstItem( "OK_Date_"+DocOkApp(i)) — может в DocOkApp(i) дело? Оно правильно проинициализировано?
 

wowa

Well-Known Member
01.02.2007
845
0
#8
nvy , я не хочу изменять старый , давно написанный не мной код.
Почему выскочила эта ошибка только у одного человека?
Если я напишу агент, который создаст в каждом документе это поле, значение = "", то item же нивкоем случае не будет nothing, я прав?
 

nvyush

Well-Known Member
Lotus team
22.04.2009
2 317
0
#9
nvy , я не хочу изменять старый , давно написанный не мной код.
Почему выскочила эта ошибка только у одного человека?
Если я напишу агент, который создаст в каждом документе это поле, значение = "", то item же нивкоем случае не будет nothing, я прав?
Проблема, похоже, не в одном поле. В этой строке
Set item = doc.GetFirstItem( "OK_Date_"+DocOkApp(i))
название поля вычисляется динамически. Если есть возможность написать агент, который прошерстит все документы и добавит ВСЕ нужные поля и это решение кажется проще — вперёд. Но я б таки добавил обработку ошибок в код.
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
2
#10
А в поле не ошибочное значение случайно? ЕМНИП, в этом случае метод возвращает Nothing.
 

wowa

Well-Known Member
01.02.2007
845
0
#12
А в поле не ошибочное значение случайно? ЕМНИП, в этом случае метод возвращает Nothing.
Если item is Nothing, то item.DateTimeValue - Ошибка
Если item = "", то item.DateTimeValue - Nothing, что для меня нормально

Поле не CFD или содержится в CFD-секции?
Вот тут сложнее. Само поле Editable, но скрытое. Далее, условие скрытие: Если Поле№2="1". Это поле тоже новое, и в старых документах его нет. И это поле скрытое и Computed