﻿unit datos;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Menus, Vcl.ExtCtrls,
  Vcl.Grids, Vcl.DBGrids, Data.DB, ZAbstractRODataset, ZAbstractDataset,
  ZDataset, Vcl.Tabs, Vcl.ComCtrls, Vcl.Mask, Vcl.DBCtrls, ZAbstractConnection,
  ZConnection, ZAbstractTable, Vcl.ExtDlgs, Vcl.Imaging.jpeg, frxClass, frxDBSet,
  frxExportPDF, frxBarcode, Vcl.Buttons, Vcl.ImgList;

type
  TDM = class(TDataModule)
    DBagrigest: TZConnection;
    dsqnominasdetalle: TDataSource;
    qnominasdetalle: TZQuery;
    qnominasdetalleid: TIntegerField;
    qnominasdetallefecha: TDateField;
    qnominasdetalleparcela: TWideStringField;
    qnominasdetalleidt: TIntegerField;
    qnominasdetalletrabajador: TWideStringField;
    qnominasdetalletypework: TWideStringField;
    qnominasdetallearticulo: TWideStringField;
    qnominasdetalleqhoras: TFloatField;
    qnominasdetalleprecio: TFloatField;
    qnominasdetalletotal: TFloatField;
    qnominasdetalleestado: TWideStringField;
    qnominasdetalleorigen: TWideStringField;
    dsqanticiposdetalle: TDataSource;
    qanticiposdetalle: TZReadOnlyQuery;
    qanticiposdetalleid: TIntegerField;
    qanticiposdetallefecha: TDateField;
    qanticiposdetalleimporte: TFloatField;
    qanticiposdetalleestado: TWideStringField;
    qanticiposdetalletrabajador: TWideStringField;
    qanticiposdetalleidt: TIntegerField;
    tnotas: TZTable;
    tcalendario_laboral: TZTable;
    dscalendario: TDataSource;
    dsnotas: TDataSource;
    qaux1: TZReadOnlyQuery;
    tempresa: TZTable;
    tcentro_coste: TZTable;
    dsempresa: TDataSource;
    tempresaid: TIntegerField;
    tempresacif: TWideStringField;
    tempresanombre: TWideStringField;
    tempresadireccion: TWideStringField;
    tempresacodpost: TWideStringField;
    tempresapoblacion: TWideStringField;
    tempresaprovincia: TWideStringField;
    tempresaemail: TWideStringField;
    tempresatelefono1: TWideStringField;
    tempresatelefono2: TWideStringField;
    tempresacontacto: TWideStringField;
    tempresacontingenciacomfij: TFloatField;
    tempresasalariobasedia: TFloatField;
    tempresacontingenciasdia: TFloatField;
    tempresairpf: TFloatField;
    tempresadesempleo: TFloatField;
    tempresaformacion: TFloatField;
    tempresacontingencias: TFloatField;
    tempresacc_iban: TWideStringField;
    tempresacc_entidad: TWideStringField;
    tempresacc_oficina: TWideStringField;
    tempresacc_dc: TWideStringField;
    tempresacc_cc: TWideStringField;
    tempresaactive: TIntegerField;
    tprenominas: TZTable;
    tprenominasId: TIntegerField;
    tprenominasIDT: TIntegerField;
    tprenominasANYO: TIntegerField;
    tprenominasMES: TWideStringField;
    tprenominasNIF: TWideStringField;
    tprenominasNOMBRE: TWideStringField;
    tprenominasDIRECCION: TWideStringField;
    tprenominasCP: TWideStringField;
    tprenominasPOBLACION: TWideStringField;
    tprenominasHORAS: TFloatField;
    tprenominasFECHAALTA: TDateField;
    tprenominasDIASTRABAJADOS: TIntegerField;
    tprenominasDIASMAXIMO: TIntegerField;
    tprenominasDIASCALCULO: TIntegerField;
    tprenominasTOTALBRUTO: TFloatField;
    tprenominasIRPF: TFloatField;
    tprenominasTOTALIRPF: TFloatField;
    tprenominasDESEMPLEO: TFloatField;
    tprenominasTOTALDESEMPLEO: TFloatField;
    tprenominasFORMACION: TFloatField;
    tprenominasTOTALFORMACION: TFloatField;
    tprenominasCONTINGENCIAS: TFloatField;
    tprenominasTOTALCONTINGENCIAS: TFloatField;
    tprenominasTOTALNETO: TFloatField;
    tprenominasANTICIPOS: TFloatField;
    tprenominasTOTALAPAGAR: TFloatField;
    tprenominasCUENTAPAGO: TWideStringField;
    tprenominasFECHAPAGO: TDateField;
    tprenominasESTADO: TWideStringField;
    tprenominasSALARIOBASE: TFloatField;
    tprenominasDIASLABORABLES: TIntegerField;
    tprenominasCORRECTO: TIntegerField;
    dsprenominas: TDataSource;
    qaux2: TZReadOnlyQuery;
    qaux3: TZReadOnlyQuery;
    ttrabajadores: TZTable;
    tprenominasFECHABAJA: TDateField;
    tproductos: TZTable;
    tproductoscodigo: TWideStringField;
    tproductosdescripcion: TWideStringField;
    tproductosimagen: TBlobField;
    tproductosalto: TIntegerField;
    tproductosancho: TIntegerField;
    tproductoslargo: TIntegerField;
    tproductostara: TFloatField;
    tproductospeso: TFloatField;
    tproductoserrorpeso: TFloatField;
    tproductospesadomanual: TIntegerField;
    tproductoscoste: TFloatField;
    tproductosactivo: TIntegerField;
    qproductos: TZReadOnlyQuery;
    dsqproductos: TDataSource;
    qproductoscodigo: TWideStringField;
    qproductosdescripcion: TWideStringField;
    qproductosimagen: TBlobField;
    qproductosalto: TIntegerField;
    qproductosancho: TIntegerField;
    qproductoslargo: TIntegerField;
    qproductostara: TFloatField;
    qproductospeso: TFloatField;
    qproductoserrorpeso: TFloatField;
    qproductospesadomanual: TIntegerField;
    qproductoscoste: TFloatField;
    qproductosactivo: TIntegerField;
    dsproductos: TDataSource;
    qproductosEANUPC: TLargeintField;
    tproductosEANUPC: TLargeintField;
    qmateriasprimas: TZReadOnlyQuery;
    dsqmateriasprimas: TDataSource;
    dsmateriasprimas: TDataSource;
    tmateriasprimas: TZTable;
    qmateriasprimasid: TWideStringField;
    qmateriasprimasdescripcion: TWideStringField;
    qmateriasprimasobservaciones: TWideStringField;
    qmateriasprimasimagen: TBlobField;
    qmateriasprimasEAN: TWideStringField;
    qmateriasprimasactivo: TIntegerField;
    tmateriasprimasid: TWideStringField;
    tmateriasprimasdescripcion: TWideStringField;
    tmateriasprimasobservaciones: TWideStringField;
    tmateriasprimasimagen: TBlobField;
    tmateriasprimasEAN: TWideStringField;
    tmateriasprimasactivo: TIntegerField;
    qtipohoras: TZReadOnlyQuery;
    dsqtipohoras: TDataSource;
    dstipohoras: TDataSource;
    ttipohoras: TZTable;
    ttipohorascodart: TWideStringField;
    ttipohorasdescrip: TWideStringField;
    ttipohorasprecio: TFloatField;
    ttipohorasactivo: TIntegerField;
    ttipohorasempresa: TIntegerField;
    ttipohorasfacturar: TIntegerField;
    qtipohorascodart: TWideStringField;
    qtipohorasdescrip: TWideStringField;
    qtipohorasprecio: TFloatField;
    qtipohorasactivo: TIntegerField;
    qtipohorasempresa: TIntegerField;
    qtipohorasfacturar: TIntegerField;
    qinftrabajadores: TZReadOnlyQuery;
    dsqinftrabajadores: TDataSource;
    qinftrabajadoresID: TSmallintField;
    qinftrabajadoresNIF: TWideStringField;
    qinftrabajadoresnombre: TWideStringField;
    qinftrabajadoresactivo: TIntegerField;
    qinftrabajadoresNOMBRECORTO: TWideStringField;
    qinftrabajadoresAPELLIDOS: TWideStringField;
    qinftrabajadoresDIRECCION: TWideStringField;
    qinftrabajadoresCP: TWideStringField;
    qinftrabajadoresPOBLACION: TWideStringField;
    qinftrabajadoresPROVINCIA: TWideStringField;
    qinftrabajadoresFECHANACIMIENTO: TDateField;
    qinftrabajadoresPAISNAC: TWideStringField;
    qinftrabajadoresNACIONALIDAD: TWideStringField;
    qinftrabajadoresSEXO: TWideStringField;
    qinftrabajadoresCBIBAN: TWideStringField;
    qinftrabajadoresCBBANCO: TWideStringField;
    qinftrabajadoresCBOFICINA: TWideStringField;
    qinftrabajadoresCBDC: TWideStringField;
    qinftrabajadoresCBCC: TWideStringField;
    qinftrabajadoresPAGARPORBANCO: TIntegerField;
    qinftrabajadoresTELEFONO1: TWideStringField;
    qinftrabajadoresTELEFONO2: TWideStringField;
    qinftrabajadoresTELEFONO3: TWideStringField;
    qinftrabajadoresTELEFONO4: TWideStringField;
    qinftrabajadoresREGIMEN_COT: TWideStringField;
    qinftrabajadoresNUMSEGSOCIAL: TWideStringField;
    qinftrabajadoresIRPF: TFloatField;
    qinftrabajadoresDESEMPLEO: TFloatField;
    qinftrabajadoresFORMACION: TFloatField;
    qinftrabajadoresOBSERVACIONES: TWideStringField;
    qinftrabajadoresFECHAALTA: TDateField;
    qinftrabajadoresFECHABAJA: TDateField;
    qinftrabajadoresFIJO: TSmallintField;
    qinftrabajadoresFIJODISCONTINUO: TSmallintField;
    qinftrabajadoresTEMPORAL: TSmallintField;
    qinftrabajadoresCONTINGENCIAS: TFloatField;
    qinftrabajadoresempresa: TIntegerField;
    qinfjornales: TZReadOnlyQuery;
    qinfjornalesid: TIntegerField;
    qinfjornalesfecha: TDateField;
    qinfjornalesparcela: TWideStringField;
    qinfjornalesidt: TIntegerField;
    qinfjornalestrabajador: TWideStringField;
    qinfjornalestypework: TWideStringField;
    qinfjornalesarticulo: TWideStringField;
    qinfjornalesqhoras: TFloatField;
    qinfjornalesestado: TWideStringField;
    qinfjornalesprecio: TFloatField;
    qinfjornalestotal: TFloatField;
    qinfjornalesorigen: TWideStringField;
    dsqinfjornales: TDataSource;
    dsqinfnominasdetalle: TDataSource;
    qinfnominasdetalle: TZReadOnlyQuery;
    IntegerField1: TIntegerField;
    DateField1: TDateField;
    WideStringField1: TWideStringField;
    IntegerField2: TIntegerField;
    WideStringField2: TWideStringField;
    WideStringField3: TWideStringField;
    WideStringField4: TWideStringField;
    FloatField1: TFloatField;
    FloatField2: TFloatField;
    FloatField3: TFloatField;
    WideStringField5: TWideStringField;
    WideStringField6: TWideStringField;
    dsqtrabajo: TDataSource;
    dsqparcela: TDataSource;
    qtrabajos: TZReadOnlyQuery;
    qtrabajosid: TWideStringField;
    qtrabajosnombre: TWideStringField;
    qtrabajosactivo: TIntegerField;
    qtrabajosempresa: TIntegerField;
    dstipotrabajo: TDataSource;
    ttipotrabajo: TZTable;
    ttipotrabajoid: TWideStringField;
    ttipotrabajonombre: TWideStringField;
    ttipotrabajoactivo: TIntegerField;
    ttipotrabajoempresa: TIntegerField;
    dsqtrabajosalmacen: TDataSource;
    qtrabajosalmacen: TZReadOnlyQuery;
    dstrabajosalmacen: TDataSource;
    ttrabajosalmacen: TZTable;
    ttrabajosalmacenid: TIntegerField;
    ttrabajosalmacenpuesto: TWideStringField;
    ttrabajosalmacentipo_trabajo: TWideStringField;
    ttrabajosalmacenarticulo: TWideStringField;
    ttrabajosalmacenparcela: TWideStringField;
    ttrabajosalmacenactivo: TIntegerField;
    qtrabajosalmacenid: TIntegerField;
    qtrabajosalmacenpuesto: TWideStringField;
    qtrabajosalmacentipo_trabajo: TWideStringField;
    qtrabajosalmacenarticulo: TWideStringField;
    qtrabajosalmacenparcela: TWideStringField;
    qtrabajosalmacenactivo: TIntegerField;
    dsqmovimientomesas: TDataSource;
    qmesas: TZReadOnlyQuery;
    qmesasmesa: TWideStringField;
    qproduccion: TZReadOnlyQuery;
    dsqproduccion: TDataSource;
    qproduccionmesa: TZReadOnlyQuery;
    dsqproduccionmesa: TDataSource;
    ttrabajadoresID: TSmallintField;
    ttrabajadoresNIF: TWideStringField;
    ttrabajadoresnombre: TWideStringField;
    ttrabajadoresNOMBRECORTO: TWideStringField;
    ttrabajadoresAPELLIDOS: TWideStringField;
    ttrabajadoresDIRECCION: TWideStringField;
    ttrabajadoresCP: TWideStringField;
    ttrabajadoresPOBLACION: TWideStringField;
    ttrabajadoresPROVINCIA: TWideStringField;
    ttrabajadoresFECHANACIMIENTO: TDateField;
    ttrabajadoresPAISNAC: TWideStringField;
    ttrabajadoresNACIONALIDAD: TWideStringField;
    ttrabajadoresSEXO: TWideStringField;
    ttrabajadoresCBIBAN: TWideStringField;
    ttrabajadoresCBBANCO: TWideStringField;
    ttrabajadoresCBOFICINA: TWideStringField;
    ttrabajadoresCBDC: TWideStringField;
    ttrabajadoresCBCC: TWideStringField;
    ttrabajadoresPAGARPORBANCO: TIntegerField;
    ttrabajadoresTELEFONO1: TWideStringField;
    ttrabajadoresTELEFONO2: TWideStringField;
    ttrabajadoresTELEFONO3: TWideStringField;
    ttrabajadoresTELEFONO4: TWideStringField;
    ttrabajadoresREGIMEN_COT: TWideStringField;
    ttrabajadoresNUMSEGSOCIAL: TWideStringField;
    ttrabajadoresIRPF: TFloatField;
    ttrabajadoresDESEMPLEO: TFloatField;
    ttrabajadoresFORMACION: TFloatField;
    ttrabajadoresOBSERVACIONES: TWideStringField;
    ttrabajadoresFECHAALTA: TDateField;
    ttrabajadoresFECHABAJA: TDateField;
    ttrabajadoresCONTINGENCIAS: TFloatField;
    ttrabajadoresempresa: TIntegerField;
    dsqproduccionembasadora: TDataSource;
    qproduccionembasadora: TZReadOnlyQuery;
    WideStringField7: TWideStringField;
    WideStringField8: TWideStringField;
    LargeintField1: TLargeintField;
    WideStringField9: TWideStringField;
    FloatField4: TFloatField;
    IntegerField3: TIntegerField;
    WideStringField10: TWideStringField;
    dsqproduccionmesa2: TDataSource;
    qproduccionmesa2: TZReadOnlyQuery;
    dsqproduccionhora: TDataSource;
    qproduccionhora: TZReadOnlyQuery;
    dsqnominasproduccion: TDataSource;
    qnominasproduccion: TZQuery;
    qmovimientomesas: TZQuery;
    qmovimientomesasid: TLargeintField;
    qmovimientomesasfecha: TDateField;
    qmovimientomesasmesa: TWideStringField;
    qmovimientomesasidt: TIntegerField;
    qmovimientomesasTRABAJADOR: TWideStringField;
    qmovimientomesasENTRADA_REAL: TTimeField;
    qmovimientomesasSALIDA_REAL: TTimeField;
    qmovimientomesasENTRADA_AJUSTADA: TTimeField;
    qmovimientomesasSALIDA_AJUSTADA: TTimeField;
    qmovimientomesasHORASREALES: TTimeField;
    qmovimientomesasHORASAJUSTADAS: TTimeField;
    qmovimientomesasPUESTO: TWideStringField;
    qmovimientomesasTIPOTRABAJO: TWideStringField;
    qmovimientomesasARTICULO: TWideStringField;
    qmovimientomesasPARCELA: TWideStringField;
    ttrabajosalmacenmesas: TWideStringField;
    tprenominasFECHAINICIO: TDateField;
    tprenominasFECHAFIN: TDateField;
    tnominasdetalle: TZTable;
    tcalendario_laboralfecha: TDateField;
    tcalendario_laboralfestivo: TIntegerField;
    tcalendario_laboralalmuerzo: TIntegerField;
    tcalendario_laboralmerienda: TIntegerField;
    qanticipos: TZReadOnlyQuery;
    qanticiposid: TIntegerField;
    qanticiposidt: TIntegerField;
    qanticiposfecha: TDateField;
    qanticiposimporte: TFloatField;
    qanticiposestado: TWideStringField;
    dsqanticipos: TDataSource;
    tanticipos: TZTable;
    tanticiposid: TIntegerField;
    tanticiposidt: TIntegerField;
    tanticipostrabajador: TWideStringField;
    tanticiposfecha: TDateField;
    tanticiposimporte: TFloatField;
    tanticiposestado: TWideStringField;
    dsanticipos: TDataSource;
    qanticiposobservaciones: TWideStringField;
    tanticiposobservaciones: TWideStringField;
    qparcelas: TZQuery;
    dscontrolproduccion: TDataSource;
    qcontrolproduccion: TZQuery;
    qcontrolproduccionid: TIntegerField;
    qcontrolproduccionfecha: TDateField;
    qcontrolproduccionmateria_prima: TWideStringField;
    qcontrolproduccionproducto: TWideStringField;
    qcontrolproduccioncantidad_teorica: TIntegerField;
    qcontrolproduccioncantidad_real: TIntegerField;
    qcontrolproduccionobservaciones: TWideStringField;
    qcampanyas: TZQuery;
    dsqcampanyas: TDataSource;
    qlincampanyas: TZQuery;
    dsqlincampanyas: TDataSource;
    qcampanyasid: TIntegerField;
    qcampanyasdescripcion: TWideStringField;
    qcampanyasfechainicio: TDateField;
    qcampanyasfechafin: TDateField;
    tempresaajusteentrada: TIntegerField;
    tempresaajustesalida: TIntegerField;
    tempresaporcbloqueo: TIntegerField;
    qtipohorasequivalenciahoras: TFloatField;
    ttipohorasequivalenciahoras: TFloatField;
    dsqtipohoras2: TDataSource;
    qtipohoras2: TZQuery;
    qtipohoras2codart: TWideStringField;
    qtipohoras2seleccionado: TIntegerField;
    dsqtrabajadores2: TDataSource;
    qtrabajadores2: TZQuery;
    qtrabajadores2id: TSmallintField;
    qtrabajadores2nombre: TWideStringField;
    qtrabajadores2seleccionado: TIntegerField;
    dsqlistadohoras: TDataSource;
    qlistadohoras: TZReadOnlyQuery;
    qlistadohorasidt: TIntegerField;
    qlistadohorastrabajador: TWideStringField;
    qlistadohorasarticulo: TWideStringField;
    qlistadohorashoras: TFloatField;
    qlistadohorashoras2: TFloatField;
    qlistadohorastotal: TFloatField;
    qlistadohorastotal2: TFloatField;
    qtipotrabajo2: TZQuery;
    qtipotrabajo2id: TWideStringField;
    qtipotrabajo2seleccionado: TIntegerField;
    dsqtipotrabajo2: TDataSource;
    qlistadotrabajos: TZReadOnlyQuery;
    qlistadotrabajosidt: TIntegerField;
    qlistadotrabajostrabajador: TWideStringField;
    qlistadotrabajostypework: TWideStringField;
    qlistadotrabajoshoras: TFloatField;
    qlistadotrabajostotal: TFloatField;
    tanticipospenalizacion: TFloatField;
    tanticiposindemnizacion: TFloatField;
    dsqlistadotrabajos: TDataSource;
    qanticipospenalizacion: TFloatField;
    qanticiposindemnizacion: TFloatField;
    tprenominasINDEMNIZACION: TFloatField;
    tprenominasPENALIZACION: TFloatField;
    tnominasdetalleId: TIntegerField;
    tnominasdetalleIDNOMINA: TIntegerField;
    tnominasdetalleIDEMPRESA: TIntegerField;
    tnominasdetalleIDT: TIntegerField;
    tnominasdetalleANYO: TIntegerField;
    tnominasdetalleMES: TWideStringField;
    tnominasdetalleNIF: TWideStringField;
    tnominasdetalleNOMBRE: TWideStringField;
    tnominasdetalleDIRECCION: TWideStringField;
    tnominasdetalleCP: TWideStringField;
    tnominasdetallePOBLACION: TWideStringField;
    tnominasdetalleHORAS: TFloatField;
    tnominasdetalleFECHAALTA: TDateField;
    tnominasdetalleFECHABAJA: TDateField;
    tnominasdetalleDIASTRABAJADOS: TIntegerField;
    tnominasdetalleDIASMAXIMO: TIntegerField;
    tnominasdetalleDIASCALCULO: TIntegerField;
    tnominasdetalleTOTALBRUTO: TFloatField;
    tnominasdetalleIRPF: TFloatField;
    tnominasdetalleTOTALIRPF: TFloatField;
    tnominasdetalleDESEMPLEO: TFloatField;
    tnominasdetalleTOTALDESEMPLEO: TFloatField;
    tnominasdetalleFORMACION: TFloatField;
    tnominasdetalleTOTALFORMACION: TFloatField;
    tnominasdetalleCONTINGENCIAS: TFloatField;
    tnominasdetalleTOTALCONTINGENCIAS: TFloatField;
    tnominasdetalleTOTALNETO: TFloatField;
    tnominasdetalleANTICIPOS: TFloatField;
    tnominasdetalleINDEMNIZACION: TFloatField;
    tnominasdetallePENALIZACION: TFloatField;
    tnominasdetalleTOTALAPAGAR: TFloatField;
    tnominasdetalleCUENTAPAGO: TWideStringField;
    tnominasdetalleFECHAPAGO: TDateField;
    tnominasdetalleESTADO: TWideStringField;
    tnominasdetalleSALARIOBASE: TFloatField;
    tnominasdetalleDIASLABORABLES: TIntegerField;
    tnominasdetalleFECHAINICIO: TDateField;
    tnominasdetalleFECHAFIN: TDateField;
    tnominasdetalleCORRECTO: TIntegerField;
    dstnominas: TDataSource;
    dstnominasdetalle: TDataSource;
    qnominas: TZQuery;
    qnominasID: TIntegerField;
    qnominasIDEMPRESA: TIntegerField;
    qnominasNOMEMPRESA: TWideStringField;
    qnominasFECHA: TDateField;
    qnominasFECHAINICIO: TDateField;
    qnominasFECHAFIN: TDateField;
    qnominasPERIODO: TIntegerField;
    qnominasNOMPERIODO: TWideStringField;
    qnominasANYO: TIntegerField;
    qnominasFORMAPAGO: TWideStringField;
    qnominasACTIVO: TIntegerField;
    tempresairpf2: TFloatField;
    tempresadesempleo2: TFloatField;
    tempresaformacion2: TFloatField;
    tempresacontingencias2: TFloatField;
    qnominasCANT_LINEAS: TIntegerField;
    qnominasIMPORTETOTAL: TFloatField;
    qtrabajadores3: TZQuery;
    dsqtrabajadores3: TDataSource;
    qtrabajadores3id: TSmallintField;
    qtrabajadores3nombre: TWideStringField;
    qtrabajadores3seleccionado: TIntegerField;
    qparcela2: TZQuery;
    dsqparcela2: TDataSource;
    qparcela3: TZQuery;
    dsqparcela3: TDataSource;
    qparcela3codpar: TWideStringField;
    qparcela3empresa: TIntegerField;
    qparcela3nombre: TWideStringField;
    qparcela3variedad: TWideStringField;
    qparcela3num_plantas: TIntegerField;
    qparcela3fecha_plantacion: TDateField;
    qparcela3marco_plantacion: TWideStringField;
    qparcela3gastosgenerales: TIntegerField;
    qparcela3ref_catastro: TWideStringField;
    qparcela3sigpac_prov: TIntegerField;
    qparcela3sigpac_muni: TIntegerField;
    qparcela3sigpac_agre: TIntegerField;
    qparcela3sigpac_zona: TIntegerField;
    qparcela3sigpac_poli: TIntegerField;
    qparcela3sigpac_pacr: TIntegerField;
    qparcela3x: TWideStringField;
    qparcela3y: TWideStringField;
    qparcela3datum: TWideStringField;
    qparcela3huso: TIntegerField;
    qparcela3propiedad: TWideStringField;
    qparcela3activo: TIntegerField;
    qparcela2codpar: TWideStringField;
    qparcela2empresa: TIntegerField;
    qparcela2nombre: TWideStringField;
    qparcela2variedad: TWideStringField;
    qparcela2num_plantas: TIntegerField;
    qparcela2fecha_plantacion: TDateField;
    qparcela2marco_plantacion: TWideStringField;
    qparcela2gastosgenerales: TIntegerField;
    qparcela2ref_catastro: TWideStringField;
    qparcela2sigpac_prov: TIntegerField;
    qparcela2sigpac_muni: TIntegerField;
    qparcela2sigpac_agre: TIntegerField;
    qparcela2sigpac_zona: TIntegerField;
    qparcela2sigpac_poli: TIntegerField;
    qparcela2sigpac_pacr: TIntegerField;
    qparcela2x: TWideStringField;
    qparcela2y: TWideStringField;
    qparcela2datum: TWideStringField;
    qparcela2huso: TIntegerField;
    qparcela2propiedad: TWideStringField;
    qparcela2activo: TIntegerField;
    qparcela2seleccionado: TIntegerField;
    TFirmas: TZTable;
    dsfirmas: TDataSource;
    TFirmasid: TIntegerField;
    TFirmaside: TIntegerField;
    TFirmasidt: TIntegerField;
    TFirmasfirma: TBlobField;
    dspartes_diarios: TDataSource;
    qpartes_diarios: TZQuery;
    qpartes_diariosid: TIntegerField;
    qpartes_diarioside: TIntegerField;
    qpartes_diariosidt: TIntegerField;
    qpartes_diariostrabajador: TWideStringField;
    qpartes_diariosfecha: TDateField;
    qpartes_diarioshoras: TFloatField;
    qpartes_diariosfirma: TIntegerField;
    qpartes_diariosvalidado: TIntegerField;
    qfirmas: TZReadOnlyQuery;
    qfirmasid: TIntegerField;
    qfirmaside: TIntegerField;
    qfirmasidt: TIntegerField;
    qfirmasfirma: TBlobField;
    dsqfirmas: TDataSource;
    tmateriasprimasbasculas: TIntegerField;
    tempresault_envio: TIntegerField;
    tempresaregistro_sanitario: TWideStringField;
    ttipotrabajoseleccionado: TIntegerField;
    ttipotrabajocoste_elavoracion_campo: TIntegerField;
    dsqalmacenes: TDataSource;
    qalmacenes: TZReadOnlyQuery;
    qalmacenesid: TIntegerField;
    qalmacenesidempresa: TIntegerField;
    qalmacenesnombre: TWideStringField;
    qalmacenescapacidad: TIntegerField;
    qalmacenesstock_kg: TFloatField;
    qalmacenesstock_cajas: TIntegerField;
    qalmacenesstock_palets: TIntegerField;
    qalmacenesfinal: TIntegerField;
    qalmacenesactivo: TIntegerField;
    qalmacenescoste_kg_dia: TFloatField;
    tempresacoste_kg_gen: TFloatField;
    dstalmacenes: TDataSource;
    talmacenes: TZTable;
    talmacenesid: TIntegerField;
    talmacenesidempresa: TIntegerField;
    talmacenesnombre: TWideStringField;
    talmacenescapacidad: TIntegerField;
    talmacenesstock_kg: TFloatField;
    talmacenesstock_cajas: TIntegerField;
    talmacenesstock_palets: TIntegerField;
    talmacenesfinal: TIntegerField;
    talmacenesactivo: TIntegerField;
    talmacenescoste_kg_dia: TFloatField;
    talmacenespreguntar_generador: TIntegerField;
    dstarticulosalmacen: TDataSource;
    tarticulosalmacen: TZTable;
    dsqarticulosalmacen: TDataSource;
    qarticulosalmacen: TZReadOnlyQuery;
    tarticulosalmacenid: TIntegerField;
    tarticulosalmacenide: TIntegerField;
    tarticulosalmacencodigo: TWideStringField;
    tarticulosalmacencod_logi: TIntegerField;
    tarticulosalmacendescripcion: TWideStringField;
    tarticulosalmacenlargo: TFloatField;
    tarticulosalmacenalto: TFloatField;
    tarticulosalmacenancho: TFloatField;
    tarticulosalmacentara: TFloatField;
    tarticulosalmacentipo: TWideStringField;
    tarticulosalmacenpalet: TIntegerField;
    tarticulosalmacenenvase_trabajo: TIntegerField;
    tarticulosalmacenenvase_venta: TIntegerField;
    tarticulosalmacenactivo: TIntegerField;
    tarticulosalmacencosto: TFloatField;
    tarticulosalmacenobservaciones: TWideStringField;
    tarticulosalmacenpeso_venta: TFloatField;
    talmacenesmermas: TIntegerField;
    tmateriasprimasvariedad: TWideStringField;
    ttipotrabajocoste_elavoracion_almacen: TIntegerField;
    tempresaporc_segsocial: TFloatField;
    talmacenesproduccion: TIntegerField;
    dsqtrabajadores: TDataSource;
    qempleados: TZReadOnlyQuery;
    qempleadosidt: TIntegerField;
    qempleadostrabajador: TWideStringField;
    qtrabajo_diario: TZQuery;
    qtrabajo_diarioid: TIntegerField;
    qtrabajo_diarioempresa: TIntegerField;
    qtrabajo_diariofecha: TDateField;
    qtrabajo_diarioparcela: TWideStringField;
    qtrabajo_diarioidt: TIntegerField;
    qtrabajo_diariotrabajador: TWideStringField;
    qtrabajo_diariotypework: TWideStringField;
    qtrabajo_diarioarticulo: TWideStringField;
    qtrabajo_diarioqhoras: TFloatField;
    qtrabajo_diarioprecio: TFloatField;
    qtrabajo_diariototal: TFloatField;
    qtrabajo_diarioestado: TWideStringField;
    qtrabajo_diarioorigen: TWideStringField;
    qtrabajo_diariofechainsmod: TDateTimeField;
    qtrabajo_diariousuario: TIntegerField;
    qtrabajo_diariocontrol: TIntegerField;
    qtrabajo_diariohoras_nomina: TFloatField;
    qtrabajo_diariohoras_acumuladas: TFloatField;
    qtrabajo_diarioidparte1: TIntegerField;
    qtrabajo_diarioidparte2: TIntegerField;
    qpartes_diariosfestivo: TIntegerField;
    qproduccionid: TIntegerField;
    qproduccionidempresa: TIntegerField;
    qproduccionfecha: TDateField;
    qproduccionmateria_prima: TWideStringField;
    qproduccionproducto: TWideStringField;
    qproduccionpesadas: TIntegerField;
    qproduccionneto: TFloatField;
    qproduccionpeso_teorico: TFloatField;
    qproduccionpeso_real: TFloatField;
    qproducciondiferencia: TFloatField;
    qproduccionerror: TFloatField;
    qnominasproduccionidt: TIntegerField;
    qnominasproduccionfecha: TDateField;
    qnominasproduccionid: TIntegerField;
    qnominasproducciontrabajador: TWideStringField;
    qnominasproducciontypework: TWideStringField;
    qnominasproduccionarticulo: TWideStringField;
    qnominasproduccionqhoras: TFloatField;
    qnominasproduccionestado: TWideStringField;
    qnominasproduccionorigen: TWideStringField;
    tarticulosalmacenfacturar_pesofijo: TIntegerField;
    tmateriasprimasusar_precio_parcela: TIntegerField;
    tmateriasprimasdesechos: TIntegerField;
    tempresaprecio_venta_desperdicios: TFloatField;
    ttipotrabajoelavoracion_produccion: TIntegerField;
    ttipotrabajoenvasado_produccion: TIntegerField;
    ttipotrabajologistica_produccion: TIntegerField;
    talmacenestipo_trabajo: TWideStringField;
    talmacenescamara: TIntegerField;
    talmacenesalmacen_asociado: TIntegerField;
    qalmacenesaux: TZReadOnlyQuery;
    IntegerField4: TIntegerField;
    IntegerField5: TIntegerField;
    WideStringField11: TWideStringField;
    IntegerField6: TIntegerField;
    FloatField5: TFloatField;
    IntegerField7: TIntegerField;
    IntegerField8: TIntegerField;
    IntegerField9: TIntegerField;
    IntegerField10: TIntegerField;
    FloatField6: TFloatField;
    dsqalmacenesaux: TDataSource;
    tmateriasprimasidempresa: TIntegerField;
    tmateriasprimascompuesto: TIntegerField;
    qmprimascompuestas: TZQuery;
    dsmprimascompuestas: TDataSource;
    qmprimascompuestasidempresa: TIntegerField;
    qmprimascompuestasidmp: TWideStringField;
    qmprimascompuestasidmpc: TWideStringField;
    qmprimascompuestasvariedad: TWideStringField;
    qmprimascompuestasdescripcion: TWideStringField;
    qmprimascompuestasporcentaje: TFloatField;
    ttipotrabajoalmacen_trabajo: TIntegerField;
    talmacenescentrocoste_asociado: TWideStringField;
    tproductosunidades_caja: TIntegerField;
    tproductosobservaciones: TWideMemoField;
    qproductosunidades_caja: TIntegerField;
    qproductosobservaciones: TWideMemoField;
    qpartes_diarios2: TZQuery;
    qpersonasmesas: TZQuery;
    dsqpersonasmesas: TDataSource;
    qpartes_diarios2id: TIntegerField;
    qpartes_diarios2ide: TIntegerField;
    qpartes_diarios2idt: TIntegerField;
    qpartes_diarios2trabajador: TWideStringField;
    qpartes_diarios2fecha: TDateField;
    qpartes_diarios2horas: TFloatField;
    qpartes_diarios2firma: TIntegerField;
    qpartes_diarios2validado: TIntegerField;
    qpartes_diarios2festivo: TIntegerField;
    qpersonasmesasidt: TIntegerField;
    qpersonasmesastrabajador: TWideStringField;
    qpersonasmesasmesa: TWideStringField;
    dsqpartesdiarios2: TDataSource;
    tarticulosalmacenpreguntar_gen: TIntegerField;
    qmateriasprimas2: TZReadOnlyQuery;
    dsqmateriasprimas2: TDataSource;
    qmateriasprimas2idempresa: TIntegerField;
    qmateriasprimas2id: TWideStringField;
    qmateriasprimas2variedad: TWideStringField;
    qmateriasprimas2descripcion: TWideStringField;
    qmateriasprimas2observaciones: TWideStringField;
    qmateriasprimas2imagen: TBlobField;
    qmateriasprimas2EAN: TWideStringField;
    qmateriasprimas2basculas: TIntegerField;
    qmateriasprimas2activo: TIntegerField;
    qmateriasprimas2usar_precio_parcela: TIntegerField;
    qmateriasprimas2desechos: TIntegerField;
    qmateriasprimas2compuesto: TIntegerField;
    qmateriasprimasidempresa: TIntegerField;
    qmateriasprimasvariedad: TWideStringField;
    qmateriasprimasbasculas: TIntegerField;
    qmateriasprimasusar_precio_parcela: TIntegerField;
    qmateriasprimasdesechos: TIntegerField;
    qmateriasprimascompuesto: TIntegerField;
    tmateriasprimasmesas: TIntegerField;
    dtarticulosalmacen: TZQuery;
    dtarticulosalmacenid: TIntegerField;
    dtarticulosalmacenide: TIntegerField;
    dtarticulosalmacencodigo: TWideStringField;
    dtarticulosalmacencod_logi: TIntegerField;
    dtarticulosalmacendescripcion: TWideStringField;
    dtarticulosalmacenlargo: TFloatField;
    dtarticulosalmacenalto: TFloatField;
    dtarticulosalmacenancho: TFloatField;
    dtarticulosalmacentara: TFloatField;
    dtarticulosalmacenpeso_venta: TFloatField;
    dtarticulosalmacentipo: TWideStringField;
    dtarticulosalmacenpalet: TIntegerField;
    dtarticulosalmacenenvase_trabajo: TIntegerField;
    dtarticulosalmacenenvase_venta: TIntegerField;
    dtarticulosalmacencosto: TFloatField;
    dtarticulosalmacenactivo: TIntegerField;
    dtarticulosalmacenobservaciones: TWideStringField;
    dtarticulosalmacenfacturar_pesofijo: TIntegerField;
    dtarticulosalmacenpreguntar_gen: TIntegerField;
    dtarticulos_componentes: TZQuery;
    dsarticuloscomponentes: TDataSource;
    dtarticulos_componentesidempresa: TIntegerField;
    dtarticulos_componentesidarticuloalmacen: TIntegerField;
    dtarticulos_componentesidarticulof: TIntegerField;
    dtarticulos_componentespreciocoste: TFloatField;
    dtarticulos_componentesdescripcion: TWideStringField;
    qfirmas2: TZQuery;
    qfirmas2id: TIntegerField;
    qfirmas2ide: TIntegerField;
    qfirmas2idt: TIntegerField;
    qfirmas2firma: TBlobField;
    tproductosmostrar_boton: TIntegerField;
    dtarticulosalmacenunidades_venta: TIntegerField;
    qseries: TZQuery;
    qserieside: TIntegerField;
    qseriesid: TWideStringField;
    qseriesfechainicio: TDateField;
    qseriesfechafin: TDateField;
    qseriesnum_pedcliente: TIntegerField;
    qseriesnum_albaran: TIntegerField;
    qseriesnum_factura: TIntegerField;
    qseriesnum_expedicion: TIntegerField;
    qseriesnum_pedproveedor: TIntegerField;
    dsqseries: TDataSource;
    dtarticulos_componentescoste: TFloatField;
    dtarticulos_componentescantidad: TFloatField;
    qaux: TZReadOnlyQuery;
    qlincampanyaside: TIntegerField;
    qlincampanyasidc: TIntegerField;
    qlincampanyasidp: TWideStringField;
    qlincampanyasmateria_prima: TWideStringField;
    qlincampanyaskgestimados: TFloatField;
    qlincampanyaskgproducidos: TFloatField;
    qlincampanyaskgenvasados: TFloatField;
    qlincampanyaskgfacturados: TFloatField;
    qcampanyasidempresa: TIntegerField;
    qcampanyasid_anterior: TIntegerField;
    qcampanyasult_pesada: TIntegerField;
    qcampanyas_aux: TZQuery;
    IntegerField11: TIntegerField;
    IntegerField12: TIntegerField;
    IntegerField13: TIntegerField;
    WideStringField12: TWideStringField;
    DateField2: TDateField;
    DateField3: TDateField;
    IntegerField14: TIntegerField;
    dsqcampanyaaux: TDataSource;
    qcampanyasparcela: TZQuery;
    qcampanyasparcelaide: TIntegerField;
    qcampanyasparcelaidc: TIntegerField;
    qcampanyasparcelaidp: TWideStringField;
    qcampanyasparcelaparcela: TWideStringField;
    dsqcampanyasparcela: TDataSource;
    qparcela2num_goteros: TFloatField;
    qparcela2superficie: TFloatField;
    qparcela2est_meteo: TWideStringField;
    qparcela2coste_kg_ref: TFloatField;
    qparcela2activo_almacen: TIntegerField;
    qparcela2porc_desperdicio: TFloatField;
    qparcela2porc_merma: TFloatField;
    qparcela2es_centrotrabajo: TIntegerField;
    qparcela2sigpac_recinto: TIntegerField;
    qparcela2pie_planta: TWideStringField;
    qparcela2numero: TWideStringField;
    qparcela2tiene_gg: TIntegerField;
    qparcela2tiene_dop: TIntegerField;
    qparcela2c_calidad: TIntegerField;
    qparcela2c_espcliente: TIntegerField;
    qparcela2c_etiquetado: TIntegerField;
    qparcela2sello_gg: TWideStringField;
    qparcela2sello_dop: TWideStringField;
    qparcela2sello_igp: TWideStringField;
    qparcela2tiene_igp: TIntegerField;
    qparcela2tiene_ifs: TIntegerField;
    qparcela2sello_ifs: TWideStringField;
    qparcela3num_goteros: TFloatField;
    qparcela3seleccionado: TIntegerField;
    qparcela3superficie: TFloatField;
    qparcela3est_meteo: TWideStringField;
    qparcela3coste_kg_ref: TFloatField;
    qparcela3activo_almacen: TIntegerField;
    qparcela3porc_desperdicio: TFloatField;
    qparcela3porc_merma: TFloatField;
    qparcela3es_centrotrabajo: TIntegerField;
    qparcela3sigpac_recinto: TIntegerField;
    qparcela3pie_planta: TWideStringField;
    qparcela3numero: TWideStringField;
    qparcela3tiene_gg: TIntegerField;
    qparcela3tiene_dop: TIntegerField;
    qparcela3c_calidad: TIntegerField;
    qparcela3c_espcliente: TIntegerField;
    qparcela3c_etiquetado: TIntegerField;
    qparcela3sello_gg: TWideStringField;
    qparcela3sello_dop: TWideStringField;
    qparcela3sello_igp: TWideStringField;
    qparcela3tiene_igp: TIntegerField;
    qparcela3tiene_ifs: TIntegerField;
    qparcela3sello_ifs: TWideStringField;
    tempresavercodtrazabilidad: TIntegerField;
    qgenericas: TZReadOnlyQuery;
    qgenericaside: TIntegerField;
    qgenericasid: TIntegerField;
    qgenericasdescripcion: TWideStringField;
    dsgenericas: TDataSource;
    qmateriasprimasmesas: TIntegerField;
    qmateriasprimasidgenerico: TIntegerField;
    qmateriasprimas2mesas: TIntegerField;
    qmateriasprimas2idgenerico: TIntegerField;
    tmateriasprimasidgenerico: TIntegerField;
    qanticiposdetalleindemnizacion: TFloatField;
    qanticiposdetallepenalizacion: TFloatField;
    qanticiposdetalleobservaciones: TWideStringField;
    qanticiposdetalleformapago: TWideStringField;
    qanticiposdetalleimporteletras: TWideStringField;
    tanticiposformapago: TWideStringField;
    tanticiposimporteletras: TWideStringField;
    qseriesimp_albaran: TWideStringField;
    qseriesimp_factura: TWideStringField;
    tarticulosalmacenunidades_venta: TIntegerField;
    tarticulosalmacendescripcion2: TWideStringField;
    dtarticulosalmacendescripcion2: TWideStringField;
    qarticulosalmacenid: TIntegerField;
    qarticulosalmacenide: TIntegerField;
    qarticulosalmacencodigo: TWideStringField;
    qarticulosalmacendescripcion: TWideStringField;
    qarticulosalmacenactivo: TIntegerField;
    ttrabajadoreside: TIntegerField;
    ttrabajadoresIRPF2: TFloatField;
    ttrabajadoresDESEMPLEO2: TFloatField;
    ttrabajadoresFORMACION2: TFloatField;
    ttrabajadoresIMAGEN: TIntegerField;
    ttrabajadoresseleccionado: TIntegerField;
    ttrabajadorescodart: TWideStringField;
    tproductosdeshidratacion: TFloatField;
    tproductostara_envase: TFloatField;
    dtarticulos_componentespeso: TFloatField;
    tprenominasBASEDIA: TFloatField;
    tempresacodcomision: TWideStringField;
    tempresacodtransporte: TWideStringField;
    qseriesactivo: TIntegerField;
    qseriesnum_presupuesto: TIntegerField;
    qseriesseriecontable: TWideStringField;
    tempresacc_bic: TWideStringField;
    tempresacodotros: TWideStringField;
    tempresaavisarstock: TIntegerField;
    tproductoside: TIntegerField;
    tproductosid: TIntegerField;
    tempresahtlunes: TFloatField;
    tempresahtmartes: TFloatField;
    tempresahtmiercoles: TFloatField;
    tempresahtjueves: TFloatField;
    tempresahtviernes: TFloatField;
    tempresahtsabados: TFloatField;
    tempresahtdomingos: TFloatField;
    tempresatavisostock: TIntegerField;
    tempresaresponsable: TWideStringField;
    tempresanif_responsable: TWideStringField;
    tempresalogo: TBlobField;
    tempresafirmaresponsable: TBlobField;
    qmateriasprimasgenerico: TWideStringField;
    qmateriasprimasobtentor: TWideStringField;
    tmateriasprimasgenerico: TWideStringField;
    tmateriasprimasobtentor: TWideStringField;
    tempresatiempoalmuerzo: TIntegerField;
    tempresahorasminimas: TIntegerField;
    tempresaidfamilia: TIntegerField;
    ttrabajadoresFIJO: TIntegerField;
    ttrabajadoresFIJODISCONTINUO: TIntegerField;
    ttrabajadoresTEMPORAL: TIntegerField;
    tempresaajuste15: TIntegerField;
    tempresaajuste30: TIntegerField;
    tempresaseparartraza_e_s: TIntegerField;
    qmateriasprimaspesopieza: TFloatField;
    qmateriasprimas2generico: TWideStringField;
    qmateriasprimas2obtentor: TWideStringField;
    qmateriasprimas2pesopieza: TFloatField;
    tmateriasprimaspesopieza: TFloatField;
    qproduccionmesafecha: TDateField;
    qproduccionmesamesa: TWideStringField;
    qproduccionmesabascula: TWideStringField;
    qproduccionmesamateria_prima: TWideStringField;
    qproduccionmesaproducto: TWideStringField;
    qproduccionmesapesadas: TLargeintField;
    qproduccionmesacantidad: TFloatField;
    qproduccionhoradesde: TIntegerField;
    qproduccionhorahasta: TIntegerField;
    qproduccionhoracantidad: TFloatField;
    tcalendario_laboralinicio_almuerzo: TTimeField;
    tcalendario_laboralfin_almuerzo: TTimeField;
    tcalendario_laboralinicio_merienda: TTimeField;
    tcalendario_laboralfin_merienda: TTimeField;
    tempresaean: TWideStringField;
    qparcelascodpar: TWideStringField;
    qparcelasempresa: TIntegerField;
    qparcelasnombre: TWideStringField;
    qparcelasvariedad: TWideStringField;
    qparcelasnum_plantas: TIntegerField;
    qparcelasfecha_plantacion: TDateField;
    qparcelasmarco_plantacion: TWideStringField;
    qparcelasnum_goteros: TFloatField;
    qparcelasgastosgenerales: TIntegerField;
    qparcelasref_catastro: TWideStringField;
    qparcelassigpac_prov: TIntegerField;
    qparcelassigpac_muni: TIntegerField;
    qparcelassigpac_agre: TIntegerField;
    qparcelassigpac_zona: TIntegerField;
    qparcelassigpac_poli: TIntegerField;
    qparcelassigpac_pacr: TIntegerField;
    qparcelasx: TWideStringField;
    qparcelasy: TWideStringField;
    qparcelasdatum: TWideStringField;
    qparcelashuso: TIntegerField;
    qparcelaspropiedad: TWideStringField;
    qparcelasactivo: TIntegerField;
    qparcelasseleccionado: TIntegerField;
    qparcelassuperficie: TFloatField;
    qparcelasest_meteo: TWideStringField;
    qparcelascoste_kg_ref: TFloatField;
    qparcelasactivo_almacen: TIntegerField;
    qparcelasporc_desperdicio: TFloatField;
    qparcelasporc_merma: TFloatField;
    qparcelases_centrotrabajo: TIntegerField;
    qparcelassigpac_recinto: TIntegerField;
    qparcelaspie_planta: TWideStringField;
    qparcelasnumero: TWideStringField;
    qparcelastiene_gg: TIntegerField;
    qparcelastiene_dop: TIntegerField;
    qparcelasc_calidad: TIntegerField;
    qparcelasc_espcliente: TIntegerField;
    qparcelasc_etiquetado: TIntegerField;
    qparcelassello_gg: TWideStringField;
    qparcelassello_dop: TWideStringField;
    qparcelassello_igp: TWideStringField;
    qparcelastiene_igp: TIntegerField;
    qparcelastiene_ifs: TIntegerField;
    qparcelassello_ifs: TWideStringField;
    qparcelaspropietario: TIntegerField;
    qparcelastiene_brc: TIntegerField;
    qparcelassello_brc: TWideStringField;
    qnominasdetalleobservaciones: TWideStringField;
    qnominasdetalleempresa: TIntegerField;
    qproduccionmesa2mesa: TWideStringField;
    qproduccionmesa2cantidad: TFloatField;
    qproduccionmesa2horasmesa: TFloatField;
    qproduccionmesa2cantidadhora: TFloatField;
    qparcelasancho_calle: TFloatField;
    qfinalizarlogin: TZReadOnlyQuery;
    tempresafaceficherofirma: TWideStringField;
    tempresafaceficheropass: TWideStringField;
    tempresafaceimpuesto: TWideStringField;
    tempresafacenombrefirma: TWideStringField;
    tempresafacepersona: TWideStringField;
    tempresaverifactuactivo: TIntegerField;
    tempresaverifactupre: TIntegerField;
    tempresaverifactuficherofirma: TWideStringField;
    tempresaverifactuficheropass: TWideStringField;
    tempresaverifactufirma: TWideStringField;
    ttrabajadoresgrupo: TIntegerField;
    ttrabajadoresactivo: TIntegerField;
    ttrabajadorescontrolcalidad: TIntegerField;
    ttrabajadoreshorascontrato: TFloatField;
    ttrabajadoresnum_taquilla: TIntegerField;
    ttrabajadoresemail: TWideStringField;
    ttrabajadoresconvocatoria: TWideStringField;
    tempresaIAmodelo: TWideStringField;
    tempresaapikey: TWideStringField;
    tempresacerrar_sesion: TIntegerField;
    tempresaretencion_me: TFloatField;
    tempresah_comienzo_tarde: TTimeField;
    ttrabajadoresresponsable: TIntegerField;
    ttrabajadoresfumigador: TIntegerField;
    ttrabajadoresretencion_me: TFloatField;
    tprenominasTOTALME: TFloatField;
    tprenominasME: TFloatField;
    tnominasdetalleTOTALME: TFloatField;
    tnominasdetalleME: TFloatField;
    ttrabajadoresjornada_continua: TSmallintField;
    ttrabajadoressalariobasedia: TFloatField;
    tprenominasEMBARGOS: TFloatField;
    Iconos: TImageList;
    procedure DataModuleCreate(Sender: TObject);
    procedure dsqproductosDataChange(Sender: TObject; Field: TField);
    procedure dsqmateriasprimasDataChange(Sender: TObject; Field: TField);
    procedure dsqtipohorasDataChange(Sender: TObject; Field: TField);
    procedure DataModuleDestroy(Sender: TObject);
    procedure nomlhhastaChange(Sender: TObject; Field: TField);
    procedure dsqtrabajosalmacenDataChange(Sender: TObject; Field: TField);
    procedure dscontrolproduccionStateChange(Sender: TObject);
    procedure dsqparcelaStateChange(Sender: TObject);
    procedure dsqcampanyasStateChange(Sender: TObject);
    procedure dsempresaStateChange(Sender: TObject);
    procedure dsqtipohoras2DataChange(Sender: TObject; Field: TField);
    procedure dsqtrabajadores2DataChange(Sender: TObject; Field: TField);
    procedure dsqlistadotrabajosDataChange(Sender: TObject; Field: TField);
    procedure dsqtipotrabajo2DataChange(Sender: TObject; Field: TField);
    procedure dsqtrabajadores3DataChange(Sender: TObject; Field: TField);
    procedure dsqparcela2DataChange(Sender: TObject; Field: TField);
    procedure dspartes_diariosDataChange(Sender: TObject; Field: TField);
    procedure dstalmacenesStateChange(Sender: TObject);
    procedure dstarticulosalmacenStateChange(Sender: TObject);
    procedure dsqpartesdiarios2DataChange(Sender: TObject; Field: TField);
    procedure qarticulosalmacenAfterOpen(DataSet: TDataSet);
    procedure qarticulosalmacenBeforeOpen(DataSet: TDataSet);
    procedure dsqseriesStateChange(Sender: TObject);
    procedure qparcelasBeforeOpen(DataSet: TDataSet);
    procedure dtarticulos_componentesAfterPost(DataSet: TDataSet);
    procedure dtarticulos_componentesBeforePost(DataSet: TDataSet);
    procedure tprenominasCalcFields(DataSet: TDataSet);
    procedure qseriesAfterPost(DataSet: TDataSet);
    procedure dsempresaDataChange(Sender: TObject; Field: TField);
    procedure dsqparcelaDataChange(Sender: TObject; Field: TField);
    procedure qnominasdetalleBeforePost(DataSet: TDataSet);
  private
    { Private declarations }
    TimerKeepAlive: TTimer;
    procedure TimerKeepAliveTimer(Sender: TObject);
    procedure AppExceptionHandler(Sender: TObject; E: Exception);
  public
    { Public declarations }
    function CheckAndReconnectDatabase: Boolean;
    function ObtenerTrabajadoresFinContratoProximo(out ALista: string): Boolean;
    
    var   filtro:string;
          vertodos:integer;
          vempresa,vidusuario,vidlogin:integer;
          vusuario:string;
    function PedirConfirmacion(mensaje:string; si,no,cancelar:boolean):integer;
  end;

var
  DM: TDM;

implementation

{%CLASSGROUP 'Vcl.Controls.TControl'}

uses principal, fenvases_almacen, datosclientes, fconfirmar, datosestadisticas;

{$R *.dfm}

procedure TDM.qnominasdetalleBeforePost(DataSet: TDataSet);
var
  LTotal: Double;
begin
  if qnominasdetalleestado.AsString = 'P' then
    DatabaseError('No se pueden modificar partes de trabajo en estado PAGADO.');

  // Si se ha modificado el tipo de hora (articulo), actualizar precio con tarifa de articulos
  if (qnominasdetallearticulo.AsString <> '') and (qnominasdetallearticulo.OldValue <> qnominasdetallearticulo.NewValue) then
  begin
    qaux1.Close;
    qaux1.SQL.Clear;
    qaux1.SQL.Add('select precio from articulos where codart=' + QuotedStr(qnominasdetallearticulo.AsString));
    qaux1.Open;
    if not qaux1.IsEmpty and (qaux1.Fields[0].AsFloat > 0) then
      qnominasdetalleprecio.AsFloat := qaux1.Fields[0].AsFloat;
    qaux1.Close;
  end;

  // Recalcular total = qhoras * precio
  LTotal := qnominasdetalleqhoras.AsFloat * qnominasdetalleprecio.AsFloat;
  qnominasdetalletotal.AsFloat := StrToFloat(FormatFloat('0.00', LTotal));
end;

function tdm.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;

function TDM.ObtenerTrabajadoresFinContratoProximo(out ALista: string): Boolean;
var
  LQuery: TZQuery;
  LLista: TStringList;
begin
  Result := False;
  ALista := '';
  LQuery := TZQuery.Create(nil);
  try
    LQuery.Connection := DBagrigest;
    LQuery.SQL.Add('SELECT t.nombre, h.fecha_fin_contrato');
    LQuery.SQL.Add('FROM trabajadores t');
    LQuery.SQL.Add('INNER JOIN emp_historico h ON t.ide = h.ide AND t.ID = h.idt');
    LQuery.SQL.Add('WHERE t.activo = 1');
    LQuery.SQL.Add('  AND h.fecha_fin_contrato BETWEEN CURRENT_DATE AND DATE_ADD(CURRENT_DATE, INTERVAL 15 DAY)');
    LQuery.SQL.Add('ORDER BY t.nombre');
    LQuery.Open;
    
    if not LQuery.IsEmpty then
    begin
      LLista := TStringList.Create;
      try
        while not LQuery.Eof do
        begin
          LLista.Add('- ' + LQuery.FieldByName('nombre').AsString + 
                     ' (Vence: ' + DateToStr(LQuery.FieldByName('fecha_fin_contrato').AsDateTime) + ')');
          LQuery.Next;
        end;
        ALista := LLista.Text;
        Result := True;
      finally
        LLista.Free;
      end;
    end;
  finally
    LQuery.Free;
  end;
end;

function TDM.CheckAndReconnectDatabase: Boolean;
var
  LReconnected: Boolean;
begin
  Result := False;
  LReconnected := False;
  try
    if not DBagrigest.Connected then
    begin
      DBagrigest.Connect;
      LReconnected := True;
    end
    else
    begin
      // Ping envía mysql_ping(). Si la conexión se perdió y MYSQL_OPT_RECONNECT está activo,
      // el driver reconecta automáticamente o devuelve False si se necesita reconexión explícita.
      if not DBagrigest.Ping then
      begin
        try
          DBagrigest.Reconnect;
          LReconnected := True;
        except
          DBagrigest.Disconnect;
          DBagrigest.Connect;
          LReconnected := True;
        end;
      end;
    end;

    Result := DBagrigest.Connected;
    if Result and LReconnected then
    begin
      try
        DBagrigest.ExecuteDirect('SET SESSION wait_timeout=28800, interactive_timeout=28800');
      except
      end;
    end;
  except
    Result := False;
  end;
end;

procedure TDM.TimerKeepAliveTimer(Sender: TObject);
begin
  CheckAndReconnectDatabase;
end;

procedure TDM.AppExceptionHandler(Sender: TObject; E: Exception);
var
  LMsg: string;
begin
  LMsg := LowerCase(E.Message);
  // Detectar errores de desconexión MySQL (Error 2006, 2013, 2003, etc.)
  if (Pos('has gone away', LMsg) > 0) or
     (Pos('lost connection', LMsg) > 0) or
     (Pos('can''t connect', LMsg) > 0) or
     (Pos('2006', LMsg) > 0) or
     (Pos('2013', LMsg) > 0) or
     (Pos('commands out of sync', LMsg) > 0) then
  begin
    if CheckAndReconnectDatabase then
    begin
      // Conexión recuperada con éxito de forma transparente
      Exit;
    end
    else
    begin
      ShowMessage('Se ha perdido temporalmente la conexión con el servidor MySQL.' + sLineBreak +
                  'Se intentará restablecer automáticamente en unos instantes.');
      Exit;
    end;
  end;

  // Manejo estándar de otras excepciones
  Application.ShowException(E);
end;

procedure TDM.DataModuleCreate(Sender: TObject);
var
  LConfigFile: string;
  LConfigLines: TStringList;
  thost, tuser, tpass, tbd: string;
begin
  inherited;
  LConfigFile := ExtractFilePath(Application.ExeName) + 'config.ini';
  if not FileExists(LConfigFile) then
  begin
    ShowMessage('Error: No se encuentra el archivo de configuración:' + sLineBreak + LConfigFile);
    Exit;
  end;

  thost := '';
  tuser := '';
  tpass := '';
  tlimitado := '0';
  tbd := '';

  LConfigLines := TStringList.Create;
  try
    LConfigLines.LoadFromFile(LConfigFile);
    if LConfigLines.Count >= 5 then
    begin
      thost := Trim(LConfigLines[0]);
      tuser := Trim(LConfigLines[1]);
      tpass := Trim(LConfigLines[2]);
      tlimitado := Trim(LConfigLines[3]);
      tbd := Trim(LConfigLines[4]);
    end
    else
    begin
      ShowMessage('Error: El archivo config.ini no contiene suficientes líneas de configuración (mínimo 5).');
      Exit;
    end;
  finally
    LConfigLines.Free;
  end;

  DM.DBagrigest.Connected := False;
  DM.DBagrigest.LibraryLocation := ExtractFilePath(Application.ExeName) + 'libmysql.dll';
  DM.DBagrigest.Database := tbd;
  DM.DBagrigest.HostName := thost;
  DM.DBagrigest.User := tuser;
  DM.DBagrigest.Password := tpass;

  // Propiedades avanzadas para auto-reconexión y evitar caídas por inactividad
  DM.DBagrigest.Properties.Clear;
  DM.DBagrigest.Properties.Add('codepage=utf8');
  DM.DBagrigest.Properties.Add('controls_cp=CP_UTF16');
  DM.DBagrigest.Properties.Add('MYSQL_OPT_RECONNECT=1');
  DM.DBagrigest.Properties.Add('reconnect=true');
  DM.DBagrigest.Properties.Add('wait_timeout=28800');
  DM.DBagrigest.Properties.Add('interactive_timeout=28800');

  try
    DM.DBagrigest.Connected := True;
    DM.DBagrigest.ExecuteDirect('SET SESSION wait_timeout=28800, interactive_timeout=28800');
  except
    on E: Exception do
      ShowMessage('Error al conectar con la base de datos (' + thost + '/' + tbd + '):' + sLineBreak + E.Message);
  end;

  // Configurar manejador global de excepciones para reconectar automáticamente
  Application.OnException := AppExceptionHandler;

  // Configurar Timer KeepAlive / Heartbeat (ping cada 60 segundos)
  TimerKeepAlive := TTimer.Create(Self);
  TimerKeepAlive.Interval := 60000;
  TimerKeepAlive.OnTimer := TimerKeepAliveTimer;
  TimerKeepAlive.Enabled := True;
