31.07.2007, 16:51 | #1 |
Участник
|
Всем привет! Есть один небольшой вопросик.
Можно ли средствами C\AL отловить момент запуска и момент окончания работы, например, отчета? Вопрос возник из-за необходимости написать систему логирования времени запуска и окончания работы некоторых объектов.
__________________
"И лишь патологоанатом не берет работу на дом" (с) Вишневский |
|
31.07.2007, 16:58 | #2 |
Участник
|
В самом отчете какую-нибудь функцию написать, которая фиксирует время начала работы. (встроенными функциями TODAY, WORKDATE, TIME,CURRENTDATETIME и т.д.) и сохраняет в соответствующую табличку.
В общем, смысл сводится к тому, чтобы прописать во все контролируемые объекты какой-то код.
__________________
Должен остаться только один. |
|
31.07.2007, 17:23 | #3 |
Участник
|
Цитата:
Сообщение от NeNavision
В самом отчете какую-нибудь функцию написать, которая фиксирует время начала работы. (встроенными функциями TODAY, WORKDATE, TIME,CURRENTDATETIME и т.д.) и сохраняет в соответствующую табличку.
В общем, смысл сводится к тому, чтобы прописать во все контролируемые объекты какой-то код. Конечно можно на каждую ошибку писать код в отчете, который будет закрывать время выполнения... Но это работает только для прогнозируемых ошибок. В целом суть вопроса сводится к следующему: есть ли в Навике триггер, который отрабатывает ВСЕГДА при окончании работы объекта, даже если оное окончание вызвано исключением или спец. функцией.
__________________
"И лишь патологоанатом не берет работу на дом" (с) Вишневский |
|
31.07.2007, 17:55 | #4 |
Участник
|
Так это уже совсем другой вопрос
Думаю стандартного ничего нет.
__________________
Должен остаться только один. |
|
31.07.2007, 18:20 | #5 |
Участник
|
Но. Как рассказывали старые мастера.
Способ все таки есть. Это использование CODECOVERAGE. Который, несмотря на ошибку в коде, сохраняет записи в своей табличке о выполнении объекта. Соответственно можно определить, завершено корректно выполнение или нет. Например, после выполнения кода, строки в таблице Code Coverage остаются. Код: CodeCoverage.RESET; CodeCoverage.DELETEALL; CodeCoverage.RESET; IF CODECOVERAGELOG(TRUE) THEN BEGIN //выполняем какойто код ERROR('видимо что-то случилось'); //--------------------- CODECOVERAGELOG(FALSE); END;
__________________
Должен остаться только один. |
|
01.08.2007, 11:45 | #6 |
Участник
|
Цитата:
Сообщение от NeNavision
Но. Как рассказывали старые мастера.
Способ все таки есть. Это использование CODECOVERAGE. Который, несмотря на ошибку в коде, сохраняет записи в своей табличке о выполнении объекта. Соответственно можно определить, завершено корректно выполнение или нет. Например, после выполнения кода, строки в таблице Code Coverage остаются. Код: CodeCoverage.RESET; CodeCoverage.DELETEALL; CodeCoverage.RESET; IF CODECOVERAGELOG(TRUE) THEN BEGIN //выполняем какойто код ERROR('видимо что-то случилось'); //--------------------- CODECOVERAGELOG(FALSE); END; |
|
01.08.2007, 20:58 | #7 |
Участник
|
Есть способ проще - через Automation.
DLL в атаче содержит компонент с событием OnDestroy, которое срабатывает в момент уничтожения самого Automation и передаёт управление в Navision. Пример использования: 1) Регистрируете DLL. (regsvr32.exe CROCOnDestroy.dll) 2) В нужном отчете создаете глобальную переменную oDestroy Automation 'CROC OnDestroy 1.0 Type Library'.OnDestroyEvent 3)В дополнительных свойствах переменной выставляете WithEvents=YES 4)В коде появляется тригер - oDestroy::OnDestroy() - в него пишете поцедуру логирования. |
|
02.08.2007, 17:23 | #8 |
Участник
|
А если в файлик логи писать, а потом когда потребуется их анализировать, загружать в Нав.
|
|
03.08.2007, 13:55 | #9 |
Участник
|
|
|