OK,
Al crear el formulario:
Código Delphi
[-]procedure TFormAlbaran.FormCreate(Sender: TObject);
begin
Talbaranes.Open;
Talbaranes.First;
TCliente.Open;
TProductos.Open;
TalbprodDetalle.Open;
end;
Despues tengo en el formulario un botón para añardir un nuevo albaran:
Código Delphi
[-]procedure TFormAlbaran.SpeedButtonAnadirClick(Sender: TObject);
var
id_ant: longint;
begin
DBEditsEscritura; Label13.Caption:='Añadiendo un nuevo albarán.';
DesactivarBotones; Talbaranes.Last;
id_ant:=Talbaranes.FieldByName('Idalb').AsInteger;
Talbaranes.Append; Talbaranes.FieldByName('Idalb').AsInteger:=id_ant+1; Talbaranes.FieldByName('Fecha').AsDateTime:=Date; end;
Despues introducimos los demas DbEdits que queramos del albaran y despues le damos al boton de confirmar para grabar:
Código Delphi
[-]procedure TFormAlbaran.SpeedButtonConfirmarClick(Sender: TObject);
begin
GrabarAlbaran;
ControlStock;
DBEditsLectura; ActivarBotones; Label13.Caption:='';
end;
Código Delphi
[-]procedure TFormAlbaran.GrabarAlbaran;
begin
if ((DBEditIdalb.Field.IsNull) or (DBEditFechaAlb.Field.IsNull) or (DBEditNifCli.Field.IsNull))then
if Application.MessageBox('Faltan datos obligatorios del Albarán','Añadiendo Albarán',mb_iconExclamation+mb_ok)= id_ok then
begin
SpeedButtonCancelarClick(Self);
Abort;
end
else
begin
Talbaranes.ApplyUpdates;
Talbaranes.Post;
TalbprodDetalle.ApplyUpdates;
TalbprodDetalle.Post;
end;
end;
procedure TFormAlbaran.ControlStock;
begin
TalbprodDetalle.First;
while not TalbprodDetalle.Eof do
begin
TProductos.Locate('Codigo',TalbprodDetalleCodprod.asString,[]);
TProductos.Edit; TProductos.FieldByName('Stock').asInteger:=TProductos.FieldByName('Stock').asInteger - TalbprodDetalleCantidad.AsInteger;
TProductos.Post; TalbprodDetalle.next;
end;
end;
Al ejecutar el programa, si doy de alta un albaran, y sin cambiar de registro cierro, no se guarda en la tabla maestra y si en la tabla detalle, pero si cambio de registro antes de salir se graba en las dos
MUCHAS GRACIAS.