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;

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;
    xtempleados: TZTable;
    xtempleadosNIF: TWideStringField;
    xtempleadosnombre: TWideStringField;
    xtempleadosactivo: TIntegerField;
    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;
    Campañas: 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;
    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;
    xtempleadosmostrar: TIntegerField;
    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;
    templeadosactivo: TIntegerField;
    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;
    templeadoscodart: TWideStringField;
    templeadosmostrar: 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;
    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;
    qarticulocomisionfamilia: TIntegerField;
    qarticulocomisionprovhab: TIntegerField;
    qarticulocomisiontipoiva: TIntegerField;
    qarticulocomisionpreciocoste: TFloatField;
    qarticulocomisionmargen: TFloatField;
    qarticulocomisionbeneficio: TFloatField;
    qarticulocomisionpvp: TFloatField;
    qarticulocomisionstock: TFloatField;
    qarticulocomisionult_preciocompra: TFloatField;
    qarticulocomisionfacturable: TIntegerField;
    qarticulocomisionobservaciones: TWideStringField;
    qarticulocomisionimagen: TBlobField;
    qarticulocomisionactivo: TIntegerField;
    qarticulocomisionvalor_almacen: TFloatField;
    qarticulocomisionstock_minimo: TFloatField;
    qarticulocomisionavisar_stock: TIntegerField;
    qarticulocomisioncontrolar_traza: TIntegerField;
    qarticulocomisionpeso: TFloatField;
    qarticulocomisiondescripcion_doc: TWideStringField;
    qarticulocomisioninventariable: TIntegerField;
    qarticulocomisionactualizar_stock: TIntegerField;
    qarticulotransporteidempresa: TIntegerField;
    qarticulotransporteid: TIntegerField;
    qarticulotransportecodigo: TWideStringField;
    qarticulotransportedescripcion: TWideStringField;
    qarticulotransportefamilia: TIntegerField;
    qarticulotransporteprovhab: TIntegerField;
    qarticulotransportetipoiva: TIntegerField;
    qarticulotransportepreciocoste: TFloatField;
    qarticulotransportemargen: TFloatField;
    qarticulotransportebeneficio: TFloatField;
    qarticulotransportepvp: TFloatField;
    qarticulotransportestock: TFloatField;
    qarticulotransporteult_preciocompra: TFloatField;
    qarticulotransportefacturable: TIntegerField;
    qarticulotransporteobservaciones: TWideStringField;
    qarticulotransporteimagen: TBlobField;
    qarticulotransporteactivo: TIntegerField;
    qarticulotransportevalor_almacen: TFloatField;
    qarticulotransportestock_minimo: TFloatField;
    qarticulotransporteavisar_stock: TIntegerField;
    qarticulotransportecontrolar_traza: TIntegerField;
    qarticulotransportepeso: TFloatField;
    qarticulotransportedescripcion_doc: TWideStringField;
    qarticulotransporteinventariable: TIntegerField;
    qarticulotransporteactualizar_stock: TIntegerField;
    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;
    IntegerField3: TIntegerField;
    IntegerField4: TIntegerField;
    IntegerField5: TIntegerField;
    FloatField1: TFloatField;
    FloatField2: TFloatField;
    FloatField3: TFloatField;
    FloatField4: TFloatField;
    FloatField5: TFloatField;
    FloatField6: TFloatField;
    IntegerField6: TIntegerField;
    WideStringField3: TWideStringField;
    BlobField1: TBlobField;
    IntegerField7: TIntegerField;
    FloatField7: TFloatField;
    FloatField8: TFloatField;
    IntegerField8: TIntegerField;
    IntegerField9: TIntegerField;
    FloatField9: TFloatField;
    WideStringField4: TWideStringField;
    IntegerField10: TIntegerField;
    IntegerField11: TIntegerField;
    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;
    Button55: TButton;
    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;

    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 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 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 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);


  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, 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;

{$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;
begin
  // Guardar la posición en la DB y desactivar que se mueva el registro
  PBookmark := DBGrid.DataSource.DataSet.GetBookmark;
  DBGrid.DataSource.DataSet.DisableControls;
  DBGrid.DataSource.DataSet.First;

  // Comprobar si existe el component TProgressBar
  if (ProgressBarXls <> nil) then
    ProgressBarInit;

  // Crear instancia de la aplicación Excel
  Excel := CreateOleObject('Excel.Application');

  // Evitar que nos pregunte si deseamos sobreescribir el archivo
  Excel.DisplayAlerts := false;

  // Agregar libro de trabajo
  WorkBook := Excel.Workbooks.Add(xlWBATworksheet);

  // Tomar una referencia a la hoja creada
  WorkSheet := WorkBook.WorkSheets[1];

  // Se  describe el nombre de la hoja
  WorkSheet.name := SheetName;

  // Llenamos las celdas
  // Toma en cuenta que las columnas y filas empiezan en 1, y que en el
  // WorkSheet.Cells[I, J], I es la fila y J es la columna.

  // Extrae los nombres de los campos del DBGrid y los coloca en el primer registro,
  // excluyendo los campos que están ocultos
  for J := 0 to DBGrid.FieldCount - 1 do
    if DBGrid.Fields[J].Visible then
    begin
      // Poner la fuente de letra en Negrita
      WorkSheet.Cells[1, J + 1].Font.Bold := true;
      // Centrar la celda
      // WorkSheet.Cells[1, J +1].HorizontalAlignment := xlCenter;
      // Asignamos Valor del titulo del DBrid
      WorkSheet.Cells[1, J + 1] := DBGrid.Columns[J].Title.Caption;
    end;

  // Guardar los registros
  for i := 0 to DBGrid.DataSource.DataSet.RecordCount - 1 do
  begin
    // Identificamos los campos y lo grabamos según su tipo
    for J := 0 to DBGrid.FieldCount - 1 do
      case DBGrid.Fields[J].DataType of
        ftAutoInc, ftBytes, ftInteger, ftSmallint, ftWord: // Auto o Numérico
          WorkSheet.Cells[i + 2, J + 1] := DBGrid.Fields[J].AsInteger;
        ftBCD, ftFloat, ftCurrency: // Numérico con decimales
          WorkSheet.Cells[i + 2, J + 1] := DBGrid.Fields[J].AsFloat;
        ftDateTime, ftDate, ftTime: // Fecha y Hora
          WorkSheet.Cells[i + 2, J + 1] := DBGrid.Fields[J].AsDateTime;
      else // Todo lo demas caracteres
        WorkSheet.Cells[i + 2, J + 1] := DBGrid.Fields[J].AsString;
      end;

    // Saltamos de registro
    DBGrid.DataSource.DataSet.Next;

    // Comprobar si existe el component TProgressBar
    if (ProgressBarXls <> nil) then
      ProgressBarXls.Position := ProgressBarXls.Position + 1;
  end;

  // Comprobar si existe el component TProgressBar
  if (ProgressBarXls <> nil) then
    ProgressBarXls.Visible := false;

  // Redimensionar todas las celdas para que esten según su tamaño
  WorkSheet.Cells.Columns.AutoFit;

  // Guardar el archivo
  WorkBook.SaveAs(FileNameXLS);

  // Cierra el archivo
  WorkBook.Close(FileNameXLS);

  // Salir de Excel
  Excel.Quit;

  // posicionar el registro donde estaba
  DBGrid.DataSource.DataSet.GotoBookmark(PBookmark);
  DBGrid.DataSource.DataSet.FreeBookmark(PBookmark);
  DBGrid.DataSource.DataSet.EnableControls;
end;

procedure 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
  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
    tjornales.Locate('id', qjornalesid.AsString, [locaseinsensitive]);
    tjornales.edit;
    tfechajornal.SetFocus;
  end
  else
  begin
    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;
  dm.DBagrigest.Disconnect;
  { dm.tempresa.close;
    dm.qproductos.close;
    dm.tproductos.close;
    dm.tmateriasprimas.close;
    dm.qmateriasprimas.close;
    dm.ttipohoras.close;
    dm.qtipohoras.close;
    dm.ttipotrabajo.close;
    dm.qtrabajos.close;
    dm.qtrabajosalmacen.close;
    dm.ttrabajosalmacen.close;
    dm.qcampanyas.close;
    dm.qlincampanyas.close;
    dm.qseries.close;
    qarticulocomision.close;
    qarticulotransporte.close;
    qarticulosotros.Close;
  }
  dm.tempresa.Open;
  dm.qproductos.Open;
  dm.tproductos.Open;
  dm.tmateriasprimas.Open;
  dm.qmateriasprimas.Open;
  dm.ttipohoras.Open;
  dm.qtipohoras.Open;
  dm.ttipotrabajo.Open;
  dm.qtrabajos.Open;
  dm.qtrabajosalmacen.Open;
  dm.ttrabajosalmacen.Open;
  dm.qcampanyas.Open;
  dm.qlincampanyas.Open;
  dm.qseries.Open;
  qfamilias.Open;
  qarticulocomision.Open;
  qarticulotransporte.Open;
  qarticulosotros.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;
  tjornales.Append;

end;

procedure TBASE.BtjornalesClick(Sender: TObject);
var
  anyo, mes, dia: word;
  filtro, fdesde, fhasta: string;
begin
  dm.DBagrigest.Disconnect;
  fechajornales.Date := Date;
  fechaanticipos.Date := Date;
  Timer1.Enabled := false;
  filtro := '';
  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');
  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 := strtodate('01/' + floattostr(mes) + '/' +
    floattostr(anyo));
  listaanyos.ItemIndex := anyo - 2014;
  listameses.ItemIndex := mes;
  nomlhhasta.Date := Date;
  nomlhdesde.Date := strtodate('01/' + floattostr(mes) + '/' +
    floattostr(anyo));
  nomltthasta.Date := Date;
  nomlttdesde.Date := strtodate('01/' + floattostr(mes) + '/' +
    floattostr(anyo));
  // nomantfechahasta.Date:=date;
  // nomantfechadesde.Date:=strtodate('01/'+floattostr(mes)+'/'+floattostr(anyo));
  pagnomfechahasta.Date := Date;
  pagnomfechadesde.Date := strtodate('01/' + floattostr(mes) + '/' +
    floattostr(anyo));
  decodedate(nomfechadesde.Date, anyo, mes, dia);
  fdesde := floattostr(anyo) + '-' + floattostr(mes) + '-' + floattostr(dia);
  filtro := ' where fecha>=' + '''' + fdesde + '''';
  decodedate(nomfechahasta.Date, anyo, mes, dia);
  fhasta := floattostr(anyo) + '-' + floattostr(mes) + '-' + floattostr(dia);
  filtro := filtro + ' and fecha<=' + '''' + fhasta + '''';
  filtro := filtro + ' order by trabajador asc,fecha desc';

  { dm.qnominasdetalle.Close;
    dm.qnominasdetalle.SQL.Clear;
    dm.qnominasdetalle.SQL.Add('select * from trabajo_diario '+filtro);
    dm.qnominasdetalle.Open;
    dm.qanticiposdetalle.Close;
    dm.qanticiposdetalle.SQL.Clear;
    dm.qanticiposdetalle.SQL.Add('select * from anticipos '+filtro);
    dm.qanticiposdetalle.Open;
  }
  dm.tempresa.Open;
  qempleados.Open;
  dm.qtipohoras2.Open;
  dm.qtrabajadores2.Open;
  dm.qlistadohoras.Open;

  tjornales.Open;
  dm.tanticipos.Open;

  btactualizarempleadosnominas.Click;
  qgrupostrabajadores2.Close;
  qgrupostrabajadores2.Open;
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;

    if dm.qaux1.RecordCount = 1 then
    begin
      dm.tnominasdetalle.Open;
      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.qnominas.Refresh;
      dm.tprenominas.Refresh;
    end;
    if dm.qaux1.RecordCount > 1 then
    begin
      dm.tnominasdetalle.Open;
      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.tprenominas.Refresh;
        dm.qaux1.Next;
      end;
    end;

  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';
        SaveDialog1.Execute();
        archivo := SaveDialog1.FileName;
        try
          ExportaraExcel(archivo, 'PLANTILLA EXTINCION', gridplantillaext);
        finally
          showmessage('Los datos han sido exportados correctamente a '
            + archivo);
        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';
        SaveDialog1.Execute();
        archivo := SaveDialog1.FileName;
        try
          ExportaraExcel(archivo, 'PLANTILLA COMUNICACION', gridplantillacomu);
        finally
          showmessage('Los datos han sido exportados correctamente a '
            + archivo);
        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
  anyo, mes, dia: word;
  fecha, fecha2, almacen, empresa, ventrancajas, ventrankg, vkilosremanipulados,
    ventrancajasremanipuladas, vcostocosechar, vkiloscosechados, vtipotrabajo,
    vkilosrecibidos, vkilostraspasados,vcajasdesperdicios,vkilosdesperdicios: string;
  vcostocosecharrecibidos, vcostecierre,vcostocosechartraspasados, vcostesinmt,
    vcostemanipulacion: string;
  horas, costo,vrecargoss: string;
  vfecha: tdatetime;
  id, valmacen, vempresa: Integer;
  c_cosechar: real;
begin
  decodedate(dmproduccion.qpartesdiariosfecha.AsDateTime, anyo, mes, dia);
  fecha := '''' + inttostr(anyo) + '-' + inttostr(mes) + '-' +
    inttostr(dia) + '''';
  almacen := dmproduccion.qpartesdiariosalmacen.AsString;
  empresa := dmproduccion.qpartesdiariosidempresa.AsString;
  valmacen := dmproduccion.qpartesdiariosalmacen.AsInteger;
  vempresa := dmproduccion.qpartesdiariosidempresa.AsInteger;
  vfecha := dmproduccion.qpartesdiariosfecha.AsDateTime;
  qaux.SQL.Clear;
  qaux.SQL.Add('select porc_segsocial from empresa where id=' + empresa);
  qaux.Open;
  vrecargoss:='1.'+qaux.Fields[0].AsString;
  qaux.SQL.Clear;
  qaux.SQL.Add('select tipo_trabajo from almacenes where id=' + almacen +
    ' and idempresa=' + empresa);
  qaux.Open;
  vtipotrabajo := '''' + qaux.Fields[0].AsString + '''';
  /// envases que entran
  ///
  qaux.SQL.Clear;
  qaux.SQL.Add('select sum(num_envases) 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.Open;
  ventrancajas := qaux.Fields[0].AsString;
  if ventrancajas = '' then
    ventrancajas := '0';

  /// kilos netos que entran
  qaux.SQL.Clear;
  qaux.SQL.Add('select sum(peso_neto) 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.Open;
  ventrankg := qaux.Fields[0].AsString;
  if ventrankg = '' then
    ventrankg := '0';
  ventrankg := stringreplace(ventrankg, ',', '.', [rfReplaceAll, rfIgnoreCase]);
  /// kilos netos y envases que entran remanipulados
  qaux.SQL.Clear;
  qaux.SQL.Add
    ('select sum(peso_neto),sum(num_envases) from v_ea_pesadaslotes where iddestino='
    + almacen + ' and fechatrabajo=' + fecha + ' and remanipulado=1');
  qaux.Open;
  vkilosremanipulados := qaux.Fields[0].AsString;
  if vkilosremanipulados = '' then
    vkilosremanipulados := '0';
  vkilosremanipulados := stringreplace(vkilosremanipulados, ',', '.',
    [rfReplaceAll, rfIgnoreCase]);
  ventrancajasremanipuladas := qaux.Fields[1].AsString;
  if ventrancajasremanipuladas = '' then
    ventrancajasremanipuladas := '0';

  { /// envases que entran remanipulados
    qaux.SQL.Clear;
    qaux.SQL.Add('select sum(num_envases) from v_ea_pesadaslotes where iddestino='+almacen+' and fechatrabajo='+fecha+' and remanipulado=1');
    qaux.open;
    ventrancajasremanipuladas:=qaux.Fields[0].AsString;
    if ventrancajasremanipuladas='' then ventrancajasremanipuladas:='0';
  }
  dmproduccion.qentran.Close;
  dmproduccion.qentran.Prepare;
  dmproduccion.qentran.ParamByName('ALMACEN').AsInteger := valmacen;
  dmproduccion.qentran.ParamByName('FECHA').AsDate := vfecha;
  dmproduccion.qentran.Open;
  qaux.SQL.Clear;
  qaux.SQL.Add('update almacenes_partesdiarios a set entran_cajas_remani=' +
    ventrancajasremanipuladas + ',kilos_remanipulacion=' + vkilosremanipulados +
    ',entran_kg=' + ventrankg + ',entran_cajas=' + ventrancajas +
    ' where almacen=' + almacen + ' and a.fecha=' + fecha);
  qaux.ExecSQL;

  /// coste de cosechar kilos en camara

  qaux2.SQL.Clear;
  qaux2.SQL.Add
    ('select distinct(fecha) from ea_pesadas where idea>0 and iddestino=' +
    almacen + ' and fechatrabajo=' + fecha + '');
  qaux2.Open;
  if qaux2.RecordCount > 0 then
  begin
    while not qaux2.Eof do
    begin
      decodedate(qaux2.Fields[0].AsDateTime, anyo, mes, dia);
      fecha2 := '''' + inttostr(anyo) + '-' + inttostr(mes) + '-' +
        inttostr(dia) + '''';

      qaux.SQL.Clear;
      qaux.SQL.Add('select kiloscosechados from v_cosechadia where empresa=' +
        empresa + ' and fecha=' + fecha2 + ' and tipotrabajo=' + vtipotrabajo);
      qaux.Open;
      vkiloscosechados := qaux.Fields[0].AsString;
      if vkiloscosechados = '' then
        vkiloscosechados := '0';
      vkiloscosechados := stringreplace(vkiloscosechados, ',', '.',
        [rfReplaceAll, rfIgnoreCase]);
      if vkiloscosechados <> '0' then
      begin
        qaux.SQL.Clear;
        qaux.SQL.Add
          ('select (total*'+vrecargoss+')/' + vkiloscosechados +
          ' from v_trabajosdia where empresa=' + empresa + ' and fecha=' +
          fecha2 + ' and tipotrabajo=' + vtipotrabajo);
        qaux.Open;
        vcostocosechar := qaux.Fields[0].AsString;
      end
      else
        vcostocosechar := '0';
      if vcostocosechar = '' then
        vcostocosechar := '0';
      vcostocosechar := stringreplace(vcostocosechar, ',', '.',
        [rfReplaceAll, rfIgnoreCase]);
      qaux.SQL.Clear;
      qaux.SQL.Add('update ea_pesadas as ea set ea.id_palet2=' + '''' +
        'FACTURANDO' + '''' + ',ea.costo_cosechar=ea.peso_neto*' +
        vcostocosechar + ' WHERE ea.iddestino=' + almacen + ' and ea.fecha=' +
        fecha2 + ' and ea.fechatrabajo=' + fecha);
      qaux.ExecSQL;

      qaux.SQL.Clear;
      qaux.SQL.Add('update ea_pesadas as ea set ea.id_palet2=' + '''' +
        'FACTURANDO' + '''' + ',ea.costo_cosechar=0 WHERE  ea.iddestino=' +
        almacen + ' and ea.fecha=' + fecha2 + ' and ea.fechatrabajo=' + fecha +
        ' and ea.tipo_trabajo=' + '''' + '''');
      qaux.ExecSQL;
      qaux2.Next;
    end;
    qaux.SQL.Clear;
    qaux.SQL.Add
      ('select sum(costo_cosechar) from v_ea_pesadaslotes where iddestino=' +
      almacen + ' and fechatrabajo=' + fecha + ' and remanipulado=1');
    qaux.Open;
    if qaux.Fields[0].AsString <> '0' then
      c_cosechar := c_cosechar + qaux.Fields[0].AsFloat
    else
      c_cosechar := 0;
    qaux.SQL.Clear;
    qaux.SQL.Add
      ('select sum(costetotal) 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.Open;
    if qaux.Fields[0].AsString <> '0' then
      c_cosechar := c_cosechar + qaux.Fields[0].AsFloat;
    qaux.SQL.Clear;
    qaux.SQL.Add
      ('select sum(costetotal) from v_costesrestosdia where fecha=' + fecha + ' and ide='
      + empresa + ' and idalmacen=' + almacen );
    qaux.Open;
    if qaux.Fields[0].AsString <> '0' then
      c_cosechar := c_cosechar - qaux.Fields[0].AsFloat;
    vcostecierre:= floattostr(qaux.fields[0].asfloat);
    vcostocosechar := floattostr(c_cosechar);
    if vcostocosechar = '' then
      vcostocosechar := '0';
    vcostocosechar := stringreplace(vcostocosechar, ',', '.',
      [rfReplaceAll, rfIgnoreCase]);
    if vcostecierre = '' then
      vcostecierre := '0';
      vcostecierre := stringreplace(vcostecierre, ',', '.',
      [rfReplaceAll, rfIgnoreCase]);
    qaux.SQL.Clear;
    qaux.SQL.Add('update almacenes_partesdiarios a set coste_cierre='+vcostecierre+',coste_corte_remanipu=' +
      vcostocosechar +' where almacen=' + almacen + ' and a.fecha=' + fecha);
    qaux.ExecSQL;
  end;

  /// envases,envases de venta, kilos y kilos venta,kilos producidos que salen
  dmproduccion.qsalen.Close;
  dmproduccion.qsalen.Prepare;
  dmproduccion.qsalen.ParamByName('ALMACEN').AsInteger := valmacen;
  dmproduccion.qsalen.ParamByName('FECHA').AsDate := vfecha;
  dmproduccion.qsalen.ParamByName('ALMACEN2').AsInteger := valmacen;
  dmproduccion.qsalen.ParamByName('FECHA2').AsDate := vfecha;
  dmproduccion.qsalen.Open;

  dmproduccion.qdesperdicios.Close;
  dmproduccion.qdesperdicios.Prepare;
  dmproduccion.qdesperdicios.ParamByName('ALMACEN').AsInteger := valmacen;
  dmproduccion.qdesperdicios.ParamByName('FECHA').AsDate := vfecha;
  dmproduccion.qdesperdicios.Open;
  dmproduccion.qactualizar.SQL.Clear;

  dmproduccion.qactualizar.SQL.Add
    ('update almacenes_partesdiarios a set salen_cajas=' +
    dmproduccion.qsalennum_envases.AsString + ',salen_cajas_venta=' +
    dmproduccion.qsalennum_envases.AsString + ',salen_kg=' +
    stringreplace(dmproduccion.qsalenpeso_neto.AsString, ',', '.',
    [rfReplaceAll, rfIgnoreCase]) + ',kg_producidos_venta=' +
    stringreplace(dmproduccion.qsalenpeso_neto_venta.AsString, ',', '.',
    [rfReplaceAll, rfIgnoreCase]) + ',kg_producidos=' +
    stringreplace(dmproduccion.qsalenpeso_neto.AsString, ',', '.',
    [rfReplaceAll, rfIgnoreCase]));

  // dmproduccion.qactualizar.SQL.Add('update almacenes_partesdiarios a set salen_cajas=(select sum(num_envases) from v_ea_pesadaslotes where idorigen='+almacen+' and (fecha=a.fecha) and idea=0 and mprima_p in (select id from materias_primas where desechos=0))');
  dmproduccion.qactualizar.SQL.Add(' where almacen=' + almacen +
    ' and a.fecha=' + fecha);
  dmproduccion.qactualizar.ExecSQL;
  /// kilos que salen         revisar
  // dmproduccion.qactualizar.SQL.Clear;
  // dmproduccion.qactualizar.SQL.Add('update almacenes_partesdiarios a set salen_kg=(select sum(peso_neto) from v_ea_pesadaslotes where idorigen='+almacen+' and (fecha=a.fecha) and idea=0 and mprima_p in (select id from materias_primas where desechos=0))');
  // dmproduccion.qactualizar.SQL.Add(' where almacen='+almacen+' and a.fecha='+fecha);
  // dmproduccion.qactualizar.ExecSQL;
  { /// envases que salen venta  revisar
    dmproduccion.qactualizar.SQL.Clear;
    dmproduccion.qactualizar.SQL.Add('update almacenes_partesdiarios a set salen_cajas_venta=(select sum(num_envases) from v_ea_pesadaslotes where idorigen='+almacen+' and (fecha=a.fecha) and idea=0 and mprima_p in (select id from materias_primas where desechos=0))');
    dmproduccion.qactualizar.SQL.Add(' where almacen='+almacen+' and a.fecha='+fecha);
    dmproduccion.qactualizar.ExecSQL; }
  /// kilos producidos venta   revisar
  // dmproduccion.qactualizar.SQL.Clear;
  // dmproduccion.qactualizar.SQL.Add('update almacenes_partesdiarios a set kg_producidos_venta=(select sum(peso_neto_teorico) from v_ea_pesadaslotes where idorigen='+almacen+' and (fecha=a.fecha) and idea=0 and mprima_p in (select id from materias_primas where desechos=0))');
  // dmproduccion.qactualizar.SQL.Add(' where almacen='+almacen+' and a.fecha='+fecha);
  // dmproduccion.qactualizar.ExecSQL;
  /// kilos producidos   revisar
  // dmproduccion.qactualizar.SQL.Clear;
  // dmproduccion.qactualizar.SQL.Add('update almacenes_partesdiarios a set kg_producidos=(select sum(peso_neto) from v_ea_pesadaslotes where idorigen='+almacen+' and (fecha=a.fecha) and idea=0 and mprima_p in (select id from materias_primas where desechos=0))');
  // dmproduccion.qactualizar.SQL.Add(' where almacen='+almacen+' and a.fecha='+fecha);
  // dmproduccion.qactualizar.ExecSQL;
  /// kilos y envases de desperdicios

  vcajasdesperdicios:=stringreplace(dmproduccion.qdesperdiciosnum_envases.AsString, ',', '.',
    [rfReplaceAll, rfIgnoreCase]);
  vkilosdesperdicios:=stringreplace(dmproduccion.qdesperdiciospeso_neto.AsString, ',', '.',
    [rfReplaceAll, rfIgnoreCase]);
  if vcajasdesperdicios='' then vcajasdesperdicios:='0';
  if vkilosdesperdicios='' then vkilosdesperdicios:='0';
  dmproduccion.qactualizar.SQL.Clear;
  dmproduccion.qactualizar.SQL.Add
    ('update almacenes_partesdiarios a set salen_envases_desp=' +
   vcajasdesperdicios + ',kg_desperdicios=' +vkilosdesperdicios);
  // dmproduccion.qactualizar.SQL.Add('update almacenes_partesdiarios a set kg_desperdicios=(select sum(peso_neto) from v_ea_pesadaslotes where idorigen='+almacen+' and (fecha=a.fecha or fechatrabajo=a.fecha) and idea=0 and mprima_p in (select id from materias_primas where desechos=1))');
  dmproduccion.qactualizar.SQL.Add(' where almacen=' + almacen +
    ' and a.fecha=' + fecha);
  dmproduccion.qactualizar.ExecSQL;
  /// envases desperdicios  revisar
  // dmproduccion.qactualizar.SQL.Clear;
  // dmproduccion.qactualizar.SQL.Add('update almacenes_partesdiarios a set salen_envases_desp=(select sum(num_envases) from v_ea_pesadaslotes where idorigen='+almacen+' and fecha=a.fecha and idea=0 and mprima_p in (select id from materias_primas where desechos=1))');
  // dmproduccion.qactualizar.SQL.Add(' where almacen='+almacen+' and a.fecha='+fecha);
  // dmproduccion.qactualizar.ExecSQL;
  // costo materia prima
  dmproduccion.qactualizar.SQL.Clear;
  dmproduccion.qactualizar.SQL.Add
    ('update almacenes_partesdiarios a set costo_kg_mprima=(select sum(costo_sinmt) from v_ea_pesadaslotes where iddestino='
    + almacen +
    ' and fechatrabajo=a.fecha and idea>0 and remanipulado=0) where a.almacen='
    + almacen + ' and a.fecha=' + fecha);
  dmproduccion.qactualizar.ExecSQL;
  // costo materia prima remanipulada
  dmproduccion.qactualizar.SQL.Clear;
  dmproduccion.qactualizar.SQL.Add
    ('update almacenes_partesdiarios a set costo_kg_mprima_remanip=(select sum(costo_sinmt) from v_ea_pesadaslotes where iddestino='
    + almacen + ' and fechatrabajo=a.fecha and remanipulado=1) where a.almacen='
    + almacen + ' and a.fecha=' + fecha);
  dmproduccion.qactualizar.ExecSQL;
  /// costo generadores
  dmproduccion.qactualizar.SQL.Clear;
  dmproduccion.qactualizar.SQL.Add
    ('update almacenes_partesdiarios a set costo_gen_camara=(select sum(gen_caja*num_envases)*(select coste_kg_gen from empresa where id='
    + dmproduccion.qpartesdiariosidempresa.AsString +
    ') from ea_pesadas where iddestino=' + almacen +
    ' and fechatrabajo=a.fecha and idea<>0) where almacen=' + almacen +
    ' and a.fecha=' + fecha);
  dmproduccion.qactualizar.ExecSQL;
  /// costo camara
  { qaux.sql.clear;
    qaux.sql.add('update ea_pesadas set id_palet2='+''''+'TRIGGER_OFF'+''''+',costo_camara=peso_neto*0.002*dias_camara where dias_camara>0 and fechatrabajo='+fecha+' and iddestino='+almacen);
    qaux.execsql; }

  dmproduccion.qactualizar.SQL.Clear;
  dmproduccion.qactualizar.SQL.Add
    ('update almacenes_partesdiarios a set costo_acumulado=(select sum(costo_camara) from v_ea_pesadaslotes where iddestino='
    + almacen + ' and fechatrabajo=a.fecha ) where almacen=' + almacen +
    ' and a.fecha=' + fecha); // and idea<>0
  dmproduccion.qactualizar.ExecSQL;
  /// horas de campo realizadas en el dia  en comentario porque no se muestra

  /// costo de los jornales en el campo
  dmproduccion.qactualizar.SQL.Clear;
  dmproduccion.qactualizar.SQL.Add
    ('update almacenes_partesdiarios a set costo_jornales_campo=(select sum(costo_cosechar) from v_ea_pesadaslotes where iddestino='
    + almacen + ' and fechatrabajo=a.fecha and remanipulado=0) where almacen=' +
    almacen + ' and a.fecha=' + fecha);
  dmproduccion.qactualizar.ExecSQL;

  /// horas y costo de manipulacion del dia
  qaux.SQL.Clear;
  qaux.SQL.Add('select sum(horas),sum(total) 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.Open;
  if qaux.Fields[0].AsString = '' then
  begin
    horas := '0';
    costo := '0';
  end
  else
  begin
    horas := stringreplace(qaux.Fields[0].AsString, ',', '.',
      [rfReplaceAll, rfIgnoreCase]);
    costo := stringreplace(qaux.Fields[1].AsString, ',', '.',
      [rfReplaceAll, rfIgnoreCase]);
  end;

  dmproduccion.qactualizar.SQL.Clear;
  dmproduccion.qactualizar.SQL.Add
    ('update almacenes_partesdiarios a set horas_jornales=' + horas +
    ',costo_jornales=' + costo + ' where almacen=' + almacen +
    ' and a.fecha=' + fecha);
  dmproduccion.qactualizar.ExecSQL;

  /// costo de manipulacion

  /// costo de limpieza
  qaux.SQL.Clear;
  qaux.SQL.Add('select sum(horas),sum(total) 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.Open;
  if qaux.Fields[0].AsString = '' then
  begin
    horas := '0';
    costo := '0';
  end
  else
  begin
    horas := stringreplace(qaux.Fields[0].AsString, ',', '.',
      [rfReplaceAll, rfIgnoreCase]);
    costo := stringreplace(qaux.Fields[1].AsString, ',', '.',
      [rfReplaceAll, rfIgnoreCase]);
  end;

  dmproduccion.qactualizar.SQL.Clear;
  dmproduccion.qactualizar.SQL.Add
    ('update almacenes_partesdiarios a set coste_limpieza=' + costo +
    ' where almacen=' + almacen + ' and a.fecha=' + fecha);
  dmproduccion.qactualizar.ExecSQL;
  ///
  /// costo de envasado
  qaux.SQL.Clear;
  qaux.SQL.Add('select sum(horas),sum(total) 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.Open;
  if qaux.Fields[0].AsString = '' then
  begin
    horas := '0';
    costo := '0';
  end
  else
  begin
    horas := stringreplace(qaux.Fields[0].AsString, ',', '.',
      [rfReplaceAll, rfIgnoreCase]);
    costo := stringreplace(qaux.Fields[1].AsString, ',', '.',
      [rfReplaceAll, rfIgnoreCase]);
  end;

  dmproduccion.qactualizar.SQL.Clear;
  dmproduccion.qactualizar.SQL.Add
    ('update almacenes_partesdiarios a set coste_envasado=' + costo +
    ' where almacen=' + almacen + ' and a.fecha=' + fecha);
  dmproduccion.qactualizar.ExecSQL;

  /// costo de apoyo
  qaux.SQL.Clear;
  qaux.SQL.Add('select sum(horas),sum(total) 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.Open;
  if qaux.Fields[0].AsString = '' then
  begin
    horas := '0';
    costo := '0';
  end
  else
  begin
    horas := stringreplace(qaux.Fields[0].AsString, ',', '.',
      [rfReplaceAll, rfIgnoreCase]);
    costo := stringreplace(qaux.Fields[1].AsString, ',', '.',
      [rfReplaceAll, rfIgnoreCase]);
  end;

  dmproduccion.qactualizar.SQL.Clear;
  dmproduccion.qactualizar.SQL.Add
    ('update almacenes_partesdiarios a set coste_apoyo=' + costo +
    ' where almacen=' + almacen + ' and a.fecha=' + fecha);
  dmproduccion.qactualizar.ExecSQL;

  /// costo de los materiales recuperados
  dmproduccion.qactualizar.SQL.Clear;
  dmproduccion.qactualizar.SQL.Add
    ('update almacenes_partesdiarios a set coste_env_rec=(select sum(precio) from ea_materiales where recuperado=-1 and (ide,idea,idea2) in ');
  dmproduccion.qactualizar.SQL.Add
    ('(select idempresa,id,idea from ea_pesadas where idempresa=' + empresa +
   ' and fechatrabajo=' + fecha + ' and iddestino=' + almacen);
  dmproduccion.qactualizar.SQL.Add(')) where a.idempresa=' + empresa +
    ' and almacen=' + almacen + ' and a.fecha=' + fecha);




 {  dmproduccion.qactualizar.SQL.Add
    ('update almacenes_partesdiarios a set coste_env_rec=(select sum(costo_materiales) FROM ea_pesadas ea ');
  // v_ea_pesadaslotes ea ');
  dmproduccion.qactualizar.SQL.Add(' WHERE ea.idempresa=' + empresa +
    ' and ea.iddestino=' + almacen +
    ' and ea.recuperar_envases=1 and ea.fechatrabajo=' + fecha);
  dmproduccion.qactualizar.SQL.Add(') where a.idempresa=' + empresa +
    ' and a.almacen=' + almacen + ' and a.fecha=' + fecha);  }
  dmproduccion.qactualizar.ExecSQL;

  /// costo de los materiales empleados

  dmproduccion.qactualizar.SQL.Clear;
  dmproduccion.qactualizar.SQL.Add
    ('update almacenes_partesdiarios a set costo_materiales=(select sum(precio) from ea_materiales where (ide,idea,idea2) in ');
  dmproduccion.qactualizar.SQL.Add
    ('(select idempresa,id,idea from ea_pesadas where idempresa=' + empresa +
    ' and fechatrabajo=' + fecha + ' and idea<>0 and iddestino=' + almacen);
  dmproduccion.qactualizar.SQL.Add(' union ');
  dmproduccion.qactualizar.SQL.Add
    (' select idempresa,id,idea from ea_pesadas where idempresa=' + empresa +
    ' and fecha=' + fecha + ' and idea=0 and idorigen=' + almacen + ')');
  dmproduccion.qactualizar.SQL.Add(') where a.idempresa=' + empresa +
    ' and almacen=' + almacen + ' and a.fecha=' + fecha);
  dmproduccion.qactualizar.ExecSQL;
  id := dmproduccion.qpartesdiariosid.AsInteger;
  dmproduccion.qpartesdiarios.Refresh; // Refresh;
  dmproduccion.qpartesdiarios.Locate('id', id,
    [locaseinsensitive, lopartialkey]);
  /// costo sin materiales de los palets elaborados
  vcostesinmt := dmproduccion.qpartesdiarioscostekgfinal_sinmt.AsString;
  if vcostesinmt = '' then
    vcostesinmt := '0';
  vcostesinmt := stringreplace(vcostesinmt, ',', '.',
    [rfReplaceAll, rfIgnoreCase]);
  vcostemanipulacion :=
    floattostr(dmproduccion.qpartesdiariostotal_costes_jornales.AsFloat /
    dmproduccion.qpartesdiarioskg_producidos_venta.AsFloat);
  if vcostemanipulacion = '' then
    vcostemanipulacion := '0';
  vcostemanipulacion := stringreplace(vcostemanipulacion, ',', '.',
    [rfReplaceAll, rfIgnoreCase]);

  qaux.SQL.Clear;
  qaux.SQL.Add('update ea_pesadas as ea set ea.coste_manipulacion=' +
    vcostemanipulacion + '*peso_neto,ea.id_palet2=' + '''' + 'ACTUALIZANDO' +
    '''' + ',temperatura=' + vcostesinmt + ' WHERE ea.fecha='
    + fecha + ' and idea<=0 and idorigen='
    + almacen);     /// le he quitado +coste_manipulacion
  qaux.ExecSQL;

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;

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;
  F: TextFile;

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 := dm.tempresanombre.AsString;
  txnombre := stringreplace(txnombre, 'Ñ', 'N', [rfReplaceAll]);
  txnombre := stringreplace(txnombre, '/', '?', [rfReplaceAll]);
  txnombre := stringreplace(txnombre, 'º', '?', [rfReplaceAll]);
  txbic := dm.tempresacc_bic.AsString;
  txdireccion := dm.tempresadireccion.AsString;
  txdireccion2 := dm.tempresacodpost.AsString + ' ' +
    dm.tempresapoblacion.AsString + ' . .';
  txdireccion := stringreplace(txdireccion, '/', '?', [rfReplaceAll]);
  txdireccion := stringreplace(txdireccion, 'º', '?', [rfReplaceAll]);
  txdireccion := stringreplace(txdireccion, 'Ñ', 'N', [rfReplaceAll]);
  txdireccion2 := stringreplace(txdireccion2, '/', '?', [rfReplaceAll]);
  txdireccion2 := stringreplace(txdireccion2, 'º', '?', [rfReplaceAll]);
  txdireccion2 := stringreplace(txdireccion2, 'Ñ', 'N', [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;
  AssignFile(F, ExtractFilePath(Application.ExeName) + 'NOMINA.XML');
  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>' + txnif + '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>' + txnombre + '</Nm><Id><OrgId><Othr><Id>' + txnif
    + '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>' + txnombre + '</Nm>');
  WriteLn(F, '<PstlAdr><Ctry>ES</Ctry><AdrLine>' + txdireccion +
    '</AdrLine><AdrLine>' + txdireccion2 +
    '</AdrLine></PstlAdr></Dbtr><DbtrAcct><Id>');
  WriteLn(F, '<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 := stringreplace(dm.tnominasdetalleNOMBRE.AsString, 'Ñ', 'N',
      [rfReplaceAll]);
    txdireccion := stringreplace(dm.tnominasdetalledireccion.AsString, '/', '?',
      [rfReplaceAll]);
    txdireccion := stringreplace(txdireccion, 'º', '?', [rfReplaceAll]);
    txdireccion := stringreplace(txdireccion, 'Ñ', 'N', [rfReplaceAll]);
    txtotalapagar := FormatFloat(',0.00',
      dm.tnominasdetalletotalapagar.AsFloat);
    txtotalapagar := stringreplace(txtotalapagar, '.', '', [rfReplaceAll]);
    txtotalapagar := stringreplace(txtotalapagar, ',', '.', [rfReplaceAll]);

    WriteLn(F, '<CdtTrfTxInf><PmtId><EndToEndId>' +
      dm.tnominasdetalleNIF.AsString + '-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>' +
      dm.tnominasdetalleCP.AsString + ' ' + dm.tnominasdetallePOBLACION.AsString
      + ' . .</AdrLine></PstlAdr></Cdtr>');
    WriteLn(F, '<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;

  WriteLn(F, '</PmtInf></CstmrCdtTrfInitn></Document><!-- AGRIGEST 34 XML -->');
  CloseFile(F);
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);
  finally
    showmessage
      ('Los datos han sido exportados correctamente a C:\AGRIGEST\salidas.XLSX');

  end;
end;

procedure TBASE.btJborrarClick(Sender: TObject);
begin
  tjornales.Locate('id', dm.qnominasdetalleid.AsInteger,
    [locaseinsensitive, lopartialkey]);
  tjornales.Delete;
  btactualizarempleadosnominas.Click;
end;

procedure TBASE.btJcancelarClick(Sender: TObject);
begin
  if 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';
  SaveDialog1.Execute();
  archivo := SaveDialog1.FileName;

  try
    ExportaraExcel(archivo, 'JORNALES', DBGrid4);
  finally
    showmessage('Los datos han sido exportados correctamente a ' + archivo);
  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 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;
        nomfechadesde.Date := fechajornales.Date;
        nomfechahasta.Date := fechajornales.Date;
        btactualizarempleadosnominas.Click;
      end;
    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';
  SaveDialog1.Execute();
  archivo := SaveDialog1.FileName;
  try
    ExportaraExcel(archivo, 'STOCK', DBGrid38);
  finally
    showmessage('Los datos han sido exportados correctamente');
  end;

end;

procedure TBASE.btactualizarempleadosnominasClick(Sender: TObject);
var
  anyo, mes, dia: word;
  filtro, filtro2, filtro3, fdesde, fhasta, filtrogrupo,
    filtrotrabajador: string;
  idt, filtrojornales, tempdia, tempmes: string;
begin
  filtro := '';

  decodedate(nomfechadesde.Date, anyo, mes, dia);
  tempdia := floattostr(dia);
  if Length(tempdia) = 1 then
    tempdia := '0' + tempdia;
  tempmes := floattostr(mes);
  if Length(tempmes) = 1 then
    tempmes := '0' + tempmes;

  fdesde := '''' + floattostr(anyo) + '-' + tempmes + '-' + tempdia + '''';
  decodedate(nomfechahasta.Date, anyo, mes, dia);
  tempdia := floattostr(dia);
  if Length(tempdia) = 1 then
    tempdia := '0' + tempdia;
  tempmes := floattostr(mes);
  if Length(tempmes) = 1 then
    tempmes := '0' + tempmes;
  fhasta := '''' + floattostr(anyo) + '-' + tempmes + '-' + tempdia + '''';

  if qgrupostrabajadores2id.AsInteger > 0 then
  begin
    filtrogrupo := ' and idt in (select id from trabajadores where activo=' +
      inttostr(qgrupostrabajadores2id.AsInteger) + ')';
  end
  else
    filtrogrupo := '';
  if tbuscarnominas.Text <> '' then
  begin
    filtrogrupo := '';
    filtrotrabajador :=
      ' and idt in (select id from trabajadores where nombre like(' + '''' + '%'
      + tbuscarnominas.Text + '%' + '''' + '))';
  end;

  filtro := ' where fecha>=' + fdesde;
  filtro := filtro + ' and fecha<=' + fhasta;
  filtro := filtro + filtrogrupo + filtrotrabajador;

  { dm.qempleados.Close;
    dm.qempleados.SQL.Clear;
    dm.qempleados.SQL.Add('select distinct(idt),trabajador from trabajo_diario ');
    dm.qempleados.sql.add(filtro);
    dm.qempleados.sql.add(' order by trabajador asc');
    dm.qempleados.Open;

    filtro:='';
    filtro:=' where fecha>='+fdesde;
    filtro:=filtro+' and fecha<='+fhasta; }
  filtro := filtro + ' order by trabajador asc,fecha asc';
  dm.qnominasdetalle.Close;
  dm.qnominasdetalle.SQL.Clear;
  dm.qnominasdetalle.SQL.Add('select * from trabajo_diario ' + filtro);
  dm.qnominasdetalle.Open;
  dm.qanticiposdetalle.Close;
  dm.qanticiposdetalle.SQL.Clear;
  dm.qanticiposdetalle.SQL.Add('select * from anticipos ' + filtro);
  dm.qanticiposdetalle.Open;
  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;

  idt := qempleadosid.AsString;
  if idt <> '' then
  begin
    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 idt desc';
    qjornales.Close;
    qjornales.SQL.Clear;
    qjornales.SQL.Add('select * from trabajo_diario ' + filtrojornales);
    qjornales.Open;
  end;
  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;

  // 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; }
  {
    dmproduccion.qpartesdiarios.close;
    dmproduccion.qentradas.close;
    dmproduccion.qentradas2.close;
    dmproduccion.qsalidas.close;
    dmproduccion.qsalidas2.close;

    dmproduccion.qpartesdiarios.Open;
    dmproduccion.qentradas.Open;
    dmproduccion.qentradas2.Open;
    dmproduccion.qsalidas.Open;
    dmproduccion.qsalidas2.Open; }

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);
  finally
    showmessage
      ('Los datos han sido exportados correctamente a C:\AGRIGEST\STOCK' +
      dm.qalmacenesnombre.AsString + '.XLSX');

  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';
  SaveDialog1.Execute();
  archivo := SaveDialog1.FileName;
  try
    ExportaraExcel(archivo, 'STOCK', DBGrid36);
  finally
    showmessage('Los datos han sido exportados correctamente');
  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
  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';
  SaveDialog1.Execute();
  archivo := SaveDialog1.FileName;

  try
    ExportaraExcel(archivo, 'ANTICIPOS', DBGrid5);
  finally
    showmessage('Los datos han sido exportados correctamente a ' + archivo);
  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 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;
        nomfechadesde.Date := fechajornales.Date;
        nomfechahasta.Date := fechajornales.Date;
        btactualizarempleadosnominas.Click;
      end;
    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
  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
  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]);
  SaveDialog1.Execute();
  archivo := SaveDialog1.FileName;

  try
    ExportaraExcel(archivo, 'entradas', DBGrid63);
  finally
    showmessage('Los datos han sido exportados correctamente');
  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]);
  SaveDialog1.Execute();
  archivo := SaveDialog1.FileName;

  try
    ExportaraExcel(archivo, 'entradas', DBGrid63);
  finally
    showmessage('Los datos han sido exportados correctamente');
  end;
end;

procedure TBASE.Button44Click(Sender: TObject);
var
  archivo: string;
begin

  SaveDialog1.FileName :=
    stringreplace(('ENVASADOS-' + dmproduccion.qpartesdiariosnombre_almacen.
    AsString + '-' + dmproduccion.qpartesdiariosfecha.AsString + '.xlsx'), '/',
    '-', [rfReplaceAll]);
  SaveDialog1.Execute();
  archivo := SaveDialog1.FileName;

  try
    ExportaraExcel(archivo, 'envasados', DBGrid62);
  finally
    showmessage('Los datos han sido exportados correctamente');
  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]);
  SaveDialog1.Execute();
  archivo := SaveDialog1.FileName;

  try
    ExportaraExcel(archivo, 'entradas', DBGrid59);
  finally
    showmessage('Los datos han sido exportados correctamente');
  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]);
  SaveDialog1.Execute();
  archivo := SaveDialog1.FileName;

  try
    ExportaraExcel(archivo, 'entradas', DBGrid60);
  finally
    showmessage('Los datos han sido exportados correctamente');
  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;
  SaveDialog1.Execute();
  archivo := SaveDialog1.FileName;
  try
    ExportaraExcel(archivo, 'GASTOS', DBGrid42);
  finally
    showmessage('Los datos han sido exportados correctamente');

  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: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;
  qasistencia.Open;

  dm.qnominasdetalle.First;
  while not dm.qnominasdetalle.Eof do
  begin
    decodedate(dm.qnominasdetallefecha.AsDateTime,tanyo,tmes,tdia);
    vdia:=tdia;
    vanyo:=tanyo;
    vhoras:=floattostr(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;
    qempleados.Locate('ide,id',vararrayof([vide,vidt]),[locaseinsensitive]);
    vnif:=qempleadosnif.asstring;
    vnombre:=qempleadosnombre.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;
      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 qasistenciad18.asstring=' ' then qasistenciad18.value:=vhoras else qasistenciad18.Value:=floattostr(strtofloat(qasistenciad18.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;
    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 * from v_emp_asistencia where ide=:EMPRESA and anyo=:ANYO and mes=:MES order by anyo,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';
    savedialog1.Execute();
    archivo:=savedialog1.FileName;
    try
    Exportaraexcel(archivo,'PARTE',GRIDASISTENCIA);
    finally
      showmessage('Los datos han sido exportados correctamente a '+archivo);
    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';
  SaveDialog1.Execute();
  archivo := SaveDialog1.FileName;

  try
    ExportaraExcel(archivo, 'JORNADAS', DBGrid76);
  finally
    showmessage('Los datos han sido exportados correctamente a ' + archivo);
  end;

end;

procedure TBASE.Button57Click(Sender: TObject);
var
  archivo: string;
begin
  SaveDialog1.FileName := 'JORNADAS POR GRUPOOS.xlsx';
  SaveDialog1.Execute();
  archivo := SaveDialog1.FileName;

  try
    ExportaraExcel(archivo, 'JORNADAS', DBGrid43);
  finally
    showmessage('Los datos han sido exportados correctamente a ' + archivo);
  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);
begin
  while not dm.qnominasdetalle.Eof do
  begin
    tjornales.Locate('id', dm.qnominasdetalleid.AsInteger,
      [locaseinsensitive, lopartialkey]);
    tjornales.Delete;
    dm.qnominasdetalle.Next;
  end;
  dm.qnominasdetalle.Refresh;
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);
  finally
    showmessage
      ('Los datos han sido exportados correctamente a C:\AGRIGEST\entradas.XLSX');

  end;
end;

procedure TBASE.btJimprimirClick(Sender: TObject);
begin
  informedb.DataSource := dm.dsqnominasdetalle;
  dm.qnominasdetalle.SortedFields := 'trabajador,fecha,parcela';
  dm.qnominasdetalle.SortType := stascending;
  informes.Report.Clear;
  informes.LoadFromFile('c:\agrigest\informes\JORNALESGENERAL.fr3');
  // informes.Report.FileName:=dm.qnominasdetalle.asstring;
  informes.ShowReport();
  informes.Clear
end;

procedure TBASE.btJmodificarClick(Sender: TObject);
var
  totaljornal: real;
begin
  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, anyo2, mes2, dia2: word;
  filtro, fdesde, fhasta, fdesde2, fhasta2, falta, iban, textor: string;
  diaslaborables, maximodias, diascomputables, diascalculo,
    condiciones: Integer;
  irpf, desempleo, formacion, contingencias, salariobase, anticipos,
    indemnizacion, penalizacion: real;

begin
  condiciones := 0;
  if CheckBox2.Checked then
  begin
    condiciones := condiciones + 1;
  end;
  if CheckBox3.Checked then
  begin
    condiciones := condiciones + 1;
  end;
  if CheckBox4.Checked then
  begin
    condiciones := condiciones + 1;
  end;
  if CheckBox5.Checked then
  begin
    condiciones := condiciones + 1;
  end;

  dm.ttrabajadores.Open;
  dm.tempresa.Open;
  salariobase := dm.tempresasalariobasedia.AsFloat;;
  filtro := '';
  decodedate(nomfechadesde.Date, anyo, mes, dia);
  fdesde := floattostr(anyo) + '-' + floattostr(mes) + '-' + floattostr(dia);
  filtro := ' where estado<>' + '''' + 'P' + '''' + ' and estado<>' + '''' + 'S'
    + '''' + ' and fecha>=' + '''' + fdesde + '''';
  decodedate(nomfechahasta.Date, anyo, mes, dia);
  fhasta := floattostr(anyo) + '-' + floattostr(mes) + '-' + floattostr(dia);
  filtro := filtro + ' and fecha<=' + '''' + fhasta + '''';

  if CheckBox6.Checked then
  begin
    filtro := filtro +
      ' and articulo in (select codart from articulos where facturar=0)';
  end
  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;

  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('delete from prenominas');
  dm.qaux1.ExecSQL;

  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' + '''');
  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' + '''');
  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.SQL.Add('where articulo in (select codart from articulos where facturar=1) and estado='+''''+'C'+'''');
  // dm.qaux1.SQL.Add(' and fecha>='+''''+fdesde+''''+' and fecha<='+''''+fhasta+''''+' group by idt order by idt');
  dm.qaux1.Open;

  if dm.qaux1.RecordCount >= 1 then
  begin
    while not(dm.qaux1.Eof) do
    begin
      dm.ttrabajadores.Locate('id', dm.qaux1.Fields[0].AsInteger,
        [locaseinsensitive]);
      irpf := dm.ttrabajadoresirpf.AsFloat;
      desempleo := dm.ttrabajadoresdesempleo.AsFloat;
      formacion := dm.ttrabajadoresformacion.AsFloat;
      contingencias := dm.ttrabajadorescontingencias.AsFloat;
      if nomfechadesde.Date >= dm.ttrabajadoresfechaalta.AsDateTime then
      begin
        decodedate(nomfechadesde.Date, anyo2, mes2, dia2);
        fdesde2 := floattostr(anyo2) + '-' + floattostr(mes2) + '-' +
          floattostr(dia2);
      end
      else
      begin
        decodedate(dm.ttrabajadoresfechaalta.AsDateTime, anyo2, mes2, dia2);
        fdesde2 := floattostr(anyo2) + '-' + floattostr(mes2) + '-' +
          floattostr(dia2);

      end;

      if dm.ttrabajadoresFECHABAJA.AsString = '' then
      begin
        fhasta2 := fhasta;
      end
      else
      begin
        decodedate(dm.ttrabajadoresFECHABAJA.AsDateTime, anyo2, mes2, dia2);
        fhasta2 := floattostr(anyo2) + '-' + floattostr(mes2) + '-' +
          floattostr(dia2);
      end;

      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;

      dm.qaux3.Close;
      dm.qaux3.SQL.Clear;
      dm.qaux3.SQL.Add('select sum(importe) from anticipos where idt=' +
        dm.qaux1.Fields[0].AsString + ' and fecha>=' + '''' + fdesde + '''' +
        ' and fecha<=' + '''' + fhasta + '''');
      dm.qaux3.Open;

      anticipos := dm.qaux3.Fields[0].AsFloat;
      dm.qaux3.Close;
      dm.qaux3.SQL.Clear;
      dm.qaux3.SQL.Add('select sum(indemnizacion) from anticipos where idt=' +
        dm.qaux1.Fields[0].AsString + ' and fecha>=' + '''' + fdesde + '''' +
        ' and fecha<=' + '''' + fhasta + '''');
      dm.qaux3.Open;

      indemnizacion := dm.qaux3.Fields[0].AsFloat;
      dm.qaux3.Close;
      dm.qaux3.SQL.Clear;
      dm.qaux3.SQL.Add('select sum(penalizacion) from anticipos where idt=' +
        dm.qaux1.Fields[0].AsString + ' and fecha>=' + '''' + fdesde + '''' +
        ' and fecha<=' + '''' + fhasta + '''');
      dm.qaux3.Open;

      penalizacion := dm.qaux3.Fields[0].AsFloat;

      if diaslaborables <= diascomputables then
        maximodias := diaslaborables
      else
        maximodias := diascomputables;
      if Trunc(dm.qaux1.Fields[3].AsFloat / dm.tempresasalariobasedia.AsFloat) < maximodias
      then
        diascalculo := Trunc(dm.qaux1.Fields[3].AsFloat /
          dm.tempresasalariobasedia.AsFloat)
      else
        diascalculo := maximodias;

      dm.tprenominas.Append;
      dm.tprenominasIDT.Value := dm.ttrabajadoresID.AsInteger;
      dm.tprenominasanyo.Value := anyo;
      dm.tprenominasmes.Value := floattostr(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
      begin
        dm.tprenominasfechabaja.Value := dm.ttrabajadoresFECHABAJA.AsDateTime;
        // strtodate(fhasta2);
      end;
      dm.tprenominasdiastrabajados.Value :=
        Trunc(dm.qaux1.Fields[3].AsFloat / dm.tempresasalariobasedia.AsFloat);
      dm.tprenominasdiasmaximo.Value := maximodias;
      dm.tprenominasdiascalculo.Value := diascalculo;
      dm.tprenominastotalbruto.Value :=
        strtofloat(FormatFloat('0.00', dm.qaux1.Fields[3].AsFloat));
      dm.tprenominasIRPF.Value := irpf;
      dm.tprenominastotalirpf.Value :=
        strtofloat(FormatFloat('0.00',
        (irpf / 100) * dm.tprenominastotalbruto.AsFloat));
      // (salariobase*diascalculo);
      dm.tprenominasdesempleo.Value := desempleo;
      dm.tprenominastotaldesempleo.Value :=
        strtofloat(FormatFloat('0.00', (desempleo / 100) *
        (dm.tprenominastotalbruto.AsFloat - indemnizacion)));
      // (salariobase*diascalculo);
      dm.tprenominasformacion.Value := formacion;
      dm.tprenominastotalformacion.Value :=
        strtofloat(FormatFloat('0.00', (formacion / 100) *
        (dm.tprenominastotalbruto.AsFloat - indemnizacion)));
      // (salariobase*diascalculo);
      dm.tprenominascontingencias.Value := contingencias;
      dm.tprenominastotalcontingencias.Value :=
        strtofloat(FormatFloat('0.00', (contingencias / 100) *
        (dm.tprenominastotalbruto.AsFloat - indemnizacion)));
      // (salariobase*diascalculo);
      dm.tprenominastotalneto.Value :=
        strtofloat(FormatFloat('0.00', dm.qaux1.Fields[3].AsFloat -
        dm.tprenominastotalirpf.AsFloat - dm.tprenominastotaldesempleo.AsFloat -
        dm.tprenominastotalformacion.AsFloat -
        dm.tprenominastotalcontingencias.AsFloat - penalizacion));
      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.tprenominasTOTALAPAGAR.Value :=
        strtofloat(FormatFloat('0.00', dm.tprenominastotalneto.AsFloat -
        dm.tprenominasanticipos.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;
      condiciones := 0;
      if CheckBox2.Checked then
      begin
        condiciones := condiciones + 1;
      end;
      if CheckBox3.Checked then
      begin
        condiciones := condiciones + 1;
      end;
      if CheckBox4.Checked then
      begin
        condiciones := condiciones + 1;
      end;
      if CheckBox5.Checked then
      begin
        condiciones := condiciones + 1;
      end;
      filtro := '';
      decodedate(nomfechadesde.Date, anyo, mes, dia);
      fdesde := floattostr(anyo) + '-' + floattostr(mes) + '-' +
        floattostr(dia);
      filtro := ' where estado<>' + '''' + 'S' + '''' + ' and estado<>' + '''' +
        'P' + '''' + ' and fecha>=' + '''' + fdesde + '''';
      decodedate(nomfechahasta.Date, anyo, mes, dia);
      fhasta := floattostr(anyo) + '-' + floattostr(mes) + '-' +
        floattostr(dia);
      filtro := filtro + ' and fecha<=' + '''' + fhasta + '''';

      if CheckBox6.Checked then
      begin
        filtro := filtro +
          ' and articulo in (select codart from articulos where facturar=0)';
      end
      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;
      dm.qaux3.Close;
      dm.qaux3.SQL.Clear;
      dm.qaux3.SQL.Add('update trabajo_diario set estado=' + '''' + 'V' + '''' +
        ',control=' + dm.tprenominasid.AsString + ' ' + filtro + ' and idt=' +
        dm.ttrabajadoresID.AsString);
      dm.qaux3.ExecSQL;
      dm.qaux1.Next;
    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.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);
begin
  if (dm.qnominasproduccionestado.AsString = 'C') OR
    (dm.qnominasproduccionestado.AsString = 'S') then
  BEGIN
    if dm.qnominasproduccionestado.AsString = 'C' then
    begin
      tjornales.Locate('id', dm.qnominasproduccionid.AsString,
        [locaseinsensitive]);
      tjornales.edit;
      tjornalesestado.Value := 'S';
      tjornales.post;
      dm.qnominasproduccion.Refresh;
      dm.qnominasproduccion.Locate('id', tjornalesid.AsString,
        [locaseinsensitive]);
    end
    ELSE
    begin
      tjornales.Locate('id', dm.qnominasproduccionid.AsString,
        [locaseinsensitive]);
      tjornales.edit;
      tjornalesestado.Value := 'C';
      tjornales.post;
      dm.qnominasproduccion.Refresh;
      dm.qnominasproduccion.Locate('id', tjornalesid.AsString,
        [locaseinsensitive]);
    end;
  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);
begin
  if (qjornalesestado.AsString = 'C') OR (qjornalesestado.AsString = 'S') then
  BEGIN
    if qjornalesestado.AsString = 'C' then
    begin
      tjornales.Locate('id', qjornalesid.AsString, [locaseinsensitive]);
      tjornales.edit;
      tjornalesestado.Value := 'S';
      tjornales.post;
      qjornales.Refresh;
      qjornales.Locate('id', tjornalesid.AsString, [locaseinsensitive]);
    end
    ELSE
    begin

      tjornales.Locate('id', qjornalesid.AsString, [locaseinsensitive]);
      tjornales.edit;
      tjornalesestado.Value := 'C';
      tjornales.post;
      qjornales.Refresh;
      qjornales.Locate('id', tjornalesid.AsString, [locaseinsensitive]);
    end;
  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;
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
    if dm.qanticiposestado.AsString = 'C' then
    begin
      dm.tanticipos.Locate('id', dm.qanticiposid.AsString, [locaseinsensitive]);
      dm.tanticipos.edit;
      dm.tanticiposestado.Value := 'S';
      dm.tanticipos.post;
      dm.qanticipos.Refresh;
      dm.qanticipos.Locate('id', dm.tanticiposid.AsString, [locaseinsensitive]);
    end
    ELSE
    begin

      dm.tanticipos.Locate('id', dm.qanticiposid.AsString, [locaseinsensitive]);
      dm.tanticipos.edit;
      dm.tanticiposestado.Value := 'C';
      dm.tanticipos.post;
      dm.qanticipos.Refresh;
      dm.qanticipos.Locate('id', dm.tanticiposid.AsString, [locaseinsensitive]);
    end;
  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);
begin
  if (dm.qnominasdetalleestado.AsString = 'C') OR
    (dm.qnominasdetalleestado.AsString = 'S') then
  BEGIN
    if dm.qnominasdetalleestado.AsString = 'C' then
    begin
      tjornales.Locate('id', dm.qnominasdetalleid.AsString,
        [locaseinsensitive]);
      tjornales.edit;
      tjornalesestado.Value := 'S';
      tjornales.post;
      dm.qnominasdetalle.Refresh;
      dm.qnominasdetalle.Locate('id', tjornalesid.AsString,
        [locaseinsensitive]);
    end
    ELSE
    begin
      tjornales.Locate('id', dm.qnominasdetalleid.AsString,
        [locaseinsensitive]);
      tjornales.edit;
      tjornalesestado.Value := 'C';
      tjornales.post;
      dm.qnominasdetalle.Refresh;
      dm.qnominasdetalle.Locate('id', tjornalesid.AsString,
        [locaseinsensitive]);
    end;
  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);
begin
  if (dm.qanticiposdetalleestado.AsString = 'C') OR
    (dm.qanticiposdetalleestado.AsString = 'S') then
  BEGIN
    if dm.qanticiposdetalleestado.AsString = 'C' then
    begin
      dm.tanticipos.Locate('id', dm.qanticiposdetalleid.AsString,
        [locaseinsensitive]);
      dm.tanticipos.edit;
      dm.tanticiposestado.Value := 'S';
      dm.tanticipos.post;
      dm.qanticiposdetalle.Refresh;
      dm.qanticiposdetalle.Locate('id', dm.tanticiposid.AsString,
        [locaseinsensitive]);
    end
    ELSE
    begin
      dm.tanticipos.Locate('id', dm.qanticiposdetalleid.AsString,
        [locaseinsensitive]);
      dm.tanticipos.edit;
      dm.tanticiposestado.Value := 'C';
      dm.tanticipos.post;
      dm.qanticiposdetalle.Refresh;
      dm.qanticiposdetalle.Locate('id', dm.tanticiposid.AsString,
        [locaseinsensitive]);

    end;
  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 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
  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
  { paneldocumentosempleados.Visible:=false;
    btedocver.Caption:='Ver Doc.';
    if (templeados.State=dsinsert) or (templeados.State=dsedit) then templeados.Post;
    if qempleados.RecordCount>0 then
    begin
    temp_fotos.Close;
    temp_fotos.Filtered:=false;
    temp_fotos.Filter:='ide='+qempleadoside.Asstring+' and idt='+qempleadosid.Asstring;
    temp_fotos.filtered:=true;
    temp_fotos.open;
    If not DirectoryExists('c:\agrigest\tmp') then CreateDir('c:\agrigest\tmp');
    Deletefile('c:\agrigest\tmp\empimg.jpg');

    image2.Picture:=nil;
    if temp_fotosidt.AsInteger=qempleadosid.AsInteger then
    begin
    temp_fotosimagen.savetofile('c:\agrigest\tmp\empimg.jpg');
    image2.Picture.LoadFromFile('c:\agrigest\tmp\empimg.jpg');
    end; }
  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;

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 := '%' + tbuscarnominas.Text + '%';
  qempleados.Close;
  qempleados.Open;
  btactualizarempleadosnominas.Click
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.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
  GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT, formatos);
  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
  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);
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);
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.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.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);
var
  i: Integer;
begin
  if PageDatosEmpresa.TabIndex = 1 then
  begin
    Pagedatos.ActivePageIndex := 0;
    dm.qseries.Open;
  end;
  if PageDatosEmpresa.TabIndex = 2 then
  begin
    dm.qmateriasprimas2.Close;
    dm.qmprimascompuestas.Close;
    dm.qgenericas.Close;
    dm.qmateriasprimas2.Open;
    dm.qmprimascompuestas.Open;
    dm.qgenericas.Open;
  end;
  if PageDatosEmpresa.TabIndex = 3 then
  begin
    dm.qalmacenes.Close;
    dm.qalmacenesaux.Close;
    dm.qalmacenes.Open;
    dm.qalmacenesaux.Open;
  end;
  if PageDatosEmpresa.TabIndex = 4 then
  begin
    dm.qalmacenes.Open;
    dm.qalmacenesaux.Open;
    dm.talmacenes.Open;
  end;
  if PageDatosEmpresa.TabIndex = 5 then
  begin

    dmestadisticas.qcampanyas.Open;
    dm.qparcelas.Open;
  end;
  if PageDatosEmpresa.TabIndex = 6 then
  begin
    dmestadisticas.qcampanyas.Open;
    dm.qparcelas.close;
    dm.qparcelas.Open;
    dm.qparcelas.First;
    dmestadisticas.qproduccion.Open;
    dmproduccion.qproduccion_detalles.Open;
    dmestadisticas.qsalidas.Open;
    dmestadisticas.qsalidasdetalles.Open;
    dmestadisticas.qdesechos.Open;
    dmestadisticas.qdesechosdetalles.Open;
    qsocios2.Open;
  end;
  if PageDatosEmpresa.TabIndex = 7 then
  begin
    dm.qcampanyas.Refresh;
    dm.qcampanyas_aux.Open;
    dm.qcampanyas.Refresh;
    dm.qcampanyasparcela.Open;
    dm.qcampanyasparcela.Refresh;

  end;
  if PageDatosEmpresa.TabIndex = 8 then
  begin
    dm.qalmacenes.Open;
    dm.qalmacenesaux.Open;
    dm.talmacenes.Open;
    dm.ttipotrabajo.Open;
  end;
  if PageDatosEmpresa.TabIndex = 9 then
  begin
    dm.qarticulosalmacen.Open;
    dm.tarticulosalmacen.Open;
  end;
end;

procedure TBASE.PageDatosEmpresaEnter(Sender: TObject);
begin
  if PageDatosEmpresa.TabIndex = 1 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: string;
begin
  if filtrotrabajadores <> '' then
  begin
    if vtactivo <> 0 then
    begin
      filtro := filtro + ' where (nombre like(' + '''' + '%' +
        filtrotrabajadores + '%' + '''' + ') or (id=' + '''' +
        filtrotrabajadores + '''' + ')) and activo=' + inttostr(vtactivo)
    end
    else
    begin
      filtro := filtro + ' where (nombre like(' + '''' + '%' +
        filtrotrabajadores + '%' + '''' + ') or (id=' + '''' +
        filtrotrabajadores + '''' + '))';
    end;
    if chktodosempleados.Checked then
    begin
      // filtro:=filtro+' and mostrar=1 ';
    end
    else
    begin
      filtro := filtro + ' and mostrar=1 ';
    end;

  end;
  if filtrotrabajadores = '' then
  begin
    if vtactivo <> 0 then
    begin
      filtro := filtro + ' where activo=' + inttostr(vtactivo);
      if chktodosempleados.Checked then
      begin
        // filtro:=filtro+' and mostrar=1 ';
      end
      else
      begin
        filtro := filtro + ' and mostrar=1 ';
      end;
    end
    else
    begin
      filtro := '';
      if chktodosempleados.Checked then
      begin
        // filtro:=' where mostrar=1 ';
      end
      else
      begin
        filtro := ' where mostrar=1 ';
      end;

    end;
  end;

  qempleados.SQL.Clear;
  qempleados.SQL.Add('select ide,id,nombre,seleccionado,nif 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.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.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.
