unit principal;

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, VCLTee.TeEngine, VCLTee.Series,
  VCLTee.TeeData, VCLTee.TeeProcs, VCLTee.Chart, VCLTee.DBChart, ShellApi,
  Vcl.OleCtrls, IdHTTP, mshtml, SHDocVw, wgssSTU_TLB, SignatureForm,
  Vcl.ToolWin, Vcl.ImgList, dateutils,
  Vcl.OleServer, ComObj, Excel2000, IdIOHandler, IdIOHandlerSocket,
  IdIOHandlerStack, IdSSL, IdSSLOpenSSL, IdMessage, IdBaseComponent,
  IdComponent, IdTCPConnection, IdTCPClient, IdExplicitTLSClientServerBase,
  IdMessageClient, IdSMTPBase, IdSMTP, frxExportBaseDialog, VCLTee.TeeGDIPlus,Wincrypt;

type
  TBASE = class(TForm)
    PGeneral: TPanel;
    PDEmpleados: TPanel;
    PMenu: TPanel;
    BSalir: TButton;
    Panel2: TPanel;
    Panel1: TPanel;
    dsqtrabajadores: TDataSource;
    DBGrid1: TDBGrid;
    Label1: TLabel;
    tbuscar: TEdit;
    dstrabajadores: TDataSource;
    PageEmpleados: TPageControl;
    tabDatosGenerales: TTabSheet;
    TabJornales: TTabSheet;
    TabAnticipos: TTabSheet;
    tabPagos: TTabSheet;
    Panel3: TPanel;
    Panel5: TPanel;
    DBGrid2: TDBGrid;
    dsqjornales: TDataSource;
    qjornales: TZReadOnlyQuery;
    qempleados: TZReadOnlyQuery;
    qempleadosnombre: TWideStringField;
    qjornalesid: TIntegerField;
    qjornalesfecha: TDateField;
    qjornalesparcela: TWideStringField;
    qjornalesidt: TIntegerField;
    qjornalestrabajador: TWideStringField;
    qjornalestypework: TWideStringField;
    qjornalesarticulo: TWideStringField;
    qjornalesqhoras: TFloatField;
    qjornalesestado: TWideStringField;
    Panel6: TPanel;
    Panel7: TPanel;
    Panel8: TPanel;
    /// hola
    xtempleados: TZTable;
    xtempleadosNIF: TWideStringField;
    xtempleadosnombre: TWideStringField;
    xtempleadosNOMBRECORTO: TWideStringField;
    xtempleadosAPELLIDOS: TWideStringField;
    xtempleadosDIRECCION: TWideStringField;
    xtempleadosPOBLACION: TWideStringField;
    xtempleadosPROVINCIA: TWideStringField;
    xtempleadosFECHANACIMIENTO: TDateField;
    xtempleadosPAISNAC: TWideStringField;
    xtempleadosNACIONALIDAD: TWideStringField;
    xtempleadosSEXO: TWideStringField;
    xtempleadosCBIBAN: TWideStringField;
    xtempleadosCBBANCO: TWideStringField;
    xtempleadosCBOFICINA: TWideStringField;
    xtempleadosCBDC: TWideStringField;
    xtempleadosCBCC: TWideStringField;
    xtempleadosTELEFONO1: TWideStringField;
    xtempleadosTELEFONO2: TWideStringField;
    xtempleadosTELEFONO3: TWideStringField;
    xtempleadosTELEFONO4: TWideStringField;
    xtempleadosNUMSEGSOCIAL: TWideStringField;
    xtempleadosIRPF: TFloatField;
    xtempleadosDESEMPLEO: TFloatField;
    xtempleadosFORMACION: TFloatField;
    xtempleadosOBSERVACIONES: TWideStringField;
    xtempleadosFECHAALTA: TDateField;
    xtempleadosFECHABAJA: TDateField;
    xtempleadosFIJO: TSmallintField;
    xtempleadosFIJODISCONTINUO: TSmallintField;
    xtempleadosTEMPORAL: TSmallintField;
    xtempleadosCONTINGENCIAS: TFloatField;
    xtempleadosempresa: TIntegerField;
    Label4: TLabel;
    DBEdit3: TDBEdit;
    Label8: TLabel;
    DBEdit7: TDBEdit;
    falta: TDateTimePicker;
    fbaja: TDateTimePicker;
    Label9: TLabel;
    Panel4: TPanel;
    Label19: TLabel;
    DBEdit16: TDBEdit;
    Label20: TLabel;
    Label21: TLabel;
    DBEdit18: TDBEdit;
    Label22: TLabel;
    DBEdit19: TDBEdit;
    Panel9: TPanel;
    Label12: TLabel;
    diagimagen: TOpenPictureDialog;
    tfechajornal: TDateTimePicker;
    lparcela: TDBLookupComboBox;
    ltrabajo: TDBLookupComboBox;
    ltipohora: TDBLookupComboBox;
    btinsertar: TButton;
    thoras: TEdit;
    tjornales: TZTable;
    dsjornales: TDataSource;
    tjornalesid: TIntegerField;
    tjornalesfecha: TDateField;
    tjornalesparcela: TWideStringField;
    tjornalesidt: TIntegerField;
    tjornalestrabajador: TWideStringField;
    tjornalestypework: TWideStringField;
    tjornalesarticulo: TWideStringField;
    tjornalesqhoras: TFloatField;
    qaux: TZReadOnlyQuery;
    Label28: TLabel;
    Label29: TLabel;
    Label26: TLabel;
    DBEdit28: TDBEdit;
    Label27: TLabel;
    Label31: TLabel;
    DBEdit34: TDBEdit;
    Label32: TLabel;
    DBEdit35: TDBEdit;
    Label33: TLabel;
    DBEdit36: TDBEdit;
    Label34: TLabel;
    DBEdit37: TDBEdit;
    Label35: TLabel;
    DBMemo1: TDBMemo;
    DBCheckBox1: TDBCheckBox;
    DBCheckBox2: TDBCheckBox;
    DBCheckBox3: TDBCheckBox;
    Label36: TLabel;
    DBEdit38: TDBEdit;
    Tanyo: TComboBox;
    TMES: TComboBox;
    TESTADO: TComboBox;
    Label37: TLabel;
    Label38: TLabel;
    Label39: TLabel;
    Panel12: TPanel;
    DBGrid3: TDBGrid;
    Panel11: TPanel;
    Panel10: TPanel;
    Label40: TLabel;
    Label41: TLabel;
    Label42: TLabel;
    Label43: TLabel;
    tanyo2: TComboBox;
    tmes2: TComboBox;
    testado2: TComboBox;
    bborrarjornales: TButton;
    bmodificarjornales: TButton;
    lprecio: TEdit;
    Label47: TLabel;
    Label48: TLabel;
    Label49: TLabel;
    Label50: TLabel;
    Label51: TLabel;
    Label52: TLabel;
    Label46: TLabel;
    Label10: TLabel;
    Button3: TButton;
    Button4: TButton;
    xtempleadosID: TSmallintField;
    qempleadosid: TSmallintField;
    tjornalesprecio: TFloatField;
    tjornalestotal: TFloatField;
    tjornalesestado: TWideStringField;
    qjornalesprecio: TFloatField;
    qjornalestotal: TFloatField;
    Panel13: TPanel;
    Label53: TLabel;
    baceptar: TButton;
    BtEmpleados: TBitBtn;
    Btjornales: TBitBtn;
    btexpediciones: TBitBtn;
    bttrabajos: TBitBtn;
    bttrazabilidad: TBitBtn;
    btempresa: TBitBtn;
    DBCheckBox4: TDBCheckBox;
    xtempleadosPAGARPORBANCO: TIntegerField;
    xtempleadosCP: TWideStringField;
    Button5: TButton;
    PDNominas: TPanel;
    PageNominas: TPageControl;
    Nominaspag1: TTabSheet;
    Panel18: TPanel;
    Panel19: TPanel;
    Panel21: TPanel;
    dsnominas: TDataSource;
    tnominas: TZTable;
    dslinnominas: TDataSource;
    tlinnominas: TZTable;
    tlinnominasIDN: TIntegerField;
    tlinnominasId: TIntegerField;
    tlinnominasFECHA: TDateField;
    tlinnominasANYO: TIntegerField;
    tlinnominasMES: TWideStringField;
    tlinnominasNIF: TWideStringField;
    tlinnominasNOMBRE: TWideStringField;
    tlinnominasDIRECCION: TWideStringField;
    tlinnominasCP: TWideStringField;
    tlinnominasPOBLACION: TWideStringField;
    tlinnominasHORAS: TFloatField;
    tlinnominasFECHAALTA: TDateField;
    tlinnominasDIASTRABAJADOS: TIntegerField;
    tlinnominasDIASMAXIMO: TIntegerField;
    tlinnominasDIASCALCULO: TIntegerField;
    tlinnominasTOTALBRUTO: TFloatField;
    tlinnominasIRPF: TFloatField;
    tlinnominasTOTALIRPF: TFloatField;
    tlinnominasDESEMPLEO: TFloatField;
    tlinnominasTOTALDESEMPLEO: TFloatField;
    tlinnominasFORMACION: TFloatField;
    tlinnominasTOTALFORMACION: TFloatField;
    tlinnominasCONTINGENCIAS: TFloatField;
    tlinnominasTOTALCONTINGENCIAS: TFloatField;
    tlinnominasTOTALNETO: TFloatField;
    tlinnominasANTICIPOS: TFloatField;
    tlinnominasTOTALAPAGAR: TFloatField;
    tlinnominasCUENTAPAGO: TWideStringField;
    tlinnominasFECHAPAGO: TDateField;
    tlinnominasESTADO: TWideStringField;
    tlinnominasSALARIOBASE: TFloatField;
    tlinnominasDIASLABORABLES: TIntegerField;
    dsqnominas: TDataSource;
    qnominas: TZReadOnlyQuery;
    DBEdit32: TDBEdit;
    DBEdit29: TDBEdit;
    DBEdit30: TDBEdit;
    DBEdit31: TDBEdit;
    DBEdit33: TDBEdit;
    qnominasID: TIntegerField;
    qnominasFECHA: TDateField;
    qnominasPERIODO: TIntegerField;
    qnominasNOMPERIODO: TWideStringField;
    qnominasANYO: TIntegerField;
    qnominasESTADO: TWideStringField;
    qlinnominas: TZReadOnlyQuery;
    dsqlinnominas: TDataSource;
    qlinnominasIDN: TIntegerField;
    qlinnominasId: TIntegerField;
    qlinnominasIDT: TIntegerField;
    qlinnominasANYO: TIntegerField;
    qlinnominasMES: TWideStringField;
    qlinnominasNIF: TWideStringField;
    qlinnominasNOMBRE: TWideStringField;
    qlinnominasDIRECCION: TWideStringField;
    qlinnominasCP: TWideStringField;
    qlinnominasPOBLACION: TWideStringField;
    qlinnominasHORAS: TFloatField;
    qlinnominasFECHAALTA: TDateField;
    qlinnominasDIASTRABAJADOS: TIntegerField;
    qlinnominasDIASMAXIMO: TIntegerField;
    qlinnominasDIASCALCULO: TIntegerField;
    qlinnominasTOTALBRUTO: TFloatField;
    qlinnominasIRPF: TFloatField;
    qlinnominasTOTALIRPF: TFloatField;
    qlinnominasDESEMPLEO: TFloatField;
    qlinnominasTOTALDESEMPLEO: TFloatField;
    qlinnominasFORMACION: TFloatField;
    qlinnominasTOTALFORMACION: TFloatField;
    qlinnominasCONTINGENCIAS: TFloatField;
    qlinnominasTOTALCONTINGENCIAS: TFloatField;
    qlinnominasTOTALNETO: TFloatField;
    qlinnominasANTICIPOS: TFloatField;
    qlinnominasTOTALAPAGAR: TFloatField;
    qlinnominasCUENTAPAGO: TWideStringField;
    qlinnominasFECHAPAGO: TDateField;
    qlinnominasESTADO: TWideStringField;
    qlinnominasSALARIOBASE: TFloatField;
    qlinnominasDIASLABORABLES: TIntegerField;
    qlinnominasCORRECTO: TIntegerField;
    tnominasID: TIntegerField;
    tnominasFECHA: TDateField;
    tnominasPERIODO: TIntegerField;
    tnominasNOMPERIODO: TWideStringField;
    tnominasANYO: TIntegerField;
    tnominasESTADO: TWideStringField;
    btproduccion: TBitBtn;
    PDProduccion: TPanel;
    baceptarempleados: TButton;
    bcancelarempleados: TButton;
    bcancelarjornal: TButton;
    Vaciar: TButton;
    Vaciar2: TButton;
    qjornalesorigen: TWideStringField;
    DBEdit39: TDBEdit;
    DBGrid4: TDBGrid;
    NominasPag2: TTabSheet;
    Shape1: TShape;
    Label65: TLabel;
    Label66: TLabel;
    Shape2: TShape;
    Label68: TLabel;
    Shape4: TShape;
    Label69: TLabel;
    Shape5: TShape;
    Shape3: TShape;
    Label67: TLabel;
    Label70: TLabel;
    Shape6: TShape;
    Label71: TLabel;
    Shape7: TShape;
    Label72: TLabel;
    Shape8: TShape;
    DBGrid5: TDBGrid;
    Panel16: TPanel;
    Shape9: TShape;
    Label76: TLabel;
    Label77: TLabel;
    Shape10: TShape;
    Label78: TLabel;
    Shape11: TShape;
    Label79: TLabel;
    Shape12: TShape;
    btAgenda: TBitBtn;
    PDAgenda: TPanel;
    calendarionotas: TMonthCalendar;
    DBCheckBox5: TDBCheckBox;
    Panel17: TPanel;
    DBGrid6: TDBGrid;
    Label80: TLabel;
    PDEmpresa: TPanel;
    PageDatosEmpresa: TPageControl;
    DatosGenerales: TTabSheet;
    ProductosAcabados: TTabSheet;
    TipoHora: TTabSheet;
    TipoTrabajo: TTabSheet;
    TrabajosAlmacen: TTabSheet;
    Campanyas: TTabSheet;
    Nominaspag3: TTabSheet;
    Panel20: TPanel;
    Label106: TLabel;
    nomfechadesde: TDateTimePicker;
    nomfechahasta: TDateTimePicker;
    DBGrid7: TDBGrid;
    Panel22: TPanel;
    btvalorar: TButton;
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
    CheckBox3: TCheckBox;
    Panel23: TPanel;
    Label109: TLabel;
    Shape13: TShape;
    Label110: TLabel;
    Label111: TLabel;
    Shape14: TShape;
    Label112: TLabel;
    Shape15: TShape;
    Label113: TLabel;
    Shape16: TShape;
    DBEdit64: TDBEdit;
    xtempleadosREGIMEN_COT: TWideStringField;
    Label13: TLabel;
    DBListBox1: TDBListBox;
    PMateriasprimas: TTabSheet;
    Panel24: TPanel;
    Panel25: TPanel;
    Panel26: TPanel;
    DBGrid8: TDBGrid;
    Panel27: TPanel;
    Panel28: TPanel;
    PageControl1: TPageControl;
    TabSheet4: TTabSheet;
    bprmodificar: TButton;
    bprborrar: TButton;
    bpranadir: TButton;
    bpraceptar: TButton;
    bprcancelar: TButton;
    Label14: TLabel;
    DBEdit10: TDBEdit;
    Label15: TLabel;
    DBEdit11: TDBEdit;
    Label16: TLabel;
    DBEdit12: TDBEdit;
    Label17: TLabel;
    DBEdit13: TDBEdit;
    Label18: TLabel;
    DBEdit14: TDBEdit;
    Label24: TLabel;
    DBEdit15: TDBEdit;
    Label114: TLabel;
    DBEdit20: TDBEdit;
    Label115: TLabel;
    DBEdit21: TDBEdit;
    Label116: TLabel;
    DBEdit65: TDBEdit;
    Label117: TLabel;
    DBEdit66: TDBEdit;
    DBCheckBox6: TDBCheckBox;
    DBCheckBox7: TDBCheckBox;
    Label118: TLabel;
    Label119: TLabel;
    Label120: TLabel;
    Panel29: TPanel;
    DBGrid9: TDBGrid;
    Panel30: TPanel;
    Panel31: TPanel;
    Panel32: TPanel;
    Panel33: TPanel;
    PageControl3: TPageControl;
    TabSheet3: TTabSheet;
    Panel34: TPanel;
    DBGrid10: TDBGrid;
    Panel35: TPanel;
    Panel36: TPanel;
    Panel37: TPanel;
    Label124: TLabel;
    Label125: TLabel;
    bthmodificar: TButton;
    bthborrar: TButton;
    bthanadir: TButton;
    bthaceptar: TButton;
    bthcancelar: TButton;
    DBEdit69: TDBEdit;
    DBEdit70: TDBEdit;
    DBCheckBox9: TDBCheckBox;
    Panel38: TPanel;
    PageControl6: TPageControl;
    TabSheet6: TTabSheet;
    DBCheckBox10: TDBCheckBox;
    Label127: TLabel;
    DBEdit71: TDBEdit;
    Panel39: TPanel;
    DBGrid11: TDBGrid;
    Panel40: TPanel;
    Panel41: TPanel;
    Panel42: TPanel;
    Label129: TLabel;
    Label130: TLabel;
    bttmodificar: TButton;
    bttborrar: TButton;
    bttanadir: TButton;
    bttaceptar: TButton;
    bttcancelar: TButton;
    DBEdit72: TDBEdit;
    DBEdit74: TDBEdit;
    DBCheckBox11: TDBCheckBox;
    Panel43: TPanel;
    PageControl7: TPageControl;
    TabSheet7: TTabSheet;
    Panel44: TPanel;
    DBGrid12: TDBGrid;
    Panel45: TPanel;
    Panel46: TPanel;
    Panel47: TPanel;
    Label131: TLabel;
    Label132: TLabel;
    btamodificar: TButton;
    btaborrar: TButton;
    btaanadir: TButton;
    btaaceptar: TButton;
    btacancelar: TButton;
    DBEdit75: TDBEdit;
    DBCheckBox12: TDBCheckBox;
    Panel48: TPanel;
    PageControl8: TPageControl;
    TabSheet8: TTabSheet;
    DBLookupComboBox1: TDBLookupComboBox;
    Label133: TLabel;
    DBEdit76: TDBEdit;
    Label134: TLabel;
    DBLookupComboBox2: TDBLookupComboBox;
    Label135: TLabel;
    DBLookupComboBox3: TDBLookupComboBox;
    Panel14: TPanel;
    Panel49: TPanel;
    Panel50: TPanel;
    Pageproduccion: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet5: TTabSheet;
    TabSheet9: TTabSheet;
    TabSheet10: TTabSheet;
    TabSheet11: TTabSheet;
    DBGrid13: TDBGrid;
    fprodesde: TDateTimePicker;
    Label56: TLabel;
    Label57: TLabel;
    DBGrid14: TDBGrid;
    dsqmesas: TDataSource;
    DBGrid15: TDBGrid;
    DBGrid16: TDBGrid;
    Timer1: TTimer;
    graficoproduccion: TDBChart;
    ChartDataSet1: TChartDataSet;
    Series1: TBarSeries;
    pproduccionmesa: TTabSheet;
    DBGrid17: TDBGrid;
    DBChart2: TDBChart;
    DBGrid18: TDBGrid;
    DBGrid19: TDBGrid;
    Series2: TLineSeries;
    Panel51: TPanel;
    Label59: TLabel;
    Shape17: TShape;
    Label60: TLabel;
    Label61: TLabel;
    Shape18: TShape;
    Label62: TLabel;
    Shape19: TShape;
    Label136: TLabel;
    Shape20: TShape;
    DBEdit77: TDBEdit;
    Label137: TLabel;
    DBEdit78: TDBEdit;
    Button7: TButton;
    DBCheckBox13: TDBCheckBox;
    DBCheckBox14: TDBCheckBox;
    DBCheckBox15: TDBCheckBox;
    DBCheckBox16: TDBCheckBox;
    Parcelas: TTabSheet;
    DBGrid20: TDBGrid;
    Panel52: TPanel;
    Panel53: TPanel;
    Panel54: TPanel;
    Label139: TLabel;
    Label140: TLabel;
    bccmodificar: TButton;
    bccborrar: TButton;
    bccanadir: TButton;
    bccaceptar: TButton;
    bcccancelar: TButton;
    DBEdit79: TDBEdit;
    DBEdit80: TDBEdit;
    DBCheckBox17: TDBCheckBox;
    Panel55: TPanel;
    PageControl2: TPageControl;
    TabSheet13: TTabSheet;
    TabSheet12: TTabSheet;
    btcontrolprodcerrar: TButton;
    Panel56: TPanel;
    Label141: TLabel;
    Label142: TLabel;
    DBEdit82: TDBEdit;
    Label143: TLabel;
    DBEdit83: TDBEdit;
    Label144: TLabel;
    DBEdit84: TDBEdit;
    Label145: TLabel;
    DBEdit85: TDBEdit;
    Label146: TLabel;
    Label147: TLabel;
    DBEdit86: TDBEdit;
    Label148: TLabel;
    DBEdit87: TDBEdit;
    Label151: TLabel;
    Label152: TLabel;
    DBEdit90: TDBEdit;
    Label153: TLabel;
    DBEdit91: TDBEdit;
    Label154: TLabel;
    DBEdit92: TDBEdit;
    Label155: TLabel;
    DBEdit93: TDBEdit;
    Label156: TLabel;
    DBEdit94: TDBEdit;
    Label157: TLabel;
    DBEdit95: TDBEdit;
    Button16: TButton;
    Label158: TLabel;
    DBEdit96: TDBEdit;
    Label159: TLabel;
    DBComboBox1: TDBComboBox;
    btcontrolproduccion: TButton;
    Panel57: TPanel;
    Panel60: TPanel;
    PageControl4: TPageControl;
    TabSheet14: TTabSheet;
    DBGrid23: TDBGrid;
    Panel58: TPanel;
    PageControl5: TPageControl;
    TabSheet15: TTabSheet;
    DBGrid22: TDBGrid;
    Panel61: TPanel;
    bcanadir: TButton;
    bcmodificar: TButton;
    bcborrar: TButton;
    bccancelar: TButton;
    bcaceptar: TButton;
    CheckBox4: TCheckBox;
    CheckBox5: TCheckBox;
    CheckBox6: TCheckBox;
    DBEdit101: TDBEdit;
    Label164: TLabel;
    Nominaspag5: TTabSheet;
    Panel62: TPanel;
    Label165: TLabel;
    Label166: TLabel;
    Label167: TLabel;
    nomlhdesde: TDateTimePicker;
    nomlhhasta: TDateTimePicker;
    Button10: TButton;
    DBGrid24: TDBGrid;
    DBGrid25: TDBGrid;
    DBGrid26: TDBGrid;
    CheckBox7: TCheckBox;
    CheckBox8: TCheckBox;
    ListaInformes: TComboBox;
    Nominaspag6: TTabSheet;
    Panel63: TPanel;
    Label168: TLabel;
    Label169: TLabel;
    Label170: TLabel;
    nomlttdesde: TDateTimePicker;
    nomltthasta: TDateTimePicker;
    Button9: TButton;
    CheckBox9: TCheckBox;
    CheckBox10: TCheckBox;
    listainformes2: TComboBox;
    DBGrid27: TDBGrid;
    DBGrid28: TDBGrid;
    DBGrid29: TDBGrid;
    COMBOLISTADOS: TComboBox;
    CheckBox11: TCheckBox;
    Button11: TButton;
    Nominaspag4: TTabSheet;
    Panel64: TPanel;
    Panel65: TPanel;
    Panel66: TPanel;
    Panel67: TPanel;
    DBGrid30: TDBGrid;
    DBGrid31: TDBGrid;
    Label172: TLabel;
    Label173: TLabel;
    pagnomfechahasta: TDateTimePicker;
    pagnomfechadesde: TDateTimePicker;
    Panel68: TPanel;
    Panel69: TPanel;
    TabSheet19: TTabSheet;
    Edit1: TEdit;
    fechaestacion: TDateTimePicker;
    Button14: TButton;
    PAGE2: TMemo;
    Panel70: TPanel;
    Shape21: TShape;
    Label174: TLabel;
    Label175: TLabel;
    Shape22: TShape;
    Label176: TLabel;
    Shape23: TShape;
    Label177: TLabel;
    Shape24: TShape;
    DBCheckBox19: TDBCheckBox;
    Button12: TButton;
    DBText1: TDBText;
    Label181: TLabel;
    Label182: TLabel;
    DBText2: TDBText;
    Label184: TLabel;
    DBText4: TDBText;
    Label185: TLabel;
    DBText5: TDBText;
    Label186: TLabel;
    DBText6: TDBText;
    Panel71: TPanel;
    Nominaspag7: TTabSheet;
    Button17: TButton;
    DBGrid32: TDBGrid;
    CheckBox12: TCheckBox;
    Panel73: TPanel;
    Panel74: TPanel;
    Panel75: TPanel;
    Panel72: TPanel;
    DBGrid33: TDBGrid;
    Panel76: TPanel;
    PDTrazabilidad: TPanel;
    PageControl10: TPageControl;
    TabSheet22: TTabSheet;
    Panel79: TPanel;
    DBGrid35: TDBGrid;
    Panel80: TPanel;
    PLDatos: TPanel;
    Panel83: TPanel;
    PageControl11: TPageControl;
    TabSheet23: TTabSheet;
    TabSheet24: TTabSheet;
    DBText3: TDBText;
    Label189: TLabel;
    Label190: TLabel;
    Label192: TLabel;
    dlotescodigo: TDBEdit;
    Panel86: TPanel;
    Panel87: TPanel;
    DBGrid38: TDBGrid;
    Entradas: TTabSheet;
    Almacenes: TTabSheet;
    Panel99: TPanel;
    Panel100: TPanel;
    Label194: TLabel;
    PageControl12: TPageControl;
    TabSheet26: TTabSheet;
    DBGrid45: TDBGrid;
    TabSheet27: TTabSheet;
    Panel101: TPanel;
    DBGrid46: TDBGrid;
    DBGrid47: TDBGrid;
    PDExpediciones: TPanel;
    PageControl13: TPageControl;
    TabSheet28: TTabSheet;
    PageControl14: TPageControl;
    TabSheet29: TTabSheet;
    DBGrid48: TDBGrid;
    Panel102: TPanel;
    DBGrid49: TDBGrid;
    TabSheet30: TTabSheet;
    Label197: TLabel;
    DBEdit104: TDBEdit;
    Label198: TLabel;
    DBEdit105: TDBEdit;
    Panel103: TPanel;
    Panel104: TPanel;
    Panel105: TPanel;
    DBGrid51: TDBGrid;
    Panel106: TPanel;
    Panel107: TPanel;
    DBGrid50: TDBGrid;
    Panel108: TPanel;
    DBGrid52: TDBGrid;
    PageControl15: TPageControl;
    TabSheet31: TTabSheet;
    TabSheet32: TTabSheet;
    TabSheet33: TTabSheet;
    TabSheet34: TTabSheet;
    DBCheckBox21: TDBCheckBox;
    DBCheckBox22: TDBCheckBox;
    almacen: TTabSheet;
    DBGrid53: TDBGrid;
    Panel109: TPanel;
    Panel110: TPanel;
    Label199: TLabel;
    Label200: TLabel;
    DBEdit106: TDBEdit;
    DBEdit107: TDBEdit;
    Panel111: TPanel;
    PageControl16: TPageControl;
    TabSheet36: TTabSheet;
    Panel112: TPanel;
    baanadir: TButton;
    bamodificar: TButton;
    baborrar: TButton;
    bacancelar: TButton;
    baaceptar: TButton;
    Label201: TLabel;
    DBEdit108: TDBEdit;
    Label203: TLabel;
    DBEdit110: TDBEdit;
    Label204: TLabel;
    DBEdit111: TDBEdit;
    Label205: TLabel;
    DBEdit112: TDBEdit;
    DBCheckBox23: TDBCheckBox;
    DBCheckBox24: TDBCheckBox;
    DBCheckBox25: TDBCheckBox;
    Label206: TLabel;
    DBEdit113: TDBEdit;
    DBGrid55: TDBGrid;
    DBCheckBox30: TDBCheckBox;
    Panel91: TPanel;
    Panel98: TPanel;
    Panel117: TPanel;
    DBGrid44: TDBGrid;
    Panel118: TPanel;
    Panel119: TPanel;
    Panel120: TPanel;
    Panel121: TPanel;
    DBGrid59: TDBGrid;
    DBGrid60: TDBGrid;
    Label222: TLabel;
    DBEdit125: TDBEdit;
    Label223: TLabel;
    DBEdit126: TDBEdit;
    Label224: TLabel;
    DBEdit127: TDBEdit;
    DBEdit128: TDBEdit;
    DBEdit129: TDBEdit;
    Label228: TLabel;
    DBEdit130: TDBEdit;
    Label229: TLabel;
    DBEdit131: TDBEdit;
    Label232: TLabel;
    DBEdit134: TDBEdit;
    DBEdit135: TDBEdit;
    DBEdit136: TDBEdit;
    Label237: TLabel;
    DBEdit137: TDBEdit;
    DBEdit138: TDBEdit;
    DBEdit139: TDBEdit;
    btactualizar: TButton;
    pnlProgresoActualizar: TPanel;
    lblProgresoActualizar: TLabel;
    lblDetalleActualizar: TLabel;
    pbActualizar: TProgressBar;
    Panel122: TPanel;
    DBGrid21: TDBGrid;
    DBGrid61: TDBGrid;
    Panel123: TPanel;
    Panel124: TPanel;
    Panel125: TPanel;
    DBCheckBox31: TDBCheckBox;
    DBGrid63: TDBGrid;
    Button19: TButton;
    Panel81: TPanel;
    Panel84: TPanel;
    DBGrid36: TDBGrid;
    DBGrid37: TDBGrid;
    Panel85: TPanel;
    DBGrid54: TDBGrid;
    Panel126: TPanel;
    Button20: TButton;
    Label225: TLabel;
    Label226: TLabel;
    Label230: TLabel;
    DBEdit144: TDBEdit;
    DBEdit145: TDBEdit;
    Label244: TLabel;
    DBEdit146: TDBEdit;
    Label245: TLabel;
    DBEdit147: TDBEdit;
    Button24: TButton;
    Edit2: TEdit;
    Label240: TLabel;
    Label241: TLabel;
    DBEdit140: TDBEdit;
    DBEdit142: TDBEdit;
    Label242: TLabel;
    DBEdit148: TDBEdit;
    btcerrar: TButton;
    bticierre: TButton;
    ffechatraspaso: TDateTimePicker;
    Label246: TLabel;
    dbfechatraspaso: TDBEdit;
    Label248: TLabel;
    Label249: TLabel;
    Label250: TLabel;
    DBEdit149: TDBEdit;
    Label251: TLabel;
    DBEdit150: TDBEdit;
    DBEdit151: TDBEdit;
    Label252: TLabel;
    DBEdit152: TDBEdit;
    Label253: TLabel;
    Label247: TLabel;
    Label254: TLabel;
    Label238: TLabel;
    DBEdit154: TDBEdit;
    DBEdit155: TDBEdit;
    DBEdit156: TDBEdit;
    DBEdit157: TDBEdit;
    DBEdit158: TDBEdit;
    Label235: TLabel;
    DBEdit159: TDBEdit;
    DBEdit160: TDBEdit;
    Label231: TLabel;
    DBEdit161: TDBEdit;
    DBEdit162: TDBEdit;
    DBEdit163: TDBEdit;
    Label236: TLabel;
    DBEdit164: TDBEdit;
    DBEdit165: TDBEdit;
    DBEdit166: TDBEdit;
    Label218: TLabel;
    DBEdit132: TDBEdit;
    Label219: TLabel;
    DBEdit133: TDBEdit;
    Label220: TLabel;
    DBEdit141: TDBEdit;
    Label221: TLabel;
    DBEdit153: TDBEdit;
    Label227: TLabel;
    DBEdit167: TDBEdit;
    Label233: TLabel;
    DBEdit168: TDBEdit;
    Label234: TLabel;
    DBEdit169: TDBEdit;
    Label239: TLabel;
    DBEdit170: TDBEdit;
    Label255: TLabel;
    DBEdit171: TDBEdit;
    Label256: TLabel;
    DBEdit172: TDBEdit;
    Label257: TLabel;
    DBEdit173: TDBEdit;
    Label258: TLabel;
    DBEdit174: TDBEdit;
    Label259: TLabel;
    DBEdit175: TDBEdit;
    Label260: TLabel;
    DBEdit176: TDBEdit;
    Label261: TLabel;
    DBEdit177: TDBEdit;
    Label262: TLabel;
    DBEdit178: TDBEdit;
    lfecha: TDBEdit;
    DBLookupComboBox4: TDBLookupComboBox;
    DBLookupComboBox5: TDBLookupComboBox;
    DBEdit181: TDBEdit;
    Label193: TLabel;
    Label263: TLabel;
    Panel127: TPanel;
    Panel128: TPanel;
    Label264: TLabel;
    Label265: TLabel;
    tbuscarnominas: TEdit;
    DBGrid64: TDBGrid;
    Label267: TLabel;
    Label268: TLabel;
    chkTodos: TCheckBox;
    chkPendientes: TCheckBox;
    chkFirmados: TCheckBox;
    Menu: TMainMenu;
    M1: TMenuItem;
    DatosEmpresa1: TMenuItem;
    MateriasPrimas1: TMenuItem;
    Centrosdecoste1: TMenuItem;
    Almacenes1: TMenuItem;
    Campaas1: TMenuItem;
    Nominas1: TMenuItem;
    Gastos1: TMenuItem;
    Ventas1: TMenuItem;
    PedidosClientes1: TMenuItem;
    AlbaranesClientes1: TMenuItem;
    FacturasClientes1: TMenuItem;
    Maquinaria1: TMenuItem;
    CalendarioLaboral1: TMenuItem;
    Empleados1: TMenuItem;
    EnvasesAlmacen1: TMenuItem;
    iposdetrabajos1: TMenuItem;
    iposdehoras1: TMenuItem;
    rabajosdeAlmacen1: TMenuItem;
    Etiquetas1: TMenuItem;
    N4: TMenuItem;
    rabajodiario1: TMenuItem;
    Anticipos1: TMenuItem;
    CalculodeNominas1: TMenuItem;
    PagosRealizados1: TMenuItem;
    N5: TMenuItem;
    ListadoporHoras1: TMenuItem;
    Listadoportipodetrabajo1: TMenuItem;
    N6: TMenuItem;
    Partesdetrabajo1: TMenuItem;
    N7: TMenuItem;
    Salir1: TMenuItem;
    listameses: TComboBox;
    listaanyos: TComboBox;
    Label183: TLabel;
    Label55: TLabel;
    btactualizarempleadosnominas: TButton;
    Button25: TButton;
    Label63: TLabel;
    DBEdit179: TDBEdit;
    DBEdit182: TDBEdit;
    DBEdit183: TDBEdit;
    Label64: TLabel;
    Shape25: TShape;
    Shape26: TShape;
    DBEdit184: TDBEdit;
    Label88: TLabel;
    Label107: TLabel;
    Label108: TLabel;
    Label187: TLabel;
    DBEdit185: TDBEdit;
    Label266: TLabel;
    btprodaceptar: TButton;
    Panel129: TPanel;
    Button26: TButton;
    listaiconos: TImageList;
    Button27: TButton;
    Button18: TButton;
    Shape27: TShape;
    Label269: TLabel;
    Shape28: TShape;
    DBEdit186: TDBEdit;
    DBEdit187: TDBEdit;
    DBEdit188: TDBEdit;
    Label270: TLabel;
    Label271: TLabel;
    Label272: TLabel;
    Label273: TLabel;
    DBEdit189: TDBEdit;
    DBCheckBox34: TDBCheckBox;
    DBCheckBox35: TDBCheckBox;
    DBCheckBox36: TDBCheckBox;
    DBText7: TDBText;
    Panel130: TPanel;
    DBEdit191: TDBEdit;
    Label275: TLabel;
    Label276: TLabel;
    DBLookupComboBox6: TDBLookupComboBox;
    Label277: TLabel;
    Panel131: TPanel;
    DBGrid65: TDBGrid;
    Label191: TLabel;
    DBCheckBox37: TDBCheckBox;
    Label286: TLabel;
    DBLookupComboBox8: TDBLookupComboBox;
    Panel132: TPanel;
    bmpanadir: TButton;
    bmpmodificar: TButton;
    bmpborrar: TButton;
    bmpcancelar: TButton;
    bmpaceptar: TButton;
    Panel133: TPanel;
    Label121: TLabel;
    Label122: TLabel;
    Label126: TLabel;
    Label128: TLabel;
    Label123: TLabel;
    Label217: TLabel;
    DBEdit67: TDBEdit;
    DBEdit68: TDBEdit;
    DBImage3: TDBImage;
    DBEdit73: TDBEdit;
    DBCheckBox8: TDBCheckBox;
    DBMemo2: TDBMemo;
    DBCheckBox20: TDBCheckBox;
    DBEdit124: TDBEdit;
    DBCheckBox33: TDBCheckBox;
    DBCheckBox38: TDBCheckBox;
    Panelcompuestos: TPanel;
    DBGrid66: TDBGrid;
    bmpc_aceptar: TButton;
    bmpc_anyadir: TButton;
    bmpc_borrar: TButton;
    DBLookupComboBox9: TDBLookupComboBox;
    Label287: TLabel;
    DBLookupComboBox10: TDBLookupComboBox;
    Label288: TLabel;
    Label289: TLabel;
    DBMemo4: TDBMemo;
    Ppartestrabajo: TTabSheet;
    DBGrid67: TDBGrid;
    Panel134: TPanel;
    Panel135: TPanel;
    Panel136: TPanel;
    Panel138: TPanel;
    Panel139: TPanel;
    CheckBox13: TCheckBox;
    CheckBox14: TCheckBox;
    CheckBox15: TCheckBox;
    Button28: TButton;
    Button29: TButton;
    Panel140: TPanel;
    DBGrid68: TDBGrid;
    Label290: TLabel;
    DBEdit193: TDBEdit;
    Label291: TLabel;
    DBLookupComboBox11: TDBLookupComboBox;
    Edit4: TEdit;
    Panel141: TPanel;
    DBGrid62: TDBGrid;
    Panel142: TPanel;
    chktodasmateriasprimas: TCheckBox;
    Panel143: TPanel;
    chktodosproductos: TCheckBox;
    Panel144: TPanel;
    chktodashoras: TCheckBox;
    Panel145: TPanel;
    chktodostrabajos: TCheckBox;
    Panel146: TPanel;
    chktodostrabajosalmacen: TCheckBox;
    Panel147: TPanel;
    Panel148: TPanel;
    chktodoscentroscoste: TCheckBox;
    Panel151: TPanel;
    Panel152: TPanel;
    chktodosalmacenes: TCheckBox;
    DBCheckBox40: TDBCheckBox;
    Presupuestos1: TMenuItem;
    FacturasProforma1: TMenuItem;
    Notas1: TMenuItem;
    clientes1: TMenuItem;
    DBEdit194: TDBEdit;
    Produccin1: TMenuItem;
    N8: TMenuItem;
    N9: TMenuItem;
    PageControl18: TPageControl;
    TabSheet2: TTabSheet;
    TabSheet16: TTabSheet;
    DBGrid69: TDBGrid;
    Panel153: TPanel;
    DBGrid70: TDBGrid;
    Button21: TButton;
    tfirmanominas: TImage;
    listaiconos2: TImageList;
    tfirmaproduccion: TImage;
    Controlhorario1: TMenuItem;
    Panel137: TPanel;
    Panel154: TPanel;
    Panel59: TPanel;
    Label149: TLabel;
    Label150: TLabel;
    Label160: TLabel;
    Label161: TLabel;
    DBEdit88: TDBEdit;
    DBEdit89: TDBEdit;
    finicio: TDateTimePicker;
    ffin: TDateTimePicker;
    DBEdit97: TDBEdit;
    DBEdit98: TDBEdit;
    Panel155: TPanel;
    Panel113: TPanel;
    Panel114: TPanel;
    beanadir: TButton;
    bemodificar: TButton;
    beborrar: TButton;
    becancelar: TButton;
    beaceptar: TButton;
    ArticulosComponentes1: TMenuItem;
    Label207: TLabel;
    DBEdit114: TDBEdit;
    Label208: TLabel;
    DBEdit115: TDBEdit;
    Label209: TLabel;
    DBEdit116: TDBEdit;
    DBCheckBox18: TDBCheckBox;
    DBCheckBox26: TDBCheckBox;
    xtempleadoside: TIntegerField;
    xtempleadosIRPF2: TFloatField;
    xtempleadosDESEMPLEO2: TFloatField;
    xtempleadosFORMACION2: TFloatField;
    xtempleadosseleccionado: TIntegerField;
    xtempleadoscodart: TWideStringField;
    chktodosempleados: TCheckBox;
    Panel115: TPanel;
    PdatosJornales: TPanel;
    Panel149: TPanel;
    btJnuevo: TButton;
    btJborrar: TButton;
    btJmodificar: TButton;
    btJguardar: TButton;
    btJcancelar: TButton;
    btJimprimir: TButton;
    btJexcel: TButton;
    fechajornales: TDateTimePicker;
    ljcentro: TDBLookupComboBox;
    ljtrabajo: TDBLookupComboBox;
    ljhora: TDBLookupComboBox;
    edjprecio: TEdit;
    edjhoras: TEdit;
    Label211: TLabel;
    Label212: TLabel;
    Label213: TLabel;
    Label214: TLabel;
    Label215: TLabel;
    Label216: TLabel;
    TabSheet17: TTabSheet;
    Button8: TButton;
    Button22: TButton;
    Pagedatos: TPageControl;
    TabSheet18: TTabSheet;
    TabSheet20: TTabSheet;
    TabSheet35: TTabSheet;
    TabSheet37: TTabSheet;
    Panel150: TPanel;
    Label100: TLabel;
    Label101: TLabel;
    Label102: TLabel;
    Label103: TLabel;
    Label104: TLabel;
    Label81: TLabel;
    Label82: TLabel;
    Label83: TLabel;
    Label84: TLabel;
    Label85: TLabel;
    Label86: TLabel;
    Label87: TLabel;
    Label89: TLabel;
    Label90: TLabel;
    Label91: TLabel;
    Label92: TLabel;
    Label178: TLabel;
    EmpActiva: TDBCheckBox;
    DBEdit40: TDBEdit;
    DBEdit41: TDBEdit;
    DBEdit42: TDBEdit;
    DBEdit43: TDBEdit;
    DBEdit44: TDBEdit;
    DBEdit45: TDBEdit;
    DBEdit46: TDBEdit;
    DBEdit47: TDBEdit;
    DBEdit48: TDBEdit;
    DBEdit49: TDBEdit;
    DBEdit50: TDBEdit;
    DBEdit58: TDBEdit;
    DBEdit59: TDBEdit;
    DBEdit60: TDBEdit;
    DBEdit61: TDBEdit;
    DBEdit62: TDBEdit;
    DBEdit102: TDBEdit;
    Label296: TLabel;
    Label297: TLabel;
    Label298: TLabel;
    Label299: TLabel;
    DBCheckBox27: TDBCheckBox;
    DBCheckBox28: TDBCheckBox;
    DBCheckBox29: TDBCheckBox;
    DBCheckBox32: TDBCheckBox;
    DBCheckBox39: TDBCheckBox;
    DBEdit117: TDBEdit;
    DBEdit118: TDBEdit;
    DBEdit119: TDBEdit;
    DBCheckBox41: TDBCheckBox;
    tbuscarparcelas: TEdit;
    Proveedores1: TMenuItem;
    EntradasMateriales1: TMenuItem;
    Button30: TButton;
    DBLookupComboBox15: TDBLookupComboBox;
    Label300: TLabel;
    DBLookupComboBox16: TDBLookupComboBox;
    DBGrid57: TDBGrid;
    PageControl17: TPageControl;
    TabSheet38: TTabSheet;
    DBGrid58: TDBGrid;
    Panel156: TPanel;
    PageControl19: TPageControl;
    TabSheet39: TTabSheet;
    DBGrid71: TDBGrid;
    Panel157: TPanel;
    DBGrid72: TDBGrid;
    Button31: TButton;
    Button32: TButton;
    TabSheet40: TTabSheet;
    DBGrid73: TDBGrid;
    Panel158: TPanel;
    DBGrid74: TDBGrid;
    Button33: TButton;
    Button34: TButton;
    TabSheet41: TTabSheet;
    DBCheckBox42: TDBCheckBox;
    DBEdit81: TDBEdit;
    GruposFamilias1: TMenuItem;
    TiposdeImpuestos1: TMenuItem;
    Panel159: TPanel;
    Label301: TLabel;
    combocampanyas: TDBLookupComboBox;
    Panel78: TPanel;
    Label210: TLabel;
    tbuscarlotes: TEdit;
    SaveDialog1: TSaveDialog;
    CalibresCalidades1: TMenuItem;
    SociosProductores1: TMenuItem;
    Button15: TButton;
    Label188: TLabel;
    DBLookupComboBox17: TDBLookupComboBox;
    dsqsocios2: TDataSource;
    qsocios2: TZReadOnlyQuery;
    qsocios2id: TIntegerField;
    qsocios2ide: TIntegerField;
    Panel77: TPanel;
    Label302: TLabel;
    btLcancelar: TButton;
    btLmodificar: TButton;
    btlnuevo: TButton;
    btLguardar: TButton;
    Button35: TButton;
    btLImprimir: TButton;
    DBLookupComboBox18: TDBLookupComboBox;
    DBMemo3: TDBMemo;
    Label303: TLabel;
    dsqlotes: TDataSource;
    DBText16: TDBText;
    Paneldocumentos: TPanel;
    DialogLotes: TOpenDialog;
    Panel160: TPanel;
    btdimprimir: TButton;
    Label304: TLabel;
    btdborrar: TButton;
    btdnuevo: TButton;
    Panel161: TPanel;
    DBGrid34: TDBGrid;
    imgfoto: TImage;
    btdguardar: TButton;
    btdcancelar: TButton;
    dsdoclotes: TDataSource;
    btdmodificar: TButton;
    btdver: TButton;
    qsocios2pais: TWideStringField;
    informes: TfrxReport;
    informedb2: TfrxDBDataset;
    informedb3: TfrxDBDataset;
    informedb4: TfrxDBDataset;
    informedb5: TfrxDBDataset;
    informedb6: TfrxDBDataset;
    informedb7: TfrxDBDataset;
    Memo1: TMemo;
    btddescargar: TButton;
    Panel162: TPanel;
    Label280: TLabel;
    Label281: TLabel;
    Label282: TLabel;
    Label283: TLabel;
    Label284: TLabel;
    Label285: TLabel;
    DBText9: TDBText;
    DBText10: TDBText;
    DBText11: TDBText;
    DBText12: TDBText;
    DBText13: TDBText;
    DBText14: TDBText;
    DBText15: TDBText;
    Label292: TLabel;
    Label305: TLabel;
    DBText17: TDBText;
    Presentaciones1: TMenuItem;
    dsqparcelas2: TDataSource;
    qparcelas2: TZReadOnlyQuery;
    qparcelas2codpar: TWideStringField;
    qparcelas2empresa: TIntegerField;
    qparcelas2nombre: TWideStringField;
    qparcelas2propietario: TIntegerField;
    btVerdocumentos: TButton;
    Timer2: TTimer;
    DBLookupComboBox19: TDBLookupComboBox;
    Label306: TLabel;
    Panel82: TPanel;
    bteborrar: TButton;
    btAnuevo: TButton;
    btAguardar: TButton;
    bteModificar: TButton;
    btecancelar: TButton;
    Panel163: TPanel;
    limporteanticipo: TEdit;
    lopciones: TComboBox;
    lobservaciones: TEdit;
    fechaanticipo: TDateTimePicker;
    Label171: TLabel;
    Label138: TLabel;
    Label45: TLabel;
    Label44: TLabel;
    qparcelas2numero: TWideStringField;
    fechalote: TDateTimePicker;
    Listados1: TMenuItem;
    Entradassalidas: TMenuItem;
    Articulos1: TMenuItem;
    checktodos: TCheckBox;
    qempleadosseleccionado: TIntegerField;
    checktodos2: TCheckBox;
    bteimprimir: TButton;
    listaimpresion: TComboBox;
    dsqauxemp: TDataSource;
    qauxemp: TZReadOnlyQuery;
    qauxempid: TSmallintField;
    qauxempnif: TWideStringField;
    qauxempnombre: TWideStringField;
    qauxempdireccion: TWideStringField;
    qauxemppoblacion: TWideStringField;
    qauxempnumsegsocial: TWideStringField;
    qauxempfechaalta: TDateField;
    qauxempfechabaja: TDateField;
    gridplantillaext: TDBGrid;
    qauxempjorreales: TWideStringField;
    qauxempcausa: TWideStringField;
    qauxempd1: TWideStringField;
    qauxempd2: TWideStringField;
    qauxempd3: TWideStringField;
    qauxempd4: TWideStringField;
    qauxempd5: TWideStringField;
    qauxempd6: TWideStringField;
    qauxempd7: TWideStringField;
    qauxempd8: TWideStringField;
    qauxempd9: TWideStringField;
    qauxempd10: TWideStringField;
    qauxempd11: TWideStringField;
    qauxempd12: TWideStringField;
    qauxempd13: TWideStringField;
    qauxempd14: TWideStringField;
    qauxempd15: TWideStringField;
    qauxempd16: TWideStringField;
    qauxempd17: TWideStringField;
    qauxempd18: TWideStringField;
    qauxempd19: TWideStringField;
    qauxempd20: TWideStringField;
    qauxempd21: TWideStringField;
    qauxempd22: TWideStringField;
    qauxempd23: TWideStringField;
    qauxempd24: TWideStringField;
    qauxempd25: TWideStringField;
    qauxempd26: TWideStringField;
    qauxempd27: TWideStringField;
    qauxempd28: TWideStringField;
    qauxempd29: TWideStringField;
    qauxempd30: TWideStringField;
    qauxempd31: TWideStringField;
    gridplantillacomu: TDBGrid;
    Gruposdeempleados1: TMenuItem;
    qgrupostrabajadores: TZReadOnlyQuery;
    dsqgrupostrabajadores: TDataSource;
    listagrupos2: TDBLookupComboBox;
    dsqgrupostrabajadores2: TDataSource;
    qgrupostrabajadores2: TZReadOnlyQuery;
    qgrupostrabajadores2ide: TIntegerField;
    qgrupostrabajadores2id: TIntegerField;
    qgrupostrabajadores2descripcion: TWideStringField;
    qgrupostrabajadoreside: TIntegerField;
    qgrupostrabajadoresid: TIntegerField;
    qgrupostrabajadoresdescripcion: TWideStringField;
    listagrupos: TDBLookupComboBox;
    DBLookupComboBox12: TDBLookupComboBox;
    ltotalgrupo: TLabel;
    ltotalgrupo2: TLabel;
    ltotalgrupo3: TLabel;
    Panel15: TPanel;
    Panel167: TPanel;
    Panel168: TPanel;
    btatnuevo: TButton;
    btatborrar: TButton;
    btatmodificar: TButton;
    btatguardar: TButton;
    btatcancelar: TButton;
    btatimprimir: TButton;
    btatexcel: TButton;
    panticipos: TPanel;
    Label313: TLabel;
    Label318: TLabel;
    fechaanticipos: TDateTimePicker;
    edimporte: TEdit;
    edconcepto: TEdit;
    Label314: TLabel;
    Label315: TLabel;
    edformapago: TComboBox;
    listainformesanticipos: TComboBox;
    Formasdepago1: TMenuItem;
    Compras1: TMenuItem;
    Utilidades1: TMenuItem;
    RecalculoStocksdearticuloscomponentes1: TMenuItem;
    Comprobararticulosconstockbajo1: TMenuItem;
    N1: TMenuItem;
    EntradasEnvasados1: TMenuItem;
    Inventarios1: TMenuItem;
    ConfiguracinAlmacen1: TMenuItem;
    Panel164: TPanel;
    Label2: TLabel;
    Label3: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label25: TLabel;
    Label54: TLabel;
    Label11: TLabel;
    Label30: TLabel;
    DBEdit1: TDBEdit;
    DBEdit2: TDBEdit;
    DBEdit4: TDBEdit;
    DBEdit5: TDBEdit;
    DBEdit6: TDBEdit;
    DBEdit9: TDBEdit;
    DBEdit22: TDBEdit;
    DBEdit23: TDBEdit;
    DBEdit24: TDBEdit;
    DBEdit25: TDBEdit;
    DBEdit17: TDBEdit;
    DBEdit8: TDBEdit;
    DBEdit27: TDBEdit;
    Panel165: TPanel;
    Panel166: TPanel;
    Label73: TLabel;
    btedocborrar: TButton;
    btedocnuevo: TButton;
    btedocguardar: TButton;
    btedoccancelar: TButton;
    paneldocumentosempleados: TPanel;
    imageempleados: TImage;
    DBGrid75: TDBGrid;
    btedocver2: TButton;
    Memo2: TMemo;
    Button38: TButton;
    xtempleadosIMAGEN: TIntegerField;
    btedocver: TButton;
    OpenDialog1: TOpenDialog;
    Image2: TImage;
    Button1: TButton;
    temp_fotos: TZTable;
    dsempfotos: TDataSource;
    temp_fotoside: TIntegerField;
    temp_fotosidt: TIntegerField;
    temp_fotosimagen: TBlobField;
    qempleadoside: TIntegerField;
    Button2: TButton;
    Label74: TLabel;
    btedocmodificar: TButton;
    dsdocempleados: TDataSource;
    Button6: TButton;
    templeados: TZQuery;
    templeadoside: TIntegerField;
    templeadosID: TSmallintField;
    templeadosNIF: TWideStringField;
    templeadosnombre: TWideStringField;
    templeadosNOMBRECORTO: TWideStringField;
    templeadosAPELLIDOS: TWideStringField;
    templeadosDIRECCION: TWideStringField;
    templeadosCP: TWideStringField;
    templeadosPOBLACION: TWideStringField;
    templeadosPROVINCIA: TWideStringField;
    templeadosFECHANACIMIENTO: TDateField;
    templeadosPAISNAC: TWideStringField;
    templeadosNACIONALIDAD: TWideStringField;
    templeadosSEXO: TWideStringField;
    templeadosCBIBAN: TWideStringField;
    templeadosCBBANCO: TWideStringField;
    templeadosCBOFICINA: TWideStringField;
    templeadosCBDC: TWideStringField;
    templeadosCBCC: TWideStringField;
    templeadosPAGARPORBANCO: TIntegerField;
    templeadosTELEFONO1: TWideStringField;
    templeadosTELEFONO2: TWideStringField;
    templeadosTELEFONO3: TWideStringField;
    templeadosTELEFONO4: TWideStringField;
    templeadosREGIMEN_COT: TWideStringField;
    templeadosNUMSEGSOCIAL: TWideStringField;
    templeadosIRPF: TFloatField;
    templeadosIRPF2: TFloatField;
    templeadosDESEMPLEO: TFloatField;
    templeadosDESEMPLEO2: TFloatField;
    templeadosFORMACION: TFloatField;
    templeadosFORMACION2: TFloatField;
    templeadosIMAGEN: TIntegerField;
    templeadosOBSERVACIONES: TWideStringField;
    templeadosFECHAALTA: TDateField;
    templeadosFECHABAJA: TDateField;
    templeadosFIJO: TSmallintField;
    templeadosFIJODISCONTINUO: TSmallintField;
    templeadosTEMPORAL: TSmallintField;
    templeadosCONTINGENCIAS: TFloatField;
    templeadosempresa: TIntegerField;
    templeadosseleccionado: TIntegerField;
    Label23: TLabel;
    DBEdit26: TDBEdit;
    Label75: TLabel;
    Label307: TLabel;
    DBEdit120: TDBEdit;
    Label308: TLabel;
    ControldeProduccindeAlmacen1: TMenuItem;
    frxPDFExport1: TfrxPDFExport;
    Label309: TLabel;
    DBLookupComboBox13: TDBLookupComboBox;
    DBText8: TDBText;
    qauxemptelefono1: TWideStringField;
    qsocios2nombre: TWideStringField;
    Balancedeventas1: TMenuItem;
    CargasDirectasCampo1: TMenuItem;
    Puestosdetrabajo1: TMenuItem;
    Regmenesdecotizacin1: TMenuItem;
    DatosEmpleados1: TMenuItem;
    Empleados2: TMenuItem;
    N2: TMenuItem;
    Facturacin1: TMenuItem;
    CuentasBancarias1: TMenuItem;
    qarticulocomision: TZReadOnlyQuery;
    dsqarticulocomision: TDataSource;
    dsqarticulotransporte: TDataSource;
    qarticulotransporte: TZReadOnlyQuery;
    dsempresa: TDataSource;
    Panel169: TPanel;
    Label105: TLabel;
    Label162: TLabel;
    Label163: TLabel;
    Label196: TLabel;
    Label202: TLabel;
    Label274: TLabel;
    DBEdit100: TDBEdit;
    DBEdit63: TDBEdit;
    DBEdit99: TDBEdit;
    DBEdit103: TDBEdit;
    DBEdit109: TDBEdit;
    DBEdit190: TDBEdit;
    DBCheckBox43: TDBCheckBox;
    Panel170: TPanel;
    Label93: TLabel;
    Label94: TLabel;
    combocomision: TDBLookupComboBox;
    combotransporte: TDBLookupComboBox;
    DBText18: TDBText;
    DBText19: TDBText;
    Panel116: TPanel;
    Panel171: TPanel;
    Label195: TLabel;
    BTSNCANCELAR: TButton;
    BTSNMODIFICAR: TButton;
    BTSNBORRAR: TButton;
    btSNnuevo: TButton;
    btSNguardar: TButton;
    DBGrid56: TDBGrid;
    qarticulocomisionidempresa: TIntegerField;
    qarticulocomisionid: TIntegerField;
    qarticulocomisioncodigo: TWideStringField;
    qarticulocomisiondescripcion: TWideStringField;
    qarticulotransporteidempresa: TIntegerField;
    qarticulotransporteid: TIntegerField;
    qarticulotransportecodigo: TWideStringField;
    qarticulotransportedescripcion: TWideStringField;
    gcrcheck: TDBCheckBox;
    IdSSLIOHandlerSocketOpenSSL1: TIdSSLIOHandlerSocketOpenSSL;
    Button13: TButton;
    Label95: TLabel;
    DBEdit51: TDBEdit;
    Label96: TLabel;
    combootros: TDBLookupComboBox;
    DBText20: TDBText;
    dsqarticulosotros: TDataSource;
    qarticulosotros: TZReadOnlyQuery;
    IntegerField1: TIntegerField;
    IntegerField2: TIntegerField;
    WideStringField1: TWideStringField;
    WideStringField2: TWideStringField;
    Button23: TButton;
    Button36: TButton;
    DBCheckBox44: TDBCheckBox;
    qempresa: TZReadOnlyQuery;
    qempresaid: TIntegerField;
    qempresacif: TWideStringField;
    qempresanombre: TWideStringField;
    qempresadireccion: TWideStringField;
    qempresacodpost: TWideStringField;
    qempresapoblacion: TWideStringField;
    qempresaprovincia: TWideStringField;
    qempresaemail: TWideStringField;
    qempresatelefono1: TWideStringField;
    qempresatelefono2: TWideStringField;
    qempresacontacto: TWideStringField;
    qempresacontingenciacomfij: TFloatField;
    qempresasalariobasedia: TFloatField;
    qempresacontingenciasdia: TFloatField;
    qempresairpf: TFloatField;
    qempresadesempleo: TFloatField;
    qempresaformacion: TFloatField;
    qempresacontingencias: TFloatField;
    qempresairpf2: TFloatField;
    qempresadesempleo2: TFloatField;
    qempresaformacion2: TFloatField;
    qempresacontingencias2: TFloatField;
    qempresacc_iban: TWideStringField;
    qempresacc_entidad: TWideStringField;
    qempresacc_oficina: TWideStringField;
    qempresacc_dc: TWideStringField;
    qempresacc_cc: TWideStringField;
    qempresaajusteentrada: TIntegerField;
    qempresaajustesalida: TIntegerField;
    qempresaporcbloqueo: TIntegerField;
    qempresaactive: TIntegerField;
    qempresault_envio: TIntegerField;
    qempresaregistro_sanitario: TWideStringField;
    qempresacoste_kg_gen: TFloatField;
    qempresaporc_segsocial: TFloatField;
    qempresaprecio_venta_desperdicios: TFloatField;
    qempresavercodtrazabilidad: TIntegerField;
    qempresacodcomision: TWideStringField;
    qempresacodtransporte: TWideStringField;
    qempresacc_bic: TWideStringField;
    qempresacodotros: TWideStringField;
    qempresaavisarstock: TIntegerField;
    qaux2: TZReadOnlyQuery;
    Formatosdeimpresin1: TMenuItem;
    DBEdit52: TDBEdit;
    Panel88: TPanel;
    Label97: TLabel;
    DBEdit53: TDBEdit;
    Label98: TLabel;
    DBEdit54: TDBEdit;
    Label179: TLabel;
    DBEdit56: TDBEdit;
    Label180: TLabel;
    DBEdit57: TDBEdit;
    Label243: TLabel;
    DBEdit121: TDBEdit;
    Label293: TLabel;
    DBEdit122: TDBEdit;
    Label294: TLabel;
    DBEdit123: TDBEdit;
    Label295: TLabel;
    DBEdit143: TDBEdit;
    Label310: TLabel;
    Controldecalidad1: TMenuItem;
    Expediciones1: TMenuItem;
    Vidacomercial1: TMenuItem;
    Controladoresdecalidad1: TMenuItem;
    Controldeutensilios1: TMenuItem;
    Materiaprima1: TMenuItem;
    DBGrid39: TDBGrid;
    Panel89: TPanel;
    Panel90: TPanel;
    DBLookupComboBox14: TDBLookupComboBox;
    Label311: TLabel;
    Label312: TLabel;
    Label316: TLabel;
    Edit3: TEdit;
    Edit5: TEdit;
    Button37: TButton;
    dscontrolqpartesdiarios: TDataSource;
    Label319: TLabel;
    DBEdit195: TDBEdit;
    Label320: TLabel;
    DBEdit196: TDBEdit;
    Label321: TLabel;
    DBEdit197: TDBEdit;
    Regularizarmaterialauxiliar1: TMenuItem;
    qaux3: TZReadOnlyQuery;
    qregularizar: TZQuery;
    Label99: TLabel;
    DBEdit55: TDBEdit;
    Label317: TLabel;
    Label322: TLabel;
    DBEdit180: TDBEdit;
    Label323: TLabel;
    DBEdit198: TDBEdit;
    Label324: TLabel;
    Button39: TButton;
    DBImage1: TDBImage;
    Label325: TLabel;
    Button40: TButton;
    Button41: TButton;
    Button42: TButton;
    OpenPictureDialog1: TOpenPictureDialog;
    imgfotoe: TImage;
    Label326: TLabel;
    DBEdit199: TDBEdit;
    Label327: TLabel;
    DBEdit200: TDBEdit;
    Label328: TLabel;
    DBEdit201: TDBEdit;
    Label329: TLabel;
    Consumosdemateriales1: TMenuItem;
    ratamientosAbonados1: TMenuItem;
    ratamientos1: TMenuItem;
    N3: TMenuItem;
    tratamientosBase1: TMenuItem;
    AbonadosBase1: TMenuItem;
    Plagasyenfermedades1: TMenuItem;
    Materiasactivas1: TMenuItem;
    Librosdecampo1: TMenuItem;
    Consumosygastos1: TMenuItem;
    Consumosygastos2: TMenuItem;
    Label330: TLabel;
    combofamilias: TDBLookupComboBox;
    qfamilias: TZReadOnlyQuery;
    qfamiliasidempresa: TIntegerField;
    qfamiliasid: TIntegerField;
    qfamiliasdescripcion: TWideStringField;
    dsqfamilias: TDataSource;
    OpenDialog2: TOpenDialog;
    ConectarconSistemPin1: TMenuItem;
    informedb: TfrxDBDataset;
    INFEMPRESA: TfrxDBDataset;
    DBCheckBox45: TDBCheckBox;
    DBEdit202: TDBEdit;
    N10: TMenuItem;
    Utensilios1: TMenuItem;
    Controlcmarasfrigorificas1: TMenuItem;
    Bsculas1: TMenuItem;
    Controldebsculas1: TMenuItem;
    aquillas1: TMenuItem;
    DBCheckBox46: TDBCheckBox;
    DBCheckBox47: TDBCheckBox;
    DBCheckBox48: TDBCheckBox;
    Button43: TButton;
    Button44: TButton;
    dsqalmacenes: TDataSource;
    Panel92: TPanel;
    DBGrid40: TDBGrid;
    Button45: TButton;
    Button46: TButton;
    DBGrid41: TDBGrid;
    Label278: TLabel;
    DBEdit192: TDBEdit;
    Button47: TButton;
    Button48: TButton;
    qtipohora: TZReadOnlyQuery;
    tjornalesempresa: TIntegerField;
    qtipohoracodart: TWideStringField;
    qtipohoraprecio: TFloatField;
    qtipohoradescrip: TWideStringField;
    Panel93: TPanel;
    Label279: TLabel;
    Label331: TLabel;
    Label332: TLabel;
    cdesde: TDateTimePicker;
    chasta: TDateTimePicker;
    Button49: TButton;
    Button50: TButton;
    Button51: TButton;
    dsqgastosparcela: TDataSource;
    qgastosparcela: TZReadOnlyQuery;
    qgastosparcelaparcela: TWideStringField;
    qgastosparcelaCONCEPTO: TWideStringField;
    qgastosparcelacantidad: TFloatField;
    qgastosparcelatotal: TFloatField;
    qgastosparceladescripcion: TWideStringField;
    DBGrid42: TDBGrid;
    Panel94: TPanel;
    Panel95: TPanel;
    Label58: TLabel;
    Label333: TLabel;
    Label334: TLabel;
    qproduccionmesas: TZReadOnlyQuery;
    qproduccionmesasmesa: TWideStringField;
    qproduccionproducto: TZReadOnlyQuery;
    qproduccionmatprima: TZReadOnlyQuery;
    qproduccionproductoproducto: TWideStringField;
    qproduccionmatprimamateria_prima: TWideStringField;
    dsmesas: TDataSource;
    dsproductos: TDataSource;
    dsmatprima: TDataSource;
    comboprodmesas: TDBLookupComboBox;
    comboprodmprimas: TDBLookupComboBox;
    comboprodproducto: TDBLookupComboBox;
    Button52: TButton;
    DBEdit203: TDBEdit;
    Label335: TLabel;
    Label336: TLabel;
    DBEdit204: TDBEdit;
    Label337: TLabel;
    DBEdit205: TDBEdit;
    Label338: TLabel;
    DBEdit206: TDBEdit;
    Label339: TLabel;
    DBEdit207: TDBEdit;
    qparcelas2tiene_gg: TIntegerField;
    qparcelas2sello_gg: TWideStringField;
    qparcelas2tiene_dop: TIntegerField;
    qparcelas2sello_dop: TWideStringField;
    qparcelas2tiene_igp: TIntegerField;
    qparcelas2sello_igp: TWideStringField;
    qparcelas2tiene_ifs: TIntegerField;
    qparcelas2sello_ifs: TWideStringField;
    qparcelas2tiene_brc: TIntegerField;
    qparcelas2sello_brc: TWideStringField;
    DBLookupComboBox7: TDBLookupComboBox;
    qlotesdia: TZReadOnlyQuery;
    dsqlotesdia: TDataSource;
    qlotesdiaidempresa: TIntegerField;
    qlotesdiacodigo: TIntegerField;
    qlotesdiaPARCELA: TWideStringField;
    qlotesdiaPRODUCTOR: TWideStringField;
    qlotesdiaMPRIMA: TWideStringField;
    qcostesrestosdia: TZReadOnlyQuery;
    qcostesrestosdiafecha: TDateField;
    qcostesrestosdiafechalote: TDateField;
    qcostesrestosdialote: TIntegerField;
    qcostesrestosdiabultos: TFloatField;
    qcostesrestosdiapeso_mprima: TFloatField;
    qcostesrestosdiacosto_mprima: TFloatField;
    qcostesrestosdiacostecosechar: TFloatField;
    qcostesrestosdiacostetotal: TFloatField;
    Button53: TButton;
    DBEdit208: TDBEdit;
    DBEdit209: TDBEdit;
    DBEdit210: TDBEdit;
    DBEdit211: TDBEdit;
    Label340: TLabel;
    Label341: TLabel;
    DBEdit212: TDBEdit;
    DBEdit213: TDBEdit;
    DBEdit214: TDBEdit;
    DBEdit215: TDBEdit;
    Label342: TLabel;
    Label343: TLabel;
    DBEdit216: TDBEdit;
    Label344: TLabel;
    Estadodestocks1: TMenuItem;
    Label345: TLabel;
    lnobservaciones: TEdit;
    tjornalesobservaciones: TWideStringField;
    EPIS1: TMenuItem;
    Button54: TButton;
    qempleadosnif: TWideStringField;
    qasistencia: TZQuery;
    dsqasistencia: TDataSource;
    gridasistencia: TDBGrid;
    qasistenciaide: TIntegerField;
    qasistenciaidt: TIntegerField;
    qasistenciaanyo: TIntegerField;
    qasistenciames: TWideStringField;
    qasistencianif: TWideStringField;
    qasistencianombre: TWideStringField;
    qasistenciad1: TWideStringField;
    qasistenciad2: TWideStringField;
    qasistenciad3: TWideStringField;
    qasistenciad4: TWideStringField;
    qasistenciad5: TWideStringField;
    qasistenciad6: TWideStringField;
    qasistenciad7: TWideStringField;
    qasistenciad8: TWideStringField;
    qasistenciad9: TWideStringField;
    qasistenciad10: TWideStringField;
    qasistenciad11: TWideStringField;
    qasistenciad12: TWideStringField;
    qasistenciad13: TWideStringField;
    qasistenciad14: TWideStringField;
    qasistenciad15: TWideStringField;
    qasistenciad16: TWideStringField;
    qasistenciad17: TWideStringField;
    qasistenciad18: TWideStringField;
    qasistenciad19: TWideStringField;
    qasistenciad20: TWideStringField;
    qasistenciad21: TWideStringField;
    qasistenciad22: TWideStringField;
    qasistenciad23: TWideStringField;
    qasistenciad24: TWideStringField;
    qasistenciad25: TWideStringField;
    qasistenciad26: TWideStringField;
    qasistenciad27: TWideStringField;
    qasistenciad28: TWideStringField;
    qasistenciad29: TWideStringField;
    qasistenciad30: TWideStringField;
    qasistenciad31: TWideStringField;
    qasistenciafechaalta: TDateField;
    qasistenciafechabaja: TDateField;
    qasistencianombre2: TWideStringField;
    Label346: TLabel;
    Label347: TLabel;
    Label348: TLabel;
    hdesde: TComboBox;
    hhasta: TComboBox;
    Memo3: TMemo;
    Label349: TLabel;
    DBEdit217: TDBEdit;
    N11: TMenuItem;
    Boquillas1: TMenuItem;
    Maquinria1: TMenuItem;
    CondicionesMeteorolgicas1: TMenuItem;
    TabSheet21: TTabSheet;
    Panel96: TPanel;
    Button57: TButton;
    DBGrid43: TDBGrid;
    qlistadoporgrupo: TZReadOnlyQuery;
    qlistadoporgrupofecha: TDateField;
    qlistadoporgrupoparcela: TWideStringField;
    qlistadoporgrupotypework: TWideStringField;
    qlistadoporgrupototalhoras: TFloatField;
    qlistadoporgrupoprecio: TFloatField;
    qlistadoporgrupototal: TFloatField;
    qlistadoporgrupogrupo: TWideStringField;
    dsqlistadoporgrupo: TDataSource;
    Label350: TLabel;
    Label351: TLabel;
    vfechadesdelg: TDateTimePicker;
    vfechahastalg: TDateTimePicker;
    Button58: TButton;
    tbjornadas: TTabSheet;
    Panel97: TPanel;
    Label352: TLabel;
    Label353: TLabel;
    Button56: TButton;
    vdesdejornadas: TDateTimePicker;
    vhastajornadas: TDateTimePicker;
    Button59: TButton;
    DBGrid76: TDBGrid;
    dsqasistir: TDataSource;
    qticados: TZQuery;
    dsqticados: TDataSource;
    qticadosidt: TIntegerField;
    qticadosfecha: TDateField;
    qticadosnombre: TWideStringField;
    qticadosnif: TWideStringField;
    qticadoside: TIntegerField;
    qasistir: TZQuery;
    qasistiride: TIntegerField;
    qasistiridt: TIntegerField;
    qasistiranyo: TIntegerField;
    qasistirmes: TWideStringField;
    qasistirnif: TWideStringField;
    qasistirnombre: TWideStringField;
    qasistird1: TWideStringField;
    qasistird2: TWideStringField;
    qasistird3: TWideStringField;
    qasistird4: TWideStringField;
    qasistird5: TWideStringField;
    qasistird6: TWideStringField;
    qasistird7: TWideStringField;
    qasistird8: TWideStringField;
    qasistird9: TWideStringField;
    qasistird10: TWideStringField;
    qasistird11: TWideStringField;
    qasistird12: TWideStringField;
    qasistird13: TWideStringField;
    qasistird14: TWideStringField;
    qasistird15: TWideStringField;
    qasistird16: TWideStringField;
    qasistird17: TWideStringField;
    qasistird18: TWideStringField;
    qasistird19: TWideStringField;
    qasistird20: TWideStringField;
    qasistird21: TWideStringField;
    qasistird22: TWideStringField;
    qasistird23: TWideStringField;
    qasistird24: TWideStringField;
    qasistird25: TWideStringField;
    qasistird26: TWideStringField;
    qasistird27: TWideStringField;
    qasistird28: TWideStringField;
    qasistird29: TWideStringField;
    qasistird30: TWideStringField;
    qasistird31: TWideStringField;
    qasistirfechaalta: TDateField;
    qasistirfechabaja: TDateField;
    qasistirnombre2: TWideStringField;
    Envasadoscampovariedad1: TMenuItem;
    Consumosdefitosanitarios1: TMenuItem;
    Consumosabonos1: TMenuItem;
    Stockdealmacen1: TMenuItem;
    IFG1: TMenuItem;
    TabSheet25: TTabSheet;
    Button55: TButton;
    btncargarcertificados: TButton;
    cbCertificados: TDBComboBox;
    xtempleadosgrupo: TIntegerField;
    xtempleadosactivo: TIntegerField;
    xtempleadoscontrolcalidad: TIntegerField;
    xtempleadoshorascontrato: TFloatField;
    xtempleadosnum_taquilla: TIntegerField;
    xtempleadosemail: TWideStringField;
    xtempleadosconvocatoria: TWideStringField;
    templeadosgrupo: TIntegerField;
    templeadoscodart: TWideStringField;
    templeadosactivo: TIntegerField;
    templeadoscontrolcalidad: TIntegerField;
    templeadoshorascontrato: TFloatField;
    templeadosnum_taquilla: TIntegerField;
    templeadosemail: TWideStringField;
    templeadosconvocatoria: TWideStringField;
    Label354: TLabel;
    DBEdit218: TDBEdit;
    Label355: TLabel;
    DBEdit219: TDBEdit;
    Label356: TLabel;
    DBEdit220: TDBEdit;
    Label358: TLabel;
    DBEdit222: TDBEdit;
    Albaranes1: TMenuItem;
    Facturas1: TMenuItem;
    qempleadoscuenta: TWideStringField;
    qasistenciacuenta: TWideStringField;
    qasistenciatotalhoras: TWideStringField;

    procedure BSalirClick(Sender: TObject);
    procedure PEmpleadosClick(Sender: TObject);
    procedure qempleadosBeforeOpen(DataSet: TDataSet);
    procedure ZReadOnlyQuery1BeforeOpen(DataSet: TDataSet);
    procedure fbajaCloseUp(Sender: TObject);
    procedure dsqtrabajadoresDataChange(Sender: TObject; Field: TField);
    procedure btinsertarClick(Sender: TObject);
    procedure TanyoChange(Sender: TObject);
    procedure TMESChange(Sender: TObject);
    procedure TESTADOChange(Sender: TObject);
    procedure DBGrid3CellClick(Column: TColumn);
    procedure dstrabajadoresStateChange(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure faltaCloseUp(Sender: TObject);
    procedure DBMemo1Exit(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure bmodificarjornalesClick(Sender: TObject);
    procedure bborrarjornalesClick(Sender: TObject);
    procedure DBGrid2CellClick(Column: TColumn);
    procedure baceptarClick(Sender: TObject);
    procedure BtEmpleadosClick(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure lprecioEnter(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure BtjornalesClick(Sender: TObject);
    procedure DBGrid4DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    procedure btproduccionClick(Sender: TObject);
    procedure baceptarempleadosClick(Sender: TObject);
    procedure bcancelarempleadosClick(Sender: TObject);
    procedure bcancelarjornalClick(Sender: TObject);
    procedure dsqtipohoraDataChange(Sender: TObject; Field: TField);
    procedure Vaciar2Click(Sender: TObject);
    procedure VaciarClick(Sender: TObject);
    procedure DBGrid4CellClick(Column: TColumn);
    procedure DBGrid4KeyPress(Sender: TObject; var Key: Char);
    procedure CargarPickListTipoHoras;
    procedure DBGrid2DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    procedure DBGrid5CellClick(Column: TColumn);
    procedure DBGrid5DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    procedure calendarionotasClick(Sender: TObject);
    procedure btAgendaClick(Sender: TObject);
    procedure btempresaClick(Sender: TObject);
    procedure btJimprimirClick(Sender: TObject);
    procedure btvalorarClick(Sender: TObject);
    procedure tmes2Change(Sender: TObject);
    procedure DBGrid3DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    procedure DBEdit8Exit(Sender: TObject);
    procedure DBEdit27Exit(Sender: TObject);
    procedure bpranadirClick(Sender: TObject);
    procedure bprcancelarClick(Sender: TObject);
    procedure bpraceptarClick(Sender: TObject);
    procedure bprmodificarClick(Sender: TObject);
    procedure bprborrarClick(Sender: TObject);
    procedure bmpanadirClick(Sender: TObject);
    procedure bmpmodificarClick(Sender: TObject);
    procedure bmpborrarClick(Sender: TObject);
    procedure bmpcancelarClick(Sender: TObject);
    procedure bmpaceptarClick(Sender: TObject);
    procedure bthanadirClick(Sender: TObject);
    procedure bthmodificarClick(Sender: TObject);
    procedure bthborrarClick(Sender: TObject);
    procedure bthcancelarClick(Sender: TObject);
    procedure bthaceptarClick(Sender: TObject);
    procedure tbuscarChange(Sender: TObject);
    procedure ltipohoraExit(Sender: TObject);
    procedure bttanadirClick(Sender: TObject);
    procedure bttmodificarClick(Sender: TObject);
    procedure bttborrarClick(Sender: TObject);
    procedure bttcancelarClick(Sender: TObject);
    procedure bttaceptarClick(Sender: TObject);
    procedure btaanadirClick(Sender: TObject);
    procedure btamodificarClick(Sender: TObject);
    procedure btacancelarClick(Sender: TObject);
    procedure btaaceptarClick(Sender: TObject);
    procedure btaborrarClick(Sender: TObject);
    procedure fprohastaChange(Sender: TObject);
    procedure dsqmesasDataChange(Sender: TObject; Field: TField);
    procedure Timer1Timer(Sender: TObject);
    procedure fprodesdeChange(Sender: TObject);
    procedure DBGrid19DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    procedure DBGrid19DblClick(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure DBCheckBox16MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure DBCheckBox15MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure DBCheckBox14MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure DBCheckBox13MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure PageproduccionChange(Sender: TObject);
    procedure btcontrolprodcerrarClick(Sender: TObject);
    procedure Button16Click(Sender: TObject);
    procedure Button15Click(Sender: TObject);
    procedure btcontrolproduccionClick(Sender: TObject);
    procedure bccanadirClick(Sender: TObject);
    procedure bccmodificarClick(Sender: TObject);
    procedure bccborrarClick(Sender: TObject);
    procedure finicioCloseUp(Sender: TObject);
    procedure ffinCloseUp(Sender: TObject);
    procedure bcanadirClick(Sender: TObject);
    procedure bcmodificarClick(Sender: TObject);
    procedure bcborrarClick(Sender: TObject);
    procedure bccancelarClick(Sender: TObject);
    procedure bcaceptarClick(Sender: TObject);
    procedure bccaceptarClick(Sender: TObject);
    procedure bcccancelarClick(Sender: TObject);
    procedure beanadirClick(Sender: TObject);
    procedure bemodificarClick(Sender: TObject);
    procedure beborrarClick(Sender: TObject);
    procedure becancelarClick(Sender: TObject);
    procedure beaceptarClick(Sender: TObject);
    procedure CheckBox1Click(Sender: TObject);
    procedure nomlhdesdeChange(Sender: TObject);
    procedure DBGrid26DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    procedure DBGrid26CellClick(Column: TColumn);
    procedure DBGrid25DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    procedure DBGrid25CellClick(Column: TColumn);
    procedure CheckBox7Click(Sender: TObject);
    procedure CheckBox8Click(Sender: TObject);
    procedure Button10Click(Sender: TObject);
    procedure Button9Click(Sender: TObject);
    procedure nomlttdesdeChange(Sender: TObject);
    procedure DBGrid29CellClick(Column: TColumn);
    procedure DBGrid29DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    procedure CheckBox9Click(Sender: TObject);
    procedure CheckBox10Click(Sender: TObject);
    procedure DBGrid28CellClick(Column: TColumn);
    procedure DBGrid28DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    procedure CheckBox11Click(Sender: TObject);
    procedure DBGrid7CellClick(Column: TColumn);
    procedure DBGrid7DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    procedure Button11Click(Sender: TObject);
    procedure Button14Click(Sender: TObject);
    procedure Button12Click(Sender: TObject);
    procedure BTLaceptarClick(Sender: TObject);
    procedure pagnomfechahastaChange(Sender: TObject);
    procedure pagnomfechadesdeChange(Sender: TObject);
    procedure Panel71Click(Sender: TObject);
    procedure Nominaspag4Enter(Sender: TObject);
    procedure Button17Click(Sender: TObject);
    procedure PageNominasChange(Sender: TObject);
    procedure nomltthastaChange(Sender: TObject);
    procedure CheckBox12Click(Sender: TObject);
    procedure Button18Click(Sender: TObject);
    procedure bttrazabilidadClick(Sender: TObject);
    procedure BTLNuevoClick(Sender: TObject);
    procedure BTLcancelarClick(Sender: TObject);
    procedure dlotesfcaducidadExit(Sender: TObject);
    procedure dlotescodigoExit(Sender: TObject);
    procedure dlotesftrabajoExit(Sender: TObject);
    procedure dlotesfechaetiquetaExit(Sender: TObject);
    procedure BTLModificarClick(Sender: TObject);
    procedure btexpedicionesClick(Sender: TObject);
    procedure PageDatosEmpresaChange(Sender: TObject);
    procedure PagedatosChange(Sender: TObject);
    procedure baanadirClick(Sender: TObject);
    procedure bamodificarClick(Sender: TObject);
    procedure baborrarClick(Sender: TObject);
    procedure bacancelarClick(Sender: TObject);
    procedure baaceptarClick(Sender: TObject);
    procedure bteaanadirClick(Sender: TObject);
    procedure bteamodificarClick(Sender: TObject);
    procedure bteaborrarClick(Sender: TObject);
    procedure bteacancelarClick(Sender: TObject);
    procedure bteaaceptarClick(Sender: TObject);
    procedure btactualizarClick(Sender: TObject);
    procedure Button19Click(Sender: TObject);
    procedure btJexcelClick(Sender: TObject);
    procedure Button21Click(Sender: TObject);
    procedure Button20Click(Sender: TObject);
    procedure btactualizarempleadosnominasClick(Sender: TObject);
    procedure Button24Click(Sender: TObject);
    procedure DBGrid44DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    procedure btcerrarClick(Sender: TObject);
    procedure bticierreClick(Sender: TObject);
    procedure DBGrid60DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    procedure bteimprimirClick(Sender: TObject);
    procedure DBGrid32DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    procedure DBGrid32CellClick(Column: TColumn);
    procedure listaanyosChange(Sender: TObject);
    procedure listamesesChange(Sender: TObject);
    procedure Button25Click(Sender: TObject);
    procedure DBGrid33DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    procedure DBEdit145Exit(Sender: TObject);
    procedure PageproduccionEnter(Sender: TObject);
    procedure btprodaceptarClick(Sender: TObject);
    procedure Button26Click(Sender: TObject);
    procedure Button27Click(Sender: TObject);
    procedure DBGrid59DblClick(Sender: TObject);
    procedure DBLookupComboBox7CloseUp(Sender: TObject);
    procedure DBGrid60DblClick(Sender: TObject);
    procedure Button23Click(Sender: TObject);
    procedure DBGrid68DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    procedure Button28Click(Sender: TObject);
    procedure bmpc_anyadirClick(Sender: TObject);
    procedure bmpc_aceptarClick(Sender: TObject);
    procedure bmpc_borrarClick(Sender: TObject);
    procedure DBGrid21Exit(Sender: TObject);
    procedure DBGrid38DblClick(Sender: TObject);
    procedure DBGrid36DblClick(Sender: TObject);
    procedure DBGrid55DblClick(Sender: TObject);
    procedure chktodosproductosClick(Sender: TObject);
    procedure chktodasmateriasprimasClick(Sender: TObject);
    procedure chktodashorasClick(Sender: TObject);
    procedure chktodostrabajosClick(Sender: TObject);
    procedure chktodostrabajosalmacenClick(Sender: TObject);
    procedure chktodoscentroscosteClick(Sender: TObject);
    procedure chktodosalmacenesClick(Sender: TObject);
    procedure chktodosenvasesalmacenClick(Sender: TObject);
    procedure Clientes1Click(Sender: TObject);
    procedure EnvasesAlmacen1Click(Sender: TObject);
    procedure PedidosClientes1Click(Sender: TObject);
    procedure Salir1Click(Sender: TObject);
    procedure Button29Click(Sender: TObject);
    procedure DBGrid68DblClick(Sender: TObject);
    procedure DBGrid33DblClick(Sender: TObject);
    procedure Controlhorario1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure ArticulosComponentes1Click(Sender: TObject);
    procedure DBEdit116Enter(Sender: TObject);
    procedure tbuscarlotesChange(Sender: TObject);
    procedure tbuscarnominasChange(Sender: TObject);
    procedure chktodosempleadosClick(Sender: TObject);
    procedure Button8Click(Sender: TObject);
    procedure Button22Click(Sender: TObject);
    procedure PageDatosEmpresaEnter(Sender: TObject);
    procedure btSNnuevoClick(Sender: TObject);
    procedure BTSNBORRARClick(Sender: TObject);
    procedure BTSNMODIFICARClick(Sender: TObject);
    procedure btSNguardarClick(Sender: TObject);
    procedure BTSNCANCELARClick(Sender: TObject);
    procedure DBGrid46DblClick(Sender: TObject);
    procedure DBGrid69DblClick(Sender: TObject);
    procedure tbuscarparcelasChange(Sender: TObject);
    procedure Proveedores1Click(Sender: TObject);
    procedure EntradasMateriales1Click(Sender: TObject);
    procedure Button30Click(Sender: TObject);
    procedure TiposdeImpuestos1Click(Sender: TObject);
    procedure GruposFamilias1Click(Sender: TObject);
    procedure CalibresCalidades1Click(Sender: TObject);
    procedure SociosProductores1Click(Sender: TObject);
    procedure btPnuevoClick(Sender: TObject);
    procedure btMmodificarClick(Sender: TObject);
    procedure btLguardarClick(Sender: TObject);
    procedure btPcancelarClick(Sender: TObject);
    procedure btLImprimirClick(Sender: TObject);
    procedure Button35Click(Sender: TObject);
    procedure dsqlotesStateChange(Sender: TObject);
    procedure btdnuevoClick(Sender: TObject);
    procedure dsdoclotesStateChange(Sender: TObject);
    procedure btdguardarClick(Sender: TObject);
    procedure dsdoclotesDataChange(Sender: TObject; Field: TField);
    procedure btdverClick(Sender: TObject);
    procedure btdmodificarClick(Sender: TObject);
    procedure btdborrarClick(Sender: TObject);
    procedure btdcancelarClick(Sender: TObject);
    procedure imgfotoClick(Sender: TObject);
    procedure DBLookupComboBox18Exit(Sender: TObject);
    procedure btddescargarClick(Sender: TObject);
    procedure Presentaciones1Click(Sender: TObject);
    procedure dsqsocios2DataChange(Sender: TObject; Field: TField);
    procedure btVerdocumentosClick(Sender: TObject);
    procedure Timer2Timer(Sender: TObject);
    procedure MateriasPrimas1Click(Sender: TObject);
    procedure btEnuevoClick(Sender: TObject);
    procedure bteborrarClick(Sender: TObject);
    procedure bteModificarClick(Sender: TObject);
    procedure btAguardarClick(Sender: TObject);
    procedure fechaloteCloseUp(Sender: TObject);
    procedure fechaloteEnter(Sender: TObject);
    procedure checktodosClick(Sender: TObject);
    procedure DBGrid64DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    procedure DBGrid64CellClick(Column: TColumn);
    procedure btJnuevoClick(Sender: TObject);
    procedure btJguardarClick(Sender: TObject);
    procedure ljhoraCloseUp(Sender: TObject);
    procedure btJborrarClick(Sender: TObject);
    procedure btJmodificarClick(Sender: TObject);
    procedure btJcancelarClick(Sender: TObject);
    procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    procedure DBGrid1CellClick(Column: TColumn);
    procedure checktodos2Click(Sender: TObject);
    procedure Gruposdeempleados1Click(Sender: TObject);
    procedure DBEdit9Exit(Sender: TObject);
    procedure listagrupos2CloseUp(Sender: TObject);
    procedure AlbaranesClientes1Click(Sender: TObject);
    procedure DBGrid1TitleClick(Column: TColumn);
    procedure DBGrid64TitleClick(Column: TColumn);
    procedure DBLookupComboBox12CloseUp(Sender: TObject);
    procedure FacturasClientes1Click(Sender: TObject);
    procedure qempleadosAfterOpen(DataSet: TDataSet);
    procedure btatnuevoClick(Sender: TObject);
    procedure btatmodificarClick(Sender: TObject);
    procedure btatguardarClick(Sender: TObject);
    procedure btatborrarClick(Sender: TObject);
    procedure btatcancelarClick(Sender: TObject);
    procedure btatexcelClick(Sender: TObject);
    procedure btatimprimirClick(Sender: TObject);
    procedure EntradassalidasClick(Sender: TObject);
    procedure DBGrid5TitleClick(Column: TColumn);
    procedure DBGrid4TitleClick(Column: TColumn);
    procedure Formasdepago1Click(Sender: TObject);
    procedure Articulos1Click(Sender: TObject);
    procedure Compras1Click(Sender: TObject);
    procedure RecalculoStocksdearticuloscomponentes1Click(Sender: TObject);
    procedure Comprobararticulosconstockbajo1Click(Sender: TObject);
    procedure EntradasEnvasados1Click(Sender: TObject);
    procedure Inventarios1Click(Sender: TObject);
    procedure ConfiguracinAlmacen1Click(Sender: TObject);
    procedure btedocnuevoClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure btedocverClick(Sender: TObject);
    procedure btedocmodificarClick(Sender: TObject);
    procedure btedocborrarClick(Sender: TObject);
    procedure btedocguardarClick(Sender: TObject);
    procedure btedoccancelarClick(Sender: TObject);
    procedure dsdocempleadosDataChange(Sender: TObject; Field: TField);
    procedure dsdocempleadosStateChange(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure TabJornalesEnter(Sender: TObject);
    procedure DBGrid8TitleClick(Column: TColumn);
    procedure ControldeProduccindeAlmacen1Click(Sender: TObject);
    procedure Balancedeventas1Click(Sender: TObject);
    procedure CargasDirectasCampo1Click(Sender: TObject);
    procedure Envasadoscampovariedad1Click(Sender: TObject);
    procedure Puestosdetrabajo1Click(Sender: TObject);
    procedure Regmenesdecotizacin1Click(Sender: TObject);
    procedure Empleados2Click(Sender: TObject);
    procedure CuentasBancarias1Click(Sender: TObject);
    procedure dsempresaStateChange(Sender: TObject);
    procedure DBGrid56DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    procedure DBGrid56CellClick(Column: TColumn);
    procedure Button13Click(Sender: TObject);
    procedure Button36Click(Sender: TObject);
    procedure Formatosdeimpresin1Click(Sender: TObject);
    procedure Regularizarmaterialauxiliar1Click(Sender: TObject);
    procedure Expediciones1Click(Sender: TObject);
    procedure Button42Click(Sender: TObject);
    procedure Button41Click(Sender: TObject);
    procedure Button40Click(Sender: TObject);
    procedure Consumosdemateriales1Click(Sender: TObject);
    procedure Materiaprima1Click(Sender: TObject);
    procedure Vidacomercial1Click(Sender: TObject);
    procedure tratamientosBase1Click(Sender: TObject);
    procedure ratamientos1Click(Sender: TObject);
    procedure AbonadosBase1Click(Sender: TObject);
    procedure Consumosygastos2Click(Sender: TObject);
    procedure ConectarconSistemPin1Click(Sender: TObject);
    procedure Utensilios1Click(Sender: TObject);
    procedure Controldeutensilios1Click(Sender: TObject);
    procedure Bsculas1Click(Sender: TObject);
    procedure Controldebsculas1Click(Sender: TObject);
    procedure Controlcmarasfrigorificas1Click(Sender: TObject);
    procedure aquillas1Click(Sender: TObject);
    procedure Controladoresdecalidad1Click(Sender: TObject);
    procedure Button43Click(Sender: TObject);
    procedure Button44Click(Sender: TObject);
    procedure dsqalmacenesDataChange(Sender: TObject; Field: TField);
    procedure Button45Click(Sender: TObject);
    procedure DBGrid41DblClick(Sender: TObject);
    procedure Button47Click(Sender: TObject);
    procedure Button48Click(Sender: TObject);
    procedure Button49Click(Sender: TObject);
    procedure PageControl2Change(Sender: TObject);
    procedure Button50Click(Sender: TObject);
    procedure Button51Click(Sender: TObject);
    procedure Button52Click(Sender: TObject);
    procedure comboprodmesasCloseUp(Sender: TObject);
    procedure comboprodmprimasCloseUp(Sender: TObject);
    procedure comboprodproductoCloseUp(Sender: TObject);
    procedure dsqparcelas2DataChange(Sender: TObject; Field: TField);
    procedure Button53Click(Sender: TObject);
    procedure Librosdecampo1Click(Sender: TObject);
    procedure Estadodestocks1Click(Sender: TObject);
    procedure EPIS1Click(Sender: TObject);
    procedure Button54Click(Sender: TObject);
    procedure hdesdeCloseUp(Sender: TObject);
    procedure hhastaCloseUp(Sender: TObject);
    procedure Button55Click(Sender: TObject);
    procedure Boquillas1Click(Sender: TObject);
    procedure Maquinria1Click(Sender: TObject);
    procedure CondicionesMeteorolgicas1Click(Sender: TObject);
    procedure Campaas1Click(Sender: TObject);
    procedure TabSheet21Enter(Sender: TObject);
    procedure Button58Click(Sender: TObject);
    procedure Button57Click(Sender: TObject);
    procedure Button59Click(Sender: TObject);
    procedure tbjornadasEnter(Sender: TObject);
    procedure Button56Click(Sender: TObject);
    procedure Consumosdefitosanitarios1Click(Sender: TObject);
    procedure Stockdealmacen1Click(Sender: TObject);
    procedure IFG1Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure cbCertificadosDropDown(Sender: TObject);
    procedure CursosyDocumentos1Click(Sender: TObject);
    procedure Albaranes1Click(Sender: TObject);
    procedure Facturas1Click(Sender: TObject);


  private
    { Private declarations }
  public
    { Public declarations }

    procedure AppMessage(var Msg: Tmsg; var Handled: Boolean);
    procedure ExportaraExcel(FileNameXLS, SheetName: String; DBGrid: TDBGrid;
      ProgressBarXls: TProgressBar = nil);
    procedure MostrarPesadas(const idPesada: string);

  end;

var
  BASE: TBASE;
  filtrotrabajadores, todostrabajadores, tlimitado, filtrolotes,
    filtroparcelas: string;
  vtactivo: Integer;

const
  rojo = $00AAAAFF;
  amarillo = $00B9FFFF;
  verde = $00C7FBAA;
  azul = $00FFFFBB;
function borrarficheros(carpeta: string): Boolean;

implementation

uses datos, datostrazabilidad2, datosestadisticas, datosproduccion,
  datosnominas, fechacierre,
  pesadas, fclientes, fenvases_almacen, fentradas, fpedidos, fticados,
  fproveedores, tipos_impuestos, gruposfamilias, calibrescalidad, fproductores,
  farticulo, farticulos, fpresentaciones, fgenericas, fgrupos_trabajadores,
  falbaranes, ffacturas, fimpresionmovimientos, formaspago,
  fimpresionarticuloscomponentes, fimpresionentradas, frecalculostock,
  fcontrolminimos, fcontrolstock, fconfiguracionalmacen, fcontrolproduccion,
  fbalanceventas, fDirectasCampo, puestos_trabajo, regimen_cotizacion, empleados,
  cuentasbancarias, fformularios, fcc_expediciones,
  fimpresionconsumos, fcc_materiasprimas, fcc_vidacomercial, fconsumos,
  ftratamientosbase, ftratamientos, fproductosfitosanitarios, fconfirmar,
  fImportarPresenciaPin, futensilios, fcc_utensilios, fbasculas, fcc_basculas,
  fcc_camaras, ftaquillas, fcc_controlproducto, fcostesrestos, fcuadernos,
  fconsumosfito, fepis, fboquillas, fvehiculos, fmeteorologia, fusuarios,
  fstockalmacen, fconsumosfitoparcelas, flogin,certificatemanager,
  uCursosDocumentos, uProvFacturas, uProvAlbaranes, flistado_ifg;

{$R *.dfm}

function borrarficheros(carpeta: string): Boolean;
var
  SearchRec: TSearchRec;
begin
  try
    if FindFirst(carpeta + '*.*', faAnyFile, SearchRec) = 0 then
      repeat
        Deletefile(carpeta + SearchRec.name);
      until (FindNext(SearchRec) <> 0);
    FindClose(SearchRec);
    result := true;
  except
    result := false;
  end;
end;

Function CantidadEnLetra(curCantidad: Currency; MonNal: Integer): String;
var
  i: Integer;
  Cantidad, Centimos: Currency;
  BloqueCero, NumeroBloques, Digito: Byte;
  PrimerDigito, SegundoDigito, TercerDigito: Byte;
  Resultado, Temp, strCentimos, Bloque: String;
  Unidades: Array [0 .. 28] of String;
  Decenas: Array [0 .. 9] of String;
  Centenas: Array [0 .. 9] of String;
begin

  Unidades[0] := 'UN';
  Unidades[1] := 'DOS';
  Unidades[2] := 'TRES';
  Unidades[3] := 'CUATRO';
  Unidades[4] := 'CINCO';
  Unidades[5] := 'SEIS';
  Unidades[6] := 'SIETE';
  Unidades[7] := 'OCHO';
  Unidades[8] := 'NUEVE';
  Unidades[9] := 'DIEZ';
  Unidades[10] := 'ONCE';
  Unidades[11] := 'DOCE';
  Unidades[12] := 'TRECE';
  Unidades[13] := 'CATORCE';
  Unidades[14] := 'QUINCE';
  Unidades[15] := 'DIECISEIS';
  Unidades[16] := 'DIECISIETE';
  Unidades[17] := 'DIECIOCHO';
  Unidades[18] := 'DIECINUEVE';
  Unidades[19] := 'VEINTE';
  Unidades[20] := 'VEINTIUNO';
  Unidades[21] := 'VEINTIDOS';
  Unidades[22] := 'VEINTITRES';
  Unidades[23] := 'VEINTICUATRO';
  Unidades[24] := 'VEINTICINCO';
  Unidades[25] := 'VEINTISEIS';
  Unidades[26] := 'VEINTISIETE';
  Unidades[27] := 'VEINTIOCHO';
  Unidades[28] := 'VEINTINUEVE';

  Decenas[0] := 'DIEZ';
  Decenas[1] := 'VEINTE';
  Decenas[2] := 'TREINTA';
  Decenas[3] := 'CUARENTA';
  Decenas[4] := 'CINCUENTA';
  Decenas[5] := 'SESENTA';
  Decenas[6] := 'SETENTA';
  Decenas[7] := 'OCHENTA';
  Decenas[8] := 'NOVENTA';
  Decenas[9] := 'CIEN';

  Centenas[0] := 'CIENTO';
  Centenas[1] := 'DOSCIENTOS';
  Centenas[2] := 'TRESCIENTOS';
  Centenas[3] := 'CUATROCIENTOS';
  Centenas[4] := 'QUINIENTOS';
  Centenas[5] := 'SEISCIENTOS';
  Centenas[6] := 'SETECIENTOS';
  Centenas[7] := 'OCHOCIENTOS';
  Centenas[8] := 'NOVECIENTOS';

  Cantidad := Trunc(curCantidad);
  Centimos := (curCantidad - Cantidad) * 100;
  NumeroBloques := 1;
  Repeat
    PrimerDigito := 0;
    SegundoDigito := 0;
    TercerDigito := 0;
    Bloque := '';
    BloqueCero := 0;
    For i := 1 To 3 do
    begin
      Digito := Round(Cantidad) Mod 10;
      If Digito <> 0 Then
      begin
        Case i of
          1:
            begin
              if NumeroBloques = 2 then
                Bloque := ''
              else
                Bloque := ' ' + Unidades[Digito - 1];
              PrimerDigito := Digito;
            end; // case 1
          2:
            begin
              If Digito <= 2 Then
              begin
                Bloque := ' ' + Unidades[(Digito * 10 + PrimerDigito - 1)];
              end
              Else
              begin
                If PrimerDigito <> 0 then
                  Temp := ' Y'
                else
                  Temp := '';
                Bloque := ' ' + Decenas[Digito - 1] + Temp + Bloque;
              End; // if
              SegundoDigito := Digito;
            end; // case 2
          3:
            begin
              If (Digito = 1) and (PrimerDigito = 0) and (SegundoDigito = 0)
              then
                Temp := 'CIEN'
              else
                Temp := Centenas[Digito - 1];
              Bloque := ' ' + Temp + Bloque;
              TercerDigito := Digito;
            end; // case 3
        End; // case
      end
      else
      begin
        BloqueCero := BloqueCero + 1;
      End; // If Digito <>0
      Cantidad := Int(Cantidad / 10);
      If Cantidad = 0 Then
      begin
        Break;
      End; // If Cantidad=0
    end; // for
    Case NumeroBloques of
      1:
        Resultado := Bloque;
      2:
        begin
          if BloqueCero = 3 then
            Temp := 'MIL'
          else
            Temp := ' MIL';
          Resultado := Bloque + Temp + Resultado;
        end; // case 2
      3:
        begin
          If (PrimerDigito = 1) and (SegundoDigito = 0) and (TercerDigito = 0)
          then
            Temp := ' MILLON'
          else
            Temp := ' MILLONES';
          Resultado := Bloque + Temp + Resultado;
        end; // case 3
    End; // case
    NumeroBloques := NumeroBloques + 1;
  Until Cantidad = 0; // repeat
  case MonNal of
    0:
      begin
        If curCantidad > 1 then
          Temp := ' CENTIMOS ***'
        else
          Temp := ' CENTIMO ***';
        CantidadEnLetra := Resultado + Temp;

      end;
    1:
      begin
        If curCantidad > 1 then
          Temp := ' EUROS '
        else
          Temp := ' EURO ';
        if Centimos = 0 then
          strCentimos := ''
        else
          strCentimos := 'CON ' + CantidadEnLetra(Centimos, 0);
        CantidadEnLetra := '***' + Resultado + Temp + strCentimos + '***';
      end;
    2:
      begin
        If curCantidad > 1 then
          Temp := ' DOLARS '
        else
          Temp := ' DOLAR ';
        if Centimos = 0 then
          strCentimos := ''
        else
          strCentimos := 'CON ' + CantidadEnLetra(Centimos, 0);
        CantidadEnLetra := '***' + Resultado + Temp + strCentimos;
      end;
  end;
End;

Function strFormatDecimal(strNum: String): String;
// FUNCI�N PARA AGREGAR UNA COMA Y EVITAR EL ERROR DE EXCEPCION
begin
  if (AnsiPos('.', strNum) <> 0) then
    strNum := Copy(strNum, 0, AnsiPos('.', strNum) - 1) + ',' +
      Copy(strNum, AnsiPos('.', strNum) + 1,
      Length(strNum) - AnsiPos('.', strNum));
  if strNum = '' then
    strNum := '0';
  strFormatDecimal := strNum;
end;

function Letra(Numero: Integer): string;
begin
  result := Copy('TRWAGMYFPDXBNJZSQVHLCKET', 1 + Numero mod 23, 1);
end;

function EsNif(NIF: String): Boolean;
var
  Numero: Integer;
begin
  result := false;
  if TryStrToInt(Copy(NIF, 1, Length(NIF) - 1), Numero) then
    result := Uppercase(Copy(NIF, Length(NIF), 1)) = Letra(Numero);
end;

function EsNumero(Num: Char): Boolean;
begin
  try
    StrToInt(Num);
    result := true;
  Except
    result := false;
  end;
end;

function CadCambioCar(Cadena, CarOrig, CarCambio: String): String;
var
  i: Integer;
  Temp: String;
begin
  Temp := '';
  for i := 1 to Length(Cadena) do
    if Copy(Cadena, i, 1) = CarOrig then
      Temp := Temp + CarCambio
    else
      Temp := Temp + Copy(Cadena, i, 1);
  result := Temp;
end;

function EsCif(Cif: String): Boolean;
var
  Suma, Control: Integer;
  n: Byte;
begin
  result := false;
  { Se pasa todo a may�sculas limpio de espacios y de caracteres especiales }
  Cif := Uppercase(Trim(Cif));
  { Se limpia de los caracteres '-' y '/'. }
  Cif := CadCambioCar(Cif, '-', '');
  Cif := CadCambioCar(Cif, '/', '');
  { El cif debe ser de 9 cifras }
  if Length(Cif) = 9 then
  begin
    { Comprobamos que sea un NIF }
    if EsNumero(Cif[1]) then
      result := EsNif(Cif)
    else
      { Se comprueba que la letra que designa el tipo de cif sea correcta }
      if (Pos(Cif[1], 'ABCDEFGHPQSKLMX') = 0) then
        result := false
      else
        { Se comprueba si es un extranjero,
          en ese caso se calcula el nif, cambiando la X, por 0 }
        if Cif[1] = 'X' then
          result := EsNif('0' + Copy(Cif, 2, 8))
        else
        begin
          Suma := StrToInt(Cif[3]) + StrToInt(Cif[5]) + StrToInt(Cif[7]);
          for n := 1 to 4 do
            Suma := Suma + ((2 * StrToInt(Cif[2 * n])) mod 10) +
              ((2 * StrToInt(Cif[2 * n])));
          Control := 10 - (Suma mod 10);
          { Se comprueba si es de tipo 'P' o 'S', es decir,
            Corporaciones Locales (Ayuntamientos, etc.)
            y Organismos p�blicos. }
          if Pos(Cif[1], 'PS') <> 0 then
            { Control tipo letra }
            result := (Cif[9] = Chr(64 + Control))
          else
          { Resto de tipos de CIF }
          begin
            { Control tipo n�mero }
            if Control = 10 then
              Control := 0;
            result := (StrToInt(Cif[9]) = Control);
          end;
        end;
  end;
end;

function ObtenerWeb(webIP: string): string;
var
  obtenerHTTP: TidHTTP;
  web: TStringList;
begin
  web := TStringList.Create;
  obtenerHTTP := TidHTTP.Create(nil);
  try
    web.Text := obtenerHTTP.Get(webIP);
  except
    on e: exception do
    begin
      obtenerHTTP.Free;
    end;
  end;
  ObtenerWeb := web.Text;
end;

function GetHTML2(WebBrowser: TWebBrowser): string;

begin

  result := (WebBrowser.Document AS IHTMLDocument3).documentElement.outerHTML;

end;

procedure TBASE.Expediciones1Click(Sender: TObject);
begin
  cc_expediciones := Tcc_expediciones.Create(nil);
  try
    cc_expediciones.ShowModal;
  finally
    cc_expediciones.Free;
  end;
end;

procedure TBASE.ExportaraExcel(FileNameXLS, SheetName: String; DBGrid: TDBGrid;
  ProgressBarXls: TProgressBar);

  procedure ProgressBarInit;
  begin
    ProgressBarXls.Max := DBGrid.DataSource.DataSet.RecordCount;
    ProgressBarXls.Position := 0;
    ProgressBarXls.Visible := true;
  end;

const
  xlWBATworksheet = -4167;
var
  Excel, WorkBook, WorkSheet: OleVariant;
  i, J: Integer;
  PBookmark: TBookmark;
  ValFloat: Double;
  ValStr: String;
  IsDayField: Boolean;
  FieldName: String;
  DayStr: String;
  DayNum: Integer;
begin
  // Guardar la posici�n en la DB y desactivar que se mueva el registro
  PBookmark := DBGrid.DataSource.DataSet.GetBookmark;
  DBGrid.DataSource.DataSet.DisableControls;
  DBGrid.DataSource.DataSet.First;

  // Comprobar si existe el component TProgressBar
  if (ProgressBarXls <> nil) then
    ProgressBarInit;

  // Crear instancia de la aplicaci�n Excel
  Excel := CreateOleObject('Excel.Application');

  // Evitar que nos pregunte si deseamos sobreescribir el archivo
  Excel.DisplayAlerts := false;

  // Agregar libro de trabajo
  WorkBook := Excel.Workbooks.Add(xlWBATworksheet);

  // Tomar una referencia a la hoja creada
  WorkSheet := WorkBook.WorkSheets[1];

  // Se  describe el nombre de la hoja
  WorkSheet.name := SheetName;

  // Llenamos las celdas
  // Toma en cuenta que las columnas y filas empiezan en 1, y que en el
  // WorkSheet.Cells[I, J], I es la fila y J es la columna.

  // Extrae los nombres de los campos del DBGrid y los coloca en el primer registro,
  // excluyendo los campos que est�n ocultos
  for J := 0 to DBGrid.Columns.Count - 1 do
    if DBGrid.Columns[J].Visible then
    begin
      // Poner la fuente de letra en Negrita
      WorkSheet.Cells[1, J + 1].Font.Bold := true;
      // Centrar la celda
      // WorkSheet.Cells[1, J +1].HorizontalAlignment := xlCenter;
      // Asignamos Valor del titulo del DBrid
      WorkSheet.Cells[1, J + 1] := DBGrid.Columns[J].Title.Caption;
    end;

  // Guardar los registros
  for i := 0 to DBGrid.DataSource.DataSet.RecordCount - 1 do
  begin
    // Identificamos los campos y lo grabamos segn su tipo
    for J := 0 to DBGrid.Columns.Count - 1 do
      if DBGrid.Columns[J].Visible then
      begin
        if (DBGrid.Columns[J].Field <> nil) and not DBGrid.Columns[J].Field.IsNull then
          case DBGrid.Columns[J].Field.DataType of
            ftAutoInc, ftBytes, ftInteger, ftSmallint, ftWord: // Auto o Numérico
              WorkSheet.Cells[i + 2, J + 1] := DBGrid.Columns[J].Field.AsInteger;
            ftBCD, ftFloat, ftCurrency: // Numérico con decimales
              WorkSheet.Cells[i + 2, J + 1] := DBGrid.Columns[J].Field.AsFloat;
            ftDateTime, ftDate, ftTime: // Fecha y Hora
              WorkSheet.Cells[i + 2, J + 1] := DBGrid.Columns[J].Field.AsDateTime;
          else // Todo lo demas caracteres
            begin
              ValStr := Trim(DBGrid.Columns[J].Field.AsString);
              ValStr := StringReplace(ValStr, ',', FormatSettings.DecimalSeparator, [rfReplaceAll]);
              ValStr := StringReplace(ValStr, '.', FormatSettings.DecimalSeparator, [rfReplaceAll]);
              IsDayField := False;
              FieldName := DBGrid.Columns[J].Field.FieldName;
              if (Length(FieldName) >= 2) and (CharInSet(FieldName[1], ['d', 'D'])) then
              begin
                DayStr := Copy(FieldName, 2, Length(FieldName) - 1);
                if TryStrToInt(DayStr, DayNum) then
                  IsDayField := (DayNum >= 1) and (DayNum <= 31);
              end;

              if (ValStr <> '') and (SameText(FieldName, 'totalhoras') or IsDayField) and TryStrToFloat(ValStr, ValFloat) then
                WorkSheet.Cells[i + 2, J + 1] := ValFloat
              else
                WorkSheet.Cells[i + 2, J + 1] := DBGrid.Columns[J].Field.AsString;
            end;
          end
        else
          WorkSheet.Cells[i + 2, J + 1] := '';
      end;

    // Saltamos de registro
    DBGrid.DataSource.DataSet.Next;

    // Comprobar si existe el component TProgressBar
    if (ProgressBarXls <> nil) then
      ProgressBarXls.Position := ProgressBarXls.Position + 1;
  end;

  // Comprobar si existe el component TProgressBar
  if (ProgressBarXls <> nil) then
    ProgressBarXls.Visible := false;

  // Redimensionar todas las celdas para que esten seg�n su tama�o
  WorkSheet.Cells.Columns.AutoFit;

  // Guardar el archivo
  WorkBook.SaveAs(FileNameXLS);

  // Cierra el archivo
  WorkBook.Close(FileNameXLS);

  // Salir de Excel
  Excel.Quit;

  // posicionar el registro donde estaba
  DBGrid.DataSource.DataSet.GotoBookmark(PBookmark);
  DBGrid.DataSource.DataSet.FreeBookmark(PBookmark);
  DBGrid.DataSource.DataSet.EnableControls;
end;

procedure TBASE.Facturas1Click(Sender: TObject);
begin
if not Assigned(frmProvFacturas) then
    frmProvFacturas := TfrmProvFacturas.Create(Self);
  frmProvFacturas.Show;
end;

procedure TBASE.FacturasClientes1Click(Sender: TObject);
begin
  facturas := Tfacturas.Create(nil);
  try
    facturas.ShowModal();
  finally
    facturas.Free;
  end;
end;

procedure TBASE.bamodificarClick(Sender: TObject);
begin
  dm.talmacenes.edit;
  DBEdit107.SetFocus;
  baanadir.Enabled := false;
  bamodificar.Enabled := false;
  baborrar.Enabled := false;
  bacancelar.Enabled := true;
  baaceptar.Enabled := true;
end;

procedure TBASE.bborrarjornalesClick(Sender: TObject);
begin
  if not tjornales.Active then
    tjornales.Open;
  tjornales.Locate('id', qjornalesid.AsString, [locaseinsensitive]);
  tjornales.Delete;
  qjornales.Refresh;
  qjornales.First;
end;

procedure TBASE.bmodificarjornalesClick(Sender: TObject);
begin
  tfechajornal.Date := qjornalesfecha.AsDateTime;
  ltrabajo.KeyValue := qjornalestypework.AsString;
  lparcela.KeyValue := qjornalesparcela.AsString;
  ltipohora.KeyValue := qjornalesarticulo.AsString;
  thoras.Text := qjornalesqhoras.AsString;

  // qtrabajos.Locate('id',qjornalestypework.AsString,[loCaseInsensitive]);
  // ltrabajo.Refresh;
  bmodificarjornales.Enabled := false;
  bcancelarjornal.Enabled := true;
  btinsertar.Enabled := false;
  bborrarjornales.Enabled := false;
  baceptar.Enabled := true;
  tfechajornal.Enabled := true;
  lparcela.Enabled := true;
  ltrabajo.Enabled := true;
  ltipohora.Enabled := true;
  thoras.Enabled := true;
  lprecio.Enabled := true;

  if qjornalesestado.AsString <> 'P' then
  begin
    if not tjornales.Active then
      tjornales.Open;
    tjornales.Locate('id', qjornalesid.AsString, [locaseinsensitive]);
    tjornales.edit;
    tfechajornal.SetFocus;
  end
  else
  begin
    if not tjornales.Active then
      tjornales.Open;
    tjornales.edit;
    bcancelarjornal.Click;
    showmessage('IMPOSIBLE MODIFICAR REGISTRO');
  end;
end;

procedure TBASE.bmpaceptarClick(Sender: TObject);
var
  id: string;
begin
  id := dm.tmateriasprimasid.AsString;
  Panel133.Enabled := false;
  dm.tmateriasprimasgenerico.Value := dm.qmprimascompuestasdescripcion.AsString;
  dm.tmateriasprimas.post;
  dm.qmateriasprimas.Refresh;
  dm.qmateriasprimas.Locate('id', id, [locaseinsensitive, lopartialkey]);
  bmpanadir.Enabled := true;
  bmpmodificar.Enabled := true;
  bmpborrar.Enabled := true;
  bmpcancelar.Enabled := false;
  bmpaceptar.Enabled := false;
end;

procedure TBASE.bmpanadirClick(Sender: TObject);
begin
  Panel133.Enabled := true;
  dm.tmateriasprimas.Append;
  DBEdit67.SetFocus;
  bmpanadir.Enabled := false;
  bmpmodificar.Enabled := false;
  bmpborrar.Enabled := false;
  bmpcancelar.Enabled := true;
  bmpaceptar.Enabled := true;
end;

procedure TBASE.bmpborrarClick(Sender: TObject);
begin
  dm.tmateriasprimas.Delete;
  dm.qmateriasprimas.Refresh;
end;

procedure TBASE.bmpcancelarClick(Sender: TObject);
begin
  Panel133.Enabled := false;
  dm.tmateriasprimas.cancel;
  dm.qmateriasprimas.Refresh;
  bmpanadir.Enabled := true;
  bmpmodificar.Enabled := true;
  bmpborrar.Enabled := true;
  bmpcancelar.Enabled := false;
  bmpaceptar.Enabled := false;
end;

procedure TBASE.bmpc_aceptarClick(Sender: TObject);
begin
  dm.qmprimascompuestas.Append;
  dm.qmprimascompuestasidempresa.Value :=
    dm.qmateriasprimas2idempresa.AsInteger;
  dm.qmprimascompuestasidmp.Value := dm.qmateriasprimasid.AsString;
  dm.qmprimascompuestasidmpc.Value := dm.qmateriasprimas2id.AsString;
  dm.qmprimascompuestasvariedad.Value := dm.qmateriasprimas2variedad.AsString;
  dm.qmprimascompuestasdescripcion.Value :=
    dm.qmateriasprimas2descripcion.AsString;
  dm.qmprimascompuestasporcentaje.Value := StrToInt(Edit4.Text);
  dm.qmprimascompuestas.post;
  DBLookupComboBox11.Visible := false;
  Edit4.Visible := false;
  bmpc_aceptar.Enabled := false;
  bmpc_anyadir.Enabled := true;
end;

procedure TBASE.bmpc_anyadirClick(Sender: TObject);
begin
  DBLookupComboBox11.Visible := true;
  Edit4.Visible := true;
  bmpc_aceptar.Enabled := true;
  bmpc_anyadir.Enabled := false;
end;

procedure TBASE.bmpc_borrarClick(Sender: TObject);
begin
  dm.qmprimascompuestas.Delete;
end;

procedure TBASE.bmpmodificarClick(Sender: TObject);
begin
  Panel133.Enabled := true;
  dm.tmateriasprimas.edit;
  DBEdit67.SetFocus;
  bmpanadir.Enabled := false;
  bmpmodificar.Enabled := false;
  bmpborrar.Enabled := false;
  bmpcancelar.Enabled := true;
  bmpaceptar.Enabled := true;
end;

procedure TBASE.Boquillas1Click(Sender: TObject);
begin
  boquillas := Tboquillas.Create(nil);
  try
    boquillas.ShowModal;
  finally
    boquillas.Free;
  end;
end;

procedure TBASE.BSalirClick(Sender: TObject);
begin
  ExitProcess(0);
end;

procedure TBASE.Bsculas1Click(Sender: TObject);
begin
  basculas := Tbasculas.Create(nil);
  try
    basculas.ShowModal;
  finally
    basculas.Free;
  end;
end;

procedure TBASE.btaaceptarClick(Sender: TObject);
begin
  dm.ttrabajosalmacen.post;
  dm.qtrabajosalmacen.Refresh;
  dm.qtrabajosalmacen.First;
  btaanadir.Enabled := true;
  btamodificar.Enabled := true;
  btaborrar.Enabled := true;
  btacancelar.Enabled := false;
  btaaceptar.Enabled := false;
end;

procedure TBASE.btaanadirClick(Sender: TObject);
begin
  dm.ttrabajosalmacen.Append;
  DBEdit76.SetFocus;
  btaanadir.Enabled := false;
  btamodificar.Enabled := false;
  btaborrar.Enabled := false;
  btacancelar.Enabled := true;
  btaaceptar.Enabled := true;
end;

procedure TBASE.btaborrarClick(Sender: TObject);
begin
  dm.ttrabajosalmacen.Delete;
  dm.qtrabajosalmacen.Refresh;
  dm.qtrabajosalmacen.First
end;

procedure TBASE.btacancelarClick(Sender: TObject);
begin
  dm.ttrabajosalmacen.cancel;
  dm.qtrabajosalmacen.Refresh;
  btaanadir.Enabled := true;
  btamodificar.Enabled := true;
  btaborrar.Enabled := true;
  btacancelar.Enabled := false;
  btaaceptar.Enabled := false;
end;

procedure TBASE.btAgendaClick(Sender: TObject);
var
  anyo, mes, dia: word;
  vanyo, vmes, vdia, vmessig, vfecha: string;
begin
  dm.DBagrigest.Disconnect;
  dm.tcalendario_laboral.Open;
  calendarionotas.Date := Date;
  calendarionotas.endDate := Date;
  Timer1.Enabled := false;
  decodedate(Date, anyo, mes, dia);
  vanyo := floattostr(anyo);
  vmes := floattostr(mes);
  vmessig := floattostr(mes + 1);
  if Length(vmes) = 1 then
    vmes := '0' + vmes;
  if Length(vmessig) = 1 then
    vmessig := '0' + vmessig;
  if Length(vdia) = 1 then
    vdia := '0' + vdia;
  vmes := floattostr(mes);
  vmessig := floattostr(mes + 1);
  vdia := floattostr(dia);
  dm.tempresa.Open;

  vfecha := floattostr(anyo) + '-' + vmes + '-' + vdia;
  dm.tcalendario_laboral.Refresh;
  dm.tcalendario_laboral.Locate('fecha', vfecha, [locaseinsensitive]);

  PDAgenda.align := alclient;
  PDAgenda.Visible := true;
  PDNominas.Visible := not PDAgenda.Visible;
  PDEmpleados.Visible := not PDAgenda.Visible;
  PDProduccion.Visible := not PDAgenda.Visible;
  PDTrazabilidad.Visible := not PDAgenda.Visible;
  PDEmpresa.Visible := not PDAgenda.Visible;
  PDExpediciones.Visible := not PDAgenda.Visible;

  dm.tnotas.Open;
  dm.qaux1.Close;
  dm.qaux1.SQL.Clear;
  dm.qaux1.SQL.Add
    ('select count(*) from calendario_laboral where festivo=0 and fecha>=' +
    '''' + vanyo + '-' + vmes + '-01' + '''' + 'and fecha<' + '''' + vanyo + '-'
    + vmessig + '-01' + '''');
  dm.qaux1.Open;
  Label80.Caption := 'Dias laborables del mes: ' + dm.qaux1.Fields[0].AsString;
end;

procedure TBASE.btAguardarClick(Sender: TObject);
begin
  if dm.dsanticipos.State = dsedit then
  begin
    dm.tanticiposfecha.Value := fechaanticipo.Date;
    if lopciones.ItemIndex = 0 then
    begin
      dm.tanticiposimporte.Value := strtofloat(limporteanticipo.Text);
      dm.tanticipospenalizacion.Value := 0;
      dm.tanticiposindemnizacion.Value := 0;
    end;
    if lopciones.ItemIndex = 1 then
    begin
      dm.tanticiposimporte.Value := 0;
      dm.tanticipospenalizacion.Value := 0;
      dm.tanticiposindemnizacion.Value := strtofloat(limporteanticipo.Text);
    end;
    if lopciones.ItemIndex = 2 then
    begin
      dm.tanticiposimporte.Value := 0;
      dm.tanticipospenalizacion.Value := strtofloat(limporteanticipo.Text);
      dm.tanticiposindemnizacion.Value := 0;
    end;

    dm.tanticiposobservaciones.Value := lobservaciones.Text;
    dm.tanticiposestado.Value := 'C';
    dm.tanticipos.post;
    dm.qanticipos.Refresh;
    dm.qanticipos.First;
  end;
  if dm.dsanticipos.State = dsinsert then
  begin

    qaux.Close;
    qaux.SQL.Clear;
    qaux.SQL.Add('select max(id)+1 from anticipos');
    qaux.Open;
    dm.tanticiposid.Value := qaux.Fields[0].AsInteger;
    dm.tanticiposfecha.Value := fechaanticipo.Date;
    dm.tanticiposidt.Value := qempleadosid.AsInteger;
    dm.tanticipostrabajador.Value := qempleadosnombre.AsString;
    if lopciones.ItemIndex = 0 then
    begin
      dm.tanticiposimporte.Value := strtofloat(limporteanticipo.Text);
      dm.tanticipospenalizacion.Value := 0;
      dm.tanticiposindemnizacion.Value := 0;
    end;
    if lopciones.ItemIndex = 1 then
    begin
      dm.tanticiposimporte.Value := 0;
      dm.tanticipospenalizacion.Value := 0;
      dm.tanticiposindemnizacion.Value := strtofloat(limporteanticipo.Text);
    end;
    if lopciones.ItemIndex = 2 then
    begin
      dm.tanticiposimporte.Value := 0;
      dm.tanticipospenalizacion.Value := strtofloat(limporteanticipo.Text);
      dm.tanticiposindemnizacion.Value := 0;
    end;
    dm.tanticiposobservaciones.Value := Uppercase(lobservaciones.Text);
    dm.tanticiposestado.Value := 'C';
    dm.tanticipos.post;
    dm.qanticipos.Refresh;
    dm.qanticipos.First;
  end;

end;

procedure TBASE.btamodificarClick(Sender: TObject);
begin
  dm.ttrabajosalmacen.edit;
  DBEdit76.SetFocus;
  btaanadir.Enabled := false;
  btamodificar.Enabled := false;
  btaborrar.Enabled := false;
  btacancelar.Enabled := true;
  btaaceptar.Enabled := true;
end;

procedure TBASE.btEnuevoClick(Sender: TObject);
begin
  dm.tanticipos.Open;
  dm.tanticipos.Append;
  fechaanticipo.SetFocus;
end;

procedure TBASE.BtEmpleadosClick(Sender: TObject);
// var idt,filtrojornales, filtroanticipos: String;
// ianyo,imes,idia:word;
begin
  dm.DBagrigest.Disconnect;
  fempleados := Tfempleados.Create(nil);
  try
    fempleados.ShowModal();
  finally
    fempleados.Free;
  end;
  {

    timer1.Enabled:=false;
    pdempleados.Align:=alclient;
    pdempleados.Visible:=true;
    pdnominas.Visible:=not pdempleados.Visible;
    pdproduccion.Visible:=not pdempleados.Visible;
    pdagenda.Visible:=not pdempleados.Visible;
    pdempresa.Visible:=not pdempleados.Visible;
    pdtrazabilidad.Visible:=not pdempleados.Visible;
    pdexpediciones.Visible:=not pdempleados.Visible;

    decodedate(date,ianyo,imes,idia);
    tmes.ItemIndex:=imes;
    tanyo.ItemIndex:=ianyo-2015+1;
    tmes2.ItemIndex:=imes;
    tanyo2.ItemIndex:=ianyo-2015+1;
    qaux.SQL.Clear;
    qaux.SQL.Add('update trabajadores set seleccionado=0');
    qaux.ExecSQL;
    qempleados.close;
    qempleados.Open;
    listagrupos2.KeyValue:=0;
    idt:=qempleadosid.asstring;
    if idt<>'' then filtrojornales:='where idt='+idt+' and ' else filtrojornales:='where ';
    if tanyo.ItemIndex<>0 then filtrojornales:=filtrojornales+'  year(fecha)='+tanyo.Text ;
    if tmes.itemindex<>0 then filtrojornales:=filtrojornales+' and month(fecha)='+inttostr(tmes.itemindex);
    if testado.itemindex<>0 then filtrojornales:=filtrojornales+' and estado='+testado.text;
    filtrojornales:=filtrojornales+' order by fecha desc';
    qjornales.Close;
    qjornales.SQL.Clear;
    qjornales.SQL.Add('select * from trabajo_diario '+filtrojornales);
    qjornales.Open;

    if idt<>'' then filtroanticipos:='where idt='+idt+' and ' else filtroanticipos:='where ';
    if tanyo2.ItemIndex<>0 then filtroanticipos:=filtroanticipos+' year(fecha)='+tanyo2.Text ;
    if tmes2.itemindex<>0 then filtroanticipos:=filtroanticipos+' and month(fecha)='+inttostr(tmes2.itemindex);
    if testado2.itemindex<>0 then filtroanticipos:=filtroanticipos+' and estado='+testado2.text;
    filtroanticipos:=filtroanticipos+' order by fecha desc';
    dm.qanticipos.Close;
    dm.qanticipos.SQL.Clear;
    dm.qanticipos.SQL.Add('select * from anticipos '+filtroanticipos);
    dm.qanticipos.Open;
    qempleados.Open;
    templeados.Open;
    templeados.locate('id',idt,[locaseinsensitive]);
    pageempleados.ActivePageIndex:=0;

    //tgrupo.ItemIndex:=0;
    vtactivo:=0;

    dm.qparcelas.open;
    dm.qtrabajos.open;
    dm.qtipohoras.open;
    falta.Date:=date;
    fbaja.Date:=date;
    tjornales.Open;
    dm.tanticipos.Open;
    qgrupostrabajadores.Close;
    qgrupostrabajadores.open;;
    qgrupostrabajadores2.Close;
    qgrupostrabajadores2.open;
  }
end;

procedure TBASE.btempresaClick(Sender: TObject);
begin
  Timer1.Enabled := false;
  PDEmpresa.align := alclient;
  PDEmpresa.Visible := true;
  PDEmpleados.Visible := not PDEmpresa.Visible;
  PDNominas.Visible := not PDEmpresa.Visible;
  PDProduccion.Visible := not PDEmpresa.Visible;
  PDAgenda.Visible := not PDEmpresa.Visible;
  PDTrazabilidad.Visible := not PDEmpresa.Visible;
  PDExpediciones.Visible := not PDEmpresa.Visible;

  // Asegurar conexión a base de datos sin forzar desconexión
  if not dm.DBagrigest.Connected then
    dm.DBagrigest.Connect;

  // Abrir únicamente los datos necesarios para la pestaña inicial (Datos Generales)
  if not dm.tempresa.Active then
    dm.tempresa.Open;

  PageDatosEmpresa.ActivePageIndex := 0;
  Pagedatos.ActivePageIndex := 0;
end;

procedure TBASE.bthaceptarClick(Sender: TObject);
begin
  dm.ttipohoras.post;
  dm.qtipohoras.Refresh;
  bthanadir.Enabled := true;
  bthmodificar.Enabled := true;
  bthborrar.Enabled := true;
  bthcancelar.Enabled := false;
  bthaceptar.Enabled := false;
end;

procedure TBASE.bthanadirClick(Sender: TObject);
begin
  dm.ttipohoras.Append;
  DBEdit69.SetFocus;
  bthanadir.Enabled := false;
  bthmodificar.Enabled := false;
  bthborrar.Enabled := false;
  bthcancelar.Enabled := true;
  bthaceptar.Enabled := true;
end;

procedure TBASE.bthborrarClick(Sender: TObject);
begin
  dm.ttipohoras.Delete;
  dm.ttipohoras.Refresh;
end;

procedure TBASE.bthcancelarClick(Sender: TObject);
begin
  dm.ttipohoras.cancel;
  dm.qtipohoras.Refresh;
  bthanadir.Enabled := true;
  bthmodificar.Enabled := true;
  bthborrar.Enabled := true;
  bthcancelar.Enabled := false;
  bthaceptar.Enabled := false;
end;

procedure TBASE.bthmodificarClick(Sender: TObject);
begin
  dm.ttipohoras.edit;
  DBEdit69.SetFocus;
  bthanadir.Enabled := false;
  bthmodificar.Enabled := false;
  bthborrar.Enabled := false;
  bthcancelar.Enabled := true;
  bthaceptar.Enabled := true;
end;

procedure TBASE.bticierreClick(Sender: TObject);
var
  anyo, mes, dia: word;
  fecha: string;
  id: Integer;
begin
  decodedate(dmproduccion.qpartesdiariosfecha_traspaso.AsDateTime, anyo,
    mes, dia);
  fecha := inttostr(anyo) + '-' + inttostr(mes) + '-' + inttostr(dia);
  id := dmproduccion.qpartesdiariosid.AsInteger;
  dmproduccion.qactualizar.SQL.Clear;
  dmproduccion.qactualizar.SQL.Add
    ('update almacenes_partesdiarios set estado=0 where id=' +
    dmproduccion.qpartesdiariosid.AsString);
  dmproduccion.qactualizar.ExecSQL;
  dmproduccion.qpartesdiarios.Refresh;
  dmproduccion.qpartesdiarios.Locate('id', id, [locaseinsensitive]);
end;

procedure TBASE.btinsertarClick(Sender: TObject);
begin
  bmodificarjornales.Enabled := false;
  bcancelarjornal.Enabled := true;
  bborrarjornales.Enabled := false;
  btinsertar.Enabled := false;
  baceptar.Enabled := true;
  tfechajornal.Enabled := true;
  lparcela.Enabled := true;
  ltrabajo.Enabled := true;
  ltipohora.Enabled := true;
  thoras.Enabled := true;
  lprecio.Enabled := true;
  tfechajornal.SetFocus;
  if not tjornales.Active then
    tjornales.Open;
  tjornales.Append;

end;

procedure TBASE.BtjornalesClick(Sender: TObject);
var
  anyo, mes, dia: word;
begin
  fechajornales.Date := Date;
  fechaanticipos.Date := Date;
  Timer1.Enabled := false;
  decodedate(Date, anyo, mes, dia);
  PDNominas.align := alclient;
  PDNominas.Visible := true;
  PDEmpleados.Visible := not PDNominas.Visible;
  PDProduccion.Visible := not PDNominas.Visible;
  PDAgenda.Visible := not PDNominas.Visible;
  PDTrazabilidad.Visible := not PDNominas.Visible;
  PDEmpresa.Visible := not PDNominas.Visible;
  PDExpediciones.Visible := not PDNominas.Visible;

  qaux.SQL.Clear;
  qaux.SQL.Add('update trabajadores set seleccionado=0 where seleccionado<>0');
  qaux.ExecSQL;

  PageNominas.ActivePageIndex := 0;
  if tlimitado = '1' then
  begin
    PageNominas.ActivePageIndex := 6;
    Nominaspag1.tabVisible := false;
    NominasPag2.tabVisible := false;
    Nominaspag3.tabVisible := false;
    Nominaspag4.tabVisible := false;
    Nominaspag5.tabVisible := false;
    Nominaspag6.tabVisible := false;
  end;

  nomfechahasta.Date := Date;
  nomfechadesde.Date := EncodeDate(anyo, mes, 1);
  listaanyos.ItemIndex := anyo - 2014;
  listameses.ItemIndex := mes;
  nomlhhasta.Date := Date;
  nomlhdesde.Date := EncodeDate(anyo, mes, 1);
  nomltthasta.Date := Date;
  nomlttdesde.Date := EncodeDate(anyo, mes, 1);
  pagnomfechahasta.Date := Date;
  pagnomfechadesde.Date := EncodeDate(anyo, mes, 1);

  vtactivo := 0;
  DBLookupComboBox12.KeyValue := Null;
  tbuscarnominas.Text := '';
  filtrotrabajadores := '';

  if not dm.tempresa.Active then
    dm.tempresa.Open;

  if not qgrupostrabajadores2.Active then
    qgrupostrabajadores2.Open;

  btactualizarempleadosnominas.Click;
  CargarPickListTipoHoras;
end;

procedure TBASE.BTLcancelarClick(Sender: TObject);
begin
  dmtr.qlotes.cancel;
  dmtr.qlotes.Refresh;
  dmtr.qlotes.First;
  if dmtr.qlotes.State in [dsinsert, dsedit] then
  begin
    btlnuevo.Visible := false;
    btLmodificar.Visible := false;
    btLguardar.Visible := true;
    btLcancelar.Visible := true;
  end
  else
  begin
    btlnuevo.Visible := true;
    btLmodificar.Visible := true;
    btLguardar.Visible := false;
    btLcancelar.Visible := false;
  end;
end;

procedure TBASE.BTLModificarClick(Sender: TObject);
var
  tcodigo: string;
begin
  // dmtr.qlotes.First;
  tcodigo := dmtr.qlotescodigo.AsString;
  tcodigo := inttostr(StrToInt(tcodigo));
  dmtr.qlotes.edit;
  dlotescodigo.SetFocus;
  dlotescodigo.Text := tcodigo;
  if dmtr.qlotes.State in [dsinsert, dsedit] then
  begin
    btlnuevo.Visible := false;
    btLmodificar.Visible := false;
    btLguardar.Visible := true;
    btLcancelar.Visible := true;
  end
  else
  begin
    btlnuevo.Visible := true;
    btLmodificar.Visible := true;
    btLguardar.Visible := false;
    btLcancelar.Visible := false;
  end;
end;

procedure TBASE.BTLNuevoClick(Sender: TObject);
var
  tcodigo: string;
begin
  dmtr.qlotes.First;
  // tcodigo:=dmtr.qlotescodigo.AsString;
  // tcodigo:=inttostr(strtoint(tcodigo)+1);
  dmtr.qaux.SQL.Clear;
  dmtr.qaux.SQL.Add('select max(codigo)+1 from lotes');
  dmtr.qaux.Open;
  tcodigo := dmtr.qaux.Fields[0].AsString;
  dmtr.qlotes.Append;
  dlotescodigo.SetFocus;
  dlotescodigo.Text := tcodigo;
  if dmtr.qlotes.State in [dsinsert, dsedit] then
  begin
    btlnuevo.Visible := false;
    btLmodificar.Visible := false;
    btLguardar.Visible := true;
    btLcancelar.Visible := true;
  end
  else
  begin
    btlnuevo.Visible := true;
    btLmodificar.Visible := true;
    btLguardar.Visible := false;
    btLcancelar.Visible := false;
  end;
end;

procedure TBASE.btproduccionClick(Sender: TObject);
var
  anyo, mes, dia: word;
  fdesde, fhasta, vmes, vdia: string;
begin
  dm.DBagrigest.Disconnect;
  dm.tempresa.Open;
  PDProduccion.align := alclient;
  PDProduccion.Visible := true;
  PDEmpleados.Visible := not PDProduccion.Visible;
  PDNominas.Visible := not PDProduccion.Visible;
  PDAgenda.Visible := not PDProduccion.Visible;
  PDEmpresa.Visible := not PDProduccion.Visible;
  PDTrazabilidad.Visible := not PDProduccion.Visible;
  PDExpediciones.Visible := not PDProduccion.Visible;
  fprodesde.Date := Date;
  { fprohasta.Date := Date;
    decodedate(fprohasta.Date, anyo, mes, dia);
    vmes := inttostr(mes);
    vdia := inttostr(dia);
    fhasta := floattostr(anyo) + '-' + vmes + '-' + vdia;
  } Pageproduccion.ActivePageIndex := 9;
  DBGrid44.SetFocus;

end;

procedure TBASE.BTSNBORRARClick(Sender: TObject);
begin
  dm.qseries.Delete;
  dm.qseries.Refresh;
end;

procedure TBASE.BTSNCANCELARClick(Sender: TObject);
begin
  dm.qseries.cancel;
end;

procedure TBASE.btSNguardarClick(Sender: TObject);
begin
  dm.qseries.post;
  dm.qseries.Refresh;
  dm.qseries.MasterSource := dm.dsempresa;
end;

procedure TBASE.BTSNMODIFICARClick(Sender: TObject);
begin
  dm.qseries.edit;
  DBGrid56.SetFocus;
end;

procedure TBASE.btSNnuevoClick(Sender: TObject);
begin
  dm.qseries.MasterSource := nil;
  dm.qseries.Append;
  dm.qserieside.Value := dm.tempresaid.AsInteger;
  DBGrid56.SetFocus;
end;

procedure TBASE.bpraceptarClick(Sender: TObject);
var
  producto: string;
begin
  producto := dm.tproductoscodigo.AsString;
  dm.tproductos.post;
  dm.tproductos.Refresh;
  dm.qproductos.Refresh;
  dm.qproductos.Locate('codigo', producto, [locaseinsensitive]);
  bpranadir.Enabled := true;
  bprmodificar.Enabled := true;
  bprborrar.Enabled := true;
  bprcancelar.Enabled := false;
  bpraceptar.Enabled := false;

end;

procedure TBASE.bpranadirClick(Sender: TObject);
begin
  qaux.SQL.Clear;
  qaux.SQL.Add('select max(id)+1 from productos ');
  qaux.Open;
  dm.tproductos.Append;
  dm.tproductoside.AsInteger := dm.tempresaid.AsInteger;
  dm.tproductosid.AsInteger := qaux.Fields[0].AsInteger;
  dm.tproductoscodigo.AsString := qaux.Fields[0].AsString;
  DBEdit10.SetFocus;
  bpranadir.Enabled := false;
  bprmodificar.Enabled := false;
  bprborrar.Enabled := false;
  bprcancelar.Enabled := true;
  bpraceptar.Enabled := true;
end;

procedure TBASE.bprborrarClick(Sender: TObject);
begin
  dm.tproductos.Delete;
  dm.qproductos.Refresh;
end;

procedure TBASE.bprcancelarClick(Sender: TObject);
begin
  dm.tproductos.cancel;
  dm.qproductos.Refresh;
  bpranadir.Enabled := true;
  bprmodificar.Enabled := true;
  bprborrar.Enabled := true;
  bprcancelar.Enabled := false;
  bpraceptar.Enabled := false;
end;

procedure TBASE.bprmodificarClick(Sender: TObject);
begin
  dm.tproductos.edit;
  DBEdit10.SetFocus;
  bpranadir.Enabled := false;
  bprmodificar.Enabled := false;
  bprborrar.Enabled := false;
  bprcancelar.Enabled := true;
  bpraceptar.Enabled := true;
end;

procedure TBASE.bttaceptarClick(Sender: TObject);
var
  codigo: string;
begin
  dm.ttipotrabajo.post;
  codigo := dm.ttipotrabajoid.AsString;
  dm.qtrabajos.Refresh;
  dm.qtrabajos.Locate('id', codigo, [locaseinsensitive, lopartialkey]);
  bttanadir.Enabled := true;
  bttmodificar.Enabled := true;
  bttborrar.Enabled := true;
  bttcancelar.Enabled := false;
  bttaceptar.Enabled := false;
end;

procedure TBASE.bttanadirClick(Sender: TObject);
begin
  dm.ttipotrabajo.Append;
  DBEdit72.SetFocus;
  bttanadir.Enabled := false;
  bttmodificar.Enabled := false;
  bttborrar.Enabled := false;
  bttcancelar.Enabled := true;
  bttaceptar.Enabled := true;
end;

procedure TBASE.bttborrarClick(Sender: TObject);
begin
  dm.ttipotrabajo.Delete;
  dm.qtrabajos.Refresh;
  dm.qtrabajos.First
end;

procedure TBASE.bttcancelarClick(Sender: TObject);
begin
  dm.ttipotrabajo.cancel;
  dm.ttipotrabajo.Refresh;
  bttanadir.Enabled := true;
  bttmodificar.Enabled := true;
  bttborrar.Enabled := true;
  bttcancelar.Enabled := false;
  bttaceptar.Enabled := false;
end;

procedure TBASE.btexpedicionesClick(Sender: TObject);
var
  anyo, mes, dia: word;
  fdesde, fhasta, vmes, vdia: string;
begin
  dm.DBagrigest.Disconnect;
  dm.tempresa.Open;
  PDExpediciones.align := alclient;
  PDExpediciones.Visible := true;
  PDProduccion.Visible := not PDExpediciones.Visible;
  PDEmpleados.Visible := not PDExpediciones.Visible;
  PDNominas.Visible := not PDExpediciones.Visible;
  PDAgenda.Visible := not PDExpediciones.Visible;
  PDEmpresa.Visible := not PDExpediciones.Visible;
  PDTrazabilidad.Visible := not PDExpediciones.Visible;

end;

procedure TBASE.bttmodificarClick(Sender: TObject);
begin
  dm.ttipotrabajo.edit;
  DBEdit72.SetFocus;
  bttanadir.Enabled := false;
  bttmodificar.Enabled := false;
  bttborrar.Enabled := false;
  bttcancelar.Enabled := true;
  bttaceptar.Enabled := true;
end;

procedure TBASE.bttrazabilidadClick(Sender: TObject);
begin
  dm.DBagrigest.Disconnect;
  qempresa.Open;
  dmestadisticas.qcampanyas.Open;
  dm.qcampanyas.Open;
  PDTrazabilidad.align := alclient;
  PDTrazabilidad.Visible := true;
  PDProduccion.Visible := not PDTrazabilidad.Visible;
  PDEmpleados.Visible := not PDTrazabilidad.Visible;
  PDNominas.Visible := not PDTrazabilidad.Visible;
  PDAgenda.Visible := not PDTrazabilidad.Visible;
  PDEmpresa.Visible := not PDTrazabilidad.Visible;
  PDExpediciones.Visible := not PDTrazabilidad.Visible;
  if qempresavercodtrazabilidad.AsInteger = 0 then
  begin
    Label209.Visible := false;
    DBEdit116.Visible := false;
  end
  else
  begin
    Label209.Visible := true;
    DBEdit116.Visible := true;
  end;

  dm.tempresa.Open;
  dm.qmateriasprimas2.Close;
  dm.qparcelas.Close;
  dmtr.qcampanyas.Close;
  dmtr.qlotes.Close;
  dmtr.qtiposgenerador.Close;
  dmtr.qea_pesadas.Close;
  dmtr.qsalidas.Close;
  dm.qmateriasprimas2.Open;
  dm.qparcelas.Open;
  dmtr.qcampanyas.Open;
  dmtr.qlotes.Open;
  dmtr.qtiposgenerador.Open;
  dmtr.qea_pesadas.Open;
  dmtr.qsalidas.Open;
  qsocios2.Close;
  qsocios2.Open;

  // dmtr.documentos.close;
  // dmtr.documentos.Filter:='id=-1';
  // dmtr.documentos.Open;

end;

procedure TBASE.btcerrarClick(Sender: TObject);
var
  anyo, mes, dia: word;
  fecha, fechainicial, fechafinal: string;
  cajas, restocajas: Integer;
  pesosalidas, restopeso: real;
begin
  decodedate(BASE.ffechatraspaso.Date, anyo, mes, dia);
  fecha := inttostr(dia) + '/' + inttostr(mes) + '/' + inttostr(anyo);
  dmproduccion.qpartesdiarios.edit;
  dmproduccion.qpartesdiariosfecha_traspaso.Value := strtodate(fecha);
  dmproduccion.qpartesdiariosestado.Value := 1;
  dmproduccion.qpartesdiarios.post;

  decodedate(dmproduccion.qpartesdiariosfecha_traspaso.AsDateTime, anyo,
    mes, dia);
  fechafinal := inttostr(anyo) + '-' + inttostr(mes) + '-' + inttostr(dia);
  decodedate(dmproduccion.qpartesdiariosfecha.AsDateTime, anyo, mes, dia);
  fechainicial := inttostr(anyo) + '-' + inttostr(mes) + '-' + inttostr(dia);

  dmproduccion.qactualizar.SQL.Clear;
  dmproduccion.qactualizar.SQL.Add
    ('select count(id) from almacenes_partesdiarios where idempresa=' +
    dmproduccion.qpartesdiariosidempresa.AsString + ' and almacen=' +
    dmproduccion.qpartesdiariosalmacen.AsString + ' and fecha=' + '''' +
    fechafinal + '''');
  dmproduccion.qactualizar.Open;

  if dmproduccion.qactualizar.Fields[0].AsInteger = 0 then
  begin
    dmproduccion.qactualizar.SQL.Clear;
    dmproduccion.qactualizar.SQL.Add
      ('insert into almacenes_partesdiarios (idempresa,fecha,almacen,nombre_almacen,cajas_apertura,peso_apertura,coste_apertura) values ('
      + dmproduccion.qpartesdiariosidempresa.AsString + ',' + '''' + fechafinal
      + '''' + ',' + dmproduccion.qpartesdiariosalmacen.AsString + ',' + '''' +
      dmproduccion.qpartesdiariosnombre_almacen.AsString + '''' + ',' +
      dmproduccion.qpartesdiarioscajas_cierre.AsString + ',' +
      stringreplace(dmproduccion.qpartesdiariospeso_cierre.AsString, ',', '.',
      [rfReplaceAll]) + ',' + stringreplace
      (dmproduccion.qpartesdiarioscoste_cierre.AsString, ',', '.',
      [rfReplaceAll]) + ')');
    dmproduccion.qactualizar.ExecSQL;
  end
  else
  begin
    dmproduccion.qactualizar.SQL.Clear;
    dmproduccion.qactualizar.SQL.Add
      ('update almacenes_partesdiarios set cajas_apertura=' +
      dmproduccion.qpartesdiarioscajas_cierre.AsString + ',peso_apertura=' +
      stringreplace(dmproduccion.qpartesdiariospeso_cierre.AsString, ',', '.',
      [rfReplaceAll]) + ',coste_apertura=' +
      stringreplace(dmproduccion.qpartesdiarioscoste_cierre.AsString, ',', '.',
      [rfReplaceAll]) + ' where idempresa=' +
      dmproduccion.qpartesdiariosidempresa.AsString + ' and fecha=' + '''' +
      fechafinal + '''' + ' and almacen=' +
      dmproduccion.qpartesdiariosalmacen.AsString);
    dmproduccion.qactualizar.ExecSQL;
  end;
  dmproduccion.qpartesdiarios.Refresh;

end;

procedure TBASE.btcontrolprodcerrarClick(Sender: TObject);
var
  anyo, mes, dia: word;
  fdesde, fhasta: string;
begin
  decodedate(fprodesde.Date, anyo, mes, dia);
  fdesde := inttostr(anyo) + '-' + inttostr(mes) + '-' + inttostr(dia);
  // decodedate(fprohasta.Date, anyo, mes, dia);
  // fhasta := inttostr(anyo) + '-' + inttostr(mes) + '-' + inttostr(dia);
  qaux.SQL.Clear;
  qaux.SQL.Add('select * from control_produccion where fecha=' + '''' +
    fdesde + '''');
  qaux.Open;
  if qaux.RecordCount > 0 then
  begin
    qaux.SQL.Clear;
    qaux.SQL.Add('delete from control_produccion where fecha=' + '''' +
      fdesde + '''');
    qaux.ExecSQL;
  end;
  qaux.SQL.Clear;
  qaux.SQL.Add
    ('select fecha,materia_prima,producto,pesadas from vista_produccion where fecha='
    + '''' + fdesde + '''');
  qaux.Open;
  if qaux.RecordCount > 1 then
  begin
    while not qaux.Eof do
    begin
      dm.qcontrolproduccion.Append;
      dm.qcontrolproduccion.Fields[1].Value := qaux.Fields[0].AsString;
      dm.qcontrolproduccion.Fields[2].Value := qaux.Fields[1].AsString;
      dm.qcontrolproduccion.Fields[3].Value := qaux.Fields[2].AsString;
      dm.qcontrolproduccion.Fields[4].Value := qaux.Fields[3].AsString;
      dm.qcontrolproduccion.post;
      qaux.Next;
    end;
  end;
  if qaux.RecordCount = 1 then
  begin
    dm.qcontrolproduccion.Append;
    dm.qcontrolproduccion.Fields[1].Value := qaux.Fields[0].AsString;
    dm.qcontrolproduccion.Fields[2].Value := qaux.Fields[1].AsString;
    dm.qcontrolproduccion.Fields[3].Value := qaux.Fields[2].AsString;
    dm.qcontrolproduccion.Fields[4].Value := qaux.Fields[3].AsString;
    dm.qcontrolproduccion.post;
  end;
  dm.qcontrolproduccion.Close;
  dm.qcontrolproduccion.Prepare;
  dm.qcontrolproduccion.ParamByName('fecha').AsDate:=fprodesde.Date;
  dm.qcontrolproduccion.Open;
end;

procedure TBASE.Button10Click(Sender: TObject);
begin
  informedb.DataSource := dm.dsqlistadohoras;
  informes.Report.Clear;
  if ListaInformes.ItemIndex = 0 then
    informes.LoadFromFile('c:\agrigest\informes\listadohorasvalorado.fr3');
  if ListaInformes.ItemIndex = 1 then
    informes.LoadFromFile('c:\agrigest\informes\listadohoras.fr3');
  informes.Variables.Variables['TITULO'] :=
    QUOTEDSTR('LISTADO DE HORAS DESDE EL ' + datetostr(nomlhdesde.Date) +
    ' HASTA EL ' + datetostr(nomlhhasta.Date));
  informes.ShowReport();

end;

procedure TBASE.Button11Click(Sender: TObject);
var
  formaspago: string;
begin
  formaspago := '';
  if CheckBox4.Checked then
    formaspago := '-PAGO EN MANO';
  if CheckBox5.Checked then
    formaspago := formaspago + '-PAGO POR BANCO';
  if CheckBox6.Checked then
    formaspago := formaspago + '-OTROS';
  formaspago := formaspago + '-';
  dm.qaux1.SQL.Clear;
  dm.qaux1.SQL.Add('select * from prenominas where correcto=1');
  dm.qaux1.Open;
  if dm.qaux1.RecordCount > 0 then
  begin
    dm.qnominas.Open;
    dm.qnominas.Append;
    dm.qnominasidempresa.Value := 1;
    dm.qnominasnomempresa.Value := dm.tempresanombre.AsString;
    dm.qnominasFECHA.Value := Date;
    dm.qnominasfechainicio.Value := nomfechadesde.Date;
    dm.qnominasFECHAFIN.Value := nomfechahasta.Date;
    dm.qnominasPERIODO.Value := dm.qaux1.Fields[3].AsInteger;
    dm.qnominasNOMPERIODO.Value := 'Periodo desde el ' +
      datetostr(nomfechadesde.Date) + ' hasta el ' +
      datetostr(nomfechahasta.Date);
    dm.qnominasANYO.Value := dm.qaux1.Fields[2].AsInteger;
    dm.qnominasFORMAPAGO.Value := formaspago;
    if CheckBox6.Checked then
      dm.qnominasACTIVO.Value := 0
    else
      dm.qnominasACTIVO.Value := 1;
    dm.qnominas.post;

    dm.tnominasdetalle.Open;
    dm.tnominasdetalle.DisableControls;
    dm.tprenominas.DisableControls;
    try
      while not dm.qaux1.Eof do
      begin
        dm.tnominasdetalle.Append;
        dm.tnominasdetalle.Fields[1].Value := dm.qnominasID.AsInteger;
        dm.tnominasdetalle.Fields[2].Value := dm.tempresaid.AsInteger;
        dm.tnominasdetalle.Fields[3].Value := dm.qaux1.Fields[1].AsInteger;
        dm.tnominasdetalle.Fields[4].Value := dm.qaux1.Fields[2].AsInteger;
        dm.tnominasdetalle.Fields[5].Value := dm.qaux1.Fields[3].AsInteger;
        dm.tnominasdetalle.Fields[6].Value := dm.qaux1.Fields[4].AsString;
        dm.tnominasdetalle.Fields[7].Value := dm.qaux1.Fields[5].AsString;
        dm.tnominasdetalle.Fields[8].Value := dm.qaux1.Fields[6].AsString;
        dm.tnominasdetalle.Fields[9].Value := dm.qaux1.Fields[7].AsString;
        dm.tnominasdetalle.Fields[10].Value := dm.qaux1.Fields[8].AsString;
        dm.tnominasdetalle.Fields[11].Value := dm.qaux1.Fields[9].AsFloat;
        dm.tnominasdetalle.Fields[12].Value := dm.qaux1.Fields[10].AsDateTime;
        dm.tnominasdetalle.Fields[13].Value := dm.qaux1.Fields[11].AsDateTime;
        dm.tnominasdetalle.Fields[14].Value := dm.qaux1.Fields[12].AsInteger;
        dm.tnominasdetalle.Fields[15].Value := dm.qaux1.Fields[13].AsInteger;
        dm.tnominasdetalle.Fields[16].Value := dm.qaux1.Fields[14].AsInteger;
        dm.tnominasdetalle.Fields[17].Value := dm.qaux1.Fields[15].AsFloat;
        dm.tnominasdetalle.Fields[18].Value := dm.qaux1.Fields[16].AsFloat;
        dm.tnominasdetalle.Fields[19].Value := dm.qaux1.Fields[17].AsFloat;
        dm.tnominasdetalle.Fields[20].Value := dm.qaux1.Fields[18].AsFloat;
        dm.tnominasdetalle.Fields[21].Value := dm.qaux1.Fields[19].AsFloat;
        dm.tnominasdetalle.Fields[22].Value := dm.qaux1.Fields[20].AsFloat;
        dm.tnominasdetalle.Fields[23].Value := dm.qaux1.Fields[21].AsFloat;
        dm.tnominasdetalle.Fields[24].Value := dm.qaux1.Fields[22].AsFloat;
        dm.tnominasdetalle.Fields[25].Value := dm.qaux1.Fields[23].AsFloat;
        dm.tnominasdetalle.Fields[26].Value := dm.qaux1.Fields[24].AsFloat;
        dm.tnominasdetalle.Fields[27].Value := dm.qaux1.Fields[25].AsFloat;
        dm.tnominasdetalle.Fields[28].Value := dm.qaux1.Fields[26].AsFloat;
        dm.tnominasdetalle.Fields[29].Value := dm.qaux1.Fields[27].AsFloat;
        dm.tnominasdetalle.Fields[30].Value := dm.qaux1.Fields[28].AsFloat;
        dm.tnominasdetalle.Fields[31].Value := dm.qaux1.Fields[29].AsString;
        dm.tnominasdetalle.Fields[32].Value := dm.qaux1.Fields[30].AsDateTime;
        dm.tnominasdetalle.Fields[33].Value := dm.qaux1.Fields[31].AsString;
        dm.tnominasdetalle.Fields[34].Value := dm.qaux1.Fields[32].AsFloat;
        dm.tnominasdetalle.Fields[35].Value := dm.qaux1.Fields[33].AsInteger;
        dm.tnominasdetalle.Fields[36].Value := dm.qaux1.Fields[34].AsDateTime;
        dm.tnominasdetalle.Fields[37].Value := dm.qaux1.Fields[35].AsDateTime;
        dm.tnominasdetalle.Fields[38].Value := dm.qaux1.Fields[36].AsInteger;
        dm.tnominasdetalle.post;

        dm.qaux3.Close;
        dm.qaux3.SQL.Clear;
        dm.qaux3.SQL.Add('update trabajo_diario set estado=' + '''' + 'P' + '''' +
          ',control=-' + dm.tnominasdetalle.Fields[0].AsString +
          ' where control=' + dm.qaux1.Fields[0].AsString);
        dm.qaux3.ExecSQL;

        dm.qaux3.Close;
        dm.qaux3.SQL.Clear;
        dm.qaux3.SQL.Add('delete from prenominas where id=' + dm.qaux1.Fields[0]
          .AsString);
        dm.qaux3.ExecSQL;

        dm.qaux1.Next;
      end;
    finally
      dm.tnominasdetalle.EnableControls;
      dm.tprenominas.EnableControls;
    end;

    dm.qnominas.Refresh;
    dm.tprenominas.Refresh;
  end
  else
    showmessage('DEBE SELECCIONAR AL MENOS UNA LINEA');
  dm.qnominas.Close;
  dm.tnominasdetalle.Close;
end;

procedure TBASE.Button12Click(Sender: TObject);
begin
  dm.tnominasdetalle.Delete;
  dm.qnominas.Refresh;
  // dm.qnominas.Last;
end;

procedure TBASE.Button13Click(Sender: TObject);
begin
  dm.talmacenes.Close;
  dm.qalmacenes.Close;
  dmestadisticas.qcontenido.Close;
  dmestadisticas.qproduccion_almacen.Close;
  dm.talmacenes.Open;
  dm.qalmacenes.Open;
  dmestadisticas.qcontenido.Open;
  dmestadisticas.qproduccion_almacen.Open;
end;

procedure TBASE.bteimprimirClick(Sender: TObject);
var
  archivo: string;
begin
  { if not dmtr.qsalidas_sd.active then dmtr.qsalidas_sd.open else dmtr.qsalidas_sd.refresh;
    if not dmtr.qsalidas_ds.active then dmtr.qsalidas_ds.Open else dmtr.qsalidas_ds.refresh;
    if not dmtr.qinfentradas.active then dmtr.qinfentradas.Open else dmtr.qinfentradas.refresh;
    informedb.Datasource:=dmtr.dsqinfentradas;//dmestadisticas.dsqproduccionimpresion;
    informes.Report.Clear;
    informes.LoadFromFile('c:\agrigest\informes\loteentradas.fr3');
    informes.Variables.Variables['TITULO']:=QUOTEDSTR('Entradas del LOTE: '+dmtr.qlotescodigo.asstring+' Trazabilidad: '+dmtr.qlotestrazabilidad.asstring);
    informes.Variables.Variables['FECHA1']:=QUOTEDSTR('F.Cosecha');
    informes.Variables.Variables['FECHA2']:=QUOTEDSTR('F.Trabajo');

    informes.ShowReport();
    informes.Clear;

    informedb.Datasource:=dmtr.dsqsalidas_sd;//dmestadisticas.dsqproduccionimpresion;
    informes.Report.Clear;
    informes.LoadFromFile('c:\agrigest\informes\loteentradas.fr3');
    informes.Variables.Variables['TITULO']:=QUOTEDSTR('Envasados del LOTE: '+dmtr.qlotescodigo.asstring+' Trazabilidad: '+dmtr.qlotestrazabilidad.asstring);
    informes.Variables.Variables['FECHA1']:=QUOTEDSTR('F.Elav.');
    informes.Variables.Variables['FECHA2']:=QUOTEDSTR('F.Remani.');

    informes.ShowReport();
    informes.Clear;

    informedb.Datasource:=dmtr.dsqsalidas_ds;//dmestadisticas.dsqproduccionimpresion;
    informes.Report.Clear;
    informes.LoadFromFile('c:\agrigest\informes\loteentradas.fr3');
    informes.Variables.Variables['TITULO']:=QUOTEDSTR('Desechos del LOTE: '+dmtr.qlotescodigo.asstring+' Trazabilidad: '+dmtr.qlotestrazabilidad.asstring);
    informes.Variables.Variables['FECHA1']:=QUOTEDSTR('F.Elav.');
    informes.Variables.Variables['FECHA2']:=QUOTEDSTR('F.Remani.');

    informes.ShowReport();
    informes.Clear
  }
  case listaimpresion.ItemIndex of
    1:
      begin
        dm.qinftrabajadores.Close;
        dm.qinftrabajadores.SQL.Clear;
        dm.qinftrabajadores.SQL.Add
          ('select * from trabajadores where seleccionado=1');
        dm.qinftrabajadores.Open;
        informedb.DataSource := dm.dsqinftrabajadores;
        informes.Report.Clear;
        informes.LoadFromFile('c:\agrigest\informes\tarjeta2.fr3');
        informes.ShowReport();
      end;
    0:
      begin
        dm.qinftrabajadores.Close;
        dm.qinftrabajadores.SQL.Clear;
        dm.qinftrabajadores.SQL.Add('select * from trabajadores where id=' +
          qempleadosid.AsString);
        dm.qinftrabajadores.Open;
        informedb.DataSource := dm.dsqinftrabajadores;
        informes.Report.Clear;
        informes.LoadFromFile('c:\agrigest\informes\FICHAEMPLEADO.fr3');
        informes.ShowReport();
      end;
    2:
      begin
        qauxemp.Close;
        qauxemp.Open;
        if qauxemp.RecordCount = 0 then
          showmessage('��� DEBE SELECCIONAR AL MENOS UN EMPLEADO ���')
        else
        begin
          informedb.DataSource := dsqauxemp;
          informes.Report.Clear;
          informes.LoadFromFile
            ('c:\agrigest\informes\plantillapartetrabajo.fr3');
          informes.Variables.Variables['v_cuadrilla'] :=
            QUOTEDSTR(qgrupostrabajadores2descripcion.AsString);
          informes.Variables.Variables['v_trabajadores'] :=
            QUOTEDSTR(inttostr(qempleados.RecordCount));
          informes.ShowReport();
          qaux.SQL.Clear;
          qaux.SQL.Add('update trabajadores set seleccionado=0');
          qaux.ExecSQL;
          qempleados.Close;
          qempleados.Open;
          checktodos2.Checked := false;
        end;

      end;
    3:
      begin
        qauxemp.Close;
        qauxemp.Open;
        if qauxemp.RecordCount = 0 then
          showmessage('��� DEBE SELECCIONAR AL MENOS UN EMPLEADO ���')
        else
        begin
          informedb.DataSource := dsqauxemp;
          informes.Report.Clear;
          informes.LoadFromFile
            ('c:\agrigest\informes\plantillapartesemanal.fr3');
          informes.Variables.Variables['v_cuadrilla'] :=
            QUOTEDSTR(qgrupostrabajadores2descripcion.AsString);
          informes.Variables.Variables['v_trabajadores'] :=
            QUOTEDSTR(inttostr(qempleados.RecordCount));
          informes.ShowReport();
          qaux.SQL.Clear;
          qaux.SQL.Add('update trabajadores set seleccionado=0');
          qaux.ExecSQL;
          qempleados.Close;
          qempleados.Open;
          checktodos2.Checked := false;
        end;

      end;

    4:
      begin
        qauxemp.Close;
        qauxemp.Open;
        if qauxemp.RecordCount = 0 then
          showmessage('��� DEBE SELECCIONAR AL MENOS UN EMPLEADO ���')
        else
        begin
          informedb.DataSource := dsqauxemp;
          informes.Report.Clear;
          informes.LoadFromFile
            ('c:\agrigest\informes\plantillapartealmacen.fr3');
          informes.Variables.Variables['v_cuadrilla'] :=
            QUOTEDSTR(qgrupostrabajadores2descripcion.AsString);
          informes.Variables.Variables['v_trabajadores'] :=
            QUOTEDSTR(inttostr(qempleados.RecordCount));
          informes.ShowReport();
          qaux.SQL.Clear;
          qaux.SQL.Add('update trabajadores set seleccionado=0');
          qaux.ExecSQL;
          qempleados.Close;
          qempleados.Open;
          checktodos2.Checked := false;
        end;
      end;

    5:
      begin
        qauxemp.Close;
        qauxemp.Open;
        if qauxemp.RecordCount = 0 then
          showmessage('��� DEBE SELECCIONAR AL MENOS UN EMPLEADO ���')
        else
        begin
          informedb.DataSource := dsqauxemp;
          informes.Report.Clear;
          informes.LoadFromFile
            ('c:\agrigest\informes\plantillacontratacion.fr3');
          informes.ShowReport();
          qaux.SQL.Clear;
          qaux.SQL.Add('update trabajadores set seleccionado=0');
          qaux.ExecSQL;
          qempleados.Close;
          qempleados.Open;
          checktodos2.Checked := false;
        end;
      end;
    6:
      begin
        qauxemp.Close;
        qauxemp.Open;
        SaveDialog1.FileName := 'PLANTILLA EXTINCION.xls';
        if SaveDialog1.Execute() then
        begin
          archivo := SaveDialog1.FileName;
          try
            ExportaraExcel(archivo, 'PLANTILLA EXTINCION', gridplantillaext);
            showmessage('Los datos han sido exportados correctamente a ' + archivo);
          except
            on E: Exception do
              showmessage('Error al exportar: ' + E.Message);
          end;
        end;
        qaux.SQL.Clear;
        qaux.SQL.Add('update trabajadores set seleccionado=0');
        qaux.ExecSQL;
        qempleados.Close;
        qempleados.Open;
        checktodos2.Checked := false;

      end;
    7:
      begin
        qauxemp.Close;
        qauxemp.Open;
        SaveDialog1.FileName := 'PLANTILLA COMUNICACION.xls';
        if SaveDialog1.Execute() then
        begin
          archivo := SaveDialog1.FileName;
          try
            ExportaraExcel(archivo, 'PLANTILLA COMUNICACION', gridplantillacomu);
            showmessage('Los datos han sido exportados correctamente a ' + archivo);
          except
            on E: Exception do
              showmessage('Error al exportar: ' + E.Message);
          end;
        end;
        qaux.SQL.Clear;
        qaux.SQL.Add('update trabajadores set seleccionado=0');
        qaux.ExecSQL;
        qempleados.Close;
        qempleados.Open;
        checktodos2.Checked := false;

      end;

  end;
end;

procedure TBASE.btactualizarClick(Sender: TObject);
var
  LAlmacen, LEmpresa, LIdParte: Integer;
  LFechaParte, LFechaCosecha: TDateTime;
  LPorcSegSocial, LFactorSS: Double;
  LTipoTrabajoAlmacen, LParcela: string;
  // Entradas
  LEntranCajas, LEntranCajasRemani: Integer;
  LEntranKg, LKilosRemanipulacion: Double;
  // Salidas y desperdicios
  LSalenCajas, LSalenCajasVenta, LSalenEnvasesDesp: Integer;
  LSalenKg, LKgProducidos, LKgProducidosVenta, LKgDesperdicios: Double;
  // Costes y Jornales
  LCosteCierre, LCosteCorteRemanipu: Double;
  LCostoKgMprima, LCostoKgMprimaRemanip, LCostoGenCamara, LCostoAcumulado: Double;
  LCostoJornalesCampo: Double;
  LHorasJornales, LCostoJornales, LCosteLimpieza, LCosteEnvasado, LCosteApoyo: Double;
  LCosteEnvRec, LCostoMateriales: Double;
  // Variables auxiliares de cálculo por parcela
  LKilosParcela, LLaborParcela, LCosteUnitarioCosecha: Double;
  LCosteKgFinalSinMt, LCosteManipulacion: Double;
  LCosecharRemani, LCosteTotalRestos1, LCosteTotalRestos2: Double;
  LQueryWork: TZReadOnlyQuery;
  LTotalParcelas, LIndiceParcela: Integer;

  procedure SetProgreso(const APos: Integer; const ADetalle: string);
  begin
    if Assigned(pbActualizar) then
      pbActualizar.Position := APos;
    if Assigned(lblDetalleActualizar) then
      lblDetalleActualizar.Caption := ADetalle;
    if Assigned(pnlProgresoActualizar) then
      pnlProgresoActualizar.Repaint;
    Application.ProcessMessages;
  end;

begin
  // 1. Obtener identificadores y contexto del parte diario activo
  LAlmacen := dmproduccion.qpartesdiariosalmacen.AsInteger;
  LEmpresa := dmproduccion.qpartesdiariosidempresa.AsInteger;
  LFechaParte := dmproduccion.qpartesdiariosfecha.AsDateTime;
  LIdParte := dmproduccion.qpartesdiariosid.AsInteger;

  if (LAlmacen = 0) or (LEmpresa = 0) or (LFechaParte = 0) then
    Exit;

  // Activar y centrar panel con barra de progreso
  btactualizar.Enabled := False;
  if Assigned(pnlProgresoActualizar) then
  begin
    pnlProgresoActualizar.Left := (Panel117.Width - pnlProgresoActualizar.Width) div 2;
    pnlProgresoActualizar.Top := (Panel117.Height - pnlProgresoActualizar.Height) div 2;
    pnlProgresoActualizar.Visible := True;
    pnlProgresoActualizar.BringToFront;
    if Assigned(lblProgresoActualizar) then
      lblProgresoActualizar.Caption := 'Actualizando datos de producción...';
    if Assigned(pbActualizar) then
    begin
      pbActualizar.Min := 0;
      pbActualizar.Max := 100;
      pbActualizar.Position := 5;
    end;
    if Assigned(lblDetalleActualizar) then
      lblDetalleActualizar.Caption := 'Obteniendo parámetros de empresa y almacén...';
    pnlProgresoActualizar.Repaint;
    Application.ProcessMessages;
  end;

  try
    // 2. Factor de Seguridad Social de la empresa
    qaux.Close;
    qaux.SQL.Text := 'SELECT porc_segsocial FROM empresa WHERE id = :EMPRESA';
    qaux.ParamByName('EMPRESA').AsInteger := LEmpresa;
    qaux.Open;
    if not qaux.IsEmpty then
      LPorcSegSocial := qaux.Fields[0].AsFloat
    else
      LPorcSegSocial := 0;
    LFactorSS := 1.0 + (LPorcSegSocial / 100.0);

    // 3. Tipo de trabajo asignado al almacén
    qaux.Close;
    qaux.SQL.Text := 'SELECT tipo_trabajo FROM almacenes WHERE id = :ALMACEN AND idempresa = :EMPRESA';
    qaux.ParamByName('ALMACEN').AsInteger := LAlmacen;
    qaux.ParamByName('EMPRESA').AsInteger := LEmpresa;
    qaux.Open;
    if not qaux.IsEmpty then
      LTipoTrabajoAlmacen := Trim(qaux.Fields[0].AsString)
    else
      LTipoTrabajoAlmacen := '';

    SetProgreso(10, 'Consultando entradas directas y remanipulaciones...');

    // 4. Entradas directas de materia prima (cajas y kg)
    qaux.Close;
    qaux.SQL.Text :=
      'SELECT COALESCE(SUM(num_envases), 0) AS cajas, COALESCE(SUM(peso_neto), 0) AS kg ' +
      'FROM v_ea_pesadaslotes ' +
      'WHERE iddestino = :ALMACEN AND fechatrabajo = :FECHA AND es_entrada = 1 AND remanipulado = 0 ' +
      '  AND mprima_p IN (SELECT id FROM materias_primas WHERE desechos = 0)';
    qaux.ParamByName('ALMACEN').AsInteger := LAlmacen;
    qaux.ParamByName('FECHA').AsDate := LFechaParte;
    qaux.Open;
    LEntranCajas := qaux.FieldByName('cajas').AsInteger;
    LEntranKg := qaux.FieldByName('kg').AsFloat;

    // 5. Entradas remanipuladas (cajas y kg)
    qaux.Close;
    qaux.SQL.Text :=
      'SELECT COALESCE(SUM(peso_neto), 0) AS kg, COALESCE(SUM(num_envases), 0) AS cajas ' +
      'FROM v_ea_pesadaslotes ' +
      'WHERE iddestino = :ALMACEN AND fechatrabajo = :FECHA AND remanipulado = 1';
    qaux.ParamByName('ALMACEN').AsInteger := LAlmacen;
    qaux.ParamByName('FECHA').AsDate := LFechaParte;
    qaux.Open;
    LKilosRemanipulacion := qaux.FieldByName('kg').AsFloat;
    LEntranCajasRemani := qaux.FieldByName('cajas').AsInteger;

    // Mantener sincronizado dataset dmproduccion.qentran
    dmproduccion.qentran.Close;
    dmproduccion.qentran.Prepare;
    dmproduccion.qentran.ParamByName('ALMACEN').AsInteger := LAlmacen;
    dmproduccion.qentran.ParamByName('FECHA').AsDate := LFechaParte;
    dmproduccion.qentran.Open;

    SetProgreso(15, 'Identificando parcelas cosechadas...');

    // 6. CÁLCULO OPTIMIZADO DE COSTO DE COSECHA POR PARCELA / CENTRO DE COSTE
    // Localizar combinaciones únicas de (fecha_cosecha, parcela) recibidas en este día
    LQueryWork := TZReadOnlyQuery.Create(nil);
    try
      LQueryWork.Connection := dm.DBagrigest;

      qaux2.Close;
      qaux2.SQL.Text :=
        'SELECT DISTINCT ' +
        '  ea.fecha AS fecha_cosecha, ' +
        '  COALESCE(NULLIF(l.parcela, ''''), NULLIF(lp.parcela, ''''), NULLIF(ea.ORIGEN, ''''), '''') AS cod_parcela ' +
        'FROM ea_pesadas ea ' +
        'LEFT JOIN lotes l ON l.codigo = ea.lote AND l.idempresa = ea.idempresa ' +
        'LEFT JOIN lotes_pesadas lp ON lp.ide = ea.idempresa AND lp.idea = ea.id AND lp.idea2 = ea.idEA ' +
        'WHERE ea.idea > 0 ' +
        '  AND ea.iddestino = :ALMACEN ' +
        '  AND ea.fechatrabajo = :FECHATRABAJO ' +
        '  AND ea.idempresa = :EMPRESA ' +
        '  AND COALESCE(NULLIF(l.parcela, ''''), NULLIF(lp.parcela, ''''), NULLIF(ea.ORIGEN, ''''), '''') <> ''''';
      qaux2.ParamByName('ALMACEN').AsInteger := LAlmacen;
      qaux2.ParamByName('FECHATRABAJO').AsDate := LFechaParte;
      qaux2.ParamByName('EMPRESA').AsInteger := LEmpresa;
      qaux2.Open;

      LTotalParcelas := qaux2.RecordCount;
      LIndiceParcela := 0;

      while not qaux2.Eof do
      begin
        Inc(LIndiceParcela);
        LFechaCosecha := qaux2.FieldByName('fecha_cosecha').AsDateTime;
        LParcela := Trim(qaux2.FieldByName('cod_parcela').AsString);

        if LTotalParcelas > 0 then
          SetProgreso(15 + Round((LIndiceParcela / LTotalParcelas) * 45),
            Format('Calculando jornada cosecha %d de %d: %s', [LIndiceParcela, LTotalParcelas, LParcela]))
        else
          SetProgreso(30, 'Calculando cosecha: ' + LParcela);

        // Kilos cosechados de esta parcela en esa fecha
        LQueryWork.Close;
        LQueryWork.SQL.Text :=
          'SELECT COALESCE(SUM(ea.peso_neto), 0) AS kilos ' +
          'FROM ea_pesadas ea ' +
          'LEFT JOIN lotes l ON l.codigo = ea.lote AND l.idempresa = ea.idempresa ' +
          'LEFT JOIN lotes_pesadas lp ON lp.ide = ea.idempresa AND lp.idea = ea.id AND lp.idea2 = ea.idEA ' +
          'WHERE ea.idea > 0 ' +
          '  AND ea.idempresa = :EMPRESA ' +
          '  AND ea.fecha = :FECHA_COSECHA ' +
          '  AND (:TIPOTRABAJO = '''' OR ea.tipo_trabajo = :TIPOTRABAJO OR ea.tipo_trabajo IS NULL) ' +
          '  AND COALESCE(NULLIF(l.parcela, ''''), NULLIF(lp.parcela, ''''), NULLIF(ea.ORIGEN, ''''), '''') = :PARCELA';
        LQueryWork.ParamByName('EMPRESA').AsInteger := LEmpresa;
        LQueryWork.ParamByName('FECHA_COSECHA').AsDate := LFechaCosecha;
        LQueryWork.ParamByName('TIPOTRABAJO').DataType := ftWideString;
        LQueryWork.ParamByName('TIPOTRABAJO').AsWideString := LTipoTrabajoAlmacen;
        LQueryWork.ParamByName('PARCELA').DataType := ftWideString;
        LQueryWork.ParamByName('PARCELA').AsWideString := LParcela;
        LQueryWork.Open;
        LKilosParcela := LQueryWork.FieldByName('kilos').AsFloat;

        // Jornales de cosecha registrados en trabajo_diario para esta parcela y fecha
        LQueryWork.Close;
        LQueryWork.SQL.Text :=
          'SELECT COALESCE(SUM(td.total), 0) AS labor ' +
          'FROM trabajo_diario td ' +
          'WHERE td.empresa = :EMPRESA ' +
          '  AND td.fecha = :FECHA_COSECHA ' +
          '  AND td.parcela = :PARCELA ' +
          '  AND td.typework = :TIPOTRABAJO';
        LQueryWork.ParamByName('EMPRESA').AsInteger := LEmpresa;
        LQueryWork.ParamByName('FECHA_COSECHA').AsDate := LFechaCosecha;
        LQueryWork.ParamByName('PARCELA').DataType := ftWideString;
        LQueryWork.ParamByName('PARCELA').AsWideString := LParcela;
        LQueryWork.ParamByName('TIPOTRABAJO').DataType := ftWideString;
        LQueryWork.ParamByName('TIPOTRABAJO').AsWideString := LTipoTrabajoAlmacen;
        LQueryWork.Open;
        LLaborParcela := LQueryWork.FieldByName('labor').AsFloat;

        // Calcular coste unitario de la parcela (si no hay jornales registrados, coste = 0)
        if (LKilosParcela > 0) and (LLaborParcela > 0) then
          LCosteUnitarioCosecha := (LLaborParcela * LFactorSS) / LKilosParcela
        else
          LCosteUnitarioCosecha := 0;

        // Actualizar las pesadas de esta parcela específica (con bypass FACTURANDO y recálculo de costo total)
        LQueryWork.Close;
        LQueryWork.SQL.Text :=
          'UPDATE ea_pesadas ea ' +
          'LEFT JOIN lotes l ON l.codigo = ea.lote AND l.idempresa = ea.idempresa ' +
          'LEFT JOIN lotes_pesadas lp ON lp.ide = ea.idempresa AND lp.idea = ea.id AND lp.idea2 = ea.idEA ' +
          'SET ea.id_palet2 = ''FACTURANDO'', ' +
          '    ea.costo_cosechar = IF(ea.tipo_trabajo = '''' OR ea.tipo_trabajo IS NULL, 0, ROUND(ea.peso_neto * :COSTE_UNITARIO, 4)), ' +
          '    ea.costo = ROUND(IF(ea.tipo_trabajo = '''' OR ea.tipo_trabajo IS NULL, 0, ea.peso_neto * :COSTE_UNITARIO) + ea.costo_camara + ea.costo_materiales + ea.costo_sinmt, 4) ' +
          'WHERE ea.iddestino = :ALMACEN ' +
          '  AND ea.fechatrabajo = :FECHATRABAJO ' +
          '  AND ea.fecha = :FECHA_COSECHA ' +
          '  AND ea.idempresa = :EMPRESA ' +
          '  AND COALESCE(NULLIF(l.parcela, ''''), NULLIF(lp.parcela, ''''), NULLIF(ea.ORIGEN, ''''), '''') = :PARCELA';
        LQueryWork.ParamByName('COSTE_UNITARIO').AsFloat := LCosteUnitarioCosecha;
        LQueryWork.ParamByName('ALMACEN').AsInteger := LAlmacen;
        LQueryWork.ParamByName('FECHATRABAJO').AsDate := LFechaParte;
        LQueryWork.ParamByName('FECHA_COSECHA').AsDate := LFechaCosecha;
        LQueryWork.ParamByName('EMPRESA').AsInteger := LEmpresa;
        LQueryWork.ParamByName('PARCELA').DataType := ftWideString;
        LQueryWork.ParamByName('PARCELA').AsWideString := LParcela;
        LQueryWork.ExecSQL;

        qaux2.Next;
      end;

      // Asegurar costo_cosechar = 0 para pesadas sin tipo de trabajo definido
      LQueryWork.Close;
      LQueryWork.SQL.Text :=
        'UPDATE ea_pesadas ea ' +
        'SET ea.id_palet2 = ''FACTURANDO'', ' +
        '    ea.costo_cosechar = 0, ' +
        '    ea.costo = ROUND(ea.costo_camara + ea.costo_materiales + ea.costo_sinmt, 4) ' +
        'WHERE ea.iddestino = :ALMACEN ' +
        '  AND ea.fechatrabajo = :FECHATRABAJO ' +
        '  AND ea.idempresa = :EMPRESA ' +
        '  AND (ea.tipo_trabajo = '''' OR ea.tipo_trabajo IS NULL)';
      LQueryWork.ParamByName('ALMACEN').AsInteger := LAlmacen;
      LQueryWork.ParamByName('FECHATRABAJO').AsDate := LFechaParte;
      LQueryWork.ParamByName('EMPRESA').AsInteger := LEmpresa;
      LQueryWork.ExecSQL;

    finally
      LQueryWork.Free;
    end;

    SetProgreso(65, 'Calculando costes de cierre y corte de remanipulación...');

    // 7. Costes de cierre y corte de remanipulación
    qaux.Close;
    qaux.SQL.Text :=
      'SELECT COALESCE(SUM(costo_cosechar), 0) ' +
      'FROM v_ea_pesadaslotes ' +
      'WHERE iddestino = :ALMACEN AND fechatrabajo = :FECHA AND remanipulado = 1';
    qaux.ParamByName('ALMACEN').AsInteger := LAlmacen;
    qaux.ParamByName('FECHA').AsDate := LFechaParte;
    qaux.Open;
    LCosecharRemani := qaux.Fields[0].AsFloat;

    qaux.Close;
    qaux.SQL.Text :=
      'SELECT COALESCE(SUM(costetotal), 0) ' +
      'FROM v_costesrestosdia ' +
      'WHERE fecha = (SELECT fecha FROM almacenes_partesdiarios WHERE fecha = :FECHA AND idempresa = :EMPRESA AND almacen = :ALMACEN LIMIT 1) ' +
      '  AND ide = :EMPRESA AND idalmacen = :ALMACEN';
    qaux.ParamByName('FECHA').AsDate := LFechaParte;
    qaux.ParamByName('EMPRESA').AsInteger := LEmpresa;
    qaux.ParamByName('ALMACEN').AsInteger := LAlmacen;
    qaux.Open;
    LCosteTotalRestos1 := qaux.Fields[0].AsFloat;

    qaux.Close;
    qaux.SQL.Text :=
      'SELECT COALESCE(SUM(costetotal), 0) ' +
      'FROM v_costesrestosdia ' +
      'WHERE fecha = :FECHA AND ide = :EMPRESA AND idalmacen = :ALMACEN';
    qaux.ParamByName('FECHA').AsDate := LFechaParte;
    qaux.ParamByName('EMPRESA').AsInteger := LEmpresa;
    qaux.ParamByName('ALMACEN').AsInteger := LAlmacen;
    qaux.Open;
    LCosteTotalRestos2 := qaux.Fields[0].AsFloat;

    LCosteCierre := LCosteTotalRestos2;
    LCosteCorteRemanipu := LCosecharRemani + LCosteTotalRestos1 - LCosteTotalRestos2;

    SetProgreso(72, 'Calculando salidas y desperdicios...');

    // 8. Salidas y desperdicios
    dmproduccion.qsalen.Close;
    dmproduccion.qsalen.Prepare;
    dmproduccion.qsalen.ParamByName('ALMACEN').AsInteger := LAlmacen;
    dmproduccion.qsalen.ParamByName('FECHA').AsDate := LFechaParte;
    dmproduccion.qsalen.ParamByName('ALMACEN2').AsInteger := LAlmacen;
    dmproduccion.qsalen.ParamByName('FECHA2').AsDate := LFechaParte;
    dmproduccion.qsalen.Open;

    LSalenCajas := dmproduccion.qsalennum_envases.AsInteger;
    LSalenCajasVenta := dmproduccion.qsalennum_envases.AsInteger;
    LSalenKg := dmproduccion.qsalenpeso_neto.AsFloat;
    LKgProducidos := dmproduccion.qsalenpeso_neto.AsFloat;
    LKgProducidosVenta := dmproduccion.qsalenpeso_neto_venta.AsFloat;

    dmproduccion.qdesperdicios.Close;
    dmproduccion.qdesperdicios.Prepare;
    dmproduccion.qdesperdicios.ParamByName('ALMACEN').AsInteger := LAlmacen;
    dmproduccion.qdesperdicios.ParamByName('FECHA').AsDate := LFechaParte;
    dmproduccion.qdesperdicios.Open;

    LSalenEnvasesDesp := dmproduccion.qdesperdiciosnum_envases.AsInteger;
    LKgDesperdicios := dmproduccion.qdesperdiciospeso_neto.AsFloat;

    SetProgreso(78, 'Calculando materias primas, cámara y jornales...');

    // 9. Costes de materia prima, generadores y cámara
    qaux.Close;
    qaux.SQL.Text :=
      'SELECT COALESCE(SUM(costo_sinmt), 0) ' +
      'FROM v_ea_pesadaslotes ' +
      'WHERE iddestino = :ALMACEN AND fechatrabajo = :FECHA AND idea > 0 AND remanipulado = 0';
    qaux.ParamByName('ALMACEN').AsInteger := LAlmacen;
    qaux.ParamByName('FECHA').AsDate := LFechaParte;
    qaux.Open;
    LCostoKgMprima := qaux.Fields[0].AsFloat;

    qaux.Close;
    qaux.SQL.Text :=
      'SELECT COALESCE(SUM(costo_sinmt), 0) ' +
      'FROM v_ea_pesadaslotes ' +
      'WHERE iddestino = :ALMACEN AND fechatrabajo = :FECHA AND remanipulado = 1';
    qaux.ParamByName('ALMACEN').AsInteger := LAlmacen;
    qaux.ParamByName('FECHA').AsDate := LFechaParte;
    qaux.Open;
    LCostoKgMprimaRemanip := qaux.Fields[0].AsFloat;

    qaux.Close;
    qaux.SQL.Text :=
      'SELECT COALESCE(SUM(gen_caja * num_envases), 0) * (SELECT COALESCE(coste_kg_gen, 0) FROM empresa WHERE id = :EMPRESA) ' +
      'FROM ea_pesadas ' +
      'WHERE iddestino = :ALMACEN AND fechatrabajo = :FECHA AND idea <> 0 AND idempresa = :EMPRESA';
    qaux.ParamByName('ALMACEN').AsInteger := LAlmacen;
    qaux.ParamByName('FECHA').AsDate := LFechaParte;
    qaux.ParamByName('EMPRESA').AsInteger := LEmpresa;
    qaux.Open;
    LCostoGenCamara := qaux.Fields[0].AsFloat;

    qaux.Close;
    qaux.SQL.Text :=
      'SELECT COALESCE(SUM(costo_camara), 0) ' +
      'FROM v_ea_pesadaslotes ' +
      'WHERE iddestino = :ALMACEN AND fechatrabajo = :FECHA AND idempresa = :EMPRESA';
    qaux.ParamByName('ALMACEN').AsInteger := LAlmacen;
    qaux.ParamByName('FECHA').AsDate := LFechaParte;
    qaux.ParamByName('EMPRESA').AsInteger := LEmpresa;
    qaux.Open;
    LCostoAcumulado := qaux.Fields[0].AsFloat;

    qaux.Close;
    qaux.SQL.Text :=
      'SELECT COALESCE(SUM(costo_cosechar), 0) ' +
      'FROM v_ea_pesadaslotes ' +
      'WHERE iddestino = :ALMACEN AND fechatrabajo = :FECHA AND remanipulado = 0 AND idempresa = :EMPRESA';
    qaux.ParamByName('ALMACEN').AsInteger := LAlmacen;
    qaux.ParamByName('FECHA').AsDate := LFechaParte;
    qaux.ParamByName('EMPRESA').AsInteger := LEmpresa;
    qaux.Open;
    LCostoJornalesCampo := qaux.Fields[0].AsFloat;

    // 10. Jornales de almacén
    qaux.Close;
    qaux.SQL.Text :=
      'SELECT COALESCE(SUM(horas), 0) AS horas, COALESCE(SUM(total), 0) AS costo ' +
      'FROM v_trabajosdia ' +
      'WHERE empresa = :EMPRESA AND fecha = :FECHA ' +
      '  AND tipotrabajo IN (SELECT id FROM tipo_trabajo WHERE almacen_trabajo = :ALMACEN AND coste_elavoracion_almacen = 1)';
    qaux.ParamByName('EMPRESA').AsInteger := LEmpresa;
    qaux.ParamByName('FECHA').AsDate := LFechaParte;
    qaux.ParamByName('ALMACEN').AsInteger := LAlmacen;
    qaux.Open;
    LHorasJornales := qaux.FieldByName('horas').AsFloat;
    LCostoJornales := qaux.FieldByName('costo').AsFloat;

    qaux.Close;
    qaux.SQL.Text :=
      'SELECT COALESCE(SUM(total), 0) AS costo ' +
      'FROM v_trabajosdia ' +
      'WHERE empresa = :EMPRESA AND fecha = :FECHA ' +
      '  AND tipotrabajo IN (SELECT id FROM tipo_trabajo WHERE almacen_trabajo = :ALMACEN AND elavoracion_produccion = 1)';
    qaux.ParamByName('EMPRESA').AsInteger := LEmpresa;
    qaux.ParamByName('FECHA').AsDate := LFechaParte;
    qaux.ParamByName('ALMACEN').AsInteger := LAlmacen;
    qaux.Open;
    LCosteLimpieza := qaux.FieldByName('costo').AsFloat;

    qaux.Close;
    qaux.SQL.Text :=
      'SELECT COALESCE(SUM(total), 0) AS costo ' +
      'FROM v_trabajosdia ' +
      'WHERE empresa = :EMPRESA AND fecha = :FECHA ' +
      '  AND tipotrabajo IN (SELECT id FROM tipo_trabajo WHERE almacen_trabajo = :ALMACEN AND envasado_produccion = 1)';
    qaux.ParamByName('EMPRESA').AsInteger := LEmpresa;
    qaux.ParamByName('FECHA').AsDate := LFechaParte;
    qaux.ParamByName('ALMACEN').AsInteger := LAlmacen;
    qaux.Open;
    LCosteEnvasado := qaux.FieldByName('costo').AsFloat;

    qaux.Close;
    qaux.SQL.Text :=
      'SELECT COALESCE(SUM(total), 0) AS costo ' +
      'FROM v_trabajosdia ' +
      'WHERE empresa = :EMPRESA AND fecha = :FECHA ' +
      '  AND tipotrabajo IN (SELECT id FROM tipo_trabajo WHERE almacen_trabajo = :ALMACEN AND logistica_produccion = 1)';
    qaux.ParamByName('EMPRESA').AsInteger := LEmpresa;
    qaux.ParamByName('FECHA').AsDate := LFechaParte;
    qaux.ParamByName('ALMACEN').AsInteger := LAlmacen;
    qaux.Open;
    LCosteApoyo := qaux.FieldByName('costo').AsFloat;

    SetProgreso(84, 'Calculando costes de materiales y envases...');

    // 11. Costes de materiales
    qaux.Close;
    qaux.SQL.Text :=
      'SELECT COALESCE(SUM(precio), 0) ' +
      'FROM ea_materiales ' +
      'WHERE recuperado = -1 AND (ide, idea, idea2) IN (' +
      '  SELECT idempresa, id, idea ' +
      '  FROM ea_pesadas ' +
      '  WHERE idempresa = :EMPRESA AND fechatrabajo = :FECHA AND iddestino = :ALMACEN)';
    qaux.ParamByName('EMPRESA').AsInteger := LEmpresa;
    qaux.ParamByName('FECHA').AsDate := LFechaParte;
    qaux.ParamByName('ALMACEN').AsInteger := LAlmacen;
    qaux.Open;
    LCosteEnvRec := qaux.Fields[0].AsFloat;

    qaux.Close;
    qaux.SQL.Text :=
      'SELECT COALESCE(SUM(precio), 0) ' +
      'FROM ea_materiales ' +
      'WHERE (ide, idea, idea2) IN (' +
      '  SELECT idempresa, id, idea FROM ea_pesadas WHERE idempresa = :EMPRESA AND fechatrabajo = :FECHA AND idea <> 0 AND iddestino = :ALMACEN ' +
      '  UNION ' +
      '  SELECT idempresa, id, idea FROM ea_pesadas WHERE idempresa = :EMPRESA AND fecha = :FECHA AND idea = 0 AND idorigen = :ALMACEN)';
    qaux.ParamByName('EMPRESA').AsInteger := LEmpresa;
    qaux.ParamByName('FECHA').AsDate := LFechaParte;
    qaux.ParamByName('ALMACEN').AsInteger := LAlmacen;
    qaux.Open;
    LCostoMateriales := qaux.Fields[0].AsFloat;

    SetProgreso(88, 'Guardando parte diario de almacén...');

    // 12. SENTENCIA ÚNICA ATÓMICA DE ACTUALIZACIÓN A almacenes_partesdiarios
    // Esto reduce 15 llamadas sucesivas con 15 ejecuciones de BU_alpart a 1 sola llamada instantánea
    dmproduccion.qactualizar.Close;
    dmproduccion.qactualizar.SQL.Text :=
      'UPDATE almacenes_partesdiarios a SET ' +
      '  a.entran_cajas            = :ENTRAN_CAJAS, ' +
      '  a.entran_kg               = :ENTRAN_KG, ' +
      '  a.entran_cajas_remani     = :ENTRAN_CAJAS_REMANI, ' +
      '  a.kilos_remanipulacion    = :KILOS_REMANIPULACION, ' +
      '  a.salen_cajas             = :SALEN_CAJAS, ' +
      '  a.salen_cajas_venta       = :SALEN_CAJAS_VENTA, ' +
      '  a.salen_kg                = :SALEN_KG, ' +
      '  a.kg_producidos           = :KG_PRODUCIDOS, ' +
      '  a.kg_producidos_venta     = :KG_PRODUCIDOS_VENTA, ' +
      '  a.salen_envases_desp      = :SALEN_ENVASES_DESP, ' +
      '  a.kg_desperdicios         = :KG_DESPERDICIOS, ' +
      '  a.coste_cierre            = :COSTE_CIERRE, ' +
      '  a.coste_corte_remanipu    = :COSTE_CORTE_REMANIPU, ' +
      '  a.costo_kg_mprima         = :COSTO_KG_MPRIMA, ' +
      '  a.costo_kg_mprima_remanip = :COSTO_KG_MPRIMA_REMANIP, ' +
      '  a.costo_gen_camara        = :COSTO_GEN_CAMARA, ' +
      '  a.costo_acumulado         = :COSTO_ACUMULADO, ' +
      '  a.costo_jornales_campo    = :COSTO_JORNALES_CAMPO, ' +
      '  a.horas_jornales          = :HORAS_JORNALES, ' +
      '  a.costo_jornales          = :COSTO_JORNALES, ' +
      '  a.coste_limpieza          = :COSTE_LIMPIEZA, ' +
      '  a.coste_envasado          = :COSTE_ENVASADO, ' +
      '  a.coste_apoyo             = :COSTE_APOYO, ' +
      '  a.coste_env_rec           = :COSTE_ENV_REC, ' +
      '  a.costo_materiales        = :COSTO_MATERIALES ' +
      'WHERE a.almacen = :ALMACEN AND a.fecha = :FECHA AND a.idempresa = :EMPRESA';

    dmproduccion.qactualizar.ParamByName('ENTRAN_CAJAS').AsInteger := LEntranCajas;
    dmproduccion.qactualizar.ParamByName('ENTRAN_KG').AsFloat := LEntranKg;
    dmproduccion.qactualizar.ParamByName('ENTRAN_CAJAS_REMANI').AsInteger := LEntranCajasRemani;
    dmproduccion.qactualizar.ParamByName('KILOS_REMANIPULACION').AsFloat := LKilosRemanipulacion;
    dmproduccion.qactualizar.ParamByName('SALEN_CAJAS').AsInteger := LSalenCajas;
    dmproduccion.qactualizar.ParamByName('SALEN_CAJAS_VENTA').AsInteger := LSalenCajasVenta;
    dmproduccion.qactualizar.ParamByName('SALEN_KG').AsFloat := LSalenKg;
    dmproduccion.qactualizar.ParamByName('KG_PRODUCIDOS').AsFloat := LKgProducidos;
    dmproduccion.qactualizar.ParamByName('KG_PRODUCIDOS_VENTA').AsFloat := LKgProducidosVenta;
    dmproduccion.qactualizar.ParamByName('SALEN_ENVASES_DESP').AsInteger := LSalenEnvasesDesp;
    dmproduccion.qactualizar.ParamByName('KG_DESPERDICIOS').AsFloat := LKgDesperdicios;
    dmproduccion.qactualizar.ParamByName('COSTE_CIERRE').AsFloat := LCosteCierre;
    dmproduccion.qactualizar.ParamByName('COSTE_CORTE_REMANIPU').AsFloat := LCosteCorteRemanipu;
    dmproduccion.qactualizar.ParamByName('COSTO_KG_MPRIMA').AsFloat := LCostoKgMprima;
    dmproduccion.qactualizar.ParamByName('COSTO_KG_MPRIMA_REMANIP').AsFloat := LCostoKgMprimaRemanip;
    dmproduccion.qactualizar.ParamByName('COSTO_GEN_CAMARA').AsFloat := LCostoGenCamara;
    dmproduccion.qactualizar.ParamByName('COSTO_ACUMULADO').AsFloat := LCostoAcumulado;
    dmproduccion.qactualizar.ParamByName('COSTO_JORNALES_CAMPO').AsFloat := LCostoJornalesCampo;
    dmproduccion.qactualizar.ParamByName('HORAS_JORNALES').AsFloat := LHorasJornales;
    dmproduccion.qactualizar.ParamByName('COSTO_JORNALES').AsFloat := LCostoJornales;
    dmproduccion.qactualizar.ParamByName('COSTE_LIMPIEZA').AsFloat := LCosteLimpieza;
    dmproduccion.qactualizar.ParamByName('COSTE_ENVASADO').AsFloat := LCosteEnvasado;
    dmproduccion.qactualizar.ParamByName('COSTE_APOYO').AsFloat := LCosteApoyo;
    dmproduccion.qactualizar.ParamByName('COSTE_ENV_REC').AsFloat := LCosteEnvRec;
    dmproduccion.qactualizar.ParamByName('COSTO_MATERIALES').AsFloat := LCostoMateriales;
    dmproduccion.qactualizar.ParamByName('ALMACEN').AsInteger := LAlmacen;
    dmproduccion.qactualizar.ParamByName('FECHA').AsDate := LFechaParte;
    dmproduccion.qactualizar.ParamByName('EMPRESA').AsInteger := LEmpresa;
    dmproduccion.qactualizar.ExecSQL;

    SetProgreso(93, 'Sincronizando parte diario activo...');

    // 13. Refrescar el registro activo para obtener las fórmulas calculadas por BU_alpart
    dmproduccion.qpartesdiarios.Refresh;
    dmproduccion.qpartesdiarios.Locate('id', LIdParte, [loCaseInsensitive, loPartialKey]);

    SetProgreso(96, 'Actualizando palets elaborados...');

    // 14. Actualización directa de palets elaborados en ea_pesadas
    // Evitamos el bypass forzado por temperatura y calculamos costo_sinmt y coste_manipulacion directamente con FACTURANDO
    LCosteKgFinalSinMt := dmproduccion.qpartesdiarioscostekgfinal_sinmt.AsFloat;
    if dmproduccion.qpartesdiarioskg_producidos_venta.AsFloat > 0 then
      LCosteManipulacion := dmproduccion.qpartesdiariostotal_costes_jornales.AsFloat / dmproduccion.qpartesdiarioskg_producidos_venta.AsFloat
    else
      LCosteManipulacion := 0;

    qaux.Close;
    qaux.SQL.Text :=
      'UPDATE ea_pesadas ea SET ' +
      '  ea.id_palet2 = ''FACTURANDO'', ' +
      '  ea.coste_manipulacion = ROUND(ea.peso_neto * :COSTEMANIPULACION, 4), ' +
      '  ea.costo_sinmt = ROUND(ea.peso_neto * :COSTESINMT, 4), ' +
      '  ea.costo = ROUND(ea.costo_cosechar + ea.costo_camara + ea.costo_materiales + (ea.peso_neto * :COSTESINMT), 4), ' +
      '  ea.temperatura = 0 ' +
      'WHERE ea.fecha = :FECHA AND ea.idea <= 0 AND ea.idorigen = :ALMACEN AND ea.idempresa = :EMPRESA';
    qaux.ParamByName('COSTEMANIPULACION').AsFloat := LCosteManipulacion;
    qaux.ParamByName('COSTESINMT').AsFloat := LCosteKgFinalSinMt;
    qaux.ParamByName('FECHA').AsDate := LFechaParte;
    qaux.ParamByName('ALMACEN').AsInteger := LAlmacen;
    qaux.ParamByName('EMPRESA').AsInteger := LEmpresa;
    qaux.ExecSQL;

    SetProgreso(100, '¡Actualización completada!');
    Sleep(250);
  finally
    if Assigned(pnlProgresoActualizar) then
      pnlProgresoActualizar.Visible := False;
    btactualizar.Enabled := True;
  end;
end;

procedure TBASE.Articulos1Click(Sender: TObject);
begin
  infarticulos := Tinfarticulos.Create(nil);
  try
    infarticulos.ShowModal();
  finally
    infarticulos.Free;
  end;
end;

procedure TBASE.ArticulosComponentes1Click(Sender: TObject);
begin
  articulos := Tarticulos.Create(nil);
  try
    articulos.ShowModal();
  finally

    articulos.Free;
  end;
end;

procedure TBASE.baaceptarClick(Sender: TObject);
begin
  dm.talmacenes.post;
  // dm.qalmacenes.refresh;
  baanadir.Enabled := true;
  bamodificar.Enabled := true;
  baborrar.Enabled := true;
  bacancelar.Enabled := false;
  baaceptar.Enabled := false;
end;

procedure TBASE.baanadirClick(Sender: TObject);
begin
  dm.qalmacenes.Close;
  dm.talmacenes.Append;
  DBEdit107.SetFocus;
  baanadir.Enabled := false;
  bamodificar.Enabled := false;
  baborrar.Enabled := false;
  bacancelar.Enabled := true;
  baaceptar.Enabled := true;
end;

procedure TBASE.BTLaceptarClick(Sender: TObject);
begin
  // dbedit116.setfocus;
  dmtr.qlotes.post;
  dmtr.qlotes.Refresh;
  if dmtr.qlotes.State in [dsinsert, dsedit] then
  begin
    btlnuevo.Visible := false;
    btLmodificar.Visible := false;
    btLguardar.Visible := true;
    btLcancelar.Visible := true;
  end
  else
  begin
    btlnuevo.Visible := true;
    btLmodificar.Visible := true;
    btLguardar.Visible := false;
    btLcancelar.Visible := false;
  end;
  btlnuevo.SetFocus;
end;

procedure TBASE.Button14Click(Sender: TObject);
var
  estacion: string;
  dia, mes, anyo: word;
  dia2, mes2, anyo2: real;
  Document: IHtmlDocument2;
begin
  decodedate(fechaestacion.Date, anyo, mes, dia);
  estacion := Edit1.Text;

  // PAGE.Navigate( 'https://www.wunderground.com/weatherstation/WXDailyHistory.asp?ID='+estacion+'&day='+floattostr(dia)+'&month='+floattostr(mes)+'&year='+floattostr(anyo)+'&graphspan=day&format=1');
  // document:=page.Document as ihtmldocument2;
  // PAGE.Text := ObtenerWeb('http://www.wunderground.com/weatherstation/WXDailyHistory.asp?ID=IMONFORT8&day=3&month=2&year=2017&graphspan=day&format=1');
  PAGE2.Lines.Add(Trim(Document.body.innertext))
end;

procedure TBASE.Button15Click(Sender: TObject);
var
  url: array [0 .. 255] of WideChar;
  Cadena, X, Y: string;
begin
  X := dm.qparcelasx.AsString;
  Y := dm.qparcelasy.AsString;
  stringreplace(X, '.', ',', [rfReplaceAll]);
  stringreplace(Y, ',', '.', [rfReplaceAll]);
  Cadena := 'https://www.google.es/maps/place/' + X + ',' + Y;
  stringtowidechar(Cadena, url, 256);
  ShellExecute(Handle, 'open', 'iexplore.exe', url, nil, SW_NORMAL);
end;

procedure TBASE.Button16Click(Sender: TObject);
var
  url: array [0 .. 255] of WideChar;
  Cadena: string;
begin
  Cadena := 'http://sigpac.mapa.es/fega/visor/?provincia=' +
    dm.qparcelassigpac_prov.AsString + '&municipio=' +
    dm.qparcelassigpac_muni.AsString + '&AGREGADO=' +
    dm.qparcelassigpac_agre.AsString + '&zona=' +
  dm.qparcelassigpac_zona.AsString + '&poligono=' +
    dm.qparcelassigpac_poli.AsString + '&parcela=' +
    dm.qparcelassigpac_pacr.AsString + '&recinto=' +
    dm.qparcelassigpac_recinto.AsString;
  stringtowidechar(Cadena, url, 256);
  ShellExecute(Handle, 'open', 'iexplore.exe', url, nil, SW_NORMAL);
end;

function FiltrarCaracteresSEPAXML(const AText: string): string;
var
  i: Integer;
  c: Char;
  sb: TStringBuilder;
begin
  sb := TStringBuilder.Create;
  try
    for i := 1 to Length(AText) do
    begin
      c := AText[i];
       case Ord(c) of
        224..228: sb.Append('a'); // à, á, â, ã, ä
        192..196: sb.Append('A'); // À, Á, Â, Ã, Ä
        232..235: sb.Append('e'); // è, é, ê, ë
        200..203: sb.Append('E'); // È, É, Ê, Ë
        236..239: sb.Append('i'); // ì, í, î, ï
        204..207: sb.Append('I'); // Ì, Í, Î, Ï
        242..246: sb.Append('o'); // ò, ó, ô, õ, ö
        210..214: sb.Append('O'); // Ò, Ó, Ô, Õ, Ö
        249..252: sb.Append('u'); // ù, ú, û, ü
        217..220: sb.Append('U'); // Ù, Ú, Û, Ü
        241: sb.Append('n');       // ñ
        209: sb.Append('N');       // Ñ
        231: sb.Append('c');       // ç
        199: sb.Append('C');       // Ç
        186, 170: sb.Append('.'); // º, ª
        47: sb.Append('?');        // /
        38: sb.Append('&amp;');    // &
        60: sb.Append('&lt;');     // <
        62: sb.Append('&gt;');     // >
        34: sb.Append('&quot;');   // "
        39: sb.Append('&apos;');   // '
      else
        if Ord(c) < 32 then
          // Omitir caracteres de control no válidos en XML
        else if Ord(c) > 127 then
          sb.Append('?')
        else
          sb.Append(c);
      end;
    end;
    Result := sb.ToString;
  finally
    sb.Free;
  end;
end;

procedure TBASE.Button17Click(Sender: TObject);
var
  anyo, mes, dia, hora, minutos, segundos, milisegundos: word;
  txanyo, txmes, txdia, txhora, txminutos, txsegundos, txnumlineas,
    txcantidadtotal, txlinea, txcuenta, txdireccion2: string;
  txnombre, txdireccion, txtotalapagar, txnif, txbic: string;
  linea: real;
  XmlList: TStringList;
  FileName: string;

begin
  decodedate(Date(), anyo, mes, dia);
  decodetime(Date(), hora, minutos, segundos, milisegundos);
  txanyo := floattostr(anyo);
  txmes := floattostr(mes);
  txdia := floattostr(dia);
  txhora := floattostr(hora);
  txminutos := floattostr(minutos);
  txsegundos := floattostr(segundos);
  txnumlineas := dm.qnominascant_lineas.AsString;
  txcantidadtotal := FormatFloat(',0.00', dm.qnominasIMPORTETOTAL.AsFloat);
  txcantidadtotal := stringreplace(txcantidadtotal, '.', '', [rfReplaceAll]);
  txcantidadtotal := stringreplace(txcantidadtotal, ',', '.', [rfReplaceAll]);
  txnif := dm.tempresacif.AsString;
  txcuenta := dm.tempresacc_iban.AsString + dm.tempresacc_entidad.AsString +
    dm.tempresacc_oficina.AsString + dm.tempresacc_dc.AsString +
    dm.tempresacc_cc.AsString;
  txnombre := FiltrarCaracteresSEPAXML(dm.tempresanombre.AsString);
  txbic := FiltrarCaracteresSEPAXML(dm.tempresacc_bic.AsString);
  txdireccion := FiltrarCaracteresSEPAXML(dm.tempresadireccion.AsString);
  txdireccion2 := FiltrarCaracteresSEPAXML(dm.tempresacodpost.AsString + ' ' +
    dm.tempresapoblacion.AsString + ' . .');

  if Length(txmes) = 1 then
    txmes := '0' + txmes;
  if Length(txdia) = 1 then
    txdia := '0' + txdia;
  if Length(txhora) = 1 then
    txhora := '0' + txhora;
  if Length(txminutos) = 1 then
    txminutos := '0' + txminutos;
  if Length(txsegundos) = 1 then
    txsegundos := '0' + txsegundos;

  XmlList := TStringList.Create;
  try
    XmlList.Add('<?xml version="1.0" encoding="UTF-8" standalone="no"?><Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03"><CstmrCdtTrfInitn><GrpHdr>');
    XmlList.Add('<MsgId>' + txnif + 'AN0' + txanyo + txmes + txdia + txhora +
      txminutos + txsegundos + '</MsgId>');
    XmlList.Add('<CreDtTm>' + txanyo + '-' + txmes + '-' + txdia + 'T' + txhora +
      ':' + txminutos + ':' + txsegundos + '</CreDtTm>');
    XmlList.Add('<NbOfTxs>' + txnumlineas + '</NbOfTxs><CtrlSum>' + txcantidadtotal + '</CtrlSum>');
    XmlList.Add('<InitgPty><Nm>' + txnombre + '</Nm><Id><OrgId><Othr><Id>' + txnif +
      'AN0</Id></Othr></OrgId></Id></InitgPty></GrpHdr>');
    XmlList.Add('<PmtInf><PmtInfId>SCT' + txanyo + txmes + txdia + txhora +
      txminutos + txsegundos +
      '001</PmtInfId><PmtMtd>TRF</PmtMtd><BtchBookg>true</BtchBookg><NbOfTxs>' +
      txnumlineas + '</NbOfTxs><CtrlSum>' + txcantidadtotal + '</CtrlSum>');
    XmlList.Add('<ReqdExctnDt>' + txanyo + '-' + txmes + '-' + txdia +
      '</ReqdExctnDt><Dbtr><Nm>' + txnombre + '</Nm>');
    XmlList.Add('<PstlAdr><Ctry>ES</Ctry><AdrLine>' + txdireccion +
      '</AdrLine><AdrLine>' + txdireccion2 +
      '</AdrLine></PstlAdr></Dbtr><DbtrAcct><Id>');
    XmlList.Add('<IBAN>' + txcuenta +
      '</IBAN></Id><Ccy>EUR</Ccy></DbtrAcct><DbtrAgt><FinInstnId><BIC>' + txbic +
      '</BIC></FinInstnId></DbtrAgt><ChrgBr>SLEV</ChrgBr>');

    dm.tnominasdetalle.First;
    linea := 1;
    while not dm.tnominasdetalle.Eof do
    begin
      txlinea := FormatFloat(',0000', linea);
      txlinea := stringreplace(txlinea, '.', '', [rfReplaceAll]);
      txnombre := FiltrarCaracteresSEPAXML(dm.tnominasdetalleNOMBRE.AsString);
      txdireccion := FiltrarCaracteresSEPAXML(dm.tnominasdetalledireccion.AsString);
      txtotalapagar := FormatFloat(',0.00',
        dm.tnominasdetalletotalapagar.AsFloat);
      txtotalapagar := stringreplace(txtotalapagar, '.', '', [rfReplaceAll]);
      txtotalapagar := stringreplace(txtotalapagar, ',', '.', [rfReplaceAll]);

      XmlList.Add('<CdtTrfTxInf><PmtId><EndToEndId>' +
        dm.tnominasdetalleNIF.AsString + '-20161-' + txanyo + txmes + txdia +
        txhora + txminutos + txsegundos + '-' + txlinea +
        '</EndToEndId></PmtId>');
      XmlList.Add('<PmtTpInf><SvcLvl><Cd>SEPA</Cd></SvcLvl><CtgyPurp><Cd>SALA</Cd></CtgyPurp></PmtTpInf><Amt><InstdAmt Ccy="EUR">'
        + txtotalapagar + '</InstdAmt></Amt>');
      XmlList.Add('<Cdtr><Nm>' + txnombre + '</Nm><PstlAdr><Ctry>ES</Ctry>');
      XmlList.Add('<AdrLine>' + txdireccion + '</AdrLine><AdrLine>' +
        FiltrarCaracteresSEPAXML(dm.tnominasdetalleCP.AsString + ' ' + dm.tnominasdetallePOBLACION.AsString + ' . .') +
        '</AdrLine></PstlAdr></Cdtr>');
      XmlList.Add('<CdtrAcct><Id><IBAN>' + dm.tnominasdetalleCUENTAPAGO.AsString +
        '</IBAN></Id></CdtrAcct><Purp><Cd>SALA</Cd></Purp><RmtInf><Ustrd>NOMINA</Ustrd></RmtInf></CdtTrfTxInf>');
      dm.tnominasdetalle.Next;
      linea := linea + 1;
    end;

    XmlList.Add('</PmtInf></CstmrCdtTrfInitn></Document><!-- AGRIGEST 34 XML -->');
    FileName := ExtractFilePath(Application.ExeName) + 'NOMINA.XML';
    XmlList.SaveToFile(FileName, TEncoding.UTF8);
  finally
    XmlList.Free;
  end;
end;


procedure TBASE.Button18Click(Sender: TObject);
var
  usbDevices: IUsbDevices;
  usbDevice: IUsbDevice;
begin
  usbDevices := CoUsbDevices.Create();
  if (usbDevices.Count > 0) then
  begin
    try
      begin
        usbDevice := usbDevices.Item[0]; // select the first device
        VFirmas.connect(usbDevice);
        VFirmas.ShowModal();
      end;
    except
      on e: exception do
        showmessage(e.Message);
    end;

    dm.qFirmas2.Append;
    dm.qFirmas2ide.Value := dm.qpartes_diarioside.AsInteger;
    dm.qFirmas2idt.Value := dm.qpartes_diariosidt.AsInteger;
    dm.qFirmas2firma.LoadFromFile('c:\agrigest\informes\firma.bmp');
    dm.qFirmas2.post;
    tfirmanominas.Picture.LoadFromFile('c:\agrigest\informes\firma.bmp');

    if not dm.qpartes_diarios.Active then
      dm.qpartes_diarios.Open;
    dm.qpartes_diarios.edit;
    dm.qpartes_diariosvalidado.Value := 1;
    dm.qpartes_diariosfirma.Value := dm.qFirmas2id.AsInteger;
    dm.qpartes_diarios.post;
    Deletefile('c:\agrigest\informes\firma.bmp');
  end
  else
  begin
    showmessage('Tableta de firma no conectada');
  end;

end;

procedure TBASE.Button19Click(Sender: TObject);
var
  anyo, mes, dia: word;
  fecha: string;
begin
  decodedate(dmproduccion.qpartesdiariosfecha.AsDateTime, anyo, mes, dia);
  fecha := floattostr(anyo) + '-' + floattostr(mes) + '-' + floattostr(dia);

  dm.qaux1.SQL.Clear;
  dm.qaux1.SQL.Add
    ('delete from restos_dia where lote in (select lote from ea_pesadas where fecha='
    + '''' + fecha + '''' + ' and iddestino=' +
    dmproduccion.qpartesdiariosalmacen.AsString + ')');
  dm.qaux1.ExecSQL;
  dm.qaux1.SQL.Clear;
  dm.qaux1.SQL.Add
    ('insert into restos_dia (ide,idalmacen,lote,parcela,mprima,fecha,cant_inicial) select idempresa,iddestino,lote,parcela,mprima,fechatrabajo,sum(num_envases) from ea_pesadas where fechatrabajo='
    + '''' + fecha + '''' + ' and iddestino=' +
    dmproduccion.qpartesdiariosalmacen.AsString + ' group by fecha,lote');
  dm.qaux1.ExecSQL;
  dmproduccion.qrestos_dia.Close;
  dmproduccion.qrestos_dia.Open;;
  if dmproduccion.qpartesdiarios.State in [dsedit] then
    dmproduccion.qpartesdiarios.post;
end;

procedure TBASE.Button1Click(Sender: TObject);
var
  usbDevices: IUsbDevices;
  usbDevice: IUsbDevice;
begin
  usbDevices := CoUsbDevices.Create();
  if (usbDevices.Count > 0) then
  begin
    try
      begin
        usbDevice := usbDevices.Item[0]; // select the first device
        VFirmas := Tvfirmas.Create(nil);
        try
          VFirmas.connect(usbDevice);
          VFirmas.ShowModal();
        finally
          VFirmas.Free;
        end;

      end;
    except
      on e: exception do
        showmessage(e.Message);
    end;
    dm.tempresa.edit;
    dm.tempresafirmaresponsable.LoadFromFile('c:\agrigest\tmp\firma.bmp');
    dm.tempresa.post;

    Deletefile('c:\agrigest\informes\firma.bmp');
  end
  else
  begin
    showmessage('Dispositivo de firmas no conectado');
  end;

end;

procedure TBASE.btcontrolproduccionClick(Sender: TObject);
begin
  dm.qcontrolproduccion.post;
end;

procedure TBASE.bteaaceptarClick(Sender: TObject);
begin
  // dm.tarticulosalmacen.post;
  // dm.qarticulosalmacen.open;
  // bteaanadir.Enabled:=true;
  // bteamodificar.Enabled:=true;
  // bteaborrar.Enabled:=true;
  // bteacancelar.Enabled:=false;
  // bteaaceptar.Enabled:=false;
end;

procedure TBASE.bteaanadirClick(Sender: TObject);
begin
  // dm.qarticulosalmacen.Close;
  // dm.tarticulosalmacen.append;
  // dbedit115.SetFocus;
  // bteaanadir.Enabled:=false;
  // bteamodificar.Enabled:=false;
  // bteaborrar.Enabled:=false;
  // bteacancelar.Enabled:=true;
  // bteaaceptar.Enabled:=true;
end;

procedure TBASE.bteaborrarClick(Sender: TObject);
begin
  dm.tarticulosalmacen.Delete;
  dm.qarticulosalmacen.Refresh;
  dm.qarticulosalmacen.First
end;

procedure TBASE.bteacancelarClick(Sender: TObject);
begin
  // dm.tarticulosalmacen.cancel;
  // dm.qarticulosalmacen.open;
  // bteaanadir.Enabled:=true;
  // bteamodificar.Enabled:=true;
  // bteaborrar.Enabled:=true;
  // bteacancelar.Enabled:=false;
  // bteaaceptar.Enabled:=false;
end;

procedure TBASE.bteamodificarClick(Sender: TObject);
begin
  // dm.tarticulosalmacen.edit;
  // dbedit115.SetFocus;
  // bteaanadir.Enabled:=false;
  // bteamodificar.Enabled:=false;
  // bteaborrar.Enabled:=false;
  // bteacancelar.Enabled:=true;
  // bteaaceptar.Enabled:=true;
end;

procedure TBASE.Button20Click(Sender: TObject);
begin
  informedb.DataSource := dmestadisticas.dsqproduccionimpresion;
  if Edit2.Text <> '' then
  begin
    dmestadisticas.qproduccionimpresion.Close;
    dmestadisticas.qproduccionimpresion.Prepare;
    dmestadisticas.qproduccionimpresion.ParamByName('R').AsString := Edit2.Text;
    dmestadisticas.qproduccionimpresion.ParamByName('ALMACEN').AsString :=
      dm.qalmacenesnombre.AsString;
    dmestadisticas.qproduccion.Open;

  end
  else
  begin
    dmestadisticas.qproduccionimpresion.Close;
    dmestadisticas.qproduccionimpresion.Prepare;
    dmestadisticas.qproduccionimpresion.ParamByName('R').AsString := '%';
    dmestadisticas.qproduccionimpresion.ParamByName('ALMACEN').AsString :=
      dm.qalmacenesnombre.AsString;
    dmestadisticas.qproduccion.Open;
  end;

  informes.Report.Clear;
  informes.LoadFromFile('c:\agrigest\informes\stockalmacen.fr3');
  informes.Variables.Variables['TITULO'] :=
    QUOTEDSTR('Stock del almacen: ' + dm.qalmacenesnombre.AsString + ' a fecha '
    + datetostr(Date()));

  // informes.Report.FileName:=TMES.Text+' ' + qjornalestrabajador.asstring;
  informes.ShowReport();
  informes.Clear

end;

procedure TBASE.Button21Click(Sender: TObject);
begin

  dmestadisticas.qinfsalidas.Close;
  dmestadisticas.qinfsalidas.Prepare;
  dmestadisticas.qinfsalidas.ParamByName('FINICIO').AsDate :=
    dmestadisticas.qcampanyasfechainicio.AsDateTime;
  dmestadisticas.qinfsalidas.ParamByName('FFIN').AsDate :=
    dmestadisticas.qcampanyasfechafin.AsDateTime;
  dmestadisticas.qinfsalidas.ParamByName('PARCELA').AsString :=
    dm.qparcelascodpar.AsString;
  dmestadisticas.qinfsalidas.Open;
  informedb.DataSource := dmestadisticas.dsqinfsalidas;
  informes.Report.Clear;
  informes.LoadFromFile('c:\agrigest\informes\entradasparcela.fr3');
  informes.Variables.Variables['TITULO'] :=
    QUOTEDSTR('Parcela: ' + dm.qparcelasnombre.AsString + ' Campa�a: ' +
    dmestadisticas.qcampanyasdescripcion.AsString + ' ENVASADOS');

  informes.ShowReport();
  informes.Clear
end;

procedure TBASE.Button22Click(Sender: TObject);
var
  archivo: string;
begin
  archivo := 'c:\agrigest\salidas.xlsx';
  try
    ExportaraExcel(archivo, 'SALIDAS', DBGrid69);
    showmessage('Los datos han sido exportados correctamente a ' + archivo);
  except
    on E: Exception do
      showmessage('Error al exportar: ' + E.Message);
  end;
end;

procedure TBASE.btJborrarClick(Sender: TObject);
begin
  if not tjornales.Active then
    tjornales.Open;
  tjornales.Locate('id', dm.qnominasdetalleid.AsInteger,
    [locaseinsensitive, lopartialkey]);
  tjornales.Delete;
  btactualizarempleadosnominas.Click;
end;

procedure TBASE.btJcancelarClick(Sender: TObject);
begin
  if tjornales.Active and (tjornales.State in [dsedit, dsinsert]) then
  begin
    tjornales.cancel;
    nomfechadesde.Date := fechajornales.Date;
    nomfechahasta.Date := fechajornales.Date;
    btactualizarempleadosnominas.Click;
    btJnuevo.Enabled := true;
    btJmodificar.Enabled := true;
    btJborrar.Enabled := true;
    btJguardar.Enabled := false;
    btJcancelar.Enabled := false;
    fechajornales.Enabled := false;
    lnobservaciones.Enabled:=false;
    ljcentro.Enabled := false;
    ljtrabajo.Enabled := false;
    ljhora.Enabled := false;
    edjhoras.Enabled := false;
    edjprecio.Enabled := false;
    PdatosJornales.Enabled := false;
    qaux.SQL.Clear;
    qaux.SQL.Add('update trabajadores set seleccionado=0');
    qaux.ExecSQL;
    qempleados.Refresh;
  end;
    btJnuevo.Enabled := true;
  btJmodificar.Enabled := true;
  btJguardar.Enabled := false;
  btJcancelar.Enabled := false;
  btJborrar.Enabled := true;
end;

procedure TBASE.btJexcelClick(Sender: TObject);
var
  archivo: string;
begin
  SaveDialog1.FileName := 'JORNALES.xlsx';
  if SaveDialog1.Execute() then
  begin
    archivo := SaveDialog1.FileName;
    try
      ExportaraExcel(archivo, 'JORNALES', DBGrid4);
      showmessage('Los datos han sido exportados correctamente a ' + archivo);
    except
      on E: Exception do
        showmessage('Error al exportar: ' + E.Message);
    end;
  end;
end;

procedure TBASE.btJguardarClick(Sender: TObject);
var
  dia, mes, anyo: word;
  fecha, centro, trabajo, TipoHora, horas, precio: string;
  contador: Integer;
  totaljornal: real;
begin
  qaux.SQL.Clear;
  qaux.SQL.Add('select max(id)+1 from trabajo_diario');
  qaux.Open;
  contador := qaux.Fields[0].AsInteger;
  if not tjornales.Active then
    tjornales.Open;
  if tjornales.State in [dsedit] then
  begin
    tjornalesfecha.Value := fechajornales.Date;
    tjornalesparcela.Value := ljcentro.KeyValue;
    tjornalestypework.Value := ljtrabajo.KeyValue;
    tjornalesarticulo.Value := ljhora.KeyValue;
    tjornalesqhoras.Value := strtofloat(edjhoras.Text);
    tjornalesprecio.Value := strtofloat(edjprecio.Text);
    totaljornal := strtofloat(edjhoras.Text) * strtofloat(edjprecio.Text);
    tjornalestotal.Value := strtofloat(FormatFloat('0.00', totaljornal));
    tjornalesestado.Value := 'C';
    tjornalesobservaciones.Value:=lnobservaciones.Text;
    tjornales.post;
    dm.qnominasdetalle.Refresh;
  end
  else
  begin
    qaux.SQL.Clear;
    qaux.SQL.Add('select id,nombre from trabajadores where seleccionado=1');
    qaux.Open;
    if qaux.RecordCount > 0 then
    begin
      while not qaux.Eof do
      begin
        tjornales.Append;
        tjornalesid.Value := contador;
        tjornalesfecha.Value := fechajornales.Date;
        tjornalesparcela.Value := ljcentro.KeyValue;
        tjornalesidt.Value := qaux.Fields[0].AsInteger;
        tjornalestrabajador.Value := qaux.Fields[1].AsString;
        tjornalestypework.Value := ljtrabajo.KeyValue;
        qtipohora.Close;
        qtipohora.Prepare;
        qtipohora.ParamByName('TRABAJADOR').AsInteger := tjornalesidt.AsInteger;
        qtipohora.ParamByName('EMPRESA').AsInteger := 1;
        // tjornalesempresa.AsInteger;
        qtipohora.Open;
        if qtipohoracodart.AsString <> '' then
          tjornalesarticulo.Value := qtipohoracodart.AsString
        else
          tjornalesarticulo.Value := ljhora.KeyValue;
        tjornalesqhoras.Value := strtofloat(edjhoras.Text);
        if qtipohoracodart.AsString <> '' then
          tjornalesprecio.Value := qtipohoraprecio.AsFloat
        else
          tjornalesprecio.Value := strtofloat(edjprecio.Text);
        totaljornal := tjornalesqhoras.AsFloat * tjornalesprecio.AsFloat;
        // strtofloat(edjhoras.text)*strtofloat(edjprecio.Text);
        tjornalestotal.Value := strtofloat(FormatFloat('0.00', totaljornal));
        tjornalesestado.Value := 'C';
        tjornalesobservaciones.Value:=lnobservaciones.Text;
        tjornales.post;
        contador := contador + 1;
        qaux.Next;
      end;
      nomfechadesde.Date := fechajornales.Date;
      nomfechahasta.Date := fechajornales.Date;
      btactualizarempleadosnominas.Click;
    end
    else
    begin
      showmessage('DEBE SELECCIONAR AL MENOS UN TRABAJADOR');
    end;

  end;

  btJnuevo.Enabled := true;
  btJborrar.Enabled := true;
  btJguardar.Enabled := false;
  btJmodificar.Enabled := true;
  btJcancelar.Enabled := false;
  lnobservaciones.Enabled:=false;
  fechajornales.Enabled := false;
  ljcentro.Enabled := false;
  ljtrabajo.Enabled := false;
  ljhora.Enabled := false;
  edjhoras.Enabled := false;
  edjprecio.Enabled := false;
  PdatosJornales.Enabled := false;
  qaux.SQL.Clear;
  qaux.SQL.Add('update trabajadores set seleccionado=0');
  qaux.ExecSQL;
  qempleados.Refresh;
  checktodos.Checked := false;
end;

procedure TBASE.Button23Click(Sender: TObject);
var
  archivo: string;
begin
  SaveDialog1.FileName := 'TRAZABILIDADENTRADAS.xls';
  if SaveDialog1.Execute() then
  begin
    archivo := SaveDialog1.FileName;
    try
      ExportaraExcel(archivo, 'STOCK', DBGrid38);
      showmessage('Los datos han sido exportados correctamente');
    except
      on E: Exception do
        showmessage('Error al exportar: ' + E.Message);
    end;
  end;

end;

procedure TBASE.btactualizarempleadosnominasClick(Sender: TObject);
var
  filtro, filtro2, fdesde, fhasta, filtrogrupo,
    filtrotrabajador: string;
begin
  Screen.Cursor := crHourGlass;
  try
    fdesde := FormatDateTime('yyyy-mm-dd', nomfechadesde.Date);
    fhasta := FormatDateTime('yyyy-mm-dd', nomfechahasta.Date);

    qempleados.DisableControls;
    try
      qempleados.Close;
      qempleados.Open;
    finally
      qempleados.EnableControls;
    end;

    filtrogrupo := '';
    if vtactivo <> 0 then
      filtrogrupo := ' and idt in (select id from trabajadores where grupo=' +
        inttostr(vtactivo) + ')';

    filtrotrabajador := '';
    if Trim(tbuscarnominas.Text) <> '' then
    begin
      filtrogrupo := '';
      filtrotrabajador :=
        ' and idt in (select id from trabajadores where nombre like(''%'
        + Trim(tbuscarnominas.Text) + '%''))';
    end;

    filtro := ' where fecha>=''' + fdesde + ''' and fecha<=''' + fhasta + '''' + filtrogrupo + filtrotrabajador;
    filtro := filtro + ' order by trabajador asc,fecha asc';

    dm.qnominasdetalle.DisableControls;
    try
      dm.qnominasdetalle.Close;
      dm.qnominasdetalle.SQL.Clear;
      dm.qnominasdetalle.SQL.Add('select * from trabajo_diario ' + filtro);
      dm.qnominasdetalle.Open;
    finally
      dm.qnominasdetalle.EnableControls;
    end;

    dm.qanticiposdetalle.DisableControls;
    try
      dm.qanticiposdetalle.Close;
      dm.qanticiposdetalle.SQL.Clear;
      dm.qanticiposdetalle.SQL.Add('select * from anticipos ' + filtro);
      dm.qanticiposdetalle.Open;
    finally
      dm.qanticiposdetalle.EnableControls;
    end;

    dm.qaux.Close;
    dm.qaux.SQL.Clear;
    dm.qaux.SQL.Add('select count(distinct(idt)) from trabajo_diario ' + filtro);
    dm.qaux.Open;
    ltotalgrupo3.Caption := 'Total Empleados: ' + dm.qaux.Fields[0].AsString;

    // Solo actualizar consultas de la pestaña 5 (Listado por Horas) si está activa
    if PageNominas.ActivePage = Nominaspag5 then
    begin
      fdesde := FormatDateTime('yyyy-mm-dd', nomlhdesde.Date);
      fhasta := FormatDateTime('yyyy-mm-dd', nomlhhasta.Date);

      filtro := ' where codart in (select distinct(articulo) from trabajo_diario where fecha>=''' +
        fdesde + ''' and fecha<=''' + fhasta + ''') order by codart';
      filtro2 :=
        ' where id in (select distinct(idt) from trabajo_diario td,articulos a, parcelas p where td.parcela=p.codpar and p.seleccionado=1 and td.articulo=a.codart and a.seleccionado=1 and fecha>=''' +
        fdesde + ''' and fecha<=''' + fhasta + ''') order by nombre';

      dm.qtipohoras2.Close;
      dm.qtipohoras2.SQL.Clear;
      dm.qtipohoras2.SQL.Add('select codart,seleccionado from articulos ' + filtro);
      dm.qtipohoras2.Open;

      dm.qtrabajadores2.Close;
      dm.qtrabajadores2.SQL.Clear;
      dm.qtrabajadores2.SQL.Add('select id,nombre,seleccionado from trabajadores '
        + filtro2);
      dm.qtrabajadores2.Open;

      dm.qlistadohoras.Close;
    end;
  finally
    Screen.Cursor := crDefault;
  end;
end;

procedure TBASE.Button24Click(Sender: TObject);
var
  anyo, mes, dia: word;
  fdesde, fhasta: string;
begin
  decodedate(fprodesde.Date, anyo, mes, dia);
  fdesde := inttostr(anyo) + '-' + inttostr(mes) + '-' + inttostr(dia);
  // decodedate(fprohasta.Date, anyo, mes, dia);
  // fhasta := inttostr(anyo) + '-' + inttostr(mes) + '-' + inttostr(dia);

  informedb.DataSource := dm.dsqmovimientomesas;
  dm.qmovimientomesas.Close;
  dm.qmovimientomesas.Prepare;
  dm.qmovimientomesas.ParamByName('FECHA').AsDate := fprodesde.Date;
  // dm.qmovimientomesas.sql.Add('select * from movimiento_mesas where fecha in (select fecha from calendario_laboral where festivo=0) and fecha>='+''''+fdesde+''''+' and fecha<='+''''+fhasta+''''+' order by trabajador,fecha,entrada_real');
  dm.qmovimientomesas.Open;

  informes.Report.Clear;
  informes.LoadFromFile('c:\agrigest\informes\listadoticados.fr3');
  informes.Variables.Variables['TITULO'] :=
    QUOTEDSTR('TICADOS DEL DIA' + datetostr(fprodesde.Date));

  // informes.Report.FileName:=TMES.Text+' ' + qjornalestrabajador.asstring;
  informes.ShowReport();
  informes.Clear

end;

procedure TBASE.Button25Click(Sender: TObject);
var
  ult_parte, idt, dias: Integer;
  horas, resto, restohoras: real;
  parcial, festivo: Boolean;
  anyo, mes, dia: word;
begin
  qaux.SQL.Clear;
  qaux.SQL.Add('delete from partes_diarios where validado=0 and idt=' +
    dm.qempleadosidt.AsString);
  qaux.ExecSQL;
  qaux.SQL.Clear;
  qaux.SQL.Add('select max(id)+1 from partes_diarios');
  qaux.Open;
  ult_parte := qaux.Fields[0].AsInteger;
  dm.qtrabajo_diario.SQL.Clear;
  dm.qtrabajo_diario.SQL.Add('select * from trabajo_diario where idt=' +
    dm.qempleadosidt.AsString +
    ' and (idparte1 is NULL or idparte2 is NULL) order by trabajador asc,fecha');
  dm.qtrabajo_diario.Open;
  if dm.qtrabajo_diario.RecordCount = 0 then
  begin
    dm.qtrabajo_diario.SQL.Clear;
    dm.qtrabajo_diario.SQL.Add('select * from trabajo_diario where idt=' +
      dm.qempleadosidt.AsString +
      ' and (idparte1=0 or idparte2=0) order by trabajador asc,fecha');
    dm.qtrabajo_diario.Open;
  end;
  horas := 0;
  while not dm.qtrabajo_diario.Eof do
  begin
    horas := horas + dm.qtrabajo_diariohoras_acumuladas.AsFloat;
    if horas < 8 then
    begin
      dm.qtrabajo_diario.edit;
      dm.qtrabajo_diariohoras_acumuladas.Value := 0;
      if parcial = false then
        dm.qtrabajo_diarioidparte1.Value := ult_parte;
      if parcial = true then
        dm.qtrabajo_diarioidparte2.Value := ult_parte;
      dm.qtrabajo_diario.post;
      dm.qtrabajo_diario.Next;
      parcial := false;
    end;
    if horas > 8 then
    begin
      resto := horas - 8;
      horas := 8;
      parcial := true;
      dm.qtrabajo_diario.edit;
      dm.qtrabajo_diariohoras_acumuladas.Value := resto;
      dm.qtrabajo_diarioidparte1.Value := ult_parte;
      dm.qtrabajo_diario.post;
    end;
    if horas = 8 then
    begin
      decodedate(dm.qtrabajo_diariofecha.AsDateTime, anyo, mes, dia);
      qaux.SQL.Clear;
      qaux.SQL.Add
        ('select count(*) from calendario_laboral where festivo=0 and year(fecha)='
        + floattostr(anyo) + ' and month(fecha)=' + floattostr(mes));
      qaux.Open;
      dias := qaux.Fields[0].AsInteger;
      qaux.SQL.Clear;
      qaux.SQL.Add('select sum(horas) from partes_diarios where idt=' +
        dm.qempleadosidt.AsString + ' and year(fecha)=' + floattostr(anyo) +
        ' and month(fecha)=' + floattostr(mes));
      qaux.Open;
      restohoras := (dias * 8) - qaux.Fields[0].AsFloat;
      if restohoras > 0 then
      begin
        dm.qpartes_diarios.Close;
        dm.qpartes_diarios.Open;
        dm.qpartes_diarios.Append;
        dm.qpartes_diariosid.Value := ult_parte;
        dm.qpartes_diarioside.Value := dm.qtrabajo_diarioempresa.AsInteger;
        dm.qpartes_diariosidt.Value := dm.qtrabajo_diarioidt.AsInteger;
        dm.qpartes_diariostrabajador.Value :=
          dm.qtrabajo_diariotrabajador.AsString;
        dm.tcalendario_laboral.Open;
        dm.tcalendario_laboral.Locate('fecha',
          dm.qtrabajo_diariofecha.AsDateTime, [locaseinsensitive]);
        dm.qpartes_diariosfecha.Value := dm.qtrabajo_diariofecha.AsDateTime;
        if horas < restohoras then
          dm.qpartes_diarioshoras.Value := horas
        else
          dm.qpartes_diarioshoras.Value := restohoras;
        dm.qpartes_diariosvalidado.Value := 0;
        dm.qpartes_diariosfestivo.Value :=
          dm.tcalendario_laboralfestivo.AsInteger;
        dm.qpartes_diarios.post;
        horas := 0;
        ult_parte := ult_parte + 1;
      end
      else
      begin
        horas := 0;
        ult_parte := ult_parte + 1;
      end;
    end;
    // dm.qtrabajo_diario.Next;
  end;
  dm.TFirmas.Open;
  dm.qfirmas.Open;
end;

procedure TBASE.Button26Click(Sender: TObject);
begin
  // informedb.Datasource:=dmestadisticas.dsqproducciondetalle;
  dmestadisticas.qinfentradas.Close;
  dmestadisticas.qinfentradas.Prepare;
  dmestadisticas.qinfentradas.ParamByName('FINICIO').AsDate :=
    dmestadisticas.qcampanyasfechainicio.AsDateTime;
  dmestadisticas.qinfentradas.ParamByName('FFIN').AsDate :=
    dmestadisticas.qcampanyasfechafin.AsDateTime;
  dmestadisticas.qinfentradas.ParamByName('PARCELA').AsString :=
    dm.qparcelascodpar.AsString;
  dmestadisticas.qinfentradas.Open;
  { dmestadisticas.qinfentradas.SQL.Clear;
    dmestadisticas.qinfentradas.SQL.Add('(select v.id,v.fecha,v.fechatrabajo,v.parcela,v.mprima_p as mprima,v.mprima_p as mprima_p,v.id_envase,v.num_envases,v.destino as cliente,'+''''+' '+''''+' as ciudad,v.peso_neto,v.peso_neto_teorico,v.peso_medio,v.temperatura,v.lote,v.idalbaran ');
    dmestadisticas.qinfentradas.SQL.Add(' from v_ea_pesadaslotes v where v.idea>0 and fecha>='+''''+vfechainicio+''''+' and fecha<='+''''+vfechafin+''''+' and v.pedidocliente is null)');
    dmestadisticas.qinfentradas.SQL.Add(' UNION ALL');
    dmestadisticas.qinfentradas.SQL.Add('(select v.id,v.fecha,v.fechatrabajo,v.parcela,v.mprima_p as mprima,v.mprima_p as mprima_p,v.id_envase,v.num_envases,c.nombre as cliente,p.iddestino as ciudad,v.peso_neto,v.peso_neto_teorico,v.peso_medio,v.temperatura,v.lote,v.idalbaran ');
    dmestadisticas.qinfentradas.SQL.Add(' from v_ea_pesadaslotes v, pedidos p,clientes c where v.idea>0 and fecha>='+''''+vfechainicio+''''+' and fecha<='+''''+vfechafin+''''+' and v.pedidocliente is not null and v.pedidocliente=p.id and p.idcliente=c.id)');
    dmestadisticas.qinfentradas.SQL.Add(' order by mprima,id desc, fecha'); }

  informedb.DataSource := dmestadisticas.dsqinfentradas;

  informes.Report.Clear;
  informes.LoadFromFile('c:\agrigest\informes\entradasparcela.fr3');
  informes.Variables.Variables['TITULO'] :=
    QUOTEDSTR('Parcela: ' + dm.qparcelasnombre.AsString + ' Campa�a: ' +
    dmestadisticas.qcampanyasdescripcion.AsString + ' RECOLECCI�N');

  informes.ShowReport();
  informes.Clear

end;

procedure TBASE.Button27Click(Sender: TObject);
var
  filtro: string;
begin
  filtro := dmproduccion.qpartesdiariosid.AsString;
  dmproduccion.qpartesdiarios.filter := 'id=' + filtro;
  dmproduccion.qpartesdiarios.filtered := true;
  informedb.DataSource := dmproduccion.dspartesdiarios;
  informedb2.DataSource := dmproduccion.dsqentradas2;
  informedb3.DataSource := dmproduccion.dsqsalidas2;
  informedb4.DataSource := dmproduccion.dsqentradas;
  informedb5.DataSource := dmproduccion.dsqsalidaslotes;
  informedb6.DataSource := dmproduccion.dsqentradas;
  informedb7.DataSource := dmproduccion.dsqsalidaslotes;
  { if edit2.text<>'' then
    begin
    dmestadisticas.qproduccionimpresion.close;
    dmestadisticas.qproduccionimpresion.sql.clear;
    dmestadisticas.qproduccionimpresion.sql.add('select *  from ea_pesadas ea where  codigoR='+''''+'R'+edit2.Text+''''+' order by ea.destino,ea.id_envase,ea.fecha,ea.id,ea.mprima');
    dmestadisticas.qproduccion.Open;

    end;
  }
  informes.Report.Clear;
  informes.LoadFromFile('c:\agrigest\informes\informe_partediario.fr3');
  informes.Variables.Variables['TITULO'] := QUOTEDSTR(Panel100.Caption);

  // informes.Report.FileName:=TMES.Text+' ' + qjornalestrabajador.asstring;
  informes.ShowReport();
  informes.Clear;
  dmproduccion.qpartesdiarios.filtered := false;
end;

procedure TBASE.Button28Click(Sender: TObject);
var
  ult_parte, idt, dias: Integer;
  horas, resto, restohoras: real;
  parcial, festivo: Boolean;
  anyo, mes, dia: word;
begin
  qaux.SQL.Clear;
  qaux.SQL.Add('delete from partes_diarios where validado=0 and idt=' +
    dm.qpersonasmesasidt.AsString);
  qaux.ExecSQL;
  qaux.SQL.Clear;
  qaux.SQL.Add('select max(id)+1 from partes_diarios');
  qaux.Open;
  ult_parte := qaux.Fields[0].AsInteger;
  dm.qtrabajo_diario.SQL.Clear;
  dm.qtrabajo_diario.SQL.Add('select * from trabajo_diario where idt=' +
    dm.qpersonasmesasidt.AsString +
    ' and (idparte1 is NULL or idparte2 is NULL) order by trabajador asc,fecha');
  dm.qtrabajo_diario.Open;
  if dm.qtrabajo_diario.RecordCount = 0 then
  begin
    dm.qtrabajo_diario.SQL.Clear;
    dm.qtrabajo_diario.SQL.Add('select * from trabajo_diario where idt=' +
      dm.qpersonasmesasidt.AsString +
      ' and (idparte1=0 or idparte2=0) order by trabajador asc,fecha');
    dm.qtrabajo_diario.Open;
  end;
  horas := 0;
  while not dm.qtrabajo_diario.Eof do
  begin
    horas := horas + dm.qtrabajo_diariohoras_acumuladas.AsFloat;
    if horas < 8 then
    begin
      dm.qtrabajo_diario.edit;
      dm.qtrabajo_diariohoras_acumuladas.Value := 0;
      if parcial = false then
        dm.qtrabajo_diarioidparte1.Value := ult_parte;
      if parcial = true then
        dm.qtrabajo_diarioidparte2.Value := ult_parte;
      dm.qtrabajo_diario.post;
      dm.qtrabajo_diario.Next;
      parcial := false;
    end;
    if horas > 8 then
    begin
      resto := horas - 8;
      horas := 8;
      parcial := true;
      dm.qtrabajo_diario.edit;
      dm.qtrabajo_diariohoras_acumuladas.Value := resto;
      dm.qtrabajo_diarioidparte1.Value := ult_parte;
      dm.qtrabajo_diario.post;
    end;
    if horas = 8 then
    begin
      decodedate(dm.qtrabajo_diariofecha.AsDateTime, anyo, mes, dia);
      qaux.SQL.Clear;
      qaux.SQL.Add
        ('select count(*) from calendario_laboral where festivo=0 and year(fecha)='
        + floattostr(anyo) + ' and month(fecha)=' + floattostr(mes));
      qaux.Open;
      dias := qaux.Fields[0].AsInteger;
      qaux.SQL.Clear;
      qaux.SQL.Add('select sum(horas) from partes_diarios where idt=' +
        dm.qpersonasmesasidt.AsString + ' and year(fecha)=' + floattostr(anyo) +
        ' and month(fecha)=' + floattostr(mes));
      qaux.Open;
      restohoras := (dias * 8) - qaux.Fields[0].AsFloat;
      if restohoras > 0 then
      begin
        dm.qpartes_diarios2.Close;
        dm.qpartes_diarios2.Open;
        dm.qpartes_diarios2.Append;
        dm.qpartes_diarios2id.Value := ult_parte;
        dm.qpartes_diarios2ide.Value := dm.qtrabajo_diarioempresa.AsInteger;
        dm.qpartes_diarios2idt.Value := dm.qtrabajo_diarioidt.AsInteger;
        dm.qpartes_diarios2trabajador.Value :=
          dm.qtrabajo_diariotrabajador.AsString;
        dm.tcalendario_laboral.Open;
        dm.tcalendario_laboral.Locate('fecha',
          dm.qtrabajo_diariofecha.AsDateTime, [locaseinsensitive]);
        dm.qpartes_diarios2fecha.Value := dm.qtrabajo_diariofecha.AsDateTime;
        if horas < restohoras then
          dm.qpartes_diarios2horas.Value := horas
        else
          dm.qpartes_diarios2horas.Value := restohoras;
        dm.qpartes_diarios2validado.Value := 0;
        dm.qpartes_diarios2festivo.Value :=
          dm.tcalendario_laboralfestivo.AsInteger;
        dm.qpartes_diarios2.post;
        horas := 0;
        ult_parte := ult_parte + 1;
      end
      else
      begin
        horas := 0;
        ult_parte := ult_parte + 1;
      end;
    end;
    // dm.qtrabajo_diario.Next;
  end;
  dm.TFirmas.Open;
  dm.qfirmas.Open;
end;

procedure TBASE.Button29Click(Sender: TObject);
var
  usbDevices: IUsbDevices;
  usbDevice: IUsbDevice;
begin
  usbDevices := CoUsbDevices.Create();
  if (usbDevices.Count > 0) then
  begin
    try
      begin
        usbDevice := usbDevices.Item[0]; // select the first device
        VFirmas := Tvfirmas.Create(nil);
        try
          VFirmas.connect(usbDevice);
          VFirmas.ShowModal();
        finally
          VFirmas.Free;
        end;

      end;
    except
      on e: exception do
        showmessage(e.Message);
    end;
    // dm.TFirmas.Open;
    dm.qFirmas2.Append;
    dm.qFirmas2ide.Value := dm.qpartes_diarios2ide.AsInteger;
    dm.qFirmas2idt.Value := dm.qpartes_diarios2idt.AsInteger;
    dm.qFirmas2firma.LoadFromFile('c:\agrigest\informes\firma.bmp');
    dm.qFirmas2.post;
    tfirmaproduccion.Picture.LoadFromFile('c:\agrigest\informes\firma.bmp');

    if not dm.qpartes_diarios2.Active then
      dm.qpartes_diarios2.Open;
    dm.qpartes_diarios2.edit;
    dm.qpartes_diarios2validado.Value := 1;
    dm.qpartes_diarios2firma.Value := dm.qFirmas2id.AsInteger;
    dm.qpartes_diarios2.post;
    Deletefile('c:\agrigest\informes\firma.bmp');
  end
  else
  begin
    showmessage('Tableta de firma no conectada');
  end;

end;

procedure TBASE.Button2Click(Sender: TObject);
begin
  if temp_fotosidt.AsInteger = templeadosID.AsInteger then
    temp_fotos.Delete;
  Image2.Picture := nil;
end;

procedure TBASE.btPcancelarClick(Sender: TObject);
var
  codigo: Integer;
begin
  codigo := dmtr.qlotescodigo.AsInteger;
  dmtr.qlotes.cancel;
  dmtr.qlotes.Locate('codigo', codigo, [locaseinsensitive, lopartialkey]);
end;

procedure TBASE.btLguardarClick(Sender: TObject);
var
  codigo: Integer;
begin
  codigo := dmtr.qlotescodigo.AsInteger;
  dmtr.qlotesPRODUCTOR.Value := qsocios2nombre.AsString;
//  dmtr.qlotespaisorigen.Value := qsocios2pais.AsString;
  dmtr.qlotes.post;
  dmtr.qlotes.Close;
  dmtr.qlotes.Open;
  dmtr.qlotes.Locate('codigo', codigo, [locaseinsensitive, lopartialkey]);
end;

procedure TBASE.btLImprimirClick(Sender: TObject);
var vsgg,vsdop,vsigp,vsifs,vsbrc:string;
begin
  if dmtr.qlotessgg.AsString='' then vsgg:='' else   vsgg:='GLOGALGAP: '+ dmtr.qlotessgg.Asstring;
  if dmtr.qlotessdop.AsString='' then vsdop:='' else   vsdop:='DOP: ' + dmtr.qlotessdop.Asstring;
  if dmtr.qlotessigp.AsString='' then vsigp:='' else   vsigp:='IGP: ' + dmtr.qlotessigp.Asstring;
  if dmtr.qlotessifs.AsString='' then vsifs:='' else   vsifs:='IFS: ' + dmtr.qlotessifs.Asstring;
  if dmtr.qlotessbrc.AsString='' then vsbrc:='' else   vsbrc:='BRC: ' + dmtr.qlotessbrc.Asstring;
  dmtr.qsalidas_sd.Close;
  dmtr.qsalidas_sd.Prepare;
  dmtr.qsalidas_sd.ParamByName('LOTE').AsInteger := dmtr.qlotescodigo.AsInteger;
  dmtr.qsalidas_sd.Open;
  dmtr.qsalidas_ds.Close;
  dmtr.qsalidas_ds.Prepare;
  dmtr.qsalidas_ds.ParamByName('LOTE').AsInteger := dmtr.qlotescodigo.AsInteger;
  dmtr.qsalidas_ds.Open;
  dmtr.qinfentradas.Close;
  dmtr.qinfentradas.Prepare;
  dmtr.qinfentradas.ParamByName('LOTE').AsInteger :=
    dmtr.qlotescodigo.AsInteger;
  dmtr.qinfentradas.Open;

  informedb.DataSource := dmtr.dsqinfentradas;
  // dmestadisticas.dsqproduccionimpresion;
  informedb2.DataSource := dmtr.dsqsalidas_sd;
  // dmestadisticas.dsqproduccionimpresion;
  informedb3.DataSource := dmtr.dsqsalidas_ds;
  // dmestadisticas.dsqproduccionimpresion;

  informes.Report.Clear;
  informes.LoadFromFile('c:\agrigest\informes\loteentradas.fr3');
  informes.Variables.Variables['SELLOGG'] := QUOTEDSTR(vsgg);
  informes.Variables.Variables['SELLODOP'] := QUOTEDSTR(vsdop);
  informes.Variables.Variables['SELLOIGP'] := QUOTEDSTR(vsigp);
  informes.Variables.Variables['SELLOIFS'] := QUOTEDSTR(vsifs);
  informes.Variables.Variables['SELLOBRC'] := QUOTEDSTR(vsbrc);

  informes.Variables.Variables['TITULO'] :=
    QUOTEDSTR('Entradas del LOTE: ' + dmtr.qlotescodigo.AsString +
    ' Trazabilidad: ' + dmtr.qlotestrazabilidad.AsString);
  informes.Variables.Variables['TITULO2'] :=
    QUOTEDSTR('Envasados del LOTE: ' + dmtr.qlotescodigo.AsString +
    ' Trazabilidad: ' + dmtr.qlotestrazabilidad.AsString);
  informes.Variables.Variables['TITULO3'] :=
    QUOTEDSTR('Desechos del LOTE: ' + dmtr.qlotescodigo.AsString +
    ' Trazabilidad: ' + dmtr.qlotestrazabilidad.AsString);
  informes.Variables.Variables['FECHA1'] := QUOTEDSTR('F.Cosecha');
  informes.Variables.Variables['FECHA2'] := QUOTEDSTR('F.Trabajo');
  informes.Variables.Variables['FECHA3'] := QUOTEDSTR('F.Elav.');
  informes.Variables.Variables['FECHA4'] := QUOTEDSTR('F.Remani.');
  informes.Variables.Variables['FECHA5'] := QUOTEDSTR('F.Elav.');
  informes.Variables.Variables['FECHA6'] := QUOTEDSTR('F.Remani.');
  informes.ShowReport();
  informes.Clear

end;

procedure TBASE.btMmodificarClick(Sender: TObject);
begin
  dmtr.qlotes.edit;
  lfecha.SetFocus;
end;

procedure TBASE.btPnuevoClick(Sender: TObject);
var
  tcodigo: string;
begin
  dmtr.qlotes.First;
  dmtr.qaux.SQL.Clear;
  dmtr.qaux.SQL.Add('select max(codigo)+1 from lotes');
  dmtr.qaux.Open;
  tcodigo := dmtr.qaux.Fields[0].AsString;
  dmtr.qlotes.Append;
  dlotescodigo.SetFocus;
  dlotescodigo.Text := tcodigo;
end;

procedure TBASE.btprodaceptarClick(Sender: TObject);
var
  anyo,mes,dia:word;
  vmesa, vmprima, vproducto: string;
  fdesde: string;
begin
  decodedate(fprodesde.Date, anyo, mes, dia);
  fdesde := inttostr(anyo) + '-' + inttostr(mes) + '-' + inttostr(dia);
  // decodedate(fprohasta.Date, anyo, mes, dia);
  // fhasta := inttostr(anyo) + '-' + inttostr(mes) + '-' + inttostr(dia);

  Timer1.Enabled := false;
if dmproduccion.qcalendario_laboral.State in [dsedit] then dmproduccion.qcalendario_laboral.Post;
     dmproduccion.qcalendario_laboral.close;
     dmproduccion.qcalendario_laboral.ParamByName('FECHA').Asdate:=fprodesde.Date;
     dmproduccion.qcalendario_laboral.Prepare;
     dmproduccion.qcalendario_laboral.Open;

    dm.qproduccion.Close;
    dm.qproduccion.prepare;
    dm.qproduccion.ParamByName('fecha').AsDate:=fprodesde.Date;
    dm.qproduccion.Open;

  { decodedate(fprodesde.Date,anyo,mes,dia);
    fdesde:=inttostr(anyo)+'-'+inttostr(mes)+'-'+inttostr(dia);
    decodedate(fprohasta.Date,anyo,mes,dia);
    fhasta:=inttostr(anyo)+'-'+inttostr(mes)+'-'+inttostr(dia);


    dm.qcontrolproduccion.Close;
    dm.qcontrolproduccion.sql.Clear;
    dm.qcontrolproduccion.sql.Add('select * from control_produccion where fecha>='+''''+fdesde+''''+' and fecha<='+''''+fhasta+'''');
    dm.qcontrolproduccion.open;


    dm.qproduccion.Close;
    dm.qproduccion.sql.Clear;
    dm.qproduccion.sql.Add('select * from v_produccion where fecha>='+''''+fdesde+''''+' and fecha<='+''''+fhasta+''''+' order by fecha desc');
    dm.qproduccion.open;


    dm.qmesas.Close;
    dm.qmesas.SQL.Clear;
    dm.qmesas.SQL.Add('select distinct(mesa) from movimiento_mesas where fecha>='+''''+fdesde+''''+' and fecha<='+''''+fhasta+''''+' order by mesa');
    dm.qmesas.open;
    dm.qproduccionmesa2.close;
    dm.qproduccionmesa2.sql.clear;
    dm.qproduccionmesa2.sql.Add('select p.mesa,p.cantidad,h.horasmesa,p.cantidad/h.horasmesa as cantidadhora from (SELECT mesa,sum(peso_real-tara) as cantidad,idt,embasadora FROM produccion where fecha>='+''''+fdesde+''''+' and fecha<='+''''+fhasta+''''+' group by mesa order by mesa) as p ' );
    dm.qproduccionmesa2.sql.Add(' inner join ');
    dm.qproduccionmesa2.sql.Add(' (select mesa,sum(horas) as horasmesa from ( select mesa,sum(timestampdiff(minute,entrada_real,SALIDA_REAL)/60) as horas from movimiento_mesas where fecha>='+''''+fdesde+''''+' and fecha<='+''''+fhasta+''''+' and SALIDA_REAL is NOT null group by mesa ');
    dm.qproduccionmesa2.sql.Add(' union ALL');
    dm.qproduccionmesa2.sql.Add(' select mesa,sum(timestampdiff(minute,entrada_real,now())/60) as horas from movimiento_mesas where fecha>='+''''+fdesde+''''+' and fecha<='+''''+fhasta+''''+' and SALIDA_REAL is null group by mesa ) as grupo GROUP by mesa) as h');
    dm.qproduccionmesa2.SQL.Add(' on p.mesa=h.mesa');
    dm.qproduccionmesa2.open; }



  if Pageproduccion.TabIndex = 5 then
  begin
    Timer1.Enabled := true;
    Panel49.Visible := false;
    qproduccionmesas.Close;
    qproduccionmesas.Prepare;
    qproduccionmesas.ParamByName('FECHA').AsDate := fprodesde.Date;
    qproduccionmesas.Open;
    qproduccionmatprima.Close;
    qproduccionmatprima.Prepare;
    qproduccionmatprima.ParamByName('FECHA').AsDate := fprodesde.Date;
    qproduccionmatprima.Open;
    qproduccionproducto.Close;
    qproduccionproducto.Prepare;
    qproduccionproducto.ParamByName('FECHA').AsDate := fprodesde.Date;
    qproduccionproducto.Open;
    if comboprodmesas.KeyValue = null then
      vmesa := '%'
    else
      vmesa := comboprodmesas.KeyValue;
    if comboprodmprimas.KeyValue = null then
      vmprima := '%'
    else
      vmprima := comboprodmprimas.KeyValue;
    if comboprodproducto.KeyValue = null then
      vproducto := '%'
    else
      vproducto := comboprodproducto.KeyValue;
    dm.qproduccionmesa.Close;
    dm.qproduccionmesa.Prepare;
    dm.qproduccionmesa.ParamByName('FECHA').AsDate := fprodesde.Date;
    dm.qproduccionmesa.ParamByName('MESA').AsString := vmesa;
    dm.qproduccionmesa.ParamByName('MPRIMA').AsString := vmprima;
    dm.qproduccionmesa.ParamByName('PRODUCTO').AsString := vproducto;
    dm.qproduccionmesa.ParamByName('HDESDE').Asinteger:=hdesde.ItemIndex;
    dm.qproduccionmesa.ParamByName('HHASTA').Asinteger:=hhasta.ItemIndex;
    dm.qproduccionmesa.Open;
  end;
  { dm.qproduccionembasadora.Close;
    dm.qproduccionembasadora.sql.Clear;
    dm.qproduccionembasadora.sql.Add('SELECT mesa,bascula,producto,count(*) as pesadas,sum(peso_real-tara) as cantidad,idt,embasadora FROM produccion where fecha>='+''''+fdesde+''''+' and fecha<='+''''+fhasta+''''+' group by mesa,bascula,producto,idt order by fecha DESC,mesa,bascula');
    dm.qproduccionembasadora.open;
    dm.qproduccionhora.Close;
    dm.qproduccionhora.sql.Clear;
    dm.qproduccionhora.sql.Add('select hour(hora) as hora,sum(peso_real-tara) as cantidad from produccion where fecha>='+''''+fdesde+''''+' and fecha<='+''''+fhasta+''''+' group by hour(hora)');
    dm.qproduccionhora.open;
  }
  if Pageproduccion.TabIndex = 6 then
  begin
    Timer1.Enabled := true;
    Panel49.Visible := false;
    dm.qproduccionhora.Close;
    dm.qproduccionhora.SQL.Clear;
    dm.qproduccionhora.SQL.Add
      ('select hour(hora) as desde,hour(hora)+1 as hasta,sum(peso_real-tara) as cantidad from produccion where fecha>='
      + '''' + fdesde + '''' + ' group by hour(hora)');
    dm.qproduccionhora.Open;
  end;

  if Pageproduccion.TabIndex = 7 then
  begin
    dm.qcontrolproduccion.Close;
    dm.qcontrolproduccion.Prepare;
    dm.qcontrolproduccion.ParamByName('fecha').AsDate:=fprodesde.Date;
    dm.qcontrolproduccion.Open;
  end;
  Timer1.Enabled := true;
end;

procedure TBASE.Button30Click(Sender: TObject);
var
  archivo: string;
begin
  archivo := 'c:\agrigest\STOCK' + dm.qalmacenesnombre.AsString + '.xlsx';
  try
    ExportaraExcel(archivo, 'STOCK' + dm.qalmacenesnombre.AsString, DBGrid55);
    showmessage('Los datos han sido exportados correctamente a ' + archivo);
  except
    on E: Exception do
      showmessage('Error al exportar: ' + E.Message);
  end;
end;

procedure TBASE.Button35Click(Sender: TObject);
var
  lote: string;
begin
  lote := dmtr.qlotescodigo.AsString;
  qaux.SQL.Clear;
  qaux.SQL.Add
    ('update lotes set entran_reales=(SELECT sum(peso_neto) as entran_reales FROM v_ea_pesadaslotes where lote='
    + inttostr(dmtr.qlotescodigo.AsInteger) + ' and idea>0) where codigo=' +
    inttostr(dmtr.qlotescodigo.AsInteger));
  qaux.ExecSQL;
  qaux.SQL.Clear;
  qaux.SQL.Add
    ('update lotes set entran_teoricos=(SELECT sum(peso_neto_teorico) as entran_teoricos FROM v_ea_pesadaslotes where lote='
    + inttostr(dmtr.qlotescodigo.AsInteger) + ' and idea>0) where codigo=' +
    inttostr(dmtr.qlotescodigo.AsInteger));
  qaux.ExecSQL;
  qaux.SQL.Clear;
  qaux.SQL.Add
    ('update lotes set salen_reales=(SELECT sum(peso_neto) as entran_reales FROM v_ea_pesadaslotes where lote='
    + inttostr(dmtr.qlotescodigo.AsInteger));
  qaux.SQL.Add
    (' and ((idea>0 and iddestino<>0 and iddestino in (select id from almacenes where final=1)) or ');
  qaux.SQL.Add
    (' (idea<=0) and iddestino in (select id from almacenes where (final=1 or camara=1 or mermas=1))) and mprima_p in (select id from materias_primas where desechos=0)) where codigo='
    + inttostr(dmtr.qlotescodigo.AsInteger));
  qaux.ExecSQL;
  qaux.SQL.Clear;
  qaux.SQL.Add
    ('update lotes set salen_teoricos=(SELECT sum(peso_neto_teorico) as entran_teoricos FROM v_ea_pesadaslotes where lote='
    + inttostr(dmtr.qlotescodigo.AsInteger));
  qaux.SQL.Add
    (' and ((idea>0 and iddestino<>0 and iddestino in (select id from almacenes where final=1)) or ');
  qaux.SQL.Add
    (' (idea<=0) and iddestino in (select id from almacenes where (final=1 or camara=1 or mermas=1))) and mprima_p in (select id from materias_primas where desechos=0)) where codigo='
    + inttostr(dmtr.qlotescodigo.AsInteger));
  qaux.ExecSQL;

  qaux.SQL.Clear;
  qaux.SQL.Add
    ('update lotes set desperdicios=(SELECT sum(peso_neto) as desperdicios FROM v_ea_pesadaslotes where lote='
    + inttostr(dmtr.qlotescodigo.AsInteger) +
    ' and mprima_p in (select id from materias_primas where desechos=1)) where codigo='
    + inttostr(dmtr.qlotescodigo.AsInteger));
  qaux.ExecSQL;

  dmtr.qsalidas.Refresh;
  dmtr.qea_pesadas.Refresh;
  dmtr.qlotes.Refresh;
  dmtr.qlotes.Locate('codigo', lote, [locaseinsensitive, lopartialkey]);

end;

procedure TBASE.Button36Click(Sender: TObject);
var
  archivo: string;
begin
  SaveDialog1.FileName := 'TRAZABILIDADSALIDAS.xls';
  if SaveDialog1.Execute() then
  begin
    archivo := SaveDialog1.FileName;
    try
      ExportaraExcel(archivo, 'STOCK', DBGrid36);
      showmessage('Los datos han sido exportados correctamente');
    except
      on E: Exception do
        showmessage('Error al exportar: ' + E.Message);
    end;
  end;
end;

procedure TBASE.btedocverClick(Sender: TObject);
begin
  if btedocver.Caption = 'Ver Doc.' then
  begin
    paneldocumentosempleados.Visible := true;
    dmtr.qdocumentos.Open;
    dmtr.qdocumentos.filter := 'ide=' + templeadoside.AsString + ' and idt=' +
      templeadosID.AsString;
    dmtr.qdocumentos.Refresh;
    btedocver.Caption := 'Ocultar Doc.';

  end
  else
  begin
    dmtr.qdocumentos.Close;
    paneldocumentosempleados.Visible := false;
    dmtr.qdocumentos.filter := 'id=-1 and idlote=-1';
    btedocver.Caption := 'Ver Doc.';
  end;
end;

procedure TBASE.btatborrarClick(Sender: TObject);
begin
  if not dm.tanticipos.Active then
    dm.tanticipos.Open;
  dm.tanticipos.Locate('id', dm.qanticiposdetalleid.AsInteger,
    [locaseinsensitive, lopartialkey]);
  dm.tanticipos.Delete;
  btactualizarempleadosnominas.Click;
end;

procedure TBASE.btatcancelarClick(Sender: TObject);
begin
  if dm.tanticipos.State in [dsedit, dsinsert] then
  begin
    dm.tanticipos.cancel;
    nomfechadesde.Date := fechaanticipos.Date;
    nomfechahasta.Date := fechaanticipos.Date;
    btactualizarempleadosnominas.Click;
    btatnuevo.Enabled := true;
    btatmodificar.Enabled := true;
    btatborrar.Enabled := true;
    btatguardar.Enabled := false;
    btatcancelar.Enabled := false;
    fechaanticipos.Enabled := false;
    panticipos.Enabled := false;
    qaux.SQL.Clear;
    qaux.SQL.Add('update trabajadores set seleccionado=0');
    qaux.ExecSQL;
    qempleados.Refresh;
  end;
end;

procedure TBASE.btatexcelClick(Sender: TObject);
var
  archivo: string;
begin
  SaveDialog1.FileName := 'ANTICIPOS.xls';
  if SaveDialog1.Execute() then
  begin
    archivo := SaveDialog1.FileName;
    try
      ExportaraExcel(archivo, 'ANTICIPOS', DBGrid5);
      showmessage('Los datos han sido exportados correctamente a ' + archivo);
    except
      on E: Exception do
        showmessage('Error al exportar: ' + E.Message);
    end;
  end;
end;

procedure TBASE.btatguardarClick(Sender: TObject);
var
  dia, mes, anyo: word;
  fecha: string;
  contador: Integer;
  totalimporte: real;
begin
  qaux.SQL.Clear;
  qaux.SQL.Add('select max(id)+1 from anticipos');
  qaux.Open;
  contador := qaux.Fields[0].AsInteger;
  if not dm.tanticipos.Active then
    dm.tanticipos.Open;
  if dm.tanticipos.State in [dsedit] then
  begin
    dm.tanticiposfecha.Value := fechaanticipos.Date;
    totalimporte := strtofloat(edimporte.Text);
    dm.tanticiposimporte.Value := strtofloat(FormatFloat('0.00', totalimporte));
    dm.tanticiposimporteletras.Value :=
      CantidadEnLetra(dm.tanticiposimporte.AsFloat, 1);
    dm.tanticiposobservaciones.Value := edconcepto.Text;
    dm.tanticiposformapago.Value := edformapago.Text;
    dm.tanticiposestado.Value := 'C';
    dm.tanticipos.post;
    dm.tanticipos.Refresh;
    dm.qanticiposdetalle.Refresh;
  end
  else
  begin
    qaux.SQL.Clear;
    qaux.SQL.Add('select id,nombre from trabajadores where seleccionado=1');
    qaux.Open;
    if qaux.RecordCount > 0 then
    begin
      while not qaux.Eof do
      begin
        dm.tanticipos.Append;
        dm.tanticiposid.Value := contador;
        dm.tanticiposfecha.Value := fechaanticipos.Date;
        totalimporte := strtofloat(edimporte.Text);
        dm.tanticiposimporte.Value :=
          strtofloat(FormatFloat('0.00', totalimporte));
        dm.tanticiposimporteletras.Value :=
          CantidadEnLetra(dm.tanticiposimporte.AsFloat, 1);
        dm.tanticiposobservaciones.Value := edconcepto.Text;
        dm.tanticiposformapago.Value := edformapago.Text;
        dm.tanticiposestado.Value := 'C';
        dm.tanticiposidt.Value := qaux.Fields[0].AsInteger;
        dm.tanticipostrabajador.Value := qaux.Fields[1].AsString;
        dm.tanticipos.post;
        contador := contador + 1;
        qaux.Next;
      end;
      nomfechadesde.Date := fechaanticipos.Date;
      nomfechahasta.Date := fechaanticipos.Date;
      btactualizarempleadosnominas.Click;
    end
    else
    begin
      showmessage('DEBE SELECCIONAR AL MENOS UN TRABAJADOR');
    end;

  end;

  btatnuevo.Enabled := true;
  btatborrar.Enabled := true;
  btatguardar.Enabled := false;
  btatmodificar.Enabled := true;
  btatcancelar.Enabled := false;
  fechaanticipos.Enabled := false;
  panticipos.Enabled := false;
  qaux.SQL.Clear;
  qaux.SQL.Add('update trabajadores set seleccionado=0');
  qaux.ExecSQL;
  qempleados.Refresh;
  checktodos.Checked := false;

end;

procedure TBASE.btatimprimirClick(Sender: TObject);
var
  X: Integer;
  anyo, mes, dia, hora, minutos, segundos, milisegundos: word;
  txanyo, txmes, txdia, txhora, txminutos, txsegundos, txnumlineas,
    txcantidadtotal, txlinea: string;
  txnombre, txdireccion, txtotalapagar, archivo, tnif, tdireccion, tcuenta,
    tpoblacion, tcp: string;
  tempresacif, tempresanombre, tempresadireccion, tempresapoblacion, tempresacp,
    tempresacuenta: string;
  linea: real;
  F: TextFile;
begin
  case listainformesanticipos.ItemIndex of
    0:
      begin
        informedb.DataSource := dm.dsqanticiposdetalle;
        informes.Report.Clear;
        informes.LoadFromFile('c:\agrigest\informes\ANTICIPOSGENERAL.fr3');
        // informes.Report.FileName:=dm.qnominasdetalle.asstring;
        informes.ShowReport();
        informes.Clear
      end;
    1:
      begin
        informedb.DataSource := dm.dsqanticiposdetalle;
        dm.qanticiposdetalle.Close;
        dm.qanticiposdetalle.filter := 'formapago=' + '''' +
          listainformesanticipos.Text + '''';
        dm.qanticiposdetalle.filtered := true;
        dm.qanticiposdetalle.Open;
        informes.Report.Clear;
        informes.LoadFromFile('c:\agrigest\informes\recibo.fr3');
        informes.ShowReport();
        informes.Clear;
        dm.qanticiposdetalle.Close;
        dm.qanticiposdetalle.filtered := false;
        dm.qanticiposdetalle.Open;
      end;
    2:
      begin
        dm.qanticiposdetalle.Close;
        dm.qanticiposdetalle.filter := 'formapago=' + '''' +
          listainformesanticipos.Text + '''';
        dm.qanticiposdetalle.filtered := true;
        dm.qanticiposdetalle.Open;
        qaux.Close;
        qaux.SQL.Clear;
        qaux.SQL.Add('select sum(importe) from (' +
          dm.qanticiposdetalle.SQL.Text + ') as e where formapago=' + '''' +
          listainformesanticipos.Text + '''' + 'group by formapago');
        qaux.Open;
        decodedate(Date(), anyo, mes, dia);
        decodetime(Date(), hora, minutos, segundos, milisegundos);
        txanyo := floattostr(anyo);
        txmes := floattostr(mes);
        txdia := floattostr(dia);
        txhora := floattostr(hora);
        txminutos := floattostr(minutos);
        txsegundos := floattostr(segundos);
        txnumlineas := inttostr(dm.qanticiposdetalle.RecordCount);
        txcantidadtotal := FormatFloat(',0.00', qaux.Fields[0].AsFloat);
        txcantidadtotal := stringreplace(txcantidadtotal, '.', '',
          [rfReplaceAll]);
        txcantidadtotal := stringreplace(txcantidadtotal, ',', '.',
          [rfReplaceAll]);

        if Length(txmes) = 1 then
          txmes := '0' + txmes;
        if Length(txdia) = 1 then
          txdia := '0' + txdia;
        if Length(txhora) = 1 then
          txhora := '0' + txhora;
        if Length(txminutos) = 1 then
          txminutos := '0' + txminutos;
        if Length(txsegundos) = 1 then
          txsegundos := '0' + txsegundos;
        SaveDialog1.FileName := 'transferencia.xml';
        SaveDialog1.Execute();
        archivo := SaveDialog1.FileName;
        qaux.Close;
        qaux.SQL.Clear;
        qaux.SQL.Add
          ('select cif,nombre,direccion,codpost,poblacion,concat(cc_iban,cc_entidad,cc_oficina,cc_dc,cc_cc) as cuenta from empresa where id='
          + dm.tempresaid.AsString);
        qaux.Open;
        tempresacif := qaux.Fields[0].AsString;
        tempresanombre := qaux.Fields[1].AsString;
        tempresanombre := stringreplace(tempresanombre, '/', '?',
          [rfReplaceAll]);
        tempresanombre := stringreplace(tempresanombre, '�', '?',
          [rfReplaceAll]);
        tempresanombre := stringreplace(tempresanombre, '�', 'N',
          [rfReplaceAll]);
        tempresadireccion := qaux.Fields[2].AsString;
        tempresadireccion := stringreplace(tempresadireccion, '/', '?',
          [rfReplaceAll]);
        tempresadireccion := stringreplace(tempresadireccion, '�', '?',
          [rfReplaceAll]);
        tempresadireccion := stringreplace(tempresadireccion, '�', 'N',
          [rfReplaceAll]);
        tempresapoblacion := qaux.Fields[4].AsString;
        tempresapoblacion := stringreplace(tempresapoblacion, '/', '?',
          [rfReplaceAll]);
        tempresapoblacion := stringreplace(tempresapoblacion, '�', '?',
          [rfReplaceAll]);
        tempresapoblacion := stringreplace(tempresapoblacion, '�', 'N',
          [rfReplaceAll]);
        tempresacp := qaux.Fields[3].AsString;
        tempresacuenta := qaux.Fields[5].AsString;
        AssignFile(F, SaveDialog1.FileName);
        Rewrite(F);
        WriteLn(F,
          '<?xml version="1.0" encoding="UTF-8" standalone="no"?><Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03"><CstmrCdtTrfInitn><GrpHdr>');
        WriteLn(F, '<MsgId>' + tempresacif + 'AN0' + txanyo + txmes + txdia +
          txhora + txminutos + txsegundos + '</MsgId>');
        WriteLn(F, '<CreDtTm>' + txanyo + '-' + txmes + '-' + txdia + 'T' +
          txhora + ':' + txminutos + ':' + txsegundos + '</CreDtTm>');
        WriteLn(F, '<NbOfTxs>' + txnumlineas + '</NbOfTxs><CtrlSum>' +
          txcantidadtotal + '</CtrlSum>');
        WriteLn(F, '<InitgPty><Nm>' + tempresanombre +
          '</Nm><Id><OrgId><Othr><Id>' + tempresacif +
          'AN0</Id></Othr></OrgId></Id></InitgPty></GrpHdr>');
        WriteLn(F, '<PmtInf><PmtInfId>SCT' + txanyo + txmes + txdia + txhora +
          txminutos + txsegundos +
          '001</PmtInfId><PmtMtd>TRF</PmtMtd><BtchBookg>true</BtchBookg><NbOfTxs>'
          + txnumlineas + '</NbOfTxs><CtrlSum>' + txcantidadtotal +
          '</CtrlSum>');
        WriteLn(F, '<ReqdExctnDt>' + txanyo + '-' + txmes + '-' + txdia +
          '</ReqdExctnDt><Dbtr><Nm>' + tempresanombre + '</Nm>');
        WriteLn(F, '<PstlAdr><Ctry>ES</Ctry><AdrLine>' + tempresadireccion +
          '</AdrLine><AdrLine>' + tempresacp + ' ' + tempresapoblacion +
          '</AdrLine></PstlAdr></Dbtr><DbtrAcct><Id>');
        WriteLn(F, '<IBAN>' + tempresacuenta +
          '</IBAN></Id><Ccy>EUR</Ccy></DbtrAcct><DbtrAgt><FinInstnId><BIC>CCRIES2AXXX</BIC></FinInstnId></DbtrAgt><ChrgBr>SLEV</ChrgBr>');
        dm.qanticiposdetalle.First;
        linea := 1;
        while not dm.qanticiposdetalle.Eof do
        begin
          qaux.Close;
          qaux.SQL.Clear;
          qaux.SQL.Add
            ('select nif,direccion,poblacion,cp,concat(cbiban,cbbanco,cboficina,cbdc,cbcc) as cuenta from trabajadores where id='
            + dm.qanticiposdetalleidt.AsString);
          qaux.Open;
          tnif := qaux.Fields[0].AsString;
          tdireccion := qaux.Fields[1].AsString;
          tpoblacion := qaux.Fields[2].AsString;
          tcp := qaux.Fields[3].AsString;
          tcuenta := qaux.Fields[4].AsString;
          txlinea := FormatFloat(',0000', linea);
          txlinea := stringreplace(txlinea, '.', '', [rfReplaceAll]);
          txnombre := stringreplace(dm.qanticiposdetalletrabajador.AsString,
            '�', 'N', [rfReplaceAll]);
          txdireccion := stringreplace(tdireccion, '/', '?', [rfReplaceAll]);
          txdireccion := stringreplace(txdireccion, '�', '?', [rfReplaceAll]);
          txdireccion := stringreplace(txdireccion, '�', 'N', [rfReplaceAll]);
          txtotalapagar := FormatFloat(',0.00',
            dm.qanticiposdetalleimporte.AsFloat);
          txtotalapagar := stringreplace(txtotalapagar, '.', '',
            [rfReplaceAll]);
          txtotalapagar := stringreplace(txtotalapagar, ',', '.',
            [rfReplaceAll]);

          WriteLn(F, '<CdtTrfTxInf><PmtId><EndToEndId>' + tnif + '-20161-' +
            txanyo + txmes + txdia + txhora + txminutos + txsegundos + '-' +
            txlinea + '</EndToEndId></PmtId>');
          WriteLn(F,
            '<PmtTpInf><SvcLvl><Cd>SEPA</Cd></SvcLvl><CtgyPurp><Cd>SALA</Cd></CtgyPurp></PmtTpInf><Amt><InstdAmt Ccy="EUR">'
            + txtotalapagar + '</InstdAmt></Amt>');
          WriteLn(F, '<Cdtr><Nm>' + txnombre + '</Nm><PstlAdr><Ctry>ES</Ctry>');
          WriteLn(F, '<AdrLine>' + txdireccion + '</AdrLine><AdrLine>' + tcp +
            ' ' + tpoblacion + ' . .</AdrLine></PstlAdr></Cdtr>');
          WriteLn(F, '<CdtrAcct><Id><IBAN>' + tcuenta +
            '</IBAN></Id></CdtrAcct><Purp><Cd>SALA</Cd></Purp><RmtInf><Ustrd>NOMINA</Ustrd></RmtInf></CdtTrfTxInf>');
          dm.qanticiposdetalle.Next;
          linea := linea + 1;
        end;
        WriteLn(F,
          '</PmtInf></CstmrCdtTrfInitn></Document><!-- AGRIGEST 34 XML -->');
        CloseFile(F);
        dm.qanticiposdetalle.Close;
        dm.qanticiposdetalle.filtered := false;
        dm.qanticiposdetalle.Open;
      end;
    3:
      begin
        informedb.DataSource := dm.dsqanticiposdetalle;
        dm.qanticiposdetalle.Close;
        dm.qanticiposdetalle.filter := 'formapago=' + '''' +
          listainformesanticipos.Text + '''';
        dm.qanticiposdetalle.filtered := true;
        dm.qanticiposdetalle.Open;
        informes.Report.Clear;
        informes.LoadFromFile('c:\agrigest\informes\pagare.fr3');
        // informes.Report.FileName:=dm.qnominasdetalle.asstring;
        informes.ShowReport();
        informes.Clear;
        dm.qanticiposdetalle.Close;
        dm.qanticiposdetalle.filtered := false;
        dm.qanticiposdetalle.Open;
      end;
  end;

end;

procedure TBASE.btatmodificarClick(Sender: TObject);
var
  totaljornal: real;
begin
  if not dm.tanticipos.Active then
    dm.tanticipos.Open;
  dm.tanticipos.Locate('id', dm.qanticiposdetalleid.AsInteger,
    [locaseinsensitive, lopartialkey]);
  dm.tanticipos.edit;
  fechaanticipos.Datetime := dm.qanticiposdetallefecha.AsDateTime;
  edconcepto.Enabled := true;
  edimporte.Enabled := true;
  edformapago.Enabled := true;
  edconcepto.Text := dm.qanticiposdetalleobservaciones.AsString;
  edimporte.Text := dm.qanticiposdetalleimporte.AsString;
  edformapago.Text := dm.qanticiposdetalleformapago.AsString;
  fechaanticipos.Enabled := true;
  panticipos.Enabled := true;
  btatnuevo.Enabled := false;
  btatmodificar.Enabled := false;
  btatguardar.Enabled := true;
  btatcancelar.Enabled := true;
  btatborrar.Enabled := false;
end;

procedure TBASE.btatnuevoClick(Sender: TObject);
begin
  edconcepto.Enabled := true;
  edimporte.Enabled := true;
  edformapago.Enabled := true;
  fechaanticipos.Enabled := true;
  panticipos.Enabled := true;
  btatnuevo.Enabled := false;
  btatmodificar.Enabled := false;
  btatguardar.Enabled := true;
  btatcancelar.Enabled := true;
  btatborrar.Enabled := false;
end;

procedure TBASE.bteborrarClick(Sender: TObject);
begin
  dm.tanticipos.Close;
  dm.tanticipos.filter := 'id=' + dm.qanticiposid.AsString;
  dm.tanticipos.filtered := true;
  dm.tanticipos.Open;
  dm.tanticipos.Delete;
  dm.qanticipos.Refresh;
  dm.qanticipos.First;

end;

procedure TBASE.btedocborrarClick(Sender: TObject);
begin
  dmtr.qdocumentos.Delete;
end;

procedure TBASE.btedoccancelarClick(Sender: TObject);
begin
  dmtr.qdocumentos.cancel;
end;

procedure TBASE.btedocguardarClick(Sender: TObject);
var
  archivo: TMemorystream;
  ext, nomarchivo: string;
begin
  { try
    ext:= ExtractFileExt(opendialog1.FileName);
    nomarchivo:= extractfilename(opendialog1.FileName);
    dmtr.documentosidt.Value:=templeadosid.Asinteger;
    dmtr.documentoside.Value:=templeadoside.AsInteger;
    dmtr.documentosnomarchivo.Value:=nomarchivo;
    //      dmtr.documentosdescripcion.Value:=nomarchivo;
    dmtr.documentosfecha.Value:=date();
    dmtr.documentosextension.Value:=ext;
    dmtr.documentosarchivo.LoadFromFile(opendialog1.FileName);
    dmtr.documentos.Post;
    finally
    end; }
end;

procedure TBASE.btedocmodificarClick(Sender: TObject);
var
  ext: string;
begin
  if DialogLotes.Execute then
  begin
    try
      ext := ExtractFileExt(DialogLotes.FileName);
      if (ext = '.jpg') or (ext = '.jpeg') or (ext = '.bmp') or (ext = '.png')
      then
      begin
        imgfoto.Picture.LoadFromFile(DialogLotes.FileName);
        imgfoto.Visible := true;
      end
    finally
      dmtr.qdocumentos.edit;
      DBGrid75.SetFocus;
    end;
  end;
end;

procedure TBASE.btedocnuevoClick(Sender: TObject);
var
  ext, nomarchivo: string;
  X: Integer;
begin
  { if opendialog1.Execute then
    begin
    try
    finally
    if opendialog1.Files.Count=1 then
    begin
    dmtr.documentos.Append;
    ext:= ExtractFileExt(opendialog1.FileName);
    nomarchivo:= extractfilename(opendialog1.FileName);
    dmtr.documentosidt.Value:=templeadosid.Asinteger;
    dmtr.documentosfecha.Value:=date();
    dmtr.documentoside.Value:=templeadoside.AsInteger;
    dmtr.documentosnomarchivo.Value:=nomarchivo;
    dmtr.documentosdescripcion.Value:=nomarchivo;
    dmtr.documentosextension.Value:=ext;
    dmtr.documentosarchivo.LoadFromFile(opendialog1.FileName);
    dmtr.documentos.Post;

    end else
    begin
    memo1.Clear;
    memo1.Lines.AddStrings(opendialog1.files);
    for x := 0 to opendialog1.Files.Count-1 do
    begin
    dmtr.documentos.Append;
    ext:= ExtractFileExt(memo1.Lines[x]);
    nomarchivo:= extractfilename(memo1.Lines[x]);
    dmtr.documentosidt.Value:=templeadosid.Asinteger;
    dmtr.documentosfecha.Value:=date();
    dmtr.documentoside.Value:=templeadoside.AsInteger;
    dmtr.documentosnomarchivo.Value:=nomarchivo;
    dmtr.documentosdescripcion.Value:=nomarchivo;
    dmtr.documentosextension.Value:=ext;
    dmtr.documentosarchivo.LoadFromFile(memo1.Lines[x]);
    dmtr.documentos.Post;
    end;
    end;
    end;
    end;

  }
end;

procedure TBASE.bteModificarClick(Sender: TObject);
begin
  if not dm.tanticipos.Active then
    dm.tanticipos.Open;
  dm.tanticipos.Locate('id', dm.qanticiposid.AsString, [locaseinsensitive]);
  dm.tanticipos.edit;
  fechaanticipo.SetFocus;
end;

procedure TBASE.btdborrarClick(Sender: TObject);
begin
  dmtr.qdocumentos.Delete;
end;

procedure TBASE.btdcancelarClick(Sender: TObject);
begin
  dmtr.qdocumentos.cancel;
end;

procedure TBASE.btddescargarClick(Sender: TObject);
var
  archivo: string;
begin
  archivo := dmtr.qdocumentosnomarchivo.AsString;
  SaveDialog1.FileName := archivo;
  SaveDialog1.Execute();
  archivo := SaveDialog1.FileName;
  dmtr.qdocumentosarchivo.SaveToFile(archivo);
end;

procedure TBASE.btdguardarClick(Sender: TObject);
var
  archivo: TMemorystream;
  ext, nomarchivo: string;
begin
  try
    ext := ExtractFileExt(DialogLotes.FileName);
    nomarchivo := extractfilename(DialogLotes.FileName);
    dmtr.documentos_tmpidlote.Value := dmtr.qlotesid.AsInteger;
    dmtr.documentos_tmpide.Value := dmtr.qlotesidempresa.AsInteger;
    dmtr.documentos_tmpnomarchivo.Value := nomarchivo;
    dmtr.documentos_tmpdescripcion.Value := nomarchivo;
    dmtr.documentos_tmpfecha.Value := Date();
    dmtr.documentos_tmpextension.Value := ext;
    dmtr.documentos_tmparchivo.LoadFromFile(DialogLotes.FileName);
    dmtr.documentos_tmp.post;
  finally
  end;
end;

procedure TBASE.btdmodificarClick(Sender: TObject);
var
  ext: string;
begin
  if DialogLotes.Execute then
  begin
    try
      ext := ExtractFileExt(DialogLotes.FileName);
      if (ext = '.jpg') or (ext = '.jpeg') or (ext = '.bmp') or (ext = '.png')
      then
      begin
        imgfoto.Picture.LoadFromFile(DialogLotes.FileName);
        imgfoto.Visible := true;
      end
    finally
      dmtr.qdocumentos.edit;
      DBGrid34.SetFocus;
    end;
  end;
end;

procedure TBASE.btdnuevoClick(Sender: TObject);
var
  ext, nomarchivo: string;
  X: Integer;
begin

  if DialogLotes.Execute then
  begin
    try
    finally
      if DialogLotes.Files.Count = 1 then
      begin
        qaux.SQL.Clear;
        qaux.SQL.Add('delete from documentos_tmp ');
        qaux.ExecSQL;
        dmtr.documentos_tmp.Open;
        dmtr.documentos_tmp.Append;
        ext := ExtractFileExt(DialogLotes.FileName);
        nomarchivo := extractfilename(DialogLotes.FileName);
        dmtr.documentos_tmpidlote.Value := dmtr.qlotescodigo.AsInteger;
        dmtr.documentos_tmpfecha.Value := Date();
        dmtr.documentos_tmpide.Value := dmtr.qlotesidempresa.AsInteger;
        dmtr.documentos_tmpnomarchivo.Value := nomarchivo;
        dmtr.documentos_tmpdescripcion.Value := nomarchivo;
        dmtr.documentos_tmpextension.Value := ext;
        dmtr.documentos_tmparchivo.LoadFromFile(DialogLotes.FileName);
        dmtr.documentos_tmp.post;
        qaux.SQL.Clear;
        qaux.SQL.Add
          ('insert into documentos (ide,fecha,descripcion,archivo,nomarchivo,extension,idlote,codpar,idea,idt) (select ide,fecha,descripcion,archivo,nomarchivo,extension,idlote,codpar,idea,idt from documentos_tmp)');
        qaux.ExecSQL;
        qaux.SQL.Clear;
        qaux.SQL.Add('delete from documentos_tmp ');
        qaux.ExecSQL;
        dmtr.qdocumentos.Close;
        dmtr.qdocumentos.SQL.Clear;
        dmtr.qdocumentos.SQL.Add('select * from documentos where ide=' +
          dmtr.qlotesidempresa.AsString + ' and idlote=' +
          dmtr.qlotescodigo.AsString + ' order by fecha desc');
        dmtr.qdocumentos.Open;
      end
      else
      begin
        Memo1.Clear;
        Memo1.Lines.AddStrings(DialogLotes.Files);
        for X := 0 to DialogLotes.Files.Count - 1 do
        begin
          qaux.SQL.Clear;
          qaux.SQL.Add('delete from documentos_tmp ');
          qaux.ExecSQL;
          dmtr.documentos_tmp.Open;
          dmtr.documentos_tmp.Append;
          ext := ExtractFileExt(Memo1.Lines[X]);
          nomarchivo := extractfilename(Memo1.Lines[X]);
          dmtr.documentos_tmpidt.Value := dmtr.qlotescodigo.AsInteger;
          dmtr.documentos_tmpfecha.Value := Date();
          dmtr.documentos_tmpide.Value := dmtr.qlotesidempresa.AsInteger;
          dmtr.documentos_tmpnomarchivo.Value := nomarchivo;
          dmtr.documentos_tmpdescripcion.Value := nomarchivo;
          dmtr.documentos_tmpextension.Value := ext;
          dmtr.documentos_tmparchivo.LoadFromFile(Memo1.Lines[X]);
          dmtr.documentos_tmp.post;

          qaux.SQL.Clear;
          qaux.SQL.Add
            ('insert into documentos (ide,fecha,descripcion,archivo,nomarchivo,extension,idlote,codpar,idea,idt) (select ide,fecha,descripcion,archivo,nomarchivo,extension,idlote,codpar,idea,idt from documentos_tmp)');
          qaux.ExecSQL;
          qaux.SQL.Clear;
          qaux.SQL.Add('delete from documentos_tmp ');
          qaux.ExecSQL;
          dmtr.qdocumentos.Close;
          dmtr.qdocumentos.SQL.Clear;
          dmtr.qdocumentos.SQL.Add('select * from documentos where ide=' +
            dmtr.qlotesidempresa.AsString + ' and idt=' +
            dmtr.qlotescodigo.AsString + ' order by fecha desc');
          dmtr.qdocumentos.Open;
        end;
      end;
    end;
  end;

end;

procedure TBASE.btdverClick(Sender: TObject);
var
  nomarchivo: string;
begin
  nomarchivo := dmtr.qdocumentosnomarchivo.AsString;
  Deletefile('c:\agrigest\tmp\*.*');
  dmtr.qdocumentosarchivo.SaveToFile('c:\agrigest\tmp\' + nomarchivo);
  ShellExecute(BASE.Handle, nil, PChar('c:\agrigest\tmp\' + nomarchivo), '', '',
    SW_SHOWNORMAL);
end;

procedure TBASE.Button3Click(Sender: TObject);
var
  archivo: string;
begin

  SaveDialog1.FileName :=
    stringreplace(('ENTRADAS-' + dmproduccion.qpartesdiariosnombre_almacen.
    AsString + '-' + dmproduccion.qpartesdiariosfecha.AsString + '.xlsx'), '/',
    '-', [rfReplaceAll]);
  if SaveDialog1.Execute() then
  begin
    archivo := SaveDialog1.FileName;
    try
      ExportaraExcel(archivo, 'entradas', DBGrid63);
      showmessage('Los datos han sido exportados correctamente');
    except
      on E: Exception do
        showmessage('Error al exportar: ' + E.Message);
    end;
  end;

end;

procedure TBASE.Button40Click(Sender: TObject);
var
  PanelDC: HDC;
  Jpg: TJPEGImage;
  bmp: Tbitmap;
  ext: string;
  imagen: tPicture;
  archivo: TMemorystream;

begin
  if OpenPictureDialog1.Execute then
  begin
    imagen := tPicture.Create;
    bmp := Tbitmap.Create;
    Jpg := TJPEGImage.Create;

    try

      imgfotoe.Visible := true;
      dm.tempresa.edit;
      dm.tempresalogo.LoadFromFile(OpenPictureDialog1.FileName);
      dm.tempresa.post;
      ext := ExtractFileExt(OpenPictureDialog1.FileName);
      If not DirectoryExists('c:\agrigest\tmp') then
        CreateDir('c:\agrigest\tmp');
      Deletefile('c:\agrigest\tmp\empimg' + ext);
      imgfotoe.Picture := nil;
      dm.tempresalogo.SaveToFile('c:\agrigest\tmp\empimg' + ext);
      imgfotoe.Picture.LoadFromFile('c:\agrigest\tmp\empimg' + ext);

    finally
      imagen.Free;
    end;
  end;
end;

procedure TBASE.Button41Click(Sender: TObject);
begin
  dm.tempresa.edit;
  dm.tempresalogo.Value := nil;
  dm.tempresa.post;
end;

procedure TBASE.Button42Click(Sender: TObject);
begin
  dm.tempresa.edit;
  dm.tempresafirmaresponsable.Value := nil;
  dm.tempresa.post;
end;

procedure TBASE.Button43Click(Sender: TObject);
var
  archivo: string;
begin

  SaveDialog1.FileName :=
    stringreplace(('ENTRADAS-' + dmproduccion.qpartesdiariosnombre_almacen.
    AsString + '-' + dmproduccion.qpartesdiariosfecha.AsString + '.xlsx'), '/',
    '-', [rfReplaceAll]);
  if SaveDialog1.Execute() then
  begin
    archivo := SaveDialog1.FileName;
    try
      ExportaraExcel(archivo, 'entradas', DBGrid63);
      showmessage('Los datos han sido exportados correctamente');
    except
      on E: Exception do
        showmessage('Error al exportar: ' + E.Message);
    end;
  end;
end;

procedure TBASE.Button44Click(Sender: TObject);
var
  archivo: string;
begin

  SaveDialog1.FileName :=
    stringreplace(('ENVASADOS-' + dmproduccion.qpartesdiariosnombre_almacen.
    AsString + '-' + dmproduccion.qpartesdiariosfecha.AsString + '.xlsx'), '/',
    '-', [rfReplaceAll]);
  if SaveDialog1.Execute() then
  begin
    archivo := SaveDialog1.FileName;
    try
      ExportaraExcel(archivo, 'envasados', DBGrid62);
      showmessage('Los datos han sido exportados correctamente');
    except
      on E: Exception do
        showmessage('Error al exportar: ' + E.Message);
    end;
  end;

end;

procedure TBASE.Button45Click(Sender: TObject);
begin

  dmestadisticas.qinfdesechos.Close;
  dmestadisticas.qinfdesechos.Prepare;
  dmestadisticas.qinfdesechos.ParamByName('FINICIO').AsDate :=
    dmestadisticas.qcampanyasfechainicio.AsDateTime;
  dmestadisticas.qinfdesechos.ParamByName('FFIN').AsDate :=
    dmestadisticas.qcampanyasfechafin.AsDateTime;
  dmestadisticas.qinfdesechos.ParamByName('PARCELA').AsString :=
    dm.qparcelascodpar.AsString;
  dmestadisticas.qinfdesechos.Open;
  informedb.DataSource := dmestadisticas.dsqinfdesechos;
  informes.Report.Clear;
  informes.LoadFromFile('c:\agrigest\informes\entradasparcela.fr3');
  informes.Variables.Variables['TITULO'] :=
    QUOTEDSTR('Parcela: ' + dm.qparcelasnombre.AsString + ' Campa�a: ' +
    dmestadisticas.qcampanyasdescripcion.AsString + ' DESECHOS');

  informes.ShowReport();
  informes.Clear
end;

procedure TBASE.Button47Click(Sender: TObject);
var
  archivo: string;
begin

  SaveDialog1.FileName :=
    stringreplace(('ENTRADAS DETALLADAS-' +
    dmproduccion.qpartesdiariosnombre_almacen.AsString + '-' +
    dmproduccion.qpartesdiariosfecha.AsString + '.xlsx'), '/', '-',
    [rfReplaceAll]);
  if SaveDialog1.Execute() then
  begin
    archivo := SaveDialog1.FileName;
    try
      ExportaraExcel(archivo, 'entradas', DBGrid59);
      showmessage('Los datos han sido exportados correctamente');
    except
      on E: Exception do
        showmessage('Error al exportar: ' + E.Message);
    end;
  end;
end;

procedure TBASE.Button48Click(Sender: TObject);
var
  archivo: string;
begin

  SaveDialog1.FileName :=
    stringreplace(('SALIDAS DETALLADAS-' +
    dmproduccion.qpartesdiariosnombre_almacen.AsString + '-' +
    dmproduccion.qpartesdiariosfecha.AsString + '.xlsx'), '/', '-',
    [rfReplaceAll]);
  if SaveDialog1.Execute() then
  begin
    archivo := SaveDialog1.FileName;
    try
      ExportaraExcel(archivo, 'entradas', DBGrid60);
      showmessage('Los datos han sido exportados correctamente');
    except
      on E: Exception do
        showmessage('Error al exportar: ' + E.Message);
    end;
  end;

end;

procedure TBASE.Button49Click(Sender: TObject);
begin
  qgastosparcela.Close;
  qgastosparcela.Prepare;
  qgastosparcela.ParamByName('DESDE').AsDate := cdesde.Date;
  qgastosparcela.ParamByName('HASTA').AsDate := chasta.Date;
  qgastosparcela.ParamByName('PARCELA').AsString := dm.qparcelascodpar.AsString;
  qgastosparcela.Open;
end;

procedure TBASE.Button4Click(Sender: TObject);
begin
  baceptarempleados.Visible := true;
  bcancelarempleados.Visible := true;
  Vaciar.Visible := true;
  Vaciar2.Visible := true;

  templeados.edit;
  DBEdit1.Enabled := false;

end;

procedure TBASE.Button50Click(Sender: TObject);
begin
  informedb.DataSource := dsqgastosparcela;

  informes.Report.Clear;
  informes.LoadFromFile('c:\agrigest\informes\informegastos.fr3');
  informes.Variables.Variables['PERIODO'] :=
    QUOTEDSTR('Desde el ' + datetostr(cdesde.Date) + ' hasta el ' +
    datetostr(chasta.Date));
  informes.ShowReport();
  informes.Clear

end;

procedure TBASE.Button51Click(Sender: TObject);
var
  archivo: string;
begin

  SaveDialog1.FileName := 'GASTOS DE LA PARCELA ' + dm.qparcelascodpar.AsString;
  if SaveDialog1.Execute() then
  begin
    archivo := SaveDialog1.FileName;
    try
      ExportaraExcel(archivo, 'GASTOS', DBGrid42);
      showmessage('Los datos han sido exportados correctamente');
    except
      on E: Exception do
        showmessage('Error al exportar: ' + E.Message);
    end;
  end;
end;

procedure TBASE.Button52Click(Sender: TObject);
begin
  comboprodmesas.KeyValue := null;
  comboprodmprimas.KeyValue := null;
  comboprodproducto.KeyValue := null;
  hdesde.ItemIndex:=5;
  hhasta.ItemIndex:=24;
  btprodaceptar.Click;
end;

procedure TBASE.Button53Click(Sender: TObject);
begin
  qcostesrestosdia.Prepare;
  qcostesrestosdia.ParamByName('EMPRESA').asinteger:=dmproduccion.qpartesdiariosidempresa.AsInteger ;
  qcostesrestosdia.ParamByName('ALMACEN').asinteger:=dmproduccion.qpartesdiariosalmacen.AsInteger ;
  qcostesrestosdia.ParamByName('FECHA').asdatetime:=dmproduccion.qpartesdiariosfecha.AsDateTime ;
  qcostesrestosdia.Open;
  restosdia := Trestosdia.Create(nil);
  try
    restosdia.ShowModal;
  finally
    restosdia.Free;
    qcostesrestosdia.close;
  end;
end;

procedure TBASE.Button54Click(Sender: TObject);
var  archivo,vmes,vnombre,vnif,vhoras,vcuenta:string;
     tdia,tmes,tanyo:word;
     vdia,vanyo,vide,vidt:integer;
     totalhoras:real;
begin

  qaux.Close;
  qaux.SQL.Clear;
  qaux.SQL.Add('delete from emp_asistencia');
  qaux.execsql;
  qasistencia.Close;
  qasistencia.SQL.Clear;
  qasistencia.SQL.Add('select *,date(now()) as fechaalta,date(now()) as fechabaja,'' '' as nombre2,0.1 as totalhoras,'' '' as cuenta from emp_asistencia order by ide,idt,anyo,mes');
  qasistencia.Open;

  dm.qnominasdetalle.First;
  totalhoras:=0;
  while not dm.qnominasdetalle.Eof do
  begin
    decodedate(dm.qnominasdetallefecha.AsDateTime,tanyo,tmes,tdia);
    vdia:=tdia;
    vanyo:=tanyo;
    vhoras:=floattostr(dm.qnominasdetalleqhoras.AsFloat);
    totalhoras:=totalhoras+dm.qnominasdetalleqhoras.AsFloat;
    case tmes of
       1:vmes:='ENERO';
       2:vmes:='FEBRERO';
       3:vmes:='MARZO';
       4:vmes:='ABRIL';
       5:vmes:='MAYO';
       6:vmes:='JUNIO';
       7:vmes:='JULIO';
       8:vmes:='AGOSTO';
       9:vmes:='SEPTIEMBRE';
      10:vmes:='OCTUBRE';
      11:vmes:='NOVIEMBRE';
      12:vmes:='DICIEMBRE';
    end;
    vide:=dm.qnominasdetalleempresa.AsInteger;
    vidt:=dm.qnominasdetalleidt.AsInteger;
    if qempleados.Locate('ide,id',vararrayof([vide,vidt]),[locaseinsensitive]) then
    begin
      vnif:=qempleadosnif.asstring;
      vcuenta:=qempleadoscuenta.AsString;
      vnombre:=qempleadosnombre.AsString;
    end
    else
    begin
      qaux.Close;
      qaux.SQL.Clear;
      qaux.SQL.Add('select nif, concat(coalesce(cbiban,''''), coalesce(cbbanco,''''), coalesce(cboficina,''''), coalesce(cbdc,''''), coalesce(cbcc,'''')) as cuenta, nombre ' +
                   'from trabajadores where ide=:EMPRESA and id=:ID');
      qaux.Prepare;
      qaux.ParamByName('EMPRESA').AsInteger := vide;
      qaux.ParamByName('ID').AsInteger := vidt;
      qaux.Open;
      if not qaux.IsEmpty then
      begin
        vnif := qaux.FieldByName('nif').AsString;
        vcuenta := qaux.FieldByName('cuenta').AsString;
        vnombre := qaux.FieldByName('nombre').AsString;
      end
      else
      begin
        vnif := '';
        vcuenta := '';
        vnombre := '';
      end;
    end;
    qaux.Close;
    qaux.SQL.Clear;
    qaux.SQL.Add('select * from emp_asistencia where ide=:EMPRESA and idt=:TRABAJADOR and anyo=:ANYO and mes=:MES');
    qaux.Prepare;
    qaux.ParamByName('EMPRESA').AsInteger:=vide;
    qaux.ParamByName('TRABAJADOR').AsInteger:=vidt;
    qaux.ParamByName('ANYO').AsInteger:=vanyo;
    qaux.ParamByName('MES').Asstring:=vmes;
    qaux.Open;
    if qaux.RecordCount=0 then
    begin
      qaux.Close;
      qaux.SQL.Clear;
      qaux.SQL.Add('insert into emp_asistencia (ide,idt,nif,nombre,anyo,mes,cuenta) values (:EMPRESA,:TRABAJADOR,:NIF,:NOMBRE,:ANYO,:MES, :CUENTA)');
      qaux.Prepare;
      qaux.ParamByName('EMPRESA').AsInteger:=vide;
      qaux.ParamByName('TRABAJADOR').AsInteger:=vidt;
      qaux.ParamByName('NIF').Asstring:=vnif;
      qaux.ParamByName('NOMBRE').Asstring:=vnombre;
      qaux.ParamByName('ANYO').AsInteger:=vanyo;
      qaux.ParamByName('MES').Asstring:=vmes;
      qaux.ParamByName('CUENTA').Asstring:=vcuenta;

      qaux.execsql;
      qasistencia.Refresh;
      qasistencia.Locate('ide,idt,anyo,mes',vararrayof([vide,vidt,vanyo,vmes]),[locaseinsensitive]);
    end;
       qasistencia.Edit;
       case vdia of
 {      1:qasistenciad1.AsString:='X';
       2:qasistenciad2.AsString:='X';
       3:qasistenciad3.AsString:='X';
       4:qasistenciad4.AsString:='X';
       5:qasistenciad5.AsString:='X';
       6:qasistenciad6.AsString:='X';
       7:qasistenciad7.AsString:='X';
       8:qasistenciad8.AsString:='X';
       9:qasistenciad9.AsString:='X';
      10:qasistenciad10.AsString:='X';
      11:qasistenciad11.AsString:='X';
      12:qasistenciad12.AsString:='X';
      13:qasistenciad13.AsString:='X';
      14:qasistenciad14.AsString:='X';
      15:qasistenciad15.AsString:='X';
      16:qasistenciad16.AsString:='X';
      17:qasistenciad17.AsString:='X';
      18:qasistenciad18.AsString:='X';
      19:qasistenciad19.AsString:='X';
      20:qasistenciad20.AsString:='X';
      21:qasistenciad21.AsString:='X';
      22:qasistenciad22.AsString:='X';
      23:qasistenciad23.AsString:='X';
      24:qasistenciad24.AsString:='X';
      25:qasistenciad25.AsString:='X';
      26:qasistenciad26.AsString:='X';
      27:qasistenciad27.AsString:='X';
      28:qasistenciad28.AsString:='X';
      29:qasistenciad29.AsString:='X';
      30:qasistenciad30.AsString:='X';
      31:qasistenciad31.AsString:='X';     }
       1:if qasistenciad1.asstring=' ' then qasistenciad1.value:=vhoras else qasistenciad1.Value:=floattostr(strtofloat(qasistenciad1.AsString)+strtofloat(vhoras));
       2:if qasistenciad2.asstring=' ' then qasistenciad2.value:=vhoras else qasistenciad2.Value:=floattostr(strtofloat(qasistenciad2.AsString)+strtofloat(vhoras));
       3:if qasistenciad3.asstring=' ' then qasistenciad3.value:=vhoras else qasistenciad3.Value:=floattostr(strtofloat(qasistenciad3.AsString)+strtofloat(vhoras));
       4:if qasistenciad4.asstring=' ' then qasistenciad4.value:=vhoras else qasistenciad4.Value:=floattostr(strtofloat(qasistenciad4.AsString)+strtofloat(vhoras));
       5:if qasistenciad5.asstring=' ' then qasistenciad5.value:=vhoras else qasistenciad5.Value:=floattostr(strtofloat(qasistenciad5.AsString)+strtofloat(vhoras));
       6:if qasistenciad6.asstring=' ' then qasistenciad6.value:=vhoras else qasistenciad6.Value:=floattostr(strtofloat(qasistenciad6.AsString)+strtofloat(vhoras));
       7:if qasistenciad7.asstring=' ' then qasistenciad7.value:=vhoras else qasistenciad7.Value:=floattostr(strtofloat(qasistenciad7.AsString)+strtofloat(vhoras));
       8:if qasistenciad8.asstring=' ' then qasistenciad8.value:=vhoras else qasistenciad8.Value:=floattostr(strtofloat(qasistenciad8.AsString)+strtofloat(vhoras));
       9:if qasistenciad9.asstring=' ' then qasistenciad9.value:=vhoras else qasistenciad9.Value:=floattostr(strtofloat(qasistenciad9.AsString)+strtofloat(vhoras));
       10:if qasistenciad10.asstring=' ' then qasistenciad10.value:=vhoras else qasistenciad10.Value:=floattostr(strtofloat(qasistenciad10.AsString)+strtofloat(vhoras));
       11:if qasistenciad11.asstring=' ' then qasistenciad11.value:=vhoras else qasistenciad11.Value:=floattostr(strtofloat(qasistenciad11.AsString)+strtofloat(vhoras));
       12:if qasistenciad12.asstring=' ' then qasistenciad12.value:=vhoras else qasistenciad12.Value:=floattostr(strtofloat(qasistenciad12.AsString)+strtofloat(vhoras));
       13:if qasistenciad13.asstring=' ' then qasistenciad13.value:=vhoras else qasistenciad13.Value:=floattostr(strtofloat(qasistenciad13.AsString)+strtofloat(vhoras));
       14:if qasistenciad14.asstring=' ' then qasistenciad14.value:=vhoras else qasistenciad14.Value:=floattostr(strtofloat(qasistenciad14.AsString)+strtofloat(vhoras));
       15:if qasistenciad15.asstring=' ' then qasistenciad15.value:=vhoras else qasistenciad15.Value:=floattostr(strtofloat(qasistenciad15.AsString)+strtofloat(vhoras));
       16:if qasistenciad16.asstring=' ' then qasistenciad16.value:=vhoras else qasistenciad16.Value:=floattostr(strtofloat(qasistenciad16.AsString)+strtofloat(vhoras));
       17:if qasistenciad17.asstring=' ' then qasistenciad17.value:=vhoras else qasistenciad17.Value:=floattostr(strtofloat(qasistenciad17.AsString)+strtofloat(vhoras));
       18:if qasistenciad18.asstring=' ' then qasistenciad18.value:=vhoras else qasistenciad18.Value:=floattostr(strtofloat(qasistenciad18.AsString)+strtofloat(vhoras));
       19:if qasistenciad19.asstring=' ' then qasistenciad19.value:=vhoras else qasistenciad19.Value:=floattostr(strtofloat(qasistenciad19.AsString)+strtofloat(vhoras));
       20:if qasistenciad20.asstring=' ' then qasistenciad20.value:=vhoras else qasistenciad20.Value:=floattostr(strtofloat(qasistenciad20.AsString)+strtofloat(vhoras));
       21:if qasistenciad21.asstring=' ' then qasistenciad21.value:=vhoras else qasistenciad21.Value:=floattostr(strtofloat(qasistenciad21.AsString)+strtofloat(vhoras));
       22:if qasistenciad22.asstring=' ' then qasistenciad22.value:=vhoras else qasistenciad22.Value:=floattostr(strtofloat(qasistenciad22.AsString)+strtofloat(vhoras));
       23:if qasistenciad23.asstring=' ' then qasistenciad23.value:=vhoras else qasistenciad23.Value:=floattostr(strtofloat(qasistenciad23.AsString)+strtofloat(vhoras));
       24:if qasistenciad24.asstring=' ' then qasistenciad24.value:=vhoras else qasistenciad24.Value:=floattostr(strtofloat(qasistenciad24.AsString)+strtofloat(vhoras));
       25:if qasistenciad25.asstring=' ' then qasistenciad25.value:=vhoras else qasistenciad25.Value:=floattostr(strtofloat(qasistenciad25.AsString)+strtofloat(vhoras));
       26:if qasistenciad26.asstring=' ' then qasistenciad26.value:=vhoras else qasistenciad26.Value:=floattostr(strtofloat(qasistenciad26.AsString)+strtofloat(vhoras));
       27:if qasistenciad27.asstring=' ' then qasistenciad27.value:=vhoras else qasistenciad27.Value:=floattostr(strtofloat(qasistenciad27.AsString)+strtofloat(vhoras));
       28:if qasistenciad28.asstring=' ' then qasistenciad28.value:=vhoras else qasistenciad28.Value:=floattostr(strtofloat(qasistenciad28.AsString)+strtofloat(vhoras));
       29:if qasistenciad29.asstring=' ' then qasistenciad29.value:=vhoras else qasistenciad29.Value:=floattostr(strtofloat(qasistenciad29.AsString)+strtofloat(vhoras));
       30:if qasistenciad30.asstring=' ' then qasistenciad30.value:=vhoras else qasistenciad30.Value:=floattostr(strtofloat(qasistenciad30.AsString)+strtofloat(vhoras));
       31:if qasistenciad31.asstring=' ' then qasistenciad31.value:=vhoras else qasistenciad31.Value:=floattostr(strtofloat(qasistenciad31.AsString)+strtofloat(vhoras));
    end;
    if qasistenciatotalhoras.asstring='' then qasistenciatotalhoras.value:='0';

    qasistenciatotalhoras.Value:=floattostr(strtofloat(qasistenciatotalhoras.asstring)+strtofloat(vhoras));
    qasistencia.Post;

    dm.qnominasdetalle.Next;
  end;
    decodedate(nomfechadesde.date,tanyo,tmes,tdia);
    case tmes of
       1:vmes:='ENERO';
       2:vmes:='FEBRERO';
       3:vmes:='MARZO';
       4:vmes:='ABRIL';
       5:vmes:='MAYO';
       6:vmes:='JUNIO';
       7:vmes:='JULIO';
       8:vmes:='AGOSTO';
       9:vmes:='SEPTIEMBRE';
      10:vmes:='OCTUBRE';
      11:vmes:='NOVIEMBRE';
      12:vmes:='DICIEMBRE';
    end;
    qasistencia.Close;
    qasistencia.SQL.Clear;
   qasistencia.SQL.Add('select v.ide, v.idt, v.anyo, v.mes, v.nif, v.nombre, v.fechaalta, v.fechabaja, v.nombre2, ' +
      'v.d1, v.d2, v.d3, v.d4, v.d5, v.d6, v.d7, v.d8, v.d9, v.d10, v.d11, v.d12, v.d13, v.d14, v.d15, ' +
      'v.d16, v.d17, v.d18, v.d19, v.d20, v.d21, v.d22, v.d23, v.d24, v.d25, v.d26, v.d27, v.d28, v.d29, v.d30, v.d31, ' +
      'concat(coalesce(t2.CBIBAN,''''), coalesce(t2.CBBANCO,''''), coalesce(t2.CBOFICINA,''''), coalesce(t2.CBDC,''''), coalesce(t2.CBCC,'''')) as cuenta, ' +
      'cast((coalesce(nullif(replace(v.d1, '','', ''.''), '' ''), 0) + coalesce(nullif(replace(v.d2, '','', ''.''), '' ''), 0) + coalesce(nullif(replace(v.d3, '','', ''.''), '' ''), 0) + ' +
      'coalesce(nullif(replace(v.d4, '','', ''.''), '' ''), 0) + coalesce(nullif(replace(v.d5, '','', ''.''), '' ''), 0) + ' +
      'coalesce(nullif(replace(v.d6, '','', ''.''), '' ''), 0) + coalesce(nullif(replace(v.d7, '','', ''.''), '' ''), 0) + coalesce(nullif(replace(v.d8, '','', ''.''), '' ''), 0) + ' +
      'coalesce(nullif(replace(v.d9, '','', ''.''), '' ''), 0) + coalesce(nullif(replace(v.d10, '','', ''.''), '' ''), 0) + ' +
      'coalesce(nullif(replace(v.d11, '','', ''.''), '' ''), 0) + coalesce(nullif(replace(v.d12, '','', ''.''), '' ''), 0) + coalesce(nullif(replace(v.d13, '','', ''.''), '' ''), 0) + ' +
      'coalesce(nullif(replace(v.d14, '','', ''.''), '' ''), 0) + coalesce(nullif(replace(v.d15, '','', ''.''), '' ''), 0) + ' +
      'coalesce(nullif(replace(v.d16, '','', ''.''), '' ''), 0) + coalesce(nullif(replace(v.d17, '','', ''.''), '' ''), 0) + coalesce(nullif(replace(v.d18, '','', ''.''), '' ''), 0) + ' +
      'coalesce(nullif(replace(v.d19, '','', ''.''), '' ''), 0) + coalesce(nullif(replace(v.d20, '','', ''.''), '' ''), 0) + ' +
      'coalesce(nullif(replace(v.d21, '','', ''.''), '' ''), 0) + coalesce(nullif(replace(v.d22, '','', ''.''), '' ''), 0) + coalesce(nullif(replace(v.d23, '','', ''.''), '' ''), 0) + ' +
      'coalesce(nullif(replace(v.d24, '','', ''.''), '' ''), 0) + coalesce(nullif(replace(v.d25, '','', ''.''), '' ''), 0) + ' +
      'coalesce(nullif(replace(v.d26, '','', ''.''), '' ''), 0) + coalesce(nullif(replace(v.d27, '','', ''.''), '' ''), 0) + coalesce(nullif(replace(v.d28, '','', ''.''), '' ''), 0) + ' +
      'coalesce(nullif(replace(v.d29, '','', ''.''), '' ''), 0) + coalesce(nullif(replace(v.d30, '','', ''.''), '' ''), 0) + ' +
      'coalesce(nullif(replace(v.d31, '','', ''.''), '' ''), 0)) as char) as totalhoras ' +
      'from v_emp_asistencia v left join trabajadores t2 on v.idt=t2.ID and v.ide=t2.ide where v.ide=:EMPRESA and v.anyo=:ANYO and v.mes=:MES order by v.anyo, v.nombre2');
    qasistencia.Prepare;
    qasistencia.ParamByName('EMPRESA').AsInteger:=vide;
    qasistencia.ParamByName('MES').Asstring:=vmes;
    qasistencia.ParamByName('ANYO').Asinteger:=vanyo;

    qasistencia.Open;

    savedialog1.FileName:='PARTE COMUNICACION.xlsx';
    if savedialog1.Execute() then
    begin
      archivo:=savedialog1.FileName;
      try
        GRIDASISTENCIA.Columns[40].FieldName := 'totalhoras';
        GRIDASISTENCIA.Columns[41].FieldName := 'cuenta';
        Exportaraexcel(archivo,'PARTE',GRIDASISTENCIA);
        showmessage('Los datos han sido exportados correctamente a '+archivo);
      except
        on E: Exception do
          showmessage('Error al exportar: ' + E.Message);
      end;
    end;
{    qasistencia.Close;
    qasistencia.SQL.Clear;
    qasistencia.SQL.Add('select * from v_emp_asistencia order by ide,idt,anyo,mes');
    qasistencia.Open;}



end;

procedure TBASE.Button55Click(Sender: TObject);
{var
 hStore: HCERTSTORE;
  hCert: PCCERT_CONTEXT;
  CertName: string;
  dwKeySpec: DWORD;
  cbKeySpec: DWORD;}
begin
{  // Abre el almac�n de certificados "Root"
  hStore := CertOpenSystemStore(0, 'Root');
  if hStore = 0 then
    RaiseLastOSError;
  try
    // Enumera los certificados en el almac�n
    hCert := CertEnumCertificatesInStore(hStore, nil);
    while hCert <> nil do
    begin
      // Obtiene el tipo de clave del certificado
      cbKeySpec := sizeof(dwKeySpec);
      if CertGetCertificateContextProperty(hCert, CERT_KEY_SPEC_PROP_ID, @dwKeySpec, cbKeySpec) then
      begin
        // Filtra por certificados con tipo de clave CERT_NCRYPT_KEY_SPEC
        if dwKeySpec = CERT_NCRYPT_KEY_SPEC then
        begin
          // Obtiene el nombre del sujeto del certificado
          CertName := CertNameToStr(hCert^.pCertInfo^.Subject);
          Memo3.Lines.Add(CertName);
        end;
      end;

      // Obtiene el siguiente certificado
      hCert := CertEnumCertificatesInStore(hStore, hCert);
    end;
  finally
    // Cierra el almac�n de certificados
    CertCloseStore(hStore, 0);
  end; }
end;

procedure TBASE.Button56Click(Sender: TObject);
var
  archivo: string;
begin
  SaveDialog1.FileName := 'PARTE DE COMUNICACION.xlsx';
  if SaveDialog1.Execute() then
  begin
    archivo := SaveDialog1.FileName;
    try
      ExportaraExcel(archivo, 'JORNADAS', DBGrid76);
      showmessage('Los datos han sido exportados correctamente a ' + archivo);
    except
      on E: Exception do
        showmessage('Error al exportar: ' + E.Message);
    end;
  end;

end;

procedure TBASE.Button57Click(Sender: TObject);
var
  archivo: string;
begin
  SaveDialog1.FileName := 'JORNADAS POR GRUPOOS.xlsx';
  if SaveDialog1.Execute() then
  begin
    archivo := SaveDialog1.FileName;
    try
      ExportaraExcel(archivo, 'JORNADAS', DBGrid43);
      showmessage('Los datos han sido exportados correctamente a ' + archivo);
    except
      on E: Exception do
        showmessage('Error al exportar: ' + E.Message);
    end;
  end;

end;

procedure TBASE.Button58Click(Sender: TObject);
begin
  qlistadoporgrupo.close;
  qlistadoporgrupo.Prepare;
  qlistadoporgrupo.ParamByName('DESDE').AsDate:=VFECHADESDELG.Date;
  qlistadoporgrupo.ParamByName('HASTA').AsDate:=VFECHAHASTALG.Date;
  qlistadoporgrupo.open;
end;

procedure TBASE.Button59Click(Sender: TObject);
var  archivo,vmes,vnombre,vnif,vhoras:string;
     tdia,tmes,tanyo:word;
     vdia,vanyo,vide,vidt:integer;
begin
  qaux.Close;
  qaux.SQL.Clear;
  qaux.SQL.Add('delete from emp_asistencia');
  qaux.execsql;
  qticados.close;
  qticados.Prepare;
  qticados.ParamByName('DESDE').AsDate:=vdesdejornadas.Date;
  qticados.ParamByName('HASTA').AsDate:=vhastajornadas.Date;
  qticados.Open;
  qticados.First;
  while not qticados.Eof do
  begin
    decodedate(qticadosfecha.AsDateTime,tanyo,tmes,tdia);
    vdia:=tdia;
    vanyo:=tanyo;
//    vhoras:=floattostr(qticadosnum_horas_m.AsFloat);
    case tmes of
       1:vmes:='ENERO';
       2:vmes:='FEBRERO';
       3:vmes:='MARZO';
       4:vmes:='ABRIL';
       5:vmes:='MAYO';
       6:vmes:='JUNIO';
       7:vmes:='JULIO';
       8:vmes:='AGOSTO';
       9:vmes:='SEPTIEMBRE';
      10:vmes:='OCTUBRE';
      11:vmes:='NOVIEMBRE';
      12:vmes:='DICIEMBRE';
    end;
    vide:=qticadoside.AsInteger;
    vidt:=qticadosidt.AsInteger;
    vnif:=qticadosnif.asstring;
    vnombre:=qticadosnombre.AsString;
    qaux.Close;
    qaux.SQL.Clear;
    qaux.SQL.Add('select * from emp_asistencia where ide=:EMPRESA and idt=:TRABAJADOR and anyo=:ANYO and mes=:MES');
    qaux.Prepare;
    qaux.ParamByName('EMPRESA').AsInteger:=vide;
    qaux.ParamByName('TRABAJADOR').AsInteger:=vidt;
    qaux.ParamByName('ANYO').AsInteger:=vanyo;
    qaux.ParamByName('MES').Asstring:=vmes;
    qaux.Open;
    if qaux.RecordCount=0 then
    begin
      qaux.Close;
      qaux.SQL.Clear;
      qaux.SQL.Add('insert into emp_asistencia (ide,idt,nif,nombre,anyo,mes) values (:EMPRESA,:TRABAJADOR,:NIF,:NOMBRE,:ANYO,:MES)');
      qaux.Prepare;
      qaux.ParamByName('EMPRESA').AsInteger:=vide;
      qaux.ParamByName('TRABAJADOR').AsInteger:=vidt;
      qaux.ParamByName('NIF').Asstring:=vnif;
      qaux.ParamByName('NOMBRE').Asstring:=vnombre;
      qaux.ParamByName('ANYO').AsInteger:=vanyo;
      qaux.ParamByName('MES').Asstring:=vmes;
      qaux.execsql;
      qasistir.close;
      qasistir.Open;
      qasistir.Locate('ide,idt,anyo,mes',vararrayof([vide,vidt,vanyo,vmes]),[locaseinsensitive]);
    end;
       qasistir.Edit;
       case vdia of
       1:qasistird1.value:='X';
       2:qasistird2.value:='X';
       3:qasistird3.value:='X';
       4:qasistird4.value:='X';
       5:qasistird5.value:='X';
       6:qasistird6.value:='X';
       7:qasistird7.value:='X';
       8:qasistird8.value:='X';
       9:qasistird9.value:='X';
      10:qasistird10.value:='X';
      11:qasistird11.value:='X';
      12:qasistird12.value:='X';
      13:qasistird13.value:='X';
      14:qasistird14.value:='X';
      15:qasistird15.value:='X';
      16:qasistird16.value:='X';
      17:qasistird17.value:='X';
      18:qasistird18.value:='X';
      19:qasistird19.value:='X';
      20:qasistird20.value:='X';
      21:qasistird21.value:='X';
      22:qasistird22.value:='X';
      23:qasistird23.value:='X';
      24:qasistird24.value:='X';
      25:qasistird25.value:='X';
      26:qasistird26.value:='X';
      27:qasistird27.value:='X';
      28:qasistird28.value:='X';
      29:qasistird29.value:='X';
      30:qasistird30.value:='X';
      31:qasistird31.value:='X';
    end;
    qasistir.Post;
    qticados.Next;
  end;
    decodedate(vdesdejornadas.date,tanyo,tmes,tdia);
    case tmes of
       1:vmes:='ENERO';
       2:vmes:='FEBRERO';
       3:vmes:='MARZO';
       4:vmes:='ABRIL';
       5:vmes:='MAYO';
       6:vmes:='JUNIO';
       7:vmes:='JULIO';
       8:vmes:='AGOSTO';
       9:vmes:='SEPTIEMBRE';
      10:vmes:='OCTUBRE';
      11:vmes:='NOVIEMBRE';
      12:vmes:='DICIEMBRE';
    end;
    qasistir.Close;
    qasistir.SQL.Clear;
    qasistir.SQL.Add('select *,(select fechaalta from trabajadores where id=idt) as fechaalta,(select fechabaja from trabajadores where id=idt) as fechabaja from v_emp_asistencia where ide=:EMPRESA and anyo=:ANYO and mes=:MES order by anyo,nombre');
    qasistir.Prepare;
    qasistir.ParamByName('EMPRESA').AsInteger:=vide;
    qasistir.ParamByName('MES').Asstring:=vmes;
    qasistir.ParamByName('ANYO').Asinteger:=vanyo;

    qasistir.Open;



end;

procedure TBASE.Button5Click(Sender: TObject);
begin
  dm.qinfjornales.Close;
  dm.qinfjornales.SQL.Clear;
  dm.qinfjornales.SQL := qjornales.SQL;
  dm.qinfjornales.Open;
  informedb.DataSource := dm.dsqinfjornales;
  informes.Report.Clear;
  informes.LoadFromFile('c:\agrigest\informes\JORNALES.fr3');
  informes.Report.FileName := TMES.Text + ' ' + qjornalestrabajador.AsString;
  informes.ShowReport();
  informes.Clear
end;

procedure TBASE.Button6Click(Sender: TObject);
var
  fdesde, fhasta, sqlDel: string;
begin
  if not dm.qnominasdetalle.IsEmpty then
  begin
    if MessageDlg('¿Está seguro de que desea borrar todos los jornales mostrados en el periodo actual?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
    begin
      fdesde := FormatDateTime('yyyy-mm-dd', nomfechadesde.Date);
      fhasta := FormatDateTime('yyyy-mm-dd', nomfechahasta.Date);
      sqlDel := 'delete from trabajo_diario where fecha>=''' + fdesde + ''' and fecha<=''' + fhasta + '''';
      if vtactivo <> 0 then
        sqlDel := sqlDel + ' and idt in (select id from trabajadores where grupo=' + IntToStr(vtactivo) + ')';
      if Trim(tbuscarnominas.Text) <> '' then
        sqlDel := sqlDel + ' and idt in (select id from trabajadores where nombre like ''%' + Trim(tbuscarnominas.Text) + '%'')';

      qaux.Close;
      qaux.SQL.Clear;
      qaux.SQL.Add(sqlDel);
      qaux.ExecSQL;
      btactualizarempleadosnominas.Click;
    end;
  end;
end;

procedure TBASE.Button7Click(Sender: TObject);
begin
  informedb.DataSource := dm.DSprenominas;
  informes.Report.Clear;
  if COMBOLISTADOS.ItemIndex = 0 then
    informes.LoadFromFile('c:\agrigest\informes\PREVIONOMINAS.fr3');
  if COMBOLISTADOS.ItemIndex = 1 then
    informes.LoadFromFile('c:\agrigest\informes\PREVIONOMINASASESORIA.fr3');
  if COMBOLISTADOS.ItemIndex = 2 then
    informes.LoadFromFile('c:\agrigest\informes\PREVIONOMINASBANCO.fr3');

  // informes.Report.FileName:=TMES.Text+' ' + qjornalestrabajador.asstring;
  informes.ShowReport();
  informes.Clear
end;

procedure TBASE.Button8Click(Sender: TObject);
var
  archivo: string;
begin
  archivo := 'c:\agrigest\entradas.xlsx';
  try
    ExportaraExcel(archivo, 'ENTRADAS', DBGrid46);
    showmessage('Los datos han sido exportados correctamente a ' + archivo);
  except
    on E: Exception do
      showmessage('Error al exportar: ' + E.Message);
  end;
end;

procedure TBASE.btJimprimirClick(Sender: TObject);
var
  LSortFields: string;
  LSortType: ZAbstractRODataset.TSortType;
  LPlantillaGeneral, LPlantillaGrid, LRutaBase: string;
begin
  if not dm.qnominasdetalle.Active or dm.qnominasdetalle.IsEmpty then
  begin
    ShowMessage('No hay datos de jornales para imprimir.');
    Exit;
  end;

  Screen.Cursor := crHourGlass;
  try
    LRutaBase := 'c:\agrigest\informes\';
    LPlantillaGeneral := LRutaBase + 'JORNALESGENERAL.fr3';
    LPlantillaGrid := LRutaBase + 'listado_jornales_grid.fr3';

    // Si la plantilla del grid no se encuentra en informes, buscar en la carpeta del ejecutable
    if not FileExists(LPlantillaGrid) then
    begin
      if FileExists(ExtractFilePath(Application.ExeName) + 'listado_jornales_grid.fr3') then
        LPlantillaGrid := ExtractFilePath(Application.ExeName) + 'listado_jornales_grid.fr3';
    end;

    if not FileExists(LPlantillaGeneral) then
    begin
      if FileExists(ExtractFilePath(Application.ExeName) + 'JORNALESGENERAL.fr3') then
        LPlantillaGeneral := ExtractFilePath(Application.ExeName) + 'JORNALESGENERAL.fr3';
    end;

    if not FileExists(LPlantillaGeneral) then
    begin
      ShowMessage('No se encuentra la plantilla: ' + LPlantillaGeneral);
      Exit;
    end;

    // Guardar ordenación actual que tiene el usuario en DBGrid4
    LSortFields := dm.qnominasdetalle.SortedFields;
    LSortType := dm.qnominasdetalle.SortType;

    informedb.DataSource := dm.dsqnominasdetalle;

    // 1. Primer informe: JORNALESGENERAL (agrupado por trabajador/idt)
    dm.qnominasdetalle.SortedFields := 'trabajador,fecha,parcela';
    dm.qnominasdetalle.SortType := stascending;
    dm.qnominasdetalle.First;

    informes.Report.Clear;
    informes.LoadFromFile(LPlantillaGeneral);
    informes.Variables.Variables['TITULO'] := QUOTEDSTR('INFORME DE JORNALES');
    Screen.Cursor := crDefault;
    informes.ShowReport(); // Muestra el primero (se detiene hasta que el usuario lo cierre)

    // 2. Segundo informe: Listado según DBGrid4 mostrado a continuación (tras cerrar el primero)
    if FileExists(LPlantillaGrid) then
    begin
      Screen.Cursor := crHourGlass;
      // Restaurar el orden que tenía el usuario en el grid
      if LSortFields <> '' then
      begin
        dm.qnominasdetalle.SortedFields := LSortFields;
        dm.qnominasdetalle.SortType := LSortType;
      end;
      dm.qnominasdetalle.First;

      informes.Report.Clear;
      informes.LoadFromFile(LPlantillaGrid);
      informes.Variables.Variables['v_fechadesde'] := QUOTEDSTR(DateToStr(nomfechadesde.Date));
      informes.Variables.Variables['v_fechahasta'] := QUOTEDSTR(DateToStr(nomfechahasta.Date));
      informes.Variables.Variables['TITULO'] := QUOTEDSTR('LISTADO GENERAL DE JORNALES');
      Screen.Cursor := crDefault;
      informes.ShowReport(); // Muestra el segundo informe tras cerrar el primero
    end;

    informes.Clear;

    // Restaurar ordenación original del dataset
    if LSortFields <> '' then
    begin
      dm.qnominasdetalle.SortedFields := LSortFields;
      dm.qnominasdetalle.SortType := LSortType;
    end;
  finally
    Screen.Cursor := crDefault;
  end;
end;

procedure TBASE.btJmodificarClick(Sender: TObject);
var
  totaljornal: real;
begin
  if not tjornales.Active then
    tjornales.Open;
  tjornales.Locate('id', dm.qnominasdetalleid.AsInteger,
    [locaseinsensitive, lopartialkey]);
  tjornales.edit;
  dm.qparcelas.Open;
  dm.qtrabajos.Open;
  dm.qtipohoras.Open;
  fechajornales.Datetime := tjornalesfecha.AsDateTime;
  ljcentro.Enabled := true;
  lnobservaciones.Enabled:=true;
  ljcentro.KeyValue := tjornalesparcela.AsString;
  ljtrabajo.Enabled := true;
  ljtrabajo.KeyValue := tjornalestypework.AsString;
  ljhora.Enabled := true;
  ljhora.KeyValue := tjornalesarticulo.AsString;
  edjhoras.Enabled := true;
  edjhoras.Text := tjornalesqhoras.AsString;
  edjprecio.Text := tjornalesprecio.AsString;
  fechajornales.Enabled := true;
  PdatosJornales.Enabled := true;
  btJnuevo.Enabled := false;
  btJmodificar.Enabled := false;
  btJguardar.Enabled := true;
  btJcancelar.Enabled := true;
  btJborrar.Enabled := false;

end;

procedure TBASE.btJnuevoClick(Sender: TObject);
begin
  dmestadisticas.qcampanyas.Open;
  dm.qparcelas.Open;
  dm.qtrabajos.Open;
  dm.qtipohoras.Open;
  // fechajornales.Date:=date;
  ljcentro.Enabled := true;
  ljtrabajo.Enabled := true;
  ljhora.Enabled := true;
  edjhoras.Enabled := true;
  lnobservaciones.Enabled:=true;
  lnobservaciones.Text:='';
  fechajornales.Enabled := true;
  PdatosJornales.Enabled := true;
  btJnuevo.Enabled := false;
  btJmodificar.Enabled := false;
  btJguardar.Enabled := true;
  btJcancelar.Enabled := true;
  btJborrar.Enabled := false;
end;

procedure TBASE.Button9Click(Sender: TObject);
begin
  informedb.DataSource := dm.dsqlistadotrabajos;
  informes.Report.Clear;
  if listainformes2.ItemIndex = 0 then
    informes.LoadFromFile('c:\agrigest\informes\listadotrabajosvalorado.fr3');
  if listainformes2.ItemIndex = 1 then
    informes.LoadFromFile('c:\agrigest\informes\listadotrabajos.fr3');
  informes.Variables.Variables['TITULO'] :=
    QUOTEDSTR('LISTADO DE TRABAJOS DESDE EL ' + datetostr(nomlttdesde.Date) +
    ' HASTA EL ' + datetostr(nomltthasta.Date));
  informes.ShowReport();
end;

procedure TBASE.btvalorarClick(Sender: TObject);
var
  anyo, mes, dia: word;
  filtro, fdesde, fhasta, fdesde2, fhasta2, filtroUpdate: string;
  diaslaborables, maximodias, diascomputables, diascalculo,
    condiciones: Integer;
  irpf, desempleo, formacion, contingencias, me, salariobase, anticipos,
    indemnizacion, penalizacion, embargos: real;
  listadoIds: string;
  bookmark: TBookmark;
begin
  condiciones := 0;
  if CheckBox2.Checked then
    condiciones := condiciones + 1;
  if CheckBox3.Checked then
    condiciones := condiciones + 1;
  if CheckBox4.Checked then
    condiciones := condiciones + 1;
  if CheckBox5.Checked then
    condiciones := condiciones + 1;

  if not dm.ttrabajadores.Active then
    dm.ttrabajadores.Open;
  if not dm.tempresa.Active then
    dm.tempresa.Open;
  salariobase := dm.tempresasalariobasedia.AsFloat;

  fdesde := FormatDateTime('yyyy-mm-dd', nomfechadesde.Date);
  fhasta := FormatDateTime('yyyy-mm-dd', nomfechahasta.Date);
  decodedate(nomfechadesde.Date, anyo, mes, dia);

  qempleados.Close;
  qempleados.Open;

  listadoIds := '';
  if not qempleados.IsEmpty then
  begin
    bookmark := qempleados.GetBookmark;
    qempleados.DisableControls;
    try
      qempleados.First;
      while not qempleados.Eof do
      begin
        if listadoIds <> '' then
          listadoIds := listadoIds + ',' + qempleadosid.AsString
        else
          listadoIds := qempleadosid.AsString;
        qempleados.Next;
      end;
    finally
      qempleados.GotoBookmark(bookmark);
      qempleados.EnableControls;
    end;
  end;

  filtro := ' where estado<>''P'' and estado<>''S'' and fecha>=''' + fdesde + ''' and fecha<=''' + fhasta + '''';

  if CheckBox6.Checked then
    filtro := filtro + ' and articulo in (select codart from articulos where facturar=0)'
  else
    filtro := filtro + ' and articulo in (select codart from articulos where facturar=1)';

  if condiciones >= 1 then
    filtro := filtro + ' and ((';

  if CheckBox2.Checked then
  begin
    filtro := filtro + ' idt in (select id from trabajadores where regimen_cot=''GENERAL'')';
    condiciones := condiciones - 1;
    if condiciones = 0 then
      filtro := filtro + ' ))'
    else
      filtro := filtro + ') or (';
  end;

  if CheckBox3.Checked then
  begin
    filtro := filtro + ' idt in (select id from trabajadores where regimen_cot=''AGRARIO'')';
    condiciones := condiciones - 1;
    if condiciones = 0 then
      filtro := filtro + ' ))'
    else
      filtro := filtro + ') or (';
  end;

  if CheckBox4.Checked then
  begin
    filtro := filtro + ' idt in (select id from trabajadores where pagarporbanco=0)';
    condiciones := condiciones - 1;
    if condiciones = 0 then
      filtro := filtro + ' ))'
    else
      filtro := filtro + ') or (';
  end;

  if CheckBox5.Checked then
  begin
    filtro := filtro + ' idt in (select id from trabajadores where pagarporbanco=1)';
    condiciones := condiciones - 1;
    if condiciones = 0 then
      filtro := filtro + ' ))'
    else
      filtro := filtro + ') or (';
  end;

  filtroUpdate := filtro;

  if listadoIds <> '' then
    filtro := filtro + ' and idt in (' + listadoIds + ')'
  else
    filtro := filtro + ' and idt in (-1)';

  filtro := filtro + ' group by idt order by trabajador asc,fecha asc';

  dm.tprenominas.Close;
  dm.qaux1.Close;
  dm.qaux1.SQL.Clear;
  dm.qaux1.SQL.Add('update trabajo_diario td set precio=(select precio from articulos a where a.codart=td.articulo) where estado<>''P'' and fecha>=''' + fdesde + ''' and fecha<=''' + fhasta + '''');
  dm.qaux1.ExecSQL;

  dm.qaux1.Close;
  dm.qaux1.SQL.Clear;
  dm.qaux1.SQL.Add('update trabajo_diario td set total=precio*qhoras where estado<>''P'' and fecha>=''' + fdesde + ''' and fecha<=''' + fhasta + '''');
  dm.qaux1.ExecSQL;

  dm.qaux1.Close;
  dm.qaux1.SQL.Clear;
  dm.qaux1.SQL.Add('delete from prenominas');
  dm.qaux1.ExecSQL;
  dm.tprenominas.Open;

  dm.qaux1.Close;
  dm.qaux1.SQL.Clear;
  dm.qaux1.SQL.Add('select count(*) from calendario_laboral where festivo=0 and fecha>=''' + fdesde + ''' and fecha<=''' + fhasta + '''');
  dm.qaux1.Open;
  diaslaborables := dm.qaux1.Fields[0].AsInteger;

  dm.qaux1.Close;
  dm.qaux1.SQL.Clear;
  dm.qaux1.SQL.Add('select idt,trabajador,sum(qhoras) as horas,sum(total) as total from trabajo_diario ' + filtro);
  dm.qaux1.Open;

  if dm.qaux1.RecordCount >= 1 then
  begin
    dm.tprenominas.DisableControls;
    dm.ttrabajadores.DisableControls;
    dm.qaux1.DisableControls;
    try
      while not dm.qaux1.Eof do
      begin
        dm.ttrabajadores.Locate('id', dm.qaux1.Fields[0].AsInteger, [locaseinsensitive]);
        me := dm.ttrabajadoresretencion_me.AsFloat;
        irpf := dm.ttrabajadoresirpf.AsFloat;
        desempleo := dm.ttrabajadoresdesempleo.AsFloat;
        formacion := dm.ttrabajadoresformacion.AsFloat;
        contingencias := dm.ttrabajadorescontingencias.AsFloat;

        if (dm.ttrabajadoresfechaalta.IsNull) or (nomfechadesde.Date >= dm.ttrabajadoresfechaalta.AsDateTime) then
          fdesde2 := fdesde
        else
          fdesde2 := FormatDateTime('yyyy-mm-dd', dm.ttrabajadoresfechaalta.AsDateTime);

        if (dm.ttrabajadoresFECHABAJA.IsNull) or (dm.ttrabajadoresFECHABAJA.AsString = '') or (dm.ttrabajadoresFECHABAJA.AsDateTime >= nomfechahasta.Date) then
          fhasta2 := fhasta
        else
          fhasta2 := FormatDateTime('yyyy-mm-dd', dm.ttrabajadoresFECHABAJA.AsDateTime);

        if (fdesde2 = fdesde) and (fhasta2 = fhasta) then
          diascomputables := diaslaborables
        else
        begin
          dm.qaux3.Close;
          dm.qaux3.SQL.Clear;
          dm.qaux3.SQL.Add('select count(*) from calendario_laboral where festivo=0 and fecha>=''' + fdesde2 + ''' and fecha<=''' + fhasta2 + '''');
          dm.qaux3.Open;
          diascomputables := dm.qaux3.Fields[0].AsInteger;
        end;

        dm.qaux3.Close;
        dm.qaux3.SQL.Clear;
        dm.qaux3.SQL.Add('select coalesce(sum(importe),0), coalesce(sum(indemnizacion),0), coalesce(sum(penalizacion),0), coalesce(sum(embargo),0) ' +
          'from anticipos where idt=' + dm.qaux1.Fields[0].AsString + ' and fecha>=''' + fdesde + ''' and fecha<=''' + fhasta + '''');
        dm.qaux3.Open;
        anticipos := dm.qaux3.Fields[0].AsFloat;
        indemnizacion := dm.qaux3.Fields[1].AsFloat;
        penalizacion := dm.qaux3.Fields[2].AsFloat;
        embargos := dm.qaux3.Fields[3].AsFloat;

        if diaslaborables <= diascomputables then
          maximodias := diaslaborables
        else
          maximodias := diascomputables;

        if (dm.ttrabajadoressalariobasedia.AsFloat > 0) and
           (round(dm.qaux1.Fields[3].AsFloat / dm.ttrabajadoressalariobasedia.AsFloat) < maximodias) then
          diascalculo := Trunc(dm.qaux1.Fields[3].AsFloat / dm.ttrabajadoressalariobasedia.AsFloat)
        else
          diascalculo := maximodias;

        dm.tprenominas.Append;
        dm.tprenominasIDT.Value := dm.ttrabajadoresID.AsInteger;
        dm.tprenominasanyo.Value := anyo;
        dm.tprenominasmes.Value := inttostr(mes);
        dm.tprenominasnif.Value := dm.ttrabajadoresNIF.AsString;
        dm.tprenominasnombre.Value := dm.ttrabajadoresnombre.AsString;
        dm.tprenominasdireccion.Value := dm.ttrabajadoresdireccion.AsString;
        dm.tprenominascp.Value := dm.ttrabajadorescp.AsString;
        dm.tprenominaspoblacion.Value := dm.ttrabajadorespoblacion.AsString;
        dm.tprenominashoras.Value := dm.qaux1.Fields[2].AsFloat;
        dm.tprenominasfechaalta.Value := dm.ttrabajadoresfechaalta.AsDateTime;
        if dm.ttrabajadoresFECHABAJA.AsString <> '' then
          dm.tprenominasfechabaja.Value := dm.ttrabajadoresFECHABAJA.AsDateTime;

        if dm.tempresasalariobasedia.AsFloat > 0 then
          dm.tprenominasdiastrabajados.Value := Trunc(dm.qaux1.Fields[3].AsFloat / dm.tempresasalariobasedia.AsFloat)
        else
          dm.tprenominasdiastrabajados.Value := 0;

        dm.tprenominasdiasmaximo.Value := maximodias;
        dm.tprenominasdiascalculo.Value := diascalculo;
        dm.tprenominastotalbruto.Value := strtofloat(FormatFloat('0.00', dm.qaux1.Fields[3].AsFloat));
        dm.tprenominasme.Value := me;
        dm.tprenominastotalme.Value := strtofloat(FormatFloat('0.00', (me / 100) * dm.tprenominastotalbruto.AsFloat));
        dm.tprenominasIRPF.Value := irpf;
        dm.tprenominastotalirpf.Value := strtofloat(FormatFloat('0.00', (irpf / 100) * dm.tprenominastotalbruto.AsFloat));
        dm.tprenominasdesempleo.Value := desempleo;
        dm.tprenominastotaldesempleo.Value := strtofloat(FormatFloat('0.00', (desempleo / 100) * (dm.tprenominastotalbruto.AsFloat - indemnizacion)));
        dm.tprenominasformacion.Value := formacion;
        dm.tprenominastotalformacion.Value := strtofloat(FormatFloat('0.00', (formacion / 100) * (dm.tprenominastotalbruto.AsFloat - indemnizacion)));
        dm.tprenominascontingencias.Value := contingencias;
        dm.tprenominastotalcontingencias.Value := strtofloat(FormatFloat('0.00', (contingencias / 100) * (dm.tprenominastotalbruto.AsFloat - indemnizacion)));

        dm.tprenominastotalneto.Value := strtofloat(FormatFloat('0.00', dm.qaux1.Fields[3].AsFloat -
          dm.tprenominastotalirpf.AsFloat - dm.tprenominastotaldesempleo.AsFloat -
          dm.tprenominastotalformacion.AsFloat -
          dm.tprenominastotalcontingencias.AsFloat - dm.tprenominastotalme.AsFloat - penalizacion - embargos));

        dm.tprenominasanticipos.Value := strtofloat(FormatFloat('0.00', anticipos));
        dm.tprenominasindemnizacion.Value := strtofloat(FormatFloat('0.00', indemnizacion));
        dm.tprenominaspenalizacion.Value := strtofloat(FormatFloat('0.00', penalizacion));
        dm.tprenominasembargos.Value := strtofloat(FormatFloat('0.00', embargos));
        dm.tprenominasTOTALAPAGAR.Value := strtofloat(FormatFloat('0.00', dm.tprenominastotalneto.AsFloat -
          dm.tprenominasanticipos.AsFloat - dm.tprenominasembargos.AsFloat));

        dm.tprenominascuentapago.Value := dm.ttrabajadoresCBIBAN.AsString +
          dm.ttrabajadoresCBBANCO.AsString + dm.ttrabajadoresCBOFICINA.AsString +
          dm.ttrabajadoresCBDC.AsString + dm.ttrabajadoresCBCC.AsString;
        dm.tprenominasfechapago.Value := Date;
        dm.tprenominasestado.Value := 'S';
        dm.tprenominassalariobase.Value := salariobase;
        dm.tprenominasdiaslaborables.Value := diaslaborables;
        dm.tprenominascorrecto.Value := 0;
        dm.tprenominasfechainicio.Value := nomfechadesde.Date;
        dm.tprenominasfechafin.Value := nomfechahasta.Date;
        dm.tprenominas.post;

        dm.qaux3.Close;
        dm.qaux3.SQL.Clear;
        dm.qaux3.SQL.Add('update trabajo_diario set estado=''V'', control=' + dm.tprenominasid.AsString +
          ' ' + filtroUpdate + ' and idt=' + dm.ttrabajadoresID.AsString);
        dm.qaux3.ExecSQL;

        dm.qaux1.Next;
      end;
    finally
      dm.tprenominas.EnableControls;
      dm.ttrabajadores.EnableControls;
      dm.qaux1.EnableControls;
    end;
  end;
end;

procedure TBASE.btVerdocumentosClick(Sender: TObject);
begin
  if btVerdocumentos.Caption = 'Ver documentos' then
  begin
    Paneldocumentos.Visible := true;
    { dmtr.documentos.close;
      dmtr.documentos.filter:='ide='+dmtr.qlotesidempresa.asstring+' and idlote='+dmtr.qlotesid.AsString;
      dmtr.documentos.open; }
    btVerdocumentos.Caption := 'Ocultar Doc.';

  end
  else
  begin
    // dmtr.documentos.close;
    Paneldocumentos.Visible := false;
    // dmtr.documentos.Filter:='id=-1 and idlote=-1';
    // dmtr.documentos.open;
    btVerdocumentos.Caption := 'Ver documentos';
  end;
end;

procedure TBASE.Vaciar2Click(Sender: TObject);
begin
  DBEdit3.Text := '';
end;

procedure TBASE.baceptarempleadosClick(Sender: TObject);
var
  tid: string;
begin
  tid := templeadosID.AsString;
  if templeados.State in [dsedit, dsinsert] then
    templeados.post;
  qempleados.Refresh;
  qempleados.Locate('id', tid, [locaseinsensitive]);
  baceptarempleados.Visible := false;
  bcancelarempleados.Visible := false;
  Vaciar.Visible := false;
  Vaciar2.Visible := false;

end;

procedure TBASE.Balancedeventas1Click(Sender: TObject);
begin
  balanceventas := Tbalanceventas.Create(nil);
  try
    balanceventas.ShowModal();
  finally
    balanceventas.Free;
  end;
end;

procedure TBASE.CargasDirectasCampo1Click(Sender: TObject);
begin
  frmDirectasCampo := TfrmDirectasCampo.Create(nil);
  try
    frmDirectasCampo.ShowModal();
  finally
    frmDirectasCampo.Free;
  end;
end;

procedure TBASE.Envasadoscampovariedad1Click(Sender: TObject);
begin
  frmDirectasCampo := TfrmDirectasCampo.Create(nil);
  try
    frmDirectasCampo.ShowModal();
  finally
    frmDirectasCampo.Free;
  end;
end;

procedure TBASE.bcancelarempleadosClick(Sender: TObject);
begin
  if templeados.State in [dsedit, dsinsert] then
    templeados.cancel;
  baceptarempleados.Visible := false;
  bcancelarempleados.Visible := false;
  Vaciar.Visible := false;
  Vaciar2.Visible := false;

end;

procedure TBASE.bcancelarjornalClick(Sender: TObject);
begin
  if tjornales.State in [dsedit, dsinsert] then
  begin
    tjornales.cancel;
    qjornales.Refresh;
    qjornales.First;
    bmodificarjornales.Enabled := true;
    bborrarjornales.Enabled := true;
    baceptar.Enabled := false;
    bcancelarjornal.Enabled := false;
    btinsertar.Enabled := true;
    tfechajornal.Enabled := false;
    lparcela.Enabled := false;
    ltrabajo.Enabled := false;
    ltipohora.Enabled := false;
    thoras.Enabled := false;
    lprecio.Enabled := false;
  end;

end;

procedure TBASE.bcborrarClick(Sender: TObject);
begin
  dm.qcampanyas.Delete;
  dm.qcampanyas.Refresh;
  dm.qcampanyas.First
end;

procedure TBASE.bccaceptarClick(Sender: TObject);
begin
  dm.qparcelas.post;
end;

procedure TBASE.bccanadirClick(Sender: TObject);
begin
  dm.qparcelas.Append;
  DBEdit79.SetFocus;

end;

procedure TBASE.bccancelarClick(Sender: TObject);
begin
  dm.qcampanyas.cancel;
  dm.qcampanyas.Refresh;
end;

procedure TBASE.bccborrarClick(Sender: TObject);
begin
  dm.qparcelas.Delete;
  dm.qparcelas.Refresh;
  dm.qparcelas.First
end;

procedure TBASE.bcccancelarClick(Sender: TObject);
begin
  dm.qparcelas.cancel;
  dm.qparcelas.Refresh;
end;

procedure TBASE.bccmodificarClick(Sender: TObject);
begin
  dm.qparcelas.edit;
  DBEdit79.SetFocus;

end;

procedure TBASE.bcmodificarClick(Sender: TObject);
begin
  dm.qcampanyas.edit;
  DBEdit89.SetFocus;
  bcanadir.Enabled := false;
  bcmodificar.Enabled := false;
  bcborrar.Enabled := false;
  bccancelar.Enabled := true;
  bcaceptar.Enabled := true;
end;

procedure TBASE.beaceptarClick(Sender: TObject);
begin
  Panel150.Enabled := false;
  dm.tempresa.post;
  beanadir.Enabled := true;
  bemodificar.Enabled := true;
  beborrar.Enabled := true;
  becancelar.Enabled := false;
  beaceptar.Enabled := false;
end;

procedure TBASE.beanadirClick(Sender: TObject);
begin
  Panel50.Enabled := true;
  dm.tempresa.Append;
  EmpActiva.Checked := true;
  DBEdit40.SetFocus;
  beanadir.Enabled := false;
  bemodificar.Enabled := false;
  beborrar.Enabled := false;
  becancelar.Enabled := true;
  beaceptar.Enabled := true;
end;

procedure TBASE.beborrarClick(Sender: TObject);
begin
  dm.tempresa.Delete;
  dm.tempresa.Refresh;
  dm.tempresa.First
end;

procedure TBASE.becancelarClick(Sender: TObject);
begin
  Panel150.Enabled := false;
  dm.tempresa.cancel;
  dm.tempresa.Refresh;
  beanadir.Enabled := true;
  bemodificar.Enabled := true;
  beborrar.Enabled := true;
  becancelar.Enabled := false;
  beaceptar.Enabled := false;
end;

procedure TBASE.bemodificarClick(Sender: TObject);
begin
  Panel150.Enabled := true;
  dm.tempresa.edit;
  // dbedit40.SetFocus;
  beanadir.Enabled := false;
  bemodificar.Enabled := false;
  beborrar.Enabled := false;
  becancelar.Enabled := true;
  beaceptar.Enabled := true;
end;

procedure TBASE.baceptarClick(Sender: TObject);
var
  totaljornal: real;
begin

  if dsjornales.State in [dsinsert] then
  begin
    qaux.Close;
    qaux.SQL.Clear;
    qaux.SQL.Add('select max(id)+1 from trabajo_diario');
    qaux.Open;
    tjornalesid.Value := qaux.Fields[0].AsInteger;
    tjornalesfecha.Value := tfechajornal.Date;
    tjornalesparcela.Value := lparcela.KeyValue;
    tjornalesidt.Value := qempleadosid.AsInteger;
    tjornalestrabajador.Value := qempleadosnombre.AsString;
    tjornalestypework.Value := ltrabajo.KeyValue;
    tjornalesarticulo.Value := ltipohora.KeyValue;
    tjornalesqhoras.Value := strtofloat(thoras.Text);
    tjornalesprecio.Value := strtofloat(lprecio.Text);
    totaljornal := strtofloat(thoras.Text) * strtofloat(lprecio.Text);
    tjornalestotal.Value := strtofloat(FormatFloat('0.00', totaljornal));
    tjornalesestado.Value := 'C';
    tjornales.post;
    qjornales.Refresh;
    qjornales.First;
    bmodificarjornales.Enabled := true;
    bborrarjornales.Enabled := true;
    baceptar.Enabled := false;
    bcancelarjornal.Enabled := false;
    btinsertar.Enabled := true;
    tfechajornal.Enabled := false;
    lparcela.Enabled := false;
    ltrabajo.Enabled := false;
    ltipohora.Enabled := false;
    thoras.Enabled := false;
    lprecio.Enabled := false;
  end;
  if dsjornales.State = dsedit then
  begin

    tjornalesfecha.Value := tfechajornal.Date;
    tjornalesparcela.Value := lparcela.KeyValue;
    tjornalestypework.Value := ltrabajo.KeyValue;
    tjornalesarticulo.Value := ltipohora.KeyValue;
    tjornalesqhoras.Value := strtofloat(thoras.Text);
    tjornalesprecio.Value := strtofloat(lprecio.Text);
    totaljornal := strtofloat(thoras.Text) * strtofloat(lprecio.Text);
    tjornalestotal.Value := strtofloat(FormatFloat('0.00', totaljornal));
    tjornalesestado.Value := 'C';
    tjornales.post;
    qjornales.Refresh;
    qjornales.First;
    bmodificarjornales.Enabled := true;
    bborrarjornales.Enabled := true;
    baceptar.Enabled := false;
    btinsertar.Enabled := true;
    tfechajornal.Enabled := false;
    lparcela.Enabled := false;
    ltrabajo.Enabled := false;
    ltipohora.Enabled := false;
    thoras.Enabled := false;
    lprecio.Enabled := false;

  end;

end;

procedure TBASE.baborrarClick(Sender: TObject);
begin
  dm.talmacenes.Delete;
  dm.qalmacenes.Refresh;
  dm.qalmacenes.First
end;

procedure TBASE.bacancelarClick(Sender: TObject);
begin
  dm.talmacenes.cancel;
  dm.qalmacenes.Open;
  baanadir.Enabled := true;
  bamodificar.Enabled := true;
  baborrar.Enabled := true;
  bacancelar.Enabled := false;
  baaceptar.Enabled := false;
end;

procedure TBASE.nomlhdesdeChange(Sender: TObject);
var
  fdesde, fhasta, filtro, filtro2, filtro3: string;
  anyo, mes, dia: word;
begin
  filtro := '';
  filtro2 := '';
  filtro3 := '';
  decodedate(nomlhdesde.Date, anyo, mes, dia);
  fdesde := floattostr(anyo) + '-' + floattostr(mes) + '-' + floattostr(dia);
  filtro := ' where codart in (select distinct(articulo) from trabajo_diario where fecha>='
    + '''' + fdesde + '''';
  filtro2 :=
    ' where id in (select distinct(idt) from trabajo_diario td,articulos a, parcelas p where td.parcela=p.codpar and p.seleccionado=1 and td.articulo=a.codart and a.seleccionado=1 and fecha>='
    + '''' + fdesde + '''';
  filtro3 :=
    ' where td.parcela=p.codpar and p.seleccionado=1 and td.idt=t.id and td.articulo=a.codart and a.seleccionado=1 and t.seleccionado=1 and fecha>='
    + '''' + fdesde + '''';
  decodedate(nomlhhasta.Date, anyo, mes, dia);
  fhasta := floattostr(anyo) + '-' + floattostr(mes) + '-' + floattostr(dia);
  filtro := filtro + ' and fecha<=' + '''' + fhasta + '''';
  filtro := filtro + ') order by codart';
  filtro2 := filtro2 + ' and fecha<=' + '''' + fhasta + '''';
  filtro2 := filtro2 + ') order by nombre';
  filtro3 := filtro3 + ' and fecha<=' + '''' + fhasta + '''';
  filtro3 := filtro3 +
    ' group by idt,trabajador,articulo order by articulo,trabajador';
  dm.qtipohoras2.Close;
  dm.qtipohoras2.SQL.Clear;
  dm.qtipohoras2.SQL.Add('select codart,seleccionado from articulos ' + filtro);
  dm.qtipohoras2.Open;
  dm.qtrabajadores2.Close;
  dm.qtrabajadores2.SQL.Clear;
  dm.qtrabajadores2.SQL.Add('select id,nombre,seleccionado from trabajadores '
    + filtro2);
  dm.qtrabajadores2.Open;
  dm.qlistadohoras.Close;
  dm.qlistadohoras.SQL.Clear;
  dm.qlistadohoras.SQL.Add
    ('select idt,trabajador,articulo,sum(qhoras) as horas,sum(qhoras*a.equivalenciahoras) as horas2,sum(qhoras*td.precio) as total,sum(qhoras*a.equivalenciahoras*td.precio) as total2 ');
  dm.qlistadohoras.SQL.Add
    ('from trabajo_diario td,articulos a,trabajadores t,parcelas p ' + filtro3);
  dm.qlistadohoras.Open;
end;

procedure TBASE.nomlttdesdeChange(Sender: TObject);
var
  fdesde, fhasta, filtro, filtro2, filtro3: string;
  anyo, mes, dia: word;
begin
  filtro := '';
  filtro2 := '';
  filtro3 := '';
  decodedate(nomlttdesde.Date, anyo, mes, dia);
  fdesde := floattostr(anyo) + '-' + floattostr(mes) + '-' + floattostr(dia);
  filtro := ' where id in (select distinct(typework) from trabajo_diario where fecha>='
    + '''' + fdesde + '''';
  filtro2 :=
    ' where id in (select distinct(idt) from trabajo_diario td,tipo_trabajo a where td.typework=a.id and a.seleccionado=1 and fecha>='
    + '''' + fdesde + '''';
  filtro3 :=
    ' where td.idt=t.id and td.typework=a.id and a.seleccionado=1 and t.seleccionado=1 and fecha>='
    + '''' + fdesde + '''';
  decodedate(nomltthasta.Date, anyo, mes, dia);
  fhasta := floattostr(anyo) + '-' + floattostr(mes) + '-' + floattostr(dia);
  filtro := filtro + ' and fecha<=' + '''' + fhasta + '''';
  filtro := filtro + ') order by id';
  filtro2 := filtro2 + ' and fecha<=' + '''' + fhasta + '''';
  filtro2 := filtro2 + ') order by nombre';
  filtro3 := filtro3 + ' and fecha<=' + '''' + fhasta + '''';
  filtro3 := filtro3 +
    ' group by idt,trabajador,typework order by typework,trabajador';
  dm.qtipotrabajo2.Close;
  dm.qtipotrabajo2.SQL.Clear;
  dm.qtipotrabajo2.SQL.Add('select id,seleccionado from tipo_trabajo '
    + filtro);
  dm.qtipotrabajo2.Open;
  dm.qtrabajadores3.Close;
  dm.qtrabajadores3.SQL.Clear;
  dm.qtrabajadores3.SQL.Add('select id,nombre,seleccionado from trabajadores '
    + filtro2);
  dm.qtrabajadores3.Open;
  dm.qlistadotrabajos.Close;
  dm.qlistadotrabajos.SQL.Clear;
  dm.qlistadotrabajos.SQL.Add
    ('select idt,trabajador,typework,sum(qhoras) as horas,sum(qhoras*td.precio) as total from trabajo_diario td,tipo_trabajo a,trabajadores t '
    + filtro3);
  dm.qlistadotrabajos.Open;
end;

procedure TBASE.nomltthastaChange(Sender: TObject);
var
  fdesde, fhasta, filtro, filtro2, filtro3: string;
  anyo, mes, dia: word;
begin
  filtro := '';
  filtro2 := '';
  filtro3 := '';
  decodedate(nomlttdesde.Date, anyo, mes, dia);
  fdesde := floattostr(anyo) + '-' + floattostr(mes) + '-' + floattostr(dia);
  filtro := ' where id in (select distinct(typework) from trabajo_diario where fecha>='
    + '''' + fdesde + '''';
  filtro2 :=
    ' where id in (select distinct(idt) from trabajo_diario td,tipo_trabajo a where td.typework=a.id and a.seleccionado=1 and fecha>='
    + '''' + fdesde + '''';
  filtro3 :=
    ' where td.idt=t.id and td.typework=a.id and a.seleccionado=1 and t.seleccionado=1 and fecha>='
    + '''' + fdesde + '''';
  decodedate(nomltthasta.Date, anyo, mes, dia);
  fhasta := floattostr(anyo) + '-' + floattostr(mes) + '-' + floattostr(dia);
  filtro := filtro + ' and fecha<=' + '''' + fhasta + '''';
  filtro := filtro + ') order by id';
  filtro2 := filtro2 + ' and fecha<=' + '''' + fhasta + '''';
  filtro2 := filtro2 + ') order by nombre';
  filtro3 := filtro3 + ' and fecha<=' + '''' + fhasta + '''';
  filtro3 := filtro3 +
    ' group by idt,trabajador,typework order by typework,trabajador';
  dm.qtipotrabajo2.Close;
  dm.qtipotrabajo2.SQL.Clear;
  dm.qtipotrabajo2.SQL.Add('select id,seleccionado from tipo_trabajo '
    + filtro);
  dm.qtipotrabajo2.Open;
  dm.qtrabajadores3.Close;
  dm.qtrabajadores3.SQL.Clear;
  dm.qtrabajadores3.SQL.Add('select id,nombre,seleccionado from trabajadores '
    + filtro2);
  dm.qtrabajadores3.Open;
  dm.qlistadotrabajos.Close;
  dm.qlistadotrabajos.SQL.Clear;
  dm.qlistadotrabajos.SQL.Add
    ('select idt,trabajador,typework,sum(qhoras) as horas,sum(qhoras*td.precio) as total from trabajo_diario td,tipo_trabajo a,trabajadores t '
    + filtro3);
  dm.qlistadotrabajos.Open;
end;

procedure TBASE.fechaloteCloseUp(Sender: TObject);
begin

  dmtr.qlotesfecha.Value := fechalote.Date;
end;

procedure TBASE.fechaloteEnter(Sender: TObject);
begin
  fechalote.Date := Date;
end;

procedure TBASE.DBCheckBox13MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if dm.tcalendario_laboral.State in [dsedit] then
    dm.tcalendario_laboral.post;
end;

procedure TBASE.DBCheckBox14MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if dm.tcalendario_laboral.State in [dsedit] then
    dm.tcalendario_laboral.post;
end;

procedure TBASE.DBCheckBox15MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if dmproduccion.qcalendario_laboral.State in [dsedit] then
    dmproduccion.qcalendario_laboral.post;
end;

procedure TBASE.DBCheckBox16MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if dmproduccion.qcalendario_laboral.State in [dsedit] then
    dmproduccion.qcalendario_laboral.post;
end;

procedure TBASE.DBEdit116Enter(Sender: TObject);
var
  numdia, numanyo: Integer;
  anyo, mes, dia: word;
begin
  decodedate(strtodate(lfecha.Text), anyo, mes, dia);
  numdia := dayoftheyear(strtodate(lfecha.Text));
  numanyo := anyo - 2000;
  if dmtr.qlotes.State in [dsedit, dsinsert] then
  begin
    dmtr.qlotestrazabilidad.Value := qparcelas2numero.AsString +
      inttostr(numdia) + inttostr(numanyo);
  end
  else
  begin
    dmtr.qlotes.edit;
    dmtr.qlotestrazabilidad.Value := qparcelas2numero.AsString +
      inttostr(numdia) + inttostr(numanyo);
  end
end;

procedure TBASE.DBEdit145Exit(Sender: TObject);
begin
  if dmproduccion.qpartesdiarios.State in [dsedit] then
    dmproduccion.qpartesdiarios.post;
end;

procedure TBASE.DBEdit27Exit(Sender: TObject);
begin
  DBEdit2.Text := DBEdit8.Text + ' ' + DBEdit27.Text;
end;

procedure TBASE.DBEdit8Exit(Sender: TObject);
begin
  DBEdit2.Text := DBEdit8.Text + ' ' + DBEdit27.Text;
end;

procedure TBASE.DBEdit9Exit(Sender: TObject);
begin
  if (not EsNif(DBEdit9.Text)) and (not EsCif(DBEdit9.Text)) then
    showmessage('��� EL NIF INTRODUCIDO ES ERRONEO ���');
end;

procedure TBASE.DBGrid19DblClick(Sender: TObject);
var
  LId: Integer;
  LNuevoEstado: string;
begin
  if (dm.qnominasproduccionestado.AsString = 'C') or
    (dm.qnominasproduccionestado.AsString = 'S') then
  begin
    LId := dm.qnominasproduccionid.AsInteger;
    if dm.qnominasproduccionestado.AsString = 'C' then
      LNuevoEstado := 'S'
    else
      LNuevoEstado := 'C';

    dm.DBagrigest.ExecuteDirect('UPDATE trabajo_diario SET estado = ' + QuotedStr(LNuevoEstado) +
      ' WHERE id = ' + IntToStr(LId));
    dm.qnominasproduccion.Refresh;
    dm.qnominasproduccion.Locate('id', LId, [locaseinsensitive]);
    if tjornales.Active then
      tjornales.Refresh;
  end;

end;

procedure TBASE.DBGrid19DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if dm.qnominasproduccionestado.AsString = 'C' then
  begin
    DBGrid19.Canvas.brush.Color := amarillo;
  end;
  if dm.qnominasproduccionestado.AsString = 'S' then
  begin
    DBGrid19.Canvas.brush.Color := rojo;
  end;
  if dm.qnominasproduccionestado.AsString = 'V' then
  begin
    DBGrid19.Canvas.brush.Color := azul;
  end;
  if dm.qnominasproduccionestado.AsString = 'P' then
  begin
    DBGrid19.Canvas.brush.Color := verde;
  end;

  DBGrid19.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

procedure TBASE.DBGrid1CellClick(Column: TColumn);
var
  i: TBookmark;
begin
  if qempleadosseleccionado.AsInteger = 1 then
  begin
    i := qempleados.GetBookmark;
    qaux.SQL.Clear;
    qaux.SQL.Add('update trabajadores set seleccionado=0 where id=' +
      qempleadosid.AsString);
    qaux.ExecSQL;
    qempleados.Refresh;
    qempleados.GotoBookmark((i));
  end
  ELSE
  begin
    i := qempleados.GetBookmark;
    qaux.SQL.Clear;
    qaux.SQL.Add('update trabajadores set seleccionado=1 where id=' +
      qempleadosid.AsString);
    qaux.ExecSQL;
    qempleados.Refresh;
    qempleados.GotoBookmark((i));
  end

end;

procedure TBASE.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if qempleadosseleccionado.AsInteger = 1 then
  begin
    DBGrid1.Canvas.brush.Color := verde;
  end;
  if qempleadosseleccionado.AsInteger = 0 then
  begin
    DBGrid1.Canvas.brush.Color := clWindow;
  end;

  DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

procedure TBASE.DBGrid1TitleClick(Column: TColumn);
var
  st: ZAbstractRODataset.TSortType;
begin
  st := qempleados.SortType;
  qempleados.SortedFields := Column.FieldName;
  If st = stascending then
    qempleados.SortType := stDescending
  else
    qempleados.SortType := stascending;
  dsqtrabajadores.DataSet.First;
end;

procedure TBASE.DBGrid21Exit(Sender: TObject);
begin
  if dmproduccion.qrestos_dia.State in [dsedit] then
  begin
    dmproduccion.qrestos_dia.post;
  end;

end;

procedure TBASE.DBGrid25CellClick(Column: TColumn);
begin
  if (dm.qtrabajadores2seleccionado.AsInteger = 0) OR
    (dm.qtrabajadores2seleccionado.AsInteger = 1) then
  BEGIN
    if dm.qtrabajadores2seleccionado.AsInteger = 0 then
    begin
      dm.qtrabajadores2.edit;
      dm.qtrabajadores2seleccionado.Value := 1;
      dm.qtrabajadores2.post;
      dm.qtrabajadores2.Refresh;
    end
    else
    begin
      dm.qtrabajadores2.edit;
      dm.qtrabajadores2seleccionado.Value := 0;
      dm.qtrabajadores2.post;
      dm.qtrabajadores2.Refresh;
    end;
  END;
end;

procedure TBASE.DBGrid25DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if dm.qtrabajadores2seleccionado.AsInteger = 0 then
  begin
    DBGrid25.Canvas.brush.Color := clwhite;
  end;
  if dm.qtrabajadores2seleccionado.AsInteger = 1 then
  begin
    DBGrid25.Canvas.brush.Color := verde;
  end;

  DBGrid25.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

procedure TBASE.DBGrid26CellClick(Column: TColumn);
begin
  if (dm.qtipohoras2seleccionado.AsInteger = 0) OR
    (dm.qtipohoras2seleccionado.AsInteger = 1) then
  BEGIN
    if dm.qtipohoras2seleccionado.AsInteger = 0 then
    begin
      dm.qtipohoras2.edit;
      dm.qtipohoras2seleccionado.Value := 1;
      dm.qtipohoras2.post;
      dm.qtipohoras2.Refresh;
    end
    ELSE
    begin
      dm.qtipohoras2.edit;
      dm.qtipohoras2seleccionado.Value := 0;
      dm.qtipohoras2.post;
      dm.qtipohoras2.Refresh;
    end;
  END;
end;

procedure TBASE.DBGrid26DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if dm.qtipohoras2seleccionado.AsInteger = 0 then
  begin
    DBGrid26.Canvas.brush.Color := clwhite;
  end;
  if dm.qtipohoras2seleccionado.AsInteger = 1 then
  begin
    DBGrid26.Canvas.brush.Color := verde;
  end;

  DBGrid26.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

procedure TBASE.DBGrid28CellClick(Column: TColumn);
begin
  if (dm.qtrabajadores3seleccionado.AsInteger = 0) OR
    (dm.qtrabajadores3seleccionado.AsInteger = 1) then
  BEGIN
    if dm.qtrabajadores3seleccionado.AsInteger = 0 then
    begin
      dm.qtrabajadores3.edit;
      dm.qtrabajadores3seleccionado.Value := 1;
      dm.qtrabajadores3.post;
      dm.qtrabajadores3.Refresh;
    end
    else
    begin
      dm.qtrabajadores3.edit;
      dm.qtrabajadores3seleccionado.Value := 0;
      dm.qtrabajadores3.post;
      dm.qtrabajadores3.Refresh;
    end;
  END;
end;

procedure TBASE.DBGrid28DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if dm.qtrabajadores3seleccionado.AsInteger = 0 then
  begin
    DBGrid28.Canvas.brush.Color := clwhite;
  end;
  if dm.qtrabajadores3seleccionado.AsInteger = 1 then
  begin
    DBGrid28.Canvas.brush.Color := verde;
  end;

  DBGrid28.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

procedure TBASE.DBGrid29CellClick(Column: TColumn);
begin
  if (dm.qtipotrabajo2seleccionado.AsInteger = 0) OR
    (dm.qtipotrabajo2seleccionado.AsInteger = 1) then
  BEGIN
    if dm.qtipotrabajo2seleccionado.AsInteger = 0 then
    begin
      dm.qtipotrabajo2.edit;
      dm.qtipotrabajo2seleccionado.Value := 1;
      dm.qtipotrabajo2.post;
      dm.qtipotrabajo2.Refresh;
    end
    ELSE
    begin
      dm.qtipotrabajo2.edit;
      dm.qtipotrabajo2seleccionado.Value := 0;
      dm.qtipotrabajo2.post;
      dm.qtipotrabajo2.Refresh;
    end;
  END;
end;

procedure TBASE.DBGrid29DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if dm.qtipotrabajo2seleccionado.AsInteger = 0 then
  begin
    DBGrid29.Canvas.brush.Color := clwhite;
  end;
  if dm.qtipotrabajo2seleccionado.AsInteger = 1 then
  begin
    DBGrid29.Canvas.brush.Color := verde;
  end;

  DBGrid29.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

procedure TBASE.DBGrid2CellClick(Column: TColumn);
var
  LId: Integer;
  LNuevoEstado: string;
begin
  if (qjornalesestado.AsString = 'C') or (qjornalesestado.AsString = 'S') then
  begin
    LId := qjornalesid.AsInteger;
    if qjornalesestado.AsString = 'C' then
      LNuevoEstado := 'S'
    else
      LNuevoEstado := 'C';

    dm.DBagrigest.ExecuteDirect('UPDATE trabajo_diario SET estado = ' + QuotedStr(LNuevoEstado) +
      ' WHERE id = ' + IntToStr(LId));
    qjornales.Refresh;
    qjornales.Locate('id', LId, [locaseinsensitive]);
    if tjornales.Active then
      tjornales.Refresh;
  end;

end;

procedure TBASE.DBGrid2DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);

begin
  if qjornalesestado.AsString = 'C' then
  begin
    DBGrid2.Canvas.brush.Color := amarillo;
  end;
  if qjornalesestado.AsString = 'S' then
  begin
    DBGrid2.Canvas.brush.Color := rojo;
  end;
  if qjornalesestado.AsString = 'V' then
  begin
    DBGrid2.Canvas.brush.Color := azul;
  end;
  if qjornalesestado.AsString = 'P' then
  begin
    DBGrid2.Canvas.brush.Color := verde;
  end;

  DBGrid2.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

procedure TBASE.DBGrid32CellClick(Column: TColumn);
begin
  if (dm.qparcela2seleccionado.AsInteger = 0) OR
    (dm.qparcela2seleccionado.AsInteger = 1) then
  BEGIN
    if dm.qparcela2seleccionado.AsInteger = 0 then
    begin
      dm.qparcela2.edit;
      dm.qparcela2seleccionado.Value := 1;
      dm.qparcela2.post;
      dm.qparcela2.Refresh;
    end
    ELSE
    begin
      dm.qparcela2.edit;
      dm.qparcela2seleccionado.Value := 0;
      dm.qparcela2.post;
      dm.qparcela2.Refresh;
    end;
  END;
end;

procedure TBASE.DBGrid32DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if dm.qparcela2seleccionado.AsInteger = 0 then
  begin
    DBGrid32.Canvas.brush.Color := clwhite;
  end;
  if dm.qparcela2seleccionado.AsInteger = 1 then
  begin
    DBGrid32.Canvas.brush.Color := verde;
  end;

  DBGrid32.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

procedure TBASE.DBGrid33DblClick(Sender: TObject);
begin
  Button18.Click;
end;

procedure TBASE.DBGrid33DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if dm.qpartes_diariosfestivo.AsInteger = 1 then
  begin
    DBGrid33.Canvas.brush.Color := rojo;
  end;
  if dm.qpartes_diariosvalidado.AsInteger = 1 then
  begin
    DBGrid33.Canvas.brush.Color := verde;
  end;

  DBGrid33.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

procedure TBASE.DBGrid36DblClick(Sender: TObject);
begin
  mostrarpesadas(dmtr.qsalidasid.AsString);
{
  fpesadas := Tfpesadas.Create(nil);
  try
    fpesadas.desdefuera:=1;
    if fpesadas.qpesadas.Active = false then
    begin
      fpesadas.qpesadas.Open;
      fpesadas.qlotes.open;
    end;
    fpesadas.Edit1.Text := dmtr.qsalidasid.AsString;
    fpesadas.btbuscar.Click;
    fpesadas.ShowModal;
    fpesadas.desdefuera:=0;
  finally
    fpesadas.Free;
  end; }
end;

procedure Tbase.MostrarPesadas(const idPesada: string);
var
  fpesadas: Tfpesadas;
begin
  fpesadas := Tfpesadas.Create(nil);
  with fpesadas do
  begin
    try
      qpesadas.Open;
      qlotes.open;
      qenvases.Open;
      qformatos.Open;
      qcalidad.Open;
      qpalets.open;
      qmprimas.Open;
      qalmacenes.Open;
      qtipohora.Open;
      Edit1.Text := idPesada;
      btbuscar.Click;
      ShowModal;
    finally
      Free;
    end;
  end;

end;

procedure TBASE.DBGrid38DblClick(Sender: TObject);
begin
  mostrarpesadas(dmtr.qea_pesadasid.AsString);
{  fpesadas := Tfpesadas.Create(nil);
  try
    fpesadas.desdefuera:=1;
    if fpesadas.qpesadas.Active = false then
    begin
      fpesadas.qpesadas.Open;
      fpesadas.qlotes.open;
    end;
    fpesadas.Edit1.Text := ;
    fpesadas.btbuscar.Click;
    fpesadas.ShowModal;
    fpesadas.desdefuera:=0;
  finally
    fpesadas.Free;
  end;}
end;

procedure TBASE.DBGrid3CellClick(Column: TColumn);
var
  tid: string;
  LId: Integer;
  LNuevoEstado: string;
begin
  tid := dm.qanticiposid.AsString;
  fechaanticipo.Date := dm.qanticiposfecha.AsDateTime;
  limporteanticipo.Text := dm.qanticiposimporte.AsString;
  if (dm.qanticiposestado.AsString = 'C') OR (dm.qanticiposestado.AsString = 'S')
  then
  BEGIN
    LId := dm.qanticiposid.AsInteger;
    if dm.qanticiposestado.AsString = 'C' then
      LNuevoEstado := 'S'
    else
      LNuevoEstado := 'C';

    dm.DBagrigest.ExecuteDirect('UPDATE anticipos SET estado = ' + QuotedStr(LNuevoEstado) +
      ' WHERE id = ' + IntToStr(LId));
    dm.qanticipos.Refresh;
    dm.qanticipos.Locate('id', LId, [locaseinsensitive]);
    if dm.tanticipos.Active then
      dm.tanticipos.Refresh;
  END;
end;

procedure TBASE.DBGrid3DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);

begin
  if dm.qanticiposestado.AsString = 'C' then
  begin
    DBGrid3.Canvas.brush.Color := amarillo;
  end;
  if dm.qanticiposestado.AsString = 'S' then
  begin
    DBGrid3.Canvas.brush.Color := rojo;
  end;
  if dm.qanticiposestado.AsString = 'V' then
  begin
    DBGrid3.Canvas.brush.Color := azul;
  end;
  if dm.qanticiposestado.AsString = 'P' then
  begin
    DBGrid3.Canvas.brush.Color := verde;
  end;

  DBGrid3.DefaultDrawColumnCell(Rect, DataCol, Column, State);

end;

procedure TBASE.DBGrid41DblClick(Sender: TObject);
begin
mostrarpesadas(dmestadisticas.qdesechosdetallesid.AsString);
{  fpesadas := Tfpesadas.Create(nil);
  try
    if fpesadas.qpesadas.Active = false then
      fpesadas.qpesadas.Open;
    fpesadas.Edit1.Text :=
    fpesadas.btbuscar.Click;
    fpesadas.ShowModal;
  finally
    fpesadas.Free;
  end;    }
end;

procedure TBASE.DBGrid44DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if dmproduccion.qpartesdiariosestado.AsInteger = 0 then
  begin
    DBGrid44.Canvas.brush.Color := verde;
  end;
  if dmproduccion.qpartesdiariosestado.AsInteger = 1 then
  begin
    DBGrid44.Canvas.brush.Color := rojo;
  end;
  DBGrid44.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

procedure TBASE.DBGrid46DblClick(Sender: TObject);
begin
mostrarpesadas(dmproduccion.qproduccion_detallesid.AsString);
{  fpesadas := Tfpesadas.Create(nil);
  try
    if fpesadas.qpesadas.Active = false then
      fpesadas.qpesadas.Open;
    fpesadas.Edit1.Text := ;
    fpesadas.btbuscar.Click;
    fpesadas.ShowModal;
  finally
    fpesadas.Free;
  end;       }
end;

procedure TBASE.DBGrid4CellClick(Column: TColumn);
var
  LId: Integer;
  LNuevoEstado: string;
begin
  if (Column <> nil) and (SameText(Column.FieldName, 'articulo') or SameText(Column.FieldName, 'qhoras')) then
    Exit;

  if (dm.qnominasdetalleestado.AsString = 'C') or
    (dm.qnominasdetalleestado.AsString = 'S') then
  begin
    LId := dm.qnominasdetalleid.AsInteger;
    if dm.qnominasdetalleestado.AsString = 'C' then
      LNuevoEstado := 'S'
    else
      LNuevoEstado := 'C';

    dm.DBagrigest.ExecuteDirect('UPDATE trabajo_diario SET estado = ' + QuotedStr(LNuevoEstado) +
      ' WHERE id = ' + IntToStr(LId));
    dm.qnominasdetalle.Refresh;
    dm.qnominasdetalle.Locate('id', LId, [locaseinsensitive]);
    if tjornales.Active then
      tjornales.Refresh;
  end;

end;

procedure TBASE.DBGrid4KeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #13 then
  begin
    if (DBGrid4.SelectedField <> nil) and SameText(DBGrid4.SelectedField.FieldName, 'articulo') then
    begin
      // Pasar a la columna de Horas
      DBGrid4.SelectedIndex := DBGrid4.SelectedIndex + 1;
      Key := #0;
    end
    else if (DBGrid4.SelectedField <> nil) and SameText(DBGrid4.SelectedField.FieldName, 'qhoras') then
    begin
      // Confirmar la fila
      if dm.qnominasdetalle.State in [dsEdit, dsInsert] then
        dm.qnominasdetalle.Post;
      Key := #0;
    end;
  end;
end;

procedure TBASE.CargarPickListTipoHoras;
var
  i: Integer;
  ColArt: TColumn;
begin
  ColArt := nil;
  for i := 0 to DBGrid4.Columns.Count - 1 do
  begin
    if SameText(DBGrid4.Columns[i].FieldName, 'articulo') then
    begin
      ColArt := DBGrid4.Columns[i];
      Break;
    end;
  end;

  if ColArt <> nil then
  begin
    ColArt.PickList.Clear;
    ColArt.DropDownRows := 10;
    dm.qaux1.Close;
    dm.qaux1.SQL.Clear;
    dm.qaux1.SQL.Add('select codart from articulos where activo=1 order by codart');
    dm.qaux1.Open;
    while not dm.qaux1.Eof do
    begin
      ColArt.PickList.Add(dm.qaux1.Fields[0].AsString);
      dm.qaux1.Next;
    end;
    dm.qaux1.Close;
  end;
end;

procedure TBASE.DBGrid4DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);

begin
  if dm.qnominasdetalleestado.AsString = 'C' then
  begin
    DBGrid4.Canvas.brush.Color := amarillo;
  end;
  if dm.qnominasdetalleestado.AsString = 'S' then
  begin
    DBGrid4.Canvas.brush.Color := rojo;
  end;
  if dm.qnominasdetalleestado.AsString = 'V' then
  begin
    DBGrid4.Canvas.brush.Color := azul;
  end;
  if dm.qnominasdetalleestado.AsString = 'P' then
  begin
    DBGrid4.Canvas.brush.Color := verde;
  end;

  DBGrid4.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

procedure TBASE.DBGrid4TitleClick(Column: TColumn);
var
  st: ZAbstractRODataset.TSortType;
begin
  st := dm.qnominasdetalle.SortType;
  dm.qnominasdetalle.SortedFields := Column.FieldName;
  If st = stascending then
    dm.qnominasdetalle.SortType := stDescending
  else
    dm.qnominasdetalle.SortType := stascending;
  dm.dsqnominasdetalle.DataSet.First;

end;

procedure TBASE.DBGrid55DblClick(Sender: TObject);
begin
  mostrarpesadas(dmestadisticas.qproduccion_almacenid.AsString);
{
  fpesadas := Tfpesadas.Create(nil);
  try
    if fpesadas.qpesadas.Active = false then
      fpesadas.qpesadas.Open;
    fpesadas.Edit1.Text := ;
    fpesadas.btbuscar.Click;
    fpesadas.ShowModal;
  finally
    fpesadas.Free;
  end;}
end;

procedure TBASE.DBGrid56CellClick(Column: TColumn);
begin
  if Column.Field.FieldName = 'activo' then
  begin
    if dm.qseriesactivo.AsInteger = 1 then
    begin
      dm.qseries.edit;
      dm.qseriesactivo.Value := 0;
      dm.qseries.post;
      DBGrid56.SelectedIndex := 1;
    end
    else
    begin
      dm.qseries.edit;
      dm.qseriesactivo.Value := 1;
      dm.qseries.post;
      DBGrid56.SelectedIndex := 1;
    end;
  end;

end;

procedure TBASE.DBGrid56DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
const
  IsChecked: array [Boolean] of Integer = (DFCS_BUTTONCHECK, DFCS_BUTTONCHECK or
    DFCS_CHECKED);
var
  DrawState: Integer;
  DrawRect: TRect;
  // dibujar check

begin
  if (gdFocused in State) then
  begin
    if (Column.Field.FieldName = 'activo') then
    begin
      gcrcheck.Left := Rect.Left + DBGrid56.Left + 2;
      gcrcheck.Top := Rect.Top + DBGrid56.Top + 2;
      gcrcheck.Width := Rect.Right - Rect.Left;
      gcrcheck.Height := Rect.Bottom - Rect.Top;
      gcrcheck.Visible := true;
    end;

  end
  else
  begin
    if (Column.Field.FieldName = 'activo') then
    begin
      DrawRect := Rect;
      InflateRect(DrawRect, -1, -1);
      if Column.Field.AsInteger = 0 then
        DrawState := IsChecked[false];
      if Column.Field.AsInteger = 1 then
        DrawState := IsChecked[true];
      // DrawState := ISChecked[Column.Field.Asinteger];
      DBGrid56.Canvas.FillRect(Rect);
      DrawFrameControl(DBGrid56.Canvas.Handle, DrawRect, DFC_BUTTON, DrawState);

    end;
  end;

end;

procedure TBASE.DBGrid59DblClick(Sender: TObject);
begin
    mostrarpesadas(dmproduccion.qentradasid.AsString);
    {
  fpesadas := Tfpesadas.Create(nil);
  try
    if fpesadas.qpesadas.Active = false then
      fpesadas.qpesadas.Open;
    fpesadas.Edit1.Text := ;
    fpesadas.btbuscar.Click;
    fpesadas.ShowModal;
  finally
    fpesadas.Free;
  end;}
end;

procedure TBASE.DBGrid5CellClick(Column: TColumn);
var
  LId: Integer;
  LNuevoEstado: string;
begin
  if (dm.qanticiposdetalleestado.AsString = 'C') OR
    (dm.qanticiposdetalleestado.AsString = 'S') then
  BEGIN
    LId := dm.qanticiposdetalleid.AsInteger;
    if dm.qanticiposdetalleestado.AsString = 'C' then
      LNuevoEstado := 'S'
    else
      LNuevoEstado := 'C';

    dm.DBagrigest.ExecuteDirect('UPDATE anticipos SET estado = ' + QuotedStr(LNuevoEstado) +
      ' WHERE id = ' + IntToStr(LId));
    dm.qanticiposdetalle.Refresh;
    dm.qanticiposdetalle.Locate('id', LId, [locaseinsensitive]);
    if dm.tanticipos.Active then
      dm.tanticipos.Refresh;
  END;
end;

procedure TBASE.DBGrid5DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);

begin
  if dm.qanticiposdetalleestado.AsString = 'C' then
  begin
    DBGrid5.Canvas.brush.Color := amarillo;
  end;
  if dm.qanticiposdetalleestado.AsString = 'S' then
  begin
    DBGrid5.Canvas.brush.Color := rojo;
  end;
  if dm.qanticiposdetalleestado.AsString = 'V' then
  begin
    DBGrid5.Canvas.brush.Color := azul;
  end;
  if dm.qanticiposdetalleestado.AsString = 'P' then
  begin
    DBGrid5.Canvas.brush.Color := verde;
  end;

  DBGrid5.DefaultDrawColumnCell(Rect, DataCol, Column, State);

end;

procedure TBASE.DBGrid5TitleClick(Column: TColumn);
var
  st: ZAbstractRODataset.TSortType;
begin
  st := dm.qanticiposdetalle.SortType;
  dm.qanticiposdetalle.SortedFields := Column.FieldName;
  If st = stascending then
    dm.qanticiposdetalle.SortType := stDescending
  else
    dm.qanticiposdetalle.SortType := stascending;
  dm.dsqanticiposdetalle.DataSet.First;
end;

procedure TBASE.DBGrid60DblClick(Sender: TObject);
begin
    mostrarpesadas(dmproduccion.qsalidaslotesid.AsString);
    {
  fpesadas := Tfpesadas.Create(nil);
  try
    if fpesadas.qpesadas.Active = false then
      fpesadas.qpesadas.Open;
    fpesadas.Edit1.Text := ;
    fpesadas.btbuscar.Click;
    fpesadas.ShowModal;
  finally
    fpesadas.Free;
  end;}
end;

procedure TBASE.DBGrid60DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if dmproduccion.qsalidaslotespeso_neto.AsFloat <
    dmproduccion.qsalidaslotespeso_neto_teorico.AsFloat then
  begin
    DBGrid60.Canvas.brush.Color := rojo;
  end;
  DBGrid60.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

procedure TBASE.DBGrid64CellClick(Column: TColumn);
var
  i: TBookmark;
begin
  i := qempleados.GetBookmark;
  if qempleadosseleccionado.AsInteger = 1 then
  begin
    qaux.SQL.Clear;
    qaux.SQL.Add('update trabajadores set seleccionado=0 where id=' +
      qempleadosid.AsString);
    qaux.ExecSQL;
    qempleados.Refresh;
    qempleados.GotoBookmark((i));
  end
  ELSE
  begin
    qaux.SQL.Clear;
    qaux.SQL.Add('update trabajadores set seleccionado=1 where id=' +
      qempleadosid.AsString);
    qaux.ExecSQL;
    qempleados.Refresh;
    qempleados.GotoBookmark((i));
  end

end;

procedure TBASE.DBGrid64DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if qempleadosseleccionado.AsInteger = 1 then
  begin
    DBGrid64.Canvas.brush.Color := verde;
  end;
  if qempleadosseleccionado.AsInteger = 0 then
  begin
    DBGrid64.Canvas.brush.Color := clWindow;
  end;

  DBGrid64.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

procedure TBASE.DBGrid64TitleClick(Column: TColumn);
var
  st: ZAbstractRODataset.TSortType;
begin
  st := qempleados.SortType;
  qempleados.SortedFields := Column.FieldName;
  If st = stascending then
    qempleados.SortType := stDescending
  else
    qempleados.SortType := stascending;
  dsqtrabajadores.DataSet.First;
end;

procedure TBASE.DBGrid68DblClick(Sender: TObject);
begin
  Button29.Click;
end;

procedure TBASE.DBGrid68DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if dm.qpartes_diarios2festivo.AsInteger = 1 then
  begin
    DBGrid68.Canvas.brush.Color := rojo;
  end;
  if dm.qpartes_diarios2validado.AsInteger = 1 then
  begin
    DBGrid68.Canvas.brush.Color := verde;
  end;
  DBGrid68.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

procedure TBASE.DBGrid69DblClick(Sender: TObject);
begin
    mostrarpesadas(dmestadisticas.qsalidasdetallesid.AsString);
    {
  fpesadas := Tfpesadas.Create(nil);
  try
    if fpesadas.qpesadas.Active = false then
      fpesadas.qpesadas.Open;
    fpesadas.Edit1.Text := ;
    fpesadas.btbuscar.Click;
    fpesadas.ShowModal;
  finally
    fpesadas.Free;
  end;}
end;

procedure TBASE.DBGrid7CellClick(Column: TColumn);
begin
  if not dm.tprenominas.Active or dm.tprenominas.IsEmpty then
    Exit;

  if dm.tprenominascorrecto.AsInteger = 0 then
  begin
    dm.tprenominas.edit;
    dm.tprenominascorrecto.Value := 1;
    dm.tprenominas.post;
    dm.tprenominas.Refresh;
  end
  ELSE
  begin
    dm.tprenominas.edit;
    dm.tprenominascorrecto.Value := 0;
    dm.tprenominas.post;
    dm.tprenominas.Refresh;
  end;

end;

procedure TBASE.DBGrid7DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if dm.tprenominascorrecto.AsInteger = 0 then
  begin
    DBGrid7.Canvas.brush.Color := amarillo;
  end;
  if dm.tprenominascorrecto.AsInteger = 1 then
  begin
    DBGrid7.Canvas.brush.Color := verde;
  end;

  DBGrid7.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

procedure TBASE.DBGrid8TitleClick(Column: TColumn);
var
  st: ZAbstractRODataset.TSortType;
begin
  st := dm.qproductos.SortType;
  dm.qproductos.SortedFields := Column.FieldName;
  If st = stascending then
    dm.qproductos.SortType := stDescending
  else
    dm.qproductos.SortType := stascending;
  dm.dsqproductos.DataSet.First;

end;

procedure TBASE.listagrupos2CloseUp(Sender: TObject);
begin
  vtactivo := qgrupostrabajadores2id.AsInteger;
  qempleados.Close;
  qempleados.Open;
end;

procedure TBASE.DBLookupComboBox12CloseUp(Sender: TObject);
begin
  if (DBLookupComboBox12.KeyValue = Null) or (VarIsNull(DBLookupComboBox12.KeyValue)) then
    vtactivo := 0
  else
    vtactivo := qgrupostrabajadores2id.AsInteger;
  qempleados.Close;
  qempleados.Open;
  btactualizarempleadosnominas.Click;
end;

procedure TBASE.DBLookupComboBox18Exit(Sender: TObject);
begin
  dmtr.qlotespaisorigen.Value := qsocios2pais.AsString;
end;

procedure TBASE.DBLookupComboBox7CloseUp(Sender: TObject);
begin
  if dmtr.qlotes.State in [dsinsert, dsedit] then
    dmtr.qlotesdesc_generador.Value := dmtr.qtiposgeneradordescripcion.AsString;
end;

procedure TBASE.DBMemo1Exit(Sender: TObject);
begin
  if templeados.State in [dsedit, dsinsert] then
    templeados.post;
  Panel8.SetFocus;
end;

procedure TBASE.dlotescodigoExit(Sender: TObject);
begin
  if dmtr.qlotes.State in [dsedit, dsinsert] then
  begin
    if lfecha.Text = '' then
      dmtr.qlotesfecha.Value := Date();
  end;
end;

procedure TBASE.dlotesfcaducidadExit(Sender: TObject);
begin
  btLguardar.SetFocus;
end;

procedure TBASE.dlotesfechaetiquetaExit(Sender: TObject);
begin
  dmtr.qlotesfecha_caducidad.Value := dmtr.qlotesfecha.AsDateTime + 2;
end;

procedure TBASE.dlotesftrabajoExit(Sender: TObject);
begin
  dmtr.qlotesfecha.Value := dmtr.qlotesfechaini_trabajo.AsDateTime;
  dmtr.qlotesfechafin_trabajo.Value := dmtr.qlotesfechaini_trabajo.AsDateTime;
end;

procedure TBASE.dsdocempleadosDataChange(Sender: TObject; Field: TField);
var
  img: tPicture;
  ext, nomarchivo: string;
  SearchRec: TSearchRec;

begin
  { If not DirectoryExists('c:\agrigest\tmp') then
    CreateDir('c:\agrigest\tmp');
    if dmtr.documentos.State in [dsbrowse] then
    begin
    if FindFirst('c:\agrigest\tmp\*.*', faAnyFile, SearchRec) = 0 then
    repeat
    Deletefile('c:\agrigest\tmp\'+SearchRec.name);
    until (FindNext(SearchRec) <> 0);
    FindClose(SearchRec);
    if dmtr.documentos.RecordCount>0 then
    begin
    imgfoto.Picture:=nil;
    ext:=dmtr.documentosextension.AsString;
    nomarchivo:=dmtr.documentosnomarchivo.asstring;
    if nomarchivo<>'' then dmtr.documentosarchivo.savetofile('c:\agrigest\tmp\'+nomarchivo);
    if (ext='.jpg') or (ext='.jpeg') or (ext='.bmp') or (ext='.png') then
    begin
    imageempleados.Picture:=nil;
    if nomarchivo<>'' then imageempleados.Picture.LoadFromFile('c:\agrigest\tmp\'+nomarchivo);
    imageempleados.Visible:=true;
    btedocver2.Visible:=false;
    end else
    begin
    imageempleados.Visible:=false;
    btedocver2.Visible:=true;
    end;
    end;
    if dmtr.documentos.RecordCount=0 then
    begin
    imageempleados.Visible:=false;
    btedocver2.Visible:=false;
    imageempleados.Picture:=nil;
    end;


    end;

  }
end;

procedure TBASE.dsdocempleadosStateChange(Sender: TObject);
begin
  { if dmtr.documentos.State in [dsedit,dsinsert] then
    begin
    btedocnuevo.enabled:=false;
    btedocmodificar.enabled:=false;
    btedocborrar.enabled:=false;
    btedocguardar.enabled:=true;
    btedoccancelar.enabled:=true;
    end;
    if dmtr.documentos.State in [dsbrowse] then
    begin
    btedocnuevo.enabled:=true;
    btedocmodificar.enabled:=true;
    btedocborrar.enabled:=true;
    btedocguardar.enabled:=false;
    btedoccancelar.enabled:=false;
    end; }
end;

procedure TBASE.dsdoclotesDataChange(Sender: TObject; Field: TField);
var
  img: tPicture;
  ext, nomarchivo: string;
  SearchRec: TSearchRec;

begin
  If not DirectoryExists('c:\agrigest\tmp') then
    CreateDir('c:\agrigest\tmp');
  if dmtr.qdocumentos.State in [dsbrowse] then
  begin
    if FindFirst('c:\agrigest\tmp\*.*', faAnyFile, SearchRec) = 0 then
      repeat
        Deletefile('c:\agrigest\tmp\' + SearchRec.name);
      until (FindNext(SearchRec) <> 0);
    FindClose(SearchRec);
    if dmtr.qdocumentos.RecordCount > 0 then
    begin
      imgfoto.Picture := nil;
      ext := dmtr.qdocumentosextension.AsString;
      nomarchivo := dmtr.qdocumentosnomarchivo.AsString;
      if nomarchivo <> '' then
        dmtr.qdocumentosarchivo.SaveToFile('c:\agrigest\tmp\' + nomarchivo);
      if (ext = '.jpg') or (ext = '.jpeg') or (ext = '.bmp') or (ext = '.png')
      then
      begin
        imgfoto.Picture := nil;
        if nomarchivo <> '' then
          imgfoto.Picture.LoadFromFile('c:\agrigest\tmp\' + nomarchivo);
        imgfoto.Visible := true;
        btdver.Visible := false;
      end
      else
      begin
        imgfoto.Visible := false;
        btdver.Visible := true;
      end;
    end;
    if dmtr.qdocumentos.RecordCount = 0 then
    begin
      imgfoto.Visible := false;
      btdver.Visible := false;
      imgfoto.Picture := nil;
    end;

    // imagen.Free;
    // bmp.free;

  end;

end;

procedure TBASE.dsdoclotesStateChange(Sender: TObject);
begin
  if dmtr.qdocumentos.State in [dsedit, dsinsert] then
  begin
    btdnuevo.Enabled := false;
    btdmodificar.Enabled := false;
    btdborrar.Enabled := false;
    btdimprimir.Enabled := false;
    btdguardar.Enabled := true;
    btdcancelar.Enabled := true;
  end;
  if dmtr.qdocumentos.State in [dsbrowse] then
  begin
    btdnuevo.Enabled := true;
    btdmodificar.Enabled := true;
    btdborrar.Enabled := true;
    btdimprimir.Enabled := true;
    btdguardar.Enabled := false;
    btdcancelar.Enabled := false;
  end;
end;

procedure TBASE.dsempresaStateChange(Sender: TObject);
begin
  if dm.tempresa.State in [dsedit, dsinsert] then
  begin
    beanadir.Enabled := false;
    beborrar.Enabled := false;
    bemodificar.Enabled := false;
    beaceptar.Enabled := true;
    becancelar.Enabled := true;
    Panel150.Enabled := true;
    Panel169.Enabled := true;
    Panel170.Enabled := true;
    Panel116.Enabled := true;
  end
  else
  begin
    beanadir.Enabled := true;
    beborrar.Enabled := true;
    bemodificar.Enabled := true;
    beaceptar.Enabled := false;
    becancelar.Enabled := false;
    Panel150.Enabled := false;
    Panel169.Enabled := false;
    Panel170.Enabled := false;
    Panel116.Enabled := true;
  end;
end;

procedure TBASE.dsqalmacenesDataChange(Sender: TObject; Field: TField);
begin
  dmestadisticas.qcontenido.Close;
  dmestadisticas.qcontenido.Prepare;
  dmestadisticas.qcontenido.ParamByName('ALMACEN').AsString :=
    dm.qalmacenesnombre.AsString;
  dmestadisticas.qcontenido.Open;
  dmestadisticas.qproduccion_almacen.Close;
  dmestadisticas.qproduccion_almacen.Prepare;
  dmestadisticas.qproduccion_almacen.ParamByName('ALMACEN').AsString :=
    dm.qalmacenesnombre.AsString;
  dmestadisticas.qproduccion_almacen.Open;
end;

procedure TBASE.dsqlotesStateChange(Sender: TObject);
begin
  if dmtr.qlotes.State in [dsedit, dsinsert] then
  begin
    Panel83.Enabled := true;
    btlnuevo.Enabled := false;
    btLmodificar.Enabled := false;
    btLguardar.Enabled := true;
    btLcancelar.Enabled := true;
  end;
  if dmtr.qlotes.State in [dsbrowse] then
  begin
    Panel83.Enabled := false;
    btlnuevo.Enabled := true;
    btLmodificar.Enabled := true;
    btLguardar.Enabled := false;
    btLcancelar.Enabled := false;
  end;
end;

procedure TBASE.dsqmesasDataChange(Sender: TObject; Field: TField);
var
  anyo, mes, dia: word;
  fdesde, fhasta: string;
begin
  decodedate(fprodesde.Date, anyo, mes, dia);
  fdesde := inttostr(anyo) + '-' + inttostr(mes) + '-' + inttostr(dia);
  // decodedate(fprohasta.Date, anyo, mes, dia);
  // fhasta := inttostr(anyo) + '-' + inttostr(mes) + '-' + inttostr(dia);

  dm.qnominasproduccion.Close;
  dm.qnominasproduccion.SQL.Clear;
  dm.qnominasproduccion.SQL.Add
    ('select * from trabajo_diario where origen like(' + '''' + '%' +
    dm.qmesasmesa.AsString + '%' + '''' + ') and fecha=' + '''' + fdesde + ''''
    + ' and idt in (');
  dm.qnominasproduccion.SQL.Add('select idt from movimiento_mesas where mesa=' +
    '''' + dm.qmesasmesa.AsString + '''' + ' and fecha=' + '''' + fdesde + ''''
    + ') order by idt');
  dm.qnominasproduccion.Open;
  dm.qmovimientomesas.Close;
  dm.qmovimientomesas.SQL.Clear;
  dm.qmovimientomesas.SQL.Add('select * from movimiento_mesas where mesa=' +
    '''' + dm.qmesasmesa.AsString + '''' + ' and fecha=' + '''' + fdesde + ''''
    + ' order by trabajador,entrada_real');
  dm.qmovimientomesas.Open;

end;

procedure TBASE.dsqparcelas2DataChange(Sender: TObject; Field: TField);
begin
    if dmtr.qlotes.State in [dsedit,dsinsert] then
    begin
      if qparcelas2tiene_gg.AsInteger=1 then dmtr.qlotessgg.Value:=qparcelas2sello_gg.AsString else dmtr.qlotessgg.Value:='';
      if qparcelas2tiene_dop.AsInteger=1 then dmtr.qlotessdop.Value:=qparcelas2sello_dop.AsString else dmtr.qlotessdop.Value:='';
      if qparcelas2tiene_igp.AsInteger=1 then dmtr.qlotessigp.Value:=qparcelas2sello_igp.AsString else dmtr.qlotessigp.Value:='';
      if qparcelas2tiene_ifs.AsInteger=1 then dmtr.qlotessifs.Value:=qparcelas2sello_ifs.AsString else dmtr.qlotessifs.Value:='';
      if qparcelas2tiene_brc.AsInteger=1 then dmtr.qlotessbrc.Value:=qparcelas2sello_brc.AsString else dmtr.qlotessbrc.Value:='';
    end;
end;

procedure TBASE.dsqsocios2DataChange(Sender: TObject; Field: TField);
begin
  qparcelas2.Close;
  qparcelas2.Prepare;
  qparcelas2.ParamByName('PROPIETARIO').Asstring:=qsocios2id.Asstring;
  qparcelas2.Open;
{  qparcelas2.SQL.Clear;
  qparcelas2.SQL.Add
    ('select codpar,empresa,nombre,propietario,numero from parcelas where propietario='
    + qsocios2id.AsString + ' order by nombre');
  qparcelas2.Open;}
  if qparcelas2.RecordCount = 0 then
  begin
    qparcelas2.Close;
    qparcelas2.prepare;
    qparcelas2.parambyname('PROPIETARIO').AsString:='%';
   //   ('select codpar,empresa,nombre,propietario,numero from parcelas order by nombre');
    qparcelas2.Open;
  end;
end;

procedure TBASE.dsqtipohoraDataChange(Sender: TObject; Field: TField);
begin
  lprecio.Text := dm.qtipohorasprecio.AsString;
end;

procedure TBASE.dsqtrabajadoresDataChange(Sender: TObject; Field: TField);
var
  idt, filtrojornales, filtroanticipos: string;
begin
  if PDEmpleados.Visible then
  begin
    idt := qempleadosid.AsString;
    templeados.Locate('id', idt, [locaseinsensitive]);
    if (qempleados.RecordCount > 0) and (TabJornales.Visible) then
    begin
      // templeados.Open;
      Label46.Caption := qempleadosnombre.AsString;
      Label10.Caption := qempleadosnombre.AsString;
      filtrojornales := 'where idt=' + idt;
      if Tanyo.ItemIndex <> 0 then
        filtrojornales := filtrojornales + ' and year(fecha)=' + Tanyo.Text;
      if TMES.ItemIndex <> 0 then
        filtrojornales := filtrojornales + ' and month(fecha)=' +
          inttostr(TMES.ItemIndex);
      if TESTADO.ItemIndex <> 0 then
        filtrojornales := filtrojornales + ' and estado=' + TESTADO.Text;
      filtrojornales := filtrojornales + ' order by fecha desc';
      qjornales.Close;
      qjornales.SQL.Clear;
      qjornales.SQL.Add('select * from trabajo_diario ' + filtrojornales);
      qjornales.Open;
      filtroanticipos := 'where idt=' + idt;
      if tanyo2.ItemIndex <> 0 then
        filtroanticipos := filtroanticipos + ' and year(fecha)=' + tanyo2.Text;
      if tmes2.ItemIndex <> 0 then
        filtroanticipos := filtroanticipos + ' and month(fecha)=' +
          inttostr(tmes2.ItemIndex);
      if testado2.ItemIndex <> 0 then
        filtroanticipos := filtroanticipos + ' and estado=' + testado2.Text;
      filtroanticipos := filtroanticipos + ' order by fecha desc';
      dm.qanticipos.Close;
      dm.qanticipos.SQL.Clear;
      dm.qanticipos.SQL.Add('select * from anticipos ' + filtroanticipos);
      dm.qanticipos.Open;
    end;
  end;
end;

procedure TBASE.dstrabajadoresStateChange(Sender: TObject);
begin
  if templeados.State = dsbrowse then
  begin
    Panel164.Enabled := false;
    Panel7.Enabled := false;
    Panel6.Enabled := false;
    Button3.Enabled := true;
    Button4.Enabled := true;
    falta.Enabled := false;
    fbaja.Enabled := false;
    listagrupos.Enabled := false;
  end
  else
  begin
    Panel164.Enabled := true;
    Panel7.Enabled := true;
    Panel6.Enabled := true;
    Button3.Enabled := false;
    Button4.Enabled := false;
    falta.Enabled := true;
    fbaja.Enabled := true;
    listagrupos.Enabled := true;
  end;
end;

procedure TBASE.tbuscarlotesChange(Sender: TObject);
begin
  filtrolotes := '%' + tbuscarlotes.Text + '%';
  dmtr.qlotes.Close;
  dmtr.qlotes.Open;
end;

procedure TBASE.tbuscarnominasChange(Sender: TObject);
begin
  filtrotrabajadores := Trim(tbuscarnominas.Text);
  qempleados.Close;
  qempleados.Open;
end;

procedure TBASE.tbuscarparcelasChange(Sender: TObject);
begin
  filtroparcelas := '%' + tbuscarparcelas.Text + '%';
  dm.qparcelas.Close;
  dm.qparcelas.Open;
end;

procedure TBASE.EntradassalidasClick(Sender: TObject);
begin
  infmovimientos := Tinfmovimientos.Create(nil);
  try
    infmovimientos.ShowModal();
  finally
    infmovimientos.Free;
  end;
end;

procedure TBASE.Empleados2Click(Sender: TObject);
begin
  fempleados := Tfempleados.Create(nil);
  try
    fempleados.ShowModal();
  finally
    fempleados.Free;

  end;
end;

procedure TBASE.EntradasEnvasados1Click(Sender: TObject);
begin
    mostrarpesadas('');{
  fpesadas := Tfpesadas.Create(nil);
  try
    if fpesadas.qpesadas.Active = false then
    begin
    end;
    fpesadas.Edit1.Text := '';
    fpesadas.ShowModal;
  finally
    fpesadas.Free;
  end;                }
end;

procedure TBASE.EntradasMateriales1Click(Sender: TObject);
begin
  fentradas.Entradas := Tentradas.Create(nil);
  try
    fentradas.Entradas.ShowModal();
  finally
    fentradas.Entradas.Free;
  end;
end;

procedure TBASE.EnvasesAlmacen1Click(Sender: TObject);
begin
  envases_almacen := Tenvases_almacen.Create(nil);
  try
    envases_almacen.ShowModal();
  finally
    envases_almacen.Free;
  end;
end;

procedure TBASE.EPIS1Click(Sender: TObject);
begin
  epis := Tepis.Create(nil);
  try
    epis.ShowModal();
  finally
    epis.Free;
  end;

end;

procedure TBASE.Estadodestocks1Click(Sender: TObject);
begin
  consumosfito := Tconsumosfito.Create(nil);
  try
    consumosfito.ShowModal();
  finally
    consumosfito.Free;
  end;
end;

procedure TBASE.faltaCloseUp(Sender: TObject);
begin
  templeadosFECHAALTA.Value := falta.Date;
end;

procedure TBASE.fbajaCloseUp(Sender: TObject);
begin
  templeadosFECHABAJA.Value := fbaja.Date;
end;

procedure TBASE.ffinCloseUp(Sender: TObject);
begin
  if not(dm.qcampanyas.State in [dsedit, dsinsert]) then
    dm.qcampanyas.edit;
  dm.qcampanyasfechafin.Value := ffin.Date;
end;

procedure TBASE.finicioCloseUp(Sender: TObject);
begin
  if not(dm.qcampanyas.State in [dsedit, dsinsert]) then
    dm.qcampanyas.edit;
  dm.qcampanyasfechainicio.Value := finicio.Date;
end;

procedure TBASE.Formasdepago1Click(Sender: TObject);
begin
  fformaspago := Tfformaspago.Create(nil);
  try
    fformaspago.ShowModal;
  finally
    fformaspago.Free;
  end;
end;

procedure TBASE.Formatosdeimpresin1Click(Sender: TObject);
begin
  formularios := Tformularios.Create(nil);
  try
    formularios.ShowModal;
  finally
    formularios.Free;
  end;
end;

procedure TBASE.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  dm.qfinalizarlogin.prepare;
  dm.qfinalizarlogin.ParamByName('EMPRESA').AsInteger:=dm.vempresa;
  dm.qfinalizarlogin.ParamByName('IDUSUARIO').AsInteger:=dm.vidusuario;
  dm.qfinalizarlogin.ParamByName('IDLOGIN').AsInteger:=dm.vidlogin;
  dm.qfinalizarlogin.ExecSQL;
end;

procedure TBASE.FormCreate(Sender: TObject);
var
  i: Integer;
begin
  Application.OnMessage := AppMessage;
  gcrcheck.DataField := 'activo';
  gcrcheck.Visible := false;
  gcrcheck.SendToBack;
  gcrcheck.Color := DBGrid56.Color;
  gcrcheck.Caption := '';

  // explained later in the article
  gcrcheck.ValueChecked := '0';
  gcrcheck.ValueUnChecked := '1';

end;

procedure TBASE.FormKeyPress(Sender: TObject; var Key: Char);
var
  formatos: tformatsettings;
  punto: string;
begin
  formatos := TFormatSettings.Create;
  punto := formatos.DecimalSeparator;
  if punto = ',' then
  begin
    if (Key = '.') and (activecontrol is TDBEdit) then
    begin
      if (activecontrol as TDBEdit).Field.DataType
        in [ftFloat, ftCurrency, ftBCD, ftfmtbcd] then
        Key := ','
    end;
    if (Key = '.') and (activecontrol is TDBGrid) then
    begin
      Key := ','
    end;
    if (Key = '.') and (activecontrol is TEdit) then
    begin
      if (activecontrol as TEdit).name = 'thoras' then
        Key := ',';
      if (activecontrol as TEdit).name = 'edimporte' then
        Key := ',';
      if (activecontrol as TEdit).name = 'edjhoras' then
        Key := ',';
      if (activecontrol as TEdit).name = 'lprecio' then
        Key := ',';
      if (activecontrol as TEdit).name = 'edjprecio' then
        Key := ',';
      if (activecontrol as TEdit).name = 'limporteanticipos' then
        Key := ',';
    end;
  end;
  if (Key = #13) then
  begin
    Perform(WM_NextDLGCtl, 0, 0);
    Key := #0;
  end;

end;

procedure TBASE.FormShow(Sender: TObject);
begin
  login := Tlogin.Create(nil);
  try
    login.ShowModal();
  finally
    login.Free;
  end;

  if Application.Terminated then Exit;

  dm.DBagrigest.Disconnect;
  dm.tempresa.Open;
  Timer2.Interval := dm.tempresatavisostock.AsInteger * 60000;
  if tlimitado = '0' then
  begin
    tfechajornal.Date := Date;
    fechaanticipo.Date := Date;
  end;
  if tlimitado = '1' then
  begin
    tfechajornal.Date := Date;
    fechaanticipo.Date := Date;
    btproduccion.Visible := true;
    Btjornales.Visible := true;
    Btjornales.Caption := 'Partes de Trabajo';
    BtEmpleados.Visible := false;
    btempresa.Visible := false;
    btAgenda.Visible := false;
    btexpediciones.Visible := false;
    bttrazabilidad.Visible := false;
    Panel117.Visible := false;
  end;
  if tlimitado = '2' then
  begin
    tfechajornal.Date := Date;
    fechaanticipo.Date := Date;
    btproduccion.Visible := true;
    Btjornales.Visible := false;
    Btjornales.Caption := 'Partes de Trabajo';
    BtEmpleados.Visible := false;
    btempresa.Visible := true;
    btAgenda.Visible := false;
    btexpediciones.Visible := false;
    bttrazabilidad.Visible := true;
    Panel117.Visible := false;
    Menu.Items[3].Visible := false;
    Menu.Items[1].Visible := false;
  end;
  if tlimitado = '3' then
  begin
    pmenu.Visible:=false;
    Menu.Items[0].Visible := false;
    Menu.Items[1].Visible := false;
    Menu.Items[2].Visible := false;
    Menu.Items[3].Visible := false;
    Menu.Items[4].Visible := false;
    Menu.Items[5].Visible := false;
   // Menu.Items[6].Visible := false;
    Menu.Items[6].Items[0].Visible:=false;
    Menu.Items[6].Items[1].Visible:=false;
    Menu.Items[6].Items[2].Visible:=false;
    Menu.Items[6].Items[3].Visible:=false;
    Menu.Items[6].Items[4].Visible:=false;
    Menu.Items[6].Items[5].Visible:=false;
    Menu.Items[6].Items[6].Visible:=false;
    Menu.Items[7].Visible := false;
    Menu.Items[8].Visible := false;
    Menu.Items[9].Visible := false;
  end;
end;

procedure TBASE.fprodesdeChange(Sender: TObject);
var
  anyo, mes, dia: word;
  fdesde, fhasta: string;
begin
  { timer1.Enabled:=false;
    decodedate(fprodesde.Date,anyo,mes,dia);
    fdesde:=inttostr(anyo)+'-'+inttostr(mes)+'-'+inttostr(dia);
    decodedate(fprohasta.Date,anyo,mes,dia);
    fhasta:=inttostr(anyo)+'-'+inttostr(mes)+'-'+inttostr(dia);
    dm.qmesas.Close;
    dm.qmesas.SQL.Clear;
    dm.qmesas.SQL.Add('select distinct(mesa) from movimiento_mesas where fecha>='+''''+fdesde+''''+' and fecha<='+''''+fhasta+''''+' order by mesa');
    dm.qmesas.open;
    if pageproduccion.TabIndex=0 then
    begin
    end;
    if pageproduccion.TabIndex=1 then
    begin
    end;
    if pageproduccion.TabIndex=2 then
    begin
    end;
    if pageproduccion.TabIndex=6 then
    begin
    dm.qcontrolproduccion.Close;
    dm.qcontrolproduccion.sql.Clear;
    dm.qcontrolproduccion.sql.Add('select * from control_produccion where fecha>='+''''+fdesde+''''+' and fecha<='+''''+fhasta+'''');
    dm.qcontrolproduccion.open;
    end;


    dm.qproduccionmesa2.close;
    dm.qproduccionmesa2.sql.clear;
    dm.qproduccionmesa2.sql.Add('SELECT mesa,sum(cantidad) as cantidad,sum(horasmesa) as horasmesa,sum(cantidad)/sum(horasmesa) as cantidadhora FROM vista_produccionmesahora where fecha>='+''''+fdesde+''''+' and fecha<='+''''+fhasta+''''+' group by mesa order by mesa ' );
    dm.qproduccionmesa2.open;
    dm.qproduccionmesa.Close;
    dm.qproduccionmesa.sql.Clear;
    dm.qproduccionmesa.sql.Add('SELECT * FROM vista_produccionmesasdetalle where fecha>='+''''+fdesde+''''+' and fecha<='+''''+fhasta+'''');
    dm.qproduccionmesa.open;
    dm.qproduccion.Close;
    dm.qproduccion.sql.Clear;
    dm.qproduccion.sql.Add('select * from vista_produccion where fecha>='+''''+fdesde+''''+' and fecha<='+''''+fhasta+'''');
    dm.qproduccion.open;
    dm.qproduccionembasadora.Close;
    dm.qproduccionembasadora.sql.Clear;
    dm.qproduccionembasadora.sql.Add('SELECT mesa,bascula,producto,count(*) as pesadas,sum(peso_real-tara) as cantidad,idt,embasadora FROM produccion where fecha>='+''''+fdesde+''''+' and fecha<='+''''+fhasta+''''+' group by mesa,bascula,producto,idt order by fecha DESC,mesa,bascula');
    dm.qproduccionembasadora.open;
    dm.qproduccionhora.Close;
    dm.qproduccionhora.sql.Clear;
    dm.qproduccionhora.sql.Add('select hour(hora) as hora,sum(peso_real-tara) as cantidad from produccion where fecha>='+''''+fdesde+''''+' and fecha<='+''''+fhasta+''''+' group by hour(hora)');
    dm.qproduccionhora.open;


    timer1.Enabled:=true; }

end;

procedure TBASE.fprohastaChange(Sender: TObject);
var
  anyo, mes, dia: word;
  fdesde, fhasta: string;
begin
  { timer1.Enabled:=false;
    decodedate(fprodesde.Date,anyo,mes,dia);
    fdesde:=inttostr(anyo)+'-'+inttostr(mes)+'-'+inttostr(dia);
    decodedate(fprohasta.Date,anyo,mes,dia);
    fhasta:=inttostr(anyo)+'-'+inttostr(mes)+'-'+inttostr(dia);
    if pageproduccion.TabIndex=6 then
    begin
    dm.qcontrolproduccion.Close;
    dm.qcontrolproduccion.sql.Clear;
    dm.qcontrolproduccion.sql.Add('select * from control_produccion where fecha>='+''''+fdesde+''''+' and fecha<='+''''+fhasta+'''');
    dm.qcontrolproduccion.open;
    end;

    dm.qmesas.Close;
    dm.qmesas.SQL.Clear;
    dm.qmesas.SQL.Add('select distinct(mesa) from movimiento_mesas where fecha>='+''''+fdesde+''''+' and fecha<='+''''+fhasta+''''+' order by mesa');
    dm.qmesas.open;
    dm.qproduccionmesa2.close;
    dm.qproduccionmesa2.sql.clear;
    dm.qproduccionmesa2.sql.Add('select p.mesa,p.cantidad,h.horasmesa,p.cantidad/h.horasmesa as cantidadhora from (SELECT mesa,sum(peso_real-tara) as cantidad,idt,embasadora FROM produccion where fecha>='+''''+fdesde+''''+' and fecha<='+''''+fhasta+''''+' group by mesa order by mesa) as p ' );
    dm.qproduccionmesa2.sql.Add(' inner join ');
    dm.qproduccionmesa2.sql.Add(' (select mesa,sum(horas) as horasmesa from ( select mesa,sum(timestampdiff(minute,entrada_real,SALIDA_REAL)/60) as horas from movimiento_mesas where fecha>='+''''+fdesde+''''+' and fecha<='+''''+fhasta+''''+' and SALIDA_REAL is NOT null group by mesa ');
    dm.qproduccionmesa2.sql.Add(' union ');
    dm.qproduccionmesa2.sql.Add(' select mesa,sum(timestampdiff(minute,entrada_real,now())/60) as horas from movimiento_mesas where fecha>='+''''+fdesde+''''+' and fecha<='+''''+fhasta+''''+' and SALIDA_REAL is null group by mesa ) as grupo GROUP by mesa) as h');
    dm.qproduccionmesa2.SQL.Add(' on p.mesa=h.mesa');
    dm.qproduccionmesa2.open;
    dm.qproduccionmesa.Close;
    dm.qproduccionmesa.sql.Clear;
    dm.qproduccionmesa.sql.Add('SELECT * FROM vista_produccionmesasdetalle where fecha>='+''''+fdesde+''''+' and fecha<='+''''+fhasta+'''');
    dm.qproduccionmesa.open;
    dm.qproduccionembasadora.Close;
    dm.qproduccionembasadora.sql.Clear;
    dm.qproduccionembasadora.sql.Add('SELECT mesa,bascula,producto,count(*) as pesadas,sum(peso_real-tara) as cantidad,idt,embasadora FROM produccion where fecha>='+''''+fdesde+''''+' and fecha<='+''''+fhasta+''''+' group by mesa,bascula,producto,idt order by fecha DESC,mesa,bascula');
    dm.qproduccionembasadora.open;
    dm.qproduccionhora.Close;
    dm.qproduccionhora.sql.Clear;
    dm.qproduccionhora.sql.Add('select hour(hora) as hora,sum(peso_real-tara) as cantidad from produccion where fecha>='+''''+fdesde+''''+' and fecha<='+''''+fhasta+''''+' group by hour(hora)');
    dm.qproduccionhora.open;

    timer1.Enabled:=true;
  }
end;

procedure TBASE.Gruposdeempleados1Click(Sender: TObject);
begin
  grupostrabajadores := Tgrupostrabajadores.Create(nil);
  try
    grupostrabajadores.ShowModal();
  finally
    grupostrabajadores.Free;
  end;
end;

procedure TBASE.GruposFamilias1Click(Sender: TObject);
begin
  fgruposfamilias := Tfgruposfamilias.Create(nil);
  try
    fgruposfamilias.ShowModal();
  finally
    fgruposfamilias.Free;
  end;
end;

procedure TBASE.hdesdeCloseUp(Sender: TObject);
begin
  btprodaceptar.Click;
end;

procedure TBASE.hhastaCloseUp(Sender: TObject);
begin
  btprodaceptar.Click;
end;

procedure TBASE.imgfotoClick(Sender: TObject);
var
  nomarchivo: string;
begin
  { nomarchivo:=dmtr.documentosnomarchivo.asstring;
    ShellExecute(base.Handle,nil,PChar('c:\agrigest\tmp\'+nomarchivo),'','',SW_SHOWNORMAL); }
end;

procedure TBASE.Inventarios1Click(Sender: TObject);
begin
  controlstock := Tcontrolstock.Create(nil);
  try
    controlstock.ShowModal();
  finally
    controlstock.Free;
  end;
end;

procedure TBASE.Librosdecampo1Click(Sender: TObject);
begin
  cuadernos := Tcuadernos.Create(nil);
  try
    cuadernos.ShowModal();
  finally
    cuadernos.Free;
  end;
end;

procedure TBASE.TiposdeImpuestos1Click(Sender: TObject);
begin
  ftipos_impuestos := Tftipos_impuestos.Create(nil);
  try
    ftipos_impuestos.ShowModal;
  finally
    ftipos_impuestos.Free;
  end;
end;

procedure TBASE.listaanyosChange(Sender: TObject);
var
  dia, mes, anyo: word;
  bisiesto: Integer;
begin
  bisiesto := 0;

  dia := 1;
  if listameses.ItemIndex = 0 then
    mes := 1
  else
    mes := listameses.ItemIndex;
  if listaanyos.ItemIndex = 0 then
    anyo := 1900
  else
    anyo := StrToInt(listaanyos.Text);
  if listaanyos.ItemIndex <> 0 then
    if isleapyear(StrToInt(listaanyos.Text)) then
      bisiesto := 1;
  nomfechadesde.Date := encodedate(anyo, mes, dia);

  if (mes = 1) or (mes = 3) or (mes = 5) or (mes = 7) or (mes = 8) or (mes = 10)
    or (mes = 12) then
    dia := 31;
  if (mes = 4) or (mes = 6) or (mes = 9) or (mes = 11) then
    dia := 30;
  if (mes = 2) and (bisiesto = 1) then
    dia := 29;
  if (mes = 2) and (bisiesto = 0) then
    dia := 28;
  if listameses.ItemIndex = 0 then
    mes := 12
  else
    mes := listameses.ItemIndex;
  if listaanyos.ItemIndex = 0 then
    anyo := 2100
  else
    anyo := StrToInt(listaanyos.Text);
  nomfechahasta.Date := encodedate(anyo, mes, dia);
  btactualizarempleadosnominas.Click;
end;

procedure TBASE.listamesesChange(Sender: TObject);
var
  dia, mes, anyo: word;
  bisiesto: Integer;
begin
  bisiesto := 0;
  dia := 1;
  if listameses.ItemIndex = 0 then
    mes := 1
  else
    mes := listameses.ItemIndex;
  if listaanyos.ItemIndex = 0 then
    anyo := 1900
  else
    anyo := StrToInt(listaanyos.Text);
  if listaanyos.ItemIndex <> 0 then
    if isleapyear(StrToInt(listaanyos.Text)) then
      bisiesto := 1;
  nomfechadesde.Date := encodedate(anyo, mes, dia);

  if (mes = 1) or (mes = 3) or (mes = 5) or (mes = 7) or (mes = 8) or (mes = 10)
    or (mes = 12) then
    dia := 31;
  if (mes = 4) or (mes = 6) or (mes = 9) or (mes = 11) then
    dia := 30;
  if (mes = 2) and (bisiesto = 1) then
    dia := 29;
  if (mes = 2) and (bisiesto = 0) then
    dia := 28;
  if listameses.ItemIndex = 0 then
    mes := 12
  else
    mes := listameses.ItemIndex;
  if listaanyos.ItemIndex = 0 then
    anyo := 2100
  else
    anyo := StrToInt(listaanyos.Text);
  nomfechahasta.Date := encodedate(anyo, mes, dia);
  btactualizarempleadosnominas.Click;
end;

procedure TBASE.ljhoraCloseUp(Sender: TObject);
begin
  edjprecio.Text := dm.qtipohorasprecio.AsString;
end;

procedure TBASE.lprecioEnter(Sender: TObject);
begin
  if lprecio.Text = '' then
    lprecio.Text := '0';

end;

procedure TBASE.ltipohoraExit(Sender: TObject);
begin
  lprecio.Text := dm.qtipohorasprecio.AsString;
end;

procedure TBASE.Maquinria1Click(Sender: TObject);
begin
  vehiculos := Tvehiculos.Create(nil);
  try
    vehiculos.ShowModal;
  finally
    vehiculos.Free;
  end;
end;

procedure TBASE.Materiaprima1Click(Sender: TObject);
begin
  cc_materiasprimas := Tcc_materiasprimas.Create(nil);
  try
    cc_materiasprimas.ShowModal;
  finally
    cc_materiasprimas.Free;
  end;
end;

procedure TBASE.MateriasPrimas1Click(Sender: TObject);
begin
  genericas := Tgenericas.Create(nil);
  try
    genericas.ShowModal();
  finally
    genericas.Free;
  end;
end;

procedure TBASE.calendarionotasClick(Sender: TObject);
var
  anyo, mes, dia: word;
  vfecha, vanyo, vanyosig, vmes, vmessig, vdia: string;
begin
  decodedate(calendarionotas.Date, anyo, mes, dia);
  vanyo := floattostr(anyo);
  vanyosig := floattostr(anyo);
  vmes := floattostr(mes);
  vmessig := floattostr(mes + 1);
  vdia := floattostr(dia);
  if Length(vmes) = 1 then
    vmes := '0' + vmes;
  if Length(vmessig) = 1 then
    vmessig := '0' + vmessig;
  if vmessig = '13' then
  begin
    vmessig := '01';
    vanyosig := floattostr(anyo + 1);
  end;

  if Length(vdia) = 1 then
    vdia := '0' + vdia;
  vfecha := floattostr(anyo) + '-' + vmes + '-' + vdia;
  dm.tcalendario_laboral.Refresh;
  dm.tcalendario_laboral.Locate('fecha', vfecha, [locaseinsensitive]);
  dm.qaux1.Close;
  dm.qaux1.SQL.Clear;
  dm.qaux1.SQL.Add
    ('select count(*) from calendario_laboral where festivo=0 and fecha>=' +
    '''' + vanyo + '-' + vmes + '-01' + '''' + 'and fecha<' + '''' + vanyosig +
    '-' + vmessig + '-01' + '''');
  dm.qaux1.Open;
  Label80.Caption := 'Dias laborables del mes: ' + dm.qaux1.Fields[0].AsString;
end;

procedure TBASE.CalibresCalidades1Click(Sender: TObject);
begin
  fcalibrescalidad := Tfcalibrescalidad.Create(nil);
  try
    fcalibrescalidad.ShowModal();
  finally
    fcalibrescalidad.Free;
  end;
end;

procedure TBASE.Campaas1Click(Sender: TObject);
begin
  usuarios := Tusuarios.Create(nil);
  try
    usuarios.ShowModal;
  finally
    usuarios.Free;
  end;
end;

procedure TBASE.cbCertificadosDropDown(Sender: TObject);
var
  CertList: TList; // Usamos TList cl�sico, no TObjectList<>
  i: Integer;
  CertInfo: TCertificateInfo;
begin
  // Primero, limpiamos el ComboBox de cualquier certificado anterior
  for i := 0 to cbCertificados.Items.Count - 1 do
  begin
    // Liberamos el contexto del certificado que guardamos en el ComboBox
    CertFreeCertificateContext(PCCERT_CONTEXT(cbCertificados.Items.Objects[i]));
  end;
  cbCertificados.Clear;

  // �Llamamos a la funci�n del CertificateManager!
  // Esta nos devuelve un TList que S� es compatible con XE3
  CertList := TCertificateLoader.GetPersonalCertificates;
  try
    if CertList.Count = 0 then
    begin
      ShowMessage('No se encontraron certificados con clave privada.');
    end
    else
    begin
      // Llenamos el ComboBox usando un bucle FOR cl�sico
      for i := 0 to CertList.Count - 1 do
      begin
        CertInfo := TCertificateInfo(CertList[i]);
        // Guardamos el nombre y el puntero al contexto del certificado
        cbCertificados.Items.AddObject(CertInfo.FriendlyName, CertInfo.Context);
      end;
      cbCertificados.ItemIndex := 0;
    end;
  finally
    // �MUY IMPORTANTE!
    // Liberamos la lista y TODOS los objetos TCertificateInfo que contiene.
    // Los "Context" ya est�n a salvo en el ComboBox.
    while CertList.Count > 0 do
    begin
      TCertificateInfo(CertList[0]).Free;
      CertList.Delete(0);
    end;
    CertList.Free;
  end;
end;

procedure TBASE.CheckBox10Click(Sender: TObject);
begin
  if CheckBox10.Checked then
  begin
    dm.qaux1.Close;
    dm.qaux1.SQL.Clear;
    dm.qaux1.SQL.Add('update trabajadores set seleccionado=1');
    dm.qaux1.ExecSQL;
    dm.qtipohoras2.Refresh;
  end
  else
  begin
    dm.qaux1.Close;
    dm.qaux1.SQL.Clear;
    dm.qaux1.SQL.Add('update trabajadores set seleccionado=0');
    dm.qaux1.ExecSQL;
    dm.qtrabajadores2.Refresh;

  end;
end;

procedure TBASE.CheckBox11Click(Sender: TObject);
begin
  if CheckBox11.Checked then
  begin
    dm.qaux1.Close;
    dm.qaux1.SQL.Clear;
    dm.qaux1.SQL.Add('update prenominas set correcto=1');
    dm.qaux1.ExecSQL;
    dm.tprenominas.Refresh;
  end
  else
  begin
    dm.qaux1.Close;
    dm.qaux1.SQL.Clear;
    dm.qaux1.SQL.Add('update prenominas set correcto=0');
    dm.qaux1.ExecSQL;
    dm.tprenominas.Refresh;

  end;
end;

procedure TBASE.CheckBox12Click(Sender: TObject);
begin
  if CheckBox12.Checked then
  begin
    dm.qaux1.Close;
    dm.qaux1.SQL.Clear;
    dm.qaux1.SQL.Add('update parcelas set seleccionado=1');
    dm.qaux1.ExecSQL;
    dm.qparcela2.Refresh;
  end
  else
  begin
    dm.qaux1.Close;
    dm.qaux1.SQL.Clear;
    dm.qaux1.SQL.Add('update parcelas set seleccionado=0');
    dm.qaux1.ExecSQL;
    dm.qparcela2.Refresh;

  end;
end;

procedure TBASE.checktodos2Click(Sender: TObject);
var
  selectqempleados: string;
begin
  selectqempleados := qempleados.SQL.Text;
  if checktodos2.Checked then
  begin
    qaux.SQL.Clear;
    qaux.SQL.Add
      ('update trabajadores set seleccionado=1 where id in (select id from (' +
      selectqempleados + ') as emp)');
    qaux.ExecSQL;
  end
  else
  begin
    qaux.SQL.Clear;
    qaux.SQL.Add
      ('update trabajadores set seleccionado=0 where id in (select id from (' +
      selectqempleados + ') as emp)');
    qaux.ExecSQL;

  end;
  qempleados.Close;
  qempleados.Open;
end;

procedure TBASE.CheckBox1Click(Sender: TObject);
begin
  if CheckBox2.Checked then
    CheckBox2.Checked := false
  else
    CheckBox2.Checked := true;
  if CheckBox3.Checked then
    CheckBox3.Checked := false
  else
    CheckBox3.Checked := true;
  if CheckBox4.Checked then
    CheckBox4.Checked := false
  else
    CheckBox4.Checked := true;
  if CheckBox5.Checked then
    CheckBox5.Checked := false
  else
    CheckBox5.Checked := true;
  if CheckBox6.Checked then
    CheckBox6.Checked := false
  else
    CheckBox6.Checked := true;

end;

procedure TBASE.CheckBox7Click(Sender: TObject);
begin
  if CheckBox7.Checked then
  begin
    dm.qaux1.Close;
    dm.qaux1.SQL.Clear;
    dm.qaux1.SQL.Add('update articulos set seleccionado=1');
    dm.qaux1.ExecSQL;
    dm.qtipohoras2.Refresh;
  end
  else
  begin
    dm.qaux1.Close;
    dm.qaux1.SQL.Clear;
    dm.qaux1.SQL.Add('update articulos set seleccionado=0');
    dm.qaux1.ExecSQL;
    dm.qtipohoras2.Refresh;

  end;
end;

procedure TBASE.CheckBox8Click(Sender: TObject);
begin
  if CheckBox8.Checked then
  begin
    dm.qaux1.Close;
    dm.qaux1.SQL.Clear;
    dm.qaux1.SQL.Add('update trabajadores set seleccionado=1');
    dm.qaux1.ExecSQL;
    dm.qtipohoras2.Refresh;
  end
  else
  begin
    dm.qaux1.Close;
    dm.qaux1.SQL.Clear;
    dm.qaux1.SQL.Add('update trabajadores set seleccionado=0');
    dm.qaux1.ExecSQL;
    dm.qtrabajadores2.Refresh;

  end;
end;

procedure TBASE.CheckBox9Click(Sender: TObject);
begin
  if CheckBox9.Checked then
  begin
    dm.qaux1.Close;
    dm.qaux1.SQL.Clear;
    dm.qaux1.SQL.Add('update tipo_trabajo set seleccionado=1');
    dm.qaux1.ExecSQL;
    dm.qtipotrabajo2.Refresh;
  end
  else
  begin
    dm.qaux1.Close;
    dm.qaux1.SQL.Clear;
    dm.qaux1.SQL.Add('update tipo_trabajo set seleccionado=0');
    dm.qaux1.ExecSQL;
    dm.qtipotrabajo2.Refresh;

  end;
end;

procedure TBASE.checktodosClick(Sender: TObject);
var
  selectqempleados: string;
begin
  selectqempleados := qempleados.SQL.Text;
  if checktodos.Checked then
  begin
    qaux.SQL.Clear;
    qaux.SQL.Add
      ('update trabajadores set seleccionado=1 where id in (select id from (' +
      selectqempleados + ') as emp)');
    qaux.ExecSQL;
  end
  else
  begin
    qaux.SQL.Clear;
    qaux.SQL.Add
      ('update trabajadores set seleccionado=0 where id in (select id from (' +
      selectqempleados + ') as emp)');
    qaux.ExecSQL;

  end;
  qempleados.Close;
  qempleados.Open;
end;

procedure TBASE.chktodashorasClick(Sender: TObject);
begin
  if chktodashoras.Checked then
  begin
    dm.qtipohoras.Close;
    dm.qtipohoras.SQL.Clear;
    dm.qtipohoras.SQL.Add('select * from articulos order by codart');
    dm.qtipohoras.Open;
  end
  else
  begin
    dm.qtipohoras.Close;
    dm.qtipohoras.SQL.Clear;
    dm.qtipohoras.SQL.Add
      ('select * from articulos where activo=1 order by codart');
    dm.qtipohoras.Open;

  end;
end;

procedure TBASE.chktodasmateriasprimasClick(Sender: TObject);
begin
  if chktodasmateriasprimas.Checked then
  begin
    dm.qmateriasprimas.Close;
    dm.qmateriasprimas.SQL.Clear;
    dm.qmateriasprimas.SQL.Add('select * from materias_primas order by id');
    dm.qmateriasprimas.Open;
  end
  else
  begin
    dm.qmateriasprimas.Close;
    dm.qmateriasprimas.SQL.Clear;
    dm.qmateriasprimas.SQL.Add
      ('select * from materias_primas where activo=1 order by id');
    dm.qmateriasprimas.Open;

  end;
end;

procedure TBASE.chktodosalmacenesClick(Sender: TObject);
begin
  if chktodosalmacenes.Checked then
  begin
    dm.qalmacenes.Close;
    dm.qalmacenes.SQL.Clear;
    dm.qalmacenes.SQL.Add('select * from almacenes order by nombre');
    dm.qalmacenes.Open;
  end
  else
  begin
    dm.qalmacenes.Close;
    dm.qalmacenes.SQL.Clear;
    dm.qalmacenes.SQL.Add
      ('select * from almacenes where activo=1 order by nombre');
    dm.qalmacenes.Open;

  end;
end;

procedure TBASE.chktodoscentroscosteClick(Sender: TObject);
begin
  if chktodoscentroscoste.Checked then
  begin
    dm.qparcelas.Close;
    dm.qparcelas.SQL.Clear;
    dm.qparcelas.SQL.Add('select * from parcelas order by nombre');
    dm.qparcelas.Open;
  end
  else
  begin
    dm.qparcelas.Close;
    dm.qparcelas.SQL.Clear;
    dm.qparcelas.SQL.Add
      ('select * from parcelas where activo=1 order by nombre');
    dm.qparcelas.Open;
  end;
end;

procedure TBASE.chktodosempleadosClick(Sender: TObject);
begin
  qempleados.Close;
  qempleados.Open;
end;

procedure TBASE.chktodosenvasesalmacenClick(Sender: TObject);
begin
  { if chktodosenvasesalmacen.Checked then
    begin
    dm.qarticulosalmacen.Close;
    dm.qarticulosalmacen.SQL.Clear;
    dm.qarticulosalmacen.SQL.Add('select * from articulos_almacen order by codigo');
    dm.qarticulosalmacen.Open;
    end else
    begin
    dm.qarticulosalmacen.Close;
    dm.qarticulosalmacen.SQL.Clear;
    dm.qarticulosalmacen.SQL.Add('select * from articulos_almacen where activo=1 order by codigo');
    dm.qarticulosalmacen.Open;

    end; }
end;

procedure TBASE.chktodosproductosClick(Sender: TObject);
begin
  if chktodosproductos.Checked then
  begin
    dm.qproductos.Close;
    dm.qproductos.SQL.Clear;
    dm.qproductos.SQL.Add('select * from productos order by descripcion');
    dm.qproductos.Open;
  end
  else
  begin
    dm.qproductos.Close;
    dm.qproductos.SQL.Clear;
    dm.qproductos.SQL.Add
      ('select * from productos where activo=1 order by descripcion');
    dm.qproductos.Open;

  end;
end;

procedure TBASE.chktodostrabajosalmacenClick(Sender: TObject);
begin
  if chktodostrabajosalmacen.Checked then
  begin
    dm.qtrabajosalmacen.Close;
    dm.qtrabajosalmacen.SQL.Clear;
    dm.qtrabajosalmacen.SQL.Add('select * from trabajos_almacen order by id');
    dm.qtrabajosalmacen.Open;
  end
  else
  begin
    dm.qtrabajosalmacen.Close;
    dm.qtrabajosalmacen.SQL.Clear;
    dm.qtrabajosalmacen.SQL.Add
      ('select * from trabajos_almacen where activo=1 order by id');
    dm.qtrabajosalmacen.Open;

  end;
end;

procedure TBASE.chktodostrabajosClick(Sender: TObject);
begin
  if chktodostrabajos.Checked then
  begin
    dm.qtrabajos.Close;
    dm.qtrabajos.SQL.Clear;
    dm.qtrabajos.SQL.Add('select * from tipo_trabajo order by id');
    dm.qtrabajos.Open;
  end
  else
  begin
    dm.qtrabajos.Close;
    dm.qtrabajos.SQL.Clear;
    dm.qtrabajos.SQL.Add
      ('select * from tipo_trabajo where activo=1 order by id');
    dm.qtrabajos.Open;

  end;
end;

procedure TBASE.Clientes1Click(Sender: TObject);
begin
  clientes := Tclientes.Create(nil);
  try
    clientes.ShowModal();
  finally
    clientes.Free;
  end;
end;

procedure TBASE.comboprodmesasCloseUp(Sender: TObject);
begin
  btprodaceptar.Click;
end;

procedure TBASE.comboprodmprimasCloseUp(Sender: TObject);
begin
  btprodaceptar.Click;
end;

procedure TBASE.comboprodproductoCloseUp(Sender: TObject);
begin
  btprodaceptar.Click;
end;

procedure TBASE.Compras1Click(Sender: TObject);
begin
  impentradas := Timpentradas.Create(nil);
  try
    impentradas.ShowModal();
  finally
    impentradas.Free;
  end;
end;

procedure TBASE.Comprobararticulosconstockbajo1Click(Sender: TObject);
begin
  controlminimos := Tcontrolminimos.Create(nil);
  try
    controlminimos.ShowModal();
  finally
    controlminimos.Free;
  end;
end;

procedure TBASE.CondicionesMeteorolgicas1Click(Sender: TObject);
begin
  meteorologia := Tmeteorologia.Create(nil);
  try
    meteorologia.vempresa:=dm.tempresaid.AsInteger;
    meteorologia.ShowModal();
  finally
    meteorologia.Free;
  end;
end;

procedure TBASE.ConectarconSistemPin1Click(Sender: TObject);
begin
  importardesdepresenciapin := Timportardesdepresenciapin.Create(nil);
  try
    importardesdepresenciapin.ShowModal();
  finally
    importardesdepresenciapin.Free;
  end;
end;

procedure TBASE.ConfiguracinAlmacen1Click(Sender: TObject);
begin
  configuracionalmacen := Tconfiguracionalmacen.Create(nil);
  try
    configuracionalmacen.ShowModal();
  finally
    configuracionalmacen.Free;
  end;
end;

procedure TBASE.Consumosdefitosanitarios1Click(Sender: TObject);
begin
  consumosfitoparcelas := Tconsumosfitoparcelas.Create(nil);
  try
    consumosfitoparcelas.ShowModal();
  finally
    consumosfitoparcelas.Free;
  end;

end;

procedure TBASE.Consumosdemateriales1Click(Sender: TObject);
begin
  insumos := Tinsumos.Create(nil);
  try
    insumos.ShowModal();
  finally
    insumos.Free;
  end;
end;

procedure TBASE.Consumosygastos2Click(Sender: TObject);
begin
  consumos_gastos := Tconsumos_gastos.Create(nil);
  try
    consumos_gastos.ShowModal();
  finally
    consumos_gastos.Free;
  end;
end;

procedure TBASE.Controladoresdecalidad1Click(Sender: TObject);
begin
  cc_controlproducto := Tcc_controlproducto.Create(nil);
  try
    cc_controlproducto.ShowModal;
  finally
    cc_controlproducto.Free;
  end;
end;

procedure TBASE.Controlcmarasfrigorificas1Click(Sender: TObject);
begin
  cc_camaras := Tcc_camaras.Create(nil);
  try
    cc_camaras.ShowModal;
  finally
    cc_camaras.Free;
  end;
end;

procedure TBASE.Controldebsculas1Click(Sender: TObject);
begin
  cc_basculas := Tcc_basculas.Create(nil);
  try
    cc_basculas.ShowModal;
  finally
    cc_basculas.Free;
  end;
end;

procedure TBASE.ControldeProduccindeAlmacen1Click(Sender: TObject);
begin
  controlproduccion := Tcontrolproduccion.Create(nil);
  try
    controlproduccion.ShowModal();
  finally
    controlproduccion.Free;
  end;
end;

procedure TBASE.Controldeutensilios1Click(Sender: TObject);
begin
  cc_utensilios := Tcc_utensilios.Create(nil);
  try
    cc_utensilios.ShowModal;
  finally
    cc_utensilios.Free;
  end;
end;

procedure TBASE.Controlhorario1Click(Sender: TObject);
begin
  ticados := Tticados.Create(nil);
  try
    ticados.ShowModal();
//    ticados.Show();
//    ticados.SetFocus;
  finally
    ticados.Free;
  end;
end;

procedure TBASE.CuentasBancarias1Click(Sender: TObject);
begin
  fcuentas_bancarias := Tfcuentas_bancarias.Create(nil);
  try
    fcuentas_bancarias.ShowModal;
  finally
    fcuentas_bancarias.Free;
  end;
end;

procedure TBASE.CursosyDocumentos1Click(Sender: TObject);
begin
  fCursosDocumentos := TfCursosDocumentos.Create(nil);
  try
    fCursosDocumentos.ShowModal;
  finally
    fCursosDocumentos.Free;
  end;
end;

procedure TBASE.PageControl2Change(Sender: TObject);
begin
  if PageControl2.TabIndex = 2 then
  begin
    cdesde.Date := dmestadisticas.qcampanyasfechainicio.AsDateTime;
    chasta.Date := dmestadisticas.qcampanyasfechafin.AsDateTime;
  end;

end;

procedure TBASE.PageDatosEmpresaChange(Sender: TObject);
begin
  case PageDatosEmpresa.TabIndex of
    0: // Datos Generales
      begin
        if not dm.tempresa.Active then
          dm.tempresa.Open;
      end;
    1: // Productos Acabados
      begin
        if not dm.qproductos.Active then
          dm.qproductos.Open;
        if not dm.tproductos.Active then
          dm.tproductos.Open;
      end;
    2: // Materias Primas
      begin
        if not dm.qmateriasprimas.Active then
          dm.qmateriasprimas.Open;
        if not dm.tmateriasprimas.Active then
          dm.tmateriasprimas.Open;
        if not dm.qmateriasprimas2.Active then
          dm.qmateriasprimas2.Open;
        if not dm.qmprimascompuestas.Active then
          dm.qmprimascompuestas.Open;
        if not dm.qgenericas.Active then
          dm.qgenericas.Open;
      end;
    3: // Tipo de Horas
      begin
        if not dm.qtipohoras.Active then
          dm.qtipohoras.Open;
        if not dm.ttipohoras.Active then
          dm.ttipohoras.Open;
      end;
    4: // Tipos de Trabajos
      begin
        if not dm.qtrabajos.Active then
          dm.qtrabajos.Open;
        if not dm.ttipotrabajo.Active then
          dm.ttipotrabajo.Open;
        if not dm.qalmacenesaux.Active then
          dm.qalmacenesaux.Open;
      end;
    5: // Trabajos de Almacen
      begin
        if not dm.qtrabajosalmacen.Active then
          dm.qtrabajosalmacen.Open;
        if not dm.ttrabajosalmacen.Active then
          dm.ttrabajosalmacen.Open;
        if not dm.qtipohoras.Active then
          dm.qtipohoras.Open;
        if not dm.qtrabajos.Active then
          dm.qtrabajos.Open;
        if not dm.qparcelas.Active then
          dm.qparcelas.Open;
      end;
    6: // Centros de Coste (Parcelas)
      begin
        if not dm.qparcelas.Active then
          dm.qparcelas.Open;
        if not dm.tmateriasprimas.Active then
          dm.tmateriasprimas.Open;
        if not qsocios2.Active then
          qsocios2.Open;
      end;
    7: // Campañas
      begin
        if not dm.qcampanyas.Active then
          dm.qcampanyas.Open;
        if not dm.qcampanyas_aux.Active then
          dm.qcampanyas_aux.Open;
        if not dm.qcampanyasparcela.Active then
          dm.qcampanyasparcela.Open;
        if not dm.qlincampanyas.Active then
          dm.qlincampanyas.Open;
      end;
    8: // Almacenes
      begin
        if not dm.qalmacenes.Active then
          dm.qalmacenes.Open;
        if not dm.talmacenes.Active then
          dm.talmacenes.Open;
        if not dm.qalmacenesaux.Active then
          dm.qalmacenesaux.Open;
        if not dm.ttipotrabajo.Active then
          dm.ttipotrabajo.Open;
        if not dm.qparcelas.Active then
          dm.qparcelas.Open;
      end;
  end;
end;

procedure TBASE.PagedatosChange(Sender: TObject);
begin
  case Pagedatos.TabIndex of
    0, 1, 4:
      begin
        if not dm.tempresa.Active then
          dm.tempresa.Open;
      end;
    2: // Otros Datos
      begin
        if not qfamilias.Active then
          qfamilias.Open;
        if not qarticulocomision.Active then
          qarticulocomision.Open;
        if not qarticulotransporte.Active then
          qarticulotransporte.Open;
        if not qarticulosotros.Active then
          qarticulosotros.Open;
      end;
    3: // Series Numéricas
      begin
        if not dm.qseries.Active then
          dm.qseries.Open;
      end;
  end;
end;

procedure TBASE.PageDatosEmpresaEnter(Sender: TObject);
begin
  if PageDatosEmpresa.TabIndex = 0 then
  begin
    Pagedatos.ActivePageIndex := 0;
  end;
end;

procedure TBASE.PageNominasChange(Sender: TObject);
var
  fdesde, fhasta, filtro, filtro2, filtro3: string;
  anyo, mes, dia: word;
begin
  if PageNominas.TabIndex = 6 then
  begin
    // decodedate(date,anyo,mes,dia);
    // nomfechahasta.Date:=date;
    // PTfecha_desde.Date:=date-30;//ssstttrtodate('01/01/'+floattostr(anyo));
    // dm.TFirmas.Open;

    dm.qpartes_diarios.Open;
    dm.qFirmas2.SQL.Clear;
    dm.qFirmas2.SQL.Add('select * from firmas where id=-1');
    dm.qFirmas2.Open;
    // dm.qfirmas.Close;
    // dm.qfirmas.MasterSource:=dm.dspartes_diarios;
    // dm.qfirmas.Open;
  end;
  if PageNominas.TabIndex = 4 then
  begin
    dm.qparcela2.Open;
  end;

  if PageNominas.TabIndex = 5 then
  begin

    filtro := '';
    filtro2 := '';
    filtro3 := '';
    decodedate(nomlttdesde.Date, anyo, mes, dia);
    fdesde := floattostr(anyo) + '-' + floattostr(mes) + '-' + floattostr(dia);
    filtro := ' where id in (select distinct(typework) from trabajo_diario where fecha>='
      + '''' + fdesde + '''';
    filtro2 :=
      ' where id in (select distinct(idt) from trabajo_diario td,tipo_trabajo a where td.typework=a.id and a.seleccionado=1 and fecha>='
      + '''' + fdesde + '''';
    filtro3 :=
      ' where td.idt=t.id and td.typework=a.id and a.seleccionado=1 and t.seleccionado=1 and fecha>='
      + '''' + fdesde + '''';
    decodedate(nomltthasta.Date, anyo, mes, dia);
    fhasta := floattostr(anyo) + '-' + floattostr(mes) + '-' + floattostr(dia);
    filtro := filtro + ' and fecha<=' + '''' + fhasta + '''';
    filtro := filtro + ') order by id';
    filtro2 := filtro2 + ' and fecha<=' + '''' + fhasta + '''';
    filtro2 := filtro2 + ') order by nombre';
    filtro3 := filtro3 + ' and fecha<=' + '''' + fhasta + '''';
    filtro3 := filtro3 +
      ' group by idt,trabajador,typework order by typework,trabajador';
    dm.qparcela2.Close;
    dm.qparcela2.SQL.Clear;
    dm.qparcela2.SQL.Add('select * from parcelas order by codpar');
    dm.qparcela2.Open;
    dm.qtipotrabajo2.Close;
    dm.qtipotrabajo2.SQL.Clear;
    dm.qtipotrabajo2.SQL.Add('select id,seleccionado from tipo_trabajo '
      + filtro);
    dm.qtipotrabajo2.Open;
    dm.qtrabajadores3.Close;
    dm.qtrabajadores3.SQL.Clear;
    dm.qtrabajadores3.SQL.Add('select id,nombre,seleccionado from trabajadores '
      + filtro2);
    dm.qtrabajadores3.Open;
    dm.qlistadotrabajos.Close;
    dm.qlistadotrabajos.SQL.Clear;
    dm.qlistadotrabajos.SQL.Add
      ('select idt,trabajador,typework,sum(qhoras) as horas,sum(qhoras*td.precio) as total from trabajo_diario td,tipo_trabajo a,trabajadores t '
      + filtro3);
    dm.qlistadotrabajos.Open;
  end;

  if PageNominas.TabIndex = 4 then
  begin
    filtro := '';
    filtro2 := '';
    filtro3 := '';
    decodedate(nomlhdesde.Date, anyo, mes, dia);
    fdesde := floattostr(anyo) + '-' + floattostr(mes) + '-' + floattostr(dia);
    filtro := ' where codart in (select distinct(articulo) from trabajo_diario where fecha>='
      + '''' + fdesde + '''';
    filtro2 :=
      ' where id in (select distinct(idt) from trabajo_diario td,articulos a where td.articulo=a.codart and a.seleccionado=1 and fecha>='
      + '''' + fdesde + '''';
    filtro3 :=
      ' where td.idt=t.id and td.articulo=a.codart and a.seleccionado=1 and t.seleccionado=1 and fecha>='
      + '''' + fdesde + '''';
    decodedate(nomlhhasta.Date, anyo, mes, dia);
    fhasta := floattostr(anyo) + '-' + floattostr(mes) + '-' + floattostr(dia);
    filtro := filtro + ' and fecha<=' + '''' + fhasta + '''';
    filtro := filtro + ') order by codart';
    filtro2 := filtro2 + ' and fecha<=' + '''' + fhasta + '''';
    filtro2 := filtro2 + ') order by nombre';
    filtro3 := filtro3 + ' and fecha<=' + '''' + fhasta + '''';
    filtro3 := filtro3 +
      ' group by idt,trabajador,articulo order by articulo,trabajador';
    dm.qtipohoras2.Close;
    dm.qtipohoras2.SQL.Clear;
    dm.qtipohoras2.SQL.Add('select codart,seleccionado from articulos '
      + filtro);
    dm.qtipohoras2.Open;
    dm.qtrabajadores2.Close;
    dm.qtrabajadores2.SQL.Clear;
    dm.qtrabajadores2.SQL.Add('select id,nombre,seleccionado from trabajadores '
      + filtro2);
    dm.qtrabajadores2.Open;
    dm.qlistadohoras.Close;
    dm.qlistadohoras.SQL.Clear;
    dm.qlistadohoras.SQL.Add
      ('select idt,trabajador,articulo,sum(qhoras) as horas,sum(qhoras*a.equivalenciahoras) as horas2,sum(qhoras*td.precio) as total,sum((qhoras/a.equivalenciahoras)*td.precio) as total2 from trabajo_diario td,articulos a,trabajadores t '
      + filtro3);
    dm.qlistadohoras.Open;
  end;

end;

procedure TBASE.PageproduccionChange(Sender: TObject);
var
  anyo, mes, dia: word;
  fdesde, fhasta, ffecha, vmesa, vmprima, vproducto: string;
begin
  decodedate(fprodesde.Date, anyo, mes, dia);
  fdesde := inttostr(anyo) + '-' + inttostr(mes) + '-' + inttostr(dia);
  // decodedate(fprohasta.Date, anyo, mes, dia);
  // fhasta := inttostr(anyo) + '-' + inttostr(mes) + '-' + inttostr(dia);

  if Pageproduccion.TabIndex = 0 then
  begin

    Panel49.Visible := true;
    Timer1.Enabled := false;
    dm.qmesas.Close;
    dm.qmesas.SQL.Clear;
    dm.qmesas.SQL.Add('select distinct(mesa) from movimiento_mesas where fecha='
      + '''' + fdesde + '''' + ' order by mesa');
    dm.qmesas.Open;

    dm.qmovimientomesas.Close;
    dm.qmovimientomesas.SQL.Clear;
    dm.qmovimientomesas.SQL.Add('select * from movimiento_mesas where fecha=' +
      '''' + fdesde + '''' + ' order by trabajador,entrada_real');
    dm.qmovimientomesas.Open;
  end;
  if Pageproduccion.TabIndex = 1 then
  begin
    Timer1.Enabled := false;
    Panel49.Visible := true;
    tjornales.Open;
    dm.qmesas.Close;
    dm.qmesas.SQL.Clear;
    dm.qmesas.SQL.Add('select distinct(mesa) from movimiento_mesas where fecha='
      + '''' + fdesde + '''' + 'order by mesa');
    dm.qmesas.Open;
    dm.qnominasproduccion.Close;
    dm.qnominasproduccion.SQL.Clear;
    dm.qnominasproduccion.SQL.Add('select * from trabajo_diario where fecha=' +
      '''' + fdesde + '''' + ' and idt in (');
    dm.qnominasproduccion.SQL.Add('select idt from movimiento_mesas where mesa='
      + '''' + dm.qmesasmesa.AsString + '''' + ' and fecha=' + '''' + fdesde +
      '''' + ') order by idt');
    dm.qnominasproduccion.Open;
    {
      dm.qnominasproduccion.Close;
      dm.qnominasproduccion.sql.Clear;
      dm.qnominasproduccion.sql.Add('select td.idt,td.fecha,td.id,td.trabajador,td.typework,td.articulo,qhoras,estado,origen  from trabajo_diario td, movimiento_mesas mm where td.fecha>='+''''+fdesde+''''+' and td.fecha<='+''''+fhasta+''''+' and td.idt=mm.idt');
      dm.qnominasproduccion.sql.Add(' and mm.fecha>='+''''+fdesde+''''+' and mm.fecha<='+''''+fhasta+''''+' and mm.trabajador=td.trabajador  order by idt');
      dm.qnominasproduccion.open; }
  end;
  if Pageproduccion.TabIndex = 2 then
  begin

    Panel49.Visible := true;
    Timer1.Enabled := false;
    dm.qmesas.Close;
    dm.qmesas.SQL.Clear;
    dm.qmesas.SQL.Add('select distinct(mesa) from movimiento_mesas where fecha='
      + '''' + fdesde + '''' + ' order by mesa');
    dm.qmesas.Open;

    dm.qpersonasmesas.Close;
    dm.qpersonasmesas.SQL.Clear;
    dm.qpersonasmesas.SQL.Add
      ('select distinct(idt),trabajador,mesa from movimiento_mesas where fecha='
      + '''' + fdesde + '''' + ' order by trabajador');
    dm.qpersonasmesas.Open;
    dm.qpartes_diarios2.Open;
    dm.qpartes_diarios.Open;
    dm.qFirmas2.SQL.Clear;
    dm.qFirmas2.SQL.Add('select * from firmas where id=-1');
    dm.qFirmas2.Open;
    // dm.qfirmas.Close;
    // dm.qfirmas.MasterSource:=dm.dsqpartesdiarios2;
    // dm.qfirmas.Open;
  end;
  if Pageproduccion.TabIndex = 3 then
  begin

    Panel49.Visible := false;
    Timer1.Enabled := true;
    dm.qproduccion.Close;
    dm.qproduccion.prepare;
    dm.qproduccion.ParamByName('fecha').AsDate:=fprodesde.Date;
    dm.qproduccion.Open;

  end;
  if Pageproduccion.TabIndex = 4 then
  begin
    Timer1.Enabled := true;
    Panel49.Visible := false;
    dm.qproduccionmesa2.Close;

    dm.qproduccionmesa2.Prepare;
    dm.qproduccionmesa2.ParamByName('FECHA').AsDate:=strtodate('01/01/1900');//fprodesde.Date;
    {
    dm.qproduccionmesa2.SQL.Clear;
    dm.qproduccionmesa2.SQL.Add
      ('select p.mesa,p.cantidad,h.horasmesa,p.cantidad/h.horasmesa as cantidadhora from (SELECT mesa,sum(peso_real-tara) as cantidad,idt,embasadora FROM produccion where fecha='
      + '''' + fdesde + '''' + ' group by mesa order by mesa) as p ');
    dm.qproduccionmesa2.SQL.Add(' inner join ');
    dm.qproduccionmesa2.SQL.Add
      (' (select mesa,sum(horas) as horasmesa from ( select mesa,sum(timestampdiff(minute,entrada_real,SALIDA_REAL)/60) as horas from movimiento_mesas where fecha='
      + '''' + fdesde + '''' + ' and SALIDA_REAL is NOT null group by mesa ');
    dm.qproduccionmesa2.SQL.Add(' union ALL ');
    dm.qproduccionmesa2.SQL.Add
      (' select mesa,sum(timestampdiff(minute,entrada_real,now())/60) as horas from movimiento_mesas where fecha='
      + '''' + fdesde + '''' + ' and SALIDA_REAL is null group by mesa ) as grupo GROUP by mesa) as h');
    dm.qproduccionmesa2.SQL.Add(' on p.mesa=h.mesa');}
    dm.qproduccionmesa2.Open;
    dm.qproduccionmesa2.Prepare;
    dm.qproduccionmesa2.ParamByName('FECHA').AsDate:=fprodesde.Date;
    dm.qproduccionmesa2.Refresh;

  end;
  if Pageproduccion.TabIndex = 5 then
  begin
    Timer1.Enabled := true;
    Panel49.Visible := false;

    qproduccionmesas.Close;
    qproduccionmesas.Prepare;
    qproduccionmesas.ParamByName('FECHA').AsDate := fprodesde.Date;
    qproduccionmesas.Open;
    qproduccionmatprima.Close;
    qproduccionmatprima.Prepare;
    qproduccionmatprima.ParamByName('FECHA').AsDate := fprodesde.Date;
    qproduccionmatprima.Open;
    qproduccionproducto.Close;
    qproduccionproducto.Prepare;
    qproduccionproducto.ParamByName('FECHA').AsDate := fprodesde.Date;
    qproduccionproducto.Open;
    if comboprodmesas.KeyValue = null then
      vmesa := '%'
    else
      vmesa := comboprodmesas.KeyValue;
    if comboprodmprimas.KeyValue = null then
      vmprima := '%'
    else
      vmprima := comboprodmprimas.KeyValue;
    if comboprodproducto.KeyValue = null then
      vproducto := '%'
    else
      vproducto := comboprodproducto.KeyValue;
    dm.qproduccionmesa.Close;
    dm.qproduccionmesa.Prepare;
    dm.qproduccionmesa.ParamByName('FECHA').AsDate := fprodesde.Date;
    dm.qproduccionmesa.ParamByName('MESA').AsString := vmesa;
    dm.qproduccionmesa.ParamByName('MPRIMA').AsString := vmprima;
    dm.qproduccionmesa.ParamByName('PRODUCTO').AsString := vproducto;
    dm.qproduccionmesa.ParamByName('HDESDE').Asinteger:=hdesde.ItemIndex;
    dm.qproduccionmesa.ParamByName('HHASTA').Asinteger:=hhasta.ItemIndex;
    dm.qproduccionmesa.Open;
  end;
  if Pageproduccion.TabIndex = 6 then
  begin
    Timer1.Enabled := true;
    Panel49.Visible := false;
    dm.qproduccionhora.Close;
    dm.qproduccionhora.SQL.Clear;
    dm.qproduccionhora.SQL.Add
      ('select hour(hora) as desde,hour(hora)+1 as hasta,sum(peso_real-tara) as cantidad from produccion where fecha>='
      + '''' + fdesde + '''' + ' group by hour(hora)');
    dm.qproduccionhora.Open;

  end;
  { if pageproduccion.TabIndex=7 then
    begin
    timer1.Enabled:=false;
    panel49.Visible:=false;

    end; }
  if Pageproduccion.TabIndex = 7 then
  begin
    Timer1.Enabled := false;
    Panel49.Visible := false;
    dm.qcontrolproduccion.Close;
    dm.qcontrolproduccion.Prepare;
    dm.qcontrolproduccion.ParamByName('fecha').AsDate:=fprodesde.Date;
    dm.qcontrolproduccion.Open;
    dmproduccion.qpartesdiarios.Open;
    dmproduccion.qrestos_dia.Open;
  end;
  if Pageproduccion.TabIndex = 8 then
  begin
     qlotesdia.Close;
     qlotesdia.Prepare;
     qlotesdia.ParamByName('fecha').AsDatetime:=dmproduccion.qpartesdiariosfecha.AsDateTime;
     qlotesdia.ParamByName('almacen').AsInteger:=dmproduccion.qpartesdiariosalmacen.AsInteger;
     qlotesdia.ParamByName('empresa').AsInteger:=dmproduccion.qpartesdiariosidempresa.AsInteger;
     qlotesdia.Open;
    Panel49.Visible := false;
  end;
  if Pageproduccion.TabIndex = 9 then
  begin
    Panel49.Visible := false;
    // dmproduccion.qentradasgrupo.Open;
    dmproduccion.qpartesdiarios.Open;
    dmproduccion.qentradas.Open;
    dmproduccion.qentradas2.Open;
    // dmproduccion.qsalidas.Open;
    dmproduccion.qsalidaslotes.Open;
    dmproduccion.qsalidas2.Open;

  end;

end;

procedure TBASE.PageproduccionEnter(Sender: TObject);
begin
  // btprodaceptar.Click;
  if Pageproduccion.TabIndex = 9 then
  begin
    Panel49.Visible := false;
    dmproduccion.qpartesdiarios.Open;
    // dmproduccion.qentradas.Open;
    // dmproduccion.qentradas2.Open;
    // dmproduccion.qsalidaslotes.Open;
    // dmproduccion.qsalidas2.Open;

  end;
end;

procedure TBASE.pagnomfechadesdeChange(Sender: TObject);
var
  anyo, mes, dia: word;
  filtro, fdesde, fhasta: string;
begin
  filtro := '';
  decodedate(pagnomfechadesde.Date, anyo, mes, dia);
  fdesde := floattostr(anyo) + '-' + floattostr(mes) + '-' + floattostr(dia);
  filtro := ' where activo=1 and fecha>=' + '''' + fdesde + '''';
  decodedate(pagnomfechahasta.Date, anyo, mes, dia);
  fhasta := floattostr(anyo) + '-' + floattostr(mes) + '-' + floattostr(dia);
  filtro := filtro + ' and fecha<=' + '''' + fhasta + '''';
  filtro := filtro + ' order by fecha desc';
  dm.qnominas.Close;
  dm.qnominas.SQL.Clear;
  dm.qnominas.SQL.Add('select * from nominas ' + filtro);
  dm.qnominas.Open;
end;

procedure TBASE.pagnomfechahastaChange(Sender: TObject);
var
  anyo, mes, dia: word;
  filtro, fdesde, fhasta: string;
begin
  filtro := '';
  decodedate(pagnomfechadesde.Date, anyo, mes, dia);
  fdesde := floattostr(anyo) + '-' + floattostr(mes) + '-' + floattostr(dia);
  filtro := ' where activo=1 and fecha>=' + '''' + fdesde + '''';
  decodedate(pagnomfechahasta.Date, anyo, mes, dia);
  fhasta := floattostr(anyo) + '-' + floattostr(mes) + '-' + floattostr(dia);
  filtro := filtro + ' and fecha<=' + '''' + fhasta + '''';
  filtro := filtro + ' order by fecha desc';
  dm.qnominas.Close;
  dm.qnominas.SQL.Clear;
  dm.qnominas.SQL.Add('select * from nominas ' + filtro);
  dm.qnominas.Open;

end;

procedure TBASE.Panel71Click(Sender: TObject);
var
  anyo, mes, dia: word;
  filtro, fdesde, fhasta: string;
begin
  filtro := '';
  decodedate(pagnomfechadesde.Date, anyo, mes, dia);
  fdesde := floattostr(anyo) + '-' + floattostr(mes) + '-' + floattostr(dia);
  filtro := ' where activo=0 and fecha>=' + '''' + fdesde + '''';
  decodedate(pagnomfechahasta.Date, anyo, mes, dia);
  fhasta := floattostr(anyo) + '-' + floattostr(mes) + '-' + floattostr(dia);
  filtro := filtro + ' and fecha<=' + '''' + fhasta + '''';
  filtro := filtro + ' order by fecha asc';
  dm.qnominas.Close;
  dm.qnominas.SQL.Clear;
  dm.qnominas.SQL.Add('select * from nominas ' + filtro);
  dm.qnominas.Open;

end;

procedure TBASE.PedidosClientes1Click(Sender: TObject);
begin
  pedidos := Tpedidos.Create(nil);
  try
    pedidos.ShowModal();
  finally
    pedidos.Free;
  end;
end;

procedure TBASE.PEmpleadosClick(Sender: TObject);
var
  idt, filtrojornales, filtroanticipos: String;
  ianyo, imes, idia: word;
begin
  decodedate(Date, ianyo, imes, idia);
  TMES.ItemIndex := imes;
  Tanyo.ItemIndex := ianyo - 2015 + 1;
  tmes2.ItemIndex := imes;
  tanyo2.ItemIndex := ianyo - 2015 + 1;

  qempleados.Open;
  idt := qempleadosid.AsString;
  filtrojornales := 'where idt=' + idt;
  if Tanyo.ItemIndex <> 0 then
    filtrojornales := filtrojornales + ' and year(fecha)=' + Tanyo.Text;
  if TMES.ItemIndex <> 0 then
    filtrojornales := filtrojornales + ' and month(fecha)=' +
      inttostr(TMES.ItemIndex);
  if TESTADO.ItemIndex <> 0 then
    filtrojornales := filtrojornales + ' and estado=' + TESTADO.Text;
  filtrojornales := filtrojornales + ' order by id desc';
  qjornales.Close;
  qjornales.SQL.Clear;
  qjornales.SQL.Add('select * from trabajo_diario ' + filtrojornales);
  qjornales.Open;

  filtroanticipos := 'where idt=' + idt;
  if tanyo2.ItemIndex <> 0 then
    filtroanticipos := filtroanticipos + ' and year(fecha)=' + tanyo2.Text;
  if tmes2.ItemIndex <> 0 then
    filtroanticipos := filtroanticipos + ' and month(fecha)=' +
      inttostr(tmes2.ItemIndex);
  if testado2.ItemIndex <> 0 then
    filtroanticipos := filtroanticipos + ' and estado=' + testado2.Text;
  filtroanticipos := filtroanticipos + ' order by id desc';
  dm.qanticipos.Close;
  dm.qanticipos.SQL.Clear;
  dm.qanticipos.SQL.Add('select * from anticipos ' + filtroanticipos);
  dm.qanticipos.Open;

  templeados.filter := 'id=' + idt;
  templeados.filtered := true;
  templeados.Open;
  PageEmpleados.ActivePageIndex := 0;

  vtactivo := 0;
  PDEmpleados.Visible := not PDEmpleados.Visible;
  PGeneral.Visible := false;
  qempleados.Open;
  dm.qparcelas.Open;
  dm.qtrabajos.Open;
  dm.qtipohoras.Open;
  falta.Date := Date;
  fbaja.Date := Date;

end;

procedure TBASE.Presentaciones1Click(Sender: TObject);
begin
  presentaciones := Tpresentaciones.Create(nil);
  try
    presentaciones.ShowModal();
  finally
    presentaciones.Free;
  end;
end;

procedure TBASE.Proveedores1Click(Sender: TObject);
begin
  proveedores := Tproveedores.Create(nil);
  try
    proveedores.ShowModal();
  finally
    proveedores.Free;
  end;
end;

procedure TBASE.Puestosdetrabajo1Click(Sender: TObject);
begin
  fpuestos_trabajo := Tfpuestos_trabajo.Create(nil);
  try
    fpuestos_trabajo.ShowModal;
  finally
    fpuestos_trabajo.Free;
  end;
end;

procedure TBASE.qempleadosAfterOpen(DataSet: TDataSet);
begin
  ltotalgrupo.Caption := 'Total grupo: ' + inttostr(qempleados.RecordCount);
  ltotalgrupo2.Caption := 'Total grupo: ' + inttostr(qempleados.RecordCount);

end;

procedure TBASE.qempleadosBeforeOpen(DataSet: TDataSet);
var
  filtro, fdesde, fhasta, sTexto: string;
begin
  if PDNominas.Visible then
  begin
    fdesde := FormatDateTime('yyyy-mm-dd', nomfechadesde.Date);
    fhasta := FormatDateTime('yyyy-mm-dd', nomfechahasta.Date);
    filtro := ' where (activo=1 or exists (select 1 from trabajo_diario td where td.idt=trabajadores.id and td.fecha>=''' + fdesde + ''' and td.fecha<=''' + fhasta + ''') or exists (select 1 from anticipos ta where ta.idt=trabajadores.id and ta.fecha>=''' + fdesde + ''' and ta.fecha<=''' + fhasta + '''))';

    sTexto := Trim(tbuscarnominas.Text);
    if sTexto <> '' then
    begin
      if StrToIntDef(sTexto, 0) > 0 then
        filtro := filtro + ' and (nombre like ''%' + sTexto + '%'' or id=' + sTexto + ')'
      else
        filtro := filtro + ' and (nombre like ''%' + sTexto + '%'')';
    end;

    if vtactivo <> 0 then
      filtro := filtro + ' and grupo=' + IntToStr(vtactivo);
  end
  else
  begin
    if filtrotrabajadores <> '' then
    begin
      if vtactivo <> 0 then
      begin
        if StrToIntDef(filtrotrabajadores, 0) > 0 then
          filtro := ' where (nombre like(''%' + filtrotrabajadores + '%'') or id=' +
            filtrotrabajadores + ') and grupo=' + inttostr(vtactivo)
        else
          filtro := ' where (nombre like(''%' + filtrotrabajadores + '%'')) and grupo=' +
            inttostr(vtactivo);
      end
      else
      begin
        if StrToIntDef(filtrotrabajadores, 0) > 0 then
          filtro := ' where (nombre like(''%' + filtrotrabajadores + '%'') or id=' +
            filtrotrabajadores + ')'
        else
          filtro := ' where (nombre like(''%' + filtrotrabajadores + '%''))';
      end;
      if not chktodosempleados.Checked then
        filtro := filtro + ' and activo=1 ';
    end
    else
    begin
      if vtactivo <> 0 then
      begin
        filtro := ' where grupo=' + inttostr(vtactivo);
        if not chktodosempleados.Checked then
          filtro := filtro + ' and activo=1 ';
      end
      else
      begin
        if chktodosempleados.Checked then
          filtro := ''
        else
          filtro := ' where activo=1 ';
      end;
    end;
  end;

  qempleados.SQL.Clear;
  qempleados.SQL.Add('select ide,id,nombre,seleccionado,nif,concat(cbiban,cbbanco,cboficina,cbdc,cbcc) as cuenta from trabajadores ' +
    filtro + ' order by nombre');
end;

procedure TBASE.ratamientos1Click(Sender: TObject);
begin
  tratamientos := Ttratamientos.Create(nil);
  try
    tratamientos.ShowModal();
  finally
    tratamientos.Free;
  end;
end;

procedure TBASE.tratamientosBase1Click(Sender: TObject);
begin
  tratamientosbase := Ttratamientosbase.Create(nil);
  try
    tratamientosbase.ShowModal();
  finally
    tratamientosbase.Free;
  end;
end;

procedure TBASE.RecalculoStocksdearticuloscomponentes1Click(Sender: TObject);
begin
  recalculostock := Trecalculostock.Create(nil);
  try
    recalculostock.ShowModal();
  finally
    recalculostock.Free;
  end;
end;

procedure TBASE.Regmenesdecotizacin1Click(Sender: TObject);
begin
  fregimen_cotizacion := Tfregimen_cotizacion.Create(nil);
  try
    fregimen_cotizacion.ShowModal;
  finally
    fregimen_cotizacion.Free;
  end;
end;

procedure TBASE.Regularizarmaterialauxiliar1Click(Sender: TObject);
var
  id, tmultiplicador, tara, costo: string;
  multiplicador: real;
begin
  qaux.SQL.Clear;
  qaux.SQL.Add
    ('select DISTINCT(idempresa),id,idea,num_palets,id_palet,mprima,recuperar_envases from ea_pesadas where (idempresa,id,idea) not in (select DISTINCT(ide),idea,idea2 from ea_materiales) and fecha>=(select max(fecha) from control_stock)  and iddestino ');
  qaux.SQL.Add(' in (select id from almacenes where final=1 or produccion=1)');
  qaux.Open;
  if qaux.RecordCount > 0 then
  begin
    qregularizar.Prepare;
    while not qaux.Eof do
    begin
      qaux2.SQL.Clear;
      qaux2.SQL.Add('select compuesto from materias_primas where idempresa=' +
        qaux.Fields[0].AsString + ' and id=' + '''' + qaux.Fields[5]
        .AsString + '''');
      qaux2.Open;
      if qaux2.Fields[0].AsInteger = 0 then
        multiplicador := 1
      else
        multiplicador := 0.5;
      id := qaux.Fields[1].AsString;
      qaux2.Close;
      qaux2.SQL.Clear;
      qaux2.SQL.Add('delete from ea_materiales where ide=' + qaux.Fields[0]
        .AsString + ' and idea=' + qaux.Fields[1].AsString + ' and idea2=' +
        qaux.Fields[2].AsString);
      qaux2.ExecSQL;
      qaux2.Close;
      qaux2.SQL.Clear;
      qaux2.SQL.Add('select * from lotes_pesadas where ide=' + qaux.Fields[0]
        .AsString + ' and idea=' + qaux.Fields[1].AsString + ' and idea2=' +
        qaux.Fields[2].AsString);
      qaux2.Open;
      if qaux2.RecordCount > 0 then
      begin
        qregularizar.ParamByName('IDEMPRESA').AsInteger :=
          qaux.Fields[0].AsInteger;
        qregularizar.ParamByName('ID').AsInteger := qaux.Fields[1].AsInteger;
        qregularizar.ParamByName('IDEA').AsInteger := qaux.Fields[2].AsInteger;
        qregularizar.ParamByName('NUMPALETS').AsInteger :=
          qaux.Fields[3].AsInteger;
        qregularizar.ParamByName('IDPALET').AsString := qaux.Fields[4].AsString;
        qregularizar.ParamByName('MULTIPLICADOR').AsFloat := multiplicador;
        qregularizar.ExecSQL;
        {
          qregularizar.Close;
          qregularizar.SQL.Clear;
          qregularizar.SQL.Add('insert into ea_materiales ');
          qregularizar.SQL.Add('select idempresa,'+qpesadasid.AsString+' as idea,'+qpesadasidea.AsString+' as idea2,idarticulof,sum(cantidadtotal) as cantidadtotal,sum(pesototal) as pesototal,null,sum(preciototal) as preciototal,0 as recuperado from ');
          //// materiales de los envases
          qregularizar.SQL.Add('(SELECT ac.idempresa,ac.idarticuloalmacen,ac.idarticulof,(ac.cantidad*lp.cajas*'+tmultiplicador+') as cantidadtotal,(ac.peso*lp.cajas*'+tmultiplicador+') as pesototal,(ac.preciocoste*lp.cajas*'+tmultiplicador+') as preciototal ');
          qregularizar.SQL.Add(' FROM articulos_componentes ac,(SELECT lp.ide,lp.idea,lp.idea2,sum(cajas) as cajas,aa.id as id_envase FROM lotes_pesadas lp,articulos_almacen aa where aa.ide=lp.ide and aa.codigo=lp.id_envase ');
          qregularizar.SQL.Add(' and lp.ide='+qpesadasidempresa.AsString+' and lp.idea='+qpesadasid.AsString+' and lp.idea2='+qpesadasidea.AsString+' group by lp.id_envase ) as lp ');
          qregularizar.SQL.Add(' where ac.idempresa=lp.ide and ac.idarticuloalmacen=lp.id_envase ');
          qregularizar.SQL.Add(' union ALL');  // materiales de los formatos
          qregularizar.SQL.Add(' SELECT ac.ide,ac.idcfg,ac.idaf,(ac.cantidad*lp.cajas*'+tmultiplicador+') as cantidadtotal,(ac.peso*lp.cajas*'+tmultiplicador+') as pesototal,(ac.coste*lp.cajas*'+tmultiplicador+') as preciototal FROM ');
          qregularizar.SQL.Add(' configuraciones_detalle ac,(SELECT lp.ide,lp.idea,lp.idea2,sum(cajas) as cajas,aa.id as id_envase FROM lotes_pesadas lp, ');
          qregularizar.SQL.Add(' configuraciones aa where aa.ide=lp.ide and aa.id=lp.id_formato and lp.ide='+qpesadasidempresa.AsString+' and lp.idea='+qpesadasid.AsString+' and lp.idea2='+qpesadasidea.AsString+' group by lp.id_envase ) as lp ');
          qregularizar.SQL.Add(' where ac.ide=lp.ide and ac.idcfg=lp.id_envase ');
          qregularizar.SQL.Add(' union ALL');  //// materiales de los palets
          qregularizar.SQL.Add(' SELECT ac.idempresa,ac.idarticuloalmacen,ac.idarticulof,(ac.cantidad*'+qpesadasnum_palets.AsString+') as cantidadtotal,(ac.cantidad*ac.peso*'+qpesadasnum_palets.AsString+') as pesototal,(ac.cantidad*ac.preciocoste*'+qpesadasnum_palets.AsString+') as preciototal');
          qregularizar.SQL.Add(' FROM articulos_componentes ac where ac.idempresa='+qpesadasidempresa.AsString+' and ac.idarticuloalmacen=(select id from articulos_almacen where codigo='+''''+qpesadasid_palet.AsString+''''+' )');
          qregularizar.SQL.Add(' ) as ea_materiales_tmp group by idarticulof');
          qregularizar.execsql;
        }
      end;
      if qaux.Fields[6].AsInteger = 1 then
      begin
        qaux2.SQL.Clear;
        qaux2.SQL.Add('update ea_materiales ea set recuperado=-1 where ea.ide='
          + qaux.Fields[0].AsString + ' and ea.idea=' + qaux.Fields[1].AsString
          + ' and ea.idea2=' + qaux.Fields[2].AsString);
        qaux2.ExecSQL;
      end
      else
      begin
        qaux2.SQL.Clear;
        qaux2.SQL.Add('update ea_materiales ea set recuperado=0 where ea.ide=' +
          qaux.Fields[0].AsString + ' and ea.idea=' + qaux.Fields[1].AsString +
          ' and ea.idea2=' + qaux.Fields[2].AsString);
        qaux2.ExecSQL;
      end;
      qaux2.SQL.Clear;
      qaux2.SQL.Add('select sum(peso),sum(precio) from ea_materiales where ide='
        + qaux.Fields[0].AsString + ' and idea=' + qaux.Fields[1].AsString +
        ' and idea2=' + qaux.Fields[2].AsString);
      qaux2.Open;
      tara := qaux2.Fields[0].AsString;
      costo := qaux2.Fields[1].AsString;
      tara := stringreplace(tara, ',', '.', [rfReplaceAll, rfIgnoreCase]);
      costo := stringreplace(costo, ',', '.', [rfReplaceAll, rfIgnoreCase]);
      qaux2.SQL.Clear;
      qaux2.SQL.Add('update ea_pesadas ea set id_palet2=' + '''' + 'TRIGGER_ON'
        + '''' + ',tara=' + tara + ',costo_materiales=' + costo +
        ' where ea.idempresa=' + qaux.Fields[0].AsString + ' and ea.id=' +
        qaux.Fields[1].AsString + ' and ea.idea=' + qaux.Fields[2].AsString);
      qaux2.ExecSQL;

      { if qpesadas.State in [dsbrowse] then qpesadas.Edit;
        qpesadasid_palet2.Value:='TRIGGER_ON';
        qpesadastara.Value:=qaux.Fields[0].AsFloat;
        qpesadascosto_materiales.Value:=qaux.Fields[1].AsFloat;
        qpesadas.Post; }

      qaux.Next;
    end;
  end;
end;

procedure TBASE.Salir1Click(Sender: TObject);
begin
  ExitProcess(0);
end;

procedure TBASE.SociosProductores1Click(Sender: TObject);
begin
  sociosproductores := Tsociosproductores.Create(nil);
  try
    sociosproductores.ShowModal();
  finally
    sociosproductores.Free;
  end;
end;

procedure TBASE.Stockdealmacen1Click(Sender: TObject);
begin
  stocksalmacen := Tstocksalmacen.Create(nil);
  try
    stocksalmacen.ShowModal();
  finally
    stocksalmacen.Free;
  end;
end;

procedure TBASE.IFG1Click(Sender: TObject);
begin
  listado_ifg := Tlistado_ifg.Create(nil);
  try
    listado_ifg.ShowModal();
  finally
    listado_ifg.Free;
  end;
end;

procedure TBASE.Nominaspag4Enter(Sender: TObject);
begin
  if not dm.qnominas.Active then
  begin
    dm.qnominas.Open;
  end
  else
    dm.qnominas.Refresh;
  if not dm.tnominasdetalle.Active then
  begin
    dm.tnominasdetalle.Open;
  end
  else
    dm.tnominasdetalle.Refresh;

end;

procedure TBASE.TabJornalesEnter(Sender: TObject);
var
  idt, filtrojornales, filtroanticipos: string;
begin
  Label46.Caption := templeadosnombre.AsString;
  if qempleados.RecordCount > 0 then
  begin
    idt := qempleadosid.AsString;
    // templeados.Close;
    // idt:=qempleadosid.asstring;
    // templeados.Filter:='id='+idt;
    // templeados.Filtered:=true;
    templeados.Locate('id', idt, [locaseinsensitive]);
    // templeados.Open;
    Label46.Caption := templeadosnombre.AsString;
    Label10.Caption := qempleadosnombre.AsString;
    filtrojornales := 'where idt=' + idt;
    if Tanyo.ItemIndex <> 0 then
      filtrojornales := filtrojornales + ' and year(fecha)=' + Tanyo.Text;
    if TMES.ItemIndex <> 0 then
      filtrojornales := filtrojornales + ' and month(fecha)=' +
        inttostr(TMES.ItemIndex);
    if TESTADO.ItemIndex <> 0 then
      filtrojornales := filtrojornales + ' and estado=' + TESTADO.Text;
    filtrojornales := filtrojornales + ' order by fecha desc';
    qjornales.Close;
    qjornales.SQL.Clear;
    qjornales.SQL.Add('select * from trabajo_diario ' + filtrojornales);
    qjornales.Open;
    filtroanticipos := 'where idt=' + idt;
    if tanyo2.ItemIndex <> 0 then
      filtroanticipos := filtroanticipos + ' and year(fecha)=' + tanyo2.Text;
    if tmes2.ItemIndex <> 0 then
      filtroanticipos := filtroanticipos + ' and month(fecha)=' +
        inttostr(tmes2.ItemIndex);
    if testado2.ItemIndex <> 0 then
      filtroanticipos := filtroanticipos + ' and estado=' + testado2.Text;
    filtroanticipos := filtroanticipos + ' order by fecha desc';
    dm.qanticipos.Close;
    dm.qanticipos.SQL.Clear;
    dm.qanticipos.SQL.Add('select * from anticipos ' + filtroanticipos);
    dm.qanticipos.Open;
  end;
end;

procedure TBASE.TabSheet21Enter(Sender: TObject);
begin
  qlistadoporgrupo.close;
  vfechadesdelg.Date:=date();
  vfechahastalg.Date:=date();
end;

procedure TBASE.TanyoChange(Sender: TObject);
var
  idt, filtrojornales: string;
begin
  qempleados.Open;
  idt := qempleadosid.AsString;
  filtrojornales := 'where idt=' + idt;
  if Tanyo.ItemIndex <> 0 then
    filtrojornales := filtrojornales + ' and year(fecha)=' + Tanyo.Text;
  if TMES.ItemIndex <> 0 then
    filtrojornales := filtrojornales + ' and month(fecha)=' +
      inttostr(TMES.ItemIndex);
  if TESTADO.ItemIndex <> 0 then
    filtrojornales := filtrojornales + ' and estado=' + TESTADO.Text;
  filtrojornales := filtrojornales + ' order by id desc';
  qjornales.Close;
  qjornales.SQL.Clear;
  qjornales.SQL.Add('select * from trabajo_diario ' + filtrojornales);
  qjornales.Open;

end;

procedure TBASE.tbjornadasEnter(Sender: TObject);
begin
  qticados.Close;
  vdesdejornadas.Date:=date();
  vhastajornadas.Date:=date();
end;

procedure TBASE.tbuscarChange(Sender: TObject);
begin
  filtrotrabajadores := tbuscar.Text;
  qempleados.Close;
  qempleados.Open;
end;

procedure TBASE.bcaceptarClick(Sender: TObject);
begin
  dm.qcampanyas.post;
  // dm.qparcelas.refresh;
  // dm.qparcelas.first;
  bcanadir.Enabled := true;
  bcmodificar.Enabled := true;
  bcborrar.Enabled := true;
  bccancelar.Enabled := false;
  bcaceptar.Enabled := false;
  dm.qcampanyasparcela.Refresh;
  dm.qlincampanyas.Refresh;
  dm.qcampanyas_aux.Refresh;
end;

procedure TBASE.bcanadirClick(Sender: TObject);
begin
  dm.qcampanyas.Append;
  DBEdit89.SetFocus;
  bcanadir.Enabled := false;
  bcmodificar.Enabled := false;
  bcborrar.Enabled := false;
  bccancelar.Enabled := true;
  bcaceptar.Enabled := true;
end;

procedure TBASE.TESTADOChange(Sender: TObject);
var
  idt, filtrojornales: string;
begin
  qempleados.Open;
  idt := qempleadosid.AsString;
  filtrojornales := 'where idt=' + idt;
  if Tanyo.ItemIndex <> 0 then
    filtrojornales := filtrojornales + ' and year(fecha)=' + Tanyo.Text;
  if TMES.ItemIndex <> 0 then
    filtrojornales := filtrojornales + ' and month(fecha)=' +
      inttostr(TMES.ItemIndex);
  if TESTADO.ItemIndex <> 0 then
    filtrojornales := filtrojornales + ' and estado=' + TESTADO.Text;
  filtrojornales := filtrojornales + ' order by id desc';
  qjornales.Close;
  qjornales.SQL.Clear;
  qjornales.SQL.Add('select * from trabajo_diario ' + filtrojornales);
  qjornales.Open;

end;

procedure TBASE.Timer1Timer(Sender: TObject);
begin
  if Pageproduccion.TabIndex = 8 then
  begin

    { if dm.talmacenes.active then dm.talmacenes.Refresh;
      if dm.qalmacenes.active then dm.qalmacenes.Refresh;
      if dmestadisticas.qproduccion_almacen.active then dmestadisticas.qproduccion_almacen.Refresh; }
  end;

  if Pageproduccion.TabIndex = 0 then
  begin
    if dm.qmovimientomesas.Active then
      dm.qmovimientomesas.Refresh
    else
      dm.qmovimientomesas.Active := true;
  end;
  if Pageproduccion.TabIndex = 1 then
  begin
    if dm.qnominasproduccion.Active then
      dm.qnominasproduccion.Refresh
    else
      dm.qnominasproduccion.Active := true;
  end;
  if Pageproduccion.TabIndex = 3 then
  begin
    if dm.qproduccion.Active then
      dm.qproduccion.Refresh
    else
      dm.qproduccion.Active := true;
  end;

  if Pageproduccion.TabIndex = 4 then
  begin

      dm.qproduccionmesa2.Prepare;
      dm.qproduccionmesa2.ParamByName('FECHA').AsDate:=fprodesde.Date;
      dm.qproduccionmesa2.refresh;
      //dbchart1.RefreshData;

  end;
  if Pageproduccion.TabIndex = 5 then
  begin
    if dm.qproduccionmesa.Active then
      dm.qproduccionmesa.Refresh
    else
      dm.qproduccionmesa.Active := true;
  end;
  if Pageproduccion.TabIndex = 6 then
  begin
    if dm.qproduccionhora.Active then
      dm.qproduccionhora.Refresh
    else
      dm.qproduccionhora.Active := true;
  end;
  if Pageproduccion.TabIndex = 7 then
  begin
  end;
  if Pageproduccion.TabIndex = 8 then
  begin
  end;
  if Pageproduccion.TabIndex = 9 then
  begin
  end;
  if Pageproduccion.TabIndex = 10 then
  begin
    { if dmproduccion.qpartesdiarios.Active then dmproduccion.qpartesdiarios.Refresh;
      //   if dmproduccion.qentradasgrupo.Active then dmproduccion.qentradasgrupo.Refresh;
      if dmproduccion.qentradas.Active then dmproduccion.qentradas.Refresh;
      if dmproduccion.qentradas2.Active then dmproduccion.qentradas2.Refresh;
      if dmproduccion.qsalidas.Active then dmproduccion.qsalidas.Refresh;
      if dmproduccion.qsalidas2.Active then dmproduccion.qsalidas2.Refresh; }
  end;
  if Pageproduccion.TabIndex = 11 then
  begin
  end;
  if Pageproduccion.TabIndex = 12 then
  begin
  end;

end;

procedure TBASE.Timer2Timer(Sender: TObject);
begin
  if dm.tempresaavisarstock.AsInteger = 1 then
  begin
    controlminimos := Tcontrolminimos.Create(nil);
    try
      Timer2.Enabled := false;
      controlminimos.ShowModal();
    finally
      controlminimos.Free;
      Timer2.Enabled := true;
    end;
  end;
end;

procedure TBASE.tmes2Change(Sender: TObject);
var
  idt, filtroanticipos: string;
begin
  qempleados.Open;
  idt := qempleadosid.AsString;
  filtroanticipos := 'where idt=' + idt;
  if tanyo2.ItemIndex <> 0 then
    filtroanticipos := filtroanticipos + ' and year(fecha)=' + tanyo2.Text;
  if tmes2.ItemIndex <> 0 then
    filtroanticipos := filtroanticipos + ' and month(fecha)=' +
      inttostr(tmes2.ItemIndex);
  if testado2.ItemIndex <> 0 then
    filtroanticipos := filtroanticipos + ' and estado=' + testado2.Text;
  filtroanticipos := filtroanticipos + ' order by id desc';
  dm.qanticipos.Close;
  dm.qanticipos.SQL.Clear;
  dm.qanticipos.SQL.Add('select * from anticipos ' + filtroanticipos);
  dm.qanticipos.Open;

end;

procedure TBASE.TMESChange(Sender: TObject);
var
  idt, filtrojornales: string;
begin
  qempleados.Open;
  idt := qempleadosid.AsString;
  filtrojornales := 'where idt=' + idt;
  if Tanyo.ItemIndex <> 0 then
    filtrojornales := filtrojornales + ' and year(fecha)=' + Tanyo.Text;
  if TMES.ItemIndex <> 0 then
    filtrojornales := filtrojornales + ' and month(fecha)=' +
      inttostr(TMES.ItemIndex);
  if TESTADO.ItemIndex <> 0 then
    filtrojornales := filtrojornales + ' and estado=' + TESTADO.Text;
  filtrojornales := filtrojornales + ' order by id desc';
  qjornales.Close;
  qjornales.SQL.Clear;
  qjornales.SQL.Add('select * from trabajo_diario ' + filtrojornales);
  qjornales.Open;

end;

procedure TBASE.Utensilios1Click(Sender: TObject);
begin
  utensilios := Tutensilios.Create(nil);
  try
    utensilios.ShowModal;
  finally
    utensilios.Free;
  end;
end;

procedure TBASE.VaciarClick(Sender: TObject);
begin
  DBEdit7.Text := '';
end;

procedure TBASE.Vidacomercial1Click(Sender: TObject);
begin
  cc_vidacomercial := Tcc_vidacomercial.Create(nil);
  try
    cc_vidacomercial.ShowModal;
  finally
    cc_vidacomercial.Free;
  end;
end;

procedure TBASE.ZReadOnlyQuery1BeforeOpen(DataSet: TDataSet);
var
  filtro: string;
begin
  if filtrotrabajadores <> '' then
  begin
    if vtactivo <> 0 then
    begin
      filtro := filtro + ' where nombre like(' + '''' + filtrotrabajadores +
        '''' + ') or id like(' + '''' + filtrotrabajadores + '''' +
        ') and activo=' + inttostr(vtactivo);
    end
    else
    begin
      filtro := filtro + ' where nombre like(' + '''' + filtrotrabajadores +
        '''' + ') or id like(' + '''' + filtrotrabajadores + '''' + ')';
    end;
  end;
  if filtrotrabajadores = '' then
  begin
    if vtactivo <> 0 then
      filtro := filtro + ' where activo=' + inttostr(vtactivo)
    else
      filtro := '';
  end;

  qempleados.SQL.Clear;
  qempleados.SQL.Add('select id, nombre from trabajadores ' + filtro +
    ' order by nombre')
end;

procedure TBASE.AbonadosBase1Click(Sender: TObject);
begin
  productosfitosanitarios := Tproductosfitosanitarios.Create(nil);
  try
    productosfitosanitarios.ShowModal();
  finally
    productosfitosanitarios.Free;
  end;
end;

procedure TBASE.Albaranes1Click(Sender: TObject);
begin
if not Assigned(frmProvAlbaranes) then
    frmProvAlbaranes := TfrmProvAlbaranes.Create(Self);
  frmProvAlbaranes.Show;
end;

procedure TBASE.AlbaranesClientes1Click(Sender: TObject);
begin
  albaranes := Talbaranes.Create(nil);
  try
    albaranes.ShowModal();
  finally
    albaranes.Free;
  end;
end;

procedure TBASE.AppMessage(var Msg: Tmsg; Var Handled: Boolean);
var
  actual: TWincontrol;
begin
  if Msg.Message = WM_KEYDOWN then
  begin

    // esto es para controlar que con la flecha abajo se desplegen las
    // listas

    if Msg.wParam = VK_DOWN then
    begin
      actual := Screen.activecontrol;
      if actual is TDBLookupComboBox then
        if not TDBLookupComboBox(Screen.ActiveForm.activecontrol).listVisible
        then
          TDBLookupComboBox(Screen.ActiveForm.activecontrol).DropDown;

      // si utilizas las RX
      { if Actual is TRxDBLookupCombo then
        if not TRxDBLookupCombo(Screen.ActiveForm.ActiveControl).listVisible then
        TRxDBLookupCombo(Screen.ActiveForm.ActiveControl).DropDown;

      }
      if actual is TComboBox then
        SendMessage(TComboBox(Screen.ActiveForm.activecontrol).Handle,
          CB_SHOWDROPDOWN, -1, 0);

      if (actual is TCustomEdit) then
        Msg.wParam := VK_TAB;
      // se pueden a�adir mas controles....

    end;

    // y aqui es el control del intro.
    if Msg.wParam = VK_RETURN THEN
    begin
      actual := Screen.activecontrol;
      // para los edit.
      if (actual is TCustomEdit) and not(actual is TCustomMemo) then
        Msg.wParam := VK_TAB;

      // para los memo. Con ctrl + enter se salta de linea dentro del
      // memo, si solo es intro salta al siguiente control
      if (actual is TCustomMemo) and (HiWord(GetKeyState(VK_CONTROL)) = 0) then
        Msg.wParam := VK_TAB;

      // para los lookup
      if actual is TDBLookupComboBox then
        if not TDBLookupComboBox(actual).listVisible then
          Msg.wParam := VK_TAB;

      // Si utilizas las RX
      { if Actual is TRxDBLookupCombo then
        if not TRxDBLookupCombo(Actual).listVisible then
        Msg.wParam := VK_TAB;
      }
      // Los combobox
      if actual is TCustomComboBox then
        if not TCustomComboBox(actual).DroppedDown then
          Msg.wParam := VK_TAB;

      // el radiobutton
      if actual is TRadioButton then
        Msg.wParam := VK_TAB;

      // en el grid
      if actual is TDBGrid then
        if (TDBGrid(actual).ReadOnly) or (HiWord(GetKeyState(VK_CONTROL)) = 1)
        then
          Msg.wParam := VK_TAB;

      // o esto otro Con Ctrl + intro siguiente celda con
      // ctrl + shift + intro celda anterior
      // es complicado pero es por no liar con el intro solo
      // que siempre pasa de un control a otro.
      if actual is TDBGrid then
      begin
        if (TDBGrid(actual).ReadOnly) or (HiWord(GetKeyState(VK_CONTROL)) = 0)
        then
          Msg.wParam := VK_TAB
        else if not(HiWord(GetKeyState(VK_SHIFT)) = 0) then
        begin
          if TDBGrid(actual).SelectedIndex > 0 then { increment the field }
            TDBGrid(actual).SelectedIndex := TDBGrid(actual).SelectedIndex - 1
          else
            TDBGrid(actual).SelectedIndex := TDBGrid(actual).FieldCount - 1;
        end
        else
        begin
          if TDBGrid(actual).SelectedIndex < (TDBGrid(actual).FieldCount - 1)
          then { increment the field }
            TDBGrid(actual).SelectedIndex := TDBGrid(actual).SelectedIndex + 1
          else
            TDBGrid(actual).SelectedIndex := 0;
        end;
      end;

      // ListBox
      if actual is TCustomListBox then
        Msg.wParam := VK_TAB;

      // TabControl
      if actual is TCustomTabControl then
        Msg.wParam := VK_TAB;

      // Aqui se pondr�an todos los controles que usamos en la
      // aplicaci�n y necesitamos cambiar el tab por intro.
      // de esta forma te despreocupas de cuantos a�ades y es m�s
      // limpio el c�digo

    end;
  end;
end;

procedure TBASE.aquillas1Click(Sender: TObject);
begin
  taquillas := Ttaquillas.Create(nil);
  try
    taquillas.ShowModal;
  finally
    taquillas.Free;
  end;
end;

end.

