Page 1 of 1

Mal funcionamiento en RED

PostPosted: Fri Oct 26, 2007 7:16 am
by Loren
Estimados compañeros:
tengo instalado en RED mi aplicación de gestión de facturas y todo va de maravillas, excepto 1 cosa: la correlación en los números de facturas!!

Si 2 o más usuarios entran a la vez en el módulo de "nueva factura", cuando la imprimen el programa asigna el mismo numero a todas las facturas impresas, ¿Como es posible? Sin embargo utilizo el mismo procedimiento en el stock y las cantidades se refrescan perfectamente si ambos usuarios entran a la vez en ese modulo.
Si cada usuario entra individualmente al modulo "nueva factura" la correlación de los numeros de facturas van de maravilla!!

¿ Alguna sugerencia ? Mil gracias
Lorenzo

PostPosted: Fri Oct 26, 2007 11:19 am
by Ruben D. Fernandez
Lorenzo:

Según he leido aquí en el foro, deberías asignarle
el número a la factura cuando el usuario "Acepta" esa factura y
la manda a imprimir o sea en el ultimo momento.

Es una idea.

saludos

Ruben Fernandez

PostPosted: Fri Oct 26, 2007 9:24 pm
by mantonio_08
Loren:

La solucion pasa por que el numero de factura lo obtengas cuando realices el bloqueo de la base para grabar, en ese momento el folio de la factura sera en ULTIMO GRABADO + 1, grabas, imprimes desbloqueas y muestra en pantalla en Numero de la factura grabada.

Espero te sirva, esta es la forma en que yo lo realizo.

Saludos,
Antonio

PostPosted: Fri Oct 26, 2007 11:51 pm
by sysctrl2
Lorenzo

aqui se habla del tema y la sulucion

http://fivetechsoft.com/forums/viewtopi ... ht=factura

saludos..

PostPosted: Sat Oct 27, 2007 9:39 pm
by joseluisysturiz
Loren,
Te recomiendo lo siguiente, imagino muchos otros lo haran asi, sino, es un buen metodo, crea una DBF donde controlas la numeracion de tus documentos; pedidos, facturas, recibos de cobro, etc; y como ya te han dicho todos, aunmentas el numero al finalizar tu documento siendo num_actual= num_actual +1, funciona super...SPERO TE AYUDE...

Numeraciçon facturas.

PostPosted: Sun Oct 28, 2007 9:48 am
by FiveWiDi
Tal como ya han comentado, yo también utilizo un DBF para las numeraciones (referencieas únicas, albaranes, facturas, etc).

Pero sobre el orden de ejecución de los pasos no estoy del todo de acuerdo.

Yo hago: cuando detecto el primer movimiento a facturar y éste se puede facturar, lo bloqueo, accedo a la DBF de numeraciones, bloqueo el registro de la DBF, obtengo el nuevo número de factura, grabo la DBF, la desbloqueo, facturo el movimiento y lo desbloqueo.
Para el siguiente movimiento si pertenece a la misma factura ya tengo su número y no tengo de volver a acceder y además la DBF ya está disponible para los demás usuarios.

Cuando quiera imprimirla no deberé hacer nada estra sino imprimir.
El tiempo que la DBF de numeraciones ha estado 'pillada' es bajísimo y si en el proceso de su bloqueo tienes un While que espera a que no esté 'pillada' por otro usuario, el usuario que quiere facturar ni se entera de que alguien más estaba facturando.

Para mi una cosa es facturar y otra imprimir facturas. Son procesos independientes y el de impresión naturalmente reutilizable en cualquier momento.

Saludos
Carlos G.

PostPosted: Sun Oct 28, 2007 7:46 pm
by joseluisysturiz
Fivewidi, reza un dicho..."entre gustos y colores no han escrito los pintores...", pero creo que una cosa es gusto y otra es logica, no quiero entrar en polemica sobre tu metodo, eso depende como se maneje los procesos de facturacion de algunos paises, fijate, tu bloqueas el numero, que pasaria si se va la luz o si no se finaliza la factura..?, ademas otro usuario podria terminar de facturar antes que el que bloqueastes, son solo analisis de situaciones, se dice que las mayorias no pueden estar equivocados, pero eso tambien es discutible, lo bueno es que Loren ya tiene alternativas para escojer la que mas le convenga y que sea mas seguro para su informacion, para eso estamos, pero el metodo propuesto por la mayoria, es muy viable y seguro, por no decir que es el correcto y unico.saludos.

PostPosted: Sun Oct 28, 2007 10:42 pm
by wilsongamboa
Lorenzo yo lo hago asi

Code: Select all  Expand view

Function NuewNum( Num )

    select factura //esta con indice activo de str(num_Fact,6)

    while .t.
        dbgobottom()
        num := factura->num_Fact + 1
        if !dbseek( str(Num,6 ) )
            exit
        end
    end
   
   dbappend()
   
   factura->num_Fact := num
   unlock
Return Num



esto lo hago cuando ya hayas terminado la factura en este caso el que gane el numero graba primero, bueno es solo mi humilde criterio

espero te ayude

Saludos