• Lunes 18 de Noviembre de 2024, 03:20

Autor Tema:  ACTUALIZAR UNA TABLA COMPARTIDA EN RED  (Leído 7586 veces)

peta

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
ACTUALIZAR UNA TABLA COMPARTIDA EN RED
« en: Martes 31 de Marzo de 2009, 20:09 »
0
Hola a todos, soy nuevo en visual foxpro 9, quiero consultarlos. Tengo un form de facturacion y en el entorno de datos una tabla talaonarios.dbf donde guardo en el campo numero el ultimo nro de comprobante emitido. El problema es cuando 2 usuarios ingresan el mismo formulario el primero graba bien el valor de un text box (contiene el ultimo nº de factura generado) en la tabla talonarios.dbf, pero cuando el 2º usuario quiero grabar, aunque el valor del textbox es el correcto, no graba el valor en talonarios.dbf. Les detallo el codigo que uso para grabar:
select talonarios
thisform.txtnumero.value = talonarios.numero + 1
if rlock()
   replace talonarios.numero with thisform.txtnumero.value
   unlock
endif
Agradeceria me puedan brindar ayuda y gracias.

arielb

  • Moderador
  • ******
  • Mensajes: 771
  • Nacionalidad: pa
    • Ver Perfil
    • http://coder-pa.blogspot.com
Re: ACTUALIZAR UNA TABLA COMPARTIDA EN RED
« Respuesta #1 en: Viernes 3 de Abril de 2009, 19:47 »
0
Hola, revisa en la ayuda Set Reprocess To
"Porque de tal manera amó Dios al mundo que dio a su hijo unigénito para que todo aquél que en él crea no se pierda mas tenga vida eterna"
Juan 3:16

http://coder-pa.blogspot.com

xodrf

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
Re: ACTUALIZAR UNA TABLA COMPARTIDA EN RED
« Respuesta #2 en: Martes 11 de Agosto de 2009, 22:08 »
0
Ten en cuenta lo siguiente que debes obtener el nro de factura o talonario unicamente y/o exactamente despues de que haya sido presionada el boton grabar el comprobante y no al cargar tu formulario, yo te cuento que en mi formulario de facturacion yo pido al usuario confirmacion del nro generado automaticamente y funciona en red. Te describo como lo hice:
1) buscan el cliente
2) luego van buscando los productos, cantidad, precio etc.
3) Pulsan el boton grabar o cancelan con ESCAPE
*SI CANCELARON NO REGISTRA NADA SALGO!.
*SI GRABARON tomo el archivo de cabacera bloqueo la escritura FLOCK() y envio al final y obtengo el ultimo nro de factura sumado +1 (o sea el siguiente posible nro) muestro al usuario y este cambia y/o acepta si cambia el nro busco en la tabla para ver si no esta duplicado si esta le pido otra vez al usuario que lo cambie, mientras esto sucede los otros usuarios que quieran grabar una factura deben esperar, una vez ingresado un nro valido este se graba y recien alli desbloqueo el fichero de cabecera liberando a los demas usuarios la grabacion, y despues se hacen las demas tareas de registro y descarga de stock etc.
No se si es lo correcto pero me funciona a mi!!!

Obs: el siguiente nro de factura debe es incierto hasta que se busque y se intente grabar, de lo contrario estaria saltando y/o duplicando nros de facturas, segun mi experiencia.

malamigos

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: ACTUALIZAR UNA TABLA COMPARTIDA EN RED
« Respuesta #3 en: Viernes 21 de Agosto de 2009, 02:51 »
0
mira el consejo que te han dado no es el mas atinado, el problema es el siguiente, para ponerle un numero hace un conteo de registros de la tabla y a este numero le suma 1, pregunta que pasa si su tabla se daña y tiene que haer recuperacion de datos y se pierde uno o dos registros para no ser tan dramaticos, con ese sistema se te crea un enorme problema, porque no vas a poder grabar tu nuevo registro ya que el motor de visual te va a anunciar que se esta dupicando el numero de registro del campo que contiene el numero de registro, y eso porque, simplemente porque se borro un registro y al sumar los numeros de registro de la tabla para poner el numero de recibo que le corresponde te volvio una cantidad que ya la utilizastes en el anterior registro. lo que tienes que hacer es crear una tabla en donde se almacene los numeros correlativos de tus facturas o recibos, cada vez que vas a grabar sacas de esta tabla el numero que le va asignar a esta factura y luego lo cierras sumandole un 1, para el siguente mivimiento, me dejo enterder verdad, t al final de todas las instrucciones que das en el grabado, le pones thisform.refresh para que se visualice el cambio efectiado en la tabla.
suerte y cualquir consulta a malamigo60@hotmail.com

xodrf

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
Re: ACTUALIZAR UNA TABLA COMPARTIDA EN RED
« Respuesta #4 en: Domingo 23 de Agosto de 2009, 06:27 »
0
Bueno he revisado una y mil veces y no entiendo de que hablan cuando dicen que sumo +1 al nro de registro ... bueno supongo que es algo muy complejo para mi corto conocimiento yo almaceno el nro de comprobante en un campo char y lo convierto a val para poder calcular el sigte. nro de comprobante y lo vuelvo a pasar a char para almacenarlo a mi me funciona, lo que pasa es que quizas no me exprese bien, pero no importa no pienso perder mas mi tiempo tratando de ayudar :bad:

fabitojara

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re: ACTUALIZAR UNA TABLA COMPARTIDA EN RED
« Respuesta #5 en: Domingo 30 de Agosto de 2009, 00:31 »
0
es mas o menos asi la cosa segun mi parecer
set reprocess to automatic && bloquea el archivo completo hasta que se graba el ultimo nº de factura
flock("tabla_numfac") && tabla_numfac es archivo que guarda ult. num de factura
select tabla_numfac && si la tabla esta en el entorno de datos
LnNumfactura = tabla_numfac.numfactura + 1
replace tabla_numfac.numfactura with LnNumfactura
unlock in tabla_numfac

