Bloqueo de Tablas para Facturar Visual Fox Pro
Bloqueo de Tablas para Facturar Visual Fox Pro
Bloqueo de Tablas para Facturar Visual Fox Pro
f=43&t=38884
Inicio | Foros | Blogs | Código fuente | Utilidades | Enlaces web | Artículos | Noticias |
Chat
FAQ
Buscar
Registrarse
Identificarse
Moderador: juez
7 mensajes • Página 1 de 1
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.
peta
Nuevo miembro
Mensajes: 1
Registrado: Mar Mar 31, 2009 3:38 pm
Email
Arriba
http://arielbmascodigo.blogspot.com/
juez
Miembro HIPER activo
Mensajes: 539
Registrado: Mié Abr 28, 2004 6:17 pm
Ubicación: panama
Email
Sitio web
Arriba
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.
xodrf
Miembro activo
Mensajes: 21
Registrado: Jue Jul 16, 2009 8:49 pm
Email
Arriba
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 [email protected]
malamigos
Nuevo miembro
Mensajes: 3
Registrado: Jue Ago 20, 2009 4:34 pm
Email
Arriba
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
xodrf
Miembro activo
Mensajes: 21
Arriba
fabitojara
Nuevo miembro
Mensajes: 1
Registrado: Sab Ago 29, 2009 11:24 pm
Email
Arriba
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
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
xodrf
Miembro activo
Mensajes: 21
Registrado: Jue Jul 16, 2009 8:49 pm
Email
Arriba
Mostrar mensajes previos: Todos los mensajes Ordenar por Fecha publicación Ascendente Ir
Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados
Índice general
El equipo • Borrar todas las cookies del Sitio • Todos los horarios son UTC + 1 hora