|
|
#1 |
|
Участник
|
Всем привет! Есть один небольшой вопросик.
Можно ли средствами C\AL отловить момент запуска и момент окончания работы, например, отчета? Вопрос возник из-за необходимости написать систему логирования времени запуска и окончания работы некоторых объектов.
__________________
"И лишь патологоанатом не берет работу на дом" (с) Вишневский |
|
|
|
|
#2 |
|
Участник
|
В самом отчете какую-нибудь функцию написать, которая фиксирует время начала работы. (встроенными функциями TODAY, WORKDATE, TIME,CURRENTDATETIME и т.д.) и сохраняет в соответствующую табличку.
В общем, смысл сводится к тому, чтобы прописать во все контролируемые объекты какой-то код.
__________________
Должен остаться только один. |
|
|
|
|
#3 |
|
Участник
|
Цитата:
Сообщение от NeNavision
В самом отчете какую-нибудь функцию написать, которая фиксирует время начала работы. (встроенными функциями TODAY, WORKDATE, TIME,CURRENTDATETIME и т.д.) и сохраняет в соответствующую табличку.
В общем, смысл сводится к тому, чтобы прописать во все контролируемые объекты какой-то код. Конечно можно на каждую ошибку писать код в отчете, который будет закрывать время выполнения... Но это работает только для прогнозируемых ошибок. В целом суть вопроса сводится к следующему: есть ли в Навике триггер, который отрабатывает ВСЕГДА при окончании работы объекта, даже если оное окончание вызвано исключением или спец. функцией.
__________________
"И лишь патологоанатом не берет работу на дом" (с) Вишневский |
|
|
|
|
#4 |
|
Участник
|
Так это уже совсем другой вопрос
![]() Думаю стандартного ничего нет.
__________________
Должен остаться только один. |
|
|
|
|
#5 |
|
Участник
|
Но. Как рассказывали старые мастера.
Способ все таки есть. Это использование CODECOVERAGE. Который, несмотря на ошибку в коде, сохраняет записи в своей табличке о выполнении объекта. Соответственно можно определить, завершено корректно выполнение или нет. Например, после выполнения кода, строки в таблице Code Coverage остаются. Код: CodeCoverage.RESET;
CodeCoverage.DELETEALL;
CodeCoverage.RESET;
IF CODECOVERAGELOG(TRUE) THEN BEGIN
//выполняем какойто код
ERROR('видимо что-то случилось');
//---------------------
CODECOVERAGELOG(FALSE);
END;
__________________
Должен остаться только один. |
|
|
|
|
#6 |
|
Участник
|
Цитата:
Сообщение от NeNavision
Но. Как рассказывали старые мастера.
Способ все таки есть. Это использование CODECOVERAGE. Который, несмотря на ошибку в коде, сохраняет записи в своей табличке о выполнении объекта. Соответственно можно определить, завершено корректно выполнение или нет. Например, после выполнения кода, строки в таблице Code Coverage остаются. Код: CodeCoverage.RESET;
CodeCoverage.DELETEALL;
CodeCoverage.RESET;
IF CODECOVERAGELOG(TRUE) THEN BEGIN
//выполняем какойто код
ERROR('видимо что-то случилось');
//---------------------
CODECOVERAGELOG(FALSE);
END; |
|
|
|
|
#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() - в него пишете поцедуру логирования. |
|
|
|
|
#8 |
|
Участник
|
А если в файлик логи писать, а потом когда потребуется их анализировать, загружать в Нав.
|
|
|
|
|
#9 |
|
Участник
|
|
|
|