unit falbaranes;

interface

uses
  FireDAC.Stan.Intf, FireDAC.Stan.Option, FireDAC.Stan.Param, FireDAC.Stan.Error, FireDAC.DatS, FireDAC.Phys.Intf, FireDAC.DApt.Intf, FireDAC.Stan.Async, FireDAC.DApt, FireDAC.Comp.DataSet, FireDAC.Comp.Client, uFireDacHelper,
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, Data.DB,
     Vcl.DBCtrls,datos, Vcl.Mask,
  Vcl.Grids, Vcl.DBGrids, Vcl.ComCtrls, frxClass, frxDBSet,  ComObj, Excel2000,
  frxExportPDF, frxExportBaseDialog;
type
  Talbaranes = class(TForm)
    Panel1: TPanel;
    Panel4: TPanel;
    btAcancelar: TButton;
    btAmodificar: TButton;
    btAborrar: TButton;
    btAnuevo: TButton;
    btAguardar: TButton;
    Panel2: TPanel;
    dsalbaranes: TDataSource;
    dsalbaranesdetalle: TDataSource;
    albaranes: TFDQuery;
    albaranesdetalle: TFDQuery;
    Panel3: TPanel;
    comboserie: TDBLookupComboBox;
    qseries: TFDQuery;
    dsqseries: TDataSource;
    qserieside: TIntegerField;
    qseriesid: TWideStringField;
    qseriesfechainicio: TDateField;
    qseriesfechafin: TDateField;
    qseriesnum_pedcliente: TIntegerField;
    qseriesnum_albaran: TIntegerField;
    qseriesnum_factura: TIntegerField;
    qseriesnum_expedicion: TIntegerField;
    qseriesnum_pedproveedor: TIntegerField;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    DBEdit1: TDBEdit;
    comboclientes: TDBLookupComboBox;
    combodestinos: TDBLookupComboBox;
    Label5: TLabel;
    DBEdit2: TDBEdit;
    dsqclientes: TDataSource;
    qclientes: TFDQuery;
    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;
    dsqdestinos: TDataSource;
    qdestinos: TFDQuery;
    qdestinoscodigo: TWideStringField;
    qdestinosidcliente: TIntegerField;
    qdestinosidempresa: TIntegerField;
    qdestinosdescripcion: TWideStringField;
    qdestinosseleccionado: TIntegerField;
    qdestinosactivo: TIntegerField;
    qdestinosdireccion: TWideStringField;
    qdestinospoblacion: TWideStringField;
    qdestinoscodpost: TWideStringField;
    qdestinosprovincia: TWideStringField;
    Label6: TLabel;
    Label7: TLabel;
    DBText3: TDBText;
    DBText4: TDBText;
    DBText5: TDBText;
    DBText6: TDBText;
    DBText7: TDBText;
    DBText8: TDBText;
    DBText9: TDBText;
    DBText10: TDBText;
    qclientespais: TWideStringField;
    qdestinospais: TWideStringField;
    DBText11: TDBText;
    DBText12: TDBText;
    DBText13: TDBText;
    DBText14: TDBText;
    DBText15: TDBText;
    dsqpedidos: TDataSource;
    qpedidos: TFDQuery;
    dsqpedidosdetalle: TDataSource;
    qpedidosdetalle: TFDQuery;
    qpedidosdetalleid: TIntegerField;
    qpedidosdetalleide: TIntegerField;
    qpedidosdetalleidpedido: TIntegerField;
    qpedidosdetalleidcliente: TIntegerField;
    qpedidosdetalleidproductocli: TWideStringField;
    qpedidosdetalleidenvase: TWideStringField;
    qpedidosdetalledesc_envase: TWideStringField;
    qpedidosdetalledesc_producto: TWideStringField;
    qpedidosdetallecantidad: TFloatField;
    qpedidosdetallecantidadservida: TFloatField;
    qpedidosdetallepalets: TIntegerField;
    qpedidosdetalleref: TWideStringField;
    qpedidosdetalleean: TWideStringField;
    qpedidosdetallemarca: TWideStringField;
    qpedidosdetalleobservaciones: TWideStringField;
    qpedidosdetalleidcajapropia: TWideStringField;
    qpedidosid: TIntegerField;
    qpedidoside: TIntegerField;
    qpedidosidcliente: TIntegerField;
    qpedidosiddestino: TWideStringField;
    qpedidosfecha_pedido: TDateField;
    qpedidosfecha_entrega: TDateField;
    qpedidoscliente: TWideStringField;
    qpedidosdestino: TWideStringField;
    dsqalbaranesiva: TDataSource;
    qalbaranesiva: TFDQuery;
    albaranesid: TIntegerField;
    albaranesidempresa: TIntegerField;
    albaranesidcliente: TIntegerField;
    albaranesiddestino: TWideStringField;
    albaranesnif: TWideStringField;
    albaranesdireccion: TWideStringField;
    albaranespoblacion: TWideStringField;
    albaranesprovincia: TWideStringField;
    albaranescodpost: TWideStringField;
    albaranesfecha: TDateField;
    albaranesreferencia: TWideStringField;
    albaranestelefono: TWideStringField;
    albaranesnomcliente: TWideStringField;
    albaranespaiscliente: TWideStringField;
    albaranesnomdestino: TWideStringField;
    albaranesdirecciondestino: TWideStringField;
    albaranespoblaciondestino: TWideStringField;
    albaranescodpostdestino: TWideStringField;
    albaranesprovinciadestino: TWideStringField;
    albaranespaisdestino: TWideStringField;
    albaranesneto: TFloatField;
    albaranestotal: TFloatField;
    albaranesfacturado: TIntegerField;
    albaranesdocumento: TWideStringField;
    dsqpedidos2: TDataSource;
    dsqpedidosdetalle2: TDataSource;
    qpedidosdetalle2: TFDQuery;
    qpedidos2: TFDQuery;
    IntegerField8: TIntegerField;
    IntegerField9: TIntegerField;
    IntegerField10: TIntegerField;
    WideStringField11: TWideStringField;
    DateField1: TDateField;
    DateField2: TDateField;
    WideStringField12: TWideStringField;
    WideStringField13: TWideStringField;
    Panel5: TPanel;
    qalbaranesivaidalbaran: TIntegerField;
    qalbaranesivaide: TIntegerField;
    qalbaranesivabase: TFloatField;
    qalbaranesivatipo: TFloatField;
    qalbaranesivaiva: TFloatField;
    Panel6: TPanel;
    DBGrid1: TDBGrid;
    albaranesdescuento_lin: TFloatField;
    albaranesdescuento_com: TFloatField;
    albaranesdescuento_pp: TFloatField;
    albaranesdescuento_total: TFloatField;
    albaranestotaliva: TFloatField;
    Label9: TLabel;
    DBEdit4: TDBEdit;
    Label12: TLabel;
    DBEdit7: TDBEdit;
    Label13: TLabel;
    DBEdit8: TDBEdit;
    Label14: TLabel;
    DBEdit9: TDBEdit;
    btaimprimir: TButton;
    btaimportar: TButton;
    btafacturar: TButton;
    DBGrid2: TDBGrid;
    Panel7: TPanel;
    Button4: TButton;
    qpedidosdetalle2id: TIntegerField;
    qpedidosdetalle2ide: TIntegerField;
    qpedidosdetalle2idpedido: TIntegerField;
    qpedidosdetalle2idcliente: TIntegerField;
    qpedidosdetalle2idproductocli: TWideStringField;
    qpedidosdetalle2idenvase: TWideStringField;
    qpedidosdetalle2desc_envase: TWideStringField;
    qpedidosdetalle2desc_producto: TWideStringField;
    qpedidosdetalle2cantidad: TFloatField;
    qpedidosdetalle2cantidadservida: TFloatField;
    qpedidosdetalle2palets: TIntegerField;
    qpedidosdetalle2ref: TWideStringField;
    qpedidosdetalle2ean: TWideStringField;
    qpedidosdetalle2marca: TWideStringField;
    qpedidosdetalle2observaciones: TWideStringField;
    qpedidosdetalle2idcajapropia: TWideStringField;
    DBCheckBox1: TDBCheckBox;
    DBMemo1: TDBMemo;
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    DBGrid3: TDBGrid;
    btasiguiente: TButton;
    btaanterior: TButton;
    infalbaran: TfrxDBDataset;
    infdetallealbaran: TfrxDBDataset;
    infalbaranivas: TfrxDBDataset;
    informe: TfrxReport;
    albaranesobservaciones: TWideStringField;
    Label15: TLabel;
    DBMemo2: TDBMemo;
    qaux: TFDQuery;
    albaranesidfactura: TIntegerField;
    qalbaranesivaserie: TWideStringField;
    qseriesimp_albaran: TWideStringField;
    qseriesimp_factura: TWideStringField;
    albaranesserie: TWideStringField;
    qpedidosdetalleidalbaran: TWideStringField;
    qpedidosdetalleidexpedicion: TWideStringField;
    qpedidosdetalle2idalbaran: TWideStringField;
    qpedidosdetalle2idexpedicion: TWideStringField;
    albaranesbultos: TFloatField;
    albaraneskilos: TFloatField;
    albaranesidformapago: TIntegerField;
    Label16: TLabel;
    comboformapago: TDBLookupComboBox;
    dsqformaspago: TDataSource;
    qformaspago: TFDQuery;
    qformaspagoide: TIntegerField;
    qformaspagoid: TIntegerField;
    qformaspagocodigo: TWideStringField;
    qformaspagodescripcion: TWideStringField;
    qformaspagodias: TIntegerField;
    qclientesidformapago: TIntegerField;
    listaimpresion: TComboBox;
    albaranesdetalleidempresa: TIntegerField;
    albaranesdetalleidalbaran: TIntegerField;
    albaranesdetallecantidad: TFloatField;
    albaranesdetalleprecio: TFloatField;
    albaranesdetalledescuento: TFloatField;
    albaranesdetallebase: TFloatField;
    albaranesdetallecal: TWideStringField;
    albaranesdetallebultos: TFloatField;
    albaranesdetalletipoiva: TFloatField;
    albaranesdetalleiva: TFloatField;
    albaranesdetalletotal: TFloatField;
    albaranesdetalleid: TIntegerField;
    albaranesdetalletotaldescuento: TFloatField;
    albaranesdetalleserie: TWideStringField;
    albaranesdetalleidarticulo: TWideStringField;
    albaranesdetallelote: TWideStringField;
    qarticulos: TFDQuery;
    dsqarticulos: TDataSource;
    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;
    qtipos_iva: TFDQuery;
    dsqtiposiva: TDataSource;
    qtipos_ivaid: TIntegerField;
    qtipos_ivadescripcion: TWideStringField;
    qtipos_ivatipo: TIntegerField;
    qtipos_ivatipo_req: TFloatField;
    albaranescoste_transporte: TFloatField;
    costetrans: TDBEdit;
    Label17: TLabel;
    qalbaranesclientes: TFDQuery;
    dsqalbaranesclientes: TDataSource;
    albaranesdetallecoste_transporte: TFloatField;
    albaranesdetallecoste_otros: TFloatField;
    Panel11: TPanel;
    gridalbaranesaexcel: TDBGrid;
    SaveDialog1: TSaveDialog;
    qclientesexento_iva: TIntegerField;
    Label18: TLabel;
    DBEdit10: TDBEdit;
    albaranespeso_bruto: TFloatField;
    albaranesprov_transporte: TWideStringField;
    qpedidospedidocliente: TWideStringField;
    qpedidos2pedidocliente: TWideStringField;
    frxPDFExport1: TfrxPDFExport;
    dsfacturas: TDataSource;
    dsfacturasdetalle: TDataSource;
    facturasdetalle: TFDQuery;
    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;
    facturasdetalleserie: TWideStringField;
    facturasdetallebultos: TFloatField;
    facturas: TFDQuery;
    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;
    facturasdocumento: TWideStringField;
    facturasdescuento_lin: TFloatField;
    facturasdescuento_com: TFloatField;
    facturasdescuento_pp: TFloatField;
    facturasdescuento_total: TFloatField;
    facturastotaliva: TFloatField;
    facturasobservaciones: TWideStringField;
    facturasserie: TWideStringField;
    facturasbultos: TFloatField;
    facturaskilos: TFloatField;
    facturasidformapago: TIntegerField;
    facturascobrado: TIntegerField;
    Edit1: TEdit;
    Label19: TLabel;
    Button1: TButton;
    Label20: TLabel;
    combocuenta: TDBLookupComboBox;
    Label21: TLabel;
    qclientescomision: TFloatField;
    qcuentas: TFDQuery;
    dsqcuentas: TDataSource;
    albaranescc_pago: TWideStringField;
    albaranesccid: TIntegerField;
    albaranescccuentabancaria: TWideStringField;
    qcuentaside: TIntegerField;
    qcuentasid: TIntegerField;
    qcuentasbanco: TWideStringField;
    qcuentascciban: TWideStringField;
    qcuentasccentidad: TWideStringField;
    qcuentasccoficina: TWideStringField;
    qcuentasccdc: TWideStringField;
    qcuentascccc: TWideStringField;
    Label22: TLabel;
    albaranescomision: TFloatField;
    albaraneskilosventa: TFloatField;
    Label8: TLabel;
    DBEdit3: TDBEdit;
    Label10: TLabel;
    DBEdit5: TDBEdit;
    albaranesnumpalets: TFloatField;
    comision: TDBEdit;
    DBText1: TDBText;
    DBText2: TDBText;
    DBText16: TDBText;
    DBText17: TDBText;
    DBText18: TDBText;
    albaranesdetallecoste_comision: TFloatField;
    Button2: TButton;
    Button5: TButton;
    Panel8: TPanel;
    Panel9: TPanel;
    Edit2: TEdit;
    Label11: TLabel;
    Label23: TLabel;
    dsqseries2: TDataSource;
    qseries2: TFDQuery;
    comboserie2: TDBLookupComboBox;
    RadioGroup1: TRadioGroup;
    RadioButton1: TRadioButton;
    RadioButton2: TRadioButton;
    Panel10: TPanel;
    Label24: TLabel;
    Label34: TLabel;
    fdesde: TDateTimePicker;
    fhasta: TDateTimePicker;
    Label35: TLabel;
    Panel12: TPanel;
    Label32: TLabel;
    Button8: TButton;
    DBGrid4: TDBGrid;
    Panel13: TPanel;
    Label25: TLabel;
    Button6: TButton;
    DBGrid5: TDBGrid;
    Edit3: TEdit;
    Edit4: TEdit;
    qseries2ide: TIntegerField;
    qseries2id: TWideStringField;
    qseries2fechainicio: TDateField;
    qseries2fechafin: TDateField;
    qseries2num_pedcliente: TIntegerField;
    qseries2num_albaran: TIntegerField;
    qseries2num_factura: TIntegerField;
    qseries2num_expedicion: TIntegerField;
    qseries2num_pedproveedor: TIntegerField;
    qseries2imp_albaran: TWideStringField;
    qseries2imp_factura: TWideStringField;
    qseries2activo: TIntegerField;
    qseries2num_presupuesto: TIntegerField;
    qseriesactivo: TIntegerField;
    qseriesnum_presupuesto: TIntegerField;
    Panel14: TPanel;
    Button3: TButton;
    btaduplicar: TButton;
    albaranesdetalledescripcion: TWideStringField;
    albaranesdetallepesobruto: TFloatField;
    qpedidosdetalledesc_envpropio: TWideStringField;
    qpedidosdetalleidcalidad: TWideStringField;
    qpedidosdetalleidacabado: TWideStringField;
    qpedidosdetalledesc_calidad: TWideStringField;
    qpedidosdetalledesc_acabado: TWideStringField;
    qpedidosdetalleidformatopropio: TIntegerField;
    qpedidosdetalledesc_formatopropio: TWideStringField;
    Button7: TButton;
    comboformulario: TDBLookupComboBox;
    qformularios: TFDQuery;
    dsqformularios: TDataSource;
    qformularioside: TIntegerField;
    qformulariosid: TIntegerField;
    qformulariosformulario: TWideStringField;
    qformulariosdescripcion: TWideStringField;
    qformulariosaplicar_a: TWideStringField;
    qformulariospordefecto: TIntegerField;
    Label26: TLabel;
    DBLookupComboBox1: TDBLookupComboBox;
    albaranesdetalleidfactura: TIntegerField;
    qalbaranesclientesserie: TWideStringField;
    qalbaranesclientesid: TIntegerField;
    qalbaranesclientesidempresa: TIntegerField;
    qalbaranesclientesidcliente: TIntegerField;
    qalbaranesclientesiddestino: TWideStringField;
    qalbaranesclientesnif: TWideStringField;
    qalbaranesclientesdireccion: TWideStringField;
    qalbaranesclientespoblacion: TWideStringField;
    qalbaranesclientesprovincia: TWideStringField;
    qalbaranesclientescodpost: TWideStringField;
    qalbaranesclientesfecha: TDateField;
    qalbaranesclientesreferencia: TWideStringField;
    qalbaranesclientestelefono: TWideStringField;
    qalbaranesclientesnomcliente: TWideStringField;
    qalbaranesclientespaiscliente: TWideStringField;
    qalbaranesclientesnomdestino: TWideStringField;
    qalbaranesclientesdirecciondestino: TWideStringField;
    qalbaranesclientespoblaciondestino: TWideStringField;
    qalbaranesclientescodpostdestino: TWideStringField;
    qalbaranesclientesprovinciadestino: TWideStringField;
    qalbaranesclientespaisdestino: TWideStringField;
    qalbaranesclientesneto: TFloatField;
    qalbaranesclientestotal: TFloatField;
    qalbaranesclientesfacturado: TIntegerField;
    qalbaranesclientesdocumento: TWideStringField;
    qalbaranesclientesdescuento_lin: TFloatField;
    qalbaranesclientesdescuento_com: TFloatField;
    qalbaranesclientesdescuento_pp: TFloatField;
    qalbaranesclientesdescuento_total: TFloatField;
    qalbaranesclientestotaliva: TFloatField;
    qalbaranesclientesobservaciones: TWideStringField;
    qalbaranesclientesidfactura: TIntegerField;
    qalbaranesclientesbultos: TFloatField;
    qalbaranesclienteskilos: TFloatField;
    qalbaranesclientesidformapago: TIntegerField;
    qalbaranesclientescc_pago: TWideStringField;
    qalbaranesclientescoste_transporte: TFloatField;
    qalbaranesclientespeso_bruto: TFloatField;
    qalbaranesclientesprov_transporte: TWideStringField;
    qalbaranesclientesccid: TIntegerField;
    qalbaranesclientescccuentabancaria: TWideStringField;
    qalbaranesclientescomision: TFloatField;
    qalbaranesclienteskilosventa: TFloatField;
    qalbaranesclientesnumpalets: TFloatField;
    qalbaranesclientesid_1: TIntegerField;
    qalbaranesclientesidempresa_1: TIntegerField;
    qalbaranesclientesserie_1: TWideStringField;
    qalbaranesclientesidalbaran: TIntegerField;
    qalbaranesclientesidarticulo: TWideStringField;
    qalbaranesclientesdescripcion: TWideStringField;
    qalbaranesclientescal: TWideStringField;
    qalbaranesclienteslote: TWideStringField;
    qalbaranesclientesbultos_1: TFloatField;
    qalbaranesclientescantidad: TFloatField;
    qalbaranesclientesprecio: TFloatField;
    qalbaranesclientesdescuento: TFloatField;
    qalbaranesclientestotaldescuento: TFloatField;
    qalbaranesclientesbase: TFloatField;
    qalbaranesclientestipoiva: TFloatField;
    qalbaranesclientesiva: TFloatField;
    qalbaranesclientestotal_1: TFloatField;
    qalbaranesclientescoste_transporte_1: TFloatField;
    qalbaranesclientescoste_otros: TFloatField;
    qalbaranesclientescoste_comision: TFloatField;
    qalbaranesclientespesobruto: TFloatField;
    qalbaranesclientesidfactura_1: TIntegerField;
    qalbaranesclientesparcela: TWideStringField;
    Label27: TLabel;
    DBEdit6: TDBEdit;
    facturascomision: TFloatField;
    facturascoste_transporte: TFloatField;
    facturasdetallecoste_transporte: TFloatField;
    facturasdetallecoste_otros: TFloatField;
    facturasdetallecoste_comision: TFloatField;
    Label28: TLabel;
    DBEdit11: TDBEdit;
    albaranesdetallepalets: TFloatField;
    qedi_cabalbaran: TFDQuery;
    qedi_cabalbarancampo: TWideStringField;
    qedi_cabalbarantipo: TWideStringField;
    qedi_cabalbaranlongitud: TFloatField;
    qedi_cabalbaranpos_inicio: TIntegerField;
    qedi_cabalbaranpos_fin: TIntegerField;
    Button9: TButton;
    qedi_detalbaran: TFDQuery;
    qedi_embalbaran: TFDQuery;
    qedi_lugaresentrega: TFDQuery;
    qedi_marcasembalaje: TFDQuery;
    qedi_detalbarancampo: TWideStringField;
    qedi_detalbarantipo: TWideStringField;
    qedi_detalbaranlongitud: TFloatField;
    qedi_detalbaranpos_inicio: TIntegerField;
    qedi_detalbaranpos_fin: TIntegerField;
    qedi_embalbarancampo: TWideStringField;
    qedi_embalbarantipo: TWideStringField;
    qedi_embalbaranlongitud: TFloatField;
    qedi_embalbaranpos_inicio: TIntegerField;
    qedi_embalbaranpos_fin: TIntegerField;
    qedi_lugaresentregacampo: TWideStringField;
    qedi_lugaresentregatipo: TWideStringField;
    qedi_lugaresentregalongitud: TFloatField;
    qedi_lugaresentregapos_inicio: TIntegerField;
    qedi_lugaresentregapos_fin: TIntegerField;
    qedi_marcasembalajecampo: TWideStringField;
    qedi_marcasembalajetipo: TWideStringField;
    qedi_marcasembalajelongitud: TFloatField;
    qedi_marcasembalajepos_inicio: TIntegerField;
    qedi_marcasembalajepos_fin: TIntegerField;
    qedicabecera: TFDQuery;
    qediembalajes: TFDQuery;
    qedilocalizaciones: TFDQuery;
    qedilinalbaran: TFDQuery;
    qedicabeceraIDCAB: TWideStringField;
    qedicabeceraNUMDES: TIntegerField;
    qedicabeceraTIPO: TWideStringField;
    qedicabeceraFECDES: TDateField;
    qedicabeceraFECENT: TDateField;
    qedicabeceraNUMALB: TWideStringField;
    qedicabeceraFECALB: TDateField;
    qedicabeceraNUMPED: TWideStringField;
    qedicabeceraORIGEN: TWideStringField;
    qedicabeceraDESTINO: TWideStringField;
    qedicabeceraPROVEEDO: TWideStringField;
    qedicabeceraCOMPRADO: TWideStringField;
    qedicabeceraRECEPTOR: TWideStringField;
    qedicabeceraTOTQTY: TFloatField;
    qedicabeceraFECENV: TDateField;
    qedicabeceracodprov: TWideStringField;
    qedicabeceraNOMBREEMISOR: TWideStringField;
    qedicabeceraNIFEMISOR: TWideStringField;
    qedicabeceraNOMBRERECEPTOR: TWideStringField;
    qedicabeceraNOMBRECOMPRADOR: TWideStringField;
    qedicabeceraNOMBREPROVEEDOR: TWideStringField;
    qedicabeceraNOMBREPTOENTREGA: TWideStringField;
    qedicabeceraDIRECCIONEMISOR: TWideStringField;
    qedicabeceraPOBLACIONEMISOR: TWideStringField;
    qedicabeceraPROVINCIAEMISOR: TWideStringField;
    qedicabeceraCPEMISOR: TWideStringField;
    qedicabeceraDIRECCIONCOMPRADOR: TWideStringField;
    qedicabeceraPOBLACIONCOMPRADOR: TWideStringField;
    qedicabeceraPROVINCIACOMPRADOR: TWideStringField;
    qedicabeceraCPCOMPRADOR: TWideStringField;
    qedicabeceraDIRECCIONPTOENTREGA: TWideStringField;
    qedicabeceraPOBLACIONPTOENTREGA: TWideStringField;
    qedicabeceraPROVINCIAPTOENTREGA: TWideStringField;
    qedicabeceraCPPTOENTREGA: TWideStringField;
    qedicabeceraDIRECCIONRECEPTOR: TWideStringField;
    qedicabeceraPOBLACIONRECEPTOR: TWideStringField;
    qedicabeceraPROVINCIARECEPTOR: TWideStringField;
    qedicabeceraCPRECEPTOR: TWideStringField;
    qedicabeceraNIFPROVEEDOR: TWideStringField;
    qedicabeceraIMPTOTBRUTO: TFloatField;
    qedicabeceraIMPTOTNETO: TFloatField;
    qedicabeceraMONEDA: TWideStringField;
    qedicabeceraPESOBRUTOT: TFloatField;
    qedicabeceraPESONETTOT: TFloatField;
    qedicabeceraNUMTOTBUL: TFloatField;
    qedicabeceraMEDIOTRAN: TWideStringField;
    qedicabeceraORDENADOR: TWideStringField;
    qedilinalbaranIDCAB: TWideStringField;
    qedilinalbaranIDEMB: TWideStringField;
    qedilinalbaranCPSO: TFloatField;
    qedilinalbaranIDLIN: TWideStringField;
    qedilinalbaranEAN: TWideStringField;
    qedilinalbaranREFPROV: TWideStringField;
    qedilinalbaranNUMEXP: TFloatField;
    qedilinalbaranDESCRIP: TWideStringField;
    qedilinalbaranCENVFAC: TFloatField;
    qedilinalbaranCUEXP: TFloatField;
    qedilinalbaranUNICANT: TWideStringField;
    qedilinalbaranNUMPED: TWideStringField;
    qedilinalbaranNUMALB: TWideStringField;
    qedilinalbaranSSCC: TWideStringField;
    qedilinalbaranFECENV: TDateField;
    qedilinalbaranFECCON: TDateField;
    qedilinalbaranLOTE: TWideStringField;
    qedilinalbaranCANTLOC1: TFloatField;
    qedilinalbaranNOMBREPTOENTREGA: TWideStringField;
    qedilinalbaranFECPED: TDateField;
    qedilinalbaranFECALB: TDateField;
    qedilinalbaranPESTOTLIN: TFloatField;
    qedilinalbaranFECCADET: TDateField;
    qedilinalbaranPESOBRUTO: TFloatField;
    qedilinalbaranPESONETO: TFloatField;
    qediembalajesIDCAB: TWideStringField;
    qediembalajesIDEMB: TWideStringField;
    qediembalajesCPSO: TWideStringField;
    qediembalajesCPSPADRE: TWideStringField;
    qediembalajesCANTEMB: TLargeintField;
    qediembalajesTIPEMB: TWideStringField;
    qediembalajesDESCEMB: TWideStringField;
    qediembalajesPAGRET: TWideStringField;
    qediembalajesSSCC1: TWideStringField;
    qediembalajesBULTPALET: TFloatField;
    qediembalajesFORMATO: TWideStringField;
    qediembalajesIDLIN: TWideStringField;
    qediembalajesIDMARCA: TWideStringField;
    qediembalajesMARCA1: TWideStringField;
    qediembalajesFECENV: TDateField;
    qediembalajesLOTE: TWideStringField;
    qedilocalizacionesIDCAB: TWideStringField;
    qedilocalizacionesIDEMB: TFloatField;
    qedilocalizacionesIDLIN: TWideStringField;
    qedilocalizacionesIDLOC: TWideStringField;
    qedilocalizacionesLUGAR: TWideStringField;
    qedilocalizacionesFECENV: TDateField;
    qedilocalizacionesCANTIDAD: TFloatField;
    qedilocalizacionesCANTKGM: TFloatField;
    qedilocalizacionesNOMBREPTOENTREGA: TWideStringField;
    qedilocalizacionesUMEDIDA: TWideStringField;
    qedicabeceraFECPED: TDateField;
    qedicabeceraDPTO: TWideStringField;
    qedicabeceraALBARANCLIENTE: TWideStringField;
    qedilinalbaranALBARANCLIENTE: TWideStringField;
    qedilinalbaranTEXTO4: TWideStringField;
    qedilinalbaranTEXTO5: TWideStringField;
    qedicabeceraULTCONS: TWideStringField;
    qedilinalbaranNUMEXP2: TWideStringField;
    Label29: TLabel;
    ComboBox1: TComboBox;
    qpedidosdetalleunidadescaja: TIntegerField;
    qpedidosdetallefecha_caducidad: TDateField;
    qpedidosdetalleprecio: TFloatField;
    qalbaraneslotes: TFDQuery;
    qalbaranespalets: TFDQuery;
    qalbaranespaletsid: TIntegerField;
    qalbaranespaletside: TIntegerField;
    qalbaranespaletsids: TWideStringField;
    qalbaranespaletsida: TIntegerField;
    qalbaranespaletscantidad: TIntegerField;
    qalbaranespaletstipo_palet: TWideStringField;
    qalbaraneslotesid: TIntegerField;
    qalbaranesloteside: TIntegerField;
    qalbaraneslotesids: TWideStringField;
    qalbaraneslotesida: TIntegerField;
    qalbaranesloteslote: TWideStringField;
    qalbaraneslotesvariedad: TWideStringField;
    dsalbaranespalets: TDataSource;
    dsalbarnaeslotes: TDataSource;
    Panel15: TPanel;
    DBGrid6: TDBGrid;
    DBGrid7: TDBGrid;
    Panel16: TPanel;
    qinsertarfacturasdetalles: TFDQuery;
    albaranesdetallegrupo: TFDQuery;
    albaranesdetallegrupoidempresa: TIntegerField;
    albaranesdetallegrupoidalbaran: TIntegerField;
    albaranesdetallegrupocantidad: TFloatField;
    albaranesdetallegrupoprecio: TFloatField;
    albaranesdetallegrupodescuento: TFloatField;
    albaranesdetallegrupobase: TFloatField;
    albaranesdetallegrupodescripcion: TWideStringField;
    albaranesdetallegrupocal: TWideStringField;
    albaranesdetallegrupopalets: TFloatField;
    albaranesdetallegrupobultos: TFloatField;
    albaranesdetallegrupotipoiva: TFloatField;
    albaranesdetallegrupoiva: TFloatField;
    albaranesdetallegrupototal: TFloatField;
    albaranesdetallegrupoid: TIntegerField;
    albaranesdetallegrupoidarticulo: TWideStringField;
    albaranesdetallegrupototaldescuento: TFloatField;
    albaranesdetallegrupolote: TWideStringField;
    albaranesdetallegruposerie: TWideStringField;
    albaranesdetallegrupocoste_transporte: TFloatField;
    albaranesdetallegrupocoste_otros: TFloatField;
    albaranesdetallegrupocoste_comision: TFloatField;
    albaranesdetallegrupopesobruto: TFloatField;
    albaranesdetallegrupoidfactura: TIntegerField;
    albaranesdetallepais: TWideStringField;
    albaranesdetalleenvase: TWideStringField;
    albaranesdetallereferencia: TWideStringField;
    albaranesdetalleean: TWideStringField;
    albaranesdetalleunidadescaja: TIntegerField;
    albaranesdetallegrupopais: TWideStringField;
    albaranesdetallegrupoenvase: TWideStringField;
    albaranesdetallegruporeferencia: TWideStringField;
    albaranesdetallegrupoean: TWideStringField;
    albaranesdetallegrupounidadescaja: TIntegerField;
    Panel17: TPanel;
    Button10: TButton;
    Panel18: TPanel;
    Button11: TButton;
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure fechaalbaranEnter(Sender: TObject);
    procedure btAnuevoClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure dsalbaranesStateChange(Sender: TObject);
    procedure comboclientesCloseUp(Sender: TObject);
    procedure combodestinosCloseUp(Sender: TObject);
    procedure btAguardarClick(Sender: TObject);
    procedure albaranesdetalleBeforePost(DataSet: TDataSet);
    procedure Button4Click(Sender: TObject);
    procedure albaranesdetalleAfterPost(DataSet: TDataSet);
    procedure btaimportarClick(Sender: TObject);
    procedure btaanteriorClick(Sender: TObject);
    procedure btasiguienteClick(Sender: TObject);
    procedure btaimprimirClick(Sender: TObject);
    procedure btAmodificarClick(Sender: TObject);
    procedure btAcancelarClick(Sender: TObject);
    procedure btAborrarClick(Sender: TObject);
    procedure dsalbaranesDataChange(Sender: TObject; Field: TField);
    procedure fechaalbaranCloseUp(Sender: TObject);
    procedure albaranesBeforePost(DataSet: TDataSet);
    procedure DBGrid3TitleClick(Column: TColumn);
    procedure DBGrid2KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure DBGrid2ColExit(Sender: TObject);
    procedure qarticulosBeforeOpen(DataSet: TDataSet);
    procedure Button3Click(Sender: TObject);
    procedure DBGrid3DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    procedure albaranesdetalleAfterDelete(DataSet: TDataSet);
    procedure albaranesdetalleBeforeDelete(DataSet: TDataSet);
    procedure btafacturarClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Edit1Enter(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure comboserie2CloseUp(Sender: TObject);
    procedure dsqseries2DataChange(Sender: TObject; Field: TField);
    procedure comboserieCloseUp(Sender: TObject);
    procedure btaduplicarClick(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure DBGrid2DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    procedure DBGrid3DblClick(Sender: TObject);
    procedure Button9Click(Sender: TObject);
    procedure albaranesBeforeDelete(DataSet: TDataSet);
    procedure qalbaraneslotesAfterInsert(DataSet: TDataSet);
    procedure qalbaranespaletsAfterInsert(DataSet: TDataSet);
    procedure Button10Click(Sender: TObject);
    procedure Button11Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  procedure ExportaraExcel(FileNameXLS, SheetName: String; DBGrid: TDBGrid; ProgressBarXls: TProgressBar = nil);
  end;

var
  albaranes: Talbaranes;
  filtro,iddetalle:string;
  vidempresa,vidarticulo:string;
implementation

{$R *.dfm}

uses fselectpedidos,fbuscararticulos, dlgduplicar, ftraza_materiales2;
procedure Talbaranes.Edit1Enter(Sender: TObject);
begin
    edit1.Text:='';
end;

procedure Talbaranes.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 posicin 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 aplicacin 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 estn 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 segn su tipo
    for J := 0 to DBGrid.FieldCount -1 do
      case DBGrid.Fields[J].DataType of
        ftAutoInc, ftBytes, ftInteger, ftSmallint, ftWord: // Auto o Numrico
          WorkSheet.Cells[I +2, J +1] := DBGrid.Fields[J].AsInteger;
        ftBCD, ftFloat, ftCurrency: // Numrico 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 segn su tamao
  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 Talbaranes.albaranesBeforeDelete(DataSet: TDataSet);
begin
   case dm.PedirConfirmacion('Confirma que desea borrar este albaran?',true,true,false) of
        mrno:Abort;
   end;
end;

procedure Talbaranes.albaranesBeforePost(DataSet: TDataSet);
begin
    if albaranes.state in [dsinsert,dsedit] then
    begin
        if albaranes.state in [dsinsert] then
        begin
          albaranesnumpalets.value:=0;
        end;

        qclientes.Close;
        qdestinos.Close;
        qdestinos.LinkedFields:='Idempresa;idcliente';
        qdestinos.MasterFields:='Idempresa;id';
        qdestinos.Mastersource:=dsqclientes;
        qclientes.open;
        qdestinos.Open;
    end;
end;

procedure Talbaranes.albaranesdetalleAfterDelete(DataSet: TDataSet);
var serie,id,idalbaran,pesobruto,pesoneto,pesonetoteorico,numpalets:string;
begin
    serie:=albaranesserie.AsString;
    id:=albaranesid.AsString;
    idalbaran:=serie+'/'+id;
    qalbaranesiva.Refresh;
    if iddetalle<>'' then albaranesdetalle.Locate('id',iddetalle,[locaseinsensitive]) else albaranesdetalle.Last;
    qaux.SQL.Clear;
    qaux.SQL.Add('select * from  ea_pesadas where idalbaran='+''''+idalbaran+''''+' and idempresa='+albaranesidempresa.asstring);
    qaux.open;
    if qaux.RecordCount>0 then
    begin
      qaux.SQL.Clear;
      qaux.SQL.Add('select sum(peso_bruto-tara0),sum(peso_neto),sum(peso_neto_teorico),sum(num_palets) from  ea_pesadas where idalbaran='+''''+idalbaran+''''+' and idempresa='+albaranesidempresa.asstring);
      qaux.open;
      pesobruto:=qaux.fields[0].asstring;
      pesobruto:=stringreplace(pesobruto,',','.',[rfreplaceall]);
      pesoneto:=qaux.fields[1].asstring;
      pesoneto:=stringreplace(pesoneto,',','.',[rfreplaceall]);
      pesonetoteorico:=qaux.fields[2].asstring;
      pesonetoteorico:=stringreplace(pesonetoteorico,',','.',[rfreplaceall]);
      numpalets:=qaux.fields[3].asstring;
      numpalets:=stringreplace(numpalets,',','.',[rfreplaceall]);
      qaux.SQL.Clear;
      qaux.SQL.Add('update albaranes set peso_bruto='+pesobruto+',kilos=+'+pesoneto+',kilosventa='+pesonetoteorico+',numpalets=+'+numpalets+' where serie='+''''+serie+''''+' and id='+id+' and idempresa='+albaranesidempresa.AsString);
      qaux.execsql;

    end else
    begin
      qaux.SQL.Clear;
      qaux.SQL.Add('update albaranes set peso_bruto=0,kilos=0,kilosventa=0,numpalets=0 where serie='+''''+serie+''''+' and id='+id+' and idempresa='+albaranesidempresa.AsString);
      qaux.execsql;
    end;
      albaranes.refresh;
      albaranes.Locate('serie,id',vararrayof([serie,id]),[locaseinsensitive])

end;

procedure Talbaranes.albaranesdetalleAfterPost(DataSet: TDataSet);
var serie,id,idalbaran,pesobruto,pesoneto,pesonetoteorico,numpalets:string;
begin
    serie:=albaranesserie.AsString;
    id:=albaranesid.AsString;
    idalbaran:=serie+'/'+id;
    qalbaranesiva.Refresh;

    qaux.SQL.Clear;
    qaux.SQL.Add('select * from  ea_pesadas where idalbaran='+''''+idalbaran+''''+' and idempresa='+albaranesidempresa.asstring);
    qaux.open;
    if qaux.RecordCount>0 then
    begin
      qaux.SQL.Clear;
      qaux.SQL.Add('select sum(peso_bruto-tara0),sum(peso_neto),sum(peso_neto_teorico),(select max(palets) from albaranes_detalles where idalbaran='+id+' and serie='+serie+') as numpalets from  ea_pesadas where idalbaran='+''''+idalbaran+''''+' and idempresa='+albaranesidempresa.asstring);
      qaux.open;
      pesobruto:=qaux.fields[0].asstring;
      pesobruto:=stringreplace(pesobruto,',','.',[rfreplaceall]);
      pesoneto:=qaux.fields[1].asstring;
      pesoneto:=stringreplace(pesoneto,',','.',[rfreplaceall]);
      pesonetoteorico:=qaux.fields[2].asstring;
      pesonetoteorico:=stringreplace(pesonetoteorico,',','.',[rfreplaceall]);
      numpalets:=qaux.fields[3].asstring;
      numpalets:=stringreplace(numpalets,',','.',[rfreplaceall]);
      qaux.SQL.Clear;
      qaux.SQL.Add('update albaranes set peso_bruto='+pesobruto+',kilos=+'+pesoneto+',kilosventa='+pesonetoteorico+',numpalets=+'+numpalets+' where serie='+''''+serie+''''+' and id='+id+' and idempresa='+albaranesidempresa.AsString);
      qaux.execsql;

    end;
      albaranes.refresh;
      albaranes.Locate('serie,id',vararrayof([serie,id]),[locaseinsensitive]) ;
      if iddetalle<>'' then albaranesdetalle.Locate('id',iddetalle,[locaseinsensitive]) else albaranesdetalle.Last;
end;

procedure Talbaranes.albaranesdetalleBeforeDelete(DataSet: TDataSet);
begin
   case dm.PedirConfirmacion('Confirma que desea borrar esta lnea de albaran?',true,true,false) of
        mrno:Abort;
   end;
   vidempresa:=albaranesdetalleidempresa.AsString;
   vidarticulo:=albaranesdetalleidarticulo.asstring;
end;

procedure Talbaranes.albaranesdetalleBeforePost(DataSet: TDataSet);
var iva,descuento:real;
begin
    iddetalle:=albaranesdetalleid.asstring;
    if albaranesdetalletipoiva.AsString='' then albaranesdetalletipoiva.Value:=0;
    if albaranesdetalledescuento.AsString='' then albaranesdetalledescuento.Value:=0;
    if (albaranesdetallelote.AsString<>'') and (albaranesdetallecoste_otros.asstring='') then
    begin
       qaux.Close;
       qaux.SQL.Clear;
       qaux.SQL.Add('select coste_kg_ref from parcelas where (codpar,empresa) in (select parcela,idempresa from lotes where codigo='+albaranesdetallelote.AsString+')');
       qaux.Open;
       albaranesdetallecoste_otros.Value:=qaux.Fields[0].AsFloat;
    end;
    albaranesdetalleidempresa.Value:=albaranesidempresa.AsInteger;
    albaranesdetalleidalbaran.Value:=albaranesid.AsInteger;
    albaranesdetalleserie.Value:=albaranesserie.Asstring;
    albaranesdetallebase.Value:=albaranesdetalleprecio.AsFloat*albaranesdetallecantidad.AsFloat;
    descuento:=albaranesdetallebase.AsFloat*(albaranesdetalledescuento.AsFloat/100);
    albaranesdetalletotaldescuento.value:=descuento;
    albaranesdetalletotal.Value:=albaranesdetallebase.Asfloat-descuento;
    iva:=albaranesdetalletotal.AsFloat*(albaranesdetalletipoiva.AsFloat/100);
    albaranesdetalleiva.Value:=iva;
    if albaranesdetalle.State in [dsedit] then iddetalle:=albaranesdetalleid.AsString else iddetalle:='';
end;

procedure Talbaranes.btAborrarClick(Sender: TObject);
begin
    if albaranes.recordcount>0 then
    begin
    if albaranesfacturado.AsInteger=0 then
      BEGIN
          albaranes.Delete;
          albaranesdetalle.Refresh;
          qpedidos.Refresh;
          qpedidos2.Refresh;
          qpedidosdetalle.Refresh;
          qpedidosdetalle2.Refresh;
          qalbaranesiva.refresh;

      END  else showmessage(' ALBARAN FACTURADO NO SE PUEDE BORRAR ');
    end;
end;

procedure Talbaranes.btAcancelarClick(Sender: TObject);
begin
    albaranes.Cancel;
    panel3.Enabled:=false;
end;

procedure Talbaranes.btaduplicarClick(Sender: TObject);
var serie,fecha,idalbaran:string;
begin
    serie:=albaranesserie.asstring;
    fecha:=albaranesfecha.Asstring;
    idalbaran:=albaranesid.Asstring;
    idempresa:=albaranesidempresa.AsString;
    fdlgduplicar := Tfdlgduplicar.Create(nil);
    try
      dlgduplicar.idserie:=serie;
      dlgduplicar.fecha:=fecha;
      dlgduplicar.idempresa:=idempresa;
      dlgduplicar.idalbaran:=idalbaran;
      fdlgduplicar.showmodal();
    finally
      fdlgduplicar.Free;
      qseries2.Locate('id',idserie,[locaseinsensitive]);
      albaranes.refresh;
      albaranesdetalle.Refresh;
      albaranes.Locate('serie,id',vararrayof([idserie,idalbaran]),[locaseinsensitive])
    end;
end;

procedure Talbaranes.btafacturarClick(Sender: TObject);
var serie,empresa,idfactura,idalbaran,observaciones:string;
begin
    facturas.Open;
    facturas.Append;
    facturasidempresa.Value:=albaranesidempresa.AsInteger;
    facturasserie.Value:=albaranesserie.asstring;
    qaux.close;
    qaux.SQL.Clear;
    qaux.SQL.Add('select num_factura from series_numericas where ide='+albaranesidempresa.AsString+' and id='+''''+albaranesserie.AsString+'''');
    qaux.Open;
    facturasid.Value:=qaux.Fields[0].AsInteger;
    facturasiddestino.Value:=albaranesiddestino.Asstring;
    facturasidcliente.Value:=albaranesidcliente.AsInteger;
    facturasnif.Value:=albaranesnif.AsString;
    facturasdireccion.Value:=albaranesdireccion.asstring;
    facturaspoblacion.Value:=albaranespoblacion.asstring;
    facturasprovincia.Value:=albaranesprovincia.asstring;
    facturascodpost.Value:=albaranescodpost.asstring;
    facturasfecha.Value:=date();
    facturasreferencia.Value:=albaranesreferencia.asstring;
    facturastelefono.Value:=albaranestelefono.asstring;
    facturasnomcliente.Value:=albaranesnomcliente.asstring;
    facturaspaiscliente.Value:=albaranespaiscliente.asstring;
    facturasnomdestino.Value:=albaranesnomdestino.asstring;
    facturasidformapago.Value:=albaranesidformapago.Asinteger;
    facturasdirecciondestino.Value:=albaranesdirecciondestino.asstring;
    facturaspoblaciondestino.Value:=albaranespoblaciondestino.asstring;
    facturascodpostdestino.Value:=albaranescodpostdestino.asstring;
    facturasprovinciadestino.Value:=albaranesprovinciadestino.asstring;
    facturaspaisdestino.Value:=albaranespaisdestino.asstring;
    facturasobservaciones.Value:=albaranesobservaciones.AsString;
    facturascomision.value:=albaranescomision.Value;
    facturascoste_transporte.value:=albaranescoste_transporte.Value;
    facturas.Post;


    albaranes.edit;
    albaranesidfactura.value:=facturasid.asinteger;
    albaranesfacturado.Value:=1;
    albaranesdocumento.Value:='Factura N: '+facturasid.AsString;
    albaranes.post;
    idfactura:=facturasid.asstring;
    serie:=facturasserie.AsString;
    empresa:=facturasidempresa.AsString;
    idalbaran:=albaranesid.asstring;
    observaciones:=facturasobservaciones.asstring;
    qaux.Close;
    qaux.SQL.Clear;
    qaux.SQL.Add('update series_numericas set num_factura=num_factura+1 where ide='+empresa+' and id='+''''+serie+'''');
    qaux.ExecSQL;
    facturasdetalle.Open;
    facturasdetalle.Append;
    facturasdetalleidempresa.Value:=albaranesdetalleidempresa.AsInteger;
    facturasdetalleserie.value:=albaranesdetalleserie.asstring;
    facturasdetalleidfactura.Value:=strtoint(idfactura);
    facturasdetalledescripcion.Value:='Albaran '+idalbaran+' de fecha:'+albaranesfecha.AsString;
    facturasdetalletipoiva.value:=0;
    facturasdetalle.Post;
    qinsertarfacturasdetalles.close;
    qinsertarfacturasdetalles.prepare;
    qinsertarfacturasdetalles.ParamByName('EMPRESA').AsInteger:=facturasidempresa.AsInteger;
    qinsertarfacturasdetalles.ParamByName('FACTURA').AsInteger:=facturasid.AsInteger;
    qinsertarfacturasdetalles.ParamByName('ALBARAN').AsInteger:=albaranesid.AsInteger;
    qinsertarfacturasdetalles.ParamByName('SERIE').AsString:=facturasserie.AsString;
    qinsertarfacturasdetalles.ExecSQL;
{    qaux.Close;
    qaux.sql.clear;
    qaux.sql.add('insert into facturas_detalles (idempresa,serie,idfactura,idarticulo,descripcion,cal,lote,bultos,cantidad,precio,descuento,totaldescuento,base,tipoiva,iva,total,coste_transporte,coste_comision,coste_otros,palets)');
    qaux.sql.add(' (SELECT '+''''+empresa+''''+' as idempresa,'+''''+serie+''''+' as serie,'+''''+idfactura+''''+' as idfactura,idarticulo,descripcion,cal,lote,bultos,cantidad,');
    qaux.sql.add('precio,descuento,totaldescuento,base,tipoiva,iva,total,coste_transporte,coste_comision,coste_otros,palets');
    qaux.sql.add(' FROM albaranes_detalles where (idalbaran,idempresa,serie) in (select id,idempresa,serie from albaranes where idfactura='+idfactura+' and idempresa='+empresa+' and serie='+''''+serie+''''+' and id='+idalbaran+'))');
    qaux.execsql;                     }
    showmessage(' FACTURA CREADA CORRECTAMENTE CON EL NUMERO: '+SERIE+'/'+IDFACTURA+' ');
    albaranes.edit;
    albaranesidfactura.value:=facturasid.asinteger;
    albaranesfacturado.Value:=1;
    albaranesdocumento.Value:='Factura N: '+facturasid.AsString;
    albaranes.post;

    serie:=albaranesserie.AsString;
    idalbaran:=albaranesid.Asstring;
    qaux.sql.clear;
    qaux.sql.add('update albaranes_detalles set idfactura='+facturasid.AsString+' where  idempresa='+empresa+' and serie='+''''+serie+''''+' and idalbaran='+idalbaran);
    qaux.execsql;
    albaranes.Refresh;

    albaranes.Locate('idempresa,serie,id', vararrayof([empresa,serie,idalbaran]),[locaseinsensitive]);
    albaranesdetalle.refresh;
end;

procedure Talbaranes.btAguardarClick(Sender: TObject);
var id,empresa,serie:string;
    insertando:integer;
    cantidad,coste_trans,total,comision:real;
begin
    empresa:=albaranesidempresa.AsString;
    id:=albaranesid.AsString;
    serie:=albaranesserie.AsString;
    if albaranes.State in [dsinsert] then insertando:=1 else insertando:=0;
    albaranescccuentabancaria.Value:=qcuentasbanco.asstring+' '+qcuentascciban.asstring+qcuentasccentidad.asstring+qcuentasccoficina.asstring+qcuentasccdc.asstring+qcuentascccc.asstring;
    //albaranescomision.value:=qclientescomision.asfloat;
    albaranes.Post;
    if insertando=1 then
    begin
      qseries.edit;
      qseriesnum_albaran.Value:=qseriesnum_albaran.AsInteger+1;
      qseries.Post;
    end;
    if insertando=0 then
    begin
      qaux.Close;
      qaux.SQL.Clear;
      qaux.SQL.Add('select sum(cantidad),sum(total) from albaranes_detalles where lote is not null and idempresa='+empresa+' and serie='+''''+serie+''''+' and idalbaran='+albaranesid.asstring);
      qaux.Open;
      cantidad:=qaux.Fields[0].AsFloat;
      total:=qaux.Fields[1].AsFloat;
      if (cantidad>0) and (albaranescoste_transporte.AsFloat>0) then
      begin
        coste_trans:=albaranescoste_transporte.AsFloat/cantidad;
        qaux.Close;
        qaux.SQL.Clear;
        qaux.SQL.Add('update albaranes_detalles set coste_transporte=cantidad*'+stringreplace(floattostr(coste_trans),',','.',[rfreplaceall])+' where lote is not null and idempresa='+empresa+' and serie='+''''+serie+''''+' and idalbaran='+albaranesid.asstring+' and idarticulo<>(select codcomision from empresa where id='+albaranesidempresa.AsString+') and idarticulo<>(select codtransporte from empresa where id='+albaranesidempresa.AsString+')');
        qaux.execsql;

      end;
      comision:=albaranescomision.AsFloat/100;
      qaux.Close;
      qaux.SQL.Clear;
      qaux.SQL.Add('update albaranes_detalles set coste_comision=total*'+stringreplace(floattostr(comision),',','.',[rfreplaceall])+' where idempresa='+empresa+' and serie='+''''+serie+''''+' and idalbaran='+albaranesid.asstring+' and idarticulo<>(select codcomision from empresa where id='+albaranesidempresa.AsString+') and idarticulo<>(select codtransporte from empresa where id='+albaranesidempresa.AsString+')');
      qaux.execsql;

    end;
    albaranesdetalle.open;
    albaranesdetalle.Refresh;
    albaranesdetalle.Last;
    albaranes.Refresh;
    albaranes.Locate('serie,id',vararrayof([serie,id]),[locaseinsensitive]);
    qalbaranesiva.Open;
    qalbaranesiva.Refresh;
    panel3.Enabled:=false;
    comboserie2.keyvalue:=qseriesid.AsString;
    albaranes.Close;
    albaranes.SQL.Clear;
    albaranes.SQL.Add('select * from albaranes where serie='+''''+qseriesid.AsString+''''+' order by serie desc,id desc');
    albaranes.Open;
    albaranes.Locate('serie,id',vararrayof([serie,id]),[locaseinsensitive]);

end;

procedure Talbaranes.btAmodificarClick(Sender: TObject);
begin
    if albaranesfacturado.AsInteger=0 then
    BEGIN
        panel3.Enabled:=true;
        albaranes.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;
        comboserie.Enabled:=true;
        comboclientes.Enabled:=true;
        combodestinos.Enabled:=true;
        comboformapago.Enabled:=true;
        dbedit1.Enabled:=true;
        dbmemo2.Enabled:=true;
        dbedit2.Enabled:=true;
        dbgrid2.Enabled:=true;
    END  else
    begin
       panel3.enabled:=true;
       comboserie.Enabled:=false;
       comboclientes.Enabled:=false;
       combodestinos.Enabled:=false;
       comboformapago.Enabled:=false;
       dbedit1.Enabled:=false;
       dbmemo2.Enabled:=false;
       dbedit2.Enabled:=false;
       //dbgrid2.Enabled:=false;
       costetrans.enabled:=true;
       comision.Enabled:=true;
       costetrans.SetFocus;
    end
end;

procedure Talbaranes.btAnuevoClick(Sender: TObject);
begin
    panel3.Enabled:=true;
    comboserie.SetFocus;
    comboserie.KeyValue:=qseriesid.Asstring;
    //fechaalbaran.Date:=date;

    albaranes.Append;
    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;
    albaranesdetalle.Close;
    qalbaranesiva.close;
    albaranesfecha.Value:=date;
end;

procedure Talbaranes.btaimprimirClick(Sender: TObject);
var filtro,documento,formapago,pedidos,fechacarga,desg_ivas,base,iva,tipo,lotes,palets,variedades,cant_palets:string;
    fecha:tdate;
begin
    if listaimpresion.ItemIndex=0 then
    begin

       dsalbaranesdetalle.DataSet:=albaranesdetallegrupo;
       {.SQL.Add('select idempresa,idalbaran,sum(cantidad) as cantidad,precio,descuento,sum(base) as base,descripcion,cal,sum(palets) as palets,sum(bultos) as bultos,tipoiva,sum(iva) as iva,sum(total) as total,id,'+''''''+' as idarticulo,sum(totaldescuento) as totaldescuento,'+''''''+' as lote,serie,coste_transporte,coste_otros');
       albaranesdetalle.SQL.Add(',coste_comision,sum(pesobruto) as pesobruto,idfactura from albaranes_detalles group by idempresa,idalbaran,descripcion,cal,precio order by id');}

    end;
    if listaimpresion.ItemIndex=1 then
    begin

       dsalbaranesdetalle.DataSet:=albaranesdetalle;

{       albaranesdetalle.Close;
       albaranesdetalle.SQL.Clear;
       albaranesdetalle.SQL.Add('select * from albaranes_detalles order by id');
       albaranesdetalle.open;}
    end;

    filtro:='id=';
    filtro:=filtro+albaranesid.asstring;
    filtro:=filtro+' and serie='+''''+albaranesserie.AsString+'''';
    if comboformulario.KeyValue=null then documento:=qseriesimp_albaran.AsString
      else documento:=qformulariosformulario.AsString;
    albaranes.Filter:=filtro;
    albaranes.filtered:=true;
    fecha:=albaranesfecha.AsDateTime;
    fecha:=fecha+qformaspagodias.asinteger;
    formapago:='FORMA DE PAGO: '+qformaspagodescripcion.AsString+' FECHA DE VENCIMIENTO EL '+DATETOSTR(FECHA);
    if albaranesccid.AsString<>'' then
    begin
    {  qaux.SQL.Clear;
      qaux.SQL.Add('SELECT concat(banco,'+''''+' '+''''+',cciban,'+''''+'-'+''''+',ccentidad,'+''''+'-'+''''+',ccoficina,'+''''+'-'+''''+',ccdc,'+''''+'-'+''''+',cccc) FROM cuentas_bancarias where ide='+albaranesidempresa.AsString+' and id='+albaranesccid.asstring);
      qaux.open;}
      formapago:=formapago+'  '+qaux.Fields[0].asstring;
    end;
    qalbaranesiva.First;
    desg_ivas:='';
    while not qalbaranesiva.Eof do
    begin
    if qalbaranesivabase.AsFloat<>0 then
      begin
         tipo:=format('%2d',[qalbaranesivatipo.asinteger]);
         base:=format('%10.2f',[qalbaranesivabase.Asfloat]);
         iva:=format('%8.2f',[qalbaranesivaiva.asfloat]);
         desg_ivas:=desg_ivas+tipo+' '+iva;
      end;
      qalbaranesiva.Next;
    end;
    qalbaraneslotes.First;
    lotes:='';
    variedades:='';
    while not qalbaraneslotes.Eof do
    begin
      lotes:=lotes+qalbaranesloteslote.AsString+#13+#10;
      variedades:=variedades+qalbaraneslotesvariedad.AsString+#13+#10;
      qalbaraneslotes.Next;
    end;
    qalbaranespalets.First;
    palets:='';
    cant_palets:='';
    while not qalbaranespalets.Eof do
    begin
      palets:=palets+qalbaranespaletstipo_palet.AsString+#13+#10;
      cant_palets:=cant_palets+qalbaranespaletscantidad.asstring+#13+#10;
//      palets:=palets+qalbaranespaletstipo_palet.asstring+#9+#9+qalbaranespaletscantidad.AsString+#13+#10;
      qalbaranespalets.Next;
    end;

    pedidos:='';
    qaux.SQL.Clear;
    qaux.SQL.Add('SELECT pedidocliente,fecha_carga FROM pedidos where (id,ide) in (select idpedido,ide from pedidosdetalle where idalbaran='+''''+albaranesserie.AsString+'/'+albaranesid.AsString+''''+')');
    qaux.open;
    while not qaux.Eof do
    begin
      pedidos:=pedidos+' '+qaux.Fields[0].AsString;
      qaux.Next;
    end;
    fechacarga:=qaux.Fields[1].AsString;


    infalbaran.Datasource:=dsalbaranes;
    infdetallealbaran.Datasource:=dsalbaranesdetalle;
    infalbaranivas.Datasource:=dsqalbaranesiva;
    informe.Report.Clear;
    informe.LoadFromFile('c:\agrigest\informes\'+documento+'.fr3');
    informe.Variables.Variables['FORMAPAGO']:=QUOTEDSTR(formapago);
    informe.Variables.Variables['PEDIDOS']:=QUOTEDSTR(pedidos);
    informe.Variables.Variables['FECHACARGA']:=QUOTEDSTR(fechacarga);
    informe.Variables.Variables['DESGIVAS']:=QUOTEDSTR(desg_ivas);
    informe.Variables.Variables['LOTES']:=QUOTEDSTR(lotes);
    informe.Variables.Variables['PALETS']:=QUOTEDSTR(palets);
    informe.Variables.Variables['CANTIDAD']:=QUOTEDSTR(cant_palets);
    informe.Variables.Variables['VARIEDAD']:=QUOTEDSTR(variedades);
    informe.ShowReport();
    informe.Clear;
//    informe.Variables.Variables['TITULO']:=QUOTEDSTR(panel100.Caption);

    albaranes.filtered:=false;
    dsalbaranesdetalle.DataSet:=albaranesdetalle;
{    albaranesdetalle.Close;
    albaranesdetalle.SQL.Clear;
    albaranesdetalle.SQL.Add('select * from albaranes_detalles order by id');
    albaranesdetalle.open;}

end;

procedure Talbaranes.btaimportarClick(Sender: TObject);
var serie,idalbaran:string;
begin
    serie:=albaranesserie.AsString;
    idalbaran:=albaranesid.AsString;
    seleccionarpedidos := Tseleccionarpedidos.Create(nil);
    try
      seleccionarpedidos.showmodal();
    finally
      seleccionarpedidos.Free;
      albaranes.refresh;
      albaranes.Locate('serie,id',vararrayof([serie,idalbaran]),[locaseinsensitive])

    end;
end;

procedure Talbaranes.Button10Click(Sender: TObject);
begin
  qalbaraneslotes.Delete;
end;

procedure Talbaranes.Button11Click(Sender: TObject);
begin
  qalbaranespalets.delete;
end;

procedure Talbaranes.Button1Click(Sender: TObject);
var precio,serie,id:string;
    i:integer;
begin
   serie:=albaranesserie.AsString;
   id:=albaranesid.AsString;
   if albaranesdetalle.RecordCount>0 then
   begin
    precio:=stringreplace((edit1.Text),'.',',',[rfreplaceall]);
    if dbgrid2.Selectedrows.Count>0 then
    begin
      for i := 0 to dbgrid2.Selectedrows.Count - 1 do
      begin
         albaranesdetalle.GotoBookmark ((dbgrid2.selectedrows[i]));
         albaranesdetalle.Edit;
         albaranesdetalleprecio.Value:=strtofloat(precio);
         albaranesdetalle.Post;
      end;
    end else
    begin
     albaranesdetalle.first;
     while not albaranesdetalle.Eof do
     begin
       if albaranesdetallecantidad.AsFloat>0 then
       begin
         albaranesdetalle.Edit;
         albaranesdetalleprecio.Value:=strtofloat(precio);
         albaranesdetalle.Post;
       end;
       albaranesdetalle.Next;
     end;
    end;
   end;
   albaranesdetalle.refresh;
   albaranes.Refresh;
   albaranes.Locate('serie,id',vararrayof([serie,id]),[locaseinsensitive]);

end;

procedure Talbaranes.Button2Click(Sender: TObject);
var id,codcomision,empresa,serie:string;
    coste_trans,cantidad,comision:real;
begin
   codcomision:=dm.tempresacodcomision.AsString;
   empresa:=albaranesidempresa.AsString;
   serie:=albaranesserie.AsString;
   id:=albaranesid.AsString;
   albaranesdetalle.Append;
   dbgrid2.Fields[0].Value:=codcomision;
   filtro:=albaranesdetalleidarticulo.asstring;
   qarticulos.Close;
   qarticulos.Open;
   if qarticulos.RecordCount>0 then
   begin
     qtipos_iva.Open;
     albaranesdetalledescripcion.value:=qarticulosdescripcion.AsString;
     if qclientesexento_iva.AsInteger=0 then albaranesdetalletipoiva.value:=qtipos_ivatipo.Asfloat
      else albaranesdetalletipoiva.value:=0;
   end;

   dbgrid2.Fields[7].Value:=-1;
   dbgrid2.Fields[8].Value:=albaranesneto.AsFloat*(albaranescomision.AsFloat/100);
   albaranesdetalle.Post;
   qaux.Close;
   qaux.SQL.Clear;
   qaux.SQL.Add('select sum(cantidad),sum(total) from albaranes_detalles where lote is not null and idempresa='+empresa+' and serie='+''''+serie+''''+' and idalbaran='+albaranesid.asstring);
   qaux.Open;
   cantidad:=qaux.Fields[0].AsFloat;
   if (cantidad>0) and (albaranescoste_transporte.AsFloat>0) then
      begin
        coste_trans:=albaranescoste_transporte.AsFloat/cantidad;
        qaux.Close;
        qaux.SQL.Clear;
        qaux.SQL.Add('update albaranes_detalles set coste_transporte=cantidad*'+stringreplace(floattostr(coste_trans),',','.',[rfreplaceall])+' where lote is not null and idempresa='+empresa+' and serie='+''''+serie+''''+' and idalbaran='+albaranesid.asstring+' and idarticulo<>(select codcomision from empresa where id='+albaranesidempresa.AsString+') and idarticulo<>(select codtransporte from empresa where id='+albaranesidempresa.AsString+')');
        qaux.execsql;
      end;
      comision:=albaranescomision.AsFloat/100;
      qaux.Close;
      qaux.SQL.Clear;
      qaux.SQL.Add('update albaranes_detalles set coste_comision=total*'+stringreplace(floattostr(comision),',','.',[rfreplaceall])+' where idempresa='+empresa+' and serie='+''''+serie+''''+' and idalbaran='+albaranesid.asstring+' and idarticulo<>(select codcomision from empresa where id='+albaranesidempresa.AsString+') and idarticulo<>(select codtransporte from empresa where id='+albaranesidempresa.AsString+')');
      qaux.execsql;

    albaranes.Refresh;
    albaranes.Locate('serie,id',vararrayof([serie,id]),[locaseinsensitive]);
    albaranesdetalle.Refresh;
    albaranesdetalle.Last;
    qalbaranesiva.Refresh;

end;

procedure Talbaranes.Button3Click(Sender: TObject);
var  archivo:string;
begin
    qalbaranesclientes.Close;
    qalbaranesclientes.SQL.Clear;
    qalbaranesclientes.SQL.Add('(select a.*,ad.*,l.parcela from albaranes a,albaranes_detalles ad,lotes l where l.idempresa=ad.idempresa and l.codigo=ad.lote and a.idempresa=ad.idempresa and a.serie=ad.serie and a.id=ad.idalbaran and a.serie='+''''+qseries2id.AsString+''''+') ');
    qalbaranesclientes.SQL.Add(' union ALL ');
    qalbaranesclientes.SQL.Add('(select a.*,ad.*,'+''''+' '+''''+' as parcela from albaranes a,albaranes_detalles ad where ad.lote is null and a.idempresa=ad.idempresa and a.serie=ad.serie and a.id=ad.idalbaran and a.serie='+''''+qseries2id.AsString+''''+') order by fecha desc');
    qalbaranesclientes.open;
    savedialog1.FileName:='ALBARANES CLIENTES.xlsx';
    savedialog1.Execute();
    archivo:=savedialog1.FileName;
    try
    Exportaraexcel(archivo,'ALBARANES',gridalbaranesaexcel);
    finally
      showmessage('Los datos han sido exportados correctamente');
    end;

end;

procedure Talbaranes.Button4Click(Sender: TObject);
var serie,id:string;
begin
    if albaranesdetalle.recordcount>0 then
    begin
        serie:=albaranesserie.AsString;
        id:=albaranesid.AsString;
        albaranesdetalle.Delete;
        albaranesdetalle.Refresh;
//        albaranes.Refresh;
//        albaranes.Locate('serie;id',vararrayof([serie,id]),[locaseinsensitive,lopartialkey]);
        qalbaranesiva.Refresh;
    end;
end;

procedure Talbaranes.Button5Click(Sender: TObject);
var id,codtransporte,empresa,serie:string;
    coste_trans,cantidad,comision:real;
begin
   id:=albaranesid.AsString;
   empresa:=albaranesidempresa.AsString;
   serie:=albaranesserie.AsString;
   codtransporte:=dm.tempresacodtransporte.AsString;
   albaranesdetalle.Append;
   dbgrid2.Fields[0].Value:=codtransporte;
   filtro:=albaranesdetalleidarticulo.asstring;
   qarticulos.Close;
   qarticulos.Open;
   if qarticulos.RecordCount>0 then
   begin
     qtipos_iva.Open;
     albaranesdetalledescripcion.value:=qarticulosdescripcion.AsString;
     if qclientesexento_iva.AsInteger=0 then albaranesdetalletipoiva.value:=qtipos_ivatipo.Asfloat
      else albaranesdetalletipoiva.value:=0;
   end;
   dbgrid2.Fields[7].Value:=-1;
   dbgrid2.Fields[8].Value:=albaranescoste_transporte.AsFloat;
   albaranesdetalle.Post;
   qaux.Close;
   qaux.SQL.Clear;
   qaux.SQL.Add('select sum(cantidad),sum(total) from albaranes_detalles where lote is not null and idempresa='+empresa+' and serie='+''''+serie+''''+' and idalbaran='+albaranesid.asstring);
   qaux.Open;
   cantidad:=qaux.Fields[0].AsFloat;

   if (cantidad>0) and (albaranescoste_transporte.AsFloat>0) then
      begin
        coste_trans:=albaranescoste_transporte.AsFloat/cantidad;

        qaux.Close;
        qaux.SQL.Clear;
        qaux.SQL.Add('update albaranes_detalles set coste_transporte=cantidad*'+stringreplace(floattostr(coste_trans),',','.',[rfreplaceall])+' where lote is not null and idempresa='+empresa+' and serie='+''''+serie+''''+' and idalbaran='+albaranesid.asstring+' and idarticulo<>(select codcomision from empresa where id='+albaranesidempresa.AsString+') and idarticulo<>(select codtransporte from empresa where id='+albaranesidempresa.AsString+')');
        qaux.execsql;

      end;
      comision:=albaranescomision.AsFloat/100;
      qaux.Close;
      qaux.SQL.Clear;
      qaux.SQL.Add('update albaranes_detalles set coste_comision=total*'+stringreplace(floattostr(comision),',','.',[rfreplaceall])+' where idempresa='+empresa+' and serie='+''''+serie+''''+' and idalbaran='+albaranesid.asstring+' and idarticulo<>(select codcomision from empresa where id='+albaranesidempresa.AsString+') and idarticulo<>(select codtransporte from empresa where id='+albaranesidempresa.AsString+')');
      qaux.execsql;

    albaranes.Refresh;
    albaranes.Locate('serie,id',vararrayof([serie,id]),[locaseinsensitive]);
    albaranesdetalle.Refresh;
    albaranesdetalle.Last;
    qalbaranesiva.Refresh;


end;

procedure Talbaranes.Button7Click(Sender: TObject);
begin
    traza_materiales2 := Ttraza_materiales2.Create(nil);
    try
      traza_materiales2.qpesadas.close;
      traza_materiales2.qpesadas.SQL.Clear;
      traza_materiales2.qpesadas.SQL.Add('select mat.idea,mat.idea2,mat.idaf,af.descripcion,mat.cantidad,mat.lote,e.documento as doc_compra,p.nombre as proveedor,:documento as documento from ea_materiales mat ,articulosf af,entradas_detalle ed,entradas e,proveedores p  where');
      traza_materiales2.qpesadas.SQL.Add('mat.idaf=af.id and mat.ide=af.idempresa and  mat.idaf=ed.id_propio and mat.lote=ed.lote and ed.identrada=e.id and mat.ide=e.idempresa and e.idproveedor=p.id and');
      traza_materiales2.qpesadas.SQL.Add(' (ide,idea,idea2) in (select idempresa,id,idea from ea_pesadas where idalbaran=:documento) order by idaf,idea,idea2');
      traza_materiales2.qpesadas.ParamByName('documento').AsString:=albaranesserie.AsString+'/'+albaranesid.AsString;
      traza_materiales2.qpesadas.prepare;
      traza_materiales2.qpesadas.open;
      traza_materiales2.DBGrid2.Columns[0].Title.caption:='Albaran';
      traza_materiales2.showmodal();
    finally
      traza_materiales2.Free;
    end;

end;

procedure Talbaranes.Button9Click(Sender: TObject);
var cabecera,embalajes,lineas,localizaciones,marcas:textfile;
    campo,tipo,ruta,archivo,cadena,parteentera,partedecimal,linea,vdia,vmes,vanyo:string;
    largo,num_envases,num_bultos:real;
    i,largototal,decimales,encontrado,numlinea,idenvase:integer;
    dia,mes,anyo:word;
begin
  SaveDialog1.FileName := 'CABALB.TXT';
  SaveDialog1.Execute();
  ruta:= extractfilepath(savedialog1.filename);
  try
    assignfile(cabecera, ruta+'CABALB.TXT');
    rewrite(cabecera);
    assignfile(embalajes, ruta+'EMBALB.TXT');
    rewrite(embalajes);
    assignfile(lineas, ruta+'LINALB.TXT');
    rewrite(lineas);
    assignfile(localizaciones, ruta+'LOCALB.TXT');
    rewrite(localizaciones);
    assignfile(marcas, ruta+'MARCALB.TXT');
    rewrite(marcas);
    if dbgrid3.SelectedRows.Count>0 then
    for i := 0 to dbgrid3.Selectedrows.Count - 1 do
      begin
        albaranes.GotoBookmark ((dbgrid3.selectedrows[i]));
        qedicabecera.close;
        qedicabecera.Prepare;
        qedicabecera.ParamByName('SERIE').Asstring:=albaranesserie.asstring;
        qedicabecera.ParamByName('ALBARAN').Asinteger:=albaranesid.asinteger;
        qedicabecera.open;
        qediembalajes.Close;
        qediembalajes.Prepare;
        qediembalajes.ParamByName('ALBARAN').AsString:=albaranesserie.AsString+'/'+albaranesid.AsString;
        qediembalajes.Open;
        qedilocalizaciones.close;
        qedilocalizaciones.Prepare;
        qedilocalizaciones.ParamByName('SERIE').Asstring:=albaranesserie.asstring;
        qedilocalizaciones.ParamByName('ALBARAN').Asinteger:=albaranesid.asinteger;
        qedilocalizaciones.open;
        qedilinalbaran.close;
        qedilinalbaran.Prepare;
        qedilinalbaran.ParamByName('SERIE').Asstring:=albaranesserie.asstring;
        qedilinalbaran.ParamByName('ALBARAN').Asinteger:=albaranesid.asinteger;
        qedilinalbaran.open;
 ///// CABECERA ALBARAN
    qedi_cabalbaran.Open;
    qedi_cabalbaran.First;
    linea:='';
    while not qedi_cabalbaran.Eof do
    begin
      campo:=qedi_cabalbarancampo.AsString;
      largo:=qedi_cabalbaranlongitud.AsFloat;
      cadena:=formatfloat('#####.0',largo);
      parteentera:= copy(cadena,0,pos(',',cadena)-1);
      largototal:=strtoint(parteentera);
      partedecimal:= copy(cadena,pos(',',cadena)+1,length(Cadena));
      decimales:=strtoint(partedecimal);
      tipo:=qedi_cabalbarantipo.AsString;
      cadena:='';
      if tipo='X' then
      begin
        //campo:=copy(campo,0,largototal-1);
        if campo='IDCAB' then
        begin
             cadena:=qedicabeceraidcab.AsString;
        end;
        if campo='NUMDES' then
        begin
             cadena:=qedicabeceranumdes.AsString;
        end;
        if campo='TIPO' then
        begin
             cadena:=qedicabeceratipo.AsString;
        end;
        if campo='FUNCION' then
        begin
             cadena:='9';
        end;
        if campo='DPTO' then
        begin
             cadena:=qedicabeceradpto.asstring;
        end;
        if campo='FECDES' then
        begin
          decodedate(qedicabecerafecdes.AsDateTime,anyo,mes,dia);
          vdia:=inttostr(dia);
          vdia:=StringOfChar('0', 2 - length(vdia))+vdia;
          vmes:=inttostr(mes);
          vmes:=StringOfChar('0', 2 - length(vmes))+vmes;
          vanyo:=inttostr(anyo);
          vanyo:=StringOfChar('0', 2 - length(vanyo))+vanyo;
          cadena:=vanyo+vmes+vdia;
        end;
        if campo='FECPED' then
        begin
          decodedate(qedicabecerafecped.AsDateTime,anyo,mes,dia);
          vdia:=inttostr(dia);
          vdia:=StringOfChar('0', 2 - length(vdia))+vdia;
          vmes:=inttostr(mes);
          vmes:=StringOfChar('0', 2 - length(vmes))+vmes;
          vanyo:=inttostr(anyo);
          vanyo:=StringOfChar('0', 2 - length(vanyo))+vanyo;
          cadena:=vanyo+vmes+vdia;
        end;
        if campo='FECENT' then
        begin
          decodedate(qedicabecerafecent.AsDateTime,anyo,mes,dia);
          vdia:=inttostr(dia);
          vdia:=StringOfChar('0', 2 - length(vdia))+vdia;
          vmes:=inttostr(mes);
          vmes:=StringOfChar('0', 2 - length(vmes))+vmes;
          vanyo:=inttostr(anyo);
          vanyo:=StringOfChar('0', 2 - length(vanyo))+vanyo;
          cadena:=vanyo+vmes+vdia;
        end;
        if campo='NUMALB' then
        begin
          if qedicabeceraalbarancliente.AsString<>'' then cadena:=qedicabeceraalbarancliente.AsString else cadena:=qedicabeceranumalb.AsString;
        end;
        if campo='FECALB' then
        begin
          decodedate(qedicabecerafecalb.AsDateTime,anyo,mes,dia);
          vdia:=inttostr(dia);
          vdia:=StringOfChar('0', 2 - length(vdia))+vdia;
          vmes:=inttostr(mes);
          vmes:=StringOfChar('0', 2 - length(vmes))+vmes;
          vanyo:=inttostr(anyo);
          vanyo:=StringOfChar('0', 2 - length(vanyo))+vanyo;
          cadena:=vanyo+vmes+vdia;
        end;
        if campo='NUMPED' then
        begin
             cadena:=qedicabeceranumped.AsString;
        end;
        if campo='ORIGEN' then
        begin
             cadena:=qedicabeceraorigen.AsString;
        end;
        if campo='DESTINO' then
        begin
             cadena:=qedicabeceradestino.AsString;
        end;
        if campo='PROVEEDO' then
        begin
           cadena:=qedicabeceraorigen.AsString;
           //cadena:=qedicabeceraproveedo.AsString;
        end;
        if campo='COMPRADO' then
        begin
             cadena:=qedicabeceracomprado.AsString;
        end;
        if campo='RECEPTOR' then
        begin
             cadena:=qedicabecerareceptor.Asstring;
        end;
        if campo='FECENV' then
        begin
          decodedate(qedicabecerafecenv.AsDateTime,anyo,mes,dia);
          vdia:=inttostr(dia);
          vdia:=StringOfChar('0', 2 - length(vdia))+vdia;
          vmes:=inttostr(mes);
          vmes:=StringOfChar('0', 2 - length(vmes))+vmes;
          vanyo:=inttostr(anyo);
          vanyo:=StringOfChar('0', 2 - length(vanyo))+vanyo;
          cadena:=vanyo+vmes+vdia;
        end;
        if campo='CODPROV' then
        begin
             cadena:=qedicabeceracodprov.AsString;
        end;
        if campo='NOMBREEMISOR' then
        begin
             cadena:=qedicabeceranombreemisor.asstring;
        end;
        if campo='NIFEMISOR' then
        begin
             cadena:=qedicabeceranifemisor.asstring;
        end;
        if campo='NIFPROVEEDOR' then
        begin
             cadena:=qedicabeceranifemisor.asstring;
        end;
        if campo='PAISPROVEEDOR' then
        begin
             cadena:='ESP';
        end;
        if campo='NOMBRERECEPTOR' then
        begin
             cadena:=qedicabeceranombrereceptor.asstring;
        end;
        if campo='NOMBRECOMPRADOR' then
        begin
             cadena:=qedicabeceranombrecomprador.asstring;
        end;
        if campo='NOMBREPROVEEDOR' then
        begin
            cadena:=qedicabeceranombreemisor.asstring;
            //cadena:=qedicabeceranombreproveedor.asstring;
        end;
        if campo='NOMBREPTOENTREGA' then
        begin
             cadena:=qedicabeceranombreptoentrega.asstring;
        end;
        if campo='DIRECCIONEMISOR' then
        begin
             cadena:=qedicabeceradireccionemisor.asstring;
        end;
        if campo='POBLACIONEMISOR' then
        begin
             cadena:=qedicabecerapoblacionemisor.asstring;
        end;
        if campo='PROVINCIAEMISOR' then
        begin
             cadena:=qedicabeceraprovinciaemisor.asstring;
        end;
        if campo='CPEMISOR' then
        begin
             cadena:=qedicabeceracpemisor.asstring;
        end;
        if campo='DIRECCIONPROVEEDOR' then
        begin
             cadena:=qedicabeceradireccionemisor.asstring;
        end;
        if campo='POBLACIONPROVEEDOR' then
        begin
             cadena:=qedicabecerapoblacionemisor.asstring;
        end;
        if campo='PROVINCIAPROVEEDOR' then
        begin
             cadena:=qedicabeceraprovinciaemisor.asstring;
        end;
        if campo='CPPROVEEDOR' then
        begin
             cadena:=qedicabeceracpemisor.asstring;
        end;
        if campo='DIRECCIONCOMPRADOR' then
        begin
             cadena:=qedicabeceradireccioncomprador.asstring;
        end;
        if campo='POBLACIONCOMPRADOR' then
        begin
             cadena:=qedicabecerapoblacioncomprador.asstring;
        end;
        if campo='PROVINCIACOMPRADOR' then
        begin
             cadena:=qedicabeceraprovinciacomprador.asstring;
        end;
        if campo='CPCOMPRADOR' then
        begin
             cadena:=qedicabeceracpcomprador.asstring;
        end;
        if campo='DIRECCIONPTOENTREGA' then
        begin
             cadena:=qedicabeceradireccionptoentrega.asstring;
        end;
        if campo='POBLACIONPTOENTREGA' then
        begin
             cadena:=qedicabecerapoblacionptoentrega.asstring;
        end;
        if campo='PROVINCIAPTOENTREGA' then
        begin
             cadena:=qedicabeceraprovinciaptoentrega.asstring;
        end;
        if campo='CPPTOENTREGA' then
        begin
             cadena:=qedicabeceracpptoentrega.asstring;
        end;
        if campo='DIRECCIONRECEPTOR' then
        begin
             cadena:=qedicabeceradireccionreceptor.asstring;
        end;
        if campo='POBLACIONRECEPTOR' then
        begin
             cadena:=qedicabecerapoblacionreceptor.asstring;
        end;
        if campo='PROVINCIARECEPTOR' then
        begin
             cadena:=qedicabeceraprovinciareceptor.asstring;
        end;
        if campo='CPRECEPTOR' then
        begin
             cadena:=qedicabeceracpreceptor.asstring;
        end;
        if campo='NIFPROVEEDOR' then
        begin
            cadena:=qedicabeceranifemisor.asstring;
            //cadena:=qedicabeceranifproveedor.asstring;
        end;
        if campo='MONEDA' then
        begin
             cadena:=qedicabeceramoneda.asstring;
        end;
        if campo='MEDIOTRAN' then
        begin
             cadena:=qedicabeceramediotran.asstring;
        end;
        if campo='ORDENADOR' then
        begin
             cadena:=qedicabeceraordenador.asstring;
        end;
        if campo='NOMCONREC' then
        begin
             cadena:='PERECEDEROS';
        end;
        if campo='ULTCONS' then
        begin
             cadena:=qedicabeceraultcons.asstring;
        end;
        cadena:=copy(cadena,0,largototal);
        linea:= linea + cadena + StringOfChar(' ', largototal - length(cadena));
      end;
      if tipo='N' then
      begin
        largo:=0;
        if campo='TOTQTY' then
        begin
             largo:=qedicabeceratotqty.Asfloat;
        end;
        if campo='IMPTOTBRUTO' then
        begin
             largo:=qedicabeceraimptotbruto.Asfloat;
        end;
        if campo='IMPTOTNETO' then
        begin
             largo:=qedicabeceraimptotneto.Asfloat;
        end;
        if campo='PESOBRUTOT' then
        begin
             largo:=qedicabecerapesobrutot.Asfloat;
        end;
        if campo='PESONETTOT' then
        begin
             largo:=qedicabecerapesonettot.Asfloat;
        end;
        if campo='NUMTOTBUL' then
        begin
             largo:=qedicabeceranumtotbul.Asfloat;
        end;
        if largo>0 then
          begin
            case decimales of
              0:cadena:=formatfloat('#####',largo);
              1:cadena:=formatfloat('#####.0',largo);
              2:cadena:=formatfloat('#####.00',largo);
              3:cadena:=formatfloat('#####.000',largo);
              4:cadena:=formatfloat('#####.0000',largo);
              5:cadena:=formatfloat('#####.00000',largo);
            end;
    //        cadena:=floattostrf(largo,ffGeneral,largototal,decimales);
            linea:=linea+ StringOfChar('0', largototal - length(cadena))+cadena;
            end else
          begin
             cadena:='';
             cadena:=copy(cadena,0,largototal);
             linea:= linea + cadena + StringOfChar(' ', largototal - length(cadena));
          end;
      end;
      qedi_cabalbaran.next;
    end;
    writeln(cabecera, linea );
/////   EMBALAJES

    idenvase:=1;
    while not qediembalajes.eof do
    begin
      qedi_embalbaran.Open;
      qedi_embalbaran.First;
      linea:='';
      while not qedi_embalbaran.Eof do
      begin
        campo:=qedi_embalbarancampo.AsString;
        largo:=qedi_embalbaranlongitud.AsFloat;
        cadena:=formatfloat('#####.0',largo);
        parteentera:= copy(cadena,0,pos(',',cadena)-1);
        largototal:=strtoint(parteentera);
        partedecimal:= copy(cadena,pos(',',cadena)+1,length(Cadena));
        decimales:=strtoint(partedecimal);
        tipo:=qedi_embalbarantipo.AsString;
        cadena:='';
        if tipo='X' then
        begin
        if campo='IDCAB' then
        begin
             cadena:=qediembalajesidcab.asstring;
        end;
        if campo='IDEMB' then
        begin
             cadena:=qediembalajescpso.asstring;
{             cadena:=inttostr(idenvase);
             if qediembalajescpso.AsString='1' then
             begin
                idenvase:=idenvase+1;
             end;}
        end;
        if campo='CPS' then
        begin
          cadena:=qediembalajescpso.asstring;
{             if pos('PALET',qediembalajesdescemb.asstring)>0 then
             begin
                cadena:='1';//qediembalajescpso.asstring;
             end else
             begin
                cadena:=inttostr(numlinea);
                if qediembalajescpso.AsString='1' then
                begin
                   numlinea:=numlinea+1;
                end;
            end;}
        end;
        if campo='CPSPADRE' then
        begin
             if pos('PALET',qediembalajesdescemb.asstring)>0 then
             begin
                cadena:='';//qediembalajescpso.asstring;
             end else cadena:='1';
        end;
        if campo='TIPEMB' then
        begin
          encontrado:=0;
             cadena:=qediembalajesdescemb.asstring;
             if encontrado=0 then encontrado:=pos('CARTON',cadena);
             if encontrado>0 then
             begin
               cadena:='CT';
               encontrado:=-1;
             end;
             if encontrado=0 then encontrado:=pos('PALET',cadena);
             if encontrado>0 then cadena:='09';
             if encontrado=0 then cadena:='CS';
        end;
        if campo='DESCEMB' then
        begin
             cadena:=qediembalajesdescemb.asstring;
        end;
        if campo='PAGRET' then
        begin
             cadena:=qediembalajespagret.asstring;

        end;
        if campo='SSCC1' then
        begin
             if pos('PALET',qediembalajesdescemb.asstring)>0 then
             begin
                cadena:='';//qediembalajescpso.asstring;
             end else
             cadena:=qediembalajessscc1.asstring;
        end;
        if campo='FORMATO' then
        begin
             cadena:=qediembalajesformato.asstring;
        end;
        cadena:=copy(cadena,0,largototal);
        linea:= linea + cadena + StringOfChar(' ', largototal - length(cadena));
        end;
        if tipo='N' then
        begin
          largo:=0;
          if campo='CANTEMB' then
          begin
//               num_envases:=num_envases+qediembalajescantemb.Asfloat;
               num_envases:=qediembalajescantemb.Asfloat;
               largo:=num_envases;
          end;
          if campo='BULTPALET' then
          begin
               num_bultos:=qediembalajesbultpalet.Asfloat;
//               num_bultos:=num_bultos+qediembalajesbultpalet.Asfloat;
               largo:=num_bultos
          end;
          if largo>0 then
          begin
            case decimales of
              0:cadena:=formatfloat('#####',largo);
              1:cadena:=formatfloat('#####.0',largo);
              2:cadena:=formatfloat('#####.00',largo);
              3:cadena:=formatfloat('#####.000',largo);
              4:cadena:=formatfloat('#####.0000',largo);
              5:cadena:=formatfloat('#####.00000',largo);
            end;
    //        cadena:=floattostrf(largo,ffGeneral,largototal,decimales);
            linea:=linea+ StringOfChar('0', largototal - length(cadena))+cadena;
          end else
          begin
             cadena:='';
             cadena:=copy(cadena,0,largototal);
             linea:= linea + cadena + StringOfChar(' ', largototal - length(cadena));
          end;

        end;
        qedi_embalbaran.next;
      end;

      writeln(embalajes, linea );
      qediembalajes.Next;

    end;
/////    MARCAS
    qediembalajes.First;
    numlinea:=1;
    while not qediembalajes.eof do
    begin
      qedi_marcasembalaje.Open;
      qedi_marcasembalaje.First;
      linea:='';
      while not qedi_marcasembalaje.Eof do
      begin
        campo:=qedi_marcasembalajecampo.AsString;
        largo:=qedi_marcasembalajelongitud.AsFloat;
        cadena:=formatfloat('#####.0',largo);
        parteentera:= copy(cadena,0,pos(',',cadena)-1);
        largototal:=strtoint(parteentera);
        partedecimal:= copy(cadena,pos(',',cadena)+1,length(Cadena));
        decimales:=strtoint(partedecimal);
        tipo:=qedi_marcasembalajetipo.AsString;
        cadena:='';
        if tipo='X' then
        begin
        if campo='IDCAB' then
        begin
             cadena:=qediembalajesidcab.asstring;
        end;
        if campo='IDEMB' then
        begin
             cadena:=qediembalajescpso.asstring;
        end;
        if campo='IDLIN' then
        begin
             cadena:='0';//inttostr(numlinea);//qediembalajesidLIN.asstring;

        end;
        if campo='IDMARCA' then
        begin
          cadena:=inttostr(numlinea);//qediembalajesidMARCA.asstring;
        end;
        if campo='MARCA1' then
        begin
             cadena:=qediembalajesMARCA1.asstring;
        end;
        if campo='SSCC' then
        begin
             if pos('PALET',qediembalajesdescemb.asstring)>0 then
             begin
                cadena:='';//qediembalajescpso.asstring;
             end else
             cadena:=qediembalajessscc1.asstring;
        end;
        if campo='FECENV' then
        begin
          decodedate(qediembalajesfecenv.AsDateTime,anyo,mes,dia);
          vdia:=inttostr(dia);
          vdia:=StringOfChar('0', 2 - length(vdia))+vdia;
          vmes:=inttostr(mes);
          vmes:=StringOfChar('0', 2 - length(vmes))+vmes;
          vanyo:=inttostr(anyo);
          vanyo:=StringOfChar('0', 2 - length(vanyo))+vanyo;
          if pos('PALET',qediembalajesdescemb.asstring)>0 then
          begin
            cadena:='';//qediembalajescpso.asstring;
          end else
             cadena:=vanyo+vmes+vdia;
        end;
        if campo='LOTE' then
        begin
             cadena:=qediembalajesLOTE.asstring;
        end;

        cadena:=copy(cadena,0,largototal);
        linea:= linea + cadena + StringOfChar(' ', largototal - length(cadena));
        end;
        if tipo='N' then
        begin
          largo:=0;
          if largo>0 then
          begin
            case decimales of
              0:cadena:=formatfloat('#####',largo);
              1:cadena:=formatfloat('#####.0',largo);
              2:cadena:=formatfloat('#####.00',largo);
              3:cadena:=formatfloat('#####.000',largo);
              4:cadena:=formatfloat('#####.0000',largo);
              5:cadena:=formatfloat('#####.00000',largo);
            end;
    //        cadena:=floattostrf(largo,ffGeneral,largototal,decimales);
            linea:=linea+ StringOfChar('0', largototal - length(cadena))+cadena;
            end else
          begin
             cadena:='';
             cadena:=copy(cadena,0,largototal);
             linea:= linea + cadena + StringOfChar(' ', largototal - length(cadena));
          end;
        end;
        qedi_marcasembalaje.next;
      end;

      writeln(marcas, linea );
      qediembalajes.Next;
      numlinea:=numlinea+1;
    end;
////LINEAS ALBARAN
    qedilinalbaran.First;
    numlinea:=1;
    idenvase:=2;
    while not qedilinalbaran.eof do
    begin
      qedi_detalbaran.Open;
      qedi_detalbaran.First;
      linea:='';

      while not qedi_detalbaran.Eof do
      begin
        campo:=qedi_detalbarancampo.AsString;
        largo:=qedi_detalbaranlongitud.AsFloat;
        cadena:=formatfloat('#####.0',largo);
        parteentera:= copy(cadena,0,pos(',',cadena)-1);
        largototal:=strtoint(parteentera);
        partedecimal:= copy(cadena,pos(',',cadena)+1,length(Cadena));
        decimales:=strtoint(partedecimal);
        tipo:=qedi_detalbarantipo.AsString;
        cadena:='';
        if tipo='X' then
        begin
        if campo='IDCAB' then
        begin
             cadena:=qedilinalbaranidcab.asstring;
        end;
        if campo='IDEMB' then
        begin
             cadena:=qedilinalbarancpso.asstring;
{             cadena:=inttostr(idenvase);
             if qedilinalbarancpso.AsString='1' then
             begin
                idenvase:=idenvase+1;
             end;}
        end;
        if campo='IDLIN' then
        begin
             cadena:=inttostr(numlinea);//qedilinalbaranidlin.asstring;
             numlinea:=numlinea+1;
        end;
        if campo='EAN' then
        begin
             cadena:=qedilinalbaranean.asstring;
        end;
        if campo='NUMEXP' then
        begin
           if qedilinalbarannumexp2.AsString='' then cadena:=qedilinalbarannumexp.asstring
             else cadena:=qedilinalbarannumexp2.asstring;
        end;
        if campo='DESCRIP' then
        begin
             cadena:=qedilinalbarandescrip.asstring;
        end;
        if campo='TIPART' then
        begin
             cadena:='CU';
        end;
        if campo='NUMPED' then
        begin
             cadena:=qedilinalbarannumped.asstring;
        end;
        if campo='NUMALB' then
        begin
          if qedilinalbaranalbarancliente.AsString<>'' then cadena:=qedilinalbaranalbarancliente.AsString else cadena:=qedilinalbarannumalb.asstring;
        end;
        if campo='SSCC1' then
        begin
             cadena:=qedilinalbaransscc.asstring;
        end;
        if campo='FECENV' then
        begin
          decodedate(qedilinalbaranfecenv.AsDateTime,anyo,mes,dia);
          vdia:=inttostr(dia);
          vdia:=StringOfChar('0', 2 - length(vdia))+vdia;
          vmes:=inttostr(mes);
          vmes:=StringOfChar('0', 2 - length(vmes))+vmes;
          vanyo:=inttostr(anyo);
          vanyo:=StringOfChar('0', 2 - length(vanyo))+vanyo;
          cadena:=vanyo+vmes+vdia;
        end;
        if campo='LOTE' then
        begin
             cadena:=qedilinalbaranLOTE.asstring;
        end;
        if campo='DESTINO' then
        begin
             cadena:=qedilinalbarannombreptoentrega.asstring;
        end;
        if campo='FECPED' then
        begin
          decodedate(qedilinalbaranfecped.AsDateTime,anyo,mes,dia);
          vdia:=inttostr(dia);
          vdia:=StringOfChar('0', 2 - length(vdia))+vdia;
          vmes:=inttostr(mes);
          vmes:=StringOfChar('0', 2 - length(vmes))+vmes;
          vanyo:=inttostr(anyo);
          vanyo:=StringOfChar('0', 2 - length(vanyo))+vanyo;
          cadena:=vanyo+vmes+vdia;
        end;
        if campo='FECALB' then
        begin
          decodedate(qedilinalbaranfecalb.AsDateTime,anyo,mes,dia);
          vdia:=inttostr(dia);
          vdia:=StringOfChar('0', 2 - length(vdia))+vdia;
          vmes:=inttostr(mes);
          vmes:=StringOfChar('0', 2 - length(vmes))+vmes;
          vanyo:=inttostr(anyo);
          vanyo:=StringOfChar('0', 2 - length(vanyo))+vanyo;
          cadena:=vanyo+vmes+vdia;
        end;
        if campo='FECCADET' then
        begin
          decodedate(qedilinalbaranfeccadet.AsDateTime,anyo,mes,dia);
          vdia:=inttostr(dia);
          vdia:=StringOfChar('0', 2 - length(vdia))+vdia;
          vmes:=inttostr(mes);
          vmes:=StringOfChar('0', 2 - length(vmes))+vmes;
          vanyo:=inttostr(anyo);
          vanyo:=StringOfChar('0', 2 - length(vanyo))+vanyo;
          cadena:=vanyo+vmes+vdia;
        end;
        if campo='REFPROV' then
        begin
             cadena:=qedilinalbaranrefprov.asstring;
        end;
        if campo='UNICANT' then
        begin
             cadena:=qedilinalbaranunicant.asstring;
        end;
        if campo='TEXTO4' then
        begin
             cadena:=qedilinalbarantexto4.asstring;
        end;
        if campo='TEXTO5' then
        begin
             cadena:=qedilinalbarantexto5.asstring;
        end;
        if campo='FECCON' then
        begin
          decodedate(qedilinalbaranfeccon.AsDateTime,anyo,mes,dia);
          vdia:=inttostr(dia);
          vdia:=StringOfChar('0', 2 - length(vdia))+vdia;
          vmes:=inttostr(mes);
          vmes:=StringOfChar('0', 2 - length(vmes))+vmes;
          vanyo:=inttostr(anyo);
          vanyo:=StringOfChar('0', 2 - length(vanyo))+vanyo;
          cadena:=vanyo+vmes+vdia;
        end;


        cadena:=copy(cadena,0,largototal);
        linea:= linea + cadena + StringOfChar(' ', largototal - length(cadena));
        end;
        if tipo='N' then
        begin
          largo:=0;
          if campo='CENVFAC' then
          begin
               largo:=qedilinalbarancenvfac.Asfloat;
          end;
          if campo='CUEXP' then
          begin
               if qedilinalbarancuexp.Asfloat=0 then largo:=1 else largo:=qedilinalbarancuexp.Asfloat;
          end;
          if campo='CANTLOC1' then
          begin
               largo:=qedilinalbarancantloc1.Asfloat;
          end;
          if campo='PESTOTLIN' then
          begin
               if qedilinalbarancuexp.Asfloat=0 then largo:=qedilinalbaranpestotlin.Asfloat else largo:=0;
          end;
          if campo='PESOBRUTO' then
          begin
               largo:=qedilinalbaranpesobruto.Asfloat;
          end;
          if campo='PESONETO' then
          begin
               largo:=qedilinalbaranpesoneto.Asfloat;
          end;
          if largo>0 then
          begin
            case decimales of
              0:cadena:=formatfloat('#####',largo);
              1:cadena:=formatfloat('#####.0',largo);
              2:cadena:=formatfloat('#####.00',largo);
              3:cadena:=formatfloat('#####.000',largo);
              4:cadena:=formatfloat('#####.0000',largo);
              5:cadena:=formatfloat('#####.00000',largo);
            end;
    //        cadena:=floattostrf(largo,ffGeneral,largototal,decimales);
            linea:=linea+ StringOfChar('0', largototal - length(cadena))+cadena;
            end else
          begin
             cadena:='';
             cadena:=copy(cadena,0,largototal);
             linea:= linea + cadena + StringOfChar(' ', largototal - length(cadena));
          end;
        end;
        qedi_detalbaran.next;
      end;

      writeln(lineas, linea );
      qedilinalbaran.Next;
    end;
/// LOCALIZACIONES
///
    qedilocalizaciones.First;
    numlinea:=1;
    while not qedilocalizaciones.eof do
    begin
      qedi_lugaresentrega.Open;
      qedi_lugaresentrega.First;
      linea:='';
      while not qedi_lugaresentrega.Eof do
      begin
        campo:=qedi_lugaresentregacampo.AsString;
        largo:=qedi_lugaresentregalongitud.AsFloat;
        cadena:=formatfloat('#####.0',largo);
        parteentera:= copy(cadena,0,pos(',',cadena)-1);
        largototal:=strtoint(parteentera);
        partedecimal:= copy(cadena,pos(',',cadena)+1,length(Cadena));
        decimales:=strtoint(partedecimal);
        tipo:=qedi_lugaresentregatipo.AsString;
        cadena:='';
        if tipo='X' then
        begin
        if campo='IDCAB' then
        begin
             cadena:=qedilocalizacionesidcab.asstring;
        end;
        if campo='IDEMB' then
        begin
             cadena:=qedilocalizacionesidemb.asstring;
        end;
        if campo='IDLIN' then
        begin
             cadena:=inttostr(numlinea);//qedilocalizacionesidlin.asstring;
             numlinea:=numlinea+1;
        end;
        if campo='IDLOC' then
        begin
             cadena:=qedilocalizacionesidloc.asstring;
        end;
        if campo='LUGAR' then
        begin
             cadena:=qedilocalizacioneslugar.asstring;
        end;
        if campo='FECHAENT' then
        begin
          decodedate(qedilocalizacionesfecenv.AsDateTime,anyo,mes,dia);
          vdia:=inttostr(dia);
          vdia:=StringOfChar('0', 2 - length(vdia))+vdia;
          vmes:=inttostr(mes);
          vmes:=StringOfChar('0', 2 - length(vmes))+vmes;
          vanyo:=inttostr(anyo);
          vanyo:=StringOfChar('0', 2 - length(vanyo))+vanyo;
          cadena:=vanyo+vmes+vdia;
        end;
        if campo='NOMBREPTOENTREGA' then
        begin
             cadena:=qedilocalizacionesnombreptoentrega.asstring;
        end;
        if campo='UMEDIDA' then
        begin
             cadena:=qedilocalizacionesumedida.asstring;
        end;
        cadena:=copy(cadena,0,largototal);
        linea:= linea + cadena + StringOfChar(' ', largototal - length(cadena));
        end;
        if tipo='N' then
        begin
          largo:=0;
          if campo='CANTIDAD' then
          begin
               largo:=qedilocalizacionescantidad.Asfloat;
          end;
          if campo='CANTKGM' then
          begin
               largo:=qedilocalizacionescantkgm.Asfloat;
          end;
          if largo>0 then
          begin
            case decimales of
              0:cadena:=formatfloat('#####',largo);
              1:cadena:=formatfloat('#####.0',largo);
              2:cadena:=formatfloat('#####.00',largo);
              3:cadena:=formatfloat('#####.000',largo);
              4:cadena:=formatfloat('#####.0000',largo);
              5:cadena:=formatfloat('#####.00000',largo);
            end;
    //        cadena:=floattostrf(largo,ffGeneral,largototal,decimales);
            linea:=linea+ StringOfChar('0', largototal - length(cadena))+cadena;
            end else
          begin
             cadena:='';
             cadena:=copy(cadena,0,largototal);
             linea:= linea + cadena + StringOfChar(' ', largototal - length(cadena));
          end;
        end;
        qedi_lugaresentrega.next;
      end;

      writeln(localizaciones, linea );
      qedilocalizaciones.Next
    end;
   end


    finally
    closefile(cabecera);
    closefile(embalajes);
    closefile(lineas);
    closefile(localizaciones);
    closefile(marcas);
    showmessage('Los datos han sido exportados correctamente');

  end;
end;

procedure Talbaranes.btasiguienteClick(Sender: TObject);
begin
    albaranes.Prior;
end;

procedure Talbaranes.btaanteriorClick(Sender: TObject);
begin
    albaranes.next;
end;

procedure Talbaranes.DBGrid2ColExit(Sender: TObject);
begin
  if albaranesdetalle.State in [dsedit,dsinsert] then
  begin
    if dbgrid2.SelectedIndex=0 then
    begin
        filtro:=albaranesdetalleidarticulo.asstring;
        qarticulos.Close;
        qarticulos.Open;
        if qarticulos.RecordCount>0 then
        begin
           qtipos_iva.Open;
           albaranesdetalledescripcion.value:=qarticulosdescripcion.AsString;
           if qclientesexento_iva.AsInteger<>0 then albaranesdetalletipoiva.value:=qtipos_ivatipo.Asfloat
            else albaranesdetalletipoiva.value:=0;
        end;
    end;
  end;

end;

procedure Talbaranes.DBGrid2DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
    if albaranesdetalleidfactura.AsString<>'' then
    begin
        dbgrid2.Canvas.brush.Color := verde;
    end;
    dbgrid2.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

procedure Talbaranes.DBGrid2KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
    if (key=115) then
    begin
      buscararticulos := Tbuscararticulos.Create(nil);
      try
        fbuscararticulos.padre:=albaranes.Name;
        fbuscararticulos.filtro:=albaranesdetalleidarticulo.AsString;
        buscararticulos.Edit1.Text:=albaranesdetalleidarticulo.AsString;
        buscararticulos.showmodal();
      finally
        if albaranesdetalle.State in [dsbrowse] then albaranesdetalle.Edit;
        albaranesdetalleidarticulo.Value:=buscararticulos.qarticuloscodigo.AsString;
        albaranesdetalledescripcion.value:=buscararticulos.qarticulosdescripcion.AsString;
        albaranesdetalletipoiva.value:=buscararticulos.qtipos_ivatipo.Asfloat;
        buscararticulos.Free;
      end;
    end;
end;

procedure Talbaranes.DBGrid3DblClick(Sender: TObject);
begin
    pagecontrol1.TabIndex:=0;
end;

procedure Talbaranes.DBGrid3DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
    if albaranesfacturado.asinteger=0 then
    begin
        dbgrid3.Canvas.brush.Color := rojo;
    end;
    if albaranesfacturado.asinteger=1 then
    begin
        dbgrid3.Canvas.brush.Color := verde;
    end;

    dbgrid3.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

procedure Talbaranes.DBGrid3TitleClick(Column: TColumn);
var
  st:TFDQuerySortType;
begin
  st:=albaranes.SortType;
  albaranes.SortedFields:=Column.FieldName+',fecha';
  If st = stAscending then albaranes.SortType:=stDescending else albaranes.SortType:=stAscending;
  dsalbaranes.DataSet.First;

end;

procedure Talbaranes.comboserie2CloseUp(Sender: TObject);
begin
    albaranes.Close;
    albaranes.SQL.Clear;
    albaranes.SQL.Add('select * from albaranes where serie='+''''+qseries2id.AsString+''''+' order by serie desc,id desc');
    albaranes.Open;
//    albaranes.Locate('serie;id',vararrayof([serie,id]),[locaseinsensitive]);
end;

procedure Talbaranes.comboserieCloseUp(Sender: TObject);
begin
    if albaranes.State in [dsedit,dsinsert] then
    begin
      albaranesid.Value:=qseriesnum_albaran.AsInteger;
      dbedit2.SetFocus;
    end;
end;

procedure Talbaranes.comboclientesCloseUp(Sender: TObject);
begin
    albaranesnomcliente.value:=qclientesnombre.Asstring;
    albaranesnif.value:=qclientesnif.Asstring;
    albaranesdireccion.value:=qclientesdireccion.Asstring;
    albaranesprovincia.value:=qclientesprovincia.Asstring;
    albaranespoblacion.value:=qclientespoblacion.Asstring;
    albaranescodpost.value:=qclientescodpost.Asstring;
    albaranespaiscliente.value:=qclientespais.Asstring;
    albaranesidformapago.Value:=qclientesidformapago.asinteger;
    albaranescomision.Value:=qclientescomision.AsFloat;
end;

procedure Talbaranes.combodestinosCloseUp(Sender: TObject);
begin
    albaranesnomdestino.value:=qdestinosdescripcion.Asstring;
    albaranesdirecciondestino.value:=qdestinosdireccion.Asstring;
    albaranesprovinciadestino.value:=qdestinosprovincia.Asstring;
    albaranescodpostdestino.value:=qdestinoscodpost.Asstring;
    albaranespoblaciondestino.Value:=qdestinospoblacion.AsString;
    albaranespaisdestino.value:=qdestinospais.Asstring;
end;

procedure Talbaranes.dsalbaranesDataChange(Sender: TObject; Field: TField);
begin
if (albaranes.State in [dsbrowse]) and (albaranes.recordcount>0) then
begin
    qpedidos2.Close;
    qpedidos2.SQL.Clear;
    qpedidos2.SQL.Add('select p.id,p.ide,p.idcliente,p.iddestino,p.fecha_pedido,p.fecha_entrega,c.nombre_corto as cliente,d.descripcion as destino,p.pedidocliente from pedidos p,clientes c,clientes_destinos d where');
    qpedidos2.SQL.Add(' p.ide=c.idempresa and p.idcliente=c.id and p.ide=d.idempresa and p.idcliente=d.idcliente and p.iddestino=d.codigo and');
    qpedidos2.SQL.Add(' p.id in (select pd.idpedido from pedidosdetalle pd where pd.idalbaran='+''''+albaranesserie.asstring+'/'+albaranesid.AsString+''''+')');
    qpedidos2.Open;
    qpedidosdetalle2.close;
    qpedidosdetalle2.SQL.Clear;
    qpedidosdetalle2.SQL.Add('select * from pedidosdetalle where idalbaran='+''''+albaranesserie.asstring+'/'+albaranesid.AsString+'''');
    qpedidosdetalle2.Open;
    qclientes.Close;
    qclientes.SQL.Clear;
    qclientes.SQL.Add('select * from clientes where idempresa='+albaranesidempresa.asstring+' and id='+albaranesidcliente.asstring);
    qclientes.open;
    qdestinos.Close;
    qdestinos.SQL.Clear;
    qdestinos.SQL.Add('select * from clientes_destinos where idempresa='+albaranesidempresa.asstring+' and idcliente='+albaranesidcliente.asstring+' and codigo='+''''+albaranesiddestino.asstring+'''');
    qdestinos.open;
    albaranesdetalle.Close;
    albaranesdetalle.prepare;
    albaranesdetalle.ParamByName('empresa').AsInteger:=albaranesidempresa.AsInteger;
    albaranesdetalle.ParamByName('serie').AsString:=albaranesserie.AsString;
    albaranesdetalle.ParamByName('albaran').AsInteger:=albaranesid.AsInteger;
    albaranesdetalle.open;

    albaranesdetallegrupo.Close;
    albaranesdetallegrupo.prepare;
    albaranesdetallegrupo.ParamByName('empresa').AsInteger:=albaranesidempresa.AsInteger;
    albaranesdetallegrupo.ParamByName('serie').AsString:=albaranesserie.AsString;
    albaranesdetallegrupo.ParamByName('albaran').AsInteger:=albaranesid.AsInteger;
    albaranesdetallegrupo.open;

    qalbaraneslotes.Close;
    qalbaraneslotes.Prepare;
    qalbaraneslotes.ParamByName('EMPRESA').AsInteger:=albaranesidempresa.AsInteger;
    qalbaraneslotes.ParamByName('SERIE').AsString:=albaranesserie.Asstring;
    qalbaraneslotes.ParamByName('ALBARAN').AsInteger:=albaranesid.AsInteger;
    qalbaraneslotes.Open;
    qalbaranespalets.Close;
    qalbaranespalets.Prepare;
    qalbaranespalets.ParamByName('EMPRESA').AsInteger:=albaranesidempresa.AsInteger;
    qalbaranespalets.ParamByName('SERIE').AsString:=albaranesserie.Asstring;
    qalbaranespalets.ParamByName('ALBARAN').AsInteger:=albaranesid.AsInteger;
    qalbaranespalets.Open;
    if albaranesfacturado.AsInteger=1 then
    begin
        btafacturar.enabled:=false;
    end else
    begin
        btafacturar.enabled:=true;
        dbgrid2.Enabled:=true;
    end;
    if albaranesccid.AsString='' then
    begin
        dbtext1.Visible:=false;
        dbtext2.Visible:=false;
        dbtext16.Visible:=false;
        dbtext17.Visible:=false;
        dbtext18.Visible:=false;
    end else
    begin
        dbtext1.Visible:=true;
        dbtext2.Visible:=true;
        dbtext16.Visible:=true;
        dbtext17.Visible:=true;
        dbtext18.Visible:=true;
    end;

end;
end;

procedure Talbaranes.dsalbaranesStateChange(Sender: TObject);
begin
    if albaranes.State in [dsedit,dsinsert] then
    begin
        btanuevo.Enabled:=false;
        btamodificar.Enabled:=false;
        btaborrar.Enabled:=false;
        btacancelar.Enabled:=true;
        btaguardar.Enabled:=true;
        btaanterior.Enabled:=false;
        btasiguiente.Enabled:=false;
        btaimportar.Enabled:=false;
        btaimprimir.Enabled:=false;
        btafacturar.Enabled:=false;
        qdestinos.Close;
        qclientes.Close;
        qdestinos.LinkedFields:='Idempresa;idcliente';
        qdestinos.MasterFields:='Idempresa;id';
        qdestinos.Mastersource:=dsqclientes;
        qclientes.open;
        qdestinos.Open;
    end else
    begin
        btanuevo.Enabled:=true;
        btamodificar.Enabled:=true;
        btaborrar.Enabled:=true;
        btacancelar.Enabled:=false;
        btaguardar.Enabled:=false;
        btaanterior.Enabled:=true;
        btasiguiente.Enabled:=true;
        btaimportar.Enabled:=true;
        btaimprimir.Enabled:=true;
        btafacturar.Enabled:=true;
        qclientes.Close;
        qdestinos.Close;
        qdestinos.LinkedFields:='';
        qdestinos.MasterFields:='';
        qdestinos.Mastersource:=nil;
        qclientes.open;
        qdestinos.Open;

    end;
end;

procedure Talbaranes.dsqseries2DataChange(Sender: TObject; Field: TField);
begin
    albaranes.Close;
    albaranes.SQL.Clear;
    albaranes.SQL.Add('select * from albaranes where serie='+''''+qseries2id.AsString+''''+' order by serie desc,id desc');
    albaranes.Open;
end;

procedure Talbaranes.fechaalbaranCloseUp(Sender: TObject);
begin
//    albaranesfecha.Value:=fechaalbaran.Date;
end;

procedure Talbaranes.fechaalbaranEnter(Sender: TObject);
begin
//     if albaranes.State in [dsinsert] then albaranesfecha.Value:=fechaalbaran.Date;
//   if albaranes.State in [dsedit] then fechaalbaran.Date:=albaranesfecha.Value;
end;

procedure Talbaranes.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
    if (activecontrol is tdbgrid) then
    begin
        if Key = 13 then  Key :=9;
    end;

end;

procedure Talbaranes.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 Talbaranes.FormShow(Sender: TObject);
begin
    dm.tempresa.Open;
    qseries.Close;
    qseries2.Close;
    qdestinos.Close;
    qclientes.Close;
    qpedidos.Close;
    qpedidos2.close;
    qpedidosdetalle.Close;
    qpedidosdetalle2.Close;
    albaranes.Close;
    albaranesdetalle.Close;
    qalbaranesiva.Close;
    qformaspago.Close;
    qarticulos.Close;
    qtipos_iva.Close;
    qcuentas.Close;
    qformularios.Close;

    qseries.open;
    qseries2.Open;
    qdestinos.open;
    qclientes.open;
    qpedidos.open;
    qpedidos2.open;
    qpedidosdetalle.open;
    qpedidosdetalle2.open;
    albaranes.Close;
    albaranes.SQL.Clear;
    albaranes.SQL.Add('select * from albaranes where serie='+''''+qseries2id.AsString+''''+' order by serie desc,id desc');
    albaranes.Open;
    albaranesdetalle.open;
    qalbaranesiva.open;
    qformaspago.open;
    qarticulos.open;
    qtipos_iva.open;
    qcuentas.open;
    qformularios.Open;
    pagecontrol1.TabIndex:=1;
    comboserie2.KeyValue:=qseries2id.Asstring;
    comboformulario.KeyValue:=null;
end;

procedure Talbaranes.qalbaraneslotesAfterInsert(DataSet: TDataSet);
begin
    qalbaranesloteside.Value:=albaranesidempresa.AsInteger;
    qalbaraneslotesids.Value:=albaranesserie.AsString;
    qalbaraneslotesida.Value:=albaranesid.AsInteger;
end;

procedure Talbaranes.qalbaranespaletsAfterInsert(DataSet: TDataSet);
begin
    qalbaranespaletside.Value:=albaranesidempresa.AsInteger;
    qalbaranespaletsids.Value:=albaranesserie.AsString;
    qalbaranespaletsida.Value:=albaranesid.AsInteger;

end;

procedure Talbaranes.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;

end.
