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.ExtCtrls, Vcl.DBCtrls,
  Data.DB, ZAbstractRODataset, ZDataset, ZAbstractConnection, ZConnection,
  Vcl.Grids, Vcl.DBGrids, ZAbstractDataset, ZAbstractTable,dateutils, CPort,
  Vcl.Touch.Keyboard, Vcl.ImgList, Vcl.ComCtrls;

type
  Tpprincipal = class(TForm)
    PSELECCION: TPanel;
    PINFORMACION: TPanel;
    PPESADAS: TPanel;
    PESAR: TButton;
    Button1: TButton;
    PBOTONES: TPanel;
    BPLIMPIADORA: TButton;
    DBagrigest: TZConnection;
    qmprimas: TZReadOnlyQuery;
    dsqmprimas: TDataSource;
    qmprimasid: TWideStringField;
    qmprimasdescripcion: TWideStringField;
    qmprimasobservaciones: TWideStringField;
    qmprimasimagen: TBlobField;
    qmprimasactivo: TIntegerField;
    dsproductos: TDataSource;
    qproductos: TZReadOnlyQuery;
    qproductoscodigo: TWideStringField;
    qproductosdescripcion: TWideStringField;
    qproductosimagen: TBlobField;
    qproductosalto: TIntegerField;
    qproductosancho: TIntegerField;
    qproductoslargo: TIntegerField;
    qproductostara: TFloatField;
    qproductospeso: TFloatField;
    qproductoserrorpeso: TFloatField;
    qproductospesadomanual: TIntegerField;
    qproductoscoste: TFloatField;
    qproductosactivo: TIntegerField;
    combovariedad: TDBLookupComboBox;
    Label1: TLabel;
    comboproducto: TDBLookupComboBox;
    Label2: TLabel;
    PLIMPIADORAS: TPanel;
    qtrabajosalmacen: TZReadOnlyQuery;
    dsqtrabajosalmacen: TDataSource;
    qtrabajosalmacenid: TIntegerField;
    qtrabajosalmacenpuesto: TWideStringField;
    qtrabajosalmacentipo_trabajo: TWideStringField;
    qtrabajosalmacenarticulo: TWideStringField;
    PPESARUVALIMPIADORAS: TPanel;
    Panel1: TPanel;
    combopuestos: TDBLookupComboBox;
    Edit1: TEdit;
    Label3: TLabel;
    btanadir: TButton;
    Label5: TLabel;
    Memo1: TMemo;
    lmesa: TLabel;
    qmovimientos_mesa: TZReadOnlyQuery;
    dsqmovimientos_mesa: TDataSource;
    qaux: TZReadOnlyQuery;
    dsqaux: TDataSource;
    lbascula: TLabel;
    dsqaux2: TDataSource;
    qaux2: TZReadOnlyQuery;
    bpenvasada: TButton;
    tpesar: TTimer;
    puerto1: TComPort;
    lpeso: TLabel;
    qtrabajosalmacenparcela: TWideStringField;
    qtrabajosalmacenactivo: TIntegerField;
    Edit2: TEdit;
    Label6: TLabel;
    lpesotrabajador: TLabel;
    qenvasadoras: TZReadOnlyQuery;
    dsqenvasadoras: TDataSource;
    Label4: TLabel;
    qenvasadorasidt: TIntegerField;
    qenvasadorastrabajador: TWideStringField;
    Ta_cero: TTimer;
    Label7: TLabel;
    comboenvasadoras: TDBLookupComboBox;
    Timer4: TTimer;
    DBGrid2: TDBGrid;
    tsincronizar: TTimer;
    dbservidor: TZConnection;
    lc_movimientos_mesa: TZTable;
    lc_trabajo_diario: TZTable;
    lc_rendimiento: TZTable;
    lc_produccion: TZTable;
    qaux3: TZReadOnlyQuery;
    PCONEXION: TPanel;
    qaux4: TZReadOnlyQuery;
    btterminar: TButton;
    produccionx: TZTable;
    movimientos_mesa: TZTable;
    trabajo_diario: TZTable;
    rendimiento: TZTable;
    movimientos_mesaid: TLargeintField;
    movimientos_mesafecha: TDateField;
    movimientos_mesamesa: TWideStringField;
    movimientos_mesaidt: TIntegerField;
    movimientos_mesaTRABAJADOR: TWideStringField;
    movimientos_mesaENTRADA_REAL: TTimeField;
    movimientos_mesaSALIDA_REAL: TTimeField;
    movimientos_mesaENTRADA_AJUSTADA: TTimeField;
    movimientos_mesaSALIDA_AJUSTADA: TTimeField;
    movimientos_mesaHORASREALES: TTimeField;
    movimientos_mesaHORASAJUSTADAS: TTimeField;
    movimientos_mesaPUESTO: TWideStringField;
    movimientos_mesaTIPOTRABAJO: TWideStringField;
    movimientos_mesaARTICULO: TWideStringField;
    movimientos_mesaPARCELA: TWideStringField;
    rendimientoid: TIntegerField;
    rendimientofecha: TDateField;
    rendimientohora: TTimeField;
    rendimientoidt: TIntegerField;
    rendimientotrabajador: TWideStringField;
    rendimientomateria_prima: TWideStringField;
    rendimientopeso_bruto: TFloatField;
    rendimientotara: TFloatField;
    rendimientopesoneto: TFloatField;
    produccionxid: TLargeintField;
    produccionxfecha: TDateField;
    produccionxhora: TTimeField;
    produccionxmesa: TWideStringField;
    produccionxbascula: TWideStringField;
    produccionxidt: TIntegerField;
    produccionxembasadora: TWideStringField;
    produccionxmateria_prima: TWideStringField;
    produccionxproducto: TWideStringField;
    produccionxtara: TFloatField;
    produccionxpeso_teorico: TFloatField;
    produccionxpeso_real: TFloatField;
    qaux5: TZReadOnlyQuery;
    lc_rendimientoid: TIntegerField;
    lc_rendimientofecha: TDateField;
    lc_rendimientohora: TTimeField;
    lc_rendimientoidt: TIntegerField;
    lc_rendimientotrabajador: TWideStringField;
    lc_rendimientomateria_prima: TWideStringField;
    lc_rendimientopeso_bruto: TFloatField;
    lc_rendimientotara: TFloatField;
    lc_rendimientopesoneto: TFloatField;
    lc_rendimientoestado: TIntegerField;
    lc_produccionid: TLargeintField;
    lc_produccionfecha: TDateField;
    lc_produccionhora: TTimeField;
    lc_produccionmesa: TWideStringField;
    lc_produccionbascula: TWideStringField;
    lc_produccionidt: TIntegerField;
    lc_produccionembasadora: TWideStringField;
    lc_produccionmateria_prima: TWideStringField;
    lc_produccionproducto: TWideStringField;
    lc_producciontara: TFloatField;
    lc_produccionpeso_teorico: TFloatField;
    lc_produccionpeso_real: TFloatField;
    lc_produccionestado: TIntegerField;
    qaux6: TZReadOnlyQuery;
    qmovimientos_mesaid: TLargeintField;
    qmovimientos_mesafecha: TDateField;
    qmovimientos_mesamesa: TWideStringField;
    qmovimientos_mesaidt: TIntegerField;
    qmovimientos_mesaTRABAJADOR: TWideStringField;
    qmovimientos_mesaENTRADA_REAL: TTimeField;
    qmovimientos_mesaSALIDA_REAL: TTimeField;
    qmovimientos_mesaENTRADA_AJUSTADA: TTimeField;
    qmovimientos_mesaSALIDA_AJUSTADA: TTimeField;
    qmovimientos_mesaHORASREALES: TTimeField;
    qmovimientos_mesaHORASAJUSTADAS: TTimeField;
    qmovimientos_mesaPUESTO: TWideStringField;
    qmovimientos_mesaTIPOTRABAJO: TWideStringField;
    qmovimientos_mesaARTICULO: TWideStringField;
    qmovimientos_mesaPARCELA: TWideStringField;
    qmovimientos_mesaestado: TIntegerField;
    qproductosEANUPC: TLargeintField;
    lpesominimo: TLabel;
    lpesomaximo: TLabel;
    Tboton: TTimer;
    empresa: TZTable;
    empresaid: TIntegerField;
    empresacif: TWideStringField;
    empresanombre: TWideStringField;
    empresadireccion: TWideStringField;
    empresacodpost: TWideStringField;
    empresapoblacion: TWideStringField;
    empresaprovincia: TWideStringField;
    empresaemail: TWideStringField;
    empresatelefono1: TWideStringField;
    empresatelefono2: TWideStringField;
    empresacontacto: TWideStringField;
    empresacontingenciacomfij: TFloatField;
    empresasalariobasedia: TFloatField;
    empresacontingenciasdia: TFloatField;
    empresairpf: TFloatField;
    empresadesempleo: TFloatField;
    empresaformacion: TFloatField;
    empresacontingencias: TFloatField;
    empresacc_iban: TWideStringField;
    empresacc_entidad: TWideStringField;
    empresacc_oficina: TWideStringField;
    empresacc_dc: TWideStringField;
    empresacc_cc: TWideStringField;
    empresaajusteentrada: TIntegerField;
    empresaajustesalida: TIntegerField;
    empresaporcbloqueo: TIntegerField;
    empresaactive: TIntegerField;
    tcalendario_laboral: TZTable;
    tcalendario_laboralfecha: TDateField;
    tcalendario_laboralfestivo: TIntegerField;
    tcalendario_laboralalmuerzo: TIntegerField;
    tcalendario_laboralmerienda: TIntegerField;
    DBCheckBox1: TDBCheckBox;
    dscalendario: TDataSource;
    DBCheckBox2: TDBCheckBox;
    lproducto: TLabel;
    lvariedad: TLabel;
    esclavo: TZQuery;
    esclavoSlave_IO_State: TWideStringField;
    esclavoMaster_Host: TWideStringField;
    esclavoMaster_User: TWideStringField;
    esclavoMaster_Port: TLargeintField;
    esclavoConnect_Retry: TLargeintField;
    esclavoMaster_Log_File: TWideStringField;
    esclavoRead_Master_Log_Pos: TFloatField;
    esclavoRelay_Log_File: TWideStringField;
    esclavoRelay_Log_Pos: TFloatField;
    esclavoRelay_Master_Log_File: TWideStringField;
    esclavoSlave_IO_Running: TWideStringField;
    esclavoSlave_SQL_Running: TWideStringField;
    esclavoReplicate_Do_DB: TWideStringField;
    esclavoReplicate_Ignore_DB: TWideStringField;
    esclavoReplicate_Do_Table: TWideStringField;
    esclavoReplicate_Ignore_Table: TWideStringField;
    esclavoReplicate_Wild_Do_Table: TWideStringField;
    esclavoReplicate_Wild_Ignore_Table: TWideStringField;
    esclavoLast_Errno: TLargeintField;
    esclavoLast_Error: TWideStringField;
    esclavoSkip_Counter: TLargeintField;
    esclavoExec_Master_Log_Pos: TFloatField;
    esclavoRelay_Log_Space: TFloatField;
    esclavoUntil_Condition: TWideStringField;
    esclavoUntil_Log_File: TWideStringField;
    esclavoUntil_Log_Pos: TFloatField;
    esclavoMaster_SSL_Allowed: TWideStringField;
    esclavoMaster_SSL_CA_File: TWideStringField;
    esclavoMaster_SSL_CA_Path: TWideStringField;
    esclavoMaster_SSL_Cert: TWideStringField;
    esclavoMaster_SSL_Cipher: TWideStringField;
    esclavoMaster_SSL_Key: TWideStringField;
    esclavoSeconds_Behind_Master: TFloatField;
    esclavoMaster_SSL_Verify_Server_Cert: TWideStringField;
    esclavoLast_IO_Errno: TLargeintField;
    esclavoLast_IO_Error: TWideStringField;
    esclavoLast_SQL_Errno: TLargeintField;
    esclavoLast_SQL_Error: TWideStringField;
    esclavoReplicate_Ignore_Server_Ids: TWideStringField;
    esclavoMaster_Server_Id: TLargeintField;
    esclavoMaster_SSL_Crl: TWideStringField;
    esclavoMaster_SSL_Crlpath: TWideStringField;
    esclavoUsing_Gtid: TWideStringField;
    esclavoGtid_IO_Pos: TWideStringField;
    esclavoReplicate_Do_Domain_Ids: TWideStringField;
    esclavoReplicate_Ignore_Domain_Ids: TWideStringField;
    esclavoParallel_Mode: TWideStringField;
    lesclavo: TLabel;
    qrecuperar: TZQuery;
    trabajo_diarioid: TIntegerField;
    trabajo_diarioempresa: TIntegerField;
    trabajo_diariofecha: TDateField;
    trabajo_diarioparcela: TWideStringField;
    trabajo_diarioidt: TIntegerField;
    trabajo_diariotrabajador: TWideStringField;
    trabajo_diariotypework: TWideStringField;
    trabajo_diarioarticulo: TWideStringField;
    trabajo_diarioqhoras: TFloatField;
    trabajo_diarioprecio: TFloatField;
    trabajo_diariototal: TFloatField;
    trabajo_diarioestado: TWideStringField;
    trabajo_diarioorigen: TWideStringField;
    trabajo_diariofechainsmod: TDateTimeField;
    trabajo_diariousuario: TIntegerField;
    trabajo_diariocontrol: TIntegerField;
    trabajo_diariohoras_nomina: TFloatField;
    trabajo_diariohoras_acumuladas: TFloatField;
    trabajo_diarioidparte1: TIntegerField;
    trabajo_diarioidparte2: TIntegerField;
    lc_trabajo_diarioid: TIntegerField;
    lc_trabajo_diariofecha: TDateField;
    lc_trabajo_diarioparcela: TWideStringField;
    lc_trabajo_diarioidt: TIntegerField;
    lc_trabajo_diariotrabajador: TWideStringField;
    lc_trabajo_diariotypework: TWideStringField;
    lc_trabajo_diarioarticulo: TWideStringField;
    lc_trabajo_diarioqhoras: TFloatField;
    lc_trabajo_diarioprecio: TFloatField;
    lc_trabajo_diariototal: TFloatField;
    lc_trabajo_diarioestadotrabajodiario: TWideStringField;
    lc_trabajo_diarioestado: TIntegerField;
    lc_trabajo_diarioorigen: TWideStringField;
    lc_trabajo_diariofechainsmod: TDateTimeField;
    lc_trabajo_diariousuario: TIntegerField;
    lc_trabajo_diariocontrol: TIntegerField;
    lc_movimientos_mesaid: TLargeintField;
    lc_movimientos_mesafecha: TDateField;
    lc_movimientos_mesamesa: TWideStringField;
    lc_movimientos_mesaidt: TIntegerField;
    lc_movimientos_mesaTRABAJADOR: TWideStringField;
    lc_movimientos_mesaENTRADA_REAL: TTimeField;
    lc_movimientos_mesaSALIDA_REAL: TTimeField;
    lc_movimientos_mesaENTRADA_AJUSTADA: TTimeField;
    lc_movimientos_mesaSALIDA_AJUSTADA: TTimeField;
    lc_movimientos_mesaHORASREALES: TTimeField;
    lc_movimientos_mesaHORASAJUSTADAS: TTimeField;
    lc_movimientos_mesaPUESTO: TWideStringField;
    lc_movimientos_mesaTIPOTRABAJO: TWideStringField;
    lc_movimientos_mesaARTICULO: TWideStringField;
    lc_movimientos_mesaPARCELA: TWideStringField;
    lc_movimientos_mesaestado: TIntegerField;
    vestable: TShape;
    qproductosmostrar_boton: TIntegerField;
    lc_movimientos_mesanum_limpiadora: TIntegerField;
    ednumero: TEdit;
    lnumero: TLabel;
    teclado: TTouchKeyboard;
    qmovimientos_mesanum_limpiadora: TIntegerField;
    Button3: TButton;
    TouchKeyboard1: TTouchKeyboard;
    lc_rendimientonum_limpiadora: TIntegerField;
    rendimientonum_limpiadora: TIntegerField;
    movimientos_mesanum_limpiadora: TIntegerField;
    dsdesbloqueos: TDataSource;
    qdesbloqueos: TZQuery;
    Button4: TButton;
    ImageList1: TImageList;
    griddesbloqueos: TDBGrid;
    qdesbloqueosid: TIntegerField;
    qdesbloqueosfecha: TDateField;
    qdesbloqueoshora: TTimeField;
    qdesbloqueosenvasadora: TWideStringField;
    qdesbloqueosmesa: TWideStringField;
    qdesbloqueosbascula: TWideStringField;
    qdesbloqueosestado: TIntegerField;
    ComData1: TComDataPacket;
    comdata2: TComDataPacket;
    btentradasmprimas: TButton;
    btcontrol: TButton;
    btconfiguracion: TButton;
    PENTRADAS: TPanel;
    PCONFIGURACION: TPanel;
    PCONTROL: TPanel;
    qsectores: TZReadOnlyQuery;
    qsectoreside: TIntegerField;
    qsectoresid: TIntegerField;
    qsectoresdescripcion: TWideStringField;
    qsectoresidalmacen: TIntegerField;
    qsectoresdescalmacen: TWideStringField;
    dsqsectores: TDataSource;
    qvariedadeslinea: TZQuery;
    Panel2: TPanel;
    Panel5: TPanel;
    Panel6: TPanel;
    DBGrid1: TDBGrid;
    qproductoslinea: TZQuery;
    dsqvariedadeslinea: TDataSource;
    dsqproductoslinea: TDataSource;
    dsqmprimas2: TDataSource;
    qmprimas2: TZReadOnlyQuery;
    dsqproductos2: TDataSource;
    qproductos2: TZReadOnlyQuery;
    listaiconos: TImageList;
    Button7: TButton;
    qproductoslineaide: TIntegerField;
    qproductoslineaidsector: TIntegerField;
    qproductoslineacodigo: TWideStringField;
    Panel3: TPanel;
    Panel4: TPanel;
    Button8: TButton;
    Panel7: TPanel;
    DBGrid3: TDBGrid;
    Panel8: TPanel;
    combovariedadlinea: TDBLookupComboBox;
    Label9: TLabel;
    Button5: TButton;
    Panel9: TPanel;
    Label10: TLabel;
    comboproductolinea: TDBLookupComboBox;
    Button6: TButton;
    Panel10: TPanel;
    Label8: TLabel;
    combosector: TDBLookupComboBox;
    Label11: TLabel;
    qvariedadeslineaidsector: TIntegerField;
    qvariedadeslineaid: TWideStringField;
    qvariedadeslineaide: TIntegerField;
    qmprimas2id: TWideStringField;
    qmprimas2descripcion: TWideStringField;
    qmprimas2observaciones: TWideStringField;
    qmprimas2imagen: TBlobField;
    qmprimas2activo: TIntegerField;
    qproductos2codigo: TWideStringField;
    qproductos2descripcion: TWideStringField;
    qproductos2imagen: TBlobField;
    qproductos2alto: TIntegerField;
    qproductos2ancho: TIntegerField;
    qproductos2largo: TIntegerField;
    qproductos2EANUPC: TLargeintField;
    qproductos2tara: TFloatField;
    qproductos2peso: TFloatField;
    qproductos2errorpeso: TFloatField;
    qproductos2pesadomanual: TIntegerField;
    qproductos2coste: TFloatField;
    qproductos2activo: TIntegerField;
    qproductos2mostrar_boton: TIntegerField;
    teclado2: TTouchKeyboard;
    Panel11: TPanel;
    Label12: TLabel;
    lid: TEdit;
    Label13: TLabel;
    combosectorentradas: TDBLookupComboBox;
    Panel12: TPanel;
    DBGrid4: TDBGrid;
    qpesadas: TZQuery;
    qpesadasid: TIntegerField;
    qpesadasidempresa: TIntegerField;
    qpesadasidEA: TIntegerField;
    qpesadasid_palet: TWideStringField;
    qpesadasnum_palets: TIntegerField;
    qpesadasid_palet2: TWideStringField;
    qpesadasnum_palets2: TIntegerField;
    qpesadasid_envase: TWideStringField;
    qpesadasnum_envases: TIntegerField;
    qpesadasiddestino: TIntegerField;
    qpesadasdestino: TWideStringField;
    qpesadaspeso_bruto: TFloatField;
    qpesadastara: TFloatField;
    qpesadaspeso_neto: TFloatField;
    qpesadaspeso_neto_teorico: TFloatField;
    qpesadaspeso_medio: TFloatField;
    qpesadastemperatura: TFloatField;
    qpesadasfecha: TDateField;
    qpesadasfechatrabajo: TDateField;
    qpesadashora: TTimeField;
    qpesadasCEA: TWideStringField;
    qpesadasresto_cajas: TFloatField;
    qpesadasresto_pesoneto: TFloatField;
    qpesadaslote: TIntegerField;
    qpesadasORIGEN: TWideStringField;
    qpesadasidorigen: TIntegerField;
    qpesadasmprima: TWideStringField;
    qpesadasgen_caja: TIntegerField;
    qpesadascosto: TFloatField;
    qpesadascoste_manipulacion: TFloatField;
    qpesadasdias_camara: TIntegerField;
    qpesadascosto_camara: TFloatField;
    qpesadascodigoR: TWideStringField;
    qpesadasparcela: TWideStringField;
    qpesadasfecha_cierre: TDateField;
    qpesadascosto_materiales: TFloatField;
    qpesadascosto_cosechar: TFloatField;
    qpesadasborrado: TIntegerField;
    qpesadasseleccionado: TIntegerField;
    qpesadasOBSERVACIONES: TWideStringField;
    qpesadastipo_trabajo: TWideStringField;
    qpesadastipo_generador: TWideStringField;
    qpesadasremanipulado: TIntegerField;
    qpesadasfecha_envasado: TDateField;
    qpesadascodean: TWideStringField;
    qpesadascodssc: TWideStringField;
    qpesadaspedidocliente: TIntegerField;
    qpesadascosto_sinmt: TFloatField;
    qpesadastara0: TFloatField;
    qpesadaslotes_detalle: TWideStringField;
    qpesadasidpedido: TIntegerField;
    qpesadasrecuperar_envases: TIntegerField;
    qpesadascalibre: TFloatField;
    qpesadasprov_albaran: TWideStringField;
    qpesadasprov_fecha: TDateField;
    qpesadasprov_ggn: TWideStringField;
    qpesadasprov_lote: TWideStringField;
    qpesadasprov_grower: TWideStringField;
    qpesadasprov_puk: TWideStringField;
    qpesadasprov_otros: TWideStringField;
    qpesadassector: TZQuery;
    qpesadassectoride: TIntegerField;
    qpesadassectorid: TIntegerField;
    qpesadassectoridea: TIntegerField;
    qpesadassectoridsector: TIntegerField;
    qpesadassectordescsector: TWideStringField;
    qpesadassectorfecha: TDateField;
    qpesadassectorhora: TTimeField;
    qpesadassectorpeso_neto: TFloatField;
    qpesadassectortmp: TZQuery;
    qpesadassectortmpide: TIntegerField;
    qpesadassectortmpid: TIntegerField;
    qpesadassectortmpidea: TIntegerField;
    qpesadassectortmpidsector: TIntegerField;
    qpesadassectortmpdescsector: TWideStringField;
    qpesadassectortmpfecha: TDateField;
    qpesadassectortmphora: TTimeField;
    qpesadassectortmppeso_neto: TFloatField;
    Button9: TButton;
    qauxsrv: TZQuery;
    dspesadassector: TDataSource;
    Panel13: TPanel;
    Label14: TLabel;
    DBLookupComboBox1: TDBLookupComboBox;
    Panel14: TPanel;
    Panel15: TPanel;
    DBGrid5: TDBGrid;
    qpuestos: TZReadOnlyQuery;
    qpuestoside: TIntegerField;
    qpuestosidsector: TIntegerField;
    qpuestosid: TIntegerField;
    qpuestosdescripcion: TWideStringField;
    qpuestosdescsector: TWideStringField;
    fechacontrol: TDateTimePicker;
    Label15: TLabel;
    dsqpuestos: TDataSource;
    qmovimientos_mesa2: TZReadOnlyQuery;
    dsqmovimientos_mesas2: TDataSource;
    Panel16: TPanel;
    Panel17: TPanel;
    DBGrid6: TDBGrid;
    qmovimientos_mesa2id: TLargeintField;
    qmovimientos_mesa2fecha: TDateField;
    qmovimientos_mesa2mesa: TWideStringField;
    qmovimientos_mesa2idt: TIntegerField;
    qmovimientos_mesa2TRABAJADOR: TWideStringField;
    qmovimientos_mesa2ENTRADA_REAL: TTimeField;
    qmovimientos_mesa2SALIDA_REAL: TTimeField;
    qmovimientos_mesa2ENTRADA_AJUSTADA: TTimeField;
    qmovimientos_mesa2SALIDA_AJUSTADA: TTimeField;
    qmovimientos_mesa2HORASREALES: TTimeField;
    qmovimientos_mesa2HORASAJUSTADAS: TTimeField;
    qmovimientos_mesa2PUESTO: TWideStringField;
    qmovimientos_mesa2TIPOTRABAJO: TWideStringField;
    qmovimientos_mesa2ARTICULO: TWideStringField;
    qmovimientos_mesa2PARCELA: TWideStringField;
    qmovimientos_mesa2hora_fichar: TTimeField;
    qmovimientos_mesa2num_horas: TFloatField;
    qmovimientos_mesa2imprimir: TIntegerField;
    qmovimientos_mesa2num_limpiadora: TIntegerField;
    Button10: TButton;
    qproductoslineadescripcion: TWideStringField;
    lnumtrabajadores: TLabel;
    qpesadasidalbaran: TWideStringField;
    tcomprobar: TTimer;
    Button2: TButton;
    ltotempleados: TLabel;
    qpesadassectorLOTE: TWideStringField;
    qpesadassectorVARIEDAD: TWideStringField;
    qpesadassectortmplote: TWideStringField;
    qpesadassectortmpvariedad: TWideStringField;
    lconectado: TLabel;
    qmprimasidempresa: TIntegerField;
    qmprimasvariedad: TWideStringField;
    qmprimaspesopieza: TFloatField;
    qmprimas2pesopieza: TFloatField;
    lpiezas: TLabel;
    Label16: TLabel;
    Button11: TButton;
    Button12: TButton;
    Label17: TLabel;
    lpesopieza: TLabel;
    ZReadOnlyQuery1: TZReadOnlyQuery;
    empresairpf2: TFloatField;
    empresadesempleo2: TFloatField;
    empresaformacion2: TFloatField;
    empresacontingencias2: TFloatField;
    empresault_envio: TIntegerField;
    empresaregistro_sanitario: TWideStringField;
    empresacoste_kg_gen: TFloatField;
    empresaporc_segsocial: TFloatField;
    empresaprecio_venta_desperdicios: TFloatField;
    empresavercodtrazabilidad: TIntegerField;
    empresacodcomision: TWideStringField;
    empresacodtransporte: TWideStringField;
    empresacc_bic: TWideStringField;
    empresacodotros: TWideStringField;
    empresaavisarstock: TIntegerField;
    empresahtlunes: TFloatField;
    empresahtmartes: TFloatField;
    empresahtmiercoles: TFloatField;
    empresahtjueves: TFloatField;
    empresahtviernes: TFloatField;
    empresahtsabados: TFloatField;
    empresahtdomingos: TFloatField;
    empresatavisostock: TIntegerField;
    empresaresponsable: TWideStringField;
    empresanif_responsable: TWideStringField;
    empresalogo: TBlobField;
    empresafirmaresponsable: TBlobField;
    empresatiempoalmuerzo: TIntegerField;
    empresahorasminimas: TIntegerField;
    empresaidfamilia: TIntegerField;
    empresaajuste15: TIntegerField;
    empresaajuste30: TIntegerField;
    empresaseparartraza_e_s: TIntegerField;
    tcalendario_laboralinicio_almuerzo: TTimeField;
    tcalendario_laboralfin_almuerzo: TTimeField;
    tcalendario_laboralinicio_merienda: TTimeField;
    tcalendario_laboralfin_merienda: TTimeField;
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure FormShow(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Edit1Exit(Sender: TObject);
    procedure btanadirClick(Sender: TObject);
    procedure puerto1RxChar(Sender: TObject; Count: Integer);
    procedure BPLIMPIADORAClick(Sender: TObject);
    procedure bpenvasadaClick(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Edit1Enter(Sender: TObject);
    procedure Edit2Enter(Sender: TObject);
    procedure PESARClick(Sender: TObject);
    procedure DBGrid1CellClick(Column: TColumn);
    procedure dsproductosDataChange(Sender: TObject; Field: TField);
    procedure tpesarTimer(Sender: TObject);
    procedure Ta_ceroTimer(Sender: TObject);
    procedure TbotonTimer(Sender: TObject);
    procedure Timer4Timer(Sender: TObject);
    procedure tsincronizarTimer(Sender: TObject);
    procedure btterminarClick(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure combopuestosExit(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Edit2Exit(Sender: TObject);
    procedure ComData1Packet(Sender: TObject; const Str: string);
    procedure puerto1RxBuf(Sender: TObject; const Buffer; Count: Integer);
    procedure comdata2Packet(Sender: TObject; const Str: string);
    procedure btentradasmprimasClick(Sender: TObject);
    procedure btconfiguracionClick(Sender: TObject);
    procedure btcontrolClick(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button8Click(Sender: TObject);
    procedure lidEnter(Sender: TObject);
    procedure lidExit(Sender: TObject);
    procedure Button9Click(Sender: TObject);
    procedure dsqpuestosDataChange(Sender: TObject; Field: TField);
    procedure Button10Click(Sender: TObject);
    procedure fechacontrolChange(Sender: TObject);
    procedure dsqsectoresDataChange(Sender: TObject; Field: TField);
    procedure ednumeroEnter(Sender: TObject);
    procedure ednumeroExit(Sender: TObject);
    procedure tcomprobarTimer(Sender: TObject);
    procedure dsqmovimientos_mesaDataChange(Sender: TObject; Field: TField);
    procedure comboproductoDropDown(Sender: TObject);
    procedure comboenvasadorasDropDown(Sender: TObject);
    procedure Button12Click(Sender: TObject);
    procedure Button11Click(Sender: TObject);
    procedure combovariedadCloseUp(Sender: TObject);
    procedure combovariedadDropDown(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  pprincipal: Tpprincipal;
  desdegrid,desdetrabajador,a_cero,estable,bloqueado,desbloqueado:boolean;
  visor,cadena,gid,tmesa,tbascula,tpreguntarlimpiadora,ttipobascula,producto,variedad,tbasedatos,treplicacion,thost:string;
  ajusteentrada,ajustesalida,porcentagebloqueo,bloqueominimo,bloqueomaximo,pesovalido,vpesopieza:real;
  gfecha:tdatetime;
  replicando,corriendo:integer;
  paquetes:integer;
  num_limpiadora:integer;


implementation

{$R *.dfm}

uses desbloqueo;

//uses desbloqueo;
function SoloNumeros(Cad: string): string;
var
  i: Integer;
begin
  Result:='';
  for i:= 1 to Length(Cad) do
    if (Cad[i] in ['0'..'9']) or (cad[i]=',') then
      Result:= Result + Cad[i];
end;

procedure Tpprincipal.Button10Click(Sender: TObject);
begin
    qpesadassector.Delete;
end;

procedure Tpprincipal.Button11Click(Sender: TObject);
begin
   vpesopieza:=vpesopieza-1;
   lpesopieza.Caption:=floattostr(vpesopieza);
end;

procedure Tpprincipal.Button12Click(Sender: TObject);
begin
   vpesopieza:=vpesopieza+1;
   lpesopieza.Caption:=floattostr(vpesopieza);
end;

procedure Tpprincipal.Button1Click(Sender: TObject);

begin
    try
    if tpreguntarlimpiadora='1' then
    begin
      teclado.Visible:=true;
      bplimpiadora.Visible:=true;
      bpenvasada.visible:=false;
    end else
         begin
            teclado.Visible:=false;
            bplimpiadora.Visible:=false;
            bpenvasada.visible:=true;
         end;
    timer4.Enabled:=true;
    desdegrid:=false;
    combopuestos.Visible:=true;
    btterminar.Visible:=false;
    if lmesa.Caption<>'Mesa 0' then
    begin
        ppesadas.Visible:=false;
        ppesaruvalimpiadoras.Visible:=false;
    end;
    plimpiadoras.Visible:=true;
    pentradas.Visible:=false;
    pcontrol.Visible:=false;
    pconfiguracion.Visible:=false;
    qtrabajosalmacen.Open;
    qmovimientos_mesa.Close;
    qmovimientos_mesa.SQL.Clear;
    qmovimientos_mesa.sql.add(' select * from movimiento_mesas_local where mesa='+''''+lmesa.Caption+''''+' and salida_real is null ');
    qmovimientos_mesa.sql.add('  order by trabajador');
    qmovimientos_mesa.open;
    qenvasadoras.Close;
    qenvasadoras.SQL.Clear;
    qenvasadoras.sql.add('select idt,trabajador from movimiento_mesas_local where mesa='+''''+lmesa.Caption+''''+' and salida_real is null and puesto like('+''''+'%ENVASADORA%'+''''+')');
    qenvasadoras.open;
    qtrabajosalmacen.close;
    qtrabajosalmacen.SQL.Clear;
    qtrabajosalmacen.sql.add(' select * from TRABAJOS_ALMACEN where activo=1 and mesas like ('+''''+'%*'+tmesa+'*%'+'''' +') ORDER BY puesto');
    qtrabajosalmacen.open;

    edit1.SetFocus
    finally
        puerto1.Connected:=false;
    end;

end;

procedure Tpprincipal.Button2Click(Sender: TObject);
begin
    PPRINCIPAL.Close;
end;

procedure Tpprincipal.BPLIMPIADORAClick(Sender: TObject);
begin

    ta_cero.enabled:=true;
    timer4.Enabled:=false;
    try
    if puerto1.Connected=false then puerto1.Connected:=true;
    except
       showmessage('El puerto de comunicaciones no existe');
    end;
    qmovimientos_mesa.close;
    lc_trabajo_diario.close;
    lc_movimientos_mesa.Close;




    plimpiadoras.Visible:=false;
    teclado.Visible:=FALSE;
    ppesadas.Visible:=false;
    ppesaruvalimpiadoras.Visible:=true;
    BPLIMPIADORA.Visible:=false;
    BPENVASADA.Visible:=true;
    edit2.SetFocus;
    paquetes:=0;
    cadena:='';
//    combopuestos.DropDown;
end;

procedure Tpprincipal.Button3Click(Sender: TObject);
var peso:real;
    pesoletras,vdia,vmes,vanyo,vfecha:string;
    mes,dia,anyo:word;
begin
{

     pesoletras:=lpeso.Caption;
    a_cero:=false;
    try
       peso:=strtofloat(pesoletras);
    except

    end;
    pesar.visible:=false;
    tboton.Enabled:=false;
    if qproductospesadomanual.AsInteger=1 then
    begin

        lc_produccion.Open;
        lc_produccion.Append;
        lc_produccionfecha.value:=date;//gfecha;
        lc_produccionhora.value:=time;
        lc_produccionmesa.value:=lmesa.Caption;
        lc_produccionbascula.value:=lbascula.Caption;
        lc_produccionidt.value:=qenvasadorasidt.asinteger;
        lc_produccionembasadora.value:=qenvasadorastrabajador.asstring;
        lc_produccionmateria_prima.value:=qmprimasid.asstring;
        lc_produccionproducto.value:=qproductoscodigo.asstring;
        lc_producciontara.value:=qproductostara.asfloat;
        lc_produccionpeso_teorico.value:=qproductostara.AsFloat+qproductospeso.AsFloat;
        lc_produccionpeso_real.Value:=pesovalido;//peso;
        lc_produccionestado.Value:=1;
        lc_produccion.Post;
        ppesadas.Color:=clLime;
        a_cero:=false;
        ta_cero.Enabled:=true;
        tboton.enabled:=true;
        bloqueado:=false;
        estable:=false;
        pesovalido:=0;
    end;
    if qproductospesadomanual.asinteger=0 then
    begin

        lc_produccion.Open;
        lc_produccion.Append;
        lc_produccionfecha.value:=date;//gfecha;
        lc_produccionhora.value:=time;
        lc_produccionmesa.value:=lmesa.Caption;
        lc_produccionbascula.value:=lbascula.Caption;
        lc_produccionidt.value:=qenvasadorasidt.asinteger;
        lc_produccionembasadora.value:=qenvasadorastrabajador.asstring;
        lc_produccionmateria_prima.value:=qmprimasid.asstring;
        lc_produccionproducto.value:=qproductoscodigo.asstring;
        lc_producciontara.value:=qproductostara.asfloat;
        lc_produccionpeso_teorico.value:=qproductostara.AsFloat+qproductospeso.AsFloat;
        lc_produccionpeso_real.Value:=peso;
        lc_produccionestado.Value:=1;
        lc_produccion.Post;
        tboton.enabled:=false;
        a_cero:=false;
        ta_cero.Enabled:=true;
        estable:=false;
        pesar.visible:=false;
        bloqueado:=false;
   end;
    finally
    end;

}
    decodedate(date,anyo,mes,dia);
    vanyo:=floattostr(anyo);
    vmes:=floattostr(mes);
    vdia:=floattostr(dia);
    if length(vmes)=1 then vmes:='0'+vmes;
    if length(vdia)=1 then vdia:='0'+vdia;
    vfecha:=''''+vanyo+'-'+vmes+'-'+vdia+'''';
    pesoletras:=lpesotrabajador.Caption;
//    pesoletras[3]:=',';
    peso:=strtofloat(pesoletras);
    if num_limpiadora<>-1 then
    begin
      qaux.SQL.Clear;
      qaux.SQL.Add('select trabajador,idt,num_limpiadora from movimiento_mesas  where idt='+inttostr(num_limpiadora));
      qaux.open;
        lc_rendimiento.open;
        lc_rendimiento.append;
        lc_rendimientofecha.value:=date; //gfecha;
        lc_rendimientohora.value:=time;
        lc_rendimientoidt.value:=qaux.Fields[1].AsInteger;
        lc_rendimientotrabajador.value:=qaux.Fields[0].Asstring;
        lc_rendimientomateria_prima.value:=qmprimasid.asstring;
        lc_rendimientopeso_bruto.value:=peso;
        lc_rendimientotara.value:=qproductostara.asfloat;
        lc_rendimientopesoneto.value:=peso-qproductostara.asfloat;
        lc_rendimientoestado.value:=1;
        lc_rendimientonum_limpiadora.value:=qaux.Fields[2].AsInteger;
        lc_rendimiento.post;
        edit2.Text:='';
        edit2.SetFocus;
        a_cero:=false;
        ta_cero.Enabled:=true;
        bloqueado:=false;
        estable:=false;
        pesovalido:=0;
     end else
          begin
              showmessage('NUMERO DE LIMPIADORA NO ENCONTRADO');
              edit2.Text:='';
              edit2.SetFocus;
          end;

end;

procedure Tpprincipal.Button4Click(Sender: TObject);
begin
    if griddesbloqueos.Visible then
    begin
      griddesbloqueos.Visible:=false;
      qdesbloqueos.Close;
    end else
    begin
      griddesbloqueos.Visible:=true;
      qdesbloqueos.Close;
      qdesbloqueos.SQL.Clear;
      qdesbloqueos.SQL.Add('select * from desbloqueos_local where mesa='+''''+lmesa.Caption+''''+' and bascula='+''''+lbascula.Caption+''''+' order by fecha desc,hora desc');
      qdesbloqueos.Open;
    end;
end;

procedure Tpprincipal.Button5Click(Sender: TObject);
begin
    if (combovariedadlinea.KeyValue<>null) and (combosector.KeyValue<>null) then
    begin
        qvariedadeslinea.Append;
        qvariedadeslineaide.value:=qsectoreside.AsInteger;
        qvariedadeslineaidsector.Value:=qsectoresid.AsInteger;
        qvariedadeslineaid.value:=qmprimas2id.asstring;
        qvariedadeslinea.Post;
        qvariedadeslinea.Refresh;
    end else showmessage('　 DEBE SELECCIONAR UNA LINEA DE PRODUCCION Y UNA VARIEDAD　');
end;

procedure Tpprincipal.Button6Click(Sender: TObject);
begin
    if (comboproductolinea.KeyValue<>null) and (combosector.KeyValue<>null) then
    begin
        qproductoslinea.Append;
        qproductoslineaide.value:=qsectoreside.AsInteger;
        qproductoslineaidsector.Value:=qsectoresid.AsInteger;
        qproductoslineacodigo.value:=qproductos2codigo.asstring;
        qproductoslineadescripcion.value:=qproductos2descripcion.asstring;
        qproductoslinea.Post;
        qproductoslinea.Refresh;
    end else showmessage('　 DEBE SELECCIONAR UNA LINEA DE PRODUCCION Y UN PRODUCTO　');
end;

procedure Tpprincipal.Button7Click(Sender: TObject);
begin
   qvariedadeslinea.Delete;
end;

procedure Tpprincipal.Button8Click(Sender: TObject);
begin
   qproductoslinea.delete;
end;

procedure Tpprincipal.Button9Click(Sender: TObject);
begin
   qpesadas.Close;
   qpesadas.SQL.Clear;
   qpesadas.SQL.Add('select * from ea_pesadas where idea>=0 and id='+lid.Text+' and idempresa='+qsectoreside.asstring);
   qpesadas.Open;
   if qpesadas.RecordCount>0 then
   begin
     qauxsrv.Close;
     qauxsrv.SQL.Clear;
     qauxsrv.SQL.Add('delete from pesadas_sector_tmp ');
     qauxsrv.ExecSQL;
     qpesadassectortmp.Open;
     qpesadassectortmp.Append;
     qpesadassectortmpide.value:=qpesadasidempresa.AsInteger;
     qpesadassectortmpid.value:=qpesadasid.AsInteger;
     qpesadassectortmpidea.value:=qpesadasidea.AsInteger;
     qpesadassectortmpidsector.value:=qsectoresid.AsInteger;
     qpesadassectortmpdescsector.value:=qsectoresdescripcion.AsString;
     qpesadassectortmpfecha.value:=date();
     qpesadassectortmphora.value:=time();
     qpesadassectortmppeso_neto.value:=qpesadaspeso_neto.Asfloat;
     qpesadassectortmplote.value:=qpesadaslote.Asstring;
     qpesadassectortmpvariedad.value:=qpesadasmprima.Asstring;
     qpesadassectortmp.post;
     qauxsrv.Close;
     qauxsrv.SQL.Clear;
     qauxsrv.SQL.Add('insert into pesadas_sector select * from pesadas_sector_tmp');
     qauxsrv.ExecSQL;
     qpesadassector.Refresh;
     qpesadassector.First;
     qpesadas.Edit;
     qpesadasid_palet2.Value:='TRIGGER_ON';
     qpesadasfechatrabajo.value:=date();
     qpesadasiddestino.Value:=qsectoresidalmacen.AsInteger;
     qpesadasrecuperar_envases.Value:=1;
     qpesadas.Post;
     qauxsrv.SQL.Clear;
     qauxsrv.SQL.Add('update ea_materiales ea set recuperado=-1 where ea.ide='+qpesadasidempresa.asstring+' and ea.idea='+qpesadasid.asstring+' and ea.idea2='+qpesadasidea.asstring);
     qauxsrv.execsql;
   end;
   lid.Text:='';
   combosectorentradas.KeyValue:=null;
   lid.SetFocus;
end;

procedure Tpprincipal.comboenvasadorasDropDown(Sender: TObject);
begin
    qenvasadoras.Close;
    qenvasadoras.SQL.Clear;
    qenvasadoras.sql.add('select idt,trabajador from movimiento_mesas_local where mesa='+''''+lmesa.Caption+''''+' and salida_real is null and puesto like('+''''+'%ENVASADORA%'+''''+')');
    qenvasadoras.open;
end;

procedure Tpprincipal.comboproductoDropDown(Sender: TObject);
begin
    qproductos.connection:=dbservidor;
    qproductos.sql.clear;
    qproductos.sql.add('select * from productos WHERE (codigo) in (select codigo from productos_sector ');
    qproductos.SQL.Add(' where idsector=(select idsector from sectores_mesas where id=:MESA)) order by descripcion');
    qproductos.Prepare;
    qproductos.ParamByName('MESA').AsInteger:=strtoint(tmesa);
    try
      try
      qproductos.open;
      except
          qproductos.Close;
          qproductos.connection:=dbagrigest;
          qproductos.Open;
      end;
    finally
      if qproductos.RecordCount>0 then comboproducto.KeyValue:=qproductoscodigo.AsString;
      if qproductos.RecordCount=0 then
      begin
          qproductos.close;
          qproductos.sql.clear;
          qproductos.sql.add('select * from productos WHERE ACTIVO=1 ORDER BY descripcion');
          qproductos.open;
      end;
    end;
end;

procedure Tpprincipal.combopuestosExit(Sender: TObject);
begin
    if combopuestos.Text='' then combopuestos.SetFocus;

end;

procedure Tpprincipal.combovariedadCloseUp(Sender: TObject);
begin
      vpesopieza:=qmprimaspesopieza.AsFloat;
      lpesopieza.Caption:=floattostr(vpesopieza);
end;

procedure Tpprincipal.combovariedadDropDown(Sender: TObject);
begin
    qmprimas.sql.clear;
    qmprimas.sql.add('select * from MATERIAS_PRIMAS WHERE (idempresa,id) in (select ide,mprima from materias_primas_sector ');
    qmprimas.SQL.Add(' where idsector=(select idsector from sectores_mesas where id=:MESA)) order by variedad');
    qmprimas.Prepare;
    qmprimas.ParamByName('MESA').AsInteger:=strtoint(tmesa);
    try
      try
        qmprimas.Open;
      except
        qmprimas.Close;
        qmprimas.Connection:=dbagrigest;
        qmprimas.Open;
      end;
    finally

      if qmprimas.RecordCount>0 then combovariedad.KeyValue:=qmprimasid.AsString;
      if (qmprimas.RecordCount=0) or (dbservidor.HostName='localhost') then
      begin
          qmprimas.close;
          qmprimas.sql.clear;
          qmprimas.sql.add('select * from MATERIAS_PRIMAS WHERE mesas=1 and activo=1 ORDER BY descripcion');
          qmprimas.open;
      end;

    end;

end;

procedure Tpprincipal.comdata2Packet(Sender: TObject; const Str: string);
var pos1,pos2:integer;
    peso2:real;
begin
if ttipobascula='4' then
begin
 Pos1 := System.Pos(comdata2.StartString, str);
 pos2 := pos1+7;
 cadena:=copy(str,pos1,10);
 cadena:= StringReplace(cadena, '.', ',',[rfReplaceAll, rfIgnoreCase]);
 cadena:= StringReplace(cadena, ' ', '',[rfReplaceAll, rfIgnoreCase]);

  if visor=cadena then
  begin
      estable:=true;
      tpesar.Enabled:=true;
      vestable.Brush.Color:=clgreen;
  end else
         begin
            estable:=false;
            if not bloqueado then tpesar.Enabled:=false;
            vestable.Brush.Color:=clred;
         end;

  visor:=cadena;
  try
    peso2:=strtofloat(cadena);
    peso2:=peso2*-1;
    cadena:=FormatFloat(',0.000', peso2);
    except
        on error: exception do
        begin
           peso2:=0;
        end;
    end;
  if peso2<0 then cadena:='　ERROR　';
  lpeso.caption :=cadena;
  lpesotrabajador.caption :=cadena;

end;
if ttipobascula='0' then
begin
 Pos1 := System.Pos(comdata2.StartString, str);
 pos2 := pos1+8;
 cadena:=copy(str,pos1,9);
 cadena:= StringReplace(cadena, '.', ',',[rfReplaceAll, rfIgnoreCase]);
 cadena:= StringReplace(cadena, ' ', '',[rfReplaceAll, rfIgnoreCase]);

  if visor=cadena then
  begin
      estable:=true;
      tpesar.Enabled:=true;
      vestable.Brush.Color:=clgreen;

  end else
         begin
            estable:=false;
            if not bloqueado then tpesar.Enabled:=false;
            vestable.Brush.Color:=clred;
         end;

  visor:=cadena;
  try
    peso2:=strtofloat(cadena);
    peso2:=peso2*-1;
    cadena:=FormatFloat(',0.000', peso2);
    except
        on error: exception do
        begin
           peso2:=0;
        end;
    end;
  if peso2<0 then cadena:='　ERROR　';
  lpeso.caption :=cadena;
  lpesotrabajador.caption :=cadena;
end;
end;

procedure Tpprincipal.ComData1Packet(Sender: TObject; const Str: string);
var pos1,pos2:integer;
    peso2:real;
begin

if ttipobascula='0' then
begin
 Pos1 := System.Pos(comdata1.StartString, str);
 pos2 := pos1+8;
 cadena:=copy(str,pos1,9);
 cadena:= StringReplace(cadena, '.', ',',[rfReplaceAll, rfIgnoreCase]);
 cadena:= StringReplace(cadena, ' ', '',[rfReplaceAll, rfIgnoreCase]);

  if visor=cadena then
  begin
      estable:=true;
      tpesar.Enabled:=true;
      vestable.Brush.Color:=clgreen;
  end else
         begin
            estable:=false;
            tpesar.Enabled:=false;
            vestable.Brush.Color:=clred;
         end;

  visor:=cadena;
  try
    peso2:=strtofloat(cadena);
    cadena:=FormatFloat(',0.000', peso2);
    except
        on error: exception do
        begin
           peso2:=0;
        end;
    end;
  lpeso.caption :=cadena;
  lpesotrabajador.caption :=cadena;
end;
if ttipobascula='1' then
begin
 Pos1 := System.Pos(comdata1.StartString, str);
 pos2 := pos1+5;
 cadena:=copy(str,pos1,6);
 cadena:= StringReplace(cadena, '.', ',',[rfReplaceAll, rfIgnoreCase]);
 cadena:= StringReplace(cadena, ' ', '',[rfReplaceAll, rfIgnoreCase]);

  if visor=cadena then
  begin
      estable:=true;
      tpesar.Enabled:=true;
      vestable.Brush.Color:=clgreen;
  end else
         begin
            estable:=false;
            tpesar.Enabled:=false;
            vestable.Brush.Color:=clred;
         end;

  visor:=cadena;
  try
    peso2:=strtofloat(cadena);
    cadena:=FormatFloat(',0.000', peso2);
    except
        on error: exception do
        begin
           peso2:=0;
        end;
    end;
  lpeso.caption :=cadena;
  lpesotrabajador.caption :=cadena;
end;
if ttipobascula='4' then
begin
 Pos1 := System.Pos(comdata1.StartString, str);
 pos2 := pos1+7;
 cadena:=copy(str,pos1,10);
 cadena:= StringReplace(cadena, '.', ',',[rfReplaceAll, rfIgnoreCase]);
 cadena:= StringReplace(cadena, ' ', '',[rfReplaceAll, rfIgnoreCase]);

  if visor=cadena then
  begin
      estable:=true;
      tpesar.Enabled:=true;
      vestable.Brush.Color:=clgreen;
  end else
         begin
            estable:=false;
            tpesar.Enabled:=false;
            vestable.Brush.Color:=clred;
         end;

  visor:=cadena;
  try
    peso2:=strtofloat(cadena);
    cadena:=FormatFloat(',0.000', peso2);
    except
        on error: exception do
        begin
           peso2:=0;
        end;
    end;
  lpeso.caption :=cadena;
  lpesotrabajador.caption :=cadena;
end;



end;

procedure Tpprincipal.DBGrid1CellClick(Column: TColumn);
begin
    timer4.Enabled:=false;
    desdegrid:=true;
    btterminar.Visible:=true;
    btanadir.Visible:=false;
    gid:=qmovimientos_mesaid.AsString;
    qaux.Close;
    qaux.SQL.Clear;
    qaux.SQL.Add('select nif,nombre,id from trabajadores where id='+''''+qmovimientos_mesaidt.AsString+'''');
    qaux.Open;
    Edit1.SetFocus;
    Edit1.Text:=qaux.Fields[0].AsString;
    combopuestos.Visible:=false;
    btterminar.SetFocus;
end;

procedure Tpprincipal.dsproductosDataChange(Sender: TObject; Field: TField);
begin
    if (qproductospesadomanual.AsInteger=1) and a_cero then
    begin
       pesar.Visible:=true;
       tpesar.enabled:=false;
       tboton.enabled:=true;
       ppesadas.Color:=clBtnFace;
       lpesomaximo.Visible:=false;
       lpesominimo.Visible:=false;
    end;
    if qproductospesadomanual.AsInteger=0 then
    begin
//       a_cero:=true;
        if ppesadas.color<>cllime then pesar.Visible:=false;
        tpesar.Enabled:=true;
        tboton.enabled:=false;
        lpesomaximo.Visible:=true;
        lpesominimo.Visible:=true;
    end;
    lproducto.Caption:=qproductoscodigo.asstring;
end;

procedure Tpprincipal.dsqmovimientos_mesaDataChange(Sender: TObject;
  Field: TField);
begin
   ltotempleados.Caption:='Total en el puesto :'+inttostr(qmovimientos_mesa.RecordCount);
end;

procedure Tpprincipal.dsqpuestosDataChange(Sender: TObject; Field: TField);
var dia,mes,anyo:word;
    tfecha:string;
begin
    decodedate(fechacontrol.date,anyo,mes,dia);
    tfecha:=''''+floattostr(anyo)+'/'+floattostr(mes)+'/'+floattostr(dia)+'''';
    qmovimientos_mesa2.close;
    qmovimientos_mesa2.sql.Clear;
    qmovimientos_mesa2.sql.Add('select * from movimiento_mesas where fecha='+tfecha+' and mesa='+''''+qpuestosdescripcion.AsString+''''+' order by trabajador');
    qmovimientos_mesa2.open;
    qaux.close;
    qaux.SQL.Clear;
    qaux.sql.Add('select count(distinct(trabajador)) from movimiento_mesas where fecha='+tfecha+' and mesa='+''''+qpuestosdescripcion.AsString+''''+' order by trabajador');
    qaux.Open;
    lnumtrabajadores.Caption:='N� de trabajadores: '+inttostr(qaux.fields[0].asinteger);

end;

procedure Tpprincipal.dsqsectoresDataChange(Sender: TObject; Field: TField);
var dia,mes,anyo:word;
    tfecha:string;
begin
    decodedate(fechacontrol.date,anyo,mes,dia);
    tfecha:=''''+floattostr(anyo)+'/'+floattostr(mes)+'/'+floattostr(dia)+'''';
    qmovimientos_mesa2.close;
    qmovimientos_mesa2.sql.Clear;
    qmovimientos_mesa2.sql.Add('select * from movimiento_mesas where fecha='+tfecha+' and mesa='+''''+qpuestosdescripcion.AsString+''''+' order by trabajador');
    qmovimientos_mesa2.open;
    qaux.close;
    qaux.SQL.Clear;
    qaux.sql.Add('select count(distinct(trabajador)) from movimiento_mesas where fecha='+tfecha+' and mesa='+''''+qpuestosdescripcion.AsString+''''+' order by trabajador');
    qaux.Open;
    lnumtrabajadores.Caption:='N� de trabajadores: '+inttostr(qaux.fields[0].asinteger);
end;

procedure Tpprincipal.btanadirClick(Sender: TObject);
var horaajustada:ttime;
    hora,minutos,horaaj,minutosaj:word;
    dhora,dminutos,dsegundos,dmilisegundos:word;
    horasfact:real;
    tid:integer;
    horarealanterior,horaajustadaanterior:real;
begin
if edit1.Text<>'' then
begin




/// compruebo que no esta en esta mesa y la inserto
    qaux2.SQL.Clear;
    qaux2.sql.add('select * from movimiento_mesas_local where mesa='+''''+lmesa.Caption+''''+' and idt='+qaux.fields[1].asstring+' and salida_real is null ');
    qaux2.open;

    if qaux2.RecordCount=0  then
    begin

        decodetime(now,dhora,dminutos,dsegundos,dmilisegundos);
        horaaj:=dhora;

        if (dminutos<=ajusteentrada) then minutosaj:=0;
        if (dminutos>ajusteentrada) and (dminutos<=15+ajusteentrada) then minutosaj:=15;
        if (dminutos>15+ajusteentrada) and (dminutos<=30+ajusteentrada) then minutosaj:=30;
        if (dminutos>30+ajusteentrada) and (dminutos<=45+ajusteentrada) then minutosaj:=45;
        if dminutos>45+ajusteentrada then
        begin
            minutosaj:=0;
            horaaj:=horaaj+1;
        end;
// compruebo que no este en otra mesa para ajustar la hora
        qaux2.SQL.Clear;
        qaux2.sql.add('select * from movimiento_mesas where mesa<>'+''''+lmesa.Caption+''''+' and idt='+qaux.fields[1].asstring+' and salida_real is null ');
        qaux2.open;
        if qaux2.RecordCount>0 then horaajustada:=time else horaajustada:=encodetime(horaaj,minutosaj,0,0);

        qaux4.Close;
        qaux4.SQL.Clear;
        qaux4.SQL.Add('select min(id),max(id) from movimiento_mesas_local');
        qaux4.Open;
        if qaux4.Fields[0].AsInteger<=0 then tid:=qaux4.Fields[0].asinteger-1
        else tid:=(qaux4.Fields[1].asinteger+1)*-1;


        lc_movimientos_mesa.Open;
        lc_movimientos_mesa.append;
        lc_movimientos_mesaid.Value:=tid;
        lc_movimientos_mesafecha.Value:=date;//gfecha;
        lc_movimientos_mesamesa.Value:=lmesa.Caption;
        lc_movimientos_mesaidt.Value:=qaux.Fields[1].Asinteger;
        lc_movimientos_mesatrabajador.Value:=qaux.Fields[0].AsString;
        lc_movimientos_mesaentrada_real.Value:=time;
        lc_movimientos_mesaentrada_ajustada.Value:=horaajustada;
        lc_movimientos_mesapuesto.Value:=qtrabajosalmacenpuesto.AsString;
        lc_movimientos_mesatipotrabajo.Value:=qtrabajosalmacentipo_trabajo.AsString;
        lc_movimientos_mesaarticulo.Value:=qtrabajosalmacenarticulo.AsString;
        lc_movimientos_mesaparcela.value:=qtrabajosalmacenparcela.asstring;
        lc_movimientos_mesaestado.value:=1;
        if ednumero.Visible then  lc_movimientos_mesanum_limpiadora.value:=strtoint(ednumero.Text);
        lc_movimientos_mesa.post;
        lc_movimientos_mesa.close;
    end;

///compruebo si esta en otra mesa la saco de la mesa
    qaux2.SQL.Clear;
    qaux2.sql.add('select * from movimiento_mesas where mesa<>'+''''+lmesa.Caption+''''+' and idt='+qaux.fields[1].asstring+' and salida_real is null ');
    qaux2.open;
    ///
    if qaux2.RecordCount>0 then
    begin
       while not qaux2.eof do
       begin

            qaux4.close;
            qaux4.SQL.Clear;
            qaux4.SQL.Add('select * from movimiento_mesas_local where id='+qaux2.Fields[0].Asstring+' and mesa<>'+''''+lmesa.Caption+''''+' and idt='+qaux.fields[1].asstring+' and salida_real is null' );
            qaux4.Open;
            if qaux4.RecordCount=0 then
            begin
                lc_movimientos_mesa.Open;
                lc_movimientos_mesa.append;
                lc_movimientos_mesaid.Value:=qaux2.Fields[0].asinteger;
                lc_movimientos_mesafecha.Value:=qaux2.Fields[1].asdatetime;
                lc_movimientos_mesamesa.Value:=qaux2.Fields[2].asstring;
                lc_movimientos_mesaidt.Value:=qaux2.Fields[3].asinteger;
                lc_movimientos_mesatrabajador.Value:=qaux2.Fields[4].asstring;
                lc_movimientos_mesaentrada_real.Value:=qaux2.Fields[5].asdatetime;
                lc_movimientos_mesasalida_real.Value:=time;
                lc_movimientos_mesaentrada_ajustada.Value:=qaux2.Fields[7].asdatetime;
                lc_movimientos_mesasalida_ajustada.Value:=horaajustada;
                lc_movimientos_mesahorasreales.Value:=time-qaux2.Fields[6].AsDateTime;
                lc_movimientos_mesahorasajustadas.Value:=horaajustada-qaux2.Fields[7].asdatetime;
                lc_movimientos_mesapuesto.Value:=qaux2.Fields[11].AsString;
                lc_movimientos_mesatipotrabajo.Value:=qaux2.Fields[12].AsString;
                lc_movimientos_mesaarticulo.Value:=qaux2.Fields[13].AsString;
                lc_movimientos_mesaparcela.value:=qaux2.Fields[14].AsString;
                lc_movimientos_mesaestado.value:=2;
                lc_movimientos_mesa.post;
            end else
            begin
                //lc_movimientos_mesa.Open;
                lc_movimientos_mesa.Locate('id',qaux2.Fields[0].asstring,[locaseinsensitive,lopartialkey]);
                lc_movimientos_mesa.edit;
                lc_movimientos_mesasalida_real.Value:=time;
                lc_movimientos_mesasalida_ajustada.Value:=time;//horaajustada;
                lc_movimientos_mesahorasreales.Value:=time-qaux2.Fields[6].AsDateTime;
                lc_movimientos_mesahorasajustadas.Value:=time-qaux2.Fields[7].asdatetime;//horaajustada-qaux2.Fields[7].asdatetime;
                lc_movimientos_mesaestado.value:=2;
                lc_movimientos_mesa.post;
            end;
            qaux2.Next;
       end;
    qaux4.Close;
    qaux4.SQL.Clear;
    qaux4.SQL.Add('select min(id)-1 from trabajo_diario_local');
    qaux4.Open;

    tid:=qaux4.Fields[0].AsInteger;
    if tid=0 then tid:=-1;
    if tid>0 then tid:=tid*-1;
    horasfact:=lc_movimientos_mesahorasajustadas.asfloat*24;
    lc_trabajo_diario.open;
    lc_trabajo_diario.Append;
    lc_trabajo_diarioid.value:=tid;
    lc_trabajo_diariofecha.value:=lc_movimientos_mesafecha.AsDateTime;
    lc_trabajo_diarioparcela.value:=lc_movimientos_mesaparcela.AsString;
    lc_trabajo_diarioidt.value:=lc_movimientos_mesaidt.AsInteger;
    lc_trabajo_diariotrabajador.value:=lc_movimientos_mesatrabajador.AsString;
    lc_trabajo_diariotypework.value:=lc_movimientos_mesatipotrabajo.AsString;
    lc_trabajo_diarioarticulo.value:=lc_movimientos_mesaarticulo.AsString;
    lc_trabajo_diarioqhoras.value:=horasfact;
    lc_trabajo_diarioprecio.value:=0;
    lc_trabajo_diariototal.value:=0;
    lc_trabajo_diarioestadotrabajodiario.value:='S';
    lc_trabajo_diarioestado.Value:=1;
    lc_trabajo_diarioorigen.Value:=lc_movimientos_mesamesa.Asstring+' '+lc_movimientos_mesafecha.Asstring+' desde las '+lc_movimientos_mesaentrada_real.AsString+' hasta las '+lc_movimientos_mesasalida_real.AsString;
    if horasfact>0 then lc_trabajo_diario.post else lc_trabajo_diario.Cancel;
//    lc_trabajo_diario.post

    end;

    qmovimientos_mesa.Close;
    qmovimientos_mesa.SQL.Clear;
    qmovimientos_mesa.sql.add(' select * from movimiento_mesas_local where mesa='+''''+lmesa.Caption+''''+' and salida_real is null ');
    qmovimientos_mesa.sql.add('  order by trabajador');
    qmovimientos_mesa.open;
    qenvasadoras.SQL.Clear;
    qenvasadoras.sql.add('select idt,trabajador from movimiento_mesas_local where mesa='+''''+lmesa.Caption+''''+' and salida_real is null and puesto like('+''''+'%ENVASADORA%'+''''+')');
    qenvasadoras.open;
    desdegrid:=false;
    edit1.Clear;
    edit1.SetFocus;
    label5.Caption:='';
    ednumero.Text:='';
    qtrabajosalmacen.Close;
end;

end;

procedure Tpprincipal.btconfiguracionClick(Sender: TObject);
begin
    pentradas.Visible:=false;
    plimpiadoras.visible:=false;
    pcontrol.Visible:=false;
    pconfiguracion.Visible:=true;
    qsectores.Close;
    qvariedadeslinea.Close;
    qproductoslinea.Close;
    qmprimas2.Close;
    qproductos2.Close;
    qsectores.open;
    qvariedadeslinea.open;
    qproductoslinea.open;
    qmprimas2.open;
    qproductos2.open;
    timer4.Enabled:=true;
end;

procedure Tpprincipal.btcontrolClick(Sender: TObject);
begin
    pentradas.Visible:=false;
    plimpiadoras.visible:=false;
    pcontrol.Visible:=true;
    pconfiguracion.Visible:=false;
    fechacontrol.Date:=date();
    qpuestos.Close;
    qsectores.Close;
    qmovimientos_mesa2.close;
    qsectores.open;
    qpuestos.open;
    qmovimientos_mesa2.open;


end;

procedure Tpprincipal.btentradasmprimasClick(Sender: TObject);
var dia,mes,anyo:word;
    vanyo,vmes,vdia,vfecha:string;
begin
    decodedate(date,anyo,mes,dia);
    vanyo:=floattostr(anyo);
    vmes:=floattostr(mes);
    vdia:=floattostr(dia);
    vfecha:=''''+vanyo+'-'+vmes+'-'+vdia+'''';
    pentradas.Visible:=true;
    plimpiadoras.visible:=false;
    pcontrol.Visible:=false;
    pconfiguracion.Visible:=false;
    qsectores.Close;
    qsectores.Open;
    qpesadassector.Close;
    qpesadassector.SQL.Clear;
    qpesadassector.SQL.Add('select * from pesadas_sector where fecha='+vfecha+' order by fecha desc, hora desc');
    qpesadassector.Open;
end;

procedure Tpprincipal.btterminarClick(Sender: TObject);
var horaajustada,ahora,control,vhorainicioalmuerzo,vhorafinalmuerzo,vhoracomienzomerienda,vhorafinmerienda:ttime;
    hora,minutos,horaaj,minutosaj,anyo,mes,dia:word;
    dhora,dminutos,dsegundos,dmilisegundos:word;
    horasfact:real;
    tid,descuento:integer;
    vmes,vdia,vanyo,vfecha,sdescuento:string;
    descanso:integer;
begin
/// obtengo el id del nempleado
    descanso:=empresatiempoalmuerzo.AsInteger;
    lc_movimientos_mesa.close;
    lc_movimientos_mesa.open;
    decodedate(date,anyo,mes,dia);
    vanyo:=floattostr(anyo);
    vmes:=floattostr(mes);
    vdia:=floattostr(dia);
    if length(vmes)=1 then vmes:='0'+vmes;
    if length(vdia)=1 then vdia:='0'+vdia;
    vfecha:=vanyo+'-'+vmes+'-'+vdia;
    tcalendario_laboral.open;
    tcalendario_laboral.locate('fecha',vfecha,[locaseinsensitive,lopartialkey]);
    vhorainicioalmuerzo:=tcalendario_laboralinicio_almuerzo.AsDateTime;
    vhorafinalmuerzo:=tcalendario_laboralfin_almuerzo.AsDateTime;
    vhoracomienzomerienda:=tcalendario_laboralinicio_merienda.AsDateTime;
    vhorafinmerienda:=tcalendario_laboralfin_merienda.AsDateTime;
    ahora:=timeof(now);
    control:=strtotime('15:00:00');
    if ahora<control then
    begin
          if (vhorainicioalmuerzo>0) and (vhorafinalmuerzo>0)  then
          begin
             decodetime(vhorafinalmuerzo-vhorainicioalmuerzo,dhora,dminutos,dsegundos,dmilisegundos);
             descanso:=dhora*60+dminutos;
          end;

          descuento:=descanso*(tcalendario_laboralalmuerzo.asinteger);
    end;
 //   control:=strtotime('17:00:00');
    if ahora>control then
    begin
          if (vhoracomienzomerienda>0) and (vhorafinmerienda>0) then
          begin
             decodetime(vhorafinmerienda-vhoracomienzomerienda,dhora,dminutos,dsegundos,dmilisegundos);
             descanso:=dhora*60+dminutos;
          end;

          descuento:=descanso*(tcalendario_laboralmerienda.asinteger);
    end;
    decodetime(now,dhora,dminutos,dsegundos,dmilisegundos);
    horaaj:=dhora;
    if (dminutos<=ajustesalida) then minutosaj:=0;
    if (dminutos>ajustesalida) and (dminutos<=ajustesalida+15) then minutosaj:=15;
    if (dminutos>ajustesalida+15) and (dminutos<=ajustesalida+30) then minutosaj:=30;
    if (dminutos>ajustesalida+30) and (dminutos<=ajustesalida+45) then minutosaj:=45;
    if dminutos>ajustesalida+45 then
    begin
        minutosaj:=0;
        horaaj:=horaaj+1;
    end;

    horaajustada:=encodetime(horaaj,minutosaj,0,0);

    if ahora<control then
    begin
    if ((lc_movimientos_mesaentrada_real.AsDateTime<vhorainicioalmuerzo) or (lc_movimientos_mesaentrada_real.AsDateTime=lc_movimientos_mesaentrada_ajustada.AsDateTime))
       and ( horaajustada>=vhorafinalmuerzo) then
    begin
      descuento:=descuento;
    end else descuento:=0;
    end;
    if (ahora>control) then
    begin
    if ((lc_movimientos_mesaentrada_real.AsDateTime<vhoracomienzomerienda) or (lc_movimientos_mesaentrada_real.AsDateTime=lc_movimientos_mesaentrada_ajustada.AsDateTime)) and ( horaajustada>vhorafinmerienda) then
    begin
      descuento:=descuento;
    end else descuento:=0;
    end;

    if (horaajustada-lc_movimientos_mesaentrada_ajustada.AsDateTime)*24=0 then descuento:=0;
    if descuento=0 then sdescuento:='00:00:00' else sdescuento:='00:'+inttostr(descuento)+':00';
    lc_movimientos_mesa.Locate('id',gid,[locaseinsensitive]);
    if lc_movimientos_mesaestado.AsInteger=1 then
    begin
        lc_movimientos_mesa.Edit;
        lc_movimientos_mesasalida_real.Value:=time;
        lc_movimientos_mesasalida_ajustada.Value:=horaajustada;
        lc_movimientos_mesahorasreales.Value:=now-lc_movimientos_mesaentrada_ajustada.asdatetime;//-strtotime(sdescuento);
        if horaajustada<lc_movimientos_mesaentrada_ajustada.AsDateTime then
        begin
           lc_movimientos_mesahorasajustadas.Value:=0
        end else
            lc_movimientos_mesahorasajustadas.Value:=horaajustada-lc_movimientos_mesaentrada_ajustada.asdatetime-strtotime(sdescuento);
            lc_movimientos_mesaestado.value:=1;
        lc_movimientos_mesa.Post;
        qmovimientos_mesa.Refresh;
    end;
    if lc_movimientos_mesaestado.AsInteger=0 then
    begin
        lc_movimientos_mesa.Edit;
        lc_movimientos_mesasalida_real.Value:=time;
        lc_movimientos_mesasalida_ajustada.Value:=horaajustada;
        lc_movimientos_mesahorasreales.Value:=now-lc_movimientos_mesaentrada_ajustada.asdatetime-strtotime(sdescuento);
        if horaajustada<lc_movimientos_mesaentrada_ajustada.AsDateTime then
        begin
           lc_movimientos_mesahorasajustadas.Value:=0
        end else
           lc_movimientos_mesahorasajustadas.Value:=horaajustada-lc_movimientos_mesaentrada_ajustada.asdatetime-strtotime(sdescuento);
        lc_movimientos_mesaestado.value:=2;
        lc_movimientos_mesa.Post;
        qmovimientos_mesa.Refresh;
    end;


    qaux2.SQL.Clear;
    qaux2.SQL.Add('select min(id)-1 from trabajo_diario_local');
    qaux2.Open;

    tid:=qaux2.Fields[0].AsInteger;
    if tid=0 then tid:=-1;
    if tid>0 then tid:=tid*-1;
    horasfact:=lc_movimientos_mesahorasajustadas.asfloat*24;
    lc_trabajo_diario.open;
    lc_trabajo_diario.Append;
    lc_trabajo_diarioid.value:=tid;
    lc_trabajo_diariofecha.value:=lc_movimientos_mesafecha.AsDateTime;
    lc_trabajo_diarioparcela.value:=lc_movimientos_mesaparcela.AsString;
    lc_trabajo_diarioidt.value:=lc_movimientos_mesaidt.AsInteger;
    lc_trabajo_diariotrabajador.value:=lc_movimientos_mesatrabajador.AsString;
    lc_trabajo_diariotypework.value:=lc_movimientos_mesatipotrabajo.AsString;
    lc_trabajo_diarioarticulo.value:=lc_movimientos_mesaarticulo.AsString;
    lc_trabajo_diarioqhoras.value:=horasfact;
    lc_trabajo_diarioprecio.value:=0;
    lc_trabajo_diariototal.value:=0;
    lc_trabajo_diarioestadotrabajodiario.value:='S';
    lc_trabajo_diarioestado.Value:=1;
    lc_trabajo_diarioorigen.Value:=lmesa.Caption+' '+lc_movimientos_mesafecha.Asstring+' desde las '+lc_movimientos_mesaentrada_real.AsString+' hasta las '+lc_movimientos_mesasalida_real.AsString;
    if horasfact>0 then lc_trabajo_diario.post else lc_trabajo_diario.Cancel;



    qmovimientos_mesa.Close;
    qmovimientos_mesa.SQL.Clear;
    qmovimientos_mesa.sql.add(' select * from movimiento_mesas_local where mesa='+''''+lmesa.Caption+''''+' and salida_real is null ');
    qmovimientos_mesa.sql.add(' order by trabajador');
    qmovimientos_mesa.open;

    combopuestos.Visible:=true;
    dbgrid2.SetFocus;
    edit1.Clear;
    edit1.SetFocus;
    qenvasadoras.SQL.Clear;
    qenvasadoras.sql.add('select idt,trabajador from movimiento_mesas_local where mesa='+''''+lmesa.Caption+''''+' and salida_real is null and puesto='+''''+'ENVASADORA'+'''');
    qenvasadoras.open;
    desdegrid:=false;
    btanadir.Visible:=true;
    btterminar.Visible:=false;
    combopuestos.Visible:=true;
    label5.caption:='';
    qtrabajosalmacen.Close;
    combopuestos.ListFieldIndex:=-1;
    qaux.Close;
    timer4.Enabled:=true;

end;

procedure Tpprincipal.bpenvasadaClick(Sender: TObject);
begin
    tpesar.Enabled:=enabled;
    ta_cero.Enabled:=enabled;
    paquetes:=0;
    cadena:='';
    if (combovariedad.Text='') or (comboproducto.Text='') or (comboenvasadoras.Text='') then
    begin
        showmessage('DEBE SELECCIONAR VARIEDAD, PRODUCTO  Y ENVASADORA');
    end ELSE
    begin
        plimpiadoras.Visible:=false;
        ppesadas.Visible:=true;
        ppesaruvalimpiadoras.Visible:=false;
        BPENVASADA.Visible:=FALSE;
        BPLIMPIADORA.Visible:=TRUE;
        ta_cero.enabled:=true;
        tpesar.enabled:=true;
        timer4.Enabled:=false;
        if puerto1.Connected=false then puerto1.Connected:=true;
        bloqueado:=false;
        if teclado.visible=true then teclado.Visible:=false;
        qmovimientos_mesa.close;
        lc_trabajo_diario.close;
        lc_movimientos_mesa.Close;
        button4.SetFocus;
    end;

end;

procedure Tpprincipal.Edit1Enter(Sender: TObject);
begin
   edit1.Clear;
end;

procedure Tpprincipal.Edit1Exit(Sender: TObject);
begin
    if edit1.text<>'' then
    begin
        qaux.Close;
        qaux.SQL.Clear;
        qaux.SQL.Add('select nombre,id from trabajadores where nif='+''''+edit1.Text+'''');
        qaux.open;
            if qaux.RecordCount>0 then
            begin
            label5.Caption:=qaux.Fields[0].AsString;

            qaux2.Close;
            qaux2.SQL.Clear;
            qaux2.sql.add('select * from movimiento_mesas_local where mesa='+''''+lmesa.Caption+''''+' and salida_real is null and idt='+qaux.fields[1].asstring);
            qaux2.sql.add('  order by idt');
            qaux2.open;
            if (qaux2.RecordCount>0) and (not desdegrid) then
            begin
                edit1.Clear;
                edit1.SetFocus;
                btanadir.Enabled:=true;
                btanadir.Caption:='A�adir';
                combopuestos.Visible:=true;
            end;
        end else
             begin
               showmessage('EMPLEADO/A NO ENCONTRADO');
               EDIT1.SetFocus;
             end;
    end else
    begin
       label5.Caption:='';
    end;
    desdetrabajador:=true;
    qtrabajosalmacen.Open;
    combopuestos.ListFieldIndex:=-1;
end;

procedure Tpprincipal.Edit2Enter(Sender: TObject);
begin
    edit2.Clear;
end;

procedure Tpprincipal.Edit2Exit(Sender: TObject);
var peso:real;
    pesoletras,vdia,vmes,vanyo,vfecha:string;
    mes,dia,anyo:word;
begin
if edit2.Text<>'' then
begin
    decodedate(date,anyo,mes,dia);
    vanyo:=floattostr(anyo);
    vmes:=floattostr(mes);
    vdia:=floattostr(dia);
    if length(vmes)=1 then vmes:='0'+vmes;
    if length(vdia)=1 then vdia:='0'+vdia;
    vfecha:=''''+vanyo+'-'+vmes+'-'+vdia+'''';
    num_limpiadora:=-1;
    qaux.Close;
    qaux.SQL.Clear;
    qaux.SQL.Add('select trabajador,idt,num_limpiadora from movimiento_mesas  where fecha='+vfecha+' and mesa='+''''+lmesa.caption+''''+' and idt=(select id from trabajadores where nif='+''''+edit2.Text+''''+')');
    qaux.open;
    if qaux.RecordCount>0 then
    num_limpiadora:=qaux.Fields[1].AsInteger
    else
    begin
      qaux.Close;
      qaux.SQL.Clear;
      qaux.SQL.Add('select trabajador,idt,num_limpiadora from movimiento_mesas  where fecha='+vfecha+' and mesa='+''''+lmesa.caption+''''+' and num_limpiadora='+''''+edit2.Text+'''');
      qaux.open;
      if qaux.RecordCount>0 then
      num_limpiadora:=qaux.Fields[1].AsInteger
      else num_limpiadora:=-1
    end;
    if num_limpiadora=-1 then
    begin
        showmessage('TRABAJADOR/A NO REGISTRADO EN EL PUESTO');
        edit2.SetFocus;
    end;
end;

end;

procedure Tpprincipal.ednumeroEnter(Sender: TObject);
begin
    teclado2.Visible:=true;
    teclado2.Top:=ednumero.Top+135;
    teclado2.left:=ednumero.Left+105+139;
end;

procedure Tpprincipal.ednumeroExit(Sender: TObject);
begin
   teclado2.Visible:=false;
end;

procedure Tpprincipal.fechacontrolChange(Sender: TObject);
var dia,mes,anyo:word;
    tfecha:string;
begin
    decodedate(fechacontrol.date,anyo,mes,dia);
    tfecha:=''''+floattostr(anyo)+'/'+floattostr(mes)+'/'+floattostr(dia)+'''';
    qmovimientos_mesa2.close;
    qmovimientos_mesa2.sql.Clear;
    qmovimientos_mesa2.sql.Add('select * from movimiento_mesas where fecha='+tfecha+' and mesa='+''''+qpuestosdescripcion.AsString+''''+' order by trabajador');
    qmovimientos_mesa2.open;
    qaux.close;
    qaux.SQL.Clear;
    qaux.sql.Add('select count(distinct(trabajador)) from movimiento_mesas where fecha='+tfecha+' and mesa='+''''+qpuestosdescripcion.AsString+''''+' order by trabajador');
    qaux.Open;
    lnumtrabajadores.Caption:='N� de trabajadores: '+inttostr(qaux.fields[0].asinteger);

end;

procedure Tpprincipal.lidEnter(Sender: TObject);
begin
    teclado2.Visible:=true;
    teclado2.Top:=lid.Top;
    teclado2.left:=lid.Left+165+139;
end;

procedure Tpprincipal.lidExit(Sender: TObject);
begin
    teclado2.Visible:=false;
end;

procedure Tpprincipal.FormKeyPress(Sender: TObject; var Key: Char);
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=#13) and not (activecontrol is tdblookupcontrol)then
    begin
        Perform(WM_NextDLGCtl,0,0);
        key:=#0;
    end;

end;

procedure Tpprincipal.FormShow(Sender: TObject);
var F: TextFile;
    sLinea,tuser,tpass,tpuerto: String;
    hora1,hora2,hora3:ttime;

begin
  gfecha:=date;
  desdegrid:=false;
  visor:='';
  estable:=false;
  AssignFile( F, ExtractFilePath( Application.ExeName ) + 'mesas.ini' );
  Reset( F );
  Memo1.Clear;
  while not Eof( F ) do
  begin
    ReadLn( F, sLinea );
    Memo1.Lines.Add( sLinea );
  end;

  CloseFile( F );
    thost:=memo1.lines[0];
    tuser:=memo1.lines[1];
    tpass:=memo1.lines[2];
    tmesa:=memo1.lines[3];
    tbascula:=memo1.lines[4];
    tpuerto:=memo1.lines[5];
    ttipobascula:=memo1.lines[6];
    tpreguntarlimpiadora:=memo1.lines[7];
    treplicacion:=memo1.lines[8];
    tbasedatos:=memo1.lines[9];


    case strtoint(ttipobascula) of
    0:begin
       puerto1.TriggersOnRxChar:=false;
       comdata1.ComPort:=puerto1;
       comdata2.ComPort:=puerto1;
       comdata1.MaxBufferSize:=8;
       comdata1.Size:=8;
       comdata1.startstring:='+';
       comdata1.StopString:='#13';
       comdata2.MaxBufferSize:=8;
       comdata2.Size:=8;
       comdata2.startstring:='-';
       comdata2.StopString:=#13;
    end;

    1:begin
       puerto1.TriggersOnRxChar:=false;
       comdata1.ComPort:=puerto1;
       comdata2.ComPort:=puerto1;
       comdata1.MaxBufferSize:=7;
       comdata1.Size:=7;
       comdata1.startstring:='0';
       comdata1.StopString:='#13';
       comdata2.MaxBufferSize:=8;
       comdata2.Size:=8;
       comdata2.startstring:='''';
       comdata2.StopString:=#13;

    end;
    2:begin
       comdata1.ComPort:=nil;
       comdata2.ComPort:=nil;
       puerto1.TriggersOnRxChar:=true;
    end;
    3:begin
       comdata1.ComPort:=nil;
       comdata2.ComPort:=nil;
       puerto1.TriggersOnRxChar:=true;
    end;
    4:begin
       puerto1.TriggersOnRxChar:=false;
       comdata1.ComPort:=puerto1;
       comdata1.MaxBufferSize:=8;
       comdata1.Size:=8;
       comdata1.startstring:='+';
       comdata1.StopString:=#13;
       comdata2.ComPort:=puerto1;
       comdata1.MaxBufferSize:=8;
       comdata1.Size:=8;
       comdata2.startstring:='-';
       comdata2.StopString:=#13;
    end;
    5:begin
       puerto1.TriggersOnRxChar:=false;
       comdata1.ComPort:=puerto1;
       comdata1.MaxBufferSize:=7;
       comdata1.Size:=7;
       comdata1.startstring:='+';
       comdata1.StopString:=#13;
       comdata2.ComPort:=puerto1;
       comdata1.MaxBufferSize:=7;
       comdata1.Size:=7;
       comdata2.startstring:='-';
       comdata2.StopString:=#13;
    end;
    10:begin    // don ciro bascula dibal
       comdata1.ComPort:=nil;
       comdata2.ComPort:=nil;
       puerto1.TriggersOnRxChar:=true;
    end;

    end;

    lmesa.Caption:='Puesto '+tmesa;
    lbascula.Caption:='B�scula ' +tbascula;
    if tpreguntarlimpiadora='1' then
    begin
      lnumero.Visible:=true;
      ednumero.Visible:=true;
//      teclado.Visible:=true;
      bplimpiadora.Visible:=true;
      bpenvasada.Visible:=false;
    end;
    if tpreguntarlimpiadora='0' then
    begin
      lnumero.Visible:=false;
      ednumero.Visible:=false;
//      teclado.Visible:=false;
      bplimpiadora.Visible:=false;
      bpenvasada.Visible:=true;
    end;
    DBservidor.Connected:=false;
    DBservidor.HostName:=thost;
    DBservidor.User:=tuser;
    DBservidor.Password:=tpass;
    dbservidor.Database:=tbasedatos;
    try
       DBservidor.connected:=true;
       lconectado.caption:='CONECTADO A: ' +thost;
    except
       showmessage('Error conectando con el servidor');
       dbservidor.HostName:='localhost';
       dbservidor.User:='root';
       dbservidor.Password:='';
       lconectado.caption:='CONECTADO A: EQUIPO LOCAL';
    end;



    DBagrigest.Connected:=false;
    DBagrigest.HostName:='localhost';
    DBagrigest.User:='root';
    DBagrigest.Password:='';
    DBagrigest.connected:=true;
    qaux.SQL.Clear;

    plimpiadoras.Visible:=false;
    ppesadas.Visible:=false;
    ppesaruvalimpiadoras.Visible:=false;
    hora3:=hora1-hora2;
    tcalendario_laboral.open;

    qtrabajosalmacen.Open;
    qmovimientos_mesa.close;
    qmovimientos_mesa.SQL.Clear;
    qmovimientos_mesa.sql.add(' select * from movimiento_mesas_local where mesa='+''''+lmesa.Caption+''''+' and salida_real is null order by trabajador');
    qmovimientos_mesa.open;
    qenvasadoras.Close;
    qenvasadoras.SQL.Clear;
    qenvasadoras.sql.add('select idt,trabajador from movimiento_mesas_local where mesa='+''''+lmesa.Caption+''''+' and salida_real is null and puesto like('+''''+'%ENVASADORA%'+''''+')');
    qenvasadoras.open;
    qtrabajosalmacen.close;
    qtrabajosalmacen.SQL.Clear;
    qtrabajosalmacen.sql.add(' select * from TRABAJOS_ALMACEN where activo=1 and mesas like ('+''''+'%*'+tmesa+'*%'+'''' +') ORDER BY puesto');
    qtrabajosalmacen.open;
    qproductos.close;
    qproductos.sql.clear;
    qproductos.sql.add('select * from productos WHERE (codigo) in (select codigo from productos_sector ');
    qproductos.SQL.Add(' where idsector=(select idsector from sectores_mesas where id=:MESA)) order by descripcion');
    qproductos.Prepare;
    qproductos.ParamByName('MESA').AsInteger:=strtoint(tmesa);
    qproductos.Open;
    try
      try
      qproductos.open;
      except
          qproductos.connection:=dbagrigest;
          qproductos.open;
      end;
    finally
    //    if qproductos.RecordCount>0 then comboproducto.KeyValue:=qproductoscodigo.AsString;
        if (qproductos.RecordCount=0) or (dbservidor.HostName='localhost') then
        begin
          qproductos.sql.clear;
          qproductos.sql.add('select * from productos WHERE ACTIVO=1 ORDER BY descripcion');
          qproductos.open;
        end;
    //    comboproducto.KeyValue:=qproductoscodigo.AsString;
    end;
    qmprimas.close;
    qmprimas.sql.clear;
    qmprimas.sql.add('select * from MATERIAS_PRIMAS WHERE (idempresa,id) in (select ide,mprima from materias_primas_sector ');
    qmprimas.SQL.Add(' where idsector=(select idsector from sectores_mesas where id=:MESA)) order by variedad');
    qmprimas.ParamByName('MESA').AsInteger:=strtoint(tmesa);
    qmprimas.Prepare;
    try
      try
        qmprimas.Close;
        qmprimas.connection:=dbagrigest;
        qmprimas.open;
        except
          qmprimas.Close;
          qmprimas.connection:=dbservidor;
          qmprimas.open;
      end;
    finally
    //  if qmprimas.RecordCount>0 then combovariedad.KeyValue:=qmprimasid.AsString;
      if (qmprimas.RecordCount=0) or (dbservidor.HostName='localhost') then
      begin
        qmprimas.Close;
        qmprimas.SQL.Clear;
        qmprimas.SQL.Add('select * from materias_primas where activo=1 and mesas=1 order by variedad');
        qmprimas.Open;
      end;
     // combovariedad.KeyValue:=qmprimasid.AsString;

    end;
    if qenvasadoras.RecordCount=1 then comboenvasadoras.KeyValue:=qenvasadorasidt.asstring;
    variedad:=qmprimasid.asstring;
    producto:=qproductoscodigo.AsString;
    puerto1.Connected:=FALSE;
    puerto1.Close;
    puerto1.Port:='COM'+tpuerto;

    if tmesa='0' then
    begin
       pbotones.Visible:=false;
       pinformacion.Visible:=false;
       plimpiadoras.Visible:=true;
       pconfiguracion.Visible:=false;
       pcontrol.Visible:=false;
       pentradas.Visible:=false;
       bplimpiadora.Visible:=true;
       bpenvasada.Visible:=false;
       tpesar.Enabled:=false;
       ta_cero.Enabled:=false;
       timer4.Enabled:=false;
       btcontrol.Visible:=true;
       btentradasmprimas.Visible:=true;
       btconfiguracion.Visible:=true;
    end else
    begin
       pbotones.Visible:=true;
       pinformacion.Visible:=true;
       plimpiadoras.Visible:=true;
       pconfiguracion.Visible:=false;
       pcontrol.Visible:=false;
       pentradas.Visible:=false;
       bplimpiadora.Visible:=true;
       bpenvasada.Visible:=true;
//       tpesar.Enabled:=true;
//       ta_cero.Enabled:=true;
//       timer4.Enabled:=true;
       btcontrol.Visible:=false;
       btentradasmprimas.Visible:=false;
       btconfiguracion.Visible:=false;

    end;
    empresa.open;
    ajusteentrada:=empresaajusteentrada.AsFloat;
    ajustesalida:=empresaajustesalida.AsFloat;
    porcentagebloqueo:=empresaporcbloqueo.AsFloat;
    desbloqueado:=true;
    tpesar.Enabled:=false;
    ta_cero.Enabled:=false;
    tsincronizar.Enabled:=true;
    tboton.Enabled:=false;

end;

procedure Tpprincipal.PESARClick(Sender: TObject);
var peso:real;
    pesoletras:string;
begin
    try
//    puerto1.Open;
    pesoletras:=lpeso.Caption;
    a_cero:=false;
    try
       peso:=strtofloat(pesoletras);
    except

    end;
    pesar.visible:=false;
    tboton.Enabled:=false;
    if qproductospesadomanual.AsInteger=1 then
    begin

        lc_produccion.Open;
        lc_produccion.Append;
        lc_produccionfecha.value:=date;//gfecha;
        lc_produccionhora.value:=time;
        lc_produccionmesa.value:=lmesa.Caption;
        lc_produccionbascula.value:=lbascula.Caption;
        lc_produccionidt.value:=qenvasadorasidt.asinteger;
        lc_produccionembasadora.value:=qenvasadorastrabajador.asstring;
        lc_produccionmateria_prima.value:=qmprimasid.asstring;
        lc_produccionproducto.value:=qproductoscodigo.asstring;
        lc_producciontara.value:=qproductostara.asfloat;
        lc_produccionpeso_teorico.value:=qproductostara.AsFloat+qproductospeso.AsFloat;
        lc_produccionpeso_real.Value:=pesovalido;//peso;
        lc_produccionestado.Value:=1;
        lc_produccion.Post;
        ppesadas.Color:=clLime;
        lpiezas.Caption:='0';
        a_cero:=false;
        ta_cero.Enabled:=true;
        tboton.enabled:=true;
        bloqueado:=false;
        estable:=false;
        pesovalido:=0;
    end;
    if qproductospesadomanual.asinteger=0 then
    begin

        lc_produccion.Open;
        lc_produccion.Append;
        lc_produccionfecha.value:=date;//gfecha;
        lc_produccionhora.value:=time;
        lc_produccionmesa.value:=lmesa.Caption;
        lc_produccionbascula.value:=lbascula.Caption;
        lc_produccionidt.value:=qenvasadorasidt.asinteger;
        lc_produccionembasadora.value:=qenvasadorastrabajador.asstring;
        lc_produccionmateria_prima.value:=qmprimasid.asstring;
        lc_produccionproducto.value:=qproductoscodigo.asstring;
        lc_producciontara.value:=qproductostara.asfloat;
        lc_produccionpeso_teorico.value:=qproductostara.AsFloat+qproductospeso.AsFloat;
        lc_produccionpeso_real.Value:=peso;
        lc_produccionestado.Value:=1;
        lc_produccion.Post;
        tboton.enabled:=false;
        a_cero:=false;
        ta_cero.Enabled:=true;
        estable:=false;
        pesar.visible:=false;
        bloqueado:=false;
    end;
    finally
    end;

end;

procedure Tpprincipal.puerto1RxBuf(Sender: TObject; const Buffer;
  Count: Integer);
  var str:string;
begin
if ttipobascula='0' then
    begin
      puerto1.Readstr(Str, Count);
    end;
if ttipobascula='1' then
    begin
      puerto1.Readstr(Str, Count);
    end;
if ttipobascula='4' then
    begin
      puerto1.Readstr(Str, Count);
    end;

end;

procedure Tpprincipal.puerto1RxChar(Sender: TObject; Count: Integer);
var
  str,primera: String;
  peso2:real;
  letra,x:integer;
  Buffer:array [0..10] of byte;
begin
/// tipo 10 bascula dibal don ciro
if ttipobascula='10' then
begin
  puerto1.ReadStr(Str, count);
  str:= StringReplace(str, '.', ',',[rfReplaceAll, rfIgnoreCase]);
  str:= StringReplace(str, '= ', '',[rfReplaceAll, rfIgnoreCase]);
  delete(str,8,length(str)-7);
  cadena:=str;
  if visor=cadena then
  begin
      estable:=true;
      if desbloqueado then tpesar.Enabled:=true;
      vestable.Brush.Color:=clgreen;
  end else
         begin
            estable:=false;
            tpesar.Enabled:=false;
            vestable.Brush.Color:=clred;
         end;
  visor:=cadena;
  try
    peso2:=strtofloat(cadena);
    cadena:=floattostr(peso2);
    except
        on error: exception do
        begin
           peso2:=0;
           cadena:='------';
        end;
    end;

  lpeso.caption :=cadena;
  lpesotrabajador.caption :=cadena;
end;
if ttipobascula='1' then
begin
  if count>=12 then
  begin
      puerto1.Readstr(Str, count);
      str:= StringReplace(str, '.', ',',[rfReplaceAll, rfIgnoreCase]);
      str:= StringReplace(str, '=','',[rfReplaceAll, rfIgnoreCase]);
      str:= StringReplace(str, '+', '',[rfReplaceAll, rfIgnoreCase]);
      str:= StringReplace(str, ' ', '',[rfReplaceAll, rfIgnoreCase]);
      cadena:=str;
      cadena:=solonumeros(cadena);
      cadena:=copy(cadena,0,7);
      if visor=cadena then
      begin
        estable:=true;
        try
        peso2:=strtofloat(cadena);
        vestable.Brush.Color:=clgreen;
        except
              on error: exception do
              begin
                 peso2:=0;
                 cadena:='------';
              end;
        end;
//        cadena:=floattostr(peso2);
        lpeso.caption:=cadena;
        lpesotrabajador.caption:=cadena;
      end
      else
      begin
       estable:=false;
       vestable.Brush.Color:=clred;
      end;
      visor:=cadena;

   end;

end;
{if ttipobascula='0' then
begin
  puerto1.ReadStr(Str, Count);
  str:= StringReplace(str, '.', ',',[rfReplaceAll, rfIgnoreCase]);
  str:= StringReplace(str, '= ', '',[rfReplaceAll, rfIgnoreCase]);
  delete(str,8,length(str)-7);
  cadena:=str;
 // cadena:=Copy(str, Length(str)+1- 6, 7);
//  str:= StringReplace(str, '=-', '',[rfReplaceAll, rfIgnoreCase]);
  if visor=cadena then estable:=true else estable:=false;

  visor:=cadena;
  try
    peso2:=strtofloat(cadena);
    except
        on error: exception do
        begin
           peso2:=0;
           cadena:='------';
        end;
    end;

  lpeso.caption :=cadena;
  lpesotrabajador.caption :=cadena;
//   lpeso.caption :=floattostr(strtofloat(cadena));
//  lpeso.caption :=Copy(str, Length(str)+1- 6, 6);
//  lpesotrabajador.caption :=Copy(str, Length(str)+1- 6, 6);
end;
if ttipobascula='2' then
begin
//  if count>=10 then
//  begin
      lpeso.caption:='dentro '+inttostr(count);
      x:=2;
      puerto1.Readstr(Str, count);
      str:= StringReplace(str, '.', ',',[rfReplaceAll, rfIgnoreCase]);
      str:= StringReplace(str, '=','',[rfReplaceAll, rfIgnoreCase]);
      str:= StringReplace(str, '+', '',[rfReplaceAll, rfIgnoreCase]);
      str:= StringReplace(str, ' ', '',[rfReplaceAll, rfIgnoreCase]);
      cadena:=str;
//      cadena:=solonumeros(cadena);

      cadena:=copy(cadena,0,7);
      if visor=cadena then
      begin
        estable:=true;
        try
        peso2:=strtofloat(cadena)/1000;
        vestable.Brush.Color:=clgreen;
        except
              on error: exception do
              begin
                 peso2:=0;
                 cadena:='------';
              end;
        end;
        cadena:=floattostr(peso2);
        lpeso.caption:=cadena;
        lpesotrabajador.caption:=cadena;
      end
      else
      begin
       estable:=false;
       vestable.Brush.Color:=clred;
      end;
      visor:=cadena;

  // end;// else lpeso.caption:=inttostr(count);

end;

      //    puerto1.ClearBuffer(true,true);
{  letra:=strtoint(cadena[7]);
  if (letra in [0..9])  then
  begin
      cadena:=cadena+str;
      cadena:= StringReplace(cadena, '.', ',',[rfReplaceAll, rfIgnoreCase]);
      cadena:= StringReplace(cadena, '= ', '',[rfReplaceAll, rfIgnoreCase]);
      cadena:= StringReplace(cadena, '+', '',[rfReplaceAll, rfIgnoreCase]);
      cadena:=copy(cadena,0,7);
      if visor=cadena then estable:=true else estable:=false;
      visor:=cadena;
      try
      peso2:=strtofloat(cadena);
    //    cadena:=format('<%6.3d>',[peso2]);
        //    cadena:=floattostr(peso2);
      //  visor:=floattostr(peso2);//cadena;
        except
            on error: exception do
            begin
               peso2:=0;
               cadena:='------';
            end;
        end;
        lpeso.caption:=cadena;
        lpesotrabajador.caption:=cadena;
        cadena:='';
        delete(str,0,length(str));
        cadena:=str;
  end else
         begin
          cadena:='';
          delete(str,0,length(str));
          cadena:=str;
         end;

  end;  }


// puerto1.Readstr(Str, count);
// str:= StringReplace(str, '.', ',',[rfReplaceAll, rfIgnoreCase]);
// str:= StringReplace(str, '= ', '',[rfReplaceAll, rfIgnoreCase]);
// str:= StringReplace(str, '+', ' ',[rfReplaceAll, rfIgnoreCase]);
// delete(str,8,length(str)-7);
// cadena:=str;
{ if visor=cadena then estable:=true else estable:=false;

 visor:=cadena;
 try
 peso2:=strtofloat(cadena);
 except
    on error: exception do
            begin
               peso2:=0;
  //             cadena:='------';
            end;
 end;
 lpeso.caption:=cadena;
 lpesotrabajador.caption:=cadena;
}
 // if length(str)>=7 then
 // begin
 // end;
 // puerto1.ClearBuffer(true,true);
  //   lpeso.caption :=floattostr(strtofloat(cadena));
//  lpeso.caption :=Copy(str, Length(str)+1- 6, 6);
//  lpesotrabajador.caption :=Copy(str, Length(str)+1- 6, 6);
if ttipobascula='3' then
begin
//if count>12 then
//begin
  puerto1.ReadStr(Str, Count);
//  if str[3]='.' then
//  begin
  str:= StringReplace(str, '.', ',',[rfReplaceAll, rfIgnoreCase]);
  str:= StringReplace(str, '= ', '',[rfReplaceAll, rfIgnoreCase]);
  delete(str,8,length(str)-7);
  cadena:=str;
 // cadena:=Copy(str, Length(str)+1- 6, 7);
//  str:= StringReplace(str, '=-', '',[rfReplaceAll, rfIgnoreCase]);
  if visor=cadena then
  begin
      estable:=true;
      tpesar.Enabled:=true;
      vestable.Brush.Color:=clgreen;
  end else
         begin
            estable:=false;
            tpesar.Enabled:=false;
            vestable.Brush.Color:=clred;
         end;

  visor:=cadena;
  try
    peso2:=strtofloat(cadena)*10;
    cadena:=floattostr(peso2);
    except
        on error: exception do
        begin
           peso2:=0;
           cadena:='------';
        end;
    end;

  lpeso.caption :=cadena;
  lpesotrabajador.caption :=cadena;
  //end;
//end;
end;

end;


procedure Tpprincipal.tpesarTimer(Sender: TObject);
var    pesoletras:string;
       peso,peso2,peso3,pesoconerror:real;
       anyo,mes,dia:word;
       vanyo,vmes,vdia,vfecha:string;
       piezas:integer;
begin

//    qpesadassector.close;
//    qpesadassector.Open;
    qmprimas.Locate('id',variedad,[locaseinsensitive]);
    decodedate(date,anyo,mes,dia);
    vanyo:=floattostr(anyo);
    vmes:=floattostr(mes);
    vdia:=floattostr(dia);
    if length(vmes)=1 then vmes:='0'+vmes;
    if length(vdia)=1 then vdia:='0'+vdia;
    vfecha:=vanyo+'-'+vmes+'-'+vdia;
    tcalendario_laboral.refresh;
    tcalendario_laboral.locate('fecha',vfecha,[locaseinsensitive,lopartialkey]);

    pesoletras:=lpeso.Caption;

    try
    peso2:=strtofloat(pesoletras);
    except
        on error: exception do
        begin
           peso2:=0;
        end;
    end;
//

    bloqueominimo:=qproductospeso.AsFloat+qproductostara.AsFloat;
    bloqueominimo:=bloqueominimo*(porcentagebloqueo/100);   // bloqueominimo/1.2
    if (peso2>bloqueominimo) and a_cero then
    begin
       bloqueado:=true;
    end;

    if bloqueado and (peso2<0.100) and a_cero and desbloqueado then
    begin
       desbloqueado:=false;
       bloqueado:=false;
       tpesar.Enabled:=false;
       tsincronizar.Enabled:=false;
       puerto1.Connected:=false;
       fdesbloqueo := Tfdesbloqueo.create(nil);
       try
         fdesbloqueo.showmodal();

       finally
         fdesbloqueo.free;
         desbloqueado:=true;
         tpesar.Enabled:=true;
         puerto1.Connected:=true;
         qdesbloqueos.Open;
         qdesbloqueos.append;
         qdesbloqueosenvasadora.Value:=pprincipal.qenvasadorastrabajador.asstring;
         qdesbloqueosmesa.Value:=pprincipal.lmesa.Caption;
         qdesbloqueosbascula.Value:=pprincipal.lbascula.Caption;
         qdesbloqueosestado.Value:=1;
         qdesbloqueosfecha.Value:=date;
         qdesbloqueoshora.value:=time;
         qdesbloqueos.Post;
         qdesbloqueos.Close;
         tsincronizar.Enabled:=true;
       end;
       puerto1.Connected:=true;
    end;

//    peso2:=peso2*1000;
    if qproductospesadomanual.Asinteger=1 then
    begin
        try
         tboton.Enabled:=true;
         lpesominimo.Caption:='';
         lpesomaximo.Caption:='';
         peso3:=strtofloat(pesoletras);

          except
              on error: exception do
              begin
                 peso3:=0;
              end;
          end;
    end;

    if qproductospesadomanual.Asinteger=0 then
    begin

        lpesominimo.Caption:='Peso Minimo: '+floattostr(qproductospeso.AsFloat+qproductostara.AsFloat);
        lpesomaximo.Caption:='Peso Maximo: '+floattostr(qproductospeso.AsFloat+qproductostara.AsFloat+qproductoserrorpeso.AsFloat);
        peso:=(qproductospeso.AsFloat+qproductostara.AsFloat);//*1000;
        pesoconerror:=(qproductospeso.AsFloat+qproductostara.AsFloat+qproductoserrorpeso.AsFloat);//*1000;

        if (peso2<peso) and a_cero then
        begin
           if vpesopieza=0 then vpesopieza:=1;
           lpiezas.caption:='+'+floattostr(trunc((peso*1000-peso2*1000)/vpesopieza)+1);
           ppesadas.Color:=clyellow;
        end;
        if (peso2>=peso) and (peso2<=pesoconerror) and (estable) and (a_cero) then
        begin
            ppesadas.Color:=cllime;
            lpiezas.Caption:='0';
            if qproductosmostrar_boton.asinteger=1 then tboton.Enabled:=true
            else
                begin
                    tboton.Enabled:=true;
                end;
        end;
        if (peso2>pesoconerror) and a_cero then
        begin
           if vpesopieza=0 then vpesopieza:=1;
           lpiezas.caption:='-'+floattostr(trunc((peso2*1000-pesoconerror*1000)/vpesopieza)+1);
           ppesadas.Color:=clred;
        end;
    end;

end;

procedure Tpprincipal.Ta_ceroTimer(Sender: TObject);
var pesoletras:string;
    peso2:real;
begin
    pesoletras:=lpeso.Caption;

    try
    peso2:=strtofloat(pesoletras);
    except
        on error: exception do
        begin
           peso2:=-1;
        end;
    end;
    pesar.Visible:=false;

    if qproductospesadomanual.Asinteger=1 then
    begin
        ppesadas.Caption:='RETIRE EL ENVASE';
        lpeso.Visible:=false;
        lpiezas.Caption:='0';
        tpesar.Enabled:=false;
        ppesadas.Color:=clfuchsia;
        pesar.Visible:=false;

        if peso2=0 then
        begin
            a_cero:=true;
            ta_cero.Enabled:=false;
            ppesadas.Caption:='';

        end;
        if a_cero then
        begin
          ppesadas.Color:=clBtnFace;
          tpesar.Enabled:=true;
          lpeso.Visible:=true;
        end;

    end;
    if qproductospesadomanual.Asinteger=0 then
    begin
//        ppesadas.Color:=clred;
        ppesadas.Caption:='RETIRE EL ENVASE';
        lpiezas.Caption:='0';
        lpeso.visible:=false;
        ppesadas.Color:=clfuchsia;
        if peso2=0 then
        begin
            a_cero:=true;
            ta_cero.Enabled:=false;
            ppesadas.Caption:='';
        end;
        if a_cero then
        begin
          ppesadas.Color:=clBtnFace;
          tpesar.Enabled:=true;
          lpeso.Visible:=true;
        end;
    end;

end;

procedure Tpprincipal.TbotonTimer(Sender: TObject);
var pesoletras:string;
    peso,peso2,pesoconerror:real;
begin
    pesoletras:=lpeso.Caption;
    try
    peso2:=strtofloat(pesoletras);
    except
        on error: exception do
        begin
           peso2:=-1;
        end;
    end;
//
    peso:=(qproductospeso.AsFloat+qproductostara.AsFloat);//*1000;
    pesoconerror:=(qproductospeso.AsFloat+qproductostara.AsFloat+qproductoserrorpeso.AsFloat);//*1000;
    if (qproductospesadomanual.AsInteger=1) and a_cero then
    begin
        if estable and (peso2>0)then
        begin
            pesar.visible:=true;
            pesovalido:=peso2;
            tpesar.enabled:=true;
        end
        else
        begin
           pesar.visible:=false;
           tpesar.enabled:=false;
        end;
    end;
    if (qproductospesadomanual.AsInteger=0) and (qproductosmostrar_boton.AsInteger=1) and a_cero then
    begin
        if estable then
        begin
            pesar.visible:=true;
            pesovalido:=peso2;
            tpesar.enabled:=true;
        end
        else
        begin
           pesar.visible:=false;
           tpesar.enabled:=false;
        end;
    end;
 if (qproductospesadomanual.AsInteger=0) and (qproductosmostrar_boton.AsInteger=0) and a_cero then
    begin
        if estable then
        begin
        if (peso2>=peso) and (peso2<=pesoconerror) and (estable) and (a_cero) then
          begin
            lc_produccion.Open;
            lc_produccion.Append;
            lc_produccionfecha.value:=date;//gfecha;
            lc_produccionhora.value:=time;
            lc_produccionmesa.value:=lmesa.Caption;
            lc_produccionbascula.value:=lbascula.Caption;
            lc_produccionidt.value:=qenvasadorasidt.asinteger;
            lc_produccionembasadora.value:=qenvasadorastrabajador.asstring;
            lc_produccionmateria_prima.value:=qmprimasid.asstring;
            lc_produccionproducto.value:=qproductoscodigo.asstring;
            lc_producciontara.value:=qproductostara.asfloat;
            lc_produccionpeso_teorico.value:=qproductostara.AsFloat+qproductospeso.AsFloat;
            lc_produccionpeso_real.Value:=peso2;
            lc_produccionestado.Value:=1;
            lc_produccion.Post;
            ppesadas.Caption:='PESADA REALIZADA';

            a_cero:=false;
            ta_cero.Enabled:=true;
            estable:=false;
            bloqueado:=false;
          end;
        end
        else
        begin
           pesar.visible:=false;
           tpesar.enabled:=false;
        end;
    end;
end;

procedure Tpprincipal.tcomprobarTimer(Sender: TObject);
var idproducto,idmprima:string;
begin
 tcomprobar.Interval:=60000;
//    dbservidor.Connected:=false;
    try
    idproducto:=qproductoscodigo.AsString;
    qproductos.connection:=dbservidor;
    qproductos.sql.clear;
    qproductos.sql.add('select * from productos WHERE (codigo) in (select codigo from productos_sector ');
    qproductos.SQL.Add(' where idsector=(select idsector from sectores_mesas where id=:MESA)) order by descripcion');

    try
      try
      qproductos.Close;
      qproductos.Prepare;
      qproductos.ParamByName('MESA').AsInteger:=strtoint(tmesa);
      qproductos.open;
      except
          qproductos.Close;
          qproductos.Prepare;
          qproductos.ParamByName('MESA').AsInteger:=strtoint(tmesa);
          qproductos.connection:=dbagrigest;
          qproductos.Open;
      end;
    finally
      qproductos.Locate('codigo',idproducto,[locaseinsensitive]);
      if qproductos.RecordCount>0 then comboproducto.KeyValue:=qproductoscodigo.AsString;
      if qproductos.RecordCount=0 then
      begin
          idproducto:=qproductoscodigo.AsString;
          qproductos.close;
          qproductos.sql.clear;
          qproductos.sql.add('select * from productos WHERE ACTIVO=1 ORDER BY descripcion');
          qproductos.open;
          qproductos.Locate('codigo',idproducto,[locaseinsensitive]);
      end;
    end;

    idmprima:=combovariedad.Text;//.AsString;
    qmprimas.sql.clear;
    qmprimas.sql.add('select * from MATERIAS_PRIMAS WHERE (idempresa,id) in (select ide,mprima from materias_primas_sector ');
    qmprimas.SQL.Add(' where idsector=(select idsector from sectores_mesas where id=:MESA)) order by variedad');
    qmprimas.Prepare;
    qmprimas.ParamByName('MESA').AsInteger:=strtoint(tmesa);
    try
      try
        qmprimas.Open;
      except
        qmprimas.Close;
        qmprimas.Connection:=dbagrigest;
        qmprimas.Open;
      end;
    finally
    qmprimas.Locate('id',idmprima,[locaseinsensitive]);

    if qmprimas.RecordCount>0 then combovariedad.KeyValue:=qmprimasid.AsString;
    if (qmprimas.RecordCount=0) or (dbservidor.HostName='localhost') then
    begin
        idmprima:=qmprimasid.AsString;
        qmprimas.close;
        qmprimas.sql.clear;
        qmprimas.sql.add('select * from MATERIAS_PRIMAS WHERE mesas=1 and activo=1 ORDER BY descripcion');
        qmprimas.open;
        qmprimas.Locate('id',idmprima,[locaseinsensitive]);
    end;

    end;

    if qenvasadoras.RecordCount=1 then comboenvasadoras.KeyValue:=qenvasadorasidt.asstring;
    variedad:=qmprimasid.asstring;
    lvariedad.caption:=idmprima;//qmprimasid.AsString;
    producto:=qproductoscodigo.AsString;
//    dbservidor.Connected:=false;
    timer4.Enabled:=false;
    except
    tcomprobar.Interval:=5000;
      try
         DBservidor.connected:=true;
         lconectado.caption:='CONECTADO A: ' +thost;
         timer4.enabled:=true;
      except
         dbservidor.HostName:='localhost';
         dbservidor.User:='root';
         dbservidor.Password:='';
         lesclavo.Color:=clred;
         lconectado.caption:='CONECTADO A: EQUIPO LOCAL';
         dbservidor.Connected:=true;
         timer4.enabled:=false;
      end;

    end;
end;

procedure Tpprincipal.Timer4Timer(Sender: TObject);
var       anyo,mes,dia:word;
       vanyo,vmes,vdia,vfecha:string;
begin

      qmovimientos_mesa.close;
      qmovimientos_mesa.SQL.Clear;
      qmovimientos_mesa.sql.add(' select * from movimiento_mesas_local where mesa='+''''+lmesa.Caption+''''+' and salida_real is null ');
      qmovimientos_mesa.sql.add(' order by trabajador');
      qmovimientos_mesa.open;
    decodedate(date,anyo,mes,dia);
    vanyo:=floattostr(anyo);
    vmes:=floattostr(mes);
    vdia:=floattostr(dia);
    if length(vmes)=1 then vmes:='0'+vmes;
    if length(vdia)=1 then vdia:='0'+vdia;
    vfecha:=vanyo+'-'+vmes+'-'+vdia;
    tcalendario_laboral.refresh;
    tcalendario_laboral.locate('fecha',vfecha,[locaseinsensitive,lopartialkey]);



end;

procedure Tpprincipal.tsincronizarTimer(Sender: TObject);
var sreal,sajustada,hreal,hajustada:string;
begin
if treplicacion='1' then
begin
    esclavo.Close;
    esclavo.Open;
    TRY
    if esclavo.Active then
    begin
        replicando:=esclavoseconds_behind_master.AsInteger;
        if esclavoslave_sql_running.Asstring='Yes' then corriendo:=1 else corriendo:=0;
        if (replicando=0) and (corriendo=0) then
        begin
         PCONEXION.Color:=clred;
         lesclavo.Caption:='Replicacion detenida: '+esclavolast_sql_error.asstring;
         qrecuperar.SQL.Clear;
         qrecuperar.SQL.Add('set global sql_slave_skip_counter=1');
         qrecuperar.ExecSQL;
         qrecuperar.SQL.Clear;
         qrecuperar.SQL.Add('start slave');
         qrecuperar.ExecSQL;
        end;
        if (replicando>0) and (corriendo=0) then
        begin
         PCONEXION.Color:=clred;
         lesclavo.Caption:='Error en replicacion: '+esclavolast_sql_error.asstring;
        end;

        if (replicando>0) and (corriendo=1) then
          begin
             PCONEXION.Color:=clLime;
             lesclavo.Caption:='Datos pendientes de actualizar: '+inttostr(replicando);
          end;
        if (replicando=0) and (corriendo=1) then
          begin
             PCONEXION.Color:=clLime;
             lesclavo.Caption:='Terminal Actualizado';
          end;
    end else esclavo.Active:=true;
    EXCEPT
      /// tsincronizar.Enabled:=false;

    END;
end else
       begin
             PCONEXION.Color:=clLime;
             lesclavo.Caption:='Actualizacion suspendida';
       end;
 {
    tsincronizar.Enabled:=false;

    try

       try
        if dbservidor.Connected =false then
        begin
            dbservidor.Connect;
        end;
//       dbservidor.reConnect;
       finally


           tsincronizar.Enabled:=true;
           PCONEXION.Visible:=TRUE;
           PCONEXION.Caption:='CONECTADO';
           PCONEXION.Color:=clLime;
       end;
    except
        on error: exception do
        begin
             PCONEXION.Visible:=TRUE;
             PCONEXION.Caption:='SIN CONEXION';
             PCONEXION.Color:=clRed;
             dbservidor.connected:=false;
             tsincronizar.Enabled:=true;
        end;

    end;
      }
end;


end.

