Visual Basic Foro

Programación => Visual Basic 6 => Mensaje iniciado por: E N T E R en Octubre 18, 2011, 03:58:40 pm

Título: Evitar que se guarde en una fecha anterior
Publicado por: E N T E R en Octubre 18, 2011, 03:58:40 pm
Como hacen ustedes para que sus sistemas no guarde en fechas antiguas o fechas muy adelantados. Lo que pasa es que tengo unos clientes que tiene 3 cajeros "VICHOS" los tipos lo que hacen es atrasar la fecha o adelantar y venden en esa fecha.

Yo conozco una forma que desde el windows se puede bloquear para que no se cambie la fecha. Pero los muy vichos entran desde el Setup de la placa, también le puse contraseña al bios, pero como entienden de pc le sacan la pila y se borra toda la config del bios.
Título: Re:Evitar que se guarde en una fecha anterior
Publicado por: YAcosta en Octubre 18, 2011, 04:19:38 pm
Yo me cure de espantos con algunos clientes sobre este tema.
1.- Se prende el server y se registra la fecha del día en 1 tabla que controla fechas.
2.- Las otras PCs cuando se ejecuta el programa busca la fecha y usa esa fecha en toda la aplicación.

Por supuesto hay varias condicionales.
1.- Solo puede registrar la fecha el usuario designado (siempre debe existir un responsable)
2.- Si la fecha no existe y el usuario tiene los permisos este cambiara la fecha, sino tiene los permisos el programa asume la fecha ultima como la fecha vigente.
3.- Al empezar de cada el sistema siempre pedirá que se registre la fecha del dia para que toda la red use esa fecha.
4.- Al arrancar la aplicación, lo primero que hace (entre otras cosas) es comparar su fecha de windows con la de sistema.
5.- Otras situaciones mas que no recuerdo.

Ventaja:
No importa cuantas veces el usuario cambie con intención o sin intención la fecha, esta permanecerá inalterable hasta que el usuario designado la cambie. De esta forma nunca se realizan transacciones fuera de fecha.

Saludos
Título: Re:Evitar que se guarde en una fecha anterior
Publicado por: E N T E R en Octubre 18, 2011, 04:32:50 pm
Entiendo...

El tema con mi caso que los 3 cajeros solo usan una PC sin server y nunca se apaga el programa ni la pc, a no ser para su fechoría. 3 turno hay mañana, tarde, noche por que es un estación de servicios de combustible y ahí tiene tu shoop 24 horas.

Una idea que tengo también puede ser ponerle un estado="controlado" cuando venga el dueño que aga su reporte de todos los estados = "no controlados".
Título: Re:Evitar que se guarde en una fecha anterior
Publicado por: YAcosta en Octubre 18, 2011, 04:55:55 pm
Podría ser, lo otro quizá seria que manejes tu reloj interno dentro del sistema, si dices que nunca se apaga entonces podrías valerte de un Time propio, como fuere, lo tuyo es un caso especial y debe tratarse como tal.

A veces no todo tiene que resolver con el software, a veces las cosas se resuelven mas fácilmente por fuera, salvo que lo halla ofrecido entonces caballero no mas.
Cuando el usuario es inepto o mal intencionado simplemente se le despide y se busca otro que no haga pendejadas, pasa que a veces esto no se aplica por otro factores, como que los empleados son familiares, el dueño paga una miseria, el negocio tiene algo de ilícito, el dueño no tiene don de mando ni tiene establecida las penalidades, etc.

Nos cuentas, saludos.
Título: Re:Evitar que se guarde en una fecha anterior
Publicado por: Bazooka en Octubre 18, 2011, 09:52:12 pm
Hola Ariel, ya está todo inventado casi! yo me canse de renegar con eso y opte por vender mis sistemas con protección electronica una llave como un pendrive que lee tu software y que incluso trae un reloj interno! asi que podes vender una aplicación que se pague de forma mensual y si llegada una fecha no te pagaron se les cae y no funciona más y si te paga le vas pasando un ejecutable que parchea la llave.
No son muy caras y te aseguran una cierta tranquilidad..

saludos
Título: Re:Evitar que se guarde en una fecha anterior
Publicado por: YAcosta en Octubre 18, 2011, 10:27:55 pm
Pero creo que el no quiere para controlar licencia, sino para que los usuarios no jodan las transacciones cambiando la fecha de Windows.
Título: Re:Evitar que se guarde en una fecha anterior
Publicado por: seba123neo en Octubre 19, 2011, 12:54:14 am
y porque no haces que tu sistema maneje una fecha independiente la fecha del sistema ?  asi hacena lgunos sistemas, tienen su propia fecha y por ams que le cambies al windows la fecha, el sistema sigue con su fecha, esto obliga al usuario a "cerrar el dia" y asi pasar al siguiente dia para vender.

