Ver Mensaje Individual
  #4  
Antiguo 14-10-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Reputación: 29
Lepe Va por buen camino
En primer lugar y con ánimo de que cambies los nombres, yo usaría nombres de tablas más intuitivos, por ejemplo:

tabla: Factura (encabezados y demás)
tabla: Lineas (los apuntes de cada venta)

Siguiendo esta nomenclatura, lo que tienes que hacer es:

Tabla Factura:
Campo Nro_Factura (el autoincremento)
En el OnNewRecord, no tienes que hacer nada. Como es un autoincremento se hace solo .

Tabla Lineas:
Tienes que añadir un campo (Foreign Key) numérico, donde guardarás el nro_Factura, lo llamo Fnro_Factura, (la F de Foreing Key, clave ajena o clave foránea, como quieras llamarlo..

Tienes que asegurarte que al dar de alta un registro en Lineas, ya haya uno definido de Factura. Como vamos a realizar un Maestro-Detalle, siempre ha de existir el registro de Facturas antes que el de Lineas.

Para relacionar en delphi estas dos tablas, vas al objeto tblLineas (tabla Lineas), y en MasterSource, eliges el tblFacturas (obviamente la tabla Facturas, o su DataSource correspondiente).

Espera que estoy abriendo el delphi . En tblLineas.MasterField haz clic en los 3 puntos, ahí se donde relacionas las dos tablas.

En la ventana que se abre, en MasterField, aparecen los campos de la tabla Factura, haz clic sobre nro_Factura.

En Detaild Field, elige Fnro_Factura (campo nuevo creado) y pulsa el boton Add.

Listo. Ya tienes las dos tablas relacionadas, cuando cambies de registro en la tabla Facturas, el grid que está relacionado con tblLineas, solo mostrará los apuntes de ventas de esa Factura.


Lo que hablaba de asegurarte de que exista un registro de Factura antes que las lineas, es muy facil. Por ejemplo:

En el BeforeInsert de la tabla lineas:
Código Delphi [-]
if tblFacturas.Fieldbyname(nro_factura).IsNull then
 tblfacturas.Append;
 tblfacturas.Post;
Si en una factura en blanco (por ejemplo la primera factura que se va a crear en el programa) el usuario, que es muy listo, y está esperando que falle tu programa para echarte la bulla, el tio listo se va directamente al grid de Lineas e intenta añadir un artículo, como todavía el nº de factura no se ha creado, el nro_factura es nulo, así que añade una nueva factura y se graba, desde este punto, ya existe el nro_factura para guardarlo en la tabla Lineas.

Advertencia: Primero se debe guardar la tabla Facturas (el Maestro) y despues las Lineas (el detalle) y siempre en ese orden.

En el BeforePost de Lineas añades:
Código Delphi [-]
  tblLineas.Fieldbyname('Fnro_factura').AsInteger := 
                     tblFacturas.Fieldbyname('nro_Factura').AsInteger;

Cierro el delphi . Chaus
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita