unit UDMGS;

interface

uses
  SysUtils, Classes, DB,DBClient, MConnect,controls,QDIALOGS,MATH,DATEUTILS,VARIANTS,STRUTILS,
  DBGRIDS,QFORMS, Dialogs; // forms

type
  TMIRECORD = RECORD
    TIPO,ORDEN,ORDENLINEA,BORRADO,EMPRESA,ANYO,ANYO1,TIPOEMPRESA,ID,ID1,DESCONTAR,GRUPO,ID_SERIE:STRING;
  END;                      
  TMIVARIABLES = RECORD
     KEY:OLEVARIANT;
     BUSCANDO,ESCAPE,ERROR,ESCAPECDS,ESCAPEENTRA,PREGUNTA,ESLINEA,ENDBGRID,PREGUNTAEDIT,almacen:BOOLEAN;
     // ALMACEN DICE SI HAY QUE DESCONTAR O NO. CUANDO PASO DE ALBARAN A FACTURA NO HAY QUE DESCONTAR.
     beneficio,beneficioempresa,transporte:double;
     beneficio_min:boolean;
  END;

  TDMGS = class(TDataModule)
    DCOMConnection1: TDCOMConnection;
    CDSQ_PROVEEDOR_ACREEDOR: TClientDataSet;
    CDSQ_FPROVEEDOR: TClientDataSet;
    CDSQ_FPROVEEDORNIF: TStringField;
    CDSQ_FPROVEEDORNOMBRE: TStringField;
    CDSQ_MAXIMO: TClientDataSet;
    CDSQ_TIPOS: TClientDataSet;
    CDSQ_FAMILIAS: TClientDataSet;
    CDSQ_FAMILIASAUX: TClientDataSet;
    CDSQ_ARTICULOS: TClientDataSet;
    CDSQ_COLORES: TClientDataSet;
    CDSQ_COLORESID_COLOR: TStringField;
    CDSQ_COLORESDESCRIPCION: TStringField;
    CDSQ_COLORESAUX: TClientDataSet;
    CDSQ_COLORESAUXID_COLOR: TStringField;
    CDSQ_COLORESAUXDESCRIPCION: TStringField;
    CDSQ_EAN: TClientDataSet;
    CDSQ_CLIENTE: TClientDataSet;
    CDSQ_FCLIENTE: TClientDataSet;
    CDSQ_FCLIENTENIF: TStringField;
    CDSQ_FCLIENTENOMBRE: TStringField;
    CDSQ_CLIENTEAUX: TClientDataSet;
    CDSQ_CLIENTEAUXBORRADOS: TBooleanField;
    CDSQ_SERIES: TClientDataSet;
    CDSQ_EMPRESA: TClientDataSet;
    CDSQ_EMPRESAAUX: TClientDataSet;
    CDSQ_SERIESID_SERIE: TStringField;
    CDSQ_SERIESID_EMPRESA: TSmallintField;
    CDSQ_SERIESSIG_ALBARAN: TIntegerField;
    CDSQ_SERIESSIG_FACTURA: TIntegerField;
    CDSQ_SERIESOBSERVACIONES: TStringField;
    CDSQ_SERIESAUX: TClientDataSet;
    CDSQ_SERIESAUXID_SERIE: TStringField;
    CDSQ_SERIESAUXID_EMPRESA: TSmallintField;
    CDSQ_SERIESAUXSIG_ALBARAN: TIntegerField;
    CDSQ_SERIESAUXSIG_FACTURA: TIntegerField;
    CDSQ_SERIESAUXOBSERVACIONES: TStringField;
    CDSQ_MDPRESUPUESTO: TClientDataSet;
    CDsq_MDLINPRESUPUESTO: TClientDataSet;
    CDSQ_ARTICULOSAUX: TClientDataSet;
    CDSQ_PROCEDURE: TClientDataSet;
    CDSQ_ARTICULOEAN: TClientDataSet;
    CDSQ_MDPRESUPUESTODESCTOTAL: TFloatField;
    CDSQ_MDPRESUPUESTOBPSINIVA: TCurrencyField;
    CDSQ_MDENTRADA: TClientDataSet;
    CDSQ_MDLINEAENTRADA: TClientDataSet;
    cdsq_proveedor_acreedoraux: TClientDataSet;
    cdsq_proveedor_acreedorauxborrados: TBooleanField;
    CDSQ_MDENTRADADESCTOTAL: TFloatField;
    CDSQ_MDENTRADABPSINIVA: TCurrencyField;
    CDSQ_MDALBARAN: TClientDataSet;
    CDSQ_MDLINEAALBARAN: TClientDataSet;
    CDSQ_MDALBARANBPSINIVA: TCurrencyField;
    CDSQ_MDALBARANDESCTOTAL: TFloatField;
    CDSQ_MDPRESUPUESTOMARCA: TStringField;
    CDSQ_MDPRESUPUESTOAUX: TClientDataSet;
    CDSQ_MDLINPRESUPUESTOAUX: TClientDataSet;
    CDSQ_MDALBARANCOBRADOS: TBooleanField;
    CDSQ_MDALBARANANULADOS: TBooleanField;
    CDSQ_MDFACTURA: TClientDataSet;
    CDSQ_MDLINEAFACTURA: TClientDataSet;
    CDSQ_MDALBARANAUX: TClientDataSet;
    CDSQ_MDLINEAALBARANAUX: TClientDataSet;
    CDSQ_FORMAPAGO: TClientDataSet;
    CDSQ_FORMAPAGOID_FORMA: TStringField;
    CDSQ_FORMAPAGODESCRIPCION: TStringField;
    CDSQ_FORMAPAGOAUX: TClientDataSet;
    CDSQ_FORMAPAGOAUXID_FORMA: TStringField;
    CDSQ_FORMAPAGOAUXDESCRIPCION: TStringField;
    CDSQ_MDCOBRO: TClientDataSet;
    CDSQ_MDLINEACOBRO: TClientDataSet;
    CDSQ_MDCOBROCOBRADO: TStringField;
    CDSQ_ACTUALIZAR: TClientDataSet;
    CDSQ_MDFACTURAAUX: TClientDataSet;
    CDSQ_MDLINEAFACTURAAUX: TClientDataSet;
    CDSQ_MDALBARANAUXCOBRADOS: TBooleanField;
    CDSQ_MDCOBROAUX: TClientDataSet;
    CDSQ_MDLINEACOBROAUX: TClientDataSet;
    CDSQ_MDCOBROAUXcobrado: TStringField;
    CDSQ_MDCOBROAUXRESTO: TFloatField;
    CDSQ_MDALBARANAUXRESTO: TFloatField;
    CDSQ_MDFACTURAIMPRIMIRANYO: TStringField;
    CDSQ_MDALBARANIMPRIMIRANYO: TStringField;
    CDSQ_TARIFAS: TClientDataSet;
    CDSQ_TARIFASAUX: TClientDataSet;
    CDSQ_ALMACEN: TClientDataSet;
    CDSQ_ALMACENAUX: TClientDataSet;
    CDSQ_MDSALIDA: TClientDataSet;
    CDSQ_MDLINEASALIDA: TClientDataSet;
    CDSQ_AVISO: TClientDataSet;
    CDSQ_AVISOAUX: TClientDataSet;
    CDSQ_PEDIDOSPENDIENTES: TClientDataSet;
    CDSQ_PEDIDOSPENDIENTESAUX: TClientDataSet;
    CDSQ_MDTICKET: TClientDataSet;
    CDSQ_MDLINEATICKET: TClientDataSet;
    CDSQ_FLOAT: TClientDataSet;
    cdsq_nombre: TClientDataSet;
    cdsq_nombrenombre: TStringField;
    CDSQ_ARTICULOSFAMILIAESTA: TBooleanField;
    CDSQ_ARTICULOSFAMILIAOLD: TStringField;
    CDSQ_ARTICULOSCOLORESTA: TBooleanField;
    CDSQ_ARTICULOSCOLOROLD: TStringField;
    CDSQ_ARTICULOSCDESCRIPCION: TStringField;
    CDSQ_ARTICULOSFDESCRIPCION: TStringField;
    CDSQ_ARTICULOSproveedoresta: TBooleanField;
    CDSQ_ARTICULOSproveedorold: TStringField;
    CDSQ_ARTICULOSnproveedor: TStringField;
    CDSQ_MDALBARANFACTURADO: TStringField;
    CDSQ_MDENTRADATOTALIVA: TFloatField;
    CDSQ_SERIESANYO: TSmallintField;
    CDSQ_SERIESAUXANYO: TSmallintField;
    CDSQ_OPCIONESNUMERICAS: TClientDataSet;
    CDSQ_OPCIONESNUMERICASID_EMPRESA: TSmallintField;
    CDSQ_OPCIONESNUMERICASANYO: TSmallintField;
    CDSQ_OPCIONESNUMERICASID_COBRO: TIntegerField;
    CDSQ_OPCIONESNUMERICASID_ENTRADA: TIntegerField;
    CDSQ_OPCIONESNUMERICASID_PRESUPUESTO: TIntegerField;
    CDSQ_OPCIONESNUMERICASID_SALIDA: TSmallintField;
    CDSQ_OPCIONESNUMERICASID_AVISO: TIntegerField;
    CDSQ_OPCIONESNUMERICASNOMBREEMPRESA: TStringField;
    CDSQ_OPCIONESNUMERICASEMPRESANOMBRE: TStringField;
    CDSQ_OPCIONESNUMERICASIDESTA: TBooleanField;
    CDSQ_OPCIONESNUMERICASIDOLD: TStringField;
    CDSQ_SERIESTICKET: TIntegerField;
    CDSQ_SERIESAUXTICKET: TIntegerField;
    CDSQ_MDTICKETTOTAL: TFloatField;
    CDSQ_LISTADOENTRADA: TClientDataSet;
    CDSQ_LENTRADATOTAL: TClientDataSet;
    CDSQ_MDFACTURATOTALIVA: TFloatField;
    CDSQ_MDFACTURABASE: TFloatField;
    CDSQ_MDALBARANBASE: TFloatField;
    CDSQ_MDPRESUPUESTOTOTALDESCUENTO: TFloatField;
    CDSQ_TARIFASnombreproveedor: TStringField;
    CDSQ_TARIFASID_PROVEEDOR: TIntegerField;
    CDSQ_TARIFASART_PROVEEDOR: TStringField;
    CDSQ_TARIFASID_ARTICULO: TStringField;
    CDSQ_TARIFASGRUPO: TStringField;
    CDSQ_TARIFASGDESCRIPCION: TStringField;
    CDSQ_TARIFASNOMBRE: TStringField;
    CDSQ_TARIFASOBSERVACIONES: TStringField;
    CDSQ_TARIFASFECHA: TDateField;
    CDSQ_TARIFASDIAS_SUMINISTRO: TSmallintField;
    CDSQ_TARIFASEAN_FABRICANTE: TStringField;
    CDSQ_TARIFASMARCA: TStringField;
    CDSQ_TARIFASBRAZOS: TSmallintField;
    CDSQ_TARIFASID_COLOR: TStringField;
    CDSQ_TARIFASAUXNOMBREPROVEEDOR: TStringField;
    CDSQ_TARIFASAUXID_PROVEEDOR: TIntegerField;
    CDSQ_TARIFASAUXART_PROVEEDOR: TStringField;
    CDSQ_TARIFASAUXID_ARTICULO: TStringField;
    CDSQ_TARIFASAUXGRUPO: TStringField;
    CDSQ_TARIFASAUXGDESCRIPCION: TStringField;
    CDSQ_TARIFASAUXNOMBRE: TStringField;
    CDSQ_TARIFASAUXOBSERVACIONES: TStringField;
    CDSQ_TARIFASAUXFECHA: TDateField;
    CDSQ_TARIFASAUXDIAS_SUMINISTRO: TSmallintField;
    CDSQ_TARIFASAUXEAN_FABRICANTE: TStringField;
    CDSQ_TARIFASAUXMARCA: TStringField;
    CDSQ_TARIFASAUXBRAZOS: TSmallintField;
    CDSQ_TARIFASAUXID_COLOR: TStringField;
    CDSQ_PROVEEDOR_ACREEDORBORRADO: TSmallintField;
    CDSQ_PROVEEDOR_ACREEDORID_PROVEEDOR: TIntegerField;
    CDSQ_PROVEEDOR_ACREEDORNOMBRE: TStringField;
    CDSQ_PROVEEDOR_ACREEDORNIF: TStringField;
    CDSQ_PROVEEDOR_ACREEDORDIRECCION: TStringField;
    CDSQ_PROVEEDOR_ACREEDORDIRECCION_POSTAL: TStringField;
    CDSQ_PROVEEDOR_ACREEDORPOBLACION: TStringField;
    CDSQ_PROVEEDOR_ACREEDORPOBLACION_POSTAL: TStringField;
    CDSQ_PROVEEDOR_ACREEDORCOD_POSTAL: TStringField;
    CDSQ_PROVEEDOR_ACREEDORCOD_POSTAL_POSTAL: TStringField;
    CDSQ_PROVEEDOR_ACREEDORPROVINCIA: TStringField;
    CDSQ_PROVEEDOR_ACREEDORPROVINCIA_POSTAL: TStringField;
    CDSQ_PROVEEDOR_ACREEDOREMAIL: TStringField;
    CDSQ_PROVEEDOR_ACREEDORHTTP: TStringField;
    CDSQ_PROVEEDOR_ACREEDOROBSERVACIONES: TStringField;
    CDSQ_PROVEEDOR_ACREEDORMISMA_DIRECCION: TSmallintField;
    CDSQ_PROVEEDOR_ACREEDORTELEFONO: TStringField;
    CDSQ_PROVEEDOR_ACREEDORFAX: TStringField;
    CDSQ_PROVEEDOR_ACREEDORborrados: TBooleanField;
    cdsq_proveedor_acreedorauxBORRADO: TSmallintField;
    cdsq_proveedor_acreedorauxID_PROVEEDOR: TIntegerField;
    cdsq_proveedor_acreedorauxNOMBRE: TStringField;
    cdsq_proveedor_acreedorauxNIF: TStringField;
    cdsq_proveedor_acreedorauxDIRECCION: TStringField;
    cdsq_proveedor_acreedorauxDIRECCION_POSTAL: TStringField;
    cdsq_proveedor_acreedorauxPOBLACION: TStringField;
    cdsq_proveedor_acreedorauxPOBLACION_POSTAL: TStringField;
    cdsq_proveedor_acreedorauxCOD_POSTAL: TStringField;
    cdsq_proveedor_acreedorauxCOD_POSTAL_POSTAL: TStringField;
    cdsq_proveedor_acreedorauxPROVINCIA: TStringField;
    cdsq_proveedor_acreedorauxPROVINCIA_POSTAL: TStringField;
    cdsq_proveedor_acreedorauxEMAIL: TStringField;
    cdsq_proveedor_acreedorauxHTTP: TStringField;
    cdsq_proveedor_acreedorauxOBSERVACIONES: TStringField;
    cdsq_proveedor_acreedorauxMISMA_DIRECCION: TSmallintField;
    cdsq_proveedor_acreedorauxTELEFONO: TStringField;
    cdsq_proveedor_acreedorauxFAX: TStringField;
    CDSQ_CLIENTEID_CLIENTE: TIntegerField;
    CDSQ_CLIENTENOMBRE: TStringField;
    CDSQ_CLIENTENIF: TStringField;
    CDSQ_CLIENTEDIRECCION: TStringField;
    CDSQ_CLIENTEDIRECCION_POSTAL: TStringField;
    CDSQ_CLIENTEPOBLACION: TStringField;
    CDSQ_CLIENTEPOBLACION_POSTAL: TStringField;
    CDSQ_CLIENTECOD_POSTAL: TStringField;
    CDSQ_CLIENTECOD_POSTAL_POSTAL: TStringField;
    CDSQ_CLIENTEPROVINCIA: TStringField;
    CDSQ_CLIENTEPROVINCIA_POSTAL: TStringField;
    CDSQ_CLIENTEEMAIL: TStringField;
    CDSQ_CLIENTEHTTP: TStringField;
    CDSQ_CLIENTESUBCUENTA: TStringField;
    CDSQ_CLIENTEOBSERVACIONES: TStringField;
    CDSQ_CLIENTEMISMA_DIRECCION: TSmallintField;
    CDSQ_CLIENTETELEFONO: TStringField;
    CDSQ_CLIENTEFAX: TStringField;
    CDSQ_CLIENTEBORRADO: TSmallintField;
    CDSQ_CLIENTENOMBRE_COMERCIAL: TStringField;
    CDSQ_CLIENTETELEFONO2: TStringField;
    CDSQ_CLIENTECC_BANCO: TStringField;
    CDSQ_CLIENTECC_OFICINA: TStringField;
    CDSQ_CLIENTECC_DC: TStringField;
    CDSQ_CLIENTECC_CC: TStringField;
    CDSQ_CLIENTENO_POR_BANCO: TSmallintField;
    CDSQ_MDENTRADAID_EMPRESA: TSmallintField;
    CDSQ_MDENTRADAID_ENTRADA: TIntegerField;
    CDSQ_MDENTRADAFECHA: TDateField;
    CDSQ_MDENTRADAALBARAN_FACT_PROVEEDOR: TStringField;
    CDSQ_MDENTRADAID_PROVEEDOR: TIntegerField;
    CDSQ_MDENTRADAOBSERVACIONES: TStringField;
    CDSQ_MDENTRADAANYO: TSmallintField;
    CDSQ_MDENTRADAQMD_LINEAENTRADA: TDataSetField;
    CDSQ_MDLINEAENTRADAID_EMPRESA: TSmallintField;
    CDSQ_MDLINEAENTRADAID_ENTRADA: TIntegerField;
    CDSQ_MDLINEAENTRADAID_ARTICULO: TStringField;
    CDSQ_MDLINEAENTRADAMARCA: TStringField;
    CDSQ_MDLINEAENTRADADESCRIPCION: TStringField;
    CDSQ_MDLINEAENTRADAART_PROVEEDOR: TStringField;
    CDSQ_MDLINEAENTRADAIVA_INCLUIDO: TSmallintField;
    CDSQ_MDLINEAENTRADAANYO: TSmallintField;
    CDSQ_MDCOBROAUXNOMBRECLIENTE: TStringField;
    CDSQ_MDCOBROAUXID_SERIE: TStringField;
    CDSQ_MDCOBROAUXID_COBRO: TIntegerField;
    CDSQ_MDCOBROAUXANYO: TSmallintField;
    CDSQ_MDCOBROAUXTIPO: TStringField;
    CDSQ_MDCOBROAUXID_EMPRESA: TSmallintField;
    CDSQ_MDCOBROAUXID: TIntegerField;
    CDSQ_MDCOBROAUXOBSERVACIONES: TStringField;
    CDSQ_MDCOBROAUXESTADO: TStringField;
    CDSQ_MDCOBROAUXID_CLIENTE: TIntegerField;
    CDSQ_MDCOBROAUXANYOSERIE: TSmallintField;
    CDSQ_MDCOBROAUXQ_MDLINEACOBROAUX: TDataSetField;
    CDSQ_MDLINEACOBROAUXID_COBRO: TIntegerField;
    CDSQ_MDLINEACOBROAUXANYO: TSmallintField;
    CDSQ_MDLINEACOBROAUXID_EMPRESA: TSmallintField;
    CDSQ_MDLINEACOBROAUXNUM_LINEA: TSmallintField;
    CDSQ_MDLINEACOBROAUXFECHA: TDateField;
    CDSQ_MDLINEACOBROAUXID_FORMA: TStringField;
    CDSQ_MDLINEACOBROAUXOBSERVACIONES: TStringField;
    CDSQ_MDLINEACOBROAUXNUM_DOCUMENTO: TStringField;
    CDSQ_MDSALIDAID_SALIDA: TIntegerField;
    CDSQ_MDSALIDAID_EMPRESA: TSmallintField;
    CDSQ_MDSALIDAFECHA: TDateField;
    CDSQ_MDSALIDAALBARAN: TIntegerField;
    CDSQ_MDSALIDAFACTURA: TIntegerField;
    CDSQ_MDSALIDAOBSERVACIONES: TStringField;
    CDSQ_MDSALIDAANYO: TSmallintField;
    CDSQ_MDSALIDAQMD_LINEASALIDA: TDataSetField;
    CDSQ_MDLINEASALIDADESCRIPCIONGAR: TStringField;
    CDSQ_MDLINEASALIDAID_SALIDA: TIntegerField;
    CDSQ_MDLINEASALIDAID_EMPRESA: TSmallintField;
    CDSQ_MDLINEASALIDAMARCA: TStringField;
    CDSQ_MDLINEASALIDADESCRIPCION: TStringField;
    CDSQ_MDLINEASALIDAOBSERVACIONES: TStringField;
    CDSQ_MDLINEASALIDALINEA: TSmallintField;
    CDSQ_MDLINEASALIDAID_ARTICULO: TStringField;
    CDSQ_MDLINEASALIDAANYO: TSmallintField;
    CDSQ_MDCOBROQ_MDLINEACOBRO: TDataSetField;
    CDSQ_MDLINEACOBROID_COBRO: TIntegerField;
    CDSQ_MDLINEACOBROANYO: TSmallintField;
    CDSQ_MDLINEACOBROID_EMPRESA: TSmallintField;
    CDSQ_MDLINEACOBRONUM_LINEA: TSmallintField;
    CDSQ_MDLINEACOBROFECHA: TDateField;
    CDSQ_MDLINEACOBROID_FORMA: TStringField;
    CDSQ_MDLINEACOBROOBSERVACIONES: TStringField;
    CDSQ_MDLINEACOBRONUM_DOCUMENTO: TStringField;
    CDSQ_PEDIDOSPENDIENTESLINEA: TIntegerField;
    CDSQ_PEDIDOSPENDIENTESID_EMPRESA: TSmallintField;
    CDSQ_PEDIDOSPENDIENTESFECHA_NOTA: TDateField;
    CDSQ_PEDIDOSPENDIENTESFECHA_PEDIDO: TDateField;
    CDSQ_PEDIDOSPENDIENTESID_PROVEEDOR: TIntegerField;
    CDSQ_PEDIDOSPENDIENTESART_PROVEEDOR: TStringField;
    CDSQ_PEDIDOSPENDIENTESID_ARTICULO: TStringField;
    CDSQ_PEDIDOSPENDIENTESMARCA: TStringField;
    CDSQ_PEDIDOSPENDIENTESDESCRIPCION: TStringField;
    CDSQ_PEDIDOSPENDIENTESBRAZOS: TSmallintField;
    CDSQ_PEDIDOSPENDIENTESID_COLOR: TStringField;
    CDSQ_PEDIDOSPENDIENTESPEDIDO: TSmallintField;
    CDSQ_PEDIDOSPENDIENTESNOMBRE_CONTACTO: TStringField;
    CDSQ_PEDIDOSPENDIENTESID_CLIENTE: TIntegerField;
    CDSQ_PEDIDOSPENDIENTESCOMENTARIOS: TStringField;
    CDSQ_PEDIDOSPENDIENTESAUXLINEA: TIntegerField;
    CDSQ_PEDIDOSPENDIENTESAUXID_EMPRESA: TSmallintField;
    CDSQ_PEDIDOSPENDIENTESAUXFECHA_NOTA: TDateField;
    CDSQ_PEDIDOSPENDIENTESAUXFECHA_PEDIDO: TDateField;
    CDSQ_PEDIDOSPENDIENTESAUXID_PROVEEDOR: TIntegerField;
    CDSQ_PEDIDOSPENDIENTESAUXART_PROVEEDOR: TStringField;
    CDSQ_PEDIDOSPENDIENTESAUXID_ARTICULO: TStringField;
    CDSQ_PEDIDOSPENDIENTESAUXMARCA: TStringField;
    CDSQ_PEDIDOSPENDIENTESAUXDESCRIPCION: TStringField;
    CDSQ_PEDIDOSPENDIENTESAUXBRAZOS: TSmallintField;
    CDSQ_PEDIDOSPENDIENTESAUXID_COLOR: TStringField;
    CDSQ_PEDIDOSPENDIENTESAUXPEDIDO: TSmallintField;
    CDSQ_PEDIDOSPENDIENTESAUXNOMBRE_CONTACTO: TStringField;
    CDSQ_PEDIDOSPENDIENTESAUXID_CLIENTE: TIntegerField;
    CDSQ_PEDIDOSPENDIENTESAUXCOMENTARIOS: TStringField;
    CDSQ_LISTADOENTRADAID_ENTRADA: TIntegerField;
    CDSQ_LISTADOENTRADAFECHA: TDateField;
    CDSQ_LISTADOENTRADAID_PROVEEDOR: TIntegerField;
    CDSQ_LISTADOENTRADANOMBREPROVEEDOR: TStringField;
    CDSQ_AVISOID_AVISO: TIntegerField;
    CDSQ_AVISOFECHA_AVISO: TDateField;
    CDSQ_AVISOHORA: TDateField;
    CDSQ_AVISOCOMENTARIOS: TStringField;
    CDSQ_AVISOFECHA_PARA_VISITA: TDateField;
    CDSQ_AVISOHORA_PARA_VISITA: TDateField;
    CDSQ_AVISONOMBRE_CONTACTO: TStringField;
    CDSQ_AVISODIRECCION: TStringField;
    CDSQ_AVISOPOBLACION: TStringField;
    CDSQ_AVISOMOTIVO_AVISO: TStringField;
    CDSQ_AVISOTELEFONO: TStringField;
    CDSQ_AVISOMOVIL: TStringField;
    CDSQ_AVISOESTADO: TStringField;
    CDSQ_AVISOOBSERVACIONES: TStringField;
    CDSQ_AVISOID_EMPRESA: TSmallintField;
    CDSQ_AVISOREALIZADO: TSmallintField;
    CDSQ_AVISOANYO: TSmallintField;
    CDSQ_AVISOAUXID_AVISO: TIntegerField;
    CDSQ_AVISOAUXFECHA_AVISO: TDateField;
    CDSQ_AVISOAUXHORA: TDateField;
    CDSQ_AVISOAUXCOMENTARIOS: TStringField;
    CDSQ_AVISOAUXFECHA_PARA_VISITA: TDateField;
    CDSQ_AVISOAUXHORA_PARA_VISITA: TDateField;
    CDSQ_AVISOAUXNOMBRE_CONTACTO: TStringField;
    CDSQ_AVISOAUXDIRECCION: TStringField;
    CDSQ_AVISOAUXPOBLACION: TStringField;
    CDSQ_AVISOAUXMOTIVO_AVISO: TStringField;
    CDSQ_AVISOAUXTELEFONO: TStringField;
    CDSQ_AVISOAUXMOVIL: TStringField;
    CDSQ_AVISOAUXESTADO: TStringField;
    CDSQ_AVISOAUXOBSERVACIONES: TStringField;
    CDSQ_AVISOAUXID_EMPRESA: TSmallintField;
    CDSQ_AVISOAUXREALIZADO: TSmallintField;
    CDSQ_AVISOAUXANYO: TSmallintField;
    CDSQ_MDCOBRORESTO: TFloatField;
    CDSQ_MDFACTURAAUXRESTO: TFloatField;
    CDSQ_MDFACTURAAUXCOBRADOS: TBooleanField;
    CDSQ_TARIFASAUXPRECIOVENTA: TCurrencyField;
    CDSQ_EANID_ARTICULO: TStringField;
    CDSQ_EANEAN: TStringField;
    CDSQ_ARTICULOEANID_ARTICULO: TStringField;
    CDSQ_ARTICULOEANMARCA: TStringField;
    CDSQ_ARTICULOEANDESCRIPCION: TStringField;
    CDSQ_ARTICULOEANID_PROVEEDOR: TIntegerField;
    CDSQ_TIPOSID_TIPO: TStringField;
    CDSQ_TIPOSID_PROVEEDOR: TIntegerField;
    CDSQ_TIPOSSUBCUENTA: TStringField;
    CDSQ_MDENTRADATOTALRE: TCurrencyField;
    CDSQ_MDALBARANTOTALRE: TCurrencyField;
    CDSQ_MDTICKETBASE_TICKETSINIVA: TCurrencyField;
    CDSQ_MDALBARANBASE_ALBARANSINIVA: TCurrencyField;
    CDSQ_ARTICULOEANDESCRIPCIONTICKET: TStringField;
    CDSQ_MDTICKETIMPRIMIDO: TStringField;
    CDSQ_MDTICKETCLIENTEESTA: TBooleanField;
    CDSQ_MDTICKETCLIENTEOLD: TStringField;
    CDSQ_MDTICKETCLIENTENOMBRE: TStringField;
    OpenDialog1: TOpenDialog;
    CDSQ_MDTICKETHORATICKET: TTimeField;
    CDSQ_TICKETAUX: TClientDataSet;
    CDSQ_TICKETAUXID_TICKET: TIntegerField;
    CDSQ_TICKETAUXID_EMPRESA: TSmallintField;
    CDSQ_TICKETAUXANYO: TSmallintField;
    CDSQ_TICKETAUXID_SERIE: TStringField;
    CDSQ_TICKETAUXIMPRESO: TSmallintField;
    CDSQ_TICKETAUXID_CLIENTE: TIntegerField;
    CDSQ_TICKETAUXCOBRADO: TSmallintField;
    CDSQ_TICKETAUXNOMBRECLIENTE: TStringField;
    CDSQ_TICKETAUXIMPRIMIDO: TStringField;
    CDSQ_MDTICKETTOTALDESCUENTOAUX: TFloatField;
    CDSQ_TICKETAUXIMPRIMIDOS: TStringField;
    CDSQ_TICKETAUXCOBRADOS: TStringField;
    CDSQ_LARTICULOS: TClientDataSet;
    CDSQ_MDTICKETAUX: TClientDataSet;
    CDSQ_MDLINEATICKETAUX: TClientDataSet;
    CDSQ_MDTICKETAUXNOMBRECLIENTE: TStringField;
    CDSQ_MDTICKETAUXID_TICKET: TIntegerField;
    CDSQ_MDTICKETAUXID_EMPRESA: TSmallintField;
    CDSQ_MDTICKETAUXANYO: TSmallintField;
    CDSQ_MDTICKETAUXID_SERIE: TStringField;
    CDSQ_MDTICKETAUXIMPRESO: TSmallintField;
    CDSQ_MDTICKETAUXID_CLIENTE: TIntegerField;
    CDSQ_MDTICKETAUXCOBRADO: TSmallintField;
    CDSQ_MDTICKETAUXQ_MDLINEATICKETAUX: TDataSetField;
    CDSQ_MDLINEATICKETAUXID_TICKET: TIntegerField;
    CDSQ_MDLINEATICKETAUXID_EMPRESA: TSmallintField;
    CDSQ_MDLINEATICKETAUXANYO: TSmallintField;
    CDSQ_MDLINEATICKETAUXID_SERIE: TStringField;
    CDSQ_MDLINEATICKETAUXLINEA: TSmallintField;
    CDSQ_MDLINEATICKETAUXID_ARTICULO: TStringField;
    CDSQ_MDLINEATICKETAUXMARCA: TStringField;
    CDSQ_MDLINEATICKETAUXDESCRIPCION: TStringField;
    CDSQ_MDLINEATICKETAUXDESCRIPCIONGAR: TStringField;
    CDSQ_MDTICKETNOMBRECLIENTE: TStringField;
    CDSQ_MDTICKETID_TICKET: TIntegerField;
    CDSQ_MDTICKETID_EMPRESA: TSmallintField;
    CDSQ_MDTICKETANYO: TSmallintField;
    CDSQ_MDTICKETID_SERIE: TStringField;
    CDSQ_MDTICKETIMPRESO: TSmallintField;
    CDSQ_MDTICKETID_CLIENTE: TIntegerField;
    CDSQ_MDTICKETCOBRADO: TSmallintField;
    CDSQ_MDTICKETQ_MDLINEATICKET: TDataSetField;
    CDSQ_MDLINEATICKETDESCRIPCIONGAR: TStringField;
    CDSQ_MDLINEATICKETID_TICKET: TIntegerField;
    CDSQ_MDLINEATICKETID_EMPRESA: TSmallintField;
    CDSQ_MDLINEATICKETANYO: TSmallintField;
    CDSQ_MDLINEATICKETID_SERIE: TStringField;
    CDSQ_MDLINEATICKETLINEA: TSmallintField;
    CDSQ_MDLINEATICKETID_ARTICULO: TStringField;
    CDSQ_MDLINEATICKETMARCA: TStringField;
    CDSQ_MDLINEATICKETDESCRIPCION: TStringField;
    CDSQ_FALBARANES: TClientDataSet;
    CDSQ_FALBARANESID_FACTURA: TIntegerField;
    CDSQ_FALBARANESANYO: TSmallintField;
    CDSQ_FALBARANESID_EMPRESA: TSmallintField;
    CDSQ_FALBARANESID_SERIE: TStringField;
    CDSQ_FALBARANESID_ALBARAN: TIntegerField;
    CDSQ_FALBARANESALBANYO: TSmallintField;
    CDSQ_FALBARANESALBID_EMPRESA: TSmallintField;
    CDSQ_FALBARANESALBID_SERIE: TStringField;
    CDSQ_FALBARANESBASE_FACTURA: TFloatField;
    CDSQ_FALBARANESBASE_ALBARAN: TFloatField;
    CDSQ_FALBARANESALBTOTAL_COBRADO: TFloatField;
    CDSQ_FALBARANESAUX: TClientDataSet;
    CDSQ_FALBARANESAUXID_FACTURA: TIntegerField;
    CDSQ_FALBARANESAUXANYO: TSmallintField;
    CDSQ_FALBARANESAUXID_EMPRESA: TSmallintField;
    CDSQ_FALBARANESAUXID_SERIE: TStringField;
    CDSQ_FALBARANESAUXID_ALBARAN: TIntegerField;
    CDSQ_FALBARANESAUXALBANYO: TSmallintField;
    CDSQ_FALBARANESAUXALBID_EMPRESA: TSmallintField;
    CDSQ_FALBARANESAUXALBID_SERIE: TStringField;
    CDSQ_FALBARANESAUXBASE_FACTURA: TFloatField;
    CDSQ_FALBARANESAUXBASE_ALBARAN: TFloatField;
    CDSQ_FALBARANESAUXALBTOTAL_COBRADO: TFloatField;
    CDSQ_FALBARANESTIPO: TStringField;
    CDSQ_FALBARANESAUXTIPO: TStringField;
    CDSQ_MDTICKETAUXNOMBRE: TStringField;
    CDSQ_MDTICKETFORMAPAGO: TStringField;
    CDSQ_TICKETAUXFORMAPAGO: TStringField;
    CDSQ_MDTICKETAUXFORMAPAGO: TStringField;
    CDSQ_MDTICKETFORMAPAGODESCRIPCION: TStringField;
    CDSQ_MDTICKETFORMAPAGOESTA: TBooleanField;
    CDSQ_MDTICKETFORMAPAGOOLD: TStringField;
    CDSQ_MDTICKETDESCRIPCIONFORMAPAGO: TStringField;
    CDSQ_ARQUEODECAJA: TClientDataSet;
    CDSQ_ARQUEODECAJAAFECHA: TDateField;
    CDSQ_ARQUEODECAJAAHORA: TTimeField;
    CDSQ_ARQUEODECAJAID_EMPRESA: TSmallintField;
    CDSQ_ARQUEODECAJAANYO: TSmallintField;
    CDSQ_ARQUEODECAJAAB500: TSmallintField;
    CDSQ_ARQUEODECAJAAB200: TSmallintField;
    CDSQ_ARQUEODECAJAAB100: TSmallintField;
    CDSQ_ARQUEODECAJAAB50: TSmallintField;
    CDSQ_ARQUEODECAJAAB20: TSmallintField;
    CDSQ_ARQUEODECAJAAB10: TSmallintField;
    CDSQ_ARQUEODECAJAAB5: TSmallintField;
    CDSQ_ARQUEODECAJAAM2: TSmallintField;
    CDSQ_ARQUEODECAJAAM1: TSmallintField;
    CDSQ_ARQUEODECAJAAM050: TSmallintField;
    CDSQ_ARQUEODECAJAAM020: TSmallintField;
    CDSQ_ARQUEODECAJAAM010: TSmallintField;
    CDSQ_ARQUEODECAJAAM005: TSmallintField;
    CDSQ_ARQUEODECAJAAM002: TSmallintField;
    CDSQ_ARQUEODECAJAAM001: TSmallintField;
    CDSQ_ARQUEODECAJAESTADO: TSmallintField;
    CDSQ_ARQUEODECAJACB500: TSmallintField;
    CDSQ_ARQUEODECAJACB200: TSmallintField;
    CDSQ_ARQUEODECAJACB100: TSmallintField;
    CDSQ_ARQUEODECAJACB50: TSmallintField;
    CDSQ_ARQUEODECAJACB20: TSmallintField;
    CDSQ_ARQUEODECAJACB10: TSmallintField;
    CDSQ_ARQUEODECAJACB5: TSmallintField;
    CDSQ_ARQUEODECAJACM2: TSmallintField;
    CDSQ_ARQUEODECAJACM1: TSmallintField;
    CDSQ_ARQUEODECAJACM050: TSmallintField;
    CDSQ_ARQUEODECAJACM020: TSmallintField;
    CDSQ_ARQUEODECAJACM010: TSmallintField;
    CDSQ_ARQUEODECAJACM005: TSmallintField;
    CDSQ_ARQUEODECAJACM002: TSmallintField;
    CDSQ_ARQUEODECAJACM001: TSmallintField;
    CDSQ_ARQUEODECAJAestados: TStringField;
    CDSQ_MDLINEACOBROHORA: TTimeField;
    CDSQ_MDLINEACOBROAUXHORA: TTimeField;
    CDSQ_MDTICKETHORACOBRO: TTimeField;
    CDSQ_MDTICKETFECHACOBRO: TDateField;
    CDSQ_TICKETAUXHORACOBRO: TTimeField;
    CDSQ_TICKETAUXFECHACOBRO: TDateField;
    CDSQ_MDTICKETAUXHORACOBRO: TTimeField;
    CDSQ_MDTICKETAUXFECHACOBRO: TDateField;
    CDSQ_ARQUEODECAJACFECHA: TDateField;
    CDSQ_ARQUEODECAJACHORA: TTimeField;
    CDSQ_TICKETAUXHORA: TTimeField;
    CDSQ_MDTICKETHORA: TTimeField;
    CDSQ_MDTICKETAUXHORA: TTimeField;
    CDSQ_MDTICKETAUXFECHA: TDateField;
    CDSQ_MDTICKETFECHA: TDateField;
    CDSQ_TICKETAUXFECHA: TDateField;
    CDSQ_MDFACTURAAUXDESCTOTAL: TFloatField;
    CDSQ_MDFACTURAAUXTOTALIVA: TFloatField;
    CDSQ_MDFACTURAAUXBASE: TFloatField;
    CDSQ_MDALBARANAUXTOTALRE: TFloatField;
    CDSQ_MDALBARANAUXTOTALIVA: TFloatField;
    CDSQ_MDALBARANAUXDESCTOTAL: TFloatField;
    CDSQ_CLIENTEAUXID_CLIENTE: TIntegerField;
    CDSQ_CLIENTEAUXNIF: TStringField;
    CDSQ_CLIENTEAUXNOMBRE: TStringField;
    CDSQ_CLIENTEAUXDIRECCION: TStringField;
    CDSQ_CLIENTEAUXDIRECCION_POSTAL: TStringField;
    CDSQ_CLIENTEAUXPOBLACION: TStringField;
    CDSQ_CLIENTEAUXPOBLACION_POSTAL: TStringField;
    CDSQ_CLIENTEAUXCOD_POSTAL: TStringField;
    CDSQ_CLIENTEAUXCOD_POSTAL_POSTAL: TStringField;
    CDSQ_CLIENTEAUXPROVINCIA: TStringField;
    CDSQ_CLIENTEAUXPROVINCIA_POSTAL: TStringField;
    CDSQ_CLIENTEAUXEMAIL: TStringField;
    CDSQ_CLIENTEAUXHTTP: TStringField;
    CDSQ_CLIENTEAUXSUBCUENTA: TStringField;
    CDSQ_CLIENTEAUXOBSERVACIONES: TStringField;
    CDSQ_CLIENTEAUXMISMA_DIRECCION: TSmallintField;
    CDSQ_CLIENTEAUXBORRADO: TSmallintField;
    CDSQ_CLIENTEAUXTELEFONO: TStringField;
    CDSQ_CLIENTEAUXFAX: TStringField;
    CDSQ_CLIENTEAUXNOMBRE_COMERCIAL: TStringField;
    CDSQ_CLIENTEAUXTELEFONO2: TStringField;
    CDSQ_CLIENTEAUXCC_BANCO: TStringField;
    CDSQ_CLIENTEAUXCC_OFICINA: TStringField;
    CDSQ_CLIENTEAUXCC_DC: TStringField;
    CDSQ_CLIENTEAUXCC_CC: TStringField;
    CDSQ_CLIENTEAUXNO_POR_BANCO: TSmallintField;
    CDSQ_MDLINEAENTRADAOBSERVACIONES: TStringField;
    CDSQ_MDENTRADABASE: TFloatField;
    CDSQ_CLIENTEBORRADOS: TStringField;
    CDSQ_PRUEBA: TClientDataSet;
    CDSQ_MDPRESUPUESTONOMBRECLIENTE: TStringField;
    CDSQ_MDPRESUPUESTOID_PRESUPUESTO: TIntegerField;
    CDSQ_MDPRESUPUESTOID_EMPRESA: TSmallintField;
    CDSQ_MDPRESUPUESTOID_CLIENTE: TIntegerField;
    CDSQ_MDPRESUPUESTOFECHA: TDateField;
    CDSQ_MDPRESUPUESTOOBSERVACIONES: TStringField;
    CDSQ_MDPRESUPUESTOVALIDEZ: TDateField;
    CDSQ_MDPRESUPUESTOANYO: TSmallintField;
    CDSQ_MDPRESUPUESTOQMD_LINPRESUPUESTO: TDataSetField;
    CDsq_MDLINPRESUPUESTOMARCA: TStringField;
    CDsq_MDLINPRESUPUESTODESCRIPCION: TStringField;
    CDsq_MDLINPRESUPUESTOID_PRESUPUESTO: TIntegerField;
    CDsq_MDLINPRESUPUESTOID_EMPRESA: TSmallintField;
    CDsq_MDLINPRESUPUESTOID_ARTICULO: TStringField;
    CDsq_MDLINPRESUPUESTOESTADO: TStringField;
    CDsq_MDLINPRESUPUESTOLINEA: TSmallintField;
    CDsq_MDLINPRESUPUESTOART_PROVEEDOR: TStringField;
    CDsq_MDLINPRESUPUESTOID_PROVEEDOR: TIntegerField;
    CDsq_MDLINPRESUPUESTOANYO: TSmallintField;
    CDSQ_MDPRESUPUESTOAUXNOMBRECLIENTE: TStringField;
    CDSQ_MDPRESUPUESTOAUXID_PRESUPUESTO: TIntegerField;
    CDSQ_MDPRESUPUESTOAUXID_EMPRESA: TSmallintField;
    CDSQ_MDPRESUPUESTOAUXID_CLIENTE: TIntegerField;
    CDSQ_MDPRESUPUESTOAUXFECHA: TDateField;
    CDSQ_MDPRESUPUESTOAUXOBSERVACIONES: TStringField;
    CDSQ_MDPRESUPUESTOAUXVALIDEZ: TDateField;
    CDSQ_MDPRESUPUESTOAUXANYO: TSmallintField;
    CDSQ_MDPRESUPUESTOAUXNOMBRE: TStringField;
    CDSQ_MDPRESUPUESTOAUXQ_MDLINPRESUPUESTOAUX: TDataSetField;
    CDSQ_MDLINPRESUPUESTOAUXMARCA: TStringField;
    CDSQ_MDLINPRESUPUESTOAUXDESCRIPCION: TStringField;
    CDSQ_MDLINPRESUPUESTOAUXID_PRESUPUESTO: TIntegerField;
    CDSQ_MDLINPRESUPUESTOAUXID_EMPRESA: TSmallintField;
    CDSQ_MDLINPRESUPUESTOAUXID_ARTICULO: TStringField;
    CDSQ_MDLINPRESUPUESTOAUXESTADO: TStringField;
    CDSQ_MDLINPRESUPUESTOAUXLINEA: TSmallintField;
    CDSQ_MDLINPRESUPUESTOAUXART_PROVEEDOR: TStringField;
    CDSQ_MDLINPRESUPUESTOAUXID_PROVEEDOR: TIntegerField;
    CDSQ_MDLINPRESUPUESTOAUXANYO: TSmallintField;
    CDSQ_MDALBARANAUXQ_MDLINEAALBARANAUX: TDataSetField;
    CDSQ_MDALBARANAUXNOMBRECLIENTE: TStringField;
    CDSQ_MDALBARANAUXNOMBRE: TStringField;
    CDSQ_MDALBARANAUXID_ALBARAN: TIntegerField;
    CDSQ_MDALBARANAUXANYO: TSmallintField;
    CDSQ_MDALBARANAUXID_EMPRESA: TSmallintField;
    CDSQ_MDALBARANAUXID_SERIE: TStringField;
    CDSQ_MDALBARANAUXFECHA: TDateField;
    CDSQ_MDALBARANAUXID_CLIENTE: TIntegerField;
    CDSQ_MDALBARANAUXOBSERVACIONES: TStringField;
    CDSQ_MDALBARANAUXID_PRESUPUESTO: TIntegerField;
    CDSQ_MDALBARANAUXANULADO: TSmallintField;
    CDSQ_MDALBARANAUXCOBRADO: TSmallintField;
    CDSQ_MDALBARANAUXID_FORMA: TStringField;
    CDSQ_MDALBARANAUXFECHACOBRO: TDateField;
    CDSQ_MDALBARANAUXHORACOBRO: TTimeField;
    CDSQ_MDLINEAALBARANAUXID_ALBARAN: TIntegerField;
    CDSQ_MDLINEAALBARANAUXANYO: TSmallintField;
    CDSQ_MDLINEAALBARANAUXID_EMPRESA: TSmallintField;
    CDSQ_MDLINEAALBARANAUXID_SERIE: TStringField;
    CDSQ_MDLINEAALBARANAUXIVA_INCLUIDO: TSmallintField;
    CDSQ_MDLINEAALBARANAUXMARCA: TStringField;
    CDSQ_MDLINEAALBARANAUXDESCRIPCION: TStringField;
    CDSQ_MDLINEAALBARANAUXNUM_SERIE: TStringField;
    CDSQ_MDLINEAALBARANAUXLINEA: TSmallintField;
    CDSQ_MDLINEAALBARANAUXID_ARTICULO: TStringField;
    CDSQ_MDLINEAALBARANAUXDESCRIPCIONGAR: TStringField;
    CDSQ_MDLINEAALBARANAUXPRECIO: TFloatField;
    CDSQ_MDLINEAALBARANAUXCANTIDAD: TFloatField;
    CDSQ_MDLINEAALBARANAUXDESCUENTO: TFloatField;
    CDSQ_MDLINEAALBARANAUXIVA: TFloatField;
    CDSQ_MDLINEAALBARANAUXIMPORTE: TFloatField;
    CDSQ_MDLINEAALBARANAUXDESCUENTOEURO: TFloatField;
    CDSQ_MDLINEAALBARANAUXPRECIO_COSTE: TFloatField;
    CDSQ_MDPRESUPUESTOTOTALRE: TFloatField;
    CDSQ_MDPRESUPUESTOTOTALIVA: TFloatField;
    CDSQ_MDPRESUPUESTOTOTALDESCUENTOAUX: TFloatField;
    CDSQ_MDALBARANTOTALDESCUENTOAUX: TFloatField;
    CDSQ_MDALBARANTOTALIVA: TFloatField;
    CDSQ_MDALBARANAUXFACTURADO: TStringField;
    CDSQ_MDFACTURAAUXNOMBRECLIENTE: TStringField;
    CDSQ_MDFACTURAAUXFECHACOBRO: TDateField;
    CDSQ_MDFACTURAAUXHORACOBRO: TTimeField;
    CDSQ_MDFACTURAAUXID_TICKET: TIntegerField;
    CDSQ_MDFACTURAAUXID_FACTURA: TIntegerField;
    CDSQ_MDFACTURAAUXANYO: TSmallintField;
    CDSQ_MDFACTURAAUXID_EMPRESA: TSmallintField;
    CDSQ_MDFACTURAAUXID_SERIE: TStringField;
    CDSQ_MDFACTURAAUXFECHA: TDateField;
    CDSQ_MDFACTURAAUXID_CLIENTE: TIntegerField;
    CDSQ_MDFACTURAAUXOBSERVACIONES: TStringField;
    CDSQ_MDFACTURAAUXID_PRESUPUESTO: TIntegerField;
    CDSQ_MDFACTURAAUXID_ALBARAN: TIntegerField;
    CDSQ_MDFACTURAAUXANULADO: TSmallintField;
    CDSQ_MDFACTURAAUXCOBRADO: TSmallintField;
    CDSQ_MDFACTURAAUXASIENTO: TIntegerField;
    CDSQ_MDFACTURAAUXID_FORMA: TStringField;
    CDSQ_MDFACTURAAUXTICANYO: TSmallintField;
    CDSQ_MDFACTURAAUXTICID_SERIE: TStringField;
    CDSQ_MDFACTURAAUXNOMBRE: TStringField;
    CDSQ_MDFACTURAAUXIMPRESO: TSmallintField;
    CDSQ_MDFACTURAAUXQ_MDLINEAFACTURAAUX: TDataSetField;
    CDSQ_MDLINEAFACTURAAUXID_FACTURA: TIntegerField;
    CDSQ_MDLINEAFACTURAAUXANYO: TSmallintField;
    CDSQ_MDLINEAFACTURAAUXID_EMPRESA: TSmallintField;
    CDSQ_MDLINEAFACTURAAUXID_SERIE: TStringField;
    CDSQ_MDLINEAFACTURAAUXIVA_INCLUIDO: TSmallintField;
    CDSQ_MDLINEAFACTURAAUXMARCA: TStringField;
    CDSQ_MDLINEAFACTURAAUXDESCRIPCION: TStringField;
    CDSQ_MDLINEAFACTURAAUXNUM_SERIE: TStringField;
    CDSQ_MDLINEAFACTURAAUXLINEA: TSmallintField;
    CDSQ_MDLINEAFACTURAAUXID_ARTICULO: TStringField;
    CDSQ_MDLINEAFACTURAAUXDESCRIPCIONGAR: TStringField;
    CDSQ_MDLINEAFACTURAAUXNUMERO: TIntegerField;
    CDSQ_MDLINEAFACTURAAUXALBANYO: TSmallintField;
    CDSQ_MDLINEAFACTURAAUXALBID_EMPRESA: TSmallintField;
    CDSQ_MDLINEAFACTURAAUXALBID_SERIE: TStringField;
    CDSQ_MDLINEAFACTURAAUXTIPO: TStringField;
    CDSQ_MDFACTURANOMBRECLIENTE: TStringField;
    CDSQ_MDFACTURAID_FACTURA: TIntegerField;
    CDSQ_MDFACTURAANYO: TSmallintField;
    CDSQ_MDFACTURAID_EMPRESA: TSmallintField;
    CDSQ_MDFACTURAID_SERIE: TStringField;
    CDSQ_MDFACTURAFECHA: TDateField;
    CDSQ_MDFACTURAID_CLIENTE: TIntegerField;
    CDSQ_MDFACTURAOBSERVACIONES: TStringField;
    CDSQ_MDFACTURAID_PRESUPUESTO: TIntegerField;
    CDSQ_MDFACTURAID_ALBARAN: TIntegerField;
    CDSQ_MDFACTURAANULADO: TSmallintField;
    CDSQ_MDFACTURACOBRADO: TSmallintField;
    CDSQ_MDFACTURAASIENTO: TIntegerField;
    CDSQ_MDFACTURAID_FORMA: TStringField;
    CDSQ_MDFACTURAALBANYO: TSmallintField;
    CDSQ_MDFACTURAALBID_SERIE: TStringField;
    CDSQ_MDFACTURATICANYO: TSmallintField;
    CDSQ_MDFACTURATICID_SERIE: TStringField;
    CDSQ_MDFACTURAID_TICKET: TIntegerField;
    CDSQ_MDFACTURAIMPRESO: TSmallintField;
    CDSQ_MDFACTURAHORACOBRO: TTimeField;
    CDSQ_MDFACTURAFECHACOBRO: TDateField;
    CDSQ_MDFACTURAQ_MDLINEAFACTURA: TDataSetField;
    CDSQ_MDLINEAFACTURAID_FACTURA: TIntegerField;
    CDSQ_MDLINEAFACTURAANYO: TSmallintField;
    CDSQ_MDLINEAFACTURAID_EMPRESA: TSmallintField;
    CDSQ_MDLINEAFACTURAID_SERIE: TStringField;
    CDSQ_MDLINEAFACTURAIVA_INCLUIDO: TSmallintField;
    CDSQ_MDLINEAFACTURAMARCA: TStringField;
    CDSQ_MDLINEAFACTURADESCRIPCION: TStringField;
    CDSQ_MDLINEAFACTURANUM_SERIE: TStringField;
    CDSQ_MDLINEAFACTURALINEA: TSmallintField;
    CDSQ_MDLINEAFACTURAID_ARTICULO: TStringField;
    CDSQ_MDLINEAFACTURADESCRIPCIONGAR: TStringField;
    CDSQ_MDLINEAFACTURANUMERO: TIntegerField;
    CDSQ_MDLINEAFACTURAALBANYO: TSmallintField;
    CDSQ_MDLINEAFACTURAALBID_EMPRESA: TSmallintField;
    CDSQ_MDLINEAFACTURAALBID_SERIE: TStringField;
    CDSQ_MDLINEAFACTURATIPO: TStringField;
    CDSQ_MDFACTURADESCTOTAL: TFloatField;
    CDSQ_MDFACTURACOBRADOS: TBooleanField;
    CDSQ_MDFACTURAAUXTOTALDESCUENTOAUX: TFloatField;
    CDSQ_MDFACTURATOTALDESCUENTOAUX: TFloatField;
    CDSQ_MDFACTURATOTALRE: TCurrencyField;
    CDSQ_MDFACTURAANULADOS: TBooleanField;
    CDSQ_ARTICULOSAUXCOD_ARTICULO: TIntegerField;
    CDSQ_ARTICULOSAUXCOD_FAMILIA: TStringField;
    CDSQ_ARTICULOSAUXPROFUNDIDAD: TSmallintField;
    CDSQ_ARTICULOSAUXID_ARTICULO: TStringField;
    CDSQ_ARTICULOSAUXDESCRIPCION: TStringField;
    CDSQ_ARTICULOSAUXDESCRIPCIONTICKET: TStringField;
    CDSQ_ARTICULOSAUXBENEFICIO: TFloatField;
    CDSQ_ARTICULOSAUXPRECIO_COSTE: TFloatField;
    CDSQ_ARTICULOSAUXPRECIO_MAX_COSTE: TFloatField;
    CDSQ_ARTICULOSAUXPRECIO_MIN_COSTE: TFloatField;
    CDSQ_ARTICULOSAUXPRECIO_MED_COSTE: TFloatField;
    CDSQ_ARTICULOSAUXPRECIO_VENTA: TFloatField;
    CDSQ_ARTICULOSAUXIVA: TFloatField;
    CDSQ_ARTICULOSAUXBRAZOS: TIntegerField;
    CDSQ_ARTICULOSAUXID_COLOR: TStringField;
    CDSQ_ARTICULOSAUXPVPCAT: TFloatField;
    CDSQ_ARTICULOSAUXDESCUENTO: TFloatField;
    CDSQ_ARTICULOSAUXMARCA: TStringField;
    CDSQ_ARTICULOSAUXIMAGEN: TBlobField;
    CDSQ_ARTICULOSAUXTRANS: TFloatField;
    CDSQ_ARTICULOSAUXART_PROVEEDOR: TStringField;
    CDSQ_ARTICULOSAUXID_PROVEEDOR: TIntegerField;
    CDSQ_ARTICULOSAUXOBSERVACIONES: TStringField;
    CDSQ_ARTICULOSAUXOLDART_PROVEEDOR: TStringField;
    CDSQ_ARTICULOSAUXOLDID_PROVEEDOR: TIntegerField;
    CDSQ_ARTICULOSAUXMOSTRARIMAGEN: TSmallintField;
    CDSQ_ARTICULOSAUXMOSTRARDESCRIPCION: TSmallintField;
    CDSQ_ARTICULOSAUXPOSICION: TSmallintField;
    CDSQ_ARTICULOSAUXPOSICIONUSO: TSmallintField;
    CDSQ_ARTICULOSAUXDESCRIPCIONBOTON: TStringField;
    CDSQ_ARTICULOSAUXMOSTRARPOSICION: TSmallintField;
    CDSQ_ARTICULOSAUXMOSTRARPOSICIONUSO: TSmallintField;
    CDSQ_ARTICULOSAUXBORRADO: TSmallintField;
    CDSQ_ARTICULOSAUXnombreproveedor: TStringField;
    CDSQ_EMPRESAID_EMPRESA: TSmallintField;
    CDSQ_EMPRESACIF_EMPRESA: TStringField;
    CDSQ_EMPRESANOMBRE: TStringField;
    CDSQ_EMPRESADIRECCION: TStringField;
    CDSQ_EMPRESADIRECCION_POSTAL: TStringField;
    CDSQ_EMPRESAPOBLACION: TStringField;
    CDSQ_EMPRESAPOBLACION_POSTAL: TStringField;
    CDSQ_EMPRESAPROVINCIA: TStringField;
    CDSQ_EMPRESAPROVINCIA_POSTAL: TStringField;
    CDSQ_EMPRESACOD_POSTAL: TStringField;
    CDSQ_EMPRESACOD_POSTAL_POSTAL: TStringField;
    CDSQ_EMPRESAEMAIL: TStringField;
    CDSQ_EMPRESAHTTP: TStringField;
    CDSQ_EMPRESAOBSERVACIONES: TStringField;
    CDSQ_EMPRESAMISMA_DIRECCION: TSmallintField;
    CDSQ_EMPRESAFAX: TStringField;
    CDSQ_EMPRESATELEFONO: TStringField;
    CDSQ_EMPRESADESGLOSAR_IVA: TSmallintField;
    CDSQ_EMPRESAV_PRECIO_MAX_COSTE: TSmallintField;
    CDSQ_EMPRESAV_LINEAS_FACT: TSmallintField;
    CDSQ_EMPRESABENEFICIO_MIN: TSmallintField;
    CDSQ_EMPRESACOPIAS_FACTURAS: TSmallintField;
    CDSQ_EMPRESACOPIAS_REPARACIONES: TSmallintField;
    CDSQ_EMPRESACOPIAS_AVISOS: TSmallintField;
    CDSQ_EMPRESALOGO: TBlobField;
    CDSQ_EMPRESAMOVIL: TStringField;
    CDSQ_EMPRESATICKET: TIntegerField;
    CDSQ_EMPRESAPREVIOS: TSmallintField;
    CDSQ_EMPRESAIMPRIMIRTICKET: TSmallintField;
    CDSQ_EMPRESAID_COBRO: TIntegerField;
    CDSQ_EMPRESAID_ENTRADA: TIntegerField;
    CDSQ_EMPRESAID_PRESUPUESTO: TIntegerField;
    CDSQ_EMPRESAID_SALIDA: TSmallintField;
    CDSQ_EMPRESAID_AVISO: TIntegerField;
    CDSQ_EMPRESAID_SERIE: TStringField;
    CDSQ_EMPRESAPRESUPUESTOVALIDO: TSmallintField;
    CDSQ_EMPRESATIPO: TSmallintField;
    CDSQ_EMPRESABENEFICIO: TFloatField;
    CDSQ_EMPRESAAVISAR: TFloatField;
    CDSQ_EMPRESADAR_AVISO: TSmallintField;
    CDSQ_EMPRESATRANS: TFloatField;
    CDSQ_EMPRESAANYADIR_TRANS: TSmallintField;
    CDSQ_EMPRESANODESCONTAR: TSmallintField;
    CDSQ_EMPRESACLXDEFECTO: TIntegerField;
    CDSQ_EMPRESAMOSTRARIMAGEN: TSmallintField;
    CDSQ_EMPRESAMOSTRARDESCRIPCION: TSmallintField;
    CDSQ_EMPRESAFPOSICION: TSmallintField;
    CDSQ_EMPRESAFPOSICIONUSO: TSmallintField;
    CDSQ_EMPRESAFDESCRIPCION: TSmallintField;
    CDSQ_EMPRESAFORMAPAGO: TStringField;
    CDSQ_EMPRESAREGISTRO: TStringField;
    CDSQ_EMPRESADESFASEARQUEO: TFloatField;
    CDSQ_EMPRESAIMPRESORATICKET: TStringField;
    CDSQ_EMPRESAIMPRESORAINFORMES: TStringField;
    CDSQ_EMPRESACAJA: TSmallintField;
    CDSQ_EMPRESAIMPRIMIRFACTURA: TSmallintField;
    CDSQ_EMPRESAIMPRIMIRALBARAN: TSmallintField;
    CDSQ_EMPRESACOPIASALBARAN: TSmallintField;
    CDSQ_FAMILIASCOD_FAMILIA: TStringField;
    CDSQ_FAMILIASPROFUNDIDAD: TSmallintField;
    CDSQ_FAMILIASID_FAMILIA: TStringField;
    CDSQ_FAMILIASPADRE: TStringField;
    CDSQ_FAMILIASDESCRIPCION: TStringField;
    CDSQ_FAMILIASSUBCUENTA: TStringField;
    CDSQ_FAMILIASCOD_ARTICULO: TIntegerField;
    CDSQ_FAMILIASBENEFICIO: TFloatField;
    CDSQ_FAMILIASIMAGEN: TBlobField;
    CDSQ_FAMILIASMOSTRARIMAGEN: TSmallintField;
    CDSQ_FAMILIASMOSTRARDESCRIPCION: TSmallintField;
    CDSQ_FAMILIASFPOSICION: TSmallintField;
    CDSQ_FAMILIASORDENPOSICION: TSmallintField;
    CDSQ_FAMILIASORDENPOSICIONUSO: TSmallintField;
    CDSQ_FAMILIASORDENDESCRIPCION: TSmallintField;
    CDSQ_FAMILIASFPOSICIONUSO: TSmallintField;
    CDSQ_FAMILIASPOSICION: TSmallintField;
    CDSQ_FAMILIASPOSICIONUSO: TSmallintField;
    CDSQ_FAMILIASDESCRIPCIONBOTON: TStringField;
    CDSQ_FAMILIASAMOSTRARIMAGEN: TSmallintField;
    CDSQ_FAMILIASAMOSTRARDESCRIPCION: TSmallintField;
    CDSQ_FAMILIASAMOSTRARPOSICION: TSmallintField;
    CDSQ_FAMILIASAMOSTRARPOSICIONUSO: TSmallintField;
    CDSQ_FAMILIASAORDENPOSICION: TSmallintField;
    CDSQ_FAMILIASAORDENPOSICIONUSO: TSmallintField;
    CDSQ_FAMILIASAORDENDESCRIPCION: TSmallintField;
    CDSQ_FAMILIASAUXCOD_FAMILIA: TStringField;
    CDSQ_FAMILIASAUXPROFUNDIDAD: TSmallintField;
    CDSQ_FAMILIASAUXID_FAMILIA: TStringField;
    CDSQ_FAMILIASAUXPADRE: TStringField;
    CDSQ_FAMILIASAUXDESCRIPCION: TStringField;
    CDSQ_FAMILIASAUXSUBCUENTA: TStringField;
    CDSQ_FAMILIASAUXCOD_ARTICULO: TIntegerField;
    CDSQ_FAMILIASAUXBENEFICIO: TFloatField;
    CDSQ_FAMILIASAUXIMAGEN: TBlobField;
    CDSQ_FAMILIASAUXMOSTRARIMAGEN: TSmallintField;
    CDSQ_FAMILIASAUXMOSTRARDESCRIPCION: TSmallintField;
    CDSQ_FAMILIASAUXFPOSICION: TSmallintField;
    CDSQ_FAMILIASAUXORDENPOSICION: TSmallintField;
    CDSQ_FAMILIASAUXORDENPOSICIONUSO: TSmallintField;
    CDSQ_FAMILIASAUXORDENDESCRIPCION: TSmallintField;
    CDSQ_FAMILIASAUXFPOSICIONUSO: TSmallintField;
    CDSQ_FAMILIASAUXPOSICION: TSmallintField;
    CDSQ_FAMILIASAUXPOSICIONUSO: TSmallintField;
    CDSQ_FAMILIASAUXDESCRIPCIONBOTON: TStringField;
    CDSQ_FAMILIASAUXAMOSTRARIMAGEN: TSmallintField;
    CDSQ_FAMILIASAUXAMOSTRARDESCRIPCION: TSmallintField;
    CDSQ_FAMILIASAUXAMOSTRARPOSICION: TSmallintField;
    CDSQ_FAMILIASAUXAMOSTRARPOSICIONUSO: TSmallintField;
    CDSQ_FAMILIASAUXAORDENPOSICION: TSmallintField;
    CDSQ_FAMILIASAUXAORDENPOSICIONUSO: TSmallintField;
    CDSQ_FAMILIASAUXAORDENDESCRIPCION: TSmallintField;
    CDSQ_MDSALIDAIVA: TFloatField;
    CDSQ_MDLINEASALIDACANTIDAD: TFloatField;
    CDSQ_ALMACENID_ARTICULO: TStringField;
    CDSQ_ALMACENID_EMPRESA: TSmallintField;
    CDSQ_ALMACENCANTIDAD: TFloatField;
    CDSQ_ALMACENAVISAR: TFloatField;
    CDSQ_ALMACENMARCA: TStringField;
    CDSQ_ALMACENDESCRIPCION: TStringField;
    CDSQ_ALMACENAUXID_ARTICULO: TStringField;
    CDSQ_ALMACENAUXID_EMPRESA: TSmallintField;
    CDSQ_ALMACENAUXCANTIDAD: TFloatField;
    CDSQ_ALMACENAUXAVISAR: TFloatField;
    CDSQ_ALMACENAUXMARCA: TStringField;
    CDSQ_ALMACENAUXDESCRIPCION: TStringField;
    CDSQ_MDCOBRONOMBRECLIENTE: TStringField;
    CDSQ_MDCOBROID_SERIE: TStringField;
    CDSQ_MDCOBROID_COBRO: TIntegerField;
    CDSQ_MDCOBROANYO: TSmallintField;
    CDSQ_MDCOBROTIPO: TStringField;
    CDSQ_MDCOBROID_EMPRESA: TSmallintField;
    CDSQ_MDCOBROID: TIntegerField;
    CDSQ_MDCOBROOBSERVACIONES: TStringField;
    CDSQ_MDCOBROBASE: TFloatField;
    CDSQ_MDCOBROESTADO: TStringField;
    CDSQ_MDCOBROID_CLIENTE: TIntegerField;
    CDSQ_MDCOBROTOTAL_COBRADO: TFloatField;
    CDSQ_MDCOBROANYOSERIE: TSmallintField;
    CDSQ_MDLINEACOBROCANTIDAD: TFloatField;
    CDSQ_MDCOBROAUXBASE: TFloatField;
    CDSQ_MDCOBROAUXTOTAL_COBRADO: TFloatField;
    CDSQ_PEDIDOSPENDIENTESCANTIDAD: TFloatField;
    CDSQ_PEDIDOSPENDIENTESAUXCANTIDAD: TFloatField;
    CDSQ_MDLINEACOBROAUXCANTIDAD: TFloatField;
    CDSQ_TARIFASPRECIO: TFloatField;
    CDSQ_TARIFASDESCUENTO: TFloatField;
    CDSQ_TARIFASNETO: TFloatField;
    CDSQ_TARIFASIVA: TFloatField;
    CDSQ_TARIFASPVPCAT: TFloatField;
    CDSQ_TARIFASAUXPRECIO: TFloatField;
    CDSQ_TARIFASAUXDESCUENTO: TFloatField;
    CDSQ_TARIFASAUXNETO: TFloatField;
    CDSQ_TARIFASAUXIVA: TFloatField;
    CDSQ_TARIFASAUXPVPCAT: TFloatField;
    CDSQ_MDALBARANAUXDESCUENTOEURO: TFloatField;
    CDSQ_MDALBARANAUXENTREGA: TFloatField;
    CDSQ_MDALBARANAUXDEVOLUCION: TFloatField;
    CDSQ_MDALBARANAUXTOTALCOBRADO: TFloatField;
    CDSQ_MDALBARANAUXTOTALDESCUENTO: TFloatField;
    CDSQ_MDALBARANAUXBASE_ALBARANSINIVA: TFloatField;
    CDSQ_MDALBARANAUXIVA: TFloatField;
    CDSQ_MDALBARANAUXBASE_ALBARAN: TFloatField;
    CDSQ_MDALBARANAUXDESCUENTO: TFloatField;
    CDSQ_MDALBARANAUXRE: TFloatField;
    CDSQ_MDALBARANAUXTOTAL_COBRADO: TFloatField;
    CDSQ_MDENTRADAIVA: TFloatField;
    CDSQ_MDENTRADABASE_ENTRADA: TFloatField;
    CDSQ_MDENTRADARE: TFloatField;
    CDSQ_MDENTRADADESCUENTOEURO: TFloatField;
    CDSQ_MDENTRADATOTALCOBRADO: TFloatField;
    CDSQ_MDENTRADATOTALDESCUENTO: TFloatField;
    CDSQ_MDENTRADADESCUENTO: TFloatField;
    CDSQ_MDLINEAENTRADACANTIDAD: TFloatField;
    CDSQ_MDLINEAENTRADAPRECIO: TFloatField;
    CDSQ_MDLINEAENTRADADESCUENTO: TFloatField;
    CDSQ_MDLINEAENTRADAPRECIO_REAL: TFloatField;
    CDSQ_MDLINEAENTRADAIVA: TFloatField;
    CDSQ_MDLINEAENTRADAIMPORTE: TFloatField;
    CDSQ_MDLINEAENTRADASERVIDO: TFloatField;
    CDSQ_MDLINEAENTRADAUSOINTERNO: TFloatField;
    CDSQ_MDLINEAENTRADAESTROPEADO: TFloatField;
    CDSQ_MDLINEAENTRADADESCUENTOEURO: TFloatField;
    CDSQ_MDENTRADATOTALDESCUENTOAUX: TFloatField;
    CDSQ_MDFACTURAIVA: TFloatField;
    CDSQ_MDFACTURABASE_FACTURA: TFloatField;
    CDSQ_MDFACTURADESCUENTO: TFloatField;
    CDSQ_MDFACTURARE: TFloatField;
    CDSQ_MDFACTURATOTAL_COBRADO: TFloatField;
    CDSQ_MDFACTURADESCUENTOEURO: TFloatField;
    CDSQ_MDFACTURAENTREGA: TFloatField;
    CDSQ_MDFACTURADEVOLUCION: TFloatField;
    CDSQ_MDFACTURATOTALCOBRADO: TFloatField;
    CDSQ_MDFACTURATOTALDESCUENTO: TFloatField;
    CDSQ_MDFACTURAAUXENTREGA: TFloatField;
    CDSQ_MDFACTURAAUXDEVOLUCION: TFloatField;
    CDSQ_MDFACTURAAUXTOTALCOBRADO: TFloatField;
    CDSQ_MDFACTURAAUXTOTALDESCUENTO: TFloatField;
    CDSQ_MDFACTURAAUXDESCUENTOEURO: TFloatField;
    CDSQ_MDFACTURAAUXIVA: TFloatField;
    CDSQ_MDFACTURAAUXBASE_FACTURA: TFloatField;
    CDSQ_MDFACTURAAUXDESCUENTO: TFloatField;
    CDSQ_MDFACTURAAUXRE: TFloatField;
    CDSQ_MDFACTURAAUXTOTAL_COBRADO: TFloatField;
    CDSQ_MDLINEAFACTURAAUXCANTIDAD: TFloatField;
    CDSQ_MDLINEAFACTURAAUXPRECIO: TFloatField;
    CDSQ_MDLINEAFACTURAAUXDESCUENTO: TFloatField;
    CDSQ_MDLINEAFACTURAAUXIVA: TFloatField;
    CDSQ_MDLINEAFACTURAAUXIMPORTE: TFloatField;
    CDSQ_MDLINEAFACTURAAUXDESCUENTOEURO: TFloatField;
    CDSQ_MDLINEAFACTURAAUXPRECIO_COSTE: TFloatField;
    CDSQ_MDLINEAFACTURACANTIDAD: TFloatField;
    CDSQ_MDLINEAFACTURAPRECIO: TFloatField;
    CDSQ_MDLINEAFACTURADESCUENTO: TFloatField;
    CDSQ_MDLINEAFACTURAIVA: TFloatField;
    CDSQ_MDLINEAFACTURAIMPORTE: TFloatField;
    CDSQ_MDLINEAFACTURADESCUENTOEURO: TFloatField;
    CDSQ_MDLINEAFACTURAPRECIO_COSTE: TFloatField;
    CDSQ_MDPRESUPUESTODESCUENTO: TFloatField;
    CDSQ_MDPRESUPUESTOIVA: TFloatField;
    CDSQ_MDPRESUPUESTORE: TFloatField;
    CDSQ_MDPRESUPUESTOBASE_PRESUPUESTOSINIVA: TFloatField;
    CDSQ_MDPRESUPUESTOBASE_PRESUPUESTO: TFloatField;
    CDsq_MDLINPRESUPUESTOIVA: TFloatField;
    CDsq_MDLINPRESUPUESTOCANTIDAD: TFloatField;
    CDsq_MDLINPRESUPUESTODESCUENTO: TFloatField;
    CDsq_MDLINPRESUPUESTOPRECIO: TFloatField;
    CDsq_MDLINPRESUPUESTOIMPORTE: TFloatField;
    CDsq_MDLINPRESUPUESTOIMPORTE_FACT: TFloatField;
    CDsq_MDLINPRESUPUESTOBASE_LINEA: TFloatField;
    CDsq_MDLINPRESUPUESTOPRECIO_COSTE: TFloatField;
    CDSQ_MDPRESUPUESTOAUXBASE_PRESUPUESTO: TFloatField;
    CDSQ_MDPRESUPUESTOAUXBASE_PRESUPUESTOSINIVA: TFloatField;
    CDSQ_MDPRESUPUESTOAUXDESCUENTO: TFloatField;
    CDSQ_MDPRESUPUESTOAUXRE: TFloatField;
    CDSQ_MDPRESUPUESTOAUXIVA: TFloatField;
    CDSQ_MDLINPRESUPUESTOAUXIVA: TFloatField;
    CDSQ_MDLINPRESUPUESTOAUXCANTIDAD: TFloatField;
    CDSQ_MDLINPRESUPUESTOAUXDESCUENTO: TFloatField;
    CDSQ_MDLINPRESUPUESTOAUXPRECIO: TFloatField;
    CDSQ_MDLINPRESUPUESTOAUXIMPORTE: TFloatField;
    CDSQ_MDLINPRESUPUESTOAUXIMPORTE_FACT: TFloatField;
    CDSQ_MDLINPRESUPUESTOAUXBASE_LINEA: TFloatField;
    CDSQ_MDLINPRESUPUESTOAUXPRECIO_COSTE: TFloatField;
    CDSQ_TICKETAUXDESCUENTO: TFloatField;
    CDSQ_TICKETAUXDESCUENTOEURO: TFloatField;
    CDSQ_TICKETAUXBASE_TICKET: TFloatField;
    CDSQ_TICKETAUXBASE_TICKETSINIVA: TFloatField;
    CDSQ_TICKETAUXIVA: TFloatField;
    CDSQ_TICKETAUXENTREGA: TFloatField;
    CDSQ_TICKETAUXDEVOLUCION: TFloatField;
    CDSQ_TICKETAUXTOTALCOBRADO: TFloatField;
    CDSQ_TICKETAUXTOTALDESCUENTO: TFloatField;
    CDSQ_MDTICKETDESCUENTO: TFloatField;
    CDSQ_MDTICKETDESCUENTOEURO: TFloatField;
    CDSQ_MDTICKETBASE_TICKET: TFloatField;
    CDSQ_MDTICKETIVA: TFloatField;
    CDSQ_MDTICKETENTREGA: TFloatField;
    CDSQ_MDTICKETDEVOLUCION: TFloatField;
    CDSQ_MDTICKETTOTALCOBRADO: TFloatField;
    CDSQ_MDTICKETTOTALDESCUENTO: TFloatField;
    CDSQ_MDTICKETAUXDESCUENTO: TFloatField;
    CDSQ_MDTICKETAUXDESCUENTOEURO: TFloatField;
    CDSQ_MDTICKETAUXBASE_TICKET: TFloatField;
    CDSQ_MDTICKETAUXBASE_TICKETSINIVA: TFloatField;
    CDSQ_MDTICKETAUXIVA: TFloatField;
    CDSQ_MDTICKETAUXENTREGA: TFloatField;
    CDSQ_MDTICKETAUXDEVOLUCION: TFloatField;
    CDSQ_MDTICKETAUXTOTALCOBRADO: TFloatField;
    CDSQ_MDTICKETAUXTOTALDESCUENTO: TFloatField;
    CDSQ_MDLINEATICKETAUXCANTIDAD: TFloatField;
    CDSQ_MDLINEATICKETAUXPRECIO: TFloatField;
    CDSQ_MDLINEATICKETAUXDESCUENTO: TFloatField;
    CDSQ_MDLINEATICKETAUXDESCUENTOEURO: TFloatField;
    CDSQ_MDLINEATICKETAUXIMPORTE: TFloatField;
    CDSQ_MDLINEATICKETAUXIVA: TFloatField;
    CDSQ_MDLINEATICKETAUXPRECIO_COSTE: TFloatField;
    CDSQ_MDLINEATICKETCANTIDAD: TFloatField;
    CDSQ_MDLINEATICKETPRECIO: TFloatField;
    CDSQ_MDLINEATICKETDESCUENTO: TFloatField;
    CDSQ_MDLINEATICKETDESCUENTOEURO: TFloatField;
    CDSQ_MDLINEATICKETIMPORTE: TFloatField;
    CDSQ_MDLINEATICKETIVA: TFloatField;
    CDSQ_MDLINEATICKETPRECIO_COSTE: TFloatField;
    CDSQ_LISTADOENTRADABASE_ENTRADA: TFloatField;
    CDSQ_LISTADOENTRADADESCUENTO: TFloatField;
    CDSQ_LISTADOENTRADATOTALDESCUENTO: TFloatField;
    CDSQ_LISTADOENTRADATOTALIVA: TFloatField;
    CDSQ_LISTADOENTRADATOTAL: TFloatField;
    CDSQ_LENTRADATOTALBASE_ENTRADA: TFloatField;
    CDSQ_LENTRADATOTALTOTALDESCUENTO: TFloatField;
    CDSQ_LENTRADATOTALTOTALIVA: TFloatField;
    CDSQ_LENTRADATOTALTOTAL: TFloatField;
    CDSQ_ARTICULOEANPRECIO_VENTA: TFloatField;
    CDSQ_ARTICULOEANIVA: TFloatField;
    CDSQ_ARTICULOEANPRECIO_COSTE: TFloatField;
    CDSQ_ARTICULOEANART_PROVEEDOR: TStringField;
    CDSQ_ARQUEODECAJAATOTAL: TFloatField;
    CDSQ_ARQUEODECAJACTOTAL: TFloatField;
    CDSQ_ARQUEODECAJACAJA: TFloatField;
    CDSQ_MDLINEAENTRADANUM_SERIE: TStringField;
    CDSQ_MDLINEAENTRADAFECHA_CADUCIDAD: TDateField;
    CDSQ_MDLINEAENTRADALINEA: TSmallintField;
    CDSQ_PROVEEDOR_ACREEDORALMACENABLEBORRAR: TSmallintField;
    CDSQ_CLIENTEALMACENABLEBORRAR: TSmallintField;
    CDSQ_ARTICULOSCOD_ARTICULO: TIntegerField;
    CDSQ_ARTICULOSCOD_FAMILIA: TStringField;
    CDSQ_ARTICULOSPROFUNDIDAD: TSmallintField;
    CDSQ_ARTICULOSID_ARTICULO: TStringField;
    CDSQ_ARTICULOSDESCRIPCION: TStringField;
    CDSQ_ARTICULOSDESCRIPCIONTICKET: TStringField;
    CDSQ_ARTICULOSBENEFICIO: TFloatField;
    CDSQ_ARTICULOSPRECIO_COSTE: TFloatField;
    CDSQ_ARTICULOSPRECIO_MAX_COSTE: TFloatField;
    CDSQ_ARTICULOSPRECIO_MIN_COSTE: TFloatField;
    CDSQ_ARTICULOSPRECIO_MED_COSTE: TFloatField;
    CDSQ_ARTICULOSPRECIO_VENTA: TFloatField;
    CDSQ_ARTICULOSIVA: TFloatField;
    CDSQ_ARTICULOSBRAZOS: TIntegerField;
    CDSQ_ARTICULOSID_COLOR: TStringField;
    CDSQ_ARTICULOSPVPCAT: TFloatField;
    CDSQ_ARTICULOSDESCUENTO: TFloatField;
    CDSQ_ARTICULOSMARCA: TStringField;
    CDSQ_ARTICULOSIMAGEN: TBlobField;
    CDSQ_ARTICULOSTRANS: TFloatField;
    CDSQ_ARTICULOSART_PROVEEDOR: TStringField;
    CDSQ_ARTICULOSID_PROVEEDOR: TIntegerField;
    CDSQ_ARTICULOSOBSERVACIONES: TStringField;
    CDSQ_ARTICULOSOLDART_PROVEEDOR: TStringField;
    CDSQ_ARTICULOSOLDID_PROVEEDOR: TIntegerField;
    CDSQ_ARTICULOSMOSTRARIMAGEN: TSmallintField;
    CDSQ_ARTICULOSMOSTRARDESCRIPCION: TSmallintField;
    CDSQ_ARTICULOSPOSICION: TSmallintField;
    CDSQ_ARTICULOSPOSICIONUSO: TSmallintField;
    CDSQ_ARTICULOSDESCRIPCIONBOTON: TStringField;
    CDSQ_ARTICULOSMOSTRARPOSICION: TSmallintField;
    CDSQ_ARTICULOSMOSTRARPOSICIONUSO: TSmallintField;
    CDSQ_ARTICULOSBORRADO: TSmallintField;
    CDSQ_ARTICULOSALMACENABLEBORRAR: TFloatField;
    CDSQ_ARTICULOScolordescripcion: TStringField;
    CDSQ_ARTICULOSfamiliadescripcion: TStringField;
    CDSQ_ARTICULOSnombreproveedor: TStringField;
    CDSQ_ARTICULOSALMACENABLE: TSmallintField;
    CDSQ_ARTICULOSTRANSPORTES: TSmallintField;
    CDSQ_ARTICULOSFINANCIEROS: TSmallintField;
    CDSQ_ARTICULOSOTROSCOSTES: TSmallintField;
    CDSQ_MDLINEAFACTURACODIGO_BARRAS: TStringField;
    CDSQ_MDLINEATICKETCODIGO_BARRAS: TStringField;
    CDSQ_MDLINEASALIDACODIGO_BARRAS: TStringField;
    CDsq_MDLINPRESUPUESTONOBORRARNOSEUSA: TStringField;
    CDSQ_MDALBARANNOMBRECLIENTE: TStringField;
    CDSQ_MDALBARANID_ALBARAN: TIntegerField;
    CDSQ_MDALBARANANYO: TSmallintField;
    CDSQ_MDALBARANID_EMPRESA: TSmallintField;
    CDSQ_MDALBARANID_SERIE: TStringField;
    CDSQ_MDALBARANFECHA: TDateField;
    CDSQ_MDALBARANID_CLIENTE: TIntegerField;
    CDSQ_MDALBARANOBSERVACIONES: TStringField;
    CDSQ_MDALBARANID_PRESUPUESTO: TIntegerField;
    CDSQ_MDALBARANANULADO: TSmallintField;
    CDSQ_MDALBARANCOBRADO: TSmallintField;
    CDSQ_MDALBARANID_FORMA: TStringField;
    CDSQ_MDALBARANHORACOBRO: TTimeField;
    CDSQ_MDALBARANFECHACOBRO: TDateField;
    CDSQ_MDALBARANIVA: TFloatField;
    CDSQ_MDALBARANBASE_ALBARAN: TFloatField;
    CDSQ_MDALBARANDESCUENTO: TFloatField;
    CDSQ_MDALBARANRE: TFloatField;
    CDSQ_MDALBARANTOTAL_COBRADO: TFloatField;
    CDSQ_MDALBARANDESCUENTOEURO: TFloatField;
    CDSQ_MDALBARANENTREGA: TFloatField;
    CDSQ_MDALBARANDEVOLUCION: TFloatField;
    CDSQ_MDALBARANTOTALCOBRADO: TFloatField;
    CDSQ_MDALBARANTOTALDESCUENTO: TFloatField;
    CDSQ_MDALBARANQ_MDLINEAALBARAN: TDataSetField;
    CDSQ_MDLINEAALBARANID_ALBARAN: TIntegerField;
    CDSQ_MDLINEAALBARANANYO: TSmallintField;
    CDSQ_MDLINEAALBARANID_EMPRESA: TSmallintField;
    CDSQ_MDLINEAALBARANID_SERIE: TStringField;
    CDSQ_MDLINEAALBARANID_ARTICULO: TStringField;
    CDSQ_MDLINEAALBARANCANTIDAD: TFloatField;
    CDSQ_MDLINEAALBARANPRECIO: TFloatField;
    CDSQ_MDLINEAALBARANDESCUENTO: TFloatField;
    CDSQ_MDLINEAALBARANIVA_INCLUIDO: TSmallintField;
    CDSQ_MDLINEAALBARANIVA: TFloatField;
    CDSQ_MDLINEAALBARANMARCA: TStringField;
    CDSQ_MDLINEAALBARANDESCRIPCION: TStringField;
    CDSQ_MDLINEAALBARANIMPORTE: TFloatField;
    CDSQ_MDLINEAALBARANIMPORTESINIVA: TFloatField;
    CDSQ_MDLINEAALBARANNUM_SERIE: TStringField;
    CDSQ_MDLINEAALBARANLINEA: TSmallintField;
    CDSQ_MDLINEAALBARANDESCRIPCIONGAR: TStringField;
    CDSQ_MDLINEAALBARANDESCUENTOEURO: TFloatField;
    CDSQ_MDLINEAALBARANPRECIO_COSTE: TFloatField;
    CDSQ_MDLINEAALBARANCODIGO_BARRAS: TStringField;
    CDSQ_MDLINEAALBARANNOBORRARNECESARIO: TIntegerField;
    CDSQ_MDALBARANNOBORRARNECESARIO: TStringField;
    CDSQ_MDENTRADANOBORRAR: TIntegerField;
    CDSQ_MDFACTURANOBORRARNECESARIO: TStringField;
    CDSQ_MDLINEAFACTURANOBORRARNECESARIO: TStringField;
    CDSQ_MDLINEATICKETNOBORRARNECESARIO: TIntegerField;
    CDSQ_MDTICKETnoborrarnecesario: TIntegerField;
    CDSQ_ARTICULOSPVPPROV: TFloatField;
    CDSQ_ARTICULOSPVP2: TFloatField;
    CDSQ_ARTICULOSAUXALMACENABLE: TSmallintField;
    CDSQ_ARTICULOSAUXTRANSPORTES: TSmallintField;
    CDSQ_ARTICULOSAUXFINANCIEROS: TSmallintField;
    CDSQ_ARTICULOSAUXOTROSCOSTES: TSmallintField;
    CDSQ_ARTICULOSAUXALMACENABLEBORRAR: TFloatField;
    CDSQ_ARTICULOSAUXPVPPROV: TFloatField;
    CDSQ_ARTICULOSAUXPVP2: TFloatField;
    CDSQ_SERIESPRECIO: TStringField;
    CDSQ_SERIESAUXPRECIO: TStringField;
    CDSQ_ARTICULOEANPVP2: TFloatField;
    CDSQ_ARTICULOSFMODIFICACION: TDateField;
    CDSQ_ARTICULOSAUXFMODIFICACION: TDateField;
    CDSQ_MDALBARANHORA: TTimeField;
    CDSQ_MDALBARANAUXHORA: TTimeField;
    CDSQ_MDFACTURAAUXHORA: TTimeField;
    CDSQ_MDFACTURAHORA: TTimeField;
    CDSQ_MDALBARANFECHAFIN: TDateField;
    CDSQ_MDALBARANAUXFECHAFIN: TDateField;
    CDSQ_TIPOSIVA: TClientDataSet;
    CDSQ_TIPOSIVAID: TIntegerField;
    CDSQ_TIPOSIVATIPO: TFloatField;
    CDSQ_TIPOSIVAVALIDODESDE: TDateField;
    CDSQ_TIPOSIVAVALIDOHASTA: TDateField;
    CDSQ_EMPRESANOMBRE_COMERCIAL: TStringField;
    CDSQ_EMPRESARUTAIMAGEN: TStringField;
    CDSQ_EMPRESAALBSINIVA: TSmallintField;
    CDSQ_ALMACENDETALLE2: TClientDataSet;
    CDSQ_ALMACENDETALLE2NUMERO: TIntegerField;
    CDSQ_ALMACENDETALLE2NUMERO1: TIntegerField;
    CDSQ_ALMACENDETALLE2FECHA_CADUCIDAD: TDateField;
    CDSQ_ALMACENDETALLE2CANTIDAD: TFloatField;
    CDSQ_ALMACENDETALLE2NUMEROSERIE: TStringField;
    CDSQ_ALMACENDETALLE2IMPRESO: TSmallintField;
    CDSQ_ALMACENDETALLE2CODIGO_BARRAS: TStringField;
    CDSQ_ARTICULOEANCOD_ARTICULO: TIntegerField;
    CDSQ_ARTICULOEANCOD_FAMILIA: TStringField;
    CDSQ_ARTICULOEANPROFUNDIDAD: TSmallintField;
    CDSQ_ARTICULOEANBENEFICIO: TFloatField;
    CDSQ_ARTICULOEANPRECIO_MAX_COSTE: TFloatField;
    CDSQ_ARTICULOEANPRECIO_MIN_COSTE: TFloatField;
    CDSQ_ARTICULOEANPRECIO_MED_COSTE: TFloatField;
    CDSQ_ARTICULOEANBRAZOS: TIntegerField;
    CDSQ_ARTICULOEANID_COLOR: TStringField;
    CDSQ_ARTICULOEANPVPCAT: TFloatField;
    CDSQ_ARTICULOEANDESCUENTO: TFloatField;
    CDSQ_ARTICULOEANIMAGEN: TBlobField;
    CDSQ_ARTICULOEANTRANS: TFloatField;
    CDSQ_ARTICULOEANOBSERVACIONES: TStringField;
    CDSQ_ARTICULOEANOLDART_PROVEEDOR: TStringField;
    CDSQ_ARTICULOEANOLDID_PROVEEDOR: TIntegerField;
    CDSQ_ARTICULOEANMOSTRARIMAGEN: TSmallintField;
    CDSQ_ARTICULOEANMOSTRARDESCRIPCION: TSmallintField;
    CDSQ_ARTICULOEANPOSICION: TSmallintField;
    CDSQ_ARTICULOEANPOSICIONUSO: TSmallintField;
    CDSQ_ARTICULOEANDESCRIPCIONBOTON: TStringField;
    CDSQ_ARTICULOEANMOSTRARPOSICION: TSmallintField;
    CDSQ_ARTICULOEANMOSTRARPOSICIONUSO: TSmallintField;
    CDSQ_ARTICULOEANBORRADO: TSmallintField;
    CDSQ_ARTICULOEANALMACENABLE: TSmallintField;
    CDSQ_ARTICULOEANTRANSPORTES: TSmallintField;
    CDSQ_ARTICULOEANFINANCIEROS: TSmallintField;
    CDSQ_ARTICULOEANOTROSCOSTES: TSmallintField;
    CDSQ_ARTICULOEANALMACENABLEBORRAR: TFloatField;
    CDSQ_ARTICULOEANPVPPROV: TFloatField;
    CDSQ_ARTICULOEANFMODIFICACION: TDateField;
    CDSQ_ARTICULOSCONTADOR: TIntegerField;
    CDSQ_ARTICULOSAUXCONTADOR: TIntegerField;
    CDSQ_ALMACENDETALLE2IMPRIME: TSmallintField;
    CDSQ_MDLINEAFACTURANUMERO_SERIE: TStringField;
    CDSQ_MDLINEAALBARANNUMERO_SERIE: TStringField;
    CDSQ_MDLINEATICKETNUMERO_SERIE: TStringField;
    CDSQ_ARTICULOSTieneEan: TBooleanField;
    CDSQ_CLIENTEVEHICULO: TStringField;
    CDSQ_CLIENTEMATRICULA: TStringField;
    CDSQ_CLIENTEAUXVEHICULO: TStringField;
    CDSQ_CLIENTEAUXMATRICULA: TStringField;
    CDSQ_EMPRESAPUERTOIMPTICKET: TStringField;
    CDSQ_EMPRESAAUXID_EMPRESA: TSmallintField;
    CDSQ_EMPRESAAUXCIF_EMPRESA: TStringField;
    CDSQ_EMPRESAAUXNOMBRE: TStringField;
    CDSQ_EMPRESAAUXDIRECCION: TStringField;
    CDSQ_EMPRESAAUXDIRECCION_POSTAL: TStringField;
    CDSQ_EMPRESAAUXPOBLACION: TStringField;
    CDSQ_EMPRESAAUXPOBLACION_POSTAL: TStringField;
    CDSQ_EMPRESAAUXPROVINCIA: TStringField;
    CDSQ_EMPRESAAUXPROVINCIA_POSTAL: TStringField;
    CDSQ_EMPRESAAUXCOD_POSTAL: TStringField;
    CDSQ_EMPRESAAUXCOD_POSTAL_POSTAL: TStringField;
    CDSQ_EMPRESAAUXEMAIL: TStringField;
    CDSQ_EMPRESAAUXHTTP: TStringField;
    CDSQ_EMPRESAAUXOBSERVACIONES: TStringField;
    CDSQ_EMPRESAAUXMISMA_DIRECCION: TSmallintField;
    CDSQ_EMPRESAAUXFAX: TStringField;
    CDSQ_EMPRESAAUXTELEFONO: TStringField;
    CDSQ_EMPRESAAUXDESGLOSAR_IVA: TSmallintField;
    CDSQ_EMPRESAAUXV_PRECIO_MAX_COSTE: TSmallintField;
    CDSQ_EMPRESAAUXV_LINEAS_FACT: TSmallintField;
    CDSQ_EMPRESAAUXBENEFICIO_MIN: TSmallintField;
    CDSQ_EMPRESAAUXCOPIAS_FACTURAS: TSmallintField;
    CDSQ_EMPRESAAUXCOPIAS_REPARACIONES: TSmallintField;
    CDSQ_EMPRESAAUXCOPIAS_AVISOS: TSmallintField;
    CDSQ_EMPRESAAUXLOGO: TBlobField;
    CDSQ_EMPRESAAUXMOVIL: TStringField;
    CDSQ_EMPRESAAUXTICKET: TIntegerField;
    CDSQ_EMPRESAAUXPREVIOS: TSmallintField;
    CDSQ_EMPRESAAUXIMPRIMIRTICKET: TSmallintField;
    CDSQ_EMPRESAAUXID_COBRO: TIntegerField;
    CDSQ_EMPRESAAUXID_ENTRADA: TIntegerField;
    CDSQ_EMPRESAAUXID_PRESUPUESTO: TIntegerField;
    CDSQ_EMPRESAAUXID_SALIDA: TSmallintField;
    CDSQ_EMPRESAAUXID_AVISO: TIntegerField;
    CDSQ_EMPRESAAUXID_SERIE: TStringField;
    CDSQ_EMPRESAAUXPRESUPUESTOVALIDO: TSmallintField;
    CDSQ_EMPRESAAUXTIPO: TSmallintField;
    CDSQ_EMPRESAAUXBENEFICIO: TFloatField;
    CDSQ_EMPRESAAUXAVISAR: TFloatField;
    CDSQ_EMPRESAAUXDAR_AVISO: TSmallintField;
    CDSQ_EMPRESAAUXTRANS: TFloatField;
    CDSQ_EMPRESAAUXANYADIR_TRANS: TSmallintField;
    CDSQ_EMPRESAAUXNODESCONTAR: TSmallintField;
    CDSQ_EMPRESAAUXCLXDEFECTO: TIntegerField;
    CDSQ_EMPRESAAUXMOSTRARIMAGEN: TSmallintField;
    CDSQ_EMPRESAAUXMOSTRARDESCRIPCION: TSmallintField;
    CDSQ_EMPRESAAUXFPOSICION: TSmallintField;
    CDSQ_EMPRESAAUXFPOSICIONUSO: TSmallintField;
    CDSQ_EMPRESAAUXFDESCRIPCION: TSmallintField;
    CDSQ_EMPRESAAUXFORMAPAGO: TStringField;
    CDSQ_EMPRESAAUXREGISTRO: TStringField;
    CDSQ_EMPRESAAUXDESFASEARQUEO: TFloatField;
    CDSQ_EMPRESAAUXIMPRESORATICKET: TStringField;
    CDSQ_EMPRESAAUXIMPRESORAINFORMES: TStringField;
    CDSQ_EMPRESAAUXCAJA: TSmallintField;
    CDSQ_EMPRESAAUXIMPRIMIRFACTURA: TSmallintField;
    CDSQ_EMPRESAAUXIMPRIMIRALBARAN: TSmallintField;
    CDSQ_EMPRESAAUXCOPIASALBARAN: TSmallintField;
    CDSQ_EMPRESAAUXNOMBRE_COMERCIAL: TStringField;
    CDSQ_EMPRESAAUXRUTAIMAGEN: TStringField;
    CDSQ_EMPRESAAUXALBSINIVA: TSmallintField;
    CDSQ_EMPRESAAUXPUERTOIMPTICKET: TStringField;
    procedure CDSQ_PROVEEDOR_ACREEDORAfterGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_PROVEEDOR_ACREEDORAfterInsert(DataSet: TDataSet);
    procedure CDSQ_PROVEEDOR_ACREEDORAfterPost(DataSet: TDataSet);
    procedure CDSQ_PROVEEDOR_ACREEDORBeforeClose(DataSet: TDataSet);
    procedure DataModuleCreate(Sender: TObject);
    procedure CDSQ_PROVEEDOR_ACREEDORBeforeGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_PROVEEDOR_ACREEDORBeforeOpen(DataSet: TDataSet);
    procedure CDSQ_PROVEEDOR_ACREEDORBeforePost(DataSet: TDataSet);
    procedure CDSQ_PROVEEDOR_ACREEDORCalcFields(DataSet: TDataSet);
    procedure CDSQ_PROVEEDOR_ACREEDORDeleteError(DataSet: TDataSet;
      E: EDatabaseError; var Action: TDataAction);
    procedure CDSQ_PROVEEDOR_ACREEDOREditError(DataSet: TDataSet;
      E: EDatabaseError; var Action: TDataAction);
    procedure CDSQ_PROVEEDOR_ACREEDORPostError(DataSet: TDataSet;
      E: EDatabaseError; var Action: TDataAction);
    procedure CDSQ_PROVEEDOR_ACREEDORReconcileError(
      DataSet: TCustomClientDataSet; E: EReconcileError;
      UpdateKind: TUpdateKind; var Action: TReconcileAction);
    procedure CDSQ_FPROVEEDORBeforeClose(DataSet: TDataSet);
    procedure CDSQ_FPROVEEDORBeforeGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_FPROVEEDORBeforeOpen(DataSet: TDataSet);
    procedure CDSQ_FPROVEEDORReconcileError(DataSet: TCustomClientDataSet;
      E: EReconcileError; UpdateKind: TUpdateKind;
      var Action: TReconcileAction);
    procedure CDSQ_TIPOSAfterPost(DataSet: TDataSet);
    procedure CDSQ_TIPOSBeforeClose(DataSet: TDataSet);
    procedure CDSQ_TIPOSBeforeGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_TIPOSBeforeOpen(DataSet: TDataSet);
    procedure CDSQ_TIPOSDeleteError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    procedure CDSQ_TIPOSEditError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    procedure CDSQ_TIPOSPostError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    procedure CDSQ_TIPOSReconcileError(DataSet: TCustomClientDataSet;
      E: EReconcileError; UpdateKind: TUpdateKind;
      var Action: TReconcileAction);
    procedure CDSQ_TIPOSAfterInsert(DataSet: TDataSet);
    procedure CDSQ_FAMILIASAfterGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_FAMILIASAfterPost(DataSet: TDataSet);
    procedure CDSQ_FAMILIASBeforeClose(DataSet: TDataSet);
    procedure CDSQ_FAMILIASBeforeGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_FAMILIASBeforeOpen(DataSet: TDataSet);
    procedure CDSQ_FAMILIASBeforePost(DataSet: TDataSet);
    procedure CDSQ_FAMILIASDeleteError(DataSet: TDataSet;
      E: EDatabaseError; var Action: TDataAction);
    procedure CDSQ_FAMILIASAUXAfterGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_FAMILIASAUXBeforeClose(DataSet: TDataSet);
    procedure CDSQ_FAMILIASAUXBeforeGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_FAMILIASAUXBeforeOpen(DataSet: TDataSet);
    procedure CDSQ_FAMILIASAUXReconcileError(DataSet: TCustomClientDataSet;
      E: EReconcileError; UpdateKind: TUpdateKind;
      var Action: TReconcileAction);
    procedure CDSQ_FAMILIASAfterInsert(DataSet: TDataSet);
    procedure CDSQ_FAMILIASBeforeDelete(DataSet: TDataSet);
    procedure CDSQ_ARTICULOSAfterGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_ARTICULOSAfterPost(DataSet: TDataSet);
    procedure CDSQ_ARTICULOSBeforeClose(DataSet: TDataSet);
    procedure CDSQ_ARTICULOSBeforeGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_ARTICULOSBeforeOpen(DataSet: TDataSet);
    procedure CDSQ_ARTICULOSBeforePost(DataSet: TDataSet);
    procedure CDSQ_ARTICULOSDeleteError(DataSet: TDataSet;
      E: EDatabaseError; var Action: TDataAction);
    procedure CDSQ_ARTICULOSEditError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    procedure CDSQ_ARTICULOSPostError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    procedure CDSQ_ARTICULOSReconcileError(DataSet: TCustomClientDataSet;
      E: EReconcileError; UpdateKind: TUpdateKind;
      var Action: TReconcileAction);
    procedure CDSQ_ARTICULOSBeforeCancel(DataSet: TDataSet);
    procedure CDSQ_ARTICULOSAfterInsert(DataSet: TDataSet);
    procedure CDSQ_ARTICULOSAfterRefresh(DataSet: TDataSet);
    procedure CDSQ_ARTICULOSBeforeRefresh(DataSet: TDataSet);
    procedure CDSQ_ARTICULOSAfterApplyUpdates(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_ARTICULOSBeforeDelete(DataSet: TDataSet);
    procedure CDSQ_FAMILIASEditError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    procedure CDSQ_FAMILIASPostError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    procedure CDSQ_FAMILIASReconcileError(DataSet: TCustomClientDataSet;
      E: EReconcileError; UpdateKind: TUpdateKind;
      var Action: TReconcileAction);
    procedure CDSQ_COLORESAfterGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_COLORESAfterPost(DataSet: TDataSet);
    procedure CDSQ_COLORESBeforeClose(DataSet: TDataSet);
    procedure CDSQ_COLORESBeforeDelete(DataSet: TDataSet);
    procedure CDSQ_COLORESBeforeGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_COLORESBeforeOpen(DataSet: TDataSet);
    procedure CDSQ_COLORESBeforePost(DataSet: TDataSet);
    procedure CDSQ_COLORESDeleteError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    procedure CDSQ_COLORESEditError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    procedure CDSQ_COLORESPostError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    procedure CDSQ_COLORESReconcileError(DataSet: TCustomClientDataSet;
      E: EReconcileError; UpdateKind: TUpdateKind;
      var Action: TReconcileAction);
    procedure CDSQ_COLORESAUXAfterGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_COLORESAUXBeforeClose(DataSet: TDataSet);
    procedure CDSQ_COLORESAUXBeforeGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_COLORESAUXBeforeOpen(DataSet: TDataSet);
    procedure CDSQ_COLORESAUXReconcileError(DataSet: TCustomClientDataSet;
      E: EReconcileError; UpdateKind: TUpdateKind;
      var Action: TReconcileAction);
    procedure CDSQ_EANAfterGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_EANAfterPost(DataSet: TDataSet);
    procedure CDSQ_EANBeforeClose(DataSet: TDataSet);
    procedure CDSQ_EANBeforeDelete(DataSet: TDataSet);
    procedure CDSQ_EANBeforeGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_EANBeforeOpen(DataSet: TDataSet);
    procedure CDSQ_EANBeforePost(DataSet: TDataSet);
    procedure CDSQ_EANDeleteError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    procedure CDSQ_EANEditError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    procedure CDSQ_EANPostError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    procedure CDSQ_EANReconcileError(DataSet: TCustomClientDataSet;
      E: EReconcileError; UpdateKind: TUpdateKind;
      var Action: TReconcileAction);
    procedure CDSQ_CLIENTECalcFields(DataSet: TDataSet);
    procedure CDSQ_CLIENTEAfterGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_CLIENTEAfterInsert(DataSet: TDataSet);
    procedure CDSQ_CLIENTEAfterPost(DataSet: TDataSet);
    procedure CDSQ_CLIENTEBeforeClose(DataSet: TDataSet);
    procedure CDSQ_CLIENTEBeforeGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_CLIENTEBeforeOpen(DataSet: TDataSet);
    procedure CDSQ_CLIENTEBeforePost(DataSet: TDataSet);
    procedure CDSQ_CLIENTEDeleteError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    procedure CDSQ_CLIENTEPostError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    procedure CDSQ_CLIENTEEditError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    procedure CDSQ_CLIENTEReconcileError(DataSet: TCustomClientDataSet;
      E: EReconcileError; UpdateKind: TUpdateKind;
      var Action: TReconcileAction);
    procedure CDSQ_FCLIENTEBeforeClose(DataSet: TDataSet);
    procedure CDSQ_FCLIENTEBeforeGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_FCLIENTEBeforeOpen(DataSet: TDataSet);
    procedure CDSQ_FCLIENTEReconcileError(DataSet: TCustomClientDataSet;
      E: EReconcileError; UpdateKind: TUpdateKind;
      var Action: TReconcileAction);
    procedure CDSQ_CLIENTEAUXAfterGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_CLIENTEAUXBeforeClose(DataSet: TDataSet);
    procedure CDSQ_CLIENTEAUXBeforeGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_CLIENTEAUXBeforeOpen(DataSet: TDataSet);
    procedure CDSQ_CLIENTEAUXReconcileError(DataSet: TCustomClientDataSet;
      E: EReconcileError; UpdateKind: TUpdateKind;
      var Action: TReconcileAction);
    procedure CDSQ_CLIENTEAUXCalcFields(DataSet: TDataSet);
    procedure CDSQ_SERIESAfterGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_SERIESAfterPost(DataSet: TDataSet);
    procedure CDSQ_SERIESBeforeClose(DataSet: TDataSet);
    procedure CDSQ_SERIESBeforeDelete(DataSet: TDataSet);
    procedure CDSQ_SERIESBeforeGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_SERIESBeforeOpen(DataSet: TDataSet);
    procedure CDSQ_SERIESBeforePost(DataSet: TDataSet);
    procedure CDSQ_SERIESDeleteError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    procedure CDSQ_SERIESEditError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    procedure CDSQ_SERIESPostError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    procedure CDSQ_SERIESReconcileError(DataSet: TCustomClientDataSet;
      E: EReconcileError; UpdateKind: TUpdateKind;
      var Action: TReconcileAction);
    procedure CDSQ_EMPRESAAfterGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_EMPRESAAfterPost(DataSet: TDataSet);
    procedure CDSQ_EMPRESABeforeClose(DataSet: TDataSet);
    procedure CDSQ_EMPRESABeforeGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_EMPRESABeforeOpen(DataSet: TDataSet);
    procedure CDSQ_EMPRESABeforePost(DataSet: TDataSet);
    procedure CDSQ_EMPRESADeleteError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    procedure CDSQ_EMPRESAEditError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    procedure CDSQ_EMPRESAPostError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    procedure CDSQ_EMPRESAReconcileError(DataSet: TCustomClientDataSet;
      E: EReconcileError; UpdateKind: TUpdateKind;
      var Action: TReconcileAction);
    procedure CDSQ_EMPRESAAUXAfterGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_EMPRESAAUXBeforeClose(DataSet: TDataSet);
    procedure CDSQ_EMPRESAAUXBeforeGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_EMPRESAAUXBeforeOpen(DataSet: TDataSet);
    procedure CDSQ_EMPRESAAUXReconcileError(DataSet: TCustomClientDataSet;
      E: EReconcileError; UpdateKind: TUpdateKind;
      var Action: TReconcileAction);
    procedure CDSQ_SERIESAUXAfterGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_SERIESAUXBeforeClose(DataSet: TDataSet);
    procedure CDSQ_SERIESAUXBeforeGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_SERIESAUXBeforeOpen(DataSet: TDataSet);
    procedure CDSQ_SERIESAUXReconcileError(DataSet: TCustomClientDataSet;
      E: EReconcileError; UpdateKind: TUpdateKind;
      var Action: TReconcileAction);
    procedure CDSQ_EMPRESABeforeDelete(DataSet: TDataSet);
    procedure CDSQ_EMPRESAAfterInsert(DataSet: TDataSet);
    procedure CDSQ_MDPRESUPUESTOAfterGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_MDPRESUPUESTOAfterInsert(DataSet: TDataSet);
    procedure CDSQ_MDPRESUPUESTOAfterPost(DataSet: TDataSet);
    procedure CDSQ_MDPRESUPUESTOBeforeClose(DataSet: TDataSet);
    procedure CDSQ_MDPRESUPUESTOBeforeDelete(DataSet: TDataSet);
    procedure CDSQ_MDPRESUPUESTOBeforeGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_MDPRESUPUESTOBeforeOpen(DataSet: TDataSet);
    procedure CDSQ_MDPRESUPUESTOBeforePost(DataSet: TDataSet);
    procedure CDSQ_MDPRESUPUESTODeleteError(DataSet: TDataSet;
      E: EDatabaseError; var Action: TDataAction);
    procedure CDSQ_MDPRESUPUESTOEditError(DataSet: TDataSet;
      E: EDatabaseError; var Action: TDataAction);
    procedure CDSQ_MDPRESUPUESTOPostError(DataSet: TDataSet;
      E: EDatabaseError; var Action: TDataAction);
    procedure CDSQ_MDPRESUPUESTOReconcileError(
      DataSet: TCustomClientDataSet; E: EReconcileError;
      UpdateKind: TUpdateKind; var Action: TReconcileAction);
    procedure CDsq_MDLINPRESUPUESTOAfterPost(DataSet: TDataSet);
    procedure CDsq_MDLINPRESUPUESTOBeforeDelete(DataSet: TDataSet);
    procedure CDsq_MDLINPRESUPUESTOBeforeOpen(DataSet: TDataSet);
    procedure CDsq_MDLINPRESUPUESTOBeforePost(DataSet: TDataSet);
    procedure CDsq_MDLINPRESUPUESTODeleteError(DataSet: TDataSet;
      E: EDatabaseError; var Action: TDataAction);
    procedure CDsq_MDLINPRESUPUESTOEditError(DataSet: TDataSet;
      E: EDatabaseError; var Action: TDataAction);
    procedure CDsq_MDLINPRESUPUESTOPostError(DataSet: TDataSet;
      E: EDatabaseError; var Action: TDataAction);
    procedure CDsq_MDLINPRESUPUESTOReconcileError(
      DataSet: TCustomClientDataSet; E: EReconcileError;
      UpdateKind: TUpdateKind; var Action: TReconcileAction);
    procedure CDSQ_ARTICULOSAUXAfterGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_ARTICULOSAUXBeforeClose(DataSet: TDataSet);
    procedure CDSQ_ARTICULOSAUXBeforeGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_ARTICULOSAUXBeforeOpen(DataSet: TDataSet);
    procedure CDSQ_ARTICULOSAUXReconcileError(
      DataSet: TCustomClientDataSet; E: EReconcileError;
      UpdateKind: TUpdateKind; var Action: TReconcileAction);
    procedure CDsq_MDLINPRESUPUESTOBeforeCancel(DataSet: TDataSet);
    procedure CDsq_MDLINPRESUPUESTOAfterInsert(DataSet: TDataSet);
    procedure CDsq_MDLINPRESUPUESTOCalcFields(DataSet: TDataSet);
    procedure CDSQ_PROCEDUREBeforeClose(DataSet: TDataSet);
    procedure CDSQ_PROCEDUREBeforeGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_ARTICULOEANBeforeGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_ARTICULOEANBeforeClose(DataSet: TDataSet);
    procedure CDSQ_MDPRESUPUESTOCalcFields(DataSet: TDataSet);
    procedure CDSQ_MDPRESUPUESTOAfterApplyUpdates(Sender: TObject;
      var OwnerData: OleVariant);
//****
   procedure ESFLOATSetText(Sender: TField;
      const Text: String);
   procedure ESINTEGERSetText(Sender: TField;
      const Text: String);
   procedure ESFECHASetText(Sender: TField;
      const Text: String);
    procedure CDSQ_MDENTRADAAfterGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_MDENTRADAAfterInsert(DataSet: TDataSet);
    procedure CDSQ_MDENTRADAAfterPost(DataSet: TDataSet);
    procedure CDSQ_MDENTRADABeforeClose(DataSet: TDataSet);
    procedure CDSQ_MDENTRADABeforeGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_MDENTRADABeforeOpen(DataSet: TDataSet);
    procedure CDSQ_MDENTRADABeforePost(DataSet: TDataSet);
    procedure CDSQ_MDENTRADADeleteError(DataSet: TDataSet;
      E: EDatabaseError; var Action: TDataAction);
    procedure CDSQ_MDENTRADAEditError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    procedure CDSQ_MDENTRADAPostError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    procedure CDSQ_MDENTRADAReconcileError(DataSet: TCustomClientDataSet;
      E: EReconcileError; UpdateKind: TUpdateKind;
      var Action: TReconcileAction);
    procedure CDSQ_MDLINEAENTRADAAfterInsert(DataSet: TDataSet);
    procedure CDSQ_MDLINEAENTRADAAfterPost(DataSet: TDataSet);
    procedure CDSQ_MDLINEAENTRADABeforeCancel(DataSet: TDataSet);
    procedure CDSQ_MDLINEAENTRADABeforeDelete(DataSet: TDataSet);
    procedure CDSQ_MDLINEAENTRADABeforeOpen(DataSet: TDataSet);
    procedure CDSQ_MDLINEAENTRADABeforePost(DataSet: TDataSet);
    procedure CDSQ_MDLINEAENTRADADeleteError(DataSet: TDataSet;
      E: EDatabaseError; var Action: TDataAction);
    procedure CDSQ_MDLINEAENTRADAEditError(DataSet: TDataSet;
      E: EDatabaseError; var Action: TDataAction);
    procedure CDSQ_MDLINEAENTRADAPostError(DataSet: TDataSet;
      E: EDatabaseError; var Action: TDataAction);
    procedure CDSQ_MDLINEAENTRADAReconcileError(
      DataSet: TCustomClientDataSet; E: EReconcileError;
      UpdateKind: TUpdateKind; var Action: TReconcileAction);
    procedure cdsq_proveedor_acreedorauxAfterGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure cdsq_proveedor_acreedorauxBeforeClose(DataSet: TDataSet);
    procedure cdsq_proveedor_acreedorauxBeforeGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure cdsq_proveedor_acreedorauxBeforeOpen(DataSet: TDataSet);
    procedure cdsq_proveedor_acreedorauxCalcFields(DataSet: TDataSet);
    procedure cdsq_proveedor_acreedorauxReconcileError(
      DataSet: TCustomClientDataSet; E: EReconcileError;
      UpdateKind: TUpdateKind; var Action: TReconcileAction);
    procedure CDSQ_MDENTRADACalcFields(DataSet: TDataSet);
    procedure CDSQ_MDALBARANAfterGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_MDALBARANAfterInsert(DataSet: TDataSet);
    procedure CDSQ_MDALBARANAfterPost(DataSet: TDataSet);
    procedure CDSQ_MDALBARANBeforeClose(DataSet: TDataSet);
    procedure CDSQ_MDALBARANBeforeGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_MDALBARANBeforeOpen(DataSet: TDataSet);
    procedure CDSQ_MDALBARANBeforePost(DataSet: TDataSet);
    procedure CDSQ_MDALBARANCalcFields(DataSet: TDataSet);
    procedure CDSQ_MDALBARANDeleteError(DataSet: TDataSet;
      E: EDatabaseError; var Action: TDataAction);
    procedure CDSQ_MDALBARANEditError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    procedure CDSQ_MDALBARANPostError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    procedure CDSQ_MDALBARANReconcileError(DataSet: TCustomClientDataSet;
      E: EReconcileError; UpdateKind: TUpdateKind;
      var Action: TReconcileAction);
    procedure CDSQ_MDLINEAALBARANAfterInsert(DataSet: TDataSet);
    procedure CDSQ_MDLINEAALBARANAfterPost(DataSet: TDataSet);
    procedure CDSQ_MDLINEAALBARANBeforeCancel(DataSet: TDataSet);
    procedure CDSQ_MDLINEAALBARANBeforeDelete(DataSet: TDataSet);
    procedure CDSQ_MDLINEAALBARANBeforeOpen(DataSet: TDataSet);
    procedure CDSQ_MDLINEAALBARANBeforePost(DataSet: TDataSet);
    procedure CDSQ_MDLINEAALBARANDeleteError(DataSet: TDataSet;
      E: EDatabaseError; var Action: TDataAction);
    procedure CDSQ_MDLINEAALBARANReconcileError(
      DataSet: TCustomClientDataSet; E: EReconcileError;
      UpdateKind: TUpdateKind; var Action: TReconcileAction);
    procedure CDSQ_MDLINEAALBARANPostError(DataSet: TDataSet;
      E: EDatabaseError; var Action: TDataAction);
    procedure CDSQ_MDLINEAALBARANEditError(DataSet: TDataSet;
      E: EDatabaseError; var Action: TDataAction);
    procedure CDSQ_MDPRESUPUESTOAUXAfterGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_MDPRESUPUESTOAUXBeforeClose(DataSet: TDataSet);
    procedure CDSQ_MDPRESUPUESTOAUXBeforeGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_MDPRESUPUESTOAUXBeforeOpen(DataSet: TDataSet);
    procedure CDSQ_MDPRESUPUESTOAUXReconcileError(
      DataSet: TCustomClientDataSet; E: EReconcileError;
      UpdateKind: TUpdateKind; var Action: TReconcileAction);
    procedure CDSQ_MDFACTURAAfterGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_MDFACTURAAfterInsert(DataSet: TDataSet);
    procedure CDSQ_MDFACTURAAfterPost(DataSet: TDataSet);
    procedure CDSQ_MDFACTURABeforeClose(DataSet: TDataSet);
    procedure CDSQ_MDFACTURABeforeGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_MDFACTURABeforeOpen(DataSet: TDataSet);
    procedure CDSQ_MDFACTURABeforePost(DataSet: TDataSet);
    procedure CDSQ_MDFACTURACalcFields(DataSet: TDataSet);
    procedure CDSQ_MDFACTURADeleteError(DataSet: TDataSet;
      E: EDatabaseError; var Action: TDataAction);
    procedure CDSQ_MDFACTURAReconcileError(DataSet: TCustomClientDataSet;
      E: EReconcileError; UpdateKind: TUpdateKind;
      var Action: TReconcileAction);
    procedure CDSQ_MDFACTURAEditError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    procedure CDSQ_MDFACTURAPostError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    procedure CDSQ_MDLINEAFACTURAAfterInsert(DataSet: TDataSet);
    procedure CDSQ_MDLINEAFACTURAAfterPost(DataSet: TDataSet);
    procedure CDSQ_MDLINEAFACTURABeforeCancel(DataSet: TDataSet);
    procedure CDSQ_MDLINEAFACTURABeforeDelete(DataSet: TDataSet);
    procedure CDSQ_MDLINEAFACTURABeforeOpen(DataSet: TDataSet);
    procedure CDSQ_MDLINEAFACTURABeforePost(DataSet: TDataSet);
    procedure CDSQ_MDLINEAFACTURADeleteError(DataSet: TDataSet;
      E: EDatabaseError; var Action: TDataAction);
    procedure CDSQ_MDLINEAFACTURAReconcileError(
      DataSet: TCustomClientDataSet; E: EReconcileError;
      UpdateKind: TUpdateKind; var Action: TReconcileAction);
    procedure CDSQ_MDLINEAFACTURAEditError(DataSet: TDataSet;
      E: EDatabaseError; var Action: TDataAction);
    procedure CDSQ_MDLINEAFACTURAPostError(DataSet: TDataSet;
      E: EDatabaseError; var Action: TDataAction);
    procedure CDSQ_MDALBARANAUXAfterGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_MDALBARANAUXBeforeClose(DataSet: TDataSet);
    procedure CDSQ_MDALBARANAUXBeforeGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_MDALBARANAUXBeforeOpen(DataSet: TDataSet);
    procedure CDSQ_MDALBARANAUXReconcileError(
      DataSet: TCustomClientDataSet; E: EReconcileError;
      UpdateKind: TUpdateKind; var Action: TReconcileAction);
    procedure DCOMConnection1AfterConnect(Sender: TObject);
    procedure CDSQ_FORMAPAGOAfterGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_FORMAPAGOAfterPost(DataSet: TDataSet);
    procedure CDSQ_FORMAPAGOBeforeClose(DataSet: TDataSet);
    procedure CDSQ_FORMAPAGOBeforeDelete(DataSet: TDataSet);
    procedure CDSQ_FORMAPAGOBeforeGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_FORMAPAGOBeforeOpen(DataSet: TDataSet);
    procedure CDSQ_FORMAPAGOBeforePost(DataSet: TDataSet);
    procedure CDSQ_FORMAPAGODeleteError(DataSet: TDataSet;
      E: EDatabaseError; var Action: TDataAction);
    procedure CDSQ_FORMAPAGOReconcileError(DataSet: TCustomClientDataSet;
      E: EReconcileError; UpdateKind: TUpdateKind;
      var Action: TReconcileAction);
    procedure CDSQ_FORMAPAGOEditError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    procedure CDSQ_FORMAPAGOPostError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    procedure CDSQ_FORMAPAGOAUXAfterGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_FORMAPAGOAUXBeforeClose(DataSet: TDataSet);
    procedure CDSQ_FORMAPAGOAUXBeforeGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_FORMAPAGOAUXBeforeOpen(DataSet: TDataSet);
    procedure CDSQ_FORMAPAGOAUXReconcileError(
      DataSet: TCustomClientDataSet; E: EReconcileError;
      UpdateKind: TUpdateKind; var Action: TReconcileAction);
    procedure CDSQ_MDCOBROAfterGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_MDCOBROAfterInsert(DataSet: TDataSet);
    procedure CDSQ_MDCOBROAfterPost(DataSet: TDataSet);
    procedure CDSQ_MDCOBROBeforeClose(DataSet: TDataSet);
    procedure CDSQ_MDCOBROBeforeGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_MDCOBROBeforeOpen(DataSet: TDataSet);
    procedure CDSQ_MDCOBROBeforePost(DataSet: TDataSet);
    procedure CDSQ_MDCOBROReconcileError(DataSet: TCustomClientDataSet;
      E: EReconcileError; UpdateKind: TUpdateKind;
      var Action: TReconcileAction);
    procedure CDSQ_MDCOBRODeleteError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    procedure CDSQ_MDCOBROEditError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    procedure CDSQ_MDCOBROPostError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    procedure CDSQ_MDLINEACOBROAfterInsert(DataSet: TDataSet);
    procedure CDSQ_MDLINEACOBROAfterPost(DataSet: TDataSet);
    procedure CDSQ_MDLINEACOBROBeforeCancel(DataSet: TDataSet);
    procedure CDSQ_MDLINEACOBROBeforeDelete(DataSet: TDataSet);
    procedure CDSQ_MDLINEACOBROBeforeOpen(DataSet: TDataSet);
    procedure CDSQ_MDLINEACOBROBeforePost(DataSet: TDataSet);
    procedure CDSQ_MDLINEACOBRODeleteError(DataSet: TDataSet;
      E: EDatabaseError; var Action: TDataAction);
    procedure CDSQ_MDLINEACOBROReconcileError(
      DataSet: TCustomClientDataSet; E: EReconcileError;
      UpdateKind: TUpdateKind; var Action: TReconcileAction);
    procedure CDSQ_MDLINEACOBROEditError(DataSet: TDataSet;
      E: EDatabaseError; var Action: TDataAction);
    procedure CDSQ_MDLINEACOBROPostError(DataSet: TDataSet;
      E: EDatabaseError; var Action: TDataAction);
    procedure CDSQ_MDCOBROCalcFields(DataSet: TDataSet);
    procedure CDSQ_ACTUALIZARBeforeExecute(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_ACTUALIZARAfterExecute(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_ACTUALIZARReconcileError(DataSet: TCustomClientDataSet;
      E: EReconcileError; UpdateKind: TUpdateKind;
      var Action: TReconcileAction);
    procedure CDSQ_MDFACTURAAUXAfterGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_MDFACTURAAUXBeforeClose(DataSet: TDataSet);
    procedure CDSQ_MDFACTURAAUXBeforeGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_MDFACTURAAUXBeforeOpen(DataSet: TDataSet);
    procedure CDSQ_MDFACTURAAUXReconcileError(
      DataSet: TCustomClientDataSet; E: EReconcileError;
      UpdateKind: TUpdateKind; var Action: TReconcileAction);
    procedure CDSQ_MDFACTURAAUXCalcFields(DataSet: TDataSet);
    procedure CDSQ_MDALBARANAUXCalcFields(DataSet: TDataSet);
    procedure CDSQ_MDCOBROAUXAfterGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_MDCOBROAUXBeforeClose(DataSet: TDataSet);
    procedure CDSQ_MDCOBROAUXBeforeGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_MDCOBROAUXBeforeOpen(DataSet: TDataSet);
    procedure CDSQ_MDCOBROAUXCalcFields(DataSet: TDataSet);
    procedure CDSQ_MDCOBROAUXReconcileError(DataSet: TCustomClientDataSet;
      E: EReconcileError; UpdateKind: TUpdateKind;
      var Action: TReconcileAction);
    procedure CDSQ_SERIESAfterInsert(DataSet: TDataSet);
    procedure CDSQ_TARIFASAfterGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_TARIFASAfterInsert(DataSet: TDataSet);
    procedure CDSQ_TARIFASAfterPost(DataSet: TDataSet);
    procedure CDSQ_TARIFASBeforeCancel(DataSet: TDataSet);
    procedure CDSQ_TARIFASBeforeClose(DataSet: TDataSet);
    procedure CDSQ_TARIFASBeforeDelete(DataSet: TDataSet);
    procedure CDSQ_TARIFASBeforeGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_TARIFASBeforeOpen(DataSet: TDataSet);
    procedure CDSQ_TARIFASBeforePost(DataSet: TDataSet);
    procedure CDSQ_TARIFASDeleteError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    procedure CDSQ_TARIFASEditError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    procedure CDSQ_TARIFASPostError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    procedure CDSQ_TARIFASReconcileError(DataSet: TCustomClientDataSet;
      E: EReconcileError; UpdateKind: TUpdateKind;
      var Action: TReconcileAction);
    procedure CDSQ_PROVEEDORAUXAfterGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_TARIFASAUXAfterGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_TARIFASAUXBeforeClose(DataSet: TDataSet);
    procedure CDSQ_TARIFASAUXBeforeGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_TARIFASAUXBeforeOpen(DataSet: TDataSet);
    procedure CDSQ_TARIFASAUXReconcileError(DataSet: TCustomClientDataSet;
      E: EReconcileError; UpdateKind: TUpdateKind;
      var Action: TReconcileAction);
    procedure CDSQ_ALMACENAfterGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_ALMACENAfterInsert(DataSet: TDataSet);
    procedure CDSQ_ALMACENAfterPost(DataSet: TDataSet);
    procedure CDSQ_ALMACENBeforeCancel(DataSet: TDataSet);
    procedure CDSQ_ALMACENBeforeClose(DataSet: TDataSet);
    procedure CDSQ_ALMACENBeforeDelete(DataSet: TDataSet);
    procedure CDSQ_ALMACENBeforeGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_ALMACENBeforeOpen(DataSet: TDataSet);
    procedure CDSQ_ALMACENBeforePost(DataSet: TDataSet);
    procedure CDSQ_ALMACENDeleteError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    procedure CDSQ_ALMACENEditError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    procedure CDSQ_ALMACENPostError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    procedure CDSQ_ALMACENReconcileError(DataSet: TCustomClientDataSet;
      E: EReconcileError; UpdateKind: TUpdateKind;
      var Action: TReconcileAction);
    procedure CDSQ_MDENTRADAAfterApplyUpdates(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_ALMACENAUXAfterGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_ALMACENAUXBeforeClose(DataSet: TDataSet);
    procedure CDSQ_ALMACENAUXBeforeGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_ALMACENAUXBeforeOpen(DataSet: TDataSet);
    procedure CDSQ_ALMACENAUXReconcileError(DataSet: TCustomClientDataSet;
      E: EReconcileError; UpdateKind: TUpdateKind;
      var Action: TReconcileAction);
    procedure CDSQ_MDSALIDAAfterApplyUpdates(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_MDSALIDAAfterGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_MDSALIDAAfterInsert(DataSet: TDataSet);
    procedure CDSQ_MDSALIDAAfterPost(DataSet: TDataSet);
    procedure CDSQ_MDSALIDABeforeClose(DataSet: TDataSet);
    procedure CDSQ_MDSALIDABeforeGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_MDSALIDABeforeOpen(DataSet: TDataSet);
    procedure CDSQ_MDSALIDABeforePost(DataSet: TDataSet);
    procedure CDSQ_MDSALIDADeleteError(DataSet: TDataSet;
      E: EDatabaseError; var Action: TDataAction);
    procedure CDSQ_MDSALIDAEditError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    procedure CDSQ_MDSALIDAPostError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    procedure CDSQ_MDSALIDAReconcileError(DataSet: TCustomClientDataSet;
      E: EReconcileError; UpdateKind: TUpdateKind;
      var Action: TReconcileAction);
    procedure CDSQ_MDLINEASALIDAAfterInsert(DataSet: TDataSet);
    procedure CDSQ_MDLINEASALIDAAfterPost(DataSet: TDataSet);
    procedure CDSQ_MDLINEASALIDABeforeCancel(DataSet: TDataSet);
    procedure CDSQ_MDLINEASALIDABeforeDelete(DataSet: TDataSet);
    procedure CDSQ_MDLINEASALIDABeforeOpen(DataSet: TDataSet);
    procedure CDSQ_MDLINEASALIDABeforePost(DataSet: TDataSet);
    procedure CDSQ_MDLINEASALIDADeleteError(DataSet: TDataSet;
      E: EDatabaseError; var Action: TDataAction);
    procedure CDSQ_MDLINEASALIDAEditError(DataSet: TDataSet;
      E: EDatabaseError; var Action: TDataAction);
    procedure CDSQ_MDLINEASALIDAPostError(DataSet: TDataSet;
      E: EDatabaseError; var Action: TDataAction);
    procedure CDSQ_MDLINEASALIDAReconcileError(
      DataSet: TCustomClientDataSet; E: EReconcileError;
      UpdateKind: TUpdateKind; var Action: TReconcileAction);
    procedure CDSQ_MDLINEASALIDAAfterApplyUpdates(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_MDALBARANAfterApplyUpdates(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_MDFACTURAAfterApplyUpdates(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_MDFACTURAAfterOpen(DataSet: TDataSet);
    procedure CDSQ_AVISOAfterGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_AVISOAfterInsert(DataSet: TDataSet);
    procedure CDSQ_AVISOAfterPost(DataSet: TDataSet);
    procedure CDSQ_AVISOBeforeClose(DataSet: TDataSet);
    procedure CDSQ_AVISOBeforeGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_AVISOBeforeOpen(DataSet: TDataSet);
    procedure CDSQ_AVISOBeforePost(DataSet: TDataSet);
    procedure CDSQ_AVISODeleteError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    procedure CDSQ_AVISOEditError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    procedure CDSQ_AVISOPostError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    procedure CDSQ_AVISOReconcileError(DataSet: TCustomClientDataSet;
      E: EReconcileError; UpdateKind: TUpdateKind;
      var Action: TReconcileAction);
    procedure CDSQ_AVISOBeforeDelete(DataSet: TDataSet);
    procedure CDSQ_AVISOAUXAfterGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_AVISOAUXBeforeClose(DataSet: TDataSet);
    procedure CDSQ_AVISOAUXBeforeGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_AVISOAUXBeforeOpen(DataSet: TDataSet);
    procedure CDSQ_AVISOAUXReconcileError(DataSet: TCustomClientDataSet;
      E: EReconcileError; UpdateKind: TUpdateKind;
      var Action: TReconcileAction);
    procedure CDSQ_PEDIDOSPENDIENTESAfterGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_PEDIDOSPENDIENTESAfterInsert(DataSet: TDataSet);
    procedure CDSQ_PEDIDOSPENDIENTESAfterPost(DataSet: TDataSet);
    procedure CDSQ_PEDIDOSPENDIENTESBeforeCancel(DataSet: TDataSet);
    procedure CDSQ_PEDIDOSPENDIENTESBeforeClose(DataSet: TDataSet);
    procedure CDSQ_PEDIDOSPENDIENTESBeforeDelete(DataSet: TDataSet);
    procedure CDSQ_PEDIDOSPENDIENTESBeforeGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_PEDIDOSPENDIENTESBeforeOpen(DataSet: TDataSet);
    procedure CDSQ_PEDIDOSPENDIENTESBeforePost(DataSet: TDataSet);
    procedure CDSQ_PEDIDOSPENDIENTESDeleteError(DataSet: TDataSet;
      E: EDatabaseError; var Action: TDataAction);
    procedure CDSQ_PEDIDOSPENDIENTESEditError(DataSet: TDataSet;
      E: EDatabaseError; var Action: TDataAction);
    procedure CDSQ_PEDIDOSPENDIENTESPostError(DataSet: TDataSet;
      E: EDatabaseError; var Action: TDataAction);
    procedure CDSQ_PEDIDOSPENDIENTESReconcileError(
      DataSet: TCustomClientDataSet; E: EReconcileError;
      UpdateKind: TUpdateKind; var Action: TReconcileAction);
    procedure CDSQ_PEDIDOSPENDIENTESAUXAfterGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_PEDIDOSPENDIENTESAUXBeforeClose(DataSet: TDataSet);
    procedure CDSQ_PEDIDOSPENDIENTESAUXBeforeGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_PEDIDOSPENDIENTESAUXBeforeOpen(DataSet: TDataSet);
    procedure CDSQ_PEDIDOSPENDIENTESAUXReconcileError(
      DataSet: TCustomClientDataSet; E: EReconcileError;
      UpdateKind: TUpdateKind; var Action: TReconcileAction);
    procedure CDSQ_MDTICKETAfterApplyUpdates(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_MDTICKETAfterGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_MDTICKETAfterInsert(DataSet: TDataSet);
    procedure CDSQ_MDTICKETAfterPost(DataSet: TDataSet);
    procedure CDSQ_MDTICKETBeforeClose(DataSet: TDataSet);
    procedure CDSQ_MDTICKETBeforeGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_MDTICKETBeforeOpen(DataSet: TDataSet);
    procedure CDSQ_MDTICKETBeforePost(DataSet: TDataSet);
    procedure CDSQ_MDTICKETDeleteError(DataSet: TDataSet;
      E: EDatabaseError; var Action: TDataAction);
    procedure CDSQ_MDTICKETEditError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    procedure CDSQ_MDTICKETReconcileError(DataSet: TCustomClientDataSet;
      E: EReconcileError; UpdateKind: TUpdateKind;
      var Action: TReconcileAction);
    procedure CDSQ_MDTICKETPostError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    procedure CDSQ_MDLINEATICKETAfterInsert(DataSet: TDataSet);
    procedure CDSQ_MDLINEATICKETAfterPost(DataSet: TDataSet);
    procedure CDSQ_MDLINEATICKETBeforeDelete(DataSet: TDataSet);
    procedure CDSQ_MDLINEATICKETBeforeOpen(DataSet: TDataSet);
    procedure CDSQ_MDLINEATICKETBeforePost(DataSet: TDataSet);
    procedure CDSQ_MDLINEATICKETDeleteError(DataSet: TDataSet;
      E: EDatabaseError; var Action: TDataAction);
    procedure CDSQ_MDLINEATICKETEditError(DataSet: TDataSet;
      E: EDatabaseError; var Action: TDataAction);
    procedure CDSQ_MDLINEATICKETPostError(DataSet: TDataSet;
      E: EDatabaseError; var Action: TDataAction);
    procedure CDSQ_MDLINEATICKETReconcileError(
      DataSet: TCustomClientDataSet; E: EReconcileError;
      UpdateKind: TUpdateKind; var Action: TReconcileAction);
    procedure CDSQ_MDTICKETCalcFields(DataSet: TDataSet);
    procedure CDSQ_ARTICULOSCalcFields(DataSet: TDataSet);
    procedure CDSQ_TARIFASAUXCalcFields(DataSet: TDataSet);
    procedure DataModuleDestroy(Sender: TObject);
    procedure pcomprobarfecha(sender:tfield;const text:string);
    procedure CDSQ_MDENTRADABeforeApplyUpdates(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_MDALBARANBeforeApplyUpdates(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_MDFACTURABeforeApplyUpdates(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_MDSALIDABeforeApplyUpdates(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_MDTICKETBeforeApplyUpdates(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_OPCIONESNUMERICASCalcFields(DataSet: TDataSet);
    procedure CDSQ_OPCIONESNUMERICASAfterGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_OPCIONESNUMERICASAfterInsert(DataSet: TDataSet);
    procedure CDSQ_OPCIONESNUMERICASAfterPost(DataSet: TDataSet);
    procedure CDSQ_OPCIONESNUMERICASBeforeClose(DataSet: TDataSet);
    procedure CDSQ_OPCIONESNUMERICASBeforeDelete(DataSet: TDataSet);
    procedure CDSQ_OPCIONESNUMERICASBeforeGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_OPCIONESNUMERICASBeforeOpen(DataSet: TDataSet);
    procedure CDSQ_OPCIONESNUMERICASBeforePost(DataSet: TDataSet);
    procedure CDSQ_OPCIONESNUMERICASDeleteError(DataSet: TDataSet;
      E: EDatabaseError; var Action: TDataAction);
    procedure CDSQ_OPCIONESNUMERICASEditError(DataSet: TDataSet;
      E: EDatabaseError; var Action: TDataAction);
    procedure CDSQ_OPCIONESNUMERICASPostError(DataSet: TDataSet;
      E: EDatabaseError; var Action: TDataAction);
    procedure CDSQ_OPCIONESNUMERICASReconcileError(
      DataSet: TCustomClientDataSet; E: EReconcileError;
      UpdateKind: TUpdateKind; var Action: TReconcileAction);
    procedure CDSQ_LISTADOENTRADAAfterGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_LISTADOENTRADABeforeClose(DataSet: TDataSet);
    procedure CDSQ_LISTADOENTRADABeforeGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_LISTADOENTRADABeforeOpen(DataSet: TDataSet);
    procedure CDSQ_LISTADOENTRADAReconcileError(
      DataSet: TCustomClientDataSet; E: EReconcileError;
      UpdateKind: TUpdateKind; var Action: TReconcileAction);
    procedure CDSQ_LENTRADATOTALAfterGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_LENTRADATOTALBeforeClose(DataSet: TDataSet);
    procedure CDSQ_LENTRADATOTALBeforeGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_LENTRADATOTALBeforeOpen(DataSet: TDataSet);
    procedure CDSQ_LENTRADATOTALReconcileError(
      DataSet: TCustomClientDataSet; E: EReconcileError;
      UpdateKind: TUpdateKind; var Action: TReconcileAction);
    procedure CDSQ_MDLINEATICKETBeforeCancel(DataSet: TDataSet);
    procedure CDSQ_MDTICKETBeforeEdit(DataSet: TDataSet);
    procedure CDSQ_MDTICKETBeforeDelete(DataSet: TDataSet);
    procedure CDSQ_TICKETAUXAfterGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_TICKETAUXBeforeClose(DataSet: TDataSet);
    procedure CDSQ_TICKETAUXBeforeGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_TICKETAUXBeforeOpen(DataSet: TDataSet);
    procedure CDSQ_TICKETAUXReconcileError(DataSet: TCustomClientDataSet;
      E: EReconcileError; UpdateKind: TUpdateKind;
      var Action: TReconcileAction);
    procedure CDSQ_TICKETAUXCalcFields(DataSet: TDataSet);
    procedure CDSQ_LARTICULOSBeforeClose(DataSet: TDataSet);
    procedure CDSQ_LARTICULOSBeforeGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_LARTICULOSBeforeOpen(DataSet: TDataSet);
    procedure CDSQ_LARTICULOSReconcileError(DataSet: TCustomClientDataSet;
      E: EReconcileError; UpdateKind: TUpdateKind;
      var Action: TReconcileAction);
    procedure CDSQ_MDTICKETAUXAfterGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_MDTICKETAUXBeforeClose(DataSet: TDataSet);
    procedure CDSQ_MDTICKETAUXBeforeGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_MDTICKETAUXBeforeOpen(DataSet: TDataSet);
    procedure CDSQ_MDTICKETAUXReconcileError(DataSet: TCustomClientDataSet;
      E: EReconcileError; UpdateKind: TUpdateKind;
      var Action: TReconcileAction);
    procedure CDSQ_LARTICULOSAfterGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_FALBARANESAfterGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_FALBARANESAfterPost(DataSet: TDataSet);
    procedure CDSQ_FALBARANESBeforeClose(DataSet: TDataSet);
    procedure CDSQ_FALBARANESBeforeDelete(DataSet: TDataSet);
    procedure CDSQ_FALBARANESBeforeGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_FALBARANESBeforeOpen(DataSet: TDataSet);
    procedure CDSQ_FALBARANESBeforePost(DataSet: TDataSet);
    procedure CDSQ_FALBARANESDeleteError(DataSet: TDataSet;
      E: EDatabaseError; var Action: TDataAction);
    procedure CDSQ_FALBARANESEditError(DataSet: TDataSet;
      E: EDatabaseError; var Action: TDataAction);
    procedure CDSQ_FALBARANESPostError(DataSet: TDataSet;
      E: EDatabaseError; var Action: TDataAction);
    procedure CDSQ_FALBARANESReconcileError(
      DataSet: TCustomClientDataSet; E: EReconcileError;
      UpdateKind: TUpdateKind; var Action: TReconcileAction);
    procedure CDSQ_FALBARANESAUXAfterGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_FALBARANESAUXBeforeClose(DataSet: TDataSet);
    procedure CDSQ_FALBARANESAUXBeforeGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_FALBARANESAUXBeforeOpen(DataSet: TDataSet);
    procedure CDSQ_FALBARANESAUXReconcileError(
      DataSet: TCustomClientDataSet; E: EReconcileError;
      UpdateKind: TUpdateKind; var Action: TReconcileAction);
    procedure CDSQ_MDLINEACOBROAUXAfterInsert(DataSet: TDataSet);
    procedure CDSQ_MDLINEACOBROAUXAfterPost(DataSet: TDataSet);
    procedure CDSQ_MDCOBROBeforeEdit(DataSet: TDataSet);
    procedure CDSQ_MDFACTURABeforeEdit(DataSet: TDataSet);
    procedure CDSQ_MDFACTURAAfterEdit(DataSet: TDataSet);
    procedure CDSQ_ARQUEODECAJAAfterGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_ARQUEODECAJAAfterInsert(DataSet: TDataSet);
    procedure CDSQ_ARQUEODECAJAAfterPost(DataSet: TDataSet);
    procedure CDSQ_ARQUEODECAJABeforeClose(DataSet: TDataSet);
    procedure CDSQ_ARQUEODECAJABeforeDelete(DataSet: TDataSet);
    procedure CDSQ_ARQUEODECAJABeforeGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_ARQUEODECAJABeforeOpen(DataSet: TDataSet);
    procedure CDSQ_ARQUEODECAJABeforePost(DataSet: TDataSet);
    procedure CDSQ_ARQUEODECAJADeleteError(DataSet: TDataSet;
      E: EDatabaseError; var Action: TDataAction);
    procedure CDSQ_ARQUEODECAJAEditError(DataSet: TDataSet;
      E: EDatabaseError; var Action: TDataAction);
    procedure CDSQ_ARQUEODECAJAPostError(DataSet: TDataSet;
      E: EDatabaseError; var Action: TDataAction);
    procedure CDSQ_ARQUEODECAJAReconcileError(
      DataSet: TCustomClientDataSet; E: EReconcileError;
      UpdateKind: TUpdateKind; var Action: TReconcileAction);
    procedure CDSQ_ARQUEODECAJABeforeInsert(DataSet: TDataSet);
    procedure CDSQ_ARQUEODECAJACalcFields(DataSet: TDataSet);
    procedure CDSQ_MDLINEAFACTURACalcFields(DataSet: TDataSet);
    procedure CDSQ_MDLINEAENTRADACalcFields(DataSet: TDataSet);
    procedure CDSQ_PRUEBAAfterGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_PRUEBABeforeGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_PROCEDUREAfterGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_TIPOSIVAAfterGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_TIPOSIVAAfterInsert(DataSet: TDataSet);
    procedure CDSQ_TIPOSIVAAfterPost(DataSet: TDataSet);
    procedure CDSQ_TIPOSIVABeforeCancel(DataSet: TDataSet);
    procedure CDSQ_TIPOSIVABeforeClose(DataSet: TDataSet);
    procedure CDSQ_TIPOSIVABeforeGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_TIPOSIVABeforeOpen(DataSet: TDataSet);
    procedure CDSQ_TIPOSIVABeforePost(DataSet: TDataSet);
    procedure CDSQ_TIPOSIVADeleteError(DataSet: TDataSet;
      E: EDatabaseError; var Action: TDataAction);
    procedure CDSQ_TIPOSIVAEditError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    procedure CDSQ_TIPOSIVAPostError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    procedure CDSQ_TIPOSIVAReconcileError(DataSet: TCustomClientDataSet;
      E: EReconcileError; UpdateKind: TUpdateKind;
      var Action: TReconcileAction);
    procedure CDSQ_ALMACENDETALLE2AfterGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_ALMACENDETALLE2AfterPost(DataSet: TDataSet);
    procedure CDSQ_ALMACENDETALLE2BeforeCancel(DataSet: TDataSet);
    procedure CDSQ_ALMACENDETALLE2BeforeClose(DataSet: TDataSet);
    procedure CDSQ_ALMACENDETALLE2BeforeGetRecords(Sender: TObject;
      var OwnerData: OleVariant);
    procedure CDSQ_ALMACENDETALLE2BeforeOpen(DataSet: TDataSet);
    procedure CDSQ_ALMACENDETALLE2BeforePost(DataSet: TDataSet);
    procedure CDSQ_ALMACENDETALLE2DeleteError(DataSet: TDataSet;
      E: EDatabaseError; var Action: TDataAction);
    procedure CDSQ_ALMACENDETALLE2EditError(DataSet: TDataSet;
      E: EDatabaseError; var Action: TDataAction);
    procedure CDSQ_ALMACENDETALLE2PostError(DataSet: TDataSet;
      E: EDatabaseError; var Action: TDataAction);
    procedure CDSQ_ALMACENDETALLE2ReconcileError(
      DataSet: TCustomClientDataSet; E: EReconcileError;
      UpdateKind: TUpdateKind; var Action: TReconcileAction);
    procedure CDSQ_ALMACENDETALLE2AfterInsert(DataSet: TDataSet);
    procedure CDSQ_MDLINEAALBARANCalcFields(DataSet: TDataSet);
    procedure CDSQ_MDLINEATICKETCalcFields(DataSet: TDataSet);
//**/

  private
    { Private declarations }
    KEYPENDIENTESAUX,KEYPENDIENTES,KEYARTICULOSREF,KEYNOSIRVEREF :olevariant;
    KEYCOLORES,KEYCOLORESAUX,KEYEAN,KEYCLIENTEAUX:OLEVARIANT;
    KEYTICKET:OLEVARIANT;
    KEYALMACENAUX:OLEVARIANT;
    TIPOSERROR,COLORESERROR,EANERROR:boolean;
    PENDIENTESERROR,PENDIENTESESCAPEENTRA:boolean;
    TICKETERROR:BOOLEAN;




    LINTICESCAPEENTRA:BOOLEAN;





    KEYPRESUPUESTOREF:OLEVARIANT;
    LINEATICKETERROR:boolean;





    procedure calcularbase;
    PROCEDURE CALCULARBASEPRESUPUESTO;
    PROCEDURE CALCULARBASEALBARAN;
    PROCEDURE CALCULARBASEFACTURA;
    PROCEDURE CALCULARbaseCOBRO;
    PROCEDURE CALCULARbaseCOBROAUX;
    PROCEDURE CALCULARBASETICKET;

    PROCEDURE INICIARRECORD(VAR AUX:TMIRECORD);
    PROCEDURE INICIARLOCALES(VAR AUX:TMIVARIABLES);
    FUNCTION OBTENEROWNERDATA(AUX:TMIRECORD):STRING;
    FUNCTION VERIFICARARTICULO:BOOLEAN;
    PROCEDURE COMPROBARFACTURADOCOBRADO;
    procedure comprobarcobrado;
    PROCEDURE COMPROBARDESFASE;
    FUNCTION ARTICULOSMODIFICADOS():BOOLEAN;
    PROCEDURE COMPROBARCANTIDAD;


  public
    { Public declarations }
//   IVA:DOUBLE;
   // CUANDO IMPRIMO EL TICKET ME SIRVE PARA
   // QUE ME DEJE EDITAR Y LO PONGA COMO IMPRESO.
   TICKETIMPRIMIR,FACTURAIMPRIMIR:BOOLEAN;
   GSERVIDOR,gaplicacion:STRING;
   DECIMALES,DECIMALESTOTAL,DECIMALESDES,DECIMALESMON,DECIMALESIMPORTEENTRADA:SMALLINT;
   RPROCEDURE,RFALBARANESAUX,RFALBARANES,RARTICULOS,RARTICULOSAUX:TMIVARIABLES;
   VPROCEDURE,VFALBARANESAUX,VFALBARANES,VARTICULOS,VARTICULOSAUX:TMIRECORD;
   RARQUEO,REMPRESAS,REMPRESASAUX:TMIVARIABLES;
   VARQUEO,VEMPRESAS,VEMPRESASAUX:TMIRECORD;
   RTICKETS,RFAMILIAS,RFAMILIASAUX:TMIVARIABLES;
   VTICKETS,VFAMILIAS,VFAMILIASAUX:TMIRECORD;
   RFORMAPAGO,RFORMAPAGOAUX,RTICKETAUX,RLARTICULOS:TMIVARIABLES;
   VFORMAPAGO,VFORMAPAGOAUX,VTICKETAUX,VLARTICULOS:TMIRECORD;
   RPRESUPUESTO,RPRESUPUESTOAUX:TMIVARIABLES;
   VPRESUPUESTO,VPRESUPUESTOAUX:TMIRECORD;
   RLINEAPRESUPUESTO,RLINEAPRESUPUESTOAUX:TMIVARIABLES;
   RTARIFAS,RTARIFASAUX:TMIVARIABLES;
   VTARIFAS,VTARIFASAUX:TMIRECORD;
   RMDTICKETAUX,RALBARANAUX,RLINEAALBARANAUX,RLINEAALBARAN,RALBARAN,RLINEAFACTURAAUX,RFACTURAAUX,RFACTURA,RLINEAFACTURA,RCLIENTE,RPROVEEDORACREEDOR,RTIPOSIVA,RALMACENDETALLE2,RPROVEEDORACAUX:TMIVARIABLES;
   VMDTICKETAUX,VALBARANAUX,VLINEAALBARANAUX,VLINEAALBARAN,VALBARAN,VLINEAFACTURAAUX,VFACTURAAUX,VFACTURA,VLINEAFACTURA,VCLIENTE,VPROVEEDORACREEDOR,VTIPOSIVA,VALMACENDETALLE2,VPROVEEDORACAUX:TMIRECORD;
   RLENTRADATOTAL,RLISTADOENTRADA,ROPCIONESNUMERICAS,RAVISOAUX,RAVISO,RENTRADA,RLINEAENTRADA,RSERIES,RSERIESAUX,RSALIDA,RLINEASALIDA,RCOBROAUX,RLINEACOBROAUX,RCOBRO,RLINEACOBRO:TMIVARIABLES;
   VLENTRADATOTAL,VLISTADOENTRADA,VOPCIONESNUMERICAS,VAVISOAUX,VAVISO,VENTRADA,VLINEAENTRADA,VSERIES,VSERIESAUX,VSALIDA,VLINEASALIDA,VCOBROAUX,VLINEACOBROAUX,VCOBRO,VLINEACOBRO:TMIRECORD;
   RALMACEN:TMIVARIABLES;
   VALMACEN:TMIRECORD;
   pcantidad,cantidad:double;








   tipoerror:boolean;
   BASE_ENTRADA:DOUBLE;
   BASE_PRESUPUESTO:DOUBLE;
   BASE_ALBARAN:DOUBLE;
   BASE_TICKET:DOUBLE;
   BASE_COBRO:DOUBLE;
   BASE_FACTURA:DOUBLE;
   borrandolineas:boolean;
   BORRANDOLINEASSAL:BOOLEAN;
   borrandolineasent:boolean;



   ESLINTICKET:BOOLEAN;





   PREGUNTAPENDIENTE:BOOLEAN;

   PREGUNTATICKET:BOOLEAN;








   LINEATICKETNOPREGUNTA:BOOLEAN;


   AREBGRID:STRING;// CDSQ_ARTICULOEAN


   PROBGRAUX:STRING;// CDSQ_PROCEDURE;



   FPBGRNIF,FPBGRBORRADO:STRING;// CDSQ_FPROVEEDORES
   FCBGRNIF,FCBGRBORRADO:STRING;// CDSQ_FCLIENTE





   TIBGRID,TIBGRTIPO,TIBGRORDEN,TIBGRORDENLINEA:STRING;// CDSQ_MDTICKET







   tibgrid_proveedor :string;// cdsq_tipos


   CLABGRNOMBRE,CLABGRBORRADO,CLABGRTIPO:STRING;// CDSQ_CLIENTEAUX
   PNBGRBUSCAR,PNbgrtipo,PNBGRORDEN:STRING;// CDSQ_PEDIDOSPENDIENTES
   PNABGRBUSCAR,PNAbgrtipo,PNABGRORDEN:STRING;// CDSQ_PEDIDOSPENDIENTESAUX
   ALmABGRID,aLmAbgrtipo,ALmABGRORDEN:STRING;// CDSQ_Alamacen


   CRBGRID:STRING;// CDSQ_COLORES;




   CRABGRID,CRABGRTIPO:STRING;// CDSQ_COLORESAUX;
   EABGRID,EAID:STRING;//CDSQ_EAN;




   ESCAPELINTIC,LINTICESCAPE:BOOLEAN;


   ESCAPEPENDIENTES,PENDIENTESESCAPE:BOOLEAN;



   path,PATHLOCAL,FICHERO:string;

   PADRE,COD_FAMILIA :STRING;
   PROFUNDIDAD:SMALLINT;
   ID_ARTICULO:STRING;
   BUSCANDOPEN:BOOLEAN;
   BUSCANDOPRE,BUSCANDOTIC:BOOLEAN;
   ID_PRESUPUESTO:INTEGER;
   TRANSACTIONACTUALIZAR:OLEVARIANT;

   function PedirConfirmacion(mensaje:string; si,no,cancelar:boolean):integer;
   function CalcularCodigo:string;
   PROCEDURE BUSCARDBGRID(DBGRID:TDBGRID;CDS:TCUSTOMCLIENTDATASET;VAR LOCALES:TMIVARIABLES;VAR GLOBALES:TMIRECORD;SORDEN:STRING;ORDEN:STRING;ORDENLINEA:STRING;NOMBRECDS:STRING;COMBINAR:STRING);
   PROCEDURE PRIVATEINSERTARARTICULOS(DBGRID1:TDBGRID;DATASET:SMALLINT;FAMILIA:STRING;BENEFICIO:DOUBLE;TRANSPORTE:DOUBLE);
   FUNCTION FACTURADO(ID_ALBARAN,ID_EMPRESA,ANYO,ID_SERIE,TIPO:STRING):BOOLEAN;
   PROCEDURE COMPROBARARQUEO;

  end;


var
  DMGS: TDMGS;


implementation

uses UError, tiposdefinidos, FConfirmar, FARTICULOS, menu, FPRESUPUESTO,
  FESPERA;


{$R *.dfm}
PROCEDURE TDMGS.COMPROBARARQUEO;
begin
 WITH DMGS.CDSQ_FLOAT DO
 BEGIN
    CLOSE;
    COMMANDTEXT := ' SELECT COUNT(*) AS TOTAL FROM ARQUEODECAJA WHERE ESTADO=1 ';
    OPEN;
 END;
 IF DMGS.CDSQ_FLOAT.FIELDS.FieldByName('TOTAL').ASINTEGER = 0 THEN
 BEGIN
    showmessage('NO SE HA REALIZADO LA APERTURA DE LA CAJA. HACER LA APERTURA ANTES DE COBRAR.');
    DMGS.CDSQ_FLOAT.Close;
    ABORT;
 END;
 DMGS.CDSQ_FLOAT.Close; 
END;


PROCEDURE TDMGS.COMPROBARDESFASE;
VAR AUX,AUXB,AUXC,AUXD,AUXE:DOUBLE;
    B:STRING;
begin
 WITH DMGS.CDSQ_FLOAT DO
 BEGIN
    CLOSE;
 // firebird
 //   COMMANDTEXT := ' SELECT TOTAL FROM PARQUEO ( '''+OBTENERFECHAAMERICANA(DMGS.CDSQ_ARQUEODECAJAAFECHA.ASSTRING)+''','''+
 //    ''+DMGS.CDSQ_ARQUEODECAJAAHORA.ASSTRING+''','+DMGS.CDSQ_ARQUEODECAJAID_EMPRESA.AsString+','''+FMENU.ID_FORMAPAGO+''' )' ;
 // db2
{     COMMANDTEXT := 'select distinct PARQUEO ( '''+OBTENERFECHAAMERICANA(DMGS.CDSQ_ARQUEODECAJAAFECHA.ASSTRING)+''','''+
     ''+DMGS.CDSQ_ARQUEODECAJAAHORA.ASSTRING+''','+DMGS.CDSQ_ARQUEODECAJAID_EMPRESA.AsString+','''+FMENU.ID_FORMAPAGO+''' ) from empresas ' ;
}     COMMANDTEXT := 'select distinct PARQUEO ( '''+OBTENERFECHAAMERICANA(DMGS.CDSQ_ARQUEODECAJAAFECHA.ASSTRING)+''','''+
     ''+DMGS.CDSQ_ARQUEODECAJAAHORA.ASSTRING+''','+DMGS.CDSQ_ARQUEODECAJAID_EMPRESA.AsString+','''+FMENU.ID_FORMAPAGO+''','''+OBTENERFECHAAMERICANA(DMGS.CDSQ_ARQUEODECAJACFECHA.ASSTRING)+''','''+
     ''+DMGS.CDSQ_ARQUEODECAJACHORA.ASSTRING+''' ) from empresas where id_empresa='+fmenu.ID_EMPRESA+'  ' ;

     B:= COMMANDTEXT;
    OPEN;
    AUX := FIELDS.Fields[0].AsFloat;
 END;
 AUXC := DMGS.CDSQ_ARQUEODECAJACTOTAL.ASFLOAT;
 AUXD := DMGS.CDSQ_ARQUEOdeCAJAATOTAL.ASFLOAT;
 AUXB := (AUXC - AUXD)-AUX;
 IF AUXB < 0 THEN AUXB := -AUXB;
  TRY
    AUXE := STRTOFLOAT(FMENU.DESFASEARQUEO );
  EXCEPT
    AUXE := 0;
  END;
 IF (AUXB > AUXE) THEN
 BEGIN
   case DMGS.PedirConfirmacion('El arqueo no es correcto.¿Desea continuar?',true,true,false) of
        mrno:Abort;
   end;
 END
 else
   showmessage('Arqueo correcto');
 DMGS.CDSQ_ARQUEODECAJACAJA.ASFLOAT:= AUX;
END;






FUNCTION TDMGS.FACTURADO(ID_ALBARAN,ID_EMPRESA,ANYO,ID_SERIE,TIPO:STRING):BOOLEAN;
BEGIN
  RESULT := FALSE;
  WITH CDSQ_MAXIMO DO
  BEGIN
    CLOSE;
    COMMANDTEXT := ' SELECT COUNT(*) AS MAXIMO FROM FACTURASALBARANES WHERE ID_ALBARAN='+ID_ALBARAN+' AND ALBID_EMPRESA= ' + ID_EMPRESA+' AND ALBANYO='+ANYO+'  AND ALBID_SERIE='''+ID_SERIE+''' AND TIPO='''+TIPO+''' ';
    OPEN;
    IF DMGS.CDSQ_MAXIMO.Fields[0].VALUE>0 THEN
       RESULT := TRUE;
    CLOSE;
  END;
END;
procedure  tdmgs.COMPROBARCOBRADO;
VAR ESTA:BOOLEAN;
aux,aux1,aux2:string;
BEGIN
  IF (DMGS.CDSQ_MDFACTURA.ACTIVE )
  AND (DMGS.CDSQ_MDFACTURA.RecordCount > 0)
  THEN
  BEGIN
   WITH DMGS.CDSQ_MAXIMO DO
   BEGIN
    CLOSE;
    COMMANDTEXT := ' SELECT COUNT(*) AS MAXIMO FROM COBRO WHERE ID='+DMGS.CDSQ_MDFACTURAID_FACTURA.ASSTRING+' AND ID_EMPRESA= ' + DMGS.CDSQ_MDFACTURAID_EMPRESA.AsString +' AND ANYO='+DMGS.CDSQ_MDFACTURAANYO.AsString+' AND TIPO=''FACTURA'' AND ID_SERIE='''+DMGS.CDSQ_MDFACTURAID_SERIE.ASSTRING+''' ';
    OPEN;
    IF DMGS.CDSQ_MAXIMO.Fields[0].VALUE>0 THEN
    begin
       CLOSE;
       AUX :=dmgs.cdsq_mdfacturadesctotal.AsString;
 //      AUX := STRINGREPLACE(AUX,',','.',[rfReplaceAll]);
          WITH DMGS.CDSQ_MDCOBRO DO
          BEGIN
           CLOSE;
           DMGS.VCOBRO.ID :=' WHERE ID_EMPRESA='+DMGS.CDSQ_MDFACTURAID_EMPRESA.ASSTRING+' AND ANYO ='+ DMGS.CDSQ_MDFACTURAANYO.ASSTRING + ' AND ID='+DMGS.CDSQ_MDFACTURAID_FACTURA.ASSTRING+' AND ID_SERIE='''+DMGS.CDSQ_MDFACTURAID_SERIE.ASSTRING+''' AND TIPO=''FACTURA'' ' ;
           DMGS.VCOBRO.TIPO :='2';
           OPEN;
           EDIT;
           RCOBRO.PREGUNTA := FALSE;
           DMGS.CDSQ_MDCOBROBASE.AsString := AUX;
           POST;
           END;


//       COMMANDTEXT := ' UPDATE COBRO SET BASE = '+ AUX +
//       ' WHERE ID='+DMGS.CDSQ_MDFACTURAID_FACTURA.ASSTRING+' AND ID_EMPRESA= ' + DMGS.CDSQ_MDFACTURAID_EMPRESA.AsString +' AND ANYO='+DMGS.CDSQ_MDFACTURAANYO.AsString+' AND TIPO=''FACTURA'' AND ID_SERIE='''+DMGS.CDSQ_MDFACTURAID_SERIE.ASSTRING+''' ';
//       EXECUTE;
    end;
    COMMANDTEXT :='';
    CLOSE;
   end;
  end;
END;
PROCEDURE  TDMGS.COMPROBARFACTURADOCOBRADO;
VAR ESTA:BOOLEAN;
    AUX:STRING;
BEGIN
  IF (DMGS.CDSQ_MDALBARAN.ACTIVE )
  AND (DMGS.CDSQ_MDALBARAN.RecordCount > 0)
  THEN
  BEGIN
   WITH DMGS.CDSQ_MAXIMO DO
   BEGIN
    CLOSE;
    COMMANDTEXT := ' SELECT COUNT(*) AS MAXIMO FROM COBRO WHERE ID='+CDSQ_MDALBARANID_ALBARAN.ASSTRING+' AND ID_EMPRESA= ' + CDSQ_MDALBARANID_EMPRESA.AsString +' AND ANYO='+DMGS.CDSQ_MDALBARANANYO.AsString+' AND TIPO=''ALBARAN'' AND ID_SERIE='''+CDSQ_MDALBARANID_SERIE.ASSTRING+''' ';
    OPEN;
    IF DMGS.CDSQ_MAXIMO.Fields[0].VALUE>0 THEN
     BEGIN
       CLOSE;
       AUX :=dmgs.cdsq_Mdalbarandesctotal.AsString ;
//       AUX := STRINGREPLACE(AUX,',','.',[rfReplaceAll]);

       WITH DMGS.CDSQ_MDCOBRO DO
       BEGIN
           CLOSE;
           VCOBRO.ID :=' WHERE ID_EMPRESA='+DMGS.CDSQ_MDALBARANID_EMPRESA.ASSTRING+' AND ANYO ='+ DMGS.CDSQ_MDALBARANANYO.ASSTRING + ' AND ID='+DMGS.CDSQ_MDALBARANID_ALBARAN.ASSTRING+' AND ID_SERIE='''+DMGS.CDSQ_MDALBARANID_SERIE.ASSTRING+'''  AND TIPO=''ALBARAN''  ' ;
           VCOBRO.TIPO :='2';
           OPEN;
           EDIT;
           CDSQ_MDCOBROBASE.AsString := AUX;
           RCOBRO.PREGUNTA := FALSE;
           POST;
 //          CLOSE;
       END;

//       COMMANDTEXT := ' UPDATE COBRO SET BASE = '+ AUX +
//       ' WHERE ID='+CDSQ_MDALBARANID_ALBARAN.ASSTRING+' AND ID_EMPRESA= ' + CDSQ_MDALBARANID_EMPRESA.AsString +' AND ANYO='+DMGS.CDSQ_MDALBARANANYO.AsString+' AND TIPO=''ALBARAN'' AND ID_SERIE='''+CDSQ_MDALBARANID_SERIE.ASSTRING+''' ';
//     EXECUTE;



     END;
    DMGS.CDSQ_MAXIMO.COMMANDTEXT := '';
    CLOSE;
   END;
  END;
END;

procedure tdmgs.pcomprobarfecha(sender:tfield;const text:string);
var aux:tdatetime;
begin
  if trim(text)='/  /' then
     (sender as tfield).Clear
  else
  BEGIN
    TRY
       AUX:= STRTODATE(TEXT);
    EXCEPT
       showmessage('LA FECHA NO ES CORRECTA');
       ABORT;
    END;
    (SENDER AS TFIELD).ASSTRING := TEXT;
  END;
end;

FUNCTION TDMGS.OBTENEROWNERDATA(AUX:TMIRECORD):STRING;
BEGIN
   RESULT :=   FMENU.ID_EMPRESA + FILTRO + FMENU.ANYO + FILTRO + AUX.ANYO1 + FILTRO +
   FMENU.TIPO + FILTRO + AUX.ID + FILTRO + AUX.TIPO + FILTRO + AUX.ORDEN + FILTRO
   + AUX.ORDENLINEA + FILTRO + AUX.BORRADO + FILTRO + AUX.ID1 + FILTRO + AUX.GRUPO + FILTRO + FMENU.ID_SERIE + FILTRO ;
END;

PROCEDURE TDMGS.INICIARRECORD(VAR AUX:TMIRECORD);
BEGIN
  AUX.TIPO :='';
  AUX.ORDEN := '';
  AUX.ORDENLINEA := '';
  AUX.BORRADO := '';
  AUX.EMPRESA := '';
  AUX.ANYO := '';
  AUX.ANYO1 := '';
  AUX.ID := '';
  AUX.ID1 := '';
  AUX.DESCONTAR := '';
  AUX.GRUPO := '';
END;
PROCEDURE TDMGS.INICIARLOCALES(VAR AUX:TMIVARIABLES);
BEGIN
  AUX.BUSCANDO := FALSE;
  AUX.ESCAPE :=TRUE;
  AUX.ESCAPEENTRA := TRUE;
  AUX.PREGUNTA := TRUE;
  AUX.PREGUNTAEDIT := TRUE;
  AUX.ENDBGRID := FALSE;
  // NO USARLO EN EL BEFOREOPEN
  AUX.KEY := 0;
  aux.beneficio := 0;
  aux.beneficioempresa := 0;
  aux.transporte := 0;
  aux.beneficio_min := false;
  AUX.ALMACEN := FALSE;
END;

PROCEDURE TDMGS.PRIVATEINSERTARARTICULOS(DBGRID1:TDBGRID;DATASET:SMALLINT;FAMILIA:STRING;BENEFICIO:DOUBLE;TRANSPORTE:DOUBLE);
 VAR Save_Cursor:TCursor;
     I,J:INTEGER;
     AUX1,AUX2:ARRAY OF TBOOKMARK;
     CDS:TCUSTOMCLIENTDATASET;
     CPCOSTE,CIVA,CPVPCAT:DOUBLE;
     CBRAZOS:SMALLINT;
     CID_ARTICULO,CCOLOR,CMARCA,CNOMBRE,CID_PROVEEDOR,CART_PROVEEDOR:STRING;
begin
   I:=0;
   FMENU.CERRARHIJA(TARTICULOS);
   IF DMGS.CDSQ_ARTICULOS.Active THEN
      DMGS.CDSQ_ARTICULOS.CLOSE;

   CASE DATASET OF
       1: I:= DBGRID1.SelectedRows.Count; // TARIFAS
       2: I:=1; // PRESUPUESTOS
    END;


   if I>0 then
   BEGIN
//    DSTARIFAS.DataSet := NIl;
   try
    ESPERA:= TESPERA.CREATE(NIL);
    Save_Cursor := Screen.Cursor;
    Screen.Cursor := crHourGlass;
    ESPERA.LONGITUD(DBGrid1.SELECTEDROWS.Count);
    ESPERA.SHOW;
    ESPERA.Repaint;
    SETLENGTH(AUX1,DBGRID1.SELECTEDROWS.COUNT);
    SETLENGTH(AUX2,DBGRID1.SELECTEDROWS.COUNT);

      WITH DMGS.CDSQ_ARTICULOS  DO
      BEGIN
          CLOSE;
          DMGS.VARTICULOS.ID := '-115487';
          DMGS.VARTICULOS.ORDEN:= ordenarticulos;//' ORDER BY ID_ARTICULO';
          dmgs.VARTICULOS.TIPO := '1';
          OPEN;
       END;
       CASE DATASET OF
          1: J:= DBGrid1.SelectedRows.Count-1;
          2: J:=0; // EN PRESUPUESTOS LO COJO DE UNO EN UNO
       END;
      for i:=0 to J do
      begin
         CASE DATASET OF
      1 :
        BEGIN
          CDSQ_TARIFAS.GotoBookmark(pointer(DBGrid1.SelectedRows.Items[i]));
          CPCOSTE := ROUNDTO(cdsq_tarifasPRECIO.AsCurrency,DMGS.DECIMALES) ;
          CID_ARTICULO:=TRIM(cdsq_tarifasID_ARTICULO.AsString);
          CBRAZOS:=dmgs.cdsq_tarifasBRAZOS.value;
          CCOLOR := dmgs.cdsq_tarifasID_COLOR.ASSTRING;
          CIVA:= dmgs.cdsq_tarifasIVA.asfloat;
          CMARCA:= dmgs.cdsq_tarifasMARCA.ASSTRING;
          CNOMBRE:=dmgs.CDSQ_TARIFASNOMBRE.ASSTRING;
          CPVPCAT := DMGS.CDSQ_TARIFASPVPCAT.AsCurrency ;
          CID_PROVEEDOR :=DMGS.CDSQ_TARIFASID_PROVEEDOR.ASSTRING ;
          CART_PROVEEDOR :=DMGS.CDSQ_TARIFASART_PROVEEDOR.ASSTRING;
        END;
      2:
       BEGIN
          CPCOSTE := ROUNDTO(cdsq_TARIFASAUXPRECIO.AsCurrency,DMGS.DECIMALES) ;
          CID_ARTICULO:=TRIM(cdsq_TARIFASAUXID_ARTICULO.AsString);
          CBRAZOS:=dmgs.cdsq_TARIFASAUXBRAZOS.value;
          CCOLOR := dmgs.cdsq_TARIFASAUXID_COLOR.ASSTRING;
          CIVA:= dmgs.cdsq_TARIFASAUXIVA.asfloat;
          CMARCA:= dmgs.cdsq_TARIFASAUXMARCA.ASSTRING;
          CNOMBRE:=dmgs.CDSQ_TARIFASAUXNOMBRE.ASSTRING;
          CPVPCAT := DMGS.CDSQ_TARIFASAUXPVPCAT.AsCurrency ;
          CID_PROVEEDOR :=DMGS.CDSQ_TARIFASAUXID_PROVEEDOR.ASSTRING ;
          CART_PROVEEDOR :=DMGS.CDSQ_TARIFASAUXART_PROVEEDOR.ASSTRING;
//          I:=1;
        END
     END;
//        IF TRIM(CDS.FIELDBYNAME('ID_ARTICULO').AsString) = '' THEN
        IF CID_ARTICULO = '' THEN
        BEGIN
               DMGS.CDSQ_ARTICULOS.Append;
               dmgs.CDSQ_ARTICULOSCOD_FAMILIA.AsString := familia;
               dmgs.cdsq_articulosmarca.AsString := CMARCA ;
               dmgs.cdsq_articulosdescripcion.AsString := CNOMBRE ;
               dmgs.cdsq_articulosdescripcionticket.AsString := CNOMBRE ;
               dmgs.cdsq_articulosdescripcionboton.AsString := CNOMBRE ;
               dmgs.cdsq_articulosobservaciones.AsString :='POR RECIBIR';
               IF CBRAZOS = 0 THEN
                  DMGS.CDSQ_ARTICULOSBRAZOS.Clear
               ELSE
                  dmgs.cdsq_articulosbrazos.AsInteger  := CBRAZOS  ;
               dmgs.cdsq_articulosid_color.AsString := CCOLOR ;
//               dmgs.cdsq_articulospvpcat.asfloat := 0;//dmgs.cdsq_tarifas.AsString ;
//               dmgs.cdsq_articulosdescuento.asfloat := dmgs.cdsq_tarifasDESCUENTO.asfloat ;
//               dmgs.cdsq_articulosbeneficio.asfloat := beneficio ;
//               dmgs.cdsq_articulosprecio_coste.asfloat := dmgs.cdsq_tarifasPRECIO.asfloat ;
               IF CIVA <>0 THEN
                  Dmgs.cdsq_articulosiva.AsFloat  := CIVA
               ELSE
                  Dmgs.cdsq_articulosiva.asfloat := STRTOFLOAT(FMENU.IVA) ;
               if CPVPCAT <> 0 then
               begin
                  dmgs.cdsq_articulospvpcat.ASFLOAT := CPVPCAT;
                  dmgs.CDSQ_ARTICULOSPRECIO_COSTE.ASFLOAT := ROUNDTO(CPVPCAT,DMGS.DECIMALES);
                  dmgs.CDSQ_ARTICULOSPRECIO_VENTA.ASFLOAT := ROUnDTO(CPVPCAT,DMGS.DECIMALES);
               end
               else
               begin
                  dmgs.cdsq_ARTICULOSbeneficio.ASFLOAT := beneficio ;
                  dmgs.cdsq_ARTICULOSprecio_coste.ASFLOAT := ROUnDTO(CPCOSTE,DMGS.DECIMALES);
                  dmgs.cdsq_ARTICULOSprecio_venta.ASFLOAT := ROUNDTO(CPCOSTE * (1+ DMGS.CDSQ_ARTICULOSIVA.ASFLOAT/100)* (1+BENEFICIO/100) * (1+TRANSPORTE/100),DMGS.DECIMALES);
               end;
//               dmgs.cdsq_articulosprecio_venta.asfloat := dmgs.cdsq_tarifasPRECIO.asfloat * (1+ DMGS.CDSQ_ARTICULOSIVA.asfloat/100)* (1+BENEFICIO/100);
               DMGS.CDSQ_ARTICULOSID_PROVEEDOR.AsString := CID_PROVEEDOR;
               DMGS.CDSQ_ARTICULOSART_PROVEEDOR.ASSTRING := CART_PROVEEDOR;
               dmgs.RARTICULOS.PREGUNTA  := false;
               dmgs.CDSQ_ARTICULOS.Post;
              CASE DATASET OF
                   1 :
                     BEGIN
                         CDSQ_TARIFAS.EDIT;
                         CDSQ_TARIFAS.FIELDBYNAME('ID_ARTICULO').AsString := dmgs.cdsq_articulosid_articulo.asstring;
                         RTARIFAS.PREGUNTA := false;
                         CDSQ_TARIFAS.Post;
                     END;
                   2:
                     BEGIN
                         CDSQ_TARIFASAUX.EDIT;
                         CDSQ_TARIFASAUX.FIELDBYNAME('ID_ARTICULO').AsString := dmgs.cdsq_articulosid_articulo.asstring;
                         CDSQ_TARIFASAUX.Post;
                         DMGS.CDSQ_TARIFASAUX.ApplyUpdates(0);
                     END;

              END;
        END
        ELSE
        BEGIN
        END;
        ESPERA.INCREMENTARBARRA(FALSE);
      end;
   finally
    ESPERA.INCREMENTARBARRA(TRUE);
    ESPERA.Free;
    ESPERA := NIL;
    IF DATASET=1 THEN
       dmgs.cdsq_articulos.Close;
    Screen.Cursor := Save_Cursor;  { Always restore to normal }
   end;
  END;
END;
PROCEDURE TDMGS.BUSCARDBGRID(DBGRID:TDBGRID;CDS:TCUSTOMCLIENTDATASET;VAR LOCALES:TMIVARIABLES;VAR GLOBALES:TMIRECORD;SORDEN:STRING;ORDEN:STRING;ORDENLINEA:STRING;NOMBRECDS:STRING;COMBINAR:STRING);
var aux,AUX1,FECHA:string;
    i,AUX2,AUX3:integer;
    AUXFECHA :TDATETIME;
begin
  i:= 0;
  aux := '';
  while i < DBGRID.FieldCount do
  begin
    AUX1:=DBGRID.Fields[i].Name;
    if (NOT DBGRID.Fields [i].ISNULL) AND
       (NOT (TRIM(DBGRID.Fields [I].AsString) = '')) AND
       (NOT (DBGRID.Fields[I].FieldKind IN  [fkCalculated,fkInternalCalc] ))
    then
        IF (CDS.FieldByName(RIGHTSTR(AUX1,LENGTH(AUX1)-LENGTH(NOMBRECDS))).DataType IN [FTDATE,ftTimeStamp]) AND
           ( POS(':',UPPERCASE(DBGRID.Fields [I].AsString)) = 0)
        THEN
         begin
            auxfecha :=CDS.FieldByName(RIGHTSTR(AUX1,LENGTH(AUX1)-LENGTH(NOMBRECDS))).AsDateTime ;
//            fecha := inttostr(yearof(auxfecha))+'/'+inttostr(monthof(auxfecha))+'/'+inttostr(dayof(auxfecha));
            fecha := inttostr(yearof(auxfecha))+'-'+inttostr(monthof(auxfecha))+'-'+inttostr(dayof(auxfecha));
            if aux <> '' then
               aux := aux + ' AND ' + AUX1  +' = '''+ fecha+''' '
            else
               aux := AUX1 +' = '''+ fecha+''' ';
         end
        else
         BEGIN
         if aux <> '' then                                                                   // LIKE
            aux := aux + ' AND ' + 'char('+RIGHTSTR(AUX1,LENGTH(AUX1)-LENGTH(NOMBRECDS))+') like (''%'+ (DBGRID AS TDBGRID).Fields[i].AsString+'%'') ' // VER 3.0 %
         else
            aux := 'char('+RIGHTSTR(AUX1,LENGTH(AUX1)-LENGTH(NOMBRECDS)) +') like (''%'+ (DBGRID AS TDBGRID).Fields[i].AsString+'%'') '; // VER 3.0 %
         END;                                                                 // LIKE
    i:= i+1;
  end;
  CDS.close;
  LOCALES.BUSCANDO :=false;
  IF (TRIM(AUX)<>'') AND
  (TRIM(COMBINAR) <> '' )
  THEN
     AUX:= ' AND ' + AUX;
  AUX := COMBINAR + ' '+AUX;
  if TRIM(aux) <> '' then
  begin
     GLOBALES.EMPRESA := FMENU.ID_EMPRESA;
     GLOBALES.ANYO := FMENU.ANYO;

     IF TRIM(SORDEN)<> '' THEN
        GLOBALES.ORDEN := SORDEN
     ELSE
        GLOBALES.ORDEN := orden;

     with CDS do
     begin
       GLOBALES.ID  :=' where '+ aux;
       GLOBALES.TIPO := '2';
       open;
     end
  end;

end;


function TDMgs.PedirConfirmacion(mensaje:string; si,no,cancelar:boolean):integer;
begin
    confirmar:=tconfirmar.create(nil);
    with confirmar do
    begin
        LMensaje.caption:=mensaje;
        bsi.visible:=si;
        bno.visible:=no;
        bcancelar.visible:=cancelar;
    end;
    result:=Confirmar.Showmodal;
    confirmar.free;
end;

PROCEDURE tdmgs.CALCULARBASE;
 VAR I:INTEGER;
     AUXBOOKMARK:TBOOKMARK;
BEGIN
   BASE_ENTRADA := 0;
   IF (CDSQ_MDLINEAENTRADA.RecordCount > 0 ) THEN
      BEGIN
        AUXBOOKMARK := CDSQ_MDLINEAENTRADA.GetBookmark ;
        CDSQ_MDLINEAENTRADA.FIRST;
         WHILE NOT CDSQ_MDLINEAENTRADA.Eof DO
         BEGIN
            BASE_ENTRADA :=  BASE_ENTRADA + CDSQ_MDLINEAENTRADAIMPORTE.asfloat;
            CDSQ_MDLINEAENTRADA.Next;
         END;
        CDSQ_MDLINEAENTRADA.GOTOBOOKMARK(AUXBOOKMARK);
        CDSQ_MDLINEAENTRADA.FreeBookmark(AUXBOOKMARK);
      END;
END;
PROCEDURE tdmgs.CALCULARBASEPRESUPUESTO;
 VAR I:INTEGER;
     AUXBOOKMARK:TBOOKMARK;
BEGIN
   BASE_PRESUPUESTO := 0;
   IF (CDSQ_MDLINPRESUPUESTO.RecordCount > 0 ) THEN
      BEGIN
        AUXBOOKMARK := CDSQ_MDLINPRESUPUESTO.GetBookmark ;
        CDSQ_MDLINPRESUPUESTO.FIRST;
         WHILE NOT CDSQ_MDLINPRESUPUESTO.Eof DO
         BEGIN
            BASE_PRESUPUESTO :=  BASE_PRESUPUESTO + CDSQ_MDLINPRESUPUESTOIMPORTE.asfloat;
            CDSQ_MDLINPRESUPUESTO.Next;
         END;
         if cdsq_mdpresupuestoiva.asfloat = 0 then
            base_presupuesto := base_presupuesto/(1+(STRTOINT(FMENU.IVA)/100)); //1.16;
         if (cdsq_mdpresupuestoiva.asSTRING <> FMENU.IVA) and
            (cdsq_mdpresupuestoiva.asfloat <> 0) then
            base_presupuesto := (base_presupuesto /(1+(STRTOINT(FMENU.IVA)/100) )) * ( 1 + cdsq_mdpresupuestoiva.asfloat/100);
        CDSQ_MDLINPRESUPUESTO.GOTOBOOKMARK(AUXBOOKMARK);
        CDSQ_MDLINPRESUPUESTO.FreeBookmark(AUXBOOKMARK);
      END;
END;
PROCEDURE tdmgs.CALCULARBASEALBARAN;
 VAR I:INTEGER;
     AUXBOOKMARK:TBOOKMARK;
BEGIN
   BASE_ALBARAN := 0;
   IF (CDSQ_MDLINEAALBARAN.RecordCount > 0 ) THEN
      BEGIN
        AUXBOOKMARK := CDSQ_MDLINEAALBARAN.GetBookmark ;
        CDSQ_MDLINEAALBARAN.FIRST;
         WHILE NOT CDSQ_MDLINEAALBARAN.Eof DO
         BEGIN
            BASE_ALBARAN :=  BASE_ALBARAN + CDSQ_MDLINEAALBARANIMPORTE.asfloat;

            CDSQ_MDLINEAALBARAN.Next;
         END;
        CDSQ_MDLINEAALBARAN.GOTOBOOKMARK(AUXBOOKMARK);
        CDSQ_MDLINEAALBARAN.FreeBookmark(AUXBOOKMARK);
      END;
END;

PROCEDURE tdmgs.CALCULARBASECOBRO;
 VAR I:INTEGER;
     AUXBOOKMARK:TBOOKMARK;
BEGIN
   BASE_COBRO := 0;
   IF (CDSQ_MDLINEACOBRO.RecordCount > 0 ) THEN
      BEGIN
        AUXBOOKMARK := CDSQ_MDLINEACOBRO.GetBookmark ;
        CDSQ_MDLINEACOBRO.FIRST;
         WHILE NOT CDSQ_MDLINEACOBRO.Eof DO
         BEGIN
            BASE_COBRO :=  BASE_COBRO + CDSQ_MDLINEACOBROCANTIDAD.asfloat;
            CDSQ_MDLINEACOBRO.Next;
         END;
        CDSQ_MDLINEACOBRO.GOTOBOOKMARK(AUXBOOKMARK);
        CDSQ_MDLINEACOBRO.FreeBookmark(AUXBOOKMARK);
      END;
END;
PROCEDURE tdmgs.CALCULARBASECOBROAUX;
 VAR I:INTEGER;
     AUXBOOKMARK:TBOOKMARK;
BEGIN
   BASE_COBRO := 0;
   IF (CDSQ_MDLINEACOBROAUX.RecordCount > 0 ) THEN
      BEGIN
        AUXBOOKMARK := CDSQ_MDLINEACOBROAUX.GetBookmark ;
        CDSQ_MDLINEACOBROAUX.FIRST;
         WHILE NOT CDSQ_MDLINEACOBROAUX.Eof DO
         BEGIN
            BASE_COBRO :=  BASE_COBRO + CDSQ_MDLINEACOBROAUXCANTIDAD.asfloat;
            CDSQ_MDLINEACOBROAUX.Next;
         END;
        CDSQ_MDLINEACOBROAUX.GOTOBOOKMARK(AUXBOOKMARK);
        CDSQ_MDLINEACOBROAUX.FreeBookmark(AUXBOOKMARK);
      END;
END;



PROCEDURE tdmgs.CALCULARBASEFACTURA;
 VAR I:INTEGER;
     AUXBOOKMARK:TBOOKMARK;
BEGIN
   BASE_FACTURA := 0;
   IF (CDSQ_MDLINEAFACTURA.RecordCount > 0 ) THEN
      BEGIN
        AUXBOOKMARK := CDSQ_MDLINEAFACTURA.GetBookmark ;
        CDSQ_MDLINEAFACTURA.FIRST;
         WHILE NOT CDSQ_MDLINEAFACTURA.Eof DO
         BEGIN
            BASE_FACTURA :=  BASE_FACTURA + CDSQ_MDLINEAFACTURAIMPORTE.asfloat;
            CDSQ_MDLINEAFACTURA.Next;
         END;
        CDSQ_MDLINEAFACTURA.GOTOBOOKMARK(AUXBOOKMARK);
        CDSQ_MDLINEAFACTURA.FreeBookmark(AUXBOOKMARK);
      END;
END;


PROCEDURE tdmgs.CALCULARBASETICKET;
 VAR I:INTEGER;
     AUXBOOKMARK:TBOOKMARK;
BEGIN
   BASE_TICKET := 0;
   IF (CDSQ_MDLINEATICKET.RecordCount > 0 ) THEN
      BEGIN
        AUXBOOKMARK := CDSQ_MDLINEATICKET.GetBookmark ;
        CDSQ_MDLINEATICKET.FIRST;
         WHILE NOT CDSQ_MDLINEATICKET.Eof DO
         BEGIN
            BASE_TICKET :=  BASE_TICKET + CDSQ_MDLINEATICKETIMPORTE.asfloat;
            CDSQ_MDLINEATICKET.Next;
         END;
        CDSQ_MDLINEATICKET.GOTOBOOKMARK(AUXBOOKMARK);
        CDSQ_MDLINEATICKET.FreeBookmark(AUXBOOKMARK);
      END;
END;


procedure TDMGS.DataModuleCreate(Sender: TObject);
// var configuracion:file of FicheroConfiguracion;
//     REGISTRO:FICHEROconfiguracion;
var configuracion:textfile;
    buffer:string;
    SERVIDOR:STRING;
begin
    TICKETIMPRIMIR := FALSE;
    FACTURAIMPRIMIR := FALSE;
    SetRoundMode(rmnearest);
    // precio puede llevar 3 decimales
    // pero importe solo lleva 2.
    DECIMALES := -3;    // TIENE QUE SER 3 PARA QUE REDONDEE 56.4548 A 56.46 €
    DECIMALESMON := DECIMALES;// + 1 ;    // PARA OPERACIONES INTERNAS COMO MUESTRO LA MONEDA
    // CON 2 DECIMALES , LO NECESITO, PARA LA BASE EN CALCFIELDS
    DECIMALESDES := -10;
    // LO HE CAMBIADO DE -5 A -10
    DECIMALESTOTAL := -2;
    DECIMALESIMPORTEENTRADA := -2 ;
    // estoy haciendo pruebas con lo de abajo 04-09-06

    FICHERO :='BORRAR.BMP';
//    IVA := 1+(STRTOINT(FMENU.IVA)/100);

    INICIARRECORD(VARTICULOS);INICIARRECORD(VARTICULOSAUX);
    INICIARRECORD(VFALBARANES);
    INICIARLOCALES(RFALBARANESAUX);INICIARLOCALES(RFALBARANES);INICIARLOCALES(RARTICULOS);INICIARLOCALES(RARTICULOSAUX);
    INICIARRECORD(VFALBARANESAUX);INICIARRECORD(VEMPRESAS);INICIARRECORD(VEMPRESASAUX);
    INICIARLOCALES(RARQUEO);INICIARLOCALES(REMPRESAS);INICIARLOCALES(REMPRESASAUX);
    INICIARRECORD(VARQUEO);INICIARRECORD(VFAMILIAS);INICIARRECORD(VFAMILIASAUX);
    INICIARLOCALES(RTICKETS);INICIARLOCALES(RFAMILIAS);INICIARLOCALES(RFAMILIASAUX);
    INICIARRECORD(VTICKETS); INICIARRECORD(VFORMAPAGO);INICIARRECORD(VFORMAPAGOAUX);
    INICIARLOCALES(RFORMAPAGO);INICIARLOCALES(RFORMAPAGOAUX);
    INICIARLOCALES(RLINEAPRESUPUESTO);INICIARLOCALES(RLINEAPRESUPUESTOAUX);
    INICIARRECORD(VPRESUPUESTO);INICIARRECORD(VPRESUPUESTOAUX);
    INICIARLOCALES(RPRESUPUESTO);INICIARLOCALES(RPRESUPUESTOAUX);
    INICIARRECORD(VTARIFAS);INICIARRECORD(VTARIFASAUX);
    INICIARLOCALES(RTARIFAS);INICIARLOCALES(RTARIFASAUX);
    INICIARLOCALES(RMDTICKETAUX);INICIARLOCALES(RLARTICULOS);INICIARLOCALES(RTICKETAUX);INICIARLOCALES(RALBARANAUX);INICIARLOCALES(RLINEAALBARAN);INICIARLOCALES(RALBARAN);INICIARLOCALES(RLINEAALBARAN);INICIARLOCALES(RFACTURAAUX);INICIARLOCALES(RLINEAFACTURAAUX);INICIARLOCALES(RLINEAFACTURA);INICIARLOCALES(RFACTURA);INICIARLOCALES(RCLIENTE);INICIARLOCALES(RPROVEEDORACREEDOR);INICIARLOCALES(RPROVEEDORACAUX);INICIARLOCALES(RTIPOSIVA);INICIARLOCALES(RTIPOSIVA);
    INICIARRECORD(VMDTICKETAUX);INICIARRECORD(VLARTICULOS);INICIARRECORD(VTICKETAUX);INICIARRECORD(VLINEAALBARANAUX);INICIARRECORD(VLINEAALBARANAUX);INICIARRECORD(VLINEAALBARAN);INICIARRECORD(VALBARAN);INICIARRECORD(VFACTURAAUX);INICIARRECORD(VLINEAFACTURAAUX);INICIARRECORD(VLINEAFACTURA);INICIARRECORD(VFACTURA);INICIARRECORD(VCLIENTE);INICIARRECORD(VPROVEEDORACREEDOR);INICIARRECORD(VTIPOSIVA);INICIARRECORD(VPROVEEDORACAUX);INICIARRECORD(VTIPOSIVA);
    INICIARLOCALES(RLENTRADATOTAL);INICIARLOCALES(RLISTADOENTRADA);INICIARLOCALES(ROPCIONESNUMERICAS);INICIARLOCALES(RSERIES);INICIARLOCALES(RLINEAENTRADA);INICIARLOCALES(RENTRADA);INICIARLOCALES(RAVISOAUX);INICIARLOCALES(RAVISO);INICIARLOCALES(RLINEASALIDA);INICIARLOCALES(RSALIDA);INICIARLOCALES(RCOBRO);INICIARLOCALES(RCOBROAUX);
    INICIARRECORD(VLENTRADATOTAL);INICIARRECORD(VLISTADOENTRADA);INICIARRECORD(VOPCIONESNUMERICAS);INICIARRECORD(VSERIES);INICIARRECORD(VLINEAENTRADA);INICIARRECORD(VENTRADA);INICIARRECORD(VAVISOAUX);INICIARRECORD(VAVISO);INICIARRECORD(VSALIDA);INICIARRECORD(VLINEASALIDA);INICIARRECORD(VLINEACOBRO);INICIARRECORD(VLINEACOBROAUX);





    PROBGRAUX:='';// CDSQ_PROCEDURE;
    AREBGRID:='';// CDSQ_ARTICULOEAN


    FPBGRNIF:='';FPBGRBORRADO:='';// CDSQ_FPROVEEDORES
    FCBGRNIF:='';FCBGRBORRADO:='';// CDSQ_FCLIENTE





    tibgrid_proveedor := '';//cdsq_tipos


    CLABGRNOMBRE:='';CLABGRBORRADO:='';CLABGRTIPO:='';// CDSQ_CLIENTEAUX

    PNBGRBUSCAR:='';PNbgrtipo:='';PNBGRORDEN:='';// CDSQ_PEDIDOSPENDIENTES
    PNABGRBUSCAR:='';PNAbgrtipo:='';PNABGRORDEN:='';// CDSQ_PEDIDOSPENDIENTESAUX        
    ALmABGRID:='';aLmAbgrtipo:='';ALmABGRORDEN:='';// CDSQ_Alamacen    

    CRBGRID:='';// CDSQ_COLORES;

    


    CRABGRID:='';CRABGRTIPO:='';// CDSQ_COLORESAUX;




//    BUSCANDOPRE:=FALSE;



    tipoerror:= false;

    PREGUNTATICKET:=TRUE;
    PREGUNTAPENDIENTE:=TRUE;

 GSERVIDOR:='';
 GAPLICACION :='GESTISHOP';
 PATH :='C:\GESTISHOP\';
 ASSIGNFILE (CONFIGURACION,'C:\cliente.txt');
 try
    Reset(CONFIGURACION); //abre un fichero existente
  except ON EXCEPTION DO
  TRY
     REWRITE(CONFIGURACION); // crea un nuevo fichero y lo abre
  EXCEPT ON EXCEPTION DO
  BEGIN
     AssignFile(CONFIGURACION, OpenDialog1.FileName);
      try
         Reset(CONFIGURACION); //abre un fichero existente
      except ON EXCEPTION DO
      TRY
         REWRITE(CONFIGURACION); // crea un nuevo fichero y lo abre
      EXCEPT ON EXCEPTION DO
         showmessage('NO SE PUEDE CREAR EL ARCHIVO DE CONFIGURACON ');
      END;
   END;
  END;
 END;
 END;
  TRY
  IF NOT EOF(CONFIGURACION) THEN
  BEGIN
     READln(CONFIGURACION,buffer);
     GSERVIDOR := buffer;
     READln(CONFIGURACION,buffer);
     GAPLICACION := buffer;
  END;
  EXCEPT ON EXCEPTION DO
//     SHOWMESSAGE('FALLO EN LA LECTURA DEL ARCHIVO DE CONFIGURACIONES, ASEGURESE QUE ESTA TRABAJANDO CON LA PLANTA CORRECTA');
  END;
  CLOSEFILE(CONFIGURACION);
  IF TRIM(GSERVIDOR) <> '' THEN
      DCOMCONNECTION1.ComputerName := '\\' + GSERVIDOR;

  PATHLOCAL := PATH; // LO UTILIZO PARA
  // LAS ACTUALIZACIONES
  IF TRIM(DCOMCONNECTION1.ComputerName) = '' THEN
        path := PATH
  ELSE
        PATH := '\\'+GSERVIDOR+'\'+GAPLICACION+'\';
  PATH := 'C:\GESTISHOP\';


  TRY
   if not dcomconnection1.connected then
     DCOMConnection1.OPEN;
  EXCEPT
     DCOMCONNECTION1.ComputerName:='';
     GSERVIDOR := '';
     DCOMCONNECTION1.Open;
   END;
end;



//***********************  PROVEEDOR_ACREEDOR  ***********************//

procedure TDMGS.CDSQ_PROVEEDOR_ACREEDORAfterGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
  var aux:integer;
begin
  aux:= RPROVEEDORACREEDOR.KEY;
  RPROVEEDORACREEDOR.KEY := aux + 1;
end;

procedure TDMGS.CDSQ_PROVEEDOR_ACREEDORAfterInsert(DataSet: TDataSet);
begin
   cdsq_proveedor_acreedorborrado.VALUE := 0;
   CDSQ_PROVEEDOR_ACREEDORMISMA_DIRECCION.VALUE := 0;
end;


procedure TDMGS.CDSQ_PROVEEDOR_ACREEDORAfterPost(DataSet: TDataSet);
begin
 RPROVEEDORACREEDOR.ERROR:= false;
 if CDSQ_PROVEEDOR_ACREEDOR.ChangeCount > 0 then
  CDSQ_PROVEEDOR_ACREEDOR.ApplyUpdates(0); // permito 0 errores
 if RPROVEEDORACREEDOR.ERROR then
 begin
     if ErrorNotFound then
     begin
       ErrorNotFound:= false;
       CDSQ_PROVEEDOR_ACREEDOR.CancelUpdates;
       CDSQ_PROVEEDOR_ACREEDOR.CLOSE;
     end
     ELSE
     begin
       if tipoerror then // cuando da el error de que no se puede
           // borrar pq hay referencias en otras tablas.
       begin
          CDSQ_PROVEEDOR_ACREEDOR.cancelupdates ;
          CDSQ_PROVEEDOR_ACREEDOR.Last;// para que se situe en el
          //registro correcto
       end
       else
       begin
         CDSQ_PROVEEDOR_ACREEDOR.edit;
        CDSQ_PROVEEDOR_ACREEDORid_proveedor.FocusControl;
       end;
      abort;
     end;
  end;
end;

procedure TDMGS.CDSQ_PROVEEDOR_ACREEDORBeforeClose(DataSet: TDataSet);
begin
   if CDSQ_PROVEEDOR_ACREEDOR.state in [dsedit,dsinsert] then
      CDSQ_PROVEEDOR_ACREEDOR.post;
   RPROVEEDORACREEDOR.KEY:=0;
   INICIARRECORD(VPROVEEDORACREEDOR);
end;

procedure TDMGS.CDSQ_PROVEEDOR_ACREEDORBeforeGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
begin
  OWNERDATA:= inttostr(RPROVEEDORACREEDOR.KEY) +FILTRO+ inttostr(CDSQ_PROVEEDOR_ACREEDOR.PacketRecords)+FILTRO;
  OWNERDATA := OWNERDATA + OBTENEROWNERDATA(VPROVEEDORACREEDOR);
end;

procedure TDMGS.CDSQ_PROVEEDOR_ACREEDORBeforeOpen(DataSet: TDataSet);
begin
 CDSQ_PROVEEDOR_ACREEDOR.FetchOnDemand := FALSE;
 CDSQ_PROVEEDOR_ACREEDOR.PacketRecords := 20;
 RPROVEEDORACREEDOR.KEY :=0; // para que no coja el primero.
end;

procedure TDMGS.CDSQ_PROVEEDOR_ACREEDORBeforePost(DataSet: TDataSet);
var x:integer;
begin
 IF RPROVEEDORACREEDOR.PREGUNTA  THEN
 BEGIN
    if CDSQ_PROVEEDOR_ACREEDOR.state=dsinsert then x:=PedirConfirmacion('¿Confirma que desea dar de alta este Proveedor?',true,true,true)
                                     else x:=PedirConfirmacion('¿Confirma que desea modificar este Proveedor?',true,true,true);
    case x of
        mrno: begin
                 CDSQ_PROVEEDOR_ACREEDOR.UndoLastChange(TRUE);
                 CDSQ_PROVEEDOR_ACREEDOR.cancel;
                 abort;
              end;
        mrcancel:BEGIN
                  CDSQ_PROVEEDOR_ACREEDORid_proveedor.FocusControl ;
                  abort;
                 END;

    end;
  END
 ELSE
    RPROVEEDORACREEDOR.KEY := TRUE;
end;

procedure TDMGS.CDSQ_PROVEEDOR_ACREEDORCalcFields(DataSet: TDataSet);
begin
  IF CDSQ_PROVEEDOR_ACREEDORBORRADO.VALUE =1 THEN CDSQ_PROVEEDOR_ACREEDORBORRADOS.value := TRUE
  ELSE CDSQ_PROVEEDOR_ACREEDORBORRADOS.value := FALSE;
end;

procedure TDMGS.CDSQ_PROVEEDOR_ACREEDORDeleteError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
  RPROVEEDORACREEDOR.ERROR :=true;
  mostrarError(e.Message,' PROVEEDOR_ACREEDOR ',7);
end;

procedure TDMGS.CDSQ_PROVEEDOR_ACREEDOREditError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
  RPROVEEDORACREEDOR.ERROR :=true;
  mostrarError(e.Message,' PROVEEDOR_ACREEDOR ',7);
end;

procedure TDMGS.CDSQ_PROVEEDOR_ACREEDORPostError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
  RPROVEEDORACREEDOR.ERROR :=true;
  mostrarError(e.Message,' PROVEEDOR_ACREEDOR ',7);
end;

procedure TDMGS.CDSQ_PROVEEDOR_ACREEDORReconcileError(
  DataSet: TCustomClientDataSet; E: EReconcileError;
  UpdateKind: TUpdateKind; var Action: TReconcileAction);
begin
  if updatekind = ukdelete then
     tipoerror := true
  else
     tipoerror := false;

  RPROVEEDORACREEDOR.ERROR :=true;
  mostrarError(e.Message,' PROVEEDOR_ACREEDOR ',7);
end;

//*********************  CDSQ_PROVEEDOR_ACREEDOR  ***********//
//*********************  CDSQ_FPROVEEDOR  ***********************//

procedure TDMGS.CDSQ_FPROVEEDORBeforeClose(DataSet: TDataSet);
begin
 FPBGRNIF:='';
 FPBGRBORRADO:='';
end;

procedure TDMGS.CDSQ_FPROVEEDORBeforeGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
begin
   IF FPBGRBORRADO ='' THEN FPBGRBORRADO :='0';
   OWNERDATA := FPBGRNIF + FILTRO + FPBGRBORRADO + FILTRO ;
end;

procedure TDMGS.CDSQ_FPROVEEDORBeforeOpen(DataSet: TDataSet);
begin
  CDSQ_FPROVEEDOR.FETCHONDEMAND:=FALSE;
  CDSQ_FPROVEEDOR.PACKETRECORDS:= 1;
end;


procedure TDMGS.CDSQ_FPROVEEDORReconcileError(
  DataSet: TCustomClientDataSet; E: EReconcileError;
  UpdateKind: TUpdateKind; var Action: TReconcileAction);
begin
  if updatekind = ukdelete then
     tipoerror := true
  else
     tipoerror := false;

  MOSTRARERROR (E.MESSAGE,' FPROVEEDOR ', -1);
end;
//*********************  CDSQ_FPROVEEDOR  ***********************//
//***************************************************************//
//*********************  CDSQ_TIPOS       ***********************//

procedure TDMGS.CDSQ_TIPOSAfterPost(DataSet: TDataSet);
begin
 tiposerror:= false;
 if cdsq_tipos.ChangeCount > 0 then
  cdSq_tipos.ApplyUpdates(0); // permito 0 errores
 if tiposerror then
 begin
     if ErrorNotFound then
     begin
       ErrorNotFound:= false;
       cdsq_tipos.CancelUpdates;
       cdsq_tipos.CLOSE;
     end
     ELSE
     begin
//      CDSQ_PROVEEDOR_ACREEDOR.edit;
//      CDSQ_PROVEEDOR_ACREEDORid_proveedor.FocusControl;
      abort;
     end;
 end;
end;

procedure TDMGS.CDSQ_TIPOSBeforeClose(DataSet: TDataSet);
begin
  tibgrid_proveedor := '';
end;

procedure TDMGS.CDSQ_TIPOSBeforeGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
begin
  ownerdata := tibgrid_proveedor + filtro;
end;

procedure TDMGS.CDSQ_TIPOSBeforeOpen(DataSet: TDataSet);
begin
 cdsq_tipos.FetchOnDemand := FALSE;
 cdsq_tipos.PacketRecords := 2;
end;

procedure TDMGS.CDSQ_TIPOSDeleteError(DataSet: TDataSet; E: EDatabaseError;
  var Action: TDataAction);
begin
 tiposerror := true;
 mostrarerror( e.message,' ERROR EN TIPO DE PROVEEDOR ',-1);
end;

procedure TDMGS.CDSQ_TIPOSEditError(DataSet: TDataSet; E: EDatabaseError;
  var Action: TDataAction);
begin
 tiposerror := true;
 mostrarerror( e.message,' ERROR EN TIPO DE PROVEEDOR ',-1);
end;

procedure TDMGS.CDSQ_TIPOSPostError(DataSet: TDataSet; E: EDatabaseError;
  var Action: TDataAction);
begin
 tiposerror := true;
 mostrarerror( e.message,' ERROR EN TIPO DE PROVEEDOR ',-1);
end;

procedure TDMGS.CDSQ_TIPOSReconcileError(DataSet: TCustomClientDataSet;
  E: EReconcileError; UpdateKind: TUpdateKind;
  var Action: TReconcileAction);
begin
  if updatekind = ukdelete then
     tipoerror := true
  else
     tipoerror := false;

 tiposerror := true;
 mostrarerror( e.message,' ERROR EN TIPO DE PROVEEDOR ',-1);
end;

procedure TDMGS.CDSQ_TIPOSAfterInsert(DataSet: TDataSet);
begin
   CDSQ_TIPOSSUBCUENTA.ASSTRING := '0';
end;
//******************  CDSQ_TIPOS   ***************************************//
//************************************************************************//
//******************  CDSQ_FAMILIAS **************************************//Ç

procedure TDMGS.CDSQ_FAMILIASAfterGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
  var aux:integer;
begin
  aux:= RFAMILIAS.KEY;
  RFAMILIAS.KEY := aux + 1;
END;
procedure TDMGS.CDSQ_FAMILIASAfterPost(DataSet: TDataSet);
begin
 RFAMILIAS.ERROR:= false;
 if CDSQ_FAMILIAS.ChangeCount > 0 then
  CDSQ_FAMILIAS.ApplyUpdates(0); // permito 0 errores
 if RFAMILIAS.ERROR then
 begin
     if ErrorNotFound then
     begin
       ErrorNotFound:= false;
       CDSQ_FAMILIAS.CancelUpdates;
       CDSQ_FAMILIAS.CLOSE;
     end
     ELSE
     begin
       if tipoerror then // cuando da el error de que no se puede
           // borrar pq hay referencias en otras tablas.
       begin
          cdsq_familias.cancelupdates ;
          cdsq_familias.Last;// para que se situe en el
          //registro correcto
       end
       else
       begin
         CDSQ_FAMILIAS.edit;
         CDSQ_FAMILIASDESCRIPCION.FocusControl;
       end;
      abort;
     end;
 end;
end;

procedure TDMGS.CDSQ_FAMILIASBeforeClose(DataSet: TDataSet);
begin
   if CDSQ_FAMILIAS.state in [dsedit,dsinsert] then
      CDSQ_FAMILIAS.post;
   INICIARLOCALES(RFAMILIAS);
   INICIARRECORD(VFAMILIAS);
end;

procedure TDMGS.CDSQ_FAMILIASBeforeDelete(DataSet: TDataSet);
begin
   case PedirConfirmacion('¿Confirma que desea borrar esta Familia?',true,true,false) of
        mrno:Abort;
   end;
end;


procedure TDMGS.CDSQ_FAMILIASBeforeGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
begin
  OWNERDATA:= inttostr(RFAMILIAS.KEY) +FILTRO+ inttostr(CDSQ_FAMILIAS.PacketRecords)+FILTRO;
  OWNERDATA := OWNERDATA + OBTENEROWNERDATA(VFAMILIAS);
//  OWNERDATA := OWNERDATA + FABGRID + FILTRO ;
end;

procedure TDMGS.CDSQ_FAMILIASBeforeOpen(DataSet: TDataSet);
begin
 CDSQ_FAMILIAS.FetchOnDemand := FALSE;
 CDSQ_FAMILIAS.PacketRecords := 20;
 RFAMILIAS.KEY :=0; // para que no coja el primero.
end;

procedure TDMGS.CDSQ_FAMILIASBeforePost(DataSet: TDataSet);
var x:integer;
begin
    IF RFAMILIAS.PREGUNTA THEN
    BEGIN
    if CDSQ_FAMILIAS.state=dsinsert then x:=PedirConfirmacion('¿Confirma que desea dar de alta esta Familia?',true,true,true)
                                     else x:=PedirConfirmacion('¿Confirma que desea modificar esta Familia?',true,true,true);
    case x of
        mrno: begin
                 CDSQ_FAMILIAS.UndoLastChange(TRUE);
                 CDSQ_FAMILIAS.cancel;
                 abort;
              end;
        mrcancel:BEGIN
                  CDSQ_FAMILIASID_FAMILIA.FocusControl ;
                  abort;
                 END;

    end;
    END
    ELSE
       RFAMILIAS.PREGUNTA := TRUE;
    IF CDSQ_FAMILIAS.STATE IN [DSINSERT] THEN
        CDSQ_FAMILIASCOD_FAMILIA.AsString := COD_FAMILIA + CDSQ_FAMILIASID_FAMILIA.ASSTRING;
end;
procedure TDMGS.CDSQ_FAMILIASDeleteError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
  RFAMILIAS.ERROR :=true;
  mostrarError(e.Message,' FAMILIAS ',1);
end;

procedure TDMGS.CDSQ_FAMILIASEditError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
  RFAMILIAS.ERROR :=true;
  mostrarError(e.Message,' FAMILIAS ',1);
end;

procedure TDMGS.CDSQ_FAMILIASPostError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
  RFAMILIAS.ERROR :=true;
  mostrarError(e.Message,' FAMILIAS ',1);
end;

procedure TDMGS.CDSQ_FAMILIASReconcileError(DataSet: TCustomClientDataSet;
  E: EReconcileError; UpdateKind: TUpdateKind;
  var Action: TReconcileAction);
begin
  if updatekind = ukdelete then
     tipoerror := true
  else
     tipoerror := false;
  RFAMILIAS.ERROR :=true;
  mostrarError(e.Message,' FAMILIAS ',1);
end;

//***************************   CDSQ_FAMILIAS   *************************//
//***********************************************************************//
//***************************   CDSQ_FAMILIASAUX  ***********************//

procedure TDMGS.CDSQ_FAMILIASAUXAfterGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
  var aux:integer;
begin
  aux:= RFAMILIASAUX.KEY;
  RFAMILIASAUX.KEY := aux + 1;
END;

procedure TDMGS.CDSQ_FAMILIASAUXBeforeClose(DataSet: TDataSet);
begin
   INICIARLOCALES(RFAMILIASAUX);
   INICIARRECORD(VFAMILIASAUX);
end;

procedure TDMGS.CDSQ_FAMILIASAUXBeforeGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
begin
  OWNERDATA:= inttostr(RFAMILIASAUX.KEY) +FILTRO+ inttostr(CDSQ_FAMILIASAUX.PacketRecords)+FILTRO;
  OWNERDATA := OWNERDATA + OBTENEROWNERDATA(VFAMILIASAUX);
//  OWNERDATA := OWNERDATA + FAABGRID + FILTRO + FAABGRPROF+ FILTRO + FAABGRTIPO + FILTRO;
end;

procedure TDMGS.CDSQ_FAMILIASAUXBeforeOpen(DataSet: TDataSet);
begin
 CDSQ_FAMILIASAUX.FetchOnDemand := FALSE;
 CDSQ_FAMILIASAUX.PacketRecords := 20;
 RFAMILIASAUX.KEY :=0; // para que no coja el primero.
end;

procedure TDMGS.CDSQ_FAMILIASAUXReconcileError(
  DataSet: TCustomClientDataSet; E: EReconcileError;
  UpdateKind: TUpdateKind; var Action: TReconcileAction);
begin
  MOSTRARERROR(E.MESSAGE,' FAMILIAS ',-1);
end;

//***************************   CDSQ_FAMILIASAUX ************************//
//***********************************************************************//

procedure TDMGS.CDSQ_FAMILIASAfterInsert(DataSet: TDataSet);
begin
   CDSQ_FAMILIASPROFUNDIDAD.AsString := '0';
   CDSQ_FAMILIASCOD_ARTICULO.ASSTRING := '0';
   CDSQ_FAMILIASBENEFICIO.asfloat := 0;
   CDSQ_FAMILIASORDENPOSICION.AsString := FMENU.FPOSICION;
   CDSQ_FAMILIASORDENPOSICIONUSO.AsString := FMENU.FPOSICIONUSO;
   CDSQ_FAMILIASORDENDESCRIPCION.AsString := FMENU.FDESCRIPCION;
   CDSQ_FAMILIASMOSTRARDESCRIPCION.AsString := FMENU.MOSTRARDESCRIPCION ;
   CDSQ_FAMILIASMOSTRARIMAGEN.AsString := FMENU.MOSTRARIMAGEN;
   CDSQ_FAMILIASFPOSICION.VALUE:= 0;
   CDSQ_FAMILIASFPOSICIONUSO.VALUE:= 0;
   CDSQ_FAMILIASAMOSTRARDESCRIPCION.AsString := '0';
   CDSQ_FAMILIASAMOSTRARIMAGEN.AsString := '0';
   CDSQ_FAMILIASAMOSTRARPOSICION.AsString := '0';
   CDSQ_FAMILIASAMOSTRARPOSICIONUSO.AsString := '0';
   CDSQ_FAMILIASAORDENPOSICIONUSO.AsString := '0';
   CDSQ_FAMILIASAORDENPOSICION.AsString := '0';
   CDSQ_FAMILIASAORDENDESCRIPCION.AsString := '1';
   cdsq_familiasposicion.Value :=0;
   cdsq_familiasposicionuso.value :=0;
   PADRE := '';
   COD_FAMILIA :='';
   PROFUNDIDAD :=0;
end;
//**********************   CDSQ_FAMILIAS   *******************************//
//************************************************************************//
//**********************   CDSQ_ARTICULOS  *******************************//


procedure TDMGS.CDSQ_ARTICULOSAfterGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
  var aux:integer;
begin
  aux:= RARTICULOS.KEY ;
  RARTICULOS.KEY  := aux + 1;
end;

procedure TDMGS.CDSQ_ARTICULOSAfterPost(DataSet: TDataSet);
var aux:string;
begin
  RARTICULOS.ESCAPE := TRUE;
  RARTICULOS.ERROR := false;
  if CDSQ_ARTICULOS.ChangeCount >0 then
    CDSQ_ARTICULOS.ApplyUpdates(0);
  if RARTICULOS.ERROR  then
  begin
     if ErrorNotFound then
     begin
       ErrorNotFound:= false;
       RARTICULOS.ESCAPE := FALSE;// ME HACE FALTA
       RARTICULOS.ESCAPECDS := FALSE;
       // AL HACER ABORT ENTRA EN EL BEFORECANCEL
       // Y NO QUIERO QUE MUESTRE LA VENTANA DE INSERTAR O ACTUALIZAR
       // CONSTANTEMENTE
       CDSQ_ARTICULOS.CancelUpdates;
       CDSQ_ARTICULOS.close;
     end
     ELSE
     begin
       if tipoerror then // cuando da el error de que no se puede
           // borrar pq hay referencias en otras tablas.
       begin
          CDSQ_ARTICULOS.cancelupdates ;
          CDSQ_ARTICULOS.Last;// para que se situe en el
          //registro correcto
       end
       else
       begin
          CDSQ_ARTICULOS.Edit;
          CDSQ_ARTICULOScod_familia.FocusControl;
       END;
       abort;
     end;
  end;
//  ARBGRIDARTICULO := id_ARTICULO ;
//  IF (CDSQ_ARTICULOSID_ARTICULO.NEWVALUE <> ID_ARTICULO )
//  THEN
//      CDSQ_ARTICULOS.REFRESH; // ME HACE FALTA PQ COJO ID_ARTICULO,COD_ARTICULO
      // DESDE EL SERVER.
end;

procedure TDMGS.CDSQ_ARTICULOSBeforeClose(DataSet: TDataSet);
begin
   if (CDSQ_ARTICULOS.state in [dsedit,dsinsert]) AND NOT RARTICULOS.BUSCANDO then
      CDSQ_ARTICULOS.post;
   INICIARLOCALES(RARTICULOS);
   INICIARRECORD(VARTICULOS)
end;

procedure TDMGS.CDSQ_ARTICULOSBeforeGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
begin
  OWNERDATA:= inttostr(RARTICULOS.KEY) +FILTRO+ inttostr(CDSQ_ARTICULOS.PacketRecords)+FILTRO;
  OWNERDATA := OWNERDATA + OBTENEROWNERDATA(VARTICULOS);
//  OWNERDATA := OWNERDATA + ARBGRIDARTICULO+ FILTRO + ARBGRORDEN + FILTRO + arbgrtipo+ filtro;
end;

procedure TDMGS.CDSQ_ARTICULOSBeforeOpen(DataSet: TDataSet);
begin
 CDSQ_ARTICULOS.FetchOnDemand := FALSE;
 CDSQ_ARTICULOS.PacketRecords := 20;
 RARTICULOS.KEY :=0; // para que no coja el primero.
end;

procedure TDMGS.CDSQ_ARTICULOSBeforePost(DataSet: TDataSet);
var x:integer;
begin
     IF RARTICULOS.ENDBGRID
//    AND (NOT RARTICULOS.BUSCANDO)
    THEN
    BEGIN
       IF (RARTICULOS.BUSCANDO) THEN
          CDSQ_ARTICULOSID_ARTICULO.FocusControl
       ELSE
          CDSQ_ARTICULOSDESCRIPCIONTICKET.FocusControl ;
       RARTICULOS.ENDBGRID := FALSE;
       ABORT;
    END;
    if RARTICULOS.PREGUNTA then
    begin
    if CDsQ_ARTICULOS.state=dsinsert then x:=PedirConfirmacion('¿Confirma que desea dar de alta este articulo?',true,true,true)
                               else x:=PedirConfirmacion('¿Confirma que desea modificar este articulo?',true,true,true);
    case x of
        mrno: begin
                 RARTICULOS.ESCAPE := FALSE;// PARA CONTROLAR EN EL UDM
                 RARTICULOS.ESCAPECDS:= FALSE;// PARA CONTROLAR EN EL FORMULARIO
                 cdsq_articulos.UndoLastChange(TRUE);
                 cdsq_articulos.cancel;
                 abort;
              end;
        mrcancel:
              BEGIN
                 if RARTICULOS.ESCAPEENTRA then
                     cdsq_articulos.edit;
                 cdsq_articuloscod_familia.FocusControl;
                 ABORT;
              END;
    end;
    end
    else
      RARTICULOS.PREGUNTA := true;
    IF (CDSQ_ARTICULOS.State in  [DSINSERT]) AND
    VERIFICARARTICULO
    THEN
       ABORT;
// ver 4.1
    IF (CDSQ_ARTICULOS.State in  [DSINSERT])
    THEN
    begin
       cdsq_maximo.CLOSE;
       cdsq_maximo.CommandText := 'SELECT MAX(contador) AS MAXIMO FROM  ARTICULOS ';
       cdsq_maximo.open;
       cdsq_articuloscontador.asinteger := cdsq_maximo.Fields[0].AsInteger + 1;
    end;

    IF (CDSQ_ARTICULOS.State = DSEDIT) AND
    ((CDSQ_ARTICULOSID_PROVEEDOR.OldValue <> CDSQ_ARTICULOSID_PROVEEDOR.AsString) OR
    (CDSQ_ARTICULOSART_PROVEEDOR.OldValue <> CDSQ_ARTICULOSART_PROVEEDOR.AsString)) AND
    VERIFICARARTICULO
    THEN
       ABORT;


    RARTICULOS.ESCAPECDS := FALSE;// ME HACE FALTA
    // AL HACER ABORT ENTRA EN EL BEFORECANCEL
    // Y NO QUIERO QUE MUESTRE LA VENTANA DE INSERTAR O ACTUALIZAR
    // CONSTANTEMENTE
    IF (TRIM(CDSQ_ARTICULOSCOD_FAMILIA.ASSTRING) = '')
    THEN
    BEGIN
      MessageDlg('DEBE INTRODUCIR EL CODIGO DE LA FAMILIA', mtWarning,[mbOK], 0);
      DMGS.CDSQ_ARTICULOSCOD_FAMILIA.FocusControl ;
      ABORT;
    END;
//  lo quito pq algunas veces al insertar un articulo da error
//  voy a probar si comprobandolo siempres, no me da error
//    IF (TRIM(CDSQ_ARTICULOSPROFUNDIDAD.AsString) = '')
//    THEN
    BEGIN
     WITH DMGS.CDSQ_FAMILIASAUX DO
     BEGIN
       CLOSE;
       DMGS.VFAMILIASAUX.ID := DMGS.CDSQ_ARTICULOSCOD_FAMILIA.ASSTRING;
       dmgs.vfamiliasaux.ORDEN := Oordenfamilias;
       vfamiliasaux.TIPO := '3';
       OPEN;
       IF recordcount = 0 THEN
       BEGIN
         DMGS.CDSQ_FAMILIASAUX.CLOSE;
         MessageDlg('LA FAMILIA INTRODUCIDA NO EXISTE', mtWarning,[mbOK], 0);
         CDSQ_ARTICULOSCOD_FAMILIA.FOCUSCONTROL;
         ABORT;
       END
       ELSE
       BEGIN
         DMGS.CDSQ_ARTICULOSPROFUNDIDAD.asfloat := DMGS.CDSQ_FAMILIASAUXPROFUNDIDAD.asfloat;
       END;
       DMGS.CDSQ_FAMILIASAUX.CLOSE;
     END;
  END;
  CALCULARCODIGO;

  if ARTICULOSMODIFICADOS then
     cdsq_articulosfmodificacion.AsDateTime := date();

// pruebas ver 3.0
  {
  dmgs.cdsq_articulosfinancieros.Value := 1;
  dmgs.cdsq_articulosalmacenable.Value := 1;
  dmgs.cdsq_articulostransportes.Value := 1;
  dmgs.cdsq_articulosotroscostes.Value := 1;
  }
end;
procedure TDMGS.CDSQ_ARTICULOSDeleteError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
  RARTICULOS.ERROR :=true;
  mostrarError(e.Message,' ARTICULOS ',2);
end;

procedure TDMGS.CDSQ_ARTICULOSEditError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
  RARTICULOS.ERROR :=true;
  mostrarError(e.Message,' ARTICULOS ',2);
end;

procedure TDMGS.CDSQ_ARTICULOSPostError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
  RARTICULOS.ERROR :=true;
  mostrarError(e.Message,' ARTICULOS ',2);
end;

procedure TDMGS.CDSQ_ARTICULOSReconcileError(DataSet: TCustomClientDataSet;
  E: EReconcileError; UpdateKind: TUpdateKind;
  var Action: TReconcileAction);
begin
  if updatekind = ukdelete then
     tipoerror := true
  else
     tipoerror := false;

  RARTICULOS.ERROR :=true;
  mostrarError(e.Message,' ARTICULOS ',2);
end;
procedure TDMGS.CDSQ_ARTICULOSBeforeCancel(DataSet: TDataSet);
begin
// EL ESCAPE CONTROLA CUANDO PULSO LA SEGUNDA VEZ ESCAPE
// ESTANDO EL DATASET EN ESTADO DE INSERCION O EDICION
// ALBARANESESCAPE LO UTILIZO A LA HORA DE HACER ABORT Y CANCEL EN UDM
// ESCAPE LO UTILIZO PARA SABER QUE HE PULSADO ESCAPE EN EL FORMULARIO
  if ((CDSQ_ARTICULOS.State in [dsedit,dsinsert]) and (RARTICULOS.ESCAPE OR RARTICULOS.ESCAPECDS)) then
  begin
      RARTICULOS.ESCAPEENTRA:= true;
      RARTICULOS.ESCAPE := true;// POR SI OCURRE UN ERROR AL HACER EL POST
      if not RARTICULOS.BUSCANDO then
      BEGIN
         CDSQ_ARTICULOS.post;
         RARTICULOS.ENDBGRID := FALSE;
      END;
  end;
  RARTICULOS.ESCAPEENTRA:= false;
  // AL HACER ABORT ENTRA EN EL BEFORECANCEL
  // Y NO QUIERO QUE MUESTRE LA VENTANA DE INSERTAR O ACTUALIZAR
  // CONSTANTEMENTE
  RARTICULOS.ESCAPE := true;
end;
procedure TDMGS.CDSQ_ARTICULOSAfterInsert(DataSet: TDataSet);
begin
  IF NOT RARTICULOS.BUSCANDO THEN
  BEGIN

   cdsq_articulosMOSTRARIMAGEN.Value :=0;
   cdsq_articulosMOSTRARDESCRIPCION.value :=0;
   cdsq_articulosPOSICION.value:= 0;
   cdsq_articulosPOSICIONUSO.value :=0;
   cdsq_articulosMOSTRARPOSICION.value:=0;
   cdsq_articulosMOSTRARPOSICIONUSO.Value:=0;
   cdsq_articulosBORRADO.Value:=0;

   cdsq_articuloscod_articulo.asfloat := 0;
   cdsq_articulosid_articulo.AsString := '0';
   CDSQ_ARTICULOSPRECIO_COSTE.asfloat :=0;
   CDSQ_ARTICULOSPRECIO_VENTA.asfloat :=0;
   CDSQ_ARTICULOSBENEFICIO.asfloat:=0;
   CDSQ_ARTICULOSIVA.ASSTRING := FMENU.IVA;
   CDSQ_ARTICULOSPVPCAT.asfloat:=0;
   CDSQ_ARTICULOSDESCUENTO.asfloat := 0;
   CDSQ_ARTICULOSPVPPROV.asfloat := 0;

   // ver 3.0

   CDSQ_ARTICULOSalmacenable.value := 1;
   CDSQ_ARTICULOStransportes.value := 0;
   CDSQ_ARTICULOSotroscostes.value := 0;
   CDSQ_ARTICULOSfinancieros.asfloat := 0;

   cdsq_FLOAT.Close;
   CDSQ_FLOAT.CommandText := ' SELECT TRANS AS VALOR FROM EMPRESAS WHERE ID_EMPRESA='+FMENU.ID_EMPRESA+' AND ANYADIR_TRANS=1';
   CDSQ_FLOAT.Open;

   // ver 3.5

   cdsq_articulospvpprov.AsFloat := 0;
   cdsq_articulospvp2.AsFloat := 0;

   // VER 3.6

   cdsq_articulosfmodificacion.AsDateTime := date();

   IF CDSQ_FLOAT.RecordCount > 0 THEN
      CDSQ_ARTICULOSTRANS.asfloat := CDSQ_FLOAT.FIELDS[0].asfloat
   ELSE
      CDSQ_ARTICULOSTRANS.asfloat := 0;
   CDSQ_FLOAT.Close;
  END;
end;

procedure TDMGS.CDSQ_ARTICULOSAfterRefresh(DataSet: TDataSet);
begin
   RARTICULOS.KEY := KEYARTICULOSREF;
end;

procedure TDMGS.CDSQ_ARTICULOSBeforeRefresh(DataSet: TDataSet);
begin
   KEYARTICULOSREF := RARTICULOS.KEY;
end;
procedure TDMGS.CDSQ_ARTICULOSAfterApplyUpdates(Sender: TObject;
  var OwnerData: OleVariant);
  VAR AUX:STRING;
begin
//  ID_ARTICULO := OWNERDATA;
end;

procedure TDMGS.CDSQ_ARTICULOSBeforeDelete(DataSet: TDataSet);
begin
{   case PedirConfirmacion('¿Confirma que desea borrar este Artículo?',true,true,false) of
        mrno:Abort;
   end;
}
end;

procedure TDMGS.ESFLOATSetText (Sender: TField;
  const Text: String);
  var aux:double;
begin
 if ((sender.GetParentComponent as tclientdataset).state in [dsedit,dsinsert] ) then
 begin
  IF TRIM(TEXT)= '' THEN
     SENDER.asfloat := 0
  ELSE
  try
    aux := strtofloat(text);
    sender.ASSTRING  := TEXT;
  except
     MessageDlg('No es un Número Válido', mtWarning,[mbOK], 0);
    abort;
  end;
 end;
end;
procedure TDMGS.ESFECHASetText (Sender: TField;
  const Text: String);
  var aux:tDATEtime;
begin
 if ((sender.GetParentComponent as tclientdataset).state in [dsedit,dsinsert] ) then
 begin
  try
    aux := strtoDATE(text);
    sender.ASSTRING  := TEXT;
  except
     MessageDlg('No es una Fecha Válida', mtWarning,[mbOK], 0);
    abort;
  end;
 end;
end;

procedure TDMGS.ESINTEGERSetText(Sender: TField;
      const Text: String);
  var aux:INTEGER;
begin
 if ((sender.GetParentComponent as tclientdataset).state in [dsedit,dsinsert] ) then
 begin
  IF TRIM(TEXT)= '' THEN
     SENDER.asfloat := 0
  ELSE
  try
    aux := STRTOINT(text);
    sender.ASSTRING  := TEXT;
  except
     MessageDlg('No es un Número Válido', mtWarning,[mbOK], 0);
    abort;
  end;
 end;
end;


function tdmgs.CalcularCodigo:string;
VAR AUX,CODFAMILIA,PROFUNDIDAD,COD_ARTICULO,BRAZOS,ID_COLOR:STRING;
    COD_ART:INTEGER;
    ESTA:BOOLEAN;
begin
  ESTA:=TRUE;
  if (CDSQ_ARTICULOS.STATE=DSINSERT) then
  begin
    WITH CDSQ_ARTICULOS  DO
    BEGIN
       CODFAMILIA := FieldByname('COD_FAMILIA').ASSTRING;
       PROFUNDIDAD := FIELDBYNAME('PROFUNDIDAD').ASSTRING;
       CDSQ_MAXIMO.CLOSE;
//        CDSQ_MAXIMO.CommandText := 'SELECT COD_ARTICULO AS MAXIMO FROM  FAMILIAS WHERE COD_FAMILIA =''' +CODFAMILIA+''' AND PROFUNDIDAD='+PROFUNDIDAD+' ';
/// MODIFICADO POR JOSE
       CDSQ_MAXIMO.CommandText := 'SELECT MAX(COD_ARTICULO) AS MAXIMO FROM  ARTICULOS WHERE COD_FAMILIA =''' +CODFAMILIA+''' AND PROFUNDIDAD='+PROFUNDIDAD+' ';
       CDSQ_MAXIMO.OPEN;
       IF CDSQ_MAXIMO.Fields[0].ISNULL THEN
           COD_ARTICULO :='0'
       ELSE
       BEGIN
           COD_ART:=CDSQ_MAXIMO.Fields[0].ASINTEGER + 1;
           COD_ARTICULO := INTTOSTR(COD_ART);
       END;
//           COD_ARTICULO := CDSQ_MAXIMO.Fields[0].ASSTRING;
       WHILE ESTA DO   // ESTA WHILE LO PONGO AL CAMBIAR LOS ARTICULOS DE FAMILIAS
       // PARA ASEGURARME DE QUE NO HAY ERRORES
       BEGIN
        BRAZOS :='';
        ID_COLOR := '';
        IF (NOT FIELDBYNAME('BRAZOS').ISNULL)  THEN
           BRAZOS := TRIM(FIELDBYNAME('BRAZOS').ASSTRING);
        IF (NOT FIELDBYNAME('ID_COLOR').ISNULL)  THEN
           ID_COLOR:= TRIM(FIELDBYNAME('ID_COLOR').ASSTRING);
        AUX := FIELDBYNAME('COD_FAMILIA').ASSTRING+'-'+FIELDBYNAME('PROFUNDIDAD').ASSTRING+'/'+COD_ARTICULO;
        IF BRAZOS <> '' THEN
           AUX := AUX + '/' + BRAZOS;
        IF ID_COLOR <> '' THEN
          IF BRAZOS <> '' THEN
            AUX := AUX + '/' + ID_COLOR
          ELSE
            AUX := AUX + '/-/' + ID_COLOR
        ELSE
          IF BRAZOS <> '' THEN
            AUX := AUX + '/-';
        CDSQ_MAXIMO.CLOSE;
        IF (ID_COLOR = '')
        THEN    // ME ASEGURO DE QUE SI HA METIDO ALGUN
       // VALOR Y LO HA BORRADO LO PONGA A NULL -> CON EL CLEAR <- PARA QUE
       // NO DE ERROR EN LA CLAVE AJENA
        FIELDBYNAME('ID_COLOR').CLEAR;

        FIELDBYNAME('COD_ARTICULO').ASSTRING := COD_ARTICULO;
        CDSQ_MAXIMO.CLOSE;
        CDSQ_MAXIMO.CommandText := 'SELECT COUNT(ID_ARTICULO) AS MAXIMO FROM  ARTICULOS WHERE ID_ARTICULO =''' +AUX+''' ';
        CDSQ_MAXIMO.OPEN;
        IF CDSQ_MAXIMO.Fields[0].ASINTEGER = 0 THEN
        BEGIN
          FIELDBYNAME('ID_ARTICULO').AsSTRING := UPPERCASE(AUX);
          ESTA:= FALSE
        END
        ELSE
        BEGIN
            COD_ART := COD_ART + 1;
            COD_ARTICULO := INTTOSTR(COD_ART);
        END;
       END;
    END;
 END;
//*************************************//

// LO QUITO PORQUE SE HA CAMBIADO EL NOMBRE DE LAS FAMILIAS
// VER 4.0
{
  if CDSQ_ARTICULOS.STATE=DSEDIT then
  begin
    WITH CDSQ_ARTICULOS  DO
    BEGIN
    IF (FieldByname('COD_FAMILIA').ASSTRING <> '') OR
    (FieldByname('PROFUNDIDAD').ASSTRING <> '') OR
    (FieldByname('BRAZOS').ASSTRING <> '') OR
    (FieldByname('ID_COLOR').ASSTRING <> '')
    THEN
    BEGIN
       CODFAMILIA := FieldByname('COD_FAMILIA').ASSTRING;
       IF CODFAMILIA = '' THEN
          CODFAMILIA := FieldByname('COD_FAMILIA').OLDVALUE;
       PROFUNDIDAD := FIELDBYNAME('PROFUNDIDAD').ASSTRING;
       IF PROFUNDIDAD = '' THEN
          PROFUNDIDAD := FIELDBYNAME('PROFUNDIDAD').OLDVALUE;

        CDSQ_MAXIMO.CLOSE;
        CDSQ_MAXIMO.CommandText := 'SELECT COD_ARTICULO AS MAXIMO FROM  FAMILIAS WHERE COD_FAMILIA =''' +CODFAMILIA+''' AND PROFUNDIDAD='+PROFUNDIDAD+' ';
        CDSQ_MAXIMO.OPEN;
        IF (FieldByname('COD_FAMILIA').OLDVALUE <> FieldByname('COD_FAMILIA').ASSTRING) OR
        (FieldByname('PROFUNDIDAD').OLDVALUE <> FieldByname('PROFUNDIDAD').ASSTRING) THEN
               COD_ARTICULO := CDSQ_MAXIMO.Fields[0].ASSTRING
        ELSE
               COD_ARTICULO := FIELDBYNAME('COD_ARTICULO').ASSTRING;

       BRAZOS :='';
       ID_COLOR := '';

       IF TRIM(FIELDBYNAME('BRAZOS').ASSTRING) <> '' THEN
          BRAZOS := TRIM(FIELDBYNAME('BRAZOS').ASSTRING);

      IF TRIM(FIELDBYNAME('ID_COLOR').ASSTRING) <> '' THEN
          ID_COLOR := TRIM(FIELDBYNAME('ID_COLOR').ASSTRING);

//       IF FIELDBYNAME('BRAZOS').OLDVALUE <> FIELDBYNAME('BRAZOS').CURVALUE THEN
//         BEGIN
//          IF (NOT FIELDBYNAME('BRAZOS').ISNULL) THEN
//             BRAZOS := FIELDBYNAME('BRAZOS').ASSTRING;
//         END
//       ELSE
//          IF (NOT FIELDBYNAME('BRAZOS').ISNULL)  THEN
//             BRAZOS := TRIM(FIELDBYNAME('BRAZOS').ASSTRING);

//       IF FIELDBYNAME('ID_COLOR').OLDVALUE <> FIELDBYNAME('ID_COLOR').curvalue THEN
//         BEGIN
//          IF (NOT FIELDBYNAME('ID_COLOR').ISNULL) THEN
//             ID_COLOR := FIELDBYNAME('ID_COLOR').ASSTRING;
//         END
//       ELSE
//          IF (NOT FIELDBYNAME('ID_COLOR').ISNULL)  THEN
//             ID_COLOR := TRIM(FIELDBYNAME('ID_COLOR').ASSTRING);
//
       AUX := CODFAMILIA+'-'+PROFUNDIDAD+'/'+COD_ARTICULO;

       IF BRAZOS <> '' THEN
          AUX := AUX + '/' + BRAZOS;
       IF ID_COLOR <> '' THEN
         IF BRAZOS <> '' THEN
           AUX := AUX + '/' + ID_COLOR
         ELSE
           AUX := AUX + '/-/' + ID_COLOR
       ELSE
         IF BRAZOS <> '' THEN
           AUX := AUX + '/-';

       CDSQ_MAXIMO.CLOSE;

//       IF (FieldByname('COD_FAMILIA').OLDVALUE <> '') OR
//          (FieldByname('PROFUNDIDAD').OLDVALUE <> '') OR
//          (FieldByname('BRAZOS').OLDVALUE <> BRAZOS) OR
//          (FieldByname('ID_COLOR').OLDVALUE <> ID_COLOR ) THEN
//       BEGIN

       IF (ID_COLOR = '')
       THEN    // ME ASEGURO DE QUE SI HA METIDO ALGUN
        // VALOR Y LO HA BORRADO LO PONGA A NULL -> CON EL CLEAR <- PARA QUE
        // NO DE ERROR EN LA CLAVE AJENA
           FIELDBYNAME('ID_COLOR').CLEAR;

        FIELDBYNAME('COD_ARTICULO').ASSTRING := COD_ARTICULO;
        FIELDBYNAME('ID_ARTICULO').AsSTRING := UPPERCASE(AUX);
//        FIELDBYNAME('COD_FAMILIA').ASSTRING := CODFAMILIA;
//        FIELDBYNAME('PROFUNDIDAD').ASSTRING := PROFUNDIDAD;
//       END;
    END
    ELSE
       BEGIN
          IF (ID_COLOR = '')
          THEN
          // ME ASEGURO DE QUE SI HA METIDO ALGUN
          // VALOR Y LO HA BORRADO LO PONGA A NULL -> CON EL CLEAR <- PARA QUE
          // NO DE ERROR EN LA CLAVE AJENA
              FIELDBYNAME('ID_COLOR').CLEAR;
       END;
  END;
 END;
 }

end;








//***************************   cdsq_articulos  ***********************//
//*********************************************************************//
//***************************   CDSQ_COLORES     ********************////


procedure TDMGS.CDSQ_COLORESAfterGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
  var aux:integer;
begin
  aux:= KEYCOLORES;
  KEYCOLORES :=  aux + 1;
END;

procedure TDMGS.CDSQ_COLORESAfterPost(DataSet: TDataSet);
begin
 COLORESerror:= false;
 if CDSQ_COLORES.ChangeCount > 0 then
  CDSQ_COLORES.ApplyUpdates(0); // permito 0 errores
 if COLORESerror then
 begin
     if ErrorNotFound then
     begin
       ErrorNotFound:= false;
       CDSQ_COLORES.CancelUpdates;
       CDSQ_COLORES.CLOSE;
     end
     ELSE
     begin
       if tipoerror then // cuando da el error de que no se puede
           // borrar pq hay referencias en otras tablas.
       begin
          CDSQ_COLORES.cancelupdates ;
          CDSQ_COLORES.Last;// para que se situe en el
          //registro correcto
       end
       else
       begin
         CDSQ_COLORES.edit;
         CDSQ_COLORESID_COLOR.FocusControl;
       end;
      abort;
     end;
 end;
end;

procedure TDMGS.CDSQ_COLORESBeforeClose(DataSet: TDataSet);
begin
   if CDSQ_COLORES.state in [dsedit,dsinsert] then
      CDSQ_COLORES.post;
   KEYCOLORES:=0;
   CRBGRID:= '';
end;

procedure TDMGS.CDSQ_COLORESBeforeDelete(DataSet: TDataSet);
begin
   case PedirConfirmacion('¿Confirma que desea borrar este Color?',true,true,false) of
        mrno:Abort;
   end;
end;

procedure TDMGS.CDSQ_COLORESBeforeGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
begin
  OWNERDATA:= inttostr(keycolores) +FILTRO+ inttostr(cdsq_colores.PacketRecords)+FILTRO;
  OWNERDATA := OWNERDATA + crBGRID + FILTRO ;
end;

procedure TDMGS.CDSQ_COLORESBeforeOpen(DataSet: TDataSet);
begin
 cdsq_colores.FetchOnDemand := FALSE;
 cdsq_colores.PacketRecords := 20;
 keycolores :=0; // para que no coja el primero.
end;

procedure TDMGS.CDSQ_COLORESBeforePost(DataSet: TDataSet);
var x:integer;
begin
    if cdsq_colores.state=dsinsert then x:=PedirConfirmacion('¿Confirma que desea dar de alta este Color?',true,true,true)
                                     else x:=PedirConfirmacion('¿Confirma que desea modificar este Color?',true,true,true);
    case x of
        mrno: begin
                 cdsq_colores.UndoLastChange(TRUE);
                 cdsq_colores.cancel;
                 abort;
              end;
        mrcancel:BEGIN
                  cdsq_coloresid_color.FocusControl ;
                  abort;
                 END;

    end;
end;

procedure TDMGS.CDSQ_COLORESDeleteError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
  coloreserror :=true;
  mostrarError(e.message,' COLORES ', 3);
end;

procedure TDMGS.CDSQ_COLORESEditError(DataSet: TDataSet; E: EDatabaseError;
  var Action: TDataAction);
begin
  coloreserror :=true;
  mostrarError(e.message,' COLORES ', 3);
end;

procedure TDMGS.CDSQ_COLORESPostError(DataSet: TDataSet; E: EDatabaseError;
  var Action: TDataAction);
begin
  coloreserror :=true;
  mostrarError(e.message,' COLORES ', 3);
end;

procedure TDMGS.CDSQ_COLORESReconcileError(DataSet: TCustomClientDataSet;
  E: EReconcileError; UpdateKind: TUpdateKind;
  var Action: TReconcileAction);
begin
  if updatekind = ukdelete then
     tipoerror := true
  else
     tipoerror := false;
  coloreserror :=true;
  mostrarError(e.message,' COLORES ', 3);
end;
//***************************   cdsq_COLORES  ***********************//
//*********************************************************************//
//***************************   CDSQ_COLORESAUX     ********************////

procedure TDMGS.CDSQ_COLORESAUXAfterGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
  var aux:integer;
begin
  aux:= KEYCOLORESAUX;
  KEYCOLORESAUX := aux + 1;
END;

procedure TDMGS.CDSQ_COLORESAUXBeforeClose(DataSet: TDataSet);
begin
   KEYCOLORESAUX:=0;
   CRABGRID:= '';
   CRABGRTIPO:='';
end;

procedure TDMGS.CDSQ_COLORESAUXBeforeGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
begin
  OWNERDATA:= inttostr(KEYCOLORESAUX) +FILTRO+ inttostr(CDSQ_COLORESAUX.PacketRecords)+FILTRO;
  OWNERDATA := OWNERDATA + CRABGRID + FILTRO + CRABGRTIPO + FILTRO;
end;

procedure TDMGS.CDSQ_COLORESAUXBeforeOpen(DataSet: TDataSet);
begin
 CDSQ_COLORESAUX.FetchOnDemand := FALSE;
 CDSQ_COLORESAUX.PacketRecords := 20;
 KEYCOLORESAUX :=0; // para que no coja el primero.
end;

procedure TDMGS.CDSQ_COLORESAUXReconcileError(
  DataSet: TCustomClientDataSet; E: EReconcileError;
  UpdateKind: TUpdateKind; var Action: TReconcileAction);
begin
  MOSTRARERROR(E.MESSAGE,' COLORES ',-1);
end;

//***************************   CDSQ_COLORESAUX     ********************////
//*********************************************************************//
//***************************   CDSQ_EAN             ******************//
procedure TDMGS.CDSQ_EANAfterGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
  var aux:integer;
begin
  aux:= KEYEAN;
  KEYEAN :=  aux + 1;
END;

procedure TDMGS.CDSQ_EANAfterPost(DataSet: TDataSet);
begin
 EANerror:= false;
 if CDSQ_EAN.ChangeCount > 0 then
  CDSQ_EAN.ApplyUpdates(0); // permito 0 errores
 if EANerror then
 begin
     if ErrorNotFound then
     begin
       ErrorNotFound:= false;
       CDSQ_EAN.CancelUpdates;
       CDSQ_EAN.CLOSE;
     end
     ELSE
     begin
       if tipoerror then // cuando da el error de que no se puede
           // borrar pq hay referencias en otras tablas.
       begin
          CDSQ_EAN.cancelupdates ;
          CDSQ_EAN.Last;// para que se situe en el
          //registro correcto
       end
       else
       begin
         CDSQ_EAN.edit;
         CDSQ_EANEAN.FocusControl;
       end;
      abort;
     end;
 end;
end;

procedure TDMGS.CDSQ_EANBeforeClose(DataSet: TDataSet);
begin
   if CDSQ_EAN.state in [dsedit,dsinsert] then
      CDSQ_EAN.post;
   KEYEAN:=0;
   EABGRID:= '';
end;

procedure TDMGS.CDSQ_EANBeforeDelete(DataSet: TDataSet);
begin
   case PedirConfirmacion('¿Confirma que desea borrar este Código Ean?',true,true,false) of
        mrno:Abort;
   end;
end;

procedure TDMGS.CDSQ_EANBeforeGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
begin
  OWNERDATA:= inttostr(keyean) +FILTRO+ inttostr(cdsq_ean.PacketRecords)+FILTRO;
  OWNERDATA := OWNERDATA + eabgrid + FILTRO  ;
end;

procedure TDMGS.CDSQ_EANBeforeOpen(DataSet: TDataSet);
begin
 cdsq_ean.FetchOnDemand := FALSE;
 cdsq_ean.PacketRecords := 20;
 keyean :=0;
end;

procedure TDMGS.CDSQ_EANBeforePost(DataSet: TDataSet);
var x:integer;
begin
    if cdsq_ean.state=dsinsert then x:=PedirConfirmacion('¿Confirma que desea dar de alta este Código?',true,true,true)
                                     else x:=PedirConfirmacion('¿Confirma que desea modificar este Código?',true,true,true);
    case x of
        mrno: begin
                 cdsq_ean.UndoLastChange(TRUE);
                 cdsq_ean.cancel;
                 abort;
              end;
        mrcancel:BEGIN
                  cdsq_eanean.FocusControl ;
                  abort;
                 END;

    end;
end;
procedure TDMGS.CDSQ_EANDeleteError(DataSet: TDataSet; E: EDatabaseError;
  var Action: TDataAction);
begin
  eanerror :=true;
  mostrarError(e.message,' EAN ', 4);
end;

procedure TDMGS.CDSQ_EANEditError(DataSet: TDataSet; E: EDatabaseError;
  var Action: TDataAction);
begin
  eanerror :=true;
  mostrarError(e.message,' EAN ', 4);
end;

procedure TDMGS.CDSQ_EANPostError(DataSet: TDataSet; E: EDatabaseError;
  var Action: TDataAction);
begin
  eanerror :=true;
  mostrarError(e.message,' EAN ', 4);
end;

procedure TDMGS.CDSQ_EANReconcileError(DataSet: TCustomClientDataSet;
  E: EReconcileError; UpdateKind: TUpdateKind;
  var Action: TReconcileAction);
begin
  if updatekind = ukdelete then
     tipoerror := true
  else
     tipoerror := false;

  eanerror :=true;
  mostrarError(e.message,' EAN ', 4);
end;
//***************************   CDSQ_EAN             ******************//
//*********************************************************************//
//***************************   CDSQ_CLIENTES            **************//

procedure TDMGS.CDSQ_CLIENTECalcFields(DataSet: TDataSet);
begin
   IF CDSQ_CLIENTEBORRADO.value =1 THEN CDSQ_CLIENTEBORRADOS.value := 'SI'
   ELSE CDSQ_CLIENTEBORRADOS.value := 'NO';
end;

procedure TDMGS.CDSQ_CLIENTEAfterGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
  var aux:integer;
begin
  aux:= RCLIENTE.KEY;
  RCLIENTE.KEY := aux + 1;
end;
procedure TDMGS.CDSQ_CLIENTEAfterInsert(DataSet: TDataSet);
begin
 if not rcliente.BUSCANDO then
 begin
   CDSQ_CLIENTEborrado.asfloat := 0;
   CDSQ_CLIENTEMISMA_DIRECCION.asfloat := 0;
   CDSQ_CLIENTENO_POR_BANCO.asfloat := 0;
   CDSQ_MAXIMO.CLOSE;
     CDSQ_MAXIMO.CommandText := 'SELECT MAX(ID_CLIENTE) AS MAXIMO FROM CLIENTES';
     CDSQ_MAXIMO.Open;
     IF CDSQ_MAXIMO.Fields[0].ISNULL THEN
        CDSQ_CLIENTEID_CLIENTE.VALUE :=0
     ELSE
     CDSQ_CLIENTEID_CLIENTE.VALUE  := DMGS.CDSQ_MAXIMO.Fields[0].VALUE +1 ;
     CDSQ_MAXIMO.CLOSE;
 end;
end;

procedure TDMGS.CDSQ_CLIENTEAfterPost(DataSet: TDataSet);
begin
 RCLIENTE.ERROR:= false;
 if CDSQ_CLIENTE.ChangeCount > 0 then
  CDSQ_CLIENTE.ApplyUpdates(0); // permito 0 errores
 if RCLIENTE.ERROR then
 begin
     if ErrorNotFound then
     begin
       ErrorNotFound:= false;
       CDSQ_CLIENTE.CancelUpdates;
       CDSQ_CLIENTE.CLOSE;
     end
     ELSE
      begin
       if tipoerror then // cuando da el error de que no se puede
           // borrar pq hay referencias en otras tablas.
       begin
          cdsq_cliente.cancelupdates ;
          cdsq_cliente.Last;// para que se situe en el
          //registro correcto
       end
       else
       begin
         CDSQ_CLIENTE.edit;
         CDSQ_CLIENTEid_CLIENTE.FocusControl;
       end;
      abort;
     end;
 end;
end;

procedure TDMGS.CDSQ_CLIENTEBeforeClose(DataSet: TDataSet);
begin
   if (CDSQ_CLIENTE.state in [dsedit,dsinsert]) and
   (not rcliente.buscando)
   then
      CDSQ_CLIENTE.post;
   RCLIENTE.KEY:=0;
   INICIARRECORD(VCLIENTE);
end;

procedure TDMGS.CDSQ_CLIENTEBeforeGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
begin
  OWNERDATA:= inttostr(RCLIENTE.KEY) +FILTRO+ inttostr(CDSQ_CLIENTE.PacketRecords)+FILTRO;
  OWNERDATA := OWNERDATA + OBTENEROWNERDATA(VCLIENTE)
end;

procedure TDMGS.CDSQ_CLIENTEBeforeOpen(DataSet: TDataSet);
begin
 CDSQ_CLIENTE.FetchOnDemand := FALSE;
 CDSQ_CLIENTE.PacketRecords := 20;
 RCLIENTE.KEY :=0; // para que no coja el primero.
end;

procedure TDMGS.CDSQ_CLIENTEBeforePost(DataSet: TDataSet);
var x:integer;
begin
 IF RCLIENTE.PREGUNTA  THEN
 BEGIN
    if CDSQ_CLIENTE.state=dsinsert then x:=PedirConfirmacion('¿Confirma que desea dar de alta este Cliente?',true,true,true)
                                     else x:=PedirConfirmacion('¿Confirma que desea modificar este Cliente?',true,true,true);
    case x of
        mrno: begin
                 cdsq_cliente.UndoLastChange(TRUE);
                 cdsq_cliente.cancel;
                 abort;
              end;
        mrcancel:BEGIN
                  cdSq_clienteid_cliente.FocusControl ;
                  abort;
                 END;

    end;
  END
 ELSE
    RCLIENTE.PREGUNTA := TRUE;
end;


procedure TDMGS.CDSQ_CLIENTEDeleteError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
  RCLIENTE.ERROR  :=true;
  mostrarError(e.Message,' CLIENTE ',6);
end;

procedure TDMGS.CDSQ_CLIENTEPostError(DataSet: TDataSet; E: EDatabaseError;
  var Action: TDataAction);
begin
  RCLIENTE.ERROR := TRUE;
  mostrarError(e.Message,' CLIENTE ',6);
end;

procedure TDMGS.CDSQ_CLIENTEEditError(DataSet: TDataSet; E: EDatabaseError;
  var Action: TDataAction);
begin
  RCLIENTE.ERROR :=true;
  mostrarError(e.Message,' CLIENTE ',6);
end;

procedure TDMGS.CDSQ_CLIENTEReconcileError(DataSet: TCustomClientDataSet;
  E: EReconcileError; UpdateKind: TUpdateKind;
  var Action: TReconcileAction);
begin
  if updatekind = ukdelete then
     tipoerror := true
  else
     tipoerror := false;

  RCLIENTE.ERROR :=true;
  mostrarError(e.Message,' CLIENTE ',6);
end;
//***************************   CDSQ_CLIENTES            **************//
//*********************************************************************//
//***************************   CDSQ_FCLIENTE            **************//

procedure TDMGS.CDSQ_FCLIENTEBeforeClose(DataSet: TDataSet);
begin
 FCBGRNIF:='';
 FCBGRBORRADO:='';
end;

procedure TDMGS.CDSQ_FCLIENTEBeforeGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
begin
   IF FCBGRBORRADO ='' THEN FCBGRBORRADO :='0';
   OWNERDATA := FCBGRNIF + FILTRO + FCBGRBORRADO + FILTRO ;
end;

procedure TDMGS.CDSQ_FCLIENTEBeforeOpen(DataSet: TDataSet);
begin
  CDSQ_FCLIENTE.FETCHONDEMAND:=FALSE;
  CDSQ_FCLIENTE.PACKETRECORDS:= 1;
end;

procedure TDMGS.CDSQ_FCLIENTEReconcileError(DataSet: TCustomClientDataSet;
  E: EReconcileError; UpdateKind: TUpdateKind;
  var Action: TReconcileAction);
begin
 MOSTRARERROR (E.MESSAGE,' FCLIENTE ', -1);
end;
//***************************   CDSQ_FCLIENTE            **************//
//*********************************************************************//
//***************************   CDSQ_CLIENTEAUX            **************//

procedure TDMGS.CDSQ_CLIENTEAUXAfterGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
  var aux:integer;
begin
  aux:= KEYCLIENTEAUX;
  KEYCLIENTEAUX := aux + 1;
END;

procedure TDMGS.CDSQ_CLIENTEAUXBeforeClose(DataSet: TDataSet);
begin
   KEYCLIENTEAUX:=0;
   CLABGRNOMBRE:='';
   CLABGRBORRADO:='';// CDSQ_CLIENTEAUX
   CLABGRTIPO:='';
end;

procedure TDMGS.CDSQ_CLIENTEAUXBeforeGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
begin
  IF TRIM(CLABGRBORRADO)='' THEN CLABGRBORRADO:='0';

  OWNERDATA:= inttostr(KEYCLIENTEAUX ) +FILTRO+ inttostr(CDSQ_CLIENTEAUX.PacketRecords)+FILTRO;
  OWNERDATA := OWNERDATA + CLABGRNOMBRE+ FILTRO + CLABGRBORRADO +FILTRO+ CLABGRTIPO + FILTRO;
end;

procedure TDMGS.CDSQ_CLIENTEAUXBeforeOpen(DataSet: TDataSet);
begin
 CDSQ_CLIENTEAUX.FetchOnDemand := FALSE;
 CDSQ_CLIENTEAUX.PacketRecords := 20;
 KEYCLIENTEAUX :=0; // para que no coja el primero.
end;

procedure TDMGS.CDSQ_CLIENTEAUXReconcileError(
  DataSet: TCustomClientDataSet; E: EReconcileError;
  UpdateKind: TUpdateKind; var Action: TReconcileAction);
begin
  MOSTRARERROR (E.MESSAGE,' CLIENTE AUX ', -1);
end;
procedure TDMGS.CDSQ_CLIENTEAUXCalcFields(DataSet: TDataSet);
begin
   IF CDSQ_CLIENTEAUXBORRADO.value =1 THEN CDSQ_CLIENTEAUXBORRADOS.value := TRUE
   ELSE CDSQ_CLIENTEAUXBORRADOS.value := FALSE;
end;

//***************************   CDSQ_CLIENTEAUX            **************//
//*********************************************************************//
//***************************   CDSQ_SERIES               **************//

procedure TDMGS.CDSQ_SERIESAfterGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
  var aux:integer;
begin
  aux:= RSERIES.KEY;
  RSERIES.KEY :=  aux + 1;
END;
procedure TDMGS.CDSQ_SERIESAfterInsert(DataSet: TDataSet);
begin
 IF NOT RSERIES.BUSCANDO THEN
 BEGIN
  CDSQ_SERIESANYO.VALUE  := strtoint(fmenu.anyo);//YEAROF(DATE);
  CDSQ_SERIESSIG_ALBARAN.VALUE := 0;
  CDSQ_SERIESSIG_FACTURA.VALUE := 0;
  CDSQ_SERIESTICKET.VALUE := 0;
  CDSQ_SERIESID_EMPRESA.ASSTRING := FMENU.ID_EMPRESA; 
 END;
end;
procedure TDMGS.CDSQ_SERIESAfterPost(DataSet: TDataSet);
begin
 RSERIES.ERROR:= false;
 if CDSQ_SERIES.ChangeCount > 0 then
  CDSQ_SERIES.ApplyUpdates(0); // permito 0 errores
 if RSERIES.ERROR then
 begin
     if ErrorNotFound then
     begin
       ErrorNotFound:= false;
       CDSQ_SERIES.CancelUpdates;
       CDSQ_SERIES.CLOSE;
     end
     ELSE
     begin
       if tipoerror then // cuando da el error de que no se puede
           // borrar pq hay referencias en otras tablas.
       begin
          CDSQ_SERIES.cancelupdates ;
          CDSQ_SERIES.Last;// para que se situe en el
          //registro correcto
       end
       else
       begin
         CDSQ_SERIES.edit;
         CDSQ_SERIESID_empresa.FocusControl;
       end;
      abort;
     end;
 end;
end;

procedure TDMGS.CDSQ_SERIESBeforeClose(DataSet: TDataSet);
begin
   if CDSQ_SERIES.state in [dsedit,dsinsert] then
      CDSQ_SERIES.post;
   RSERIES.KEY:=0;
   INICIARRECORD(VSERIES);
end;

procedure TDMGS.CDSQ_SERIESBeforeDelete(DataSet: TDataSet);
begin
   case PedirConfirmacion('¿Confirma que desea borrar esta Serie?',true,true,false) of
        mrno:Abort;
   end;
end;

procedure TDMGS.CDSQ_SERIESBeforeGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
begin
  OWNERDATA:= inttostr(RSERIES.KEY) +FILTRO+ inttostr(CDSQ_SERIES.PacketRecords)+FILTRO;
  OWNERDATA := OWNERDATA + OBTENEROWNERDATA(VSERIES)
end;

procedure TDMGS.CDSQ_SERIESBeforeOpen(DataSet: TDataSet);
begin
 cdsq_series.FetchOnDemand := FALSE;
 cdsq_series.PacketRecords := 20;
 RSERIES.KEY :=0; // para que no coja el primero.
end;

procedure TDMGS.CDSQ_SERIESBeforePost(DataSet: TDataSet);
var x:integer;
begin
    if cdsq_series.state=dsinsert then x:=PedirConfirmacion('¿Confirma que desea dar de alta esta Serie?',true,true,true)
                                     else x:=PedirConfirmacion('¿Confirma que desea modificar esta Serie?',true,true,true);
    case x of
        mrno: begin
                 cdsq_series.UndoLastChange(TRUE);
                 cdsq_series.cancel;
                 abort;
              end;
        mrcancel:BEGIN
                  cdsq_seriesid_empresa.FocusControl ;
                  abort;
                 END;

    end;
end;

procedure TDMGS.CDSQ_SERIESDeleteError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
  RSERIES.ERROR :=true;
  mostrarError(e.message,' SERIES ', 5);
end;

procedure TDMGS.CDSQ_SERIESEditError(DataSet: TDataSet; E: EDatabaseError;
  var Action: TDataAction);
begin
  RSERIES.ERROR :=true;
  mostrarError(e.message,' SERIES ', 5);
end;

procedure TDMGS.CDSQ_SERIESPostError(DataSet: TDataSet; E: EDatabaseError;
  var Action: TDataAction);
begin
  RSERIES.ERROR :=true;
  mostrarError(e.message,' SERIES ', 5);
end;

procedure TDMGS.CDSQ_SERIESReconcileError(DataSet: TCustomClientDataSet;
  E: EReconcileError; UpdateKind: TUpdateKind;
  var Action: TReconcileAction);
begin
  if updatekind = ukdelete then
     tipoerror := true
  else
     tipoerror := false;
  RSERIES.ERROR :=true;
  mostrarError(e.message,' SERIES ', 5);
end;

//***************************   CDSQ_SERIES               **************//
//*********************************************************************//
//***************************   CDSQ_EMPRESA               **************//

procedure TDMGS.CDSQ_EMPRESAAfterGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
  var aux:integer;
begin
  aux:= REMPRESAS.KEY;
  REMPRESAS.KEY := aux + 1;
end;

procedure TDMGS.CDSQ_EMPRESAAfterPost(DataSet: TDataSet);
begin
 REMPRESAS.ERROR := false;
 if CDSQ_EMPRESA.ChangeCount > 0 then
  CDSQ_EMPRESA.ApplyUpdates(0); // permito 0 errores
 if REMPRESAS.ERROR then
 begin
     if ErrorNotFound then
     begin
       ErrorNotFound:= false;
       CDSQ_EMPRESA.CancelUpdates;
       CDSQ_EMPRESA.CLOSE;
     end
     ELSE
     begin
       if tipoerror then // cuando da el error de que no se puede
           // borrar pq hay referencias en otras tablas.
       begin
          CDSQ_EMPRESA.cancelupdates ;
          CDSQ_EMPRESA.Last;// para que se situe en el
          //registro correcto
       end
       else
       begin
          CDSQ_EMPRESA.edit;
          CDSQ_EMPRESAid_EMPRESA.FocusControl;
       END;
      abort;
     end;
 end;
 IF TRIM(FMENU.ID_EMPRESA) = TRIM(CDSQ_EMPRESAID_EMPRESA.AsString) THEN
 BEGIN
    FMENU.ASIGNARVARIABLES;
    FMENU.Caption := ' GESTISHOP - '+ fmenu.NOMBREEMPRESA + ' - ' + fmenu.ID_SERIE ;
 END;
end;

procedure TDMGS.CDSQ_EMPRESABeforeClose(DataSet: TDataSet);
begin
   if CDSQ_EMPRESA.state in [dsedit,dsinsert] then
      CDSQ_EMPRESA.post;
   INICIARLOCALES(REMPRESAS);
   INICIARRECORD(VEMPRESAS);
end;

procedure TDMGS.CDSQ_EMPRESABeforeGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
begin
  OWNERDATA:= inttostr(REMPRESAS.KEY ) +FILTRO+ inttostr(CDSQ_EMPRESA.PacketRecords)+FILTRO;
  OWNERDATA := OWNERDATA + OBTENEROWNERDATA(VEMPRESAS);
//  OWNERDATA := OWNERDATA + EMBGRID + FILTRO + FMENU.TIPO + FILTRO;
end;

procedure TDMGS.CDSQ_EMPRESABeforeOpen(DataSet: TDataSet);
begin
 CDSQ_EMPRESA.FetchOnDemand := FALSE;
 CDSQ_EMPRESA.PacketRecords := 20;
 REMPRESAS.KEY :=0; // para que no coja el primero.
end;

procedure TDMGS.CDSQ_EMPRESABeforePost(DataSet: TDataSet);
var x:integer;
begin
    if CDSQ_EMPRESA.state=dsinsert then x:=PedirConfirmacion('¿Confirma que desea dar de alta esta EMPRESA?',true,true,true)
                                     else x:=PedirConfirmacion('¿Confirma que desea modificar esta EMPRESA?',true,true,true);
    case x of
        mrno: begin
                 cdsq_EMPRESA.UndoLastChange(TRUE);
                 cdsq_EMPRESA.cancel;
                 abort;
              end;
        mrcancel:BEGIN
                  cdSq_EMPRESAid_EMPRESA.FocusControl ;
                  abort;
                 END;
    end;
end;

procedure TDMGS.CDSQ_EMPRESADeleteError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
  REMPRESAS.ERROR :=true;
  mostrarError(e.Message,' EMPRESA ',8);
end;

procedure TDMGS.CDSQ_EMPRESAEditError(DataSet: TDataSet; E: EDatabaseError;
  var Action: TDataAction);
begin
  REMPRESAS.ERROR :=true;
  mostrarError(e.Message,' EMPRESA ',8);
end;

procedure TDMGS.CDSQ_EMPRESAPostError(DataSet: TDataSet; E: EDatabaseError;
  var Action: TDataAction);
begin
  REMPRESAS.ERROR :=true;
  mostrarError(e.Message,' EMPRESA ',8);
end;

procedure TDMGS.CDSQ_EMPRESAReconcileError(DataSet: TCustomClientDataSet;
  E: EReconcileError; UpdateKind: TUpdateKind;
  var Action: TReconcileAction);
begin
  if updatekind = ukdelete then
     tipoerror := true
  else
     tipoerror := false;
  REMPRESAS.ERROR :=true;
  mostrarError(e.Message,' EMPRESA ',8);
end;
procedure TDMGS.CDSQ_EMPRESABeforeDelete(DataSet: TDataSet);
begin
   case PedirConfirmacion('¿Confirma que desea borrar esta Empresa?',true,true,false) of
        mrno:Abort;
   end;
end;
procedure TDMGS.CDSQ_EMPRESAAfterInsert(DataSet: TDataSet);
begin
  CDSQ_EMPRESAMISMA_DIRECCION.VALUE := 0;
  cdsq_empresanodescontar.VALUE := 0;
  CDSQ_EMPRESAV_PRECIO_MAX_COSTE.asfloat := 0;
  CDSQ_EMPRESAV_LINEAS_FACT.asfloat := 0;
  CDSQ_EMPRESADESGLOSAR_IVA.asfloat := 0;
  CDSQ_EMPRESAanyadir_trans.asfloat := 0;
  CDSQ_EMPRESABENEFICIO_MIN.asfloat := 1;
  CDSQ_EMPRESAMOSTRARDESCRIPCION.value := 1;
  CDSQ_EMPRESAFPOSICION.Value := 1;
  CDSQ_EMPRESABENEFICIO_MIN.asfloat := 1;
 // cdsq_empresaid_cobro.asfloat := 0;
  cdsq_empresapresupuestovalido.VALUE := 30;
  CDSQ_EMPRESATIPO.ASSTRING := FMENU.TIPO;
  CDSQ_EMPRESAPREVIOS.AsString := '0';
//  cdsq_empresaid_salida.asfloat := 0;
//  cdsq_empresaid_entrada.asfloat:=0;
//  cdsq_empresaid_presupuesto.asfloat := 0;
//  cdsq_empresaid_aviso.asfloat := 0;
  CDSQ_EMPRESADAR_AVISO.VALUE := 0;
  cdsq_empresatrans.asfloat := 0;
  cdsq_empresaticket.AsInteger := 1;
  cdsq_empresaNODESCONTAR.value :=0;
  cdsq_empresaMOSTRARIMAGEN.value:=0;
  cdsq_empresaMOSTRARDESCRIPCION.Value :=0;
  cdsq_empresaFPOSICION.value:=0;
  cdsq_empresaFPOSICIONUSO.value:=0;
  cdsq_empresaFDESCRIPCION.value :=0;
  CDSQ_EMPRESAIMPRIMIRTICKET.VALUE := 0;

  CDSQ_MAXIMO.CLOSE;
  CDSQ_MAXIMO.CommandText := 'SELECT MAX(ID_EMPRESA) AS MAXIMO FROM EMPRESAS WHERE TIPO='+FMENU.TIPO;
  CDSQ_MAXIMO.Open;
  IF CDSQ_MAXIMO.Fields[0].ISNULL THEN
     CDSQ_EMPRESAID_EMPRESA.VALUE :=0
  ELSE
  CDSQ_EMPRESAID_EMPRESA.VALUE := DMGS.CDSQ_MAXIMO.Fields[0].VALUE +1 ;
  CDSQ_MAXIMO.CLOSE;

end;

//***************************   CDSQ_EMPRESA               **************//
//*********************************************************************//
//***************************   CDSQ_EMPRESAaux               **************//


procedure TDMGS.CDSQ_EMPRESAAUXAfterGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
  var aux:integer;
begin
  aux:= REMPRESASAUX.KEY;
  REMPRESASAUX.KEY := aux + 1;
END;

procedure TDMGS.CDSQ_EMPRESAAUXBeforeClose(DataSet: TDataSet);
begin
   INICIARLOCALES(REMPRESASAUX);
   INICIARRECORD(VEMPRESASAUX);
end;

procedure TDMGS.CDSQ_EMPRESAAUXBeforeGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
begin
  OWNERDATA:= inttostr(REMPRESASAUX.KEY ) +FILTRO+ inttostr(CDSQ_EMPRESAAUX.PacketRecords)+FILTRO;
  OWNERDATA := OWNERDATA + OBTENEROWNERDATA(VEMPRESASAUX);
//  OWNERDATA := OWNERDATA + EMABGRID + FILTRO + EMABGRTIPO + FILTRO + FMENU.TIPO + FILTRO;
end;

procedure TDMGS.CDSQ_EMPRESAAUXBeforeOpen(DataSet: TDataSet);
begin
 CDSQ_EMPRESAAUX.FetchOnDemand := FALSE;
 CDSQ_EMPRESAAUX.PacketRecords := 20;
 REMPRESASAUX.KEY :=0; // para que no coja el primero.
end;

procedure TDMGS.CDSQ_EMPRESAAUXReconcileError(
  DataSet: TCustomClientDataSet; E: EReconcileError;
  UpdateKind: TUpdateKind; var Action: TReconcileAction);
begin
 MOSTRARERROR (E.MESSAGE,' EMPRESA AUX ', -1);
end;

//***************************   CDSQ_EMPRESAaux               **************//
//*********************************************************************//
//***************************   CDSQ_SERIESaux               **************//

procedure TDMGS.CDSQ_SERIESAUXAfterGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
  var aux:integer;
begin
  aux:= RSERIESAUX.KEY;
  RSERIESAUX.KEY := aux + 1;
END;

procedure TDMGS.CDSQ_SERIESAUXBeforeClose(DataSet: TDataSet);
begin
   RSERIESAUX.KEY :=0;
   INICIARRECORD(VSERIESAUX);
end;

procedure TDMGS.CDSQ_SERIESAUXBeforeGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
begin
  OWNERDATA:= inttostr(RSERIESAUX.KEY) +FILTRO+ inttostr(CDSQ_SERIESAUX.PacketRecords)+FILTRO;
  OWNERDATA := OWNERDATA + OBTENEROWNERDATA(VSERIESAUX)
end;

procedure TDMGS.CDSQ_SERIESAUXBeforeOpen(DataSet: TDataSet);
begin
 CDSQ_SERIESAUX.FetchOnDemand := FALSE;
 CDSQ_SERIESAUX.PacketRecords := 20;
 RSERIESAUX.KEY :=0; // para que no coja el
end;

procedure TDMGS.CDSQ_SERIESAUXReconcileError(DataSet: TCustomClientDataSet;
  E: EReconcileError; UpdateKind: TUpdateKind;
  var Action: TReconcileAction);
begin
   MOSTRARERROR (E.Message,' SERIES AUX ',-1);
end;

//***************************   CDSQ_SERIESaux           **************//
//*********************************************************************//
//***************************   CDSQ_MDPRESUPUESTO       **************//

procedure TDMGS.CDSQ_MDPRESUPUESTOAfterGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
  VAR AUX:INTEGER;
begin
  AUX := RPRESUPUESTO.KEY ;
  RPRESUPUESTO.KEY := AUX + 1;
end;

procedure TDMGS.CDSQ_MDPRESUPUESTOAfterInsert(DataSet: TDataSet);
VAR AUX:INTEGER;
begin
  IF NOT   RPRESUPUESTO.BUSCANDO THEN
  BEGIN
      CDSQ_MDPRESUPUESTOFECHA.AsDateTime :=  DATE;
      CDSQ_MDPRESUPUESTOANYO.VALUE := strtoint(fmenu.anyo);//YEAROF(DATE);
      CDSQ_MDPRESUPUESTOID_EMPRESA.AsString := FMENU.ID_EMPRESA;
      CDSQ_MDPRESUPUESTOVALIDEZ.AsDateTime := DATE + FMENU.VALIDEZ;
      CDSQ_MDPRESUPUESTOID_CLIENTE.AsString := FMENU.CLXDEFECTO;
      CDSQ_MDPRESUPUESTOIVA.ASSTRING := FMENU.IVA;
      cdsq_mdpresupuestodescuento.asstring := '0';
      CDSQ_MDPRESUPUESTORE.asfloat := 0;
      CDSQ_MDPRESUPUESTOBASE_PRESUPUESTO.asfloat := 0;
      CDSQ_MDPRESUPUESTOBASE_PRESUPUESTOSINIVA.asfloat := 0;
  CDSQ_MAXIMO.CLOSE;
  CDSQ_MAXIMO.COMMANDTEXT := 'SELECT ID_PRESUPUESTO as MAXIMO FROM OPCIONESNUMERICAS WHERE ID_EMPRESA='+FMENU.ID_EMPRESA+' AND ANYO='+FMENU.ANYO ;
  CDSQ_MAXIMO.Open;
  IF CDSQ_MAXIMO.Fields[0].ISNULL THEN
     CDSQ_MDPRESUPUESTOID_PRESUPUESTO.VALUE :=0
  ELSE
  CDSQ_MDPRESUPUESTOID_PRESUPUESTO.asfloat := CDSQ_MAXIMO.Fields[0].asfloat + 1;
  CDSQ_MAXIMO.CLOSE;
END;
end;

procedure TDMGS.CDSQ_MDPRESUPUESTOAfterPost(DataSet: TDataSet);
begin
 RPRESUPUESTO.ERROR:= false;
 if CDSQ_MDPRESUPUESTO.ChangeCount > 0 then
    CDSQ_MDPRESUPUESTO.ApplyUpdates(0); // permito 0 errores
 if RPRESUPUESTO.ERROR then
 begin
     if ErrorNotFound then
     begin
       ErrorNotFound:= false;
       CDSQ_MDPRESUPUESTO.CancelUpdates;
       CDSQ_MDPRESUPUESTO.CLOSE;
     end
     ELSE
     begin
       if tipoerror then // cuando da el error de que no se puede
           // borrar pq hay referencias en otras tablas.
       begin
          CDSQ_MDPRESUPUESTO.cancelupdates ;
          CDSQ_MDPRESUPUESTO.Last;// para que se situe en el
          //registro correcto
       end
       else
       begin
          CDSQ_MDPRESUPUESTO.edit;
          CDSQ_MDPRESUPUESTOid_PRESUPUESTO.FocusControl;
       END;
      abort;
     end;
 end;
{  IF ID_PRESUPUESTO = -1 THEN
     PRBGRID := CDSQ_MDPRESUPUESTOID_PRESUPUESTO.AsString
  ELSE
     PRBGRID := INTTOSTR(ID_PRESUPUESTO);
  PRBGRTIPO := '1';
  CDSQ_MDPRESUPUESTO.Refresh ;
}
//  PRBGRTIPO := '1';
//  PRBGRID := INTTOSTR(ID_PRESUPUESTO);
//  IF ID_PRESUPUESTO <> -1 THEN
//    CDSQ_MDPRESUPUESTO.REFRESH; // PQ TIENE QUE COGER EL ID_PRESUPUESTO
    // DEL SERVIDOR.

end;

procedure TDMGS.CDSQ_MDPRESUPUESTOBeforeClose(DataSet: TDataSet);
begin
   if (CDSQ_MDPRESUPUESTO.state in [dsedit,dsinsert]) AND(NOT   DMGS.RPRESUPUESTO.BUSCANDO) then
      CDSQ_MDPRESUPUESTO.post;
   INICIARLOCALES(RPRESUPUESTO);
   INICIARRECORD(VPRESUPUESTO);
end;

procedure TDMGS.CDSQ_MDPRESUPUESTOBeforeDelete(DataSet: TDataSet);
begin
{    case PedirConfirmacion('¿Confirma que desea borrar este Presupuesto?',true,true,false) of
           mrno: begin
           // hace falta pq borra las lineas de un presupuesto antes que el presupuesto, en pantalla
           // si le dicen que no quieren borrar el presupuesto las lineas tienen que volver a mostrarse
                   if BorrandoLineas then
                   begin
                     CDsq_MDLINPRESUPUESTO.CancelUpdates;
                     borrandolineas := false;
                   end;
                   Abort;
                 end;
    end;
}
end;

procedure TDMGS.CDSQ_MDPRESUPUESTOBeforeGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
begin
  OWNERDATA:= inttostr(RPRESUPUESTO.KEY) +FILTRO+ inttostr(cdsq_mdpresupuesto.PacketRecords)+FILTRO;
  OWNERDATA := OWNERDATA + OBTENEROWNERDATA(VPRESUPUESTO);
  //   PRBGRID + FILTRO + PRBGRTIPO + FILTRO  + fmenu.ID_EMPRESA + filtro+ PRBGRORDEN + FILTRO+ PRBGRORDENLINEA + FILTRO;//+ PRBGRORDEN+FILTRO;
end;

procedure TDMGS.CDSQ_MDPRESUPUESTOBeforeOpen(DataSet: TDataSet);
begin
 CDSQ_MDPRESUPUESTO.FetchOnDemand := FALSE;
 CDSQ_MDPRESUPUESTO.PacketRecords := 15;
 RPRESUPUESTO.KEY:=0;
end;

procedure TDMGS.CDSQ_MDPRESUPUESTOBeforePost(DataSet: TDataSet);
  var x:integer;
begin
     if   DMGS.RPRESUPUESTO.BUSCANDO then abort;
     if RPRESUPUESTO.PREGUNTA then
      begin
       if CDSQ_MDPRESUPUESTO.state=dsinsert then x:=PedirConfirmacion('¿Confirma que desea dar de alta este Presupuesto?',true,true,true)
                              else x:=PedirConfirmacion('¿Confirma que desea modificar este Presupuesto?',true,true,true);
         case x of
              mrno: begin
                  CDSQ_MDPRESUPUESTO.UndoLastChange(true);
                  CDSQ_MDPRESUPUESTO.cancel;
                  abort;
                  end;
              mrcancel:begin
                  CDSQ_MDPRESUPUESTOid_presupuesto.FocusControl;
                  abort;
                  end;
        end;
      end
      else
          RPRESUPUESTO.PREGUNTA := true;

      IF CDSQ_MDPRESUPUESTO.STATE = DSINSERT THEN
      BEGIN
         CDSQ_MAXIMO.CLOSE;
         CDSQ_MAXIMO.COMMANDTEXT := 'SELECT ID_PRESUPUESTO as MAXIMO FROM OPCIONESNUMERICAS WHERE ID_EMPRESA='+FMENU.ID_EMPRESA+' AND ANYO='+FMENU.ANYO ;
         CDSQ_MAXIMO.Open;
         IF CDSQ_MAXIMO.Fields[0].ISNULL THEN
             CDSQ_MDPRESUPUESTOID_PRESUPUESTO.VALUE :=0
         ELSE
             CDSQ_MDPRESUPUESTOID_PRESUPUESTO.VALUE := CDSQ_MAXIMO.Fields[0].VALUE + 1;
         CDSQ_MAXIMO.CLOSE;
      END;

     if trim(cdsq_mdPRESUPUESTOid_CLIENTE.AsString) ='' then
     BEGIN
        SHOWMESSAGE('EL IDENTIFICADOR DE CLIENTE DEBE DE TENER UN VALOR');
        ABORT;
     END;
     if ( cdsq_mdpresupuestoanyo.VALUE < yearof(cdSq_mdpresupuestofecha.AsDateTime ))
     then
     BEGIN
        SHOWMESSAGE('LA FECHA ES MAYOR QUE EL AÑO.');
        CDSQ_MDPRESUPUESTOANYO.FocusControl;
        ABORT;
     END;
end;

procedure TDMGS.CDSQ_MDPRESUPUESTODeleteError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
  var aux:integer;
begin
RPRESUPUESTO.ERROR:=true;
if RPRESUPUESTO.ESLINEA  then
 begin
   aux := 10; // la relacion master-detail se comporta como una tabla, como tal
   // no va a entrar en los errores de lineas de presupuesto, lo que hago es controlar de donde
   // viene el error, para darlo con mas detalle, y el numero 12 corresponde a los
   // errores de linpresupuesto
   RLINEAPRESUPUESTO.ERROR  := true;
   RPRESUPUESTO.ESLINEA:= false;
 end
else
 aux := 9;// corresponde a pedidos
mostrarerror(e.message,' PRESUPUESTO ',aux);
end;

procedure TDMGS.CDSQ_MDPRESUPUESTOEditError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
  var aux:integer;
begin
RPRESUPUESTO.ERROR:=true;
if RPRESUPUESTO.ESLINEA then
 begin
   aux := 10; // la relacion master-detail se comporta como una tabla, como tal
   // no va a entrar en los errores de lineas de presupuesto, lo que hago es controlar de donde
   // viene el error, para darlo con mas detalle, y el numero 12 corresponde a los
   // errores de linpresupuesto
   RLINEAPRESUPUESTO.ERROR := true;
   RPRESUPUESTO.ESLINEA:= false;
 end
else
 aux := 9;// corresponde a pedidos
mostrarerror(e.message,' PRESUPUESTO ',aux);
end;

procedure TDMGS.CDSQ_MDPRESUPUESTOPostError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
  var aux:integer;
begin
RPRESUPUESTO.ERROR:=true;
if RPRESUPUESTO.ESLINEA then
 begin
   aux := 10; // la relacion master-detail se comporta como una tabla, como tal
   // no va a entrar en los errores de lineas de presupuesto, lo que hago es controlar de donde
   // viene el error, para darlo con mas detalle, y el numero 12 corresponde a los
   // errores de linpresupuesto
   RLINEAPRESUPUESTO.ERROR  := true;
   RPRESUPUESTO.ESLINEA:= false;
 end
else
 aux := 9;// corresponde a pedidos
mostrarerror(e.message,' PRESUPUESTO ',aux);
end;

procedure TDMGS.CDSQ_MDPRESUPUESTOReconcileError(
  DataSet: TCustomClientDataSet; E: EReconcileError;
  UpdateKind: TUpdateKind; var Action: TReconcileAction);
  var aux:integer;
begin
  if updatekind = ukdelete then
     tipoerror := true
  else
     tipoerror := false;
RPRESUPUESTO.ERROR:=true;
if RPRESUPUESTO.ESLINEA then
 begin
   aux := 10; // la relacion master-detail se comporta como una tabla, como tal
   // no va a entrar en los errores de lineas de presupuesto, lo que hago es controlar de donde
   // viene el error, para darlo con mas detalle, y el numero 12 corresponde a los
   // errores de linpresupuesto
   RLINEAPRESUPUESTO.ERROR  := true;
   RPRESUPUESTO.ESLINEA:= false;
 end
else
 aux := 9;// corresponde a pedidos
mostrarerror(e.message,' PRESUPUESTO ',aux);
end;
procedure TDMGS.CDSQ_MDPRESUPUESTOCalcFields(DataSet: TDataSet);
var pvpsiniva,re,total,descuento,prueba,iva,pvpsicd:double;
    fbase:double;
begin
 //  fbase := roundto(cdsq_mdpresupuestobase_presupuesto.asfloat,decimalesMON);
//   CDSQ_MDPRESUPUESTODESCTOTAL.asfloat := roundto((fBASE) - (fBASE *CDSQ_MDPRESUPUESTODESCUENTO.asfloat/100),DECIMALES);
   descuento := roundto(cdsq_mdpresupuestodescuento.asfloat/100,DECIMALESDES);
   // para no meter el iva hay que poner una opcion que diga
   // quitar el iva, y seguir dividendo entre 1.16
   iva := roundto(cdsq_mdpresupuestoiva.asfloat/100,DECIMALES);
   pvpsiniva:= roundto(CDSQ_MDPRESUPUESTOBASE_PRESUPUESTO.ASFLOAT/(1+IVA),DECIMALESDES);
   pvpsicd := pvpsiniva * (1-descuento);
   re := roundto(pvpsicd*cdsq_mdpresupuestore.asfloat/100,DECIMALESDES);
   cdsq_mdpresupuestototalre.asfloat := roundto(re,decimalesDES);
   total :=roundto(pvpsicd-RE,DECIMALESDES);
   CDSQ_MDPRESUPUESTOTOTALDESCUENTO.asfloat := roundto(PVPSINIVA*DESCUENTO*(1+IVA),DECIMALES);
   CDSQ_MDPRESUPUESTOBPSINIVA.asfloat := pvpsiniva;
   IF IVA<>0 THEN
        CDSQ_MDPRESUPUESTOTOTALIVA.asfloat := ROUNDTO(PVPSICD *IVA ,DECIMALESDES);

   cdsq_mdpresupuestodesctotal.asfloat := roundto(total + CDSQ_MDPRESUPUESTOTOTALIVA.ASFLOAT,DECIMALESTOTAL);
//   CDSQ_MDPRESUPUESTOBASE_PRESUPUESTOSINIVA.ASFLOAT:= PVPSINIVA;

end;

procedure TDMGS.CDSQ_MDPRESUPUESTOAfterApplyUpdates(Sender: TObject;
  var OwnerData: OleVariant);
begin

end;

//***************************   CDSQ_MDPRESUPUESTO       **************//
//*********************************************************************//
//***************************   CDSQ_LINPRESUPUESTO       **************//
procedure TDMGS.CDsq_MDLINPRESUPUESTOAfterPost(DataSet: TDataSet);
VAR AUXBOOKMARK:TBOOKMARK;
begin
  RLINEAPRESUPUESTO.ESCAPE:= TRUE;
  RLINEAPRESUPUESTO.ERROR:= FALSE;
  AUXBOOKMARK:= CDSQ_MDLINPRESUPUESTO.GetBookmark;
  if(CDSQ_MDLINPRESUPUESTO.ChangeCount >0 ) then
     CDSQ_MDLINPRESUPUESTO.ApplyUpdates(0);
  if RLINEAPRESUPUESTO.ERROR then
  // si el error se ha producido en la linea de PRESUPUESTO, deshago los cambios
  // que he introducido
    if ErrorNotFound then
     begin
       ErrorNotFound:= false;
       RLINEAPRESUPUESTO.ESCAPE := FALSE;// ME HACE FALTA
       RLINEAPRESUPUESTO.ESCAPECDS := FALSE;
       CDSQ_MDLINPRESUPUESTO.CancelUpdates;
       CDSQ_MDLINPRESUPUESTO.close;
       CDSQ_MDPRESUPUESTO.Close;
     end
  ELSE
  begin
       if tipoerror then // cuando da el error de que no se puede
           // borrar pq hay referencias en otras tablas.
       begin
          CDSQ_MDLINPRESUPUESTO.cancelupdates ;
          CDSQ_MDLINPRESUPUESTO.Last;// para que se situe en el
          //registro correcto
       end
       else
       begin
          CDSQ_MDLINPRESUPUESTO.UndoLastChange (true);
          CDSQ_MDLINPRESUPUESTOid_ARTICULO.FocusControl;
      end;
     abort;
  end;
  CDsq_MDLINPRESUPUESTO.DisableControls ;
  calcularbasePRESUPUESTO;
  CDSQ_MDLINPRESUPUESTO.EnableControls;
  cdsq_mdPRESUPUESTO.Edit;
  cdsq_mdPRESUPUESTObase_PRESUPUESTO.asfloat := base_PRESUPUESTO;
  RPRESUPUESTO.PREGUNTA := false;
  CDSQ_mDPRESUPUESTO.post;
  IF CDSQ_MDLINPRESUPUESTO.RecordCount > 1 THEN
     cdsq_mdlinPRESUPUESTO.GotoBookmark(auxbookmark);
  cdsq_mdlinPRESUPUESTO.FreeBookmark(auxbookmark);
//  PRBGRID := CDSQ_MDPRESUPUESTOID_PRESUPUESTO.AsString;
//  PRBGRTIPO := '1';
//  if (cdsq_mdpresupuesto.ChangeCount =0)
//  then
//      CDSQ_MDPRESUPUESTO.Refresh ;// PARA QUE SUME LA BASE_PRESUPUESTO
  // DE MDPRESUPUESTO.


end;

procedure TDMGS.CDsq_MDLINPRESUPUESTOBeforeDelete(DataSet: TDataSet);
begin
// Esto es para cuando borre un pedido, que borre todas las lineas.
   if RLINEAPRESUPUESTO.PREGUNTA then
   begin
     case PedirConfirmacion('¿Confirma que desea borrar esta Linea del Presupuesto?',true,true,false) of
          mrno:Abort;
     end;
   end
   else
      RLINEAPRESUPUESTO.PREGUNTA := TRUE;
end;

procedure TDMGS.CDsq_MDLINPRESUPUESTOBeforeOpen(DataSet: TDataSet);
begin
//  linpresupuestonopregunta:=false;
  BorrandoLineas := false;
end;

procedure TDMGS.CDsq_MDLINPRESUPUESTOBeforePost(DataSet: TDataSet);
var X:INTEGER;
    DESCUENTO,CANTIDAD : DOUBLE;
begin
    if RLINEAPRESUPUESTO.PREGUNTA then // lo utilizo para modificar las lineas de
     // pedidos dentro de albaranes
    begin
      if CDSQ_mdlinpresupuesto.state=dsinsert
      then x:=PedirConfirmacion('¿Confirma que desea dar de alta esta Linea de Presupuesto?',true,true,true)
      else x:=PedirConfirmacion('¿Confirma que desea modificar esta Linea de Presupuesto?',true,true,true);
           case x of
             mrno: begin
                    RLINEAPRESUPUESTO.ESCAPE := FALSE;// PARA CONTROLAR EN EL UDM
                    RLINEAPRESUPUESTO.ESCAPECDS:= FALSE;// PARA CONTROLAR EN EL FORMULARIO
                    CDSQ_mdlinpresupuesto.undolastchange (true);
                    CDSQ_mdlinpresupuesto.cancel;
                    cdsq_mdpresupuesto.cancel;
                    abort;
                   end;
            mrcancel:begin
                      if RLINEAPRESUPUESTO.ESCAPEENTRA then
                        CDSQ_MDLINPRESUPUESTO.edit;
                      cdsq_mdlinpresupuestoid_articulo.FocusControl ;
                      abort;
                     end;
           end;
    end
    else
      RLINEAPRESUPUESTO.PREGUNTA := TRUE;
     RPRESUPUESTO.ESLINEA:= true;//trata la relacion maestro detalle como una tabla,
     //cuando da error, no da error en cdsmdlinpedidos, sino que lo da en
     //cdsmdpresupuesto, con lo  que tengo que saber que la llamada se ha hecho de
     // linpresupuesto para poder sacar un error detallado.
    RLINEAPRESUPUESTO.ESCAPE := FALSE;// ME HACE FALTA
    // AL HACER ABORT ENTRA EN EL BEFORECANCEL
    // Y NO QUIERO QUE MUESTRE LA VENTANA DE INSERTAR O ACTUALIZAR
    // CONSTANTEMENTE
    IF (CDSQ_MDLINPRESUPUESTO.State = DSINSERT)
    OR ((CDSQ_MDLINPRESUPUESTO.State = DSEDIT) AND
    (CDSQ_MDLINPRESUPUESTOID_ARTICULO.NewValue <> CDSQ_MDLINPRESUPUESTOID_ARTICULO.OldValue)) THEN
    BEGIN
    if  (not cdsq_mdlinpresupuestoid_articulo.IsNull) then
    begin
     CDSQ_MAXIMO.CLOSE;
     CDSQ_MAXIMO.CommandText := ' SELECT COUNT(*) AS MAXIMO FROM LINEAS_PRESUPUESTO WHERE ID_PRESUPUESTO='+DMGS.CDSQ_MDLINPRESUPUESTOID_PRESUPUESTO.ASSTRING+' AND ID_EMPRESA='+DMGS.CDSQ_MDLINPRESUPUESTOID_EMPRESA.ASSTRING+' AND ID_ARTICULO='''+ DMGS.CDSQ_MDLINPRESUPUESTOID_ARTICULO.ASSTRING + ''' AND ANYO='+ DMGS.CDSQ_MDLINPRESUPUESTOANYO.ASSTRING;
     CDSQ_MAXIMO.OPEN;
     IF NOT CDSQ_MAXIMO.Fields[0].ISNULL THEN
     IF CDSQ_MAXIMO.Fields[0].VALUE > 0 THEN
     BEGIN
        x:=PedirConfirmacion('El artículo '+ dmgs.cdsq_mdlinpresupuestoid_articulo.asstring+ ' está en mas de una línea.¿ Desea continuar?',true,true,false);
         case x of
              mrno: begin
                  if RLINEAPRESUPUESTO.ESCAPEENTRA then
                        CDSQ_MDLINPRESUPUESTO.edit;
                  CDSQ_MDlinPRESUPUESTOid_articulo.FocusControl;
                  abort;
                  end;
        end;
     END;
     CDSQ_MAXIMO.CLOSE;
    end;
    END;

    if trim(cdsq_mdlinpresupuestoid_articulo.AsString) ='' then
        cdsq_mdlinpresupuestoid_articulo.Clear;
    if trim(cdsq_mdlinpresupuestoART_PROVEEDOR.AsString) ='' then
        cdsq_mdlinpresupuestoART_PROVEEDOR.Clear;
    if trim(cdsq_mdlinpresupuestoID_PROVEEDOR.AsString) ='' then
        cdsq_mdlinpresupuestoID_PROVEEDOR.Clear;

    DESCUENTO := ROUNDTO(DMGS.CDSQ_MDLINPRESUPUESTODESCUENTO.asfloat/100,DMGS.DECIMALES);
    CANTIDAD := ROUNDTO(DMGS.CDSQ_MDLINPRESUPUESTOCANTIDAD.asfloat,-2);
    DMGS.CDSQ_MDLINPRESUPUESTOIMPORTE.asfloat := ROUNDTO(CANTIDAD * DMGS.CDSQ_MDLINPRESUPUESTOPRECIO.AsCurrency* (1 - DESCUENTO),DECIMALES)  ;

end;

procedure TDMGS.CDsq_MDLINPRESUPUESTODeleteError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
 RLINEAPRESUPUESTO.ERROR := true;
 mostrarerror(e.message,' linea de presupuesto ',10);
end;

procedure TDMGS.CDsq_MDLINPRESUPUESTOEditError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
 RLINEAPRESUPUESTO.ERROR := true;
 mostrarerror(e.message,' linea de presupuesto ',10);
end;

procedure TDMGS.CDsq_MDLINPRESUPUESTOPostError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
 RLINEAPRESUPUESTO.ERROR := true;
 mostrarerror(e.message,' linea de presupuesto ',10);
end;

procedure TDMGS.CDsq_MDLINPRESUPUESTOReconcileError(
  DataSet: TCustomClientDataSet; E: EReconcileError;
  UpdateKind: TUpdateKind; var Action: TReconcileAction);
begin
  if updatekind = ukdelete then
     tipoerror := true
  else
     tipoerror := false;
 RLINEAPRESUPUESTO.ERROR := true;
 mostrarerror(e.message,' linea de presupuesto ',10);
end;
procedure TDMGS.CDsq_MDLINPRESUPUESTOBeforeCancel(DataSet: TDataSet);
begin
// EL ESCAPE CONTROLA CUANDO PULSO LA SEGUNDA VEZ ESCAPE
// ESTANDO EL DATASET EN ESTADO DE INSERCION O EDICION
// ALBARANESESCAPE LO UTILIZO A LA HORA DE HACER ABORT Y CANCEL EN UDM
// ESCAPE LO UTILIZO PARA SABER QUE HE PULSADO ESCAPE EN EL FORMULARIO
  if ((CDSQ_MDLINPRESUPUESTO.State in [dsedit,dsinsert]) and (RLINEAPRESUPUESTO.ESCAPE OR RLINEAPRESUPUESTO.ESCAPECDS)) then
  begin
      RLINEAPRESUPUESTO.ESCAPEENTRA:= true;
      RLINEAPRESUPUESTO.ESCAPE := true;// POR SI OCURRE UN ERROR AL HACER EL POST
      CDSQ_MDLINPRESUPUESTO.post;
  end;
  RLINEAPRESUPUESTO.ESCAPEENTRA:= false;
  // AL HACER ABORT ENTRA EN EL BEFORECANCEL
  // Y NO QUIERO QUE MUESTRE LA VENTANA DE INSERTAR O ACTUALIZAR
  // CONSTANTEMENTE
  RLINEAPRESUPUESTO.ESCAPE := true;
end;

procedure TDMGS.CDsq_MDLINPRESUPUESTOAfterInsert(DataSet: TDataSet);
begin
  CDSQ_MDLINPRESUPUESTOPRECIO.asfloat := 0;
  CDsq_MDLINPRESUPUESTOCANTIDAD.asfloat := 1;
  CDsq_MDLINPRESUPUESTOIVA.ASSTRING := FMENU.IVA;
  CDsq_MDLINPRESUPUESTODESCUENTO.asfloat := 0;
  CDSQ_MDLINPRESUPUESTOIMPORTE.asfloat := 0;

  CDSQ_MAXIMO.CLOSE;
  CDSQ_MAXIMO.COMMANDTEXT := 'SELECT MAX(LINEA) as MAXIMO FROM LINEAS_PRESUPUESTO WHERE ID_EMPRESA='+FMENU.ID_EMPRESA+' AND ID_PRESUPUESTO='+CDSQ_MDPRESUPUESTOID_PRESUPUESTO.ASSTRING;
  CDSQ_MAXIMO.Open;
  IF CDSQ_MAXIMO.Fields[0].ISNULL THEN
     CDSQ_MDLINPRESUPUESTOLINEA.VALUE :=0
  ELSE
     CDSQ_MDLINPRESUPUESTOLINEA.VALUE := CDSQ_MAXIMO.Fields[0].VALUE + 1;
  CDSQ_MAXIMO.CLOSE;

end;

procedure TDMGS.CDsq_MDLINPRESUPUESTOCalcFields(DataSet: TDataSet);
begin

end;

//***************************   CDSQ_LINPRESUPUESTO       **************//
//*********************************************************************//
//***************************   CSDQ_ARTICULOSAUX       **************//
procedure TDMGS.CDSQ_ARTICULOSAUXAfterGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
  var aux:integer;
begin
  aux:= RARTICULOSAUX.KEY;
  RARTICULOSAUX.KEY := aux + 1;
END;

procedure TDMGS.CDSQ_ARTICULOSAUXBeforeClose(DataSet: TDataSet);
begin
   INICIARLOCALES(RARTICULOSAUX);
   INICIARRECORD(VARTICULOSAUX);
end;

procedure TDMGS.CDSQ_ARTICULOSAUXBeforeGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
begin
 OWNERDATA:= inttostr(RARTICULOSAUX.KEY) +FILTRO+ inttostr(CDSQ_ARTICULOSAUX.PacketRecords)+FILTRO;
 OWNERDATA := OWNERDATA + OBTENEROWNERDATA(VARTICULOSAUX);
// OWNERDATA := OWNERDATA + ARABGRID + FILTRO + arAbgrtipo + FILTRO+ ARABGRORDEN + FILTRO;
end;

procedure TDMGS.CDSQ_ARTICULOSAUXBeforeOpen(DataSet: TDataSet);
begin
 CDSQ_ARTICULOSAUX.FetchOnDemand := FALSE;
 CDSQ_ARTICULOSAUX.PacketRecords := 20;
 RARTICULOSAUX.KEY :=0; // para que no coja el primero.
end;

procedure TDMGS.CDSQ_ARTICULOSAUXReconcileError(
  DataSet: TCustomClientDataSet; E: EReconcileError;
  UpdateKind: TUpdateKind; var Action: TReconcileAction);
begin
  MOSTRARERROR (E.MESSAGE,' ARTICULOS ', -1);
end;
//***************************   CSDQ_ARTICULOSAUX       **************//
//********************************************************************//
//*********                 PROCEDURE  ******************************//
procedure TDMGS.CDSQ_PROCEDUREBeforeClose(DataSet: TDataSet);
begin
  PROBGRAUX := '';
end;

procedure TDMGS.CDSQ_PROCEDUREBeforeGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
begin
  OWNERDATA := PROBGRAUX ;
end;
//*********                 PROCEDURE  ******************************//
//********************************************************************//
//*********                 CDSQ_ARTICULOEAN  ******************************//

procedure TDMGS.CDSQ_ARTICULOEANBeforeGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
begin
  OWNERDATA := '0'+FILTRO+'0'+FILTRO+AREBGRID + FILTRO + EAID + FILTRO;
end;

procedure TDMGS.CDSQ_ARTICULOEANBeforeClose(DataSet: TDataSet);
begin
   AREBGRID:='';
   EAID := '';
end;

//*********                 CDSQ_ARTICULOEAN  ******************************//
//********************************************************************//




//***********************    CDSQ_MDENTRADA    ******************************//
//******************************************************************
//******************************************************************

procedure TDMGS.CDSQ_MDENTRADAAfterGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
  VAR AUX:INTEGER;
begin
  AUX := RENTRADA.KEY;
  RENTRADA.KEY := AUX + 1;
end;

procedure TDMGS.CDSQ_MDENTRADAAfterInsert(DataSet: TDataSet);
VAR AUX:INTEGER;
begin
  IF NOT RENTRADA.BUSCANDO THEN
  BEGIN
      CDSQ_MDENTRADAFECHA.AsDateTime := DATE;
      CDSQ_MDENTRADAID_EMPRESA.AsString := FMENU.ID_EMPRESA;
      CDSQ_MDENTRADADESCUENTOEURO.ASSTRING := '0';
      CDSQ_mdENTRADAIVA.ASSTRING := FMENU.IVA;
      CDSQ_mdENTRADAdescuento.asstring := '0';
      CDSQ_mdENTRADARE.asfloat := 0;
      CDSQ_MDENTRADABASE_ENTRADA.asfloat :=0;
      CDSQ_MDENTRADAANYO.ASSTRING := FMENU.ANYO;
      CDSQ_MAXIMO.CLOSE;
      CDSQ_MAXIMO.COMMANDTEXT := 'SELECT ID_ENTRADA as MAXIMO FROM OPCIONESNUMERICAS WHERE ID_EMPRESA='+FMENU.ID_EMPRESA+' AND ANYO='+FMENU.ANYO ;
      CDSQ_MAXIMO.Open;
      IF CDSQ_MAXIMO.Fields[0].ISNULL THEN
        CDSQ_MDENTRADAID_ENTRADA.VALUE :=0
      ELSE
        CDSQ_mdENTRADAID_ENTRADA.VALUE := CDSQ_MAXIMO.Fields[0].VALUE + 1;
      CDSQ_MAXIMO.CLOSE;
  END;
end;

procedure TDMGS.CDSQ_MDENTRADAAfterPost(DataSet: TDataSet);
begin
 RENTRADA.ERROR:= false;
 if CDSQ_MDENTRADA.ChangeCount > 0 then
    CDSQ_MDENTRADA.ApplyUpdates(0); // permito 0 errores
 if RENTRADA.ERROR then
 begin
     if ErrorNotFound then
     begin
       ErrorNotFound:= false;
       CDSQ_MDENTRADA.CancelUpdates;
       CDSQ_MDENTRADA.CLOSE;
     end
     ELSE
     begin
       if tipoerror then // cuando da el error de que no se puede
           // borrar pq hay referencias en otras tablas.
       begin
          CDSQ_MDENTRADA.cancelupdates ;
          CDSQ_MDENTRADA.Last;// para que se situe en el
          //registro correcto
       end
       else
       begin
          CDSQ_MDENTRADA.edit;
          CDSQ_MDENTRADAid_ENTRADA.FocusControl;
       END;
      abort;
     end;
 end;
end;

procedure TDMGS.CDSQ_MDENTRADABeforeClose(DataSet: TDataSet);
begin
    if (CDSQ_MDENTRADA.state in [dsedit,dsinsert]) AND(NOT RENTRADA.BUSCANDO) then
      CDSQ_MDENTRADA.post;
   RENTRADA.KEY :=0;
   INICIARRECORD(VENTRADA);
end;

procedure TDMGS.CDSQ_MDENTRADABeforeGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
begin
  OWNERDATA:= inttostr(RENTRADA.KEY) +FILTRO+ inttostr(cdsq_mdENTRADA.PacketRecords)+FILTRO;
  OWNERDATA := OWNERDATA + OBTENEROWNERDATA(VENTRADA);
end;

procedure TDMGS.CDSQ_MDENTRADABeforeOpen(DataSet: TDataSet);
begin
 CDSQ_MDENTRADA.FetchOnDemand := FALSE;
 CDSQ_MDENTRADA.PacketRecords := 15;
 RENTRADA.KEY:=0;
end;

procedure TDMGS.CDSQ_MDENTRADABeforePost(DataSet: TDataSet);
  var x:integer;
     AUX,AUX1:STRING;
     ARTOLD,PROOLD:STRING;
begin
     if RENTRADA.BUSCANDO  then abort;
     if RENTRADA.PREGUNTA then
     begin
      if CDSQ_MDENTRADA.state=dsinsert then x:=PedirConfirmacion('¿Confirma que desea dar de alta esta Entrada?',true,true,true)
                             else x:=PedirConfirmacion('¿Confirma que desea modificar esta Entrada?',true,true,true);
      case x of
             mrno: begin
                  cdsq_mdentrada.UndoLastChange(true);
                  cdsq_mdentrada.cancel;
                  abort;
                  end;
         mrcancel:begin
                  cdsq_mdentradaid_entrada.FocusControl;
                  abort;
                  end;
      end;
      IF CDSQ_MDENTRADA.State = DSINSERT THEN
      BEGIN
         CDSQ_MAXIMO.CLOSE;
         CDSQ_MAXIMO.COMMANDTEXT := 'SELECT ID_ENTRADA as MAXIMO FROM OPCIONESNUMERICAS WHERE ID_EMPRESA='+FMENU.ID_EMPRESA+' AND ANYO='+FMENU.ANYO ;
         CDSQ_MAXIMO.Open;
  IF CDSQ_MAXIMO.Fields[0].ISNULL THEN
     CDSQ_MDENTRADAID_ENTRADA.VALUE :=0
  ELSE
         CDSQ_mdENTRADAID_ENTRADA.VALUE := CDSQ_MAXIMO.Fields[0].VALUE + 1;
         CDSQ_MAXIMO.CLOSE;
      END;

     if trim(cdsq_mdentradaid_proveedor.AsString) ='' then
        cdsq_mdentradaid_proveedor.Clear;
     end
     else
       RENTRADA.PREGUNTA  := true;
     ARTOLD:= '';
     IF DMGS.CDSQ_MDENTRADAALBARAN_FACT_PROVEEDOR.OLDVALUE<> NULL THEN
        ARTOLD:= TRIM(DMGS.CDSQ_MDENTRADAALBARAN_FACT_PROVEEDOR.OldValue);
     PROOLD := '';
     IF DMGS.CDSQ_MDENTRADAID_PROVEEDOR.OLDVALUE <> NULL THEN
       PROOLD:= TRIM(DMGS.CDSQ_MDENTRADAID_PROVEEDOR.OLDVALUE);
    IF (DMGS.CDSQ_MDENTRADA.State IN [DSINSERT]) OR
     (TRIM(DMGS.CDSQ_MDENTRADAID_PROVEEDOR.AsString)<> PROOLD) OR
       (TRIM(DMGS.CDSQ_MDENTRADAALBARAN_FACT_PROVEEDOR.ASSTRING) <> ARTOLD )
    THEN
    IF (TRIM(DMGS.CDSQ_MDENTRADAID_PROVEEDOR.AsString)<> '') AND
       (TRIM(DMGS.CDSQ_MDENTRADAALBARAN_FACT_PROVEEDOR.ASSTRING) <> '' )
    THEN
   BEGIN
    DMGS.CDSQ_PROCEDURE.Close;
    DMGS.CDSQ_PROCEDURE.CommandTexT := 'SELECT COUNT(*) FROM E_PROVEEDOR_ACREEDOR WHERE ID_PROVEEDOR='+DMGS.CDSQ_MDENTRADAID_PROVEEDOR.AsString +' AND ALBARAN_FACT_PROVEEDOR='''+ DMGS.CDSQ_MDENTRADAALBARAN_FACT_PROVEEDOR.AsString+''' AND ANYO='+CDSQ_MDENTRADAANYO.ASSTRING+' AND ID_EMPRESA='+CDSQ_MDENTRADAID_EMPRESA.ASSTRING+' ';
    DMGS.CDSQ_PROCEDURE.Open;
    IF (DMGS.CDSQ_PROCEDURE.FIELDS[0].Value > 0) THEN
    BEGIN
      SHOWMESSAGE('YA EXISTE UNA ENTRADA PARA ESTE PROVEEDOR CON ESTE NUMERO DE FACTURA. SE MUESTRA A CONTINUACION.');
      AUX := DMGS.CDSQ_MDENTRADAID_PROVEEDOR.AsString;
      AUX1 := DMGS.CDSQ_MDENTRADAALBARAN_FACT_PROVEEDOR.AsString;
      DMGS.RENTRADA.ESCAPE := FALSE;
      DMGS.CDSQ_MDENTRADA.CancelUpdates;
      DMGS.CDSQ_MDENTRADA.Close;
      DMGS.VENTRADA.TIPO := '2';
      DMGS.VENTRADA.ID := ' WHERE ID_PROVEEDOR='+AUX+' AND ALBARAN_FACT_PROVEEDOR='''+AUX1+''' ';
      DMGS.CDSQ_MDENTRADA.Open;
      DMGS.CDSQ_PROCEDURE.Close;
      ABORT;
    END;
    DMGS.CDSQ_PROCEDURE.Close;
   END;
   CDSQ_MDENTRADATOTALDESCUENTO.AsFloat := CDSQ_MDENTRADATOTALDESCUENTOAUX.AsFloat ;
   CDSQ_MDENTRADATOTALCOBRADO.AsFloat := CDSQ_MDENTRADAdescTOTAL.AsFloat ;
end;
procedure TDMGS.CDSQ_MDENTRADADeleteError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
  var aux:integer;
begin
RENTRADA.ERROR:=true;
if RENTRADA.ESLINEA  then
 begin
   aux := 12; // la relacion master-detail se comporta como una tabla, como tal
   // no va a entrar en los errores de lineas de presupuesto, lo que hago es controlar de donde
   // viene el error, para darlo con mas detalle, y el numero 12 corresponde a los
   // errores de linpresupuesto
   RLINEAENTRADA.ERROR := true;
   RENTRADA.ESLINEA := false;
 end
else
 aux := 11;// corresponde a pedidos
 mostrarerror(e.message,' ENTRADA ',aux);
end;

procedure TDMGS.CDSQ_MDENTRADAEditError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
  var aux:integer;
begin
RENTRADA.ERROR:=true;
if RENTRADA.ESLINEA  then
 begin
   aux := 12; // la relacion master-detail se comporta como una tabla, como tal
   // no va a entrar en los errores de lineas de presupuesto, lo que hago es controlar de donde
   // viene el error, para darlo con mas detalle, y el numero 12 corresponde a los
   // errores de linpresupuesto
   RLINEAENTRADA.ERROR := true;
   RENTRADA.ESLINEA:= false;
 end
else
 aux := 11;// corresponde a pedidos
 mostrarerror(e.message,' ENTRADA ',aux);
end;

procedure TDMGS.CDSQ_MDENTRADAPostError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
  var aux:integer;
begin
RENTRADA.ERROR:=true;
if RENTRADA.ESLINEA then
 begin
   aux := 12; // la relacion master-detail se comporta como una tabla, como tal
   // no va a entrar en los errores de lineas de presupuesto, lo que hago es controlar de donde
   // viene el error, para darlo con mas detalle, y el numero 12 corresponde a los
   // errores de linpresupuesto
   RLINEAENTRADA.ERROR := true;
   RENTRADA.ESLINEA:= false;
 end
else
 aux := 11;// corresponde a pedidos
 mostrarerror(e.message,' ENTRADA ',aux);
end;

procedure TDMGS.CDSQ_MDENTRADAReconcileError(DataSet: TCustomClientDataSet;
  E: EReconcileError; UpdateKind: TUpdateKind;
  var Action: TReconcileAction);
  var aux:integer;
begin
  if updatekind = ukdelete then
     tipoerror := true
  else
     tipoerror := false;

RENTRADA.ERROR:=true;
if RENTRADA.ESLINEA then
 begin
   aux := 12; // la relacion master-detail se comporta como una tabla, como tal
   // no va a entrar en los errores de lineas de presupuesto, lo que hago es controlar de donde
   // viene el error, para darlo con mas detalle, y el numero 12 corresponde a los
   // errores de linpresupuesto
   RLINEAENTRADA.ERROR := true;
   RENTRADA.ESLINEA:= false;
 end
else
 aux := 11;// corresponde a pedidos
 mostrarerror(e.message,' ENTRADA ',aux);
end;
procedure TDMGS.CDSQ_MDENTRADACalcFields(DataSet: TDataSet);
var pvpsiniva,re,total,descuento,prueba,iva,pvpsicd:double;
    fbase_entrada:double;
begin
   fbase_entrada := roundto(cdsq_mdentradabase_entrada.asfloat,decimalesMON);

   IF CDSQ_MDENTRADADESCUENTO.asfLOAT <> 0 THEN
       CDSQ_MDENTRADADESCTOTAL.asfloat := roundto((fBASE_ENTRADA) - (fBASE_ENTRADA*CDSQ_MDENTRADADESCUENTO.asfloat/100),DMGS.DECIMALESTOTAL);
   IF CDSQ_MDENTRADADESCUENTOEURO.asfLOAT <> 0 THEN
     IF (CDSQ_MDENTRADABASE_ENTRADA.ASSTRING <> '0') THEN
       CDSQ_MDENTRADADESCTOTAL.asfloat := roundto((fBASE_ENTRADA) - (fBASE_ENTRADA*(cdsq_mdENTRADAdescuentoEURO.asfloat/CDSQ_MDENTRADABASE_ENTRADA.ASFLOAT)),DMGS.DECIMALESTOTAL)
     ELSE
       CDSQ_MDENTRADADESCTOTAL.asfloat := roundto((fBASE_ENTRADA) - (fBASE_ENTRADA*(cdsq_mdENTRADAdescuentoEURO.asfloat/1)),DMGS.DECIMALESTOTAL);

  IF CDSQ_MDENTRADADESCUENTO.asfLOAT <> 0 THEN
     descuento := roundto(cdsq_mdENTRADAdescuento.asfloat/100,DMGS.DECIMALESDES);
  IF CDSQ_MDENTRADADESCUENTOEURO.asfLOAT <> 0 THEN
    IF (CDSQ_MDENTRADABASE_ENTRADA.ASSTRING <> '0') THEN
       descuento := roundto((cdsq_mdENTRADAdescuentoEURO.asfloat/CDSQ_MDENTRADABASE_ENTRADA.ASFLOAT),DMGS.DECIMALESDES)
    ELSE
       DESCUENTO := 0;






//   descuento := roundto(cdsq_MDENTRADAdescuento.asfloat/100,DECIMALESDES);
   iva := roundto(cdsq_MDENTRADAiva.asfloat/100,DECIMALES);
  // LAS ENTRADAS SON PRECIOS SIN IVA
   pvpsiniva:= roundto(fbase_ENTRADA,DECIMALES);
   pvpsicd := pvpsiniva * (1-descuento);
   re := roundto(pvpsicd*cdsq_MDENTRADAre.asfloat/100,DMGS.DECIMALESDES);
   CDSQ_mDENTRADATOTALRE.AsCurrency := ROUNDTO(RE,DECIMALESDES);
   total :=roundto(pvpsicd- re,DMGS.DECIMALESDES);
//   CDSQ_MDENTRADADESCTOTAL.asfloat := roundto((fBASE_ENTRADA) - (fBASE_ENTRADA*CDSQ_MDENTRADADESCUENTO.asfloat/100),DECIMALES);
//   CDSQ_MDENTRADATOTALDESCUENTO.asfloat :=roundto(PVPSINIVA*DESCUENTO,DECIMALES);
   if iva <> 0 then
      CDSQ_MDENTRADATOTALIVA.asfloat := roundto(PVPSICD * IVA,DECIMALESDES);

   cdsq_MDENTRADAdesctotal.asfloat := roundto(total+ CDSQ_MDENTRADATOTALIVA.asfloat,DMGS.DECIMALESTOTAL);
   CDSQ_MDENTRADABPSINIVA.asfloat := pvpsiniva;

   CDSQ_MDENTRADABASE.asfloat := PVPSINIVA * ( 1 - DESCUENTO);

  CDSQ_MDENTRADATOTALDESCUENTOAUX.Value := 0;
  IF CDSQ_MDENTRADADESCUENTO.asfLOAT <> 0 THEN
     CDSQ_MDENTRADATOTALDESCUENTOAUX.VALUE := roundto((CDSQ_MDENTRADABASE_ENTRADA.asfloat*CDSQ_MDENTRADADESCUENTO.asfloat/100),DMGS.DECIMALES);
  IF CDSQ_MDENTRADADESCUENTOEURO.asfLOAT <> 0 THEN
     CDSQ_MDENTRADATOTALDESCUENTOAUX.VALUE := roundto(CDSQ_MDENTRADADESCUENTOEURO.asfloat,DMGS.DECIMALES);


end;


//******************************************************************
//***********************    CDSQ_MDlineaENTRADA    ******************************//

procedure TDMGS.CDSQ_MDLINEAENTRADAAfterInsert(DataSet: TDataSet);
begin
  cdsq_mdlineaentradaPRECIO.asfloat := 0;
  cdsq_mdlineaentradaCANTIDAD.asfloat := 1;
  cdsq_mdlineaentradaDESCUENTO.asfloat := 0;
  cdsq_mdlineaentradaIMPORTE.asfloat := 0;
  CDSQ_MDLINEAENTRADAIVA.ASSTRING := FMENU.IVA;
  CDSQ_MDLINEAENTRADASERVIDO.ASFLOAT := 0;
  CDSQ_MDLINEAENTRADAUSOINTERNO.ASFLOAT := 0;
  CDSQ_MDLINEAENTRADAESTROPEADO.ASFLOAT := 0;

  CDSQ_MAXIMO.CLOSE;
  CDSQ_MAXIMO.COMMANDTEXT := 'SELECT MAX(LINEA) as MAXIMO FROM LIN_E_PROVEEDOR_ACREEDOR WHERE ID_EMPRESA='+FMENU.ID_EMPRESA+' AND ID_ENTRADA='+CDSQ_MDENTRADAID_ENTRADA.ASSTRING+' AND ANYO='+CDSQ_MDENTRADAANYO.ASSTRING;
  CDSQ_MAXIMO.Open;
 IF CDSQ_MAXIMO.Fields[0].ISNULL THEN
     CDSQ_MDLINEAENTRADALINEA.VALUE :=0
  ELSE
  CDSQ_MDLINEAENTRADALINEA.VALUE := CDSQ_MAXIMO.Fields[0].VALUE + 1;
  CDSQ_MAXIMO.CLOSE;

end;

procedure TDMGS.CDSQ_MDLINEAENTRADAAfterPost(DataSet: TDataSet);
var auxbookmark:tbookmark;
begin
  RLINEAENTRADA.ESCAPE := TRUE;
  RLINEAENTRADA.ERROR:= FALSE;
  auxbookmark := cdsq_mdlineaentrada.GetBookmark ;
  if(CDSQ_mdLINEAENTRADA.ChangeCount >0 ) then
     CDSQ_mdLINEAENTRADA.ApplyUpdates(0);
  if RLINEAENTRADA.ERROR then
  // si el error se ha producido en la linea de PRESUPUESTO, deshago los cambios
  // que he introducido
    if ErrorNotFound then
     begin
       ErrorNotFound:= false;
       RLINEAENTRADA.ESCAPE := FALSE;// ME HACE FALTA
       RLINEAENTRADA.ESCAPECDS := FALSE;
       CDSQ_MDLINEAENTRADA.CancelUpdates;
       CDSQ_MDLINEAENTRADA.close;
       CDSQ_MDENTRADA.Close;
     end
  ELSE
  begin
       if tipoerror then // cuando da el error de que no se puede
           // borrar pq hay referencias en otras tablas.
       begin
          CDSQ_MDLINEAENTRADA.cancelupdates ;
          CDSQ_MDLINEAENTRADA.Last;// para que se situe en el
          //registro correcto
       end
       else
       begin
           CDSQ_MDLINEAENTRADA.UndoLastChange (true);
           CDSQ_MDLINEAENTRADAid_ARTICULO.FocusControl;
      end;
     abort;
  end;
  CDSQ_MDLINEAENTRADA.DisableControls ;
  calcularbase;
  CDSQ_MDLINEAENTRADA.ENableControls ;  
  cdsq_mdentrada.Edit;
  cdsq_mdentradabase_entrada.asfloat := base_entrada;
  RENTRADA.PREGUNTA := false;
  cdsq_mdentrada.post;
  IF CDSQ_MDLINEAENTRADA.RecordCount > 1 THEN
       cdsq_mdlineaentrada.GotoBookmark(auxbookmark);
  cdsq_mdlineaentrada.FreeBookmark(auxbookmark);
end;

procedure TDMGS.CDSQ_MDLINEAENTRADABeforeCancel(DataSet: TDataSet);
begin
// EL ESCAPE CONTROLA CUANDO PULSO LA SEGUNDA VEZ ESCAPE
// ESTANDO EL DATASET EN ESTADO DE INSERCION O EDICION
// ALBARANESESCAPE LO UTILIZO A LA HORA DE HACER ABORT Y CANCEL EN UDM
// ESCAPE LO UTILIZO PARA SABER QUE HE PULSADO ESCAPE EN EL FORMULARIO
  if ((CDSQ_MDLINEAENTRADA.State in [dsedit,dsinsert]) and (RLINEAENTRADA.ESCAPE OR RLINEAENTRADA.ESCAPECDS)) then
  begin
      RLINEAENTRADA.ESCAPEENTRA:= true;
      RLINEAENTRADA.ESCAPE := true;// POR SI OCURRE UN ERROR AL HACER EL POST
      CDSQ_MDLINEAentrada.post;
  end;
  RLINEAENTRADA.ESCAPEENTRA:= false;
  // AL HACER ABORT ENTRA EN EL BEFORECANCEL
  // Y NO QUIERO QUE MUESTRE LA VENTANA DE INSERTAR O ACTUALIZAR
  // CONSTANTEMENTE
  RLINEAENTRADA.ESCAPE := true;
end;

procedure TDMGS.CDSQ_MDLINEAENTRADABeforeDelete(DataSet: TDataSet);
begin
// Esto es para cuando borre un pedido, que borre todas las lineas.
   if RLINEAENTRADA.PREGUNTA then
   begin
     case PedirConfirmacion('¿Confirma que desea borrar esta Linea de la Entrada?',true,true,false) of
          mrno:Abort;
     end;
   end
   else
      RLINEAENTRADA.PREGUNTA := TRUE;
end;

procedure TDMGS.CDSQ_MDLINEAENTRADABeforeOpen(DataSet: TDataSet);
begin
  BorrandoLineasent := false;
end;

procedure TDMGS.CDSQ_MDLINEAENTRADABeforePost(DataSet: TDataSet);
var X:INTEGER;
    DESCUENTO:CURRENCY;
begin
    if RLINEAENTRADA.PREGUNTA then // lo utilizo para modificar las lineas de
     // pedidos dentro de albaranes
    begin
      if CDSQ_mdlineaentrada.state=dsinsert
      then x:=PedirConfirmacion('¿Confirma que desea dar de alta esta Linea de Entrada?',true,true,true)
      else x:=PedirConfirmacion('¿Confirma que desea modificar esta Linea de Entrada?',true,true,true);
           case x of
             mrno: begin
                    RLINEAENTRADA.ESCAPE := FALSE;// PARA CONTROLAR EN EL UDM
                    RLINEAENTRADA.ESCAPECDS:= FALSE;// PARA CONTROLAR EN EL FORMULARIO
                    CDSQ_mdlineaentrada.undolastchange (true);
                    CDSQ_mdlineaentrada.cancel;
                    cdsq_mdENTRADA.cancel;
                    abort;
                   end;
            mrcancel:begin
                      if RLINEAENTRADA.ESCAPEENTRA then
                        CDSQ_mdlineaentrada.edit;
                      cdsq_mdlineaentradaid_articulo.FocusControl ;
                      abort;
                     end;
           end;
    end
    else
      RLINEAENTRADA.PREGUNTA := TRUE;
        RENTRADA.ESLINEA := true;//trata la relacion maestro detalle como una tabla,
     //cuando da error, no da error en cdsmdlinpedidos, sino que lo da en
     //cdsmdpresupuesto, con lo  que tengo que saber que la llamada se ha hecho de
     // linpresupuesto para poder sacar un error detallado.
    RLINEAENTRADA.ESCAPE := FALSE;// ME HACE FALTA
    // AL HACER ABORT ENTRA EN EL BEFORECANCEL
    // Y NO QUIERO QUE MUESTRE LA VENTANA DE INSERTAR O ACTUALIZAR
    // CONSTANTEMENTE
    
    IF (CDSQ_MDLINEAENTRADA.State = DSINSERT)
    OR ((CDSQ_MDLINEAENTRADA.State = DSEDIT) AND
    (CDSQ_MDLINEAENTRADAID_ARTICULO.NewValue <> CDSQ_MDLINEAENTRADAID_ARTICULO.OldValue)) THEN
    BEGIN
    if  (not cdsq_mdLINEAENTRADAid_articulo.IsNull) then
    begin
     CDSQ_MAXIMO.CLOSE;
     CDSQ_MAXIMO.CommandText := ' SELECT COUNT(*) AS MAXIMO FROM LIN_E_PROVEEDOR_ACREEDOR WHERE ID_ENTRADA='+DMGS.CDSQ_MDLINEAENTRADAID_ENTRADA.ASSTRING+' AND ID_EMPRESA='+DMGS.CDSQ_MDLINEAENTRADAID_EMPRESA.ASSTRING+' AND ID_ARTICULO='''+ DMGS.CDSQ_MDLINEAENTRADAID_ARTICULO.ASSTRING + '''  AND ANYO='+DMGS.CDSQ_MDLINEAENTRADAANYO.ASSTRING;
     CDSQ_MAXIMO.OPEN;
     IF CDSQ_MAXIMO.Fields[0].VALUE > 0 THEN
     BEGIN
        x:=PedirConfirmacion('El artículo '+ dmgs.cdsq_mdLINEAENTRADAid_articulo.asstring+ ' está en mas de una línea.¿ Desea continuar?',true,true,false);
         case x of
              mrno: begin
                  if RLINEAENTRADA.ESCAPEENTRA then
                        CDSQ_MDLINEAENTRADA.edit;
                  CDSQ_MDLINEAENTRADAid_articulo.FocusControl;
                  abort;
                  end;
        end;
     END;
     CDSQ_MAXIMO.CLOSE;
    end;
    END;

    if trim(cdsq_mdLINEAENTRADAid_articulo.AsString) ='' then
        cdsq_mdLINEAENTRADAid_articulo.Clear;


// REVISO IMPORTE - SI LE DOY A LA FLECHA HACIA ARRIBA O HACIA ABAJO
// NO LO CALCULABA BIEN

    DESCUENTO:=0;
    if DMGS.CDSQ_MDLINEAENTRADADESCUENTOEURO.ASfloat <> 0 then
       DESCUENTO := ROUNDTO(DMGS.CDSQ_MDLINEAENTRADADESCUENTOEURO.ASfloat,DMGS.DECIMALES);
    IF CDSQ_MDLINEAENTRADADESCUENTO.AsFloat <> 0 THEN
    BEGIN
     DESCUENTO := ROUNDTO(CDSQ_MDLINEAENTRADADESCUENTO.ASfloat/100,DECIMALES);
     CDSQ_mdlineaentradaprecio_real.ASfloat :=  ROUNDTO(CDSQ_mdlineaentradaPRECIO.ASFLOAT* (1 - DESCUENTO),DECIMALES);
    END
    ELSE
     CDSQ_mdlineaentradaprecio_real.ASfloat :=  ROUNDTO(CDSQ_mdlineaentradaPRECIO.ASFLOAT - DESCUENTO,DECIMALES);

    CDSQ_mdlineaentradaimporte.ASfloat :=  ROUNDTO(CDSQ_MDLINEAENTRADAcantidad.ASFLOAT * CDSQ_mdlineaentradaprecio_real.ASfloat ,DECIMALESIMPORTEENTRADA)  ;


 

end;
procedure TDMGS.CDSQ_MDLINEAENTRADADeleteError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
 RLINEAENTRADA.ERROR := true;
 mostrarerror(e.message,' linea de presupuesto ',12);
end;

procedure TDMGS.CDSQ_MDLINEAENTRADAEditError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
 RLINEAENTRADA.ERROR := true;
 mostrarerror(e.message,' linea de presupuesto ',12);
end;

procedure TDMGS.CDSQ_MDLINEAENTRADAPostError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
 RLINEAENTRADA.ERROR := true;
 mostrarerror(e.message,' linea de presupuesto ',12);
end;

procedure TDMGS.CDSQ_MDLINEAENTRADAReconcileError(
  DataSet: TCustomClientDataSet; E: EReconcileError;
  UpdateKind: TUpdateKind; var Action: TReconcileAction);
begin
 if updatekind = ukdelete then
     tipoerror := true
  else
     tipoerror := false;

 RLINEAENTRADA.ERROR := true;
 mostrarerror(e.message,' linea de presupuesto ',12);
end;

//***********************    CDSQ_MDlineaENTRADA    ******************************//
//******************************************************************

//***********************    CDSQ_proveedoracreedoraux    ******************************//
//******************************************************************

procedure TDMGS.cdsq_proveedor_acreedorauxAfterGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
  var aux:INTEGER;
begin
  aux := RPROVEEDORACAUX.KEY ;
  RPROVEEDORACAUX.KEY := aux + 1;
end;

procedure TDMGS.cdsq_proveedor_acreedorauxBeforeClose(DataSet: TDataSet);
begin
  RPROVEEDORACAUX.KEY := 0;
  INICIARRECORD(VPROVEEDORACAUX);
end;

procedure TDMGS.cdsq_proveedor_acreedorauxBeforeGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
begin
  OWNERDATA:= inttostr(RPROVEEDORACAUX.KEY) +FILTRO+ inttostr(CDSQ_PROVEEDOR_ACREEDORAUX.PacketRecords)+FILTRO;
  OWNERDATA := OWNERDATA + OBTENEROWNERDATA(VPROVEEDORACAUX);
end;

procedure TDMGS.cdsq_proveedor_acreedorauxBeforeOpen(DataSet: TDataSet);
begin
 cdsq_proveedor_acreedoraux.FetchOnDemand := FALSE;
 cdsq_proveedor_acreedoraux.PacketRecords := 20;
 RPROVEEDORACAUX.KEY :=0; // para que no coja el primero.
end;

procedure TDMGS.cdsq_proveedor_acreedorauxCalcFields(DataSet: TDataSet);
begin
  IF CDSQ_PROVEEDOR_ACREEDORauxBORRADO.value =1 THEN CDSQ_PROVEEDOR_ACREEDORauxBORRADOS.value := TRUE
  ELSE CDSQ_PROVEEDOR_ACREEDORauxBORRADOS.value := FALSE;
end;

procedure TDMGS.cdsq_proveedor_acreedorauxReconcileError(
  DataSet: TCustomClientDataSet; E: EReconcileError;
  UpdateKind: TUpdateKind; var Action: TReconcileAction);
begin
  mostrarerror (e.message, ' proveedor aux ', -1);
end;


//***********************    CDSQ_proveedoracreedoraux    ******************************//
//******************************************************************
//***********************    CDSQ_MDALBARAN   ******************************//



procedure TDMGS.CDSQ_MDALBARANAfterGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
  VAR AUX:INTEGER;
begin
  AUX := RALBARAN.KEY;
  RALBARAN.KEY := AUX + 1;
end;

procedure TDMGS.CDSQ_MDALBARANAfterInsert(DataSet: TDataSet);
VAR AUX:INTEGER;
begin
  IF NOT RALBARAN.BUSCANDO  THEN
  BEGIN
      CDSQ_MDALBARANFECHA.AsDateTime :=  DATE;
      CDSQ_MDALBARANFECHAFIN.AsDateTime :=  DATE;
      CDSQ_MDALBARANANYO.VALUE := strtoint(fmenu.anyo);//YEAROF(DATE);
      CDSQ_MDALBARANID_EMPRESA.AsString := FMENU.ID_EMPRESA;
      CDSQ_MDALBARANID_SERIE.AsString := FMENU.ID_SERIE;
      CDSQ_MDALBARANID_CLIENTE.AsString := FMENU.CLXDEFECTO;
      CDSQ_MDALBARANDESCUENTOEURO.ASSTRING :='0';
      CDSQ_MDALBARANIVA.ASSTRING := FMENU.IVA;
      cdsq_MDALBARANdescuento.asstring := '0';
      CDSQ_MDALBARANRE.asfloat := 0;
      CDSQ_MDALBARANBASE_ALBARAN.asfloat := 0;
      CDSQ_MDALBARANID_FORMA.AsString := FMENU.ID_FORMAPAGO;

      CDSQ_MDALBARANID_PRESUPUESTO.VALUE := 0;// LO UTILIZO PARA SABER
      CDSQ_MDALBARANANULADO.VALUE := 0;
      CDSQ_MDALBARANCOBRADO.VALUE := 0;
      CDSQ_MDALBARANTOTAL_COBRADO.asfloat := 0;
      cdsq_mdalbaranhora.Value  := time();
        CDSQ_MAXIMO.CLOSE;
        CDSQ_MAXIMO.COMMANDTEXT := 'SELECT SIG_ALBARAN as MAXIMO FROM SERIES WHERE ID_EMPRESA='+FMENU.ID_EMPRESA+' AND ID_SERIE='''+FMENU.ID_SERIE+''' AND anyo='+fmenu.anyo+' ';//ANYO='+INTTOSTR(YEAROF(DATE))+' ';
        CDSQ_MAXIMO.Open;
  IF CDSQ_MAXIMO.Fields[0].ISNULL THEN
     CDSQ_MDALBARANID_ALBARAN.VALUE :=0
  ELSE
        CDSQ_MDALBARANID_ALBARAN.VALUE := CDSQ_MAXIMO.Fields[0].VALUE + 1;
        CDSQ_MAXIMO.CLOSE;

      // SI EL PRESUPUESTO VIENE DESDE OTRO ALBARAN.
  END;


end;
procedure TDMGS.CDSQ_MDALBARANAfterPost(DataSet: TDataSet);
begin
 RALBARAN.ERROR:= false;
 if CDSQ_MDALBARAN.ChangeCount > 0 then
    CDSQ_MDALBARAN.ApplyUpdates(0); // permito 0 errores
 if RALBARAN.ERROR then
 begin
     if ErrorNotFound then
     begin
       ErrorNotFound:= false;
       CDSQ_MDALBARAN.CancelUpdates;
       CDSQ_MDALBARAN.CLOSE;
     end
     ELSE
     begin
       if tipoerror then // cuando da el error de que no se puede
           // borrar pq hay referencias en otras tablas.
       begin
          CDSQ_MDALBARAN.cancelupdates ;
          CDSQ_MDALBARAN.Last;// para que se situe en el
          //registro correcto
       end
       else
       begin
          CDSQ_MDALBARAN.edit;
          CDSQ_MDALBARANid_ALBARAN.FocusControl;
       END;
      abort;
     end;
 end;
 COMPROBARFACTURADOCOBRADO ;
end;

procedure TDMGS.CDSQ_MDALBARANBeforeClose(DataSet: TDataSet);
begin
   if (CDSQ_MDALBARAN.state in [dsedit,dsinsert]) AND(NOT RALBARAN.BUSCANDO) then
      CDSQ_MDALBARAN.post;
   RALBARAN.KEY :=0;
   INICIARRECORD(VALBARAN);
end;

procedure TDMGS.CDSQ_MDALBARANBeforeGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
begin
  OWNERDATA:= inttostr(RALBARAN.KEY) +FILTRO+ inttostr(cdsq_mdALBARAN.PacketRecords)+FILTRO;
  OWNERDATA := OWNERDATA + OBTENEROWNERDATA(VALBARAN);
end;

procedure TDMGS.CDSQ_MDALBARANBeforeOpen(DataSet: TDataSet);
begin
 CDSQ_MDALBARAN.FetchOnDemand := FALSE;
 CDSQ_MDALBARAN.PacketRecords := 15;
 RALBARAN.KEY:=0;
end;

procedure TDMGS.CDSQ_MDALBARANBeforePost(DataSet: TDataSet);
  var x:integer;
begin
     if RALBARAN.BUSCANDO then abort;
     if RALBARAN.PREGUNTA then
     begin
      if CDSQ_MDALBARAN.state=dsinsert then x:=PedirConfirmacion('¿Confirma que desea dar de alta este Albaran?',true,true,true)
                             else x:=PedirConfirmacion('¿Confirma que desea modificar este Albaran?',true,true,true);
      case x of
             mrno: begin
                  cdsq_mdalbaran.UndoLastChange(true);
                  cdsq_mdalbaran.cancel;
                  abort;
                  end;
         mrcancel:begin
                  cdsq_mdalbaranid_albaran.FocusControl;
                  abort;
                  end;
      end;
     end
     else
       RALBARAN.PREGUNTA := true;
      IF cdsq_mdalbaran.STATE = DSINSERT THEN
      BEGIN
            CDSQ_MAXIMO.CLOSE;
            CDSQ_MAXIMO.COMMANDTEXT := 'SELECT SIG_ALBARAN as MAXIMO FROM SERIES WHERE ID_EMPRESA='+FMENU.ID_EMPRESA+' AND ID_SERIE='''+CDSQ_MDALBARANID_SERIE.ASSTRING+''' AND anyo='+fmenu.anyo+' ';//ANYO='+INTTOSTR(YEAROF(DATE))+'  ';
            CDSQ_MAXIMO.Open;
  IF CDSQ_MAXIMO.Fields[0].ISNULL THEN
     CDSQ_MDALBARANID_ALBARAN.VALUE :=0
  ELSE
            CDSQ_MDALBARANID_ALBARAN.VALUE := CDSQ_MAXIMO.Fields[0].VALUE + 1;
            CDSQ_MAXIMO.CLOSE;

      END;
     if trim(CDSQ_MDALBARANid_CLIENTE.AsString) ='' then
     BEGIN
        SHOWMESSAGE('EL IDENTIFICADOR DE CLIENTE DEBE DE TENER UN VALOR');
        ABORT;
     END;
     if trim(cdsq_mdalbaranid_FORMA.AsString) ='' then
        cdsq_MdalbaranID_FORMA.Clear;
     if ( cdsq_mdALBARANanyo.VALUE < yearof(cdSq_mdALBARANfecha.AsDateTime )) then
     BEGIN
        SHOWMESSAGE('LA FECHA ES MAYOR QUE EL AÑO.');
        CDSQ_MDALBARANANYO.FocusControl;
        ABORT;
     END;
//     if cdsq_mdalbarancobrados.Value then
//        cdsq_mdalbarancobrado.Value := 1;
     IF DMGS.CDSQ_MDALBARANCOBRADOS.Value THEN
     BEGIN
       IF DMGS.CDSQ_MDALBARANCOBRADO.VALUE <> 2 THEN
          DMGS.CDSQ_MDALBARANCOBRADO.VALUE := 1;
     END
     ELSE
          DMGS.CDSQ_MDALBARANCOBRADO.VALUE := 0;
     CDSQ_MDALBARANTOTALCOBRADO.AsFloat := CDSQ_MDALBARANdescTOTAL.AsFloat ;
     CDSQ_MDALBARANTOTALDESCUENTO.AsFloat := CDSQ_MDALBARANTOTALDESCUENTOAUX.AsFloat ;
end;

procedure TDMGS.CDSQ_MDALBARANCalcFields(DataSet: TDataSet);
var pvpsiniva,re,total,descuento,prueba,iva,pvpsicd:double;
    FBASE_ALBARAN:DOUBLE;
begin
   IF NOT (CDSQ_MDALBARAN.State IN  [DSEDIT,DSINSERT] ) THEN
    WITH CDSQ_MAXIMO DO
     BEGIN
       CLOSE;
       COMMANDTEXT := ' SELECT COUNT(*) AS MAXIMO FROM FACTURASALBARANES WHERE ID_ALBARAN='+DMGS.CDSQ_MDALBARANID_ALBARAN.ASSTRING+' AND ALBID_EMPRESA= ' + DMGS.CDSQ_MDALBARANID_EMPRESA.AsString +' AND ALBANYO='+DMGS.CDSQ_MDALBARANANYO.AsString+'  AND ALBID_SERIE='''+DMGS.CDSQ_MDALBARANID_SERIE.ASSTRING+''' AND TIPO=''AL'' ';
       OPEN;
       IF DMGS.CDSQ_MAXIMO.Fields[0].VALUE>0 THEN
          CDSQ_MDALBARANFACTURADO.value  := 'FACTURADO'
       ELSE
          CDSQ_MDALBARANFACTURADO.value := '';
       CLOSE;
    END;
   FBASE_ALBARAN:= ROUNDTO(CDSQ_MDALBARANBASE_ALBARAN.asfloat,DECIMALESMON);
//   CDSQ_MDalbaranDESCTOTAL.asfloat := roundto((FBASE_albaran) - (FBASE_albaran*CDSQ_MDalbaranDESCUENTO.asfloat/100),DMGS.DECIMALES);

  IF CDSQ_MDALBARANDESCUENTO.asfLOAT <> 0 THEN
     descuento := roundto(cdsq_mdALBARANdescuento.asfloat/100,DMGS.DECIMALESDES);
  IF CDSQ_MDALBARANDESCUENTOEURO.asfLOAT <> 0 THEN
    IF (CDSQ_MDALBARANBASE_ALBARAN.ASSTRING <> '0') THEN
      descuento := roundto((cdsq_mdALBARANdescuentoEURO.asfloat/CDSQ_MDALBARANBASE_ALBARAN.ASFLOAT),DMGS.DECIMALESDES)
    ELSE
      DESCUENTO := 0;

//   descuento := roundto(cdsq_mdalbarandescuento.asfloat/100,DMGS.DECIMALESDES);
   iva := roundto(cdsq_mdalbaraniva.asfloat/100,DMGS.DECIMALES);
   pvpsiniva:= roundto(Fbase_albaran/(1+iva),DMGS.DECIMALESDES);
   pvpsicd := pvpsiniva * (1-descuento);
   re := roundto(pvpsicd*cdsq_mdalbaranre.asfloat/100,DMGS.DECIMALESDES);
   CDSQ_MDALBARANTOTALRE.AsCurrency  := ROUNDTO(RE,DECIMALESDES);
   total :=roundto(pvpsicd- re,DMGS.DECIMALESDES);
//   CDSQ_MDALBARANTOTALDESCUENTO.asfloat := ROUNDTO(PVPSINIVA*DESCUENTO*(1+IVA),DECIMALES);
   IF IVA<> 0 THEN
       CDSQ_MDALBARANTOTALIVA.asfloat := ROUNDTO(PVPSICD*IVA,DECIMALESDES);
//  LO DEJO PREPARADO, PERO COMO NO PONGO LA BASE DE MOMENTO NO LO USO
//   CDSQ_MDALBARANBASE.asfloat :=
   cdsq_mdalbarandesctotal.asfloat := roundto(total + CDSQ_MDALBARANTOTALIVA.AsFloat,DMGS.DECIMALESTOTAL);
//   CDSQ_MDALBARANTOTALIVA.asfloat := ROUNDTO(IVA *(CDSQ_MDALBARANDESCTOTAL.ASFLOAT /(1+IVA)) ,DECIMALESDES);
   CDSQ_MDalbaranBPSINIVA.asfloat := pvpsiniva;
   CDSQ_MDALBARANBASE_ALBARANSINIVA.AsFloat := PVPSINIVA;
   // ?? PARA QUE LA SIGTE LINEA

   IF CDSQ_MDALBARANANULADO.value = 0 THEN CDSQ_MDALBARANANULADOS.value := FALSE
   ELSE CDSQ_MDALBARANANULADOS.value := TRUE;
   IF (roundto(CDSQ_MDALBARANdesctotal.asfloat,decimalesTOTAL) <= roundto(CDSQ_MDALBARANTOTAL_COBRADO.asfloat,decimalesTOTAL))
   and (roundto(cdsq_mdALBARANtotal_cobrado.asfloat,decimalesTOTAL) >= 0 )
   and (CDSQ_MDLINEAALBARAN.recordcount >0)
   THEN CDSQ_MDALBARANCOBRADOS.value := TRUE
   ELSE CDSQ_MDALBARANCOBRADOS.value := FALSE;

//   IF (CDSQ_MDALBARANCOBRADO.Value = 1) OR
   if   (CDSQ_MDALBARANCOBRADO.Value = 2)    // lo paso a factura
   THEN
        CDSQ_MDALBARANCOBRADOS.value := TRUE;

   IF CDSQ_MDALBARANANYO.AsString <> '' THEN
      CDSQ_MDALBARANIMPRIMIRANYO.ASSTRING := RIGHTSTR(CDSQ_MDALBARANANYO.ASSTRING,2);

  CDSQ_MDALBARANTOTALDESCUENTOAUX.VALUE := 0;
  IF CDSQ_MDALBARANDESCUENTO.asfLOAT <> 0 THEN
     CDSQ_MDALBARANTOTALDESCUENTOAUX.VALUE := roundto((CDSQ_MDALBARANBASE_ALBARAN.asfloat*CDSQ_MDALBARANDESCUENTO.asfloat/100),DMGS.DECIMALES);
  IF CDSQ_MDALBARANDESCUENTOEURO.asfLOAT <> 0 THEN
     CDSQ_MDALBARANTOTALDESCUENTOAUX.VALUE := roundto(CDSQ_MDALBARANDESCUENTOEURO.asfloat,DMGS.DECIMALES);

end;

procedure TDMGS.CDSQ_MDALBARANDeleteError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
  VAR AUX:INTEGER;
begin
RALBARAN.ERROR:=true;
if RALBARAN.ESLINEA then
 begin
   aux := 14; // la relacion master-detail se comporta como una tabla, como tal
   // no va a entrar en los errores de lineas de presupuesto, lo que hago es controlar de donde
   // viene el error, para darlo con mas detalle, y el numero 12 corresponde a los
   // errores de linpresupuesto
   RLINEAALBARAN.ERROR := true;
   RALBARAN.ESLINEA:= false;
 end
else
 aux := 13;// corresponde a pedidos
mostrarerror(e.message,' albaran ',aux);
end;

procedure TDMGS.CDSQ_MDALBARANEditError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
  VAR AUX:INTEGER;
begin
RALBARAN.ERROR:=true;
if RALBARAN.ESLINEA then
 begin
   aux := 14; // la relacion master-detail se comporta como una tabla, como tal
   // no va a entrar en los errores de lineas de presupuesto, lo que hago es controlar de donde
   // viene el error, para darlo con mas detalle, y el numero 12 corresponde a los
   // errores de linpresupuesto
   RLINEAALBARAN.ERROR := true;
   RALBARAN.ESLINEA:= false;
 end
else
 aux := 13;// corresponde a pedidos
mostrarerror(e.message,' ALBARAN ' ,aux);
end;
procedure TDMGS.CDSQ_MDALBARANPostError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
  VAR AUX:INTEGER;
begin
RALBARAN.ERROR:=true;
if RALBARAN.ESLINEA then
 begin
   aux := 14; // la relacion master-detail se comporta como una tabla, como tal
   // no va a entrar en los errores de lineas de presupuesto, lo que hago es controlar de donde
   // viene el error, para darlo con mas detalle, y el numero 12 corresponde a los
   // errores de linpresupuesto
   RLINEAALBARAN.ERROR := true;
   RALBARAN.ESLINEA:= false;
 end
else
 aux := 13;// corresponde a pedidos
mostrarerror(e.message,' ALBARAN ',aux);
end;
procedure TDMGS.CDSQ_MDALBARANReconcileError(DataSet: TCustomClientDataSet;
  E: EReconcileError; UpdateKind: TUpdateKind;
  var Action: TReconcileAction);
    VAR AUX:INTEGER;
begin
  if updatekind = ukdelete then
     tipoerror := true
  else
     tipoerror := false;

     RALBARAN.ERROR:=true;
if RALBARAN.ESLINEA then
 begin
   aux := 14; // la relacion master-detail se comporta como una tabla, como tal
   // no va a entrar en los errores de lineas de presupuesto, lo que hago es controlar de donde
   // viene el error, para darlo con mas detalle, y el numero 12 corresponde a los
   // errores de linpresupuesto
   RLINEAALBARAN.ERROR := true;
   RALBARAN.ESLINEA:= false;
 end
else
 aux := 13;// corresponde a pedidos
mostrarerror(e.message,' ALBARAN ',aux);
end;
procedure TDMGS.CDSQ_MDALBARANAfterApplyUpdates(Sender: TObject;
  var OwnerData: OleVariant);
begin
   IF (OWNERDATA = 1)
   AND (FMENU.DAR_AVISO='1')
   THEN
      SHOWMESSAGE('LAS EXISTENCIAS DE ESTE PRODUCTO ESTAN POR DEBAJO DE LA CANTIDAD MINIMA.');
end;

//***********************    CDSQ_MDALBARAN   ******************************//
//******************************************************************  ////
//***********************    CDSQ_MDLINEAALBARAN  **********************  ///

procedure TDMGS.CDSQ_MDLINEAALBARANAfterInsert(DataSet: TDataSet);
begin
  CDSQ_mdlineaalbaranPRECIO.asfloat := 0;
  CDsq_mdlineaalbaranCANTIDAD.asfloat := 1;

  // LUEGO LO PONGO BIEN EN EL BEFORE POST.
  CDSQ_MDLINEAALBARANIVA.ASSTRING := FMENU.IVA;
  // HAY QUE VER COMO SUMAR EL IVA DESPUES.
  CDsq_mdlineaalbaranDESCUENTO.asfloat := 0;
  CDSQ_mdlineaalbaranIMPORTE.asfloat := 0;
  CDsq_mdlineaALBARANDESCUENTOEURO.asfloat := 0;

  CDSQ_MAXIMO.CLOSE;
  CDSQ_MAXIMO.COMMANDTEXT := 'SELECT MAX(LINEA) as MAXIMO FROM LIN_ALBARAN WHERE ID_EMPRESA='+FMENU.ID_EMPRESA+' AND ID_ALBARAN='+CDSQ_MDALBARANID_ALBARAN.ASSTRING+' AND ANYO='+CDSQ_MDALBARANANYO.ASSTRING+' AND ID_SERIE='''+CDSQ_MDALBARANID_SERIE.ASSTRING+''' ';
  CDSQ_MAXIMO.Open;
  IF CDSQ_MAXIMO.Fields[0].ISNULL THEN
     CDSQ_MDLINEAALBARANLINEA.VALUE :=0
  ELSE
  CDSQ_MDLINEAALBARANLINEA.VALUE := CDSQ_MAXIMO.Fields[0].VALUE + 1;
  CDSQ_MAXIMO.CLOSE;

end;

procedure TDMGS.CDSQ_MDLINEAALBARANAfterPost(DataSet: TDataSet);
VAR AUXBOOKMARK:TBOOKMARK;
begin
  RLINEAALBARAN.ESCAPE:= TRUE;
  RLINEAALBARAN.ERROR:= FALSE;
  AUXBOOKMARK:= CDSQ_MDLINEAALBARAN.GetBookmark;
  if(CDSQ_MDLINEAALBARAN.ChangeCount >0 ) then
     CDSQ_MDLINEAALBARAN.ApplyUpdates(0);
  if RLINEAALBARAN.ERROR then
  // si el error se ha producido en la linea de PRESUPUESTO, deshago los cambios
  // que he introducido
    if ErrorNotFound then
     begin
       ErrorNotFound:= false;
       RLINEAALBARAN.ESCAPE := FALSE;// ME HACE FALTA
       RLINEAALBARAN.ESCAPECDS := FALSE;
       CDSQ_MDLINEAALBARAN.CancelUpdates;
       CDSQ_MDLINEAALBARAN.close;
       CDSQ_MDALBARAN.Close;
     end
  ELSE
  begin
       if tipoerror then // cuando da el error de que no se puede
           // borrar pq hay referencias en otras tablas.
       begin
          CDSQ_MDLINEAALBARAN.cancelupdates ;
          CDSQ_MDLINEAALBARAN.Last;// para que se situe en el
          //registro correcto
       end
       else
       begin
          CDSQ_MDLINEAALBARAN.UndoLastChange (true);
          CDSQ_MDLINEAALBARANid_ARTICULO.FocusControl;
      end;
     abort;
  end;
  CDSQ_MDLINEAALBARAN.DisableControls ;
  calcularbaseALBARAN;
  CDSQ_MDLINEAALBARAN.EnableControls ;
  CDSQ_MDALBARAN.Edit;
  CDSQ_MDALBARANbase_ALBARAN.asfloat := base_ALBARAN;
  RALBARAN.PREGUNTA := false;
  CDSQ_MDALBARAN.post;
  IF CDSQ_MDLINEAALBARAN.RecordCount > 1 THEN
      cdsq_mdLINEAALBARAN.GotoBookmark(auxbookmark);
  cdsq_mdLINEAALBARAN.FreeBookmark(auxbookmark);
end;

procedure TDMGS.CDSQ_MDLINEAALBARANBeforeCancel(DataSet: TDataSet);
begin
// EL ESCAPE CONTROLA CUANDO PULSO LA SEGUNDA VEZ ESCAPE
// ESTANDO EL DATASET EN ESTADO DE INSERCION O EDICION
// ALBARANESESCAPE LO UTILIZO A LA HORA DE HACER ABORT Y CANCEL EN UDM
// ESCAPE LO UTILIZO PARA SABER QUE HE PULSADO ESCAPE EN EL FORMULARIO

  if ((CDSQ_MDLINEAALBARAN.State in [dsedit,dsinsert]) and (RLINEAALBARAN.ESCAPE OR RLINEAALBARAN.ESCAPECDS)) then
  begin
      RLINEAALBARAN.ESCAPEENTRA:= true;
      RLINEAALBARAN.ESCAPE := true;// POR SI OCURRE UN ERROR AL HACER EL POST
      CDSQ_MDLINEAALBARAN.post;
  end;
  RLINEAALBARAN.ESCAPEENTRA:= false;
  // AL HACER ABORT ENTRA EN EL BEFORECANCEL
  // Y NO QUIERO QUE MUESTRE LA VENTANA DE INSERTAR O ACTUALIZAR
  // CONSTANTEMENTE
  RLINEAALBARAN.ESCAPE := true;
end;

procedure TDMGS.CDSQ_MDLINEAALBARANBeforeDelete(DataSet: TDataSet);
begin
// Esto es para cuando borre un pedido, que borre todas las lineas.
   if RLINEAALBARAN.PREGUNTA then
   begin
     case PedirConfirmacion('¿Confirma que desea borrar esta Linea del Albaran?',true,true,false) of
          mrno:Abort;
     end;
   end
   else
        RLINEAALBARAN.PREGUNTA := TRUE;
end;

procedure TDMGS.CDSQ_MDLINEAALBARANBeforeOpen(DataSet: TDataSet);
begin
  BorrandoLineas := false;
end;

procedure TDMGS.CDSQ_MDLINEAALBARANBeforePost(DataSet: TDataSet);
var X:INTEGER;
  DESCUENTO:CURRENCY;
begin
    if RLINEAALBARAN.PREGUNTA then // lo utilizo para modificar las lineas de
     // pedidos dentro de albaranes
    begin
      if CDSQ_mdLINEAALBARAN.state=dsinsert
      then x:=PedirConfirmacion('¿Confirma que desea dar de alta esta Linea de Albaran?',true,true,true)
      else x:=PedirConfirmacion('¿Confirma que desea modificar esta Linea de Albaran?',true,true,true);
           case x of
             mrno: begin
                    RLINEAALBARAN.ESCAPE := FALSE;// PARA CONTROLAR EN EL UDM
                    RLINEAALBARAN.ESCAPECDS:= FALSE;// PARA CONTROLAR EN EL FORMULARIO
                    CDSQ_mdLINEAALBARAN.undolastchange (true);
                    CDSQ_mdLINEAALBARAN.cancel;
                    cdsq_mdalbaran.cancel;
                    abort;
                   end;
            mrcancel:begin
                      if RLINEAALBARAN.ESCAPEENTRA then
                        CDSQ_MDLINEAALBARAN.edit;
                      cdsq_mdLINEAALBARANid_articulo.FocusControl ;
                      abort;
                     end;
           end;
      IF (CDSQ_MDLINEAALBARAN.State = DSINSERT)
      OR ((CDSQ_MDLINEAALBARAN.State = DSEDIT) AND
      (CDSQ_MDLINEAALBARANID_ARTICULO.NewValue <> CDSQ_MDLINEAALBARANID_ARTICULO.OldValue))
      AND (TRIM(CDSQ_MDLINEAALBARANID_ARTICULO.NEWVALUE)<> '')
      THEN
      BEGIN
      if  (not cdsq_mdlineaalbaranid_articulo.IsNull) then
      begin
       CDSQ_MAXIMO.CLOSE;
       CDSQ_MAXIMO.COMMANDTEXT := 'SELECT COUNT(*) as MAXIMO FROM LIN_ALBARAN WHERE ID_EMPRESA='+FMENU.ID_EMPRESA+' AND ID_ALBARAN='+CDSQ_MDLINEAALBARANID_ALBARAN.ASSTRING+' AND ANYO='+CDSQ_MDLINEAALBARANANYO.ASSTRING+' AND ID_SERIE='''+CDSQ_MDLINEAALBARANID_SERIE.ASSTRING+''' AND ID_ARTICULO='''+CDSQ_MDLINEAALBARANID_ARTICULO.NEWVALUE+''' ';
       CDSQ_MAXIMO.OPEN;
       IF NOT CDSQ_MAXIMO.Fields[0].ISNULL THEN
       IF CDSQ_MAXIMO.Fields[0].VALUE > 0 THEN
       BEGIN
          x:=PedirConfirmacion('El artículo '+ dmgs.cdsq_MDLINEAALBARANid_articulo.asstring+ ' está en mas de una línea.¿ Desea continuar?',true,true,false);
           case x of
                mrno: begin
                    if RLINEAALBARAN.ESCAPEENTRA then
                          CDSQ_MDLINEAALBARAN.edit;
                    CDSQ_MDLINEAALBARANid_articulo.FocusControl;
                    abort;
                    end;
          end;
       END;
       CDSQ_MAXIMO.CLOSE;
      end;
      END;
    end
    else
      RLINEAALBARAN.PREGUNTA := TRUE;
     RALBARAN.ESLINEA:= true;//trata la relacion maestro detalle como una tabla,
     //cuando da error, no da error en cdsmdlinpedidos, sino que lo da en
     //cdsmdpresupuesto, con lo  que tengo que saber que la llamada se ha hecho de
     // LINEAALBARAN para poder sacar un error detallado.
    RLINEAALBARAN.ESCAPE := FALSE;// ME HACE FALTA
    // AL HACER ABORT ENTRA EN EL BEFORECANCEL
    // Y NO QUIERO QUE MUESTRE LA VENTANA DE INSERTAR O ACTUALIZAR
    // CONSTANTEMENTE


    if trim(cdsq_mdlineaalbaranid_articulo.AsString) ='' then
        cdsq_mdlineaalbaranid_articulo.Clear;

    IF (CDSQ_MDLINEAALBARAN.State IN [DSEDIT,DSINSERT]) THEN
    BEGIN

    // si el iva es 0 en la linea de detalle busco el iva en
    // el articulo y le copio el iva
    // o le dejo el del general.

        DMGS.CDSQ_FLOAT.Close;
        DMGS.CDSQ_FLOAT.CommandTexT := 'SELECT PRECIO_COSTE AS R FROM ARTICULOS WHERE ID_ARTICULO='''+CDSQ_MDLINEAALBARANID_ARTICULO.AsString +''' ';
        DMGS.CDSQ_FLOAT.Open;
        IF (DMGS.CDSQ_FLOAT.RECORDCOUNT > 0 ) AND
           (NOT DMGS.CDSQ_FLOAT.Fields[0].ISNULL) THEN
           DMGS.CDSQ_MDLINEAALBARANPRECIO_COSTE.ASSTRING := DMGS.CDSQ_FLOAT.Fields[0].ASSTRING
        ELSE
           DMGS.CDSQ_MDLINEAALBARANPRECIO_COSTE.ASSTRING := '0';
// DE MOMENTO NO.
{        IF CDSQ_MDLINEAALBARANIVA.AsFloat = 0 THEN
          IF (DMGS.CDSQ_FLOAT.RECORDCOUNT > 0 ) AND
             (NOT DMGS.CDSQ_FLOAT.Fields[1].ISNULL) THEN
             DMGS.CDSQ_MDLINEAALBARANIVA.ASSTRING := DMGS.CDSQ_FLOAT.Fields[1].ASSTRING
          ELSE
             DMGS.CDSQ_MDLINEAALBARANIVA.ASSTRING := DMGS.CDSQ_MDALBARANIVA.AsString;
}
        DMGS.CDSQ_FLOAT.CLOSE;
    END;

// REVISO IMPORTE - SI LE DOY A LA FLECHA HACIA ARRIBA O HACIA ABAJO
// NO LO CALCULABA BIEN

    DESCUENTO:=0;
    if DMGS.CDSQ_MDLINEAALBARANDESCUENTOEURO.ASfloat <> 0 then
       DESCUENTO := ROUNDTO(DMGS.CDSQ_MDLINEAALBARANDESCUENTOEURO.ASfloat,DMGS.DECIMALES);
    IF CDSQ_MDLINEAALBARANDESCUENTO.AsFloat <> 0 THEN
    BEGIN
     DESCUENTO := ROUNDTO(CDSQ_MDLINEAALBARANDESCUENTO.ASfloat/100,DECIMALES);
     CDSQ_MDLINEAALBARANIMPORTE.ASfloat := ROUNDTO(CDSQ_MDLINEAALBARANCANTIDAD.ASFLOAT *CDSQ_MDLINEAALBARANPRECIO.AsCurrency* (1 - DESCUENTO),-2)  ;
    END
    ELSE
     CDSQ_MDLINEAALBARANIMPORTE.ASfloat := ROUNDTO(((CDSQ_MDLINEAALBARANCANTIDAD.ASFLOAT *CDSQ_MDLINEAALBARANPRECIO.AsCurrency)- DESCUENTO),-2)  ;

end;
procedure TDMGS.CDSQ_MDLINEAALBARANDeleteError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
 RLINEAALBARAN.ERROR := true;
 mostrarerror(e.message,' linea de albaran ',14);
end;

procedure TDMGS.CDSQ_MDLINEAALBARANReconcileError(
  DataSet: TCustomClientDataSet; E: EReconcileError;
  UpdateKind: TUpdateKind; var Action: TReconcileAction);
begin
   if updatekind = ukdelete then
     tipoerror := true
  else
     tipoerror := false;
 RLINEAALBARAN.ERROR := true;
 mostrarerror(e.message,' linea de albaran ',14);

end;

procedure TDMGS.CDSQ_MDLINEAALBARANPostError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
 RLINEAALBARAN.ERROR := true;
 mostrarerror(e.message,' linea de albaran ',14);
end;

procedure TDMGS.CDSQ_MDLINEAALBARANEditError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
 RLINEAALBARAN.ERROR := true;
 mostrarerror(e.message,' linea de albaran ',14);
end;
//***********************    CDSQ_MDLINEAALBARAN  **********************  ///
//******************************************************************  ////
//***********************    CDSQ_MDPRESUPUESTOAUX  **********************  ///

procedure TDMGS.CDSQ_MDPRESUPUESTOAUXAfterGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
  VAR AUX:INTEGER;
begin
  AUX := RPRESUPUESTOAUX.KEY;
  RPRESUPUESTOAUX.KEY := AUX + 1;
end;
procedure TDMGS.CDSQ_MDPRESUPUESTOAUXBeforeClose(DataSet: TDataSet);
begin
   INICIARLOCALES(RPRESUPUESTOAUX);
   INICIARRECORD(VPRESUPUESTOAUX);
end;

procedure TDMGS.CDSQ_MDPRESUPUESTOAUXBeforeGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
begin
  OWNERDATA:= inttostr(RPRESUPUESTOAUX.KEY) +FILTRO+ inttostr(cdsq_mdpresupuestoAUX.PacketRecords)+FILTRO;
  OWNERDATA := OWNERDATA + OBTENEROWNERDATA(VPRESUPUESTOAUX)
  //PRABGRID + FILTRO + PRABGRTIPO + FILTRO + fmenu.ID_EMPRESA + filtro+PRABGRORDEN+FILTRO+PRABGRORDENLINEA+FILTRO;
end;

procedure TDMGS.CDSQ_MDPRESUPUESTOAUXBeforeOpen(DataSet: TDataSet);
begin
 CDSQ_MDPRESUPUESTOAUX.FetchOnDemand := FALSE;
 CDSQ_MDPRESUPUESTOAUX.PacketRecords := 15;
 RPRESUPUESTOAUX.KEY :=0; // para que no coja el primero.
end;

procedure TDMGS.CDSQ_MDPRESUPUESTOAUXReconcileError(
  DataSet: TCustomClientDataSet; E: EReconcileError;
  UpdateKind: TUpdateKind; var Action: TReconcileAction);
begin
 MOSTRARERROR(E.MESSAGE,' PRESUPUESTO AUX ', -1);
end;
 //***********************    CDSQ_MDPRESUPUESTOAUX  **********************
 //******************************************************************  ////
 //******************************************************************  ////
 //***********************    CDSQ_MDFACTURA  **********************

procedure TDMGS.CDSQ_MDFACTURAAfterGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
  VAR AUX:INTEGER;
begin
  AUX := RFACTURA.KEY;
  RFACTURA.KEY := AUX + 1;
end;
procedure TDMGS.CDSQ_MDFACTURAAfterInsert(DataSet: TDataSet);
VAR AUX:INTEGER;
begin
  IF NOT RFACTURA.BUSCANDO THEN
  BEGIN
      CDSQ_MDFACTURAFECHA.AsDateTime :=  DATE;
      CDSQ_MDFACTURAANYO.VALUE := strtoint(fmenu.anyo);//YEAROF(DATE);
      CDSQ_MDFACTURADESCUENTOEURO.ASSTRING := '0';
      CDSQ_MDFACTURAID_EMPRESA.AsString := FMENU.ID_EMPRESA;
      CDSQ_MDFACTURAID_SERIE.AsString := FMENU.ID_SERIE;
      CDSQ_MDFACTURAID_CLIENTE.AsString := FMENU.CLXDEFECTO;
      CDSQ_MDFACTURAIVA.ASSTRING := FMENU.IVA;
      cdsq_MDFACTURAdescuento.asstring := '0';
      CDSQ_MDFACTURARE.asfloat := 0;
      CDSQ_MDFACTURABASE_FACTURA.asfloat := 0;
      CDSQ_MDFACTURAID_PRESUPUESTO.VALUE := 0;// LO UTILIZO PARA SABER
      // SI LA FACTURA VIENE DESDE UN PRESUPUESTO.
      CDSQ_MDFACTURAID_ALBARAN.VALUE :=0;// LO UTILIZO PARA SABER
      // SI LA FACTURA VIENE DESDE UN ALBARAN.
      CDSQ_MDFACTURAANULADO.VALUE := 0;
      CDSQ_MDFACTURACOBRADO.VALUE := 0;
      CDSQ_MDFACTURATOTAL_COBRADO.asfloat := 0;
      CDSQ_MDFACTURAIMPRESO.AsInteger := 0;
      CDSQ_MDFACTURAhora.VALUE := time();
      CDSQ_MDfacturaID_FORMA.AsString := FMENU.ID_FORMAPAGO;

  CDSQ_MAXIMO.CLOSE;
  CDSQ_MAXIMO.COMMANDTEXT := 'SELECT SIG_FACTURA as MAXIMO FROM SERIES WHERE ID_EMPRESA='+FMENU.ID_EMPRESA+' AND ID_SERIE='''+FMENU.ID_SERIE+''' AND anyo='+fmenu.anyo;//ANYO='+INTTOSTR(YEAROF(DATE))+'  ';
  CDSQ_MAXIMO.Open;
  IF CDSQ_MAXIMO.Fields[0].ISNULL THEN
     CDSQ_MDFACTURAID_FACTURA.VALUE :=0
  ELSE
  CDSQ_MDFACTURAID_FACTURA.VALUE := CDSQ_MAXIMO.Fields[0].VALUE + 1;
  CDSQ_MAXIMO.CLOSE;
      
  END;
end;
procedure TDMGS.CDSQ_MDFACTURAAfterPost(DataSet: TDataSet);
begin
 RFACTURA.ERROR:= false;
 if CDSQ_MDFACTURA.ChangeCount > 0 then
    CDSQ_MDFACTURA.ApplyUpdates(0); // permito 0 errores
 if RFACTURA.ERROR then
 begin
     if ErrorNotFound then
     begin
       ErrorNotFound:= false;
       CDSQ_MDFACTURA.CancelUpdates;
       CDSQ_MDFACTURA.CLOSE;
     end
     ELSE
     begin
       if tipoerror then // cuando da el error de que no se puede
           // borrar pq hay referencias en otras tablas.
       begin
          CDSQ_MDFACTURA.cancelupdates ;
          CDSQ_MDFACTURA.Last;// para que se situe en el
          //registro correcto
       end
       else
       begin
          CDSQ_MDFACTURA.edit;
          CDSQ_MDFACTURAid_FACTURA.FocusControl;
       END;
      abort;
     end;
 end;
 comprobarcobrado;
end;

procedure TDMGS.CDSQ_MDFACTURABeforeClose(DataSet: TDataSet);
begin
   if (CDSQ_MDFACTURA.state in [dsedit,dsinsert]) AND(NOT RFACTURA.BUSCANDO) then
      CDSQ_MDFACTURA.post;
   RFACTURA.KEY :=0;
   INICIARRECORD(VFACTURA);
end;

procedure TDMGS.CDSQ_MDFACTURABeforeGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
begin
  OWNERDATA:= inttostr(RFACTURA.KEY) +FILTRO+ inttostr(CDSQ_MDFACTURA.PacketRecords)+FILTRO;
  OWNERDATA := OWNERDATA + OBTENEROWNERDATA(VFACTURA);
end;

procedure TDMGS.CDSQ_MDFACTURABeforeOpen(DataSet: TDataSet);
begin
 CDSQ_MDFACTURA.FetchOnDemand := FALSE;
 CDSQ_MDFACTURA.PacketRecords := 15;
 RFACTURA.KEY:=0;
end;

procedure TDMGS.CDSQ_MDFACTURABeforePost(DataSet: TDataSet);
  var x:integer;
begin
     if RFACTURA.BUSCANDO then abort;
     if RFACTURA.PREGUNTA then
     begin
      if CDSQ_MDFACTURA.state=dsinsert then x:=PedirConfirmacion('¿Confirma que desea dar de alta esta FACTURA?',true,true,true)
                             else x:=PedirConfirmacion('¿Confirma que desea modificar esta FACTURA?',true,true,true);
      case x of
             mrno: begin
                  cdsq_mdFACTURA.UndoLastChange(true);
                  cdsq_mdFACTURA.cancel;
                  abort;
                  end;
         mrcancel:begin
                  cdsq_mdFACTURAid_FACTURA.FocusControl;
                  abort;
                  end;
      end;
      end
      else
          RFACTURA.PREGUNTA := true;
      IF cdsq_mdFACTURA.STATE = DSINSERT THEN
      BEGIN
            CDSQ_MAXIMO.CLOSE;
            CDSQ_MAXIMO.COMMANDTEXT := 'SELECT SIG_FACTURA as MAXIMO FROM SERIES WHERE ID_EMPRESA='+FMENU.ID_EMPRESA+' AND ID_SERIE='''+CDSQ_MDFACTURAID_SERIE.ASSTRING+''' AND anyo='+fmenu.anyo;//ANYO='+INTTOSTR(YEAROF(DATE))+'  ';
            CDSQ_MAXIMO.Open;
  IF CDSQ_MAXIMO.Fields[0].ISNULL THEN
     CDSQ_MDFACTURAID_FACTURA.VALUE :=0
  ELSE

            CDSQ_MDFACTURAID_FACTURA.VALUE := CDSQ_MAXIMO.Fields[0].VALUE + 1;
            CDSQ_MAXIMO.CLOSE;

      END;
     if trim(cdsq_mdFACTURAid_CLIENTE.AsString) ='' then
     BEGIN
       SHOWMESSAGE('EL IDENTIFICADOR DEL CLIENTE DEBE DE TENER UN VALOR');
       ABORT;
     END;
     if ( cdsq_mdFACTURAanyo.VALUE < yearof(cdSq_mdFACTURAfecha.AsDateTime )) then
     BEGIN
//    VERSION 3.0
//        SHOWMESSAGE('LA FECHA ES MAYOR QUE EL AÑO.SE INTRODUCE LA FECHA CON 31/12/'+CDSQ_MDFACTURAANYO.AsString);
        x:=PedirConfirmacion('LA FECHA ES MAYOR QUE EL AÑO.SE INTRODUCE LA FECHA CON 31/12/'+CDSQ_MDFACTURAANYO.AsString,true,true,true);
        case x of
             mryes:begin
                   CDSQ_MDFACTURAFECHA.AsString := '31/12/'+CDSQ_MDFACTURAANYO.AsString;
                  end;
             mrno: begin
                  CDSQ_MDFACTURAFECHA.AsString := DateToStr(Date);
                  end;
             mrcancel:begin
                  cdsq_mdFACTURAid_FACTURA.FocusControl;
                  abort;
                  end;
        end;
     END;
     // CONTROLO SI ESTA COBRADA Y SI SE HA COBRADO DESDE EL ALBARAN O
     // TICKET TENDRA VALOR 2.
     IF (DMGS.CDSQ_MDFACTURACOBRADOS.Value)
     and (dmgs.CDSQ_MDLINEAFACTURA.RecordCount>0)
     // controlo que tenga alguna linea antes de poner cobrado
     THEN
     BEGIN
       IF DMGS.CDSQ_MDFACTURACOBRADO.VALUE <> 2 THEN
          DMGS.CDSQ_MDFACTURACOBRADO.VALUE := 1;
     END
     ELSE
          DMGS.CDSQ_MDFACTURACOBRADO.VALUE := 0;

// ver 4.1
     if CDSQ_MDfACTURAdescTOTAL.AsFloat < -10000 then
        CDSQ_MDfACTURATOTALCOBRADO.AsFloat := 0
     else
        CDSQ_MDfACTURATOTALCOBRADO.AsFloat := CDSQ_MDfACTURAdescTOTAL.AsFloat ;

     CDSQ_MDFACTURATOTALDESCUENTO.AsFloat := CDSQ_MDFACTURATOTALDESCUENTOAUX.AsFloat ;
end;

procedure TDMGS.CDSQ_MDFACTURACalcFields(DataSet: TDataSet);
var pvpsiniva,re,total,descuento,prueba,iva,pvpsicd:double;
    fbase_factura:double;
begin

   fbase_factura := roundto(cdsq_mdfacturabase_factura.asfloat,decimalesMON);
   IF CDSQ_MDFACTURADESCUENTO.asfLOAT <> 0 THEN
       CDSQ_MDFACTURADESCTOTAL.asfloat := roundto((fBASE_FACTURA) - (fBASE_FACTURA*CDSQ_MDFACTURADESCUENTO.asfloat/100),DMGS.DECIMALESTOTAL);
   IF CDSQ_MDFACTURADESCUENTOEURO.asfLOAT <> 0 THEN
     IF (CDSQ_MDFACTURABASE_FACTURA.ASSTRING <> '0') THEN
       CDSQ_MDFACTURADESCTOTAL.asfloat := roundto((fBASE_FACTURA) - (fBASE_FACTURA*(cdsq_mdFACTURAdescuentoEURO.asfloat/CDSQ_MDFACTURABASE_FACTURA.ASFLOAT)),DMGS.DECIMALESTOTAL)
     ELSE
       CDSQ_MDFACTURADESCTOTAL.asfloat := roundto((fBASE_FACTURA) - (fBASE_FACTURA*(cdsq_mdFACTURAdescuentoEURO.asfloat/1)),DMGS.DECIMALESTOTAL);

//   CDSQ_MDFACTURADESCTOTAL.asfloat := roundto((fBASE_FACTURA) - (fBASE_FACTURA*CDSQ_MDFACTURADESCUENTO.asfloat/100),DMGS.DECIMALES);


  IF CDSQ_MDFACTURADESCUENTO.asfLOAT <> 0 THEN
     descuento := roundto(cdsq_mdFACTURAdescuento.asfloat/100,DMGS.DECIMALESDES);
  IF CDSQ_MDFACTURADESCUENTOEURO.asfLOAT <> 0 THEN
    IF (CDSQ_MDFACTURABASE_FACTURA.ASSTRING <> '0') THEN
       descuento := roundto((cdsq_mdFACTURAdescuentoEURO.asfloat/CDSQ_MDFACTURABASE_FACTURA.ASFLOAT),DMGS.DECIMALESDES)
    ELSE
       DESCUENTO := 0;

//   descuento := roundto(cdsq_mdFACTURAdescuento.asfloat/100,DMGS.DECIMALESDES);
   iva := roundto(cdsq_mdFACTURAiva.asfloat/100,DMGS.DECIMALES);
   pvpsiniva:= roundto(fbase_FACTURA,DMGS.DECIMALES);
   pvpsicd := pvpsiniva * (1-descuento);
   re := roundto(pvpsicd*cdsq_mdFACTURAre.asfloat/100,DMGS.DECIMALESDES);
   CDSQ_MDFACTURATOTALRE.AsCurrency := ROUNDTO(RE,DECIMALESDES);
   total :=roundto(pvpsicd-RE,DMGS.DECIMALESDES);
//   CDSQ_MDFACTURABPSINIVA.asfloat := pvpsiniva;




//   CDSQ_MDFACTURATOTALDESCUENTO.asfloat := ROUNDTO(PVPSINIVA * DESCUENTO,DECIMALES);
   CDSQ_MDFACTURABASE.asfloat := PVPSINIVA * ( 1 - DESCUENTO);
   CDSQ_MDFACTURATOTALIVA.asfloat := ROUNDTO(PVPSICD *IVA ,DECIMALESDES);
   cdsq_mdFACTURAdesctotal.asfloat := roundto(total+CDSQ_mDFACTURATOTALIVA.ASFLOAT,DMGS.DECIMALESTOTAL);



   IF CDSQ_MDFACTURAANULADO.value = 0 THEN CDSQ_MDFACTURAANULADOS.value := FALSE
   ELSE CDSQ_MDFACTURAANULADOS.value := TRUE;

   IF (ROUNDTO(CDSQ_MDFACTURAdesctotal.asfloat,DECIMALES) <= ROUNDTO(CDSQ_MDFACTURATOTAL_COBRADO.asfloat,DECIMALESTOTAL))
   and (ROUNDTO(cdsq_mdfacturatotal_cobrado.asfloat,DECIMALES) >= 0 )
   and (cdsq_mdlineafactura.RecordCount > 0)
   THEN CDSQ_MDFACTURACOBRADOS.value := TRUE
   ELSE CDSQ_MDFACTURACOBRADOS.value := FALSE;

   // añado esto habra que comprobarlo
   // y comprobar tambien en albaranes lineafactura.recordcount > 0
   // y en la opcion euroexecute
   
//   IF (CDSQ_MDFACTURACOBRADO.Value = 1) OR
//      (CDSQ_MDFACTURACOBRADO.Value = 2)
   IF (CDSQ_MDFACTURACOBRADO.Value = 2) // viene de ticket o albaran.
   THEN
        CDSQ_MDFACTURACOBRADOS.value := TRUE;
//   ELSE CDSQ_MDFACTURACOBRADOS.value := FALSE;


   IF CDSQ_MDFACTURAANYO.AsString <> '' THEN
       CDSQ_MDFACTURAIMPRIMIRANYO.ASSTRING := RIGHTSTR(CDSQ_MDFACTURAANYO.ASSTRING,2);


  CDSQ_MDFACTURATOTALDESCUENTOAUX.Value := 0;
  IF CDSQ_MDFACTURADESCUENTO.asfLOAT <> 0 THEN
     CDSQ_MDFACTURATOTALDESCUENTOAUX.VALUE := roundto((CDSQ_MDFACTURABASE_FACTURA.asfloat*CDSQ_MDFACTURADESCUENTO.asfloat/100),DMGS.DECIMALES);
  IF CDSQ_MDFACTURADESCUENTOEURO.asfLOAT <> 0 THEN
     CDSQ_MDFACTURATOTALDESCUENTOAUX.VALUE := roundto(CDSQ_MDFACTURADESCUENTOEURO.asfloat,DMGS.DECIMALES);




end;

procedure TDMGS.CDSQ_MDFACTURADeleteError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
  VAR AUX:INTEGER;
begin
 RFACTURA.ERROR:=true;
 if RFACTURA.ESLINEA then
 begin
   aux := 16; // la relacion master-detail se comporta como una tabla, como tal
   // no va a entrar en los errores de lineas de presupuesto, lo que hago es controlar de donde
   // viene el error, para darlo con mas detalle, y el numero 12 corresponde a los
   // errores de linpresupuesto
   RLINEAFACTURA.ERROR := true;
   RFACTURA.ESLINEA:= false;
 end
else
 aux := 15;// corresponde a pedidos
 mostrarerror(e.message,' FACTURA ',aux);
END;

procedure TDMGS.CDSQ_MDFACTURAReconcileError(DataSet: TCustomClientDataSet;
  E: EReconcileError; UpdateKind: TUpdateKind;
  var Action: TReconcileAction);
    VAR AUX:INTEGER;
BEGIN
  if updatekind = ukdelete then
     tipoerror := true
  else
     tipoerror := false;

     RFACTURA.ERROR:=true;
if RFACTURA.ESLINEA then
 begin
   aux := 16; // la relacion master-detail se comporta como una tabla, como tal
   // no va a entrar en los errores de lineas de presupuesto, lo que hago es controlar de donde
   // viene el error, para darlo con mas detalle, y el numero 12 corresponde a los
   // errores de linpresupuesto
   RLINEAFACTURA.ERROR := true;
   RFACTURA.ESLINEA:= false;
 end
else
 aux := 15;// corresponde a pedidos
mostrarerror(e.message,' FACTURA ',aux);
END;
procedure TDMGS.CDSQ_MDFACTURAEditError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
  VAR AUX:INTEGER;
begin
 RFACTURA.ERROR:=true;
 if RFACTURA.ESLINEA then
 begin
   aux := 16; // la relacion master-detail se comporta como una tabla, como tal
   // no va a entrar en los errores de lineas de presupuesto, lo que hago es controlar de donde
   // viene el error, para darlo con mas detalle, y el numero 12 corresponde a los
   // errores de linpresupuesto
   RLINEAFACTURA.ERROR := true;
   RFACTURA.ESLINEA:= false;
 end
else
 aux := 15;// corresponde a pedidos
 mostrarerror(e.message,' FACTURA ',aux);
END;

procedure TDMGS.CDSQ_MDFACTURAPostError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
  VAR AUX:INTEGER;
begin
 RFACTURA.ERROR:=true;
 if RFACTURA.ESLINEA then
 begin
   aux := 16; // la relacion master-detail se comporta como una tabla, como tal
   // no va a entrar en los errores de lineas de presupuesto, lo que hago es controlar de donde
   // viene el error, para darlo con mas detalle, y el numero 12 corresponde a los
   // errores de linpresupuesto
   RLINEAFACTURA.ERROR := true;
   RFACTURA.ESLINEA:= false;
 end
else
 aux := 15;// corresponde a pedidos
 mostrarerror(e.message,' FACTURA ',aux);
END;
procedure TDMGS.CDSQ_MDFACTURAAfterOpen(DataSet: TDataSet);
begin
 // lo he tenido que poner porque la primera factura no correspondia
 // con las lineas de detalle.
 // si ocurre con albaran,presupuesto...., lo tendre que poner.
 if cdsq_mdfactura.recordcount > 1 then
 begin
    cdsq_mdfactura.next;
    cdsq_mdfactura.prior;
 end
end;
procedure TDMGS.CDSQ_MDFACTURAAfterApplyUpdates(Sender: TObject;
  var OwnerData: OleVariant);
begin
   IF (OWNERDATA = 1)
   AND (FMENU.DAR_AVISO='1')
   THEN
      SHOWMESSAGE('LAS EXISTENCIAS DE ESTE PRODUCTO ESTAN POR DEBAJO DE LA CANTIDAD MINIMA.');
end;

 //***********************    CDSQ_MDFACTURA  **********************
 //******************************************************************  ////
 //***********************    CDSQ_MDLINEAFACTURA  **********************

procedure TDMGS.CDSQ_MDLINEAFACTURAAfterInsert(DataSet: TDataSet);
begin
   CDSQ_mdlineaFACTURAPRECIO.asfloat := 0;
  CDsq_mdlineaFACTURACANTIDAD.asfloat := 1;
  CDsq_mdlineaFACTURADESCUENTO.asfloat := 0;
  CDSQ_mdlineaFACTURAIMPORTE.asfloat := 0;
  CDSQ_MDLINEAFACTURAIVA.ASSTRING := FMENU.IVA;
  CDsq_mdlineaFACTURADESCUENTOEURO.asfloat := 0;


  CDSQ_MAXIMO.CLOSE;
  CDSQ_MAXIMO.COMMANDTEXT := 'SELECT MAX(LINEA) as MAXIMO FROM LINEAS_FACTURA WHERE ID_EMPRESA='+FMENU.ID_EMPRESA+' AND ID_FACTURA='+CDSQ_MDFACTURAID_FACTURA.ASSTRING+' AND ANYO='+CDSQ_MDFACTURAANYO.ASSTRING+' AND ID_SERIE='''+CDSQ_MDFACTURAID_SERIE.ASSTRING+''' ';
  CDSQ_MAXIMO.Open;
  IF CDSQ_MAXIMO.Fields[0].ISNULL THEN
     CDSQ_MDLINEAFACTURALINEA.VALUE :=0
  ELSE

  CDSQ_MDLINEAFACTURALINEA.VALUE := CDSQ_MAXIMO.Fields[0].VALUE + 1;
  CDSQ_MAXIMO.CLOSE;


end;

procedure TDMGS.CDSQ_MDLINEAFACTURAAfterPost(DataSet: TDataSet);
VAR AUXBOOKMARK:TBOOKMARK;
begin
  RLINEAFACTURA.ESCAPE:= TRUE;
  RLINEAFACTURA.ERROR:= FALSE;
  AUXBOOKMARK:= CDSQ_MDLINEAFACTURA.GetBookmark;
  if(CDSQ_MDLINEAFACTURA.ChangeCount >0 ) then
     CDSQ_MDLINEAFACTURA.ApplyUpdates(0);
  if RLINEAFACTURA.ERROR then
  // si el error se ha producido en la linea de PRESUPUESTO, deshago los cambios
  // que he introducido
    if ErrorNotFound then
     begin
       ErrorNotFound:= false;
       RLINEAFACTURA.ESCAPE := FALSE;// ME HACE FALTA
       RLINEAFACTURA.ESCAPECDS := FALSE;
       CDSQ_MDLINEAFACTURA.CancelUpdates;
       CDSQ_MDLINEAFACTURA.close;
       CDSQ_MDFACTURA.Close;
     end
  ELSE
  begin
       if tipoerror then // cuando da el error de que no se puede
           // borrar pq hay referencias en otras tablas.
       begin
          CDSQ_MDLINEAFACTURA.cancelupdates ;
          CDSQ_MDLINEAFACTURA.Last;// para que se situe en el
          //registro correcto
       end
       else
       begin
          CDSQ_MDLINEAFACTURA.UndoLastChange (true);
          CDSQ_MDLINEAFACTURAid_ARTICULO.FocusControl;
      end;
     abort;
  end;
  CDSQ_MDLINEAFACTURA.DisableControls ;
  calcularbaseFACTURA;
  CDSQ_MDLINEAFACTURA.ENABLECONTROLS;
  CDSQ_MDFACTURA.Edit;
  CDSQ_MDFACTURAbase_FACTURA.asfloat := base_FACTURA;
  RFACTURA.PREGUNTA := false;
  CDSQ_MDFACTURA.post;
  IF CDSQ_MDLINEAFACTURA.RecordCount > 1 THEN
      cdsq_mdLINEAFACTURA.GotoBookmark(auxbookmark);
  cdsq_mdLINEAFACTURA.FreeBookmark(auxbookmark);
end;

procedure TDMGS.CDSQ_MDLINEAFACTURABeforeCancel(DataSet: TDataSet);
begin
// EL ESCAPE CONTROLA CUANDO PULSO LA SEGUNDA VEZ ESCAPE
// ESTANDO EL DATASET EN ESTADO DE INSERCION O EDICION
// FACTURAESESCAPE LO UTILIZO A LA HORA DE HACER ABORT Y CANCEL EN UDM
// ESCAPE LO UTILIZO PARA SABER QUE HE PULSADO ESCAPE EN EL FORMULARIO
  if ((CDSQ_MDLINEAFACTURA.State in [dsedit,dsinsert]) and (RLINEAFACTURA.ESCAPE OR RLINEAFACTURA.ESCAPECDS)) then
  begin
      RLINEAFACTURA.ESCAPEENTRA:= true;
      RLINEAFACTURA.ESCAPE := true;// POR SI OCURRE UN ERROR AL HACER EL POST
      CDSQ_MDLINEAFACTURA.post;
  end;
  RLINEAFACTURA.ESCAPEENTRA:= false;
  // AL HACER ABORT ENTRA EN EL BEFORECANCEL
  // Y NO QUIERO QUE MUESTRE LA VENTANA DE INSERTAR O ACTUALIZAR
  // CONSTANTEMENTE
  RLINEAFACTURA.ESCAPE := true;
end;

procedure TDMGS.CDSQ_MDLINEAFACTURABeforeDelete(DataSet: TDataSet);
begin
// Esto es para cuando borre un pedido, que borre todas las lineas.
   if RLINEAFACTURA.PREGUNTA then
   begin
     case PedirConfirmacion('¿Confirma que desea borrar esta Linea de la FACTURA?',true,true,false) of
          mrno:Abort;
     end;
   end
   else
      RLINEAFACTURA.PREGUNTA := TRUE;
end;

procedure TDMGS.CDSQ_MDLINEAFACTURABeforeOpen(DataSet: TDataSet);
begin
  BorrandoLineas := false;
end;

procedure TDMGS.CDSQ_MDLINEAFACTURABeforePost(DataSet: TDataSet);
var X:INTEGER;
    DESCUENTO:CURRENCY;
begin
    if RLINEAFACTURA.PREGUNTA then // lo utilizo para modificar las lineas de
     // pedidos dentro de FACTURAes
    begin
      if CDSQ_mdLINEAFACTURA.state=dsinsert
      then x:=PedirConfirmacion('¿Confirma que desea dar de alta esta Linea de FACTURA?',true,true,true)
      else x:=PedirConfirmacion('¿Confirma que desea modificar esta Linea de FACTURA?',true,true,true);
           case x of
             mrno: begin
                    RLINEAFACTURA.ESCAPE := FALSE;// PARA CONTROLAR EN EL UDM
                    RLINEAFACTURA.ESCAPECDS:= FALSE;// PARA CONTROLAR EN EL FORMULARIO
                    CDSQ_mdLINEAFACTURA.undolastchange (true);
                    CDSQ_mdLINEAFACTURA.cancel;
                    cdsq_mdFACTURA.cancel;
                    abort;
                   end;
            mrcancel:begin
                      if RLINEAFACTURA.ESCAPEENTRA then
                        CDSQ_MDLINEAFACTURA.edit;
                      cdsq_mdLINEAFACTURAid_articulo.FocusControl ;
                      abort;
                     end;
           end;

           IF (CDSQ_MDLINEAFACTURA.State = DSINSERT)
           OR ((CDSQ_MDLINEAFACTURA.State = DSEDIT) AND
           (CDSQ_MDLINEAFACTURAID_ARTICULO.NewValue <> CDSQ_MDLINEAFACTURAID_ARTICULO.OldValue))
           AND (TRIM(CDSQ_MDLINEAFACTURAID_ARTICULO.NEWVALUE)<> '' )
           THEN
            BEGIN
             if  (not cdsq_mdlineafacturaid_articulo.IsNull) then
             begin
             CDSQ_MAXIMO.CLOSE;
             CDSQ_MAXIMO.COMMANDTEXT := 'SELECT COUNT(*) as MAXIMO FROM LINEAS_FACTURA WHERE ID_EMPRESA='+FMENU.ID_EMPRESA+' AND ID_FACTURA='+CDSQ_MDLINEAFACTURAID_FACTURA.ASSTRING+' AND ANYO='+CDSQ_MDLINEAFACTURAANYO.ASSTRING+' AND ID_SERIE='''+CDSQ_MDLINEAFACTURAID_SERIE.ASSTRING+''' AND ID_ARTICULO='''+CDSQ_MDLINEAFACTURAID_ARTICULO.NEWVALUE+''' ';
             CDSQ_MAXIMO.OPEN;
             IF NOT CDSQ_MAXIMO.Fields[0].ISNULL THEN
             IF CDSQ_MAXIMO.Fields[0].VALUE > 0 THEN
             BEGIN
                x:=PedirConfirmacion('El artículo '+ dmgs.cdsq_MDLINEAFACTURAid_articulo.asstring+ ' está en mas de una línea.¿ Desea continuar?',true,true,false);
                 case x of
                      mrno: begin
                          if RLINEAFACTURA.ESCAPEENTRA then
                                CDSQ_MDLINEAFACTURA.edit;
                          CDSQ_MDLINEAFACTURAid_articulo.FocusControl;
                          abort;
                          end;
                end;
             END;
             CDSQ_MAXIMO.CLOSE;
            end;
            END;
    end
    else
      RLINEAFACTURA.PREGUNTA := TRUE;
     RFACTURA.ESLINEA:= true;//trata la relacion maestro detalle como una tabla,
     //cuando da error, no da error en cdsmdlinpedidos, sino que lo da en
     //cdsmdpresupuesto, con lo  que tengo que saber que la llamada se ha hecho de
     // LINEAFACTURA para poder sacar un error detallado.
    RLINEAFACTURA.ESCAPE := FALSE;// ME HACE FALTA
    // AL HACER ABORT ENTRA EN EL BEFORECANCEL
    // Y NO QUIERO QUE MUESTRE LA VENTANA DE INSERTAR O ACTUALIZAR
    // CONSTANTEMENTE

    if trim(cdsq_mdlineafacturaid_articulo.AsString) ='' then
       cdsq_mdlineafacturaid_articulo.Clear;

    IF (CDSQ_MDLINEAFACTURA.State IN [DSEDIT,DSINSERT]) THEN
    BEGIN
        DMGS.CDSQ_FLOAT.Close;
        DMGS.CDSQ_FLOAT.CommandTexT := 'SELECT PRECIO_COSTE AS R FROM ARTICULOS WHERE ID_ARTICULO='''+CDSQ_MDLINEAFACTURAID_ARTICULO.AsString +''' ';
        DMGS.CDSQ_FLOAT.Open;
        IF (DMGS.CDSQ_FLOAT.RECORDCOUNT > 0 ) AND
           (NOT DMGS.CDSQ_FLOAT.Fields[0].ISNULL) THEN
           DMGS.CDSQ_MDLINEAFACTURAPRECIO_COSTE.ASSTRING := DMGS.CDSQ_FLOAT.Fields[0].ASSTRING
        ELSE
           DMGS.CDSQ_MDLINEAFACTURAPRECIO_COSTE.ASSTRING := '0';
        DMGS.CDSQ_FLOAT.CLOSE;
    END;

// REVISO IMPORTE - SI LE DOY A LA FLECHA HACIA ARRIBA O HACIA ABAJO
// NO LO CALCULABA BIEN

    DESCUENTO:=0;
    if DMGS.CDSQ_MDLINEAFACTURADESCUENTOEURO.ASfloat <> 0 then
       DESCUENTO := ROUNDTO(DMGS.CDSQ_MDLINEAFACTURADESCUENTOEURO.ASfloat,DMGS.DECIMALES);
    IF CDSQ_MDLINEAFACTURADESCUENTO.AsFloat <> 0 THEN
    BEGIN
      DESCUENTO := ROUNDTO(CDSQ_MDLINEAFACTURADESCUENTO.ASfloat/100,DECIMALES);
      CDSQ_MDLINEAFACTURAIMPORTE.ASfloat := ROUNDTO(CDSQ_MDLINEAFACTURACANTIDAD.ASFLOAT *CDSQ_MDLINEAFACTURAPRECIO.AsCurrency* (1 - DESCUENTO),-2)  ;
    END
    ELSE
      CDSQ_MDLINEAFACTURAIMPORTE.ASfloat := ROUNDTO(((CDSQ_MDLINEAFACTURACANTIDAD.ASFLOAT *CDSQ_MDLINEAFACTURAPRECIO.AsCurrency) - DESCUENTO),-2)  ;

end;
procedure TDMGS.CDSQ_MDLINEAFACTURADeleteError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
  RLINEAFACTURA.ERROR := true;
  mostrarerror(e.message,' linea de FACTURA ',16);
end;

procedure TDMGS.CDSQ_MDLINEAFACTURAReconcileError(
  DataSet: TCustomClientDataSet; E: EReconcileError;
  UpdateKind: TUpdateKind; var Action: TReconcileAction);
begin
   if updatekind = ukdelete then
     tipoerror := true
  else
     tipoerror := false;
 RLINEAFACTURA.ERROR := true;
 mostrarerror(e.message,' linea de FACTURA ',16);
end;

procedure TDMGS.CDSQ_MDLINEAFACTURAEditError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
  RLINEAFACTURA.ERROR := true;
  mostrarerror(e.message,' linea de FACTURA ',16);
end;

procedure TDMGS.CDSQ_MDLINEAFACTURAPostError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
  RLINEAFACTURA.ERROR := true;
  mostrarerror(e.message,' linea de FACTURA ',16);
end;
 //***********************    CDSQ_MDLINEAFACTURA  **********************
 //******************************************************************  ////
 //***********************    CDSQ_MDALBARANAUX  **********************


procedure TDMGS.CDSQ_MDALBARANAUXAfterGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
  VAR AUX:INTEGER;
begin
  AUX := RALBARANAUX.KEY;
  RALBARANAUX.KEY := AUX + 1;
end;
procedure TDMGS.CDSQ_MDALBARANAUXBeforeClose(DataSet: TDataSet);
begin
   RALBARANAUX.KEY :=0;
   INICIARRECORD(VALBARANAUX);
end;

procedure TDMGS.CDSQ_MDALBARANAUXBeforeGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
begin
  OWNERDATA:= inttostr(RALBARANAUX.KEY) +FILTRO+ inttostr(cdsq_mdALBARANAUX.PacketRecords)+FILTRO;
  OWNERDATA := OWNERDATA + OBTENEROWNERDATA(VALBARANAUX)
end;

procedure TDMGS.CDSQ_MDALBARANAUXBeforeOpen(DataSet: TDataSet);
begin
 CDSQ_MDALBARANAUX.FetchOnDemand := FALSE;
 CDSQ_MDALBARANAUX.PacketRecords := 15;
 RALBARANAUX.KEY:=0;
end;

procedure TDMGS.CDSQ_MDALBARANAUXReconcileError(
  DataSet: TCustomClientDataSet; E: EReconcileError;
  UpdateKind: TUpdateKind; var Action: TReconcileAction);
begin
 MOSTRARERROR(E.MESSAGE,' ALBARAN AUX ', -1);
end;

procedure TDMGS.CDSQ_MDALBARANAUXCalcFields(DataSet: TDataSet);
var pvpsiniva,re,total,descuento,prueba,iva,pvpsicd:double;
    FBASE_ALBARAN:DOUBLE;
begin
{   FBASE_ALBARAN:= ROUNDTO(CDSQ_MDALBARANAUXBASE_ALBARAN.asfloat,DECIMALESMON);
  IF CDSQ_MDALBARANAUXDESCUENTO.asfLOAT <> 0 THEN
     descuento := roundto(cdsq_mdALBARANAUXdescuento.asfloat/100,DMGS.DECIMALESDES);
  IF CDSQ_MDALBARANAUXDESCUENTOEURO.asfLOAT <> 0 THEN
    IF (CDSQ_MDALBARANAUXBASE_ALBARAN.ASSTRING <> '0') THEN
      descuento := roundto((cdsq_mdALBARANAUXdescuentoEURO.asfloat/CDSQ_MDALBARANAUXBASE_ALBARAN.ASFLOAT),DMGS.DECIMALESDES)
    ELSE
      DESCUENTO := 0;
   iva := roundto(cdsq_mdALBARANAUXiva.asfloat/100,DMGS.DECIMALES);
   pvpsiniva:= roundto(Fbase_ALBARAN/(1+iva),DMGS.DECIMALESDES);
   pvpsicd := pvpsiniva * (1);//-descuento);
   re := roundto(pvpsicd*cdsq_mdALBARANAUXre.asfloat/100,DMGS.DECIMALESDES);
   CDSQ_MDALBARANAUXTOTALRE.AsCurrency  := ROUNDTO(RE,DECIMALESDES);
   total :=roundto(pvpsicd- re,DMGS.DECIMALESDES);

   IF IVA<> 0 THEN
       CDSQ_MDALBARANAUXTOTALIVA.asfloat := ROUNDTO(PVPSICD*IVA,DECIMALESDES);
//  LO DEJO PREPARADO, PERO COMO NO PONGO LA BASE DE MOMENTO NO LO USO
//   CDSQ_MDALBARANBASE.asfloat :=
   IF NOT CDSQ_MDALBARANAUXTOTALDESCUENTO.ISNULL THEN
     cdsq_mdALBARANAUXdesctotal.asfloat := roundto(total + CDSQ_MDALBARANAUXTOTALIVA.AsFloat- CDSQ_MDALBARANAUXTOTALDESCUENTO.AsFloat ,DMGS.DECIMALES)
   ELSE
     cdsq_mdALBARANAUXdesctotal.asfloat := roundto(total + CDSQ_MDALBARANAUXTOTALIVA.AsFloat,DMGS.DECIMALES);
}  CDSQ_MDALBARANAUXTOTALIVA.AsFloat := (CDSQ_MDALBARANAUXTOTALCOBRADO.ASFLOAT / (1+CDSQ_MDALBARANAUXIVA.ASFLOAT/100))* CDSQ_MDALBARANAUXIVA.ASFLOAT/100;
   CDSQ_MDALBARANAUXRESTO.asfloat := CDSQ_MDALBARANAUXTOTALCOBRADO.asfloat - CDSQ_MDALBARANAUXTOTAL_COBRADO.asfloat ;
// QUITO ESTO PARA QUE ME DE LO COBRADO Y EL RESTO IGUAL AL IMPORTE
//   IF CDSQ_mDALBARANAUXRESTO.asfloat <0 THEN
//      CDSQ_MDALBARANAUXRESTO.asfloat := - CDSQ_MDALBARANAUXRESTO.asfloat;
//      CDSQ_MDALBARANAUXRESTO.asfloat := 0;

//   IF (fBASE <= CDSQ_MDALBARANAUXTOTAL_COBRADO.asfloat)
//   and (cdsq_mdALBARANAUXtotal_cobrado.asfloat > 0 )
   IF (CDSQ_MDALBARANAUXCOBRADO.Value = 1) OR
   (CDSQ_MDALBARANAUXCOBRADO.Value = 2)
   THEN CDSQ_MDALBARANAUXCOBRADOS.value := TRUE
   ELSE CDSQ_MDALBARANAUXCOBRADOS.value := FALSE;

   IF NOT (CDSQ_MDALBARANAUX.State IN  [DSEDIT,DSINSERT] ) THEN
    WITH CDSQ_MAXIMO DO
     BEGIN
       CLOSE;                                          // VER 3.0 FACTURAS POR FACTURASALBARANES
       COMMANDTEXT := ' SELECT COUNT(*) AS MAXIMO FROM FACTURASALBARANES WHERE ID_ALBARAN='+DMGS.CDSQ_MDALBARANAUXID_ALBARAN.ASSTRING+' AND ALBID_EMPRESA= ' + DMGS.CDSQ_MDALBARANAUXID_EMPRESA.AsString +' AND ALBANYO='+DMGS.CDSQ_MDALBARANAUXANYO.AsString+'  AND ALBID_SERIE='''+DMGS.CDSQ_MDALBARANAUXID_SERIE.ASSTRING+''' ';
       OPEN;
       IF DMGS.CDSQ_MAXIMO.Fields[0].VALUE>0 THEN
          CDSQ_MDALBARANAUXFACTURADO.value  := 'SI' 
       ELSE
          CDSQ_MDALBARANAUXFACTURADO.value := 'NO';
       CLOSE;
    END;
end;

 //***********************    CDSQ_MDALBARANAUX  **********************
 //******************************************************************  ////

procedure TDMGS.DCOMConnection1AfterConnect(Sender: TObject);
begin
{ // SE ENCARGA DE DAR EL NUMERO DE TRANSACTION.
 IF FMENU.TRANSACTION = -1 THEN
 BEGIN
     CDSQ_PRUEBA.Open;
     CDSQ_PRUEBA.CLOSE;
 END;
}
end;
 //******************************************************************  ////
 //***********************    CDSQ_FORMAPAGO  **********************

procedure TDMGS.CDSQ_FORMAPAGOAfterGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
  var aux:integer;
begin
  aux:= RFORMAPAGO.KEY;
  RFORMAPAGO.KEY :=  aux + 1;
END;

procedure TDMGS.CDSQ_FORMAPAGOAfterPost(DataSet: TDataSet);
begin
 RFORMAPAGO.ERROR:= false;
 if CDSQ_FORMAPAGO.ChangeCount > 0 then
  CDSQ_FORMAPAGO.ApplyUpdates(0); // permito 0 errores
 if RFORMAPAGO.ERROR then
 begin
     if ErrorNotFound then
     begin
       ErrorNotFound:= false;
       CDSQ_FORMAPAGO.CancelUpdates;
       CDSQ_FORMAPAGO.CLOSE;
     end
     ELSE
     begin
       if tipoerror then // cuando da el error de que no se puede
           // borrar pq hay referencias en otras tablas.
       begin
          CDSQ_FORMAPAGO.cancelupdates ;
          CDSQ_FORMAPAGO.Last;// para que se situe en el
          //registro correcto
       end
       else
       begin
         CDSQ_FORMAPAGO.edit;
         CDSQ_FORMAPAGOID_FORMA.FocusControl;
       end;
      abort;
     end;
 end;
end;

procedure TDMGS.CDSQ_FORMAPAGOBeforeClose(DataSet: TDataSet);
begin
   if CDSQ_FORMAPAGO.state in [dsedit,dsinsert] then
      CDSQ_FORMAPAGO.post;
   INICIARLOCALES(RFORMAPAGO);
   INICIARRECORD(VFORMAPAGO)
end;

procedure TDMGS.CDSQ_FORMAPAGOBeforeDelete(DataSet: TDataSet);
begin
   case PedirConfirmacion('¿Confirma que desea borrar esta Forma de Pago?',true,true,false) of
        mrno:Abort;
   end;
end;

procedure TDMGS.CDSQ_FORMAPAGOBeforeGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
begin
  OWNERDATA:= inttostr(RFORMAPAGO.KEY) +FILTRO+ inttostr(cdsq_formapago.PacketRecords)+FILTRO;
  OWNERDATA := OWNERDATA + OBTENEROWNERDATA (VFORMAPAGO);
end;

procedure TDMGS.CDSQ_FORMAPAGOBeforeOpen(DataSet: TDataSet);
begin
 cdsq_formapago.FetchOnDemand := FALSE;
 cdsq_formapago.PacketRecords := 20;
 RFORMAPAGO.KEY :=0; // para que no coja el primero.
end;

procedure TDMGS.CDSQ_FORMAPAGOBeforePost(DataSet: TDataSet);
var x:integer;
begin
    if cdsq_formapago.state=dsinsert then x:=PedirConfirmacion('¿Confirma que desea dar de alta esta Forma de Pago?',true,true,true)
                                     else x:=PedirConfirmacion('¿Confirma que desea modificar esta Forma de Pago?',true,true,true);
    case x of
        mrno: begin
                 cdsq_formapago.UndoLastChange(TRUE);
                 cdsq_formapago.cancel;
                 abort;
              end;
        mrcancel:BEGIN
                  cdsq_formapagoid_forma.FocusControl ;
                  abort;
                 END;

    end;
end;
procedure TDMGS.CDSQ_FORMAPAGODeleteError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
  RFORMAPAGO.ERROR :=true;
  mostrarError(e.message,' FORMA DE PAGO ', 17);
end;

procedure TDMGS.CDSQ_FORMAPAGOReconcileError(DataSet: TCustomClientDataSet;
  E: EReconcileError; UpdateKind: TUpdateKind;
  var Action: TReconcileAction);
begin
  if updatekind = ukdelete then
     tipoerror := true
  else
     tipoerror := false;
  RFORMAPAGO.ERROR :=true;
  mostrarError(e.message,' FORMA DE PAGO ', 17);
end;

procedure TDMGS.CDSQ_FORMAPAGOEditError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
  RFORMAPAGO.ERROR :=true;
  mostrarError(e.message,' FORMA DE PAGO ', 17);
end;

procedure TDMGS.CDSQ_FORMAPAGOPostError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
  RFORMAPAGO.ERROR :=true;
  mostrarError(e.message,' FORMA DE PAGO ', 17);
end;

 //***********************    CDSQ_FORMAPAGO  **********************
 //******************************************************************  ////
 //***********************    CDSQ_FORMAPAGOAUX  **********************

procedure TDMGS.CDSQ_FORMAPAGOAUXAfterGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
  var aux:integer;
begin
  aux:= RFORMAPAGOAUX.KEY;
  RFORMAPAGOAUX.KEY := aux + 1;
END;

procedure TDMGS.CDSQ_FORMAPAGOAUXBeforeClose(DataSet: TDataSet);
begin
   INICIARLOCALES(RFORMAPAGOAUX);
   INICIARRECORD(VFORMAPAGOAUX);
end;

procedure TDMGS.CDSQ_FORMAPAGOAUXBeforeGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
begin
  OWNERDATA:= inttostr(RFORMAPAGOAUX.KEY) +FILTRO+ inttostr(cdsq_formapagoAUX.PacketRecords)+FILTRO;
  OWNERDATA := OWNERDATA + OBTENEROWNERDATA(VFORMAPAGOAUX)
end;

procedure TDMGS.CDSQ_FORMAPAGOAUXBeforeOpen(DataSet: TDataSet);
begin
 CDSQ_FORMAPAGOAUX.FetchOnDemand := FALSE;
 CDSQ_FORMAPAGOAUX.PacketRecords := 20;
 RFORMAPAGOAUX.KEY :=0; // para que no coja el primero.
end;

procedure TDMGS.CDSQ_FORMAPAGOAUXReconcileError(
  DataSet: TCustomClientDataSet; E: EReconcileError;
  UpdateKind: TUpdateKind; var Action: TReconcileAction);
begin
  MOSTRARERROR(E.MESSAGE,' FORMA PAGO AUX ',-1);
end;

 //***********************    CDSQ_FORMAPAGOAUX  **********************
 //******************************************************************  ////
 //***********************    CDSQ_MDCOBRO  **********************

procedure TDMGS.CDSQ_MDCOBROAfterGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
  VAR AUX:INTEGER;
begin
  AUX := RCOBRO.KEY;
  RCOBRO.KEY := AUX + 1;
end;

procedure TDMGS.CDSQ_MDCOBROAfterInsert(DataSet: TDataSet);
VAR AUX:INTEGER;
begin
  IF NOT RCOBRO.BUSCANDO  THEN
  BEGIN
      CDSQ_MDCOBROANYO.asfloat := strtoint(fmenu.anyo);//YEAROF(DATE);
      CDSQ_MDCOBROID_EMPRESA.AsString := FMENU.ID_EMPRESA;
      CDSQ_MDCOBROID_SERIE.ASSTRING := FMENU.ID_SERIE;
      CDSQ_MDCOBROID_CLIENTE.AsString := FMENU.CLXDEFECTO;
      CDSQ_MDCOBROTOTAL_COBRADO.asfloat := 0;
      CDSQ_MDCOBROCOBRADO.value := 'SIN COBRAR';
      CDSQ_MDCOBROBASE.asfloat := 0;
  CDSQ_MAXIMO.CLOSE;
  CDSQ_MAXIMO.COMMANDTEXT := 'SELECT ID_COBRO as MAXIMO FROM OPCIONESNUMERICAS WHERE ID_EMPRESA='+FMENU.ID_EMPRESA +' AND ANYO='+FMENU.ANYO ;
  CDSQ_MAXIMO.Open;
  IF CDSQ_MAXIMO.Fields[0].ISNULL THEN
     CDSQ_MDCOBROID_COBRO.VALUE :=0
  ELSE

  CDSQ_MDCOBROID_COBRO.VALUE := CDSQ_MAXIMO.Fields[0].VALUE + 1;
  CDSQ_MAXIMO.CLOSE;
  END;


  
end;

procedure TDMGS.CDSQ_MDCOBROAfterPost(DataSet: TDataSet);
begin
 RCOBRO.ERROR:= false;
 if CDSQ_MDCOBRO.ChangeCount > 0 then
    CDSQ_MDCOBRO.ApplyUpdates(0); // permito 0 errores
 if RCOBRO.ERROR then
 begin
     if ErrorNotFound then
     begin
       ErrorNotFound:= false;
       CDSQ_MDCOBRO.CancelUpdates;
       CDSQ_MDCOBRO.CLOSE;
     end
     ELSE
     begin
       if tipoerror then // cuando da el error de que no se puede
           // borrar pq hay referencias en otras tablas.
       begin
          CDSQ_MDCOBRO.cancelupdates ;
          CDSQ_MDCOBRO.Last;// para que se situe en el
          //registro correcto
       end
       else
       begin
          CDSQ_MDCOBRO.edit;
          CDSQ_MDCOBROID_COBRO.FocusControl;
       END;
      abort;
     end;
 end;
end;

procedure TDMGS.CDSQ_MDCOBROBeforeClose(DataSet: TDataSet);
begin
   if (CDSQ_MDCOBRO.state in [dsedit,dsinsert]) AND(NOT RCOBRO.BUSCANDO) then
      CDSQ_MDCOBRO.post;
   RCOBRO.KEY :=0;
   INICIARRECORD(VCOBRO);
end;

procedure TDMGS.CDSQ_MDCOBROBeforeGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
begin
  OWNERDATA:= inttostr(RCOBRO.KEY) +FILTRO+ inttostr(cdsq_mdCOBRO.PacketRecords)+FILTRO;
  OWNERDATA := OWNERDATA + OBTENEROWNERDATA(VCOBRO);
end;

procedure TDMGS.CDSQ_MDCOBROBeforeOpen(DataSet: TDataSet);
begin
 CDSQ_MDCOBRO.FetchOnDemand := FALSE;
 CDSQ_MDCOBRO.PacketRecords := 15;
 RCOBRO.KEY:=0;
end;

procedure TDMGS.CDSQ_MDCOBROBeforePost(DataSet: TDataSet);
  var x:integer;
begin
     if RCOBRO.BUSCANDO then abort;
     if RCOBRO.PREGUNTA  then
     begin
      if CDSQ_MDCOBRO.state=dsinsert then x:=PedirConfirmacion('¿Confirma que desea dar de alta este COBRO?',true,true,true)
                             else x:=PedirConfirmacion('¿Confirma que desea modificar este COBRO?',true,true,true);
      case x of
             mrno: begin
                  cdsq_mdCOBRO.UndoLastChange(true);
                  cdsq_mdCOBRO.cancel;
                  abort;
                  end;
         mrcancel:begin
                  cdsq_mdCOBROid_COBRO.FocusControl;
                  abort;
                  end;
      end;
      IF cdsq_mdCOBRO.STATE = DSINSERT THEN
      BEGIN
            CDSQ_MAXIMO.CLOSE;
            CDSQ_MAXIMO.COMMANDTEXT := 'SELECT ID_COBRO as MAXIMO FROM OPCIONESNUMERICAS WHERE ID_EMPRESA='+FMENU.ID_EMPRESA+' AND ANYO='+FMENU.ANYO;
            CDSQ_MAXIMO.Open;
  IF CDSQ_MAXIMO.Fields[0].ISNULL THEN
     CDSQ_MDCOBROID_COBRO.VALUE :=0
  ELSE

            CDSQ_MDCOBROID_COBRO.VALUE := CDSQ_MAXIMO.Fields[0].VALUE + 1;
            CDSQ_MAXIMO.CLOSE;

      END
     END
     ELSE
       RCOBRO.PREGUNTA := TRUE;
     if trim(cdsq_mdCOBROid_CLIENTE.AsString) ='' then
     BEGIN
        SHOWMESSAGE('EL IDENTIFICADOR DE CLIENTE DEBE DE TENER UN VALOR');
        ABORT;
     END;
end;

procedure TDMGS.CDSQ_MDCOBROReconcileError(DataSet: TCustomClientDataSet;
  E: EReconcileError; UpdateKind: TUpdateKind;
  var Action: TReconcileAction);
  var aux:integer;
begin
  if updatekind = ukdelete then
     tipoerror := true
  else
     tipoerror := false;

     RCOBRO.ERROR :=true;
if RCOBRO.ESLINEA then
 begin
   aux := 19; // la relacion master-detail se comporta como una tabla, como tal
   // no va a entrar en los errores de lineas de presupuesto, lo que hago es controlar de donde
   // viene el error, para darlo con mas detalle, y el numero 12 corresponde a los
   // errores de linpresupuesto
   RLINEACOBRO.ERROR := true;
   RCOBRO.ESLINEA:= false;
 end
else
 aux := 18;// corresponde a pedidos
mostrarerror(e.message,' COBRO ',aux);
end;

procedure TDMGS.CDSQ_MDCOBRODeleteError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
    var aux:integer;
begin
 if RCOBRO.ESLINEA then
 begin
   aux := 19; // la relacion master-detail se comporta como una tabla, como tal
   // no va a entrar en los errores de lineas de presupuesto, lo que hago es controlar de donde
   // viene el error, para darlo con mas detalle, y el numero 12 corresponde a los
   // errores de linpresupuesto
   RLINEACOBRO.ERROR := true;
   RCOBRO.ESLINEA:= false;
 end
else
 aux := 18;// corresponde a pedidos
mostrarerror(e.message,' COBRO ',aux);

end;

procedure TDMGS.CDSQ_MDCOBROEditError(DataSet: TDataSet; E: EDatabaseError;
  var Action: TDataAction);
  var aux:integer;
begin
if RCOBRO.ESLINEA then
 begin
   aux := 19; // la relacion master-detail se comporta como una tabla, como tal
   // no va a entrar en los errores de lineas de presupuesto, lo que hago es controlar de donde
   // viene el error, para darlo con mas detalle, y el numero 12 corresponde a los
   // errores de linpresupuesto
   RLINEACOBRO.ERROR := true;
   RCOBRO.ESLINEA:= false;
 end
else
 aux := 18;// corresponde a pedidos
mostrarerror(e.message,' COBRO ',aux);

end;

procedure TDMGS.CDSQ_MDCOBROPostError(DataSet: TDataSet; E: EDatabaseError;
  var Action: TDataAction);
    var aux:integer;
begin
if RCOBRO.ESLINEA then
 begin
   aux := 19; // la relacion master-detail se comporta como una tabla, como tal
   // no va a entrar en los errores de lineas de presupuesto, lo que hago es controlar de donde
   // viene el error, para darlo con mas detalle, y el numero 12 corresponde a los
   // errores de linpresupuesto
   RLINEACOBRO.ERROR := true;
   RCOBRO.ESLINEA:= false;
 end
else
 aux := 18;// corresponde a pedidos
mostrarerror(e.message,' COBRO ',aux);
end;

procedure TDMGS.CDSQ_MDCOBROCalcFields(DataSet: TDataSet);
var fbase:double;
begin
     fbase:=roundto(cdsq_mdcobrobase.asfloat,decimalesMON);
     CDSQ_MDCOBRORESTO.asfloat := fBASE - CDSQ_MDCOBROTOTAL_COBRADO.asfloat;
     IF (CDSQ_MDCOBROTOTAL_COBRADO.asfloat >= fBASE)
     and (cdsq_mdcobrototal_cobrado.asfloat > 0 )
     THEN
        CDSQ_MDCOBROCOBRADO.ASSTRING := 'COBRADO'
     ELSE
         IF CDSQ_MDCOBROTOTAL_COBRADO.asfloat > 0  THEN
            CDSQ_MDCOBROCOBRADO.ASSTRING:= 'COBRADO PARTE'
         ELSE
            CDSQ_MDCOBROCOBRADO.ASSTRING:= 'SIN COBRAR';
end;


 //***********************    CDSQ_MDCOBRO  **********************
  //******************************************************************  ////
 //***********************    CDSQ_MDLINEACOBRO  **********************

procedure TDMGS.CDSQ_MDLINEACOBROAfterInsert(DataSet: TDataSet);
begin
  CDSQ_mdlineacoBROfecha.AsDateTime := date;
  CDSQ_mdlineacoBROHORA.AsDateTime := TIME;
  CDSQ_mdlineacoBROID_FORMA.ASSTRING := FMENU.ID_FORMAPAGO;    
  CDsq_mdlineacoBROCANTIDAD.asfloat := 0;
  cdsq_mdlineacobroid_empresa.VALUE := cdsq_mdcobroid_empresa.VALUE;
  if cdsq_mdlineacobro.RecordCount = 0 then
     cdsq_mdlineacobronum_linea.VALUE := 1
  else
  begin
       CDSQ_MAXIMO.CLOSE;
       CDSQ_MAXIMO.CommandText := 'SELECT MAX(NUM_LINEA) AS MAXIMO FROM  LINEAS_COBRO WHERE ID_COBRO =' +CDSQ_MDCOBROID_COBRO.ASSTRING+' AND ANYO ='+CDSQ_MDCOBROANYO.ASSTRING+' AND ID_EMPRESA='+CDSQ_MDCOBROID_EMPRESA.AsString ;
       CDSQ_MAXIMO.OPEN;
  IF CDSQ_MAXIMO.Fields[0].ISNULL THEN
     CDSQ_MDLINEACOBRONUM_LINEA.VALUE :=0
  ELSE

       CDSQ_MDLINEACOBRONUM_LINEA.VALUE := CDSQ_MAXIMO.Fields[0].VALUE + 1 ;
       CDSQ_MAXIMO.CLOSE;
  end;
end;
procedure TDMGS.CDSQ_MDLINEACOBROAfterPost(DataSet: TDataSet);
VAR AUXBOOKMARK:TBOOKMARK;
begin

  RLINEACOBRO.ESCAPE:= TRUE;
  RLINEACOBRO.ERROR:= FALSE;
  AUXBOOKMARK:= CDSQ_MDLINEACOBRO.GetBookmark;
  if(CDSQ_MDLINEACOBRO.ChangeCount >0 ) then
     CDSQ_MDLINEACOBRO.ApplyUpdates(0);
  if RLINEACOBRO.ERROR then
  // si el error se ha producido en la linea de PRESUPUESTO, deshago los cambios
  // que he introducido
    if ErrorNotFound then
     begin
       ErrorNotFound:= false;
       RLINEACOBRO.ESCAPE := FALSE;// ME HACE FALTA
       RLINEACOBRO.ESCAPECDS := FALSE;
       CDSQ_MDLINEACOBRO.CancelUpdates;
       CDSQ_MDLINEACOBRO.close;
       CDSQ_MDCOBRO.Close;
     end
  ELSE
  begin
       if tipoerror then // cuando da el error de que no se puede
           // borrar pq hay referencias en otras tablas.
       begin
          CDSQ_MDLINEACOBRO.cancelupdates ;
          CDSQ_MDLINEACOBRO.Last;// para que se situe en el
          //registro correcto
       end
       else
       begin
          CDSQ_MDLINEACOBRO.UndoLastChange (true);
          CDSQ_MDLINEACOBRONUM_LINEA.FocusControl;
      end;
     abort;
  end;
  CDSQ_MDLINEACOBRO.DisableControls ;
  calcularbaseCOBRO;
  CDSQ_MDLINEACOBRO.EnableControls ;
  CDSQ_MDCOBRO.Edit;
//  CDSQ_MDCOBRO.UpdateRecord;
  CDSQ_MDCOBROTOTAL_COBRADO.asfloat := base_COBRO;
  RCOBRO.PREGUNTA := false;
  CDSQ_MDCOBRO.post;
  IF CDSQ_MDLINEACOBRO.RecordCount > 1 THEN
     cdsq_mdLINEACOBRO.GotoBookmark(auxbookmark);
  cdsq_mdLINEACOBRO.FreeBookmark(auxbookmark);
  if cdsq_mdcobrotipo.AsString = 'ALBARAN' THEN
  BEGIN
   IF CDSQ_MDALBARAN.Active
   AND (TRIM(CDSQ_MDCOBROID.ASSTRING) <> '') THEN
   BEGIN
     IF CDSQ_mDALBARAN.Locate('ID_ALBARAN;ANYO;ID_EMPRESA;ID_SERIE',VARARRAYOF([CDSQ_MDCOBROID.asfloat,CDSQ_MDCOBROANYO.ASSTRING,CDSQ_MDCOBROID_EMPRESA.ASSTRING,CDSQ_MDCOBROID_SERIE.ASSTRING]),[loCaseInsensitive])
      THEN
      BEGIN
         CDSQ_MDALBARAN.Edit;
         CDSQ_MDALBARANTOTAL_COBRADO.asfloat := BASE_COBRO;
         RALBARAN.PREGUNTA := FALSE;
         CDSQ_MDALBARAN.Post;
      END;
  end
  ELSE
     IF (CDSQ_MDCOBROID.ASSTRING <> '') THEN
     BEGIN
         TRANSACTIONACTUALIZAR :=10;
          WITH CDSQ_ACTUALIZAR DO
          BEGIN
                COMMANDTEXT := 'UPDATE ALBARANES A SET TOTAL_COBRADO='+FLOATTOSTR(BASE_COBRo)+' ';
                COMMANDTEXT := COMMANDTEXT + ' WHERE ID_EMPRESA='+DMGS.CDSQ_MDCOBROID_EMPRESA.ASSTRING+' AND ANYO ='+ DMGS.CDSQ_MDCOBROANYO.ASSTRING + ' AND ID_ALBARAN='+DMGS.CDSQ_MDCOBROID.ASSTRING+' AND ID_SERIE='''+DMGS.CDSQ_MDCOBROID_SERIE.ASSTRING+''' ' ;
                try
                  Execute;
                except
                  showmessage('Error No se ha podido actualizar en ALBARANES el total cobrado.');
                  transactionACTUALIZAR:=-1; // CON ESTO HAGO QUE EL SERVER
                   // HAGA UN ROLLBACK Y EJECUTO COMMIT, PARA QUE SEA
                   // TODO VALIDO, PODRIA EJECUTAR UN ROLLBACK, PERO NO SE, NO ME FIO.
                  COMMANDTEXT := 'COMMIT';
                  EXECUTE
                end;
           END;
     END;
   END
   ELSE
    IF (cdsq_mdcobrotipo.AsString = 'FACTURA')
    AND (TRIM(CDSQ_MDCOBROID.ASSTRING) <> '' ) THEN
    BEGIN
     IF ((CDSQ_MDFACTURA.STATE IN [DSEDIT,DSINSERT]) AND
     (CDSQ_MDCOBROID.asSTRING=CDSQ_MDFACTURAID_FACTURA.ASSTRING)
      AND (CDSQ_MDCOBROANYO.ASSTRING = CDSQ_MDFACTURAANYO.ASSTRING)
      AND (CDSQ_MDCOBROID_EMPRESA.ASSTRING = CDSQ_MDFACTURAID_EMPRESA.ASSTRING)
      AND (CDSQ_MDCOBROID_SERIE.ASSTRING = CDSQ_MDFACTURAID_SERIE.ASSTRING))
     THEN
     // PARA CUANDO PASO VARIOS ALBARANES A UNA FACTURA.
          CDSQ_MDFACTURATOTAL_COBRADO.asfloat := BASE_COBRO
     ELSE
     IF ((NOT (CDSQ_MDFACTURA.STATE IN [DSEDIT,DSINSERT])) AND
     (CDSQ_MDCOBROID.asSTRING=CDSQ_MDFACTURAID_FACTURA.ASSTRING)
      AND (CDSQ_MDCOBROANYO.ASSTRING = CDSQ_MDFACTURAANYO.ASSTRING)
      AND (CDSQ_MDCOBROID_EMPRESA.ASSTRING = CDSQ_MDFACTURAID_EMPRESA.ASSTRING)
      AND (CDSQ_MDCOBROID_SERIE.ASSTRING = CDSQ_MDFACTURAID_SERIE.ASSTRING))
     THEN
     BEGIN
      IF CDSQ_mDFACTURA.Locate('ID_FACTURA;ANYO;ID_EMPRESA;ID_SERIE',VARARRAYOF([CDSQ_MDCOBROID.asfloat,CDSQ_MDCOBROANYO.ASSTRING,CDSQ_MDCOBROID_EMPRESA.ASSTRING,CDSQ_MDCOBROID_SERIE.ASSTRING]),[loCaseInsensitive])
       THEN
       BEGIN
         CDSQ_MDFACTURA.Edit;
         RFACTURA.PREGUNTAEDIT := FALSE;
         CDSQ_MDFACTURATOTAL_COBRADO.asfloat := BASE_COBRO;
         RFACTURA.PREGUNTA := FALSE;
         CDSQ_MDFACTURA.Post;
       END;
     end
     ELSE
     IF (TRIM(CDSQ_MDCOBROID.ASSTRING) <> '') THEN
      BEGIN
         TRANSACTIONACTUALIZAR :=10;
          WITH CDSQ_ACTUALIZAR DO
          BEGIN
                COMMANDTEXT := 'UPDATE FACTURAS A SET TOTAL_COBRADO='+FLOATTOSTR(BASE_COBRo)+' ';
                COMMANDTEXT := COMMANDTEXT + ' WHERE ID_EMPRESA='+DMGS.CDSQ_MDCOBROID_EMPRESA.ASSTRING+' AND ANYO ='+ DMGS.CDSQ_MDCOBROANYO.ASSTRING + ' AND ID_FACTURA='+DMGS.CDSQ_MDCOBROID.ASSTRING+' AND ID_SERIE='''+DMGS.CDSQ_MDCOBROID_SERIE.ASSTRING+''' ' ;
                try
                  Execute;
                except
                  showmessage('Error No se ha podido actualizar en FACTURAS el total cobrado.');
                  transactionACTUALIZAR:=-1; // CON ESTO HAGO QUE EL SERVER
                   // HAGA UN ROLLBACK Y EJECUTO COMMIT, PARA QUE SEA
                   // TODO VALIDO, PODRIA EJECUTAR UN ROLLBACK, PERO NO SE, NO ME FIO.
                  COMMANDTEXT := 'COMMIT';
                  EXECUTE
                end;
           END;
     END;
   END
end;

procedure TDMGS.CDSQ_MDLINEACOBROBeforeCancel(DataSet: TDataSet);
begin
// EL ESCAPE CONTROLA CUANDO PULSO LA SEGUNDA VEZ ESCAPE
// ESTANDO EL DATASET EN ESTADO DE INSERCION O EDICION
// COBROESESCAPE LO UTILIZO A LA HORA DE HACER ABORT Y CANCEL EN UDM
// ESCAPE LO UTILIZO PARA SABER QUE HE PULSADO ESCAPE EN EL FORMULARIO
  if ((CDSQ_MDLINEACOBRO.State in [dsedit,dsinsert]) and (RLINEACOBRO.ESCAPE OR RLINEACOBRO.ESCAPECDS)) then
  begin
      RLINEACOBRO.ESCAPEENTRA:= true;
      RLINEACOBRO.ESCAPE := true;// POR SI OCURRE UN ERROR AL HACER EL POST
      CDSQ_MDLINEACOBRO.post;
  end;
  RLINEACOBRO.ESCAPEENTRA:= false;
  // AL HACER ABORT ENTRA EN EL BEFORECANCEL
  // Y NO QUIERO QUE MUESTRE LA VENTANA DE INSERTAR O ACTUALIZAR
  // CONSTANTEMENTE
  RLINEACOBRO.ESCAPE := true;
end;

procedure TDMGS.CDSQ_MDLINEACOBROBeforeDelete(DataSet: TDataSet);
begin
   if RLINEACOBRO.PREGUNTA then
   begin
     case PedirConfirmacion('¿Confirma que desea borrar esta Linea de Cobro?',true,true,false) of
          mrno:Abort;
     end;
   end
   else
      RLINEACOBRO.PREGUNTA := TRUE;
end;

procedure TDMGS.CDSQ_MDLINEACOBROBeforeOpen(DataSet: TDataSet);
begin
  BorrandoLineas := false;
end;

procedure TDMGS.CDSQ_MDLINEACOBROBeforePost(DataSet: TDataSet);
var X:INTEGER;
begin
    if RLINEACOBRO.PREGUNTA then // lo utilizo para modificar las lineas de
     // pedidos dentro de COBROes
    begin
      if CDSQ_mdLINEACOBRO.state=dsinsert
      then x:=PedirConfirmacion('¿Confirma que desea dar de alta esta Linea de COBRO?',true,true,true)
      else x:=PedirConfirmacion('¿Confirma que desea modificar esta Linea de COBRO?',true,true,true);
           case x of
             mrno: begin
                    RLINEACOBRO.ESCAPE := FALSE;// PARA CONTROLAR EN EL UDM
                    RLINEACOBRO.ESCAPECDS:= FALSE;// PARA CONTROLAR EN EL FORMULARIO
                    CDSQ_mdLINEACOBRO.undolastchange (true);
                    CDSQ_mdLINEACOBRO.cancel;
                    cdsq_mdCOBRO.cancel;
                    abort;
                   end;
            mrcancel:begin
                      if RLINEACOBRO.ESCAPEENTRA then
                        CDSQ_MDLINEACOBRO.edit;
                      cdsq_mdLINEACOBROnum_linea.FocusControl ;
                      abort;
                     end;
           end;
    end
    else
      RLINEACOBRO.PREGUNTA := TRUE;
     RCOBRO.ESLINEA:= true;//trata la relacion maestro detalle como una tabla,
     //cuando da error, no da error en cdsmdlinpedidos, sino que lo da en
     //cdsmdpresupuesto, con lo  que tengo que saber que la llamada se ha hecho de
     // LINEACOBRO para poder sacar un error detallado.
    RLINEACOBRO.ESCAPE := FALSE;// ME HACE FALTA
    // AL HACER ABORT ENTRA EN EL BEFORECANCEL
    // Y NO QUIERO QUE MUESTRE LA VENTANA DE INSERTAR O ACTUALIZAR
    // CONSTANTEMENTE
//    if trim(cdsq_mdlineacobroid_forma.AsString) = '' then
//       cdsq_mdlineacobroid_forma.Clear;
  if cdsq_mdlineacobro.RecordCount = 0 then
     cdsq_mdlineacobronum_linea.VALUE := 1
  else
  begin
       CDSQ_MAXIMO.CLOSE;
       CDSQ_MAXIMO.CommandText := 'SELECT MAX(NUM_LINEA) AS MAXIMO FROM  LINEAS_COBRO WHERE ID_COBRO =' +CDSQ_MDCOBROID_COBRO.ASSTRING+' AND ANYO ='+CDSQ_MDCOBROANYO.ASSTRING+' AND ID_EMPRESA='+CDSQ_MDCOBROID_EMPRESA.AsString ;
       CDSQ_MAXIMO.OPEN;
  IF CDSQ_MAXIMO.Fields[0].ISNULL THEN
     CDSQ_MDLINEACOBRONUM_LINEA.VALUE :=0
  ELSE

       CDSQ_MDLINEACOBRONUM_LINEA.VALUE := CDSQ_MAXIMO.Fields[0].VALUE + 1 ;
       CDSQ_MAXIMO.CLOSE;
  end;
    if trim(cdsq_mdlineacobroid_forma.AsString) = '' then
    BEGIN
       SHOWMESSAGE(' LA FORMA DE PAGO DEBE DE TENER UN VALOR ');
       ABORT;
    END;

    

end;
procedure TDMGS.CDSQ_MDLINEACOBRODeleteError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
 RLINEACOBRO.ERROR := true;
 mostrarerror(e.message,' linea de cobro ',19);
end;

procedure TDMGS.CDSQ_MDLINEACOBROReconcileError(
  DataSet: TCustomClientDataSet; E: EReconcileError;
  UpdateKind: TUpdateKind; var Action: TReconcileAction);
begin
   if updatekind = ukdelete then
     tipoerror := true
  else
     tipoerror := false;
 RLINEACOBRO.ERROR := true;
 mostrarerror(e.message,' linea de cobro',19);
end;

procedure TDMGS.CDSQ_MDLINEACOBROEditError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
   RLINEACOBRO.ERROR := true;
 mostrarerror(e.message,' linea de cobro ',19);
end;

procedure TDMGS.CDSQ_MDLINEACOBROPostError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
 RLINEACOBRO.ERROR := true;
 mostrarerror(e.message,' linea de cobro ',19);
end;

 //***********************    CDSQ_MDLINEACOBRO  **********************
 //******************************************************************  ////
 //***********************    CDSQ_ACTUALIZAR  **********************



procedure TDMGS.CDSQ_ACTUALIZARBeforeExecute(Sender: TObject;
  var OwnerData: OleVariant);
begin
     ownerData:=transactionACTUALIZAR;
end;

procedure TDMGS.CDSQ_ACTUALIZARAfterExecute(Sender: TObject;
  var OwnerData: OleVariant);
begin
    transactionACTUALIZAR := ownerdata;
end;

procedure TDMGS.CDSQ_ACTUALIZARReconcileError(
  DataSet: TCustomClientDataSet; E: EReconcileError;
  UpdateKind: TUpdateKind; var Action: TReconcileAction);
begin
  showmessage('SE HA PRODUCIDO UN ERROR AL INTENTAR ACTUALIZAR EN LA BASE DE DATOS.');
  abort;
end;
 //***********************    CDSQ_ACTUALIZAR  **********************
 //******************************************************************  ////
 //***********************    CDSQ_FACTURAAUX  **********************

procedure TDMGS.CDSQ_MDFACTURAAUXAfterGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
  VAR AUX:INTEGER;
begin
  AUX := RFACTURAAUX.KEY;
  RFACTURAAUX.KEY := AUX + 1;
end;


procedure TDMGS.CDSQ_MDFACTURAAUXBeforeClose(DataSet: TDataSet);
begin
   RFACTURAAUX.KEY :=0;
   INICIARRECORD(VFACTURAAUX);
end;

procedure TDMGS.CDSQ_MDFACTURAAUXBeforeGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
begin
  OWNERDATA:= inttostr(RFACTURAAUX.KEY) +FILTRO+ inttostr(CDSQ_MDFACTURAAUX.PacketRecords)+FILTRO;
  OWNERDATA := OWNERDATA + OBTENEROWNERDATA(VFACTURAAUX);
end;

procedure TDMGS.CDSQ_MDFACTURAAUXBeforeOpen(DataSet: TDataSet);
begin
 CDSQ_MDFACTURAAUX.FetchOnDemand := FALSE;
 CDSQ_MDFACTURAAUX.PacketRecords := 15;
 RFACTURAAUX.KEY:=0;
end;

procedure TDMGS.CDSQ_MDFACTURAAUXReconcileError(
  DataSet: TCustomClientDataSet; E: EReconcileError;
  UpdateKind: TUpdateKind; var Action: TReconcileAction);
begin
 MOSTRARERROR(E.MESSAGE,' FACTURA AUX ', -1);
end;
procedure TDMGS.CDSQ_MDFACTURAAUXCalcFields(DataSet: TDataSet);
var fbase,IVA:double;
    pvpsiniva,re,total,descuento,prueba,pvpsicd:double;
    fbase_factura:double;
begin
{   fbase_factura := roundto(cdsq_mdfacturaAUXbase_FACTURA.asfloat,decimalesMON);
   descuento := roundto(cdsq_mdFACTURAAUXdescuento.asfloat/100,DMGS.DECIMALESDES);
   iva := roundto(cdsq_mdFACTURAAUXiva.asfloat/100,DMGS.DECIMALES);
   pvpsiniva:= roundto(fbase_FACTURA,DMGS.DECIMALES);
   pvpsicd := pvpsiniva * (1-descuento);
   re := roundto(pvpsicd*cdsq_mdFACTURAAUXre.asfloat/100,DMGS.DECIMALESDES);
}//   total :=roundto(pvpsicd-RE,DMGS.DECIMALESDES);
   CDSQ_MDFACTURAAUXTOTALIVA.asfloat := ROUNDTO(CDSQ_MDFACTURAAUXTOTALCOBRADO.AsFloat * CDSQ_MDFACTURAAUXIVA.ASFLOAT/100 ,DECIMALESDES);
//   cdsq_mdFACTURAAUXdesctotal.asfloat := roundto(total+CDSQ_mDFACTURAAUXTOTALIVA.ASFLOAT,DMGS.DECIMALES);

//   fbase := roundto(cdsq_mdfacturaauxbase_factura.asfloat,decimalesMON);
//   IVA := ROUNDTO(CDSQ_MDFACTURAAUXIVA.AsFloat,DECIMALES);
//   CDSQ_MDFACTURAAUXRESTO.asfloat := ROUNDTO((fBASe*(1+IVA)) - CDSQ_MDFACTURAAUXTOTAL_COBRADO.asfloat,DECIMALESMON);
   CDSQ_MDFACTURAAUXRESTO.asfloat := ROUNDTO(cdsq_mdfacturaauxTOTALCOBRADO.asfloat - CDSQ_MDFACTURAAUXTOTAL_COBRADO.asfloat ,DECIMALESMON);
// QUITO ESTO PARA QUE ME DE LO COBRADO Y EL RESTO IGUAL AL IMPORTE
//   IF CDSQ_mDFACTURAAUXRESTO.asfloat <0 THEN
//      CDSQ_MDFACTURAAUXRESTO.asfloat := 0;


//   IF (fbase <= CDSQ_MDFACTURAAUXTOTAL_COBRADO.asfloat)
//   and (cdsq_mdfacturaauxtotal_cobrado.asfloat > 0 )
   if (cdsq_mdfacturaauxcobrado.value = 1)
   OR (CDSQ_MDFACTURAAUXCOBRADO.Value = 2)
   THEN
     CDSQ_MDFACTURAAUXCOBRADOS.value := TRUE
   ELSE
     CDSQ_MDFACTURAAUXCOBRADOS.value := FALSE;

   CDSQ_MDFACTURAAUXBASE.ASFLOAT := CDSQ_MDFACTURAAUXDESCTOTAL.ASFLOAT / (1+CDSQ_mDFACTURAAUXIVA.ASFLOAT/100);
end;
 //***********************    CDSQ_FACTURAAUX  *********************//
 //*****************************************************************//
 //***********************    CDSQ_cobroaux  *********************//



procedure TDMGS.CDSQ_MDCOBROAUXAfterGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
  VAR AUX:INTEGER;
begin
  AUX := RCOBROAUX.KEY;
  RCOBROAUX.KEY := AUX + 1;
end;
procedure TDMGS.CDSQ_MDCOBROAUXBeforeClose(DataSet: TDataSet);
begin
  RCOBROAUX.KEY :=0;
  INICIARRECORD(VCOBROAUX);
end;

procedure TDMGS.CDSQ_MDCOBROAUXBeforeGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
begin
  OWNERDATA:= inttostr(RCOBROAUX.KEY) +FILTRO+ inttostr(cdsq_mdCOBROAUX.PacketRecords)+FILTRO;
  OWNERDATA := OWNERDATA + OBTENEROWNERDATA(VCOBROAUX);
end;

procedure TDMGS.CDSQ_MDCOBROAUXBeforeOpen(DataSet: TDataSet);
begin
 CDSQ_MDCOBROAUX.FetchOnDemand := FALSE;
 CDSQ_MDCOBROAUX.PacketRecords := 15;
 RCOBROAUX.KEY:=0;
end;

procedure TDMGS.CDSQ_MDCOBROAUXCalcFields(DataSet: TDataSet);
var fbase:double;
begin
     fbase:= roundto(cdsq_mdcobroauxbase.asfloat,decimalesMON);
     CDSQ_MDCOBROAUXRESTO.asfloat := fBASE - CDSQ_MDCOBROAUXTOTAL_COBRADO.asfloat;
// QUITO ESTO PARA QUE ME DE LO COBRADO Y EL RESTO IGUAL AL IMPORTE     
//     IF CDSQ_mDCOBROAUXRESTO.asfloat <0 THEN
//      CDSQ_MDCOBROAUXRESTO.asfloat := - CDSQ_MDCOBROAUXRESTO.asfloat;
//      CDSQ_MDCOBROAUXRESTO.asfloat := 0;
     IF (CDSQ_MDcobroauxTOTAL_COBRADO.asfloat >= fBASE)
     and (cdsq_mdcobroauxtotal_cobrado.asfloat > 0 )
     THEN
        CDSQ_MDcobroauxCOBRADO.ASSTRING := 'COBRADO'
     ELSE
         IF CDSQ_MDcobroauxTOTAL_COBRADO.asfloat > 0  THEN
            CDSQ_MDcobroauxCOBRADO.ASSTRING:= 'COBRADO PARTE'
         ELSE
            CDSQ_MDcobroauxCOBRADO.ASSTRING:= 'SIN COBRAR';
end;

procedure TDMGS.CDSQ_MDCOBROAUXReconcileError(
  DataSet: TCustomClientDataSet; E: EReconcileError;
  UpdateKind: TUpdateKind; var Action: TReconcileAction);
begin
   mostrarerror(e.message,' COBRO AUX ', -1);
end;
 //***********************    CDSQ_cobroaux  *********************//
//***************************************************************//
 //***********************    CDSQ_TARIFAS  *********************//

procedure TDMGS.CDSQ_TARIFASAfterGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
  var aux:integer;
begin
  aux:= RTARIFAS.KEY;
  RTARIFAS.KEY := aux + 1;
end;
procedure TDMGS.CDSQ_TARIFASAfterInsert(DataSet: TDataSet);
begin
  IF NOT RTARIFAS.BUSCANDO THEN
  BEGIN
   CDSQ_TARIFASPRECIO.asfloat := 0;
   CDSQ_TARIFASDIAS_SUMINISTRO.AsString := '0';
   CDSQ_TARIFASDESCUENTO.asfloat :=0;
   CDSQ_TARIFASNETO.asfloat :=0;
   CDSQ_TARIFASIVA.ASSTRING:=FMENU.IVA;
  END;
end;

procedure TDMGS.CDSQ_TARIFASAfterPost(DataSet: TDataSet);
var aux:string;
begin
  RTARIFAS.ESCAPE:= TRUE;
  RTARIFAS.ERROR := false;
  if CDSQ_TARIFAS.ChangeCount >0 then
    CDSQ_TARIFAS.ApplyUpdates(0);

  if RTARIFAS.ERROR then
  begin
     if ErrorNotFound then
     begin
       ErrorNotFound:= false;
       RTARIFAS.ESCAPE := FALSE;// ME HACE FALTA
       RTARIFAS.ESCAPECDS := FALSE;
       // AL HACER ABORT ENTRA EN EL BEFORECANCEL
       // Y NO QUIERO QUE MUESTRE LA VENTANA DE INSERTAR O ACTUALIZAR
       // CONSTANTEMENTE
       CDSQ_TARIFAS.CancelUpdates;
       CDSQ_TARIFAS.close;
     end
     ELSE
     begin
       if tipoerror then // cuando da el error de que no se puede
           // borrar pq hay referencias en otras tablas.
       begin
          CDSQ_TARIFAS.cancelupdates ;
          CDSQ_TARIFAS.Last;// para que se situe en el
          //registro correcto
       end
       else
       begin
          CDSQ_TARIFAS.Edit;
          CDSQ_TARIFASID_PROVEEDOR.FocusControl;
       END;
       abort;
     end;
  end;
end;

procedure TDMGS.CDSQ_TARIFASBeforeCancel(DataSet: TDataSet);
begin
// EL ESCAPE CONTROLA CUANDO PULSO LA SEGUNDA VEZ ESCAPE
// ESTANDO EL DATASET EN ESTADO DE INSERCION O EDICION
// ALBARANESESCAPE LO UTILIZO A LA HORA DE HACER ABORT Y CANCEL EN UDM
// ESCAPE LO UTILIZO PARA SABER QUE HE PULSADO ESCAPE EN EL FORMULARIO
  if ((CDSQ_TARIFAS.State in [dsedit,dsinsert]) and (RTARIFAS.ESCAPE OR RTARIFAS.ESCAPECDS)) then
  begin
      RTARIFAS.ESCAPEENTRA:= true;
      RTARIFAS.ESCAPE := true;// POR SI OCURRE UN ERROR AL HACER EL POST
      if not RTARIFAS.BUSCANDO then
         CDSQ_TARIFAS.post;
  end;
  RTARIFAS.ESCAPEENTRA:= false;
  // AL HACER ABORT ENTRA EN EL BEFORECANCEL
  // Y NO QUIERO QUE MUESTRE LA VENTANA DE INSERTAR O ACTUALIZAR
  // CONSTANTEMENTE
  RTARIFAS.ESCAPE := true;  // CUANDO ENTRA EN BEFORECANCEL
end;

procedure TDMGS.CDSQ_TARIFASBeforeClose(DataSet: TDataSet);
begin
   if (CDSQ_TARIFAS.state in [dsedit,dsinsert]) AND NOT RTARIFAS.BUSCANDO then
      CDSQ_TARIFAS.post;
   INICIARLOCALES(RTARIFAS);
   INICIARRECORD(VTARIFAS);
end;

procedure TDMGS.CDSQ_TARIFASBeforeDelete(DataSet: TDataSet);
begin
   case PedirConfirmacion('¿Confirma que desea borrar esta Tarifa?',true,true,false) of
        mrno:Abort;
   end;
end;

procedure TDMGS.CDSQ_TARIFASBeforeGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
begin
  OWNERDATA:= inttostr(RTARIFAS.KEY) +FILTRO+ inttostr(CDSQ_TARIFAS.PacketRecords)+FILTRO;
  OWNERDATA := OWNERDATA + OBTENEROWNERDATA(VTARIFAS)
  //TABGRIDPROVEEDOR + FILTRO + TABGRORDEN + FILTRO + TAbgrtipo+ filtro;
end;

procedure TDMGS.CDSQ_TARIFASBeforeOpen(DataSet: TDataSet);
begin
 CDSQ_TARIFAS.FetchOnDemand := FALSE;
 CDSQ_TARIFAS.PacketRecords := 20;
 RTARIFAS.KEY :=0; // para que no coja el primero.
end;

procedure TDMGS.CDSQ_TARIFASBeforePost(DataSet: TDataSet);
var x:integer;
begin
    if RTARIFAS.PREGUNTA then
    begin
    if CDsQ_TARIFAS.state=dsinsert then x:=PedirConfirmacion('¿Confirma que desea dar de alta esta Tarifa?',true,true,true)
                               else x:=PedirConfirmacion('¿Confirma que desea modificar esta Tarifa?',true,true,true);
    case x of
        mrno: begin
                 RTARIFAS.ESCAPE := FALSE;// PARA CONTROLAR EN EL UDM
                 RTARIFAS.ESCAPECDS:= FALSE;// PARA CONTROLAR EN EL FORMULARIO
                 cdsq_TARIFAS.UndoLastChange(TRUE);
                 cdsq_TARIFAS.cancel;
                 abort;
              end;
        mrcancel:
              BEGIN
                 if RTARIFAS.ESCAPEENTRA then
                     cdsq_TARIFAS.edit;
                 cdsq_tarifasid_proveedor.FocusControl;
                 ABORT;
              END;
    end;
    end
    else
      RTARIFAS.PREGUNTA := true;
    RTARIFAS.ESCAPE := FALSE;// ME HACE FALTA
    // AL HACER CANCEL ENTRA EN EL BEFORECANCEL
    // Y NO QUIERO QUE MUESTRE LA VENTANA DE INSERTAR O ACTUALIZAR
    // CONSTANTEMENTE
    if trim(CDSQ_TARIFASid_articulo.AsString) ='' then
        CDSQ_TARIFASid_articulo.Clear;
    if trim(CDSQ_TARIFASid_COLOR.AsString) ='' then
        CDSQ_TARIFASid_COLOR.Clear;

end;
procedure TDMGS.CDSQ_TARIFASDeleteError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
  RTARIFAS.ERROR :=true;
  mostrarError(e.Message,' TARIFAS ',20);
end;

procedure TDMGS.CDSQ_TARIFASEditError(DataSet: TDataSet; E: EDatabaseError;
  var Action: TDataAction);
begin
  RTARIFAS.ERROR :=true;
  mostrarError(e.Message,' TARIFAS ',20);
end;

procedure TDMGS.CDSQ_TARIFASPostError(DataSet: TDataSet; E: EDatabaseError;
  var Action: TDataAction);
begin
  RTARIFAS.ERROR :=true;
  mostrarError(e.Message,' TARIFAS ',20);
end;

procedure TDMGS.CDSQ_TARIFASReconcileError(DataSet: TCustomClientDataSet;
  E: EReconcileError; UpdateKind: TUpdateKind;
  var Action: TReconcileAction);
begin
  RTARIFAS.ERROR :=true;
  mostrarError(e.Message,' TARIFAS ',20);
end;

//***********************    CDSQ_TARIFAS  *********************//
//***************************************************************//
//***********************    CDSQ_PROVEEDORAUX *******************//

procedure TDMGS.CDSQ_PROVEEDORAUXAfterGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
begin
end;
//***********************    CDSQ_PROVEEDORAUX *******************//
//***************************************************************//
//***********************    CDSQ_TARIFASRAUX *******************//

procedure TDMGS.CDSQ_TARIFASAUXAfterGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
  var aux:integer;
begin
  aux:= RTARIFASAUX.KEY;
  RTARIFASAUX.KEY := aux + 1;
end;

procedure TDMGS.CDSQ_TARIFASAUXBeforeClose(DataSet: TDataSet);
begin
   INICIARLOCALES(RTARIFASAUX);
   INICIARRECORD(VTARIFASAUX);
end;

procedure TDMGS.CDSQ_TARIFASAUXBeforeGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
begin
  OWNERDATA:= inttostr(RTARIFASAUX.KEY) +FILTRO+ inttostr(CDSQ_TARIFASAUX.PacketRecords)+FILTRO;
  OWNERDATA := OWNERDATA + OBTENEROWNERDATA(VTARIFASAUX);
//  TAABGRIDPROVEEDOR + FILTRO + TAABGRORDEN + FILTRO + TAAbgrtipo+ filtro;
end;

procedure TDMGS.CDSQ_TARIFASAUXBeforeOpen(DataSet: TDataSet);
begin
 CDSQ_TARIFASAUX.FetchOnDemand := FALSE;
 CDSQ_TARIFASAUX.PacketRecords := 20;
 RTARIFASAUX.KEY :=0; // para que no coja el primero.
end;

procedure TDMGS.CDSQ_TARIFASAUXReconcileError(
  DataSet: TCustomClientDataSet; E: EReconcileError;
  UpdateKind: TUpdateKind; var Action: TReconcileAction);
begin
  MOSTRARERROR (E.MESSAGE,' TARIFAS ', -1);
end;

//***********************    CDSQ_TARIFASRAUX *******************//
//***************************************************************//
//***********************    CDSQ_ALMACEN    *******************//

procedure TDMGS.CDSQ_ALMACENAfterGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
  var aux:integer;
begin

  aux:= ralmacen.KEY ;
  ralmacen.KEY  := aux + 1;

end;

procedure TDMGS.CDSQ_ALMACENAfterInsert(DataSet: TDataSet);
begin
  IF NOT RALMACEN.BUSCANDO THEN
  BEGIN
     CDSQ_ALMACENAVISAR.ASFLOAT := 0;
     CDSQ_ALMACENCANTIDAD.ASFLOAT :=0;
//     CDSQ_ALMACENlinea_entrada.ASFLOAT :=0;
     cdsq_almacenid_empresa.asstring := fmenu.ID_EMPRESA ;
{     CDSQ_MAXIMO.CLOSE;
     CDSQ_MAXIMO.COMMANDTEXT := 'SELECT MAX(indice) as MAXIMO FROM ALMACEN WHERE ID_EMPRESA='+FMENU.ID_EMPRESA;//+' and anyo='+fmenu.anyo+' ' ;
     CDSQ_MAXIMO.Open;
     IF CDSQ_MAXIMO.Fields[0].ISNULL THEN
         CDSQ_ALMACENID.VALUE :=0
     ELSE
          CDSQ_ALMACENID.VALUE := CDSQ_MAXIMO.Fields[0].VALUE + 1;
    CDSQ_MAXIMO.CLOSE;
}
  END;
end;

procedure TDMGS.CDSQ_ALMACENAfterPost(DataSet: TDataSet);
var aux:string;
begin
  RALMACEN.ESCAPE:= TRUE;
  RALMACEN.error := false;
  if CDSQ_ALMACEN.ChangeCount >0 then
    CDSQ_ALMACEN.ApplyUpdates(0);
  if RALMACEN.error then
  begin
     if ErrorNotFound then
     begin
       ErrorNotFound:= false;
       RALMACEN.ESCAPE := FALSE;// ME HACE FALTA
       RALMACEN.ESCAPECDS := FALSE;
       // AL HACER ABORT ENTRA EN EL BEFORECANCEL
       // Y NO QUIERO QUE MUESTRE LA VENTANA DE INSERTAR O ACTUALIZAR
       // CONSTANTEMENTE
       CDSQ_ALMACEN.CancelUpdates;
       CDSQ_ALMACEN.close;
     end
     ELSE
     begin
       if tipoerror then // cuando da el error de que no se puede
           // borrar pq hay referencias en otras tablas.
       begin
          CDSQ_ALMACEN.cancelupdates ;
          CDSQ_ALMACEN.Last;// para que se situe en el
          //registro correcto
       end
       else
       begin
          CDSQ_ALMACEN.Edit;
          CDSQ_ALMACENID_ARTICULO.FocusControl;
       END;
       abort;
     end;
  end;
end;
procedure TDMGS.CDSQ_ALMACENBeforeCancel(DataSet: TDataSet);
begin
// EL ESCAPE CONTROLA CUANDO PULSO LA SEGUNDA VEZ ESCAPE
// ESTANDO EL DATASET EN ESTADO DE INSERCION O EDICION
// ALBARANESESCAPE LO UTILIZO A LA HORA DE HACER ABORT Y CANCEL EN UDM
// ESCAPE LO UTILIZO PARA SABER QUE HE PULSADO ESCAPE EN EL FORMULARIO
  if ((CDSQ_ALMACEN.State in [dsedit,dsinsert]) and (rALMACEN.escape OR rALMACEN.escapecds)) then
  begin
      rALMACEN.escapeentra:= true;
      rALMACEN.ESCAPE := true;// POR SI OCURRE UN ERROR AL HACER EL POST
      if not ralmacen.buscando then
         CDSQ_ALMACEN.post;
  end;
  rALMACEN.escapeentra:= false;
  // AL HACER ABORT ENTRA EN EL BEFORECANCEL
  // Y NO QUIERO QUE MUESTRE LA VENTANA DE INSERTAR O ACTUALIZAR
  // CONSTANTEMENTE
  rALMACEN.ESCAPE := true;

end;

procedure TDMGS.CDSQ_ALMACENBeforeClose(DataSet: TDataSet);
begin
   if (CDSQ_ALMACEN.state in [dsedit,dsinsert]) AND NOT ralmacen.buscando then
      CDSQ_ALMACEN.post;
   INICIARLOCALES(ralmacen);
   INICIARRECORD(valmacen)
end;

procedure TDMGS.CDSQ_ALMACENBeforeDelete(DataSet: TDataSet);
begin
   case PedirConfirmacion('¿Confirma que desea borrar este Artículo?',true,true,false) of
        mrno:Abort;
   end;
end;

procedure TDMGS.CDSQ_ALMACENBeforeGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
begin
  OWNERDATA:= inttostr(ralmacen.KEY) +FILTRO+ inttostr(cdsq_almacen.PacketRecords)+FILTRO;
  OWNERDATA := OWNERDATA + OBTENEROWNERDATA(valmacen);
end;

procedure TDMGS.CDSQ_ALMACENBeforeOpen(DataSet: TDataSet);
begin
 CDSQ_ALMACEN.FetchOnDemand := FALSE;
 CDSQ_ALMACEN.PacketRecords := 20;
 ralmacen.key :=0 ; // para que no coja el primero.
end;

procedure TDMGS.CDSQ_ALMACENBeforePost(DataSet: TDataSet);
var x:integer;
begin
    if ralmacen.pregunta then
    begin
    if CDsQ_ALMACEN.state=dsinsert then x:=PedirConfirmacion('¿Confirma que desea dar de alta este articulo?',true,true,true)
                               else x:=PedirConfirmacion('¿Confirma que desea modificar este articulo?',true,true,true);
    case x of
        mrno: begin
                 rALMACEN.ESCAPE := FALSE;// PARA CONTROLAR EN EL UDM
                 rALMACEN.escapecds := FALSE;// PARA CONTROLAR EN EL FORMULARIO
                 cdsq_ALMACEN.UndoLastChange(TRUE);
                 cdsq_ALMACEN.cancel;
                 abort;
              end;
        mrcancel:
              BEGIN
                 if rALMACEN.escapeentra then
                     cdsq_ALMACEN.edit;
                 cdsq_ALMACENID_ARTICULO.FocusControl;
                 ABORT;
              END;
    end;
    end
    else
      ralmacen.pregunta := true;
    rALMACEN.ESCAPE := FALSE;// ME HACE FALTA
    // AL HACER ABORT ENTRA EN EL BEFORECANCEL
    // Y NO QUIERO QUE MUESTRE LA VENTANA DE INSERTAR O ACTUALIZAR
    // CONSTANTEMENTE

{    CDSQ_MAXIMO.CLOSE;
    CDSQ_MAXIMO.CommandText := 'SELECT max(indice) AS MAXIMO FROM  almacen WHERE ID_empresa ='+fmenu.id_empresa+' AND anyo='+fmenu.anyo+' ';
    CDSQ_MAXIMO.OPEN;
    cdsq_almacenindice.ASINTEGER  := cdsq_maximo.FieldS[0].ASINTEGER + 1 ;
    cdsq_maximo.close;
}

end;


procedure TDMGS.CDSQ_ALMACENDeleteError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
  rALMACEN.error :=true;
  mostrarError(e.Message,' ALMACEN ',21);
end;

procedure TDMGS.CDSQ_ALMACENEditError(DataSet: TDataSet; E: EDatabaseError;
  var Action: TDataAction);
begin
  rALMACEN.error :=true;
  mostrarError(e.Message,' ALMACEN ',21);
end;

procedure TDMGS.CDSQ_ALMACENPostError(DataSet: TDataSet; E: EDatabaseError;
  var Action: TDataAction);
begin
  rALMACEN.error :=true;
  mostrarError(e.Message,' ALMACEN ',21);
end;

procedure TDMGS.CDSQ_ALMACENReconcileError(DataSet: TCustomClientDataSet;
  E: EReconcileError; UpdateKind: TUpdateKind;
  var Action: TReconcileAction);
begin
  rALMACEN.error :=true;
  mostrarError(e.Message,' ALMACEN ',21);
end;

procedure TDMGS.CDSQ_MDENTRADAAfterApplyUpdates(Sender: TObject;
  var OwnerData: OleVariant);
begin
   IF (OWNERDATA = 1)
   AND (FMENU.DAR_AVISO='1')
   THEN
      SHOWMESSAGE('LAS EXISTENCIAS DE ESTE PRODUCTO ESTAN POR DEBAJO DE LA CANTIDAD MINIMA.');
end;
//***********************    CDSQ_ALMACEN    *******************//
//***************************************************************//
//***********************    CDSQ_ALMACENAUX    *******************//

procedure TDMGS.CDSQ_ALMACENAUXAfterGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
  var aux:integer;
begin
  aux:= KEYALMACENAUX;
  KEYALMACENAUX := aux + 1;
end;

procedure TDMGS.CDSQ_ALMACENAUXBeforeClose(DataSet: TDataSet);
begin
   KEYALMACENAUX:=0;
   ALmABGRID :='';
   ALmABGRORDEN:='';
   aLmAbgrtipo:='';
end;

procedure TDMGS.CDSQ_ALMACENAUXBeforeGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
begin
  OWNERDATA:= inttostr(KEYALMACENAUX) +FILTRO+ inttostr(CDSQ_ALMACENAUX.PacketRecords)+FILTRO;
  OWNERDATA := OWNERDATA + ALmABGRID+ filtro +FMENU.ID_EMPRESA +FILTRO + aLmAbgrtipo  + FILTRO + ALmABGRORDEN + filtro;
end;

procedure TDMGS.CDSQ_ALMACENAUXBeforeOpen(DataSet: TDataSet);
begin
 CDSQ_ALMACENAUX.FetchOnDemand := FALSE;
 CDSQ_ALMACENAUX.PacketRecords := 20;
 KEYALMACENAUX :=0; // para que no coja el primero.
end;

procedure TDMGS.CDSQ_ALMACENAUXReconcileError(
  DataSet: TCustomClientDataSet; E: EReconcileError;
  UpdateKind: TUpdateKind; var Action: TReconcileAction);
begin
  MOSTRARERROR (E.MESSAGE,' ALMACEN ', -1);
end;

//***********************    CDSQ_ALMACENAUX    *******************//
//***************************************************************//
//***********************    CDSQ_MDSALIDA    *******************//

procedure TDMGS.CDSQ_MDSALIDAAfterApplyUpdates(Sender: TObject;
  var OwnerData: OleVariant);
begin
   IF (OWNERDATA = 1)
   AND (FMENU.DAR_AVISO='1')
   THEN
//      MessageDlg('LAS EXISTENCIAS DE ESTE PRODUCTO ESTAN POR DEBAJO DE LA CANTIDAD MINIMA.', mtWarning,[mbOK], 0);
     SHOWMESSAGE('LAS EXISTENCIAS DE ESTE PRODUCTO ESTAN POR DEBAJO DE LA CANTIDAD MINIMA.');
end;

procedure TDMGS.CDSQ_MDSALIDAAfterGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
  VAR AUX:INTEGER;
begin
  AUX := RSALIDA.KEY;
  RSALIDA.KEY := AUX + 1;
end;
procedure TDMGS.CDSQ_MDSALIDAAfterInsert(DataSet: TDataSet);
VAR AUX:INTEGER;
begin
  IF NOT RSALIDA.BUSCANDO  THEN
  BEGIN
      CDSQ_MDSALIDAFECHA.AsDateTime := DATE;
      CDSQ_MDSALIDAID_EMPRESA.AsString := FMENU.ID_EMPRESA;
      CDSQ_MDSALIDAIVA.AsString:=FMENU.IVA;
      CDSQ_MDSALIDAANYO.VALUE := strtoint(fmenu.anyo);//YEAROF(DATE);
  CDSQ_MAXIMO.CLOSE;
  CDSQ_MAXIMO.COMMANDTEXT := 'SELECT ID_SALIDA as MAXIMO FROM OPCIONESNUMERICAS WHERE ID_EMPRESA='+FMENU.ID_EMPRESA+' AND ANYO='+FMENU.ANYO;
  CDSQ_MAXIMO.Open;
  IF CDSQ_MAXIMO.Fields[0].ISNULL THEN
     CDSQ_mDSALIDAID_SALIDA.VALUE :=0
  ELSE

  CDSQ_mdSALIDAID_SALIDA.VALUE := CDSQ_MAXIMO.Fields[0].VALUE + 1;
  CDSQ_MAXIMO.CLOSE;
      
  END;


end;

procedure TDMGS.CDSQ_MDSALIDAAfterPost(DataSet: TDataSet);
begin
 RSALIDA.ERROR:= false;
 if CDSQ_MDSALIDA.ChangeCount > 0 then
    CDSQ_MDSALIDA.ApplyUpdates(0); // permito 0 errores
 if RSALIDA.ERROR then
 begin
     if ErrorNotFound then
     begin
       ErrorNotFound:= false;
       CDSQ_MDSALIDA.CancelUpdates;
       CDSQ_MDSALIDA.CLOSE;
     end
     ELSE
     begin
       if tipoerror then // cuando da el error de que no se puede
           // borrar pq hay referencias en otras tablas.
       begin
          CDSQ_MDSALIDA.cancelupdates ;
          CDSQ_MDSALIDA.Last;// para que se situe en el
          //registro correcto
       end
       else
       begin
          CDSQ_MDSALIDA.edit;
          CDSQ_MDSALIDAid_SALIDA.FocusControl;
       END;
      abort;
     end;
 end;
end;
procedure TDMGS.CDSQ_MDSALIDABeforeClose(DataSet: TDataSet);
begin
    if (CDSQ_MDSALIDA.state in [dsedit,dsinsert]) AND(NOT RSALIDA.BUSCANDO) then
      CDSQ_MDSALIDA.post;
   RSALIDA.KEY :=0;
   INICIARRECORD(VSALIDA);
end;

procedure TDMGS.CDSQ_MDSALIDABeforeGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
begin
  OWNERDATA:= inttostr(RSALIDA.KEY) +FILTRO+ inttostr(cdsq_mdSALIDA.PacketRecords)+FILTRO;
  OWNERDATA := OWNERDATA + OBTENEROWNERDATA(VSALIDA);
end;

procedure TDMGS.CDSQ_MDSALIDABeforeOpen(DataSet: TDataSet);
begin
 CDSQ_MDSALIDA.FetchOnDemand := FALSE;
 CDSQ_MDSALIDA.PacketRecords := 15;
 RSALIDA.KEY:=0;
end;

procedure TDMGS.CDSQ_MDSALIDABeforePost(DataSet: TDataSet);
  var x:integer;
begin
     if RSALIDA.BUSCANDO then abort;
     if RSALIDA.PREGUNTA then
     begin
      if CDSQ_MDSALIDA.state=dsinsert then x:=PedirConfirmacion('¿Confirma que desea dar de alta esta SALIDA?',true,true,true)
                             else x:=PedirConfirmacion('¿Confirma que desea modificar esta SALIDA?',true,true,true);
      case x of
             mrno: begin
                  cdsq_mdSALIDA.UndoLastChange(true);
                  cdsq_mdSALIDA.cancel;
                  abort;
                  end;
         mrcancel:begin
                  cdsq_mdSALIDAid_SALIDA.FocusControl;
                  abort;
                  end;
      end;
      IF CDSQ_MDSALIDA.State = DSINSERT THEN
      BEGIN
         CDSQ_MAXIMO.CLOSE;
         CDSQ_MAXIMO.COMMANDTEXT := 'SELECT ID_SALIDA as MAXIMO FROM OPCIONESNUMERICAS WHERE ID_EMPRESA='+FMENU.ID_EMPRESA+' AND ANYO='+FMENU.ANYO;
         CDSQ_MAXIMO.Open;
  IF CDSQ_MAXIMO.Fields[0].ISNULL THEN
     CDSQ_MDSALIDAID_SALIDA.VALUE :=0
  ELSE

         CDSQ_mdSALIDAID_SALIDA.VALUE := CDSQ_MAXIMO.Fields[0].VALUE + 1;
         CDSQ_MAXIMO.CLOSE;
      END
     END
     else
       RSALIDA.PREGUNTA := true;
end;

procedure TDMGS.CDSQ_MDSALIDADeleteError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
  var aux:integer;
begin
RSALIDA.ERROR:=true;
if RSALIDA.ESLINEA then
 begin
   aux := 23; // la relacion master-detail se comporta como una tabla, como tal
   // no va a entrar en los errores de lineas de presupuesto, lo que hago es controlar de donde
   // viene el error, para darlo con mas detalle, y el numero 12 corresponde a los
   // errores de linpresupuesto
   RLINEASALIDA.ERROR := true;
   RSALIDA.ESLINEA:= false;
 end
else
 aux := 22;// corresponde a pedidos
 mostrarerror(e.message,' SALIDA ',aux);
end;
procedure TDMGS.CDSQ_MDSALIDAEditError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
  var aux:integer;
begin
RSALIDA.ERROR:=true;
if RSALIDA.ESLINEA then
 begin
   aux := 23; // la relacion master-detail se comporta como una tabla, como tal
   // no va a entrar en los errores de lineas de presupuesto, lo que hago es controlar de donde
   // viene el error, para darlo con mas detalle, y el numero 12 corresponde a los
   // errores de linpresupuesto
   RLINEASALIDA.ERROR := true;
   RSALIDA.ESLINEA:= false;
 end
else
 aux := 22;// corresponde a pedidos
 mostrarerror(e.message,' SALIDA ',aux);
end;


procedure TDMGS.CDSQ_MDSALIDAPostError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
  var aux:integer;
begin
RSALIDA.ERROR:=true;
if RSALIDA.ESLINEA then
 begin
   aux := 23; // la relacion master-detail se comporta como una tabla, como tal
   // no va a entrar en los errores de lineas de presupuesto, lo que hago es controlar de donde
   // viene el error, para darlo con mas detalle, y el numero 12 corresponde a los
   // errores de linpresupuesto
   RLINEASALIDA.ERROR := true;
   RSALIDA.ESLINEA:= false;
 end
else
 aux := 22;// corresponde a pedidos
 mostrarerror(e.message,' SALIDA ',aux);
end;


procedure TDMGS.CDSQ_MDSALIDAReconcileError(DataSet: TCustomClientDataSet;
  E: EReconcileError; UpdateKind: TUpdateKind;
  var Action: TReconcileAction);
  var aux:integer;
begin
RSALIDA.ERROR:=true;
if RSALIDA.ESLINEA then
 begin
   aux := 23; // la relacion master-detail se comporta como una tabla, como tal
   // no va a entrar en los errores de lineas de presupuesto, lo que hago es controlar de donde
   // viene el error, para darlo con mas detalle, y el numero 12 corresponde a los
   // errores de linpresupuesto
   RLINEASALIDA.ERROR := true;
   RSALIDA.ESLINEA:= false;
 end
else
 aux := 22;// corresponde a pedidos
 mostrarerror(e.message,' SALIDA ',aux);
end;

//***********************    CDSQ_MDSALIDA    *******************//
//***************************************************************//
//***********************    CDSQ_MDlineaSALIDA    *******************//

procedure TDMGS.CDSQ_MDLINEASALIDAAfterInsert(DataSet: TDataSet);
begin
  CDSQ_MAXIMO.CLOSE;
  CDSQ_MAXIMO.COMMANDTEXT := 'SELECT MAX(LINEA) as MAXIMO FROM LINea_SALIDA WHERE ID_EMPRESA='+FMENU.ID_EMPRESA+' AND ID_SALIDA='+CDSQ_MDSALIDAID_SALIDA.ASSTRING;
  CDSQ_MAXIMO.Open;
  IF CDSQ_MAXIMO.Fields[0].ISNULL THEN
     CDSQ_MDLINEASALIDALINEA.VALUE :=0
  ELSE

  CDSQ_MDLINEASALIDALINEA.VALUE := CDSQ_MAXIMO.Fields[0].VALUE + 1;
  CDSQ_MDLINEASALIDACANTIDAD.asfloat := 0;
  CDSQ_MAXIMO.CLOSE;

end;

procedure TDMGS.CDSQ_MDLINEASALIDAAfterPost(DataSet: TDataSet);
var auxbookmark:tbookmark;
begin
  RLINEASALIDA.ESCAPE := TRUE;
  RLINEASALIDA.ERROR:= FALSE;
  if(CDSQ_mdLINEASALIDA.ChangeCount >0 ) then
     CDSQ_mdLINEASALIDA.ApplyUpdates(0);
  if RLINEASALIDA.ERROR then
  // si el error se ha producido en la linea de PRESUPUESTO, deshago los cambios
  // que he introducido
    if ErrorNotFound then
     begin
       ErrorNotFound:= false;
       RLINEASALIDA.ESCAPE := FALSE;// ME HACE FALTA
       RLINEASALIDA.ESCAPECDS := FALSE;
       CDSQ_MDLINEASALIDA.CancelUpdates;
       CDSQ_MDLINEASALIDA.close;
       CDSQ_MDSALIDA.Close;
     end
  ELSE
  begin
       if tipoerror then // cuando da el error de que no se puede
           // borrar pq hay referencias en otras tablas.
       begin
          CDSQ_MDLINEASALIDA.cancelupdates ;
          CDSQ_MDLINEASALIDA.Last;// para que se situe en el
          //registro correcto
       end
       else
       begin
           CDSQ_MDLINEASALIDA.UndoLastChange (true);
           CDSQ_MDLINEASALIDAid_ARTICULO.FocusControl;
      end;
     abort;
  end;
end;
procedure TDMGS.CDSQ_MDLINEASALIDABeforeCancel(DataSet: TDataSet);
begin
// EL ESCAPE CONTROLA CUANDO PULSO LA SEGUNDA VEZ ESCAPE
// ESTANDO EL DATASET EN ESTADO DE INSERCION O EDICION
// ALBARANESESCAPE LO UTILIZO A LA HORA DE HACER ABORT Y CANCEL EN UDM
// ESCAPE LO UTILIZO PARA SABER QUE HE PULSADO ESCAPE EN EL FORMULARIO
  if ((CDSQ_MDLINEASALIDA.State in [dsedit,dsinsert]) and (RLINEASALIDA.ESCAPE OR RLINEASALIDA.ESCAPECDS)) then
  begin
      RLINEASALIDA.ESCAPEENTRA:= true;
      RLINEASALIDA.ESCAPE := true;// POR SI OCURRE UN ERROR AL HACER EL POST
      CDSQ_MDLINEASALIDA.post;
  end;
  RLINEASALIDA.ESCAPEENTRA:= false;
  // AL HACER ABORT ENTRA EN EL BEFORECANCEL
  // Y NO QUIERO QUE MUESTRE LA VENTANA DE INSERTAR O ACTUALIZAR
  // CONSTANTEMENTE
  RLINEASALIDA.ESCAPE := true;
end;

procedure TDMGS.CDSQ_MDLINEASALIDABeforeDelete(DataSet: TDataSet);
begin
// Esto es para cuando borre un pedido, que borre todas las lineas.
   if RLINEASALIDA.PREGUNTA then
   begin
     case PedirConfirmacion('¿Confirma que desea borrar esta Linea de la SALIDA?',true,true,false) of
          mrno:Abort;
     end;
   end
   else
      RLINEASALIDA.PREGUNTA := TRUE;
end;

procedure TDMGS.CDSQ_MDLINEASALIDABeforeOpen(DataSet: TDataSet);
begin
  BorrandoLineasSAL := false;
end;

procedure TDMGS.CDSQ_MDLINEASALIDABeforePost(DataSet: TDataSet);
var X:INTEGER;
begin
    if RLINEASALIDA.PREGUNTA then // lo utilizo para modificar las lineas de
     // pedidos dentro de albaranes
    begin
      if CDSQ_mdlineaSALIDA.state=dsinsert
      then x:=PedirConfirmacion('¿Confirma que desea dar de alta esta Linea de SALIDA?',true,true,true)
      else x:=PedirConfirmacion('¿Confirma que desea modificar esta Linea de SALIDA?',true,true,true);
           case x of
             mrno: begin
                    RLINEASALIDA.ESCAPE := FALSE;// PARA CONTROLAR EN EL UDM
                    RLINEASALIDA.ESCAPECDS:= FALSE;// PARA CONTROLAR EN EL FORMULARIO
                    CDSQ_mdlineaSALIDA.undolastchange (true);
                    CDSQ_mdlineaSALIDA.cancel;
                    cdsq_mdSALIDA.cancel;
                    abort;
                   end;
            mrcancel:begin
                      if RLINEASALIDA.ESCAPEENTRA then
                        CDSQ_mdlineaSALIDA.edit;
                      cdsq_mdlineaSALIDAid_articulo.FocusControl ;
                      abort;
                     end;
           end;
     END
    else
      RLINEASALIDA.ESCAPE := TRUE;

     IF (CDSQ_MDLINEASALIDA.State = DSINSERT)
      OR ((CDSQ_MDLINEASALIDA.State = DSEDIT) AND
      (CDSQ_MDLINEASALIDAID_ARTICULO.NewValue <> CDSQ_MDLINEASALIDAID_ARTICULO.OldValue))
      AND (TRIM(CDSQ_MDLINEASALIDAID_ARTICULO.NEWVALUE)<> '' )
      THEN
      BEGIN
       if  (not cdsq_mdlineasalidaid_articulo.IsNull) then
       begin
       CDSQ_MAXIMO.CLOSE;
       CDSQ_MAXIMO.COMMANDTEXT := 'SELECT COUNT(*) as MAXIMO FROM LINEA_SALIDA WHERE ID_EMPRESA='+FMENU.ID_EMPRESA+' AND ID_SALIDA='+CDSQ_MDLINEASALIDAID_SALIDA.ASSTRING+'  AND ID_ARTICULO='''+CDSQ_MDLINEASALIDAID_ARTICULO.NEWVALUE+''' AND ANYO='+ DMGS.CDSQ_MDLINEASALIDAANYO.ASSTRING ;
       CDSQ_MAXIMO.OPEN;
       IF NOT CDSQ_MAXIMO.Fields[0].ISNULL THEN
       IF CDSQ_MAXIMO.Fields[0].VALUE > 0 THEN
       BEGIN
          x:=PedirConfirmacion('El artículo '+ dmgs.cdsq_MDLINEASALIDAid_articulo.asstring+ ' está en mas de una línea.¿ Desea continuar?',true,true,false);
           case x of
                mrno: begin
                    if RLINEASALIDA.ESCAPEENTRA then
                          CDSQ_MDLINEASALIDA.edit;
                    CDSQ_MDLINEASALIDAid_articulo.FocusControl;
                    abort;
                    end;
          end;
       END;
       CDSQ_MAXIMO.CLOSE;
      end;
      END;
      RSALIDA.ESLINEA:= true;//trata la relacion maestro detalle como una tabla,
     //cuando da error, no da error en cdsmdlinpedidos, sino que lo da en
     //cdsmdpresupuesto, con lo  que tengo que saber que la llamada se ha hecho de
     // linpresupuesto para poder sacar un error detallado.
    RLINEASALIDA.ESCAPE := FALSE;// ME HACE FALTA
    // AL HACER ABORT ENTRA EN EL BEFORECANCEL
    // Y NO QUIERO QUE MUESTRE LA VENTANA DE INSERTAR O ACTUALIZAR
    // CONSTANTEMENTE
    if trim(cdsq_mdlineaSALIDAid_articulo.AsString) ='' then
        cdsq_mdlineaSALIDAid_articulo.Clear;


end;
procedure TDMGS.CDSQ_MDLINEASALIDADeleteError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
 RLINEASALIDA.ERROR := true;
 mostrarerror(e.message,' LINEA DE SALIDA ',23);
end;

procedure TDMGS.CDSQ_MDLINEASALIDAEditError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
 RLINEASALIDA.ERROR := true;
 mostrarerror(e.message,' LINEA DE SALIDA ',23);
end;

procedure TDMGS.CDSQ_MDLINEASALIDAPostError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
 RLINEASALIDA.ERROR := true;
 mostrarerror(e.message,' LINEA DE SALIDA ',23);
end;

procedure TDMGS.CDSQ_MDLINEASALIDAReconcileError(
  DataSet: TCustomClientDataSet; E: EReconcileError;
  UpdateKind: TUpdateKind; var Action: TReconcileAction);
begin
 RLINEASALIDA.ERROR := true;
 mostrarerror(e.message,' LINEA DE SALIDA ',23);
end;
procedure TDMGS.CDSQ_MDLINEASALIDAAfterApplyUpdates(Sender: TObject;
  var OwnerData: OleVariant);
begin
end;

//***********************    CDSQ_MDlineaSALIDA    *******************//
//***************************************************************//
//***********************    CDSQ_AVISO            *******************//

procedure TDMGS.CDSQ_AVISOAfterGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
  var aux:integer;
begin
  aux:= RAVISO.KEY ;
  RAVISO.KEY  := aux + 1;
end;
procedure TDMGS.CDSQ_AVISOAfterInsert(DataSet: TDataSet);
  var aux:tdatetime;
begin
  IF NOT RAVISO.BUSCANDO THEN
  BEGIN
     CDSQ_AVISOFECHA_AVISO.AsDateTime := DATE;
     CDSQ_AVISOHORA.asdatetime := time;
     CDSQ_AVISOID_EMPRESA.AsString := FMENU.ID_EMPRESA ;
     CDSQ_AVISOANYO.AsString := FMENU.ANYO;
     CDSQ_AVISOREALIZADO.VALUE := 0;
  CDSQ_MAXIMO.CLOSE;
  CDSQ_MAXIMO.COMMANDTEXT := 'SELECT ID_AVISO as MAXIMO FROM OPCIONESNUMERICAS WHERE ID_EMPRESA='+FMENU.ID_EMPRESA +' AND ANYO='+FMENU.ANYO ;
  CDSQ_MAXIMO.Open;
  IF CDSQ_MAXIMO.Fields[0].ISNULL THEN
     CDSQ_AVISOID_AVISO.VALUE :=0
  ELSE

  CDSQ_AVISOID_AVISO.VALUE := CDSQ_MAXIMO.Fields[0].VALUE + 1;
  CDSQ_MAXIMO.CLOSE;

  END;


end;


procedure TDMGS.CDSQ_AVISOAfterPost(DataSet: TDataSet);
begin
 RAVISO.ERROR:= false;
 if CDSQ_AVISO.ChangeCount > 0 then
  CDSQ_AVISO.ApplyUpdates(0); // permito 0 errores
 if RAVISO.ERROR then
 begin
     if ErrorNotFound then
     begin
       ErrorNotFound:= false;
       CDSQ_AVISO.CancelUpdates;
       CDSQ_AVISO.CLOSE;
     end
     ELSE
     begin
       if tipoerror then // cuando da el error de que no se puede
           // borrar pq hay referencias en otras tablas.
       begin
          CDSQ_AVISO.cancelupdates ;
          CDSQ_AVISO.Last;// para que se situe en el
          //registro correcto
       end
       else
       begin
         CDSQ_AVISO.edit;
        CDSQ_AVISOid_AVISO.FocusControl;
       end;
      abort;
     end;
  end;
end;


procedure TDMGS.CDSQ_AVISOBeforeClose(DataSet: TDataSet);
begin
   if (CDSQ_AVISO.state in [dsedit,dsinsert]) AND (NOT RAVISO.BUSCANDO)
   then
      CDSQ_AVISO.post;
   RAVISO.KEY:=0;
   INICIARRECORD(VAVISO);
end;

procedure TDMGS.CDSQ_AVISOBeforeGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
begin
  OWNERDATA:= inttostr(RAVISO.KEY ) +FILTRO+ inttostr(CDSQ_AVISO.PacketRecords)+FILTRO;
  OWNERDATA := OWNERDATA + OBTENEROWNERDATA(VAVISO)
end;

procedure TDMGS.CDSQ_AVISOBeforeOpen(DataSet: TDataSet);
begin
 CDSQ_AVISO.FetchOnDemand := FALSE;
 CDSQ_AVISO.PacketRecords := 20;
 RAVISO.KEY :=0; // para que no coja el primero.
end;

procedure TDMGS.CDSQ_AVISOBeforePost(DataSet: TDataSet);
var x:integer;
begin
 IF RAVISO.BUSCANDO THEN ABORT;
 IF RAVISO.PREGUNTA  THEN
 BEGIN
    if CDSQ_AVISO.state=dsinsert then x:=PedirConfirmacion('¿Confirma que desea dar de alta este Aviso?',true,true,true)
                                     else x:=PedirConfirmacion('¿Confirma que desea modificar este Aviso?',true,true,true);
    case x of
        mrno: begin
                 CDSQ_AVISO.UndoLastChange(TRUE);
                 CDSQ_AVISO.cancel;
                 abort;
              end;
        mrcancel:BEGIN
                  CDSQ_AVISOid_AVISO.FocusControl ;
                  abort;
                 END;

    end;
  END
 ELSE
    RAVISO.PREGUNTA  := TRUE;

 IF CDSQ_MDENTRADA.State = DSINSERT THEN
 BEGIN
      CDSQ_MAXIMO.CLOSE;
      CDSQ_MAXIMO.COMMANDTEXT := 'SELECT ID_AVISO as MAXIMO FROM OPCIONESNUMERICAS WHERE ID_EMPRESA='+FMENU.ID_EMPRESA +' AND ANYO='+FMENU.ANYO ;
      CDSQ_MAXIMO.Open;
  IF CDSQ_MAXIMO.Fields[0].ISNULL THEN
     CDSQ_AVISOID_AVISO.VALUE :=0
  ELSE

      CDSQ_AVISOID_AVISO.VALUE := CDSQ_MAXIMO.Fields[0].VALUE + 1;
      CDSQ_MAXIMO.CLOSE;
 END;


end;
procedure TDMGS.CDSQ_AVISODeleteError(DataSet: TDataSet; E: EDatabaseError;
  var Action: TDataAction);
begin
  RAVISO.ERROR :=true;
  mostrarError(e.Message,' AVISO ',24);
end;

procedure TDMGS.CDSQ_AVISOEditError(DataSet: TDataSet; E: EDatabaseError;
  var Action: TDataAction);
begin
  RAVISO.ERROR :=true;
  mostrarError(e.Message,' AVISO ',24);
end;

procedure TDMGS.CDSQ_AVISOPostError(DataSet: TDataSet; E: EDatabaseError;
  var Action: TDataAction);
begin
  RAVISO.ERROR :=true;
  mostrarError(e.Message,' AVISO ',24);
end;

procedure TDMGS.CDSQ_AVISOReconcileError(DataSet: TCustomClientDataSet;
  E: EReconcileError; UpdateKind: TUpdateKind;
  var Action: TReconcileAction);
begin
   RAVISO.ERROR :=true;
  mostrarError(e.Message,' AVISO ',24);
end;

procedure TDMGS.CDSQ_AVISOBeforeDelete(DataSet: TDataSet);
begin
   case PedirConfirmacion('¿Confirma que desea borrar este Aviso?',true,true,false) of
        mrno:Abort;
   end;
end;

//***********************    CDSQ_AVISO            *******************//
//***************************************************************//

procedure TDMGS.CDSQ_AVISOAUXAfterGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
  var aux:integer;
begin
  aux:= RAVISOAUX.KEY;
  RAVISOAUX.KEY := aux + 1;
end;

procedure TDMGS.CDSQ_AVISOAUXBeforeClose(DataSet: TDataSet);
begin
   RAVISOAUX.KEY :=0;
   INICIARRECORD(VAVISOAUX);
end;

procedure TDMGS.CDSQ_AVISOAUXBeforeGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
begin
  OWNERDATA:= inttostr(RAVISOAUX.KEY ) +FILTRO+ inttostr(CDSQ_AVISOAUX.PacketRecords)+FILTRO;
  OWNERDATA := OWNERDATA + OBTENEROWNERDATA(VAVISOAUX)
end;

procedure TDMGS.CDSQ_AVISOAUXBeforeOpen(DataSet: TDataSet);
begin
 CDSQ_AVISOAUX.FetchOnDemand := FALSE;
 CDSQ_AVISOAUX.PacketRecords := 20;
 RAVISOAUX.KEY :=0; // para que no coja el primero.
end;

procedure TDMGS.CDSQ_AVISOAUXReconcileError(DataSet: TCustomClientDataSet;
  E: EReconcileError; UpdateKind: TUpdateKind;
  var Action: TReconcileAction);
begin
  MOSTRARERROR (E.MESSAGE,' AVISOS ', -1);
end;
//***********************    CDSQ_AVISO            *******************//
//***************************************************************//
//***********************    CDSQ_PEDIDOSPENDIENTES            *******************//

procedure TDMGS.CDSQ_PEDIDOSPENDIENTESAfterGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
  var aux:integer;
begin
  aux:= KEYPENDIENTES;
  KEYPENDIENTES := aux + 1;
end;

procedure TDMGS.CDSQ_PEDIDOSPENDIENTESAfterInsert(DataSet: TDataSet);
begin
  IF NOT BUSCANDOPEN THEN
  BEGIN
   CDSQ_PEDIDOSPENDIENTESFECHA_NOTA.ASDATETIME := DATE;
   CDSQ_PEDIDOSPENDIENTESFECHA_PEDIDO.ASDATETIME := DATE;
   CDSQ_PEDIDOSPENDIENTESID_EMPRESA.ASSTRING := FMENU.ID_EMPRESA;
     CDSQ_MAXIMO.CLOSE;
  CDSQ_MAXIMO.COMMANDTEXT := 'SELECT MAX(LINEA) as MAXIMO FROM PEDIDOSPENDIENTES WHERE ID_EMPRESA='+FMENU.ID_EMPRESA;
  CDSQ_MAXIMO.Open;
  IF CDSQ_MAXIMO.Fields[0].ISNULL THEN
     CDSQ_PEDIDOSPENDIENTESLINEA.VALUE :=0
  ELSE

  CDSQ_PEDIDOSPENDIENTESLINEA.VALUE := CDSQ_MAXIMO.Fields[0].VALUE + 1;
  CDSQ_MAXIMO.CLOSE;

  END;
end;

procedure TDMGS.CDSQ_PEDIDOSPENDIENTESAfterPost(DataSet: TDataSet);
var aux:string;
begin
  PENDIENTESESCAPE:= TRUE;
  PENDIENTESerror := false;
  if CDSQ_PEDIDOSPENDIENTES.ChangeCount >0 then
    CDSQ_PEDIDOSPENDIENTES.ApplyUpdates(0);
  if PENDIENTESerror then
  begin
     if ErrorNotFound then
     begin
       ErrorNotFound:= false;
       PENDIENTESESCAPE := FALSE;// ME HACE FALTA
       ESCAPEPENDIENTES := FALSE;
       // AL HACER ABORT ENTRA EN EL BEFORECANCEL
       // Y NO QUIERO QUE MUESTRE LA VENTANA DE INSERTAR O ACTUALIZAR
       // CONSTANTEMENTE
       CDSQ_PEDIDOSPENDIENTES.CancelUpdates;
       CDSQ_PEDIDOSPENDIENTES.close;
     end
     ELSE
     begin
       if tipoerror then // cuando da el error de que no se puede
           // borrar pq hay referencias en otras tablas.
       begin
          CDSQ_PEDIDOSPENDIENTES.cancelupdates ;
          CDSQ_PEDIDOSPENDIENTES.Last;// para que se situe en el
          //registro correcto
       end
       else
       begin
          CDSQ_PEDIDOSPENDIENTES.Edit;
          CDSQ_PEDIDOSPENDIENTESID_ARTICULO.FocusControl;
       END;
       abort;
     end;
  end;
end;

procedure TDMGS.CDSQ_PEDIDOSPENDIENTESBeforeCancel(DataSet: TDataSet);
BEGIN
// EL ESCAPE CONTROLA CUANDO PULSO LA SEGUNDA VEZ ESCAPE
// ESTANDO EL DATASET EN ESTADO DE INSERCION O EDICION
// ALBARANESESCAPE LO UTILIZO A LA HORA DE HACER ABORT Y CANCEL EN UDM
// ESCAPE LO UTILIZO PARA SABER QUE HE PULSADO ESCAPE EN EL FORMULARIO
  if ((CDSQ_PEDIDOSPENDIENTES.State in [dsedit,dsinsert]) and (PENDIENTESescape OR ESCAPEPENDIENTES)) then
  begin
      PENDIENTESescapeentra:= true;
      PENDIENTESESCAPE := true;// POR SI OCURRE UN ERROR AL HACER EL POST
      if not buscandoPEN then
         CDSQ_PEDIDOSPENDIENTES.post;
  end;
  PENDIENTESescapeentra:= false;
  // AL HACER ABORT ENTRA EN EL BEFORECANCEL
  // Y NO QUIERO QUE MUESTRE LA VENTANA DE INSERTAR O ACTUALIZAR
  // CONSTANTEMENTE
  PENDIENTESESCAPE := true;
END;
procedure TDMGS.CDSQ_PEDIDOSPENDIENTESBeforeClose(DataSet: TDataSet);
begin
   if (CDSQ_PEDIDOSPENDIENTES.state in [dsedit,dsinsert]) AND NOT BUSCANDOPEN then
      CDSQ_PEDIDOSPENDIENTES.post;
   KEYPENDIENTES:=0;
   PNBGRBUSCAR:='';
   PNbgrtipo:='';
   PNBGRORDEN:='';// CDSQ_PEDIDOSPENDIENTES
   
end;

procedure TDMGS.CDSQ_PEDIDOSPENDIENTESBeforeDelete(DataSet: TDataSet);
begin
   case PedirConfirmacion('¿Confirma que desea borrar este Pedido Pendiente?',true,true,false) of
        mrno:Abort;
   end;
end;

procedure TDMGS.CDSQ_PEDIDOSPENDIENTESBeforeGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
begin
  OWNERDATA:= inttostr(KEYPENDIENTES) +FILTRO+ inttostr(CDSQ_PEDIDOSPENDIENTES.PacketRecords)+FILTRO;
  OWNERDATA := OWNERDATA + PNBGRBUSCAR + FILTRO + FMENU.ID_EMPRESA+ FILTRO + PNbgrtipo+ filtro+PNBGRORDEN+FILTRO;
end;

procedure TDMGS.CDSQ_PEDIDOSPENDIENTESBeforeOpen(DataSet: TDataSet);
begin
 CDSQ_PEDIDOSPENDIENTES.FetchOnDemand := FALSE;
 CDSQ_PEDIDOSPENDIENTES.PacketRecords := 20;
 KEYPENDIENTES :=0; // para que no coja el primero.
end;

procedure TDMGS.CDSQ_PEDIDOSPENDIENTESBeforePost(DataSet: TDataSet);
var x:integer;
begin

    if preguntaPENDIENTE then
    begin
    if CDSQ_PEDIDOSPENDIENTES.state=dsinsert then x:=PedirConfirmacion('¿Confirma que desea dar de alta este Pedido Pendiente?',true,true,true)
                               else x:=PedirConfirmacion('¿Confirma que desea modificar este Pedido Pendiente?',true,true,true);
    case x of
        mrno: begin
                 PENDIENTESESCAPE := FALSE;// PARA CONTROLAR EN EL UDM
                 ESCAPEPENDIENTES:= FALSE;// PARA CONTROLAR EN EL FORMULARIO
                 CDSQ_PEDIDOSPENDIENTES.UndoLastChange(TRUE);
                 CDSQ_PEDIDOSPENDIENTES.cancel;
                 abort;
              end;
        mrcancel:
              BEGIN
                 if PENDIENTESescapeentra then
                     CDSQ_PEDIDOSPENDIENTES.edit;
                 CDSQ_PEDIDOSPENDIENTESID_ARTICULO.FocusControl;
                 ABORT;
              END;
    end;
    end
    else
      preguntaPENDIENTE := true;
    PENDIENTESESCAPE := FALSE;// ME HACE FALTA
    // AL HACER ABORT ENTRA EN EL BEFORECANCEL
    // Y NO QUIERO QUE MUESTRE LA VENTANA DE INSERTAR O ACTUALIZAR
    // CONSTANTEMENTE

    if trim(cdsq_PEDIDOSPENDIENTESid_CLIENTE.AsString) ='' then
        CDSQ_PEDIDOSPENDIENTESID_CLIENTE.Clear;
    if trim(cdsq_PEDIDOSPENDIENTESid_PROVEEDOR.AsString) ='' then
        CDSQ_PEDIDOSPENDIENTESID_PROVEEDOR.Clear;
    if trim(cdsq_PEDIDOSPENDIENTESid_COLOR.AsString) ='' then
        CDSQ_PEDIDOSPENDIENTESID_COLOR.Clear;
    if trim(cdsq_PEDIDOSPENDIENTESid_ARTICULO.AsString) ='' then
        CDSQ_PEDIDOSPENDIENTESID_ARTICULO.Clear;

    CDSQ_MAXIMO.CLOSE;
    CDSQ_MAXIMO.COMMANDTEXT := 'SELECT MAX(LINEA) as MAXIMO FROM PEDIDOSPENDIENTES WHERE ID_EMPRESA='+FMENU.ID_EMPRESA;
    CDSQ_MAXIMO.Open;
  IF CDSQ_MAXIMO.Fields[0].ISNULL THEN
     CDSQ_PEDIDOSPENDIENTESLINEA.VALUE :=0
  ELSE

    CDSQ_PEDIDOSPENDIENTESLINEA.VALUE := CDSQ_MAXIMO.Fields[0].VALUE + 1;
    CDSQ_MAXIMO.CLOSE;

end;
procedure TDMGS.CDSQ_PEDIDOSPENDIENTESDeleteError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
  PENDIENTESerror :=true;
  mostrarError(e.Message,' PEDIDOS PENDIENTES ',25);
end;

procedure TDMGS.CDSQ_PEDIDOSPENDIENTESEditError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
  PENDIENTESerror :=true;
  mostrarError(e.Message,' PEDIDOS PENDIENTES ',25);
end;

procedure TDMGS.CDSQ_PEDIDOSPENDIENTESPostError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
  PENDIENTESerror :=true;
  mostrarError(e.Message,' PEDIDOS PENDIENTES ',25);
end;

procedure TDMGS.CDSQ_PEDIDOSPENDIENTESReconcileError(
  DataSet: TCustomClientDataSet; E: EReconcileError;
  UpdateKind: TUpdateKind; var Action: TReconcileAction);
begin
  PENDIENTESerror :=true;
  mostrarError(e.Message,' PEDIDOS PENDIENTES ',25);
end;
//***********************    CDSQ_PEDIDOSPENDIENTES            *******************//
//***************************************************************//
//***********************    CDSQ_PEDIDOSPENDIENTESAUX            *******************//

procedure TDMGS.CDSQ_PEDIDOSPENDIENTESAUXAfterGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
  var aux:integer;
begin
  aux:= KEYPENDIENTESAUX;
  KEYPENDIENTESAUX := aux + 1;
END;

procedure TDMGS.CDSQ_PEDIDOSPENDIENTESAUXBeforeClose(DataSet: TDataSet);
begin
   KEYPENDIENTESAUX:=0;
   PNABGRBUSCAR:='';
   PNAbgrtipo:='';
   PNABGRORDEN:='';// CDSQ_PEDIDOSPENDIENTES
end;

procedure TDMGS.CDSQ_PEDIDOSPENDIENTESAUXBeforeGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
begin
  OWNERDATA:= inttostr(KEYPENDIENTESAUX) +FILTRO+ inttostr(CDSQ_PEDIDOSPENDIENTESAUX.PacketRecords)+FILTRO;
  OWNERDATA := OWNERDATA + PNABGRBUSCAR + FILTRO + FMENU.ID_EMPRESA+ FILTRO + PNAbgrtipo+ filtro+PNABGRORDEN+FILTRO;
end;

procedure TDMGS.CDSQ_PEDIDOSPENDIENTESAUXBeforeOpen(DataSet: TDataSet);
begin
 CDSQ_PEDIDOSPENDIENTESAUX.FetchOnDemand := FALSE;
 CDSQ_PEDIDOSPENDIENTESAUX.PacketRecords := 20;
 KEYPENDIENTESAUX :=0; // para que no coja el primero.
end;

procedure TDMGS.CDSQ_PEDIDOSPENDIENTESAUXReconcileError(
  DataSet: TCustomClientDataSet; E: EReconcileError;
  UpdateKind: TUpdateKind; var Action: TReconcileAction);
begin
    MOSTRARERROR (E.MESSAGE,' ARTICULOS ', -1);
end;
//***********************    CDSQ_PEDIDOSPENDIENTESAUX            *******************//
//**********************************************************************************//
//***********************    CDSQ_MDTICKET                        *******************//

procedure TDMGS.CDSQ_MDTICKETAfterApplyUpdates(Sender: TObject;
  var OwnerData: OleVariant);
begin
   IF (OWNERDATA = 1)
   AND (FMENU.DAR_AVISO='1')
   THEN
      SHOWMESSAGE('LAS EXISTENCIAS DE ESTE PRODUCTO ESTAN POR DEBAJO DE LA CANTIDAD MINIMA.');
end;

procedure TDMGS.CDSQ_MDTICKETAfterGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
  VAR AUX:INTEGER;
begin
  AUX := KEYTICKET;
  KEYTICKET := AUX + 1;
end;

procedure TDMGS.CDSQ_MDTICKETAfterInsert(DataSet: TDataSet);
VAR AUX:INTEGER;
begin
  IF NOT BUSCANDOTIC THEN
  BEGIN
      CDSQ_MDTICKETFECHA.AsDateTime :=  DATE;
      CDSQ_MDTICKETID_EMPRESA.AsString := FMENU.ID_EMPRESA;
      cdsq_MDTICKETdescuento.asstring := '0';
      cdsq_MDTICKETdescuentoEURO.asstring := '0';
      CDSQ_MDTICKETBASE_TICKET.asfloat := 0;
      CDSQ_MDTICKETIVA.asSTRING := FMENU.IVA;
      CDSQ_MDTICKETBASE_TICKETSINIVA.asfloat := 0;
      cdsq_Mdticketimpreso.Value := 0;
      CDSQ_MDTICKETIMPRESO.asfloat := 0;
      CDSQ_MDTICKETHORA.AsDateTime := TIME;
      CDSQ_MDTICKETID_SERIE.value := FMENU.ID_SERIE;
      CDSQ_MDTICKETANYO.ASSTRING :=  FMENU.ANYO;
      CDSQ_MDTICKETID_CLIENTE.AsString := FMENU.CLXDEFECTO;
      CDSQ_MDTICKETFORMAPAGO.AsString := FMENU.ID_FORMAPAGO;
      CDSQ_MDTICKETCOBRADO.AsString := '0';
      CDSQ_MAXIMO.CLOSE;
      CDSQ_MAXIMO.COMMANDTEXT := 'SELECT TICKET as MAXIMO FROM SERIES WHERE ID_EMPRESA='+FMENU.ID_EMPRESA+' AND ID_SERIE='''+FMENU.ID_SERIE+''' AND anyo='+fmenu.anyo;//ANYO='+INTTOSTR(YEAROF(DATE))+'  ';
      CDSQ_MAXIMO.Open;
  IF CDSQ_MAXIMO.Fields[0].ISNULL THEN
     CDSQ_MDTICKETID_TICKET.VALUE :=0
  ELSE

      CDSQ_MDTICKETID_TICKET.VALUE := CDSQ_MAXIMO.Fields[0].VALUE + 1;
      CDSQ_MAXIMO.CLOSE;
  END;
end;

procedure TDMGS.CDSQ_MDTICKETAfterPost(DataSet: TDataSet);
begin
 TICKETERROR:= false;
 if CDSQ_MDTICKET.ChangeCount > 0 then
    CDSQ_MDTICKET.ApplyUpdates(0); // permito 0 errores
 if TICKETerror then
 begin
     if ErrorNotFound then
     begin
       ErrorNotFound:= false;
       CDSQ_MDTICKET.CancelUpdates;
       CDSQ_MDTICKET.CLOSE;
     end
     ELSE
     begin
       if tipoerror then // cuando da el error de que no se puede
           // borrar pq hay referencias en otras tablas.
       begin
          CDSQ_MDTICKET.cancelupdates ;
          CDSQ_MDTICKET.Last;// para que se situe en el
          //registro correcto
       end
       else
       begin
          CDSQ_MDTICKET.edit;
          CDSQ_MDTICKETid_TICKET.FocusControl;
       END;
      abort;
     end;
 end;
end;

procedure TDMGS.CDSQ_MDTICKETBeforeClose(DataSet: TDataSet);
begin
   if (CDSQ_MDTICKET.state in [dsedit,dsinsert]) AND(NOT BUSCANDOTIC) then
      CDSQ_MDTICKET.post;
   KEYTICKET :=0;
   TIBGRID := '';
   TIBGRTIPO:='';
   TIBGRORDEN:='';
   TIBGRORDENLINEA:='';
   INICIARLOCALES(RTICKETS); //PASANDOLO POCO A POCO
   INICIARRECORD(VTICKETS); // PASANDOLO POCO A POCO
end;

procedure TDMGS.CDSQ_MDTICKETBeforeGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
begin
  OWNERDATA:= inttostr(KEYTICKET) +FILTRO+ inttostr(CDSQ_MDTICKET.PacketRecords)+FILTRO;
  OWNERDATA := OWNERDATA +    TIBGRID + FILTRO + TIBGRTIPO + FILTRO + fmenu.ID_EMPRESA + filtro+TIBGRORDEN+FILTRO+TIBGRORDENLINEA+FILTRO;//+ PRBGRORDEN+FILTRO;
end;

procedure TDMGS.CDSQ_MDTICKETBeforeOpen(DataSet: TDataSet);
begin
 CDSQ_MDTICKET.FetchOnDemand := FALSE;

 CDSQ_MDTICKET.PacketRecords := 15;
 KEYTICKET:=0;
end;

procedure TDMGS.CDSQ_MDTICKETBeforePost(DataSet: TDataSet);
  var x:integer;
begin
     if buscandoTIC then abort;
{     if preguntaTICKET then
     begin
      if CDSQ_MDTICKET.state=dsinsert then x:=PedirConfirmacion('¿Confirma que desea dar de alta este TICKET?',true,true,true)
                             else x:=PedirConfirmacion('¿Confirma que desea modificar este TICKET?',true,true,true);
      case x of
             mrno: begin
                  cdsq_mdTICKET.UndoLastChange(true);
                  cdsq_mdTICKET.cancel;
                  abort;
                  end;
         mrcancel:begin
                  cdsq_mdTICKETid_TICKET.FocusControl;
                  abort;
                  end;
      end;

     end
     else
       preguntaTICKET := true;
}
      IF cdsq_mdTICKET.STATE = DSINSERT THEN
      BEGIN
            CDSQ_MAXIMO.CLOSE;
            CDSQ_MAXIMO.COMMANDTEXT := 'SELECT TICKET as MAXIMO FROM SERIES WHERE ID_EMPRESA='+FMENU.ID_EMPRESA+' AND ID_SERIE='''+FMENU.ID_SERIE+''' AND anyo='+fmenu.anyo;//ANYO='+INTTOSTR(YEAROF(DATE))+'  ';
            CDSQ_MAXIMO.Open;
  IF CDSQ_MAXIMO.Fields[0].ISNULL THEN
     CDSQ_MDTICKETID_TICKET.VALUE :=0
  ELSE

            CDSQ_MDTICKETID_TICKET.VALUE := CDSQ_MAXIMO.Fields[0].VALUE + 1;
            CDSQ_MAXIMO.CLOSE;
      END;
      CDSQ_MDTICKETTOTALCOBRADO.AsFloat := CDSQ_MDTICKETTOTAL.AsFloat ;
      CDSQ_MDTICKETTOTALDESCUENTO.AsFloat := CDSQ_MDTICKETTOTALDESCUENTOAUX.AsFloat ;
end;

procedure TDMGS.CDSQ_MDTICKETCalcFields(DataSet: TDataSet);
VAR OLD,NEW,NEWID,OLDID:STRING;
begin
  IF (CDSQ_MDTICKET.State IN [DSEDIT] )
  THEN
  BEGIN
    NEW := VARTOSTR(CDSQ_MDTICKETID_CLIENTE.NewValue);
    old := VARTOSTR(CDSQ_MDTICKETID_CLIENTE.oldvalue);
  END;
  IF (CDSQ_MDTICKET.State IN [DSINSERT] )
  THEN
  BEGIN
    NEW := VARTOSTR(CDSQ_MDTICKETID_CLIENTE.NewValue);
    OLD := '';
  END;
  if CDSQ_MDTICKETCLIENTEESTA.value then
     old := CDSQ_MDTICKETCLIENTEOLD.value;

  IF (CDSQ_MDTICKET.State IN [DSEDIT,DSINSERT] ) AND
     (NEW <> OLD ) AND
     (NEW <> '')
  THEN
  BEGIN
      CDSQ_FLOAT.CLOSE;
      CDSQ_FLOAT.COMMANDTEXT := 'SELECT  NOMBRE_COMERCIAL FROM CLIENTES WHERE ID_CLIENTE=' +CDSQ_MDTICKETID_CLIENTE.ASSTRING;
      CDSQ_FLOAT.Open;
      IF CDSQ_FLOAT.RecordCount > 0 THEN
            CDSQ_MDTICKETCLIENTENOMBRE.ASSTRING := TRIM(CDSQ_FLOAT.Fields[0].ASSTRING)
      ELSE
           CDSQ_MDTICKETCLIENTENOMBRE.ASSTRING := '';
      CDSQ_FLOAT.CLOSE;
      CDSQ_MDTICKETCLIENTEESTA.value := TRUE;
      CDSQ_MDTICKETCLIENTEOLD.value := new;
  END
  ELSE
     IF NOT CDSQ_MDTICKETCLIENTEESTA.value THEN
            CDSQ_MDTICKETCLIENTENOMBRE.ASSTRING := CDSQ_MDTICKETNOMBRECLIENTE.ASSTRING;

//************************************************************************//
//************************************************************************//

  IF (CDSQ_MDTICKET.State IN [DSEDIT] )
  THEN
  BEGIN
    NEWID := VARTOSTR(CDSQ_MDTICKETFORMAPAGO.NewValue);
    oldID := VARTOSTR(CDSQ_MDTICKETFORMAPAGO.oldvalue);
  END;
  IF (CDSQ_MDTICKET.State IN [DSINSERT] )
  THEN
  BEGIN
    NEWID := VARTOSTR(CDSQ_MDTICKETFORMAPAGO.NewValue);
    OLDID := '';
  END;
  if CDSQ_MDTICKETFORMAPAGOESTA.value then
     OLDID := CDSQ_MDTICKETFORMAPAGOOLD.value;

  IF (CDSQ_MDTICKET.State IN [DSEDIT,DSINSERT] ) AND
     (NEWID <> OLDID ) AND
     (NEWID <> '')
  THEN
  BEGIN
      CDSQ_FLOAT.CLOSE;
      CDSQ_FLOAT.COMMANDTEXT := 'SELECT  DESCRIPCION FROM FORMAPAGO WHERE ID_FORMA=''' +CDSQ_MDTICKETFORMAPAGO.ASSTRING+ ''' ';
      CDSQ_FLOAT.Open;
      IF CDSQ_FLOAT.RecordCount > 0 THEN
            CDSQ_MDTICKETDESCRIPCIONFORMAPAGO.ASSTRING := TRIM(CDSQ_FLOAT.Fields[0].ASSTRING)
      ELSE
           CDSQ_MDTICKETDESCRIPCIONFORMAPAGO.ASSTRING := '';
      CDSQ_FLOAT.CLOSE;
      CDSQ_MDTICKETFORMAPAGOESTA.value := TRUE;
      CDSQ_MDTICKETFORMAPAGOOLD.value := NEWID;
  END
  ELSE
     IF NOT CDSQ_MDTICKETFORMAPAGOESTA.value THEN
        CDSQ_MDTICKETDESCRIPCIONFORMAPAGO.ASSTRING := CDSQ_MDTICKETFORMAPAGODESCRIPCION.ASSTRING;

  //************************************************************************//


  IF CDSQ_MDTICKETIMPRESO.value = 1 THEN CDSQ_MDTICKETIMPRIMIDO.value := 'SI'
  ELSE CDSQ_MDTICKETIMPRIMIDO.value := 'NO';


  CDSQ_MDTICKETTOTALDESCUENTOAUX.Value := 0;
  IF CDSQ_MDTICKETDESCUENTO.asfLOAT <> 0 THEN
     CDSQ_MDTICKETTOTALDESCUENTOAUX.VALUE := roundto((CDSQ_MDTICKETBASE_TICKET.asfloat*CDSQ_MDTICKETDESCUENTO.asfloat/100),DMGS.DECIMALES);
  IF CDSQ_MDTICKETDESCUENTOEURO.asfLOAT <> 0 THEN
     CDSQ_MDTICKETTOTALDESCUENTOAUX.VALUE := roundto(CDSQ_MDTICKETDESCUENTOEURO.asfloat,DMGS.DECIMALES);

  CDSQ_MDTICKETTOTAL.asfloat := roundto((CDSQ_MDTICKETBASE_TICKET.asfloat - CDSQ_MDTICKETTOTALDESCUENTOAUX.asfloat),DMGS.DECIMALES);
  CDSQ_MDTICKETHORATICKET.Value := TIMEOF(CDSQ_MDTICKETHORA.AsDateTime);
 
end;

procedure TDMGS.CDSQ_MDTICKETDeleteError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
  VAR AUX:INTEGER;
begin
TICKETerror:=true;
if eslinTICKET then
 begin
   aux := 27; // la relacion master-detail se comporta como una tabla, como tal
   // no va a entrar en los errores de lineas de presupuesto, lo que hago es controlar de donde
   // viene el error, para darlo con mas detalle, y el numero 12 corresponde a los
   // errores de linpresupuesto
   lineaTICKETerror := true;
   eslinTICKET:= false;
 end
else
 aux := 26;// corresponde a pedidos
mostrarerror(e.message,' TICKET ',aux);
end;
procedure TDMGS.CDSQ_MDTICKETEditError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
  VAR AUX:INTEGER;
begin
TICKETerror:=true;
if eslinTICKET then
 begin
   aux := 27; // la relacion master-detail se comporta como una tabla, como tal
   // no va a entrar en los errores de lineas de presupuesto, lo que hago es controlar de donde
   // viene el error, para darlo con mas detalle, y el numero 12 corresponde a los
   // errores de linpresupuesto
   lineaTICKETerror := true;
   eslinTICKET:= false;
 end
else
 aux := 26;// corresponde a pedidos
mostrarerror(e.message,' TICKET ',aux);
end;

procedure TDMGS.CDSQ_MDTICKETReconcileError(DataSet: TCustomClientDataSet;
  E: EReconcileError; UpdateKind: TUpdateKind;
  var Action: TReconcileAction);
  VAR AUX:INTEGER;
begin
TICKETerror:=true;
if eslinTICKET then
 begin
   aux := 27; // la relacion master-detail se comporta como una tabla, como tal
   // no va a entrar en los errores de lineas de presupuesto, lo que hago es controlar de donde
   // viene el error, para darlo con mas detalle, y el numero 12 corresponde a los
   // errores de linpresupuesto
   lineaTICKETerror := true;
   eslinTICKET:= false;
 end
else
 aux := 26;// corresponde a pedidos
mostrarerror(e.message,' TICKET ',aux);
end;
procedure TDMGS.CDSQ_MDTICKETPostError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
  VAR AUX:INTEGER;
begin
TICKETerror:=true;
if eslinTICKET then
 begin
   aux := 27; // la relacion master-detail se comporta como una tabla, como tal
   // no va a entrar en los errores de lineas de presupuesto, lo que hago es controlar de donde
   // viene el error, para darlo con mas detalle, y el numero 12 corresponde a los
   // errores de linpresupuesto
   lineaTICKETerror := true;
   eslinTICKET:= false;
 end
else
 aux := 26;// corresponde a pedidos
mostrarerror(e.message,' TICKET ',aux);
end;
//***********************    CDSQ_MDTICKET                        *******************//
//**********************************************************************************//
//***********************    CDSQ_MDLINEATICKET                        *******************//

procedure TDMGS.CDSQ_MDLINEATICKETAfterInsert(DataSet: TDataSet);
begin
  CDSQ_mdlineaTICKETPRECIO.asfloat := 0;
  CDsq_mdlineaTICKETCANTIDAD.asfloat := 1;
  CDSQ_MDLINEATICKETIVA.ASSTRING :=FMENU.IVA;
  CDsq_mdlineaTICKETDESCUENTO.asfloat := 0;
  CDsq_mdlineaTICKETDESCUENTOEURO.asfloat := 0;
  CDSQ_mdlineaTICKETIMPORTE.asfloat := 0;

  CDSQ_MAXIMO.CLOSE;
  CDSQ_MAXIMO.COMMANDTEXT := 'SELECT MAX(LINEA) as MAXIMO FROM LINEA_TICKET WHERE ID_EMPRESA='+FMENU.ID_EMPRESA+' AND ID_TICKET='+CDSQ_MDTICKETID_TICKET.ASSTRING;
  CDSQ_MAXIMO.Open;
  IF CDSQ_MAXIMO.Fields[0].ISNULL THEN
    CDSQ_MDLINEATICKETLINEA.VALUE :=0
  ELSE
    CDSQ_MDLINEATICKETLINEA.VALUE := CDSQ_MAXIMO.Fields[0].VALUE + 1;
  CDSQ_MAXIMO.CLOSE;
end;

procedure TDMGS.CDSQ_MDLINEATICKETAfterPost(DataSet: TDataSet);
VAR AUXBOOKMARK:TBOOKMARK;
begin
  LINTICESCAPE:= TRUE;
  LINEATICKETERROR:= FALSE;
  AUXBOOKMARK:= CDSQ_MDLINEATICKET.GetBookmark;
  if(CDSQ_MDLINEATICKET.ChangeCount >0 ) then
     CDSQ_MDLINEATICKET.ApplyUpdates(0);
  if LINEATICKETerror then
  // si el error se ha producido en la linea de PRESUPUESTO, deshago los cambios
  // que he introducido
    if ErrorNotFound then
     begin
       ErrorNotFound:= false;
       LINTICESCAPE := FALSE;// ME HACE FALTA
       ESCAPELINTIC := FALSE;
       CDSQ_MDLINEATICKET.CancelUpdates;
       CDSQ_MDLINEATICKET.close;
       CDSQ_MDTICKET.Close;
     end
  ELSE
  begin
       if tipoerror then // cuando da el error de que no se puede
           // borrar pq hay referencias en otras tablas.
       begin
          CDSQ_MDLINEATICKET.cancelupdates ;
          CDSQ_MDLINEATICKET.Last;// para que se situe en el
          //registro correcto
       end
       else
       begin
          CDSQ_MDLINEATICKET.UndoLastChange (true);
//          CDSQ_MDLINEATICKET.Edit;
          CDSQ_MDLINEATICKETid_ARTICULO.FocusControl;
      end;
     abort;
  end;
  CDSQ_mDLINEATICKET.DisableControls ;
  calcularbaseTICKET;
  CDSQ_MDLINEATICKET.EnableControls ;
  CDSQ_MDTICKET.Edit;
  CDSQ_MDTICKETbase_TICKET.asfloat := base_TICKET;
  preguntaTICKET := false;
  CDSQ_MDTICKET.post;
  IF CDSQ_MDLINEATICKET.RecordCount > 1 THEN
      cdsq_mdLINEATICKET.GotoBookmark(auxbookmark);
  cdsq_mdLINEATICKET.FreeBookmark(auxbookmark);
end;

procedure TDMGS.CDSQ_MDLINEATICKETBeforeDelete(DataSet: TDataSet);
begin
    IF (DMGS.CDSQ_MDTICKETCOBRADO.ASSTRING = '1')
    THEN
    BEGIN
       SHOWMESSAGE('LA LINEA DEL TICKET NO SE PUEDE BORRAR.YA HA SIDO COBRADO');
       ABORT;
    END;
{   if not lineaTICKETnopregunta then
   begin
     case PedirConfirmacion('¿Confirma que desea borrar esta Linea del TICKET?',true,true,false) of
          mrno:Abort;
     end;
   end
   else
      lineaTICKETnopregunta := false;
}
end;

procedure TDMGS.CDSQ_MDLINEATICKETBeforeOpen(DataSet: TDataSet);
begin
  lineaTICKETnopregunta:=false;
  BorrandoLineas := false;
end;

procedure TDMGS.CDSQ_MDLINEATICKETBeforePost(DataSet: TDataSet);
var X:INTEGER;
begin
{    if not lineaTICKETnopregunta then // lo utilizo para modificar las lineas de
     // pedidos dentro de TICKETes
    begin
      if CDSQ_mdLINEATICKET.state=dsinsert
      then x:=PedirConfirmacion('¿Confirma que desea dar de alta esta Linea de TICKET?',true,true,true)
      else x:=PedirConfirmacion('¿Confirma que desea modificar esta Linea de TICKET?',true,true,true);
           case x of
             mrno: begin
                    LINTICESCAPE := FALSE;// PARA CONTROLAR EN EL UDM
                    ESCAPELINTIC:= FALSE;// PARA CONTROLAR EN EL FORMULARIO
                    CDSQ_mdLINEATICKET.undolastchange (true);
                    CDSQ_mdLINEATICKET.cancel;
                    cdsq_mdTICKET.cancel;
                    abort;
                   end;
            mrcancel:begin
                      if LINTICescapeentra then
                        CDSQ_MDLINEATICKET.edit;
                      cdsq_mdLINEATICKETid_articulo.FocusControl ;
                      abort;
                     end;
           end;

{      IF (CDSQ_MDLINEATICKET.State = DSINSERT)
      OR ((CDSQ_MDLINEATICKET.State = DSEDIT) AND
      (CDSQ_MDLINEATICKETID_ARTICULO.NEWIDValue <> CDSQ_MDLINEATICKETID_ARTICULO.OldValue))
      AND (TRIM(CDSQ_MDLINEATICKETID_ARTICULO.NEWVALUE)<> '' )
      THEN
      BEGIN
       CDSQ_MAXIMO.CLOSE;
       CDSQ_MAXIMO.COMMANDTEXT := 'SELECT COUNT(*) as MAXIMO FROM LINEA_TICKET WHERE ID_EMPRESA='+FMENU.ID_EMPRESA+' AND ID_TICKET='+CDSQ_MDLINEATICKETID_TICKET.ASSTRING+' AND ID_ARTICULO='''+CDSQ_MDLINEATICKETID_ARTICULO.NEWVALUE+''' ';
       CDSQ_MAXIMO.OPEN;
       IF CDSQ_MAXIMO.Fields[0].asfloat > 0 THEN
       BEGIN
          x:=PedirConfirmacion('El artículo '+ dmgs.cdsq_MDLINEATICKETid_articulo.asstring+ ' está en mas de una línea.¿ Desea continuar?',true,true,false);
           case x of
                mrno: begin
                    if LINTICescapeentra then
                          CDSQ_MDLINEATICKET.edit;
                    CDSQ_MDLINEATICKETid_articulo.FocusControl;
                    abort;
                    end;
          end;
       END;
       CDSQ_MAXIMO.CLOSE;
      END;

    end
    else
      LINEATICKETnopregunta := false;
}
     IF (CDSQ_MDLINEATICKETID_ARTICULO.IsNull)
     OR (TRIM(CDSQ_MDLINEATICKETID_ARTICULO.AsString) = '' )
     THEN
     begin
        LINTICESCAPE := FALSE;// PARA CONTROLAR EN EL UDM
        ESCAPELINTIC:= FALSE;// PARA CONTROLAR EN EL FORMULARIO
        CDSQ_mdLINEATICKET.undolastchange (true);
        CDSQ_mdLINEATICKET.cancel;
        Cdsq_mdTICKET.cancel;
        abort;
     end;

     esLINTICKET:= true;//trata la relacion maestro detalle como una tabla,
     //cuando da error, no da error en cdsmdlinpedidos, sino que lo da en
     //cdsmdpresupuesto, con lo  que tengo que saber que la llamada se ha hecho de
     // LINEATICKET para poder sacar un error detallado.
    LINTICESCAPE := FALSE;// ME HACE FALTA
    // AL HACER ABORT ENTRA EN EL BEFORECANCEL
    // Y NO QUIERO QUE MUESTRE LA VENTANA DE INSERTAR O ACTUALIZAR
    // CONSTANTEMENTE
    IF (CDSQ_MDLINEATICKET.State IN [DSEDIT,DSINSERT]) THEN
    BEGIN
        DMGS.CDSQ_FLOAT.Close;
        DMGS.CDSQ_FLOAT.CommandTexT := 'SELECT PRECIO_COSTE AS R FROM ARTICULOS WHERE ID_ARTICULO='''+CDSQ_MDLINEATICKETID_ARTICULO.AsString +''' ';
        DMGS.CDSQ_FLOAT.Open;
        IF (DMGS.CDSQ_FLOAT.RECORDCOUNT > 0 ) AND
           (NOT DMGS.CDSQ_FLOAT.Fields[0].ISNULL) THEN
           DMGS.CDSQ_MDLINEATICKETPRECIO_COSTE.ASSTRING := DMGS.CDSQ_FLOAT.Fields[0].ASSTRING
        ELSE
           DMGS.CDSQ_MDLINEATICKETPRECIO_COSTE.ASSTRING := '0';
        DMGS.CDSQ_FLOAT.CLOSE;
    END;


//    if trim(cdsq_mdlineaTICKETid_articulo.AsString) ='' then
//        cdsq_mdlineaTICKETid_articulo.Clear;
// lo quito pq deberia entrar en el if anterior
END;

procedure TDMGS.CDSQ_MDLINEATICKETDeleteError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
 lineaTICKETerror := true;
 mostrarerror(e.message,' linea de TICKET ',27);
end;

procedure TDMGS.CDSQ_MDLINEATICKETEditError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
 lineaTICKETerror := true;
 mostrarerror(e.message,' linea de TICKET ',27);
end;

procedure TDMGS.CDSQ_MDLINEATICKETPostError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
 lineaTICKETerror := true;
 mostrarerror(e.message,' linea de TICKET ',27);
end;

procedure TDMGS.CDSQ_MDLINEATICKETReconcileError(
  DataSet: TCustomClientDataSet; E: EReconcileError;
  UpdateKind: TUpdateKind; var Action: TReconcileAction);
begin
 lineaTICKETerror := true;
 mostrarerror(e.message,' linea de TICKET ',27);
end;



procedure TDMGS.CDSQ_ARTICULOSCalcFields(DataSet: TDataSet);
VAR AUX:BOOLEAN;
    OLD,NEW:STRING;
    PVP : DOUBLE;
begin
  if cdsq_articulosid_articulo.asstring <> '' then
  begin
     dmgs.CDSQ_MAXIMO.Close;
     dmgs.cdsq_maximo.CommandText := ' select count(*) from ean where id_articulo='''+dmgs.cdsq_articulosid_articulo.asstring+''' ';
     DMGS.CDSQ_MAXIMO.OPEN;
     if dmgs.cdsq_maximo.Fields[0].AsString <> '0' then
        dmgs.cdsq_articulostieneean.asboolean := true;
     dmgs.cdsq_maximo.close;
  end;
  IF (CDSQ_ARTICULOS.State IN [DSEDIT] )
  THEN
  BEGIN
    NEW := VARTOSTR(CDSQ_ARTICULOSID_COLOR.NewValue);
    old := VARTOSTR(CDSQ_ARTICULOSID_COLOR.oldvalue);
  END;
  IF (CDSQ_ARTICULOS.State IN [DSINSERT] )
  THEN
  BEGIN
    NEW := VARTOSTR(CDSQ_ARTICULOSID_COLOR.NewValue);
    OLD := '';
  END;
  if CDSQ_ARTICULOSCOLORESTA.value then
     old := CDSQ_ARTICULOSCOLOROLD.value;

  IF (CDSQ_ARTICULOS.State IN [DSEDIT,DSINSERT] ) AND
     (NEW <> OLD ) AND
     (NEW <> '')
  THEN
  BEGIN
      CDSQ_NOMBRE.CLOSE;
      CDSQ_NOMBRE.COMMANDTEXT := 'SELECT DESCRIPCION AS NOMBRE FROM COLORES WHERE ID_COLOR=''' +CDSQ_ARTICULOSID_COLOR.ASSTRING+''' ' ;
      CDSQ_NOMBRE.Open;
      IF CDSQ_NOMBRE.RecordCount > 0 THEN
            CDSQ_ARTICULOSCDESCRIPCION.value := CDSQ_NOMBRENOMBRE.ASSTRING
      ELSE
           CDSQ_ARTICULOSCDESCRIPCION.value := '';
      CDSQ_NOMBRE.CLOSE;
      CDSQ_ARTICULOSCOLORESTA.value := TRUE;
      CDSQ_ARTICULOSCOLOROLD.value := new;
  END
  ELSE
     IF NOT CDSQ_ARTICULOSCOLORESTA.value THEN
        CDSQ_ARTICULOSCDESCRIPCION.VALUE := CDSQ_ARTICULOSCOLORDESCRIPCION.VALUE;
  //************************************************************************//
  IF (CDSQ_ARTICULOS.State IN [DSEDIT] )
  THEN
  BEGIN
    NEW := VARTOSTR(CDSQ_ARTICULOSCOD_FAMILIA.NewValue);
    old := VARTOSTR(CDSQ_ARTICULOSCOD_FAMILIA.oldvalue);
  END;
  IF (CDSQ_ARTICULOS.State IN [DSINSERT] )
  THEN
  BEGIN
    NEW := VARTOSTR(CDSQ_ARTICULOSCOD_FAMILIA.NewValue);
    OLD := '';
  END;
  if CDSQ_ARTICULOSFAMILIAESTA.value then
     old := CDSQ_ARTICULOSFAMILIAOLD.value;

  IF (CDSQ_ARTICULOS.State IN [DSEDIT,DSINSERT] ) AND
     (NEW <> OLD ) AND
     (NEW <> '')
  THEN
  BEGIN
      CDSQ_NOMBRE.CLOSE;
      CDSQ_NOMBRE.COMMANDTEXT := 'SELECT DESCRIPCION AS NOMBRE FROM FAMILIAS WHERE COD_FAMILIA='''+CDSQ_ARTICULOSCOD_FAMILIA.ASSTRING+''' ';
      CDSQ_NOMBRE.Open;
      IF CDSQ_NOMBRE.RecordCount > 0 THEN
           CDSQ_ARTICULOSFDESCRIPCION.value := CDSQ_NOMBRENOMBRE.ASSTRING
      ELSE
           CDSQ_ARTICULOSFDESCRIPCION.value := '';
      CDSQ_NOMBRE.CLOSE;
      CDSQ_ARTICULOSFAMILIAESTA.value := TRUE;
      CDSQ_ARTICULOSFAMILIAOLD.value := new;
  END
  ELSE
     IF NOT CDSQ_ARTICULOSFAMILIAESTA.value THEN
        CDSQ_ARTICULOSFDESCRIPCION.VALUE := CDSQ_ARTICULOSFAMILIADESCRIPCION.VALUE;

//******************************************

  IF (CDSQ_ARTICULOS.State IN [DSEDIT] )
  THEN
  BEGIN
    NEW := VARTOSTR(CDSQ_ARTICULOSid_proveedor.NewValue);
    old := VARTOSTR(CDSQ_ARTICULOSid_proveedor.oldvalue);
  END;
  IF (CDSQ_ARTICULOS.State IN [DSINSERT] )
  THEN
  BEGIN
    NEW := VARTOSTR(CDSQ_ARTICULOSid_proveedor.NewValue);
    OLD := '';
  END;
  if CDSQ_ARTICULOSproveedoresta.value then
     old := CDSQ_ARTICULOSproveedorold.value;

  IF (CDSQ_ARTICULOS.State IN [DSEDIT,DSINSERT] ) AND
     (NEW <> OLD ) AND
     (NEW <> '')
  THEN
  BEGIN
      CDSQ_NOMBRE.CLOSE;
      cdsq_nombre.COMMANDTEXT := 'SELECT NOMBRE FROM proveedor_acreedor WHERE id_proveedor = '+CDSQ_ARTICULOSid_proveedor.ASSTRING;
//      CDSQ_NOMBRE.COMMANDTEXT := 'SELECT NOMBRE FROM tarifas_proveedores WHERE id_proveedor='+CDSQ_ARTICULOSid_proveedor.ASSTRING+' and art_proveedor='''+cdsq_articulosart_proveedor.asstring+''' ';
      CDSQ_NOMBRE.Open;
      IF CDSQ_NOMBRE.RecordCount > 0 THEN
           CDSQ_ARTICULOSnproveedor.value := CDSQ_NOMBRENOMBRE.ASSTRING
      ELSE
           CDSQ_ARTICULOSnproveedor.value := '';
      CDSQ_NOMBRE.CLOSE;
      CDSQ_ARTICULOSproveedoresta.value := TRUE;
      CDSQ_ARTICULOSproveedorold.value := new;
  END
  ELSE
     IF NOT CDSQ_ARTICULOSproveedoresta.value THEN
        CDSQ_ARTICULOSnproveedor.value := CDSQ_ARTICULOSnombreproveedor.value;
end;

procedure TDMGS.CDSQ_TARIFASAUXCalcFields(DataSet: TDataSet);
begin
 IF RTARIFASAUX.beneficio_min THEN
    CDSQ_TARIFASAUXPRECIOVENTA.ASCurrency := ROUNDTO(FLOATTOCURR ( (1 + RTARIFASAUX.beneficioEMPRESA/100) * CDSQ_TARIFASAUXPRECIO.AsFloat * (1+RTARIFASAUX.transporte/100)*strtoint(fmenu.IVA)),DMGS.DECIMALES)
 ELSE
    CDSQ_TARIFASAUXPRECIOVENTA.ASCurrency := 0;
end;



procedure TDMGS.DataModuleDestroy(Sender: TObject);
var Vconfiguracion:textfile;
    buffer:string;
begin
try
 {$I-}

  ASSIGNFILE (VCONFIGURACION,'cliente.txt');
  buffer := gservidor;
  REWRITE(VCONFIGURACION);
  WRITEln(VCONFIGURACION,buffer);
  buffer := GAPLICACION;
  WRITEln(VCONFIGURACION,buffer);
  EXCEPT ON EXCEPTION DO
   BEGIN
     SHOWMESSAGE('NO ES POSIBLE CREAR EL ARCHIVO DE CONFIGURACIONES');
   END;
 END;
 TRY
     CLOSEFILE(VCONFIGURACION);
  EXCEPT ON EXCEPTION DO
  BEGIN
     SHOWMESSAGE('FALLO EN LA ESCRITURA DEL ARCHIVO DE CONFIGURACIONES');
     CLOSEFILE(VCONFIGURACION);
  END;
  END;
  {$I+}
  dcomconnection1.close;
END;

FUNCTION TDMGS.VERIFICARARTICULO:BOOLEAN;
VAR AUX,AUX1:STRING;
begin
 RESULT := FALSE;
 IF (TRIM(DMGS.CDSQ_ARTICULOSID_PROVEEDOR.AsString)<> '') AND
    (TRIM(DMGS.CDSQ_ARTICULOSART_PROVEEDOR.ASSTRING) <> '' )
 THEN
 BEGIN
    DMGS.CDSQ_PROCEDURE.Close;
    DMGS.CDSQ_PROCEDURE.CommandTexT := 'SELECT COUNT(*) FROM ARTICULOS WHERE ID_PROVEEDOR='+DMGS.CDSQ_ARTICULOSID_PROVEEDOR.AsString +' AND ART_PROVEEDOR='''+ DMGS.CDSQ_ARTICULOSART_PROVEEDOR.AsString+''' ';
    DMGS.CDSQ_PROCEDURE.Open;
    IF (DMGS.CDSQ_PROCEDURE.FIELDS[0].asfloat > 0) THEN
    BEGIN
      // AL CERRAR EL DATASET DE ARTICULOS PERDERIA LOS VALORES
      AUX := DMGS.CDSQ_ARTICULOSID_PROVEEDOR.AsString;
      AUX1 := DMGS.CDSQ_ARTICULOSART_PROVEEDOR.AsString;
      SHOWMESSAGE('YA EXISTE UN ARTICULO CON ESTE CODIGO DE PROVEEDOR Y ESTE ID DE ARTICULO');
      DMGS.RARTICULOS.ESCAPE := FALSE;
      DMGS.CDSQ_ARTICULOS.CancelUpdates;
      DMGS.CDSQ_ARTICULOS.Close;
      DMGS.VARTICULOS.TIPO := '2';
      DMGS.VARTICULOS.ID := ' WHERE ID_PROVEEDOR='+AUX+' AND ART_PROVEEDOR='''+AUX1+''' ';
      DMGS.CDSQ_ARTICULOS.Open;
      RESULT:=TRUE;
    END;
    DMGS.CDSQ_PROCEDURE.Close;
 END;
end;


procedure TDMGS.CDSQ_MDENTRADABeforeApplyUpdates(Sender: TObject;
  var OwnerData: OleVariant);
begin
  OWNERDATA := FMENU.NODESCONTAR;
end;

procedure TDMGS.CDSQ_MDALBARANBeforeApplyUpdates(Sender: TObject;
  var OwnerData: OleVariant);
begin
 OWNERDATA := FMENU.NODESCONTAR;
end;

procedure TDMGS.CDSQ_MDFACTURABeforeApplyUpdates(Sender: TObject;
  var OwnerData: OleVariant);
begin
 IF RFACTURA.ALMACEN THEN
    OWNERDATA := '1'
 ELSE
    OWNERDATA := FMENU.NODESCONTAR;
end;

procedure TDMGS.CDSQ_MDSALIDABeforeApplyUpdates(Sender: TObject;
  var OwnerData: OleVariant);
begin
 OWNERDATA := FMENU.NODESCONTAR;
end;

procedure TDMGS.CDSQ_MDTICKETBeforeApplyUpdates(Sender: TObject;
  var OwnerData: OleVariant);
begin
 IF RTICKETS.ALMACEN THEN
    OWNERDATA := '1'
 ELSE
    OWNERDATA := FMENU.NODESCONTAR;
end;

procedure TDMGS.CDSQ_OPCIONESNUMERICASCalcFields(DataSet: TDataSet);
VAR OLD,NEW:STRING;
begin
  IF (CDSQ_OPCIONESNUMERICAS.State IN [DSEDIT] )
  THEN
  BEGIN
    NEW := VARTOSTR(CDSQ_OPCIONESNUMERICASID_EMPRESA.NewValue);
    old := VARTOSTR(CDSQ_OPCIONESNUMERICASID_EMPRESA.oldvalue);
  END;
  IF (CDSQ_OPCIONESNUMERICAS.State IN [DSINSERT] )
  THEN
  BEGIN
    NEW := VARTOSTR(CDSQ_OPCIONESNUMERICASID_EMPRESA.NewValue);
    OLD := '';
  END;
  if CDSQ_OPCIONESNUMERICASIDESTA.value then
     old := CDSQ_OPCIONESNUMERICASIDOLD.value;

  IF (CDSQ_OPCIONESNUMERICAS.State IN [DSEDIT,DSINSERT] ) AND
     (NEW <> OLD ) AND
     (NEW <> '')
  THEN
  BEGIN
      CDSQ_NOMBRE.CLOSE;
      CDSQ_NOMBRE.COMMANDTEXT := 'SELECT NOMBRE FROM EMPRESAS WHERE ID_EMPRESA=' +CDSQ_OPCIONESNUMERICASID_EMPRESA.ASSTRING+' ' ;
      CDSQ_NOMBRE.Open;
      IF CDSQ_NOMBRE.RecordCount > 0 THEN
            CDSQ_OPCIONESNUMERICASEMPRESANOMBRE.value := CDSQ_NOMBRENOMBRE.ASSTRING
      ELSE
           CDSQ_OPCIONESNUMERICASEMPRESANOMBRE.value := '';
      CDSQ_NOMBRE.CLOSE;
      CDSQ_OPCIONESNUMERICASIDESTA.value := TRUE;
      CDSQ_OPCIONESNUMERICASIDOLD.value := new;
  END
  ELSE
     IF NOT CDSQ_OPCIONESNUMERICASIDESTA.value THEN
        CDSQ_OPCIONESNUMERICASEMPRESANOMBRE.asstring := CDSQ_OPCIONESNUMERICASNOMBREEMPRESA.asstring;
  //************************************************************************//
END;
procedure TDMGS.CDSQ_OPCIONESNUMERICASAfterGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
  var aux:integer;
begin
  aux:= ROPCIONESNUMERICAS.KEY;
  ROPCIONESNUMERICAS.KEY :=  aux + 1;
END;
procedure TDMGS.CDSQ_OPCIONESNUMERICASAfterInsert(DataSet: TDataSet);
begin
  IF NOT ROPCIONESNUMERICAS.BUSCANDO THEN
  BEGIN
      CDSQ_OPCIONESNUMERICASANYO.VALUE  := strtoint(fmenu.anyo);//YEAROF(DATE);
      CDSQ_OPCIONESNUMERICASID_EMPRESA.ASSTRING := FMENU.ID_EMPRESA;
      CDSQ_OPCIONESNUMERICASID_ENTRADA.VALUE := 0;
      CDSQ_OPCIONESNUMERICASID_COBRO.VALUE := 0;
      CDSQ_OPCIONESNUMERICASID_SALIDA.VALUE := 0;
      CDSQ_OPCIONESNUMERICASID_AVISO.VALUE := 0;
      CDSQ_OPCIONESNUMERICASID_PRESUPUESTO.VALUE := 0;
  END;
end;

procedure TDMGS.CDSQ_OPCIONESNUMERICASAfterPost(DataSet: TDataSet);
begin
 ROPCIONESNUMERICAS.ERROR:= false;
 if CDSQ_OPCIONESNUMERICAS.ChangeCount > 0 then
  CDSQ_OPCIONESNUMERICAS.ApplyUpdates(0); // permito 0 errores
 if ROPCIONESNUMERICAS.ERROR then
 begin
     if ErrorNotFound then
     begin
       ErrorNotFound:= false;
       CDSQ_OPCIONESNUMERICAS.CancelUpdates;
       CDSQ_OPCIONESNUMERICAS.CLOSE;
     end
     ELSE
     begin
       if tipoerror then // cuando da el error de que no se puede
           // borrar pq hay referencias en otras tablas.
       begin
          CDSQ_OPCIONESNUMERICAS.cancelupdates ;
          CDSQ_OPCIONESNUMERICAS.Last;// para que se situe en el
          //registro correcto
       end
       else
       begin
         CDSQ_OPCIONESNUMERICAS.edit;
         CDSQ_OPCIONESNUMERICASID_empresa.FocusControl;
       end;
      abort;
     end;
 end;
end;



procedure TDMGS.CDSQ_OPCIONESNUMERICASBeforeClose(DataSet: TDataSet);
begin
   if CDSQ_OPCIONESNUMERICAS.state in [dsedit,dsinsert] then
      CDSQ_OPCIONESNUMERICAS.post;
   ROPCIONESNUMERICAS.KEY:=0;
   INICIARRECORD(VOPCIONESNUMERICAS);
end;

procedure TDMGS.CDSQ_OPCIONESNUMERICASBeforeDelete(DataSet: TDataSet);
begin
   case PedirConfirmacion('¿Confirma que desea borrar esta Opción?',true,true,false) of
        mrno:Abort;
   end;
end;

procedure TDMGS.CDSQ_OPCIONESNUMERICASBeforeGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
begin
  OWNERDATA:= inttostr(ROPCIONESNUMERICAS.KEY) +FILTRO+ inttostr(CDSQ_OPCIONESNUMERICAS.PacketRecords)+FILTRO;
  OWNERDATA := OWNERDATA + OBTENEROWNERDATA(VOPCIONESNUMERICAS)
end;

procedure TDMGS.CDSQ_OPCIONESNUMERICASBeforeOpen(DataSet: TDataSet);
begin
 cdsq_OPCIONESNUMERICAS.FetchOnDemand := FALSE;
 cdsq_OPCIONESNUMERICAS.PacketRecords := 20;
 ROPCIONESNUMERICAS.KEY :=0; // para que no coja el primero.
end;

procedure TDMGS.CDSQ_OPCIONESNUMERICASBeforePost(DataSet: TDataSet);
var x:integer;
begin
    if cdsq_OPCIONESNUMERICAS.state=dsinsert then x:=PedirConfirmacion('¿Confirma que desea dar de alta esta Opcion?',true,true,true)
                                     else x:=PedirConfirmacion('¿Confirma que desea modificar esta Opcion?',true,true,true);
    case x of
        mrno: begin
                 cdsq_OPCIONESNUMERICAS.UndoLastChange(TRUE);
                 cdsq_OPCIONESNUMERICAS.cancel;
                 abort;
              end;
        mrcancel:BEGIN
                  cdsq_OPCIONESNUMERICASid_empresa.FocusControl ;
                  abort;
                 END;

    end;
end;

procedure TDMGS.CDSQ_OPCIONESNUMERICASDeleteError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
  ROPCIONESNUMERICAS.ERROR :=true;
  mostrarError(e.message,' OPCIONESNUMERICAS ', 28);
end;

procedure TDMGS.CDSQ_OPCIONESNUMERICASEditError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
  ROPCIONESNUMERICAS.ERROR :=true;
  mostrarError(e.message,' OPCIONESNUMERICAS ', 28);
end;

procedure TDMGS.CDSQ_OPCIONESNUMERICASPostError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
  ROPCIONESNUMERICAS.ERROR :=true;
  mostrarError(e.message,' OPCIONESNUMERICAS ', 28);
end;

procedure TDMGS.CDSQ_OPCIONESNUMERICASReconcileError(
  DataSet: TCustomClientDataSet; E: EReconcileError;
  UpdateKind: TUpdateKind; var Action: TReconcileAction);
begin
  if updatekind = ukdelete then
     tipoerror := true
  else
     tipoerror := false;
  ROPCIONESNUMERICAS.ERROR :=true;
  mostrarError(e.message,' OPCIONESNUMERICAS ', 28);
end;

procedure TDMGS.CDSQ_LISTADOENTRADAAfterGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
  var aux:integer;
begin
  aux:= RLISTADOENTRADA.KEY;
  RLISTADOENTRADA.KEY := aux + 1;
end;
procedure TDMGS.CDSQ_LISTADOENTRADABeforeClose(DataSet: TDataSet);
begin
   RLISTADOENTRADA.KEY :=0;
   INICIARRECORD(VLISTADOENTRADA);
end;

procedure TDMGS.CDSQ_LISTADOENTRADABeforeGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
begin
  OWNERDATA:= inttostr(RLISTADOENTRADA.KEY ) +FILTRO+ inttostr(CDSQ_LISTADOENTRADA.PacketRecords)+FILTRO;
  OWNERDATA := OWNERDATA + OBTENEROWNERDATA(VLISTADOENTRADA)
end;

procedure TDMGS.CDSQ_LISTADOENTRADABeforeOpen(DataSet: TDataSet);
begin
 CDSQ_LISTADOENTRADA.FetchOnDemand := FALSE;
 CDSQ_LISTADOENTRADA.PacketRecords := 20;
 RLISTADOENTRADA.KEY :=0; // para que no coja el primero.
end;

procedure TDMGS.CDSQ_LISTADOENTRADAReconcileError(
  DataSet: TCustomClientDataSet; E: EReconcileError;
  UpdateKind: TUpdateKind; var Action: TReconcileAction);
begin
  MOSTRARERROR (E.MESSAGE,' LISTADO ENTRADA ', -1);
end;

procedure TDMGS.CDSQ_LENTRADATOTALAfterGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
  var aux:integer;
begin
  aux:= RLENTRADATOTAL.KEY;
  RLENTRADATOTAL.KEY := aux + 1;
end;
procedure TDMGS.CDSQ_LENTRADATOTALBeforeClose(DataSet: TDataSet);
begin
   RLENTRADATOTAL.KEY :=0;
   INICIARRECORD(VLENTRADATOTAL);
end;

procedure TDMGS.CDSQ_LENTRADATOTALBeforeGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
begin
  OWNERDATA:= inttostr(RLENTRADATOTAL.KEY ) +FILTRO+ inttostr(CDSQ_LENTRADATOTAL.PacketRecords)+FILTRO;
  OWNERDATA := OWNERDATA + OBTENEROWNERDATA(VLENTRADATOTAL)
end;

procedure TDMGS.CDSQ_LENTRADATOTALBeforeOpen(DataSet: TDataSet);
begin
 CDSQ_LENTRADATOTAL.FetchOnDemand := FALSE;
 CDSQ_LENTRADATOTAL.PacketRecords := 20;
 RLENTRADATOTAL.KEY :=0; // para que no coja el primero.
end;

procedure TDMGS.CDSQ_LENTRADATOTALReconcileError(
  DataSet: TCustomClientDataSet; E: EReconcileError;
  UpdateKind: TUpdateKind; var Action: TReconcileAction);
begin
  MOSTRARERROR (E.MESSAGE,' LISTADO ENTRADA TOTAL', -1);
end;

procedure TDMGS.CDSQ_MDLINEATICKETBeforeCancel(DataSet: TDataSet);
begin
// EL ESCAPE CONTROLA CUANDO PULSO LA SEGUNDA VEZ ESCAPE
// ESTANDO EL DATASET EN ESTADO DE INSERCION O EDICION
// COBROESESCAPE LO UTILIZO A LA HORA DE HACER ABORT Y CANCEL EN UDM
// ESCAPE LO UTILIZO PARA SABER QUE HE PULSADO ESCAPE EN EL FORMULARIO
  if ((CDSQ_MDLINEATICKET.State in [dsedit,dsinsert]) and ( LINTICESCAPE OR ESCAPELINTIC)) then
  begin
      LINTICESCAPEENTRA:= true;
      LINTICESCAPE := true;// POR SI OCURRE UN ERROR AL HACER EL POST
      CDSQ_MDLINEATICKET.post;
  end;
  LINTICESCAPEENTRA:= false;
  // AL HACER ABORT ENTRA EN EL BEFORECANCEL
  // Y NO QUIERO QUE MUESTRE LA VENTANA DE INSERTAR O ACTUALIZAR
  // CONSTANTEMENTE
  LINTICESCAPE := true;
end;

procedure TDMGS.CDSQ_MDTICKETBeforeEdit(DataSet: TDataSet);
begin
  IF CDSQ_MDTICKET.Active THEN
   IF  (CDSQ_MDTICKETCOBRADO.AsString ='1')
   AND (NOT TICKETIMPRIMIR) THEN
   BEGIN
     SHOWMESSAGE('NO SE PUEDE MODIFICAR YA HA SIDO COBRADO');
     ABORT;
   END;
   TICKETIMPRIMIR := FALSE;
end;

procedure TDMGS.CDSQ_MDTICKETBeforeDelete(DataSet: TDataSet);
begin
  IF CDSQ_MDTICKET.Active THEN
   IF CDSQ_MDTICKETCOBRADO.AsString ='1' THEN
   BEGIN
     SHOWMESSAGE('NO SE PUEDE BORRAR YA HA SIDO COBRADO');
     ABORT;
   END
end;

procedure TDMGS.CDSQ_TICKETAUXAfterGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
  var aux:integer;
begin
  aux:= RTICKETAUX.KEY;
  RTICKETAUX.KEY := aux + 1;
end;

procedure TDMGS.CDSQ_TICKETAUXBeforeClose(DataSet: TDataSet);
begin
   INICIARLOCALES(RTICKETAUX);
   INICIARRECORD(VTICKETAUX);
end;

procedure TDMGS.CDSQ_TICKETAUXBeforeGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
begin
  OWNERDATA:= inttostr(RTICKETAUX.KEY) +FILTRO+ inttostr(CDSQ_TICKETAUX.PacketRecords)+FILTRO;
  OWNERDATA := OWNERDATA + OBTENEROWNERDATA(VTICKETAUX)
end;

procedure TDMGS.CDSQ_TICKETAUXBeforeOpen(DataSet: TDataSet);
begin
 CDSQ_TICKETAUX.FetchOnDemand := FALSE;
 CDSQ_TICKETAUX.PacketRecords := 20;
 RTICKETAUX.KEY :=0; // para que no coja el primero.
end;

procedure TDMGS.CDSQ_TICKETAUXReconcileError(DataSet: TCustomClientDataSet;
  E: EReconcileError; UpdateKind: TUpdateKind;
  var Action: TReconcileAction);
begin
 MOSTRARERROR(E.MESSAGE,' TICKET AUX ',-1);
end;

procedure TDMGS.CDSQ_TICKETAUXCalcFields(DataSet: TDataSet);
begin
  IF CDSQ_TICKETAUXIMPRESO.value = 1 THEN CDSQ_TICKETAUXIMPRIMIDO.value := 'SI'
  ELSE CDSQ_TICKETAUXIMPRIMIDO.value := 'NO';

  IF CDSQ_TICKETAUXCOBRADO.VALUE =1 THEN
     CDSQ_TICKETAUXCOBRADOS.VALUE := 'SI'
  ELSE
     CDSQ_TICKETAUXCOBRADOS.VALUE := 'NO'



end;

procedure TDMGS.CDSQ_LARTICULOSBeforeClose(DataSet: TDataSet);
begin
   INICIARLOCALES(RLARTICULOS);
   INICIARRECORD(VLARTICULOS);
end;

procedure TDMGS.CDSQ_LARTICULOSBeforeGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
begin
  OWNERDATA:= inttostr(RLARTICULOS.KEY) +FILTRO+ inttostr(CDSQ_LARTICULOS.PacketRecords)+FILTRO;
  OWNERDATA := OWNERDATA + OBTENEROWNERDATA(VLARTICULOS)
end;

procedure TDMGS.CDSQ_LARTICULOSBeforeOpen(DataSet: TDataSet);
begin
 CDSQ_LARTICULOS.FetchOnDemand := FALSE;
 CDSQ_LARTICULOS.PacketRecords := 20;
 RLARTICULOS.KEY :=0; // para que no coja el primero.
end;

procedure TDMGS.CDSQ_LARTICULOSReconcileError(
  DataSet: TCustomClientDataSet; E: EReconcileError;
  UpdateKind: TUpdateKind; var Action: TReconcileAction);
begin
   MOSTRARERROR(E.MESSAGE,' LISTADO DE ARTICULOS ',-1);
end;

procedure TDMGS.CDSQ_MDTICKETAUXAfterGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
  VAR AUX:INTEGER;
begin
  AUX := RMDTICKETAUX.KEY;
  RMDTICKETAUX.KEY := AUX + 1;
end;
procedure TDMGS.CDSQ_MDTICKETAUXBeforeClose(DataSet: TDataSet);
begin
   RMDTICKETAUX.KEY :=0;
   INICIARRECORD(VMDTICKETAUX);
end;

procedure TDMGS.CDSQ_MDTICKETAUXBeforeGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
begin
  OWNERDATA:= inttostr(RMDTICKETAUX.KEY) +FILTRO+ inttostr(CDSQ_MDTICKETAUX.PacketRecords)+FILTRO;
  OWNERDATA := OWNERDATA + OBTENEROWNERDATA(VMDTICKETAUX);
end;

procedure TDMGS.CDSQ_MDTICKETAUXBeforeOpen(DataSet: TDataSet);
begin
 CDSQ_MDTICKETAUX.FetchOnDemand := FALSE;
 CDSQ_MDTICKETAUX.PacketRecords := 15;
 RMDTICKETAUX.KEY:=0;
end;

procedure TDMGS.CDSQ_MDTICKETAUXReconcileError(
  DataSet: TCustomClientDataSet; E: EReconcileError;
  UpdateKind: TUpdateKind; var Action: TReconcileAction);
begin
 MOSTRARERROR(E.MESSAGE,' TICKET AUX ', -1);
end;

procedure TDMGS.CDSQ_LARTICULOSAfterGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
  VAR AUX:INTEGER;
begin
  AUX := RLARTICULOS.KEY ;
  RLARTICULOS.KEY  := AUX + 1;
end;
procedure TDMGS.CDSQ_FALBARANESAfterGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
  var aux:integer;
begin
  aux:= RFALBARANES.KEY ;
  RFALBARANES.KEY  := aux + 1;
end;
procedure TDMGS.CDSQ_FALBARANESAfterPost(DataSet: TDataSet);
var aux:string;
begin
  rfalbaranes.ESCAPE := TRUE;
  rfalbaranes.ERROR := false;
  if CDSQ_FALBARANES.ChangeCount >0 then
    CDSQ_FALBARANES.ApplyUpdates(0);
  if rfalbaranes.ERROR  then
  begin
     if ErrorNotFound then
     begin
       ErrorNotFound:= false;
       rfalbaranes.ESCAPE := FALSE;// ME HACE FALTA
       rfalbaranes.ESCAPECDS := FALSE;
       // AL HACER ABORT ENTRA EN EL BEFORECANCEL
       // Y NO QUIERO QUE MUESTRE LA VENTANA DE INSERTAR O ACTUALIZAR
       // CONSTANTEMENTE
       CDSQ_FALBARANES.CancelUpdates;
       CDSQ_FALBARANES.close;
     end
     ELSE
     begin
       if tipoerror then // cuando da el error de que no se puede
           // borrar pq hay referencias en otras tablas.
       begin
          CDSQ_FALBARANES.cancelupdates ;
          CDSQ_FALBARANES.Last;// para que se situe en el
          //registro correcto
       end
       else
       begin
          CDSQ_FALBARANES.Edit;
          CDSQ_FALBARANESid_albaran.FocusControl;
       END;
       abort;
     end;
  end;

end;

procedure TDMGS.CDSQ_FALBARANESBeforeClose(DataSet: TDataSet);
begin
   if (CDSQ_FALBARANES.state in [dsedit,dsinsert]) AND NOT RARTICULOS.BUSCANDO then
      CDSQ_FALBARANES.post;
   INICIARLOCALES(rfalbaranes);
   INICIARRECORD(vfalbaranes)
end;

procedure TDMGS.CDSQ_FALBARANESBeforeDelete(DataSet: TDataSet);
begin
   case PedirConfirmacion('¿Confirma que desea borrar esta Línea?',true,true,false) of
        mrno:Abort;
   end;
end;

procedure TDMGS.CDSQ_FALBARANESBeforeGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
begin
  OWNERDATA:= inttostr(rfalbaranes.KEY) +FILTRO+ inttostr(CDSQ_FALBARANES.PacketRecords)+FILTRO;
  OWNERDATA := OWNERDATA + OBTENEROWNERDATA(vfalbaranes);
end;

procedure TDMGS.CDSQ_FALBARANESBeforeOpen(DataSet: TDataSet);
begin
 CDSQ_FALBARANES.FetchOnDemand := FALSE;
 CDSQ_FALBARANES.PacketRecords := 20;
 rfalbaranes.KEY :=0; // para que no coja el primero.
end;

procedure TDMGS.CDSQ_FALBARANESBeforePost(DataSet: TDataSet);
var x:integer;
begin
    if CDSQ_FALBARANES.state=dsinsert then x:=PedirConfirmacion('¿Confirma que desea dar de alta esta línea?',true,true,true)
                                     else x:=PedirConfirmacion('¿Confirma que desea modificar esta línea?',true,true,true);
    case x of
        mrno: begin
                 CDSQ_FALBARANES.UndoLastChange(TRUE);
                 CDSQ_FALBARANES.cancel;
                 abort;
              end;
        mrcancel:BEGIN
                  CDSQ_FALBARANESid_albaran.FocusControl ;
                  abort;
                 END;
    end;
end;
procedure TDMGS.CDSQ_FALBARANESDeleteError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
  rfalbaranes.ERROR :=true;
  mostrarError(e.Message,' FACTURASALBARANES ',29);
end;

procedure TDMGS.CDSQ_FALBARANESEditError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
  rfalbaranes.ERROR :=true;
  mostrarError(e.Message,' FACTURASALBARANES ',29);
end;

procedure TDMGS.CDSQ_FALBARANESPostError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
  rfalbaranes.ERROR :=true;
  mostrarError(e.Message,' FACTURASALBARANES ',29);
end;

procedure TDMGS.CDSQ_FALBARANESReconcileError(
  DataSet: TCustomClientDataSet; E: EReconcileError;
  UpdateKind: TUpdateKind; var Action: TReconcileAction);
begin
  if updatekind = ukdelete then
     tipoerror := true
  else
     tipoerror := false;
  rfalbaranes.ERROR :=true;
  mostrarError(e.Message,' FACTURASALBARANES ',29);
end;

procedure TDMGS.CDSQ_FALBARANESAUXAfterGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
  var aux:integer;
begin
  aux:= RFALBARANESAUX.KEY;
  RFALBARANESAUX.KEY := aux + 1;
END;
procedure TDMGS.CDSQ_FALBARANESAUXBeforeClose(DataSet: TDataSet);
begin
   INICIARLOCALES(RFALBARANESAUX);
   INICIARRECORD(VFALBARANESAUX);
end;

procedure TDMGS.CDSQ_FALBARANESAUXBeforeGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
begin
 OWNERDATA:= inttostr(RFALBARANESAUX.KEY) +FILTRO+ inttostr(CDSQ_FALBARANESAUX.PacketRecords)+FILTRO;
 OWNERDATA := OWNERDATA + OBTENEROWNERDATA(VFALBARANESAUX);
end;

procedure TDMGS.CDSQ_FALBARANESAUXBeforeOpen(DataSet: TDataSet);
begin
 CDSQ_FALBARANESAUX.FetchOnDemand := FALSE;
 CDSQ_FALBARANESAUX.PacketRecords := 20;
 RFALBARANESAUX.KEY :=0; // para que no coja el primero.
end;

procedure TDMGS.CDSQ_FALBARANESAUXReconcileError(
  DataSet: TCustomClientDataSet; E: EReconcileError;
  UpdateKind: TUpdateKind; var Action: TReconcileAction);
begin
  MOSTRARERROR (E.MESSAGE,' FALBARANESAUX ', -1);
end;


procedure TDMGS.CDSQ_MDLINEACOBROAUXAfterInsert(DataSet: TDataSet);
begin
begin
  CDSQ_mdLINEACOBROAUXfecha.AsDateTime := date;
  CDsq_mdLINEACOBROAUXCANTIDAD.asfloat := 0;
  cdsq_mdLINEACOBROAUXid_empresa.VALUE := cdsq_MDCOBROAUXid_empresa.VALUE;
  if cdsq_mdLINEACOBROAUX.RecordCount = 0 then
     cdsq_mdLINEACOBROAUXnum_linea.VALUE := 1
  else
  begin
       CDSQ_MAXIMO.CLOSE;
       CDSQ_MAXIMO.CommandText := 'SELECT MAX(NUM_LINEA) AS MAXIMO FROM  LINEAS_COBRO WHERE ID_COBRO =' +CDSQ_MDCOBROAUXID_COBRO.ASSTRING+' AND ANYO ='+CDSQ_MDCOBROAUXANYO.ASSTRING+' AND ID_EMPRESA='+CDSQ_MDCOBROAUXID_EMPRESA.AsString ;
       CDSQ_MAXIMO.OPEN;
  IF CDSQ_MAXIMO.Fields[0].ISNULL THEN
     CDSQ_MDLINEACOBROAUXNUM_LINEA.VALUE :=0
  ELSE

       CDSQ_MDLINEACOBROAUXNUM_LINEA.VALUE := CDSQ_MAXIMO.Fields[0].VALUE + 1 ;
       CDSQ_MAXIMO.CLOSE;
  end;
end;
end;

procedure TDMGS.CDSQ_MDLINEACOBROAUXAfterPost(DataSet: TDataSet);
VAR AUXBOOKMARK:TBOOKMARK;
begin
  RLINEACOBROAUX.ESCAPE:= TRUE;
  RLINEACOBROAUX.ERROR:= FALSE;
  AUXBOOKMARK:= CDSQ_MDLINEACOBROAUX.GetBookmark;
  if(CDSQ_MDLINEACOBROAUX.ChangeCount >0 ) then
     CDSQ_MDLINEACOBROAUX.ApplyUpdates(0);
  if RLINEACOBROAUX.ERROR then
  // si el error se ha producido en la linea de PRESUPUESTO, deshago los cambios
  // que he introducido
    if ErrorNotFound then
     begin
       ErrorNotFound:= false;
       RLINEACOBROAUX.ESCAPE := FALSE;// ME HACE FALTA
       RLINEACOBROAUX.ESCAPECDS := FALSE;
       CDSQ_MDLINEACOBROAUX.CancelUpdates;
       CDSQ_MDLINEACOBROAUX.close;
       CDSQ_MDCOBROAUX.Close;
     end
  ELSE
  begin
       if tipoerror then // cuando da el error de que no se puede
           // borrar pq hay referencias en otras tablas.
       begin
          CDSQ_MDLINEACOBROAUX.cancelupdates ;
          CDSQ_MDLINEACOBROAUX.Last;// para que se situe en el
          //registro correcto
       end
       else
       begin
          CDSQ_MDLINEACOBROAUX.UndoLastChange (true);
          CDSQ_MDLINEACOBROAUXNUM_LINEA.FocusControl;
      end;
     abort;
  end;
  CDSQ_MDLINEACOBROAUX.DisableControls ;
  calcularbaseCOBROAUX;
  CDSQ_MDLINEACOBROAUX.EnableControls ;
  CDSQ_MDCOBROAUX.Edit;
  CDSQ_MDCOBROAUXTOTAL_COBRADO.asfloat := base_COBRO;
  RCOBROAUX.PREGUNTA := false;
  CDSQ_MDCOBROAUX.post;
  CDSQ_mDCOBROAUX.APPLYUPDATES(0);
  IF CDSQ_MDLINEACOBROAUX.RecordCount > 1 THEN
     cdsq_mdLINEACOBROAUX.GotoBookmark(auxbookmark);
  cdsq_mdLINEACOBROAUX.FreeBookmark(auxbookmark);
end;

procedure TDMGS.CDSQ_MDCOBROBeforeEdit(DataSet: TDataSet);
begin
   IF (CDSQ_mDCOBROTIPO.ASSTRING ='ALBARAN')
   AND (TRIM(CDSQ_MDCOBROID.ASSTRING) <> '' ) THEN
   BEGIN
      CDSQ_MAXIMO.close;
      CDSQ_MAXIMO.CommandText := ' select count(*) as maximo from FACTURASALBARANES where ' +
      ' ID_ALBARAN='+CDSQ_MDCOBROId.asstring+' and ALBid_empresa='+DMGS.CDSQ_MDCOBROId_empresa.asstring+
      ' and ALBid_serie='''+DMGS.CDSQ_MDCOBROId_serie.asstring+''' and ALBanyo='+dmgs.cdsq_mdCOBROanyoSERIE.asstring+' AND TIPO=''AL'' ';
      CDSQ_MAXIMO.Open;
      IF NOT CDSQ_MAXIMO.Fields[0].ISNULL THEN
      IF CDSQ_MAXIMO.Fields[0].Value > 0 THEN
      BEGIN
        SHOWMESSAGE(' EL COBRO NO SE PUEDE MODIFICAR EL ALBARAN YA HA SIDO FACTURADO ');
        ABORT;
      END;
      CDSQ_MAXIMO.CLOSE;
   END;
End;

procedure TDMGS.CDSQ_MDFACTURABeforeEdit(DataSet: TDataSet);
begin
  IF (CDSQ_MDFACTURAIMPRESO.VALUE = 1)
  AND (RFACTURA.PREGUNTAEDIT) THEN
  BEGIN
   case PedirConfirmacion('Esta Factura ya ha sido impresa,¿Confirma que desea modificarla?',true,true,false) of
        mrno:Abort;
   end;
  END;
  IF NOT RFACTURA.PREGUNTAEDIT  THEN
     RFACTURA.PREGUNTAEDIT:= TRUE;
end;

procedure TDMGS.CDSQ_MDFACTURAAfterEdit(DataSet: TDataSet);
begin
// LO QUITO PQ PUEDE SER EL CULPABLE DE QUE ME
// DE EL DELTA IS EMPTY.
// IF CDSQ_MDFACTURAIMPRESO.VALUE = 1 THEN
//     CDSQ_MDFACTURAIMPRESO.VALUE := 0;

end;

procedure TDMGS.CDSQ_ARQUEODECAJAAfterGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
  var aux:integer;
begin
  aux:= RARQUEO.KEY;
  RARQUEO.KEY := aux + 1;
end;
procedure TDMGS.CDSQ_ARQUEODECAJAAfterInsert(DataSet: TDataSet);
begin
 IF NOT RARQUEO.BUSCANDO THEN
 BEGIN
  CDSQ_ARQUEODECAJAAFECHA.VALUE := DATE;
  CDSQ_ARQUEODECAJAAHORA.Value := TIME;
  CDSQ_ARQUEODECAJAid_empresa.asstring := fmenu.id_empresa;
  CDSQ_ARQUEODECAJAanyo.asstring := fmenu.ANYO;
  CDSQ_ARQUEODECAJAAB500.Value := 0;
  CDSQ_ARQUEODECAJAAB200.Value := 0;
  CDSQ_ARQUEODECAJAAB100.Value := 0;
  CDSQ_ARQUEODECAJAAB50.Value := 0;
  CDSQ_ARQUEODECAJAAB20.Value := 0;
  CDSQ_ARQUEODECAJAAB10.Value := 0;
  CDSQ_ARQUEODECAJAAB5.Value := 0;
  CDSQ_ARQUEODECAJAAM2.Value := 0;
  CDSQ_ARQUEODECAJAAM1.Value := 0;
  CDSQ_ARQUEODECAJAAM050.Value := 0;
  CDSQ_ARQUEODECAJAAM020.Value := 0;
  CDSQ_ARQUEODECAJAAM010.Value := 0;
  CDSQ_ARQUEODECAJAAM005.Value := 0;
  CDSQ_ARQUEODECAJAAM002.Value := 0;
  CDSQ_ARQUEODECAJAAM001.Value := 0;
  CDSQ_ARQUEODECAJACB500.Value := 0;
  CDSQ_ARQUEODECAJACB200.Value := 0;
  CDSQ_ARQUEODECAJACB100.Value := 0;
  CDSQ_ARQUEODECAJACB50.Value := 0;
  CDSQ_ARQUEODECAJACB20.Value := 0;
  CDSQ_ARQUEODECAJACB10.Value := 0;
  CDSQ_ARQUEODECAJACB5.Value := 0;
  CDSQ_ARQUEODECAJACM2.Value := 0;
  CDSQ_ARQUEODECAJACM1.Value := 0;
  CDSQ_ARQUEODECAJACM050.Value := 0;
  CDSQ_ARQUEODECAJACM020.Value := 0;
  CDSQ_ARQUEODECAJACM010.Value := 0;
  CDSQ_ARQUEODECAJACM005.Value := 0;
  CDSQ_ARQUEODECAJACM002.Value := 0;
  CDSQ_ARQUEODECAJACM001.Value := 0;
  CDSQ_ARQUEODECAJAESTADO.Value := 1; // ABIERTO ; CERRADO -> 2
 END;
end;

procedure TDMGS.CDSQ_ARQUEODECAJAAfterPost(DataSet: TDataSet);
begin
 RARQUEO.ERROR := false;
 if CDSQ_ARQUEODECAJA.ChangeCount > 0 then
  CDSQ_ARQUEODECAJA.ApplyUpdates(0); // permito 0 errores
 if RARQUEO.ERROR then
 begin
     if ErrorNotFound then
     begin
       ErrorNotFound:= false;
       CDSQ_ARQUEODECAJA.CancelUpdates;
       CDSQ_ARQUEODECAJA.CLOSE;
     end
     ELSE
     begin
       if tipoerror then // cuando da el error de que no se puede
           // borrar pq hay referencias en otras tablas.
       begin
          CDSQ_ARQUEODECAJA.cancelupdates ;
          CDSQ_ARQUEODECAJA.Last;// para que se situe en el
          //registro correcto
       end
       else
       begin
          CDSQ_ARQUEODECAJA.edit;
          CDSQ_ARQUEODECAJAAFECHA.FocusControl;
       END;
      abort;
     end;
 end;
end;
procedure TDMGS.CDSQ_ARQUEODECAJABeforeClose(DataSet: TDataSet);
BEGIN
   if CDSQ_ARQUEODECAJA.state in [dsedit,dsinsert] then
      CDSQ_ARQUEODECAJA.post;
   INICIARLOCALES(RARQUEO);
   INICIARRECORD(VARQUEO);
END;
procedure TDMGS.CDSQ_ARQUEODECAJABeforeDelete(DataSet: TDataSet);
BEGIN
   case PedirConfirmacion('¿Confirma que desea borrar este arqueo?',true,true,false) of
        mrno:Abort;
   end;
END;


procedure TDMGS.CDSQ_ARQUEODECAJABeforeGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
begin
  OWNERDATA:= inttostr(RARQUEO.KEY ) +FILTRO+ inttostr(cDSQ_ARQUEODECAJA.PacketRecords)+FILTRO;
  OWNERDATA := OWNERDATA + OBTENEROWNERDATA(varqueo);
end;

procedure TDMGS.CDSQ_ARQUEODECAJABeforeOpen(DataSet: TDataSet);
begin
 cDSQ_ARQUEODECAJA.FetchOnDemand := FALSE;
 cDSQ_ARQUEODECAJA.PacketRecords := 20;
 rarqueo.KEY :=0; // para que no coja el primero.
end;

procedure TDMGS.CDSQ_ARQUEODECAJABeforePost(DataSet: TDataSet);
var x:integer;
begin
    if cDSQ_ARQUEODECAJA.state=dsinsert then x:=PedirConfirmacion('¿Confirma que desea dar de alta este Arqueo?',true,true,true)
                                     else x:=PedirConfirmacion('¿Confirma que desea modificar este Arqueo?',true,true,true);
    case x of
        mrno: begin
                 cDSQ_ARQUEODECAJA.UndoLastChange(TRUE);
                 cDSQ_ARQUEODECAJA.cancel;
                 abort;
              end;
        mrcancel:BEGIN
                  cDSQ_ARQUEODECAJAafecha.FocusControl ;
                  abort;
                 END;
    end;
    IF CDSQ_ARQUEODECAJACFECHA.ASSTRING <> '' THEN
       COMPROBARDESFASE;
end;
procedure TDMGS.CDSQ_ARQUEODECAJADeleteError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
  Rarqueo.ERROR :=true;
  mostrarError(e.Message,' ARQUEO ',30);
end;

procedure TDMGS.CDSQ_ARQUEODECAJAEditError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
  Rarqueo.ERROR :=true;
  mostrarError(e.Message,' ARQUEO ',30);
end;

procedure TDMGS.CDSQ_ARQUEODECAJAPostError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
  Rarqueo.ERROR :=true;
  mostrarError(e.Message,' ARQUEO ',30);
end;

procedure TDMGS.CDSQ_ARQUEODECAJAReconcileError(
  DataSet: TCustomClientDataSet; E: EReconcileError;
  UpdateKind: TUpdateKind; var Action: TReconcileAction);
begin
  if updatekind = ukdelete then
     tipoerror := true
  else
     tipoerror := false;
  RARQUEO.ERROR :=true;
  mostrarError(e.Message,' ARQUEO ',30);
end;

procedure TDMGS.CDSQ_ARQUEODECAJABeforeInsert(DataSet: TDataSet);
begin
  with cdsq_maximo do
  begin
    close;
    commandtext := ' select count(*) as maximo from arqueodecaja where estado=1 and id_empresa='+fmenu.id_empresa+' and anyo='+fmenu.anyo;
    open;
    IF NOT CDSQ_MAXIMO.Fields[0].ISNULL THEN
    if dmgs.CDSQ_MAXIMO.Fields[0].value >0 then
    begin
      showmessage (' Existe un arqueo abierto, cierrelo antes de abrir otro');
      varqueo.TIPO := '2';
      varqueo.ID := ' estado=1 ';
      open;
      abort;
    end;
  end;
end;

procedure TDMGS.CDSQ_ARQUEODECAJACalcFields(DataSet: TDataSet);
begin
  if CDSQ_ARQUEODECAJAestado.value = 1 then
     CDSQ_ARQUEODECAJAestados.asstring := 'SIN CERRAR'
  ELSE
     CDSQ_ARQUEODECAJAestados.asstring := 'CERRADO'
end;

procedure TDMGS.CDSQ_MDLINEAFACTURACalcFields(DataSet: TDataSet);
begin
 IF CDSQ_MDLINEAFACTURACODIGO_BARRAS.ASSTRING <> '' THEN
 BEGIN
  CDSQ_MAXIMO.Close;
  CDSQ_MAXIMO.CommandText := 'SELECT NUMEROSERIE FROM ALMACENDETALLE2 WHERE CODIGO_BARRAS='''+CDSQ_MDLINEAFACTURACODIGO_BARRAS.ASSTRING+''' ';
  CDSQ_MAXIMO.Open;
  CDSQ_mDLINEAFACTURANUMERO_SERIE.AsString := CDSQ_MAXIMO.Fields[0].AsString;
 END;
{
  CDSQ_mdlineaFACTURAPRECIO.asfloat := 0;
  CDsq_mdlineaFACTURACANTIDAD.asfloat := 1;
  CDSQ_MDLINEAFACTURAIVA.ASSTRING :='16';
  CDsq_mdlineaFACTURADESCUENTO.asfloat := 0;
  CDsq_mdlineaFACTURADESCUENTOEURO.asfloat := 0;
  CDSQ_mdlineaFACTURAIMPORTE.asfloat := 0;
}
end;

procedure TDMGS.CDSQ_MDLINEAENTRADACalcFields(DataSet: TDataSet);
begin
  CDsq_mdlineaENTRADADESCUENTOEURO.asfloat := 0;
end;

procedure TDMGS.CDSQ_PRUEBAAfterGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
begin
//  FMENU.TRANSACTION := OWNERDATA;
//  SHOWMESSAGE(INTTOSTR(FMENU.TRANSACTION));
end;

procedure TDMGS.CDSQ_PRUEBABeforeGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
begin
//  OWNERDATA :=  FMENU.TRANSACTION;
end;

procedure TDMGS.CDSQ_PROCEDUREAfterGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
  var aux:integer;
begin
  aux:= RPROCEDURE.KEY;
  RPROCEDURE.KEY := aux + 1;
END;



function TDMGS.ARTICULOSMODIFICADOS():BOOLEAN;
VAR I:SMALLINT;
    CAMBIO : BOOLEAN;
begin
 CAMBIO := FALSE;
 FOR I:=0 TO CDSQ_ARTICULOS.FieldCount - 1 DO
  try
   if cdsq_articulos.Fields[i].OldValue <> cdsq_articulos.Fields[i].newvalue then
      cambio := true;
  except
  end;
 result := cambio;
end;

procedure TDMGS.CDSQ_TIPOSIVAAfterGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
  var aux:integer;
begin
  aux:= RTIPOSIVA.KEY;
  RTIPOSIVA.KEY := aux + 1;
end;

procedure TDMGS.CDSQ_TIPOSIVAAfterInsert(DataSet: TDataSet);
begin
  IF NOT RTIPOSIVA.BUSCANDO THEN
  BEGIN
   cdsq_FLOAT.Close;
   CDSQ_FLOAT.CommandText := ' SELECT MAX(ID) AS MAXIMO FROM TIPOSIVA ';
   CDSQ_FLOAT.Open;

   CDSQ_TIPOSIVAID.AsInteger := CDSQ_FLOAT.FIELDS[0].AsInteger + 1;
   CDSQ_FLOAT.CLOSE;
  END;
end;

procedure TDMGS.CDSQ_TIPOSIVAAfterPost(DataSet: TDataSet);
var aux:string;
begin
  RTIPOSIVA.ESCAPE := TRUE;
  RTIPOSIVA.ERROR := false;
  if CDSQ_TIPOSIVA.ChangeCount >0 then
    CDSQ_TIPOSIVA.ApplyUpdates(0);
  if RTIPOSIVA.ERROR  then
  begin
     if ErrorNotFound then
     begin
       ErrorNotFound:= false;
       RTIPOSIVA.ESCAPE := FALSE;// ME HACE FALTA
       RTIPOSIVA.ESCAPECDS := FALSE;
       // AL HACER ABORT ENTRA EN EL BEFORECANCEL
       // Y NO QUIERO QUE MUESTRE LA VENTANA DE INSERTAR O ACTUALIZAR
       // CONSTANTEMENTE
       CDSQ_TIPOSIVA.CancelUpdates;
       CDSQ_TIPOSIVA.close;
     end
     ELSE
     begin
       if tipoerror then // cuando da el error de que no se puede
           // borrar pq hay referencias en otras tablas.
       begin
          CDSQ_TIPOSIVA.cancelupdates ;
          CDSQ_TIPOSIVA.Last;// para que se situe en el
          //registro correcto
       end
       else
       begin
          CDSQ_TIPOSIVA.Edit;
          CDSQ_TIPOSIVATIPO.FocusControl;
       END;
       abort;
     end;
  end;
//  ARBGRIDARTICULO := id_ARTICULO ;
//  IF (CDSQ_TIPOSIVAID_ARTICULO.NEWVALUE <> ID_ARTICULO )
//  THEN
//      CDSQ_TIPOSIVA.REFRESH; // ME HACE FALTA PQ COJO ID_ARTICULO,COD_ARTICULO
      // DESDE EL SERVER.
end;




procedure TDMGS.CDSQ_TIPOSIVABeforeCancel(DataSet: TDataSet);
begin
// EL ESCAPE CONTROLA CUANDO PULSO LA SEGUNDA VEZ ESCAPE
// ESTANDO EL DATASET EN ESTADO DE INSERCION O EDICION
// ALBARANESESCAPE LO UTILIZO A LA HORA DE HACER ABORT Y CANCEL EN UDM
// ESCAPE LO UTILIZO PARA SABER QUE HE PULSADO ESCAPE EN EL FORMULARIO
  if ((CDSQ_TIPOSIVA.State in [dsedit,dsinsert]) and (RTIPOSIVA.ESCAPE OR RTIPOSIVA.ESCAPECDS)) then
  begin
      RTIPOSIVA.ESCAPEENTRA:= true;
      RTIPOSIVA.ESCAPE := true;// POR SI OCURRE UN ERROR AL HACER EL POST
      if not RTIPOSIVA.BUSCANDO then
      BEGIN
         CDSQ_TIPOSIVA.post;
         RTIPOSIVA.ENDBGRID := FALSE;
      END;
  end;
  RTIPOSIVA.ESCAPEENTRA:= false;
  // AL HACER ABORT ENTRA EN EL BEFORECANCEL
  // Y NO QUIERO QUE MUESTRE LA VENTANA DE INSERTAR O ACTUALIZAR
  // CONSTANTEMENTE
  RTIPOSIVA.ESCAPE := true;
end;

procedure TDMGS.CDSQ_TIPOSIVABeforeClose(DataSet: TDataSet);
begin
   if (CDSQ_TIPOSIVA.state in [dsedit,dsinsert]) AND NOT RTIPOSIVA.BUSCANDO then
      CDSQ_TIPOSIVA.post;
   INICIARLOCALES(RTIPOSIVA);
   INICIARRECORD(VTIPOSIVA)
end;

procedure TDMGS.CDSQ_TIPOSIVABeforeGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
begin
  OWNERDATA:= inttostr(RTIPOSIVA.KEY) +FILTRO+ inttostr(CDSQ_TIPOSIVA.PacketRecords)+FILTRO;
  OWNERDATA := OWNERDATA + OBTENEROWNERDATA(VTIPOSIVA);
end;

procedure TDMGS.CDSQ_TIPOSIVABeforeOpen(DataSet: TDataSet);
begin
 CDSQ_TIPOSIVA.FetchOnDemand := FALSE;
 CDSQ_TIPOSIVA.PacketRecords := 20;
 RTIPOSIVA.KEY :=0; // para que no coja el primero.
end;

procedure TDMGS.CDSQ_TIPOSIVABeforePost(DataSet: TDataSet);
var x:integer;
begin
    IF rTIPOSIVA.ENDBGRID
    THEN
    BEGIN
       IF (rTIPOSIVA.BUSCANDO) THEN
          CDSQ_TIPOSIVATIPO.FocusControl
       ELSE
          CDSQ_TIPOSIVAtipo.FocusControl ;
       rTIPOSIVA.ENDBGRID := FALSE;
       ABORT;
    END;
    if rTIPOSIVA.PREGUNTA then
    begin
    if CDSQ_TIPOSIVA.state=dsinsert then x:=PedirConfirmacion('¿Confirma que desea dar de alta este tipo de iva?',true,true,true)
                               else x:=PedirConfirmacion('¿Confirma que desea modificar este tipo de iva?',true,true,true);
    case x of
        mrno: begin
                 rTIPOSIVA.ESCAPE := FALSE;// PARA CONTROLAR EN EL UDM
                 rTIPOSIVA.ESCAPECDS:= FALSE;// PARA CONTROLAR EN EL FORMULARIO
                 CDSQ_TIPOSIVA.UndoLastChange(TRUE);
                 CDSQ_TIPOSIVA.cancel;
                 abort;
              end;
        mrcancel:
              BEGIN
                 if rTIPOSIVA.ESCAPEENTRA then
                     CDSQ_TIPOSIVA.edit;
                 CDSQ_TIPOSIVAtipo.FocusControl;
                 ABORT;
              END;
    end;
    end
    else
      rTIPOSIVA.PREGUNTA := true;

    rTIPOSIVA.ESCAPECDS := FALSE;// ME HACE FALTA
    // AL HACER ABORT ENTRA EN EL BEFORECANCEL
    // Y NO QUIERO QUE MUESTRE LA VENTANA DE INSERTAR O ACTUALIZAR
    // CONSTANTEMENTE

end;

procedure TDMGS.CDSQ_TIPOSIVADeleteError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
  RTIPOSIVA.ERROR :=true;
  mostrarError(e.Message,' TIPOS DE IVA ',31);
end;

procedure TDMGS.CDSQ_TIPOSIVAEditError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
  RTIPOSIVA.ERROR :=true;
  mostrarError(e.Message,' TIPOS DE IVA ',31);
end;

procedure TDMGS.CDSQ_TIPOSIVAPostError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
  RTIPOSIVA.ERROR :=true;
  mostrarError(e.Message,' TIPOS DE IVA ',31);
end;

procedure TDMGS.CDSQ_TIPOSIVAReconcileError(DataSet: TCustomClientDataSet;
  E: EReconcileError; UpdateKind: TUpdateKind;
  var Action: TReconcileAction);
begin
   if updatekind = ukdelete then
     tipoerror := true
  else
     tipoerror := false;

  RTIPOSIVA.ERROR :=true;
  mostrarError(e.Message,' TIPOS DE IVA ',31);
end;

procedure TDMGS.CDSQ_ALMACENDETALLE2AfterGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
  var aux:integer;
begin
  aux:= RALMACENDETALLE2.KEY;
  RALMACENDETALLE2.KEY := aux + 1;
end;

procedure TDMGS.CDSQ_ALMACENDETALLE2AfterPost(DataSet: TDataSet);
var aux:string;
begin
  ralmacendetalle2.ESCAPE := TRUE;
  ralmacendetalle2.ERROR := false;
  if CDSQ_almacendetalle2.ChangeCount >0 then
    CDSQ_almacendetalle2.ApplyUpdates(0);
  if ralmacendetalle2.ERROR  then
  begin
     if ErrorNotFound then
     begin
       ErrorNotFound:= false;
       ralmacendetalle2.ESCAPE := FALSE;// ME HACE FALTA
       ralmacendetalle2.ESCAPECDS := FALSE;
       // AL HACER ABORT ENTRA EN EL BEFORECANCEL
       // Y NO QUIERO QUE MUESTRE LA VENTANA DE INSERTAR O ACTUALIZAR
       // CONSTANTEMENTE
       CDSQ_almacendetalle2.CancelUpdates;
       CDSQ_almacendetalle2.close;
     end
     ELSE
     begin
       if tipoerror then // cuando da el error de que no se puede
           // borrar pq hay referencias en otras tablas.
       begin
          CDSQ_almacendetalle2.cancelupdates ;
          CDSQ_almacendetalle2.Last;// para que se situe en el
          //registro correcto
       end
       else
       begin
          CDSQ_almacendetalle2.Edit;
          CDSQ_almacendetalle2fecha_caducidad.FocusControl;
       END;
       abort;
     end;
  end;
//  ARBGRIDARTICULO := id_ARTICULO ;
//  IF (CDSQ_almacendetalle2ID_ARTICULO.NEWVALUE <> ID_ARTICULO )
//  THEN
//      CDSQ_almacendetalle2.REFRESH; // ME HACE FALTA PQ COJO ID_ARTICULO,COD_ARTICULO
      // DESDE EL SERVER.
end;

procedure TDMGS.CDSQ_ALMACENDETALLE2BeforeCancel(DataSet: TDataSet);
begin
// EL ESCAPE CONTROLA CUANDO PULSO LA SEGUNDA VEZ ESCAPE
// ESTANDO EL DATASET EN ESTADO DE INSERCION O EDICION
// ALBARANESESCAPE LO UTILIZO A LA HORA DE HACER ABORT Y CANCEL EN UDM
// ESCAPE LO UTILIZO PARA SABER QUE HE PULSADO ESCAPE EN EL FORMULARIO
  if ((CDSQ_almacendetalle2.State in [dsedit,dsinsert]) and (Ralmacendetalle2.ESCAPE OR Ralmacendetalle2.ESCAPECDS)) then
  begin
      Ralmacendetalle2.ESCAPEENTRA:= true;
      Ralmacendetalle2.ESCAPE := true;// POR SI OCURRE UN ERROR AL HACER EL POST
      if not Ralmacendetalle2.BUSCANDO then
      BEGIN
         CDSQ_almacendetalle2.post;
         Ralmacendetalle2.ENDBGRID := FALSE;
      END;
  end;
  Ralmacendetalle2.ESCAPEENTRA:= false;
  // AL HACER ABORT ENTRA EN EL BEFORECANCEL
  // Y NO QUIERO QUE MUESTRE LA VENTANA DE INSERTAR O ACTUALIZAR
  // CONSTANTEMENTE
  Ralmacendetalle2.ESCAPE := true;
end;

procedure TDMGS.CDSQ_ALMACENDETALLE2BeforeClose(DataSet: TDataSet);
begin
   if (CDSQ_almacendetalle2.state in [dsedit,dsinsert]) AND NOT Ralmacendetalle2.BUSCANDO then
      CDSQ_almacendetalle2.post;
   INICIARLOCALES(Ralmacendetalle2);
   INICIARRECORD(Valmacendetalle2)
end;

procedure TDMGS.CDSQ_ALMACENDETALLE2BeforeGetRecords(Sender: TObject;
  var OwnerData: OleVariant);
begin
  OWNERDATA:= inttostr(Ralmacendetalle2.KEY) +FILTRO+ inttostr(CDSQ_almacendetalle2.PacketRecords)+FILTRO;
  OWNERDATA := OWNERDATA + OBTENEROWNERDATA(Valmacendetalle2);
end;

procedure TDMGS.CDSQ_ALMACENDETALLE2BeforeOpen(DataSet: TDataSet);
begin
 CDSQ_almacendetalle2.FetchOnDemand := FALSE;
 CDSQ_almacendetalle2.PacketRecords := 20;
 Ralmacendetalle2.KEY :=0; // para que no coja el primero.
end;

procedure TDMGS.CDSQ_ALMACENDETALLE2BeforePost(DataSet: TDataSet);
var x:integer;
begin
    IF ralmacendetalle2.ENDBGRID
    THEN
    BEGIN
       IF (ralmacendetalle2.BUSCANDO) THEN
          CDSQ_almacendetalle2fecha_caducidad.FocusControl
       ELSE
          CDSQ_almacendetalle2fecha_caducidad.FocusControl ;
       ralmacendetalle2.ENDBGRID := FALSE;
       ABORT;
    END;
    if ralmacendetalle2.PREGUNTA then
    begin
    if CDSQ_almacendetalle2.state=dsinsert then x:=PedirConfirmacion('¿Confirma que desea dar de alta esta línea?',true,true,true)
                               else x:=PedirConfirmacion('¿Confirma que desea modificar esta línea?',true,true,true);
    case x of
        mrno: begin
                 ralmacendetalle2.ESCAPE := FALSE;// PARA CONTROLAR EN EL UDM
                 ralmacendetalle2.ESCAPECDS:= FALSE;// PARA CONTROLAR EN EL FORMULARIO
                 CDSQ_almacendetalle2.UndoLastChange(TRUE);
                 CDSQ_almacendetalle2.cancel;
                 abort;
              end;
        mrcancel:
              BEGIN
                 if ralmacendetalle2.ESCAPEENTRA then
                     CDSQ_almacendetalle2.edit;
                 CDSQ_almacendetalle2fecha_caducidad.FocusControl;
                 ABORT;
              END;
    end;
    end
    else
      ralmacendetalle2.PREGUNTA := true;
    ralmacendetalle2.ESCAPECDS := FALSE;// ME HACE FALTA
    // AL HACER ABORT ENTRA EN EL BEFORECANCEL
    // Y NO QUIERO QUE MUESTRE LA VENTANA DE INSERTAR O ACTUALIZAR
    // CONSTANTEMENTE
   IF RALMACENDETALLE2.PREGUNTAEDIT THEN
      COMPROBARCANTIDAD()
   ELSE
      RALMACENDETALLE2.PREGUNTAEDIT := TRUE;


end;

procedure TDMGS.CDSQ_ALMACENDETALLE2DeleteError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
  RALMACENDETALLE2.ERROR :=true;
  mostrarError(e.Message,' ALMACEN DETALLE ',32);
end;

procedure TDMGS.CDSQ_ALMACENDETALLE2EditError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
  RALMACENDETALLE2.ERROR :=true;
  mostrarError(e.Message,' ALMACEN DETALLE ',32);
end;

procedure TDMGS.CDSQ_ALMACENDETALLE2PostError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
  RALMACENDETALLE2.ERROR :=true;
  mostrarError(e.Message,' ALMACEN DETALLE ',32);
end;

procedure TDMGS.CDSQ_ALMACENDETALLE2ReconcileError(
  DataSet: TCustomClientDataSet; E: EReconcileError;
  UpdateKind: TUpdateKind; var Action: TReconcileAction);
begin
   if updatekind = ukdelete then
     tipoerror := true
  else
     tipoerror := false;

  RALMACENDETALLE2.ERROR :=true;
  mostrarError(e.Message,' ALMACEN DETALLE ',32);
end;

procedure TDMGS.CDSQ_ALMACENDETALLE2AfterInsert(DataSet: TDataSet);
begin
  IF NOT Ralmacendetalle2.BUSCANDO THEN
  BEGIN
    CDSQ_MAXIMO.CLOSE;
    CDSQ_MAXIMO.COMMANDTEXT := 'SELECT max(numero) as MAXIMO FROM almacendetalle2' ;
    CDSQ_MAXIMO.Open;
    IF CDSQ_MAXIMO.Fields[0].ISNULL THEN
       cdsq_almacendetalle2numero.Value := 1
    ELSE
       cdsq_almacendetalle2numero.Value := CDSQ_MAXIMO.Fields[0].VALUE + 1;
   CDSQ_MAXIMO.CLOSE;

  END;
end;

procedure TDMGS.COMPROBARCANTIDAD;
var aux:double;
begin
  aux := pcantidad;
  if dmgs.cdsq_almacendetalle2.State in [dsedit] then
  begin
    pcantidad := pcantidad - dmgs.cdsq_almacendetalle2cantidad.OldValue ;
    pcantidad := pcantidad + dmgs.cdsq_almacendetalle2cantidad.NewValue ;
  end;
  if dmgs.cdsq_almacendetalle2.State in [dsinsert] then
    pcantidad := pcantidad + dmgs.cdsq_almacendetalle2cantidad.asfloat ;
  if pcantidad > cantidad then
  begin
    showmessage('Las cantidades superan la cantidad en la entrada.');
    pcantidad := aux;
    abort;
  end;
end;

procedure TDMGS.CDSQ_MDLINEAALBARANCalcFields(DataSet: TDataSet);
begin
 IF CDSQ_MDLINEAALBARANCODIGO_BARRAS.ASSTRING <> '' THEN
 BEGIN
  CDSQ_MAXIMO.Close;
  CDSQ_MAXIMO.CommandText := 'SELECT NUMEROSERIE FROM ALMACENDETALLE2 WHERE CODIGO_BARRAS='''+CDSQ_MDLINEAALBARANCODIGO_BARRAS.ASSTRING+''' ';
  CDSQ_MAXIMO.Open;
  CDSQ_mDLINEAALBARANNUMERO_SERIE.AsString := CDSQ_MAXIMO.Fields[0].AsString;
 END;
end;

procedure TDMGS.CDSQ_MDLINEATICKETCalcFields(DataSet: TDataSet);
begin
 IF CDSQ_MDLINEATICKETCODIGO_BARRAS.ASSTRING <> '' THEN
 BEGIN
  CDSQ_MAXIMO.Close;
  CDSQ_MAXIMO.CommandText := 'SELECT NUMEROSERIE FROM ALMACENDETALLE2 WHERE CODIGO_BARRAS='''+CDSQ_MDLINEATICKETCODIGO_BARRAS.ASSTRING+''' ';
  CDSQ_MAXIMO.Open;
  CDSQ_mDLINEATICKETNUMERO_SERIE.AsString := CDSQ_MAXIMO.Fields[0].AsString;
 END;
end;

END.










