unit FPRESUPUESTO;

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, FR_View,
  ExtendedGrid, ffunciones;

type
  TPRESUPUESTO = class(TForm)
    Panel1: TPanel;
    Panel3: TPanel;
    Panel4: TPanel;
    Label23: TLabel;
    Label25: TLabel;
    Label26: TLabel;
    Label27: TLabel;
    Label28: TLabel;
    Label29: TLabel;
    Menu: TMainMenu;
    PRESUPUESTO1: 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;
    DSPRESUPUESTO: TDataSource;
    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;
    DSLINPRESUPUESTO: TDataSource;
    BLISTADO: TToolButton;
    Label12: TLabel;
    Label13: TLabel;
    Label15: TLabel;
    DBText2: TDBText;
    Label17: TLabel;
    DBText3: TDBText;
    ALISTADO: TAction;
    AALTAS2: TAction;
    ABAJAS2: TAction;
    AModificar2: TAction;
    ABUSQUEDA: TAction;
    AORDEN: TAction;
    Label18: TLabel;
    BLISTADO2: TToolButton;
    ALISTADO2: TAction;
    PopupMenu1: TPopupMenu;
    ARTICULOS1: TMenuItem;
    ARIFAS1: TMenuItem;
    BCANTIDAD: TToolButton;
    ACANTIDAD: TAction;
    amostrar: TAction;
    bmostrar: TToolButton;
    ACOPIAR: TAction;
    bcopiar: TToolButton;
    Label22: TLabel;
    DBText4: TDBText;
    Label24: TLabel;
    DBText5: TDBText;
    Label30: TLabel;
    Label31: TLabel;
    Label32: TLabel;
    Label33: TLabel;
    PageControl1: TPageControl;
    Presupuestos: TTabSheet;
    TabSheet2: TTabSheet;
    PDATOS: TPanel;
    Label6: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    DBText1: TDBText;
    Label7: TLabel;
    Label11: TLabel;
    Label14: TLabel;
    Label16: TLabel;
    Label19: TLabel;
    Label20: TLabel;
    Label21: TLabel;
    DBEdit1: TDBEdit;
    DBEdit3: TDBEdit;
    DBEdit4: TDBEdit;
    DBEdit2: TDBEdit;
    DBEdit5: TDBEdit;
    DBEdit6: TDBEdit;
    DBEdit7: TDBEdit;
    DBEdit8: TDBEdit;
    DBEdit9: TDBEdit;
    ToolBar2: TToolBar;
    BALTAS2: TToolButton;
    BBAJAS2: TToolButton;
    BMODIFICAR2: TToolButton;
    DBGrid1: TDBGrid;
    DBGrid2: TDBGrid;
    Label34: TLabel;
    Label35: TLabel;
    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 DSPRESUPUESTOStateChange(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 PRESUPUESTO1Click(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 DSPRESUPUESTODataChange(Sender: TObject; Field: TField);
    procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    procedure FormActivate(Sender: TObject);
    procedure BBUSQUEDAClick(Sender: TObject);
    procedure BORDENClick(Sender: TObject);
    procedure DSLINPRESUPUESTOStateChange(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 DBGrid1DblClick(Sender: TObject);
    procedure DBEdit3DblClick(Sender: TObject);
    procedure BLISTADO2Click(Sender: TObject);
    procedure ARIFAS1Click(Sender: TObject);
    procedure DSLINPRESUPUESTODataChange(Sender: TObject; Field: TField);
    procedure BCANTIDADClick(Sender: TObject);
    procedure Action1Execute(Sender: TObject);
    procedure ACOPIARExecute(Sender: TObject);
    procedure DBGrid1TitleClick(Column: TColumn);
    procedure DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure DBGrid2MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);

  private
    { Private declarations }
    F1ENTRA:BOOLEAN;
    SORDEN:STRING;
    PFUNCIONES:TFUNCIONES;
    procedure EstadoBotones;
    procedure buscar;
    procedure articulos;
    function fechas(sender:tobject):boolean;
//    procedure tarifas;


  public
    { Public declarations }
    ver: string;
    ARORDEN : TORDEN;

    PROCEDURE COMPROBAREMPRESA;
    PROCEDURE COMPROBARCLIENTE;

  end;

var
  PRESUPUESTO: TPRESUPUESTO;

implementation

uses FDLGCLIENTE, RUTINAS, UDMgs, fdlgarticulos,
  FDLGFAMILIASAUX, menu, DLGCOLORESAUX, FEAN, FDLGPRESUPUESTO,
  FDLGCLIENTEAUX, FDLGARTICULOSAUX, FLISTADOS, fprevio, PEDIRBASE,
  FDLGTARIFASAUX, FGRUPO, FARTICULOS, FCANTIDAD;

{$R *.DFM}





//*******************************************************************//
//*******************************************************************//



procedure TPRESUPUESTO.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_MDLINPRESUPUESTO.STATE IN [DSEDIT,DSINSERT]) THEN
 BEGIN
   if (UPPERCASE(TRIM(dbgrid1.SelectedField.FieldName)) ='ID_ARTICULO') AND
   (NOT F1ENTRA) AND
   (TRIM(DMGS.CDSQ_MDLINPRESUPUESTOID_ARTICULO.AsString)<>'' )
    then
    BEGIN

      pfunciones.Borrar;
      pfunciones.Albaran := true;
      pfunciones.Esta(DMGS.CDSQ_MDLINPRESUPUESTOID_ARTICULO.ASSTRING,true,'0','0','X',DMGS.CDSQ_MDPRESUPUESTOID_EMPRESA.AsString,DMGS.CDSQ_MDPRESUPUESTOANYO.AsString);
      dmgs.cdsq_MDLINPRESUPUESTOID_ARTICULO.asstring:=pfunciones.ID_ARTICULO;
      DMGS.CDSQ_MDLINPRESUPUESTODESCRIPCION.ASSTRING:= pfunciones.DESCRIPCION;
      DMGS.CDSQ_MDLINPRESUPUESTOPRECIO.ASfloat := pfunciones.precio;//OBTENERPRECIOVENTA(TRUE,'0','0'); //ROUNDTO(DMGS.CDSQ_ARTICULOEANPRECIO_VENTA.ASfloat,DMGS.DECIMALES);
      dmgs.cdsq_MDLINPRESUPUESTOiva.asstring := pfunciones.IVA;
      DMGS.CDSQ_MDLINPRESUPUESTOMARCA.ASSTRING := pfunciones.MARCA;
//      DMGS.CDSQ_MDLINPRESUPUESTOCODIGO_BARRAS.AsString := pfunciones.Codigo_barras ;
      DMGS.CDSQ_MDLINPRESUPUESTOprecio_coste.asfloat := pfunciones.PrecioCoste ;
      DMGS.CDSQ_MDLINPRESUPUESTOART_PROVEEDOR.ASSTRING := pfunciones.Art_proveedor;
      DMGS.CDSQ_MDLINPRESUPUESTOID_PROVEEDOR.AsString := pfunciones.Id_Proveedor;
      dbgrid1.selectedindex:=dbgrid1.selectedindex+1;




 {    WITH DMGS.CDSQ_ARTICULOEAN DO
     BEGIN
       CLOSE;
       DMGS.AREBGRID  := UPPERCASE(DMGS.CDSQ_MDLINPRESUPUESTOID_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_mdLINpresupuestOID_ARTICULO.asstring:=DMGS.CDSQ_ARTICULOEANID_ARTICULO.ASSTRING;
          DMGS.CDSQ_MDLINPRESUPUESTODESCRIPCION.ASSTRING:= DMGS.CDSQ_ARTICULOEANDESCRIPCION.AsString;
          DMGS.CDSQ_MDLINPRESUPUESTOPRECIO.asfloat := ROUNDTO(DMGS.CDSQ_ARTICULOEANPRECIO_VENTA.asfloat,DMGS.DECIMALES);
          DMGS.CDsq_MDLINPRESUPUESTOPRECIO_COSTE.asfloat :=  ROUNDTO(DMGS.CDSQ_ARTICULOEANPRECIO_COSTE.asfloat,dmgs.DECIMALES);
          dmgs.cdsq_mdlinpresupuestoiva.asstring := DMGS.CDSQ_ARTICULOEANIVA.AsString;
          DMGS.CDSQ_MDLINPRESUPUESTOMARCA.ASSTRING := DMGS.CDSQ_ARTICULOEANMARCA.AsString;
          DMGS.CDSQ_MDLINPRESUPUESTOART_PROVEEDOR.ASSTRING := DMGS.CDSQ_ARTICULOEANART_PROVEEDOR.AsString;
          DMGS.CDSQ_MDLINPRESUPUESTOID_PROVEEDOR.AsString := DMGS.CDSQ_ARTICULOEANID_PROVEEDOR.ASSTRING;
          dbgrid1.selectedindex:=dbgrid1.selectedindex+1;
       END
       ELSE
       BEGIN
          DMGS.CDSQ_MDLINPRESUPUESTODESCRIPCION.ASSTRING:= '';
          DMGS.CDSQ_MDLINPRESUPUESTOPRECIO.ASSTRING := '';
          dmgs.cdsq_mdlinpresupuestoiva.asstring := '';
       END;
       DMGS.CDSQ_ARTICULOEAN.CLOSE;
     END;
 }
  end;


  // EL DESCUENTO SE APLICA AL PRECIO DEL ARTICULO SIN IVA. ME DA IGUAL
  IVA := ROUNDTO((1 + (DMGS.CDSQ_MDLINPRESUPUESTOIVA.asfloat/100)),DMGS.DECIMALES );
  PVPSINIVA :=ROUNDTO((DMGS.CDSQ_MDLINPRESUPUESTOPRECIO.asfloat/IVA),DMGS.DECIMALES);
  DESCUENTO := ROUNDTO(DMGS.CDSQ_MDLINPRESUPUESTODESCUENTO.asfloat/100,DMGS.DECIMALESDES);
  CANTIDAD := ROUNDTO(DMGS.CDSQ_MDLINPRESUPUESTOCANTIDAD.asfloat,DMGS.DECIMALES);
//  IVA :=ROUNDTO(DMGS.CDSQ_MDLINPRESUPUESTOPRECIO.ASCURRENCY,DMGS.DECIMALES);

  DMGS.CDSQ_MDLINPRESUPUESTOIMPORTE.asfloat := ROUNDTO(CANTIDAD * DMGS.CDSQ_MDLINPRESUPUESTOPRECIO.AsCurrency* (1 - DESCUENTO),DMGS.DECIMALESMON)  ;
//  DMGS.CDSQ_MDLINPRESUPUESTOBASE_LINEA.asfloat := IVA * CANTIDAD * (PVPSINIVA - (PVPSINIVA*DESCUENTO))
  DMGS.CDSQ_MDLINPRESUPUESTOBASE_LINEA.asfloat :=  ROUNDTO(CANTIDAD *((DMGS.CDSQ_MDLINPRESUPUESTOPRECIO.AsCurrency* (1 - DESCUENTO))/iva),DMGS.DECIMALESMON)

 END;
 F1ENTRA := FALSE;
end;



procedure TPRESUPUESTO.FormActivate(Sender: TObject);
begin


{  IF FMENU.VISTACLIENTE THEN
  BEGIN
    LABEL16.Visible := FALSE;
    DBEDIT6.VISIBLE := FALSE;
    DBGRID1.Columns[4].Visible := FALSE;
    DBGRID1.Columns[5].Visible := FALSE;
    DBGRID1.Columns[6].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;
  END;
}
end;

procedure TPRESUPUESTO.BBUSQUEDAClick(Sender: TObject);
begin
// FUNCION PARA HACER LA BUSQUEDA,
//HACERLO CON PRESUPUESTO.
  DMGS.CDSQ_MDPRESUPUESTO.CLOSE;
  DMGS.RPRESUPUESTO.BUSCANDO := TRUE;
//  DMGS.buscandoPRE := true;
  WITH DMGS.CDSQ_MDPRESUPUESTO  DO
  BEGIN
    DMGS.VPRESUPUESTO.ID  := '-11112456';
    dmgs.VPRESUPUESTO.TIPO  := '1';
    DMGS.VPRESUPUESTO.ORDENLINEA := ordenlinpresupuesto;
    OPEN;
    APPEND;
  END;
  dmgs.CDSQ_MDPRESUPUESTOid_PRESUPUESTO.asstring := '';
  DMGS.CDSQ_MDPRESUPUESTOID_PRESUPUESTO.FocusControl

end;
{procedure tPRESUPUESTO.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_MDPRESUPUESTO.FieldByName(AUX1).ASSTRING) ='') then
      BEGIN
         if pos('FECHA',uppercase(aux1)) <> 0 then
         begin
            auxfecha :=DMGS.CDSQ_MDPRESUPUESTO.FieldByName(AUX1).AsDateTime ;
            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
               aux := aux + ' AND ' + AUX1  +' Like ('''+ DMGS.CDSQ_MDPRESUPUESTO.FieldByName(AUX1).ASSTRING+'%'') '
            else
               aux := AUX1 +' like ('''+ TRIM(DMGS.CDSQ_MDPRESUPUESTO.FieldByName(AUX1).ASSTRING)+'%'') ';
         end;
      END;
      end;
      i:= i+1;
    END;
  dmgs.CDSQ_MDPRESUPUESTO.close;
  DMGS.buscandoPRE:=false;
  if aux <> '' then
  begin

     AUX := AUX + ' AND ID_EMPRESA='+FMENU.ID_EMPRESA;

     if trim(arorden.sorden) = '' then
       aux := aux + ordenpresupuesto
     else
       aux := aux + ARORDEN.SORDEN;
       
     with dmgs.CDSQ_MDPRESUPUESTO do
     begin
       dmgs.VPRESUPUESTO.ID  := ' where '+ aux;
       dmgs.VPRESUPUESTO.TIPO := '2';
       DMGS.VPRESUPUESTO.ORDENLINEA := ordenlinpresupuesto;
       open;
     end
  end;
end;
}
procedure TPRESUPUESTO.buscar;
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_MDPRESUPUESTO.FieldByName(AUX1).ASSTRING) ='')) AND
         (NOT ( DMGS.CDSQ_MDPRESUPUESTO.FieldByName(AUX1).FieldKIND IN  [fkCalculated,fkInternalCalc]))
      then
      BEGIN
//         if pos('FECHA',uppercase(aux1)) <> 0 then
         IF ((DMGS.CDSQ_MDPRESUPUESTO.FieldByName(AUX1).DataType IN [FTDATE,ftTimeStamp] ) ) AND
         ( POS(':',UPPERCASE(AUX1)) = 0)
         THEN
         begin
            auxfecha :=DMGS.CDSQ_MDPRESUPUESTO.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_MDPRESUPUESTO.FieldByName(AUX1).ASSTRING+''') ' // VER 3.0 %
            else
               aux := 'char('+AUX1 +') = ('''+ TRIM(DMGS.CDSQ_MDPRESUPUESTO.FieldByName(AUX1).ASSTRING)+''') '; // VER 3.0 %
         end;                          // LIKE
      END;
      end;
      i:= i+1;
    END;
  dmgs.CDSQ_MDPRESUPUESTO.close;
  DMGS.RPRESUPUESTO.BUSCANDO :=false;
  if aux <> '' then
  begin
     DMGS.VPRESUPUESTO.EMPRESA  := FMENU.ID_EMPRESA;
 //    DMGS.VPRESUPUESTO.ANYO := FMENU.ANYO;
     IF TRIM(ARORDEN.SORDEN)<> '' THEN
        DMGS.VPRESUPUESTO.ORDEN := ARORDEN.SORDEN
     ELSE
        DMGS.VPRESUPUESTO.ORDEN := ordenPRESUPUESTO;
     DMGS.VPRESUPUESTO.ID  :=' where '+ aux;
     DMGS.VPRESUPUESTO.TIPO := '2';
     DMGS.CDSQ_MDPRESUPUESTO.Open ;
  end;
end;
procedure TPRESUPUESTO.BORDENClick(Sender: TObject);
BEGIN
  ARORDEN.ShowModal;
end;


procedure TPRESUPUESTO.DSLINPRESUPUESTOStateChange(Sender: TObject);
begin
  if DMGS.CDsq_MDLINPRESUPUESTO.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 TPRESUPUESTO.FormCreate(Sender: TObject);
begin
  try
    dbgrid1.Columns.loadfromfile(FMENU.PATHDBGRID +'\'+SELF.Name);
  except
  end;
  DMGS.CDSQ_MDLINPRESUPUESTO.CLOSE;
  DMGS.CDSQ_MDPRESUPUESTO.CLOSE;
  ARORDEN := TORDEN.Create(NIL);
  ARORDEN.CDS  := DMGS.CDSQ_MDPRESUPUESTO;
  ARORDEN.nombre  := 'CDSQ_MDPRESUPUESTO';
  arorden.SORDEN := ordenpresupuesto ;
  DMGS.RPRESUPUESTO.BUSCANDO := FALSE;
//  dmgs.buscandoPRE := false;
  DSPRESUPUESTO.DataSet := NIL;
  DSLINPRESUPUESTO.DataSet := NIL;

  with DMGS.CDSQ_MDPRESUPUESTO do
  BEGIN
//    DMGS.CDSQ_MDLINPRESUPUESTO.Close;
    Close;
    DMGS.VPRESUPUESTO.ID :='%';
    DMGS.VPRESUPUESTO.TIPO := '1';
    DMGS.VPRESUPUESTO.ORDEN := ordenpresupuesto;// ' ORDER BY ID_CLIENTE, FECHA,ID_PRESUPUESTO ';
    DMGS.VPRESUPUESTO.ORDENLINEA := ordenlinpresupuesto;
    Open;
  END;

  DSPRESUPUESTO.DataSet := DMGS.CDSQ_MDPRESUPUESTO;
  DSLINPRESUPUESTO.DataSet := DMGS.CDsq_MDLINPRESUPUESTO;

  IF NOT FMENU.VISTACLIENTE
  THEN
    DBGRID1.Columns [9].VISIBLE := TRUE
  ELSE
    DBGRID1.Columns [9].VISIBLE := TRUE;

  PFUNCIONES := TFUNCIONES.CREATE;

end;
procedure TPRESUPUESTO.FormDestroy(Sender: TObject);
begin
   DMGS.CDSQ_MDLINPRESUPUESTO.close;
   DMGS.CDSQ_MDPRESUPUESTO.CLOSE;
   ARORDEN.FREE;
   ARORDEN := NIL;
  try
    dbgrid1.Columns.SAVETOfile(FMENU.PATHDBGRID +'\'+SELF.Name);
  except
  end;
  PFUNCIONES.Destroy ;
end;
procedure TPRESUPUESTO.FormShow(Sender: TObject);
begin
    EstadoBotones;
    F1ENTRA := FALSE;
    IF DMGS.CDSQ_mdlinpresupuesto.Active THEN
       fmenu.StatusBar1.SimpleText  := dmgs.cdsq_mdlinpresupuestoDESCRIPCION.AsString ;

end;
procedure TPRESUPUESTO.BConsultasClick(Sender: TObject);
var posaux:TBookmark;
    codigo:tcodigotar;
begin
    DSPRESUPUESTO.DataSet := NIL;

    dlgPRESUPUESTO:=tdlgPRESUPUESTO.create(nil);
    dlgPRESUPUESTO.ORDEN :=  ARORDEN.SORDEN;
    DLGPRESUPUESTO.CERRARDATASET := FALSE;
    dlgPRESUPUESTO.Showmodal;
    dlgPRESUPUESTO.Free;
    dlgPRESUPUESTO := NIL;
    IF NOT DMGS.CDSQ_MDPRESUPUESTO.ACTIVE THEN
       ESTADOBOTONES;

    dsPRESUPUESTO.DataSet := DMGS.CDSQ_MDPRESUPUESTO ;
end;
procedure TPRESUPUESTO.FormKeyPress(Sender: TObject; var Key: Char);
begin
    if (key ='.')
    and (DMGS.CDSQ_mdpresupuesto.State in [dsedit,dsinsert])
    and (activecontrol is tdbedit)
    then
      if (dmgs.cdsq_mdpresupuesto.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_MDLINPRESUPUESTO.State in [dsedit,dsinsert]) then
    begin
//       if dbgrid1.Focused then
    IF (ACTIVECONTROL IS TDBGRID) THEN
       begin
        if dbgrid1.SelectedIndex = (dbgrid1.FieldCount - 2) then
        begin
          DMGS.CDSQ_MDLINPRESUPUESTO.next;
          IF DMGS.CDSQ_MDLINPRESUPUESTO.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_MDLINPRESUPUESTO.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_MDLINPRESUPUESTO.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_MDLINPRESUPUESTO.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_MDPRESUPUESTO.state in [dsedit,dsinsert]))
            then close;
    if (key = #27) and (DMGS.CDSQ_MDPRESUPUESTO.state in [dsedit,dsinsert])
       and (not( dmgs.cdsq_mdlinpresupuesto.state in [dsedit,dsinsert]))
    then
//       if DMGS.buscandoPRE then
       IF   DMGS.RPRESUPUESTO.BUSCANDO THEN
          buscar
       ELSE
          DMGS.CDSQ_MDPRESUPUESTO.Post;
end;
procedure TPRESUPUESTO.BSalirClick(Sender: TObject);
begin
    close;
    SELF.ModalResult:=mrOk;
end;
procedure TPRESUPUESTO.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 TPRESUPUESTO.PRIMERO1Click(Sender: TObject);
begin
   DMGS.CDSQ_MDLINPRESUPUESTO.first;
end;

procedure TPRESUPUESTO.ANTERIOR1Click(Sender: TObject);
begin
    DMGS.CDSQ_MDLINPRESUPUESTO.Prior;
end;

procedure TPRESUPUESTO.SIGUIENTE1Click(Sender: TObject);
begin
    DMGS.CDSQ_MDLINPRESUPUESTO.next;
end;
procedure TPRESUPUESTO.REGISTRO1Click(Sender: TObject);
begin
   if DMGS.CDSQ_MDLINPRESUPUESTO.state in [dsedit,dsinsert] then
   begin
      primero1.enabled:=false;
      anterior1.enabled:=false;
      siguiente1.enabled:=false;
   end
   else
   begin
       primero1.enabled:=DMGS.CDSQ_MDLINPRESUPUESTO.bof=false;
       anterior1.enabled:=primero1.enabled;
       siguiente1.enabled:=DMGS.CDSQ_MDLINPRESUPUESTO.eof=false;
   end;
end;
procedure TPRESUPUESTO.EstadoBotones;
begin
    PDatos.enabled:=DMGS.CDSQ_MDPRESUPUESTO.state in [dsedit,dsinsert];
    BAltas.enabled:=(DMGS.CDSQ_MDPRESUPUESTO.state IN [DSBROWSE,dsinactive]);
    BListado.enabled:=(DMGS.CDSQ_MDPRESUPUESTO.state=dsbrowse) and (DMGS.CDSQ_MDlinPRESUPUESTO.recordcount >0) ;
    BListado2.enabled:=(DMGS.CDSQ_MDPRESUPUESTO.state=dsbrowse) and (DMGS.CDSQ_MDlinPRESUPUESTO.recordcount >0) ;
    BConsultas.enabled:=(DMGS.CDSQ_MDPRESUPUESTO.state IN [dsbrowse,dsinactive]);
    BModificaciones.enabled:=(DMGS.CDSQ_MDPRESUPUESTO.state=dsbrowse) and (DMGS.CDSQ_MDPRESUPUESTO.recordcount >0) ;
    BBajas.enabled:=(DMGS.CDSQ_MDPRESUPUESTO.state=dsbrowse) and (DMGS.CDSQ_MDPRESUPUESTO.recordcount >0) ;
     // para que no se pueda anyadir ni borrar lineas de pedido
    // antes de introducir todos
    // los datos del pedido.
    if (DMGS.CDSQ_MDPRESUPUESTO.state=dsbrowse) and (DMGS.CDSQ_MDPRESUPUESTO.recordcount >0) then
    begin
       baltas2.enabled:=true;
       BbAJAS2.Enabled := true;
       IF (DMGS.CDSQ_MDLINPRESUPUESTO.ACTIVE) AND
       (DMGS.CDSQ_MDLINPRESUPUESTO.recordcount >0) then
       BEGIN
           bmodificar2.enabled:= true;
           BCANTIDAD.Enabled := TRUE;
           bcopiar.enabled := true;
       END
       ELSE
       BEGIN
           bmodificar2.enabled:= FALSE;
           BCANTIDAD.Enabled := FALSE;
           bcopiar.enabled := false;
       END;
    end
    else
    begin
      baltas2.enabled := false;
      bBAJAS2.Enabled := false;
//      IF (DMGS.CDSQ_MDLINPRESUPUESTO.ACTIVE) AND
//      (DMGS.CDSQ_MDLINPRESUPUESTO.recordcount >0) then
//      BEGIN
           bmodificar2.enabled:= FALSE;
           BCANTIDAD.Enabled := FALSE;
           bcopiar.enabled := false;
//      END;
    end;
end;
procedure TPRESUPUESTO.BAltasClick(Sender: TObject);
begin
  WITH DMGS.CDSQ_MDPRESUPUESTO DO
  BEGIN
     IF NOT Active THEN
     BEGIN
      DMGS.VPRESUPUESTO.ID :='-111654' ;
      DMGS.VPRESUPUESTO.TIPO :='1';
//      DMGS.PRBGRORDEN := ARORDEN.SORDEN;
      DMGS.VPRESUPUESTO.ORDENLINEA := ordenlinpresupuesto;
      OPEN;
     END;
     APPEND;
  END;
  pagecontrol1.TabIndex:=1;
  DBEDIT1.SetFocus;
end;
procedure TPRESUPUESTO.BBajasClick(Sender: TObject);
begin
    if (DMGS.CDSQ_MDPRESUPUESTO.recordcount>0) then //or (DMGS.CDSQ_MDPRESUPUESTO.state in [dsedit,dsinsert]) then
    begin
       case dmgs.PedirConfirmacion('¿Confirma que desea borrar este Presupuesto?',true,true,false) of
           mrno: exit;
       end;
       if DMGS.CDSQ_MDLINPRESUPUESTO.recordcount >0 then
            DMGS.BorrandoLineas:= true;
       while DMGS.CDSQ_MDLINPRESUPUESTO.RecordCount>0  do
       begin
              DMGS.RLINEAPRESUPUESTO.PREGUNTA  := FALSE;
              DMGS.CDSQ_MDLINPRESUPUESTO.Delete;
       end;
       // lo tengo que hacer asi, pq en el server modifico mdpresupuesto
       // 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_MDlinPRESUPUESTO.afterpost(DMGS.CDSQ_MDlinPRESUPUESTO);
       DMGS.CDSQ_MDPRESUPUESTO.delete;
       DMGS.CDSQ_MDPRESUPUESTOafterpost(DMGS.CDSQ_MDPRESUPUESTO);
   end;
end;






procedure TPRESUPUESTO.BALTAS2Click(Sender: TObject);
begin
    IF DMGS.CDSQ_MDPRESUPUESTO.RecordCount > 0 THEN
    BEGIN
     WITH DMGS.CDSQ_MDLINPRESUPUESTO  DO
     BEGIN
      IF NOT Active THEN
        OPEN;
      LAST;
      APPEND;
     END;
     DBGRID1.SetFocus;
//     DBGRID1.SelectedIndex :=0;
     DMGS.CDSQ_MDLINPRESUPUESTOID_ARTICULO.FOCUSCONTROL;
    END;
end;
procedure TPRESUPUESTO.FormClose(Sender: TObject; var Action: TCloseAction);
begin
    if (DMGS.CDSQ_MDPRESUPUESTO.State in [dsedit,dsinsert]) AND
       (NOT   DMGS.RPRESUPUESTO.BUSCANDO) then
       DMGS.CDSQ_MDPRESUPUESTO.Post;
    Action := caFree;
end;
procedure TPRESUPUESTO.BModificacionesClick(Sender: TObject);
begin
    if DMGS.CDSQ_MDPRESUPUESTO.recordcount>0 then
    begin
        DMGS.CDSQ_MDPRESUPUESTO.edit;
//        DMGS.CDSQ_MDPRESUPUESTOID_PRESUPUESTO.FocusControl ;
        DBEDIT1.SetFocus;
    end;
end;
procedure TPRESUPUESTO.BListadoClick(Sender: TObject);
VAR BOOKMARK,bookmark1:TBOOKMARK;
begin
    BOOKMARK := DMGS.CDsq_MDPRESUPUESTO.GetBookmark ;
    bookmark1 := dmgs.cdsq_mdlinpresupuesto.GetBookmark ;

    DSPRESUPUESTO.DataSet := NIL; // HACE FALTA
    DSLINPRESUPUESTO.DataSet := NIL;

 {   if DMGS.CDSQ_MDLINPRESUPUESTO.recordcount>0 then
    begin
        DMGS.CDSQ_MDLINPRESUPUESTO.edit;
        DMGS.RLINEAPRESUPUESTO.PREGUNTA := FALSE;// TRUE;
        DMGS.CDSQ_MDLINPRESUPUESTO.Post;
    end;
 }
    WITH DMGS.CDSQ_EMPRESAAUX DO
    BEGIN
      Close;
      DMGS.VEMPRESASAUX.ID:= DMGS.CDSQ_MDPRESUPUESTOID_EMPRESA.AsString;
      DMGS.VEMPRESASAUX.TIPO :='2';
      OPEN;
    END;
    IF ((DMGS.CDSQ_MDPRESUPUESTOID_CLIENTE.ASSTRING) <> '' ) THEN
    BEGIN
     WITH DMGS.CDSQ_CLIENTEAUX DO
     BEGIN
       CLOSE;
       DMGS.CLABGRNOMBRE:= DMGS.CDSQ_MDPRESUPUESTOID_CLIENTE.AsString;
       DMGS.CLABGRBORRADO := '0';
       DMGS.CLABGRTIPO :='2';
       OPEN;
     END;
    END
    ELSE
     WITH DMGS.CDSQ_CLIENTEAUX DO
     BEGIN
       CLOSE;
       DMGS.CLABGRNOMBRE:= '-11132132';
       DMGS.CLABGRBORRADO := '0';
       DMGS.CLABGRTIPO :='2';
       OPEN;
     END;

    LISTADOS := tLISTADOS.Create(nil);
    PREVIO := TPREVIO.Create(NIL);

    LISTADOS.FRDB.DataSet := DMGS.CDSQ_MDPRESUPUESTO;
    LISTADOS.FRDB1.DATASET := DMGS.CDSQ_MDLINPRESUPUESTO;
    LISTADOS.FRDB2.DataSet := DMGS.CDSQ_EMPRESAAUX;
    LISTADOS.FRDB3.DataSet := DMGS.CDSQ_CLIENTEAUX;

 //   Path := ExtractFilePath(ParamStr(0));
    if dmgs.CDSQ_EMPRESAAUXDESGLOSAR_IVA.value =1 then
      LISTADOS.frReport1.LoadFromFile(dmgs.Path + 'LISTADOS\PRESUPUESTOCONIVA.frf')
    else
      LISTADOS.frReport1.LoadFromFile(dmgs.Path + 'LISTADOS\PRESUPUESTO.frf');
    LISTADOS.frReport1.Preview := PREVIO.frPreview1;
    LISTADOS.frReport1.ShowReport;
    PREVIO.ShowModal;
    DSPRESUPUESTO.DataSet := DMGS.CDSQ_MDPRESUPUESTO;
    DSLINPRESUPUESTO.DataSet := DMGS.CDSQ_MDLINPRESUPUESTO;
    LISTADOS.Free;
    LISTADOS := NIL;
    PREVIO.FREE;
    PREVIO := NIL;
    DMGS.CDSQ_EMPRESAAUX.CLOSE;
    DMGS.CDSQ_CLIENTEAUX.CLOSE;

    DMGS.CDsq_MDPRESUPUESTO.GotoBookmark (BOOKMARK) ;
    DMGS.CDSQ_MDPRESUPUESTO.FreeBookmark(BOOKMARK);
    DMGS.CDsq_MDlinPRESUPUESTO.GotoBookmark (BOOKMARK1) ;
    DMGS.CDSQ_MDlinPRESUPUESTO.FreeBookmark(BOOKMARK1);

end;
procedure TPRESUPUESTO.DSPRESUPUESTOStateChange(Sender: TObject);
begin
    EstadoBotones;
end;
procedure TPRESUPUESTO.PRESUPUESTO1Click(Sender: TObject);
begin
    altas1.enabled:=baltas.enabled;
    bajas1.enabled:=bbajas.enabled;
    consultas1.enabled:=bconsultas.enabled;
    modificaciones1.enabled:=bmodificaciones.enabled;
end;



procedure TPRESUPUESTO.DSPRESUPUESTODataChange(Sender: TObject;
  Field: TField);
  VAR I:INTEGER;
      AUXBOOKMARK:TBOOKMARK;
begin
    COMPROBAREMPRESA;
    COMPROBARCLIENTE;
    IF ((DMGS.CDSQ_MDPRESUPUESTO.Eof)   AND (NOT (DMGS.CDSQ_MDPRESUPUESTO.STATE IN [DSEDIT,DSINSERT]))) THEN
    BEGIN
      try // para evitar el error de memoria bloqueada en el server.
        DMGS.CDSQ_MDPRESUPUESTO.GetNextPacket ;
      except
      end;
    END;
    tabsheet2.Caption:='Presup. '+dmgs.CDSQ_MDPRESUPUESTOID_PRESUPUESTO.AsString;
    estadobotones;
end;
procedure TPRESUPUESTO.DBEdit3Exit(Sender: TObject);
begin
  comprobarcliente;
end;


procedure TPRESUPUESTO.DBEdit3KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  IF (DMGS.CDSQ_MDPRESUPUESTO.STATE IN [DSEDIT,DSINSERT]) THEN
   BEGIN
   if key=112 then
    begin
        DMGS.cdsq_clienteaux.Close;
        dlgclienteAUX := tdlgclienteAUX.Create(NIL);
        if dlgclienteAUX.Showmodal=mrok then
        begin
            F1ENTRA:= TRUE;
            DMGS.cdsq_mdpresupuestoid_cliente.ASSTRING := dlgclienteaux.codigo;
        end;
        dlgclienteaux.Free;
        dlgclienteaux := nil;
    end
  end;
end;
procedure TPRESUPUESTO.BBAJAS2Click(Sender: TObject);
begin
    if (DMGS.CDSQ_MDLINPRESUPUESTO.recordcount>0) then
    begin
      DMGS.CDSQ_MDLINPRESUPUESTO.delete;
      DMGS.CDSQ_MDLINPRESUPUESTOafterpost(dmGS.CDSQ_MDLINPRESUPUESTO);
    end;
end;
procedure TPRESUPUESTO.DBGrid1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  IF (DMGS.CDSQ_MDLINPRESUPUESTO.STATE IN [DSEDIT,DSINSERT]) THEN
   BEGIN
   IF KEY=27 THEN
     DMGS.RLINEAPRESUPUESTO.ESCAPECDS := TRUE;

   if key=112 then //f1
    begin
      if UPPERCASE(TRIM(dbgrid1.SelectedField.FieldName)) ='ID_ARTICULO' then
       articulos;
    END;
   if key=113 then// f2
      if UPPERCASE(TRIM(dbgrid1.SelectedField.FieldName)) ='ID_ARTICULO' then
        arifas1.Click;
  end;
END;
procedure TPRESUPUESTO.DBNavigator1Click(Sender: TObject;
  Button: TNavigateBtn);
begin
  IF DMGS.CDSQ_MDPRESUPUESTO.Eof THEN
  try // para evitar el error de memoria bloqueada en el server.
     DMGS.CDSQ_MDPRESUPUESTO.GetNextPacket ;
  except
  end;
end;

procedure TPRESUPUESTO.DBGrid1ColEnter(Sender: TObject);
begin
IF (DMGS.CDSQ_MDLINPRESUPUESTO.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 TPRESUPUESTO.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_MDLINPRESUPUESTO.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 TPRESUPUESTO.DBGrid1KeyPress(Sender: TObject; var Key: Char);
BEGIN
   if (key = #46) then // 46 -> .
     if (dmgs.CDSQ_MDLINPRESUPUESTO.state in [dsedit,dsinsert]) then
       if (dbgrid1.SelectedField.DataType in [ftfloat,ftfmtbcd,ftbcd]) then
          key := #44 ;  //44->  ,

   if (key <> #27) then
       DMgs.RLINEAPRESUPUESTO.ESCAPECDS := false;
   if (key = #13) and not (DMGS.CDSQ_MDLINPRESUPUESTO.State in [dsedit,dsinsert]) then
    begin
        Perform(WM_NextDLGCtl, 0, 0);
        key:=#0;
    end;
   if (key = #13) and (DMGS.CDSQ_MDLINPRESUPUESTO.State in [dsedit,dsinsert]) then
   begin
        if dbgrid1.SelectedIndex = (dbgrid1.FieldCount - 2) then
        begin
              DMGS.CDSQ_MDLINPRESUPUESTO.Post;
        end
        else
           dbgrid1.SelectedIndex := dbgrid1.SelectedIndex + 1;
        key:=#0;
   end;
     if (key = #27) and not (DMGS.CDSQ_MDLINPRESUPUESTO.state in [dsedit,dsinsert])
     then
       close;
     if (key = #27) and not (ActiveControl is TButton) then
        DMgs.RLINEAPRESUPUESTO.ESCAPECDS:= true;
END;
PROCEDURE TPRESUPUESTO.COMPROBAREMPRESA ;
BEGIN
   IF TRIM(DMGS.CDSQ_MDPRESUPUESTOID_EMPRESA.ASSTRING)  <> '' THEN
    LABEL7.Caption := FMENU.NOMBREEMPRESA
   ELSE
    LABEL7.Caption := '';
END;

procedure TPRESUPUESTO.DBEdit2Exit(Sender: TObject);
begin
  IF (DMGS.CDSQ_MDPRESUPUESTO.STATE IN [DSEDIT,DSINSERT] ) THEN
   if   DMGS.RPRESUPUESTO.BUSCANDO  then
      buscar
   ELSE
      DMGS.CDSQ_MDPRESUPUESTO.Post;
end;
PROCEDURE TPRESUPUESTO.COMPROBARCLIENTE;
BEGIN
     if ((not (DMGS.CDSQ_MDPRESUPUESTOID_CLIENTE.IsNull)) AND (TRIM(DMGS.CDSQ_MDPRESUPUESTOID_CLIENTE.ASSTRING)<>'')) then
     begin
        if (TRIM(LABEL12.CAPTION) <> '') then
           begin
           if not (TRIM(LABEL12.CAPTION) = trim(DMGS.CDSQ_MDPRESUPUESTOID_CLIENTE.asstring))
           then
             begin
               DMGS.CDSQ_CLIENTEAUX.close;
               DMGS.CLABGRNOMBRE :=trim(DMGS.CDSQ_MDPRESUPUESTOID_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_MDPRESUPUESTOID_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 := '';
       label35.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;
      label31.Caption := DMGS.CDSQ_CLIENTEAUXVEHICULO.ASSTRING;
      label33.Caption := DMGS.CDSQ_CLIENTEAUXMATRICULA.ASSTRING;
      label35.Caption := DMGS.CDSQ_CLIENTEAUXTELEFONO.ASSTRING;      
    END ;
    DMGS.CDSQ_CLIENTEAUX.close;
END;
procedure TPRESUPUESTO.BMODIFICAR2Click(Sender: TObject);
begin
    if DMGS.CDSQ_MDLINPRESUPUESTO.recordcount>0 then
    begin
        DMGS.CDSQ_MDLINPRESUPUESTO.edit;
        DMGS.CDSQ_MDLINPRESUPUESTOID_ARTICULO.FocusControl;
    end;
end;

procedure TPRESUPUESTO.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 TPRESUPUESTO.DBEdit5Exit(Sender: TObject);
begin
 IF (DMGS.CDSQ_MDPRESUPUESTO.STATE IN [DSEDIT,DSINSERT]) THEN
  IF (DMGS.CDSQ_MDPRESUPUESTODESCUENTO.AsString = '')
     AND (NOT   DMGS.RPRESUPUESTO.BUSCANDO )
  THEN
     DMGS.CDSQ_MDPRESUPUESTODESCUENTO.ASSTRING := '0';
end;

procedure TPRESUPUESTO.DBEdit7Exit(Sender: TObject);
begin
 if (dmgs.cdsq_mdpresupuesto.State in [dsedit,dsinsert]) then
    if (trim(dbedit7.Text) ='') AND (NOT   DMGS.RPRESUPUESTO.BUSCANDO  )then
       dbedit7.Text := '0';

end;

procedure TPRESUPUESTO.DBGrid1DblClick(Sender: TObject);
begin
  IF (DMGS.CDSQ_MDLINPRESUPUESTO.STATE IN [DSEDIT,DSINSERT]) THEN
    begin
      if UPPERCASE(TRIM(dbgrid1.SelectedField.FieldName)) ='ID_ARTICULO' then
         articulos;
  end;
end;

procedure TPRESUPUESTO.DBEdit3DblClick(Sender: TObject);
begin
  IF (DMGS.CDSQ_MDPRESUPUESTO.STATE IN [DSEDIT,DSINSERT]) THEN
   BEGIN
        DMGS.cdsq_clienteaux.Close;
        dlgclienteAUX := tdlgclienteAUX.Create(NIL);
        if dlgclienteAUX.Showmodal=mrok then
        begin
            F1ENTRA:= TRUE;
            DMGS.cdsq_mdpresupuestoid_cliente.ASSTRING := dlgclienteaux.codigo;
        end;
        dlgclienteaux.Free;
        dlgclienteaux := nil;
  end;
end;

procedure TPRESUPUESTO.BLISTADO2Click(Sender: TObject);
VAR BOOKMARK:TBOOKMARK;
begin
    BOOKMARK := DMGS.CDsq_MDLINPRESUPUESTO.GetBookmark ;

    FPEDIRBASE := TFPEDIRBASE.CREATE(NIL);
    FPEDIRBASE.Edit1.Text := FLOATTOSTR(ROUNDTO(DMGS.CDSQ_MDPRESUPUESTOBASE_PRESUPUESTO.ASFLOAT,DMGS.DECIMALES));
    IF FPEDIRBASE.ShowModal = MROK THEN
    BEGIN
       IF TRIM(FPEDIRBASE.Edit1.Text) <> TRIM(DMGS.CDSQ_MDPRESUPUESTOBASE_PRESUPUESTO.AsString) THEN
       BEGIN
         DMGS.CDSQ_MDPRESUPUESTO.EDIT;
         DMGS.CDSQ_MDPRESUPUESTOBASE_PRESUPUESTO.AsString := FPEDIRBASE.Edit1.Text;
         DMGS.RPRESUPUESTO.PREGUNTA  := FALSE;
         DMGS.CDSQ_MDPRESUPUESTO.Post;
       END;
    END;
    FPEDIRBASE.Free;
    FPEDIRBASE := NIL;
    ESTADOBOTONES;

    DSPRESUPUESTO.DataSet := NIL; // HACE FALTA
    DSLINPRESUPUESTO.DataSet := NIL;

    WITH DMGS.CDSQ_EMPRESAAUX DO
    BEGIN
      Close;
      DMGS.VEMPRESASAUX.ID:= DMGS.CDSQ_MDPRESUPUESTOID_EMPRESA.AsString;
      DMGS.VEMPRESASAUX.TIPO :='2';
      OPEN;
    END;
    IF ((DMGS.CDSQ_MDPRESUPUESTOID_CLIENTE.ASSTRING) <> '' ) THEN
    BEGIN
     WITH DMGS.CDSQ_CLIENTEAUX DO
     BEGIN
       CLOSE;
       DMGS.CLABGRNOMBRE:= DMGS.CDSQ_MDPRESUPUESTOID_CLIENTE.AsString;
       DMGS.CLABGRBORRADO := '0';
       DMGS.CLABGRTIPO :='2';
       OPEN;
     END;
    END
    ELSE
     WITH DMGS.CDSQ_CLIENTEAUX DO
     BEGIN
       CLOSE;
       DMGS.CLABGRNOMBRE:= '-1116578';
       DMGS.CLABGRBORRADO := '0';
       DMGS.CLABGRTIPO :='2';
       OPEN;
     END;

    LISTADOS := tLISTADOS.Create(nil);
    PREVIO := TPREVIO.Create(NIL);

    LISTADOS.FRDB.DataSet := DMGS.CDSQ_MDPRESUPUESTO;
    LISTADOS.FRDB1.DATASET := DMGS.CDSQ_MDLINPRESUPUESTO;
    LISTADOS.FRDB2.DataSet := DMGS.CDSQ_EMPRESAAUX;
    LISTADOS.FRDB3.DataSet := DMGS.CDSQ_CLIENTEAUX;

 //   Path := ExtractFilePath(ParamStr(0));
    LISTADOS.frReport1.LoadFromFile(dmgs.Path + 'LISTADOS\PRESUPUESTO1.frf');
    LISTADOS.frReport1.Preview := PREVIO.frPreview1;
    LISTADOS.frReport1.ShowReport;
    PREVIO.ShowModal;
    DSPRESUPUESTO.DataSet := DMGS.CDSQ_MDPRESUPUESTO;
    DSLINPRESUPUESTO.DataSet := DMGS.CDSQ_MDLINPRESUPUESTO;
    LISTADOS.Free;
    LISTADOS := NIL;
    PREVIO.FREE;
    PREVIO := NIL;
    DMGS.CDSQ_EMPRESAAUX.CLOSE;
    DMGS.CDSQ_CLIENTEAUX.CLOSE;

    DMGS.CDsq_MDLINPRESUPUESTO.GotoBookmark (BOOKMARK) ;
    DMGS.CDSQ_MDLINPRESUPUESTO.FreeBookmark(BOOKMARK);

end;


procedure TPRESUPUESTO.ARIFAS1Click(Sender: TObject);
VAR BENEFICIO,TRANSPORTE:DOUBLE;
    FAMILIA:STRING;
    X:INTEGER;
begin
  IF (DMGS.CDSQ_MDLINPRESUPUESTO.STATE IN [DSEDIT,DSINSERT]) THEN
    BEGIN
      if UPPERCASE(TRIM(dbgrid1.SelectedField.FieldName)) ='ID_ARTICULO' then
      begin
          DLGTARIFASAUX := TDLGTARIFASAUX.CREATE(NIL);
          IF DLGTARIFASAUX.Showmodal=mrOk then
          begin
             F1ENTRA := TRUE;
             IF TRIM(DMGS.CDSQ_TARIFASAUXID_ARTICULO.AsString) = '' THEN
             BEGIN
                x:=DMGS.PedirConfirmacion('¿Confirma que desea darlo de alta como un artículo propio?',true,true,true);
                if x=mryes then
                begin
                  GRUPO := TGRUPO.CREATE(NIL);
                  IF GRUPO.SHOWMODAL=MROK THEN
                  BEGIN
                     BENEFICIO:= GRUPO.BENEFICIO;
                     FAMILIA:= GRUPO.GRUPO;
                     TRANSPORTE := GRUPO.TRANSPORTE ;
                     DMGS.PRIVATEINSERTARARTICULOS (DBGRID1,2,FAMILIA,BENEFICIO,TRANSPORTE);
                  END;
                  GRUPO.FREE;
                  GRUPO := NIL;
                end;
             END
             ELSE
             BEGIN
                  WITH DMGS.CDSQ_ARTICULOS  DO
                  BEGIN
                    CLOSE;
                    DMGS.VARTICULOS.ID := ' WHERE ID_ARTICULO='''+ DMGS.CDSQ_TARIFASAUXID_ARTICULO.ASSTRING+''' ';
                    DMGS.VARTICULOS.ORDEN:= ordenARTICULOS;//' ORDER BY ID_ARTICULO';
                    dmgs.VARTICULOS.TIPO := '2';
                    OPEN;
                  END;
             END;
             IF (DMGS.CDSQ_ARTICULOS.Active)
             AND (DMGS.CDSQ_ARTICULOS.RecordCount > 0) THEN
             BEGIN
              dmgs.cdsq_mdLINpresupuestOID_ARTICULO.asstring:=DMGS.CDSQ_ARTICULOSID_ARTICULO.ASSTRING;
              DMGS.CDSQ_MDLINPRESUPUESTODESCRIPCION.ASSTRING:= DMGS.CDSQ_ARTICULOSDESCRIPCION.ASSTRING;
              DMGS.CDSQ_MDLINPRESUPUESTOPRECIO.ASCURRENCY := ROUNDTO(DMGS.CDSQ_ARTICULOSPRECIO_VENTA.ASCURRENCY,DMGS.DECIMALES);
              dmgs.cdsq_mdlinpresupuestoiva.asfloat := DMGS.CDSQ_ARTICULOSIVA.asfloat;
              DMGS.CDSQ_MDLINPRESUPUESTOMARCA.ASSTRING:= DMGS.CDSQ_ARTICULOSMARCA.ASSTRING;
              dmgs.CDsq_MDLINPRESUPUESTOid_proveedor.VALUE  :=DMGS.CDSQ_articulosid_proveedor.VALUE;
              dmgs.CDsq_MDLINPRESUPUESTOart_proveedor.AsString  :=DMGS.CDSQ_articulosART_proveedor.ASSTRING;
              dmgs.CDsq_MDLINPRESUPUESTOPRECIO_COSTE.ASCURRENCY :=ROUNDTO(DMGS.CDSQ_ARTICULOSPRECIO_COSTE.ASCURRENCY,DMGS.DECIMALES);
              dbgrid1.selectedindex:=dbgrid1.selectedindex+1;
             END
             else
             if x=mrno then
             begin
//              dmgs.cdsq_mdLINpresupuestOID_ARTICULO.asstring:=DMGS.CDSQ_ARTICULOSID_ARTICULO.ASSTRING;
              DMGS.CDSQ_MDLINPRESUPUESTODESCRIPCION.ASSTRING:= DMGS.CDSQ_tarifasauxNOMBRE.ASSTRING;
              DMGS.CDSQ_MDLINPRESUPUESTOPRECIO.ASCURRENCY := ROUNDTO(DMGS.CDSQ_tarifasauxPRECIO.ASCURRENCY,DMGS.DECIMALES);
              dmgs.cdsq_mdlinpresupuestoiva.asfloat := DMGS.CDSQ_tarifasauxIVA.asfloat;
              DMGS.CDSQ_MDLINPRESUPUESTOMARCA.ASSTRING:= DMGS.CDSQ_tarifasauxMARCA.ASSTRING;
              dmgs.CDsq_MDLINPRESUPUESTOid_proveedor.VALUE  :=DMGS.CDSQ_tarifasauxid_proveedor.VALUE;
              dmgs.CDsq_MDLINPRESUPUESTOart_proveedor.AsString  :=DMGS.CDSQ_tarifasauxART_proveedor.ASSTRING;
              dmgs.CDsq_MDLINPRESUPUESTOPRECIO_COSTE.ASCURRENCY :=ROUNDTO(DMGS.CDSQ_tarifasauxPRECIO.ASCURRENCY,DMGS.DECIMALES);
              dbgrid1.selectedindex:=dbgrid1.selectedindex+1;
             end;
             DMGS.CDSQ_TARIFASAUX.CLOSE;
             DMGS.CDSQ_ARTICULOS.CLOSE;
          end;
          DLGTARIFASAUX.Free;
          DLGTARIFASAUX := NIL;
       END;
     END;
end;

procedure TPRESUPUESTO.DSLINPRESUPUESTODataChange(Sender: TObject;
  Field: TField);
begin
    fmenu.StatusBar1.SimpleText  := dmgs.cdsq_mdlinpresupuestoDESCRIPCION.AsString ;
end;

procedure TPRESUPUESTO.BCANTIDADClick(Sender: TObject);
begin
  IF DMGS.CDSQ_MDLINPRESUPUESTO.ACTIVE
  AND (TRIM(DMGS.CDSQ_MDLINPRESUPUESTOID_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_MDLINPRESUPUESTOID_ARTICULO.AsString+''' AND ID_EMPRESA='+DMGS.CDSQ_MDLINPRESUPUESTOID_EMPRESA.ASSTRING;
       OPEN;
     END;
     IF DMGS.CDSQ_ALMACENAUX.RecordCount > 0 THEN
        CANTIDAD.Showmodal;
     CANTIDAD.Free;
     CANTIDAD := nil;
