unit clientes;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs,principal, Vcl.StdCtrls, Vcl.ComCtrls,
  Vcl.ExtCtrls, Vcl.Grids, Vcl.DBGrids, Vcl.Mask, Vcl.DBCtrls,Data.DB,
  ZAbstractRODataset, ZAbstractDataset, ZDataset,  ComObj, Excel2000,
  Vcl.ImgList;

type
  Tfclientes = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    Panel3: TPanel;
    Panel4: TPanel;
    Detallesclientes: TPageControl;
    TabPedidos: TTabSheet;
    Panel5: TPanel;
    DBGrid1: TDBGrid;
    todosclientes: TCheckBox;
    tbuscar: TEdit;
    Label1: TLabel;
    TAbalbaranes: TTabSheet;
    TabFacturas: TTabSheet;
    DatosClientes: TPageControl;
    TDatosClientes: TTabSheet;
    TDatosDestinos: TTabSheet;
    TDatosArticulos: TTabSheet;
    Panel6: TPanel;
    BtCcancelar: TButton;
    btCmodificar: TButton;
    BtCborrar: TButton;
    BtCNuevo: TButton;
    Panel8: TPanel;
    Panel10: TPanel;
    Panel11: TPanel;
    Panel12: TPanel;
    btDcancelar: TButton;
    btDmodificar: TButton;
    btDborrar: TButton;
    btDnuevo: TButton;
    Panel7: TPanel;
    btAcancelar: TButton;
    btAmodificar: TButton;
    btAborrar: TButton;
    btAnuevo: TButton;
    Label2: TLabel;
    DBEdit1: TDBEdit;
    Label4: TLabel;
    DBEdit3: TDBEdit;
    Label5: TLabel;
    DBEdit4: TDBEdit;
    Label6: TLabel;
    DBEdit5: TDBEdit;
    Label7: TLabel;
    DBEdit6: TDBEdit;
    Label8: TLabel;
    DBEdit7: TDBEdit;
    Label9: TLabel;
    DBEdit8: TDBEdit;
    Label10: TLabel;
    DBEdit9: TDBEdit;
    Label11: TLabel;
    DBEdit10: TDBEdit;
    Label12: TLabel;
    DBEdit11: TDBEdit;
    Label13: TLabel;
    DBEdit12: TDBEdit;
    Label16: TLabel;
    DBEdit15: TDBEdit;
    Label17: TLabel;
    DBEdit16: TDBEdit;
    Panel13: TPanel;
    DBCheckBox2: TDBCheckBox;
    Label14: TLabel;
    DBMemo1: TDBMemo;
    BtCguardar: TButton;
    btDguardar: TButton;
    btAguardar: TButton;
    Label15: TLabel;
    DBEdit13: TDBEdit;
    Panel14: TPanel;
    Panel15: TPanel;
    Label19: TLabel;
    DBEdit14: TDBEdit;
    Label21: TLabel;
    DBEdit17: TDBEdit;
    Label29: TLabel;
    DBEdit18: TDBEdit;
    Label30: TLabel;
    DBEdit20: TDBEdit;
    DBCheckBox4: TDBCheckBox;
    Label31: TLabel;
    Label32: TLabel;
    Label34: TLabel;
    Label35: TLabel;
    Label36: TLabel;
    Label37: TLabel;
    Panel16: TPanel;
    DBGrid3: TDBGrid;
    Panel18: TPanel;
    Panel19: TPanel;
    DBGrid4: TDBGrid;
    Panel20: TPanel;
    todosdestinos: TCheckBox;
    Panel21: TPanel;
    todosarticulos: TCheckBox;
    DBGrid5: TDBGrid;
    DBGrid7: TDBGrid;
    DBGrid8: TDBGrid;
    Panel17: TPanel;
    Panel22: TPanel;
    Label20: TLabel;
    Label3: TLabel;
    DBCheckBox1: TDBCheckBox;
    DBEdit19: TDBEdit;
    DBEdit2: TDBEdit;
    DBEdit21: TDBEdit;
    Label22: TLabel;
    DBEdit22: TDBEdit;
    Label23: TLabel;
    Label25: TLabel;
    DBEdit23: TDBEdit;
    Label26: TLabel;
    DBEdit24: TDBEdit;
    dsqformaspago: TDataSource;
    qformaspago: TZQuery;
    qformaspagoide: TIntegerField;
    qformaspagoid: TIntegerField;
    qformaspagocodigo: TWideStringField;
    qformaspagodescripcion: TWideStringField;
    qformaspagodias: TIntegerField;
    comboformapago: TDBLookupComboBox;
    Label27: TLabel;
    qaux: TZReadOnlyQuery;
    Button8: TButton;
    Button1: TButton;
    gridfacturasaexcel: TDBGrid;
    SaveDialog1: TSaveDialog;
    gridalbaranesaexcel: TDBGrid;
    dsqfacturasclientes: TDataSource;
    qfacturasclientes: TZReadOnlyQuery;
    qfacturasclientesserie: TWideStringField;
    qfacturasclientesid: TIntegerField;
    qfacturasclientesidempresa: TIntegerField;
    qfacturasclientesidcliente: TIntegerField;
    qfacturasclientesiddestino: TWideStringField;
    qfacturasclientesnif: TWideStringField;
    qfacturasclientesdireccion: TWideStringField;
    qfacturasclientespoblacion: TWideStringField;
    qfacturasclientesprovincia: TWideStringField;
    qfacturasclientescodpost: TWideStringField;
    qfacturasclientesfecha: TDateField;
    qfacturasclientesreferencia: TWideStringField;
    qfacturasclientestelefono: TWideStringField;
    qfacturasclientesnomcliente: TWideStringField;
    qfacturasclientespaiscliente: TWideStringField;
    qfacturasclientesnomdestino: TWideStringField;
    qfacturasclientesdirecciondestino: TWideStringField;
    qfacturasclientespoblaciondestino: TWideStringField;
    qfacturasclientescodpostdestino: TWideStringField;
    qfacturasclientesprovinciadestino: TWideStringField;
    qfacturasclientespaisdestino: TWideStringField;
    qfacturasclientesneto: TFloatField;
    qfacturasclientestotal: TFloatField;
    qfacturasclientesdocumento: TWideStringField;
    qfacturasclientesdescuento_lin: TFloatField;
    qfacturasclientesdescuento_com: TFloatField;
    qfacturasclientesdescuento_pp: TFloatField;
    qfacturasclientesdescuento_total: TFloatField;
    qfacturasclientestotaliva: TFloatField;
    qfacturasclientesobservaciones: TWideStringField;
    qfacturasclientesbultos: TFloatField;
    qfacturasclienteskilos: TFloatField;
    qfacturasclientesidformapago: TIntegerField;
    qfacturasclientesserie_1: TWideStringField;
    qfacturasclientesidfactura: TIntegerField;
    qfacturasclienteside: TIntegerField;
    qfacturasclientesbase: TFloatField;
    qfacturasclientestipo: TFloatField;
    qfacturasclientesiva: TFloatField;
    qfacturasclientescobrado: TIntegerField;
    Label28: TLabel;
    DBEdit25: TDBEdit;
    combocuenta: TDBLookupComboBox;
    Label38: TLabel;
    DBText1: TDBText;
    DBText2: TDBText;
    DBText16: TDBText;
    DBText17: TDBText;
    DBText18: TDBText;
    qcuentas: TZReadOnlyQuery;
    qcuentaside: TIntegerField;
    qcuentasid: TIntegerField;
    qcuentasbanco: TWideStringField;
    qcuentascciban: TWideStringField;
    qcuentasccentidad: TWideStringField;
    qcuentasccoficina: TWideStringField;
    qcuentasccdc: TWideStringField;
    qcuentascccc: TWideStringField;
    dsqcuentas: TDataSource;
    DBLookupComboBox1: TDBLookupComboBox;
    dsqtiposiva: TDataSource;
    qtipos_iva: TZReadOnlyQuery;
    qtipos_ivaid: TIntegerField;
    qtipos_ivadescripcion: TWideStringField;
    qtipos_ivatipo: TIntegerField;
    qtipos_ivatipo_req: TFloatField;
    Label33: TLabel;
    dsqarticulos: TDataSource;
    qarticulos: TZReadOnlyQuery;
    qarticulosidempresa: TIntegerField;
    qarticulosidcliente: TIntegerField;
    qarticulosid: TWideStringField;
    qarticulosdesc_cliente: TWideStringField;
    qarticulosactivo: TIntegerField;
    qclientes: TZReadOnlyQuery;
    qclientesid: TIntegerField;
    qclientesnombre_corto: TWideStringField;
    qclientesIdempresa: TIntegerField;
    dsqclientes: TDataSource;
    dsqdestinos: TDataSource;
    qdestinos: TZReadOnlyQuery;
    qdestinosidcliente: TIntegerField;
    qdestinosidempresa: TIntegerField;
    qdestinoscodigo: TWideStringField;
    qdestinosdescripcion: TWideStringField;
    qdestinosseleccionado: TIntegerField;
    qdestinosactivo: TIntegerField;
    qalbaranes: TZReadOnlyQuery;
    qalbaranesserie: TWideStringField;
    qalbaranesid: TIntegerField;
    qalbaranesidempresa: TIntegerField;
    qalbaranesidcliente: TIntegerField;
    qalbaranesiddestino: TWideStringField;
    qalbaranesnif: TWideStringField;
    qalbaranesdireccion: TWideStringField;
    qalbaranespoblacion: TWideStringField;
    qalbaranesprovincia: TWideStringField;
    qalbaranescodpost: TWideStringField;
    qalbaranesfecha: TDateField;
    qalbaranesreferencia: TWideStringField;
    qalbaranestelefono: TWideStringField;
    qalbaranesnomcliente: TWideStringField;
    qalbaranespaiscliente: TWideStringField;
    qalbaranesnomdestino: TWideStringField;
    qalbaranesdirecciondestino: TWideStringField;
    qalbaranespoblaciondestino: TWideStringField;
    qalbaranescodpostdestino: TWideStringField;
    qalbaranesprovinciadestino: TWideStringField;
    qalbaranespaisdestino: TWideStringField;
    qalbaranesneto: TFloatField;
    qalbaranestotal: TFloatField;
    qalbaranesfacturado: TIntegerField;
    qalbaranesdocumento: TWideStringField;
    qalbaranesdescuento_lin: TFloatField;
    qalbaranesdescuento_com: TFloatField;
    qalbaranesdescuento_pp: TFloatField;
    qalbaranesdescuento_total: TFloatField;
    qalbaranestotaliva: TFloatField;
    qalbaranesobservaciones: TWideStringField;
    qalbaranesidfactura: TIntegerField;
    qalbaranesbultos: TFloatField;
    qalbaraneskilos: TFloatField;
    qalbaranesidformapago: TIntegerField;
    dsqalbaranes: TDataSource;
    qfacturas: TZReadOnlyQuery;
    qfacturasserie: TWideStringField;
    qfacturasid: TIntegerField;
    qfacturasidempresa: TIntegerField;
    qfacturasidcliente: TIntegerField;
    qfacturasiddestino: TWideStringField;
    qfacturasnif: TWideStringField;
    qfacturasdireccion: TWideStringField;
    qfacturaspoblacion: TWideStringField;
    qfacturasprovincia: TWideStringField;
    qfacturascodpost: TWideStringField;
    qfacturasfecha: TDateField;
    qfacturasreferencia: TWideStringField;
    qfacturastelefono: TWideStringField;
    qfacturasnomcliente: TWideStringField;
    qfacturaspaiscliente: TWideStringField;
    qfacturasnomdestino: TWideStringField;
    qfacturasdirecciondestino: TWideStringField;
    qfacturaspoblaciondestino: TWideStringField;
    qfacturascodpostdestino: TWideStringField;
    qfacturasprovinciadestino: TWideStringField;
    qfacturaspaisdestino: TWideStringField;
    qfacturasneto: TFloatField;
    qfacturastotal: TFloatField;
    qfacturasdocumento: TWideStringField;
    qfacturasdescuento_lin: TFloatField;
    qfacturasdescuento_com: TFloatField;
    qfacturasdescuento_pp: TFloatField;
    qfacturasdescuento_total: TFloatField;
    qfacturastotaliva: TFloatField;
    qfacturasobservaciones: TWideStringField;
    qfacturasbultos: TFloatField;
    qfacturaskilos: TFloatField;
    qfacturasidformapago: TIntegerField;
    qfacturascobrado: TIntegerField;
    dsqfacturas: TDataSource;
    dtarticulos: TZQuery;
    dsarticulos: TDataSource;
    dtarticulosidempresa: TIntegerField;
    dtarticulosidcliente: TIntegerField;
    dtarticulosid: TWideStringField;
    dtarticulosdesc_cliente: TWideStringField;
    dtarticulosactivo: TIntegerField;
    dtarticulosformato: TZQuery;
    dtarticulosformatoid: TWideStringField;
    dtarticulosformatoidempresa: TIntegerField;
    dtarticulosformatoidcliente: TIntegerField;
    dtarticulosformatoid_articulo: TWideStringField;
    dtarticulosformatodes_envase: TWideStringField;
    dtarticulosformatodesc_cliente: TWideStringField;
    dtarticulosformatoactivo: TIntegerField;
    dtarticulosformatoean: TWideStringField;
    dtarticulosformatomarca: TWideStringField;
    dtarticulosformatoobservaciones: TWideStringField;
    dtarticulosformatoprecio_venta: TFloatField;
    dtarticulosformatoidformato: TIntegerField;
    dtarticulosformatounidades: TFloatField;
    dsarticulosformato: TDataSource;
    dsclientes: TDataSource;
    dtclientes: TZQuery;
    dtclientesid: TIntegerField;
    dtclientesIdempresa: TIntegerField;
    dtclientesnif: TWideStringField;
    dtclientesnombre: TWideStringField;
    dtclientesdireccion: TWideStringField;
    dtclientespoblacion: TWideStringField;
    dtclientescodpost: TWideStringField;
    dtclientesprovincia: TWideStringField;
    dtclientestelefono: TWideStringField;
    dtclientesemail: TWideStringField;
    dtclientespersonacontacto: TWideStringField;
    dtclientescodigomercado: TIntegerField;
    dtclientesactivo: TIntegerField;
    dtclientesobservaciones: TWideStringField;
    dtclientesccontable: TIntegerField;
    dtclientesnombre_corto: TWideStringField;
    dtclientestelefono2: TWideStringField;
    dtclientesmovil: TWideStringField;
    dtclientesdescuento: TFloatField;
    dtclientespais: TWideStringField;
    dtclientesidformapago: TIntegerField;
    dtclientesexento_iva: TIntegerField;
    dtclientescomision: TFloatField;
    dtclientesidcp: TIntegerField;
    dsdestinos: TDataSource;
    dtdestinos: TZQuery;
    dtdestinosidcliente: TIntegerField;
    dtdestinosidempresa: TIntegerField;
    dtdestinoscodigo: TWideStringField;
    dtdestinosdescripcion: TWideStringField;
    dtdestinosactivo: TIntegerField;
    dtdestinosseleccionado: TIntegerField;
    dtdestinosdireccion: TWideStringField;
    dtdestinospoblacion: TWideStringField;
    dtdestinoscodpost: TWideStringField;
    dtdestinosprovincia: TWideStringField;
    dtdestinospais: TWideStringField;
    qpedidos: TZReadOnlyQuery;
    qpedidosid: TIntegerField;
    qpedidoside: TIntegerField;
    qpedidosidcliente: TIntegerField;
    qpedidosiddestino: TWideStringField;
    qpedidosfecha_pedido: TDateField;
    qpedidosfecha_carga: TDateField;
    qpedidosfecha_entrega: TDateField;
    qpedidoshora_carga: TTimeField;
    qpedidospedidocliente: TWideStringField;
    qpedidosabierto: TIntegerField;
    qpedidosobservaciones: TWideStringField;
    qpedidosnombre: TWideStringField;
    qpedidosdescripcion: TWideStringField;
    dsqpedidos: TDataSource;
    listaiconos: TImageList;
    Label18: TLabel;
    DBEdit26: TDBEdit;
    dtarticulosprecio: TFloatField;
    procedure FormShow(Sender: TObject);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure BtCguardarClick(Sender: TObject);
    procedure BtCcancelarClick(Sender: TObject);
    procedure BtCNuevoClick(Sender: TObject);
    procedure btCmodificarClick(Sender: TObject);
    procedure todosclientesClick(Sender: TObject);
    procedure BtCborrarClick(Sender: TObject);
    procedure btDnuevoClick(Sender: TObject);
    procedure btDborrarClick(Sender: TObject);
    procedure btDmodificarClick(Sender: TObject);
    procedure btDguardarClick(Sender: TObject);
    procedure btDcancelarClick(Sender: TObject);
    procedure todosdestinosClick(Sender: TObject);
    procedure todosarticulosClick(Sender: TObject);
    procedure btAnuevoClick(Sender: TObject);
    procedure btAborrarClick(Sender: TObject);
    procedure btAmodificarClick(Sender: TObject);
    procedure btAguardarClick(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure DBEdit19Exit(Sender: TObject);
    procedure btADcancelarClick(Sender: TObject);
    procedure btAcancelarClick(Sender: TObject);
    procedure tbuscarChange(Sender: TObject);
    procedure btADguardarClick(Sender: TObject);
    procedure btADborrarClick(Sender: TObject);
    procedure DBGrid5DblClick(Sender: TObject);
    procedure DBGrid5TitleClick(Column: TColumn);
    procedure DBGrid7TitleClick(Column: TColumn);
    procedure DBGrid7DblClick(Sender: TObject);
    procedure DBGrid8DblClick(Sender: TObject);
    procedure DBGrid8TitleClick(Column: TColumn);
    procedure DBGrid1TitleClick(Column: TColumn);
    procedure Button1Click(Sender: TObject);
    procedure Button8Click(Sender: TObject);
    procedure dsclientesStateChange(Sender: TObject);
    procedure dsarticulosStateChange(Sender: TObject);
    procedure dsdestinosStateChange(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  procedure ExportaraExcel(FileNameXLS, SheetName: String; DBGrid: TDBGrid; ProgressBarXls: TProgressBar = nil);

  end;

var
  fclientes: Tfclientes;
  vertodos: integer;
implementation

{$R *.dfm}

uses  albaranes, facturas, datos;

procedure Tfclientes.ExportaraExcel(FileNameXLS, SheetName: String; DBGrid: TDBGrid; ProgressBarXls: TProgressBar);

  procedure ProgressBarInit;
  begin
    ProgressBarXls.Max := DBGrid.DataSource.DataSet.RecordCount;
    ProgressBarXls.Position := 0;
    ProgressBarXls.Visible := True;
  end;

const
  xlWBATworksheet = -4167;
var
  Excel, WorkBook, WorkSheet: OleVariant;
  I, J: Integer;
  PBookmark: TBookmark;
begin
  // Guardar la posición en la DB y desactivar que se mueva el registro
  PBookmark := DBGrid.DataSource.DataSet.GetBookmark;
  DBGrid.DataSource.DataSet.DisableControls;
  DBGrid.DataSource.DataSet.First;

  // Comprobar si existe el component TProgressBar
  if (ProgressBarXls <> nil) then
    ProgressBarInit;

  // Crear instancia de la aplicación Excel
  Excel := CreateOleObject('Excel.Application');

  // Evitar que nos pregunte si deseamos sobreescribir el archivo
  Excel.DisplayAlerts := False;

  // Agregar libro de trabajo
  WorkBook := Excel.Workbooks.Add(xlWBATWorksheet);

  // Tomar una referencia a la hoja creada
  WorkSheet := WorkBook.WorkSheets[1];

  // Se  describe el nombre de la hoja
  WorkSheet.Name := SheetName;

  // Llenamos las celdas
  //    Toma en cuenta que las columnas y filas empiezan en 1, y que en el
  // WorkSheet.Cells[I, J], I es la fila y J es la columna.

  //   Extrae los nombres de los campos del DBGrid y los coloca en el primer registro,
  // excluyendo los campos que están ocultos
  for J := 0 to DBGrid.FieldCount -1 do
    if DBGrid.Fields[J].Visible then
    begin
      // Poner la fuente de letra en Negrita
      WorkSheet.Cells[1, J +1].Font.Bold := True;
      // Centrar la celda
//      WorkSheet.Cells[1, J +1].HorizontalAlignment := xlCenter;
      // Asignamos Valor del titulo del DBrid
      WorkSheet.Cells[1, J +1] := DBGrid.Columns[J].Title.Caption;
    end;

  // Guardar los registros
  for I := 0 to DBGrid.DataSource.DataSet.RecordCount -1 do
  begin
    // Identificamos los campos y lo grabamos según su tipo
    for J := 0 to DBGrid.FieldCount -1 do
      case DBGrid.Fields[J].DataType of
        ftAutoInc, ftBytes, ftInteger, ftSmallint, ftWord: // Auto o Numérico
          WorkSheet.Cells[I +2, J +1] := DBGrid.Fields[J].AsInteger;
        ftBCD, ftFloat, ftCurrency: // Numérico con decimales
          WorkSheet.Cells[I +2, J +1] := DBGrid.Fields[J].AsFloat;
        ftDateTime, ftDate, ftTime: // Fecha y Hora
          WorkSheet.Cells[I +2, J +1] := DBGrid.Fields[J].AsDateTime;
        else // Todo lo demas caracteres
          WorkSheet.Cells[I +2, J +1] := DBGrid.Fields[J].AsString;
      end;

    // Saltamos de registro
    DBGrid.DataSource.DataSet.Next;

    // Comprobar si existe el component TProgressBar
    if (ProgressBarXls <> nil) then
      ProgressBarXls.Position := ProgressBarXls.Position +1;
  end;

  // Comprobar si existe el component TProgressBar
  if (ProgressBarXls <> nil) then
    ProgressBarXls.Visible := False;

  // Redimensionar todas las celdas para que esten según su tamaño
  WorkSheet.Cells.Columns.AutoFit;

  // Guardar el archivo
  WorkBook.SaveAs(FileNameXLS);

  // Cierra el archivo
  WorkBook.Close(FileNameXLS);

  // Salir de Excel
  Excel.Quit;

  // posicionar el registro donde estaba
  DBGrid.DataSource.DataSet.GotoBookmark(PBookmark);
  DBGrid.DataSource.DataSet.FreeBookmark(PBookmark);
  DBGrid.DataSource.DataSet.EnableControls;
end;

procedure Tfclientes.btAborrarClick(Sender: TObject);
begin
    dtarticulos.delete;
end;

procedure Tfclientes.btAcancelarClick(Sender: TObject);
begin
   dtarticulos.Cancel;
end;

procedure Tfclientes.btADborrarClick(Sender: TObject);
begin
    dtarticulosformato.delete;
end;

procedure Tfclientes.btADcancelarClick(Sender: TObject);
begin
   dtarticulosformato.Cancel;
   dtarticulosformato.MasterSource:=dsqarticulos;
end;

procedure Tfclientes.btADguardarClick(Sender: TObject);
begin
    dtarticulosformato.Post;
    dtarticulosformato.MasterSource:=dsqarticulos;
    dtarticulosformato.Refresh;
end;

procedure Tfclientes.btAguardarClick(Sender: TObject);
begin
    dtarticulos.Post;
    dtarticulos.MasterSource:=dsqarticulos;
    qarticulos.refresh
end;

procedure Tfclientes.btAmodificarClick(Sender: TObject);
begin
   dtarticulos.MasterSource:=nil;
   dtarticulos.edit;
   dbedit2.SetFocus;
end;

procedure Tfclientes.btAnuevoClick(Sender: TObject);
begin
   dtarticulos.MasterSource:=nil;
   dtarticulos.append;
   dtarticulosidempresa.value:=qclientesIdempresa.AsInteger;
   dtarticulosidcliente.value:=qclientesId.AsInteger;
   dbedit2.SetFocus;
end;

procedure Tfclientes.BtCborrarClick(Sender: TObject);
begin
    dtclientes.delete;
end;

procedure Tfclientes.BtCcancelarClick(Sender: TObject);
begin
    dtclientes.cancel;
    dtclientes.MasterSource:=dsqclientes;

end;

procedure Tfclientes.BtCguardarClick(Sender: TObject);
begin
    dtclientes.Post;
    qclientes.Refresh;
    dtclientes.MasterSource:=dsqclientes;

end;

procedure Tfclientes.btCmodificarClick(Sender: TObject);
begin
   dtclientes.MasterSource:=nil;
   dtclientes.edit;
   dbedit1.SetFocus;
end;

procedure Tfclientes.BtCNuevoClick(Sender: TObject);
begin
   qaux.close;
   qaux.sql.clear;
   qaux.sql.add('select max(id+1) from clientes ');
   qaux.Open;
   dtclientes.MasterSource:=nil;
   dtclientes.append;
   dtclientesid.Value:=qaux.Fields[0].AsInteger;
   dbedit1.SetFocus;
end;

procedure Tfclientes.btDcancelarClick(Sender: TObject);
begin
    dtdestinos.cancel;
end;

procedure Tfclientes.btDmodificarClick(Sender: TObject);
begin
   dtdestinos.MasterSource:=nil;
   dtdestinos.edit;
   dbedit15.SetFocus;
end;

procedure Tfclientes.btDborrarClick(Sender: TObject);
begin
    dtdestinos.delete;
    qdestinos.Refresh;
end;

procedure Tfclientes.btDnuevoClick(Sender: TObject);
begin
   dtdestinos.MasterSource:=nil;
   dtdestinos.append;
   dbedit15.SetFocus;
end;

procedure Tfclientes.Button1Click(Sender: TObject);
var  archivo:string;
begin
    qfacturasclientes.Close;
    qfacturasclientes.SQL.Clear;
    qfacturasclientes.SQL.Add('select * from facturas f,facturas_iva fi where f.idcliente='+dtclientesid.asstring+' and f.idempresa='+dtclientesidempresa.asstring+' and f.idempresa=fi.ide and f.serie=fi.serie and f.id=fi.idfactura order by f.serie,fecha desc,f.id desc');
    qfacturasclientes.open;
    savedialog1.FileName:='FACTURAS CLIENTES.xls';
    savedialog1.Execute();
    archivo:=savedialog1.FileName;
    try
    Exportaraexcel(archivo,'facturas',gridfacturasaexcel);
    finally
      showmessage('Los datos han sido exportados correctamente');

    end;
end;

procedure Tfclientes.Button8Click(Sender: TObject);
var  archivo:string;
begin
    savedialog1.FileName:='ALBARANES CLIENTES.xls';
    savedialog1.Execute();
    archivo:=savedialog1.FileName;
    try
    Exportaraexcel(archivo,'ALBARANES',gridalbaranesaexcel);
    finally
      showmessage('Los datos han sido exportados correctamente');

    end;

end;

procedure Tfclientes.DBEdit19Exit(Sender: TObject);
begin
    if dsarticulos.State in [dsedit,dsinsert] then btAguardar.Click;

end;

procedure Tfclientes.DBGrid1TitleClick(Column: TColumn);
var
  st:ZAbstractRODataset.TSortType;
begin
  st:=qclientes.SortType;
  qclientes.SortedFields:=Column.FieldName;
  If st = stAscending then qclientes.SortType:=stDescending else qclientes.SortType:=stAscending;
  dsqclientes.DataSet.First;
end;

procedure Tfclientes.DBGrid5DblClick(Sender: TObject);
begin
      //pedidos.showmodal();
end;

procedure Tfclientes.DBGrid5TitleClick(Column: TColumn);
var
  st:ZAbstractRODataset.TSortType;
begin
  st:=qpedidos.SortType;
  qpedidos.SortedFields:=Column.FieldName;
  If st = stAscending then qpedidos.SortType:=stDescending else qpedidos.SortType:=stAscending;
  dsqpedidos.DataSet.First;

end;

procedure Tfclientes.DBGrid7DblClick(Sender: TObject);
var tserie,tid,tidempresa,tidcliente:string;
begin
    tserie:=qalbaranesserie.AsString;
    tid:=qalbaranesid.AsString;
    tidempresa:=qalbaranesidempresa.AsString;
    tidcliente:=qalbaranesidcliente.AsString;
    falbaranes := Tfalbaranes.Create(nil);
    try
      falbaranes.albaranes.filter:='id='+tid+'and idempresa='+tidempresa+' and idcliente='+tidcliente+' and serie='+''''+tserie+'''';
      falbaranes.albaranes.filtered:=true;
      falbaranes.showmodal();

    finally
      falbaranes.albaranes.filtered:=false;
      falbaranes.Free;
    end;
end;

procedure Tfclientes.DBGrid7TitleClick(Column: TColumn);
var
  st:ZAbstractRODataset.TSortType;
begin
  st:=qalbaranes.SortType;
  qalbaranes.SortedFields:=Column.FieldName;
  If st = stAscending then qalbaranes.SortType:=stDescending else qalbaranes.SortType:=stAscending;
  dsqalbaranes.DataSet.First;
end;

procedure Tfclientes.DBGrid8DblClick(Sender: TObject);
var tserie,tid,tidempresa,tidcliente:string;
begin
    tserie:=qfacturasserie.AsString;
    tid:=qfacturasid.AsString;
    tidempresa:=qfacturasidempresa.AsString;
    tidcliente:=qfacturasidcliente.AsString;
    ffacturas := Tffacturas.Create(nil);
    try
      ffacturas.facturas.filter:='id='+tid+'and idempresa='+tidempresa+' and idcliente='+tidcliente+' and serie='+''''+tserie+'''';
      ffacturas.facturas.filtered:=true;
      ffacturas.showmodal();
    finally
      ffacturas.facturas.filtered:=false;
      ffacturas.facturas.Filter:='';
      ffacturas.Free;
    end;
end;

procedure Tfclientes.DBGrid8TitleClick(Column: TColumn);
var
  st:ZAbstractRODataset.TSortType;
begin
  st:=qfacturas.SortType;
  qfacturas.SortedFields:=Column.FieldName;
  If st = stAscending then qfacturas.SortType:=stDescending else qfacturas.SortType:=stAscending;
  dsqfacturas.DataSet.First;
end;

procedure Tfclientes.dsarticulosStateChange(Sender: TObject);
begin
    if dtarticulos.State in [dsedit,dsinsert] then
    begin
       Panel22.Enabled:=true;
       btAnuevo.enabled:=false;
       btAborrar.enabled:=false;
       btAmodificar.enabled:=false;
       btAguardar.enabled:=true;
       btAcancelar.enabled:=true;
    end;
    if dtarticulos.State in [dsbrowse] then
    begin
       Panel22.Enabled:=false;
       btAnuevo.enabled:=true;
       btAborrar.enabled:=true;
       btAmodificar.enabled:=true;
       btAguardar.enabled:=false;
       btAcancelar.enabled:=false;
    end;

end;

procedure Tfclientes.dsclientesStateChange(Sender: TObject);
begin
    if dtclientes.State in [dsedit,dsinsert] then
    begin
       Panel14.Enabled:=true;
       btCnuevo.enabled:=false;
       btCborrar.enabled:=false;
       btCmodificar.enabled:=false;
       btCguardar.enabled:=true;
       btCcancelar.enabled:=true;
    end;
    if dtclientes.State in [dsbrowse] then
    begin
       Panel14.Enabled:=false;
       btCnuevo.enabled:=true;
       btCborrar.enabled:=true;
       btCmodificar.enabled:=true;
       btCguardar.enabled:=false;
       btCcancelar.enabled:=false;
    end;

end;

procedure Tfclientes.dsdestinosStateChange(Sender: TObject);
begin
    if dtdestinos.State in [dsedit,dsinsert] then
    begin
       Panel19.Enabled:=true;
       btDnuevo.enabled:=false;
       btDborrar.enabled:=false;
       btDmodificar.enabled:=false;
       btDguardar.enabled:=true;
       btDcancelar.enabled:=true;
    end;
    if dtdestinos.State in [dsbrowse] then
    begin
       Panel19.Enabled:=false;
       btDnuevo.enabled:=true;
       btDborrar.enabled:=true;
       btDmodificar.enabled:=true;
       btDguardar.enabled:=false;
       btDcancelar.enabled:=false;
    end;

end;

procedure Tfclientes.todosdestinosClick(Sender: TObject);
begin
    if todosdestinos.Checked=true then
    begin
        qdestinos.Close;
        qdestinos.SQL.Clear;
        qdestinos.SQL.add('select * from clientes_destinos order by descripcion asc');
        qdestinos.Open;
    end else
    begin
        qdestinos.Close;
        qdestinos.SQL.Clear;
        qdestinos.SQL.add('select * from clientes_destinos where activo=1 order by descripcion asc');
        qdestinos.Open;
    end;
end;

procedure Tfclientes.btDguardarClick(Sender: TObject);
begin
    dtdestinosidcliente.Value:=dtclientesid.AsInteger;
    dtdestinosidempresa.Value:=dtclientesidempresa.AsInteger;
    dtdestinos.Post;
    qdestinos.close;
    qdestinos.Open;
    dtdestinos.MasterSource:=dsqdestinos;
end;

procedure Tfclientes.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
    if (activecontrol is tdbgrid) then
    begin
        if Key = 13 then Key :=9;
    end;

end;

procedure Tfclientes.FormKeyPress(Sender: TObject; var Key: Char);
var formatos:tformatsettings;
punto:string;
begin
    GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT, formatos);
    punto:=formatos.DecimalSeparator;
    if punto=',' then
    begin
        key:=upcase(key);
        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;
    end;

    if (activecontrol is tdbgrid) then
    begin
        if Key = #13 then Key :=#9;
    end;

    if (key=#13) then
    begin
        Perform(WM_NextDLGCtl,0,0);
        key:=#0;
    end;

end;

procedure Tfclientes.FormShow(Sender: TObject);
begin
    detallesclientes.ActivePageIndex:=0;
    datosclientes.activepageindex:=0;
    qclientes.close;
    qpedidos.Close;
    qalbaranes.close;
    qfacturas.close;

    qformaspago.Close;
    qcuentas.close;
    qtipos_iva.close;
    dm.qempresas.open;
    qclientes.Open;
    qarticulos.Open;
    qdestinos.Open;
    qpedidos.Open;
    qalbaranes.Open;
    qfacturas.open;
    dtclientes.Open;
    dtdestinos.Open;
    dtarticulos.Open;
    qformaspago.Open;
    qcuentas.Open;
    qtipos_iva.open;
end;

procedure Tfclientes.tbuscarChange(Sender: TObject);
begin
    filtro:='%'+tbuscar.Text+'%';
    if todosclientes.Checked then vertodos:=1 else vertodos:=0;
    qclientes.Close;
    qclientes.open;
end;

procedure Tfclientes.todosarticulosClick(Sender: TObject);
begin
    if todosarticulos.Checked=true then
    begin
        qarticulos.Close;
        qarticulos.SQL.Clear;
        qarticulos.SQL.add('select * from clientes_articulos order by nombre asc');
        qarticulos.Open;
    end else
    begin
        qarticulos.Close;
        qarticulos.SQL.Clear;
        qarticulos.SQL.add('select * from clientes_articulos where activo=1 order by nombre asc');
        qarticulos.Open;
    end;
end;

procedure Tfclientes.todosclientesClick(Sender: TObject);
begin
    if todosclientes.Checked=true then
    begin
        vertodos:=1;
        qclientes.Close;
        qclientes.SQL.Clear;
        qclientes.SQL.add('select * from clientes order by nombre asc');
        qclientes.Open;
    end else
    begin
        vertodos:=0;
        qclientes.Close;
        qclientes.SQL.Clear;
        qclientes.SQL.add('select * from clientes where activo=1 order by nombre asc');
        qclientes.Open;
    end;
end;

end.
