Tema: Cursor
Ver Mensaje Individual
  #4 (permalink)  
Antiguo 16/05/2012, 01:55
quimfv
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 2 meses
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