Aplicación como servicio o programar tarea
Moderator: Rathinagiri
Aplicación como servicio o programar tarea
Hola,
Se tienen algunos reportes de ventas que solicitan se realice el envío automático (vía correo) a los agentes, se planea se realice la programación del envío cada 5 días del mes 5,10,15,20... he estado buscando y leyendo un poco de información al respecto, pero aún no aterrizo si estamos hablando que tengo que generar un binario sin interfaz gráfica y utilizar el programador de tareas o realizarlo como un servicio, alguna idea?.
Saludos,
Javier
Se tienen algunos reportes de ventas que solicitan se realice el envío automático (vía correo) a los agentes, se planea se realice la programación del envío cada 5 días del mes 5,10,15,20... he estado buscando y leyendo un poco de información al respecto, pero aún no aterrizo si estamos hablando que tengo que generar un binario sin interfaz gráfica y utilizar el programador de tareas o realizarlo como un servicio, alguna idea?.
Saludos,
Javier
- danielmaximiliano
- Posts: 2612
- Joined: Fri Apr 09, 2010 4:53 pm
- Location: Argentina
- Contact:
Re: Aplicación como servicio o programar tarea
que los dias sean 5,10,15 y 20 en un servicio instalado en windows implica que la computadora este siempre encendida.
que se haga en dias y horarios laborables al encender el computador y dentro de una rutina para sabes si los dias definidos no sean laborables se enviaria digamos un dia 4... a menos que esa informacion sea armada especificamente el dia definido.. como ser una cuenta , saldo
que se haga en dias y horarios laborables al encender el computador y dentro de una rutina para sabes si los dias definidos no sean laborables se enviaria digamos un dia 4... a menos que esa informacion sea armada especificamente el dia definido.. como ser una cuenta , saldo
*´¨)
¸.·´¸.·*´¨) ¸.·*¨)
(¸.·´. (¸.·` *
.·`. Harbour/HMG : It's magic !
(¸.·``··*
Saludos / Regards
DaNiElMaXiMiLiAnO
Whatsapp. := +54901169026142
Telegram Name := DaNiElMaXiMiLiAnO
¸.·´¸.·*´¨) ¸.·*¨)
(¸.·´. (¸.·` *
.·`. Harbour/HMG : It's magic !
(¸.·``··*
Saludos / Regards
DaNiElMaXiMiLiAnO
Whatsapp. := +54901169026142
Telegram Name := DaNiElMaXiMiLiAnO
Re: Aplicación como servicio o programar tarea
Hola Daniel,
Esa parte que comentas tengo bien clara las condiciones que se deben de realizar y la programación para ello es correcto que se plantea que sea en horario laboral, incluso validar si los días definidos caen en fin de semana etc., la duda específica como lo mencioné es si debo investigar realizarlo como servicio o una programación de tarea con el administrador de tareas de Windows.
Saludos,
Javier
Esa parte que comentas tengo bien clara las condiciones que se deben de realizar y la programación para ello es correcto que se plantea que sea en horario laboral, incluso validar si los días definidos caen en fin de semana etc., la duda específica como lo mencioné es si debo investigar realizarlo como servicio o una programación de tarea con el administrador de tareas de Windows.
Saludos,
Javier
Re: Aplicación como servicio o programar tarea
Tenemos un programa que se encarga de Timbrar nuestras facturas, genera el xml y el pdf, asi como el envio de correos con estos documentos, el programa esta hecho en HMG interfase grafica y utilizamos el System Shceduler para ejecutar el programa, a una hora y dia establecidos, su funcionamiento es muy bueno , casi sin problemas
saludos
saludos
Re: Aplicación como servicio o programar tarea
Hola Martín,
La versión Pro cuesta 30US que es asequible o para lo que lo necesito es suficiente la versión free?.
Saludos,
Javier
La versión Pro cuesta 30US que es asequible o para lo que lo necesito es suficiente la versión free?.
Saludos,
Javier
Re: Aplicación como servicio o programar tarea
Si esamos usando la version free, con eso nos basta
saludos
saludos
Re: Aplicación como servicio o programar tarea
Perfecto Martín, hago pruebas. Gracias!!
Saludos,
Javier
Saludos,
Javier
- edufloriv
- Posts: 238
- Joined: Thu Nov 08, 2012 3:42 am
- DBs Used: DBF, MariaDB, MySQL, MSSQL, MariaDB
- Location: PERU
Re: Aplicación como servicio o programar tarea
Hola JParada,
No sé si entiendo bien tu post. Si se trata de automatizar procesos yo uso un módulo creado enteramente en HMG entre las tareas que ejecuta este módulo tengo:
- envio de avances de ventas.
- envio de varios tipos de alerta y reportes al área comercial.
- revisión de validez de documentos electrónicos.
- y una de la más importante el facturador automático: descarga de los pedidos de los clientes, facturación, generación de notas de crédito, envio de las hojas de picking al almacén y respuesta al cliente del pedido facturado.
Todos estos procesos sin intervención alguna de usuario. Para esto desarrollé un módulo con una interfaz gráfica de CONTROL. El módulo se encuentra siempre activo en el servidor de datos de la empresa y coloqué un acceso directo en la carpeta de inicio de dicho servidor para que si se reinicia el servidor el módulo se aperture solo de forma automática, no lo corro ni como servicio ni uso ninguna funcionalidad schedule de Windows. Para lo único que uso un programa externo gratuito es para la descarga de documentos electrónicos que nos envian nuestros proveedores ya que no he tenido tiempo de probar una solución que Daniel amablemente me alcanzó en un post en este foro para realizar esta tarea.
Te muestro el código del main para q tengas una idea de como lo realicé:
Te pongo los includes para que tengas una idea de todas la tareas que realiza el módulo. Lo gracioso es que realizar estas tareas automatizadas requiere MENOS código que realizar una interfáz gráfica para usuario, ya que no hay que validar todas las "cosas extrañas" que puede realizar un usuario humano
Espero haber ayudado y espero haber entendido tu interrogante.
Cordiales saludos a todos y un abrazo.
No sé si entiendo bien tu post. Si se trata de automatizar procesos yo uso un módulo creado enteramente en HMG entre las tareas que ejecuta este módulo tengo:
- envio de avances de ventas.
- envio de varios tipos de alerta y reportes al área comercial.
- revisión de validez de documentos electrónicos.
- y una de la más importante el facturador automático: descarga de los pedidos de los clientes, facturación, generación de notas de crédito, envio de las hojas de picking al almacén y respuesta al cliente del pedido facturado.
Todos estos procesos sin intervención alguna de usuario. Para esto desarrollé un módulo con una interfaz gráfica de CONTROL. El módulo se encuentra siempre activo en el servidor de datos de la empresa y coloqué un acceso directo en la carpeta de inicio de dicho servidor para que si se reinicia el servidor el módulo se aperture solo de forma automática, no lo corro ni como servicio ni uso ninguna funcionalidad schedule de Windows. Para lo único que uso un programa externo gratuito es para la descarga de documentos electrónicos que nos envian nuestros proveedores ya que no he tenido tiempo de probar una solución que Daniel amablemente me alcanzó en un post en este foro para realizar esta tarea.
Te muestro el código del main para q tengas una idea de como lo realicé:
Code: Select all
* ------------------------------------------------------ *
* SISTEMA : SISCOMFAR *
* PRG : ROBOT.PRG *
* CREADO : 09-07-2014 *
* ACTUALIZADO : *
* AUTOR : EDUARDO V. FLORES RIVAS *
* COMENTARIOS : ROBOT FACTURADOR *
* ------------------------------------------------------ *
#include <minigui.ch>
#include <hbcurl.ch>
#define adUseNone 1
#define adUseServer 2
#define adUseClient 3
#define adOpenForwardOnly 0
#define adOpenKeySet 1
#define adOpenDynamic 2
#define adOpenStatic 3
#define adLockReadOnly 1
#define adLockPessimistic 2
#define adLockOptimistic 3
#define adLockBatchOptimistic 4
#define adCmdText 1
#define adCmdTable 2
#define adCmdStoredProc 4
#define adCmdUnknown 8
#define adCmdFile 256
#define adCmdTableDirect 512
#define adIndex 0x100000
FUNCTION MAIN
REQUEST DBFCDX
REQUEST HB_LANG_ES
REQUEST HB_CODEPAGE_ESWIN
RDDSETDEFAULT("DBFCDX")
HB_LANGSELECT( "ES" )
HB_SetCodePage("ESWIN")
INISETS()
INIPUBLIC()
INICOLORES()
DEFINE WINDOW Win_Robot;
AT 0 , 0 ;
WIDTH 1010 HEIGHT 650 ;
TITLE 'ROBOT DE PROCESOS' ;
ON INIT RobotIniciar() ;
ON RELEASE RobotTerminar() ;
MAIN
ON KEY CONTROL+F1 OF Win_Robot ACTION Proceso_Manual()
ON KEY CONTROL+I OF Win_Robot ACTION SetearPrinters()
DEFINE TIMER Timer_1 ;
INTERVAL 120000 ;
ACTION RobotRevisaTareas()
DEFINE TOOLBAR FacturaBar BUTTONSIZE 70,30 FLAT BORDER
BUTTON BotPausa ;
CAPTION '&Pausa' ;
PICTURE 'imagen\pausa.bmp' ;
ACTION RobotPausar()
BUTTON BotTareas ;
CAPTION '&Tareas' ;
PICTURE 'imagen\engranajes.bmp' ;
ACTION RobotRevisaTareas()
BUTTON BotReanudar ;
CAPTION '&Reanudar' ;
PICTURE 'imagen\siguiente.bmp' ;
ACTION RobotReanudar()
BUTTON BotSalir ;
CAPTION '&Salir' ;
PICTURE 'imagen\salir.bmp' ;
ACTION Win_Robot.Release
END TOOLBAR
//
//
//
@ 060 , 010 BROWSE BrwMensajes ;
WIDTH 800 ;
HEIGHT 500 ;
HEADERS { 'Fecha' , 'Hora' , 'Mensaje' } ;
WIDTHS { 100 , 100 , 580 } ;
FIELDS { 'FECHA' , 'HORA' , 'MENSAJE' } ;
JUSTIFY { BROWSE_JTFY_LEFT , BROWSE_JTFY_LEFT , BROWSE_JTFY_LEFT } ;
WORKAREA XMENSA
//
//
//
DEFINE STATUSBAR
STATUSITEM "..." ACTION MsgInfo('Facturador')
CLOCK
DATE WIDTH 90
END STATUSBAR
END WINDOW
DEFINE WINDOW Mensajes;
AT 0,0 ;
WIDTH 300 ;
HEIGHT 120 ;
TITLE 'Robot' ;
CHILD
@ 10,10 LABEL Linea1 ;
WIDTH 280 HEIGHT 25 ;
VALUE "" ;
CENTERALIGN
@ 30,10 LABEL Linea2 ;
WIDTH 280 HEIGHT 25 ;
VALUE "" ;
CENTERALIGN
@ 50,10 LABEL Linea3 ;
WIDTH 280 HEIGHT 25 ;
VALUE "" ;
CENTERALIGN
END WINDOW
CENTER WINDOW Mensajes
ACTIVATE WINDOW Win_Robot
ACTIVATE WINDOW Mensajes
HIDE WINDOW Mensajes
RETURN
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
* FUNCION : MENSABAR
* COMENTARIO: MOSTRAR MENSAJES EN LA BARRA DE ESTADO
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
FUNC MENSABAR(texto,titulo)
titulo:=IF(titulo=NIL,'Facturador',titulo)
IF VALTYPE(texto)='A'
texto := texto[1]
ENDIF
IF PCOUNT()>0
Win_Robot.StatusBar.Item(1) := texto
do events
ELSE
Win_Robot.StatusBar.Item(1) := '...'
do events
ENDIF
RETURN(.T.)
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
PROC RobotIniciar
IF ! IsDir('c:\farmacom\Robot')
CreateFolder('c:\farmacom\Robot')
ENDIF
IF ! IsDir('c:\farmacom\Robot\Downs')
CreateFolder('c:\farmacom\Robot\Downs')
ENDIF
IF ! IsDir('c:\farmacom\Robot\Progs')
CreateFolder('c:\farmacom\Robot\Progs')
ENDIF
IF ! IsDir('c:\farmacom\Robot\Stand')
CreateFolder('c:\farmacom\Robot\Stand')
ENDIF
IF ! IsDir('c:\farmacom\Robot\Zips')
CreateFolder('c:\farmacom\Robot\Zips')
ENDIF
IF ! IsDir('c:\farmacom\Robot\Diarios')
CreateFolder('c:\farmacom\Robot\Diarios')
ENDIF
IF ! IsDir('c:\farmacom\Robot\Temps')
CreateFolder('c:\farmacom\Robot\Temps')
ENDIF
IF ! IsDir('c:\farmacom\Robot\Facts')
CreateFolder('c:\farmacom\Robot\Facts')
ENDIF
IF FILE(cDbfTimer)
Win_Robot.Timer_1.Enabled := .F.
Win_Robot.FacturaBar.BotPausa.Enabled := .F.
Win_Robot.FacturaBar.BotReanudar.Enabled := .F.
MENSABAR('CONECTANDO A LA BASE DE DATOS...')
INICONEXION()
INICONFIG()
TrackerOpen()
RobotAbreDia()
IniEstacion()
SIS_TIMER := .T.
TrackRegistrar('ACTIVACION DEL ROBOT')
MENSABAR('CONECTADO')
Win_Robot.Timer_1.Enabled := .T.
Win_Robot.FacturaBar.BotPausa.Enabled := .T.
Win_Robot.FacturaBar.BotReanudar.Enabled := .F.
ELSE
Win_Robot.Timer_1.Enabled := .F.
Win_Robot.FacturaBar.BotPausa.Enabled := .F.
Win_Robot.FacturaBar.BotReanudar.Enabled := .F.
MENSABAR('SIN CONEXION (No existe ROBOT.DBF)')
ENDIF
RETURN
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
PROC RobotAbreDia
LOCAL aMsgRobot := {;
{'FECHA' ,'C', 8,0},;
{'HORA' ,'C', 8,0},;
{'MENSAJE' ,'C',90,0}}
IF SELECT('XMENSA') > 0
CLOSE XMENSA
ENDIF
IF SELECT('XDATA') > 0
CLOSE XDATA
ENDIF
USE &cDbfTimer ALIAS XDATA EXCLUSIVE NEW
IF RECCOUNT() = 0
APPEND BLANK
ENDIF
IF RECCOUNT() = 1
APPEND BLANK
ENDIF
IF RECCOUNT() = 2
APPEND BLANK
ENDIF
IF RECCOUNT() = 3
APPEND BLANK
ENDIF
IF RECCOUNT() = 4
APPEND BLANK
ENDIF
cStampHoy := DTOS(DATE())
cMsgRobot := RUTA_ROBOT+'Diarios\HISTORIAL'
IF .NOT. FILE(cMsgRobot+'.DBF')
DBCREATE(cMsgRobot,aMsgRobot)
ENDIF
USE &cMsgRobot ALIAS XMENSA EXCLUSIVE VIA 'DBFCDX' NEW
IF .NOT. FILE(cMsgRobot+'.CDX')
INDEX ON DTOS(CTOD(FECHA))+HORA TAG MsgxHora TO &cMsgRobot DESCENDING
ENDIF
SET INDEX TO &cMsgRobot
DBGOTOP()
Win_Robot.BrwMensajes.Value := XMENSA->(RECNO())
Win_Robot.BrwMensajes.Refresh
SELE XMENSA
RETURN
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
PROC RobotTerminar
TrackRegistrar('APAGADO DEL ROBOT (X)')
RETURN
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
PROC RobotPausar
TrackRegistrar('PAUSA DEL SISTEMA')
MENSABAR('En Pausa...')
Win_Robot.Timer_1.Enabled := .F.
Win_Robot.FacturaBar.BotPausa.Enabled := .F.
Win_Robot.FacturaBar.BotReanudar.Enabled := .T.
RETURN
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
PROC RobotReanudar
TrackRegistrar('REANUDACION DEL SISTEMA')
MENSABAR('...')
Win_Robot.Timer_1.Enabled := .T.
Win_Robot.FacturaBar.BotPausa.Enabled := .T.
Win_Robot.FacturaBar.BotReanudar.Enabled := .F.
RETURN
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
PROC RobotRevisaTareas
LOCAL cErrorMsg
IF lLocker = .T.
RETURN
ENDIF
lLocker = .T.
Win_Robot.Timer_1.Enabled := .F.
Win_Robot.FacturaBar.Enabled := .F.
MENSABAR('Iniciando tareas...')
DO EVENTS
// BEGIN SEQUENCE WITH { |err| break(err) }
RobotTrabaja()
// RECOVER USING err
// cErrorMsg := err:Description
// RobotTrack( 'ERROR:'+cErrorMsg )
// END SEQUENCE
lLocker = .F.
Win_Robot.Timer_1.Enabled := .T.
Win_Robot.FacturaBar.Enabled := .T.
Win_Robot.FacturaBar.BotReanudar.Enabled := .F.
MENSABAR('En espera...')
DO EVENTS
RETURN
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
PROC RobotTrabaja
LOCAL cStmCheck
LOCAL cDbfCheck
// Revisión de tareas cada 2 minutos
IF FILE('Facturador.txt')
Fact_Auto()
RobotTrack( 'Pedidos revisados en el host.' )
ENDIF
IF FILE('Acepta.txt')
Acepta_Actualizar()
FOR nwait = 1 TO 5000000
NEXT
Acepta_Copiar()
ENDIF
// Proc_AutoCargaFactProv()
// Revision de tareas inicio del día (madrugada)
IF (LEFT( TIME() , 5 ) >= '06:00' .AND. LEFT( TIME() , 5 ) <= '10:00')
SELE XDATA
DBGOTO(1)
IF XDATA->(ALLTRIM(DATA)) < DTOS(DATE())
XDATA->DATA := DTOS(DATE())
RobotTareasDiaInicio()
SELE XDATA
DBGOTO(1)
XDATA->DATA := DTOS(DATE())
RobotTrack( 'Tareas de inicio del día realizadas.' )
ENDIF
ENDIF
// Revision de tareas cada media hora
IF LEFT( TIME() , 5 ) >= '07:00' .AND. LEFT( TIME() , 5 ) <= '20:00' .AND. FILE('Web.txt')
SELE XDATA
DBGOTO(2)
cUltiHora := XDATA->( ALLTRIM(DATA) )
cActuHora := TIME()
IF ElapTime( cUltiHora , cActuHora ) > '00:30'
MENSABAR('Revisión de rutina de cada media hora...')
ActualizarConsumos()
SubirAWeb()
webcanjes_Revisar()
Proc_PromoYDetectaTopes()
SELE XDATA
DBGOTO(2)
XDATA->DATA := cActuHora
MENSABAR('...')
RobotTrack( 'Tareas programadas cada media hora realizadas.' )
ENDIF
ENDIF
// Revision de tareas final del día
IF ( STR(DOW(DATE()),1) $ '23456' .AND. LEFT( TIME() , 5 ) >= '22:00' .AND. LEFT( TIME() , 5 ) <= '24:00' ) .OR. ( DOW(DATE())=7 .AND. LEFT(TIME(),5) >= '12:00' .AND. LEFT( TIME() , 5 ) <= '13:00' )
SELE XDATA
DBGOTO(3)
IF XDATA->(ALLTRIM(DATA)) < DTOS(DATE())
XDATA->DATA := DTOS(DATE())
RobotTareasDiaFin()
SELE XDATA
DBGOTO(3)
XDATA->DATA := DTOS(DATE())
RobotTrack( 'Tareas de final del día realizadas.' )
ENDIF
ENDIF
RETURN
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
PROC RobotTareasDiaInicio
LOCAL xOldSel := SELECT()
MENSABAR('Revisando Actualizaciones...')
VerificaActualizacion()
RobotTrack( 'Actualizaciones revisadas.' )
MENSABAR('Generando avance de ventas P.P....')
CrearAvancePPXls() // Proc_AvancePP.prg
RobotTrack( 'Avance Ventas P.P creado.' )
MENSABAR('Generando avance de ventas general...')
CrearAvanceGeneralXls() // Proc_AvanceGen.prg
RobotTrack( 'Avance Ventas Co-Dist. creado.' )
MENSABAR('Enviando correo a ventas...')
EmailAvancePPXls() // Proc_CorreoVentas.prg
RobotTrack( 'Correos de avances enviados a ventas.' )
MENSABAR('Limpiando pendientes...')
LimpiarPendientes() // Proc_LimpiarPends.prg
RobotTrack('Ordenes pendientes eliminadas.')
MENSABAR('Creando reporte de NO ATENDIDOS...')
Proc_OrdenesPendientes()
RobotTrack('Reporte de no atendidos creado y enviado a compras.')
MENSABAR('Creando reporte de CANJES SIN RECUPERAR...')
Repo_CanjesSinRecuperar()
RobotTrack('Reporte de Canjes sin recuperar enviado a compras.')
MENSABAR('Creando reporte de DEVOLUCIONES SIN RECUPERAR...')
Repo_DevolsNoRecup()
RobotTrack('Reporte de DEVOLUCIONES SIN RECUPERAR enviado a compras.')
MENSABAR('Creando reporte de NOTAS DE CREDITO PROV. SIN APLICAR...')
Proc_NotasProvsPends()
RobotTrack('Reporte de NOTAS DE CREDITO PROV. SIN APLICAR enviado a compras.')
MENSABAR('Creando reporte de ANALISIS DE ORDENES DE COMPRA...')
Repo_OrdenesAnalisis()
RobotTrack('Reporte de ANALISIS DE ORDENES enviado a gerencia.')
MENSABAR('Revisando documentos en ORDENES DE PAGO en SUNAT...')
Repo_SunatRevisa()
RobotTrack('Se revisaron los documentos en ORDENES DE PAGO en SUNAT.')
MENSABAR('Enviando correo de documentos NO VALIDOS...')
Repo_SunatCorreo()
RobotTrack('Se envió correo de documentos NO VALIDOS en SUNAT.')
MENSABAR('Actualizando Registro Electrónico de Controlados...')
REC_ActualizarAuto2()
RobotTrack('Se actualizó el registro de controlados.')
MENSABAR('Revisando estado del almacén...')
Proc_AlmacenEstado()
RobotTrack('Se revisó el estado del almacén.')
MENSABAR('Imprimiendo notas de crédito proveedores...')
ImprimeNotasProv()
RobotTrack('Se imprimieron las notas de crédito de proveedores.')
MENSABAR('Revisando stocks almacén vs stocks ventas...')
Proc_StockU_vs_StockV()
RobotTrack('Se compararon los stocks de almacén vs stocks ventas.')
MENSABAR('Revisando márgenes de ingresos...')
Repo_ComprasGerencia()
RobotTrack('Se revisaron los márgenes de los ingresos del día de ayer.')
cDiaHoy := STRZERO( DAY(GetHoy()) , 2 )
IF cDiaHoy+'.' $ '25.26.27.28.29.30.31.'
MENSABAR('Enviando avance de ventas a contabilidad...')
AvanceVentasMesEnCurso()
RobotTrack('Se envió el avance de ventas a contabilidad.')
ENDIF
IF DOW(DATE()) = 2
MENSABAR('Enviando lista de precios en excel (tabla B)...')
StocksExcel('B')
RobotTrack('Lista de precios en excel enviada.')
ENDIF
SELE XDATA
DBGOTO(5)
IF ALLTRIM( XDATA->DATA ) < LEFT( DTOS(DATE()) , 6 )
IF DAY(DATE()) > 12
MENSABAR('Eliminando política de canjes de la plataforma web...')
webcanjes_BorrarCsv()
SELE XDATA
DBGOTO(5)
XDATA->DATA := LEFT( DTOS(DATE()) , 6 )
ENDIF
ENDIF
MENSABAR('Actualizando pendientes en plataforma web...')
Pends_SubirAWeb()
RobotTrack('Actualización completa de pendientes en P.W. realizada.')
MENSABAR('Actualizando tránsito en plataforma web...')
Trans_SubirAWeb()
RobotTrack('Actualización completa de productos en tránsito en P.W. realizada.')
MENSABAR('...')
SELE &xOldSel
RETURN
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
PROC RobotTareasDiaFin
LOCAL xOldSel := SELECT()
MENSABAR('Enviando reporte de notas de crédito por promoción...')
Proc_NotasPromo()
RobotTrack('Reporte de notas por promoción enviado.')
MENSABAR('Actualizando logístico...')
LogisticoActualizar() // Proc_Logistico.prg
RobotTrack('Logístico actualizado.')
MENSABAR('Corrigiendo stocks bonificaciones...')
CorrigeStocksBonificados() // Proc_FixStockB.prg
RobotTrack('Stocks bonificados corregidos.')
MENSABAR('Revisando electrónicos generados...')
Acepta_Revisar(.F.)
MENSABAR('Revisando política de canjes...')
webcanjes_SubirCsv()
MENSABAR('...')
SELE &xOldSel
RETURN
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
PROC VerificaActualizacion
LOCAL cPathOri := '\\192.168.1.79\publica6\SisComFar\Updates\'
LOCAL cPathDes := '\\192.168.1.79\publica6\SisComFar\Accesos\'
LOCAL cFileExe := cPathOri+'FARMACOM.EXE'
LOCAL cVentExe := cPathOri+'VENTAS.EXE'
LOCAL cRutaExe := cPathOri+'RUTA.EXE'
LOCAL cPackExe := cPathOri+'PACKING.EXE'
LOCAL cKardExe := cPathOri+'KARDISTA.EXE'
LOCAL cDeTeExe := cPathOri+'DT.EXE'
LOCAL cLetrExe := cPathOri+'LETRAS.EXE'
BEGIN SEQUENCE WITH { |err| break(err) }
IF FILE(cVentExe)
COPY FILE &cVentExe TO (cPathDes+'Ventas\VENTAS.exe')
COPY FILE &cVentExe TO (cPathDes+'Gerencia\VENTAS.exe')
DELETE FILE &cVentExe
ENDIF
IF FILE(cRutaExe)
COPY FILE &cRutaExe TO (cPathDes+'Almacen\RUTA.EXE')
DELETE FILE &cRutaExe
ENDIF
IF FILE(cPackExe)
COPY FILE &cPackExe TO (cPathDes+'Almacen\PACKING.EXE')
DELETE FILE &cPackExe
ENDIF
IF FILE(cKardExe)
COPY FILE &cKardExe TO (cPathDes+'Almacen\KARDISTA.EXE')
DELETE FILE &cKardExe
ENDIF
IF FILE(cDeteExe)
COPY FILE &cDeteExe TO (cPathDes+'DT\DT.EXE')
DELETE FILE &cDeteExe
ENDIF
IF FILE(cLetrExe)
COPY FILE &cLetrExe TO (cPathDes+'Finanzas\LETRAS.EXE')
DELETE FILE &cLetrExe
ENDIF
IF FILE(cFileExe)
COPY FILE &cFileExe TO (cPathDes+'Sistemas\FARMACOM.exe')
COPY FILE &cFileExe TO (cPathDes+'Almacen\FARMACOM.exe')
COPY FILE &cFileExe TO (cPathDes+'Finanzas\FARMACOM.exe')
COPY FILE &cFileExe TO (cPathDes+'Gerencia\FARMACOM.exe')
COPY FILE &cFileExe TO (cPathDes+'Recepcion\FARMACOM.exe')
COPY FILE &cFileExe TO (cPathDes+'DT\FARMACOM.exe')
COPY FILE &cFileExe TO (cPathDes+'Compras\FARMACOM.exe')
DELETE FILE &cFileExe
ENDIF
RECOVER USING err
cErrorMsg := err:Description
RobotTrack( 'ERROR:'+cErrorMsg )
END SEQUENCE
RETURN
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
PROC RobotTrack( cMensaje ) // Panel Derecho
LOCAL xOldSel := SELECT()
SELE XMENSA
APPEND BLANK
REPLACE FECHA WITH DTOC(DATE())
REPLACE HORA WITH TIME()
REPLACE MENSAJE WITH cMensaje
DBGOTOP()
Win_Robot.BrwMensajes.Value := XMENSA->(RECNO())
Win_Robot.BrwMensajes.Refresh
SELE &xOldSel
RETURN
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
*-------------------------------------------------------------------------
PROC RobotCreaData
LOCAL aDataStru := {{'DATA','C',30,0}}
DBCREATE( cDbfTimer , aDataStru )
USE &cDbfTimer ALIAS XDATA EXCLUSIVE NEW
APPEND BLANK
APPEND BLANK
APPEND BLANK
APPEND BLANK
APPEND BLANK
CLOSE XDATA
MsgInfo('Se creó el archivo')
Win_Robot.Release
RETURN
#INCLUDE "Inicios.prg"
#INCLUDE "PcAgregar.prg"
#INCLUDE "Proc_Manual.prg"
// Procesos inicio del día
#INCLUDE "Proc_LimpiarPends.prg"
#INCLUDE "Proc_PagaVent.prg"
#INCLUDE "Proc_AvancePP.prg"
#INCLUDE "Proc_AvanceGen.prg"
#INCLUDE "Proc_CorreoVentas.prg"
#INCLUDE "Proc_CorreoNotasCred.prg"
#INCLUDE "Proc_OrdenNoAtend.prg"
#INCLUDE "Proc_ImprimeNotasProv.prg"
#INCLUDE "Proc_AvanceVentas.prg"
#INCLUDE "Proc_CanjesNoRecup.prg"
#INCLUDE "Proc_DevolsNoRecup.prg"
#INCLUDE "Proc_NotasProvPends.prg"
#INCLUDE "Proc_AceptaRevisar.prg"
#INCLUDE "Proc_AceptaMatch.prg"
#INCLUDE "Proc_AceptaCopiar.prg"
#INCLUDE "Proc_AceptaReenviar.prg"
#INCLUDE "Proc_ImprimeFacsRuta.prg"
#INCLUDE "Proc_OrdenesAnalisis.prg"
#INCLUDE "Proc_SunatCheck.prg"
#INCLUDE "Proc_SunatCorreo.prg"
#INCLUDE "Proc_StocksExcel.prg"
#INCLUDE "Proc_AlmacenEstado.prg"
#INCLUDE "Proc_DetectaStocksUV.prg"
#INCLUDE "Proc_ComprasGerencia.prg"
// Procesos cada hora
#INCLUDE "Proc_FarmaStock.prg"
#INCLUDE "Proc_DetectaTopes.prg"
#INCLUDE "Proc_AutoCargaFactProv.prg"
#INCLUDE "Proc_ClieConsumo.prg"
#INCLUDE "Web_SubirAWeb.prg"
#INCLUDE "Web_Canjes.prg"
// Procesos a las 5:00 p.m.
#INCLUDE "Proc_ComprasDelDia.prg"
// Procesos final del día
#INCLUDE "Proc_NotasProm.prg"
#INCLUDE "Proc_Logistico.prg"
#INCLUDE "Proc_RAS_Quebrados.prg"
#INCLUDE "Proc_RAS_PorPedir.prg"
#INCLUDE "Proc_RECAuto.prg"
#INCLUDE "Proc_RECAuto2.prg"
#INCLUDE "Proc_FixStockB.prg"
// FACTURADOR
#INCLUDE "Fact_Auto.prg"
#INCLUDE "Fact_Pedido.prg"
#INCLUDE "Fact_Genera.prg"
#INCLUDE "Fact_Kardex.prg"
#INCLUDE "Fact_Notas.prg"
#INCLUDE "Fact_NotaSave.prg"
#INCLUDE "PromoVGeneraNC.prg"
#INCLUDE "PromoWGeneraNC.prg"
#INCLUDE "PromoXGeneraNC.prg"
#INCLUDE "PromoYGeneraNC.prg"
#INCLUDE "PromoZGeneraNC.prg"
#INCLUDE "PromoIGeneraNC.prg"
#INCLUDE "PrintFact2.prg"
#INCLUDE "PrintCred2.prg"
#INCLUDE "PrinterSets.prg"
// ACEPTA
#INCLUDE "TextAcepta.prg"
#INCLUDE "TextFactura.prg"
#INCLUDE "TextBoleta.prg"
#INCLUDE "TextCredito.prg"
#INCLUDE "TextDebito.prg"
#INCLUDE "Proc_BajaXls.prg"
#INCLUDE "CORREO.PRG"
#INCLUDE "TRACKER.PRG"
#INCLUDE "FUNCION.PRG"
#INCLUDE "VISUALES.PRG"
#INCLUDE "USERED.PRG"
#INCLUDE "WATCHMAN.PRG"
#INCLUDE "XLS.PRG"
#INCLUDE "ZIPS.PRG"
#INCLUDE "FTPS.PRG"
Espero haber ayudado y espero haber entendido tu interrogante.
Cordiales saludos a todos y un abrazo.
Eduardo Flores Rivas
LIMA - PERU
- Ismach
- Posts: 161
- Joined: Wed Nov 28, 2012 5:55 pm
- DBs Used: DBF, mySQL, Mariadb, postgreSQL, Oracle, Db2, Interbase, Firebird, and SQLite
- Location: Buenos Aires - Argentina
Re: Aplicación como servicio o programar tarea
Bueno esto se puede hacer de 2 formas creo, Una es crear un Servicio Windows y que ese servicio dispare una tarea o un programa, creo los dias que se puede disparar la tarea se puede parametrizarla y la segunda es hacer un programa tipo automata y de ejecucion permanente que es lo que hice yo en su momento para una empresa y me base en el codigo de (HMG version extendida) ..\Samples\CuckooClock\
pero ademas de hacer algo los dias 15 y 20 (emitir un reporte, enviar un mail despues de las 5 de la tarde) , los dias 28 29 y 30 debia realizar un backups. Es decir el programa funcionada a modo pseudoautomata, cambiando de estado segun el rango horario durante el dia y segun la fecha.
pero ademas de hacer algo los dias 15 y 20 (emitir un reporte, enviar un mail despues de las 5 de la tarde) , los dias 28 29 y 30 debia realizar un backups. Es decir el programa funcionada a modo pseudoautomata, cambiando de estado segun el rango horario durante el dia y segun la fecha.