Ver Mensaje Individual
  #13  
Antiguo 21-04-2008
teclilla teclilla is offline
Miembro
 
Registrado: feb 2008
Posts: 41
Reputación: 0
teclilla Va por buen camino
OK,
Al crear el formulario:
Código Delphi [-]
procedure TFormAlbaran.FormCreate(Sender: TObject);
begin
        //abrimos tablas
        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;       //(Readonly:=false)
        Label13.Caption:='Añadiendo un nuevo albarán.';
        DesactivarBotones;  //Solo visibles Botones Confirmar y cancelar
        Talbaranes.Last;
        id_ant:=Talbaranes.FieldByName('Idalb').AsInteger;
        Talbaranes.Append; //modo insert
        //introducimos idalb calculado y fecha actual
        Talbaranes.FieldByName('Idalb').AsInteger:=id_ant+1; //siguiente alb
        Talbaranes.FieldByName('Fecha').AsDateTime:=Date; //fecha hoy
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;     //(Readonly:=true)
     ActivarBotones;   // Visibles los demas botones 
     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
        //guardamos presupuesto
        Talbaranes.ApplyUpdates;
        Talbaranes.Post;
        TalbprodDetalle.ApplyUpdates;
        TalbprodDetalle.Post;
        end;
end;
 
//este procedimiento lleva el stock de los productos que se añaden al
//albaran y salen de fabrica.
procedure TFormAlbaran.ControlStock;
begin
        //para los detalles del alb correspondiente
        TalbprodDetalle.First;
        while not TalbprodDetalle.Eof do
        begin
        TProductos.Locate('Codigo',TalbprodDetalleCodprod.asString,[]);
        TProductos.Edit;//editamos
        //modificamos
        TProductos.FieldByName('Stock').asInteger:=TProductos.FieldByName('Stock').asInteger - TalbprodDetalleCantidad.AsInteger;
        TProductos.Post;//grabamos
        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.
Responder Con Cita