Si te sirve este código.
Es el que trabajo en un colegio.
Va tomando las acciones realizadas por los preceptores y al final del dia cuando cierran el programa, ese envía solito un mail con las actividades. (para saber que moquito se hecharon)
* programa de auditoria (refleja los eventos del usuario en alta baja y cambio)
PROCEDURE log_ingreso_sistema
SET DATE BRITISH
SET CENTURY ON
* lineas de separación
LOCAL linea_espacio,linea_estrella
linea_espacio = CHR(13)
linea_estrella = REPLICATE("*",94) + CHR(13)
*arma la cadena
TEXT TO cadena TEXTMERGE NOSHOW FLAGS 2 PRETEXT 2
<<linea_espacio>>
<<linea_estrella>>
<<DTOC(DATE())>> - <<LEFT(TIME(),5)>> hs. - APERTURA DE SESIÓN - USUARIO: <<v_usuarioactual>><<CHR(13)>>
<<linea_estrella>>
ENDTEXT
=guardar_log(cadena)
ENDPROC
**********************************************************************************************
PROCEDURE log_salida_sistema
SET DATE BRITISH
SET CENTURY ON
* lineas de separación
LOCAL linea_espacio,linea_estrella
linea_espacio = CHR(13)
linea_estrella = REPLICATE("*",94) + CHR(13)
*arma la cadena
TEXT TO cadena TEXTMERGE NOSHOW FLAGS 2 PRETEXT 2
<<linea_espacio>>
<<linea_estrella>>
<<DTOC(DATE())>> - <<LEFT(TIME(),5)>> hs. - CIERRE DE SESIÓN - USUARIO: <<v_usuarioactual>><<CHR(13)>>
<<linea_estrella>>
ENDTEXT
=guardar_log(cadena)
ENDPROC
**********************************************************************************************
PROCEDURE log_ingreso
LPARAMETERS pnomformulario
SET DATE BRITISH
SET CENTURY ON
* lineas de separación
LOCAL linea_espacio,linea_vacia,linea_raya
linea_espacio = CHR(13)
linea_raya = "+" + REPLICATE("-",93) + CHR(13)
linea_vacia = "|" + CHR(13)
*arma la cadena
TEXT TO cadena TEXTMERGE NOSHOW FLAGS 2 PRETEXT 2
<<linea_espacio>>
<<linea_raya>>
| <<DTOC(DATE())>> - <<LEFT(TIME(),5)>> hs. - INGRESO AL FORMULARIO <<ALLTRIM(pnomformulario)>>
<<linea_vacia>>
ENDTEXT
=guardar_log(cadena)
ENDPROC
**********************************************************************************************
PROCEDURE log_alta_sancion
LPARAMETERS pidregistro,pnomalumno,pfecha,pparte,pcantidad,pmotivo
SET DATE BRITISH
SET CENTURY ON
*arma la cadena
TEXT TO cadena TEXTMERGE NOSHOW FLAGS 2 PRETEXT 2
+---ALTA reg:<<ALLTRIM(pidregistro)>><<CHR(13)>>
| alumno: <<ALLTRIM(pnomalumno)>><<CHR(13)>>
| fecha: <<DTOC(pfecha)>> parte nº <<ALLTRIM(pparte)>><<CHR(13)>>
| cant: <<ALLTRIM(STR(pcantidad,5,2))>> - motivo: <<ALLTRIM(pmotivo)>><<CHR(13)>>
ENDTEXT
=guardar_log(cadena)
ENDPROC
**********************************************************************************************
PROCEDURE log_alta_inasistencia
LPARAMETERS pnomalumno,pidregistro,pfecha,pcantidad,pmotivo
SET DATE BRITISH
SET CENTURY ON
*arma la cadena
TEXT TO cadena TEXTMERGE NOSHOW FLAGS 2 PRETEXT 2
+---ALTA reg:<<ALLTRIM(pidregistro)>><<CHR(13)>>
| alumno: <<ALLTRIM(pnomalumno)>><<CHR(13)>>
| fecha: <<DTOC(pfecha)>><<CHR(13)>>
| cant: <<ALLTRIM(STR(pcantidad,5,2))>> - motivo: <<ALLTRIM(pmotivo)>><<CHR(13)>>
ENDTEXT
=guardar_log(cadena)
ENDPROC
**********************************************************************************************
PROCEDURE log_cambio_inasistencia
LPARAMETERS pnomalumno,pidregistro,pfecha,pcantidadnew,pcantidadold,pmotivonew,pmotivoold
SET DATE BRITISH
SET CENTURY ON
*arma la cadena
TEXT TO cadena TEXTMERGE NOSHOW FLAGS 2 PRETEXT 2
+---CAMBIO reg:<<ALLTRIM(pidregistro)>><<CHR(13)>>
| alumno: <<ALLTRIM(pnomalumno)>><<CHR(13)>>
| fecha: <<DTOC(pfecha)>><<CHR(13)>>
| Antes cant: <<ALLTRIM(STR(pcantidadold,5,2))>> - motivo: <<ALLTRIM(pmotivoold)>><<CHR(13)>>
| Ahora cant: <<ALLTRIM(STR(pcantidadnew,5,2))>> - motivo: <<ALLTRIM(pmotivonew)>><<CHR(13)>>
ENDTEXT
=guardar_log(cadena)
**********************************************************************************************
PROCEDURE log_cambio_calificacion
LPARAMETERS pidregistro,pnomalumno,pnomcurso,pnommateria,ptexto
SET DATE BRITISH
SET CENTURY ON
*arma la cadena
TEXT TO cadena TEXTMERGE NOSHOW FLAGS 2 PRETEXT 2
+---CAMBIO reg:<<ALLTRIM(pidregistro)>><<CHR(13)>>
| alumno: <<ALLTRIM(pnomalumno)>> - curso: <<ALLTRIM(pnomcurso)>><<CHR(13)>>
| materia: <<ALLTRIM(pnommateria)>><<CHR(13)>>
| Modific: <<ptexto>><<CHR(13)>>
ENDTEXT
=guardar_log(cadena)
ENDPROC
**********************************************************************************************
PROCEDURE log_baja_sancion
LPARAMETERS pidregistro,pnomalumno,pfecha,pparte,pcantidad,pmotivo
SET DATE BRITISH
SET CENTURY ON
*arma la cadena
TEXT TO cadena TEXTMERGE NOSHOW FLAGS 2 PRETEXT 2
+---BAJA reg:<<ALLTRIM(pidregistro)>><<CHR(13)>>
| alumno: <<ALLTRIM(pnomalumno)>><<CHR(13)>>
| fecha: <<DTOC(pfecha)>> parte nº <<ALLTRIM(pparte)>><<CHR(13)>>
| cant: <<ALLTRIM(STR(pcantidad,5,2))>> - motivo: <<ALLTRIM(pmotivo)>><<CHR(13)>>
ENDTEXT
=guardar_log(cadena)
ENDPROC
**********************************************************************************************
PROCEDURE log_baja_inasistencia
LPARAMETERS pnomalumno,pidregistro,pfecha,pcantidad,pmotivo
SET DATE BRITISH
SET CENTURY ON
*arma la cadena
TEXT TO cadena TEXTMERGE NOSHOW FLAGS 2 PRETEXT 2
+---BAJA reg:<<ALLTRIM(pidregistro)>><<CHR(13)>>
| alumno: <<ALLTRIM(pnomalumno)>><<CHR(13)>>
| fecha: <<pfecha>><<CHR(13)>>
| cant: <<ALLTRIM(pcantidad)>> - motivo: <<ALLTRIM(pmotivo)>><<CHR(13)>>
ENDTEXT
=guardar_log(cadena)
ENDPROC
**********************************************************************************************
PROCEDURE log_consulta
LPARAMETERS pnomconsulta
SET DATE BRITISH
SET CENTURY ON
*arma la cadena
TEXT TO cadena TEXTMERGE NOSHOW FLAGS 2 PRETEXT 2
+---CONSULTA <<ALLTRIM(pnomconsulta)>><<CHR(13)>>
ENDTEXT
=guardar_log(cadena)
ENDPROC
**********************************************************************************************
PROCEDURE log_impresion
LPARAMETERS pnomreporte
SET DATE BRITISH
SET CENTURY ON
*arma la cadena
TEXT TO cadena TEXTMERGE NOSHOW FLAGS 2 PRETEXT 2
+---REPORTE <<ALLTRIM(pnomreporte)>><<CHR(13)>>
ENDTEXT
=guardar_log(cadena)
ENDPROC
**********************************************************************************************
PROCEDURE log_salida
LPARAMETERS pnomformulario
SET DATE BRITISH
SET CENTURY ON
* lineas de separación
LOCAL linea_vacia,linea_raya
linea_raya = "+" + REPLICATE("-",93) + CHR(13)
linea_vacia = "|" + CHR(13)
*arma la cadena
TEXT TO cadena TEXTMERGE NOSHOW FLAGS 2 PRETEXT 2
<<linea_vacia>>
| <<DTOC(DATE())>> - <<LEFT(TIME(),5)>> hs. - SALIDA DEL FORMULARIO <<pnomformulario>>
<<linea_raya>>
ENDTEXT
=guardar_log(cadena)
ENDPROC
**********************************************************************************************
PROCEDURE log_no_pudo_ingresar
SET DATE BRITISH
SET CENTURY ON
* lineas de separación
LOCAL linea_espacio,linea_estrella
linea_espacio = CHR(13)
linea_estrella = REPLICATE("*",94) + CHR(13)
*arma la cadena
TEXT TO cadena TEXTMERGE NOSHOW FLAGS 2 PRETEXT 2
<<linea_espacio>>
<<linea_estrella>>
<<DTOC(DATE())>> - <<LEFT(TIME(),5)>> hs. - Usuario: <<v_usuarioactual>> - SE DENEGÓ EL INGRESO AL SISTEMA <<CHR(13)>>
<<linea_estrella>>
ENDTEXT
=guardar_log(cadena)
ENDPROC
**********************************************************************************************
PROCEDURE guardar_log
LPARAMETERS pcadena
LOCAL archivo
archivo = "c:\sistema004\datos\auditorias\auditoria " + ALLTRIM(DMY(DATE())) + ".txt"
=STRTOFILE(pcadena,archivo,1)
ENDPROC
**********************************************************************************************
PROCEDURE enviar_mail_salida
* envio de mail
TRY
LOCAL lcSchema, loConfig, loMsg, loError, lcErr
lcErr = ""
lcSchema = "http://schemas.microsoft.com/cdo/configuration/"
* configuracion de la pagina de google
loConfig = CREATEOBJECT("Cdo.Configuration")
loConfig.fields.item(lcSchema + "smtpserver") = "smtp.gmail.com"
loConfig.fields.item(lcSchema + "smtpserverport") = 465 && o tambien 587
loConfig.fields.item(lcSchema + "sendusing") = 2
loConfig.fields.item(lcSchema + "smtpauthenticate") = .t.
loConfig.fields.item(lcSchema + "smtpusessl") = .t.
loConfig.fields.item(lcSchema + "sendusername") = "notas2...@gmail.com"
loConfig.fields.item(lcSchema + "sendpassword") = "Julio_solo_2008"
loConfig.fields.update
* configuracion del mensaje de correo
loMsg = CREATEOBJECT("CDO.Message")
loMsg.Configuration = loConfig
loMsg.from = "notas2...@gmail.com"
loMsg.to = "earm...@gmail.com"
loMsg.subject = "Salida del sistema Preceptoría 1.4"
loMsg.textbody = DTOC(DATETIME()) + " --> El usuario " + ALLTRIM(v_usuarioactual)+ " ha salido del sistema, en el nivel " + ALLTRIM(STR(v_nivelactual))
adjunto = "C:\Sistema004\Datos\Auditorias\auditoria " + ALLTRIM(DMY(DATE())) + ".txt"
IF FILE(adjunto) THEN
loMsg.addattachment(adjunto)
ENDIF
loMsg.send
archivo = "c:\sistema004\datos\auditorias\auditoria " + ALLTRIM(DMY(DATE())) + ".txt"
=STRTOFILE(" --> Se ha enviado un mensaje de email "+CHR(13),archivo,1)
CATCH TO loError
WAIT "No se pudo emitir mail" WINDOW AT 20,20 NOWAIT
archivo = "c:\sistema004\datos\auditorias\auditoria " + ALLTRIM(DMY(DATE())) + ".txt"
=STRTOFILE(" --> Error, no se pudo emitir mail"+CHR(13),archivo,1)
FINALLY
RELEASE loConfig
RELEASE loMsg
loConfig = .null.
loMsg = .null.
ENDTRY
ENDPROC
