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
|
||||
|
||||
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. |
#8
|
|||
|
|||
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!!! |
#9
|
|||
|
|||
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!!! |
|
|
|