end;

procedure TDM.DataModuleDestroy(Sender: TObject);
begin
  if Assigned(TimerKeepAlive) then
  begin
    TimerKeepAlive.Enabled := False;
    TimerKeepAlive.Free;
    TimerKeepAlive := nil;
  end;
  inherited;
  ExitProcess(0);
end;

procedure TDM.dscontrolproduccionStateChange(Sender: TObject);
begin
  inherited;
    if qcontrolproduccion.State in [dsedit] then
    begin
      base.btcontrolproduccion.visible:=true;
      base.btcontrolprodcerrar.Visible:=false;
    end;
    if qcontrolproduccion.State in [dsbrowse] then
    begin
      base.btcontrolproduccion.visible:=false;
      base.btcontrolprodcerrar.Visible:=true;
    end;

end;

procedure TDM.dsempresaDataChange(Sender: TObject; Field: TField);
begin
       If not DirectoryExists('c:\agrigest\tmp') then CreateDir('c:\agrigest\tmp');
       Deletefile('c:\agrigest\tmp\empimg.*');//+temp_fotosextension.AsString);
       base.imgfotoe.Picture:=nil;
       if  tempresalogo.AsString<>'' then
       begin
         tempresalogo.savetofile('c:\agrigest\tmp\empimg.jpg');
         base.imgfotoe.Picture.LoadFromFile('c:\agrigest\tmp\empimg.jpg');
         Deletefile('c:\agrigest\tmp\empimg.jpg');
       end;

end;

procedure TDM.dsempresaStateChange(Sender: TObject);
begin
  inherited;
if tempresa.State in [dsedit] then
begin
    base.bemodificar.Click;
end;
end;

procedure TDM.dspartes_diariosDataChange(Sender: TObject; Field: TField);
begin
  inherited;
  base.tfirmanominas.Picture:=nil;
  qfirmas.Close;
  if  (qpartes_diariosfirma.asinteger<>0) then
  begin
      qfirmas.SQL.Clear;
      qfirmas.SQL.Add('select * from firmas where id='+dm.qpartes_diariosfirma.Asstring+' and ide='+dm.qpartes_diarioside.asstring);
      qfirmas.open;
      qfirmasfirma.SaveToFile('c:\agrigest\informes\firma.bmp');
      base.tfirmanominas.Picture.LoadFromFile('c:\agrigest\informes\firma.bmp');
  end else   base.tfirmanominas.Picture:=nil;
end;

procedure TDM.dsqcampanyasStateChange(Sender: TObject);
begin
  inherited;
if qcampanyas.State in [dsedit,dsinsert] then
begin
    base.bcanadir.Enabled:=false;
    base.bcmodificar.Enabled:=false;
    base.bcborrar.Enabled:=false;
    base.bccancelar.Enabled:=true;
    base.bcaceptar.Enabled:=true;
end else
begin
    base.bcanadir.Enabled:=true;
    base.bcmodificar.Enabled:=true;
    base.bcborrar.Enabled:=true;
    base.bccancelar.Enabled:=false;
    base.bcaceptar.Enabled:=false;
end;
end;

procedure TDM.dsqlistadotrabajosDataChange(Sender: TObject; Field: TField);
begin
  inherited;
    if dm.qlistadotrabajos.State in [dsbrowse] then dm.qlistadotrabajos.Refresh;
    if dm.qtrabajadores2.State in [dsbrowse] then dm.qtrabajadores2.Refresh;
end;

procedure TDM.dsqmateriasprimasDataChange(Sender: TObject; Field: TField);
begin
  inherited;
  tmateriasprimas.Locate('id',qmateriasprimasid.AsString,[locaseinsensitive])
end;

procedure TDM.dsqparcela2DataChange(Sender: TObject; Field: TField);
begin
  inherited;
//    if dm.qlistadohoras.State in [dsbrowse] then dm.qlistadohoras.Refresh;
    if dm.qtipohoras2.State in [dsbrowse] then dm.qtipohoras2.Refresh;
    if dm.qtrabajadores2.State in [dsbrowse] then dm.qtrabajadores2.Refresh;
end;

procedure TDM.dsqparcelaDataChange(Sender: TObject; Field: TField);
begin
    dmestadisticas.qcampanyas.open;
    dmestadisticas.qcampanyas.First;
end;

procedure TDM.dsqparcelaStateChange(Sender: TObject);
begin
  inherited;
if qparcelas.State in [dsedit,dsinsert] then
begin
    base.bccanadir.Enabled:=false;
    base.bccmodificar.Enabled:=false;
    base.bccborrar.Enabled:=false;
    base.bcccancelar.Enabled:=true;
    base.bccaceptar.Enabled:=true;
end else
begin
    base.bccanadir.Enabled:=true;
    base.bccmodificar.Enabled:=true;
    base.bccborrar.Enabled:=true;
    base.bcccancelar.Enabled:=false;
    base.bccaceptar.Enabled:=false;
end;

end;

procedure TDM.dsqpartesdiarios2DataChange(Sender: TObject; Field: TField);
begin
  base.tfirmaproduccion.Picture:=nil;
  qfirmas.Close;
  if  (qpartes_diarios2firma.asinteger<>0) then
  begin
      qfirmas.SQL.Clear;
      qfirmas.SQL.Add('select * from firmas where id='+dm.qpartes_diarios2firma.Asstring+' and ide='+dm.qpartes_diarios2ide.asstring);
      qfirmas.open;
      qfirmasfirma.SaveToFile('c:\agrigest\informes\firma.bmp');
      base.tfirmaproduccion.Picture.LoadFromFile('c:\agrigest\informes\firma.bmp');
  end else

