unit FENTRADA;

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,  ExtendedGrid,FFUNCIONES;

type
  TENTRADA = class(TForm)
    Panel1: TPanel;
    Panel3: TPanel;
    Panel4: TPanel;
    Label23: TLabel;
    Label25: TLabel;
    Label26: TLabel;
    Label27: TLabel;
    Label28: TLabel;
    Label29: TLabel;
    Menu: TMainMenu;
    ENTRADA1: 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;
    DSENTRADA: 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;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    ImageList1: TImageList;
    BBUSQUEDA: TToolButton;
    ToolButton2: TToolButton;
    BORDEN: TToolButton;
    ToolButton6: TToolButton;
    OpenPictureDialog1: TOpenPictureDialog;
    ToolButton4: TToolButton;
    DSLINEAENTRADA: TDataSource;
    PDATOS: TPanel;
    Label6: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    DBEdit1: TDBEdit;
    DBEdit3: TDBEdit;
    DBEdit4: TDBEdit;
    ToolBar2: TToolBar;
    BALTAS2: TToolButton;
    BBAJAS2: TToolButton;
    BLISTADO: TToolButton;
    DBText1: TDBText;
    Label7: TLabel;
    Label11: TLabel;
    DBEdit2: TDBEdit;
    Label12: TLabel;
    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;
    DBEdit7: TDBEdit;
    Label19: TLabel;
    Label20: TLabel;
    DBEdit8: TDBEdit;
    BCANTIDAD: TToolButton;
    ACANTIDAD: TAction;
    DBEdit9: TDBEdit;
    Label21: TLabel;
    Label22: TLabel;
    DBText4: TDBText;
    ToolButton1: TToolButton;
    Label24: TLabel;
    ALISTADOESPECIFICO: TAction;
    ToolButton3: TToolButton;
    APRESUPUESTO: TAction;
    ToolButton8: TToolButton;
    DBEdit10: TDBEdit;
    Label30: TLabel;
    Label31: TLabel;
    DBText6: TDBText;
    DBText5: TDBText;
    ToolButton9: TToolButton;
    ToolButton10: TToolButton;
    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 DSENTRADAStateChange(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 ENTRADA1Click(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 DSENTRADADataChange(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 DSLINEAENTRADAStateChange(Sender: TObject);
    procedure BALTAS2Click(Sender: TObject);
    procedure BBAJAS2Click(Sender: TObject);
    procedure DBEdit3Exit(Sender: TObject);
    procedure DBEdit3KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure DBEdit2Exit(Sender: TObject);
    procedure BMODIFICAR2Click(Sender: TObject);
    procedure DBEdit4Exit(Sender: TObject);
    procedure DBEdit5Exit(Sender: TObject);
    procedure DBEdit7Exit(Sender: TObject);
    procedure DSLINEAENTRADADataChange(Sender: TObject; Field: TField);
    procedure DBGrid1DblClick(Sender: TObject);
    procedure DBEdit3DblClick(Sender: TObject);
    procedure BCANTIDADClick(Sender: TObject);
    procedure ToolButton1Click(Sender: TObject);
    procedure ALISTADOESPECIFICOExecute(Sender: TObject);
    procedure APRESUPUESTOExecute(Sender: TObject);
    procedure DBEdit10Exit(Sender: TObject);
    procedure DBEdit5KeyPress(Sender: TObject; var Key: Char);
    procedure DBEdit10Enter(Sender: TObject);
    procedure DBEdit10KeyPress(Sender: TObject; var Key: Char);
    procedure DBEdit5Enter(Sender: TObject);
    procedure CommPortDriver1ReceiveData(Sender: TObject; DataPtr: Pointer;
      DataSize: Cardinal);
    procedure ApdComPort1TriggerAvail(CP: TObject; Count: Word);
    procedure ApdDataPacket1StringPacket(Sender: TObject; Data: String);
    procedure ApdDataPacket1Packet(Sender: TObject; Data: Pointer;
      Size: Integer);
    procedure DBGrid1TitleClick(Column: TColumn);
    procedure DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure ToolButton9Click(Sender: TObject);
    procedure ToolButton10Click(Sender: TObject);


  private
    { Private declarations }
    F1ENTRA,EURO,PORCIEN :BOOLEAN;
    EUROVALOR,PORCIENVALOR:STRING;
    VALOR :STRING;
    SORDEN:STRING;
    ESTA:BOOLEAN;
    cadena:string;
    pfunciones:tfunciones;

    procedure EstadoBotones;
    procedure buscar;
    PROCEDURE IDARTICULO;
    function fechas(sender:tobject):boolean;
    PROCEDURE PALMACENDETALLE2;

  public
    { Public declarations }
    ver: string;
    ARORDEN : TORDEN;

    PROCEDURE COMPROBAREMPRESA;
    PROCEDURE COMPROBARPROVEEDOR;

  end;

var
  ENTRADA: TENTRADA;

implementation

uses FDLGPROVEEDORAUX, RUTINAS, UDMgs, fdlgarticulos,
  FDLGFAMILIASAUX, menu, DLGCOLORESAUX, FEAN, FDLGPRESUPUESTO,
  FDLGARTICULOSAUX, FLISTADOS, fprevio, FDLGENTRADA, FCANTIDAD,
  FLISTADOOPCIONES, FDLGPRESUPUESTOAUX, serial, FLISTADOENTRADAS,
  FALMACENDETALLE2, FOPCIONESCODBARRAS, FALMACENDETALLE2BIS;

{$R *.DFM}





//*******************************************************************//
//*******************************************************************//



procedure TENTRADA.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_mdlineaentrada.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_mdlineaentradaID_ARTICULO.AsString)<>'' )
//   and (DMGS.CDSQ_mdlineaentradaID_ARTICULO.NewValue <> DMGS.CDSQ_mdlineaentradaID_ARTICULO.oldvalue)
   then
    BEGIN

             pfunciones.Borrar;
             pfunciones.entrada := true;
//  LO QUITO PARA QUE FUNCIONE PARA AMPARO
             pfunciones.Id_Proveedor := DMGS.CDSQ_MDENTRADAID_PROVEEDOR.ASSTRING;
             pfunciones.Esta(UPPERCASE(DMGS.CDSQ_mdlineaentradaID_ARTICULO.ASSTRING),FALSE,'0','0','X',DMGS.CDSQ_MDentradaID_EMPRESA.AsString,DMGS.CDSQ_MDentradaANYO.AsString);
             dmgs.cdsq_MDLINEAentradaID_ARTICULO.asstring:=pfunciones.ID_ARTICULO;
             DMGS.CDSQ_MDLINEAentradaDESCRIPCION.ASSTRING:= pfunciones.DESCRIPCION;
             DMGS.CDSQ_MDLINEAentradaPRECIO.ASfloat := pfunciones.precio;
             dmgs.cdsq_mdlineaentradadescuento.asfloat := pfunciones.descuento;
//      ROUNDTO(DMGS.CDSQ_ARTICULOEANPRECIO_VENTA.ASfloat/(1+DMGS.CDSQ_MDentradaIVA.ASfloat/100),DMGS.DECIMALES)
             dmgs.cdsq_MDLINEAentradaiva.asstring := pfunciones.IVA;
             DMGS.CDSQ_MDLINEAentradaMARCA.ASSTRING := pfunciones.MARCA;
             DMGS.CDSQ_mdlineaentradaDESCUENTO.ASfloat := pfunciones.descuento;
             DMGS.CDSQ_MDLINEAENTRADAART_PROVEEDOR.AsString := pfunciones.Art_Proveedor;
             // POR DEFECTO LA CANTIDAD LE PONGO 1
             dmgs.cdsq_mdlineaentradacantidad.asstring := '1';
             dbgrid1.selectedindex:=dbgrid1.selectedindex+1;
             IF PFUNCIONES.Id_Articulo ='' THEN
             BEGIN
                    dmgs.cdsq_mdlineaentradacantidad.asstring := '';
                    dmgs.cdsq_mdlineaentradadescuentoeuro.asstring := '';
                    dmgs.cdsq_mdlineaentradaprecio_real.asstring := '';
                    dmgs.cdsq_mdlineaentradaimporte.asstring := '';
                    dmgs.cdsq_mdlineaentradaart_proveedor.asstring := '';
             END;




{     WITH DMGS.CDSQ_ARTICULOEAN DO
     BEGIN
       CLOSE;
       DMGS.AREBGRID  := UPPERCASE(DMGS.CDSQ_mdlineaentradaID_ARTICULO.ASSTRING);
       // VER 4.1 - 1
       DMGS.EAID := UPPERCASE(DMGS.CDSQ_MDENTRADAID_PROVEEDOR.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_mdlineaentradaID_ARTICULO.asstring:=DMGS.CDSQ_ARTICULOEANID_ARTICULO.ASSTRING;
          DMGS.CDSQ_mdlineaentradaDESCRIPCION.ASSTRING:= DMGS.CDSQ_ARTICULOEANDESCRIPCION.AsString;
          IF (DMGS.CDSQ_ARTICULOEANIVA.ASSTRING ='0') OR
           (DMGS.CDSQ_ARTICULOEANIVA.IsNull) THEN
                dmgs.cdsq_MDLINEAENTRADAiva.asstring := DMGS.CDSQ_MDENTRADAIVA.AsString
          ELSE
                dmgs.cdsq_MDLINEAENTRADAiva.asstring := DMGS.CDSQ_ARTICULOEANIVA.AsString;
          dmgs.cdsq_mdlineaentradaMARCA.asstring := DMGS.cdsQ_ARTICULOEANMARCA.ASSTRING;
          DMGS.CDSQ_MDLINEAENTRADAPRECIO.ASfloat := ROUNDTO(DMGS.CDSQ_ARTICULOEANPRECIO_COSTE.ASfloat,DMGS.DECIMALES);
          DMGS.CDSQ_MDLINEAENTRADAART_PROVEEDOR.ASSTRING := DMGS.CDSQ_ARTICULOEANART_PROVEEDOR.AsString;
          dbgrid1.selectedindex:=dbgrid1.selectedindex+1;
       END
       ELSE
         if dmgs.cdsq_mdlineaentradaID_ARTICULO.AsString <> '' then
         begin
                with DMGS.cdsq_ARTICULOSAUX do
                BEGIN
                  Close;
                  DMGS.VARTICULOSAUX.ID   := ' WHERE ART_PROVEEDOR='''+ dmgs.cdsq_mdlineaentradaID_ARTICULO.AsString+''' AND (ID_PROVEEDOR='+ DMGS.CDSQ_MDENTRADAID_PROVEEDOR.AsString +' OR ALMACENABLE<>1 ) ';
                  dmgs.VARTICULOSAUX.TIPO := '4';
                  DMGS.VARTICULOSAUX.BORRADO := '0';
                  Open;
                END;
                 IF DMGS.CDSQ_ARTICULOSAUX.RECORDCOUNT > 0 THEN
                 BEGIN
                    dmgs.cdsq_mdlineaentradaID_ARTICULO.asstring:=DMGS.CDSQ_ARTICULOSAUXID_ARTICULO.ASSTRING;
                    DMGS.CDSQ_mdlineaentradaDESCRIPCION.ASSTRING:= DMGS.CDSQ_ARTICULOSAUXDESCRIPCION.AsString;
                    IF (DMGS.CDSQ_ARTICULOSAUXIVA.ASSTRING ='0') OR
                     (DMGS.CDSQ_ARTICULOSAUXIVA.IsNull) THEN
                      dmgs.cdsq_MDLINEAENTRADAiva.asstring := DMGS.CDSQ_MDENTRADAIVA.AsString
                    ELSE
                      dmgs.cdsq_MDLINEAENTRADAiva.asstring := DMGS.CDSQ_ARTICULOSAUXIVA.AsString;
                    dmgs.cdsq_mdlineaentradaMARCA.asstring := DMGS.CDSQ_ARTICULOSAUXMARCA.ASSTRING;
                    DMGS.CDSQ_MDLINEAENTRADAPRECIO.ASfloat := ROUNDTO(DMGS.CDSQ_ARTICULOSAUXPRECIO_COSTE.ASfloat,DMGS.DECIMALES);
                    DMGS.CDSQ_MDLINEAENTRADAART_PROVEEDOR.ASSTRING := DMGS.CDSQ_ARTICULOSAUXART_PROVEEDOR.AsString;
                    dbgrid1.selectedindex:=dbgrid1.selectedindex+1;
                 END
                 else
                 begin
                  DMGS.CDSQ_mdlineaentradaDESCRIPCION.ASSTRING:= '';
                  DMGS.CDSQ_mdlineaentradaPRECIO.ASSTRING := '';
                  dmgs.cdsq_mdlineaentradacantidad.asstring := '';
                  dmgs.cdsq_mdlineaentradaprecio.asstring := '';
                  dmgs.cdsq_mdlineaentradadescuento.asstring := '';
                  dmgs.cdsq_mdlineaentradadescuentoeuro.asstring := '';
                  dmgs.cdsq_mdlineaentradaprecio_real.asstring := '';
                  dmgs.cdsq_mdlineaentradaimporte.asstring := '';
                  dmgs.cdsq_mdlineaentradafecha_caducidad.asstring := '';
                  dmgs.cdsq_mdlineaentradaart_proveedor.asstring := '';                  
                 end;
              DMGS.CDSQ_ARTICULOSAUX.CLOSE;
         end
       else
       BEGIN
          DMGS.CDSQ_mdlineaentradaDESCRIPCION.ASSTRING:= '';
          DMGS.CDSQ_mdlineaentradaPRECIO.ASSTRING := '';
          dmgs.cdsq_mdlineaentradacantidad.asstring := '';
          dmgs.cdsq_mdlineaentradaprecio.asstring := '';
          dmgs.cdsq_mdlineaentradadescuento.asstring := '';
          dmgs.cdsq_mdlineaentradadescuentoeuro.asstring := '';
          dmgs.cdsq_mdlineaentradaprecio_real.asstring := '';
          dmgs.cdsq_mdlineaentradaimporte.asstring := '';
          dmgs.cdsq_mdlineaentradafecha_caducidad.asstring := '';
          dmgs.cdsq_mdlineaentradaart_proveedor.asstring := '';
       END;
       DMGS.CDSQ_ARTICULOEAN.CLOSE;
     END;
     WITH DMGS.CDSQ_TARIFASAUX DO
     BEGIN
       CLOSE;
       if (dmgs.cdsq_mdentradaid_proveedor.asstring <> '')
       then
       begin
         DMGS.VTARIFASAUX.ID:=' WHERE ID_PROVEEDOR='+DMGS.CDSQ_MDENTRADAID_PROVEEDOR.ASSTRING+' AND ID_ARTICULO='''+DMGS.CDSQ_MDLINEAENTRADAID_ARTICULO.AsString+''' ';
         DMGS.VTARIFASAUX.TIPO:='2';
         OPEN;
         IF RECORDCOUNT > 0 THEN
            DMGS.CDSQ_MDLINEAENTRADAART_PROVEEDOR.AsString := DMGS.CDSQ_TARIFASAUXART_PROVEEDOR.ASSTRING;
       end;     
       CLOSE;
     END;
}
  end;

   if (UPPERCASE(TRIM(dbgrid1.SelectedField.FieldName)) ='ART_PROVEEDOR') AND
   (TRIM(DMGS.CDSQ_mdlineaentradaART_PROVEEDOR.AsString)<>'' )
   THEN
   BEGIN
     WITH DMGS.CDSQ_TARIFASAUX DO
     BEGIN
       CLOSE;
       if trim(dmgs.cdsq_Mdentradaid_proveedor.asstring) <> ''
       then
       begin
         DMGS.VTARIFASAUX.ID:=' WHERE ID_PROVEEDOR='+DMGS.CDSQ_MDENTRADAID_PROVEEDOR.ASSTRING+' AND ART_PROVEEDOR='''+DMGS.CDSQ_MDLINEAENTRADAART_PROVEEDOR.AsString+''' ';
         DMGS.VTARIFASAUX.TIPO:='2';
         OPEN;
         IF (RECORDCOUNT > 0)
         AND (TRIM(DMGS.CDSQ_TARIFASAUXID_ARTICULO.ASSTRING) = '' )
         THEN
         BEGIN
          DMGS.CDSQ_TARIFASAUX.Edit;
          DMGS.CDSQ_TARIFASAUXID_ARTICULO.ASSTRING := DMGS.CDSQ_MDLINEAENTRADAID_ARTICULO.AsString;
          DMGS.CDSQ_TARIFASAUX.POST;
          DMGS.CDSQ_TARIFASAUX.ApplyUpdates(0);
         END;
       end;
       CLOSE;
     END;

   END;


  // EL DESCUENTO SE APLICA AL PRECIO DEL ARTICULO SIN IVA. ME DA IGUAL
  IVA := ROUNDTO((1 + (DMGS.CDSQ_mdlineaentradaIVA.ASfloat/100)),DMGS.DECIMALES);
  PVPSINIVA :=ROUNDTO((DMGS.CDSQ_mdlineaentradaPRECIO.ASfloat/IVA),DMGS.DECIMALES);
  DESCUENTO := ROUNDTO(DMGS.CDSQ_mdlineaentradaDESCUENTO.ASfloat/100,DMGS.DECIMALESDES);
  CANTIDAD := ROUNDTO(DMGS.CDSQ_mdlineaentradaCANTIDAD.ASfloat,DMGS.DECIMALES);
  IVA :=ROUNDTO(DMGS.CDSQ_mdlineaentradaPRECIO.ASFLOAT,DMGS.DECIMALESmon);//ASCU
  if DMGS.CDSQ_MDLINEAENTRADADESCUENTO.ASfloat <> 0 then
     DESCUENTO := ROUNDTO(DMGS.CDSQ_MDLINEAENTRADADESCUENTO.ASfloat/100,DMGS.DECIMALES);
  if DMGS.CDSQ_MDLINEAENTRADADESCUENTOEURO.ASfloat <> 0 then
     DESCUENTO := ROUNDTO(DMGS.CDSQ_MDLINEAENTRADADESCUENTOEURO.ASfloat,DMGS.DECIMALES);
  IF DESCUENTO <> 0 THEN
  BEGIN
    IF DMGS.CDSQ_MDLINEAENTRADADESCUENTOEURO.ASfloat <> 0 THEN
    BEGIN
      DMGS.CDSQ_mdlineaentradaprecio_real.ASfloat :=  ROUNDTO(((DMGS.CDSQ_mdlineaentradaPRECIO.ASFLOAT) - DESCUENTO),DMGS.DECIMALES)  ;//ASCU
      DMGS.CDSQ_mdlineaentradaimporte.ASfloat :=  ROUNDTO(((cantidad * DMGS.CDSQ_mdlineaentradaPRECIO.ASFLOAT)- DESCUENTO),DMGS.DECIMALESIMPORTEENTRADA)  ;//ASCU
    END
    ELSE
    BEGIN
      DMGS.CDSQ_mdlineaentradaprecio_real.AsFloat := ROUNDTO(DMGS.CDSQ_mdlineaentradaPRECIO.ASFLOAT* (1 - DESCUENTO),DMGS.DECIMALES)  ;//ASCU
      DMGS.CDSQ_mdlineaentradaimporte.ASfloat :=  ROUNDTO(cantidad * DMGS.CDSQ_mdlineaentradaprecio_real.ASfloat ,DMGS.DECIMALESIMPORTEENTRADA)  ;
    END
  END
  ELSE
    BEGIN
      DMGS.CDSQ_mdlineaentradaprecio_real.ASfloat :=  ROUNDTO(DMGS.CDSQ_mdlineaentradaPRECIO.ASFLOAT* (1 - DESCUENTO),DMGS.DECIMALES)  ;//ASCU
      DMGS.CDSQ_mdlineaentradaimporte.ASfloat :=  ROUNDTO(cantidad * DMGS.CDSQ_mdlineaentradaprecio_real.ASfloat ,DMGS.DECIMALESIMPORTEENTRADA)  ;
    END

//  DMGS.CDSQ_mdlineaentradaprecio_real.ASfloat :=  ROUNDTO(DMGS.CDSQ_mdlineaentradaPRECIO.AsCurrency* (1 - DESCUENTO),DMGS.DECIMALES)  ;
//  DMGS.CDSQ_mdlineaentradaimporte.ASfloat :=  ROUNDTO(cantidad * DMGS.CDSQ_mdlineaentradaPRECIO.AsCurrency* (1 - DESCUENTO),DMGS.DECIMALES)  ;


//  DMGS.CDSQ_mdlineaentradaBASE_LINEA.ASfloat := IVA * CANTIDAD * (PVPSINIVA - (PVPSINIVA*DESCUENTO))
//  DMGS.CDSQ_mdlineaentradaBASE_LINEA.ASfloat := CANTIDAD * ROUNDTO(DMGS.CDSQ_mdlineaentradaPRECIO.AsCurrency,-5)  * (1 - DESCUENTO)

 END;
 F1ENTRA := FALSE;
end;



procedure TENTRADA.BBUSQUEDAClick(Sender: TObject);
begin
// FUNCION PARA HACER LA BUSQUEDA,
//HACERLO CON PRESUPUESTO.
  DMGS.CDSQ_mdentrada.CLOSE;
  DMGS.RENTRADA.BUSCANDO := true;
  WITH DMGS.CDSQ_mdentrada  DO
  BEGIN
    DMGS.VENTRADA.ID  := '-115871';
    dmgs.VENTRADA.TIPO  := '1';
    OPEN;
    APPEND;
  END;
  dmgs.CDSQ_mdentradaid_entrada.asstring := '';
  DMGS.CDSQ_mdentradaID_entrada.FocusControl

end;
procedure tENTRADA.buscar;
// HACERLA BIEN
var aux,AUX1,fecha: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_mdentrada.FieldByName(AUX1).ASSTRING) ='') then
      BEGIN
         if pos('FECHA',uppercase(aux1)) <> 0 then
         begin
            auxfecha :=DMGS.CDSQ_mdentrada.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
         else
         begin
            if aux <> '' then                         // LIKE
               aux := aux + ' AND char(' + AUX1  +') = ('''+ DMGS.CDSQ_mdentrada.FieldByName(AUX1).ASSTRING+''') ' // QUITO EL % // VER 3.0 %
            else
               aux := 'char('+AUX1 +') = ('''+ TRIM(DMGS.CDSQ_mdentrada.FieldByName(AUX1).ASSTRING)+''') '; // QUITO EL % // VER 3.0 %
         end;                           // LIKE
      END;
      end;
      i:= i+1;
    END;
  dmgs.CDSQ_mdentrada.close;
  DMGS.RENTRADA.BUSCANDO:=false;
  if aux <> '' then
  begin

     AUX := AUX + ' AND ID_EMPRESA='+FMENU.ID_EMPRESA;

     aux := aux + ARORDEN.SORDEN;
     with dmgs.CDSQ_mdentrada do
     begin
       dmgs.VENTRADA.ID  := ' where '+ aux;
       dmgs.VENTRADA.TIPO := '2';
       open;
     end
  end;
end;
procedure TENTRADA.BORDENClick(Sender: TObject);
BEGIN
  ARORDEN.ShowModal;
end;


procedure TENTRADA.DSLINEAENTRADAStateChange(Sender: TObject);
begin
  if DMGS.CDsq_mdlineaentrada.STATE IN [dsedit,dsinsert] then
  begin
         pdatos.enabled := false;
         {aux :=} dbgrid1.Options := [DGEDITING,DGTITLES,DGINDICATOR,DGCOLUMNRESIZE,DGCOLLINES,DGROWLINES,DGTABS,DGCONFIRMDELETE,DGCANCELONEXIT];
  end
   else
      dbgrid1.Options := [DGTITLES,DGINDICATOR,DGCOLUMNRESIZE,DGCOLLINES,DGROWLINES,DGTABS,DGCONFIRMDELETE,DGCANCELONEXIT];
end;



///*****************************************************///
///*****************************************************///
procedure TENTRADA.FormCreate(Sender: TObject);
begin

  try
    dbgrid1.Columns.loadfromfile(FMENU.PATHDBGRID +'\'+SELF.Name);
  except
  end;

  cadena :='';
//  ApdDataPacket1.Enabled := TRUE;
//  APDCOMPORT1.Open := TRUE ;

  label7.Caption := '';
  DMGS.CDSQ_mdlineaentrada.CLOSE;
  DMGS.CDSQ_mdentrada.CLOSE;
  ARORDEN := TORDEN.Create(NIL);
  ARORDEN.CDS  := DMGS.CDSQ_mdentrada;
  ARORDEN.nombre  := 'CDSQ_mdentrada';
  ARORDEN.SORDEN := ' order by fecha ';
  dmgs.RENTRADA.BUSCANDO := false;
  DMGS.BASE_ENTRADA := 0;

  with DMGS.cdsq_mdENTRADA do
  BEGIN
     Close;
     DMGS.VENTRADA.ID :='%';
     DMGS.VENTRADA.TIPO := '1';
     DMGS.VENTRADA.ORDEN := ORDENENTRADA;
     Open;
  END;

  pfunciones := tfunciones.Create ;

{    LABEL16.Visible := FALSE;
    DBEDIT6.VISIBLE := FALSE;
    DBGRID1.Columns[4].Visible := FALSE;
    DBGRID1.Columns[5].Visible := FALSE;
    DBGRID1.Columns[6].Visible := FALSE;
    DBGRID1.Columns[7].Visible := FALSE;
    DBGRID1.Columns[8].Visible := FALSE;
    DBGRID1.Columns[9].Visible := FALSE;
    DBGRID1.Columns[10].Visible := FALSE;
}
end;
procedure TENTRADA.FormDestroy(Sender: TObject);
begin

  try
    dbgrid1.Columns.SAVETOfile(FMENU.PATHDBGRID +'\'+SELF.Name);
  except
  end;


   DMGS.CDSQ_mdlineaentrada.close;
   DMGS.CDSQ_mdentrada.CLOSE;
   ARORDEN.FREE;
   ARORDEN := NIL;

   pfunciones.Destroy ;
//   APDCOMPORT1.Open := FALSE ;
end;
procedure TENTRADA.FormShow(Sender: TObject);
begin
    EstadoBotones;
    F1ENTRA := FALSE;
end;
procedure TENTRADA.BConsultasClick(Sender: TObject);
var posaux:TBookmark;
    codigo:tcodigotar;
begin
    DSENTRADA.DataSet := NIL;

    dlgentrada:=tdlgentrada.create(nil);
    IF TRIM(ARORDEN.SORDEN) = '' THEN
      dlgentrada.ORDEN:= ordenentrada
    ELSE
      dlgentrada.ORDEN :=  ARORDEN.SORDEN;
    dlgentrada.CERRARDATASET := FALSE;
    dlgentrada.Showmodal;
    dlgentrada.Free;
    dlgentrada := NIL;
    IF NOT DMGS.CDSQ_mdentrada.ACTIVE THEN
       ESTADOBOTONES;
//    else
//       dmgs.cdsq_mdlineaentrada.Open;
// UTILIZO LOS DATASETS ABIERTOS QUE VIENEN DE FDLGTARIFAS.
    dsENTRADA.DataSet := DMGS.CDSQ_mdentrada ;
end;
procedure TENTRADA.FormKeyPress(Sender: TObject; var Key: Char);
begin
    if (key ='.')
    and (DMGS.CDSQ_mdentrada.State in [dsedit,dsinsert])
    and (activecontrol is tdbedit)
    then
      if (dmgs.cdsq_mdentrada.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_mdlineaentrada.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_mdlineaentrada.next;
          IF DMGS.CDSQ_MDLINEAENTRADA.EOF THEN
             BALTAS2.Click;
          dbgrid1.selectedindex := 0;
        end
        else
           dbgrid1.SelectedIndex := dbgrid1.SelectedIndex + 1;
       end
       else
       if fechas(sender) then
           Perform(WM_NextDLGCtl, 0, 0);
       key:=#0;
    end;

    if not (activeControl is TDBEdit) and not (DMGS.CDSQ_mdlineaentrada.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_mdlineaentrada.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_mdlineaentrada.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_mdentrada.state in [dsedit,dsinsert]))
            then close;
    if (key = #27) and (DMGS.CDSQ_mdentrada.state in [dsedit,dsinsert])
       and (not( dmgs.cdsq_mdlineaentrada.state in [dsedit,dsinsert]))
    then
       if DMGS.RENTRADA.BUSCANDO  then
          buscar
       ELSE
          DMGS.CDSQ_mdentrada.Post;
end;
procedure TENTRADA.BSalirClick(Sender: TObject);
begin
    close;
    SELF.ModalResult:=mrOk;
end;
procedure TENTRADA.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;
end;
procedure TENTRADA.PRIMERO1Click(Sender: TObject);
begin
   DMGS.CDSQ_mdlineaentrada.first;
end;

procedure TENTRADA.ANTERIOR1Click(Sender: TObject);
begin
    DMGS.CDSQ_mdlineaentrada.Prior;
end;

procedure TENTRADA.SIGUIENTE1Click(Sender: TObject);
begin
    DMGS.CDSQ_mdlineaentrada.next;
end;
procedure TENTRADA.REGISTRO1Click(Sender: TObject);
begin
   if DMGS.CDSQ_mdlineaentrada.state in [dsedit,dsinsert] then
   begin
      primero1.enabled:=false;
      anterior1.enabled:=false;
      siguiente1.enabled:=false;
   end
   else
   begin
       primero1.enabled:=DMGS.CDSQ_mdlineaentrada.bof=false;
       anterior1.enabled:=primero1.enabled;
       siguiente1.enabled:=DMGS.CDSQ_mdlineaentrada.eof=false;
   end;
end;
procedure TENTRADA.EstadoBotones;
begin
    PDatos.enabled:=DMGS.CDSQ_mdentrada.state in [dsedit,dsinsert];
    BAltas.enabled:=(DMGS.CDSQ_mdentrada.state IN [DSBROWSE,dsinactive]);
    BListado.enabled:=(DMGS.CDSQ_mdentrada.state=dsbrowse) and (DMGS.CDSQ_mdentrada.recordcount >0) ;
    BConsultas.enabled:=(DMGS.CDSQ_mdentrada.state IN [dsbrowse,dsinactive]);
    BModificaciones.enabled:=(DMGS.CDSQ_mdentrada.state=dsbrowse) and (DMGS.CDSQ_mdentrada.recordcount >0) ;
    BBajas.enabled:=(DMGS.CDSQ_mdentrada.state=dsbrowse) and (DMGS.CDSQ_mdentrada.recordcount >0) ;
     // para que no se pueda anyadir ni borrar lineas de pedido
    // antes de introducir todos
    // los datos del pedido.
    if (DMGS.CDSQ_mdentrada.state=dsbrowse) and (DMGS.CDSQ_mdentrada.recordcount >0) then
    begin
       baltas2.enabled:=true;
       BbAJAS2.Enabled := true;
       IF (DMGS.CDSQ_MDLINEAENTRADA.ACTIVE) AND
       (DMGS.CDSQ_mdLINEAentrada.recordcount >0) then
       BEGIN
         bmodificar2.enabled:= true;
         BCANTIDAD.Enabled := TRUE;
       END
       ELSE
       BEGIN
           bmodificar2.enabled:= FALSE;
           BCANTIDAD.Enabled := FALSE;
       END;
    end
    else
    begin
      baltas2.enabled := false;
      bBAJAS2.Enabled := false;
//      IF (DMGS.CDSQ_MDLINEAENTRADA.ACTIVE) AND
//      (DMGS.CDSQ_mdLINEAentrada.recordcount >0) then
//      BEGIN
         bmodificar2.enabled:= false;
         BCANTIDAD.Enabled := FALSE;
//      END;
    end;
end;
procedure TENTRADA.BAltasClick(Sender: TObject);
begin
  WITH DMGS.CDSQ_mdentrada DO
  BEGIN
     IF NOT Active THEN
     BEGIN
      DMGS.VENTRADA.ID :='-1154871' ;
      DMGS.VENTRADA.TIPO :='1';
//      DMGS.PRBGRORDEN := ARORDEN.SORDEN;
      OPEN;
     END;
     APPEND;
  END;
  DBEDIT1.SetFocus;
end;
procedure TENTRADA.BBajasClick(Sender: TObject);
begin
    if (DMGS.CDSQ_mdlineaentrada.recordcount>0) then
      if pfunciones.TieneCBE(dmgs.cdsq_mdlineaentradaid_entrada.AsString,dmgs.cdsq_mdlineaentradaid_empresa.AsString,dmgs.cdsq_mdlineaentradaANYO.AsString )
      then
        abort;


    if (DMGS.CDSQ_mdentrada.recordcount>0) then //or (DMGS.CDSQ_mdentrada.state in [dsedit,dsinsert]) then
    begin
       case dmgs.PedirConfirmacion('¿Confirma que desea borrar esta Entrada?',true,true,false) of
           mrno: exit;
       end;
       if DMGS.CDSQ_mdlineaentrada.recordcount >0 then
            DMGS.BorrandoLineasent:= true;
       while DMGS.CDSQ_mdlineaentrada.RecordCount>0  do
       begin
              DMGS.RLINEAENTRADA.PREGUNTA := FALSE;
              DMGS.CDSQ_mdlineaentrada.Delete;
       end;
       // lo tengo que hacer asi, pq en el server modifico mdentrada
       // 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_mdlineaentrada.afterpost(DMGS.CDSQ_mdlineaentrada);
       DMGS.CDSQ_mdentrada.delete;
       DMGS.CDSQ_mdentradaafterpost(DMGS.CDSQ_mdentrada);
   end;
end;






procedure TENTRADA.BALTAS2Click(Sender: TObject);
begin
    IF DMGS.CDSQ_mdentrada.RecordCount > 0 THEN
    BEGIN
     WITH DMGS.CDSQ_mdlineaentrada  DO
     BEGIN
      IF NOT Active THEN
        OPEN;
      LAST;
      APPEND;
     END;
     DBGRID1.SetFocus;
//     DBGRID1.SelectedIndex :=0;
     DMGS.CDSQ_mdlineaentradaID_ARTICULO.FOCUSCONTROL;
    END;
end;
procedure TENTRADA.FormClose(Sender: TObject; var Action: TCloseAction);
begin
    if (DMGS.CDSQ_mdentrada.State in [dsedit,dsinsert]) AND
       (NOT DMGS.RENTRADA.BUSCANDO) then
       DMGS.CDSQ_mdentrada.Post;

    Action := caFree;
end;
procedure TENTRADA.BModificacionesClick(Sender: TObject);
begin
    if DMGS.CDSQ_mdentrada.recordcount>0 then
    begin
        DMGS.CDSQ_mdentrada.edit;
//        DMGS.CDSQ_mdentradaID_PRESUPUESTO.FocusControl ;
        DBEDIT1.SetFocus;
    end;
end;
procedure TENTRADA.BListadoClick(Sender: TObject);
var bookmark,bookmark1:tbookmark;
begin
// HACERLO
  { LISTADO }
    bookmark:= dmgs.cdsq_mdentrada.GetBookmark ;
    bookmark1:= dmgs.cdsq_mdlineaentrada.GetBookmark ;

    WITH DMGS.CDSQ_EMPRESAAUX DO
    BEGIN
      Close;
      DMGS.VEMPRESASAUX.ID:= DMGS.CDSQ_mdentradaID_EMPRESA.AsString;
      DMGS.VEMPRESASAUX.TIPO :='2';
      OPEN;
    END;
    IF ((DMGS.CDSQ_mdentradaID_proveedor.ASSTRING) <> '' ) THEN
    BEGIN
     WITH DMGS.CDSQ_PROVEEDOR_ACREEDORAUX DO
     BEGIN
       CLOSE;
       DMGS.VPROVEEDORACAUX.ID:= DMGS.CDSQ_mdentradaID_PROVEEDOR.AsString;
       DMGS.VPROVEEDORACAUX.BORRADO := '0';
       DMGS.VPROVEEDORACAUX.TIPO :='2';
       OPEN;
     END;
    END
    ELSE
     WITH DMGS.CDSQ_PROVEEDOR_ACREEDORAUX DO
     BEGIN
       CLOSE;
       DMGS.VPROVEEDORACAUX.ID:= '-1154871';
       DMGS.VPROVEEDORACAUX.BORRADO := '0';
       DMGS.VPROVEEDORACAUX.TIPO :='2';
       OPEN;
     END;

    DSENTRADA.DataSet := NIL; // HACE FALTA
    DSLINEAENTRADA.DataSet := NIL;
    LISTADOS := tLISTADOS.Create(nil);
    PREVIO := TPREVIO.Create(NIL);

    LISTADOS.FRDB.DataSet := DMGS.CDSQ_mdentrada;
    LISTADOS.FRDB1.DATASET := DMGS.CDSQ_mdlineaentrada;
    LISTADOS.FRDB2.DataSet := DMGS.CDSQ_EMPRESAAUX;
    LISTADOS.FRDB3.DataSet := DMGS.CDSQ_PROVEEDOR_ACREEDORAUX;

 //   Path := ExtractFilePath(ParamStr(0));
    LISTADOS.frReport1.LoadFromFile(dmgs.Path + 'LISTADOS\ENTRADA.frf');
    LISTADOS.frReport1.Preview := PREVIO.frPreview1;
    LISTADOS.frReport1.ShowReport;
    PREVIO.ShowModal;
    DSENTRADA.DataSet := DMGS.CDSQ_mdentrada;
    DSLINEAENTRADA.DataSet := DMGS.CDSQ_mdlineaentrada;
    LISTADOS.Free;
    LISTADOS := NIL;
    PREVIO.FREE;
    PREVIO := NIL;
    DMGS.CDSQ_EMPRESAAUX.CLOSE;
    DMGS.CDSQ_PROVEEDOR_ACREEDORAUX.CLOSE;
    dmgs.cdsq_mdentrada.GotoBookmark(bookmark);
    dmgs.cdsq_mdentrada.FreeBookmark (bookmark);
    dmgs.cdsq_mdlineaentrada.GotoBookmark(bookmark1);
    dmgs.cdsq_mdlineaentrada.FreeBookmark (bookmark1);


end;
procedure TENTRADA.DSENTRADAStateChange(Sender: TObject);

begin
    EstadoBotones;
end;
procedure TENTRADA.ENTRADA1Click(Sender: TObject);
begin
    altas1.enabled:=baltas.enabled;
    bajas1.enabled:=bbajas.enabled;
    consultas1.enabled:=bconsultas.enabled;
    modificaciones1.enabled:=bmodificaciones.enabled;
end;



procedure TENTRADA.DSENTRADADataChange(Sender: TObject;
  Field: TField);

begin
    COMPROBAREMPRESA;
    COMPROBARPROVEEDOR;
    IF ((DMGS.CDSQ_mdentrada.Eof)   AND (NOT (DMGS.CDSQ_mdentrada.STATE IN [DSEDIT,DSINSERT]))) THEN
    BEGIN
      try // para evitar el error de memoria bloqueada en el server.
        DMGS.CDSQ_mdentrada.GetNextPacket ;
      except
      end;
//      ESTADOBOTONES;
    END;
    ESTADOBOTONES;
end;
procedure TENTRADA.DBEdit3Exit(Sender: TObject);
begin
  comprobarPROVEEDOR;
end;


procedure TENTRADA.DBEdit3KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  IF (DMGS.CDSQ_mdentrada.STATE IN [DSEDIT,DSINSERT]) THEN
   BEGIN
   if key=112 then
    begin
        DMGS.cdsq_PROVEEDOR_ACREEDORaux.Close;
        dlgPROVEEDORAUX := tdlgPROVEEDORAUX.Create(NIL);
        if dlgPROVEEDORAUX.Showmodal=mrok then
        begin
            F1ENTRA:= TRUE;
            DMGS.cdsq_mdentradaid_PROVEEDOR.ASSTRING := dlgPROVEEDORaux.codigo;
        end;
        dlgPROVEEDORaux.Free;
        dlgPROVEEDORaux := nil;
    end
  end;
end;
procedure TENTRADA.BBAJAS2Click(Sender: TObject);
var aux:mensaje;
begin
    if (DMGS.CDSQ_mdlineaentrada.recordcount>0) then
    begin
      aux := pfunciones.TieneCB(dmgs.cdsq_mdlineaentradaid_entrada.AsString,dmgs.cdsq_mdlineaentradaid_empresa.AsString,dmgs.cdsq_mdlineaentradaID_ARTICULO.asstring ,dmgs.cdsq_mdlineaentradaANYO.AsString ,dmgs.cdsq_mdlineaentradaLINEA.asstring ,dmgs.cdsq_mdlineaentradaCANTIDAD.AsString) ;
      if aux.borrar then
      begin
      // comprobarlo cuando se haya impreso algún código de barras.
          if aux.tipo = 2 then // ha sido confirmado interiormente que desea borrarlo
             dmgs.RLINEAENTRADA.PREGUNTA := false;
          DMGS.CDSQ_mdlineaentrada.delete;
          DMGS.CDSQ_mdlineaentradaafterpost(dmGS.CDSQ_mdlineaentrada);
      end;
    end;
end;
procedure TENTRADA.DBGrid1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  IF (DMGS.CDSQ_mdlineaentrada.STATE IN [DSEDIT,DSINSERT]) THEN
   BEGIN
   IF KEY=27 THEN
     DMGS.RENTRADA.ESCAPECDS := TRUE;

   if key=112 then
    begin
      if UPPERCASE(TRIM(dbgrid1.SelectedField.FieldName)) ='ID_ARTICULO' then
      begin
         IDARTICULO;
{          DLGARTICULOSAUX := TDLGARTICULOSAUX.CREATE(NIL);
          IF DLGARTICULOSAUX.Showmodal=mrOk then
          begin
             F1ENTRA := TRUE;
             dmgs.cdsq_mdlineaentradaID_ARTICULO.asstring:=DLGARTICULOSAUX.codigo;
             DMGS.CDSQ_mdlineaentradaDESCRIPCION.ASSTRING:= DLGARTICULOSAUX.DESCRIPCION;
//             DMGS.CDSQ_mdlineaentradaPRECIO.ASSTRING := DLGARTICULOSAUX.PRECIO;
             dmgs.cdsq_mdlineaentradaiva.asstring := dmgs.CDSQ_MDENTRADAIVA.AsString ;
             DMGS.CDSQ_mdlineaentradaMARCA.ASSTRING:= DLGARTICULOSAUX.MARCA;
            dbgrid1.selectedindex:=dbgrid1.selectedindex+1;
            WITH DMGS.CDSQ_TARIFASAUX DO
              BEGIN
               CLOSE;
               DMGS.TAABGRIDPROVEEDOR:=' WHERE ID_PROVEEDOR='+DMGS.CDSQ_MDENTRADAID_PROVEEDOR.ASSTRING+' AND ID_ARTICULO='''+DMGS.CDSQ_MDLINEAENTRADAID_ARTICULO.AsString+''' ';
               DMGS.TAAbgrtipo:='2';
               OPEN;
               IF RECORDCOUNT > 0 THEN
                  DMGS.CDSQ_MDLINEAENTRADAART_PROVEEDOR.AsString := DMGS.CDSQ_TARIFASAUXART_PROVEEDOR.ASSTRING;
               CLOSE;
              END;
          end;
          DLGARTICULOSAUX.Free;
          DLGARTICULOSAUX := NIL;
}
      END;

    END;
  end;
END;
procedure TENTRADA.DBNavigator1Click(Sender: TObject;
  Button: TNavigateBtn);
begin
  IF DMGS.CDSQ_mdentrada.Eof THEN
  try // para evitar el error de memoria bloqueada en el server.
     DMGS.CDSQ_mdentrada.GetNextPacket ;
  except
  end;
end;

procedure TENTRADA.DBGrid1ColEnter(Sender: TObject);
begin
IF (DMGS.CDSQ_mdlineaentrada.STATE IN [DSEDIT,DSINSERT]) THEN
 BEGIN
 F1ENTRA:=FALSE;
{   if UPPERCASE(TRIM(dbgrid1.SelectedField.FieldName)) ='NIF' then
   BEGIN
      dmst.cdsq_clientesaux.Close;
      dlgclienteaux := tdlgclienteaux.Create(nil);
      dlgclienteaux.NoCerrarDataset := false;
      dlgclienteaux.Cliente := '%';
      dlgclienteaux.Edit1.Focused;
      if DlgClienteaux.Showmodal=mrok then
      begin
        DBGRID1.SelectedField.AsString:=DlgClienteaux.cliente;
        dbgrid1.SelectedIndex  := dbgrid1.SelectedIndex  + 1;
      end;
      dlgclienteaux.Free;
      dlgclienteaux := nil;
   END;
}{   if UPPERCASE(TRIM(dbgrid1.SelectedField.FieldName)) ='ID_PLANTA' then
      begin
       if trim(DBGRID1.Fields[0].AsString)<>'' then
       begin
        dmst.cdsq_plantasaux.Close;
        dlgplantasaux := tdlgplantasaux.Create(nil);
        dlgplantasaux.nif := trim(DBGRID1.Fields[0].AsString);
        dlgplantasaux.NoCerrarDataset := false;
        if Dlgplantasaux.Showmodal=mrok then
        begin
            DBGRID1.SelectedField.AsString:=Dlgplantasaux.nif;// devuelve
            // el id_planta
            dbgrid1.SelectedIndex  := dbgrid1.SelectedIndex  + 1;
        end;
        dlgplantasaux.Free;
        dlgplantasaux := nil;
       end
       else
       BEGIN
           showmessage('Debe introducir primero el nif del cliente');
           dbgrid1.SelectedIndex  := dbgrid1.SelectedIndex  - 1;
       END;
      end;
      if UPPERCASE(TRIM(dbgrid1.SelectedField.FieldName)) ='CODIGO' then
      BEGIN
        dmst.CDSQ_SERVICIOSaux.Close;
        FDLGSERVICIOSaux := tFDLGSERVICIOSaux.Create(nil);
        FDLGSERVICIOSAUX.CerrarDataset := false;
        fdlgserviciosaux.codigo := '%';
        fdlgserviciosaux.Edit1.Focused;
        if FDLGSERVICIOSAUX.Showmodal=mrok then
        begin
            DBGRID1.SelectedField.AsString:=FDLGSERVICIOSaux.CODIGO;
            // DEVUELVE EL NIF
            dbgrid1.SelectedIndex  := dbgrid1.SelectedIndex  + 1;
        end;
        FDLGSERVICIOSAUX.Free;
        FDLGSERVICIOSAUX := nil;
       END;
   if UPPERCASE(TRIM(dbgrid1.SelectedField.FieldName)) ='TIPO' then
   BEGIN
     DBGRID1.SelectedField.AsString := 'GENERICA';
   END;
}
  end;
END;
procedure TENTRADA.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_mdlineaentrada.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 TENTRADA.DBGrid1KeyPress(Sender: TObject; var Key: Char);
BEGIN
   if (key = #46) then // 46 -> .
     if (dmgs.CDSQ_MDLINEAENTRADA.state in [dsedit,dsinsert]) then
       if (dbgrid1.SelectedField.DataType in [ftfloat,ftfmtbcd,ftbcd]) then
           key := #44 ;  //44->  ,

   if (key <> #27) then
       DMgs.RENTRADA.ESCAPECDS := false;
   if (key = #13) and not (DMGS.CDSQ_mdlineaentrada.State in [dsedit,dsinsert]) then
   begin
        Perform(WM_NextDLGCtl, 0, 0);
        key:=#0;
   end;
   if (key = #13) and (DMGS.CDSQ_mdlineaentrada.State in [dsedit,dsinsert]) then
   begin
        if dbgrid1.SelectedIndex = (dbgrid1.FieldCount - 1) then
             DMGS.CDSQ_mdlineaentrada.Post
        else
           dbgrid1.SelectedIndex := dbgrid1.SelectedIndex + 1;
        key:=#0;
   end;
     if (key = #27) and not (DMGS.CDSQ_mdlineaentrada.state in [dsedit,dsinsert])
     then
       close;
     if (key = #27) and not (ActiveControl is TButton) then
        DMgs.RLINEAENTRADA.ESCAPECDS:= true;

   if (dmgs.cdsq_mdLINEAENTRADA.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_mdLINEAENTRADAdescuento.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_mdLINEAENTRADAdescuentoeuro.asstring:= '0';
         end;
  END;
END;
PROCEDURE TENTRADA.COMPROBAREMPRESA ;
BEGIN
   IF TRIM(DMGS.CDSQ_mdentradaID_EMPRESA.ASSTRING)  <> '' THEN
    LABEL7.Caption := FMENU.NOMBREEMPRESA
   ELSE
    LABEL7.Caption := '';
END;

procedure TENTRADA.DBEdit2Exit(Sender: TObject);
begin
  IF (DMGS.CDSQ_mdentrada.STATE IN [DSEDIT,DSINSERT] ) THEN
   if DMGS.RENTRADA.BUSCANDO then
      buscar
   ELSE
      DMGS.CDSQ_mdentrada.Post;
end;
PROCEDURE TENTRADA.COMPROBARPROVEEDOR;
BEGIN
     if ((not (DMGS.CDSQ_mdentradaID_PROVEEDOR.IsNull)) AND (TRIM(DMGS.CDSQ_mdentradaID_PROVEEDOR.ASSTRING)<>'')) then
     begin
        if (TRIM(LABEL12.CAPTION) <> '') then
           begin
           if not (TRIM(LABEL12.CAPTION) = trim(DMGS.CDSQ_mdentradaID_PROVEEDOR.asstring))
           then
             begin
               DMGS.CDSQ_PROVEEDOR_ACREEDORAUX.close;
               DMGS.VPROVEEDORACAUX.ID :=trim(DMGS.CDSQ_mdentradaID_PROVEEDOR.asstring);
               dmGS.VPROVEEDORACAUX.BORRADO := '0';
               DMGS.VPROVEEDORACAUX.TIPO :='2';
               DMGS.CDSQ_PROVEEDOR_ACREEDORAUX.OPEN;
             end;
           end
           else
             begin
               DMGS.CDSQ_PROVEEDOR_ACREEDORAUX.close;
               DMGS.VPROVEEDORACAUX.ID :=trim(DMGS.CDSQ_mdentradaID_PROVEEDOR.asstring);
               dmGS.VPROVEEDORACAUX.BORRADO := '0';
               DMGS.VPROVEEDORACAUX.TIPO :='2';
               DMGS.CDSQ_PROVEEDOR_ACREEDORAUX.OPEN;
             end;
    end
    else
    begin
       DMGS.CDSQ_PROVEEDOR_ACREEDORAUX.close;
       LABEL12.CAPTION := '';
       label1.Caption := '';
       label2.Caption := '';
       label3.Caption := '';
       label5.Caption := '';
       label4.Caption := '';
    end;

    IF DMGS.CDSQ_PROVEEDOR_ACREEDORAUX.Active THEN
    BEGIN
      LABEL12.CAPTION := DMGS.CDSQ_PROVEEDOR_ACREEDORAUXID_PROVEEDOR.ASSTRING;
      label1.Caption := DMGS.CDSQ_PROVEEDOR_ACREEDORAUXNOMBRE.ASSTRING;
      label2.Caption := DMGS.CDSQ_PROVEEDOR_ACREEDORAUXDIRECCION.ASSTRING;
      label3.Caption := DMGS.CDSQ_PROVEEDOR_ACREEDORAUXPOBLACION.ASSTRING;
      label5.Caption := DMGS.CDSQ_PROVEEDOR_ACREEDORAUXCOD_POSTAL.ASSTRING;
      label4.Caption := DMGS.CDSQ_PROVEEDOR_ACREEDORAUXPROVINCIA.ASSTRING;
    END ;
    DMGS.CDSQ_PROVEEDOR_ACREEDORAUX.close;
END;
procedure TENTRADA.BMODIFICAR2Click(Sender: TObject);
begin
    if DMGS.CDSQ_mdlineaentrada.recordcount>0 then
    begin
        DMGS.CDSQ_mdlineaentrada.edit;
        DMGS.CDSQ_mdlineaentradaID_ARTICULO.FocusControl;
    end;
end;

procedure TENTRADA.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 TENTRADA.DBEdit5Exit(Sender: TObject);
begin
 IF (DMGS.CDSQ_mdentrada.STATE IN [DSEDIT,DSINSERT]) THEN
  IF (DMGS.CDSQ_mdentradaDESCUENTO.AsString = '')
   AND (NOT DMGS.RENTRADA.BUSCANDO)
   THEN
     DMGS.CDSQ_mdentradaDESCUENTO.ASSTRING := '0';

 porcien := false;
 PORCIENVALOR := DBEDIT5.Text;
 EUROVALOR := DBEDIT10.Text;

end;

procedure TENTRADA.DBEdit7Exit(Sender: TObject);
begin
 if (dmgs.cdsq_mdentrada.State in [dsedit,dsinsert]) then
    if (trim(dbedit7.Text) ='')
    AND (NOT DMGS.RENTRADA.BUSCANDO)  then
       dbedit7.Text := '0';

end;

procedure TENTRADA.DSLINEAENTRADADataChange(Sender: TObject;
  Field: TField);
  VAR I:INTEGER;
      AUXBOOKMARK:TBOOKMARK;
      F:DOUBLE;
begin
end;

procedure TENTRADA.DBGrid1DblClick(Sender: TObject);
begin
  IF (DMGS.CDSQ_mdlineaentrada.STATE IN [DSEDIT,DSINSERT]) THEN
   BEGIN
      if UPPERCASE(TRIM(dbgrid1.SelectedField.FieldName)) ='ID_ARTICULO' then
      begin
         IDARTICULO;
{          DLGARTICULOSAUX := TDLGARTICULOSAUX.CREATE(NIL);
          IF DLGARTICULOSAUX.Showmodal=mrOk then
          begin
             F1ENTRA := TRUE;
             dmgs.cdsq_mdlineaentradaID_ARTICULO.asstring:=DLGARTICULOSAUX.codigo;
             DMGS.CDSQ_mdlineaentradaDESCRIPCION.ASSTRING:= DLGARTICULOSAUX.DESCRIPCION;
             DMGS.CDSQ_mdlineaentradaPRECIO.ASSTRING := DLGARTICULOSAUX.PRECIO;
             dmgs.cdsq_mdlineaentradaiva.asstring := dlgarticulosaux.iva;
             DMGS.CDSQ_mdlineaentradaMARCA.ASSTRING:= DLGARTICULOSAUX.MARCA;
            dbgrid1.selectedindex:=dbgrid1.selectedindex+1;
            WITH DMGS.CDSQ_TARIFASAUX DO
              BEGIN
               CLOSE;
               DMGS.TAABGRIDPROVEEDOR:=' WHERE ID_PROVEEDOR='+DMGS.CDSQ_MDENTRADAID_PROVEEDOR.ASSTRING+' AND ID_ARTICULO='''+DMGS.CDSQ_MDLINEAENTRADAID_ARTICULO.AsString+''' ';
               DMGS.TAAbgrtipo:='2';
               OPEN;
               IF RECORDCOUNT > 0 THEN
                  DMGS.CDSQ_MDLINEAENTRADAART_PROVEEDOR.AsString := DMGS.CDSQ_TARIFASAUXART_PROVEEDOR.ASSTRING;
               CLOSE;
              END;
          end;
          DLGARTICULOSAUX.Free;
          DLGARTICULOSAUX := NIL;
}      END;
  end
  ELSE
    PALMACENDETALLE2;

end;

procedure TENTRADA.DBEdit3DblClick(Sender: TObject);
begin
  IF (DMGS.CDSQ_mdentrada.STATE IN [DSEDIT,DSINSERT]) THEN
   BEGIN
        DMGS.cdsq_PROVEEDOR_ACREEDORaux.Close;
        dlgPROVEEDORAUX := tdlgPROVEEDORAUX.Create(NIL);
        if dlgPROVEEDORAUX.Showmodal=mrok then
        begin
            F1ENTRA:= TRUE;
            DMGS.cdsq_mdentradaid_PROVEEDOR.ASSTRING := dlgPROVEEDORaux.codigo;
        end;
        dlgPROVEEDORaux.Free;
        dlgPROVEEDORaux := nil;
  end;
end;
PROCEDURE TENTRADA.IDARTICULO ;
BEGIN
          DLGARTICULOSAUX := TDLGARTICULOSAUX.CREATE(NIL);
          dlgarticulosaux.Es_entrada := true;
//  LO QUITO PARA QUE FUNCIONE PARA AMPARO
          dlgarticulosaux.Vid_proveedor := dmgs.cdsq_mdentradaid_proveedor.asstring;


          IF DLGARTICULOSAUX.Showmodal=mrOk then
          begin
             F1ENTRA := TRUE;
//por aqui
             pfunciones.Borrar;
             pfunciones.entrada := true;
//  LO QUITO PARA QUE FUNCIONE PARA AMPARO
             pfunciones.Id_Proveedor := DMGS.CDSQ_MDENTRADAID_PROVEEDOR.ASSTRING;
             pfunciones.Esta(UPPERCASE(DLGARTICULOSAUX.codigo),FALSE,'0','0','X',DMGS.CDSQ_MDentradaID_EMPRESA.AsString,DMGS.CDSQ_MDentradaANYO.AsString);
             dmgs.cdsq_MDLINEAentradaID_ARTICULO.asstring:=pfunciones.ID_ARTICULO;
             DMGS.CDSQ_MDLINEAentradaDESCRIPCION.ASSTRING:= pfunciones.DESCRIPCION;
             DMGS.CDSQ_MDLINEAentradaPRECIO.ASfloat := pfunciones.precio;
             dmgs.cdsq_mdlineaentradadescuento.asfloat := pfunciones.descuento;
//      ROUNDTO(DMGS.CDSQ_ARTICULOEANPRECIO_VENTA.ASfloat/(1+DMGS.CDSQ_MDentradaIVA.ASfloat/100),DMGS.DECIMALES)
             dmgs.cdsq_MDLINEAentradaiva.asstring := pfunciones.IVA;
             DMGS.CDSQ_MDLINEAentradaMARCA.ASSTRING := pfunciones.MARCA;
             DMGS.CDSQ_mdlineaentradaDESCUENTO.ASfloat := pfunciones.descuento;
             DMGS.CDSQ_MDLINEAENTRADAART_PROVEEDOR.AsString := pfunciones.Art_Proveedor;
             dbgrid1.selectedindex:=dbgrid1.selectedindex+1;


//             dmgs.cdsq_mdlineaentradaID_ARTICULO.asstring:=DLGARTICULOSAUX.codigo;
//             DMGS.CDSQ_mdlineaentradaDESCRIPCION.ASSTRING:= DLGARTICULOSAUX.DESCRIPCION;
{
             IF (DMGS.CDSQ_ARTICULOSAUXPVPPROV.ASFLOAT > 0.0001 ) THEN // LO PONGO ASI PARA
             //EVITAR QUE NO TOME EL 0 JUSTO.
             BEGIN
                DMGS.CDSQ_mdlineaentradaPRECIO.ASfloat := ROUNdTO(DMGS.CDSQ_ARTICULOSAUXPVPPROV.ASfloat,DMGS.DECIMALES);
                DMGS.CDSQ_mdlineaentradaDESCUENTO.ASfloat := ROUNdTO(DMGS.CDSQ_ARTICULOSAUXDESCUENTO.ASfloat,DMGS.DECIMALES);
             END
             ELSE
                 DMGS.CDSQ_mdlineaentradaPRECIO.ASfloat := ROUNdTO(DMGS.CDSQ_ARTICULOSAUXPRECIO_COSTE.ASfloat,DMGS.DECIMALES);

             IF (dlgarticulosaux.iva ='0') OR
                (dlgarticulosaux.iva ='') THEN
                 dmgs.cdsq_MDLINEAENTRADAiva.asstring := DMGS.CDSQ_MDENTRADAIVA.AsString
             ELSE
                 dmgs.cdsq_MDLINEAENTRADAiva.asstring := dlgarticulosaux.iva;

             dmgs.cdsq_mdlineaentradaiva.asstring := dlgarticulosaux.iva;
             DMGS.CDSQ_mdlineaentradaMARCA.ASSTRING:= DLGARTICULOSAUX.MARCA;
             DMGS.CDSQ_mdlineaentradaART_PROVEEDOR.ASSTRING:= DMGS.CDSQ_ARTICULOSAUXART_PROVEEDOR.ASSTRING;
            dbgrid1.selectedindex:=dbgrid1.selectedindex+1;
}            
{            WITH DMGS.CDSQ_TARIFASAUX DO
             BEGIN
              CLOSE;
              if trim(dmgs.cdsq_mdentradaid_proveedor.AsString) <> '' then
              begin
                   DMGS.VTARIFASAUX.ID:=' WHERE ID_PROVEEDOR='+DMGS.CDSQ_MDENTRADAID_PROVEEDOR.ASSTRING+' AND ID_ARTICULO='''+DMGS.CDSQ_MDLINEAENTRADAID_ARTICULO.AsString+''' ';
                   DMGS.VTARIFASAUX.TIPO:='2';
                   OPEN;
                   IF RECORDCOUNT > 0 THEN
                      DMGS.CDSQ_MDLINEAENTRADAART_PROVEEDOR.AsString := DMGS.CDSQ_TARIFASAUXART_PROVEEDOR.ASSTRING;
              end;
              CLOSE;
            END;
}
          end;
          DLGARTICULOSAUX.Free;
          DLGARTICULOSAUX := NIL;
END;
procedure TENTRADA.BCANTIDADClick(Sender: TObject);
begin
  IF DMGS.CDSQ_MDLINEAENTRADA.ACTIVE
  AND (TRIM(DMGS.CDSQ_MDLINEAENTRADAID_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_MDLINEAENTRADAID_ARTICULO.AsString+''' AND ID_EMPRESA='+DMGS.CDSQ_MDLINEAENTRADAID_EMPRESA.ASSTRING;
       OPEN;
     END;
     IF DMGS.CDSQ_ALMACENAUX.RecordCount > 0 THEN
        CANTIDAD.Showmodal;
     CANTIDAD.Free;
     CANTIDAD := nil;
end;
FUNCTION  TENTRADA.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 TENTRADA.ToolButton1Click(Sender: TObject);
begin
  IF LABEL16.Visible = TRUE THEN
  BEGIN
    LABEL16.Visible := FALSE;
    DBEDIT6.VISIBLE := FALSE;
    DBGRID1.Columns[4].Visible := FALSE;
    DBGRID1.Columns[5].Visible := FALSE;
    DBGRID1.Columns[6].Visible := FALSE;
    DBGRID1.Columns[7].Visible := FALSE;
    DBGRID1.Columns[8].Visible := FALSE;
    DBGRID1.Columns[9].Visible := FALSE;
    DBGRID1.Columns[10].Visible := FALSE;
  END
  ELSE
  BEGIN
    LABEL16.Visible := TRUE;
    DBEDIT6.VISIBLE := TRUE;
    DBGRID1.Columns[4].Visible := TRUE;
    DBGRID1.Columns[5].Visible := TRUE;
    DBGRID1.Columns[6].Visible := TRUE;
    DBGRID1.Columns[7].Visible := TRUE;
    DBGRID1.Columns[8].Visible := TRUE;
    DBGRID1.Columns[9].Visible := TRUE;
    DBGRID1.Columns[10].Visible := TRUE;
  END;
end;

procedure TENTRADA.ALISTADOESPECIFICOExecute(Sender: TObject);
var cadena:string;
    LISTADO:SMALLINT;
    FECHADESDE,FECHAHASTA:STRING;
begin
   LISTADO := 0;
   listadoopciones := tlistadoopciones.create(nil);
   listadoopciones.opcion := 2;//ENTRADA
   if listadoopciones.ShowModal = mrok then
   begin
    cadena := listadoopciones.cadena;
    if trim(cadena) <> '' then
    begin
     if listadoopciones.DETALLE  then
        listado := 1;
     if listadoopciones.total   then
        listado := 2;

    if trim(cadena) <> '' then
    begin
//         CADENA := ' AND ' + CADENA;
//        cadena := ' id_empresa='+fmenu.id_empresa+' and ' + cadena;
// en listado opciones se puede poner el orden.
//        cadena := ' where '+ cadena +' ORDER BY FECHA ';
        cadena := ' where '+ CADENA;
        FECHADESDE := DATETOSTR(LISTADOOPCIONES.FECHAINICIO);
        FECHAHASTA := DATETOSTR(LISTADOOPCIONES.FECHAFINAL);
    end;

    listadoopciones.free;
    listadoopciones := nil;


    WITH DMGS.CDSQ_EMPRESAAUX DO
    BEGIN
      Close;
      DMGS.VEMPRESASAUX.ID:= FMENU.ID_EMPRESA;
      DMGS.VEMPRESASAUX.TIPO :='2';
      OPEN;
    END;
    LISTADOS := tLISTADOS.Create(nil);
    PREVIO := TPREVIO.Create(NIL);
    IF LISTADO=1 THEN
    BEGIN
        WITH DMGS.CDSQ_LISTADOENTRADA DO
            BEGIN
              CLOSE;
              DMGS.VLISTADOENTRADA.ID := CADENA;
              DMGS.VLISTADOENTRADA.TIPO := '1';
              DMGS.VLISTADOENTRADA.ORDEN := ORDENLISTADOENTRADA;
              OPEN;
            END;
            WHILE not dmgs.CDSQ_LISTADOENTRADA.eof do
            begin
               dmgs.cdsq_LISTADOENTRADA.Last;
               if dmgs.cdsq_LISTADOENTRADA.Eof then
               try // para evitar el error de memoria bloqueada en el server.
                   DMGS.CDSQ_LISTADOENTRADA.GetNextPacket ;
               except
               end;
            end;
            dmgs.cdsq_LISTADOENTRADA.First;
    END
    ELSE
    IF LISTADO=2 THEN
    BEGIN
            WITH DMGS.CDSQ_LENTRADATOTAL DO
            BEGIN
              CLOSE;
              DMGS.VLENTRADATOTAL.ID := CADENA;
              DMGS.VLENTRADATOTAL.TIPO := '1';
              OPEN;
            END;
            WHILE not DMGS.CDSQ_LENTRADATOTAL.eof do
            begin
               DMGS.CDSQ_LENTRADATOTAL.Last;
               if DMGS.CDSQ_LENTRADATOTAL.Eof then
               try // para evitar el error de memoria bloqueada en el server.
                   DMGS.CDSQ_LENTRADATOTAL.GetNextPacket ;
               except
               end;
            end;
            DMGS.CDSQ_LENTRADATOTAL.First;
    END;
    LISTADOS.FECHADESDE := FECHADESDE;
    LISTADOS.FECHAHASTA := FECHAHASTA;
    IF LISTADO=1 THEN
    BEGIN
        LISTADOS.FRDB.DataSet := DMGS.CDSQ_LISTADOENTRADA;
        LISTADOS.FRDB2.DataSet := DMGS.CDSQ_EMPRESAAUX;
        LISTADOS.frReport1.LoadFromFile(dmgs.Path + 'LISTADOS\LISTADOENTRADADETALLEXX.frf');
    END;
    IF LISTADO=2 THEN
    BEGIN
        LISTADOS.FRDB.DataSet := DMGS.CDSQ_LENTRADATOTAL;
        LISTADOS.FRDB2.DataSet := DMGS.CDSQ_EMPRESAAUX;
        LISTADOS.frReport1.LoadFromFile(dmgs.Path + 'LISTADOS\LISTADOENTRADATOTAL.frf');
    END;
    LISTADOS.frReport1.Preview := PREVIO.frPreview1;
    LISTADOS.frReport1.ShowReport;
    PREVIO.ShowModal;
    LISTADOS.Free;
    LISTADOS := NIL;
    PREVIO.FREE;
    PREVIO := NIL;
    DMGS.CDSQ_EMPRESAAUX.CLOSE;
    DMGS.CDSQ_CLIENTEAUX.CLOSE;
   end;
END;
end;



procedure TENTRADA.APRESUPUESTOExecute(Sender: TObject);
 var ordenaux:string;
     nuevo:boolean;
begin
  nuevo := true;
  IF TRIM(FMENU.ID_SERIE) = '' THEN
  BEGIN
       MessageDlg('Debe seleccionar una serie en empresa y seleccionar la empresa.', mtWarning,[mbOK], 0);
       exit;
  END;
  DLGPRESUPUESTOAUX := TDLGPRESUPUESTOAUX.CREATE(NIL);
  IF (DLGPRESUPUESTOAUX.ShowModal  =MROK) THEN
  BEGIN
    IF TRIM(DLGPRESUPUESTOAUX.NOMBRE) <> '' THEN
    BEGIN
    //*******
 // ESTUDIAR COMO HACERLO PARA PEDIDOS.

//    dmgs.cdsq_maximo.close;
//    dmgs.cdsq_maximo.CommandText := ' select count(*) as maximo from ENTRADAS where id_presupuesto='+dlgpresupuestoaux.nombre+' and id_empresa='+fmenu.id_empresa+' ';
//    dmgs.cdsq_maximo.Open;

{    if dmgs.CDSQ_MAXIMOMAXIMO.VALUE > 0 then
    begin
      with DMGS.CDSQ_MDALBARAN do
      BEGIN
        Close;
        if trim(arorden.sorden)='' then
           ordenaux:= ordenalbaran
        else
           ordenaux := arorden.SORDEN;

        DMGS.VALBARAN.ID := ' WHERE ID_presupuesto='+dlgpresupuestoaux.nombre+' and id_empresa='+fmenu.id_empresa+' '+ ordenaux ;
        DMGS.VALBARAN.TIPO := '2';
        DMGS.VALBARAN.ORDENLINEA := ORDENLINEAALBARAN;
        Open;
       END;
    end
    else
}
    begin
    //  BAltasClick(SENDER);
     WITH DMGS.CDSQ_MDENTRADA DO
     BEGIN
        IF NOT Active THEN
        BEGIN
          DMGS.VENTRADA.ID :='-5154111' ;
          DMGS.VENTRADA.TIPO :='1';
          dmgs.VENTRADA.ORDEN := ordenENTRADA;
          DMGS.VENTRADA.ORDENLINEA := ORDENLINEAENTRADA;
          OPEN;
        END
        ELSE
         case DMGS.PedirConfirmacion('¿AÑADIR EN ENTRADA NUEVA (SI), O EN LA ACTUAL (NO)?',true,true,false) of
           mrno:NUEVO:=FALSE;
         end;
       IF NUEVO THEN
        APPEND;
     END;
     //***
       dsENTRADA.DataSet := nil;
       dslineaENTRADA.DataSet := nil;
       with dmgs do
       begin
       IF NUEVO THEN
       BEGIN
       // AQUI ES DONDE HAY QUE DIFERENCIAR EL PRESUPUESTO
       // CON MAS DE UN PROVEEDOR
//         cdsq_mdENTRADAid_PROVEEDOR.asstring := cdsq_mdpresupuestoauxid_PROVEEDOR.asstring;
         cdsq_mdENTRADAiva.ASfloat := cdsq_mdpresupuestoauxiva.ASfloat;
         cdsq_mdENTRADAre.ASfloat := cdsq_mdpresupuestoauxre.ASfloat;
         cdsq_mdENTRADAdescuento.ASfloat := cdsq_mdpresupuestoauxdescuento.ASfloat;
         cdsq_mdENTRADAobservaciones.asstring := cdsq_mdpresupuestoauxobservaciones.asstring;
//         CDSQ_MDENTRADAID_PRESUPUESTO.ASfloat := CDSQ_MDPRESUPUESTOAUXID_PRESUPUESTO.ASfloat;
         RENTRADA.PREGUNTA := false;
         cdsq_mdENTRADA.post;
       END;
       if cdsq_mdlinpresupuestoaux.RecordCount > 0 then
       begin
         cdsq_mdlinpresupuestoaux.open;
         cdsq_mdlinPRESUPUESTOAUX.first;
         while not cdsq_mdlinPRESUPUESTOAUX.Eof do
         begin
         //****
         //  BALTAS2Click(sender);
         IF DMGS.CDSQ_MDENTRADA.RecordCount > 0 THEN
         BEGIN
            WITH DMGS.CDSQ_MDLINEAENTRADA  DO
            BEGIN
              IF NOT Active THEN
                 OPEN;
              LAST;
              APPEND;
            END;
         END;
        // *****
          cdsq_mdlineaENTRADAid_articulo.asstring := cdsq_mdlinPRESUPUESTOAUXid_articulo.asstring;
          cdsq_mdlineaENTRADAmarca.asstring := cdsq_mdlinPRESUPUESTOAUXmarca.asstring;
          cdsq_mdlineaENTRADAdescripcion.asstring := cdsq_mdlinPRESUPUESTOAUXdescripcion.asstring;
          cdsq_mdlineaENTRADAcantidad.ASfloat := cdsq_mdlinPRESUPUESTOAUXcantidad.ASfloat;
          cdsq_mdlineaENTRADAdescuento.ASfloat := cdsq_mdlinPRESUPUESTOAUXdescuento.ASfloat;
          cdsq_mdlineaENTRADAprecio.ASfloat := ROUNDTO(cdsq_mdlinPRESUPUESTOAUXprecio.ASfloat/(1+DMGS.CDSQ_MDPRESUPUESTOAUXIVA.ASfloat/100),DMGS.DECIMALES);
          cdsq_mdlineaENTRADAimporte.ASfloat := ROUNDTO(cdsq_mdlinPRESUPUESTOAUXIMPORTE.ASfloat/(1+DMGS.CDSQ_MDPRESUPUESTOAUXIVA.ASfloat/100),DMGS.DECIMALESIMPORTEENTRADA);
          CDSQ_MDLINEAENTRADAART_PROVEEDOR.AsString := CDSQ_MDLINPRESUPUESTOAUXART_PROVEEDOR.AsString;
          RLINEAENTRADA.PREGUNTA := FALSE;
          cdsq_mdlineaENTRADA.post;
          cdsq_mdlinPRESUPUESTOAUX.Next;
        end;
      end;
        cdsq_mdENTRADA.Edit;// por si se ha modificado
        // la base del PRESUPUESTOAUX exteriormente
 //       cdsq_mdENTRADAbase_ENTRADA.ASfloat := cdsq_mdPRESUPUESTOAUXbase_PRESUPUESTO.ASfloat;
        RENTRADA.PREGUNTA  := false;
        cdsq_mdENTRADA.post;
      end
      END;
    end;
    dmgs.cdsq_maximo.Close;
  END;
  dlgPRESUPUESTOaux.free;
  dlgPRESUPUESTOaux := nil;

  dsENTRADA.DataSet := dmgs.cdsq_mdENTRADA ;
  dslineaENTRADA.DataSet := dmgs.cdsq_mdlineaENTRADA;
end;

procedure TENTRADA.DBEdit10Exit(Sender: TObject);
VAR AUX:STRING;
begin
 euro:= false;
 AUX := EUROVALOR;
 EUROVALOR := DMGS.CDSQ_MDENTRADADESCUENTOEURO.ASSTRING;
 PORCIENVALOR := DBEDIT5.TEXT; // ???
 IF (DMGS.CDSQ_MDENTRADA.STATE IN [DSEDIT,DSINSERT]) THEN
 BEGIN
  IF (DMGS.CDSQ_MDENTRADADESCUENTO.AsString = '')
     AND (NOT DMGS.RENTRADA.BUSCANDO)
  THEN
     DMGS.CDSQ_MDENTRADADESCUENTO.ASSTRING := '0';
  try
  IF STRTOFLOAT(AUX) <> STRTOFLOAT(EUROVALOR) THEN
     ////// esta linea la he puesto yo porque el de monforte quiere el descuento sobre el total de la ENTRADA
     DMGS.CDSQ_MDENTRADADESCUENTOEURO.ASfloat:=DMGS.CDSQ_MDENTRADADESCUENTOEURO.ASfloat/(1+(STRTOINT(FMENU.IVA)/100));
     /////////////////////////
  except
  end;
 END;

end;

procedure TENTRADA.DBEdit5KeyPress(Sender: TObject; var Key: Char);
begin

 if (dmgs.cdsq_mdENTRADA.State in [dsedit,dsinsert]) then
   if key ='.' then //.
      key:=',';  //,

 if (dmgs.cdsq_mdENTRADA.State in [dsedit,dsinsert]) then
  if (PORCIENVALOR<> DBEDIT5.Text + KEY)
  AND NOT EURO
  then
  begin
    porcien:= true;
    dmgs.cdsq_mdENTRADAdescuentoeuro.asstring:= '0';
  end;
end;

procedure TENTRADA.DBEdit10Enter(Sender: TObject);
begin
 EUROVALOR := DBEDIT10.TEXT;
end;

procedure TENTRADA.DBEdit10KeyPress(Sender: TObject; var Key: Char);
begin
 if (dmgs.cdsq_mdENTRADA.State in [dsedit,dsinsert]) then
   if key ='.' then //.
      key:=',';  //,
 if (dmgs.cdsq_mdENTRADA.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_mdENTRADAdescuento.value := 0;
  end;
end;

procedure TENTRADA.DBEdit5Enter(Sender: TObject);
begin
 PORCIENVALOR := DBEDIT5.Text;
end;

procedure TENTRADA.CommPortDriver1ReceiveData(Sender: TObject;
  DataPtr: Pointer; DataSize: Cardinal);
var iLastLine, i: integer;
    s, ss: string;
begin
  // Convert incoming data into a string
  s := StringOfChar( ' ', DataSize );
  move( DataPtr^, pchar(s)^, DataSize );
  // Exit if s is empty. This usually occurs when one or more NULL characters
  // (chr(0)) are received.
  while pos( #0, s ) > 0 do
    delete( s, pos( #0, s ), 1 );
  if s = '' then
    exit;
  // Remove line feeds
  i := pos( #10, s );
  while i <> 0 do
  begin
    delete( s, i, 1 );
    i := pos( #10, s );
  end;
  DMGS.CDSQ_mdlineaentradaid_articulo.AsString := s;

 {
  // Don't redraw the rich edit control until we finished updating it
  //IncomingRichEdit.Lines.BeginUpdate;
  // Get last line index
  iLastLine := IncomingRichEdit.Lines.Count-1;
  // If the rich edit is empty...
  if iLastLine = -1 then
  begin
    // Remove line feeds from the string
    i := pos( #10, s );
    while i <> 0 do
    begin
      delete( s, i, 1 );
      i := pos( #10, s );
    end;
    // Remove carriage returns from the string (break lines)
    i := pos( #13, s );
    while i <> 0 do
    begin
      ss := copy( s, 1, i-1 );
      delete( s, 1, i );
      IncomingRichEdit.Lines.Append( ss );
      i := pos( #13, s );
    end;
    IncomingRichEdit.Lines.Append( s );
  end
  else
  begin
    // String to add is : last line added + new one
    s := IncomingRichEdit.Lines[iLastLine] + s;
    // Remove carriage returns (break lines)
    i := pos( #13, s );
    while i <> 0 do
    begin
      ss := copy( s, 1, i-1 );
      delete( s, 1, i );
      if iLastLine <> -1 then
      begin
        IncomingRichEdit.Lines[iLastLine] := ss;
        iLastLine := -1;
      end
      else
        IncomingRichEdit.Lines.Append( ss );
      i := pos( #13, s );
    end;
    if iLastLine <> -1 then
      IncomingRichEdit.Lines[iLastLine] := s
    else
      IncomingRichEdit.Lines.Append( s );
  end;
  //IncomingRichEdit.Lines.EndUpdate;
  // Scroll incoming text rich edit
  SendMessage( IncomingRichEdit.Handle, EM_SCROLLCARET, 0, 0 );
 }
end;



procedure TENTRADA.ApdComPort1TriggerAvail(CP: TObject; Count: Word);
VAR
  I:WORD;
  C:CHAR;
  S:STRING;
begin
{ IF (DMGS.CDSQ_mdlineaentrada.STATE IN [DSEDIT,DSINSERT])
 AND
 (UPPERCASE(TRIM(dbgrid1.SelectedField.FieldName)) ='ID_ARTICULO') THEN
 begin
   DBGRID1.Fields [0].AsString := '';
   ESTA := FALSE;
   FOR I:=1 TO COUNT DO
   IF NOT ESTA THEN
   BEGIN
     TRY
//     C := APDCOMPORT1.GetChar ;
//     dmgs.cdsq_mdlineaentradaid_articulo.asstring :=      dmgs.cdsq_mdlineaentradaid_articulo.asstring + c;
      C := APDCOMPORT1.GetChar ;
      if C=#13 THEN
      BEGIN
         C := APDCOMPORT1.GetChar ;
         IF C=#10 THEN
         BEGIN
            ESTA := TRUE;
            DBGRID1.Fields [0].AsString  := CADENA;
            CADENA := '';
         END
      END
      ELSE
        cadena := cadena + C
     EXCEPT
     END;
   END;
  end;
}
end;



procedure TENTRADA.ApdDataPacket1StringPacket(Sender: TObject;
  Data: String);
begin
//HELLO
{ IF (DMGS.CDSQ_mdlineaentrada.STATE IN [DSEDIT,DSINSERT])
 AND (UPPERCASE(TRIM(dbgrid1.SelectedField.FieldName)) ='ID_ARTICULO') THEN
 IF DBGRID1.Fields [0].AsString <> '' THEN
    dbgrid1.SelectedIndex := dbgrid1.SelectedIndex + 1;
 }
end;

procedure TENTRADA.ApdDataPacket1Packet(Sender: TObject; Data: Pointer;
  Size: Integer);
begin
// HOLA
end;

procedure TENTRADA.DBGrid1TitleClick(Column: TColumn);
var aux:string;
begin
// CON ESTA FUNCION ORDENO ASCENDENTE Y DESCENDENTE LAS COLUMNAS
// AL PULSAR SOBRE EL TITULO
 aux := uppercase(column.Field.Name);
 IF AUX = 'CDSQ_MDLINEAENTRADAID_ARTICULO' THEN
    IF dmgs.CDSQ_MDLINEAENTRADA.IndexFIELDNameS = '' THEN
       dmgs.CDSQ_MDLINEAENTRADA.IndexFIELDNameS := 'ID_ARTICULO' // ORDENA ASCENDENTE
    ELSE
       DMGS.CDSQ_MDLINEAENTRADA.IndexName := 'ID_ARTICULOINDEX'; // ORDENA DESCENDENTE

 IF AUX = 'CDSQ_MDLINEAENTRADAMARCA' THEN
    IF dmgs.CDSQ_MDLINEAENTRADA.IndexFIELDNameS = '' THEN
       dmgs.CDSQ_MDLINEAENTRADA.IndexFIELDNameS := 'MARCA' // ORDENA ASCENDENTE
    ELSE
       DMGS.CDSQ_MDLINEAENTRADA.IndexName := 'MARCAINDEX'; // ORDENA DESCENDENTE

 IF AUX = 'CDSQ_MDLINEAENTRADADESCRIPCION' THEN
    IF dmgs.CDSQ_MDLINEAENTRADA.IndexFIELDNameS = '' THEN
       dmgs.CDSQ_MDLINEAENTRADA.IndexFIELDNameS := 'DESCRIPCION' // ORDENA ASCENDENTE
    ELSE
       DMGS.CDSQ_MDLINEAENTRADA.IndexName := 'DESCRIPCIONINDEX'; // ORDENA DESCENDENTE

 IF AUX = 'CDSQ_MDLINEAENTRADAART_PROVEEDOR' THEN
    IF dmgs.CDSQ_MDLINEAENTRADA.IndexFIELDNameS = '' THEN
       dmgs.CDSQ_MDLINEAENTRADA.IndexFIELDNameS := 'ART_PROVEEDOR' // ORDENA ASCENDENTE
    ELSE
       DMGS.CDSQ_MDLINEAENTRADA.IndexName := 'ART_PROVEEDORINDEX'; // ORDENA DESCENDENTE

 IF AUX = 'CDSQ_MDLINEAENTRADACANTIDAD' THEN
    IF dmgs.CDSQ_MDLINEAENTRADA.IndexFIELDNameS = '' THEN
       dmgs.CDSQ_MDLINEAENTRADA.IndexFIELDNameS := 'CANTIDAD' // ORDENA ASCENDENTE
    ELSE
       DMGS.CDSQ_MDLINEAENTRADA.IndexName := 'CANTIDADINDEX'; // ORDENA DESCENDENTE

 IF AUX = 'CDSQ_MDLINEAENTRADADESCUENTO' THEN
    IF dmgs.CDSQ_MDLINEAENTRADA.IndexFIELDNameS = '' THEN
       dmgs.CDSQ_MDLINEAENTRADA.IndexFIELDNameS := 'DESCUENTO' // ORDENA ASCENDENTE
    ELSE
       DMGS.CDSQ_MDLINEAENTRADA.IndexName := 'DESCUENTOINDEX'; // ORDENA DESCENDENTE

 IF AUX = 'CDSQ_MDLINEAENTRADAPRECIO' THEN
    IF dmgs.CDSQ_MDLINEAENTRADA.IndexFIELDNameS = '' THEN
       dmgs.CDSQ_MDLINEAENTRADA.IndexFIELDNameS := 'PRECIO' // ORDENA ASCENDENTE
    ELSE
       DMGS.CDSQ_MDLINEAENTRADA.IndexName := 'PRECIOINDEX'; // ORDENA DESCENDENTE

 IF AUX = 'CDSQ_MDLINEAENTRADAIMPORTE' THEN
    IF dmgs.CDSQ_MDLINEAENTRADA.IndexFIELDNameS = '' THEN
       dmgs.CDSQ_MDLINEAENTRADA.IndexFIELDNameS := 'IMPORTE' // ORDENA ASCENDENTE
    ELSE
       DMGS.CDSQ_MDLINEAENTRADA.IndexName := 'IMPORTEINDEX'; // ORDENA DESCENDENTE

 IF AUX = 'CDSQ_MDLINEAENTRADADESCUENTOEURO' THEN
    IF dmgs.CDSQ_MDLINEAENTRADA.IndexFIELDNameS = '' THEN
       dmgs.CDSQ_MDLINEAENTRADA.IndexFIELDNameS := 'DESCUENTOEURO' // ORDENA ASCENDENTE
    ELSE
       DMGS.CDSQ_MDLINEAENTRADA.IndexName := 'DESCUENTOEUROINDEX'; // ORDENA DESCENDENTE

 IF AUX = 'CDSQ_MDLINEAENTRADAPRECIO_REAL' THEN
    IF dmgs.CDSQ_MDLINEAENTRADA.IndexFIELDNameS = '' THEN
       dmgs.CDSQ_MDLINEAENTRADA.IndexFIELDNameS := 'PRECIO_REAL' // ORDENA ASCENDENTE
    ELSE
       DMGS.CDSQ_MDLINEAENTRADA.IndexName := 'PRECIO_REALINDEX'; // ORDENA DESCENDENTE

end;

procedure TENTRADA.DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
VAR
  PT :TGRIDCOORD;
begin
  PT := DBGRID1.MouseCoord(X,Y);
  IF PT.Y=0 THEN
     DBGRID1.Cursor := CRHANDPOINT
  ELSE
     DBGRID1.Cursor := CRDEFAULT;
END;

procedure TENTRADA.ToolButton9Click(Sender: TObject);
VAR CADENA:STRING;
begin


   LISTADOENTRADAS  := tLISTADOENTRADAS.create(nil);
   if LISTADOENTRADAS.ShowModal = mrok then
   begin

   IF (TRIM(LISTADOENTRADAS.CENTRADAS) <> '')
   THEN
   BEGIN

     LISTADOS := tLISTADOS.Create(nil);
     PREVIO := TPREVIO.Create(NIL);
     LISTADOS.FRDB.DataSet := DMGS.CDSQ_LARTICULOS;
     LISTADOS.FRDB2.DataSet := DMGS.CDSQ_EMPRESAAUX;
     LISTADOS.FRDB3.DataSet := DMGS.CDSQ_CLIENTEAUX;
     LISTADOS.FECHADESDE := LISTADOENTRADAS.MaskEdit1.Text ;
     LISTADOS.FECHAHASTA := LISTADOENTRADAS.MaskEdit2.Text ;

     IF TRIM(LISTADOENTRADAS.CENTRADAS) <> '' THEN
     BEGIN
       DMGS.CDSQ_LARTICULOS.CLOSE;
       DMGS.VLARTICULOS.ID1 := '';
       DMGS.VLARTICULOS.ID := LISTADOENTRADAS.CENTRADAS;
       DMGS.VLARTICULOS.ORDEN := LISTADOENTRADAS.OENTRADAS;
       DMGS.VLARTICULOS.GRUPO := LISTADOENTRADAS.GENTRADAS;
       DMGS.VLARTICULOS.TIPO := '2';
       DMGS.CDSQ_LARTICULOS.Open;
       WHILE not dmgs.cdsq_LARTICULOS.eof do
       begin
         dmgs.cdsq_LARTICULOS.Last;
         if dmgs.cdsq_LARTICULOS.Eof then
         try // para evitar el error de memoria bloqueada en el server.
           DMGS.CDSQ_LARTICULOS.GetNextPacket ;
         except
         end;
       end;
       dmgs.cdsq_LARTICULOS.First;
       IF DMGS.CDSQ_LARTICULOS.RECORDCOUNT > 0 THEN
       WITH DMGS.CDSQ_EMPRESAAUX DO
       BEGIN
         Close;
         DMGS.VEMPRESASAUX.ID:= DMGS.CDSQ_LARTICULOS.FieldValues['ID_EMPRESA'];
         DMGS.VEMPRESASAUX.TIPO :='2';
         OPEN;
       END;
       LISTADOS.ETIQUETA := ' EN ENTRADAS ';
       IF LISTADOENTRADAS.DETALLE  THEN
          LISTADOS.frReport1.LoadFromFile(dmgs.Path + 'LISTADOS\LISTADOENTRADADETALLE.frf')
       ELSE
          LISTADOS.frReport1.LoadFromFile(dmgs.Path + 'LISTADOS\LISTADOENTRADAGRUPOS.frf');

       LISTADOS.frReport1.Preview := PREVIO.frPreview1;
       LISTADOS.frReport1.ShowReport;
       PREVIO.ShowModal;
    END;

    LISTADOS.Free;
    LISTADOS := NIL;
    PREVIO.FREE;
    PREVIO := NIL;
    DMGS.CDSQ_EMPRESAAUX.CLOSE;
    DMGS.CDSQ_CLIENTEAUX.CLOSE;
    DMGS.CDSQ_TICKETAUX.CLOSE;
   end;
 END;
   LISTADOENTRADAS.FREE;
   LISTADOENTRADAS := NIL;
end;




procedure TENTRADA.PALMACENDETALLE2;
VAR AUX:STRING;
begin
    ALMACENDETALLE2:=talmacendetalle2.create(nil);
    WITH DMGS.CDSQ_MAXIMO DO
    BEGIN
     CLOSE;
     COMMANDTEXT := ' SELECT NUMERO AS MAXIMO FROM ALMACENDETALLE  WHERE '+' ID_ENTRADA='+DMGS.CDSQ_MDLINEAENTRADAID_ENTRADA.ASSTRING+
     ' AND ID_EMPRESA='+ DMGS.CDSQ_MDLINEAENTRADAID_EMPRESA.ASSTRING+' AND ID_ARTICULO='''+ DMGS.CDSQ_MDLINEAENTRADAID_ARTICULO.ASSTRING+
     ''' AND ANYO='+ DMGS.CDSQ_MDLINEAENTRADAANYO.ASSTRING+' AND LINEA='+ DMGS.CDSQ_MDLINEAENTRADALINEA.ASSTRING+' AND CANTIDAD='+ DMGS.CDSQ_MDLINEAENTRADACANTIDAD.ASSTRING+ ' ';
     OPEN;
     IF DMGS.CDSQ_MAXIMO.Fields[0].ASSTRING <> '' THEN
        AUX := INTTOSTR( DMGS.CDSQ_MAXIMO.Fields[0].VALUE)
     ELSE
        AUX := '-1222';
     CLOSE;
    END;
    almacendetalle2.numero := AUX;
    dmgs.cantidad := dmgs.cdsq_mdlineaentradacantidad.AsFloat ;
    IF AUX <> '-1222' THEN
       almacendetalle2.Showmodal;
    almacendetalle2.Free;
    almacendetalle2 := NIL;
    
END;

procedure TENTRADA.ToolButton10Click(Sender: TObject);
var cadena:string;
    LISTADO:SMALLINT;
    FECHADESDE,FECHAHASTA:STRING;
    SiAlmacendetalle2,SiAlmacendetalle2bis:boolean;
    lcantidad,lnumero,i:integer;
    lcodigoBarras,ldescripcion,lprecio_venta:string;
begin
    SiAlmacendetalle2:= false;
    SiAlmacendetalle2bis := false;
    if DMGS.CDSQ_mdlineaentrada.recordcount>0 then
    begin
      if dmgs.CDSQ_MDLINEAENTRADACANTIDAD.AsInteger > 1 then
      begin
           dmgs.cdsq_maximo.Close;
           dmgs.CDSQ_MAXIMO.CommandText := 'select count(*) as cuenta,numero,codigo_barras,descripcion,precio_venta,cantidad from almacendetalle al, articulos ar'+
              ' where al.id_articulo=ar.id_articulo and ID_ENTRADA='+dmgs.cdsq_mdlineaentradaID_ENTRADA.asstring +' AND ID_EMPRESA='+dmgs.cdsq_mdlineaentradaID_EMPRESA.asstring +' AND al.ID_ARTICULO='''+
              dmgs.cdsq_mdlineaentradaID_ARTICULO.asstring +''' AND ANYO='+dmgs.cdsq_mdlineaentradaANYO.asstring +' AND LINEA='+dmgs.cdsq_mdlineaentradaLINEA.asstring +' AND CANTIDAD='+dmgs.cdsq_mdlineaentradaCANTIDAD.AsString +' group by numero,codigo_barras,descripcion,precio_venta,cantidad  ';
           dmgs.cdsq_maximo.open;

           IF dmgs.cdsq_maximo.Fields[1].asstring <> '' THEN
           BEGIN
            dmgs.cdsq_float.Close;
            dmgs.cdsq_float.CommandText := 'select count(*) as cuenta,numero1,sum(cantidad) from almacendetalle2 al '+
              ' where numero1='+dmgs.cdsq_maximo.Fields[1].asstring+' group by numero1 ';
            dmgs.cdsq_float.open;
           end;

//           opcionescodbarras := topcionescodbarras.create(nil);
//           opcionescodbarras.Cantidad := inttostr(dmgs.cdsq_maximo.Fields[5].asinteger - DMGS.CDSQ_FLOAT.Fields[2].AsInteger);
//           opcionescodbarras.Showmodal;


           IF DMGS.CDSQ_FLOAT.Fields[0].AsInteger > 0 THEN
           BEGIN
           /////////////////////////////////
            ALMACENDETALLE2bis:=talmacendetalle2bis.create(nil);
            ALMACENDETALLE2BIS.Cantidad := inttostr(dmgs.cdsq_maximo.Fields[5].asinteger - DMGS.CDSQ_FLOAT.Fields[2].AsInteger);
            almacendetalle2bis.numero := dmgs.cdsq_maximo.Fields[1].AsString ;
            almacendetalle2bis.Showmodal;
            SiAlmacenDetalle2bis := true;
          //////////////////////////////////
//          lcantidad := dmgs.cdsq_maximo.fields[5].AsInteger - 1 ;
            IF ALMACENDETALLE2BIS.ModalResult = MROK THEN
               lcantidad := strtoint(ALMACENDETALLE2BIS.valor)
            ELSE
               lcantidad := 0;
           END
           ELSE
            lcantidad := dmgs.cdsq_maximo.fields[5].AsInteger;
           i:= lcantidad - 1;
           lcodigoBarras := dmgs.cdsq_maximo.fields[2].asstring ;
           lnumero := dmgs.cdsq_maximo.fields[1].asinteger;
           ldescripcion := dmgs.cdsq_maximo.fields[3].asstring ;
           lprecio_venta := dmgs.cdsq_maximo.fields[4].asstring ;
           while i > 0 do
           begin
             dmgs.CDSQ_MAXIMO.Append;
             dmgs.cdsq_maximo.Fields[0].AsInteger := lcantidad;
             dmgs.CDSQ_MAXIMO.Fields[1].asinteger := lnumero;
             dmgs.CDSQ_MAXIMO.Fields[2].AsString := lcodigoBarras;
             dmgs.CDSQ_MAXIMO.Fields[3].AsString := ldescripcion;
             dmgs.CDSQ_MAXIMO.Fields[4].AsString := lprecio_venta;
             dmgs.CDSQ_MAXIMO.Fields[5].AsString := inttostr(lcantidad);
             dmgs.cdsq_maximo.Post;
             i := i -1 ;
           end;
//           opcionescodbarras.free;
//           almacendetalle2bis.Free;
//           almacendetalle2bis := NIL;
//           opcionescodbarras := nil;
 //opciones para todos o cuantos (1 por defecto)
      end
      else
      begin
           dmgs.cdsq_maximo.Close;
           dmgs.CDSQ_MAXIMO.CommandText := 'select count(*) as cuenta,numero,codigo_barras,descripcion,precio_venta,cantidad from almacendetalle al, articulos ar'+
              ' where al.id_articulo=ar.id_articulo and ID_ENTRADA='+dmgs.cdsq_mdlineaentradaID_ENTRADA.asstring +' AND ID_EMPRESA='+dmgs.cdsq_mdlineaentradaID_EMPRESA.asstring +' AND al.ID_ARTICULO='''+
              dmgs.cdsq_mdlineaentradaID_ARTICULO.asstring +''' AND ANYO='+dmgs.cdsq_mdlineaentradaANYO.asstring +' AND LINEA='+dmgs.cdsq_mdlineaentradaLINEA.asstring +' AND CANTIDAD='+dmgs.cdsq_mdlineaentradaCANTIDAD.AsString +' group by numero,codigo_barras,descripcion,precio_venta,cantidad  ';
           dmgs.cdsq_maximo.open;

           IF dmgs.cdsq_maximo.Fields[1].asstring <> '' THEN
           BEGIN
             dmgs.cdsq_float.Close;
             dmgs.cdsq_float.CommandText := 'select count(*) as cuenta,al.numero,al.codigo_barras,descripcion,precio_venta,al.cantidad from almacendetalle2 al, articulos ar,almacendetalle ad'+
                ' where al.numero1='+dmgs.cdsq_maximo.Fields[1].asstring+' and ad.numero=al.numero1 and ad.id_articulo=ar.id_articulo group by al.numero,al.codigo_barras,descripcion,precio_venta,al.cantidad  ';
             dmgs.cdsq_float.open;
             if dmgs.CDSQ_FLOAT.Fields[0].AsInteger > 0 then
                SiAlmacendetalle2 := true;
           END;
       end;
           if (dmgs.cdsq_maximo.Fields[0].asinteger > 0) and
           (lcantidad >= 0) then
           begin
              LISTADOS := tLISTADOS.Create(nil);
              PREVIO := TPREVIO.Create(NIL);

              if not SiAlmacendetalle2 then
                 LISTADOS.FRDB.DataSet := DMGS.cdsq_maximo
              else
                 LISTADOS.FRDB.DataSet := DMGS.cdsq_float;

              if (lcantidad > 0) then
              begin
               LISTADOS.frReport1.LoadFromFile(dmgs.Path + 'LISTADOS\codigobarras.frf');
               LISTADOS.frReport1.Preview := PREVIO.frPreview1;
               LISTADOS.frReport1.ShowReport;
               PREVIO.ShowModal;
               IF PREVIO.IMPRESO THEN
               BEGIN
               if not SiAlmacendetalle2 then
               BEGIN
                 DMGS.CDSQ_ACTUALIZAR.Close;
                 DMGS.CDSQ_ACTUALIZAR.COMMANDTEXT := 'UPDATE ALMACENDETALLE SET IMPRESO=1 '+
                 ' where ID_ENTRADA='+dmgs.cdsq_mdlineaentradaID_ENTRADA.asstring +' AND ID_EMPRESA='+dmgs.cdsq_mdlineaentradaID_EMPRESA.asstring +' AND ID_ARTICULO='''+
                 dmgs.cdsq_mdlineaentradaID_ARTICULO.asstring +''' AND ANYO='+dmgs.cdsq_mdlineaentradaANYO.asstring +' AND LINEA='+dmgs.cdsq_mdlineaentradaLINEA.asstring +' AND CANTIDAD='+dmgs.cdsq_mdlineaentradaCANTIDAD.AsString +'  ';
                 DMGS.CDSQ_ACTUALIZAR.Execute;
               END
               ELSE
                BEGIN
                 DMGS.CDSQ_ACTUALIZAR.Close;
                 DMGS.CDSQ_ACTUALIZAR.COMMANDTEXT := 'UPDATE ALMACENDETALLE2 SET IMPRESO=1 '+
                 ' where numero1='+dmgs.cdsq_maximo.Fields[1].asstring+' ';
                 DMGS.CDSQ_ACTUALIZAR.Execute;
                END;
               END;
              end; 
//          por aqui , que muestre solo los seleccionados.

              if SiAlmacenDetalle2bis then
              begin

                dmgs.cdsq_maximo.Close;
                dmgs.CDSQ_MAXIMO.CommandText := 'select count(*) as cuenta,numero,codigo_barras,descripcion,precio_venta,cantidad from almacendetalle al, articulos ar'+
                ' where al.id_articulo=ar.id_articulo and numero='+DMGS.cdsq_almacendetalle2numero1.asstring +'  group by numero,codigo_barras,descripcion,precio_venta,cantidad  ';
                dmgs.cdsq_maximo.open;

                DMGS.CDSQ_ALMACENDETALLE2.Filter := ' IMPRIME = 1 ';
                DMGS.CDSQ_ALMACENDETALLE2.Filtered := TRUE;

                IF DMGS.CDSQ_ALMACENDETALLE2.RecoRDCOUNT>0 THEN
                BEGIN
                 LISTADOS.ETIQUETA := DMGS.CDSQ_MAXIMO.Fields [3].ASSTRING;
                 LISTADOS.PRECIO_VENTA := DMGS.CDSQ_MAXIMO.Fields [4].AsFloat ;
                 LISTADOS.FRDB.DataSet := DMGS.cdsq_almacendetalle2;
                 LISTADOS.frReport1.LoadFromFile(dmgs.Path + 'LISTADOS\codigobarras1.frf');
                 LISTADOS.frReport1.Preview := PREVIO.frPreview1;
                 LISTADOS.frReport1.ShowReport;
                 PREVIO.ShowModal;
                 IF PREVIO.IMPRESO THEN
                 BEGIN
                   DMGS.CDSQ_ACTUALIZAR.Close;
                   DMGS.CDSQ_ACTUALIZAR.COMMANDTEXT := 'UPDATE ALMACENDETALLE2 SET IMPRESO=1 '+
                   ' where numero1='+dmgs.cdsq_maximo.Fields[1].asstring+' ';
                   DMGS.CDSQ_ACTUALIZAR.Execute;
                 END;
                END;
              end;

              LISTADOS.Free;
              LISTADOS := NIL;
              PREVIO.FREE;
              PREVIO := NIL;

         if  SiAlmacendetalle2Bis then
         begin
//           almacendetalle2bis.Free;
//        LO LIBERA AL CERRAR LA VENTANA, RARO PERO PASA.
           almacendetalle2bis := NIL;
           DMGS.CDSQ_ALMACENDETALLE2.Filtered := FALSE;
           DMGS.CDSQ_ALMACENDETALLE2.CLOSE;
         end;

         dmgs.cdsq_maximo.Close;
         if SiAlmacendetalle2 then
            dmgs.cdsq_float.close;
      END;
    {     si hay datos en almacendetalle2 abro una ventana y le doy
opciones.

   LISTADO := 0;
   listadoopciones := tlistadoopciones.create(nil);
   listadoopciones.opcion := 2;//ENTRADA
   if listadoopciones.ShowModal = mrok then
   begin
    cadena := listadoopciones.cadena;
    if trim(cadena) <> '' then
    begin
     if listadoopciones.DETALLE  then
        listado := 1;
     if listadoopciones.total   then
        listado := 2;

    if trim(cadena) <> '' then
    begin
//         CADENA := ' AND ' + CADENA;
//        cadena := ' id_empresa='+fmenu.id_empresa+' and ' + cadena;
// en listado opciones se puede poner el orden.
//        cadena := ' where '+ cadena +' ORDER BY FECHA ';
        cadena := ' where '+ CADENA;
        FECHADESDE := DATETOSTR(LISTADOOPCIONES.FECHAINICIO);
        FECHAHASTA := DATETOSTR(LISTADOOPCIONES.FECHAFINAL);
    end;

    listadoopciones.free;
    listadoopciones := nil;


    WITH DMGS.CDSQ_EMPRESAAUX DO
    BEGIN
      Close;
      DMGS.VEMPRESASAUX.ID:= FMENU.ID_EMPRESA;
      DMGS.VEMPRESASAUX.TIPO :='2';
      OPEN;
    END;
    LISTADOS := tLISTADOS.Create(nil);
    PREVIO := TPREVIO.Create(NIL);
    IF LISTADO=1 THEN
    BEGIN
        WITH DMGS.CDSQ_LISTADOENTRADA DO
            BEGIN
              CLOSE;
              DMGS.VLISTADOENTRADA.ID := CADENA;
              DMGS.VLISTADOENTRADA.TIPO := '1';
              DMGS.VLISTADOENTRADA.ORDEN := ORDENLISTADOENTRADA;
              OPEN;
            END;
            WHILE not dmgs.CDSQ_LISTADOENTRADA.eof do
            begin
               dmgs.cdsq_LISTADOENTRADA.Last;
               if dmgs.cdsq_LISTADOENTRADA.Eof then
               try // para evitar el error de memoria bloqueada en el server.
                   DMGS.CDSQ_LISTADOENTRADA.GetNextPacket ;
               except
               end;
            end;
            dmgs.cdsq_LISTADOENTRADA.First;
    END
    ELSE
    IF LISTADO=2 THEN
    BEGIN
            WITH DMGS.CDSQ_LENTRADATOTAL DO
            BEGIN
              CLOSE;
              DMGS.VLENTRADATOTAL.ID := CADENA;
              DMGS.VLENTRADATOTAL.TIPO := '1';
              OPEN;
            END;
            WHILE not DMGS.CDSQ_LENTRADATOTAL.eof do
            begin
               DMGS.CDSQ_LENTRADATOTAL.Last;
               if DMGS.CDSQ_LENTRADATOTAL.Eof then
               try // para evitar el error de memoria bloqueada en el server.
                   DMGS.CDSQ_LENTRADATOTAL.GetNextPacket ;
               except
               end;
            end;
            DMGS.CDSQ_LENTRADATOTAL.First;
    END;
    LISTADOS.FECHADESDE := FECHADESDE;
    LISTADOS.FECHAHASTA := FECHAHASTA;
    IF LISTADO=1 THEN
    BEGIN
        LISTADOS.FRDB.DataSet := DMGS.CDSQ_LISTADOENTRADA;
        LISTADOS.FRDB2.DataSet := DMGS.CDSQ_EMPRESAAUX;
        LISTADOS.frReport1.LoadFromFile(dmgs.Path + 'LISTADOS\LISTADOENTRADADETALLEXX.frf');
    END;
    IF LISTADO=2 THEN
    BEGIN
        LISTADOS.FRDB.DataSet := DMGS.CDSQ_LENTRADATOTAL;
        LISTADOS.FRDB2.DataSet := DMGS.CDSQ_EMPRESAAUX;
        LISTADOS.frReport1.LoadFromFile(dmgs.Path + 'LISTADOS\LISTADOENTRADATOTAL.frf');
    END;
    LISTADOS.frReport1.Preview := PREVIO.frPreview1;
    LISTADOS.frReport1.ShowReport;
    PREVIO.ShowModal;
    LISTADOS.Free;
    LISTADOS := NIL;
    PREVIO.FREE;
    PREVIO := NIL;
    DMGS.CDSQ_EMPRESAAUX.CLOSE;
    DMGS.CDSQ_CLIENTEAUX.CLOSE;
   end;
}
    end;
end;

end.





