﻿unit ARTICULOS;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB, Vcl.Mask, Vcl.DBCtrls,
  FireDAC.Stan.Intf, FireDAC.Stan.Option, FireDAC.Stan.Param, FireDAC.Stan.Error, FireDAC.DatS, FireDAC.Phys.Intf, FireDAC.DApt.Intf, FireDAC.Stan.Async, FireDAC.DApt, FireDAC.Comp.DataSet, FireDAC.Comp.Client, FireDAC.Phys.MSAcc, FireDAC.Phys.MSAccDef, FireDAC.Stan.Def, FireDAC.Stan.Pool, FireDAC.VCLUI.Wait, Vcl.StdCtrls, Vcl.Grids, Vcl.DBGrids, Vcl.ExtCtrls,
  Vcl.ComCtrls;

type
  TForm1 = class(TForm)
    ARTICULOS: TFDTable;
    qarticulos: TFDQuery;
    ARTICULOSReferencia: TWideStringField;
    ARTICULOSDescripcion: TWideStringField;
    ARTICULOSFamilia: TIntegerField;
    ARTICULOSTipoImpuesto: TIntegerField;
    ARTICULOSProveedor1: TIntegerField;
    ARTICULOSProveedor2: TIntegerField;
    ARTICULOSProveedor3: TIntegerField;
    ARTICULOSDescripcionCorta: TWideStringField;
    ARTICULOSNoActualizarStock: TBooleanField;
    ARTICULOSUbicacion: TWideStringField;
    ARTICULOSStock: TFloatField;
    ARTICULOSStockMinimo: TFloatField;
    ARTICULOSStockInicial: TFloatField;
    ARTICULOSStockMaximo: TFloatField;
    ARTICULOSStockOptimo: TFloatField;
    ARTICULOSMinimoVender: TFloatField;
    ARTICULOSMinimoComprar: TFloatField;
    ARTICULOSReferenciaProveedor: TWideStringField;
    ARTICULOSNoAvisarStock: TBooleanField;
    ARTICULOSPVP1: TFloatField;
    ARTICULOSPVP2: TFloatField;
    ARTICULOSPVP3: TFloatField;
    ARTICULOSPVP4: TFloatField;
    ARTICULOSPVP5: TFloatField;
    ARTICULOSPVP6: TFloatField;
    ARTICULOSPVP7: TFloatField;
    ARTICULOSPVP8: TFloatField;
    ARTICULOSPVP9: TFloatField;
    ARTICULOSObservaciones: TWideMemoField;
    ARTICULOSArchivoImagen: TWideStringField;
    ARTICULOSOferta: TIntegerField;
    ARTICULOSMedida: TFloatField;
    ARTICULOSUnidadMedida: TWideStringField;
    ARTICULOSPeso: TFloatField;
    ARTICULOSTablaDescuento: TIntegerField;
    ARTICULOSFechaAlta: TDateTimeField;
    ARTICULOSFechaCaducidad: TDateTimeField;
    ARTICULOSDiasGarantia: TIntegerField;
    ARTICULOSUnidadesBulto: TIntegerField;
    ARTICULOSPrecioMedioCompra: TFloatField;
    ARTICULOSUltimoPrecioCompra: TFloatField;
    ARTICULOSBeneficioPVP1: TFloatField;
    ARTICULOSBeneficioPVP2: TFloatField;
    ARTICULOSBeneficioPVP3: TFloatField;
    ARTICULOSBeneficioPVP4: TFloatField;
    ARTICULOSBeneficioPVP5: TFloatField;
    ARTICULOSBeneficioPVP6: TFloatField;
    ARTICULOSBeneficioPVP7: TFloatField;
    ARTICULOSBeneficioPVP8: TFloatField;
    ARTICULOSBeneficioPVP9: TFloatField;
    ARTICULOSCompuesto: TBooleanField;
    ARTICULOSPreguntarPrecio: TBooleanField;
    ARTICULOSModificarDescripcion: TBooleanField;
    ARTICULOSArticuloBascula: TBooleanField;
    ARTICULOSWeb: TWideStringField;
    ARTICULOSMinimoVenderTPV: TFloatField;
    ARTICULOSDescripcionCentrada: TBooleanField;
    ARTICULOSSubrayado: TBooleanField;
    ARTICULOSCursiva: TBooleanField;
    ARTICULOSNegrita: TBooleanField;
    ARTICULOSTamaño: TSmallintField;
    ARTICULOSFuente: TWideStringField;
    ARTICULOSColorTexto: TIntegerField;
    ARTICULOSColorFondo: TIntegerField;
    ARTICULOSReferenciaProveedor2: TWideStringField;
    ARTICULOSReferenciaProveedor3: TWideStringField;
    ARTICULOSPrecioCompraProveedor1: TFloatField;
    ARTICULOSPrecioCompraProveedor2: TFloatField;
    ARTICULOSPrecioCompraProveedor3: TFloatField;
    ARTICULOSCompraRE: TBooleanField;
    ARTICULOSCliente: TWideStringField;
    ARTICULOSPrecioTalla: TBooleanField;
    ARTICULOSImprimirFicha: TBooleanField;
    ARTICULOSMargenVenta: TFloatField;
    ARTICULOSTipoMargenVenta: TWideStringField;
    ARTICULOSOrden: TIntegerField;
    ARTICULOSTrazabilidad: TBooleanField;
    DSARTICULOS: TDataSource;
    Panel1: TPanel;
    Panel2: TPanel;
    DBGrid1: TDBGrid;
    Panel3: TPanel;
    Panel4: TPanel;
    Label2: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    DBEdit2: TDBEdit;
    DBEdit4: TDBEdit;
    DBEdit5: TDBEdit;
    DBEdit7: TDBEdit;
    DBEdit8: TDBEdit;
    BTGuardar: TButton;
    BTCancelar: TButton;
    dsqarticulos: TDataSource;
    Panel5: TPanel;
    Label1: TLabel;
    ebuscar: TEdit;
    Label10: TLabel;
    qarticulosreferencia: TWideStringField;
    qarticulosdescripcion: TWideStringField;
    qarticulosTipoImpuesto: TIntegerField;
    dsimpuestos: TDataSource;
    Label7: TLabel;
    Label13: TLabel;
    DBLookupComboBox1: TDBLookupComboBox;
    DBLookupComboBox2: TDBLookupComboBox;
    qproveedores: TFDQuery;
    qproveedoresCodigo: TIntegerField;
    qproveedoresRazonSocial: TWideStringField;
    qproveedoresTipoProveedor: TWideStringField;
    qproveedoresTitular: TWideStringField;
    qproveedoresDomicilio: TWideStringField;
    qproveedoresCodigoPostal: TIntegerField;
    qproveedoresPoblacion: TWideStringField;
    qproveedoresProvincia: TWideStringField;
    qproveedoresPais: TWideStringField;
    qproveedoresTelefono1: TWideStringField;
    qproveedoresTelefono2: TWideStringField;
    qproveedoresFax: TWideStringField;
    qproveedoresEMail: TWideStringField;
    qproveedoresNIF: TWideStringField;
    qproveedoresWeb: TWideStringField;
    qproveedoresCodigoCliente: TWideStringField;
    qproveedoresPersonaContacto: TWideStringField;
    qproveedoresTelefonoContacto: TWideStringField;
    qproveedoresArchivoImagen: TWideStringField;
    qproveedoresObservaciones: TWideMemoField;
    qproveedoresTablaDescuento: TIntegerField;
    qproveedoresDescuentoPP: TFloatField;
    qproveedoresImpuestos: TWideStringField;
    qproveedoresFormadePago: TIntegerField;
    qproveedoresDiaPago1: TSmallintField;
    qproveedoresDiaPago2: TSmallintField;
    qproveedoresBanco: TWideStringField;
    qproveedoresDomicilioBanco: TWideStringField;
    qproveedoresCodigoPostalBanco: TIntegerField;
    qproveedoresPoblacionBanco: TWideStringField;
    qproveedoresProvinciaBanco: TWideStringField;
    qproveedoresPaisBanco: TWideStringField;
    qproveedoresEntidad: TWideStringField;
    qproveedoresSucursal: TWideStringField;
    qproveedoresDC: TWideStringField;
    qproveedoresCuenta: TWideStringField;
    qproveedoresPortes: TWideStringField;
    qproveedoresDomicilioEnvio: TWideStringField;
    qproveedoresCodigoPostalEnvio: TIntegerField;
    qproveedoresPoblacionEnvio: TWideStringField;
    qproveedoresProvinciaEnvio: TWideStringField;
    qproveedoresPaisEnvio: TWideStringField;
    qproveedoresAntiguedad: TDateTimeField;
    qproveedoresRiesgo: TFloatField;
    qproveedoresAviso: TWideStringField;
    qproveedoresCampoLibre1: TWideStringField;
    qproveedoresCampoLibre2: TWideStringField;
    qproveedoresCampoLibre3: TWideStringField;
    qproveedoresIBAN: TWideStringField;
    qproveedoresMargenVenta: TFloatField;
    dsqproveedores: TDataSource;
    qimpuestos: TFDQuery;
    qimpuestosCodigo: TIntegerField;
    qimpuestosNombre: TWideStringField;
    qimpuestosIVA: TFloatField;
    qimpuestosRecargo: TFloatField;
    qimpuestosObservaciones: TWideMemoField;
    pvp1iva: TEdit;
    pciva: TEdit;
    Label14: TLabel;
    bnpvp1: TEdit;
    Label15: TLabel;
    bnneto: TEdit;
    Label3: TLabel;
    spvp1iva: TEdit;
    spciva: TEdit;
    Label16: TLabel;
    sbeneficio: TEdit;
    Label17: TLabel;
    sbnneto: TEdit;
    Label18: TLabel;
    spvp1base: TEdit;
    spcbase: TEdit;
    Label19: TLabel;
    Label20: TLabel;
    Label21: TLabel;
    Button1: TButton;
    conexion: TFDConnection;
    dbDriverLink: TFDPhysMSAccessDriverLink;
    abrircarpeta: TOpenDialog;
    Button2: TButton;
    Label11: TLabel;
    Edit2: TEdit;
    Label12: TLabel;
    Edit1: TEdit;
    Label22: TLabel;
    spcbasesd: TEdit;
    Label23: TLabel;
    Button3: TButton;
    Label24: TLabel;
    Label25: TLabel;
    dfecha: TDateTimePicker;
    hfecha: TDateTimePicker;
    qcambiartickets: TFDQuery;
    Cfacturados: TCheckBox;
    cfacturar: TCheckBox;
    procedure DSARTICULOSDataChange(Sender: TObject; Field: TField);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure ebuscarChange(Sender: TObject);
    procedure spcbaseExit(Sender: TObject);
    procedure spcbaseClick(Sender: TObject);
    procedure spcivaExit(Sender: TObject);
    procedure spcivaClick(Sender: TObject);
    procedure ebuscarExit(Sender: TObject);
    procedure DBGrid1Exit(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure spvp1baseClick(Sender: TObject);
    procedure spvp1baseExit(Sender: TObject);
    procedure spvp1ivaExit(Sender: TObject);
    procedure spvp1ivaClick(Sender: TObject);
    procedure sbeneficioClick(Sender: TObject);
    procedure sbeneficioExit(Sender: TObject);
    procedure sbnnetoClick(Sender: TObject);
    procedure sbnnetoExit(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure DSARTICULOSStateChange(Sender: TObject);
    procedure spcbasesdExit(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var pvp1,pvp2,pvd:real;
begin
    pvp1:=strtofloat(spvp1base.Text);
    pvp2:=pvp1*(1+strtofloat(edit2.Text));
    pvd:=strtofloat(spcbase.text);
    if articulos.State in [dsedit] then
    begin
        articulospvp1.Value:=pvp1;
        articulospvp2.Value:=pvp2;
        articulospreciocompraproveedor1.Value:=pvd;
        articulos.Post;
    end;
    if articulos.State in [dsbrowse] then
    begin
        articulos.edit;
        articulospvp1.Value:=pvp1;
        articulospvp2.Value:=pvp2;
        articulospreciocompraproveedor1.Value:=pvd;
        articulos.Post;
    end;
    edit1.Text:='0';
    spcbasesd.Text:='';
    qarticulos.close;
    qarticulos.Open;
    ebuscar.SetFocus;
    ebuscar.SelectAll;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
    try
      begin
          if abrircarpeta.Execute() then
          begin
              conexion.Params.Clear;
              conexion.Params.Add('DriverID=MSAcc');
              conexion.Params.Add('Database=' + abrircarpeta.FileName);
              conexion.Connected:=true;
              qarticulos.Open;
              qimpuestos.open;
              qproveedores.Open;
              articulos.Open;
              ebuscar.SetFocus;
          end;
      end;
      except on E: Exception do
      begin
          showmessage('Error al abrir la base de datos: ' + E.Message);
      end
    end;
end;

procedure TForm1.Button3Click(Sender: TObject);
var anyo1,mes1,dia1,anyo2,mes2,dia2:word;
begin
//UPDATE [Cabecera Tickets de Venta] SET [Cabecera Tickets de Venta].Documento = '', [Cabecera Tickets de Venta].[Forma de Pago] = 'Pendiente'
//WHERE ((([Cabecera Tickets de Venta].Fecha)>=#1/1/2018#) AND (([Cabecera Tickets de Venta].Fecha)<=#12/31/2018#) AND (([Cabecera Tickets de Venta].[Forma de Pago])<>'Facturado'));
    decodedate(dfecha.Date,anyo1,mes1,dia1);
    decodedate(hfecha.date,anyo2,mes2,dia2);
    if cfacturar.Checked then
    begin
            qcambiartickets.SQL.Clear;
            qcambiartickets.SQL.Add('UPDATE [Cabecera Tickets de Venta] SET [Cabecera Tickets de Venta].Documento = '''', [Cabecera Tickets de Venta].[Forma de Pago] = ''Facturado''');
            qcambiartickets.SQL.Add(' WHERE ((([Cabecera Tickets de Venta].Fecha)>=#'+inttostr(mes1)+'/'+inttostr(dia1)+'/'+inttostr(anyo1)+'#)');
            qcambiartickets.SQL.Add(' AND (([Cabecera Tickets de Venta].Fecha)<=#'+inttostr(mes2)+'/'+inttostr(dia2)+'/'+inttostr(anyo2)+'#))');
            qcambiartickets.ExecSQL;

    end else
    begin
        if cfacturados.Checked then
        begin
            qcambiartickets.SQL.Clear;
            qcambiartickets.SQL.Add('UPDATE [Cabecera Tickets de Venta] SET [Cabecera Tickets de Venta].Documento = '''', [Cabecera Tickets de Venta].[Forma de Pago] = ''Pendiente''');
            qcambiartickets.SQL.Add(' WHERE ((([Cabecera Tickets de Venta].Fecha)>=#'+inttostr(mes1)+'/'+inttostr(dia1)+'/'+inttostr(anyo1)+'#)');
            qcambiartickets.SQL.Add(' AND (([Cabecera Tickets de Venta].Fecha)<=#'+inttostr(mes2)+'/'+inttostr(dia2)+'/'+inttostr(anyo2)+'#))');
            qcambiartickets.ExecSQL;
        end else
        begin
            qcambiartickets.SQL.Clear;
            qcambiartickets.SQL.Add('UPDATE [Cabecera Tickets de Venta] SET [Cabecera Tickets de Venta].Documento = '''', [Cabecera Tickets de Venta].[Forma de Pago] = ''Pendiente''');
            qcambiartickets.SQL.Add(' WHERE ((([Cabecera Tickets de Venta].Fecha)>=#'+inttostr(mes1)+'/'+inttostr(dia1)+'/'+inttostr(anyo1)+'#)');
            qcambiartickets.SQL.Add(' AND (([Cabecera Tickets de Venta].Fecha)<=#'+inttostr(mes2)+'/'+inttostr(dia2)+'/'+inttostr(anyo2)+'#)');
            qcambiartickets.SQL.Add(' AND (([Cabecera Tickets de Venta].[Forma de Pago])<>''Facturado''))');
            qcambiartickets.ExecSQL;

        end;
    end;
    cfacturar.Checked:=false;
    cfacturados.Checked:=false;
    showmessage('Proceso completado. Tickets modificados: ' + IntToStr(qcambiartickets.RowsAffected));
end;

procedure TForm1.DBGrid1Exit(Sender: TObject);
begin
    edit1.SetFocus;
end;

procedure TForm1.DSARTICULOSDataChange(Sender: TObject; Field: TField);
var tpciva,tpvp1,tbnpvp1,tbnneto:real;
begin
    tpciva:=articulospreciocompraproveedor1.AsFloat*(1+(qimpuestosiva.AsFloat/100));
    tpvp1:=articulospvp1.AsFloat*(1+(qimpuestosiva.AsFloat/100));
    tbnpvp1:=((tpvp1*100)/tpciva)-100;
    tbnneto:=articulospvp1.AsFloat-articulospreciocompraproveedor1.AsFloat;
    pciva.Text:=formatfloat('0.0000',tpciva);
    pvp1iva.Text:=formatfloat('0.0000',tpvp1);
    bnpvp1.Text:=formatfloat('0.0000',tbnpvp1);//((articulospvp1.AsFloat*(1+(qimpuestosiva.AsFloat/100))*100)/(articulospreciocompraproveedor1.AsFloat*(1+(qimpuestosiva.AsFloat/100))))-100);
    bnneto.text:=formatfloat('0.0000',tbnneto);
    spcbase.Text:=formatfloat('0.0000000',articulospreciocompraproveedor1.AsFloat);
    spvp1base.text:=formatfloat('0.0000000',articulospvp1.AsFloat);
    spciva.text:=formatfloat('0.0000',tpciva);
    spvp1iva.text:=formatfloat('0.0000',tpvp1);
    sbeneficio.text:=formatfloat('0.0000',tbnpvp1);
    sbnneto.text:=formatfloat('0.0000',tbnneto);

end;

procedure TForm1.DSARTICULOSStateChange(Sender: TObject);
begin
    if dsarticulos.State in [dsedit,dsinsert] then
    begin
       btguardar.Enabled:=true;
       btcancelar.Enabled:=true;
       //btnuevo.Enabled:=false;
    end else
    begin
       btguardar.Enabled:=false;
       btcancelar.Enabled:=false;
//       btnuevo.Enabled:=true;
    end;
end;

procedure TForm1.ebuscarChange(Sender: TObject);
begin
    qarticulos.Close;
    qarticulos.SQL.Clear;
    qarticulos.SQL.Add('select referencia,descripcion,[Tipo Impuesto] from articulos where descripcion like('+''''+'%'+ebuscar.Text+'%'+''''+') ');
    qarticulos.SQL.Add(' order by descripcion');
    qarticulos.Open;
//select referencia,descripcion,[Tipo Impuesto] from articulos order by descripcion

end;

procedure TForm1.ebuscarExit(Sender: TObject);
begin
    dbgrid1.SetFocus;
end;

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
    if (key='.') and (activecontrol is tdbedit) then
    begin
       if  (activecontrol as tdbedit).Field.DataType in [ftfloat,ftCurrency,ftbcd,ftfmtbcd] then key:=','
    end;
    if (key='.') and (activecontrol is tdbgrid) then
    begin
        key:=','
    end;
    if (key='.') and (activecontrol is tedit) then
    begin
       if  (activecontrol as tedit).Name='pciva' then key:=','
    end;
    if (key='.') and (activecontrol is tedit) then
    begin
        if  (activecontrol as tedit).Name='pvp1iva' then key:=','
    end;
    if (key='.') and (activecontrol is tedit) then
    begin
        if  (activecontrol as tedit).Name='spcbase' then key:=','
    end;
    if (key='.') and (activecontrol is tedit) then
    begin
        if  (activecontrol as tedit).Name='spciva' then key:=','
    end;
    if (key='.') and (activecontrol is tedit) then
    begin
        if  (activecontrol as tedit).Name='spvp1base' then key:=','
    end;
    if (key='.') and (activecontrol is tedit) then
    begin
        if  (activecontrol as tedit).Name='spvp1iva' then key:=','
    end;
    if (key='.') and (activecontrol is tedit) then
    begin
        if  (activecontrol as tedit).Name='sbeneficio' then key:=','
    end;
    if (key='.') and (activecontrol is tedit) then
    begin
        if  (activecontrol as tedit).Name='sbnneto' then key:=','
    end;
    if (key='.') and (activecontrol is tedit) then
    begin
        if  (activecontrol as tedit).Name='spcbasesd' then key:=','
    end;
    if (key=#13) then
    begin
        Perform(WM_NextDLGCtl,0,0);
        key:=#0;
    end;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
    try
      begin
          if abrircarpeta.Execute() then
          begin
              conexion.Params.Clear;
              conexion.Params.Add('DriverID=MSAcc');
              conexion.Params.Add('Database=' + abrircarpeta.FileName);
              conexion.Connected:=true;
              qarticulos.Open;
              qimpuestos.open;
              qproveedores.Open;
              articulos.Open;
              ebuscar.SetFocus;
          end;
      end;
      except on E: Exception do
      begin
          showmessage('Error al conectar: ' + E.Message);
      end
    end;
    dfecha.Date:=date();
    hfecha.Date:=date();
    ebuscar.SetFocus;
end;

procedure TForm1.sbeneficioClick(Sender: TObject);
begin
    sbeneficio.SetFocus;
end;

procedure TForm1.sbeneficioExit(Sender: TObject);
var tiva:real;
begin
  try
  begin
    tiva:=qimpuestosiva.AsFloat;
    spvp1base.text:=formatfloat('0.0000000',strtofloat(spcbase.text)+(strtofloat(spcbase.text)*(strtofloat(sbeneficio.Text)/100)));
    spvp1iva.text:=formatfloat('0.0000000',strtofloat(spvp1base.text)*(1+(tiva/100)));
    sbnneto.text:=formatfloat('0.0000000',strtofloat(spvp1base.text)-strtofloat(spcbase.text));
  end;
  except
     ebuscar.SetFocus;
     ebuscar.SelectAll;
  end;
end;

procedure TForm1.sbnnetoClick(Sender: TObject);
begin
    sbnneto.SetFocus;
end;

procedure TForm1.sbnnetoExit(Sender: TObject);
var tiva,tpciva,tpvp1,tbnpvp1:real;
begin
  try
  begin
    tiva:=qimpuestosiva.AsFloat;
    spvp1base.text:=formatfloat('0.0000000',strtofloat(spcbase.text)+(strtofloat(sbnneto.text)));
    spvp1iva.text:=formatfloat('0.0000000',strtofloat(spvp1base.text)*(1+(tiva/100)));
    tpciva:=strtofloat(spciva.Text);
    tpvp1:=strtofloat(spvp1iva.Text);
    tbnpvp1:=((tpvp1*100)/tpciva)-100;
    sbeneficio.Text:=formatfloat('0.0000000',tbnpvp1);
  end;
  except
     ebuscar.SetFocus;
     ebuscar.SelectAll;
  end;
end;

procedure TForm1.spcbaseClick(Sender: TObject);
begin
    spcbase.SelectAll;
end;

procedure TForm1.spcbaseExit(Sender: TObject);
var tiva:real;
begin
  try
    begin

    tiva:=qimpuestosiva.AsFloat;
    spvp1base.text:=formatfloat('0.0000000',strtofloat(spcbase.text)+(strtofloat(spcbase.text)*(strtofloat(sbeneficio.Text)/100)));
    spciva.text:=formatfloat('0.0000000',strtofloat(spcbase.text)*(1+(tiva/100)));
    spvp1iva.text:=formatfloat('0.0000000',strtofloat(spvp1base.text)*(1+(tiva/100)));
    sbnneto.text:=formatfloat('0.0000000',strtofloat(spvp1base.text)-strtofloat(spcbase.text));
    end;
  except
     ebuscar.SetFocus;
     ebuscar.SelectAll;
  end;

end;

procedure TForm1.spcbasesdExit(Sender: TObject);
var pvd,despvd:real;
begin
    despvd:=strtofloat(edit1.Text);
    pvd:=strtofloat(spcbasesd.Text);
    pvd:=pvd-(pvd*(despvd/100));
    spcbase.Text:=formatfloat('0.0000000',pvd);

end;

procedure TForm1.spcivaClick(Sender: TObject);
begin
    spciva.SelectAll;
end;

procedure TForm1.spcivaExit(Sender: TObject);
var tiva:real;
begin
  try
  begin
    tiva:=qimpuestosiva.AsFloat;
    spcbase.text:=formatfloat('0.0000000',strtofloat(spciva.text)/(1+(tiva/100)));
    spvp1base.text:=formatfloat('0.0000000',strtofloat(spcbase.text)+(strtofloat(spcbase.Text) *(strtofloat(sbeneficio.Text)/100)));
    spvp1iva.text:=formatfloat('0.0000000',strtofloat(spvp1base.text)*(1+(tiva/100)));
    sbnneto.text:=formatfloat('0.0000000',strtofloat(spvp1base.text)-strtofloat(spcbase.text));
  end;
  except
     ebuscar.SetFocus;
     ebuscar.SelectAll;
  end;

end;

procedure TForm1.spvp1baseClick(Sender: TObject);
begin
    spvp1base.SetFocus;
end;

procedure TForm1.spvp1baseExit(Sender: TObject);
var tiva,tpciva,tpvp1,tbnpvp1:real;
begin
  try
  begin
    tiva:=qimpuestosiva.AsFloat;
    tpciva:=strtofloat(spciva.Text);
    spvp1iva.text:=formatfloat('0.0000000',strtofloat(spvp1base.text)*(1+(tiva/100)));
    tpvp1:=strtofloat(spvp1iva.Text);
    tbnpvp1:=((tpvp1*100)/tpciva)-100;
    sbeneficio.Text:=formatfloat('0.0000000',tbnpvp1);
    sbnneto.text:=formatfloat('0.0000000',strtofloat(spvp1base.text)-strtofloat(spcbase.text));
  end;
  except
     ebuscar.SetFocus;
     ebuscar.SelectAll;
  end;
end;

procedure TForm1.spvp1ivaClick(Sender: TObject);
begin
    spvp1iva.SetFocus;
end;

procedure TForm1.spvp1ivaExit(Sender: TObject);
var tiva,tpciva,tpvp1,tbnpvp1:real;
begin
  try
  begin
    tiva:=qimpuestosiva.AsFloat;
    tpciva:=strtofloat(spciva.Text);
    spvp1base.text:=formatfloat('0.0000000',strtofloat(spvp1iva.text)/(1+(tiva/100)));
    tpvp1:=strtofloat(spvp1iva.Text);
    tbnpvp1:=((tpvp1*100)/tpciva)-100;
    sbeneficio.Text:=formatfloat('0.0000000',tbnpvp1);
    sbnneto.text:=formatfloat('0.0000000',strtofloat(spvp1base.text)-strtofloat(spcbase.text));
  end;
  except
     ebuscar.SetFocus;
     ebuscar.SelectAll;
  end;
end;

initialization
  TFDPhysMSAccessDriverLink.Create(nil);

end.
