Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Cursor

Estas en el tema de Cursor en el foro de Mysql en Foros del Web. Buenas, quiero encontrar donde se pierde al secuencia del correlativo de las facturas, si alguien me puede ayudar o si hay alguna otra forma que ...
  #1 (permalink)  
Antiguo 14/05/2012, 10:25
 
Fecha de Ingreso: noviembre-2007
Mensajes: 37
Antigüedad: 16 años, 5 meses
Puntos: 0
Cursor

Buenas, quiero encontrar donde se pierde al secuencia del correlativo de las facturas, si alguien me puede ayudar o si hay alguna otra forma que se pueda hacer?



serie │ No. │ mensaje
HUB │ 1 │
HUB │ 2 │
HUB │ 3 │ salto de correlativo
HUB │ 5 │
HUB │ 6 │
HUB │ 7 │
FAL │ 1 │
FAL │ 3 │ salto de correlativo
FAL │ 4 │
FAL │ 5 │ salto de correlativo
FAL │ 7 │
PET │ 1 │
PET │ 2 │
PET │ 3 │ salto de correlativo
PET │ 5 │
PET │ 6 │
  #2 (permalink)  
Antiguo 15/05/2012, 01:48
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Cursor

Estas haciendo un correlativo por series, con lo que nos dices es imposible saber donde te falla puesto que no nos muestras como lo has construido...

Un principio basico para un buen sistema de facturación es que una factura emitida no se puede borrar se puede bonificar (factura negativa) pero nunca borrarla....

Imagina que emites las facturas 4 y 5 de la serie que sea.... luego no puedes borrar la 4 y renumerar la 5....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 15/05/2012, 09:10
 
Fecha de Ingreso: noviembre-2007
Mensajes: 37
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Cursor

Si te entiendo las factura no se pueden borrar y asi esta el programa no se puede eliminar, el problema que tenemos es con las personas que facturan en la calle y pierden una factura o las rompen y no las reportan, y la verdad son casi 10 mil facturas diarias y necesito q al generar un reporte q me de un mensaje donde se rompe el correlativo. Para programar estoy usando Eclipse, tomcat, richfaces y mysql.
  #4 (permalink)  
Antiguo 16/05/2012, 01:55
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Cursor

Ok, ahora entiendo lo que necesitas.... (los posibles problemas con Hacienda que te genere esto los solucionas por otro lado).

Se trata de encontrar lo que NO esta en la tabla, yo lo solucionaria con programación externa a partir de la información que te dará la query que te adjunto


Código MySQL:
Ver original
  1. SELECT Facturas.Serie,
  2.              Min(Facturas.No) AS MinNumero,
  3.              Max(Facturas.No) AS MaxNumero,
  4.              Count(*) AS NumFacturas,
  5.              (Max(Facturas.No)-Min(Facturas.No)+1)-Count(*) AS Saltos
  6. FROM Facturas
  7. GROUP BY Facturas.Serie;

Nos da la factura mínima y máxima de cada serie el numero de facturas que hay en la tabla y por diferencia el numero de saltos...

En pseudo codigo

Código pre:
Ver original
  1. //Consigo la lista de series
  2. Serie="Select Serie FROM facturas GROUP BY serie"
  3.  
  4. Para cada Serie {
  5.  
  6. //Consigo el resumende facturas de la serie
  7. NumSaltos=SELECT Facturas.Serie,
  8.              Min(Facturas.No) AS MinNumero,
  9.              Max(Facturas.No) AS MaxNumero,
  10.              Count(*) AS NumFacturas,
  11.              (Max(Facturas.No)-Min(Facturas.No)+1)-Count(*) AS Saltos
  12. FROM Facturas
  13. WHERE Facturas.Serie=Y
  14. GROUP BY Facturas.Serie;
  15.  
  16. Encontrado=Falso
  17.  
  18. //Si hay saltos en la serie
  19. Si Saltos>0 {
  20.  
  21. //Consigo todas las facturas de la serie
  22. Factura="SELECT No FROM facturas WHERE serie='Y'"
  23.  
  24. //Para cada numero entre 1 y Max comparo con las Facturas de la serie
  25.    Para X=1; X<=MaxNumero; X++{
  26.           Para cada Factura {
  27.                 Si Factura.No==X {
  28.                       Encontrado=Verdadero
  29.                  }
  30.           }
  31.  
  32.        //Si no esta lo reporto
  33.        Si Encontrado==Falso{
  34.               "Falta la " + X //Aqui se podria hacer el INSERT
  35.        }
  36.   }
  37. }
  38. }

Seguro que se puede optimizar, el numero de consultas, de bucles.... o como no repasar siempre todas las facturas usando como minimo el numero maximo del ultimo dia que se ha pasado el proceso...

Posible INSERT a ejecutar

INSERT INTO facturas (serie,no,comentario) VALUES (Y,X,"Perdida");

con lo que se completarian las series.....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 16/05/2012 a las 02:14

Etiquetas: cursor
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:48.