unit FTICKET;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  DBCtrls, StdCtrls, Buttons, ExtCtrls, Menus, Mask, db, DBTables,
  OleCtrls, Grids, DBGrids,variants,tiposdefinidos, ActnList, ImgList,
  ComCtrls, ToolWin,STRUTILS,FORDEN, ExtDlgs,dateutils,MATH,FCOBRO,FmtBcd,ffunciones;

type
  TTICKET = class(TForm)
    Panel1: TPanel;
    Menu: TMainMenu;
    TICKET1: TMenuItem;
    ALTAS1: TMenuItem;
    BAJAS1: TMenuItem;
    CONSULTAS1: TMenuItem;
    MODIFICACIONES1: TMenuItem;
    N4: TMenuItem;
    IMPRIMIR1: TMenuItem;
    N1: TMenuItem;
    SALIR1: TMenuItem;
    REGISTRO1: TMenuItem;
    PRIMERO1: TMenuItem;
    ANTERIOR1: TMenuItem;
    SIGUIENTE1: TMenuItem;
    DSTICKET: TDataSource;
    DBGrid1: TDBGrid;
    ToolBar1: TToolBar;
    baltas: TToolButton;
    bbajas: TToolButton;
    bconsultas: TToolButton;
    bmodificaciones: TToolButton;
    ToolButton5: TToolButton;
    DBNavigator2: TDBNavigator;
    ToolButton7: TToolButton;
    bsalir: TToolButton;
    ActionList1: TActionList;
    AAltas: TAction;
    ABajas: TAction;
    AConsultas: TAction;
    AModificaciones: TAction;
    ASalir: TAction;
    ImageList1: TImageList;
    BBUSQUEDA: TToolButton;
    ToolButton2: TToolButton;
    BORDEN: TToolButton;
    ToolButton6: TToolButton;
    OpenPictureDialog1: TOpenPictureDialog;
    ToolButton4: TToolButton;
    DSLINEATICKET: TDataSource;
    PDATOS: TPanel;
    Label6: TLabel;
    Label10: TLabel;
    DBEdit1: TDBEdit;
    DBEdit4: TDBEdit;
    ToolBar2: TToolBar;
    BALTAS2: TToolButton;
    BBAJAS2: TToolButton;
    BLISTADO: TToolButton;
    BMODIFICAR2: TToolButton;
    Label13: TLabel;
    Label14: TLabel;
    DBEdit5: TDBEdit;
    Label15: TLabel;
    Label16: TLabel;
    DBEdit6: TDBEdit;
    DBText2: TDBText;
    Label17: TLabel;
    DBText3: TDBText;
    ALISTADO: TAction;
    AALTAS2: TAction;
    ABAJAS2: TAction;
    AModificar2: TAction;
    ABUSQUEDA: TAction;
    AORDEN: TAction;
    Label18: TLabel;
    ALISTADO2: TAction;
    BPRESUPUESTO: TToolButton;
    Label30: TLabel;
    ToolButton1: TToolButton;
    BCANTIDAD: TToolButton;
    ACANTIDAD: TAction;
    APRESUPUESTO: TAction;
    ACOBRAR: TAction;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    BitBtn3: TBitBtn;
    BitBtn4: TBitBtn;
    BitBtn5: TBitBtn;
    Label1: TLabel;
    DBEdit2: TDBEdit;
    DBText1: TDBText;
    Panel2: TPanel;
    AMOSTRAR: TAction;
    ToolButton3: TToolButton;
    Panel3: TPanel;
    BitBtn7: TBitBtn;
    BitBtn8: TBitBtn;
    BitBtn9: TBitBtn;
    BitBtn10: TBitBtn;
    BitBtn15: TBitBtn;
    BitBtn11: TBitBtn;
    BitBtn17: TBitBtn;
    BitBtn20: TBitBtn;
    BitBtn19: TBitBtn;
    BitBtn18: TBitBtn;
    BitBtn23: TBitBtn;
    BitBtn22: TBitBtn;
    BitBtn21: TBitBtn;
    BitBtn12: TBitBtn;
    Edit1: TEdit;
    BitBtn13: TBitBtn;
    BitBtn14: TBitBtn;
    BitBtn16: TBitBtn;
    BitBtn24: TBitBtn;
    BitBtn6: TBitBtn;
    Label3: TLabel;
    DBText4: TDBText;
    Label4: TLabel;
    DBText6: TDBText;
    Label5: TLabel;
    Label7: TLabel;
    DBEdit3: TDBEdit;
    Label2: TLabel;
    DBText5: TDBText;
    Label8: TLabel;
    BitBtn25: TBitBtn;
    Label9: TLabel;
    DBText7: TDBText;
    ABRIRCAJON: TBitBtn;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormShow(Sender: TObject);
    procedure BAltasClick(Sender: TObject);
    procedure BConsultasClick(Sender: TObject);
    procedure BBajasClick(Sender: TObject);
    procedure BModificacionesClick(Sender: TObject);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure BSalirClick(Sender: TObject);
    procedure DSTICKETStateChange(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure REGISTRO1Click(Sender: TObject);
    procedure PRIMERO1Click(Sender: TObject);
    procedure ANTERIOR1Click(Sender: TObject);
    procedure SIGUIENTE1Click(Sender: TObject);
    procedure TICKET1Click(Sender: TObject);
    procedure BListadoClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
    procedure DBGrid1KeyPress(Sender: TObject; var Key: Char);
    procedure DBGrid1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure DBGrid1ColEnter(Sender: TObject);
    procedure DBGrid1ColExit(Sender: TObject);
    procedure DSTICKETDataChange(Sender: TObject; Field: TField);
    procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    procedure BBUSQUEDAClick(Sender: TObject);
    procedure BORDENClick(Sender: TObject);
    procedure DSLINEATICKETStateChange(Sender: TObject);
    procedure BALTAS2Click(Sender: TObject);
    procedure BBAJAS2Click(Sender: TObject);
    procedure BMODIFICAR2Click(Sender: TObject);
    procedure DBEdit4Exit(Sender: TObject);
    procedure DBEdit5Exit(Sender: TObject);
    procedure DBGrid1DblClick(Sender: TObject);

    procedure ToolButton1Click(Sender: TObject);
    procedure ACANTIDADExecute(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure FormResize(Sender: TObject);
    procedure BitBtn6Click(Sender: TObject);
    procedure AMOSTRARExecute(Sender: TObject);
    procedure BitBtn15Click(Sender: TObject);
    procedure DBGrid1Enter(Sender: TObject);
    procedure BitBtn11Click(Sender: TObject);
    procedure BitBtn17Click(Sender: TObject);
    procedure BitBtn20Click(Sender: TObject);
    procedure BitBtn19Click(Sender: TObject);
    procedure BitBtn18Click(Sender: TObject);
    procedure BitBtn23Click(Sender: TObject);
    procedure BitBtn22Click(Sender: TObject);
    procedure BitBtn21Click(Sender: TObject);
    procedure BitBtn10Click(Sender: TObject);
    procedure BitBtn12Click(Sender: TObject);
    procedure BitBtn8Click(Sender: TObject);
    procedure BitBtn7Click(Sender: TObject);
    procedure BitBtn9Click(Sender: TObject);
    procedure BitBtn13Click(Sender: TObject);
    procedure BitBtn14Click(Sender: TObject);
    procedure BitBtn16Click(Sender: TObject);
    procedure BitBtn24Click(Sender: TObject);
    procedure BitBtn15MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure DBEdit1Enter(Sender: TObject);
    procedure DBEdit4Enter(Sender: TObject);
    procedure DBEdit6Enter(Sender: TObject);
    procedure DBEdit2Enter(Sender: TObject);
    procedure DBEdit5Enter(Sender: TObject);
    procedure DBEdit2KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure DBEdit2DblClick(Sender: TObject);
    procedure DBEdit3Enter(Sender: TObject);
    procedure DBEdit3Exit(Sender: TObject);
    procedure DBEdit5KeyPress(Sender: TObject; var Key: Char);
    procedure DBEdit3KeyPress(Sender: TObject; var Key: Char);
    procedure DBEdit6Exit(Sender: TObject);
    procedure BitBtn25Click(Sender: TObject);
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
    procedure Edit1KeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure ABRIRCAJONCLICK(Sender: TObject);
    procedure Edit1Exit(Sender: TObject);
  private
    { Private declarations }
    CONTROLACTIVO : TCOMPONENT;
    F1ENTRA,EURO,PORCIEN :BOOLEAN;
    SORDEN,CONTROLNOMBRE:STRING;
    EUROVALOR,PORCIENVALOR:STRING;
    ancho:integer;
    realWidth:integer; //= 800;
    realHeight:integer;// = 449; // a todas las alturas quitarle 151
      //600 - 151;
    activo:string;
    pfunciones:tfunciones;

    procedure EstadoBotones;
    procedure buscar;
    function fechas(sender:tobject):boolean;
    procedure pulsar(numero:string);
    procedure cliente;
    procedure clienteS;
    PROCEDURE CALCULARLABEL7;
    FUNCTION FABRIRCAJON(IMPRESORA:INTEGER):BOOLEAN;
  public
    { Public declarations }
    ver: string;
    ARORDEN : TORDEN;


  end;

var
  TICKET: TTICKET;

implementation

uses FDLGCLIENTE, RUTINAS, UDMgs, fdlgarticulos,
  FDLGFAMILIASAUX, menu, DLGCOLORESAUX, FEAN, FDLGTICKET,
  FDLGCLIENTEAUX, FDLGARTICULOSAUX, FLISTADOS, fprevio, PEDIRBASE,
  DLGSERIESAUX, FDLGPRESUPUESTOAUX, DLGFORMAPAGOAUX, FFORMAPAGO,
  FLISTADOOPCIONES, FCANTIDAD, FTECLADONUMERICO, FFAMILIA,
  FLISTADOOOPCIONESTICKET, FCAJA;

{$R *.DFM}





//*******************************************************************//
//*******************************************************************//



procedure TTICKET.DBGrid1ColExit(Sender: TObject);
 VAR AUX:TDATETIME;
     AUX1:STRING;
     PVP,DESCUENTO,IVA,PVPSINIVA,CANTIDAD : DOUBLE;
begin
// AQUI CONTROLO QUE EL PRODUCTO EXISTA Y RECUPERARE LA DESCRIPCION
// DEL PRODUCTO, HACERLO POR EAN O POR ID_ARTICULO
 IF (DMGS.CDSQ_MDLINEATICKET.STATE IN [DSEDIT,DSINSERT]) THEN
 BEGIN

   IF (UPPERCASE(TRIM(dbgrid1.SelectedField.FieldName)) = 'DESCUENTO') THEN
     PORCIEN := FALSE;
   IF (UPPERCASE(TRIM(dbgrid1.SelectedField.FieldName)) = 'DESCUENTOEURO') THEN
     EURO :=  FALSE;

   if (UPPERCASE(TRIM(dbgrid1.SelectedField.FieldName)) ='ID_ARTICULO') AND
   (NOT F1ENTRA) AND
   (TRIM(DMGS.CDSQ_MDLINEATICKETID_ARTICULO.AsString)<>'' )
    then
    BEGIN

      // ver 3.0
{  WITH DMGS.CDSQ_MAXIMO DO
  BEGIN
   CLOSE;
   COMMANDTEXT := ' SELECT ID_ARTICULO FROM ALMACEN WHERE CODIGO_BARRAS='''+UPPERCASE(DMGS.CDSQ_MDLINEATICKETID_ARTICULO.ASSTRING)+''' ';
   OPEN;
   IF DMGS.CDSQ_MAXIMO.RECORDCOUNT > 0 THEN
   BEGIN
      DMGS.CDSQ_MDLINEATICKETCODIGO_BARRAS.AsString := UPPERCASE(DMGS.CDSQ_MDLINEATICKETID_ARTICULO.ASSTRING);
      DMGS.CDSQ_MDLINEATICKETID_ARTICULO.ASSTRING := UPPERCASE(DMGS.CDSQ_MAXIMO.Fields[0].AsString);
   END;
   CLOSE;
  END;
} //

      pfunciones.Borrar;
      pfunciones.ticket := true;
      pfunciones.Esta(DMGS.CDSQ_MDLINEAticketID_ARTICULO.ASSTRING,true,'0','0',DMGS.CDSQ_MDticketID_SERIE.AsString,DMGS.CDSQ_MDticketID_EMPRESA.AsString,DMGS.CDSQ_MDticketANYO.AsString);
      dmgs.cdsq_MDLINEAticketID_ARTICULO.asstring:=pfunciones.ID_ARTICULO;
      DMGS.CDSQ_MDLINEAticketDESCRIPCION.ASSTRING:= pfunciones.DESCRIPCION;
      DMGS.CDSQ_MDLINEAticketPRECIO.ASfloat := pfunciones.precio;//OBTENERPRECIOVENTA(TRUE,'0','0'); //ROUNDTO(DMGS.CDSQ_ARTICULOEANPRECIO_VENTA.ASfloat,DMGS.DECIMALES);
      dmgs.cdsq_MDLINEAticketiva.asstring := pfunciones.IVA;
      DMGS.CDSQ_MDLINEAticketMARCA.ASSTRING := pfunciones.MARCA;
      DMGS.CDSQ_MDLINEAticketCODIGO_BARRAS.AsString := pfunciones.Codigo_barras ;
      DMGS.CDSQ_MDLINEAticketprecio_coste.asfloat := pfunciones.PrecioCoste ;
      dbgrid1.selectedindex:=6;//dbgrid1.selectedindex+1;
{

     WITH DMGS.CDSQ_ARTICULOEAN DO
     BEGIN
       CLOSE;
       DMGS.AREBGRID  := UPPERCASE(DMGS.CDSQ_MDLINEATICKETID_ARTICULO.ASSTRING);
       IF POS('''',DMGS.AREBGRID) <> 0 THEN
       BEGIN
          dmgs.arebgrid := StringReplace(dmgs.AREBGRID , '-', '/', [rfreplaceall]);
          dmgs.arebgrid := StringReplace(dmgs.AREBGRID , '''', '-', [rfreplaceall]);
       END;
       OPEN;
       IF DMGS.CDSQ_ARTICULOEAN.RECORDCOUNT > 0 THEN
       BEGIN
          dmgs.cdsq_MDLINEATICKETID_ARTICULO.asstring:=DMGS.CDSQ_ARTICULOEANID_ARTICULO.ASSTRING;
          DMGS.CDSQ_MDLINEATICKETDESCRIPCION.ASSTRING:= DMGS.cdsq_articuloeandescripcionticket.AsString;
          DMGS.CDSQ_MDLINEATICKETPRECIO.ASfloat := ROUNDTO(DMGS.CDSQ_ARTICULOEANPRECIO_VENTA.ASfloat,DMGS.DECIMALES);
          DMGS.CDSQ_MDLINEATICKETMARCA.ASSTRING := DMGS.CDSQ_ARTICULOEANMARCA.AsString;
          dbgrid1.selectedindex:=dbgrid1.selectedindex+1;
       END
       ELSE
       BEGIN
          DMGS.CDSQ_MDLINEATICKETDESCRIPCION.ASSTRING:= '';
          DMGS.CDSQ_MDLINEATICKETPRECIO.ASSTRING := '';
       END;
       DMGS.CDSQ_ARTICULOEAN.CLOSE;
     END;
     DMGS.CDSQ_MDLINEATICKETCANTIDAD.FocusControl ;
}
  end;
  DESCUENTO := 0;
  CANTIDAD := ROUNDTO(DMGS.CDSQ_MDLINEATICKETCANTIDAD.ASfloat,-2);
  if DMGS.CDSQ_MDLINEATICKETDESCUENTO.ASfloat <> 0 then
     DESCUENTO := ROUNDTO(DMGS.CDSQ_MDLINEATICKETDESCUENTO.ASfloat/100,DMGS.DECIMALES);
  if DMGS.CDSQ_MDLINEATICKETDESCUENTOEURO.ASfloat <> 0 then
     DESCUENTO := ROUNDTO(DMGS.CDSQ_MDLINEATICKETDESCUENTOEURO.ASfloat,DMGS.DECIMALES);
  IF DESCUENTO <> 0 THEN
  BEGIN
    IF DMGS.CDSQ_MDLINEATICKETDESCUENTOEURO.ASfloat <> 0 THEN
       DMGS.CDSQ_MDLINEATICKETIMPORTE.ASfloat := ROUNDTO((CANTIDAD *DMGS.CDSQ_MDLINEATICKETPRECIO.AsCurrency)- DESCUENTO,-2)
    ELSE
     DMGS.CDSQ_MDLINEATICKETIMPORTE.ASfloat := ROUNDTO(CANTIDAD *DMGS.CDSQ_MDLINEATICKETPRECIO.AsCurrency* (1 - DESCUENTO),-2)  ;
  END
  ELSE
     DMGS.CDSQ_MDLINEATICKETIMPORTE.ASfloat := ROUNDTO(CANTIDAD *DMGS.CDSQ_MDLINEATICKETPRECIO.AsCurrency* (1 - DESCUENTO),-2)  ;

 END;
 F1ENTRA := FALSE;
end;



procedure TTICKET.BBUSQUEDAClick(Sender: TObject);
begin
// FUNCION PARA HACER LA BUSQUEDA,
//HACERLO CON PRESUPUESTO.
  DMGS.CDSQ_MDTICKET.CLOSE;
  DMGS.buscandoTIC := true;
  WITH DMGS.CDSQ_MDTICKET  DO
  BEGIN
    DMGS.TIBGRID  := '-1548711';
    dmgs.TIBGRTIPO  := '1';
    DMGS.TIBGRORDEN := ordenTICKET;
    DMGS.TIBGRORDENLINEA := ORDENLINEATICKET;
    OPEN;
    APPEND;
  END;
  dmgs.CDSQ_MDTICKETid_TICKET.asstring := '';
  DMGS.CDSQ_MDTICKETID_TICKET.FocusControl

end;
procedure tTICKET.buscar;
// HACERLA BIEN
var aux,AUX1,fecha,AUX4,AUX5,AUX6:string;
    i,AUX2,AUX3:integer;
    auxfecha:tdatetime;
begin
  i:= 0;
  aux := '';
  WHILE I < SELF.ComponentCount DO
  begin
    IF (SELF.Components[I] IS TDBEDIT) THEN
    BEGIN
      AUX1:=(SELF.Components[I] AS TDBEDIT).DataField ;
      if NOT (TRIM(DMGS.CDSQ_MDTICKET.FieldByName(AUX1).ASSTRING) ='') then
      BEGIN
         if pos('FECHA',uppercase(aux1)) <> 0 then
         begin
            auxfecha :=DMGS.CDSQ_MDTICKET.FieldByName(AUX1).AsDateTime ;
//            fecha := inttostr(yearof(auxfecha))+'/'+inttostr(monthof(auxfecha))+'/'+inttostr(dayof(auxfecha));
            fecha := inttostr(yearof(auxfecha))+'-'+inttostr(monthof(auxfecha))+'-'+inttostr(dayof(auxfecha));
            if aux <> '' then
               aux := aux + ' AND ' + AUX1  +' = '''+ fecha+''' '
            else
               aux := AUX1 +' = '''+ fecha+''' ';
         end
// NO FUNCIONA BIEN
{         else
         if pos('HORA',uppercase(aux1)) <> 0 then
         begin
            auxfecha :=DMGS.CDSQ_MDTICKET.FieldByName(AUX1).AsDateTime ;
            FECHA := DMGS.CDSQ_MDTICKET.FIELDBYNAME(AUX1).ASSTRING;
            fecha := RIGHTSTR(FECHA,(LENGTH(FECHA)-POS(' ',FECHA)));
            AUX6 := RIGHTSTR(FECHA,(LENGTH(FECHA)-POS(':',FECHA)));
            AUX4 := COPY(FECHA,1,POS(':',FECHA)-1);
            AUX5 := COPY(AUX6,1,POS(':',AUX6)-1);
            if aux <> '' then
               aux := aux + ' AND ' + AUX1  +' = ''%'+ AUX4+':'+AUX5+'%'' '
            else
               aux := AUX1 +' = ''%'+ AUX4+':'+AUX5+'%'' ';
         end
}         else
         begin
            if aux <> '' then
            // HE PUESTO LA % DELANTE                // like
               aux := aux + ' AND char(' + AUX1  +') = ('''+ DMGS.CDSQ_MDTICKET.FieldByName(AUX1).ASSTRING+''') ' // VER 3.0 %
            else
            // HE PUESTO LA % DELANTE   // like
               aux := 'char('+AUX1 +') = ('''+ TRIM(DMGS.CDSQ_MDTICKET.FieldByName(AUX1).ASSTRING)+''') '; // VER 3.0 %
         end;
      END;
      end;
      i:= i+1;
    END;
  dmgs.CDSQ_MDTICKET.close;
  DMGS.buscandoTIC:=false;
  if aux <> '' then
  begin

     AUX := AUX + ' AND ID_EMPRESA='+FMENU.ID_EMPRESA;

     if trim(arorden.sorden) = '' then
        aux :=  aux + ordenTICKET
     else
        aux := aux + ARORDEN.SORDEN;

     with dmgs.CDSQ_MDTICKET do
     begin
       dmgs.TIBGRID  := ' where '+ aux;
       dmgs.TIbgrtipo := '2';
       DMGS.TIBGRORDENLINEA := ORDENLINEATICKET;
       open;
     end
  end;
end;
procedure TTICKET.BORDENClick(Sender: TObject);
BEGIN
  ARORDEN.ShowModal;
end;


procedure TTICKET.DSLINEATICKETStateChange(Sender: TObject);
begin
  if DMGS.CDsq_MDLINEATICKET.STATE IN [dsedit,dsinsert] then
  begin
         pdatos.enabled := false;
         {aux :=} dbgrid1.Options := [DGEDITING,DGTITLES,DGCOLUMNRESIZE,DGTABS,DGCONFIRMDELETE,DGCANCELONEXIT];
  end
   else
      dbgrid1.Options := [DGTITLES,DGCOLUMNRESIZE,DGTABS,DGCONFIRMDELETE,DGCANCELONEXIT];
end;



///*****************************************************///
///*****************************************************///
procedure TTICKET.FormCreate(Sender: TObject);
begin
  DMGS.CDSQ_MDLINEATICKET.CLOSE;
  DMGS.CDSQ_MDTICKET.CLOSE;
  ARORDEN := TORDEN.Create(NIL);
  ARORDEN.CDS  := DMGS.CDSQ_MDTICKET;
  ARORDEN.nombre  := 'CDSQ_MDTICKET';
  arorden.SORDEN := ordenticket;
  dmgs.buscandoTIC := false;
  realWidth:= 800;
  realHeight:= 449; // a todas las alturas quitarle 151
      //600 - 151;

  pfunciones := tfunciones.create;

  with DMGS.CDSQ_MDTICKET do
  BEGIN
     Close;
     DMGS.TIBGRID :='%';
     DMGS.TIBGRTIPO := '1';
     dmgs.TIBGRORDEN := ordenTICKET;
     DMGS.TIBGRORDENLINEA := ORDENLINEATICKET;
     Open;
  END;
  // LO HE PUESTO ESTO PORQUE NO ME SACA
  // LAS LINEAS DEL PRIMER TICKET.
  DMGS.CDSQ_MDLINEATICKET.OPEN;
  IF DMGS.CDSQ_MDLINEATICKET.RecordCount > 0 THEN
  BEGIN
     DMGS.CDSQ_MDLINEATICKET.Last;
     DMGS.CDSQ_MDLINEATICKET.First;
  END;
  ancho := width;
  EURO:=FALSE;PORCIEN:=FALSE;
end;
procedure TTICKET.FormDestroy(Sender: TObject);
begin
   DMGS.CDSQ_MDLINEATICKET.close;
   DMGS.CDSQ_MDTICKET.CLOSE;
   ARORDEN.FREE;
   ARORDEN := NIL;
   pfunciones.destroy;
end;
procedure TTICKET.FormShow(Sender: TObject);
begin
    EstadoBotones;
    F1ENTRA := FALSE;
    edit1.SetFocus;
end;
procedure TTICKET.BConsultasClick(Sender: TObject);
var posaux:TBookmark;
    codigo:tcodigotar;
begin
    DSTICKET.DataSet := NIL;

    DLGTICKET:=TDLGTICKET.create(nil);
    DLGTICKET.ORDEN :=  ARORDEN.SORDEN;
    DLGTICKET.CERRARDATASET := FALSE;
    DLGTICKET.Showmodal;
    DLGTICKET.Free;
    DLGTICKET := NIL;
    IF NOT DMGS.CDSQ_MDTICKET.ACTIVE THEN
       ESTADOBOTONES;
// UTILIZO LOS DATASETS ABIERTOS QUE VIENEN DE FDLGTARIFAS.
    DSTICKET.DataSet := DMGS.CDSQ_MDTICKET ;
end;
procedure TTICKET.FormKeyPress(Sender: TObject; var Key: Char);
begin
    if (key ='.')
    and (DMGS.CDSQ_mdticket.State in [dsedit,dsinsert])
    and (activecontrol is tdbedit)
    then
      if (dmgs.cdsq_mdticket.FieldByName ((activecontrol as tdbedit).DataField).DataType
       in [ftFloat, ftCurrency, ftBCD, ftFMTBcd]) then
          key := ',';
    if (ActiveControl=nil) and (key=#13) then
    begin
        Perform(WM_NextDLGCtl, 0, 0);
        key:=#0;
    end;
{    if (key = #13) and not (ActiveControl is TButton) and not (ActiveControl is TDBGrid) then
    begin
      Perform(WM_NextDLGCtl, 0, 0);
      key:=#0;
      // ANTERIORMENTE SE CONTROLABA AQUI CUANDO SE HACIA EL ".POST" PERO EN ESTA UNIDAD SE HACE
      // EN DBEDIT8.EXIT.
    end;
}
   if (key = #13) and not (DMGS.CDSQ_MDLINEATICKET.State in [dsedit,dsinsert]) then
    begin
//       if dbgrid1.Focused then
     IF (ACTIVECONTROL IS TDBGRID) THEN
       begin
        if dbgrid1.SelectedIndex = (dbgrid1.FieldCount - 1) then
        begin
          DMGS.CDSQ_MDLINEATICKET.next;
          IF DMGS.CDSQ_MDLINEATICKET.EOF THEN
             BALTAS2.Click;
          dbgrid1.selectedindex := 0;
        end
        else
           dbgrid1.SelectedIndex := dbgrid1.SelectedIndex + 1;
       end
       else
       if not dbedit6.Focused then
       begin
       if fechas(sender) then
           Perform(WM_NextDLGCtl, 0, 0);
       end
       else
           Perform(WM_NextDLGCtl, 0, 0);       
       key:=#0;
    end;

    if not (activeControl is TDBEdit) and not (DMGS.CDSQ_MDLINEATICKET.STATE IN [DSEDIT,DSINSERT]) THEN
//    (ActiveControl is TDBGrid) then
    begin
//       if uppercase(key)='A' then if BAltas.enabled then BAltas.click;
//       if uppercase(key)='B' then if BBajas.enabled then BBajas.click;
//       if uppercase(key)='C' then if BConsultas.enabled then BConsultas.click;
//       if uppercase(key)='M' then if BModificaciones.enabled then BModificaciones.click;
//       if uppercase(key)='D' then if BListado.enabled then BListado.click;
{       if not (DMGS.CDSQ_MDLINEATICKET.state in [dsedit,dsinsert]) then
       begin
           if uppercase(key)='L' then if BAltas2.enabled then
           begin
               BAltas2.click;
               key:=#0;
           end;
           if uppercase(key)='J' then if Bbajas2.enabled then
           begin
               Bbajas2.click;
               key:=#0;
           end;
           if uppercase(key)='F' then if Bmodificar2.enabled then
           begin
               Bmodificar2.click;
               key:=#0;
           end;
       end;
}    end;
{    IF (( NOT (DMGS.CDSQ_MDLINEATICKET.State IN [DSEDIT,DSINSERT]))) THEN
    begin
       if uppercase(key)='A' then if BAltas.enabled then BAltas.click;
       if uppercase(key)='B' then if BBajas.enabled then BBajas.click;
       if uppercase(key)='C' then if BConsultas.enabled then BConsultas.click;
       if uppercase(key)='M' then if BModificaciones.enabled then BModificaciones.click;
//       if uppercase(key)='L' then if BListado.enabled then BListado.click;
       if ( key <> #27 ) then
           key:=#0;
    end;
}
    if (key = #27) and not ((DMGS.CDSQ_MDTICKET.state in [dsedit,dsinsert]))
            then
       IF DMGS.LINTICESCAPE= FALSE THEN
          close
       ELSE
       BEGIN
          DMGS.LINTICESCAPE := FALSE;
          KEY:=#0;
       END;
    if (key = #27) and (DMGS.CDSQ_MDTICKET.state in [dsedit,dsinsert])
       and (not( dmgs.cdsq_MDLINEATICKET.state in [dsedit,dsinsert]))
    then
       if DMGS.buscandoTIC then
          buscar
       ELSE
       if DMgs.ESCAPeLINTIC = false then
       begin
       try
          dmgs.cdsq_mdticket.DisableControls ;
          DMGS.CDSQ_MDTICKET.Post;
       finally
          dmgs.cdsq_mdticket.EnableControls;
       end;
       end
       else
       begin
         dmgs.escapelintic := false;
         key := #0;
       end;
end;
procedure TTICKET.BSalirClick(Sender: TObject);
begin
    close;
    SELF.ModalResult:=mrOk;
end;
procedure TTICKET.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
    if key=38 then CambiarControl(self,false);
    if key=40 then CambiarControl(self,true);
    if (ActiveControl is tdbedit)
    and ((activecontrol as tdbedit).field.DataSet.State in [dsedit,dsinsert])
    then
    begin
     if (activecontrol as tdbedit).Field.DataType IN [FTDATE,ftTimeStamp]
     then
     begin
        if trim((activecontrol as tdbedit).Text) = '/  /' then
           (activecontrol as tdbedit).Field.Clear;
     end;
    end;
    if not (DMGS.CDSQ_MDTICKET.state in [dsedit,dsinsert]) then
    begin
     if key=114 then
        baltasclick(sender);
     if key=115 then
        baltas2click(sender);
     if key=116 then
        bmodificar2click(sender);
     if key=117 then
        bbajas2click(sender);
     if key=118 then
        blistadoclick(sender);
    end;

end;
procedure TTICKET.PRIMERO1Click(Sender: TObject);
begin
   DMGS.CDSQ_MDLINEATICKET.first;
end;

procedure TTICKET.ANTERIOR1Click(Sender: TObject);
begin
    DMGS.CDSQ_MDLINEATICKET.Prior;
end;

procedure TTICKET.SIGUIENTE1Click(Sender: TObject);
begin
    DMGS.CDSQ_MDLINEATICKET.next;
end;
procedure TTICKET.REGISTRO1Click(Sender: TObject);
begin
   if DMGS.CDSQ_MDLINEATICKET.state in [dsedit,dsinsert] then
   begin
      primero1.enabled:=false;
      anterior1.enabled:=false;
      siguiente1.enabled:=false;
   end
   else
   begin
       primero1.enabled:=DMGS.CDSQ_MDLINEATICKET.bof=false;
       anterior1.enabled:=primero1.enabled;
       siguiente1.enabled:=DMGS.CDSQ_MDLINEATICKET.eof=false;
   end;
end;
procedure TTICKET.EstadoBotones;
begin
    PDatos.enabled:=DMGS.CDSQ_MDTICKET.state in [dsedit,dsinsert];
    BAltas.enabled:=(DMGS.CDSQ_MDTICKET.state IN [DSBROWSE,dsinactive]);
    Bitbtn1.enabled:=(DMGS.CDSQ_MDTICKET.state IN [DSBROWSE,dsinactive]);
    BListado.enabled:=(DMGS.CDSQ_MDTICKET.state=dsbrowse) and (DMGS.CDSQ_MDLINEATICKET.recordcount >0) ;
    BITBTN5.enabled:=BLISTADO.ENABLED;
//    BListado2.enabled:=(DMGS.CDSQ_MDTICKET.state=dsbrowse) and (DMGS.CDSQ_MDLINEATICKET.recordcount >0) ;
    BConsultas.enabled:=(DMGS.CDSQ_MDTICKET.state IN [dsbrowse,dsinactive]);
    BModificaciones.enabled:=(DMGS.CDSQ_MDTICKET.state=dsbrowse) and (DMGS.CDSQ_MDTICKET.recordcount >0) ;
    BBajas.enabled:=(DMGS.CDSQ_MDTICKET.state=dsbrowse) and (DMGS.CDSQ_MDTICKET.recordcount >0) ;
     // para que no se pueda anyadir ni borrar lineas de pedido
    // antes de introducir todos
    // los datos del pedido.
    if (DMGS.CDSQ_MDTICKET.state=dsbrowse) and (DMGS.CDSQ_MDTICKET.recordcount >0) then
    begin
       baltas2.enabled:=true;
//      BbAJAS2.Enabled := true;
//      Bitbtn4.Enabled := true;
       bitbtn2.enabled:=true;


       IF (DMGS.CDSQ_MDLINEATICKET.ACTIVE) AND
       (DMGS.CDSQ_MDLINEATICKET.recordcount >0) then
       BEGIN
          bmodificar2.enabled:= true;
          bitbtn3.Enabled := true;
          BbAJAS2.Enabled := true;
          Bitbtn4.Enabled := true;
          BCANTIDAD.Enabled := TRUE;
       END
       ELSE
       BEGIN
           bmodificar2.enabled:= FALSE;
           bitbtn3.Enabled := false;
           BbAJAS2.Enabled := false;
           Bitbtn4.Enabled := false;
           BCANTIDAD.Enabled := FALSE;
       END;
    end
    else
    begin
      baltas2.enabled := false;
      bBAJAS2.Enabled := false;
      bitbtn2.enabled:=false;
      Bitbtn4.Enabled := false;
      Bitbtn3.Enabled := false;      
      bmodificar2.enabled:= false;
      BCANTIDAD.Enabled := FALSE;
    end;
end;
procedure TTICKET.BAltasClick(Sender: TObject);
begin
  DMGS.COMPROBARARQUEO;
  WITH DMGS.CDSQ_MDTICKET DO
  BEGIN
     IF NOT Active THEN
     BEGIN
      DMGS.TIBGRID :='-1547811' ;
      DMGS.TIBGRTIPO :='1';
      dmgs.TIBGRORDEN := ordenTICKET;
      DMGS.TIBGRORDENLINEA := ORDENLINEATICKET;
//      DMGS.PRBGRORDEN := ARORDEN.SORDEN;
      OPEN;
      APPEND;
     END
     else
     begin
      if dmgs.CDSQ_MDLINEATICKET.RecordCount > 0 then
        append;
     end;
  END;
//  DBEDIT1.SetFocus;
{  try
      dmgs.cdsq_mdticket.DisableControls ;
      DMGS.CDSQ_MDTICKET.Post;
  finally
      dmgs.cdsq_mdticket.EnableControls;
  end;
}
  baltas2.Click;
end;
procedure TTICKET.BBajasClick(Sender: TObject);
begin
//  IF NOT COMPROBARFACTURADOCOBRADO THEN
//  BEGIN
    if (DMGS.CDSQ_MDTICKET.recordcount>0) then //or (DMGS.CDSQ_MDTICKET.state in [dsedit,dsinsert]) then
    begin
       case dmgs.PedirConfirmacion('¿Confirma que desea borrar este TICKET?',true,true,false) of
           mrno: exit;
       end;
       if DMGS.CDSQ_MDLINEATICKET.recordcount >0 then
            DMGS.BorrandoLineas:= true;
       while DMGS.CDSQ_MDLINEATICKET.RecordCount>0  do
       begin
              DMGS.LineaTICKETNoPregunta := true;
              DMGS.CDSQ_MDLINEATICKET.Delete;
       end;
       // lo tengo que hacer asi, pq en el server modifico MDTICKET
       // para calcular la base del presupuesto y al borrar las lineas lo modifica
       // entonces me da error de que otro usuario lo ha modificado al
       // intentar borrar.
       DMGS.CDSQ_MDLINEATICKET.afterpost(DMGS.CDSQ_MDLINEATICKET);
       DMGS.CDSQ_MDTICKET.delete;
       DMGS.CDSQ_MDTICKETafterpost(DMGS.CDSQ_MDTICKET);
//   end;
  END;
end;






procedure TTICKET.BALTAS2Click(Sender: TObject);
begin
//  IF NOT COMPROBARFACTURADOCOBRADO THEN
//  BEGIN
    IF DMGS.CDSQ_MDTICKET.RecordCount > 0 THEN
    BEGIN
     WITH DMGS.CDSQ_MDLINEATICKET  DO
     BEGIN
      IF NOT Active THEN
        OPEN;
      LAST;
      APPEND;
     END;
     DBGRID1.SetFocus;
//     DBGRID1.SelectedIndex :=0;
     DMGS.CDSQ_MDLINEATICKETID_ARTICULO.FOCUSCONTROL;
    END;
// END;
end;
procedure TTICKET.FormClose(Sender: TObject; var Action: TCloseAction);
begin
    if (DMGS.CDSQ_MDTICKET.State in [dsedit,dsinsert]) AND
       (NOT DMGS.BUSCANDOTIC) then
       try
          dmgs.cdsq_mdticket.DisableControls ;
          DMGS.CDSQ_MDTICKET.Post;
       finally
          dmgs.cdsq_mdticket.EnableControls;
       end;
    Action := caFree;
//    FMENU.ToolBar3.Visible := TRUE;
    FMENU.TOOLBAR1.VISIBLE := TRUE;
end;
procedure TTICKET.BModificacionesClick(Sender: TObject);
begin
    DMGS.COMPROBARARQUEO;
//  IF NOT COMPROBARFACTURADOCOBRADO THEN
//  BEGIN
    if DMGS.CDSQ_MDTICKET.recordcount>0 then
    begin
        DMGS.CDSQ_MDTICKET.edit;
//        DMGS.CDSQ_MDTICKETID_PRESUPUESTO.FocusControl ;
        DBEDIT1.SetFocus;
    end;
//  END;
end;
procedure TTICKET.BListadoClick(Sender: TObject);
 VAR BOOKMARK,bookmark1:TBOOKMARk;
      I:SMALLINT;
      impresora:string;
begin
    bookmark1:=dmgs.cdsq_mdticket.GetBookmark ;
    BOOKMARK:=DMGS.CDSQ_MDLINEATICKET.GetBookmark ;
    try
  //      dsTICKET.DataSet := NIL; // HACE FALTA
//      dslineaTICKET.DataSet := NIL;
      dmgs.cdsq_mdticket.DisableControls ;
      dmgs.cdsq_mdlineaticket.DisableControls ;

    if DMGS.CDSQ_MDLINEATICKET.recordcount>0 then
    begin
        DMGS.TICKETIMPRIMIR := TRUE;
        DMGS.CDSQ_MDLINEATICKET.edit;
        DMGS.lineaTICKETnopregunta := TRUE;
        try
         dmgs.cdsq_mdlineaticket.DisableControls;
         dmgs.CDSQ_MDLINEATICKET.post;
        finally
         dmgs.cdsq_mdlineaticket.EnableControls;
        end;
    end;

    WITH DMGS.CDSQ_EMPRESAAUX DO
    BEGIN
      Close;
      DMGS.VEMPRESASAUX.ID:= DMGS.CDSQ_MDTICKETID_EMPRESA.AsString;
      DMGS.VEMPRESASAUX.TIPO :='2';
      OPEN;
    END;

//    impresora := fmenu.impresorapordefecto(fmenu.IMPRESORATICKET);

    LISTADOS := tLISTADOS.Create(nil);
    PREVIO := TPREVIO.Create(NIL);
    LISTADOS.FRDB.DataSet := DMGS.CDSQ_MDTICKET;
    LISTADOS.FRDB1.DATASET := DMGS.CDSQ_MDLINEATICKET;
    LISTADOS.FRDB2.DataSet := DMGS.CDSQ_EMPRESAAUX;
//    LISTADOS.FRDB3.DataSet := DMGS.CDSQ_CLIENTEAUX;

 //   Path := ExtractFilePath(ParamStr(0));

//    FOR I:=1 TO strtoint(FMENU.TICKET) do
//    BEGIN
       LISTADOS.frReport1.LoadFromFile(dmgs.Path + 'LISTADOS\TICKET.frf');



       listados.frReport1.ShowProgress := false;
       listados.frReport1.PrepareReport;
       IF FMENU.VPREVIO = '1' THEN
       BEGIN
         LISTADOS.frReport1.Preview := PREVIO.frPreview1;
         LISTADOS.frReport1.ShowReport;
         PREVIO.ShowModal;
       END
       ELSE
       BEGIN
//         LISTADOS.frReport1.ShowReport;
         listados.frReport1.PrintPreparedReport('',strtoint(FMENU.TICKET));
//         PREVIO.Print;
         PREVIO.IMPRESO := TRUE;
       END;
//   END;
    if previo.impreso then
    begin
       DMGS.TICKETIMPRIMIR := TRUE;
       DMGS.CDSQ_MDTICKET.Edit;
       DMGS.CDSQ_MDTICKETIMPReso.Value := 1;
       dmgs.cdsq_mdticket.Post;
    end;
    
//    DSTICKET.DataSet := DMGS.CDSQ_MDTICKET;
//    DSLINEATICKET.DataSet := DMGS.CDSQ_MDLINEATICKET;
    finally
    begin
      dmgs.cdsq_mdticket.enableControls ;
      dmgs.cdsq_mdlineaticket.EnableControls;
      fmenu.impresorainicial(impresora);
    end;
    end;

    LISTADOS.Free;
    LISTADOS := NIL;
    PREVIO.FREE;
    PREVIO := NIL;
    DMGS.CDSQ_EMPRESAAUX.CLOSE;
    DMGS.CDSQ_CLIENTEAUX.CLOSE;
    dmgs.cdsq_mdticket.GotoBookmark (bookmark1);
    dmgs.cdsq_mdticket.FreeBookmark(bookmark1);
    DMGS.CDSQ_MDLINEATICKET.GotoBookmark (BOOKMARK);
    DMGS.CDSQ_MDLINEATICKET.FreeBookmark(BOOKMARK);
end;
procedure TTICKET.DSTICKETStateChange(Sender: TObject);
begin
    EstadoBotones;
end;
procedure TTICKET.TICKET1Click(Sender: TObject);
begin
    altas1.enabled:=baltas.enabled;
    bajas1.enabled:=bbajas.enabled;
    consultas1.enabled:=bconsultas.enabled;
    modificaciones1.enabled:=bmodificaciones.enabled;
end;



procedure TTICKET.DSTICKETDataChange(Sender: TObject;
  Field: TField);
  VAR I:INTEGER;
      AUXBOOKMARK:TBOOKMARK;
begin
    IF ((DMGS.CDSQ_MDTICKET.Eof)   AND (NOT (DMGS.CDSQ_MDTICKET.STATE IN [DSEDIT,DSINSERT]))) THEN
    BEGIN
      try // para evitar el error de memoria bloqueada en el server.
        DMGS.CDSQ_MDTICKET.GetNextPacket ;
      except
      end;
    END;
    ESTADOBOTONES;
    IF NOT (DMGS.CDSQ_MDTICKET.STATE IN [DSEDIT,DSINSERT]) THEN
    BEGIN
        EDIT1.Text := '';
        LABEL7.Caption := '';
        if self.Active  then
           edit1.SetFocus ;
    END;
end;
procedure TTICKET.BBAJAS2Click(Sender: TObject);
begin
//  IF NOT COMPROBARFACTURADOCOBRADO THEN
//  BEGIN
    if (DMGS.CDSQ_MDLINEATICKET.recordcount>0)
    then
    begin
      DMGS.CDSQ_MDLINEATICKET.delete;
      DMGS.CDSQ_MDLINEATICKETafterpost(dmGS.CDSQ_MDLINEATICKET);
    end;
//  END;
end;
procedure TTICKET.DBGrid1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  IF (DMGS.CDSQ_MDLINEATICKET.STATE IN [DSEDIT,DSINSERT]) THEN
   BEGIN
   IF KEY=27 THEN
     DMGS.ESCAPELINTIC := true;

   if key=112 then
    begin
      if UPPERCASE(TRIM(dbgrid1.SelectedField.FieldName)) ='ID_ARTICULO' then
      begin
          DLGARTICULOSAUX := TDLGARTICULOSAUX.CREATE(NIL);
          IF DLGARTICULOSAUX.Showmodal=mrOk then
          begin
             pfunciones.Borrar;
             pfunciones.TICKET := true;
             pfunciones.Esta(DLGARTICULOSAUX.codigo,FALSE,DLGARTICULOSAUX.PRECIO,DLGARTICULOSAUX.PRECIO2,DMGS.CDSQ_MDTICKETID_SERIE.AsString,DMGS.CDSQ_MDTICKETID_EMPRESA.AsString,DMGS.CDSQ_MDTICKETANYO.AsString);
             dmgs.cdsq_MDLINEATICKETID_ARTICULO.asstring:=pfunciones.ID_ARTICULO;
             DMGS.CDSQ_MDLINEATICKETDESCRIPCION.ASSTRING:= pfunciones.DESCRIPCION;
             DMGS.CDSQ_MDLINEATICKETPRECIO.ASfloat := pfunciones.precio;//OBTENERPRECIOVENTA(TRUE,'0','0'); //ROUNDTO(DMGS.CDSQ_ARTICULOEANPRECIO_VENTA.ASfloat,DMGS.DECIMALES);
             dmgs.cdsq_MDLINEATICKETiva.asstring := pfunciones.IVA;
             DMGS.CDSQ_MDLINEATICKETMARCA.ASSTRING := pfunciones.MARCA;
             DMGS.CDSQ_MDLINEATICKETCODIGO_BARRAS.AsString := pfunciones.Codigo_barras ;
             DMGS.CDSQ_MDLINEATICKETprecio_coste.asfloat := pfunciones.PrecioCoste ;
             dbgrid1.selectedindex:=dbgrid1.selectedindex+1;          
{             F1ENTRA := TRUE;
             dmgs.cdsq_MDLINEATICKETID_ARTICULO.asstring:=DLGARTICULOSAUX.codigo;
             DMGS.CDSQ_MDLINEATICKETDESCRIPCION.ASSTRING:= dmgs.cdsq_articulosauxdescripcionticket.AsString ;
             DMGS.CDSQ_MDLINEATICKETPRECIO.ASfloat := ROUNDTO(strtofloat(DLGARTICULOSAUX.PRECIO),DMGS.DECIMALES);
             DMGS.CDSQ_MDLINEATICKETMARCA.ASSTRING := DLGARTICULOSAUX.MARCA;
             dbgrid1.selectedindex:=dbgrid1.selectedindex+1;
}             DMGS.CDSQ_MDLINEATICKETCANTIDAD.FocusControl ;
          end;
          DLGARTICULOSAUX.Free;
          DLGARTICULOSAUX := NIL;
      END;
    END;
  end;
END;
procedure TTICKET.DBNavigator1Click(Sender: TObject;
  Button: TNavigateBtn);
begin
  IF DMGS.CDSQ_MDTICKET.Eof THEN
  try // para evitar el error de memoria bloqueada en el server.
     DMGS.CDSQ_MDTICKET.GetNextPacket ;
  except
  end;
end;

procedure TTICKET.DBGrid1ColEnter(Sender: TObject);
begin
IF (DMGS.CDSQ_MDLINEATICKET.STATE IN [DSEDIT,DSINSERT]) THEN
 F1ENTRA:=FALSE;
if dbgrid1.SelectedField <> nil then
    ACTIVO := DBGRID1.SelectedField.FieldName ;
END;
procedure TTICKET.DBGrid1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
   const
   azul = TColor($FFFFEE);//C1   0000ff rojo  ; 00ff00 verde feo ; $ff0000 azul
   azul2 = TColor($FFFF0F);
   otro = TColor($2492FF);
 begin
       if ((DMGS.CDSQ_MDLINEATICKET.RecNo   mod 2 )= 0)then
           If (gdFocused in State)
             then dbgrid1.canvas.brush.color := otro//clblue
             else dbgrid1.canvas.brush.color := azul//clPaleGreen;
       ELSE
           If (gdFocused in State)
             then dbgrid1.canvas.brush.color := otro;//clblue
 //            else dbgrid1.canvas.brush.color := azul2;//clPaleGreen;

     dbgrid1.DefaultDrawColumnCell(rect,DataCol,Column,State)
 end;
procedure TTICKET.DBGrid1KeyPress(Sender: TObject; var Key: Char);
BEGIN
   if (key = #46) then // 46 -> .
     if (dmgs.CDSQ_MDLINEATICKET.state in [dsedit,dsinsert]) then
       if (dbgrid1.SelectedField.DataType in [ftfloat,ftfmtbcd,ftbcd]) then
          key := #44 ;  //44->  ,

   if (key <> #27) then
       DMgs.ESCAPeLINTIC := false;
   if (key = #13) and not (DMGS.CDSQ_MDLINEATICKET.State in [dsedit,dsinsert]) then
    begin
        Perform(WM_NextDLGCtl, 0, 0);
        key:=#0;
    end;
   if (key = #13) and (DMGS.CDSQ_MDLINEATICKET.State in [dsedit,dsinsert]) then
   begin
        if dbgrid1.SelectedIndex = (dbgrid1.FieldCount - 2) then
        begin
        try
         dmgs.cdsq_mdlineaticket.DisableControls;
         dbgrid1.SelectedIndex := dbgrid1.SelectedIndex + 1;         
         dmgs.CDSQ_MDLINEATICKET.post;
        finally
         dmgs.cdsq_mdlineaticket.EnableControls;
        end;
        end
        else
           dbgrid1.SelectedIndex := dbgrid1.SelectedIndex + 1;
        key:=#0;
   end;
     if (key = #27) and not (DMGS.CDSQ_MDLINEATICKET.state in [dsedit,dsinsert])
     then
       close;
     if (key = #27) and not (ActiveControl is TButton) then
        DMgs.ESCAPELINTIC:= true;

  if (dmgs.cdsq_mdLINEAticket.State in [dsedit,dsinsert])then
  BEGIN
    IF (UPPERCASE(TRIM(dbgrid1.SelectedField.FieldName)) = 'DESCUENTOEURO') THEN
       if (key in ['0'..'9','-']) 
       AND NOT PORCIEN then
       begin
          euro:= true;
          dmgs.cdsq_mdLINEAticketdescuento.value := 0;
       end;
 
    IF (UPPERCASE(TRIM(dbgrid1.SelectedField.FieldName)) = 'DESCUENTO') THEN
       if (key in ['0'..'9','-'])
       AND NOT EURO then
         begin
          porcien:= true;
          dmgs.cdsq_mdLINEAticketdescuentoeuro.asstring:= '0';
         end;
  END;

END;

{PROCEDURE TTICKET.COMPROBARCLIENTE;
BEGIN
     if ((not (DMGS.CDSQ_MDTICKETID_CLIENTE.IsNull)) AND (TRIM(DMGS.CDSQ_MDTICKETID_CLIENTE.ASSTRING)<>'')) then
     begin
        if (TRIM(LABEL12.CAPTION) <> '') then
           begin
           if not (TRIM(LABEL12.CAPTION) = trim(DMGS.CDSQ_MDTICKETID_CLIENTE.asstring))
           then
             begin
               DMGS.CDSQ_CLIENTEAUX.close;
               DMGS.CLABGRNOMBRE :=trim(DMGS.CDSQ_MDTICKETID_CLIENTE.asstring);
               dmGS.CLABGRborrado := '0';
               DMGS.CLABGRTIPO :='2';
               DMGS.CDSQ_CLIENTEAUX.OPEN;
             end;
           end
           else
             begin
               DMGS.CDSQ_CLIENTEAUX.close;
               DMGS.CLABGRNOMBRE :=trim(DMGS.CDSQ_MDTICKETID_CLIENTE.asstring);
               dmGS.CLABGRborrado := '0';
               DMGS.CLABGRTIPO :='2';
               DMGS.CDSQ_CLIENTEAUX.OPEN;
             end;
    end
    else
    begin
       DMGS.CDSQ_CLIENTEAUX.close;
       LABEL12.CAPTION := '';
       label1.Caption := '';
       label2.Caption := '';
       label3.Caption := '';
       label5.Caption := '';
       label4.Caption := '';
    end;

    IF DMGS.CDSQ_CLIENTEAUX.Active THEN
    BEGIN
      LABEL12.CAPTION := DMGS.CDSQ_CLIENTEAUXID_CLIENTE.ASSTRING;
      label1.Caption := DMGS.CDSQ_CLIENTEAUXNOMBRE.ASSTRING;
      label2.Caption := DMGS.CDSQ_CLIENTEAUXDIRECCION.ASSTRING;
      label3.Caption := DMGS.CDSQ_CLIENTEAUXPOBLACION.ASSTRING;
      label5.Caption := DMGS.CDSQ_CLIENTEAUXCOD_POSTAL.ASSTRING;
      label4.Caption := DMGS.CDSQ_CLIENTEAUXPROVINCIA.ASSTRING;
    END ;
    DMGS.CDSQ_CLIENTEAUX.close;

END;
}
procedure TTICKET.BMODIFICAR2Click(Sender: TObject);
begin
//  IF NOT COMPROBARFACTURADOCOBRADO THEN
//  BEGIN
    if DMGS.CDSQ_MDLINEATICKET.recordcount>0 then
    begin
        DMGS.CDSQ_MDLINEATICKET.edit;
        DMGS.CDSQ_MDLINEATICKETID_ARTICULO.FocusControl;
    end
//  END;
end;

procedure TTICKET.DBEdit4Exit(Sender: TObject);
 VAR AUX:TDATETIME;
begin

 { IF TRIM(DBEDIT4.Text) <> '' THEN
    TRY
      AUX := STRTODATE(DBEDIT4.Text);
    EXCEPT
      MessageDlg('La fecha introducidad no es correcta. Vuelva a introducirla.', mtWarning,[mbOK], 0);
      dbedit4.SetFocus;
    END;
 }
end;



procedure TTICKET.DBGrid1DblClick(Sender: TObject);
VAR AUX:STRING;
begin
  IF (DMGS.CDSQ_MDLINEATICKET.STATE IN [DSEDIT,DSINSERT]) THEN
    begin
      if UPPERCASE(TRIM(dbgrid1.SelectedField.FieldName)) ='ID_ARTICULO' then
      begin
          DLGARTICULOSAUX := TDLGARTICULOSAUX.CREATE(NIL);
          IF DLGARTICULOSAUX.Showmodal=mrOk then
          begin
              F1ENTRA := TRUE;
{             dmgs.cdsq_MDLINEAALBARANID_ARTICULO.asstring:=DLGARTICULOSAUX.codigo;
             DMGS.CDSQ_MDLINEAALBARANDESCRIPCION.ASSTRING:= DLGARTICULOSAUX.DESCRIPCION;
             DMGS.CDSQ_MDLINEAALBARANPRECIO.ASfloat := OBTENERPRECIOVENTA(FALSE,DLGARTICULOSAUX.PRECIO,DLGARTICULOSAUX.PRECIO2);//ROUNDTO(strtofloat(DLGARTICULOSAUX.PRECIO),DMGS.DECIMALES);
             dmgs.cdsq_MDLINEAALBARANiva.asstring := dlgarticulosaux.iva;
             DMGS.CDSQ_MDLINEAALBARANMARCA.ASSTRING := DLGARTICULOSAUX.MARCA;
 }
             pfunciones.Borrar;
             pfunciones.TICKET := true;
             pfunciones.Esta(DLGARTICULOSAUX.codigo,FALSE,DLGARTICULOSAUX.PRECIO,DLGARTICULOSAUX.PRECIO2,DMGS.CDSQ_MDTICKETID_SERIE.AsString,DMGS.CDSQ_MDTICKETID_EMPRESA.AsString,DMGS.CDSQ_MDTICKETANYO.AsString);
             dmgs.cdsq_MDLINEATICKETID_ARTICULO.asstring:=pfunciones.ID_ARTICULO;
             DMGS.CDSQ_MDLINEATICKETDESCRIPCION.ASSTRING:= pfunciones.DESCRIPCION;
             DMGS.CDSQ_MDLINEATICKETPRECIO.ASfloat := pfunciones.precio;//OBTENERPRECIOVENTA(TRUE,'0','0'); //ROUNDTO(DMGS.CDSQ_ARTICULOEANPRECIO_VENTA.ASfloat,DMGS.DECIMALES);
             dmgs.cdsq_MDLINEATICKETiva.asstring := pfunciones.IVA;
             DMGS.CDSQ_MDLINEATICKETMARCA.ASSTRING := pfunciones.MARCA;
             DMGS.CDSQ_MDLINEATICKETCODIGO_BARRAS.AsString := pfunciones.Codigo_barras ;
             DMGS.CDSQ_MDLINEATICKETprecio_coste.asfloat := pfunciones.PrecioCoste ;
             dbgrid1.selectedindex:=dbgrid1.selectedindex+1;
 {            F1ENTRA := TRUE;
             dmgs.cdsq_MDLINEATICKETID_ARTICULO.asstring:=DLGARTICULOSAUX.codigo;
             DMGS.CDSQ_MDLINEATICKETDESCRIPCION.ASSTRING:= dmgs.cdsq_articulosauxdescripcionticket.AsString;
             DMGS.CDSQ_MDLINEATICKETPRECIO.ASfloat := ROUNDTO(strtofloat(DLGARTICULOSAUX.PRECIO),DMGS.DECIMALES);
             DMGS.CDSQ_MDLINEATICKETMARCA.ASSTRING := DLGARTICULOSAUX.MARCA;
             dbgrid1.selectedindex:=dbgrid1.selectedindex+1;
}
             DMGS.CDSQ_MDLINEATICKETCANTIDAD.FocusControl ;
          end;
          DLGARTICULOSAUX.Free;
          DLGARTICULOSAUX := NIL;
      END;
  end
  ELSE
  BEGIN
     AUX := dbgrid1.SelectedField.FIELDNAME;
     BMODIFICAR2CLICK(SENDER);
     DMGS.CDSQ_MDLINEATICKET.FieldByName(AUX).FocusControl ;
     // HACE FALTA DOS VECES PQ AL SALIR DE ARTICULO VOY DIRECTO
     // A LA CANTIDAD
     DMGS.CDSQ_MDLINEATICKET.FieldByName(AUX).FocusControl ;
  END;

end;





procedure TTICKET.ToolButton1Click(Sender: TObject);
var cadena:string;
    BOOKMARK:TBOOKMARK;
begin

   listadoopcionesTICKET := tlistadoopcionesTICKET.create(nil);
   if listadoopcionesTICKET.ShowModal = mrok then
   begin
    cadena := listadoopcionesTICKET.cadena;
    listadoopciones.free;
    listadoopciones := nil;

    dsTICKET.DataSet := NIL; // HACE FALTA
    dslineaTICKET.DataSet := NIL;

    WITH DMGS.CDSQ_EMPRESAAUX DO
    BEGIN
      Close;
      DMGS.VEMPRESASAUX.ID:= DMGS.CDSQ_MDTICKETID_EMPRESA.AsString;
      DMGS.VEMPRESASAUX.TIPO :='2';
      OPEN;
    END;



    LISTADOS := tLISTADOS.Create(nil);
    PREVIO := TPREVIO.Create(NIL);

    LISTADOS.FRDB.DataSet := DMGS.CDSQ_TICKETAUX;

    LISTADOS.FRDB2.DataSet := DMGS.CDSQ_EMPRESAAUX;
    LISTADOS.FRDB3.DataSet := DMGS.CDSQ_CLIENTEAUX;

 //   Path := ExtractFilePath(ParamStr(0));
    LISTADOS.frReport1.LoadFromFile(dmgs.Path + 'LISTADOS\LISTADOTICKETS.frf');
    LISTADOS.frReport1.Preview := PREVIO.frPreview1;
    LISTADOS.frReport1.ShowReport;
    PREVIO.ShowModal;
    DSTICKET.DataSet := DMGS.CDSQ_MDTICKET;
    DSLINEATICKET.DataSet := DMGS.CDSQ_MDLINEATICKET;
    LISTADOS.Free;
    LISTADOS := NIL;
    PREVIO.FREE;
    PREVIO := NIL;
    DMGS.CDSQ_EMPRESAAUX.CLOSE;
    DMGS.CDSQ_CLIENTEAUX.CLOSE;
    DMGS.CDSQ_TICKETAUX.CLOSE;
   end;
end;
procedure TTICKET.ACANTIDADExecute(Sender: TObject);
begin
  IF DMGS.CDSQ_MDLINEATICKET.ACTIVE
  AND (DMGS.CDSQ_MDLINEATICKET.recordcount >0)
  AND (TRIM(DMGS.CDSQ_MDLINEATICKETID_ARTICULO.ASSTRING )<> '')
  THEN
     CANTIDAD := TCANTIDAD.Create(NIL);
     WITH DMGS.CDSQ_ALMACENAUX DO
     BEGIN
       CLOSE;
       dmgs.almAbgrtipo := '2';
       DMGS.almABGRorden:= ORDENALMACEN;
       DMGS.almABGRID := ' WHERE ID_ARTICULO='''+DMGS.CDSQ_MDLINEATICKETID_ARTICULO.AsString+''' AND ID_EMPRESA='+DMGS.CDSQ_MDLINEATICKETID_EMPRESA.ASSTRING;
       OPEN;
     END;
     IF DMGS.CDSQ_ALMACENAUX.RecordCount > 0 THEN
        CANTIDAD.Showmodal;
     CANTIDAD.Free;
     CANTIDAD := nil;
end;

procedure TTICKET.FormPaint(Sender: TObject);
const realWidth:integer = 314;
      realHeight:integer = 215;
var   auxWidth,auxHeight,auxa,auxb:double;
      i:smallint;
begin
     auxWidth := clientWidth/realWidth;
     auxHeight := ClientHeight/realheight;
//     PANEL1.Left := 10 + (ClientWidth - ancho ) div 2 ;
     for i:=0 to panel1.ComponentCount-1 do
     begin
        if (panel1.Components [i] is tlabel) then
        begin
            auxa := (panel1.Components [i] as tlabel).Height * auxHeight;
           (panel1.Components [i] as tlabel).Height := trunc(auxa);
            auxa := (panel1.Components [i] as tlabel).width * auxwidth;
           (panel1.Components [i] as tlabel).width := trunc(auxa);
            auxa := (panel1.Components [i] as tlabel).Height * auxheight;
           (panel1.Components [i] as tlabel).font.Size  := trunc((panel1.Components [i] as tlabel).font.Size * auxa);
        end
     end;
end;

procedure TTICKET.FormResize(Sender: TObject);
//const realWidth:integer = 800;
//      realHeight:integer = 449; // a todas las alturas quitarle 151
      //600 - 151;
var   auxWidth,auxHeight,auxa,auxb:double;
      i:smallint;
      x,y:word;
      BORRAR:INTEGER;
begin
//     auxwidth := screen.Width;
//     auxheight := screen.Height;

//********************
// REVISARLO A TOPE
//**********************


{     auxWidth := clientWidth/realWIdth;
     auxHeight := ClientHeight/realheight;
     realWidth:= screen.Width ;
     realHeight:= screen.Height - 151 ; // a todas las alturas quitarle 151
       //600 - 151;

     PANEL1.Left := 10 + (ClientWidth - ancho ) div 2 ;
     if clientwidth = screen.Width then
     begin
//        realWidth:= screen.Width ;
//        realHeight:= screen.Height - 151 ; // a todas las alturas quitarle 151
       //600 - 151;
       for i:=0 to self.ComponentCount-1 do
       begin
        if (self.Components [i] is tlabel) then
        begin
           (self.Components [i] as tlabel).Height := trunc((self.Components [i] as tlabel).Height * auxHeight);
           (self.Components [i] as tlabel).width := trunc((self.Components [i] as tlabel).width * auxwidth);
           (self.Components [i] as tlabel).top := trunc((self.Components [i] as tlabel).top * auxHeight);
           (self.Components [i] as tlabel).left := trunc((self.Components [i] as tlabel).left * auxwidth);
           (self.Components [i] as tlabel).font.Size  := trunc((self.Components [i] as tlabel).font.Size  * auxheight);

        end;
        if (self.Components [i] is tdbedit) then
        begin
           (self.Components [i] as tdbedit).Height := trunc((self.Components [i] as tdbedit).Height * auxHeight);
           (self.Components [i] as tdbedit).width := trunc((self.Components [i] as tdbedit).width * auxwidth);
           (self.Components [i] as tdbedit).top := trunc((self.Components [i] as tdbedit).top * auxHeight);
           (self.Components [i] as tdbedit).left := trunc((self.Components [i] as tdbedit).left * auxwidth);
           (self.Components [i] as tdbedit).font.Size  := trunc((self.Components [i] as tdbedit).font.Size  * auxheight);

        end;
        if (self.Components [i] is tdbtext) then
        begin
           (self.Components [i] as tdbtext).Height := trunc((self.Components [i] as tdbtext).Height * auxHeight);
           (self.Components [i] as tdbtext).width := trunc((self.Components [i] as tdbtext).width * auxwidth);
           (self.Components [i] as tdbtext).top := trunc((self.Components [i] as tdbtext).top * auxHeight);
           (self.Components [i] as tdbtext).left := trunc((self.Components [i] as tdbtext).left * auxwidth);
           (self.Components [i] as tdbtext).font.Size  := trunc((self.Components [i] as tdbtext).font.Size  * auxheight);
        end;
        if (self.Components [i] is tpanel) then
        begin
           (self.components [i] as tpanel).Height := trunc((self.components [i] as tpanel).Height * auxHeight);
        end
       end;
      end;
}
end;

FUNCTION  TTICKET.fechas(SENDER:TOBJECT):BOOLEAN;
VAR I:SMALLINT;
    aux,cad:string;
    fecha:tdatetime;
begin
    RESULT := TRUE;
    if (ActiveControl is tdbedit)
    then
     begin
     if (((activecontrol as tdbedit).Field.DataType IN [FTDATE,ftTimeStamp]))
     and ((activecontrol as tdbedit).field.DataSet.State in [dsedit,dsinsert])
     then
     BEGIN
      aux:=trim((activecontrol as tdbedit).Text);
      if AUX = '/  /' then
         (activecontrol as tdbedit).Field.Clear
      else
        BEGIN
           try
             // ME COJE LA FECHA 0105/20/05
             // CUANDO SON CAMPOS DBEDIT
             IF POS('/',Aux)=5  THEN
             BEGIN
               CAD := aux[1];CAD := cad + aux[2];
               CAD := cad + '/';CAD := cad + aux[3];
               CAD := cad + aux[4];CAD := cad + '/';
               CAD := cad + aux[6];CAD := cad + aux[7];
               CAD := cad + aux[9];CAD := cad + aux[10];
             end
             else
               cad := aux;
             FECHA :=STRTODATE(cad);
           except
           BEGIN
            showmessage('LA FECHA NO ES VALIDA');
            result:= false;
            (activecontrol as tdbedit).Field.FocusControl;
//            RESULT := ;//HAY QUE MANTENER EL FOCUS
           END
           end
        END;
     END;
     end;
end;

procedure TTICKET.BitBtn6Click(Sender: TObject);
VAR AUX,AUX1:DOUBLE;
    RES:TBCD;
begin
 IF (TRIM(EDIT1.TEXT) <> '') THEN
 BEGIN
 if dmgs.cdsq_mdticket.Active then
  if not (DMGS.CDSQ_MDTICKET.State in [dsedit,dsinsert])
  then
  begin
   IF(DMGS.CDSQ_MDTICKETCOBRADO.AsString ='1') THEN
     SHOWMESSAGE('ESTE TICKET YA HA SIDO COBRADO')
   ELSE
   BEGIN
    TRY
       AUX := STRTOFLOAT(EDIT1.TEXT);
    EXCEPT
       SHOWMESSAGE('EL VALOR INTRODUCIDO NO ES CORRECTO');
       ABORT;
    END;
    CAJA:=TCAJA.create(nil);
    CAJA.ENTREGA := EDIT1.Text;
    CAJA.DEVOLUCION :=  LABEL7.Caption ;
    IF CAJA.Showmodal=MROK THEN
    BEGIN
     dmgs.cdsq_mdticket.Edit;
     FABRIRCAJON(7);
     DMGS.CDSQ_MDTICKETCOBRADO.AsString :='1';
     DMGS.CDSQ_MDTICKETHORACOBRO.Value := TIME;
     DMGS.CDSQ_MDTICKETFECHACOBRO.VALUE := DATE;
     DMGS.CDSQ_MDTICKETENTREGA.AsFloat := AUX;
     DMGS.CDSQ_MDTICKETFORMAPAGO.AsString := CAJA.ID_FORMA;
     AUX1 := ROUNDTO(DMGS.CDSQ_MDTICKETTOTAL.AsCurrency,DMGS.DECIMALES);
     AUX1 := AUX - AUX1;
     DMGS.CDSQ_MDTICKETDEVOLUCION.AsCurrency  := ROUNDTO(AUX - ROUNDTO(DMGS.CDSQ_MDTICKETTOTAL.AsCurrency,DMGS.DECIMALES),DMGS.DECIMALES);
     try
       dmgs.cdsq_mdticket.DisableControls ;
       DMGS.CDSQ_MDTICKET.Post;
       IF FMENU.IMPRIMIRTICKET='1' THEN
          BLISTADOCLICK(SENDER);
     finally
       dmgs.cdsq_mdticket.EnableControls;
     end;
    END;
    CAJA.Free;
    CAJA := NIL;
   END;
  end
 END
 ELSE
   SHOWMESSAGE('INTRODUZCA LA CANTIDAD');
end;

procedure TTICKET.AMOSTRARExecute(Sender: TObject);
begin
  IF FMENU.ToolBar1.Visible THEN
  BEGIN
//     FMENU.ToolBar3.VISIBLE := FALSE;
     FMENU.ToolBar1.VISIBLE := FALSE
  END
  ELSE
  BEGIN
//     FMENU.ToolBar3.VISIBLE := TRUE;
     FMENU.ToolBar1.VISIBLE := TRUE
  END;
end;

procedure TTICKET.pulsar(numero:string);
VAR I:SMALLINT;
begin
  if (dmgs.CDSQ_MDLINEATICKET.State in [dsedit,dsinsert]) then
  BEGIN
{    IF dmgs.cdsq_mdlineaticket.Fields.FieldByName(activo).ISNULL THEN
       dmgs.cdsq_mdlineaticket.Fields.FieldByName(activo).asstring := numero
    ELSE
      dmgs.cdsq_mdlineaticket.Fields.FieldByName(activo).asstring := dmgs.cdsq_mdlineaticket.fields.FieldByName(activo).asstring + numero;
    edit1.Text :=dmgs.cdsq_mdlineaticket.Fields.FieldByName(activo).AsString;
}
    I:=0;
    I :=POS('.',EDIT1.TEXT);
    IF I = 0 THEN
      I :=POS(',',EDIT1.TEXT);

    IF I = 0 THEN
    BEGIN
      IF dmgs.cdsq_mdlineaticket.Fields.FieldByName(activo).ISNULL THEN
        EDIT1.TEXT := numero
      ELSE
        EDIT1.TEXT := dmgs.cdsq_mdlineaticket.Fields.FieldByName(activo).asstring  + numero;
    END
    ELSE
        EDIT1.TEXT := EDIT1.TEXT + NUMERO;

    dmgs.cdsq_mdlineaticket.Fields.FieldByName(activo).FocusControl;
    dmgs.cdsq_mdlineaticket.Fields.FieldByName(activo).ASSTRING := EDIT1.TEXT ;
    IF (UPPERCASE(TRIM(dbgrid1.SelectedField.FieldName)) = 'DESCUENTO') THEN
       DMGS.CDSQ_MDLINEATICKETDESCUENTOEURO.AsString := '0';
    IF (UPPERCASE(TRIM(dbgrid1.SelectedField.FieldName)) = 'DESCUENTOEURO') THEN
       DMGS.CDSQ_MDLINEATICKETDESCUENTO.AsString := '0';
  END
  ELSE IF(DMGS.CDSQ_MDTICKET.STATE IN [DSEDIT,DSINSERT]) THEN
  BEGIN
        IF (CONTROLACTIVO IS TDBEDIT) THEN
        BEGIN
           I:=0;
           I :=POS('.',EDIT1.TEXT);
           IF I = 0 THEN
              I :=POS(',',EDIT1.TEXT);

           (CONTROLACTIVO AS TDBEDIT).SetFocus;
           IF I = 0 THEN
           BEGIN
            IF TRIM((CONTROLACTIVO AS TDBEDIT).FIELD.ASSTRING) = '' THEN
              EDIT1.TEXT := numero
            ELSE
              EDIT1.TEXT := (CONTROLACTIVO AS TDBEDIT).FIELD.AsString+ NUMERO;
           END
           ELSE
              EDIT1.TEXT := EDIT1.TEXT + NUMERO;
           (CONTROLACTIVO AS TDBEDIT).FIELD.AsString := EDIT1.TEXT;


//          (CONTROLACTIVO AS TDBEDIT).SetFocus;
//          (CONTROLACTIVO AS TDBEDIT).FIELD.AsString :=(CONTROLACTIVO AS TDBEDIT).FIELD.AsString+ NUMERO;
//          (CONTROLACTIVO AS TDBEDIT).SetFocus;
           IF (UPPERCASE(TRIM((CONTROLACTIVO AS TDBEDIT).Field.Name)) = 'CDSQ_MDTICKETDESCUENTO') THEN
              DMGS.CDSQ_MDTICKETDESCUENTOEURO.AsString := '0';
           IF (UPPERCASE(TRIM((CONTROLACTIVO AS TDBEDIT).FIELD.NAME)) = 'CDSQ_MDTICKETDESCUENTOEURO') THEN
               DMGS.CDSQ_MDTICKETDESCUENTO.AsString := '0';
//           edit1.Text := (CONTROLACTIVO AS TDBEDIT).FIELD.ASSTRING;
        END;
  END ELSE
  BEGIN
    EDIT1.TEXT := EDIT1.Text + NUMERO;
    CALCULARLABEL7;
  END;
  // NO LO VOY A PONER PQ SEÑALA TODO EL CAMPO
//  EDIT1.SetFocus;
//  EDIT1.Text := EDIT1.TEXT;

end;
procedure TTICKET.BitBtn15Click(Sender: TObject);
begin
   pulsar('7');
end;

procedure TTICKET.DBGrid1Enter(Sender: TObject);
begin
if dbgrid1.SelectedField <> nil then
    activo :=  dbgrid1.SelectedField.FieldName ;
end;

procedure TTICKET.BitBtn11Click(Sender: TObject);
begin
  pulsar('8');
end;

procedure TTICKET.BitBtn17Click(Sender: TObject);
begin
  pulsar('9');
end;

procedure TTICKET.BitBtn20Click(Sender: TObject);
begin
  pulsar('4');
end;

procedure TTICKET.BitBtn19Click(Sender: TObject);
begin
  pulsar('5');
end;

procedure TTICKET.BitBtn18Click(Sender: TObject);
begin
   pulsar('6');
end;

procedure TTICKET.BitBtn23Click(Sender: TObject);
begin
   pulsar('1');
end;

procedure TTICKET.BitBtn22Click(Sender: TObject);
begin
  pulsar('2');
end;

procedure TTICKET.BitBtn21Click(Sender: TObject);
begin
  pulsar('3');
end;

procedure TTICKET.BitBtn10Click(Sender: TObject);
begin
  pulsar('0');
end;

procedure TTICKET.BitBtn12Click(Sender: TObject);
VAR I:SMALLINT;
    AUX:STRING;
begin
  if (dmgs.CDSQ_MDLINEATICKET.State in [dsedit,dsinsert]) then
  begin
   IF dmgs.cdsq_mdlineaticket.Fields.FieldByName(activo).ISNULL THEN
      AUX := ''
   ELSE
      AUX := dmgs.cdsq_mdlineaticket.fields.FieldByName(activo).ASSTRING;
   I :=POS('.',AUX);
   IF I = 0 THEN
      I :=POS(',',AUX);
   IF (I= 0) and
   (not (dmgs.cdsq_mdlineaticket.fields.FieldByName(activo).DataType in [ftSmallint, ftInteger] ))
   THEN
      PULSAR(',');
   dmgs.cdsq_mdlineaticket.fields.FieldByName(activo).FocusControl;
// QUITO ESTE  DE MOMENTO
//   edit1.Text :=dmgs.cdsq_mdlineaticket.Fields.FieldByName(activo).AsString;
 end
  ELSE IF(DMGS.CDSQ_MDTICKET.STATE IN [DSEDIT,DSINSERT]) THEN
  BEGIN
        IF (CONTROLACTIVO IS TDBEDIT) THEN
        BEGIN
          (CONTROLACTIVO AS TDBEDIT).SetFocus;
          AUX := (CONTROLACTIVO AS TDBEDIT).FIELD.ASSTRING;
          I :=POS('.',AUX);
          IF I = 0 THEN
             I :=POS(',',AUX);
          aux :=(controlactivo as tdbedit).DataField;
          IF (I= 0) and
          ( not ((controlactivo as tdbedit).DataSource.DataSet.FieldByName(aux).DataType in [ftSmallint, ftInteger]))
          THEN
              PULSAR(',');
// LO QUITO DE MOMENTO              
//          edit1.Text := (CONTROLACTIVO AS TDBEDIT).FIELD.ASSTRING;
          (CONTROLACTIVO AS TDBEDIT).SetFocus;
        END;
  END ELSE
  BEGIN
          I :=POS('.',EDIT1.TEXT);
          IF I = 0 THEN
             I :=POS(',',EDIT1.TEXT);
          IF (I= 0)
          THEN
              PULSAR(',');
          CALCULARLABEL7;
  END;



end;

procedure TTICKET.BitBtn8Click(Sender: TObject);
begin
 if (dmgs.CDSQ_MDLINEATICKET.State in [dsedit,dsinsert]) then
 begin
     IF not dmgs.cdsq_mdlineaticket.Fields.FieldByName(activo).ISNULL THEN
        dmgs.cdsq_mdlineaticket.fields.FieldByName(activo).Clear;
     dmgs.cdsq_mdlineaticket.fields.FieldByName(activo).focuscontrol;
     edit1.Text :=dmgs.cdsq_mdlineaticket.Fields.FieldByName(activo).AsString;
 end
  ELSE IF(DMGS.CDSQ_MDTICKET.STATE IN [DSEDIT,DSINSERT]) THEN
  BEGIN
        IF (CONTROLACTIVO IS TDBEDIT) THEN
        BEGIN
          (CONTROLACTIVO AS TDBEDIT).SetFocus;
          (CONTROLACTIVO AS TDBEDIT).CLEAR;
          edit1.Text := (CONTROLACTIVO AS TDBEDIT).TEXT;
          (CONTROLACTIVO AS TDBEDIT).SetFocus;
        END;
  END ELSE
  BEGIN
    EDIT1.TEXT := '';
     CALCULARLABEL7;
  END;

end;

procedure TTICKET.BitBtn7Click(Sender: TObject);
var aux:string;
begin
 if (dmgs.CDSQ_MDLINEATICKET.State in [dsedit,dsinsert]) then
  begin
   IF dmgs.cdsq_mdlineaticket.Fields.FieldByName(activo).ISNULL THEN
      AUX := ''
   ELSE
      aux := dmgs.cdsq_mdlineaticket.fields.FieldByName(activo).asstring;
   IF POS('-',aux) = 1 THEN
      dmgs.cdsq_mdlineaticket.fields.FieldByName(activo).asstring := RightStr(aux,LENGTH(aux)-1)
   ELSE
      dmgs.cdsq_mdlineaticket.fields.FieldByName(activo).asstring := '-'+aux;
   dmgs.cdsq_mdlineaticket.fields.FieldByName(activo).focuscontrol;
   edit1.Text :=dmgs.cdsq_mdlineaticket.Fields.FieldByName(activo).AsString;
 end
  ELSE IF(DMGS.CDSQ_MDTICKET.STATE IN [DSEDIT,DSINSERT]) THEN
  BEGIN
        IF (CONTROLACTIVO IS TDBEDIT) THEN
        BEGIN
          (CONTROLACTIVO AS TDBEDIT).SetFocus;
          AUX :=(CONTROLACTIVO AS TDBEDIT).FIELD.ASSTRING;
          IF POS('-',aux) = 1 THEN
            (CONTROLACTIVO AS TDBEDIT).FIELD.ASSTRING:= RightStr(aux,LENGTH(aux)-1)
          ELSE
            (CONTROLACTIVO AS TDBEDIT).FIELD.ASSTRING := '-'+aux;
          edit1.Text := (CONTROLACTIVO AS TDBEDIT).FIELD.ASSTRING;
         (CONTROLACTIVO AS TDBEDIT).SetFocus;
        END;
  END ELSE
  BEGIN
          IF POS('-',EDIT1.TEXT) = 1 THEN
            EDIT1.TEXT := RightStr(EDIT1.TEXT,LENGTH(EDIT1.TEXT)-1)
          ELSE
            EDIT1.TEXT := '-'+EDIT1.TEXT;
          CALCULARLABEL7;
  END;
End;

procedure TTICKET.BitBtn9Click(Sender: TObject);
var aux:string;
begin
  if (dmgs.CDSQ_MDLINEATICKET.State in [dsedit,dsinsert]) then
  begin
    IF dmgs.cdsq_mdlineaticket.Fields.FieldByName(activo).ISNULL THEN
       AUX := ''
    ELSE
       aux := dmgs.cdsq_mdlineaticket.fields.FieldByName(activo).asstring;
    IF TRIM(aux)<> '' THEN
       dmgs.cdsq_mdlineaticket.fields.FieldByName(activo).asstring := COPY(aux,1,LENGTH(aux)-1);
    dmgs.cdsq_mdlineaticket.fields.FieldByName(activo).focuscontrol ;
    edit1.Text :=dmgs.cdsq_mdlineaticket.Fields.FieldByName(activo).AsString;
  end
  ELSE IF(DMGS.CDSQ_MDTICKET.STATE IN [DSEDIT,DSINSERT]) THEN
  BEGIN
        IF (CONTROLACTIVO IS TDBEDIT) THEN
        BEGIN
          (CONTROLACTIVO AS TDBEDIT).SetFocus;
          AUX :=(CONTROLACTIVO AS TDBEDIT).FIELD.ASSTRING;
          IF TRIM(AUX) <> '' THEN
           (CONTROLACTIVO AS TDBEDIT).FIELD.ASSTRING :=COPY(aux,1,LENGTH(aux)-1);
          edit1.Text := (CONTROLACTIVO AS TDBEDIT).FIELD.ASSTRING;
          (CONTROLACTIVO AS TDBEDIT).SetFocus;
        END;
  END ELSE
  BEGIN
     EDIT1.TEXT :=COPY(EDIT1.TEXT,1,LENGTH(EDIT1.TEXT)-1);
     CALCULARLABEL7;
  END;
end;

procedure TTICKET.BitBtn13Click(Sender: TObject);
begin
  EDIT1.TEXT := '';
  if (dmgs.CDSQ_MDLINEATICKET.State in [dsedit,dsinsert]) then
  begin
       if dbgrid1.SelectedIndex = (dbgrid1.FieldCount - 1) then
       begin
       try
        dmgs.cdsq_mdlineaticket.DisableControls;
        dmgs.CDSQ_MDLINEATICKET.post;
       finally
        dmgs.cdsq_mdlineaticket.EnableControls;
       end;
       end
       else
       begin
         dbgrid1.SelectedIndex := dbgrid1.SelectedIndex + 1;
         dbgrid1.SelectedField.FocusControl ;
       end;
  end
  ELSE IF(DMGS.CDSQ_MDTICKET.STATE IN [DSEDIT,DSINSERT]) THEN
       BEGIN
        if controlactivo is tdbedit then
        begin
          (CONTROLACTIVO AS TDBEDIT).SetFocus;
          CambiarControl(self,true);
        end
        END
       ELSE
       IF (DMGS.CDSQ_MDLINEATICKET.Active) THEN
       BEGIN
         IF NOT (DMGS.CDSQ_MDLINEATICKET.Eof) THEN
            DMGS.CDSQ_MDLINEATICKET.Next
         ELSE
            DMGS.CDSQ_MDLINEATICKET.LAST;
         DMGS.CDSQ_MDLINEATICKETID_ARTICULO.FocusControl;
       END
end;

procedure TTICKET.BitBtn14Click(Sender: TObject);
begin
  EDIT1.TEXT := '';
  if (dmgs.CDSQ_MDLINEATICKET.State in [dsedit,dsinsert]) then
  begin
       if dbgrid1.SelectedIndex = 0 then
       begin
       try
        dmgs.cdsq_mdlineaticket.DisableControls;
        dmgs.CDSQ_MDLINEATICKET.post;
       finally
        dmgs.cdsq_mdlineaticket.EnableControls;
       end;
       end
       else
       begin
         dbgrid1.SelectedIndex := dbgrid1.SelectedIndex - 1;
         dbgrid1.SelectedField.FocusControl ;
       end;
  end
  ELSE IF(DMGS.CDSQ_MDTICKET.STATE IN [DSEDIT,DSINSERT]) THEN
       BEGIN
         if controlactivo is tdbedit then
         begin
           (CONTROLACTIVO AS TDBEDIT).SetFocus;
           CambiarControl(self,false);
         end;
       END
       ELSE
       IF (DMGS.CDSQ_MDLINEATICKET.Active) THEN
       BEGIN
         IF NOT (DMGS.CDSQ_MDLINEATICKET.BOF) THEN
            DMGS.CDSQ_MDLINEATICKET.PRIOR
         ELSE
            DMGS.CDSQ_MDLINEATICKET.FIRST;
         DMGS.CDSQ_MDLINEATICKETID_ARTICULO.FocusControl;
       END;
end;
procedure TTICKET.BitBtn16Click(Sender: TObject);
begin
  FAMILIA.SHOW;
end;

procedure TTICKET.BitBtn24Click(Sender: TObject);
begin
 if dmgs.cdsq_mdticket.Active then
  if not (DMGS.CDSQ_MDTICKET.State in [dsedit,dsinsert]) then
  begin
    dmgs.cdsq_mdticket.Edit;
    dmgs.cdsq_mdticketid_cliente.FocusControl;
  end
  else
    cliente
end;
procedure TTICKET.cliente ;
begin
  IF (DMGS.CDSQ_MDTICKET.STATE IN [DSEDIT,DSINSERT]) THEN
   BEGIN
        DMGS.cdsq_clienteaux.Close;
        dlgclienteAUX := tdlgclienteAUX.Create(NIL);
        DMGS.PREGUNTATICKET := FALSE;
        if dlgclienteAUX.Showmodal=mrok then
        begin
            F1ENTRA:= TRUE;
            DMGS.CDSQ_MDTICKETID_CLIENTE.ASSTRING := dlgclienteaux.codigo;
            DMGS.CDSQ_MDTICKET.Post;
        end
        ELSE
            DMGS.CDSQ_MDTICKET.CancelUpdates;
        dlgclienteaux.Free;
        dlgclienteaux := nil;
  end;
end;
procedure TTICKET.BitBtn15MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
  VAR AUX:STRING;
begin
// AUX := ACTIVECONTROL.Name;
// CONTROLACTIVO := ACTIVECONTROL;
end;

procedure TTICKET.DBEdit1Enter(Sender: TObject);
begin
  CONTROLACTIVO := DBEDIT1;
end;

procedure TTICKET.DBEdit4Enter(Sender: TObject);
begin
  CONTROLACTIVO := DBEDIT4;
end;

procedure TTICKET.DBEdit6Enter(Sender: TObject);
begin
  CONTROLACTIVO := DBEDIT6;
end;

procedure TTICKET.DBEdit2Enter(Sender: TObject);
begin
 CONTROLACTIVO := DBEDIT2;
end;

procedure TTICKET.DBEdit5Enter(Sender: TObject);
begin
 CONTROLACTIVO := DBEDIT5;
 EUROVALOR := DBEDIT5.TEXT;
end;

procedure TTICKET.DBEdit2KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  IF KEY=112 THEN
    CLIENTES;
end;

procedure TTICKET.DBEdit2DblClick(Sender: TObject);
begin
  CLIENTES;
end;
procedure TTICKET.clienteS ;
begin
  IF (DMGS.CDSQ_MDTICKET.STATE IN [DSEDIT,DSINSERT]) THEN
   BEGIN
        DMGS.cdsq_clienteaux.Close;
        dlgclienteAUX := tdlgclienteAUX.Create(NIL);
        DMGS.PREGUNTATICKET := FALSE;
        if dlgclienteAUX.Showmodal=mrok then
        begin
            F1ENTRA:= TRUE;
            DMGS.CDSQ_MDTICKETID_CLIENTE.ASSTRING := dlgclienteaux.codigo;
            Perform(WM_NextDLGCtl, 0, 0);
        end ;
        dlgclienteaux.Free;
        dlgclienteaux := nil;
  end;
end;
PROCEDURE TTICKET.CALCULARLABEL7 ;
VAR AUX:DOUBLE;
BEGIN
   IF (TRIM(EDIT1.TEXT) <> '') AND
     (TRIM(DMGS.CDSQ_MDTICKETTOTAL.ASSTRING) <> '')
   THEN
    TRY
      AUX := STRTOFLOAT(EDIT1.TEXT);
      LABEL7.Caption := FORMAT('%16.2F €',[STRTOFLOAT(EDIT1.Text)-DMGS.CDSQ_MDTICKETTOTAL.ascurrency]);
    EXCEPT
    END;
   IF (TRIM(EDIT1.TEXT) = '') THEN
      LABEL7.CAPTION := '';
END;
procedure TTICKET.DBEdit3Enter(Sender: TObject);
begin
 controlactivo := dbedit3;
 PORCIENVALOR := DBEDIT3.Text;
end;

procedure TTICKET.DBEdit3Exit(Sender: TObject);
begin
  porcien := false;
  PORCIENVALOR := DBEDIT3.Text;
  EUROVALOR := DBEDIT5.Text;
end;

procedure TTICKET.DBEdit5Exit(Sender: TObject);
begin
 euro:= false;
 EUROVALOR := DMGS.CDSQ_MDTICKETDESCUENTOEURO.ASSTRING;
 PORCIENVALOR := DBEDIT3.TEXT;
end;
procedure TTICKET.DBEdit5KeyPress(Sender: TObject; var Key: Char);
begin
 if (dmgs.cdsq_mdticket.State in [dsedit,dsinsert]) then
   if key ='.' then //.
      key:=',';  //,
 if (dmgs.cdsq_mdticket.State in [dsedit,dsinsert])
  then
  if NOT ((EUROVALOR + ' €' = (DBEDIT5.Text+KEY))
  OR (EUROVALOR = DBEDIT5.TEXT+KEY+ ' €'))
  AND NOT PORCIEN
  then
  begin
    euro:= true;
    dmgs.cdsq_mdticketdescuento.value := 0;
  end;
end;

procedure TTICKET.DBEdit3KeyPress(Sender: TObject; var Key: Char);
begin
 if (dmgs.cdsq_mdticket.State in [dsedit,dsinsert]) then
   if key ='.' then //.
      key:=',';  //,

 if (dmgs.cdsq_mdticket.State in [dsedit,dsinsert]) then
  if (PORCIENVALOR<> DBEDIT3.Text + KEY)
  AND NOT EURO
  then
  begin
    porcien:= true;
    dmgs.cdsq_mdticketdescuentoeuro.asstring:= '0';
  end;
end;

procedure TTICKET.DBEdit6Exit(Sender: TObject);
begin
  if (DMGS.CDSQ_MDTICKET.State in [dsedit,dsinsert]) AND
       (NOT DMGS.BUSCANDOTIC) then
       try
          dmgs.cdsq_mdticket.DisableControls ;
          DMGS.CDSQ_MDTICKET.Post;
       finally
          dmgs.cdsq_mdticket.EnableControls;
       end;
end;

procedure TTICKET.BitBtn25Click(Sender: TObject);
begin
  IF DMGS.CDSQ_MDTICKET.STATE IN [DSEDIT,DSINSERT] THEN
     DMGS.CDSQ_MDTICKET.CANCELUPDATES;
end;

procedure TTICKET.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
   if key ='.' then //.
      key:=',';  //,
end;

procedure TTICKET.Edit1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
   CALCULARLABEL7;
end;
procedure TTICKET.ABRIRCAJONCLICK(Sender: TObject);
BEGIN
  FABRIRCAJON(7);
END;
FUNCTION TTICKET.FABRIRCAJON(IMPRESORA:INTEGER):BOOLEAN;
var
  f: TextFile;
  PUERTO:STRING;
begin
 if fmenu.existecaja = '1' then
 begin
 PUERTO:=FMENU.PUERTOTIQUETS;//'\\PCMOSTRADOR\EPSONTM-';
  AssignFile(f,PUERTO);
  try
   TRY
    Rewrite(f);
    Writeln(f,#27+'p0'+#100+#0);
   EXCEPT
    SHOWMESSAGE('NO SE PUEDE ABRIR EL CAJON');
   END;
  finally
    CloseFile(f);
  END;
 end;
end;




procedure TTICKET.Edit1Exit(Sender: TObject);
begin
  bitbtn6.SetFocus;
end;

end.