saludos.
Título: Re:Evitar que se guarde en una fecha anterior
Publicado por: E N T E R en Octubre 19, 2011, 09:59:09 am
Hola Ariel, ya está todo inventado casi! yo me canse de renegar con eso y opte por vender mis sistemas con protección electronica una llave como un pendrive que lee tu software y que incluso trae un reloj interno! asi que podes vender una aplicación que se pague de forma mensual y si llegada una fecha no te pagaron se les cae y no funciona más y si te paga le vas pasando un ejecutable que parchea la llave.
No son muy caras y te aseguran una cierta tranquilidad..

saludos

No no amigo entendiste mal mi post. No es tema de que copie mi sistema y use otra gente.

y porque no haces que tu sistema maneje una fecha independiente la fecha del sistema ?  asi hacena lgunos sistemas, tienen su propia fecha y por ams que le cambies al windows la fecha, el sistema sigue con su fecha, esto obliga al usuario a "cerrar el dia" y asi pasar al siguiente dia para vender.

saludos.

Seba123neo. Esto ya lo había escuchado no tenes algún ejemplo, o donde puedo ver un ejemplo.


Saludos !!
Título: Re:Evitar que se guarde en una fecha anterior
Publicado por: raul338 en Octubre 19, 2011, 06:48:42 pm
Es solamente fecha no? Podes hacer una aplicación "Auxiliar" que nunca se cierre y permanezca oculta, que haga lo siguiente

PD: En caso de que no quieras que apaguen la PC, puedes ver esto (http://foro.elhacker.net/programacion_visual_basic/aplicacion_para_detener_apagado_de_windows-t315701.0.html) pero seria un poquito macabro x'D
Título: Re:Evitar que se guarde en una fecha anterior
Publicado por: seba123neo en Octubre 19, 2011, 07:00:02 pm
Hola Ariel, ya está todo inventado casi! yo me canse de renegar con eso y opte por vender mis sistemas con protección electronica una llave como un pendrive que lee tu software y que incluso trae un reloj interno! asi que podes vender una aplicación que se pague de forma mensual y si llegada una fecha no te pagaron se les cae y no funciona más y si te paga le vas pasando un ejecutable que parchea la llave.
No son muy caras y te aseguran una cierta tranquilidad..

saludos

No no amigo entendiste mal mi post. No es tema de que copie mi sistema y use otra gente.

y porque no haces que tu sistema maneje una fecha independiente la fecha del sistema ?  asi hacena lgunos sistemas, tienen su propia fecha y por ams que le cambies al windows la fecha, el sistema sigue con su fecha, esto obliga al usuario a "cerrar el dia" y asi pasar al siguiente dia para vender.

saludos.

Seba123neo. Esto ya lo había escuchado no tenes algún ejemplo, o donde puedo ver un ejemplo.


Saludos !!


guardas la fecha en la base de datos, y no le das pelota a la fecha de windows, y cuando "cerras la venta del dia", le sumas un dia a la fecha y asi sucesivamente...asi hacen algunos sistemas grandes para evitar el "hackeo" con la fecha del windows.
Título: Re:Evitar que se guarde en una fecha anterior
Publicado por: softmania en Octubre 19, 2011, 10:08:35 pm
:) SQL = "SELECT NOW() AS FECHA_HORA;" ... esto permite obtener la fecha actual del sever y poder usarla desde el programa cliente de los terminales que conectan. Varía su estructura en función de la base de datos que usas ;D

Saludos ...

Título: Re:Evitar que se guarde en una fecha anterior
Publicado por: seba123neo en Octubre 20, 2011, 09:39:26 am
:) SQL = "SELECT NOW() AS FECHA_HORA;" ... esto permite obtener la fecha actual del sever y poder usarla desde el programa cliente de los terminales que conectan. Varía su estructura en función de la base de datos que usas ;D

Saludos ...

pero eso sigue dependiendo de la hora de windows.
Título: Re:Evitar que se guarde en una fecha anterior
Publicado por: E N T E R en Octubre 20, 2011, 10:18:40 am
Asi mismo seba, la idea es que no dependa de Windows.
Título: Re:Evitar que se guarde en una fecha anterior
Publicado por: 79137913 en Octubre 20, 2011, 10:22:42 am
HOLA!!!

pero eso sigue dependiendo de la hora de windows.

El piensa que el servidor es impune y que nadie tiene acceso o mete mano.  :P

I N T R O:
Saca la fecha de esta web:
http://wwp.greenwichmeantime.com/time/scripts/clock-8/runner.php

GRACIAS POR LEER!!!
Título: Re:Evitar que se guarde en una fecha anterior
Publicado por: softmania en Octubre 20, 2011, 10:43:05 am
Hola seba123neo mis saludos ...

El time sea por sincronización o por lo que sea siempre dependerá de un dipositivo (en este caso una PC) y de un programa (En este caso windows)... lo traigas remotamente o lo hagas como lo hagas ...

El tema de la solución que planteo es muy simple ... solo que deje el comentario abierto al ingenio ...

Entoces ... si tu obtienes la fecha y hora de forma remota, desde un servidor que debe cumplir ciertas especificaciones técnicas, el cual no esta tan expuesto como un terminal (No se la infraestructura del lugar), estos datos se tornan fiables ... y ademas imposibles de alterar desde el terminal ... por lo que pasaría a tercer plano si cambian las fecha y hora del terminal ...

Esto se usa en sistemas de control de acceso, sistemas auditores, sistemas de gestión de datos con registro de hora etc ...

Tampoco quise plantear un solución para depender de terceros, por medio de la sincronización del timer de windows y mucho menos ponerme a hacer un planteamiento e indicar como configurar un server DTS (bajo windows o linux) ... me parece matar un mosquito con un cañon .... salu2

y porque no haces que tu sistema maneje una fecha independiente la fecha del sistema ?  asi hacena lgunos sistemas, tienen su propia fecha y por ams que le cambies al windows la fecha, el sistema sigue con su fecha, esto obliga al usuario a "cerrar el dia" y asi pasar al siguiente dia para vender.

Si lees tu propia cita verás que estoy en lo cierto ... cual es tu punto de partida ...como sincronizas ese timer que quieres independizar del sistema ... salu2 ...

HOLA!!!

pero eso sigue dependiendo de la hora de windows.

El piensa que el servidor es impune y que nadie tiene acceso o mete mano.  :P



I N T R O:
Saca la fecha de esta web:
http://wwp.greenwichmeantime.com/time/scripts/clock-8/runner.php

GRACIAS POR LEER!!!

Correcto Enter ... el server si es realmente un server nadie debe meter mano. Tu respuesta es buena, pero te hace dependiente de internet y ademas sigue dependiendo de un SO remoto que manejan terceros ... (a eso me refería que simpre estaremos atado a un programa y dipositivo por medio)
Título: Re:Evitar que se guarde en una fecha anterior
Publicado por: E N T E R en Octubre 20, 2011, 11:23:00 am
Aca lo de internet hay que descartar si o si el Patron NO QUIERE QUE TENGA INTERNT. Entonces no puedo sinconizar desde internet la fecha.
Título: Re:Evitar que se guarde en una fecha anterior
Publicado por: seba123neo en Octubre 20, 2011, 11:49:10 am
Hola seba123neo mis saludos ...

El time sea por sincronización o por lo que sea siempre dependerá de un dipositivo (en este caso una PC) y de un programa (En este caso windows)... lo traigas remotamente o lo hagas como lo hagas ...

El tema de la solución que planteo es muy simple ... solo que deje el comentario abierto al ingenio ...

Entoces ... si tu obtienes la fecha y hora de forma remota, desde un servidor que debe cumplir ciertas especificaciones técnicas, el cual no esta tan expuesto como un terminal (No se la infraestructura del lugar), estos datos se tornan fiables ... y ademas imposibles de alterar desde el terminal ... por lo que pasaría a tercer plano si cambian las fecha y hora del terminal ...

Esto se usa en sistemas de control de acceso, sistemas auditores, sistemas de gestión de datos con registro de hora etc ...

Tampoco quise plantear un solución para depender de terceros, por medio de la sincronización del timer de windows y mucho menos ponerme a hacer un planteamiento e indicar como configurar un server DTS (bajo windows o linux) ... me parece matar un mosquito con un cañon .... salu2

y porque no haces que tu sistema maneje una fecha independiente la fecha del sistema ?  asi hacena lgunos sistemas, tienen su propia fecha y por ams que le cambies al windows la fecha, el sistema sigue con su fecha, esto obliga al usuario a "cerrar el dia" y asi pasar al siguiente dia para vender.

Si lees tu propia cita verás que estoy en lo cierto ... cual es tu punto de partida ...como sincronizas ese timer que quieres independizar del sistema ... salu2 ...

HOLA!!!

pero eso sigue dependiendo de la hora de windows.

El piensa que el servidor es impune y que nadie tiene acceso o mete mano.  :P



I N T R O:
Saca la fecha de esta web:
http://wwp.greenwichmeantime.com/time/scripts/clock-8/runner.php

GRACIAS POR LEER!!!

Correcto Enter ... el server si es realmente un server nadie debe meter mano. Tu respuesta es buena, pero te hace dependiente de internet y ademas sigue dependiendo de un SO remoto que manejan terceros ... (a eso me refería que simpre estaremos atado a un programa y dipositivo por medio)