end;

procedure TPRESUPUESTO.Action1Execute(Sender: TObject);
begin
  IF (DBGRID1.Columns [9].VISIBLE)
  THEN
    DBGRID1.Columns [9].VISIBLE := FALSE
  ELSE
    DBGRID1.Columns [9].VISIBLE := true;
end;
procedure TPRESUPUESTO.articulos;
begin
 if ( dmgs.cdsq_mdlinpresupuesto.State in [dsedit,dsinsert]) then
 begin
     DLGARTICULOSAUX := TDLGARTICULOSAUX.CREATE(NIL);
     IF DLGARTICULOSAUX.Showmodal=mrOk then
     begin
           F1ENTRA := TRUE;
{           dmgs.cdsq_mdLINpresupuestOID_ARTICULO.asstring:=DLGARTICULOSAUX.codigo;
           DMGS.CDSQ_MDLINPRESUPUESTODESCRIPCION.ASSTRING:= DLGARTICULOSAUX.DESCRIPCION;
           DMGS.CDSQ_MDLINPRESUPUESTOPRECIO.asfloat := ROUNDTO(strtofloat(DLGARTICULOSAUX.PRECIO),DMGS.DECIMALES);
           DMGS.CDsq_MDLINPRESUPUESTOPRECIO_COSTE.asfloat :=ROUNDTO(DMGS.CDSQ_ARTICULOSAUXPRECIO_COSTE.asfloat,DMGS.DECIMALES);
           DMGS.CDSQ_MDLINPRESUPUESTOID_PROVEEDOR.ASSTRING:= DMGS.CDSQ_ARTICULOSAUXID_PROVEEDOR.AsString;
           DMGS.CDSQ_MDLINPRESUPUESTOART_PROVEEDOR.ASSTRING := DMGS.CDSQ_ARTICULOSAUXART_PROVEEDOR.AsString;
           dmgs.cdsq_mdlinpresupuestoiva.asstring := dlgarticulosaux.iva;
           DMGS.CDSQ_MDLINPRESUPUESTOMARCA.ASSTRING:= DLGARTICULOSAUX.MARCA;
           DMGS.CDSQ_MDLINPRESUPUESTOART_PROVEEDOR.ASSTRING := DMGS.CDSQ_ARTICULOSAUXART_PROVEEDOR.AsString;
           DMGS.CDSQ_MDLINPRESUPUESTOID_PROVEEDOR.AsString := DMGS.CDSQ_ARTICULOSAUXID_PROVEEDOR.ASSTRING;
           dbgrid1.selectedindex:=dbgrid1.selectedindex+1;
}             pfunciones.Borrar;
             pfunciones.Albaran := true;
             pfunciones.Esta(DLGARTICULOSAUX.codigo,FALSE,DLGARTICULOSAUX.PRECIO,DLGARTICULOSAUX.PRECIO2,'X',DMGS.CDSQ_MDPRESUPUESTOID_EMPRESA.AsString,DMGS.CDSQ_MDPRESUPUESTOANYO.AsString);
             dmgs.cdsq_MDLINPRESUPUESTOID_ARTICULO.asstring:=pfunciones.ID_ARTICULO;
             DMGS.CDSQ_MDLINPRESUPUESTODESCRIPCION.ASSTRING:= pfunciones.DESCRIPCION;
             DMGS.CDSQ_MDLINPRESUPUESTOPRECIO.ASfloat := pfunciones.precio;//OBTENERPRECIOVENTA(TRUE,'0','0'); //ROUNDTO(DMGS.CDSQ_ARTICULOEANPRECIO_VENTA.ASfloat,DMGS.DECIMALES);
             dmgs.cdsq_MDLINPRESUPUESTOiva.asstring := pfunciones.IVA;
             DMGS.CDSQ_MDLINPRESUPUESTOMARCA.ASSTRING := pfunciones.MARCA;
             DMGS.CDSQ_MDLINPRESUPUESTOID_PROVEEDOR.ASSTRING:= DMGS.CDSQ_ARTICULOSAUXID_PROVEEDOR.AsString;
             DMGS.CDSQ_MDLINPRESUPUESTOART_PROVEEDOR.ASSTRING := DMGS.CDSQ_ARTICULOSAUXART_PROVEEDOR.AsString;
//             DMGS.CDSQ_MDLINPRESUPUESTOCODIGO_BARRAS.AsString := pfunciones.Codigo_barras ;
             DMGS.CDSQ_MDLINPRESUPUESTOprecio_coste.asfloat := pfunciones.PrecioCoste ;
             dbgrid1.selectedindex:=dbgrid1.selectedindex+1;
      end;
      DLGARTICULOSAUX.Free;
      DLGARTICULOSAUX := NIL;
 end;

end;

procedure TPRESUPUESTO.ACOPIARExecute(Sender: TObject);
 var x:integer;
     presupuesto,anyo,empresa:string;
     Save_Cursor:TCursor;
begin
    x:=dmgs.PedirConfirmacion('¿Confirma que desea copiar este presupuesto a uno nuevo?',true,true,true);
    case x of
        mrno: abort;
        mrcancel: abort;
    end;
    with dmgs do
    begin
      presupuesto:=cdsq_mdpresupuestoid_presupuesto.AsString;
      anyo:=cdsq_mdpresupuestoanyo.AsString;
      empresa:=cdsq_mdpresupuestoid_empresa.AsString;
      cdsq_mdpresupuesto.Close;
      with CDSQ_MDPRESUPUESTOAUX do
      BEGIN
        Close;
        VPRESUPUESTOAUX.ID :=' and id_presupuesto='+presupuesto+' and id_empresa='+empresa+' and anyo='+anyo;
        VPRESUPUESTOAUX.TIPO := '2';
        VPRESUPUESTOAUX.ORDENLINEA := ordenlinpresupuesto;
        Open;
      end;
      BAltasClick(sender);
//      cdsq_mdpresupuesto.Append;
//      cdsq_mdpresupuestoid_presupuesto.AsString := cdsq_mdpresupuestoauxid_presupuesto.AsString;
//      cdsq_mdpresupuestoid_empresa.AsString := cdsq_mdpresupuestoauxid_emrpesa.AsString;
//      cdsq_mdpresupuestoanyo.AsString := cdsq_mdpresupuestoauxanyo.AsString;
      cdsq_mdpresupuestoid_cliente.AsString := cdsq_mdpresupuestoauxid_cliente.AsString;
      cdsq_mdpresupuestobase_presupuesto.AsString := cdsq_mdpresupuestoauxbase_presupuesto.AsString;
      cdsq_mdpresupuestofecha.AsString := cdsq_mdpresupuestoauxfecha.AsString;
      cdsq_mdpresupuestodescuento.AsString := cdsq_mdpresupuestoauxdescuento.AsString;
      cdsq_mdpresupuestoiva.AsString := cdsq_mdpresupuestoauxiva.AsString;
      cdsq_mdpresupuestore.AsString := cdsq_mdpresupuestoauxre.AsString;
//       cdsq_mdpresupuestovalidez.AsString := cdsq_mdpresupuestoauxvalidez.AsString;
      cdsq_mdpresupuestoobservaciones.AsString := cdsq_mdpresupuestoauxobservaciones.AsString;
      rpresupuesto.PREGUNTA := false;
      CDsq_MDLINPRESUPUESTOaux.First;
      cdsq_mdlinpresupuesto.DisableControls;
      Save_Cursor := Screen.Cursor;
      Screen.Cursor := crHourGlass;
      SHOWMESSAGE(' Nº DE LINEAS '+INTTOSTR(DMGS.CDSQ_MDLINPRESUPUESTOAUX.RECORDCOUNT));
      while not cdsq_mdlinpresupuestoaux.Eof do
      begin
             WITH CDSQ_MDLINPRESUPUESTO  DO
             BEGIN
              IF NOT Active THEN
                OPEN;
              LAST;
              APPEND;
             END;
//        cdsq_mdlinpresupuesto.append;
        cdsq_mdlinpresupuestoid_articulo.AsString := cdsq_mdlinpresupuestoauxid_articulo.AsString;
        cdsq_mdlinpresupuestocantidad.AsString := cdsq_mdlinpresupuestoauxcantidad.AsString;
        cdsq_mdlinpresupuestodescuento.AsString := cdsq_mdlinpresupuestoauxdescuento.AsString;
        cdsq_mdlinpresupuestoprecio.asfloat := ROUNDTO(cdsq_mdlinpresupuestoauxprecio.asfloat,DMGS.DECIMALES);
        cdsq_mdlinpresupuestoimporte.AsString := cdsq_mdlinpresupuestoauximporte.AsString;
        cdsq_mdlinpresupuestoimporte_fact.AsString := cdsq_mdlinpresupuestoauximporte_fact.AsString;
        cdsq_mdlinpresupuestoestado.AsString := cdsq_mdlinpresupuestoauxestado.AsString;
        cdsq_mdlinpresupuestodescripcion.AsString := cdsq_mdlinpresupuestoauxdescripcion.AsString;
        cdsq_mdlinpresupuestobase_linea.AsString := cdsq_mdlinpresupuestoauxbase_linea.AsString;
        cdsq_mdlinpresupuestoiva.AsString := cdsq_mdlinpresupuestoauxiva.AsString;
        cdsq_mdlinpresupuestomarca.AsString := cdsq_mdlinpresupuestoauxmarca.AsString;
        cdsq_mdlinpresupuestoprecio_coste.asfloat := ROUNDTO(cdsq_mdlinpresupuestoauxprecio_coste.asfloat,DMGS.DECIMALES);
        cdsq_mdlinpresupuestoart_proveedor.AsString := cdsq_mdlinpresupuestoauxart_proveedor.AsString;
        cdsq_mdlinpresupuestoid_proveedor.AsString := cdsq_mdlinpresupuestoauxid_proveedor.AsString;

        RLINEAPRESUPUESTO.PREGUNTA := false;
        cdsq_mdlinpresupuesto.Post;
        cdsq_mdlinpresupuestoaux.next;
        SHOWMESSAGE(' Nº DE LINEAS '+INTTOSTR(DMGS.CDSQ_MDLINPRESUPUESTOAUX.RecNo));
      end;
      cdsq_mdlinpresupuesto.EnableControls;
      Screen.Cursor := save_cursor;
    end;
end;
FUNCTION  TPRESUPUESTO.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 TPRESUPUESTO.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_MDLINPRESUPUESTOID_ARTICULO' THEN
    IF dmgs.CDSQ_MDLINPRESUPUESTO.IndexFIELDNameS = '' THEN
       dmgs.CDSQ_MDLINPRESUPUESTO.IndexFIELDNameS := 'ID_ARTICULO' // ORDENA ASCENDENTE
    ELSE
       DMGS.CDSQ_MDLINPRESUPUESTO.IndexName := 'ID_ARTICULOINDEX'; // ORDENA DESCENDENTE

 IF AUX = 'CDSQ_MDLINPRESUPUESTOMARCA' THEN
    IF dmgs.CDSQ_MDLINPRESUPUESTO.IndexFIELDNameS = '' THEN
       dmgs.CDSQ_MDLINPRESUPUESTO.IndexFIELDNameS := 'MARCA' // ORDENA ASCENDENTE
    ELSE
       DMGS.CDSQ_MDLINPRESUPUESTO.IndexName := 'MARCAINDEX'; // ORDENA DESCENDENTE

 IF AUX = 'CDSQ_MDLINPRESUPUESTOID_PROVEEDOR' THEN
    IF dmgs.CDSQ_MDLINPRESUPUESTO.IndexFIELDNameS = '' THEN
       dmgs.CDSQ_MDLINPRESUPUESTO.IndexFIELDNameS := 'ID_PROVEEDOR' // ORDENA ASCENDENTE
    ELSE
       DMGS.CDSQ_MDLINPRESUPUESTO.IndexName := 'ID_PROVEEDORINDEX'; // ORDENA DESCENDENTE

 IF AUX = 'CDSQ_MDLINPRESUPUESTOART_PROVEEDOR' THEN
    IF dmgs.CDSQ_MDLINPRESUPUESTO.IndexFIELDNameS = '' THEN
       dmgs.CDSQ_MDLINPRESUPUESTO.IndexFIELDNameS := 'ART_PROVEEDOR' // ORDENA ASCENDENTE
    ELSE
       DMGS.CDSQ_MDLINPRESUPUESTO.IndexName := 'ART_PROVEEDORINDEX'; // ORDENA DESCENDENTE

 IF AUX = 'CDSQ_MDLINPRESUPUESTODESCRIPCION' THEN
    IF dmgs.CDSQ_MDLINPRESUPUESTO.IndexFIELDNameS = '' THEN
       dmgs.CDSQ_MDLINPRESUPUESTO.IndexFIELDNameS := 'DESCRIPCION' // ORDENA ASCENDENTE
    ELSE
       DMGS.CDSQ_MDLINPRESUPUESTO.IndexName := 'DESCRIPCIONINDEX'; // ORDENA DESCENDENTE

 IF AUX = 'CDSQ_MDLINPRESUPUESTOCANTIDAD' THEN
    IF dmgs.CDSQ_MDLINPRESUPUESTO.IndexFIELDNameS = '' THEN
       dmgs.CDSQ_MDLINPRESUPUESTO.IndexFIELDNameS := 'CANTIDAD' // ORDENA ASCENDENTE
    ELSE
       DMGS.CDSQ_MDLINPRESUPUESTO.IndexName := 'CANTIDADINDEX'; // ORDENA DESCENDENTE

 IF AUX = 'CDSQ_MDLINPRESUPUESTODESCUENTO' THEN
    IF dmgs.CDSQ_MDLINPRESUPUESTO.IndexFIELDNameS = '' THEN
       dmgs.CDSQ_MDLINPRESUPUESTO.IndexFIELDNameS := 'DESCUENTO' // ORDENA ASCENDENTE
    ELSE
       DMGS.CDSQ_MDLINPRESUPUESTO.IndexName := 'DESCUENTOINDEX'; // ORDENA DESCENDENTE

 IF AUX = 'CDSQ_MDLINPRESUPUESTOPRECIO' THEN
    IF dmgs.CDSQ_MDLINPRESUPUESTO.IndexFIELDNameS = '' THEN
       dmgs.CDSQ_MDLINPRESUPUESTO.IndexFIELDNameS := 'PRECIO' // ORDENA ASCENDENTE
    ELSE
       DMGS.CDSQ_MDLINPRESUPUESTO.IndexName := 'PRECIOINDEX'; // ORDENA DESCENDENTE

 IF AUX = 'CDSQ_MDLINPRESUPUESTOIMPORTE' THEN
    IF dmgs.CDSQ_MDLINPRESUPUESTO.IndexFIELDNameS = '' THEN
       dmgs.CDSQ_MDLINPRESUPUESTO.IndexFIELDNameS := 'IMPORTE' // ORDENA ASCENDENTE
    ELSE
       DMGS.CDSQ_MDLINPRESUPUESTO.IndexName := 'IMPORTEINDEX'; // ORDENA DESCENDENTE

 IF AUX = 'CDSQ_MDLINPRESUPUESTOPRECIO_COSTE' THEN
    IF dmgs.CDSQ_MDLINPRESUPUESTO.IndexFIELDNameS = '' THEN
       dmgs.CDSQ_MDLINPRESUPUESTO.IndexFIELDNameS := 'PRECIO_COSTE' // ORDENA ASCENDENTE
    ELSE
       DMGS.CDSQ_MDLINPRESUPUESTO.IndexName := 'PRECIO_COSTEINDEX'; // ORDENA DESCENDENTE
end;

procedure TPRESUPUESTO.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 TPRESUPUESTO.DBGrid2MouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);
VAR
  PT :TGRIDCOORD;
begin
  PT := DBGRID2.MouseCoord(X,Y);
  IF PT.Y=0 THEN
     DBGRID2.Cursor := CRHANDPOINT
  ELSE
     DBGRID2.Cursor := CRDEFAULT;
end;

end.





