FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Convertir Albaranes a Factura
Hola a todos, vereis tengo en mente una cosa y nose si será la forma más conveniente.
Uso Delphi 6 y paradox. Me explico, tengo programado para crearme albaranes y factura e intento seleccionar 1 o varios albaranes y convertirlo en 1 factura. Tengo realizada 1 consulta por cliente y entre un rango de fechas...vamos que me muestra los albaranes que elijo... El problema que le veo es al guardar ya que tendría que guardar todas las lineas de todos los albaranes seleccionados por lo que he pensado recorrer el/los albaranes y a su vez ir recorriendo las líneas del albaran actual (con un par de while) e ir guardando los datos. Espero haberme explicado ya que no se si esta sería la manera correcta de hacerlo. ¿Qué opinaís? Gracias & Salu2!!! |
#2
|
||||
|
||||
Opino que.... ¿cual es la duda?
Lo que no explicas es como haces la conversion de un albaran a una factura. En principio serán 2 tablas más, Cabecera_Factura y Detalle_Factura. En la primera guardas, el cliente, la fecha, el % de iva, etc; en la segunda guardas el ID_factura, ID_Albaran, concepto y posiblemente la base imponible de ese albaran. Si tu consulta de clientes, está ordenado además por idCliente y Porcentaje_de_iva, simplemente será un par de bucles (como bien has dicho) insertando en la tabla factura, y detalle_factura. Nota: El albaran deberá tener un campo llamado Factura nº: de tal forma que si ese campo es distinto de nulo, no deje editarlo. Un saludo
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#3
|
|||
|
|||
Creo que no me expliqué muy bien xDD. Ya está programado la creación de 1 albarán y 1 factura, con sus tablas factura y línea factura... típico xD
La duda era si es razonable usar un bucle para recorrer los albaranes y a su vez cada una de las líneas de ese albarán e ir guardando con 2 whiles. Por ahora he hecho esto: Código:
DataModule_Fact_Albar.Query_Alb.First; DataModule_Fact_Albar.Query_Alb.DisableControls; while not(DataModule_Fact_Albar.Query_Alb.Eof) do begin DataModule_Fact_Albar.Query_Lin_Alb.First; DataModule_Fact_Albar.Query_Lin_Alb.DisableControls; while not(DataModule_Fact_Albar.Query_Lin_Alb.Eof) do begin with DataModule_Fact_Albar do begin Query_Lin_Fact.Edit; Query_Lin_FactCANTIDAD.Value:=Query_Lin_AlbCANTIDAD.Value; Query_Lin_FactCONCEPTO.Value:=Query_Lin_AlbCONCEPTO.Value; Query_Lin_FactPRECIOUNIDAD.Value:=Query_Lin_AlbPRECIOUNIDAD.Value; Query_Lin_FactTOTAL.Value:=Query_Lin_AlbTOTAL.Value; Query_Lin_Fact.Post; Query_Lin_Alb.Next; end; end; DataModule_Fact_Albar.Query_Lin_Alb.EnableControls; DataModule_Fact_Albar.Query_Alb.Next; end; DataModule_Fact_Albar.Query_Alb.EnableControls; Salu2!!! Última edición por CarmaZone fecha: 27-06-2005 a las 18:38:20. |
#4
|
||||
|
||||
Te equivocas, lo añade todo, el problema es que estas haciendo un Query_Lin_Fact.Edit, por tanto, todos los albaranes se machacan en la misma linea de la factura. ¿No Debería ser Query_Lin_Fact.Append? Por otra parte.... yo usaría tbl_Lin_Fact, la tabla, en lugar de un Query. Supongo que es un extracto del código, ya que no se crean nuevos registros en la tabla Facturas, y siendo una relación Maestro-Detalle, debe crearse la Factura antes que las lineas de factura. En cuanto a la pregunta original, se podría hacer con consultas de inserción.... pero tal cual está, es más simple. Un saludo
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#5
|
|||
|
|||
Es verda tio, que se está machacando xDDDDDDDD, he cambiado "edit" por append y ahora lo hace pero da un problema.
Si convierto de 1 albarán a 1 factura lo hace perfecto, mete bien el cuerpo, sin embargo si la conversión es de 2 albaranes a 1 factura, me mete las líneas dobles , me mete 2 veces el cuerpo del 1º albarán y el cuerpo del 2º albarán no lo mete. Tiene haber algo mal en esa parte del codigo que me hace una pasada la 1º pasada 2 veces y ya no hace más. Gracias Y Salu2!!! Última edición por CarmaZone fecha: 27-06-2005 a las 20:57:15. |
#6
|
||||
|
||||
Si query_Lin_Alb tiene los albaranes a meter en cada linea de factura. ¿Qué tiene query_Alb?
Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#7
|
|||
|
|||
Albaran: nº albaran,fecha,cliente,base imponible..
Linea Albaran: cantidad, concepto,precio/unidad, total Factura: nº factura,fecha,cliente, cif,base imponible, iva... Linea Factura: cantidad, concepto,precio/unidad, total Yo meto en query_fact desde query_alb el nombre del cliente y su CIF y en query_lin_fact voy metiendo las lineas de query_lin_alb. Mi conversión me crea bien la cabecera de la factura, (nº factura, fecha, cliente...) lo que falla es la copia del cuerpo de varios albaranes al cuerpo de 1 sola factura Salu2!!! Última edición por CarmaZone fecha: 27-06-2005 a las 21:11:32. |
#8
|
||||
|
||||
Parte de culpa de todo esto lo tienen los nombres, mira este codigo, es identico al tuyo, pero cambiando los nombres de query_lin_alb y query_alb, ya que no se corresponde con los datos que representa, y lo único que hace es "molestar". Es importante dar nombres descriptivos
Yo al menos lo veo más claro, para cada cliente, se mira los albaranes que tiene que facturar, y para cada uno de ellos se crea la linea de factura. Tu problema reside en la relación que has definido entre qry_Clientes y qry_Alb_A_Facturar. Esa relación seguro que no está bien. Si quieres ver mejor el fallo, da de alta 4 clientes, 3 albaranes por cada cliente y manda a facturar Un saludo
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#9
|
|||
|
|||
Revisare tu codigo, pero he de decir que no tengo relacionado cliente con factura ni albaranes, cada albaran o factura guarda su propio campo nombre_cliente... por lo tanto de ahi no viene el problema, mi relacion es albaran con linea_albaran y lo mismo para factura. De ahi los nombres:
Query_Alb y Query_Lin_Alb--> quey albaran y query linea albaran y lo mismo para facturas, creo que los nombre son descriptivos xDDDD Voy a seguir probando. Gracias y Salu2!!! Edito: Tu trozo de codigo es una relación cliente-albarán que en mi caso equivale a albaran-línea_albaran. Lo he peusto como en tu ejemplo: Código:
with DataModule_Fact_Albar do begin Query_Alb.First; Query_Alb.DisableControls; while not(Query_Alb.Eof) do begin Query_Lin_Alb.First; Query_Lin_Alb.DisableControls; while not(Query_Lin_Alb.Eof) do begin Query_Lin_Fact.Append; Query_Lin_FactCANTIDAD.Value:=Query_Lin_AlbCANTIDAD.Value; Query_Lin_FactCONCEPTO.Value:=Query_Lin_AlbCONCEPTO.Value; Query_Lin_FactPRECIOUNIDAD.Value:=Query_Lin_AlbPRECIOUNIDAD.Value; Query_Lin_FactTOTAL.Value:=Query_Lin_AlbTOTAL.Value; Query_Lin_Fact.Post; Query_Lin_Alb.Next; end; Query_Lin_Alb.EnableControls; Query_Alb.Next; end; Query_Alb.EnableControls; end; Última edición por CarmaZone fecha: 27-06-2005 a las 22:03:42. |
#10
|
||||
|
||||
Cita:
Permiteme que insista en lo mismo, la relación query_Alb <-> query_Lin_Alb no funciona correctamente. Digo esto, porque ese código está perfecto, la única posibilidad de que repita lineas de factura, es que al avanzar query_Alb, la query_Lin_Alb no se actualice. Añade un memo, y saca el query_AlbNalbaran.AsString en curso y query_Lin_AlbCAMPOLLAVE.AsString. Si esa relación está bien, postea todo el código de crear la factura (cabecera y lineas de facturas) Un saludo
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#11
|
|||
|
|||
Perdón si no me expliqué bien desde el principio, en efecto es una relación maestro-detalle entre albaran y el cuerpo del albarán. Tal como dices estará la relación mal construida porque he colocado unos showmessages y al pasarme al siguiente albarán, no me actualiza el cuerpo, por esa razón me guarda el cuerpo del 1º albarán 2 veces
La relación la tengo echa de esta manera: Albarán --> clave (nº albarán) Línea Albarán --> clave (código), clave foránea (nº albarán) Query_albaran --> SELECT * FROM ALBARAN QUERY_Linea_Albaran: - DataSource --> DataSource_Albaran - SQL --> SELECT * FROM LINEA_ALBARAN WHERE LINEA_ALBARAN.NUM_ALB = :NUM_ALB - En la propiedad PARAMS me aparece automáticamente el campo (nº albaran) por el cual se relacionan. Creía que de esa manera estaba bien construida la relación porque el funcionamiento de crear un albarán y su cuerpo y relacionarse me funcionaba bien, pero al pasar ésto nose lo que estará mal Alguna idea?si debo aportar más datos solo tienes que pedirlo. Gracias por todo y Salu2!!! |
#12
|
|||
|
|||
Pues creo que ya me lo guarda todo bieeeeeeeeeeeeeeen el problema estaba en los enable y disablecontrols , me he dado cuenta porque he construido el codigo de nuevo y lo he ido probando y sin los enable y disablecontrols va y me funciona y he comporbado que tengo que poner EnableControls antes de hacer el Next
Nose si me explico pero bueno xDDDDD, el codigo queda tal que así: Código:
Query_Alb.First; while not(Query_Alb.Eof) do begin Query_Alb.DisableControls; Query_Lin_Alb.First; while not(Query_Lin_Alb.Eof) do begin Query_Lin_Alb.DisableControls; Query_Lin_Fact.Append; Query_Lin_FactCANTIDAD.Value:=Query_Lin_AlbCANTIDAD.Value; Query_Lin_FactCONCEPTO.Value:=Query_Lin_AlbCONCEPTO.Value; Query_Lin_FactPRECIOUNIDAD.Value:=Query_Lin_AlbPRECIOUNIDAD.Value; Query_Lin_FactTOTAL.Value:=Query_Lin_AlbTOTAL.Value; Query_Lin_Fact.Post; Query_Lin_Alb.EnableControls; Query_Lin_Alb.Next; end; Query_Alb.EnableControls; Query_Alb.Next; end; Salu2!!! |
|
|
|