no se para donde te fuiste  :P, en el tema no se hablo de servidores ni nada, es una aplicacion simple en una pc que necesita ser independiente de la hora de windows, lo que yo planteo no se me ocurrio a mi, sino que lo usan sistemas de gestion grandes que tienen puestos de trabajo y facturan ahi mismo y cierran el dia, aparte pueden tener varias fechas de trabajo a la ves.
Título: Re:Evitar que se guarde en una fecha anterior
Publicado por: 79137913 en Octubre 20, 2011, 11:53:16 am
HOLA!!!

Investiga sobre el comando Net Time , aca un ejemplo:
net time \\SrvHora /set /yes (Sincroniza la hora local con la de SrvHora)

GRACIAS POR LEER!!!
Título: Re:Evitar que se guarde en una fecha anterior
Publicado por: erbuson en Octubre 20, 2011, 12:56:33 pm
Yo pienso que algo así, encriptando, ocultando, etc, ... puede ser mas que suficiente:

Código: [Seleccionar]
Option Explicit
Dim FechaDia As Date

Private Sub Form_Load()
  FechaDia = Date
  If ErrorFecha Then GoTo FechaMal
  '...
  '...
  Exit Sub
FechaMal:
  End
End Sub

Private Sub cmdCierre_Click()
  Dim Canal As Integer
  Canal = FreeFile
  Open App.Path & "\Cierre.txt" For Output As #Canal
  Print #Canal, FechaDia
  Close #Canal
End Sub

Private Function ErrorFecha()
  ' Devuelve Verdadero si Archivo no existe o FechaDia es menor a último cierre
  ' Podría comparar con >= pero así permite mas cierres en el mismo día
  'On Error GoTo ForzarError
  Dim Canal As Integer, FechaCierre As String
  Canal = FreeFile
  Open App.Path & "\Cierre.txt" For Input As #Canal
  Input #Canal, FechaCierre
  Close #Canal
  If CDate(FechaCierre) > FechaDia Then ErrorFecha = True
  Exit Function
ForzarError:
  ErrorFecha = True
End Function

Como puede verse, el boton de CIERRE DE CAJA, actualiza la fecha del último cierre.

Si la fecha del sistema es anterior el programa no se iniciará, siempre cabe la opción de FORZAR la fecha del sistema con la del último cierre y así no das pistas de porque no se inicia el programa.

No es mas que la opcion propuesta por seba123neo aplicada sin afectar para nada a la base de datos que tengamos definida.

Otra opción algo mas 'escondida' pero que utilizaría el mismo truco sería modificar la fecha del Ejecutable en lugar de crear un archivo, después podrías comparar de la misma manera la fecha del ejecutable y obrar en consecuencia.

Saludos
Título: Re:Evitar que se guarde en una fecha anterior
Publicado por: 79137913 en Octubre 20, 2011, 03:34:07 pm
HOLA!!!

Se me ocurrio algo...

Podes usar GetTickCount() para saber hace cuanto tiempo esta encendida la pc :P

GRACIAS POR LEER!!!
Título: Re:Evitar que se guarde en una fecha anterior
Publicado por: seba123neo en Octubre 20, 2011, 03:36:25 pm
YA VEO  :P

Me confundi con lo de 3 cajeros ... y pensé ... tiene que haber un server ... jejejeje

Lo que citas

Citar
sino que lo usan sistemas de gestion grandes que tienen puestos de trabajo y facturan ahi mismo y cierran el dia, aparte pueden tener varias fechas de trabajo a la ves.

Tiene que tener punto de referencia el timer (por lo general es el server o algún que otro servidor DTS sea wan o local, etc ),  que el programa lleve un clock interno aliniado por las dudas que se caiga la red y sigan en opcion offline es una cosa ... pero el punto de sincronización inicial debe ser uno y establecerse en todos los terminales  ... estamos de acuerdo en eso?  :o

veo a que apuntabas ... pero saque de contexto tu comentario por interpretar una red cliente y servidor ...  ;D

no hay problema jeje, todo bien, mira te cuento que para sincronizar es a mano, supongamos que el cliente comienza a usar el sistema hoy, en la base de datos se le mete el valor de la fecha de hoy y despues el sistema comienza a trabajar a partir de esa fecha y listo, aclaro que es solo una fecha nada de minutos ni segundos.

los clientes no saben nada de computacion ni que la fecha de trabajo esta en la base de datos, ni en que tabla esta, ya que hay mas de 300 tablas. y por mas que supieran y le llegan a cambiar algo, se joden ellos mismos y e sistema va a hacer desastre, aparte hay mas chequeos y validaciones para que esto no ocurra, pero basicamente es asi.

Título: Re:Evitar que se guarde en una fecha anterior
Publicado por: raul338 en Octubre 20, 2011, 07:13:00 pm
Podes usar GetTickCount() para saber hace cuanto tiempo esta encendida la pc :P
Ya se lo plantie yo :P