Не срабатывает On Error

Тема в разделе "Lotus - Программирование", создана пользователем alb, 6 фев 2009.

  1. alb

    alb Well-Known Member

    Регистрация:
    13 июл 2005
    Сообщения:
    212
    Симпатии:
    0
    в агенте есть примерно такой код

    ...
    On Error Goto er
    ....
    .....
    .....
    er:
    Msgbox "vid_save_initialize: Cтрока № "&Cstr(Erl())& ". Ошибка "& Err() & ": " & Error(),, "Ошибка"


    всегда это работала когда происходила ошибка, удобно очень для отладки знать где и что произошло

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

    может гдето включить надо или галку какую поднять/снять

    разрабатывалось все на домино 7 клиент 7

    а там где не срабатывает все 6,5 они отказываются поставить 7 по своим причинам
     
  2. Murtas

    Murtas Well-Known Member

    Регистрация:
    11 апр 2006
    Сообщения:
    123
    Симпатии:
    0
    где пишет? и как агент запускается?
     
  3. kilcher

    kilcher Гость

    Не знаю,может это то же самое,но я пишу так ;)

    errh:
    Msgbox Error & | in line | & Erl(), 64, |Lotus Notes (| & Lsi_info(2) & |)|
     
  4. alb

    alb Well-Known Member

    Регистрация:
    13 июл 2005
    Сообщения:
    212
    Симпатии:
    0
    Murtas
    пишет в консоли сервера
    агент запускается с веб формы

    kilcher
    как писать особо не важно вобще не происходить переход на обработчик ошибок
    хотя более чем на 10 серверах нормально работает среди которых есть версии 6,5

    приходится вставлять месажбоксы через каждую строку пока найдешь где произошло ошибка
     
  5. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    Если это веб форма, принтить ошибку тоже не получается?
    Код (Text):
    Sub Initialize
    On Error Goto ErrHandle

    ErrHandle:       'For all errors
    Print "Error" & Str(Err) & ": " & Error$ & " at line " & Erl()
    Resume Away
    Away:
    End Sub
    Хотя может быть у вас агент шедуллерный...
    А если переход по On Error Goto не происходит на метку значит ошибки наверное и нет ;)
     
  6. alb

    alb Well-Known Member

    Регистрация:
    13 июл 2005
    Сообщения:
    212
    Симпатии:
    0
    Gor
    в том и дело ошибка есть, одна переменнная использовалась без проверки на пустого значения.
    ошибку нашли понатыкав мессажбоксами
    а перхода никак нет
    это навреное глюк какойто
     
  7. Murtas

    Murtas Well-Known Member

    Регистрация:
    11 апр 2006
    Сообщения:
    123
    Симпатии:
    0
    alb

    попробуй в этом агенте оставить только только строчку с ошибкой ... что получится?

    возможные подозрения:

    1. название метки.
    2. еще раз в коде встречается "On Error" после верхнего объявления
    3. найден новый глюк ;) - только напиши как воспроизвести
     
  8. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.075
    Симпатии:
    300
    запуск агента из агента, например, приведет к отсутствию "вывода" ошибки (ежели память не врет) на консоль...
    ОнЕррор работать будет!
    выводите в лог
     
  9. Kee_Keekkenen

    Kee_Keekkenen Well-Known Member

    Регистрация:
    5 сен 2006
    Сообщения:
    616
    Симпатии:
    4
    хотелось бы код увидеть.. ни разу не сталкивался с такой ситуацией..
     
  10. Constantin A Chervonenko

    Constantin A Chervonenko Well-Known Member

    Регистрация:
    30 май 2006
    Сообщения:
    1.288
    Симпатии:
    0
    А перед меткой er что стоИт? Exit или Goto? Или ничего??
     
  11. alb

    alb Well-Known Member

    Регистрация:
    13 июл 2005
    Сообщения:
    212
    Симпатии:
    0
    Murtas
    1. с названием порядок, код тот же что и на всез остальных серверах где на точно такую же ошибку реакция соответствующая
    2. он единственный только в начале. обработчик вы конце.
    3. похоже нато, но пока чем вызвано не известно

    [codebox]Sub Initialize
    On Error Goto er
    Set ses=New NotesSession
    Set doc=ses.DocumentContext
    Set db=ses.CurrentDatabase
    Msgbox "111"
    Select Case doc.vid(0)
    Case "1": Call otpusk()
    Case "2": Call prevozrast()
    Case "3": Call vzysk()
    Case "4": Call nagrada()
    Case "5": Call attestatcia()
    Case "6": Call vysluga()
    End Select

    Print "Отчет готов, перейдите в соответсвующий раздел"

    If 1<>1 Then
    er:

    Msgbox "vid_save_initialize: Cтрока № "&Cstr(Erl())& ". Ошибка "& Err() & ": " & Error(),, "Ошибка"
    End If
    End Sub[/codebox]
    код одного из процедур
    [codebox]Sub prevozrast
    On Error Goto er
    Dim sotr As NotesDocument
    Dim doc As NotesDocument
    Dim tmpdoc As NotesDocument
    Dim colsot As NotesDocumentCollection
    Dim stazh_col As NotesDocumentCollection
    Dim sotview As NotesView
    Dim stazh_view As NotesView
    Dim dt As NotesDateTime
    Dim m, i As Integer
    Dim poz As Integer
    Dim buf As String
    Dim tmp As String

    Set sotview=db.GetView("emplageLim")
    Set colsot=sotview.GetAllDocumentsByKey("Достигшие предельного возраста",True)
    Set sotr=colsot.GetFirstDocument

    fn="Kadry_prvozrast.xls"
    fn= vygruz_formy(fn)
    If fn="0" Then
    Msgbox "Не удалось найти или выгрузить исходный файл отчета"+Chr(10)_
    +"Если дальше будет выходить это сообщенине обратитесь администратору"
    End If

    Set xl = CreateObject("Excel.Application")
    Call xl.Workbooks.Open(fn) ' на том сервере не был установлен офис, потому и здесь ошибка выскакивало.

    Set xlsh = xl.ActiveWorkbook.ActiveSheet
    xl.DisplayAlerts = False

    Set stazh_view=db.GetView("emplStazh")
    xlsh.cells(1,1).Value="Список сотрудников достигших и достигающих предельного возраста пребывания"+ _
    +" на службе в "+Cstr(1+Year(Today))+" году по Агентству и территориальным органам на "+Cstr(Today)
    buf=""
    poz=3
    i=1
    While Not sotr Is Nothing
    If buf <> sotr.emplOrganization(0) Then
    buf=sotr.emplOrganization(0)
    xl.Range("A"&Cstr(poz)&":G"&Cstr(poz)).Select
    xl.Selection.HorizontalAlignment = -4108
    xl.Selection.MergeCells = True
    xl.Selection.Font.Bold = True
    xl.Selection.Font.Size=14
    xlsh.cells(poz,1).Value=buf
    poz=poz+1
    i=1
    End If
    xlsh.cells(poz,1).Value=i
    tmp=sotr.emplRank(0)+ " " + sotr.emplLastName(0)+" "
    If sotr.emplFirstName(0)<>"" Then tmp=tmp+Left(sotr.emplFirstName(0),1)+"."
    If sotr.emplMiddleName(0)<>"" Then tmp=tmp+Left(sotr.emplMiddleName(0),1)+"."
    tmp=tmp+" - "+sotr.emplPostList(0)+" "+sotr.emplSubunit(0)
    xlsh.cells(poz,2).Value=tmp
    xlsh.cells(poz,3).Value=sotr.emplBirthday(0)
    xlsh.cells(poz,4).Value=sotr.dataprodlen(0)


    Set tmpdoc=stazh_view.GetDocumentByKey(sotr.UID(0),True)
    If Not tmpdoc Is Nothing Then
    xlsh.cells(poz,7).Value=tmpdoc.seniorityLongService(0)
    End If
    i=i+1
    poz=poz+1
    Set sotr=colsot.GetNextDocument(sotr)
    Wend
    xl.Range("A"&Cstr(poz+1)).Select
    xl.ActiveWorkbook.save
    xl.ActiveWorkbook.close
    xl.quit
    '*********крепление
    Set doc=db.CreateDocument
    Call doc.Save( True, True )
    Dim notesItem As NotesItem
    Dim rtitem As NotesRichTextItem
    Dim object As NotesEmbeddedObject

    Set notesItem = doc.ReplaceItemValue("Form", "Сформированный отчет доп")
    Set notesItem = doc.ReplaceItemValue("reportName", "Шектеулі жасқа жеткендер / Достигшие предельного возраста")

    Set notesItem = doc.ReplaceItemValue("reportDate", Format( Now , "dd/mm/yyyy h:mm:ss") )
    Set notesItem = doc.ReplaceItemValue("reportPath", Strrightback(fn,"\" ))

    Set rtitem = New NotesRichTextItem( doc, "Body" )
    Set object = rtitem.EmbedObject ( EMBED_ATTACHMENT, "", fn )

    Call doc.Save( True, True )
    'конец крепление
    Kill fn
    If 1<>1 Then
    er:
    If Isobject(xl.ActiveWorkbook) Then
    xl.ActiveWorkbook.close
    End If
    If Isobject(xl) Then
    xl.quit
    End If
    If Dir$(fn)<>"" Then Kill fn
    Msgbox "vid_save_prevozrast: Cтрока № "&Cstr(Erl())& ". Ошибка "& Err() & ": " & Error(),, "Ошибка"
    End If
    End Sub[/codebox]
     
  12. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    1.
    класс , такого исчо не видел, пример индийского кода...
    коспользуйтесь Exit Sub

    2.
    Возможно в самом блоке после метки происходит ошибка, например неправильно идёт проверка
    If Isobject(xl.ActiveWorkbook) Then должна быть после If Isobject(xl) Then, а то получаетсья xl Вы не проверили, а к его свойствам уже обращаетесь

    попробуйте вывести мессадж сразу после метки перехода(для проверки)
    да и ещё, 3 строки:
    If Isobject(xl) Then
    xl.quit
    End If
    можно заменить 1й строкой
    If Isobject(xl) Then xl.quit
     
  13. Murtas

    Murtas Well-Known Member

    Регистрация:
    11 апр 2006
    Сообщения:
    123
    Симпатии:
    0
    alb слушай Morpheusa

    ... избегай таких конструкций, и старайся разделять операции очистки/удаления объектов/переменных от самой ошибки

    вот пример как следовало бы делать ...

    Код (Text):
    Sub vid_save_prevozrast()

    On error goto ErrorHandler

    ' Your code goes here :)...

    ExitProcedure:

    ' Close/remove your Excel object

    Exit Sub

    ErrorHandler:
    Msgbox "vid_save_prevozrast: Cтрока № "&Cstr(Erl())& ". Ошибка "& Err() & ": " & Error(),, "Ошибка"

    Resume ExitProcedure

    End Sub
     
  14. alb

    alb Well-Known Member

    Регистрация:
    13 июл 2005
    Сообщения:
    212
    Симпатии:
    0
    всем спасибо учтем ваши советы

    а ведь ты прав. ошибка как раз из за того что xl пустой
     
Загрузка...

Поделиться этой страницей