FoxPro/Visual FoxPro - A ver que puede ser....

 
Vista:
sin imagen de perfil

A ver que puede ser....

Publicado por Antonio Moronta (134 intervenciones) el 23/05/2007 21:16:41
hola amigos:

Mis sistema de facturacion estaba funcionando bien hasta que me di cuenta de un error que aun no he podido comprender con el conteo automatico de facturas. A ver si me sacan de esta.

Clic del boton Grabar.

LOCATE FOR NUMFAC=THISFORM.TEXT1.VALUE
IF (FOUND() AND EMPTY(NUMM)) OR (NOT FOUND() OR SYS(2011)="Record Locked")
*Si lo encuentra y esta vacia la variable NUMM OR no lo encuentra OR el registro esta bloqueado* entonces se cumplen las siguientes lineas.

THISFORM.CONTADOR
APPEND BLANK

REPLACE NUMFAC WITH THISFORM.TEXT1.VALUE
*Aqui sigue grabando campos al registro.

Notas:
El procedimiento CONTADOR del formulario tiene:
SELECT 2
GO BOTTOM
STORE NUMFAC+1 TO THISFORM.TEXT1.VALUE

y la variable NUMM es un control de cuando estoy modificando o es una factura nueva.

El caso es que lo estoy probando con dos maquinas conectadas directamente por cable y el error ocurre muy sutilmente solo en el caso de que pulse el boton Grabar en el mismo instante en ambas maquinas. Se graba la factura dos veces con el mismo numero. Pero cuando pulso este boton primero en una y luego en otra y viceversa, no sucede el error, me da la numeracion secuencial y correcta.

QUE puedo hacer aqui?, donde estoy metiendo la pata?

Uso: VFP9 y almacenamiento de tablas en buffer.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:A ver que puede ser....

Publicado por enrique (1041 intervenciones) el 23/05/2007 22:28:54
Tendrias que bloquear el ultimo registro cuando le sumas 1 a numfac

SELECT 2
GO BOTTOM
set repro to auto
vs=rlock()
vs_reg=recno()
STORE NUMFAC+1 TO THISFORM.TEXT1.VALUE

y luego desbloquearlo despues de

REPLACE NUMFAC WITH THISFORM.TEXT1.VALUE
unlock record vs_reg

podes poner un mensaje mientras intenta bloquear por ej: "Aguarde un momento"

Espero te sirva
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:A ver que puede ser....

Publicado por enrique (1041 intervenciones) el 23/05/2007 22:32:02
Tendrias que bloquear el ultimo registro cuando le sumas 1 a numfac

SELECT 2
GO BOTTOM
set repro to auto
vs=rlock()
vs_reg=recno()
STORE NUMFAC+1 TO THISFORM.TEXT1.VALUE

y luego desbloquearlo despues de

REPLACE NUMFAC WITH THISFORM.TEXT1.VALUE
unlock record vs_reg

podes poner un mensaje mientras intenta bloquear por ej: "Aguarde un momento"

Espero te sirva
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:A ver que puede ser....

Publicado por enrique (1041 intervenciones) el 23/05/2007 22:37:23
Tendrias que bloquear el ultimo registro cuando le sumas 1 a numfac

SELECT 2
GO BOTTOM
set repro to auto
vs=rlock()
vs_reg=recno()
STORE NUMFAC+1 TO THISFORM.TEXT1.VALUE

y luego desbloquearlo despues de

REPLACE NUMFAC WITH THISFORM.TEXT1.VALUE
unlock record vs_reg

podes poner un mensaje mientras intenta bloquear por ej: "Aguarde un momento"

Espero te sirva
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:A ver que puede ser....

Publicado por enrique (1041 intervenciones) el 23/05/2007 22:36:06
Tendrias que bloquear el ultimo registro cuando le sumas 1 a numfac

SELECT 2
GO BOTTOM
set repro to auto
vs=rlock()
vs_reg=recno()
STORE NUMFAC+1 TO THISFORM.TEXT1.VALUE

y luego desbloquearlo despues de

REPLACE NUMFAC WITH THISFORM.TEXT1.VALUE
unlock record vs_reg

podes poner un mensaje mientras intenta bloquear por ej: "Aguarde un momento"

Espero te sirva
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:A ver que puede ser....

Publicado por Antonio Moronta (134 intervenciones) el 23/05/2007 22:50:51
Enrrique te lo agradezco, pero mira. Justamente se me olvido poner el comando LOCK() despues del APPEND BLANK en el ejemplo que di para que me ayuden, es decir, que si lo tengo habilitado y usando, pero aun asi me da el error. Esto me esta consumiendo, puesto que tengo que arrreglarle este problemilla a mi cliente que esta bastante impaciente.

Gracias otra vez hermano.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:A ver que puede ser....

Publicado por enrique (1041 intervenciones) el 24/05/2007 13:54:21
Esta bien, pero eL registro que te digo que bloquees es cuando haces el GO BOTT y te posicionas en el ultimo registro.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:A ver que puede ser....

Publicado por jesus cordero (405 intervenciones) el 24/05/2007 11:59:49
Actualiza primero el contador
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:A ver que puede ser....

Publicado por Antonio Moronta (134 intervenciones) el 24/05/2007 20:56:00
Gracias Enrrique y Jesus.

En el caso que medice Enrrique, sí ese registro lo bloqueo, es decir, al momento de poner el registro en blanco lo bloqueo, pero el caso es que como dice Jesus tengo que actualizar el contador, porque me ingresa el registro en blanco normalmente pero lo que ingresa en el campo en un dato ya grabado.

He pensado en una solucion que estoy probando con un indice candidato, para atrapar el error e ir sumandole 1 al valor hasta que de con un numero que no exista. Lo implementare esta tarde a ver que soluciono y despues les cuento como me va.

Gracias troncos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar