FoxPro/Visual FoxPro - Ayuda!! Cómo controlar un error "descontrolado"

 
Vista:

Ayuda!! Cómo controlar un error "descontrolado"

Publicado por Andrea (325 intervenciones) el 25/02/2008 22:55:33
Hola a todos

Tengo un problema con un programa que me está volviendo loca.

En una tabla definí una clave compuesta de 3 campos como PRINCIPAL :Letra de comprobante+Nº de punto de venta+Nº de factura (los Nº son cadenas del formato "000x" donde x son los números de comprobantes, etc)

Cada tanto aparece un error de duplicación de índices (yo guardo el próximo número en otra tabla auxiliar y luego le sumo uno) nClave_Actual= nClave_Anterior + 1

Creo que esto tiene que ver con el hecho de que permito que se abran varias ventanas.

Pero mi consulta es la siguiente:
- Una vez que se genera el error ( 1884) va a un procedimiento de Control de errores con las típicas opciones.

- Me gustaría que al generar este error el programa sólo busque el próximo nº libre y lo guarde sin que el usuario se entere.

Ya tengo hecha esa rutina (con un select) pero no la dejo como fija porque hace lento todo el proceso de facturación. Me gustaría que solamente se ejecute cuando salta el error 1884

Ahí va la pregunta: DEBIDO A QUE LA RUTINA DE CONTROL DE ERRORES ESTÁ DENTRO DEL PROGRAMA PRINCIPAL MAIN.PRG,
Y QUE EL CÓDIGO QUE HICE PARA BUSCAR EL PRÓXIMO NÚMERO ESTÁ DENTRO DE UN FORM.
¿CÓMO HAGO PARA QUE AUTOMÁTICAMENTE TOME LA PARTE DE ESE FORMULARIO?

Si desde el FORM llama a la rutina de Errores (Main.prg) ¿siguen estando las tablas abiertas, las variables, etc o se pierde todo???

Muchas gracias
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:Ayuda!! Cómo controlar un error

Publicado por jose camilo  (805 intervenciones) el 26/02/2008 03:59:39
tu problema andrea no es la tabla, ni la funcion de error sino la logica.
te explico el Numero de comprobante no debe asignarlo a la hora de iniciar una factura sino al momento de grabar la factura. lo primero k debes hacer al momento de grabar la factura es ver cual es el comprobante disponible, aumentarle en uno y luego grabar los demas datos de la factura y asi nunca se te duplicara un comprobante.
lo utilizo asi por mas de 10 anos y me ha dado resultado.

piensa en esto , si el usuario sale sin grabar la factura k le ocurrira al numero de comprobante, se se apaga la pc, se va la luz, etc perdiste el comprobante, y el gobierno no entendera eso.
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:Ayuda!! Cómo controlar un error

Publicado por Andrea (325 intervenciones) el 26/02/2008 18:38:16
Gracia Camilo.

A ver si lo explico mejor. Antes de facturar el programa busca la última factura para que el usuario (el que factura) pueda ver si corresponde con la que está impresa en papel continuo. Lamentablemente en el uso diario los que facturan se olvidan de este detalle.

¿Cómo haces para buscar el último número de factura?

En mi caso hago un select sobre la DBF donde quedan registrados los movimientos y busco el más grande con la función MAX(), pero como hay varios miles de registros, este proceso tarda 2 o 3 segundos, que es MUCHO TIEMPO para alguien que debe hacer todo rápido

Espero sus comentarios

Muchas gracias
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:Ayuda!! Cómo controlar un error

Publicado por enrique (1041 intervenciones) el 26/02/2008 18:49:30
Tendrias que tener un indice sobre el campo numero de factura entonces vas al final del archivo (GO BOTTOM).
Una pregunta... solo factura una sola persona?
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:Ayuda!! Cómo controlar un error

Publicado por Andrea (325 intervenciones) el 26/02/2008 20:10:32
No, facturan varias a la vez (3 cajeros). Cada puesto se identifica con un número de punto de venta

Por eso la clave principal está armada así: Tipo de factura (A o B)+Punto de venta (caja) + Número de factura

2 cajeros pueden tener 2 números de facturas iguales pero el punto de venta los diferencia uno de otro

¿ES MÁS RÁPIDO UTILIZAR GO BOTTOM QUE UTILIZAR UN SELECT DE SQL?

Muchas gracias
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:Ayuda!! Cómo controlar un error

Publicado por enrique (1041 intervenciones) el 26/02/2008 20:25:24
Hasta la fecha para mi me resulto siempre mas rápido (probalo), por otro lado la indexacion debería ser la concatenacion de tus campos y deberías tener una relación desde el archivo de cajeros a este archivo.
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:Ayuda!! Cómo controlar un error

Publicado por Andrea (325 intervenciones) el 26/02/2008 20:54:55
Esta bien,
Entonces primero debería filtrar el archivo por cajero y luego hacer el go bottom??

Las relaciones son temporales en cada form y como realmente no tenía los resultados esperados con algunas relaciones, opté por utilizar los SEEK( ) en vez de manejarme con las relaciones

Muchas gracias
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:Ayuda!! Cómo controlar un error

Publicado por jose camilo (805 intervenciones) el 27/02/2008 02:30:38
por ke muestra la ultima factura
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:Ayuda!! Cómo controlar un error

Publicado por Andrea (325 intervenciones) el 27/02/2008 17:06:27
Para que los cajeros puedan ver si coincide con el número preimpreso en los formularios continuos, ya que tienen 2 tipos de facturas: A y B y una sola impresora
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