*** espero te sirva

xodrf

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
Re: ACTUALIZAR UNA TABLA COMPARTIDA EN RED
« Respuesta #6 en: Lunes 31 de Agosto de 2009, 16:15 »
0
Bueno para todos aquellos que esten interesados en aprender y no en criticar algo que nisiquiera comprenden les voy a explicar como yo resolvi esto: tenemos una tabla cabecera de factura y otra detalles y otras relacionadas, uno no puede obtener el nro de comprobante en el momento de cargar un formulario y/o antes de apretar el boton grabar, porque digo esto pues si el usuario1 carga el formulario y obtiene el nro 10 y simultanemente el usuario2 obtendria el nro 11 (suponiendo que se autoincremente correctamente los nros) ¿y que pasa si el usuario1 no desea grabar su factura y el usuario2 si?, pues simple te saltaria la numeracion de la factura 9 saltaria al 11 (en el caso de que la numeracion sea automatica estarias ante un error de numeracion).
Como yo imprimo la factura en un comprobante contable este debe concidir con el nro preimpreso, por tanto yo lo hice asi
DFAC   &&DETALLE DE FACTURA NO TIENE IMPORTANCIA PARA ESTA EXPLICACION

CFAC   &&CABECERA DE FACTURA
NCOMPR  CODCLI            FECHA ...        OTROS CAMPOS
000001    101030101001  30/12/2008    
000002    101030101002  30/12/2008
....
000100    101030101025  30/12/2008

Yo obtengo el nro asi: bloqueando el fichero CFAC con FLOCK() y enviando el puntero al final GO BOTTOM entonces capturo el ultimo nro y lo sumo 1 en este caso es mediante _ncompr=STR( VAL(NCOMPR)+1, 6, 0 ) y este numero yo se que es seguro porque al hacer FLOCK ningun otro proceso y/o usuario puede modificar ni agregar registros a CFAC en cambio si lo hago con RLOCK() este no impide que se sigan agregando registros/numeros al final ya que este solo impide que escribas en el registro bloqueado, una vez obtenido el sgte nro posible lo muestro al usuario y pido su confirmacion este puede aceptar o cambiar por otro en el caso de que la hoja preimpresa fuera dañada y/o usado para otros menesteres dicho comprobante y/o haya hecho a mano la factura y deba ingresarlo luego (hay muchos casos de estos), si el usuario acepta se da de alta el registro con el nuevo nro y se libera el FLOCK, si el usuario cambio el nro obtenido por uno siguiente o anterior reviso la tabla para certificar que no existe el comprobante para no duplicarlo y lo grabo, en caso que exista ya el comprobante vuelvo a pedirle al usuario el nro de comprobante, recien alli cuando se haya grabado el segundo usuario puede tratar de obtener el sgte nro posible, funciona perfectamente.

Como referencia dejo sentado que solo un usuario y/o proceso puede bloquear una tabla con FLOCK de modo que esto asegura que en la grabacion simultanea de facturas no exista conflicto de nros de comprobantes.

Luego de obtener el nro de comprobante procedo a hacer los registros en la ficha de movimiento, grabado en detalle de factura, descuento de stock y registros de asientos contables entre otras actualizaciones.

y para el amigo malamigo que esta muy preocupado por los cortes de luz, ningun sistema esta exento de fallo sobre todo los que utilizan motor de base de datos en el servidor, peeeero los capos en electronica proveen algo llamado UPS que esta al alcance de cualquier micro empresa ya sea para el servidor, switcher y las terminales, si no te gusta esa solucion pues informate sobre campos en la cabecera de las DBF'S  para aprender como repararla, yo te cuento hace tiempo estoy en esto y a lo sumo se dañan los CDX pero poquisimas veces y generalmente cuando tienen problemas en superficie del disco :no:

ugab

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: PROBLEMAS CON BLOQUEO DE REGISTRO
« Respuesta #7 en: Miércoles 14 de Abril de 2010, 18:54 »
0
Hola a todos.
Tengo una aplicacion en Clipper 5.3.
Es un programa del manejo de un club deportivo y el problema que tengo es cuando dos o mas terminales quieren cambiar de grupo a los habilitados.
Cuando graba la cantidad de personas que hay un grupo hora y dia determinado graba mal, a veces algundo de los registro los pone en 0 otros los suma mal y no he encontrado la forma de que suma y reste bien.
Si alguien puede ayudar desde ya gracias

arielb

  • Moderador
  • ******
  • Mensajes: 771
  • Nacionalidad: pa
    • Ver Perfil
    • http://coder-pa.blogspot.com
Re: ACTUALIZAR UNA TABLA COMPARTIDA EN RED
« Respuesta #8 en: Miércoles 14 de Abril de 2010, 19:45 »
0
Hola bienvenido al foro, en todos los foros encontrarás personas con la disposición de orientarte o ayudarte, pero para que la orientación o la ayuda sea la correcta debes dirigirte al foro que corresponda a tú pregunta. Lastimosamente en este foro en especifico lo más seguro no podremos ayudarte, ya que tú pregunta la hiciste en el foro de visual fox pro. Por lo que es mejor que la hagas en http://foros.solocodigo.com/viewforum.php?f=25 , utilizando un nuevo tema que es un botón con letras rojas en grande en la parte superior izquierda.

Saludos....
"Porque de tal manera amó Dios al mundo que dio a su hijo unigénito para que todo aquél que en él crea no se pierda mas tenga vida eterna"
Juan 3:16

http://coder-pa.blogspot.com