end;

procedure TDM.dsqproductosDataChange(Sender: TObject; Field: TField);
begin
  inherited;
  tproductos.Locate('codigo',qproductoscodigo.AsString,[locaseinsensitive])
end;

procedure TDM.dsqseriesStateChange(Sender: TObject);
begin
    if dm.qseries.State in [dsedit,dsinsert] then
    begin
       base.btsnnuevo.enabled:=false;
       base.btsnborrar.enabled:=false;
       base.btsnmodificar.enabled:=false;
       base.btsnguardar.enabled:=true;
       base.btsncancelar.enabled:=true;
    end;
    if dm.qseries.State in [dsbrowse] then
    begin
       base.btsnnuevo.enabled:=true;
       base.btsnborrar.enabled:=true;
       base.btsnmodificar.enabled:=true;
       base.btsnguardar.enabled:=false;
       base.btsncancelar.enabled:=false;
    end;
end;

procedure TDM.dsqtipohoras2DataChange(Sender: TObject; Field: TField);
begin
  inherited;
    if dm.qlistadohoras.State in [dsbrowse] then dm.qlistadohoras.Refresh;
    if dm.qtrabajadores2.State in [dsbrowse] then dm.qtrabajadores2.Refresh;
end;

procedure TDM.dsqtipohorasDataChange(Sender: TObject; Field: TField);
begin
  inherited;
  ttipohoras.Locate('codart',qtipohorascodart.AsString,[locaseinsensitive])
end;

procedure TDM.dsqtipotrabajo2DataChange(Sender: TObject; Field: TField);
begin
  inherited;
    if dm.qlistadotrabajos.State in [dsbrowse] then dm.qlistadotrabajos.Refresh;
    if dm.qtrabajadores3.State in [dsbrowse] then dm.qtrabajadores3.Refresh;
end;

procedure TDM.nomlhhastaChange(Sender: TObject; Field: TField);
begin
  inherited;
  ttipotrabajo.locate('id',qtrabajosid.AsString,[locaseinsensitive]);

end;

procedure TDM.dsqtrabajadores2DataChange(Sender: TObject; Field: TField);
begin
  inherited;
    if dm.qlistadohoras.State in [dsbrowse] then dm.qlistadohoras.Refresh;
end;

procedure TDM.dsqtrabajadores3DataChange(Sender: TObject; Field: TField);
begin
  inherited;
    if dm.qlistadotrabajos.State in [dsbrowse] then dm.qlistadotrabajos.Refresh;
end;

procedure TDM.dsqtrabajosalmacenDataChange(Sender: TObject; Field: TField);
begin
  inherited;
  ttrabajosalmacen.locate('id',qtrabajosalmacenid.AsString,[locaseinsensitive]);
  qtipohoras.locate('codart',qtrabajosalmacenarticulo.AsString,[locaseinsensitive]);
  qparcelas.locate('codpar',qtrabajosalmacenparcela.AsString,[locaseinsensitive]);
  qtrabajos.locate('id',qtrabajosalmacentipo_trabajo.AsString,[locaseinsensitive]);
end;

procedure TDM.dstalmacenesStateChange(Sender: TObject);
begin
    if talmacenes.State in [dsedit,dsinsert] then
    begin
        base.Panel110.Enabled:=true;
    end;
    if talmacenes.State in [dsbrowse] then
    begin
        base.Panel110.Enabled:=false;
    end;
end;

procedure TDM.dstarticulosalmacenStateChange(Sender: TObject);
begin
    if dm.dtarticulosalmacen.State in [dsedit,dsinsert] then
    begin
       envases_almacen.Panel14.Enabled:=true;
       envases_almacen.btEAnuevo.enabled:=false;
       envases_almacen.btEAborrar.enabled:=false;
       envases_almacen.btEAmodificar.enabled:=false;
       envases_almacen.btEAguardar.enabled:=true;
       envases_almacen.btEAcancelar.enabled:=true;
    end;
    if dm.dtarticulosalmacen.State in [dsbrowse] then
    begin
       envases_almacen.Panel14.Enabled:=false;
       envases_almacen.btEAnuevo.enabled:=true;
       envases_almacen.btEAborrar.enabled:=true;
       envases_almacen.btEAmodificar.enabled:=true;
       envases_almacen.btEAguardar.enabled:=false;
       envases_almacen.btEAcancelar.enabled:=false;
    end;
end;

procedure TDM.dtarticulos_componentesAfterPost(DataSet: TDataSet);
var observaciones:string;
begin
    dtarticulos_componentes.refresh;
    qaux.close;
    qaux.SQL.Clear;
    qaux.SQL.Add('select * from articulos_componentes where idempresa='+dm.dtarticulosalmacenide.Asstring+' and idarticuloalmacen='+dm.dtarticulosalmacenid.Asstring);
    qaux.open;
    qaux.First;
    observaciones:='LLEVA ';
    while not qaux.eof do
    begin
       observaciones:=observaciones+qaux.fields[4].asstring+' X '+qaux.fields[3].asstring+',';
       qaux.next;
    end;
    observaciones:=observaciones+' REVISADO EL '+datetostr(date());
    qaux.close;
    qaux.SQL.Clear;
    qaux.SQL.Add('select sum(peso),sum(coste) from articulos_componentes where idempresa='+dm.dtarticulosalmacenide.Asstring+' and idarticuloalmacen='+dm.dtarticulosalmacenid.Asstring);
    qaux.open;
    dtarticulosalmacen.Edit;
    dtarticulosalmacentara.Value:=qaux.Fields[0].AsFloat;
    dtarticulosalmacencosto.Value:=qaux.Fields[1].AsFloat;
    dtarticulosalmacenobservaciones.Value:=observaciones;
    dtarticulosalmacen.Refresh;
    dtarticulos_componentes.refresh;
end;

procedure TDM.dtarticulos_componentesBeforePost(DataSet: TDataSet);
var ide,idaf:string;
begin
    ide:=dtarticulos_componentesidempresa.asstring;
    idaf:=dtarticulos_componentesidarticulof.asstring;
    dmclientes.qarticulosfinal.Locate('idempresa;id',vararrayof([ide,idaf]),[locaseinsensitive]);
    dtarticulos_componentespreciocoste.Value:=dmclientes.qarticulosfinalult_preciocompra.AsFloat;
    dtarticulos_componentescoste.Value:=dtarticulos_componentescantidad.asfloat*dmclientes.qarticulosfinalult_preciocompra.AsFloat;
    dtarticulos_componentespeso.value:=dtarticulos_componentescantidad.AsFloat*dmclientes.qarticulosfinalpeso.AsFloat;
end;

procedure TDM.qarticulosalmacenAfterOpen(DataSet: TDataSet);
begin
   if dtarticulosalmacen.Active then dtarticulosalmacen.Refresh else dtarticulosalmacen.Open;
end;

procedure TDM.qarticulosalmacenBeforeOpen(DataSet: TDataSet);
var filtrolocal:string;
begin
    if filtro<>'' then
    begin
       begin
         filtrolocal:=' where descripcion like('+''''+filtro+''''+') or codigo like('+''''+filtro+''''+') or id like('+''''+filtro+''''+')';
       end;
      if vertodos=0 then
      begin
          begin
            filtrolocal:=' where (descripcion like('+''''+filtro+''''+') or codigo like('+''''+filtro+''''+') or id like('+''''+filtro+''''+')';
            filtrolocal:=filtrolocal+') and activo=1 ';
          end;
      end;
    end;

    if filtro='' then
    begin
      filtrolocal:='';
      if vertodos=0 then
      begin
          filtrolocal:=' where activo=1 ';
      end;
    end;


    qarticulosalmacen.SQL.Clear;
    qarticulosalmacen.SQL.Add('select id,ide,codigo,descripcion,activo from articulos_almacen ' + filtrolocal +' order by descripcion')


end;

procedure TDM.qparcelasBeforeOpen(DataSet: TDataSet);
var filtro:string;
begin
    if filtroparcelas<>'' then
    begin
         filtro:=filtro+ ' where nombre like('+''''+filtroparcelas+''''+')';
    end;
    if filtroparcelas='' then
    begin
        filtro:=filtro+ ' where activo=1';//+inttostr(vtactivo);
    end;
    qparcelas.SQL.Clear;
    qparcelas.SQL.Add('select * from parcelas ' + filtro +' order by nombre')

end;

procedure TDM.qseriesAfterPost(DataSet: TDataSet);
begin
    if qseriesactivo.AsInteger=1 then
    begin
      qaux.SQL.Clear;
      qaux.SQL.Add('update series_numericas set activo=0 where ide='+qserieside.AsString+' and id<>'+''''+qseriesid.AsString+'''');
      qaux.ExecSQL;
    end;
    qseries.Refresh;
end;

procedure TDM.tprenominasCalcFields(DataSet: TDataSet);
var diascalculo:real;
    salariobase: real;
begin
   salariobase:=tprenominassalariobase.AsFloat;
   diascalculo:=tprenominasdiascalculo.asinteger;
   if diascalculo>0 then tprenominasbasedia.value:=tprenominastotalbruto.asfloat/diascalculo;
{   if tprenominasbasedia.AsFloat<salariobase then
   begin
     diascalculo:=diascalculo-1;
     tprenominasbasedia.value:=tprenominastotalbruto.asfloat/diascalculo;
   end;
   if tprenominasbasedia.AsFloat<salariobase then
   begin
     diascalculo:=diascalculo-1;
     tprenominasbasedia.value:=tprenominastotalbruto.asfloat/diascalculo;
   end;   }



end;

end.
