ОБСУЖДЕНИЕ

Помогите разобраться с Repeatform

10 ответов 6,5 тыс.
AI-выжимка обсуждения скоро

Краткие тезисы обсуждения со ссылками на ключевые ответы появятся здесь.

Статус
Закрыто для дальнейших ответов.
Автор темы
Всем доброго времени суток.
Уважаемые мастера подскажите следующий момент
Нашел пример использования RepeatForm как в почтовой базе только у меня возникла с ним проблема
При создании документа Repeat Test и назначении повторов до его сохранения все хорошо,
но если сперва создать документ сохранить а потом войти в него и попробовать назначить повторы он выдает ошибки
Пример базы которую нашол
 
Код:
Sub Queryopen(Source As Notesuidocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant)
' since subform is used by by both To Do's and CalendarEntries we need to calculate EventType
On Error Goto processError
Dim bEventType As Integer
Dim bInitFlags As Long
bInitFlags = 128

If source.Document.hasItem("TaskType") Then
bEventType = 2
Else 
bEventType=1
End If

'** the form name of the underlying document MUST be "Appointment"
'** when we call Init on the NotesCSEventOwnerDocument object (we can
'** change it back after the Init call is done)
oldform = source.Document.Form
source.Document.Form = "Appointment"
Set csEventObj= New CSCalendarEntry( bEventType, source.document, source )
Call csEventObj.m_BEobject.Init(source.document, bInitFlags)
source.Document.Form = oldform
Exit Sub

processError:
Dim errMsg As String
If (Err = 4670) Then
errMsg = "Error 4670: make sure there's a form called 'CalendarProfile' in this database."
Else
errMsg = "Error " & Err & " on line " & Erl & ": " & Error$
End If

Print errMsg
Msgbox errMsg
Resume Next

End Sub

Вот код на котором срабатывает ошибка
 
nik3528
Не мешало бы ещё указать, что за ошибка, в какой строке и при каких условиях возникает. "Портянки" кода желательно заворачивать в спойлер.
 
Если речь о диалоге — никак. Можно выводить контрольные значения переменных с помощью Print или MsgBox.
 
Если вставить msgbox после каждой строчки кода то ошибка выскакивает на

Код:
Call csEventObj.m_BEobject.Init(source.document, bInitFlags)

вот сам класс

Код:
Class CSCalendarEntry
Public m_ws As NotesUIWorkspace
Public m_uidoc As NotesUIDocument
Public m_note As notesdocument
Public m_nEventType As Integer
Public m_beobject As Variant

Sub New(nEventType As Integer, note As notesdocument, source As notesuidocument)
Set m_ws = New NotesUIWorkspace
Set m_uidoc = source
Set m_note = note
m_nEventType = nEventType
Msgbox"3/5"	
Set m_beobject = New NotesCSEventOwnerDocument(nEventType)
Msgbox"3/6"	
End Sub

Sub Delete()
If Not (m_beobject Is Nothing) Then Delete m_beobject
End Sub

End Class
 
nik3528
В огороде бузина, в Киеве — дядька... Судя по строке, где вылетает ошибка, csEventObj является ссылкой на объект совсем другого класса. Сообщения трассировки лучше выводите в строку состояния Print'ом, так нагляднее, видны все сообщения сразу. И, в конце концов, где текст сообщения об ошибке? Здесь не телепаты, важно знать не только где ошбика, но и какая именно.
 
Ошибки следующие

Error item not found
далее
Object variable not set
и так несколько раз

я не могу понять какая переменная не установлена :)
 
Ошибка "Object variable not set" возникает при попытке выполнить метод или получить свойство не инициализированного объекта, например, для новых документов такой код в событии формы QueryOpen вызывает подобную ошибку:
Код:
Sub Queryopen(Source As Notesuidocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant)
Msgbox Source.Document.GetItemValue("Form")(0)
End Sub
потому что Source.Document — Nothing.
Попробуйте в подозрительных местах прежде чем обращаться к объектам проверять их на Nothing:
Код:
Set doc = Source.Document
If doc Is Nothing Then ...
 
В том то и дело что ошибка возникает не на новых документах а на старых, то есть если создать документ и сразу добавить список повторов то все хорошо и в дальнейшем документ работает нормально, но если в созданный документ пытаешься добавить повторы после его сохранения то появляется эта ошибка.
А за
Код:
If doc Is Nothing Then
спасибо попробую
 
Советую во всех процедурах/функциях иметь обработчики ошибок. Кое-чего можно почерпнуть тут:
link removed
 
Статус
Закрыто для дальнейших ответов.

Статистика тем

Создано
nik3528,
Последний ответ от
nvyush,
Ответы
10
Просмотры
6 474