unit facturas;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Grids, Vcl.DBGrids, Vcl.StdCtrls,
  Vcl.DBCtrls, Vcl.Mask, Vcl.ExtCtrls, Vcl.ComCtrls, Data.DB,math,
  ZAbstractRODataset, ZAbstractDataset, ZDataset, frxClass, frxDBSet,datos,  ComObj, Excel2000,
  frxExportPDF, Vcl.ImgList;

type
  Tffacturas = class(TForm)
    PageControl2: TPageControl;
    TabSheet3: TTabSheet;
    Panel8: TPanel;
    Panel9: TPanel;
    btfcancelar: TButton;
    btfmodificar: TButton;
    btfborrar: TButton;
    btfnuevo: TButton;
    btfguardar: TButton;
    btfimprimir: TButton;
    btfimportar: TButton;
    btfsiguiente: TButton;
    btfanterior: TButton;
    Panel10: TPanel;
    Label16: TLabel;
    Label17: TLabel;
    DBText1: TDBText;
    DBText2: TDBText;
    DBText16: TDBText;
    DBText17: TDBText;
    DBText18: TDBText;
    DBText19: TDBText;
    DBText20: TDBText;
    DBText21: TDBText;
    DBText22: TDBText;
    DBText23: TDBText;
    DBText24: TDBText;
    DBText25: TDBText;
    DBText26: TDBText;
    paneldatos: TPanel;
    Label18: TLabel;
    Label19: TLabel;
    Label20: TLabel;
    Label21: TLabel;
    Label22: TLabel;
    Label23: TLabel;
    comboseries: TDBLookupComboBox;
    DBEdit10: TDBEdit;
    comboclientes: TDBLookupComboBox;
    combodestinos: TDBLookupComboBox;
    DBEdit11: TDBEdit;
    DBMemo4: TDBMemo;
    Panel12: TPanel;
    Label28: TLabel;
    Label29: TLabel;
    Label30: TLabel;
    Panel13: TPanel;
    DBGrid4: TDBGrid;
    DBEdit12: TDBEdit;
    DBEdit13: TDBEdit;
    DBEdit14: TDBEdit;
    DBEdit15: TDBEdit;
    DBEdit16: TDBEdit;
    DBEdit17: TDBEdit;
    DBEdit18: TDBEdit;
    DBGrid5: TDBGrid;
    Panel14: TPanel;
    Button16: TButton;
    tablistado: TTabSheet;
    DBGrid6: TDBGrid;
    infdetallefactura: TfrxDBDataset;
    inffactura: TfrxDBDataset;
    inffacturaivas: TfrxDBDataset;
    informe: TfrxReport;
    dsfacturas: TDataSource;
    facturas: TZQuery;
    dsfacturasdetalle: TDataSource;
    facturasdetalle: TZQuery;
    dsqseries: TDataSource;
    dsqclientes: TDataSource;
    qclientes: TZQuery;
    qseries: TZQuery;
    dsqdestinos: TDataSource;
    qdestinos: TZQuery;
    qdestinoscodigo: TWideStringField;
    qdestinosidcliente: TIntegerField;
    qdestinosidempresa: TIntegerField;
    qdestinosdescripcion: TWideStringField;
    qdestinosseleccionado: TIntegerField;
    qdestinosactivo: TIntegerField;
    qdestinosdireccion: TWideStringField;
    qdestinospoblacion: TWideStringField;
    qdestinoscodpost: TWideStringField;
    qdestinosprovincia: TWideStringField;
    qdestinospais: TWideStringField;
    dsqfacturasiva: TDataSource;
    qfacturasiva: TZQuery;
    qalbaranes: TZQuery;
    qalbaranesdetalle: TZQuery;
    dsqalbaranes: TDataSource;
    dsqalbaranesdetalle: TDataSource;
    facturasdetalleid: TIntegerField;
    facturasdetalleidempresa: TIntegerField;
    facturasdetalleidfactura: TIntegerField;
    facturasdetalleidarticulo: TWideStringField;
    facturasdetalledescripcion: TWideStringField;
    facturasdetallecal: TWideStringField;
    facturasdetallelote: TWideStringField;
    facturasdetallecantidad: TFloatField;
    facturasdetalleprecio: TFloatField;
    facturasdetalledescuento: TFloatField;
    facturasdetalletotaldescuento: TFloatField;
    facturasdetallebase: TFloatField;
    facturasdetalletipoiva: TFloatField;
    facturasdetalleiva: TFloatField;
    facturasdetalletotal: TFloatField;
    qserieside: TIntegerField;
    qseriesid: TWideStringField;
    qseriesfechainicio: TDateField;
    qseriesfechafin: TDateField;
    qseriesnum_pedcliente: TIntegerField;
    qseriesnum_albaran: TIntegerField;
    qseriesnum_factura: TIntegerField;
    qseriesnum_expedicion: TIntegerField;
    qseriesnum_pedproveedor: TIntegerField;
    qclientesid: TIntegerField;
    qclientesIdempresa: TIntegerField;
    qclientesnif: TWideStringField;
    qclientesnombre: TWideStringField;
    qclientesnombre_corto: TWideStringField;
    qclientesdireccion: TWideStringField;
    qclientespoblacion: TWideStringField;
    qclientescodpost: TWideStringField;
    qclientesprovincia: TWideStringField;
    qclientestelefono: TWideStringField;
    qclientestelefono2: TWideStringField;
    qclientesmovil: TWideStringField;
    qclientesemail: TWideStringField;
    qclientespersonacontacto: TWideStringField;
    qclientescodigomercado: TIntegerField;
    qclientesactivo: TIntegerField;
    qclientesobservaciones: TWideStringField;
    qclientesccontable: TIntegerField;
    qclientesdescuento: TFloatField;
    qclientespais: 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;
    qalbaranesdetalleid: TIntegerField;
    qalbaranesdetalleidempresa: TIntegerField;
    qalbaranesdetalleidalbaran: TIntegerField;
    qalbaranesdetalleidarticulo: TWideStringField;
    qalbaranesdetalledescripcion: TWideStringField;
    qalbaranesdetallecal: TWideStringField;
    qalbaranesdetallelote: TWideStringField;
    qalbaranesdetallecantidad: TFloatField;
    qalbaranesdetalleprecio: TFloatField;
    qalbaranesdetalledescuento: TFloatField;
    qalbaranesdetalletotaldescuento: TFloatField;
    qalbaranesdetallebase: TFloatField;
    qalbaranesdetalletipoiva: TFloatField;
    qalbaranesdetalleiva: TFloatField;
    qalbaranesdetalletotal: TFloatField;
    dsqalbaranes2: TDataSource;
    qalbaranes2: TZQuery;
    dsqalbaranesdetalle2: TDataSource;
    qalbaranesdetalle2: TZQuery;
    qfacturasivaidfactura: TIntegerField;
    qfacturasivaide: TIntegerField;
    qfacturasivabase: TFloatField;
    qfacturasivatipo: TFloatField;
    qfacturasivaiva: TFloatField;
    qalbaranes2id: TIntegerField;
    qalbaranes2idempresa: TIntegerField;
    qalbaranes2idcliente: TIntegerField;
    qalbaranes2iddestino: TWideStringField;
    qalbaranes2nif: TWideStringField;
    qalbaranes2direccion: TWideStringField;
    qalbaranes2poblacion: TWideStringField;
    qalbaranes2provincia: TWideStringField;
    qalbaranes2codpost: TWideStringField;
    qalbaranes2fecha: TDateField;
    qalbaranes2referencia: TWideStringField;
    qalbaranes2telefono: TWideStringField;
    qalbaranes2nomcliente: TWideStringField;
    qalbaranes2paiscliente: TWideStringField;
    qalbaranes2nomdestino: TWideStringField;
    qalbaranes2direcciondestino: TWideStringField;
    qalbaranes2poblaciondestino: TWideStringField;
    qalbaranes2codpostdestino: TWideStringField;
    qalbaranes2provinciadestino: TWideStringField;
    qalbaranes2paisdestino: TWideStringField;
    qalbaranes2neto: TFloatField;
    qalbaranes2total: TFloatField;
    qalbaranes2facturado: TIntegerField;
    qalbaranes2documento: TWideStringField;
    qalbaranes2descuento_lin: TFloatField;
    qalbaranes2descuento_com: TFloatField;
    qalbaranes2descuento_pp: TFloatField;
    qalbaranes2descuento_total: TFloatField;
    qalbaranes2totaliva: TFloatField;
    qalbaranes2observaciones: TWideStringField;
    qalbaranes2idfactura: TIntegerField;
    qalbaranesdetalle2id: TIntegerField;
    qalbaranesdetalle2idempresa: TIntegerField;
    qalbaranesdetalle2idalbaran: TIntegerField;
    qalbaranesdetalle2idarticulo: TWideStringField;
    qalbaranesdetalle2descripcion: TWideStringField;
    qalbaranesdetalle2cal: TWideStringField;
    qalbaranesdetalle2lote: TWideStringField;
    qalbaranesdetalle2cantidad: TFloatField;
    qalbaranesdetalle2precio: TFloatField;
    qalbaranesdetalle2descuento: TFloatField;
    qalbaranesdetalle2totaldescuento: TFloatField;
    qalbaranesdetalle2base: TFloatField;
    qalbaranesdetalle2tipoiva: TFloatField;
    qalbaranesdetalle2iva: TFloatField;
    qalbaranesdetalle2total: TFloatField;
    qaux: TZQuery;
    facturasdetalleserie: TWideStringField;
    qalbaranes2serie: TWideStringField;
    qalbaranesdetalle2serie: TWideStringField;
    qalbaranesserie: TWideStringField;
    qalbaranesdetalleserie: TWideStringField;
    qfacturasivaserie: TWideStringField;
    qseriesimp_albaran: TWideStringField;
    qseriesimp_factura: TWideStringField;
    Label31: TLabel;
    comboformapago: TDBLookupComboBox;
    qformaspago: TZQuery;
    dsqformaspago: TDataSource;
    qformaspagoide: TIntegerField;
    qformaspagoid: TIntegerField;
    qformaspagocodigo: TWideStringField;
    qformaspagodescripcion: TWideStringField;
    qformaspagodias: TIntegerField;
    qclientesidformapago: TIntegerField;
    qalbaranesdetallebultos: TFloatField;
    qalbaranesdetalle2bultos: TFloatField;
    dsqarticulos: TDataSource;
    qarticulos: TZReadOnlyQuery;
    qtipos_iva: TZReadOnlyQuery;
    DataSource1: TDataSource;
    qtipos_ivaid: TIntegerField;
    qtipos_ivadescripcion: TWideStringField;
    qtipos_ivatipo: TIntegerField;
    qtipos_ivatipo_req: TFloatField;
    qarticulosidempresa: TIntegerField;
    qarticulosid: TIntegerField;
    qarticuloscodigo: TWideStringField;
    qarticulosdescripcion: TWideStringField;
    qarticulosfamilia: TIntegerField;
    qarticulosprovhab: TIntegerField;
    qarticulostipoiva: TIntegerField;
    qarticulospreciocoste: TFloatField;
    qarticulosmargen: TFloatField;
    qarticulosbeneficio: TFloatField;
    qarticulospvp: TFloatField;
    qarticulosstock: TFloatField;
    qarticulosult_preciocompra: TFloatField;
    qarticulosfacturable: TIntegerField;
    qarticulosobservaciones: TWideStringField;
    qarticulosimagen: TBlobField;
    qarticulosactivo: TIntegerField;
    qarticulosvalor_almacen: TFloatField;
    qarticulosstock_minimo: TFloatField;
    qarticulosavisar_stock: TIntegerField;
    qarticuloscontrolar_traza: TIntegerField;
    qarticulospeso: TFloatField;
    listaimpresion: TComboBox;
    facturasdetallebultos: TFloatField;
    Panel11: TPanel;
    Button3: TButton;
    gridfacturasaexcel: TDBGrid;
    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;
    dsqfacturasclientes: TDataSource;
    SaveDialog1: TSaveDialog;
    qclientesexento_iva: TIntegerField;
    DBCheckBox2: TDBCheckBox;
    Panel15: TPanel;
    listaclientes: TZQuery;
    listaclientesnif: TWideStringField;
    listaclientesnomcliente: TWideStringField;
    combolistcliente: TDBLookupComboBox;
    combolistdestinos: TDBLookupComboBox;
    listadestinos: TZQuery;
    dslistadestinos: TDataSource;
    dslistacliente: TDataSource;
    listadestinosnomdestino: TWideStringField;
    Label32: TLabel;
    Label33: TLabel;
    Label34: TLabel;
    Label35: TLabel;
    fdesde: TDateTimePicker;
    fhasta: TDateTimePicker;
    btfiltrar: TButton;
    Button7: TButton;
    Button8: TButton;
    qfacturasclientescobrado: TIntegerField;
    frxPDFExport1: TfrxPDFExport;
    Button9: TButton;
    qconta_subcta: TZQuery;
    qconta_subctacuenta: TWideStringField;
    qconta_subctatitulo: TWideStringField;
    qconta_subctanif: TWideStringField;
    qconta_subctadomicilio: TWideStringField;
    qconta_subctapoblacion: TWideStringField;
    qconta_subctaprovincia: TWideStringField;
    qconta_subctacodpost: TWideStringField;
    qconta_subctaint1: TWideStringField;
    qclientes_conta: TZQuery;
    qclientes_contanif: TWideStringField;
    qclientes_contanombre: TWideStringField;
    qclientes_contadireccion: TWideStringField;
    qclientes_contapoblacion: TWideStringField;
    qclientes_contacodpost: TWideStringField;
    qclientes_contaprovincia: TWideStringField;
    qclientes_contaccontable: TIntegerField;
    qconta_diario: TZQuery;
    qconta_diarioasiento: TWideStringField;
    qconta_diariofecha: TWideStringField;
    qconta_diariocuenta: TWideStringField;
    qconta_diariocontrapartida: TWideStringField;
    qconta_diarioconcepto: TWideStringField;
    qconta_diariofactura: TWideStringField;
    qconta_diariofecha_recep: TWideStringField;
    qconta_diarioiva: TWideStringField;
    qconta_diariorec_equiv: TWideStringField;
    qconta_diariodocumento: TWideStringField;
    qconta_diarioserie: TWideStringField;
    qconta_diarioaccion: TWideStringField;
    qconta_diariooperacioniva: TWideStringField;
    qconta_diarioorigen: TWideStringField;
    qconta_diariotipoapunte: TWideStringField;
    qconta_diarioimpdebe: TWideStringField;
    qconta_diarioimphaber: TWideStringField;
    qconta_diariobaseimpo: TWideStringField;
    qaux2: TZQuery;
    qaux2serie: TWideStringField;
    qaux2idfactura: TIntegerField;
    qaux2ide: TIntegerField;
    qaux2base: TFloatField;
    qaux2tipo: TFloatField;
    qaux2iva: TFloatField;
    qclientes_contaid: TIntegerField;
    qconta_diariointerno1: TWideStringField;
    qconta_diariointerno2: TWideStringField;
    qconta_diariointerno3: TWideStringField;
    qconta_diariointerno4: TWideStringField;
    qconta_diariointerno5: TWideStringField;
    qconta_diariointerno6: TWideStringField;
    qconta_diariointerno7: TWideStringField;
    qconta_diariointerno8: TWideStringField;
    qconta_diariointerno9: TWideStringField;
    qconta_diariointerno10: TWideStringField;
    qconta_diariointerno11: TWideStringField;
    qconta_diariointerno12: TWideStringField;
    qconta_diariointerno13: TWideStringField;
    qaux3: TZQuery;
    WideStringField1: TWideStringField;
    IntegerField1: TIntegerField;
    IntegerField2: TIntegerField;
    FloatField1: TFloatField;
    FloatField2: TFloatField;
    FloatField3: TFloatField;
    facturasdetalleidalbaran: TIntegerField;
    btacumulados: TButton;
    DBGridacumulados: TDBGrid;
    dsfacturasacumuladas: TDataSource;
    facturasacumuladas: TZQuery;
    facturasacumuladasidempresa: TIntegerField;
    facturasacumuladasidcliente: TIntegerField;
    facturasacumuladasnif: TWideStringField;
    facturasacumuladasnomcliente: TWideStringField;
    facturasacumuladassumtotal: TFloatField;
    Label1: TLabel;
    Edit1: TEdit;
    Button1: TButton;
    Label9: TLabel;
    Label3: TLabel;
    Label8: TLabel;
    Label10: TLabel;
    combocuenta: TDBLookupComboBox;
    Label4: TLabel;
    DBText3: TDBText;
    Label5: TLabel;
    costetrans: TDBEdit;
    DBText4: TDBText;
    DBText5: TDBText;
    DBText6: TDBText;
    DBText7: TDBText;
    Label6: TLabel;
    comision: TDBEdit;
    Label7: TLabel;
    facturasdetallecoste_transporte: TFloatField;
    facturasdetallecoste_otros: TFloatField;
    facturasdetallecoste_comision: TFloatField;
    Button2: TButton;
    Button5: TButton;
    qcuentas: TZReadOnlyQuery;
    qcuentaside: TIntegerField;
    qcuentasid: TIntegerField;
    qcuentasbanco: TWideStringField;
    qcuentascciban: TWideStringField;
    qcuentasccentidad: TWideStringField;
    qcuentasccoficina: TWideStringField;
    qcuentasccdc: TWideStringField;
    qcuentascccc: TWideStringField;
    dsqcuentas: TDataSource;
    qalbaranesdetallecoste_transporte: TFloatField;
    qalbaranesdetallecoste_otros: TFloatField;
    qalbaranesdetallecoste_comision: TFloatField;
    qalbaranesdetalle2coste_transporte: TFloatField;
    qalbaranesdetalle2coste_otros: TFloatField;
    qalbaranesdetalle2coste_comision: TFloatField;
    facturasserie: TWideStringField;
    facturasid: TIntegerField;
    facturasidempresa: TIntegerField;
    facturasidcliente: TIntegerField;
    facturasiddestino: TWideStringField;
    facturasnif: TWideStringField;
    facturasdireccion: TWideStringField;
    facturaspoblacion: TWideStringField;
    facturasprovincia: TWideStringField;
    facturascodpost: TWideStringField;
    facturasfecha: TDateField;
    facturasreferencia: TWideStringField;
    facturastelefono: TWideStringField;
    facturasnomcliente: TWideStringField;
    facturaspaiscliente: TWideStringField;
    facturasnomdestino: TWideStringField;
    facturasdirecciondestino: TWideStringField;
    facturaspoblaciondestino: TWideStringField;
    facturascodpostdestino: TWideStringField;
    facturasprovinciadestino: TWideStringField;
    facturaspaisdestino: TWideStringField;
    facturasneto: TFloatField;
    facturastotal: TFloatField;
    facturascobrado: TIntegerField;
    facturasdocumento: TWideStringField;
    facturasdescuento_lin: TFloatField;
    facturasdescuento_com: TFloatField;
    facturasdescuento_pp: TFloatField;
    facturasdescuento_total: TFloatField;
    facturastotaliva: TFloatField;
    facturasobservaciones: TWideStringField;
    facturasbultos: TFloatField;
    facturaskilos: TFloatField;
    facturasidformapago: TIntegerField;
    facturascc_pago: TWideStringField;
    facturasccid: TIntegerField;
    facturascccuentabancaria: TWideStringField;
    facturascomision: TFloatField;
    facturascoste_transporte: TFloatField;
    facturaspeso_bruto: TFloatField;
    facturasprov_transporte: TWideStringField;
    facturaskilosventa: TFloatField;
    facturasnumpalets: TFloatField;
    listaiconos: TImageList;
    qclientescomision: TFloatField;
    qclientesidcp: TIntegerField;
    procedure dsfacturasStateChange(Sender: TObject);
    procedure dsfacturasDataChange(Sender: TObject; Field: TField);
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure btfimportarClick(Sender: TObject);
    procedure btfnuevoClick(Sender: TObject);
    procedure comboseriesCloseUp(Sender: TObject);
    procedure comboseriesEnter(Sender: TObject);
    procedure comboclientesEnter(Sender: TObject);
    procedure comboclientesCloseUp(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure combodestinosEnter(Sender: TObject);
    procedure combodestinosCloseUp(Sender: TObject);
    procedure btfborrarClick(Sender: TObject);
    procedure btfmodificarClick(Sender: TObject);
    procedure btfguardarClick(Sender: TObject);
    procedure facturasdetalleBeforePost(DataSet: TDataSet);
    procedure facturasdetalleAfterPost(DataSet: TDataSet);
    procedure Button16Click(Sender: TObject);
    procedure DBGrid6TitleClick(Column: TColumn);
    procedure btfcancelarClick(Sender: TObject);
    procedure btfanteriorClick(Sender: TObject);
    procedure btfsiguienteClick(Sender: TObject);
    procedure btfimprimirClick(Sender: TObject);
    procedure DBGrid5KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure DBGrid5ColExit(Sender: TObject);
    procedure qarticulosBeforeOpen(DataSet: TDataSet);
    procedure Button3Click(Sender: TObject);
    procedure tablistadoShow(Sender: TObject);
    procedure btfiltrarClick(Sender: TObject);
    procedure DBGrid6DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    procedure Button7Click(Sender: TObject);
    procedure Button8Click(Sender: TObject);
    procedure Button9Click(Sender: TObject);
    procedure btacumuladosClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  procedure ExportaraExcel(FileNameXLS, SheetName: String; DBGrid: TDBGrid; ProgressBarXls: TProgressBar = nil);

  end;

var
  ffacturas: Tffacturas;
  filtro,iddetalle:string;

implementation

{$R *.dfm}

uses selectalbaranes,buscararticulos;
procedure Tffacturas.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 Tffacturas.btfcancelarClick(Sender: TObject);
begin
    facturas.Cancel;
    paneldatos.Enabled:=false;
end;

procedure Tffacturas.btfguardarClick(Sender: TObject);
var empresa,serie:string;
begin
    empresa:=facturasidempresa.AsString;
    serie:=facturasserie.AsString;
    qaux.sql.clear;
    facturas.Post;
    qaux.sql.clear;
    qaux.SQL.Add('select max(id) from facturas where idempresa='+empresa+' and serie='+''''+serie+'''');
    qaux.Open;
    qseries.edit;
    qseriesnum_factura.Value:=qaux.Fields[0].AsInteger+1;
    qseries.Post;
    facturasdetalle.open;
    qfacturasiva.open;
    facturas.Refresh;
    facturasdetalle.Refresh;
    qfacturasiva.Refresh;
    paneldatos.Enabled:=false;
end;

procedure Tffacturas.btfimportarClick(Sender: TObject);
var idfactura,serie:string;
begin
    fseleccionaralbaranes := Tfseleccionaralbaranes.Create(nil);
    try
      fseleccionaralbaranes.showmodal();
    finally
      fseleccionaralbaranes.Free;
    end;
    idfactura:=facturasid.AsString;
    serie:=facturasserie.AsString;
    facturas.Refresh;
    facturas.Locate('serie;id',vararrayof([serie,idfactura]),[locaseinsensitive]);
    qfacturasiva.refresh;
end;

procedure Tffacturas.btfimprimirClick(Sender: TObject);
var filtro,documento,formapago:string;
    desg_ivas,tipo,base,iva:string;
    x:integer;
    fecha:tdate;
begin
    if listaimpresion.ItemIndex=0 then
    begin
       facturasdetalle.Close;
       facturasdetalle.SQL.Clear;
       facturasdetalle.SQL.Add('select idempresa,idfactura,sum(cantidad) as cantidad,precio,descuento,sum(base) as base,descripcion,cal,sum(bultos) as bultos,tipoiva,sum(iva) as iva,sum(total) as total,id,'+''''''+' as idarticulo,sum(totaldescuento) as totaldescuento,'+''''''+' as lote,serie,idalbaran ');
       facturasdetalle.SQL.Add(',coste_transporte,coste_otros,coste_comision from facturas_detalles group by idempresa,idfactura,descripcion,cal,precio,idalbaran order by id');
       facturasdetalle.open;
    end;
    if listaimpresion.ItemIndex=1 then
    begin
       facturasdetalle.Close;
       facturasdetalle.SQL.Clear;
       facturasdetalle.SQL.Add('select * from facturas_detalles order by id');
       facturasdetalle.open;
    end;
    filtro:='id=';
    filtro:=filtro+facturasid.asstring;
    filtro:=filtro+' and serie='+''''+ facturasserie.AsString+'''';
    documento:=qseriesimp_factura.asstring;
    facturas.Filter:=filtro;
    facturas.filtered:=true;
    fecha:=facturasfecha.AsDateTime;
    fecha:=fecha+qformaspagodias.asinteger;
    formapago:='FORMA DE PAGO: '+qformaspagodescripcion.AsString+' FECHA DE VENCIMIENTO EL '+DATETOSTR(FECHA);
    qfacturasiva.First;
    desg_ivas:='';
    while not qfacturasiva.Eof do
    begin
    if qfacturasivabase.AsFloat>0 then
      begin
         tipo:=format('%2d',[qfacturasivatipo.asinteger]);
         base:=format('%10.2f',[qfacturasivabase.Asfloat]);
         iva:=format('%8.2f',[qfacturasivaiva.asfloat]);
         desg_ivas:=desg_ivas+tipo+base+iva+' ';
      end;
      qfacturasiva.Next;
    end;
    inffactura.Datasource:=dsfacturas;
    infdetallefactura.Datasource:=dsfacturasdetalle;
    inffacturaivas.Datasource:=dsqfacturasiva;
    informe.Report.Clear;
    informe.LoadFromFile('c:\agrigest\informes\'+documento+'.fr3');
    informe.Variables.Variables['FORMAPAGO']:=QUOTEDSTR(formapago);
    informe.Variables.Variables['DESGIVAS']:=QUOTEDSTR(desg_ivas);

    informe.ShowReport();
    informe.Clear;
//    informe.Variables.Variables['TITULO']:=QUOTEDSTR(panel100.Caption);
    facturas.filtered:=false;

end;

procedure Tffacturas.btfmodificarClick(Sender: TObject);
begin
    paneldatos.Enabled:=true;
    facturas.Edit;
    qclientes.Close;
    qclientes.SQL.Clear;
    qclientes.SQL.Add('select * from clientes order by nombre');
    qclientes.open;
    qdestinos.Close;
    qdestinos.SQL.Clear;
    qdestinos.SQL.Add('select * from clientes_destinos order by descripcion');
    qdestinos.open;
end;

procedure Tffacturas.btacumuladosClick(Sender: TObject);
var dia,mes,anyo:word;
    filtro,filtro2,tdesde,thasta:string;
begin
    decodedate(fdesde.Date,anyo,mes,dia);
    tdesde:=''''+floattostr(anyo)+'/'+floattostr(mes)+'/'+floattostr(dia)+'''';
    decodedate(fhasta.Date,anyo,mes,dia);
    thasta:=''''+floattostr(anyo)+'/'+floattostr(mes)+'/'+floattostr(dia)+'''';
    filtro:=' where fecha>='+tdesde+' and fecha<='+thasta;
    if (combolistcliente.Text<>'') and (combolistcliente.Text<>' TODOS') then
    begin
       filtro:=filtro+' and nif='+''''+listaclientesnif.AsString+'''';
    end;
    if (combolistdestinos.Text<>'') and (combolistdestinos.Text<>' TODOS')then
    begin
       filtro:=filtro+' and nomdestino='+''''+listadestinosnomdestino.AsString+'''';
    end;
    filtro:=filtro+' group by idcliente order by nomcliente';
    facturasacumuladas.Close;
    facturasacumuladas.SQL.Clear;
    facturasacumuladas.SQL.Add('select idempresa,idcliente,nif,nomcliente,sum(total) from facturas '+filtro);
    facturasacumuladas.Open;
    dbgridacumulados.BringToFront;
    dbgrid6.Visible:=false;
    dbgridacumulados.Visible:=true;


end;

procedure Tffacturas.btfanteriorClick(Sender: TObject);
begin
    facturas.Next;
end;

procedure Tffacturas.btfborrarClick(Sender: TObject);
begin
    facturasdetalle.open;
    if facturas.recordcount>0 then
    begin
        facturas.Delete;
        facturasdetalle.Refresh;
        qalbaranes.Refresh;
        qalbaranes2.Refresh;
        qalbaranesdetalle.Refresh;
        qalbaranesdetalle2.Refresh;
        qfacturasiva.refresh;
    end;
end;

procedure Tffacturas.btfnuevoClick(Sender: TObject);
begin
    paneldatos.Enabled:=true;
    comboseries.SetFocus;
    comboseries.KeyValue:=qseriesid.Asstring;
    //fechaalbaran.Date:=date;

    facturas.Append;
    facturasidempresa.Value:=dm.qempresasid.AsInteger;
    qclientes.Close;
    qclientes.SQL.Clear;
    qclientes.SQL.Add('select * from clientes order by nombre');
    qclientes.open;
    qdestinos.Close;
    qdestinos.SQL.Clear;
    qdestinos.SQL.Add('select * from clientes_destinos order by descripcion');
    qdestinos.open;
    facturasdetalle.Close;
    qfacturasiva.close;
    facturasfecha.Value:=date;
end;

procedure Tffacturas.btfsiguienteClick(Sender: TObject);
begin
    facturas.Prior;
end;

procedure Tffacturas.Button16Click(Sender: TObject);
var serie,id:string;
begin
    if facturasdetalle.recordcount>0 then
    begin
        serie:=facturasserie.AsString;
        id:=facturasid.AsString;
        facturasdetalle.Delete;
//1        facturas.Refresh;
//        facturas.Locate('serie;id',vararrayof([serie,id]),[locaseinsensitive,lopartialkey]);
        qfacturasiva.Refresh;
    end;
end;

procedure Tffacturas.Button1Click(Sender: TObject);
var precio,serie,id:string;
    i:integer;
begin
   serie:=facturasserie.AsString;
   id:=facturasid.AsString;
   if facturasdetalle.RecordCount>0 then
   begin
    precio:=stringreplace((edit1.Text),'.',',',[rfreplaceall]);
    if dbgrid5.Selectedrows.Count>0 then
    begin
      for i := 0 to dbgrid5.Selectedrows.Count - 1 do
      begin
         facturasdetalle.GotoBookmark (pointer (dbgrid5.selectedrows[i]));
         facturasdetalle.Edit;
         facturasdetalleprecio.Value:=strtofloat(precio);
         facturasdetalle.Post;
      end;
    end else
    begin
     facturasdetalle.first;
     while not facturasdetalle.Eof do
     begin
       if facturasdetallecantidad.AsFloat>0 then
       begin
         facturasdetalle.Edit;
         facturasdetalleprecio.Value:=strtofloat(precio);
         facturasdetalle.Post;
       end;
       facturasdetalle.Next;
     end;
    end;
   end;
   facturasdetalle.refresh;
   facturas.Refresh;
   facturas.Locate('serie,id',vararrayof([serie,id]),[locaseinsensitive]);

end;

procedure Tffacturas.Button2Click(Sender: TObject);
var id,codcomision,empresa,serie:string;
    coste_trans,cantidad,comision:real;
begin
   codcomision:=dm.qempresascodcomision.AsString;
   empresa:=facturasidempresa.AsString;
   serie:=facturasserie.AsString;
   id:=facturasid.AsString;
   facturasdetalle.Append;
   dbgrid5.Fields[0].Value:=codcomision;
   filtro:=facturasdetalleidarticulo.asstring;
   qarticulos.Close;
   qarticulos.Open;
   if qarticulos.RecordCount>0 then
   begin
     qtipos_iva.Open;
     facturasdetalledescripcion.value:=qarticulosdescripcion.AsString;
     if qclientesexento_iva.AsInteger=0 then facturasdetalletipoiva.value:=qtipos_ivatipo.Asfloat
      else facturasdetalletipoiva.value:=0;
   end;

   dbgrid5.Fields[6].Value:=-1;
   dbgrid5.Fields[7].Value:=facturasneto.AsFloat*(facturascomision.AsFloat/100);
   facturasdetalle.Post;
   qaux.Close;
   qaux.SQL.Clear;
   qaux.SQL.Add('select sum(cantidad),sum(total) from facturas_detalles where lote is not null and idempresa='+empresa+' and serie='+''''+serie+''''+' and idalbaran='+facturasid.asstring);
   qaux.Open;
   cantidad:=qaux.Fields[0].AsFloat;
   if (cantidad>0) and (facturascoste_transporte.AsFloat>0) then
      begin
        coste_trans:=facturascoste_transporte.AsFloat/cantidad;
        qaux.Close;
        qaux.SQL.Clear;
        qaux.SQL.Add('update facturas_detalles set coste_transporte=cantidad*'+stringreplace(floattostr(coste_trans),',','.',[rfreplaceall])+' where lote is not null and idempresa='+empresa+' and serie='+''''+serie+''''+' and idalbaran='+facturasid.asstring+' and idarticulo<>(select codcomision from empresa where id='+facturasidempresa.AsString+') and idarticulo<>(select codtransporte from empresa where id='+facturasidempresa.AsString+')');
        qaux.execsql;
      end;
      comision:=facturascomision.AsFloat/100;
      qaux.Close;
      qaux.SQL.Clear;
      qaux.SQL.Add('update facturas_detalles set coste_comision=total*'+stringreplace(floattostr(comision),',','.',[rfreplaceall])+' where idempresa='+empresa+' and serie='+''''+serie+''''+' and idalbaran='+facturasid.asstring+' and idarticulo<>(select codcomision from empresa where id='+facturasidempresa.AsString+') and idarticulo<>(select codtransporte from empresa where id='+facturasidempresa.AsString+')');
      qaux.execsql;

    facturas.Refresh;
    facturas.Locate('serie,id',vararrayof([serie,id]),[locaseinsensitive]);
    facturasdetalle.Refresh;
    facturasdetalle.Last;
    qfacturasiva.Refresh;

end;

procedure Tffacturas.Button3Click(Sender: TObject);
var  archivo:string;
     dia,mes,anyo:word;
     filtro,tdesde,thasta:string;
begin
    decodedate(fdesde.Date,anyo,mes,dia);
    tdesde:=''''+floattostr(anyo)+'/'+floattostr(mes)+'/'+floattostr(dia)+'''';
    decodedate(fhasta.Date,anyo,mes,dia);
    thasta:=''''+floattostr(anyo)+'/'+floattostr(mes)+'/'+floattostr(dia)+'''';
    filtro:=' where fecha>='+tdesde+' and fecha<='+thasta;
    if (combolistcliente.Text<>'') and (combolistcliente.Text<>' TODOS') then
    begin
       filtro:=filtro+' and nif='+''''+listaclientesnif.AsString+'''';
    end;
    if (combolistdestinos.Text<>'') and (combolistdestinos.Text<>' TODOS')then
    begin
       filtro:=filtro+' and nomdestino='+''''+listadestinosnomdestino.AsString+'''';
    end;
    filtro:=filtro+' 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.Close;
    qfacturasclientes.SQL.Clear;
    qfacturasclientes.SQL.Add('select * from facturas f,facturas_iva fi  '+filtro);
    qfacturasclientes.Open;
    savedialog1.FileName:='FACTURAS CLIENTES.xls';
    savedialog1.Execute();
    archivo:=savedialog1.FileName;
    try
    if dbgridacumulados.visible then     Exportaraexcel(archivo,'Acumulados',dbgridacumulados)
    else Exportaraexcel(archivo,'facturas',gridfacturasaexcel);
    finally
      showmessage('Los datos han sido exportados correctamente');
    end;

end;

procedure Tffacturas.Button5Click(Sender: TObject);
var id,codtransporte,empresa,serie:string;
    coste_trans,cantidad,comision:real;
begin
   id:=facturasid.AsString;
   empresa:=facturasidempresa.AsString;
   serie:=facturasserie.AsString;
   codtransporte:=dm.qempresascodtransporte.AsString;
   facturasdetalle.Append;
   dbgrid5.Fields[0].Value:=codtransporte;
   filtro:=facturasdetalleidarticulo.asstring;
   qarticulos.Close;
   qarticulos.Open;
   if qarticulos.RecordCount>0 then
   begin
     qtipos_iva.Open;
     facturasdetalledescripcion.value:=qarticulosdescripcion.AsString;
     if qclientesexento_iva.AsInteger=0 then facturasdetalletipoiva.value:=qtipos_ivatipo.Asfloat
      else facturasdetalletipoiva.value:=0;
   end;
   dbgrid5.Fields[6].Value:=-1;
   dbgrid5.Fields[7].Value:=facturascoste_transporte.AsFloat;
   facturasdetalle.Post;
   qaux.Close;
   qaux.SQL.Clear;
   qaux.SQL.Add('select sum(cantidad),sum(total) from facturas_detalles where lote is not null and idempresa='+empresa+' and serie='+''''+serie+''''+' and idalbaran='+facturasid.asstring);
   qaux.Open;
   cantidad:=qaux.Fields[0].AsFloat;

   if (cantidad>0) and (facturascoste_transporte.AsFloat>0) then
      begin
        coste_trans:=facturascoste_transporte.AsFloat/cantidad;

        qaux.Close;
        qaux.SQL.Clear;
        qaux.SQL.Add('update facturas_detalles set coste_transporte=cantidad*'+stringreplace(floattostr(coste_trans),',','.',[rfreplaceall])+' where lote is not null and idempresa='+empresa+' and serie='+''''+serie+''''+' and idalbaran='+facturasid.asstring+' and idarticulo<>(select codcomision from empresa where id='+facturasidempresa.AsString+') and idarticulo<>(select codtransporte from empresa where id='+facturasidempresa.AsString+')');
        qaux.execsql;

      end;
      comision:=facturascomision.AsFloat/100;
      qaux.Close;
      qaux.SQL.Clear;
      qaux.SQL.Add('update facturas_detalles set coste_comision=total*'+stringreplace(floattostr(comision),',','.',[rfreplaceall])+' where idempresa='+empresa+' and serie='+''''+serie+''''+' and idalbaran='+facturasid.asstring+' and idarticulo<>(select codcomision from empresa where id='+facturasidempresa.AsString+') and idarticulo<>(select codtransporte from empresa where id='+facturasidempresa.AsString+')');
      qaux.execsql;

    facturas.Refresh;
    facturas.Locate('serie,id',vararrayof([serie,id]),[locaseinsensitive]);
    facturasdetalle.Refresh;
    facturasdetalle.Last;
    qfacturasiva.Refresh;

end;

procedure Tffacturas.Button7Click(Sender: TObject);
begin
    combolistcliente.KeyValue:=null;
    btfiltrar.click;
end;

procedure Tffacturas.Button8Click(Sender: TObject);
begin
    combolistdestinos.KeyValue:=null;
    btfiltrar.click;
end;

procedure Tffacturas.Button9Click(Sender: TObject);
var clicuenta,clititulo,clinif,clidomicilio,clipoblacion,cliprovincia,clicodpost:string;
    dasiento,dfecha,dcuenta,dcontrapartida,dconcepto,dfactura,dfecha_recep,diva,drec_equiv,ddocumento,dserie,daccion,doperacioniva,dorigen,dtipoapunte,dimpdebe,dimphaber,dbaseimpo:string;
    archivo,tdia,tmes,tanyo:string;
    fichero:textfile;
    x:integer;
    dia,mes,anyo:word;
begin

////////////////////   exportanto fichero subcuentas ////////////////////
    qclientes_conta.open;
    qclientes_conta.First;
    qaux.Close;
    qaux.SQL.Clear;
    qaux.SQL.Add('delete from conta_subcta');
    qaux.ExecSQL;
    qconta_subcta.close;
    qconta_subcta.open;
    while not qclientes_conta.Eof do
    begin

      qconta_subcta.Append;
      clicuenta:=qclientes_contaccontable.AsString;
      clicuenta:=clicuenta+StringOfChar(' ',12-length(clicuenta));
      qconta_subctacuenta.Value:=clicuenta;
      clititulo:=qclientes_contanombre.AsString;
      clititulo:=clititulo+StringOfChar(' ',40-length(clititulo));
      qconta_subctatitulo.value:=clititulo;
      clinif:=qclientes_contanif.AsString;
      clinif:=clinif+StringOfChar(' ',15-length(clinif));
      qconta_subctanif.value:=clinif;

      clidomicilio:=qclientes_contadireccion.AsString;
      Delete( clidomicilio, 35,clidomicilio.Length-35 );
      clidomicilio:=clidomicilio+StringOfChar(' ',35-length(clidomicilio));
      qconta_subctadomicilio.value:=clidomicilio;
      clipoblacion:=qclientes_contapoblacion.AsString;
      clipoblacion:=clipoblacion+StringOfChar(' ',25-length(clipoblacion));
      qconta_subctapoblacion.value:=clipoblacion;
      cliprovincia:=qclientes_contaprovincia.AsString;
      cliprovincia:=cliprovincia+StringOfChar(' ',20-length(cliprovincia));
      qconta_subctaprovincia.value:=cliprovincia;
      clicodpost:=qclientes_contacodpost.AsString;
      clicodpost:=clicodpost+StringOfChar(' ',7-length(clicodpost));
      qconta_subctacodpost.value:=clicodpost;
      qconta_subcta.Post;
      qclientes_conta.Next;
    end;
      qconta_subcta.Append;
      clicuenta:='70000000';
      clicuenta:=clicuenta+StringOfChar(' ',12-length(clicuenta));
      qconta_subctacuenta.Value:=clicuenta;
      clititulo:='';
      clititulo:=clititulo+StringOfChar(' ',40-length(clititulo));
      qconta_subctatitulo.value:=clititulo;
      clinif:='';
      clinif:=clinif+StringOfChar(' ',15-length(clinif));
      qconta_subctanif.value:=clinif;
      clidomicilio:='';
      Delete( clidomicilio, 35,clidomicilio.Length-35 );
      clidomicilio:=clidomicilio+StringOfChar(' ',35-length(clidomicilio));
      qconta_subctadomicilio.value:=clidomicilio;
      clipoblacion:='';//qclientes_contapoblacion.AsString;
      clipoblacion:=clipoblacion+StringOfChar(' ',25-length(clipoblacion));
      qconta_subctapoblacion.value:=clipoblacion;
      cliprovincia:='';//qclientes_contaprovincia.AsString;
      cliprovincia:=cliprovincia+StringOfChar(' ',20-length(cliprovincia));
      qconta_subctaprovincia.value:=cliprovincia;
      clicodpost:='';//qclientes_contacodpost.AsString;
      clicodpost:=clicodpost+StringOfChar(' ',7-length(clicodpost));
      qconta_subctacodpost.value:=clicodpost;
      qconta_subcta.Post;
      qconta_subcta.Append;
      clicuenta:='47701000';
      clicuenta:=clicuenta+StringOfChar(' ',12-length(clicuenta));
      qconta_subctacuenta.Value:=clicuenta;
      clititulo:='';
      clititulo:=clititulo+StringOfChar(' ',40-length(clititulo));
      qconta_subctatitulo.value:=clititulo;
      clinif:='';
      clinif:=clinif+StringOfChar(' ',15-length(clinif));
      qconta_subctanif.value:=clinif;
      clidomicilio:='';
      Delete( clidomicilio, 35,clidomicilio.Length-35 );
      clidomicilio:=clidomicilio+StringOfChar(' ',35-length(clidomicilio));
      qconta_subctadomicilio.value:=clidomicilio;
      clipoblacion:='';//qclientes_contapoblacion.AsString;
      clipoblacion:=clipoblacion+StringOfChar(' ',25-length(clipoblacion));
      qconta_subctapoblacion.value:=clipoblacion;
      cliprovincia:='';//qclientes_contaprovincia.AsString;
      cliprovincia:=cliprovincia+StringOfChar(' ',20-length(cliprovincia));
      qconta_subctaprovincia.value:=cliprovincia;
      clicodpost:='';//qclientes_contacodpost.AsString;
      clicodpost:=clicodpost+StringOfChar(' ',7-length(clicodpost));
      qconta_subctacodpost.value:=clicodpost;
      qconta_subcta.Post;

      qconta_subcta.Append;
      clicuenta:='47700004';
      clicuenta:=clicuenta+StringOfChar(' ',12-length(clicuenta));
      qconta_subctacuenta.Value:=clicuenta;
      clititulo:='';
      clititulo:=clititulo+StringOfChar(' ',40-length(clititulo));
      qconta_subctatitulo.value:=clititulo;
      clinif:='';
      clinif:=clinif+StringOfChar(' ',15-length(clinif));
      qconta_subctanif.value:=clinif;
      clidomicilio:='';
      Delete( clidomicilio, 35,clidomicilio.Length-35 );
      clidomicilio:=clidomicilio+StringOfChar(' ',35-length(clidomicilio));
      qconta_subctadomicilio.value:=clidomicilio;
      clipoblacion:='';//qclientes_contapoblacion.AsString;
      clipoblacion:=clipoblacion+StringOfChar(' ',25-length(clipoblacion));
      qconta_subctapoblacion.value:=clipoblacion;
      cliprovincia:='';//qclientes_contaprovincia.AsString;
      cliprovincia:=cliprovincia+StringOfChar(' ',20-length(cliprovincia));
      qconta_subctaprovincia.value:=cliprovincia;
      clicodpost:='';//qclientes_contacodpost.AsString;
      clicodpost:=clicodpost+StringOfChar(' ',7-length(clicodpost));
      qconta_subctacodpost.value:=clicodpost;
      qconta_subcta.Post;
      qconta_subcta.Append;
      clicuenta:='47700010';
      clicuenta:=clicuenta+StringOfChar(' ',12-length(clicuenta));
      qconta_subctacuenta.Value:=clicuenta;
      clititulo:='';
      clititulo:=clititulo+StringOfChar(' ',40-length(clititulo));
      qconta_subctatitulo.value:=clititulo;
      clinif:='';
      clinif:=clinif+StringOfChar(' ',15-length(clinif));
      qconta_subctanif.value:=clinif;
      clidomicilio:='';
      Delete( clidomicilio, 35,clidomicilio.Length-35 );
      clidomicilio:=clidomicilio+StringOfChar(' ',35-length(clidomicilio));
      qconta_subctadomicilio.value:=clidomicilio;
      clipoblacion:='';//qclientes_contapoblacion.AsString;
      clipoblacion:=clipoblacion+StringOfChar(' ',25-length(clipoblacion));
      qconta_subctapoblacion.value:=clipoblacion;
      cliprovincia:='';//qclientes_contaprovincia.AsString;
      cliprovincia:=cliprovincia+StringOfChar(' ',20-length(cliprovincia));
      qconta_subctaprovincia.value:=cliprovincia;
      clicodpost:='';//qclientes_contacodpost.AsString;
      clicodpost:=clicodpost+StringOfChar(' ',7-length(clicodpost));
      qconta_subctacodpost.value:=clicodpost;
      qconta_subcta.Post;
      qconta_subcta.Append;
      clicuenta:='47700021';
      clicuenta:=clicuenta+StringOfChar(' ',12-length(clicuenta));
      qconta_subctacuenta.Value:=clicuenta;
      clititulo:='';
      clititulo:=clititulo+StringOfChar(' ',40-length(clititulo));
      qconta_subctatitulo.value:=clititulo;
      clinif:='';
      clinif:=clinif+StringOfChar(' ',15-length(clinif));
      qconta_subctanif.value:=clinif;
      clidomicilio:='';
      Delete( clidomicilio, 35,clidomicilio.Length-35 );
      clidomicilio:=clidomicilio+StringOfChar(' ',35-length(clidomicilio));
      qconta_subctadomicilio.value:=clidomicilio;
      clipoblacion:='';//qclientes_contapoblacion.AsString;
      clipoblacion:=clipoblacion+StringOfChar(' ',25-length(clipoblacion));
      qconta_subctapoblacion.value:=clipoblacion;
      cliprovincia:='';//qclientes_contaprovincia.AsString;
      cliprovincia:=cliprovincia+StringOfChar(' ',20-length(cliprovincia));
      qconta_subctaprovincia.value:=cliprovincia;
      clicodpost:='';//qclientes_contacodpost.AsString;
      clicodpost:=clicodpost+StringOfChar(' ',7-length(clicodpost));
      qconta_subctacodpost.value:=clicodpost;
      qconta_subcta.Post;

    savedialog1.FileName:='subcta.txt';
    savedialog1.Execute();
    archivo:=savedialog1.FileName;
    try
    assignfile(fichero,archivo);
    rewrite(fichero);
    qconta_subcta.First;
    while not qconta_subcta.Eof do
    begin
      writeln(fichero,qconta_subctacuenta.AsString+qconta_subctatitulo.asstring+qconta_subctanif.asstring+qconta_subctadomicilio.asstring+qconta_subctapoblacion.asstring+qconta_subctaprovincia.asstring+qconta_subctacodpost.asstring+qconta_subctaint1.asstring);
      qconta_subcta.Next;
    end;
    finally
      closefile(fichero);
      showmessage('Los datos han sido exportados correctamente');
    end;
////////////////////   exportanto fichero diario ////////////////////
    facturas.First;
    qaux.Close;
    qaux.SQL.Clear;
    qaux.SQL.Add('delete from conta_diario');
    qaux.ExecSQL;
    qconta_diario.close;
    qconta_diario.open;
    x:=1;
    while not facturas.Eof do
    begin
      qaux.Close;
      qaux.SQL.Clear;
      qaux.SQL.Add('select exento_iva from clientes where id='+facturasidcliente.asstring);
      qaux.Open;
      if qaux.Fields[0].AsInteger=0 then  dorigen:='N' else dorigen:='I';;
      qconta_diario.Append;
      dasiento:=inttostr(x);
      dasiento:=StringOfChar(' ',6-length(dasiento))+dasiento;
      qconta_diarioasiento.Value:=dasiento;
      decodedate(facturasfecha.AsDateTime,anyo,mes,dia);
      tdia:=floattostr(dia);
      tdia:=StringOfChar('0',2-length(tdia))+tdia;
      tmes:=floattostr(mes);
      tmes:=StringOfChar('0',2-length(tmes))+tmes;
      tanyo:=floattostr(anyo);
      tanyo:=StringOfChar('0',4-length(tanyo))+tanyo;

      dfecha:=tanyo+tmes+tdia;
      dfecha:=dfecha+StringOfChar(' ',8-length(dfecha));
      qconta_diariofecha.Value:=dfecha;

      qaux.Close;
      qaux.SQL.Clear;
      qaux.SQL.Add('select ccontable from clientes where id='+facturasidcliente.asstring);
      qaux.Open;

      dcuenta:=qaux.Fields[0].AsString;
      dcuenta:=dcuenta+StringOfChar(' ',12-length(dcuenta));
      qconta_diariocuenta.Value:=dcuenta;

      dcontrapartida:='';
      dcontrapartida:=dcontrapartida+StringOfChar(' ',12-length(dcontrapartida));
      qconta_diariocontrapartida.Value:=dcontrapartida;

      decodedate(facturasfecha.AsDateTime,anyo,mes,dia);
      tdia:=floattostr(dia);
      tdia:=StringOfChar('0',2-length(tdia))+tdia;
      tmes:=floattostr(mes);
      tmes:=StringOfChar('0',2-length(tmes))+tmes;
      tanyo:=floattostr(anyo);
      tanyo:=StringOfChar('0',4-length(tanyo))+tanyo;

      dconcepto:='F.'+facturasserie.asstring+'/'+facturasid.AsString+' '+tdia+'-'+tmes+' '+qaux.Fields[0].AsString;
      dconcepto:=dconcepto+StringOfChar(' ',25-length(dconcepto));
      qconta_diarioconcepto.Value:=dconcepto;

      dfactura:=facturasid.AsString;
      dfactura:=stringofchar(' ',8-length(dfactura))+dfactura;
      qconta_diariofactura.Value:=dfactura;

      dfecha_recep:='';
      dfecha_recep:=dfecha_recep+stringofchar(' ',8-length(dfecha_recep));
      qconta_diariofecha_recep.Value:=dfecha_recep;

      diva:='0.00';
      diva:=stringofchar(' ',5-length(diva))+diva;
      qconta_diarioiva.Value:=diva;

      drec_equiv:='0.00';
      drec_equiv:=stringofchar(' ',5-length(drec_equiv))+drec_equiv;
      qconta_diariorec_equiv.Value:=drec_equiv;

      ddocumento:=facturasid.AsString;
      ddocumento:=stringofchar('0',10-length(ddocumento))+ddocumento;
      qconta_diariodocumento.Value:=ddocumento;

      dserie:='A';
      dserie:=dserie+stringofchar(' ',1-length(dserie));
      qconta_diarioserie.Value:=dserie;

      daccion:='A';
      daccion:=daccion+stringofchar(' ',1-length(daccion));
      qconta_diarioaccion.Value:=daccion;

      doperacioniva:='R';
      doperacioniva:=doperacioniva+stringofchar(' ',1-length(doperacioniva));
      qconta_diariooperacioniva.Value:=doperacioniva;


      dorigen:=dorigen+stringofchar(' ',1-length(dorigen));
      qconta_diarioorigen.Value:=dorigen;

      dtipoapunte:=' ';
      dtipoapunte:=dtipoapunte+stringofchar(' ',1-length(dtipoapunte));
      qconta_diariotipoapunte.Value:=dtipoapunte;

      dimpdebe:=stringreplace(format('%5.2f',[facturastotal.asfloat]),',','.',[rfreplaceall]);
      dimpdebe:=stringofchar(' ',16-length(dimpdebe))+dimpdebe;
      qconta_diarioimpdebe.Value:=dimpdebe;

      dimphaber:='0.00';
      dimphaber:=stringofchar(' ',16-length(dimphaber))+dimphaber;
      qconta_diarioimphaber.Value:=dimphaber;

      dbaseimpo:=stringreplace(format('%5.2f',[facturasneto.asfloat]),',','.',[rfreplaceall]);//'0.00';
      dbaseimpo:=stringofchar(' ',16-length(dbaseimpo))+dbaseimpo;
      qconta_diariobaseimpo.Value:=dbaseimpo;


      qconta_diario.Post;
////  inserto la contrapartida
      qconta_diario.Append;

      dasiento:=inttostr(x);
      dasiento:=StringOfChar(' ',6-length(dasiento))+dasiento;
      qconta_diarioasiento.Value:=dasiento;
      decodedate(facturasfecha.AsDateTime,anyo,mes,dia);
      tdia:=floattostr(dia);
      tdia:=StringOfChar('0',2-length(tdia))+tdia;
      tmes:=floattostr(mes);
      tmes:=StringOfChar('0',2-length(tmes))+tmes;
      tanyo:=floattostr(anyo);
      tanyo:=StringOfChar('0',4-length(tanyo))+tanyo;

      dfecha:=tanyo+tmes+tdia;
      dfecha:=dfecha+StringOfChar(' ',8-length(dfecha));
      qconta_diariofecha.Value:=dfecha;

      qaux.Close;
      qaux.SQL.Clear;
      qaux.SQL.Add('select ccontable from clientes where id='+facturasidcliente.asstring);
      qaux.Open;

      dcuenta:='70000000';//qaux.Fields[0].AsString;
      dcuenta:=dcuenta+StringOfChar(' ',12-length(dcuenta));
      qconta_diariocuenta.Value:=dcuenta;

      dcontrapartida:=qaux.Fields[0].AsString;;
      dcontrapartida:=dcontrapartida+StringOfChar(' ',12-length(dcontrapartida));
      qconta_diariocontrapartida.Value:=dcontrapartida;

      decodedate(facturasfecha.AsDateTime,anyo,mes,dia);
      tdia:=floattostr(dia);
      tdia:=StringOfChar('0',2-length(tdia))+tdia;
      tmes:=floattostr(mes);
      tmes:=StringOfChar('0',2-length(tmes))+tmes;
      tanyo:=floattostr(anyo);
      tanyo:=StringOfChar('0',4-length(tanyo))+tanyo;

      dconcepto:='F.'+facturasserie.asstring+'/'+facturasid.AsString+' '+tdia+'-'+tmes+' '+qaux.Fields[0].AsString;
      dconcepto:=dconcepto+StringOfChar(' ',25-length(dconcepto));
      qconta_diarioconcepto.Value:=dconcepto;

      dfactura:=facturasid.AsString;
      dfactura:=stringofchar(' ',8-length(dfactura))+dfactura;
      qconta_diariofactura.Value:=dfactura;

      dfecha_recep:='';
      dfecha_recep:=dfecha_recep+stringofchar(' ',8-length(dfecha_recep));
      qconta_diariofecha_recep.Value:=dfecha_recep;

      diva:='0.00';
      diva:=stringofchar(' ',5-length(diva))+diva;
      qconta_diarioiva.Value:=diva;

      drec_equiv:='0.00';
      drec_equiv:=stringofchar(' ',5-length(drec_equiv))+drec_equiv;
      qconta_diariorec_equiv.Value:=drec_equiv;

      ddocumento:=facturasid.AsString;
      ddocumento:=stringofchar('0',10-length(ddocumento))+ddocumento;
      qconta_diariodocumento.Value:=ddocumento;

      dserie:='A';
      dserie:=dserie+stringofchar(' ',1-length(dserie));
      qconta_diarioserie.Value:=dserie;

      daccion:='A';
      daccion:=daccion+stringofchar(' ',1-length(daccion));
      qconta_diarioaccion.Value:=daccion;

      doperacioniva:='R';
      doperacioniva:=doperacioniva+stringofchar(' ',1-length(doperacioniva));
      qconta_diariooperacioniva.Value:=doperacioniva;

      dorigen:=dorigen+stringofchar(' ',1-length(dorigen));
      qconta_diarioorigen.Value:=dorigen;

      dtipoapunte:='V';
      dtipoapunte:=dtipoapunte+stringofchar(' ',1-length(dtipoapunte));
      qconta_diariotipoapunte.Value:=dtipoapunte;

      dimpdebe:='0.00';//facturastotal.asstring;
      dimpdebe:=stringofchar(' ',16-length(dimpdebe))+dimpdebe;
      qconta_diarioimpdebe.Value:=dimpdebe;

      dimphaber:=stringreplace(format('%16.2f',[(facturastotal.asfloat-facturastotaliva.asfloat)]),',','.',[rfreplaceall]);//'0.00';
      dimphaber:=stringofchar(' ',16-length(dimphaber))+dimphaber;
      qconta_diarioimphaber.Value:=dimphaber;

      dbaseimpo:=stringreplace(format('%5.2f',[facturasneto.asfloat]),',','.',[rfreplaceall]);//'0.00';
      dbaseimpo:=stringofchar(' ',16-length(dbaseimpo))+dbaseimpo;
      qconta_diariobaseimpo.Value:=dbaseimpo;


      qconta_diario.Post;
//// inserto los apuntes de iva

      qaux2.close;
      qaux2.sql.clear;
      qaux2.sql.add('select * from facturas_iva where ide=+'+facturasidempresa.asstring+' and serie='+''''+facturasserie.AsString+''''+' and idfactura='+facturasid.AsString+' order by tipo');
      qaux2.Open;
      if qaux2.RecordCount>0 then
      begin
          while not qaux2.Eof do
          begin
          if qaux2base.AsInteger>0 then
              begin
              qconta_diario.Append;
              dasiento:=inttostr(x);
              dasiento:=StringOfChar(' ',6-length(dasiento))+dasiento;
              qconta_diarioasiento.Value:=dasiento;
              decodedate(facturasfecha.AsDateTime,anyo,mes,dia);
              tdia:=floattostr(dia);
              tdia:=StringOfChar('0',2-length(tdia))+tdia;
              tmes:=floattostr(mes);
              tmes:=StringOfChar('0',2-length(tmes))+tmes;
              tanyo:=floattostr(anyo);
              tanyo:=StringOfChar('0',4-length(tanyo))+tanyo;

              dfecha:=tanyo+tmes+tdia;
              dfecha:=dfecha+StringOfChar(' ',8-length(dfecha));
              qconta_diariofecha.Value:=dfecha;

              qaux.Close;
              qaux.SQL.Clear;
              qaux.SQL.Add('select ccontable from clientes where id='+facturasidcliente.asstring);
              qaux.Open;
              if qaux2tipo.AsInteger=0 then dcuenta:='47701000';//qaux.Fields[0].AsString;
              if qaux2tipo.AsInteger=4 then dcuenta:='47700004';//qaux.Fields[0].AsString;
              if qaux2tipo.AsInteger=10 then dcuenta:='47700010';//qaux.Fields[0].AsString;
              if qaux2tipo.AsInteger=21 then dcuenta:='47700021';//qaux.Fields[0].AsString;

              dcuenta:=dcuenta+StringOfChar(' ',12-length(dcuenta));
              qconta_diariocuenta.Value:=dcuenta;

              dcontrapartida:=qaux.Fields[0].AsString;;
              dcontrapartida:=dcontrapartida+StringOfChar(' ',12-length(dcontrapartida));
              qconta_diariocontrapartida.Value:=dcontrapartida;

              decodedate(facturasfecha.AsDateTime,anyo,mes,dia);
              tdia:=floattostr(dia);
              tdia:=StringOfChar('0',2-length(tdia))+tdia;
              tmes:=floattostr(mes);
              tmes:=StringOfChar('0',2-length(tmes))+tmes;
              tanyo:=floattostr(anyo);
              tanyo:=StringOfChar('0',4-length(tanyo))+tanyo;

              dconcepto:='F.'+facturasserie.asstring+'/'+facturasid.AsString+' '+tdia+'-'+tmes+' '+qaux.Fields[0].AsString;
              dconcepto:=dconcepto+StringOfChar(' ',25-length(dconcepto));
              qconta_diarioconcepto.Value:=dconcepto;

              dfactura:=facturasid.AsString;
              dfactura:=stringofchar(' ',8-length(dfactura))+dfactura;
              qconta_diariofactura.Value:=dfactura;

              dfecha_recep:='';
              dfecha_recep:=dfecha_recep+stringofchar(' ',8-length(dfecha_recep));
              qconta_diariofecha_recep.Value:=dfecha_recep;

              diva:=stringreplace(format('%5.2f',[qaux2tipo.asfloat]),',','.',[rfreplaceall]);//'0.00';
              diva:=stringofchar(' ',5-length(diva))+diva;
              qconta_diarioiva.Value:=diva;

              drec_equiv:='0.00';
              drec_equiv:=stringofchar(' ',5-length(drec_equiv))+drec_equiv;
              qconta_diariorec_equiv.Value:=drec_equiv;

              ddocumento:=facturasid.AsString;
              ddocumento:=stringofchar('0',10-length(ddocumento))+ddocumento;
              qconta_diariodocumento.Value:=ddocumento;

              dserie:='A';
              dserie:=dserie+stringofchar(' ',1-length(dserie));
              qconta_diarioserie.Value:=dserie;

              daccion:='A';
              daccion:=daccion+stringofchar(' ',1-length(daccion));
              qconta_diarioaccion.Value:=daccion;

              doperacioniva:='R';
              doperacioniva:=doperacioniva+stringofchar(' ',1-length(doperacioniva));
              qconta_diariooperacioniva.Value:=doperacioniva;

              dorigen:=dorigen+stringofchar(' ',1-length(dorigen));
              qconta_diarioorigen.Value:=dorigen;

              dtipoapunte:='I';
              dtipoapunte:=dtipoapunte+stringofchar(' ',1-length(dtipoapunte));
              qconta_diariotipoapunte.Value:=dtipoapunte;

              dimpdebe:='0.00';//facturastotal.asstring;
              dimpdebe:=stringofchar(' ',16-length(dimpdebe))+dimpdebe;
              qconta_diarioimpdebe.Value:=dimpdebe;

              dimphaber:=stringreplace(format('%16.2f',[qaux2iva.asfloat]),',','.',[rfreplaceall]);//'0.00';
              dimphaber:=stringofchar(' ',16-length(dimphaber))+dimphaber;
              qconta_diarioimphaber.Value:=dimphaber;

              dbaseimpo:=stringreplace(format('%16.2f',[qaux2base.asfloat]),',','.',[rfreplaceall]);//'0.00';
              dbaseimpo:=stringofchar(' ',16-length(dbaseimpo))+dbaseimpo;
              qconta_diariobaseimpo.Value:=dbaseimpo;
              qconta_diario.post;
          end;
             qaux2.Next;
          end;
      end;

      facturas.Next;
      x:=x+1;
    end;
    savedialog1.FileName:='diario.txt';
    savedialog1.Execute();
    archivo:=savedialog1.FileName;
    try
    Deletefile(archivo);
    assignfile(fichero,archivo);
    rewrite(fichero);
    qconta_diario.First;
    while not qconta_diario.Eof do
    begin
      writeln(fichero,qconta_diarioasiento.asstring,qconta_diariofecha.asstring,qconta_diariocuenta.asstring,qconta_diariocontrapartida.asstring,qconta_diariointerno1.asstring,qconta_diarioconcepto.asstring,qconta_diariointerno2.asstring,qconta_diariofactura.asstring,qconta_diariointerno3.asstring,qconta_diariofecha_recep.asstring,qconta_diariointerno4.asstring,qconta_diarioiva.asstring,qconta_diariorec_equiv.asstring,qconta_diariodocumento.asstring,qconta_diariointerno5.asstring,qconta_diariointerno6.asstring,qconta_diariointerno7.asstring,qconta_diariointerno8.asstring,qconta_diariointerno9.asstring,qconta_diarioserie.asstring,qconta_diarioaccion.asstring,qconta_diariooperacioniva.asstring,qconta_diarioorigen.asstring,qconta_diariotipoapunte.asstring,qconta_diariointerno10.asstring,qconta_diariointerno11.asstring,qconta_diariointerno12.asstring,qconta_diarioimpdebe.asstring,qconta_diarioimphaber.asstring,qconta_diariobaseimpo.asstring,qconta_diariointerno13.asstring);
      qconta_diario.Next;
    end;
    finally
      closefile(fichero);
      showmessage('Los datos han sido exportados correctamente');
    end;

end;

procedure Tffacturas.btfiltrarClick(Sender: TObject);
var dia,mes,anyo:word;
    filtro,filtro2,tdesde,thasta:string;
begin
    decodedate(fdesde.Date,anyo,mes,dia);
    tdesde:=''''+floattostr(anyo)+'/'+floattostr(mes)+'/'+floattostr(dia)+'''';
    decodedate(fhasta.Date,anyo,mes,dia);
    thasta:=''''+floattostr(anyo)+'/'+floattostr(mes)+'/'+floattostr(dia)+'''';
    filtro:=' where fecha>='+tdesde+' and fecha<='+thasta;
    if (combolistcliente.Text<>'') and (combolistcliente.Text<>' TODOS') then
    begin
       filtro:=filtro+' and nif='+''''+listaclientesnif.AsString+'''';
    end;
    if (combolistdestinos.Text<>'') and (combolistdestinos.Text<>' TODOS')then
    begin
       filtro:=filtro+' and nomdestino='+''''+listadestinosnomdestino.AsString+'''';
    end;
    filtro:=filtro+' order by serie desc,id desc';
    facturas.Close;
    facturas.SQL.Clear;
    facturas.SQL.Add('select * from facturas '+filtro);
    facturas.Open;
    dbgrid6.BringToFront;
    dbgrid6.Visible:=true;
    dbgridacumulados.Visible:=false;

end;

procedure Tffacturas.comboseriesCloseUp(Sender: TObject);
begin
    facturasid.value:=qseriesnum_factura.AsInteger;
end;

procedure Tffacturas.comboseriesEnter(Sender: TObject);
begin
    comboseries.DropDown;
end;

procedure Tffacturas.DBGrid5ColExit(Sender: TObject);
begin

  if facturasdetalle.State in [dsedit,dsinsert] then
  begin
    if dbgrid5.SelectedIndex=0 then
    begin
        filtro:=facturasdetalleidarticulo.asstring;
        qarticulos.Close;
        qarticulos.Open;
        if qarticulos.RecordCount>0 then
        begin
           qtipos_iva.Open;
           facturasdetalledescripcion.value:=qarticulosdescripcion.AsString;
           if qclientesexento_iva.AsInteger=0 then facturasdetalletipoiva.value:=qtipos_ivatipo.Asfloat
            else facturasdetalletipoiva.value:=0;
           qtipos_ivatipo.Asfloat;
        end;
    end;
  end;

end;

procedure Tffacturas.DBGrid5KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
    if (key=115) then
    begin
      fbuscararticulos := Tfbuscararticulos.Create(nil);
      try
        buscararticulos.padre:=facturas.Name;
        buscararticulos.filtro:=facturasdetalleidarticulo.AsString;
        fbuscararticulos.Edit1.Text:=facturasdetalleidarticulo.AsString;
        fbuscararticulos.showmodal();
      finally
        if facturasdetalle.State in [dsbrowse] then facturasdetalle.Edit;
        facturasdetalleidarticulo.Value:=fbuscararticulos.qarticuloscodigo.AsString;
        facturasdetalledescripcion.value:=fbuscararticulos.qarticulosdescripcion.AsString;
        facturasdetalletipoiva.value:=fbuscararticulos.qtipos_ivatipo.Asfloat;
        fbuscararticulos.Free;
      end;
    end;

end;

procedure Tffacturas.DBGrid6DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
    if facturascobrado.asinteger=0 then
    begin
        dbgrid6.Canvas.brush.Color := rojo;
    end;
    if facturascobrado.asinteger=1 then
    begin
        dbgrid6.Canvas.brush.Color := verde;
    end;

    dbgrid6.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

procedure Tffacturas.DBGrid6TitleClick(Column: TColumn);
var
  st:ZAbstractRODataset.TSortType;
begin
  st:=facturas.SortType;
  facturas.SortedFields:=Column.FieldName;
  If st = stAscending then facturas.SortType:=stDescending else facturas.SortType:=stAscending;
  dsfacturas.DataSet.First;

end;

procedure Tffacturas.comboclientesCloseUp(Sender: TObject);
begin
    facturasnomcliente.value:=qclientesnombre.Asstring;
    facturasnif.value:=qclientesnif.Asstring;
    facturasdireccion.value:=qclientesdireccion.Asstring;
    facturasprovincia.value:=qclientesprovincia.Asstring;
    facturaspoblacion.Value:=qclientespoblacion.AsString;
    facturascodpost.value:=qclientescodpost.Asstring;
    facturaspaiscliente.value:=qclientespais.Asstring;
    facturasidformapago.Value:=qclientesidformapago.asinteger;
    facturascomision.Value:=qclientescomision.asfloat;
end;

procedure Tffacturas.comboclientesEnter(Sender: TObject);
begin
   comboclientes.dropdown;
end;

procedure Tffacturas.combodestinosCloseUp(Sender: TObject);
begin
    facturasnomdestino.value:=qdestinosdescripcion.Asstring;
    facturasdirecciondestino.value:=qdestinosdireccion.Asstring;
    facturasprovinciadestino.value:=qdestinosprovincia.Asstring;
    facturaspoblaciondestino.Value:=qdestinospoblacion.AsString;
    facturascodpostdestino.value:=qdestinoscodpost.Asstring;
    facturaspaisdestino.value:=qdestinospais.Asstring;
end;

procedure Tffacturas.combodestinosEnter(Sender: TObject);
begin
    combodestinos.DropDown;
end;

procedure Tffacturas.dsfacturasDataChange(Sender: TObject; Field: TField);
begin
if (facturas.State in [dsbrowse]) and (facturas.recordcount>0) then
begin
    qalbaranes2.Close;
    qalbaranes2.SQL.Clear;
    qalbaranes2.SQL.Add('select * from albaranes where');
    qalbaranes2.SQL.Add(' idfactura='+facturasid.AsString+' and serie='+''''+facturasserie.AsString+''''+' and idempresa='+facturasidempresa.AsString+' order by serie desc, id desc');
    qalbaranes2.Open;
    qclientes.Close;
    qclientes.SQL.Clear;
    qclientes.SQL.Add('select * from clientes where idempresa='+facturasidempresa.asstring+' and id='+facturasidcliente.asstring);
    qclientes.open;
    qdestinos.Close;
    qdestinos.SQL.Clear;
    qdestinos.SQL.Add('select * from clientes_destinos where idempresa='+facturasidempresa.asstring+' and idcliente='+facturasidcliente.asstring+' and codigo='+''''+facturasiddestino.asstring+'''');
    qdestinos.open;
end;
end;
procedure Tffacturas.dsfacturasStateChange(Sender: TObject);
begin
    if facturas.State in [dsedit,dsinsert] then
    begin
        btfnuevo.Enabled:=false;
        btfmodificar.Enabled:=false;
        btfborrar.Enabled:=false;
        btfcancelar.Enabled:=true;
        btfguardar.Enabled:=true;
        btfanterior.Enabled:=false;
        btfsiguiente.Enabled:=false;
        btfimportar.Enabled:=false;
        btfimprimir.Enabled:=false;
        qdestinos.Close;
        qclientes.Close;
        qdestinos.LinkedFields:='Idempresa;idcliente';
        qdestinos.MasterFields:='Idempresa;id';
        qdestinos.Mastersource:=dsqclientes;
        qclientes.open;
        qdestinos.Open;
    end else
    begin
        btfnuevo.Enabled:=true;
        btfmodificar.Enabled:=true;
        btfborrar.Enabled:=true;
        btfcancelar.Enabled:=false;
        btfguardar.Enabled:=true;
        btfanterior.Enabled:=true;
        btfsiguiente.Enabled:=true;
        btfimportar.Enabled:=true;
        btfimprimir.Enabled:=true;
        qclientes.Close;
        qdestinos.Close;
        qdestinos.LinkedFields:='';
        qdestinos.MasterFields:='';
        qdestinos.Mastersource:=nil;
        qclientes.open;
        qdestinos.Open;

    end;
end;

procedure Tffacturas.facturasdetalleAfterPost(DataSet: TDataSet);
var serie,id,idfactura,pesobruto,pesoneto,pesonetoteorico,numpalets:string;
begin
    serie:=facturasserie.AsString;
    id:=facturasid.AsString;
    idfactura:=serie+'/'+id;
    qfacturasiva.Refresh;
      facturas.refresh;
      facturas.Locate('serie,id',vararrayof([serie,id]),[locaseinsensitive])



{
var serie,id:string;
begin
    serie:=facturasserie.AsString;
    id:=facturasid.AsString;
    facturas.Refresh;
    facturas.Locate('serie;id',vararrayof([serie,id]),[locaseinsensitive]);
    qfacturasiva.Refresh;
    if iddetalle<>'' then facturasdetalle.Locate('id',iddetalle,[locaseinsensitive]) else facturasdetalle.Last;
}
end;

procedure Tffacturas.facturasdetalleBeforePost(DataSet: TDataSet);
var iva,descuento:real;
begin
    if facturasdetalletipoiva.AsString='' then facturasdetalletipoiva.Value:=0;
    if facturasdetalledescuento.AsString='' then facturasdetalledescuento.Value:=0;
    facturasdetalleserie.Value:=facturasserie.Asstring;
    facturasdetallebase.Value:=roundto(facturasdetalleprecio.AsFloat*facturasdetallecantidad.AsFloat,-2);

    descuento:=roundto(facturasdetallebase.AsFloat*(facturasdetalledescuento.AsFloat/100),-2);
    facturasdetalletotaldescuento.value:=descuento;
    facturasdetalletotal.Value:=roundto(facturasdetallebase.Asfloat-descuento,-2);
    iva:=roundto(facturasdetalletotal.AsFloat*(facturasdetalletipoiva.AsFloat/100),-2);
    facturasdetalleiva.Value:=iva;
    if facturasdetalle.State in [dsedit] then iddetalle:=facturasdetalleid.AsString else iddetalle:='';


end;

procedure Tffacturas.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
    if (activecontrol is tdbgrid) then
    begin
        if Key = 13 then Key :=9;
    end;

end;

procedure Tffacturas.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 Tffacturas.FormShow(Sender: TObject);
begin
    dm.qempresas.Open;
    qseries.Close;
    qdestinos.Close;
    qclientes.Close;
    qalbaranes.Close;
    qalbaranes2.close;
    qalbaranesdetalle.Close;
    qalbaranesdetalle2.Close;
    facturas.Close;
    facturasdetalle.Close;
    qfacturasiva.Close;
    qformaspago.Close;
    qarticulos.Close;
    qtipos_iva.Close;
    qcuentas.Close;

    qseries.open;
    qdestinos.open;
    qclientes.open;
    qalbaranes.open;
    qalbaranes2.open;
    qalbaranesdetalle.open;
    qalbaranesdetalle2.open;
    facturas.open;
    facturasdetalle.open;
    qfacturasiva.open;
    qformaspago.open;
    qarticulos.open;
    qtipos_iva.open;
    qcuentas.open;;
    pagecontrol2.TabIndex:=0;
end;

procedure Tffacturas.qarticulosBeforeOpen(DataSet: TDataSet);
var filtrolocal:string;
begin
    filtrolocal:='';
    filtrolocal:=' and (descripcion like('+''''+'%'+filtro+'%'+''''+') or codigo like('+''''+'%'+filtro+'%'+''''+'))';
    qarticulos.SQL.Clear;
    qarticulos.SQL.Add('select * from articulosf where activo=1 and facturable=1'+filtrolocal+' order by descripcion');

end;

procedure Tffacturas.tablistadoShow(Sender: TObject);
begin
    fdesde.Date:=strtodate('01/01/2000');
    fhasta.Date:=date();
    facturas.Close;
    facturas.SQL.Clear;
    facturas.SQL.Add('select * from facturas order by serie desc,id desc');
    facturas.Open;
    listaclientes.Close;
    listadestinos.Close;
    listaclientes.Open;
    listadestinos.Open;
    btfiltrar.click
end;

end.
