Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-01-2010
ronimaxh ronimaxh is offline
Miembro
 
Registrado: jun 2003
Ubicación: Rep. Dominicana
Posts: 307
Poder: 22
ronimaxh Va por buen camino
Question Saltos en secuencia de numero de factura....

Un saludos colegas del club, tengo una aplicacion hecha en delphi 2009 y firebird 2.1 con ibx.

Me esta pasando algo muy raro ultimamente, para generar mi numero de factura lo hago de la siguiente manera:
Código Delphi [-]
procedure Tfrmprincipal.genera_numero_fact;
begin
  with frmdata.st do
       begin
        DecodeDate(date,periodo,mes,dia);
         st_ctr:=false;
         if cod_tpo_ncf='0' then
            begin
              sql.Text:='select max(numero)as numero,max(periodo)as periodo from tb_cd_fact_t where periodo='+floattostr(periodo)+'and cod_tipo_ncf='+QuotedStr(cod_tpo_ncf);
              st_ctr:=true;
            end
         else
         sql.Text:='select max(numero)as numero,max(periodo)as periodo from tb_cd_fact_t where periodo='+floattostr(periodo)+'and cod_tipo_ncf >0 ';
         open;
         cont:=0;
         if not FieldByName('numero').IsNull then
            begin
              cont:=FieldByName('numero').Value;
              if periodo=FieldByName('periodo').Value then
                 begin
                   cont:=cont+1;
                   numero:=inttostr(cont);
                   numero:=StringOfChar('0',7-length (numero))+numero;
                   frmfactura.num_fact_edit.Text:=numero;
                 end
                 else
                 begin
                   numero:='1';
                   numero:=StringOfChar('0',7-length (numero))+numero;
                   frmfactura.num_fact_edit.Text:=numero;
                 end;
            end
            else
            begin
              numero:='1';
              numero:=StringOfChar('0',7-length (numero))+numero;
              frmfactura.num_fact_edit.Text:=numero;
            end;
       end;
end;

Nota: Derrepente me da saltos y me deja hueco en numero.
Realmente no se aque se deba, solo busco al maximo en la consulta,
no se si seran los componentes ibx esto esta muy raro. Cuando hago ciertas prueba generando numero de factura no ocurre y en produccion si.

Nota2: se que lo generadores me dejan muchos huecos y tambien he notado que cuando esto pasa produce esos saltos no se como controlarlos, alguna ayuda les agradesco.
__________________
ronimaxh
Rep. Dominicana

Última edición por ronimaxh fecha: 15-01-2010 a las 03:07:31.
Responder Con Cita
  #2  
Antiguo 15-01-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.106
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿El programa permite eliminar una factura?, ¿puede que sea el problema?
Responder Con Cita
  #3  
Antiguo 15-01-2010
Avatar de Cañones
Cañones Cañones is offline
Miembro
 
Registrado: ene 2007
Ubicación: La Paz Entre Ríos
Posts: 354
Poder: 18
Cañones Va por buen camino
Hola.
No soy muy bueno leyendo código ajeno, pero creo que buscas el número máximo y le sumas uno.
Yo utilizo una tabla en la DD.BB con nombre (nombre del comprobante) y valor, que es el último valor.
Cuando se confirma la venta, genero el número de comprobante. Accediendo al valor por medio de un dataset y asignado el nuevo valor. Es útil para el caso de concurrencias.
Con éste método es muy poco probable que haya huecos en los números de comprobantes.

Si querés te mando un mail con un apunte que lo explica muy bién. Es de un profesor de mi facultad.

Saludos a todos.
Responder Con Cita
  #4  
Antiguo 15-01-2010
ronimaxh ronimaxh is offline
Miembro
 
Registrado: jun 2003
Ubicación: Rep. Dominicana
Posts: 307
Poder: 22
ronimaxh Va por buen camino
Gracias por contestar, la facturas no se eliminan solo se anulan.
Cañones favor de enviar el correo que ayuda reforzar.

Cualquier colega que pueda ayudar agradezco.
__________________
ronimaxh
Rep. Dominicana
Responder Con Cita
  #5  
Antiguo 15-01-2010
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.918
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
El primer problema que tienes es que generas el codigo en el cliente y no en la BD.

Deberias usar un generador. Definitivamente.

La razon del porque pueden haber "huecos" si hay acceso multiusuario es que varios clientes pueden solicitar una nueva numeracion al tiempo.

Dos clientes solicitan el siguiente maximo y a ambos se les da la misma respuesta. Luego, el usuario se cansa, anula, abandona o cancela.

Para hacer de un cuento largo uno corto, estos códigos deben ser generados en el instante preciso del INSERT. No se deben generar antes que le de al usuario tiempo de llenar datos y luego cancelar la acción. Eso da huecos.

El uso de la tabla no necesariamente te resuelve el asunto. Es el *momento* elegido para hacer el avance del consecutivo y si *bloqueas* la generación del consecutivo teniendo presente las implicaciones del acceso recurrente.

En términos de programación OO lo que estas buscando es un Singleton (http://es.wikipedia.org/wiki/Singleton), un único punto de acceso y alteración de datos. Seria algo asi, traducido de OO a como es un manejo de datos:

*TODO DENTRO DE LA BD, EN UNA TRANSACCION*
Código:
BLOQUEAR FILA/TABLA/GENERADOR DE NUMERACION

OBTENER SIGUIENTE

AUMENTAR

DESBLOQUEAR

RETORNAR
__________________
El malabarista.

Última edición por mamcx fecha: 15-01-2010 a las 03:20:41.
Responder Con Cita
  #6  
Antiguo 15-01-2010
ronimaxh ronimaxh is offline
Miembro
 
Registrado: jun 2003
Ubicación: Rep. Dominicana
Posts: 307
Poder: 22
ronimaxh Va por buen camino
Gracias amigo por responder, ese codigo que puse es llamado en el instante del inicio del insert frmprincipal.genera_numero_fact(esta es una rutina).

Tambien los generadores dejan huecos.
__________________
ronimaxh
Rep. Dominicana
Responder Con Cita
  #7  
Antiguo 15-01-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.106
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por ronimaxh Ver Mensaje
la facturas no se eliminan solo se anulan.
¿Y en qué consiste esa anulación?
Responder Con Cita
  #8  
Antiguo 15-01-2010
ronimaxh ronimaxh is offline
Miembro
 
Registrado: jun 2003
Ubicación: Rep. Dominicana
Posts: 307
Poder: 22
ronimaxh Va por buen camino
las facturas cuando se anulan solo cambia a status I (inactiva).
__________________
ronimaxh
Rep. Dominicana
Responder Con Cita
  #9  
Antiguo 15-01-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.339
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
¿Cuantos usuarios trabajan de forma concurrente?
¿En qué momento insertas la factura?
¿Utilizas transacciones?
¿La insertas utilizando SQL o componentes DataAware?
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
fecha y numero de factura lis983 Varios 3 13-07-2008 01:31:23
numero de factura josi Varios 7 06-06-2008 15:55:59
Problema Con campo Numero factura josejose Varios 1 01-02-2007 15:44:46
Fallo Nº Factura y Linea Factura CarmaZone Tablas planas 5 26-05-2005 11:17:19
saltos en tabulador. kwan Varios 3 09-01-2004 02:25:17


La franja horaria es GMT +2. Ahora son las 07:04:32.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi