unit FFACTURA;

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,FmtBcd, ffunciones;

type
  TFACTURA = class(TForm)
    Panel1: TPanel;
    Panel3: TPanel;
    Panel4: TPanel;
    Label23: TLabel;
    Label25: TLabel;
    Label26: TLabel;
    Label27: TLabel;
    Label28: TLabel;
    Label29: TLabel;
    Menu: TMainMenu;
    FACTURA1: 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;
    DSFACTURA: 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;
    DSLINEAFACTURA: 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;
    ALISTADO2: TAction;
    Label20: TLabel;
    DBEdit8: TDBEdit;
    BPRESUPUESTO: TToolButton;
    Label21: TLabel;
    DBEdit9: TDBEdit;
    Label22: TLabel;
    DBText4: TDBText;
    Label32: TLabel;
    DBText7: TDBText;
    Label33: TLabel;
    BFACTURA: TToolButton;
    ToolButton1: TToolButton;
    Label24: TLabel;
    DBEdit10: TDBEdit;
    Label30: TLabel;
    Label34: TLabel;
    DBText5: TDBText;
    Label31: TLabel;
    MainMenu1: TMainMenu;
    BCANTIDAD: TToolButton;
    ACANTIDAD: TAction;
    ACOBRAR: TAction;
    BCOBRO: TToolButton;
    AEURO: TAction;
    BEURO: TToolButton;
    Label35: TLabel;
    DBText6: TDBText;
    Label36: TLabel;
    DBText8: TDBText;
    Label37: TLabel;
    DBText9: TDBText;
    ToolButton3: TToolButton;
    ATICKET: TAction;
    Label38: TLabel;
    DBText10: TDBText;
    DBText11: TDBText;
    DBText12: TDBText;
    DBEdit11: TDBEdit;
    Label39: TLabel;
    Label40: TLabel;
    Label41: TLabel;
    Label42: TLabel;
    Label43: 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 DSFACTURAStateChange(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 FACTURA1Click(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 DSFACTURADataChange(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 DSLINEAFACTURAStateChange(Sender: TObject);
    procedure BALTAS2Click(Sender: TObject);
    procedure BBAJAS2Click(Sender: TObject);
    procedure DBEdit3Exit(Sender: TObject);
    procedure DBEdit3KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    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 DBEdit8KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure DBEdit8DblClick(Sender: TObject);
    procedure DBEdit8Exit(Sender: TObject);
    procedure BPRESUPUESTOClick(Sender: TObject);
    procedure BFACTURAClick(Sender: TObject);
    procedure ToolButton1Click(Sender: TObject);
    procedure DBEdit10DblClick(Sender: TObject);
    procedure DBEdit10Exit(Sender: TObject);
    procedure DBEdit10KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure ACANTIDADExecute(Sender: TObject);
    procedure ACOBRARExecute(Sender: TObject);
    procedure AEUROExecute(Sender: TObject);
    procedure ATICKETExecute(Sender: TObject);
    procedure DBEdit11KeyPress(Sender: TObject; var Key: Char);
    procedure DBEdit5Enter(Sender: TObject);
    procedure DBEdit5KeyPress(Sender: TObject; var Key: Char);
    procedure DBEdit11Enter(Sender: TObject);
    procedure DBEdit11Exit(Sender: TObject);
    FUNCTION FABRIRCAJON(IMPRESORA:INTEGER):BOOLEAN;
    procedure DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure DBGrid1TitleClick(Column: TColumn);
  private
    { Private declarations }
    F1ENTRA,EURO,PORCIEN :BOOLEAN;
    EUROVALOR,PORCIENVALOR:STRING;
    SORDEN:STRING;
    pfunciones : tfunciones;

    procedure EstadoBotones;
    procedure buscar;
    function fechas(sender:tobject):boolean;
    PROCEDURE INSERTARALBARAN(ID_FACTURA,ANYO,ID_EMPRESA,ID_SERIE,ID_ALBARAN,ALBANYO,ALBID_EMPRESA,ALBID_SERIE,BASE_FACTURA,TIPO:STRING) ;
    FUNCTION COMPROBARTICKETS:BOOLEAN;
    PROCEDURE INSERTARCOBROS;
    PROCEDURE ANYADIRCOBROAFACTURA;
  public
    { Public declarations }
    ver: string;
    ARORDEN : TORDEN;

    PROCEDURE COMPROBAREMPRESA;
    PROCEDURE COMPROBARCLIENTE;
    PROCEDURE COMPROBARFORMAPAGO;
    FUNCTION  COMPROBARCOBRADO(AUX:SMALLINT):BOOLEAN;
    FUNCTION COMPROBARALBARANES:BOOLEAN;    

  end;

var
  FACTURA: TFACTURA;

implementation

uses FDLGCLIENTE, RUTINAS, UDMgs, fdlgarticulos,
  FDLGFAMILIASAUX, menu, DLGCOLORESAUX, FEAN, FDLGFACTURA,
  FDLGCLIENTEAUX, FDLGARTICULOSAUX, FLISTADOS, fprevio, PEDIRBASE,
  DLGSERIESAUX, FDLGPRESUPUESTOAUX, FDLGALBARANAUX, DLGFORMAPAGOAUX,
  FLISTADOOPCIONES, FCANTIDAD, FCOBRO, FDLGMDTICKETAUX, FDLGTICKETAUX,
  fcajaFACTURAS;

{$R *.DFM}





//*******************************************************************//
//*******************************************************************//



procedure TFACTURA.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_MDLINEAFACTURA.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_MDLINEAFACTURAID_ARTICULO.AsString)<>'' )
    then
    BEGIN
      // ver 3.0
{  WITH DMGS.CDSQ_MAXIMO DO
  BEGIN
   CLOSE;
   COMMANDTEXT := ' SELECT ID_ARTICULO FROM ALMACEN WHERE CODIGO_BARRAS='''+UPPERCASE(DMGS.CDSQ_MDLINEAFACTURAID_ARTICULO.ASSTRING)+''' ';
   OPEN;
   IF DMGS.CDSQ_MAXIMO.RECORDCOUNT > 0 THEN
   BEGIN
      DMGS.CDSQ_MDLINEAFACTURACODIGO_BARRAS.AsString := UPPERCASE(DMGS.CDSQ_MDLINEAFACTURAID_ARTICULO.ASSTRING);
      DMGS.CDSQ_MDLINEAFACTURAID_ARTICULO.ASSTRING := UPPERCASE(DMGS.CDSQ_MAXIMO.Fields[0].AsString);
   END;
   CLOSE;
  END;
} //

      pfunciones.Borrar;
      pfunciones.factura := true;
      pfunciones.Esta(UPPERCASE(DMGS.CDSQ_MDLINEAFACTURAID_ARTICULO.ASSTRING),FALSE,'0','0',DMGS.CDSQ_MDfacturaID_SERIE.AsString,DMGS.CDSQ_MDfacturaID_EMPRESA.AsString,DMGS.CDSQ_MDfacturaANYO.AsString);
      dmgs.cdsq_MDLINEAfacturaID_ARTICULO.asstring:=pfunciones.ID_ARTICULO;
      DMGS.CDSQ_MDLINEAfacturaDESCRIPCION.ASSTRING:= pfunciones.DESCRIPCION;
      DMGS.CDSQ_MDLINEAfacturaPRECIO.ASfloat := pfunciones.precio;
//      ROUNDTO(DMGS.CDSQ_ARTICULOEANPRECIO_VENTA.ASfloat/(1+DMGS.CDSQ_MDFACTURAIVA.ASfloat/100),DMGS.DECIMALES)
      dmgs.cdsq_MDLINEAfacturaiva.asstring := pfunciones.IVA;
      DMGS.CDSQ_MDLINEAfacturaMARCA.ASSTRING := pfunciones.MARCA;
      DMGS.CDSQ_MDLINEAfacturaCODIGO_BARRAS.AsString := pfunciones.Codigo_barras ;
      DMGS.CDSQ_MDLINEAfacturaprecio_coste.asfloat := pfunciones.PrecioCoste ;
      dbgrid1.selectedindex:=dbgrid1.selectedindex+1;
 {
     WITH DMGS.CDSQ_ARTICULOEAN DO
     BEGIN
       CLOSE;
       DMGS.AREBGRID  := UPPERCASE(DMGS.CDSQ_MDLINEAFACTURAID_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_MDLINEAFACTURAID_ARTICULO.asstring:=DMGS.CDSQ_ARTICULOEANID_ARTICULO.ASSTRING;
          DMGS.CDSQ_MDLINEAFACTURADESCRIPCION.ASSTRING:= DMGS.CDSQ_ARTICULOEANDESCRIPCION.AsString;
          DMGS.CDSQ_MDLINEAFACTURAPRECIO.ASfloat := ROUNDTO(DMGS.CDSQ_ARTICULOEANPRECIO_VENTA.ASfloat/(1+DMGS.CDSQ_MDFACTURAIVA.ASfloat/100),DMGS.DECIMALES);
          IF (DMGS.CDSQ_ARTICULOEANIVA.ASSTRING ='0') OR
           (DMGS.CDSQ_ARTICULOEANIVA.IsNull) THEN
                dmgs.cdsq_MDLINEAFACTURAiva.asstring := DMGS.CDSQ_MDFACTURAIVA.AsString
          ELSE
                dmgs.cdsq_MDLINEAFACTURAiva.asstring := DMGS.CDSQ_ARTICULOEANIVA.AsString;
          DMGS.CDSQ_MDLINEAFACTURAMARCA.ASSTRING := DMGS.CDSQ_ARTICULOEANMARCA.AsString;
          dbgrid1.selectedindex:=dbgrid1.selectedindex+1;
       END
       ELSE
       BEGIN
          DMGS.CDSQ_MDLINEAFACTURADESCRIPCION.ASSTRING:= '';
          DMGS.CDSQ_MDLINEAFACTURAPRECIO.ASSTRING := '';
          dmgs.cdsq_MDLINEAFACTURAiva.asstring := '';
       END;
       DMGS.CDSQ_ARTICULOEAN.CLOSE;
     END;
 }
  end;

  IVA := ROUNDTO((1 + (DMGS.CDSQ_MDFACTURAIVA.ASfloat/100)),DMGS.DECIMALES);
  PVPSINIVA :=ROUNDTO((DMGS.CDSQ_MDLINEAFACTURAPRECIO.ASfloat/IVA),DMGS.DECIMALES);
  DESCUENTO := ROUNDTO(DMGS.CDSQ_MDLINEAFACTURADESCUENTO.ASfloat/100,DMGS.DECIMALESDES);
  CANTIDAD := ROUNDTO(DMGS.CDSQ_MDLINEAFACTURACANTIDAD.ASfloat,DMGS.DECIMALES);
  IVA :=ROUNDTO(DMGS.CDSQ_MDLINEAFACTURAPRECIO.ASCURRENCY,DMGS.DECIMALES);

  if DMGS.CDSQ_MDLINEAFACTURADESCUENTO.ASfloat <> 0 then
     DESCUENTO := ROUNDTO(DMGS.CDSQ_MDLINEAFACTURADESCUENTO.ASfloat/100,DMGS.DECIMALES);
  if DMGS.CDSQ_MDLINEAFACTURADESCUENTOEURO.ASfloat <> 0 then
     DESCUENTO := ROUNDTO(DMGS.CDSQ_MDLINEAFACTURADESCUENTOEURO.ASfloat,DMGS.DECIMALES);
  IF DESCUENTO <> 0 THEN
  BEGIN
    IF DMGS.CDSQ_MDLINEAFACTURADESCUENTOEURO.ASfloat <> 0 THEN
       DMGS.CDSQ_MDLINEAFACTURAIMPORTE.ASfloat := ROUNDTO((CANTIDAD *DMGS.CDSQ_MDLINEAFACTURAPRECIO.AsCurrency)- DESCUENTO,-2)
    ELSE
     DMGS.CDSQ_MDLINEAFACTURAIMPORTE.ASfloat := ROUNDTO(CANTIDAD *DMGS.CDSQ_MDLINEAFACTURAPRECIO.AsCurrency* (1 - DESCUENTO),-2)  ;
  END
  ELSE
     DMGS.CDSQ_MDLINEAFACTURAIMPORTE.ASfloat := ROUNDTO(CANTIDAD *DMGS.CDSQ_MDLINEAFACTURAPRECIO.AsCurrency* (1 - DESCUENTO),-2)  ;


{  // EL DESCUENTO SE APLICA AL PRECIO DEL ARTICULO SIN IVA. ME DA IGUAL
  IVA := ROUNDTO((1 + (DMGS.CDSQ_MDFACTURAIVA.ASfloat/100)),DMGS.DECIMALES);
  PVPSINIVA :=ROUNDTO((DMGS.CDSQ_MDLINEAFACTURAPRECIO.ASfloat/IVA),DMGS.DECIMALES);
  DESCUENTO := ROUNDTO(DMGS.CDSQ_MDLINEAFACTURADESCUENTO.ASfloat/100,DMGS.DECIMALESDES);
  CANTIDAD := ROUNDTO(DMGS.CDSQ_MDLINEAFACTURACANTIDAD.ASfloat,DMGS.DECIMALES);
  IVA :=ROUNDTO(DMGS.CDSQ_MDLINEAFACTURAPRECIO.ASCURRENCY,DMGS.DECIMALES);

  DMGS.CDSQ_MDLINEAFACTURAIMPORTE.ASfloat := ROUNDTO(CANTIDAD * ROUNDTO(DMGS.CDSQ_MDLINEAFACTURAPRECIO.AsCurrency,DMGS.DECIMALESmon)  * (1 - DESCUENTO),DMGS.DECIMALESmon);
//  DMGS.CDSQ_MDLINEAFACTURABASE_LINEA.ASfloat := IVA * CANTIDAD * (PVPSINIVA - (PVPSINIVA*DESCUENTO))
//  DMGS.CDSQ_MDLINEAFACTURABASE_LINEA.ASfloat := CANTIDAD * ROUNDTO(DMGS.CDSQ_MDLINEAFACTURAPRECIO.AsCurrency,-5)  * (1 - DESCUENTO)
}

 END;
 F1ENTRA := FALSE;
end;



procedure TFACTURA.FormActivate(Sender: TObject);
begin
{  IF NOT FMENU.VISTACLIENTE THEN
  BEGIN
    LABEL16.Visible := FALSE;
    DBEDIT6.VISIBLE := FALSE;
    DBGRID1.Columns[5].Visible := FALSE;
    DBGRID1.Columns[6].Visible := FALSE;
    DBGRID1.Columns[7].Visible := FALSE;
  END
  ELSE
  BEGIN
    LABEL16.Visible := TRUE;
    DBEDIT6.VISIBLE := TRUE;
    DBGRID1.Columns[5].Visible := TRUE;
    DBGRID1.Columns[6].Visible := TRUE;
    DBGRID1.Columns[7].Visible := TRUE;
  END;
}
end;

procedure TFACTURA.BBUSQUEDAClick(Sender: TObject);
begin
// FUNCION PARA HACER LA BUSQUEDA,
//HACERLO CON PRESUPUESTO.
  DMGS.CDSQ_MDFACTURA.CLOSE;
  DMGS.RFACTURA.BUSCANDO := true;
  WITH DMGS.CDSQ_MDFACTURA  DO
  BEGIN
    DMGS.VFACTURA.ID  := '-55111';
    dmgs.VFACTURA.TIPO  := '1';
    OPEN;
    APPEND;
  END;
  dmgs.CDSQ_MDFACTURAid_FACTURA.asstring := '';
  DMGS.CDSQ_MDFACTURAID_FACTURA.FocusControl

end;
procedure tFACTURA.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_MDFACTURA.FieldByName(AUX1).ASSTRING) ='') then
      BEGIN
         if pos('FECHA',uppercase(aux1)) <> 0 then
         begin
            auxfecha :=DMGS.CDSQ_MDFACTURA.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                         // LIKE
               aux := aux + ' AND char(' + AUX1  +') = ('''+ DMGS.CDSQ_MDFACTURA.FieldByName(AUX1).ASSTRING+''') ' // VER 3.0 %
            else
               aux := 'char('+AUX1 +') = ('''+ TRIM(DMGS.CDSQ_MDFACTURA.FieldByName(AUX1).ASSTRING)+''') '; // VER 3.0 %
         end;                           // LIKE
      END;
      end;
      i:= i+1;
    END;
  dmgs.CDSQ_MDFACTURA.close;
  DMGS.RFACTURA.BUSCANDO:=false;
  if aux <> '' then
  begin

     AUX := AUX + ' AND ID_EMPRESA='+FMENU.ID_EMPRESA;

     IF TRIM(ARORDEN.SORDEN) ='' THEN
        DMGS.VFACTURA.ORDEN :=  ORDENFACTURA
     ELSE
        DMGS.VFACTURA.ORDEN :=  ARORDEN.SORDEN;

     with dmgs.CDSQ_MDFACTURA do
     begin
       dmgs.VFACTURA.ID  := ' where '+ aux;
       dmgs.VFACTURA.TIPO := '2';
       DMGS.VFACTURA.ORDENLINEA := ORDENLINEAFACTURA;
       open;
     end
  end;
end;
procedure TFACTURA.BORDENClick(Sender: TObject);
BEGIN
  ARORDEN.ShowModal;
end;


procedure TFACTURA.DSLINEAFACTURAStateChange(Sender: TObject);
begin
  if DMGS.CDsq_MDLINEAFACTURA.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 TFACTURA.FormCreate(Sender: TObject);
begin

  try
    dbgrid1.Columns.loadfromfile(FMENU.PATHDBGRID +'\'+SELF.Name);
  except
  end;


  DMGS.CDSQ_MDLINEAFACTURA.CLOSE;
  DMGS.CDSQ_MDFACTURA.CLOSE;
  ARORDEN := TORDEN.Create(NIL);
  ARORDEN.CDS  := DMGS.CDSQ_MDFACTURA;
  ARORDEN.nombre  := 'CDSQ_MDFACTURA';
  dmgs.RFACTURA.BUSCANDO := false;
  LABEL7.Caption := '';

  pfunciones := tfunciones.create;

{ with DMGS.CDSQ_MDFACTURA do
  BEGIN
    Close;
    DMGS.FCBGRID :='%';
    DMGS.FCBGRTIPO := '1';
    DMGS.FCBGRORDEN := ORDENFACTURA;
    DMGS.FCBGRORDENLINEA := ORDENLINEAFACTURA;
    Open;
  END;
}
end;
procedure TFACTURA.FormDestroy(Sender: TObject);
begin
   DMGS.CDSQ_MDLINEAFACTURA.close;
   DMGS.CDSQ_MDFACTURA.CLOSE;
   ARORDEN.FREE;
   ARORDEN := NIL;

  try
    dbgrid1.Columns.SAVETOfile(FMENU.PATHDBGRID +'\'+SELF.Name);
  except
  end;

  pfunciones.destroy;

end;
procedure TFACTURA.FormShow(Sender: TObject);
begin
    EstadoBotones;
    F1ENTRA := FALSE;
    label30.Caption := '';
    with DMGS.CDSQ_MDFACTURA do
    BEGIN
     Close;
     DMGS.VFACTURA.ID :='%';
     DMGS.VFACTURA.TIPO := '1';
     DMGS.VFACTURA.ORDEN := ORDENFACTURA;
     DMGS.VFACTURA.ORDENLINEA := ORDENLINEAFACTURA;
     Open;
    END;
end;
procedure TFACTURA.BConsultasClick(Sender: TObject);
var posaux:TBookmark;
    codigo:tcodigotar;
begin
    DSFACTURA.DataSet := NIL;
//    dslineafactura.DataSet := nil;

    DLGFACTURA:=TDLGFACTURA.create(nil);
    IF TRIM(ARORDEN.SORDEN) = '' THEN
      dlgfactura.ORDEN:= ORDENfactura
    ELSE
      dlgfactura.ORDEN :=  ARORDEN.SORDEN;
//    DLGFACTURA.ORDEN :=  ARORDEN.SORDEN;
    DLGFACTURA.CERRARDATASET := FALSE;
    DLGFACTURA.Showmodal;
    DLGFACTURA.Free;
    DLGFACTURA := NIL;
//    IF NOT DMGS.CDSQ_MDFACTURA.ACTIVE THEN
       ESTADOBOTONES;
// UTILIZO LOS DATASETS ABIERTOS QUE VIENEN DE FDLGTARIFAS.
    DSFACTURA.DataSet := DMGS.CDSQ_MDFACTURA ;
//    dslineafactura.DataSet := dmgs.cdsq_mdlineafactura ;    
end;
procedure TFACTURA.FormKeyPress(Sender: TObject; var Key: Char);
begin
    if (key ='.')
    and (DMGS.CDSQ_MDFACTURA.State in [dsedit,dsinsert])
    and (activecontrol is tdbedit)
    then
      if (dmgs.cdsq_mdfactura.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_MDLINEAFACTURA.State in [dsedit,dsinsert]) then
    begin
      IF (ACTIVECONTROL IS TDBGRID) THEN
       begin
        if dbgrid1.SelectedIndex = (dbgrid1.FieldCount - 1) then
        begin
          DMGS.CDSQ_MDLINEAFACTURA.next;
          IF DMGS.CDSQ_MDLINEAFACTURA.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_MDLINEAFACTURA.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_MDLINEAFACTURA.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_MDLINEAFACTURA.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_MDFACTURA.state in [dsedit,dsinsert]))
            then close;
    if (key = #27) and (DMGS.CDSQ_MDFACTURA.state in [dsedit,dsinsert])
       and (not( dmgs.cdsq_MDLINEAFACTURA.state in [dsedit,dsinsert]))
    then
       if DMGS.RFACTURA.BUSCANDO then
          buscar
       ELSE
          DMGS.CDSQ_MDFACTURA.Post;
end;
procedure TFACTURA.BSalirClick(Sender: TObject);
begin
    close;
    SELF.ModalResult:=mrOk;
end;
procedure TFACTURA.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 TFACTURA.PRIMERO1Click(Sender: TObject);
begin
   DMGS.CDSQ_MDLINEAFACTURA.first;
end;

procedure TFACTURA.ANTERIOR1Click(Sender: TObject);
begin
    DMGS.CDSQ_MDLINEAFACTURA.Prior;
end;

procedure TFACTURA.SIGUIENTE1Click(Sender: TObject);
begin
    DMGS.CDSQ_MDLINEAFACTURA.next;
end;
procedure TFACTURA.REGISTRO1Click(Sender: TObject);
begin
   if DMGS.CDSQ_MDLINEAFACTURA.state in [dsedit,dsinsert] then
   begin
      primero1.enabled:=false;
      anterior1.enabled:=false;
      siguiente1.enabled:=false;
   end
   else
   begin
       primero1.enabled:=DMGS.CDSQ_MDLINEAFACTURA.bof=false;
       anterior1.enabled:=primero1.enabled;
       siguiente1.enabled:=DMGS.CDSQ_MDLINEAFACTURA.eof=false;
   end;
end;
procedure TFACTURA.EstadoBotones;
begin
{    IF (DMGS.CDSQ_MDFACTURATOTAL_COBRADO.ASfloat >=
    DMGS.CDSQ_MDFACTURABASE_FACTURA.ASfloat)
    AND (DMGS.CDSQ_MDFACTURABASE_FACTURA.ASfloat > 0 )
}
    IF DMGS.CDSQ_MDFACTURACOBRADOS.VALUE
    THEN
       LABEL32.Visible := TRUE
    ELSE
       LABEL32.Visible := FALSE;

    PDatos.enabled:=DMGS.CDSQ_MDFACTURA.state in [dsedit,dsinsert];
    BAltas.enabled:=(DMGS.CDSQ_MDFACTURA.state IN [DSBROWSE,dsinactive]);
    BListado.enabled:=(DMGS.CDSQ_MDFACTURA.state=dsbrowse) and (DMGS.CDSQ_MDLINEAFACTURA.recordcount >0) ;
//    BListado2.enabled:=(DMGS.CDSQ_MDFACTURA.state=dsbrowse) and (DMGS.CDSQ_MDLINEAFACTURA.recordcount >0) ;
    BConsultas.enabled:=(DMGS.CDSQ_MDFACTURA.state IN [dsbrowse,dsinactive]);
    BModificaciones.enabled:=(DMGS.CDSQ_MDFACTURA.state=dsbrowse) and (DMGS.CDSQ_MDFACTURA.recordcount >0) ;
    BBajas.enabled:=(DMGS.CDSQ_MDFACTURA.state=dsbrowse) and (DMGS.CDSQ_MDFACTURA.recordcount >0) ;
     // para que no se pueda anyadir ni borrar lineas de pedido
    // antes de introducir todos
    // los datos del pedido.
    if (DMGS.CDSQ_MDFACTURA.state=dsbrowse) and (DMGS.CDSQ_MDFACTURA.recordcount >0) then
    begin
       baltas2.enabled:=true;
       BbAJAS2.Enabled := true;
       IF (DMGS.CDSQ_MDLINEAFACTURA.ACTIVE) AND
       (DMGS.CDSQ_MDLINEAFACTURA.recordcount >0) then
       BEGIN
          bmodificar2.enabled:= true;
          BCANTIDAD.Enabled := TRUE;
          BCOBRO.Enabled := TRUE;
          BEURO.Enabled := TRUE;
       END
       ELSE
       BEGIN
           bmodificar2.enabled:= FALSE;
           BCANTIDAD.Enabled := FALSE;
           BCOBRO.ENABLED := FALSE;
           BEURO.Enabled := FALSE;
       END;
    end
    else
    begin
      baltas2.enabled := false;
      bBAJAS2.Enabled := false;
//      IF (DMGS.CDSQ_MDLINEAFACTURA.ACTIVE) AND
//      (DMGS.CDSQ_MDLINEAFACTURA.recordcount >0) then
//      BEGIN
         bmodificar2.enabled:= false;
         BCANTIDAD.Enabled := FALSE;
         BCOBRO.Enabled := FALSE;
         BEURO.Enabled := FALSE;         
//      END;
    end;
end;
procedure TFACTURA.BAltasClick(Sender: TObject);
begin
  WITH DMGS.CDSQ_MDFACTURA DO
  BEGIN
     IF NOT Active THEN
     BEGIN
      DMGS.VFACTURA.ID :='-5154111' ;
      DMGS.VFACTURA.TIPO :='1';
//      DMGS.PRBGRORDEN := ARORDEN.SORDEN;
      OPEN;
     END;
     APPEND;
  END;
  DBEDIT1.SetFocus;
end;
procedure TFACTURA.BBajasClick(Sender: TObject);
begin
  IF NOT COMPROBARCOBRADO(0) THEN
  BEGIN
    if (DMGS.CDSQ_MDFACTURA.recordcount>0) then //or (DMGS.CDSQ_MDFACTURA.state in [dsedit,dsinsert]) then
    begin
       case dmgs.PedirConfirmacion('¿Confirma que desea borrar este FACTURA?',true,true,false) of
           mrno: exit;
       end;
       if DMGS.CDSQ_MDLINEAFACTURA.recordcount >0 then
            DMGS.BorrandoLineas:= true;
       while DMGS.CDSQ_MDLINEAFACTURA.RecordCount>0  do
       begin
              DMGS.RLINEAFACTURA.PREGUNTA := FALSE;
              DMGS.CDSQ_MDLINEAFACTURA.Delete;
       end;
       // lo tengo que hacer asi, pq en el server modifico MDFACTURA
       // 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_MDLINEAFACTURA.afterpost(DMGS.CDSQ_MDLINEAFACTURA);
       DMGS.CDSQ_MDFACTURA.delete;
       DMGS.CDSQ_MDFACTURAafterpost(DMGS.CDSQ_MDFACTURA);
   end;
  END;   
end;

procedure TFACTURA.BALTAS2Click(Sender: TObject);
begin
  IF NOT COMPROBARCOBRADO(0) THEN
  BEGIN
    IF DMGS.CDSQ_MDFACTURA.RecordCount > 0 THEN
    BEGIN
     WITH DMGS.CDSQ_MDLINEAFACTURA  DO
     BEGIN
      IF NOT Active THEN
        OPEN;
      LAST;
      APPEND;
      // el siguiente if es para evitar el
      // delta is empty
      IF DMGS.CDSQ_MDFACTURAIMPRESO.VALUE = 1 THEN
      BEGIN
         dmgs.rfactura.preguntaedit := false;
         dmgs.rlineafactura.escape := false;
         dmgs.rlineafactura.escapecds := false;
         dmgs.CDSQ_MDLINEAFACTURA.cancelupdates;
         dmgs.RFACTURA.PREGUNTAEDIT := false;
         dmgs.cdsq_mdfactura.Edit;
         DMGS.CDSQ_MDFACTURAIMPRESO.VALUE := 0;
         DMGS.RFACTURA.PREGUNTA := FALSE;
         DMGS.CDSQ_MDFACTURA.Post;
         APPEND;
      END
     END;
     DBGRID1.SetFocus;
//     DBGRID1.SelectedIndex :=0;
     DMGS.CDSQ_MDLINEAFACTURAID_ARTICULO.FOCUSCONTROL;
    END;
  END;
end;
procedure TFACTURA.FormClose(Sender: TObject; var Action: TCloseAction);
begin
    if (DMGS.CDSQ_MDFACTURA.State in [dsedit,dsinsert]) AND
       (NOT DMGS.RFACTURA.BUSCANDO ) then
       DMGS.CDSQ_MDFACTURA.Post;
    Action := caFree;
end;
procedure TFACTURA.BModificacionesClick(Sender: TObject);
begin
  IF NOT COMPROBARCOBRADO(0) THEN
  BEGIN
    if DMGS.CDSQ_MDFACTURA.recordcount>0 then
    begin
        DMGS.CDSQ_MDFACTURA.edit;
//        DMGS.CDSQ_MDFACTURAID_PRESUPUESTO.FocusControl ;
        DBEDIT1.SetFocus;
    end;
  END;
end;
procedure TFACTURA.BListadoClick(Sender: TObject);
VAR BOOKMARK,bookmark1:TBOOKMARK;
begin
    BOOKMARK := DMGS.CDSQ_MDLINEAFACTURA.GetBookmark ;
    BOOKMARK1 := DMGS.CDSQ_MDFACTURA.GetBookmark ;

    dsFACTURA.DataSet := NIL; // HACE FALTA
    dslineaFACTURA.DataSet := NIL;
  // por si se ha modificado la base
  // que vuelva a calcularla bien.
{    if (DMGS.CDSQ_MDLINEAFACTURA.recordcount>0) AND
    (NOT DMGS.CDSQ_MDFACTURAIMPRESO.Value = 1) then
    begin
        DMGS.CDSQ_MDLINEAFACTURA.edit;
        DMGS.RLINEAFACTURA.PREGUNTA := FALSE;
        DMGS.CDSQ_MDLINEAFACTURA.Post;
    end;
}
    WITH DMGS.CDSQ_EMPRESAAUX DO
    BEGIN
      Close;
      DMGS.VEMPRESASAUX.ID:= DMGS.CDSQ_MDFACTURAID_EMPRESA.AsString;
      DMGS.VEMPRESASAUX.TIPO :='2';
      OPEN;
    END;
    IF ((DMGS.CDSQ_MDFACTURAID_CLIENTE.ASSTRING) <> '' ) THEN
    BEGIN
     WITH DMGS.CDSQ_CLIENTEAUX DO
     BEGIN
       CLOSE;
       DMGS.CLABGRNOMBRE:= DMGS.CDSQ_MDFACTURAID_CLIENTE.AsString;
       DMGS.CLABGRBORRADO := '0';
       DMGS.CLABGRTIPO :='2';
       OPEN;
     END;
    END
    ELSE
     WITH DMGS.CDSQ_CLIENTEAUX DO
     BEGIN
       CLOSE;
       DMGS.CLABGRNOMBRE:= '-5154111';
       DMGS.CLABGRBORRADO := '0';
       DMGS.CLABGRTIPO :='2';
       OPEN;
     END;

    LISTADOS := tLISTADOS.Create(nil);
    PREVIO := TPREVIO.Create(NIL);

    LISTADOS.FRDB.DataSet := DMGS.CDSQ_MDFACTURA;
    LISTADOS.FRDB1.DATASET := DMGS.CDSQ_MDLINEAFACTURA;
    LISTADOS.FRDB2.DataSet := DMGS.CDSQ_EMPRESAAUX;
    LISTADOS.FRDB3.DataSet := DMGS.CDSQ_CLIENTEAUX;


       LISTADOS.frReport1.LoadFromFile(dmgs.Path + 'LISTADOS\FACTURA.frf');
       listados.frReport1.ShowProgress := false;
       listados.frReport1.PrepareReport;
       IF FMENU.VPREVIO = '1' THEN
       BEGIN
         LISTADOS.frReport1.Preview := PREVIO.frPreview1;
         LISTADOS.frReport1.ShowReport;
         PREVIO.ShowModal;
       END
       ELSE
       BEGIN
         listados.frReport1.PrintPreparedReport('',strtoint(FMENU.COPIASFACTURA));
         PREVIO.IMPRESO := TRUE;
       END;
    if previo.impreso then
    begin
       DMGS.FACTURAIMPRIMIR := TRUE;
       DMGS.CDSQ_MDFACTURA.Edit;
       DMGS.CDSQ_MDFACTURAIMPReso.Value := 1;
       DMGS.RFACTURA.PREGUNTA := FALSE;
       dmgs.cdsq_mdFACTURA.Post;
    end;

//    LISTADOS.frReport1.LoadFromFile(dmgs.Path + 'LISTADOS\FACTURA.frf');
//    LISTADOS.frReport1.Preview := PREVIO.frPreview1;
//    LISTADOS.frReport1.ShowReport;
//    PREVIO.ShowModal;
{    if previo.impreso then
    begin
       DMGS.RFACTURA.PREGUNTA  := FALSE;
       DMGS.RFACTURA.PREGUNTAEDIT := FALSE;
       DMGS.CDSQ_MDFACTURA.Edit;
       DMGS.CDSQ_MDFACTURAIMPReso.Value := 1;
       dmgs.cdsq_MDFACTURA.Post;
    end;
}
    DSFACTURA.DataSet := DMGS.CDSQ_MDFACTURA;
    DSLINEAFACTURA.DataSet := DMGS.CDSQ_MDLINEAFACTURA;
    LISTADOS.Free;
    LISTADOS := NIL;
    PREVIO.FREE;
    PREVIO := NIL;
    DMGS.CDSQ_EMPRESAAUX.CLOSE;
    DMGS.CDSQ_CLIENTEAUX.CLOSE;

    DMGS.CDSQ_MDLINEAFACTURA.GotoBookmark(BOOKMARK);
    DMGS.CDSQ_MDLINEAFACTURA.FreeBookmark (BOOKMARK);
    DMGS.CDSQ_MDFACTURA.GotoBookmark(BOOKMARK1);
    DMGS.CDSQ_MDFACTURA.FreeBookmark (BOOKMARK1);

end;
procedure TFACTURA.DSFACTURAStateChange(Sender: TObject);
begin
    EstadoBotones;
end;
procedure TFACTURA.FACTURA1Click(Sender: TObject);
begin
    altas1.enabled:=baltas.enabled;
    bajas1.enabled:=bbajas.enabled;
    consultas1.enabled:=bconsultas.enabled;
    modificaciones1.enabled:=bmodificaciones.enabled;
end;



procedure TFACTURA.DSFACTURADataChange(Sender: TObject;
  Field: TField);
  VAR I:INTEGER;
      AUXBOOKMARK:TBOOKMARK;
begin
    COMPROBAREMPRESA;
    COMPROBARCLIENTE;
    COMPROBARFORMAPAGO;
    IF ((DMGS.CDSQ_MDFACTURA.Eof)   AND (NOT (DMGS.CDSQ_MDFACTURA.STATE IN [DSEDIT,DSINSERT]))) THEN
    BEGIN
      try // para evitar el error de memoria bloqueada en el server.
        DMGS.CDSQ_MDFACTURA.GetNextPacket ;
      except
      end;
    END;
    ESTADOBOTONES;
end;
procedure TFACTURA.DBEdit3Exit(Sender: TObject);
begin
  comprobarcliente;
end;


procedure TFACTURA.DBEdit3KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  IF (DMGS.CDSQ_MDFACTURA.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_MDFACTURAid_cliente.ASSTRING := dlgclienteaux.codigo;
            Perform(WM_NextDLGCtl, 0, 0);            
        end;
        dlgclienteaux.Free;
        dlgclienteaux := nil;
    end
  end;
end;
procedure TFACTURA.BBAJAS2Click(Sender: TObject);
begin
  IF NOT COMPROBARCOBRADO(0) THEN
  BEGIN
    if (DMGS.CDSQ_MDLINEAFACTURA.recordcount>0) then
    begin
      DMGS.CDSQ_MDLINEAFACTURA.delete;
      DMGS.CDSQ_MDLINEAFACTURAafterpost(dmGS.CDSQ_MDLINEAFACTURA);
    end;
  END;
end;
procedure TFACTURA.DBGrid1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  IF (DMGS.CDSQ_MDLINEAFACTURA.STATE IN [DSEDIT,DSINSERT]) THEN
   BEGIN
   IF KEY=27 THEN
     DMGS.RLINEAFACTURA.ESCAPECDS := TRUE;

   if key=112 then
    begin
      if UPPERCASE(TRIM(dbgrid1.SelectedField.FieldName)) ='ID_ARTICULO' then
      begin
          DLGARTICULOSAUX := TDLGARTICULOSAUX.CREATE(NIL);
          IF DLGARTICULOSAUX.Showmodal=mrOk then
          begin
             F1ENTRA := TRUE;
             pfunciones.Borrar;
             pfunciones.factura := true;
             pfunciones.Esta(UPPERCASE(DLGARTICULOSAUX.codigo),FALSE,'0','0',DMGS.CDSQ_MDfacturaID_SERIE.AsString,DMGS.CDSQ_MDfacturaID_EMPRESA.AsString,DMGS.CDSQ_MDfacturaANYO.AsString);
             dmgs.cdsq_MDLINEAfacturaID_ARTICULO.asstring:=pfunciones.ID_ARTICULO;
             DMGS.CDSQ_MDLINEAfacturaDESCRIPCION.ASSTRING:= pfunciones.DESCRIPCION;
             DMGS.CDSQ_MDLINEAfacturaPRECIO.ASfloat := pfunciones.precio;
//      ROUNDTO(DMGS.CDSQ_ARTICULOEANPRECIO_VENTA.ASfloat/(1+DMGS.CDSQ_MDFACTURAIVA.ASfloat/100),DMGS.DECIMALES)
             dmgs.cdsq_MDLINEAfacturaiva.asstring := pfunciones.IVA;
             DMGS.CDSQ_MDLINEAfacturaMARCA.ASSTRING := pfunciones.MARCA;
             DMGS.CDSQ_MDLINEAfacturaCODIGO_BARRAS.AsString := pfunciones.Codigo_barras ;
             DMGS.CDSQ_MDLINEAfacturaprecio_coste.asfloat := pfunciones.PrecioCoste ;
             dbgrid1.selectedindex:=dbgrid1.selectedindex+1;
{             dmgs.cdsq_MDLINEAFACTURAID_ARTICULO.asstring:=DLGARTICULOSAUX.codigo;
             DMGS.CDSQ_MDLINEAFACTURADESCRIPCION.ASSTRING:= DLGARTICULOSAUX.DESCRIPCION;
             DMGS.CDSQ_MDLINEAFACTURAPRECIO.ASfloat := ROUNDTO(strtofloat(DLGARTICULOSAUX.PRECIO)/(1+DMGS.CDSQ_MDFACTURAIVA.ASfloat/100),DMGS.DECIMALES);
             IF (dlgarticulosaux.iva ='0') OR
                (dlgarticulosaux.iva ='') THEN
                 dmgs.cdsq_MDLINEAFACTURAiva.asstring := DMGS.CDSQ_MDFACTURAIVA.AsString
             ELSE
                 dmgs.cdsq_MDLINEAFACTURAiva.asstring := dlgarticulosaux.iva;
             DMGS.CDSQ_MDLINEAFACTURAMARCA.ASSTRING := DLGARTICULOSAUX.MARCA;
             dbgrid1.selectedindex:=dbgrid1.selectedindex+1;
}
          end;
          DLGARTICULOSAUX.Free;
          DLGARTICULOSAUX := NIL;
      END;
    END;
  end;
END;
procedure TFACTURA.DBNavigator1Click(Sender: TObject;
  Button: TNavigateBtn);
begin
  IF DMGS.CDSQ_MDFACTURA.Eof THEN
  try // para evitar el error de memoria bloqueada en el server.
     DMGS.CDSQ_MDFACTURA.GetNextPacket ;
  except
  end;
end;

procedure TFACTURA.DBGrid1ColEnter(Sender: TObject);
begin
IF (DMGS.CDSQ_MDLINEAFACTURA.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 TFACTURA.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_MDLINEAFACTURA.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 TFACTURA.DBGrid1KeyPress(Sender: TObject; var Key: Char);
BEGIN
   if (key = #46) then // 46 -> .
     if (dmgs.CDSQ_MDLINEAFACTURA.state in [dsedit,dsinsert]) then
       if (dbgrid1.SelectedField.DataType in [ftfloat,ftfmtbcd,ftbcd]) then
          key := #44 ;  //44->  ,

   if (key <> #27) then
       DMgs.RLINEAFACTURA.ESCAPECDS := false;
   if (key = #13) and not (DMGS.CDSQ_MDLINEAFACTURA.State in [dsedit,dsinsert]) then
    begin
        Perform(WM_NextDLGCtl, 0, 0);
        key:=#0;
    end;
   if (key = #13) and (DMGS.CDSQ_MDLINEAFACTURA.State in [dsedit,dsinsert]) then
   begin
        if dbgrid1.SelectedIndex = (dbgrid1.FieldCount - 1) then
        begin
              DMGS.CDSQ_MDLINEAFACTURA.Post;
        end
        else
           dbgrid1.SelectedIndex := dbgrid1.SelectedIndex + 1;
        key:=#0;
   end;
     if (key = #27) and not (DMGS.CDSQ_MDLINEAFACTURA.state in [dsedit,dsinsert])
     then
       close;
     if (key = #27) and not (ActiveControl is TButton) then
        DMgs.RLINEAFACTURA.ESCAPECDS:= true;


  if (dmgs.cdsq_mdLINEAFACTURA.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_mdLINEAFACTURAdescuento.asinteger := 0;
       end;

    IF (UPPERCASE(TRIM(dbgrid1.SelectedField.FieldName)) = 'DESCUENTO') THEN
       if (key in ['0'..'9','-'])
       AND NOT EURO then
         begin
          porcien:= true;
          dmgs.cdsq_mdLINEAFACTURAdescuentoeuro.asstring:= '0';
         end;
  END;


END;
PROCEDURE TFACTURA.COMPROBAREMPRESA ;
BEGIN
   IF TRIM(DMGS.CDSQ_MDFACTURAID_EMPRESA.ASSTRING)  <> '' THEN
    LABEL7.Caption := FMENU.NOMBREEMPRESA
   ELSE
    LABEL7.Caption := '';
END;

PROCEDURE TFACTURA.COMPROBARCLIENTE;
BEGIN
     if ((not (DMGS.CDSQ_MDFACTURAID_CLIENTE.IsNull)) AND (TRIM(DMGS.CDSQ_MDFACTURAID_CLIENTE.ASSTRING)<>'')) then
     begin
        if (TRIM(LABEL12.CAPTION) <> '') then
           begin
           if not (TRIM(LABEL12.CAPTION) = trim(DMGS.CDSQ_MDFACTURAID_CLIENTE.asstring))
           then
             begin
               DMGS.CDSQ_CLIENTEAUX.close;
               DMGS.CLABGRNOMBRE :=trim(DMGS.CDSQ_MDFACTURAID_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_MDFACTURAID_CLIENTE.asstring);
               dmGS.CLABGRborrado := '0';
               DMGS.CLABGRTIPO :='2';
               DMGS.CDSQ_CLIENTEAUX.OPEN;
             end;
    end
    else
    begin
       DMGS.CDSQ_CLIENTEAUX.close;
       LABEL12.CAPTION := '';
       label1.Caption := '';
       label2.Caption := '';
       label3.Caption := '';
       label5.Caption := '';
       label4.Caption := '';
    end;

    IF DMGS.CDSQ_CLIENTEAUX.Active THEN
    BEGIN
      LABEL12.CAPTION := DMGS.CDSQ_CLIENTEAUXID_CLIENTE.ASSTRING;
      label1.Caption := DMGS.CDSQ_CLIENTEAUXNOMBRE.ASSTRING;
      label2.Caption := DMGS.CDSQ_CLIENTEAUXDIRECCION.ASSTRING;
      label3.Caption := DMGS.CDSQ_CLIENTEAUXPOBLACION.ASSTRING;
      label5.Caption := DMGS.CDSQ_CLIENTEAUXCOD_POSTAL.ASSTRING;
      label4.Caption := DMGS.CDSQ_CLIENTEAUXPROVINCIA.ASSTRING;
      label41.Caption := DMGS.CDSQ_CLIENTEAUXVEHICULO.ASSTRING;
      label43.Caption := DMGS.CDSQ_CLIENTEAUXMATRICULA.ASSTRING;
    END ;
    DMGS.CDSQ_CLIENTEAUX.close;
END;
procedure TFACTURA.BMODIFICAR2Click(Sender: TObject);
var bookmark:tbookmark;
begin
  IF NOT COMPROBARCOBRADO(0) THEN
  BEGIN
    if DMGS.CDSQ_MDLINEAFACTURA.recordcount>0 then
    begin
      BOOKMARK := DMGS.CDSQ_MDLINEAFACTURA.GetBookmark ;
      DMGS.CDSQ_MDLINEAFACTURA.edit;
       // el siguiente if es para evitar el
      // delta is empty
      IF DMGS.CDSQ_MDFACTURAIMPRESO.VALUE = 1 THEN
      BEGIN
         dmgs.rfactura.preguntaedit := false;
         dmgs.rlineafactura.escape := false;
         dmgs.rlineafactura.escapecds := false;
         dmgs.CDSQ_MDLINEAFACTURA.cancelupdates;
         dmgs.RFACTURA.PREGUNTAEDIT := false;
         dmgs.cdsq_mdfactura.Edit;
         DMGS.CDSQ_MDFACTURAIMPRESO.VALUE := 0;
         DMGS.RFACTURA.PREGUNTA := FALSE;
         DMGS.CDSQ_MDFACTURA.Post;
         DMGS.CDSQ_MDLINEAFACTURA.GotoBookmark(BOOKMARK);
         dmgs.cdsq_mdlineafactura.edit;
      END;
      DMGS.CDSQ_MDLINEAFACTURA.FreeBookmark (BOOKMARK);      
      DMGS.CDSQ_MDLINEAFACTURAID_ARTICULO.FocusControl;
     END;

{        IF DMGS.CDSQ_MDFACTURAIMPRESO.value = 1 then
        // si no hago esto entra primero en el post de factura
        // y luego en el de linea y da error de delta.
        begin
           BOOKMARK := DMGS.CDSQ_MDLINEAFACTURA.GetBookmark ;
           dmgs.cdsq_Mdfactura.edit;
           dmgs.rfactura.PREGUNTA := false;
           dmgs.cdsq_mdfactura.Post;
           DMGS.CDSQ_MDLINEAFACTURA.GotoBookmark(BOOKMARK);
           DMGS.CDSQ_MDLINEAFACTURA.FreeBookmark (BOOKMARK);
        end;
        DMGS.CDSQ_MDLINEAFACTURA.edit;
        DMGS.CDSQ_MDLINEAFACTURAID_ARTICULO.FocusControl;
}
  END;
end;

procedure TFACTURA.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 TFACTURA.DBEdit5Exit(Sender: TObject);
VAR AUX:STRING;
begin
 euro:= false;
 AUX := EUROVALOR;
 ////// esta linea la he puesto yo porque el de monforte quiere el descuento sobre el total de la factura
//DMGS.CDSQ_MDFACTURADESCUENTOEURO.ASfloat:=DMGS.CDSQ_MDFACTURADESCUENTOEURO.ASfloat/1.16;
/////////////////////////
 EUROVALOR := DMGS.CDSQ_MDFACTURADESCUENTOEURO.ASSTRING;
 PORCIENVALOR := DBEDIT3.TEXT;
 IF (DMGS.CDSQ_MDFACTURA.STATE IN [DSEDIT,DSINSERT]) THEN
 BEGIN
  IF (DMGS.CDSQ_MDFACTURADESCUENTO.AsString = '')
     AND (NOT DMGS.RFACTURA.BUSCANDO)
  THEN
     DMGS.CDSQ_MDFACTURADESCUENTO.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_MDFACTURADESCUENTOEURO.ASfloat:=DMGS.CDSQ_MDFACTURADESCUENTOEURO.ASfloat/(1+(STRTOINT(FMENU.IVA)/100));
  /////////////////////////
  except
  end;
 END;
end;

procedure TFACTURA.DBEdit7Exit(Sender: TObject);
begin
 if (dmgs.cdsq_MDFACTURA.State in [dsedit,dsinsert]) then
    if (trim(dbedit7.Text) ='') AND (NOT DMGS.RFACTURA.BUSCANDO )then
       dbedit7.Text := '0';

end;

procedure TFACTURA.DBGrid1DblClick(Sender: TObject);
begin
  IF (DMGS.CDSQ_MDLINEAFACTURA.STATE IN [DSEDIT,DSINSERT]) THEN
    begin
      if UPPERCASE(TRIM(dbgrid1.SelectedField.FieldName)) ='ID_ARTICULO' then
      begin
          DLGARTICULOSAUX := TDLGARTICULOSAUX.CREATE(NIL);
          IF DLGARTICULOSAUX.Showmodal=mrOk then
          begin
             F1ENTRA := TRUE;
             pfunciones.Borrar;
             pfunciones.factura := true;
             pfunciones.Esta(UPPERCASE(DLGARTICULOSAUX.codigo),FALSE,'0','0',DMGS.CDSQ_MDfacturaID_SERIE.AsString,DMGS.CDSQ_MDfacturaID_EMPRESA.AsString,DMGS.CDSQ_MDfacturaANYO.AsString);
             dmgs.cdsq_MDLINEAfacturaID_ARTICULO.asstring:=pfunciones.ID_ARTICULO;
             DMGS.CDSQ_MDLINEAfacturaDESCRIPCION.ASSTRING:= pfunciones.DESCRIPCION;
             DMGS.CDSQ_MDLINEAfacturaPRECIO.ASfloat := pfunciones.precio;
//      ROUNDTO(DMGS.CDSQ_ARTICULOEANPRECIO_VENTA.ASfloat/(1+DMGS.CDSQ_MDFACTURAIVA.ASfloat/100),DMGS.DECIMALES)
             dmgs.cdsq_MDLINEAfacturaiva.asstring := pfunciones.IVA;
             DMGS.CDSQ_MDLINEAfacturaMARCA.ASSTRING := pfunciones.MARCA;
             DMGS.CDSQ_MDLINEAfacturaCODIGO_BARRAS.AsString := pfunciones.Codigo_barras ;
             DMGS.CDSQ_MDLINEAfacturaprecio_coste.asfloat := pfunciones.PrecioCoste ;
             dbgrid1.selectedindex:=dbgrid1.selectedindex+1;             

{             dmgs.cdsq_MDLINEAFACTURAID_ARTICULO.asstring:=DLGARTICULOSAUX.codigo;
             DMGS.CDSQ_MDLINEAFACTURADESCRIPCION.ASSTRING:= DLGARTICULOSAUX.DESCRIPCION;
             DMGS.CDSQ_MDLINEAFACTURAPRECIO.ASfloat := ROUNDTO(strtofloat(DLGARTICULOSAUX.PRECIO)/(1+DMGS.CDSQ_MDFACTURAIVA.ASfloat/100),DMGS.DECIMALESMON);
             IF (dlgarticulosaux.iva ='0') OR
                (dlgarticulosaux.iva ='') THEN
                 dmgs.cdsq_MDLINEAFACTURAiva.asstring := DMGS.CDSQ_MDFACTURAIVA.AsString
             ELSE
                 dmgs.cdsq_MDLINEAFACTURAiva.asstring := dlgarticulosaux.iva;
             DMGS.CDSQ_MDLINEAFACTURAMARCA.ASSTRING := DLGARTICULOSAUX.MARCA;
            dbgrid1.selectedindex:=dbgrid1.selectedindex+1;
}
          end;
          DLGARTICULOSAUX.Free;
          DLGARTICULOSAUX := NIL;
      END;
  end;
end;

procedure TFACTURA.DBEdit3DblClick(Sender: TObject);
begin
  IF (DMGS.CDSQ_MDFACTURA.STATE IN [DSEDIT,DSINSERT]) THEN
   BEGIN
        DMGS.cdsq_clienteaux.Close;
        dlgclienteAUX := tdlgclienteAUX.Create(NIL);
        if dlgclienteAUX.Showmodal=mrok then
        begin
            F1ENTRA:= TRUE;
            DMGS.cdsq_MDFACTURAid_cliente.ASSTRING := dlgclienteaux.codigo;
        end;
        dlgclienteaux.Free;
        dlgclienteaux := nil;
  end;
end;

procedure TFACTURA.BLISTADO2Click(Sender: TObject);
VAR BOOKMARK:TBOOKMARK;
begin
{    BOOKMARK := DMGS.CDSQ_MDLINEAFACTURA.GetBookmark ;

    FPEDIRBASE := TFPEDIRBASE.CREATE(NIL);
    FPEDIRBASE.Edit1.Text := FLOATTOSTR(ROUNDTO(DMGS.CDSQ_MDFACTURABASE_FACTURA.ASFLOAT,DMGS.DECIMALES));
    IF FPEDIRBASE.ShowModal = MROK THEN
    BEGIN
       IF TRIM(FPEDIRBASE.Edit1.Text) <> TRIM(DMGS.CDSQ_MDFACTURABASE_FACTURA.AsString) THEN
       BEGIN
         DMGS.CDSQ_MDFACTURA.EDIT;
         DMGS.CDSQ_MDFACTURABASE_FACTURA.AsString := FPEDIRBASE.Edit1.Text;
         DMGS.RFACTURA.PREGUNTA := FALSE;
         DMGS.CDSQ_MDFACTURA.Post;
       END;
    END;
    FPEDIRBASE.Free;
    FPEDIRBASE := NIL;
    ESTADOBOTONES;

    DSFACTURA.DataSet := NIL; // HACE FALTA
    DSLINEAFACTURA.DataSet := NIL;

    WITH DMGS.CDSQ_EMPRESAAUX DO
    BEGIN
      Close;
      DMGS.VEMPRESASAUX.ID:= DMGS.CDSQ_MDFACTURAID_EMPRESA.AsString;
      DMGS.VEMPRESASAUX.TIPO :='2';
      OPEN;
    END;
    IF ((DMGS.CDSQ_MDFACTURAID_CLIENTE.ASSTRING) <> '' ) THEN
    BEGIN
     WITH DMGS.CDSQ_CLIENTEAUX DO
     BEGIN
       CLOSE;
       DMGS.CLABGRNOMBRE:= DMGS.CDSQ_MDFACTURAID_CLIENTE.AsString;
       DMGS.CLABGRBORRADO := '0';
       DMGS.CLABGRTIPO :='2';
       OPEN;
     END;
    END
    ELSE
     WITH DMGS.CDSQ_CLIENTEAUX DO
     BEGIN
       CLOSE;
       DMGS.CLABGRNOMBRE:= '-5487111';
       DMGS.CLABGRBORRADO := '0';
       DMGS.CLABGRTIPO :='2';
       OPEN;
     END;

    LISTADOS := tLISTADOS.Create(nil);
    PREVIO := TPREVIO.Create(NIL);

    LISTADOS.FRDB.DataSet := DMGS.CDSQ_MDFACTURA;
    LISTADOS.FRDB1.DATASET := DMGS.CDSQ_MDLINEAFACTURA;
    LISTADOS.FRDB2.DataSet := DMGS.CDSQ_EMPRESAAUX;
    LISTADOS.FRDB3.DataSet := DMGS.CDSQ_CLIENTEAUX;

 //   Path := ExtractFilePath(ParamStr(0));
    LISTADOS.frReport1.LoadFromFile(dmgs.Path + 'LISTADOS\FACTURA1.frf');
    LISTADOS.frReport1.Preview := PREVIO.frPreview1;
    LISTADOS.frReport1.ShowReport;
    PREVIO.ShowModal;
    DSFACTURA.DataSet := DMGS.CDSQ_MDFACTURA;
    DSLINEAFACTURA.DataSet := DMGS.CDSQ_MDLINEAFACTURA;
    LISTADOS.Free;
    LISTADOS := NIL;
    PREVIO.FREE;
    PREVIO := NIL;
    DMGS.CDSQ_EMPRESAAUX.CLOSE;
    DMGS.CDSQ_CLIENTEAUX.CLOSE;

    DMGS.CDSQ_MDLINEAFACTURA.GotoBookmark(BOOKMARK);
    DMGS.CDSQ_MDLINEAFACTURA.FreeBookmark (BOOKMARK);
 }
end;

procedure TFACTURA.DBEdit8KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  IF (DMGS.CDSQ_MDFACTURA.STATE IN [DSEDIT,DSINSERT]) THEN
   BEGIN
   if key=112 then
    begin
        DMGS.CDSQ_SERIESAUX.Close;
        fdlgseriesAUX := tfdlgseriesAUX.Create(NIL);
        FDLGSERIESAUX.SERIE := FMENU.ID_EMPRESA ;
        FDLGSERIESAUX.ANYO := DMGS.CDSQ_MDFACTURAANYO.VALUE;
        if fdlgseriesAUX.Showmodal=mrok then
        begin
            F1ENTRA:= TRUE;
            DMGS.cdsq_MDFACTURAid_serie.ASSTRING := fdlgseriesaux.serie;
            IF (TRIM(DMGS.CDSQ_MDFACTURAID_SERIE.ASSTRING) <> TRIM(FMENU.ID_SERIE)) THEN
              DMGS.CDSQ_MDFACTURAID_FACTURA.VALUE := DMGS.CDSQ_SERIESAUXSIG_FACTURA.VALUE + 1;
            Perform(WM_NextDLGCtl, 0, 0);
        end;
        fdlgseriesaux.Free;
        fdlgseriesaux := nil;
    end
  end;

end;

procedure TFACTURA.DBEdit8DblClick(Sender: TObject);
begin
  IF (DMGS.CDSQ_MDFACTURA.STATE IN [DSEDIT,DSINSERT]) THEN
   BEGIN
        DMGS.CDSQ_SERIESAUX.Close;
        fdlgseriesAUX := tfdlgseriesAUX.Create(NIL);
        FDLGSERIESAUX.SERIE := FMENU.ID_EMPRESA ;
        FDLGSERIESAUX.ANYO := DMGS.CDSQ_MDFACTURAANYO.VALUE;
        if fdlgseriesAUX.Showmodal=mrok then
        begin
            F1ENTRA:= TRUE;
            DMGS.cdsq_MDFACTURAid_serie.ASSTRING := fdlgseriesaux.serie;
            IF (TRIM(DMGS.CDSQ_MDFACTURAID_SERIE.ASSTRING) <> TRIM(FMENU.ID_SERIE)) THEN
              DMGS.CDSQ_MDFACTURAID_FACTURA.VALUE := DMGS.CDSQ_SERIESAUXSIG_FACTURA.VALUE + 1;
            Perform(WM_NextDLGCtl, 0, 0);
        end;
        fdlgseriesaux.Free;
        fdlgseriesaux := nil;
  end;
end;

procedure TFACTURA.DBEdit8Exit(Sender: TObject);
begin
    IF (NOT F1ENTRA) AND (NOT DMGS.RFACTURA.BUSCANDO)  THEN
     if ((not (DMGS.CDSQ_MDFACTURAID_SERIE.IsNull)) AND (TRIM(DMGS.CDSQ_MDFACTURAID_SERIE.ASSTRING)<>'')) then
     begin
         DMGS.CDSQ_SERIESAUX.close;
         DMGS.VSERIESAUX.ID := DMGS.CDSQ_MDFACTURAID_EMPRESA.asstring;
         DMGS.VSERIESAUX.ID1 := trim(DMGS.CDSQ_MDFACTURAID_SERIE.asstring);
         DMGS.VSERIESAUX.ANYO1 := DMGS.CDSQ_MDFACTURAANYO.AsString;
         DMGS.VSERIESAUX.TIPO:= '3';
         DMGS.CDSQ_SERIESAUX.OPEN;
         IF DMGS.CDSQ_SERIESAUX.RecordCount > 0 THEN
         BEGIN
           IF TRIM(DMGS.CDSQ_SERIESAUXID_SERIE.ASSTRING) <> TRIM(FMENU.ID_SERIE) THEN
              DMGS.CDSQ_MDFACTURAID_FACTURA.VALUE := DMGS.CDSQ_SERIESAUXSIG_FACTURA.VALUE + 1 ;
         END
         ELSE
         BEGIN
           MessageDlg('EL IDENTIFICADOR DE SERIE NO EXISTE PARA ESTA EMPRESA', mtWarning,[mbOK], 0);
           DMGS.CDSQ_MDFACTURAID_SERIE.FocusControl;
         END;
         DMGS.CDSQ_SERIESAUX.CLOSE;
     END;
end;

procedure TFACTURA.BPRESUPUESTOClick(Sender: TObject);
VAR ORDENAUX:STRING;
    opcion:string;
    x:smallint;
begin
  opcion:='';
  IF TRIM(FMENU.ID_SERIE) = '' THEN
  BEGIN
       MessageDlg('Debe seleccionar una serie en empresa y seleccionar la empresa.', mtWarning,[mbOK], 0);
       exit;
  END;
  try
//    dsFACTURA.DataSet := nil;
//    dslineaFACTURA.DataSet := nil;
  dmgs.CDSQ_MDFACTURA.DisableControls;
  dmgs.CDSQ_MDLINEAFACTURA.DisableControls;

   DLGPRESUPUESTOAUX := TDLGPRESUPUESTOAUX.CREATE(NIL);
   IF (DLGPRESUPUESTOAUX.ShowModal  =MROK) THEN
   BEGIN
     IF TRIM(DLGPRESUPUESTOAUX.NOMBRE) <> '' THEN
     BEGIN
    //*******
    dmgs.cdsq_maximo.close;
    dmgs.cdsq_maximo.CommandText := ' select count(*) as maximo from FACTURASALBARANES where id_presupuesto='+dlgpresupuestoaux.nombre+' and id_empresa='+fmenu.id_empresa+' '+' and ALBanyo='+dmgs.CDSQ_MDPRESUPUESTOAUXanyo.AsString;
    dmgs.cdsq_maximo.Open;
    IF NOT DMGS.CDSQ_MAXIMO.Fields[0].ISNULL THEN
    if dmgs.CDSQ_MAXIMO.Fields[0].VALUE > 0 then
    begin

      with DMGS.CDSQ_MDFACTURA do
      BEGIN
        Close;
        if trim(arorden.sorden)='' then
           ordenaux:= ordenalbaran
        else
           ordenaux := arorden.SORDEN;

        DMGS.VFACTURA.ID := ' WHERE ID_presupuesto='+dlgpresupuestoaux.nombre+' and anyo='+dmgs.CDSQ_MDPRESUPUESTOAUXanyo.AsString;//+' and id_empresa='+fmenu.id_empresa+' '+ ordenaux ;
        DMGS.VFACTURA.TIPO  := '2';
        DMGS.VFACTURA.ORDEN := ORDENAUX;
        DMGS.VFACTURA.ORDENLINEA  := ORDENLINEAFACTURA;
        Open;
       END;
    end
    else
    begin

    //  BAltasClick(SENDER);
    DMGS.CDSQ_MDPRESUPUESTO.CLOSE;
   if NOT dmgs.cdsq_MDFACTURAID_FACTURA.IsNull THEN
   BEGIN
     x:=dmgs.PedirConfirmacion('¿Factura nueva?',true,true,true);
     case x of
         mrno: opcion := 'NO';
         mrcancel: opcion := 'CANCEL';
         mryes: opcion := 'SI';
     end;
   END;
   if opcion='SI' then
   begin
    WITH DMGS.CDSQ_MDFACTURA DO
    BEGIN
       IF NOT Active THEN
       BEGIN
         DMGS.VFACTURA.ID :='-5487111' ;
         DMGS.VFACTURA.TIPO  :='1';
         DMGS.VFACTURA.ORDEN := ORDENFACTURA;
         DMGS.VFACTURA.ORDENLINEA := ORDENLINEAFACTURA;
         OPEN;
       END;
       if state in [dsedit,dsinsert] then
       begin
         dmgs.rfactura.PREGUNTA := false;
         dmgs.cdsq_mdfactura.CancelUpdates;
       end;
       APPEND;
    END;
    //***
      with dmgs do
      begin
        cdsq_mdFACTURAid_cliente.asstring := cdsq_mdpresupuestoauxid_cliente.asstring;
        cdsq_mdFACTURAiva.ASfloat := cdsq_mdpresupuestoauxiva.ASfloat;
        cdsq_mdFACTURAre.ASfloat := cdsq_mdpresupuestoauxre.ASfloat;
        cdsq_mdFACTURAdescuento.ASfloat := cdsq_mdpresupuestoauxdescuento.ASfloat;
        cdsq_mdFACTURAobservaciones.asstring := cdsq_mdpresupuestoauxobservaciones.asstring;
        CDSQ_MDFACTURAID_PRESUPUESTO.VALUE := CDSQ_MDPRESUPUESTOAUXID_PRESUPUESTO.VALUE;
        RFACTURA.PREGUNTA := false;
        cdsq_mdFACTURA.post;
      end;
    end ;// if opcion='SI'
    IF (opcion='SI') or
    (opcion='NO')
    then
    begin
      if ((dmgs.cdsq_mdfacturaid_cliente.asstring) <> (dmgs.cdsq_mdpresupuestoauxid_cliente.AsString )) OR
         ((dmgs.cdsq_mdfacturaid_EMPRESA.asstring) <> (dmgs.cdsq_mdpresupuestoauxid_EMPRESA.AsString ))
      then
      begin
        x:=dmgs.PedirConfirmacion('¿EL CLIENTE ES DIFERENTE, CONTINUAR?',true,true,true);
        case x of
          mrno: ABORT;
          mrcancel: ABORT;
        end;
      end;
      with dmgs do
      begin
      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_MDFACTURA.RecordCount > 0 THEN
        BEGIN
           WITH DMGS.CDSQ_MDLINEAFACTURA  DO
           BEGIN
             IF NOT Active THEN
                OPEN;
             LAST;
             APPEND;
           END;
        END;
        //*****
          cdsq_mdlineaFACTURAid_articulo.asstring := cdsq_mdlinPRESUPUESTOAUXid_articulo.asstring;
          cdsq_mdlineaFACTURAmarca.asstring := cdsq_mdlinPRESUPUESTOAUXmarca.asstring;
          cdsq_mdlineaFACTURAdescripcion.asstring := cdsq_mdlinPRESUPUESTOAUXdescripcion.asstring;
          cdsq_mdlineaFACTURAcantidad.ASfloat := cdsq_mdlinPRESUPUESTOAUXcantidad.ASfloat;
          cdsq_mdlineaFACTURAdescuento.ASfloat := cdsq_mdlinPRESUPUESTOAUXdescuento.ASfloat;
          cdsq_mdlineaFACTURAprecio.ASfloat := ROUNDTO(cdsq_mdlinPRESUPUESTOAUXprecio.ASfloat/(1+DMGS.CDSQ_MDPRESUPUESTOAUXIVA.ASfloat/100),DMGS.DECIMALES);
          // AQUI HAY QUE DIVIDIR POR EL IVA DE LA LINEA
          cdsq_mdlineaFACTURAimporte.ASfloat := ROUNDTO(cdsq_mdlinPRESUPUESTOAUXIMPORTE.ASfloat/(1+DMGS.CDSQ_MDPRESUPUESTOAUXIVA.ASfloat/100),DMGS.DECIMALESMON);
          // AQUI HAY QUE DIVIDIR POR EL IVA DE LA LINEA          
          RLINEAFACTURA.PREGUNTA := FALSE;
          cdsq_mdlineaFACTURA.post;
          cdsq_mdlinPRESUPUESTOAUX.Next;
        end;
      end;
//        cdsq_mdFACTURA.Edit;// por si se ha modificado
//        // la base del PRESUPUESTOAUX exteriormente
// LA FACTURA TIENE QUE IR AL DETALLE NO SE PUEDE/DEBE FALSIFICAR
//        cdsq_mdFACTURAbase_FACTURA.ASfloat := ROUNDTO(cdsq_mdPRESUPUESTOAUXBASE_PRESUPUESTO.ASfloat/(1+DMGS.CDSQ_MDFACTURAIVA.ASfloat/100),DMGS.DECIMALES);
//        RFACTURA.PREGUNTA := false;
//        cdsq_mdFACTURA.post;
      end
    END;
   END;
   DMGS.CDSQ_MAXIMO.CLOSE;
  end;
  END;
     dlgPRESUPUESTOaux.free;
     dlgPRESUPUESTOaux := nil;
  finally
  begin
//     dsFACTURA.DataSet := dmgs.cdsq_mdFACTURA ;
//     dslineaFACTURA.DataSet := dmgs.cdsq_mdlineaFACTURA;
    dmgs.cdsq_mdfactura.EnableControls;
    dmgs.cdsq_mdlineafactura.EnableControls;
  end;
  end;
end;

procedure TFACTURA.BFACTURAClick(Sender: TObject);
 var ordenaux,AUX:string;
     INDICE,FILAS : SMALLINT;
     CORRECTO,NUEVA:BOOLEAN;
begin
  NUEVA := TRUE;
  IF TRIM(FMENU.ID_SERIE) = '' THEN
  BEGIN
       MessageDlg('Debe seleccionar una serie en empresa y seleccionar la empresa.', mtWarning,[mbOK], 0);
       exit;
  END;
  dsFACTURA.DataSet := nil;
  dslineaFACTURA.DataSet := nil;
  DLGALBARANAUX := TDLGALBARANAUX.CREATE(NIL);
  IF (DLGALBARANAUX.ShowModal  =MROK) THEN
  BEGIN
   IF TRIM(DLGALBARANAUX.NOMBRE) <> '' THEN
   BEGIN
    IF COMPROBARALBARANES THEN
      BEGIN
      end
    else
    begin
    //  BAltasClick(SENDER);
    DMGS.CDSQ_MDALBARAN.CLOSE;
    WITH DMGS.CDSQ_MDFACTURA DO
    BEGIN
       IF NOT Active THEN
       BEGIN
         DMGS.VFACTURA.ID :='-5541111' ;
         DMGS.VFACTURA.TIPO  :='1';
         DMGS.VFACTURA.ORDEN  := ORDENFACTURA;
         DMGS.VFACTURA.ORDENLINEA := ORDENLINEAFACTURA;
         OPEN;
       END
       ELSE
         case DMGS.PedirConfirmacion('¿AÑADIR EN FACTURA NUEVA (SI), O EN LA ACTUAL (NO)?',true,true,false) of
           mrno:NUEVA:=FALSE;
         end;
       IF NUEVA THEN
       APPEND;
    END;

      with dmgs do
      begin
      IF NUEVA THEN
      BEGIN
        cdsq_mdFACTURAid_cliente.asstring := cdsq_mdALBARANauxid_cliente.asstring;
        cdsq_mdFACTURAiva.ASfloat := cdsq_mdALBARANauxiva.ASfloat;
        cdsq_mdFACTURAre.ASfloat := cdsq_mdALBARANauxre.ASfloat;
        CDSQ_MDFACTURAID_SERIE.asstring := CDSQ_mdalbaranAUXid_serie.asstring;        
        CDSQ_MDFACTURAALBANYO.VALUE := CDSQ_MDALBARANAUXANYO.VALUE;
        CDSQ_MDFACTURAALBID_SERIE.VALUE := CDSQ_mdalbaranAUXid_serie.VALUE;
        cdsq_mdFACTURAdescuento.ASfloat := cdsq_mdALBARANauxdescuento.ASfloat;
        cdsq_mdFACTURAobservaciones.asstring := cdsq_mdALBARANauxobservaciones.asstring;
        CDSQ_MDFACTURAID_ALBARAN.VALUE := CDSQ_MDALBARANAUXID_ALBARAN.VALUE;
        IF CDSQ_MDALBARANAUXCOBRADO.Value = 1 THEN
           CDSQ_MDFACTURACOBRADO.VALUE := 2;
        IF TRIM(CDSQ_MDFACTURAID_FORMA.ASSTRING)<>'' THEN
           CDSQ_MDFACTURAID_FORMA.Value := CDSQ_MDALBARANAUXID_FORMA.Value;
        RFACTURA.PREGUNTA := false;
        cdsq_mdFACTURA.post;
      END;

     INDICE := 1;
     FILAS := DLGALBARANAUX.DBGrid1.SelectedRows.Count ;
     IF FILAS=0 THEN FILAS:=1;
     WHILE FILAS >= INDICE DO
       BEGIN
          IF FILAS > 1  THEN
             DLGALBARANAUX.DBGRID1.DATASOURCE.DataSet.GotoBookmark(pointer(DLGALBARANAUX.DBGrid1.SelectedRows.Items[INDICE-1]));
          if cdsq_mdlinEAALBARANaux.RecordCount > 0 then
          begin
            cdsq_mdlinEAALBARANaux.open;
            cdsq_mdLINEAALBARANAUX.first;
            while not cdsq_mdLINEAALBARANAUX.Eof do
            begin
            IF DMGS.CDSQ_MDFACTURA.RecordCount > 0 THEN
              BEGIN
                 WITH DMGS.CDSQ_MDLINEAFACTURA  DO
                 BEGIN
                  IF NOT Active THEN
                   OPEN;
                   LAST;
                   APPEND;
                 END;
              END;
        //*****
            CDSQ_MDLINEAFACTURANUMERO.AsString :=cdsq_mdLINEAALBARANAUXid_ALBARAN.asstring;
            CDSQ_MDLINEAFACTURAALBANYO.AsString :=cdsq_mdLINEAALBARANAUXANYO.asstring;
            CDSQ_MDLINEAFACTURATIPO.ASSTRING := 'AL';
            CDSQ_MDLINEAFACTURAALBID_EMPRESA.AsString :=cdsq_mdLINEAALBARANAUXid_EMPRESA.asstring;
            CDSQ_MDLINEAFACTURAALBID_SERIE.AsString :=cdsq_mdLINEAALBARANAUXid_SERIE.asstring;
            cdsq_mdlineaFACTURAid_articulo.asstring := cdsq_mdLINEAALBARANAUXid_articulo.asstring;
            cdsq_mdlineaFACTURAmarca.asstring := cdsq_mdLINEAALBARANAUXmarca.asstring;
            cdsq_mdlineaFACTURAdescripcion.asstring := cdsq_mdLINEAALBARANAUXdescripcion.asstring;
            cdsq_mdlineaFACTURAcantidad.ASfloat := cdsq_mdLINEAALBARANAUXcantidad.ASfloat;
            cdsq_mdlineaFACTURAdescuento.ASfloat := cdsq_mdLINEAALBARANAUXdescuento.ASfloat;
            IF FMENU.ALBSINIVA='1' THEN
            BEGIN
              cdsq_mdlineaFACTURAprecio.ASfloat := ROUNDTO(cdsq_mdLINEAALBARANAUXprecio.ASfloat,DMGS.DECIMALES);
             // AQUI HAY QUE DIVIDIR POR EL IVA DE LA LINEA
              cdsq_mdlineaFACTURAimporte.ASfloat := ROUNDTO(cdsq_mdLINEAALBARANAUXIMPORTE.ASfloat,DMGS.DECIMALESMON);
             // AQUI HAY QUE DIVIDIR POR EL IVA DE LA LINEA
            END
            ELSE
            BEGIN
             cdsq_mdlineaFACTURAprecio.ASfloat := ROUNDTO(cdsq_mdLINEAALBARANAUXprecio.ASfloat/(1 + DMGS.CDSQ_MDALBARANAUXIVA.ASfloat/100),DMGS.DECIMALES);
             // AQUI HAY QUE DIVIDIR POR EL IVA DE LA LINEA
             cdsq_mdlineaFACTURAimporte.ASfloat := ROUNDTO(cdsq_mdLINEAALBARANAUXIMPORTE.ASfloat/(1 + DMGS.CDSQ_MDALBARANAUXIVA.ASfloat/100),DMGS.DECIMALESMON);
             // AQUI HAY QUE DIVIDIR POR EL IVA DE LA LINEA
            END;
            RLINEAFACTURA.PREGUNTA  := FALSE;
            RFACTURA.ALMACEN  := TRUE; // PARA QUE NO DESCUENTE
            // LOS ARTICULOS, YA DESCONTADOS DE ALMACEN AL HACER EL
            // ALBARAN
            cdsq_mdlineaFACTURA.post;
            cdsq_mdLINEAALBARANAUX.Next;
            end;
          end;
          CDSQ_MDFACTURA.Edit;
          INSERTARCOBROS;
          RFACTURA.PREGUNTA := FALSE;
          CDSQ_mDFACTURA.POST;
//          cdsq_mdFACTURA.Edit;// por si se ha modificado
        // la base del PRESUPUESTOAUX exteriormente
//          cdsq_mdFACTURAbase_FACTURA.ASfloat := ROUNDTO(cdsq_mdALBARANAUXBASE_ALBARAN.ASfloat/(1 + DMGS.CDSQ_MDALBARANAUXIVA.ASfloat/100),DMGS.DECIMALES);
//          RFACTURA.PREGUNTA  := false;
//          cdsq_mdFACTURA.post;
          if cdsq_mdlinEAALBARANaux.RecordCount > 0 then
             INSERTARALBARAN(DMGS.CDSQ_MDFACTURAID_FACTURA.AsString,DMGS.CDSQ_MDFACTURAANYO.ASSTRING,DMGS.CDSQ_MDFACTURAID_EMPRESA.ASSTRING ,DMGS.CDSQ_MDFACTURAID_SERIE.AsString,DMGS.CDSQ_MDLINEAALBARANauxID_ALBARAN.ASSTRING, DMGS.CDSQ_MDLINEAALBARANauxANYO.ASSTRING, DMGS.CDSQ_MDLINEAALBARANauxID_EMPRESA.ASSTRING, DMGS.CDSQ_MDLINEAALBARANauxID_SERIE.ASSTRING, DMGS.CDSQ_MDFACTURABASE_FACTURA.ASSTRING,'AL');
          INDICE := INDICE+1;
       END
      end
    END;
   END;
   DMGS.CDSQ_MAXIMO.Close;
  END;
  dlgalbaranaux.free;
  dlgalbaranaux := nil;

  dsFACTURA.DataSet := dmgs.cdsq_mdFACTURA ;
  dslineaFACTURA.DataSet := dmgs.cdsq_mdlineaFACTURA;
end;

procedure TFACTURA.ToolButton1Click(Sender: TObject);
var cadena:string;
    BOOKMARK:TBOOKMARK;
begin

   BOOKMARK := DMGS.CDSQ_MDLINEAFACTURA.GetBookmark ;
   listadoopciones := tlistadoopciones.create(nil);
   listadoopciones.opcion := 1;//cliente
   if listadoopciones.ShowModal = mrok then
   begin
    cadena := listadoopciones.cadena;
    if trim(cadena) <> '' then
    begin
     if (listadoopciones.todo = false) then
       if (listadoopciones.cobrado = true) then
//        cadena := cadena + ' and total_cobrado >= base_factura and total_cobrado <> 0 '
        cadena := cadena + ' and cobrado=1 '
       else if (listadoopciones.CONFACTURA  = true) then
               cadena := cadena + ' and cobrado = 2 '
            else
//        cadena := cadena + ' and total_cobrado <= base_factura ';
        cadena := cadena + ' and cobrado=0 ';
    end
    else
    begin
     if (listadoopciones.todo = false) then
       if (listadoopciones.cobrado = true) then
//        cadena := cadena + ' total_cobrado >= base_factura and total_cobrado <> 0 '
        cadena := cadena + ' cobrado=1 '
       else  if (listadoopciones.confactura = true) then
                 cadena := cadena + ' cobrado=2 '
             else
//        cadena := cadena + ' total_cobrado <= base_factura ';
        cadena := cadena + ' cobrado=0 ';
    end;
    if trim(cadena) <> '' then
    begin
       CADENA := ' AND ' + CADENA;
//        cadena := ' id_empresa='+fmenu.id_empresa+' and ' + cadena;
//        cadena := ' where '+ cadena +' ORDER BY FECHA,ID_FACTURA ';
//        cadena := ' AND ' + cadena +' ORDER BY FECHA,ID_FACTURA ';
    end;
    listadoopciones.free;
    listadoopciones := nil;

    dsFACTURA.DataSet := NIL; // HACE FALTA
    dslineaFACTURA.DataSet := NIL;

    WITH DMGS.CDSQ_EMPRESAAUX DO
    BEGIN
      Close;
      DMGS.VEMPRESASAUX.ID:= DMGS.CDSQ_MDFACTURAID_EMPRESA.AsString;
      DMGS.VEMPRESASAUX.TIPO :='2';
      OPEN;
    END;


    with DMGS.CDSQ_MDFACTURAaux do
    BEGIN
        Close;
        if trim(cadena) ='' then
        begin
           DMGS.VFACTURAAUX.ID  :='%';
           DMGS.VFACTURAAUX.TIPO  := '1';
           IF TRIM(ARORDEN.SORDEN) = '' THEN
             DMGS.VFACTURAAUX.ORDEN  := ORDENFACTURA
           ELSE
             DMGS.VFACTURAAUX.ORDEN  := ARORDEN.SORDEN;
           DMGS.VFACTURAAUX.ORDENLINEA := ORDENLINEAFACTURA;
        end
        else
        begin
           DMGS.VFACTURAAUX.ID :=cadena;
           DMGS.VFACTURAAUX.TIPO := '3';
           DMGS.VFACTURAAUX.ORDENLINEA:= ORDENLINEAFACTURA;
           DMGS.VFACTURAAUX.ORDEN:= ORDENFACTURA;
        end;
        Open;
    END;
    WHILE not dmgs.cdsq_mdfacturaaux.eof do
    begin
       dmgs.cdsq_mdfacturaaux.Last;
       if dmgs.cdsq_mdfacturaaux.Eof then
       try // para evitar el error de memoria bloqueada en el server.
           DMGS.CDSQ_MDFACTURAaux.GetNextPacket ;
       except
       end;
    end;
    dmgs.cdsq_mdfacturaaux.First;
    LISTADOS := tLISTADOS.Create(nil);
    PREVIO := TPREVIO.Create(NIL);

    LISTADOS.FRDB.DataSet := DMGS.CDSQ_MDfacturaaux;
    LISTADOS.FRDB1.DATASET := DMGS.CDSQ_MDLINEAfacturaaux;
    LISTADOS.FRDB2.DataSet := DMGS.CDSQ_EMPRESAAUX;
    LISTADOS.FRDB3.DataSet := DMGS.CDSQ_CLIENTEAUX;

 //   Path := ExtractFilePath(ParamStr(0));
    LISTADOS.frReport1.LoadFromFile(dmgs.Path + 'LISTADOS\LISTADOFACTURAS.frf');
    LISTADOS.frReport1.Preview := PREVIO.frPreview1;
    LISTADOS.frReport1.ShowReport;
    PREVIO.ShowModal;
    DSFACTURA.DataSet := DMGS.CDSQ_MDFACTURA;
    DSLINEAFACTURA.DataSet := DMGS.CDSQ_MDLINEAFACTURA;
    LISTADOS.Free;
    LISTADOS := NIL;
    PREVIO.FREE;
    PREVIO := NIL;
    DMGS.CDSQ_EMPRESAAUX.CLOSE;
    DMGS.CDSQ_CLIENTEAUX.CLOSE;

   end;
   DMGS.CDSQ_MDLINEAFACTURA.GotoBookmark(BOOKMARK);
   DMGS.CDSQ_MDLINEAFACTURA.FreeBookmark (BOOKMARK); 
end;

procedure TFACTURA.DBEdit10DblClick(Sender: TObject);
begin
  IF (DMGS.CDSQ_MDFACTURA.STATE IN [DSEDIT,DSINSERT]) THEN
   BEGIN
    DMGS.cdsq_FORMAPAGOAUX.Close;
    fdlgFORMAPAGOAUX := tfdlgFORMAPAGOAUX.Create(NIL);
    if fdlgFORMAPAGOAUX.Showmodal=mrok then
    begin
        F1ENTRA:= TRUE;
        DMGS.cdsq_MDFACTURAid_FORMA.ASSTRING := fdlgFORMAPAGOAUX.FORMAPAGO;
        Perform(WM_NextDLGCtl, 0, 0);
    end;
    fdlgFORMAPAGOAUX.Free;
    fdlgFORMAPAGOAUX := nil;
  end;
end;

procedure TFACTURA.DBEdit10Exit(Sender: TObject);
begin
  COMPROBARFORMAPAGO;
  IF (DMGS.CDSQ_MDFACTURA.STATE IN [DSEDIT,DSINSERT] ) THEN
   if DMGS.RFACTURA.BUSCANDO then
      buscar
   ELSE
      DMGS.CDSQ_MDFACTURA.Post;
end;

procedure TFACTURA.DBEdit10KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  IF (DMGS.CDSQ_MDFACTURA.STATE IN [DSEDIT,DSINSERT]) THEN
   BEGIN
   if key=112 then
    begin
        DMGS.cdsq_FORMAPAGOAUX.Close;
        fdlgFORMAPAGOAUX := tfdlgFORMAPAGOAUX.Create(NIL);
        if fdlgFORMAPAGOAUX.Showmodal=mrok then
        begin
            F1ENTRA:= TRUE;
            DMGS.cdsq_MDFACTURAid_FORMA.ASSTRING := fdlgFORMAPAGOAUX.FORMAPAGO;
            Perform(WM_NextDLGCtl, 0, 0);
        end;
        fdlgFORMAPAGOAUX.Free;
        fdlgFORMAPAGOAUX := nil;
    end
  end;
end;
PROCEDURE TFACTURA.COMPROBARFORMAPAGO;
BEGIN
     if ((not (DMGS.CDSQ_MDFACTURAID_FORMA.IsNull)) AND (TRIM(DMGS.CDSQ_MDFACTURAID_FORMA.ASSTRING)<>'')) then
     begin
        if (TRIM(LABEL31.CAPTION) <> '') then
           begin
           if not (TRIM(LABEL31.CAPTION) = trim(DMGS.CDSQ_MDFACTURAID_FORMA.asstring))
           then
             begin
               DMGS.CDSQ_FORMAPAGOAUX.close;
               DMGS.VFORMAPAGOAUX.ID :=trim(DMGS.CDSQ_MDFACTURAID_FORMA.asstring);
               DMGS.CDSQ_FORMAPAGOAUX.OPEN;
             end;
           end
           else
             begin
               DMGS.CDSQ_FORMAPAGOAUX.close;
               DMGS.VFORMAPAGOAUX.ID  :=trim(DMGS.CDSQ_MDFACTURAID_FORMA.asstring);
               DMGS.CDSQ_FORMAPAGOAUX.OPEN;
             end;
    end
    else
    begin
       DMGS.CDSQ_FORMAPAGOAUX.close;
       LABEL31.CAPTION := '';
       label30.Caption := '';
    end;

    IF DMGS.CDSQ_FORMAPAGOAUX.Active THEN
    BEGIN
      LABEL31.CAPTION := DMGS.CDSQ_FORMAPAGOAUXID_FORMA.ASSTRING;
      label30.Caption := DMGS.CDSQ_FORMAPAGOAUXDESCRIPCION.ASSTRING;
    END ;
    DMGS.CDSQ_FORMAPAGOAUX.close;
END;
FUNCTION  TFACTURA.COMPROBARCOBRADO(AUX:SMALLINT) :BOOLEAN;
VAR ESTA:BOOLEAN;
BEGIN
// lo quito para que se puedan añadir lineas
{  ESTA:= FALSE;
  IF (DMGS.CDSQ_MDFACTURA.ACTIVE )
  AND (DMGS.CDSQ_MDFACTURA.RecordCount > 0)
  THEN
  BEGIN
   with dmgs.cdsq_maximo do
   begin
     CLOSE;
   COMMANDTEXT := ' SELECT COUNT(*) AS MAXIMO FROM COBRO WHERE ID='+DMGS.CDSQ_MDFACTURAID_FACTURA.ASSTRING+' AND ID_EMPRESA= ' + DMGS.CDSQ_MDFACTURAID_EMPRESA.AsString +' AND ANYO='+DMGS.CDSQ_MDFACTURAANYO.AsString+' AND TIPO=''FACTURA'' AND ID_SERIE='''+DMGS.CDSQ_MDFACTURAID_SERIE.ASSTRING+''' ';
   OPEN;
  IF NOT DMGS.CDSQ_MAXIMO.Fields[0].ISNULL THEN
   IF DMGS.CDSQ_MAXIMO.Fields[0].VALUE>0 THEN
   begin
      ACOBRARExecute(self);
      ESTA := TRUE;
   end;
  end;

 end;
   RESULT  := ESTA;
}
// PARA QUE ENTRE EL IF.
RESULT := FALSE;
END;
procedure TFACTURA.ACANTIDADExecute(Sender: TObject);
begin
  IF DMGS.CDSQ_MDLINEAFACTURA.ACTIVE
  AND (TRIM(DMGS.CDSQ_MDLINEAFACTURAID_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_MDLINEAFACTURAID_ARTICULO.AsString+''' AND ID_EMPRESA='+DMGS.CDSQ_MDLINEAFACTURAID_EMPRESA.ASSTRING;
       OPEN;
     END;
     IF DMGS.CDSQ_ALMACENAUX.RecordCount > 0 THEN
        CANTIDAD.Showmodal;
    CANTIDAD.Free;
    CANTIDAD := nil;
end;

procedure  TFACTURA.ACOBRARExecute(Sender: TObject);
 begin
     DMGS.COMPROBARARQUEO;
     if FMENU.Hija(tcobro) then
        fmenu.CERRARHIJA(tcobro);
     tcobro.Create(self);
     IF (DMGS.CDSQ_MDFACTURA.RecordCount > 0 )
     AND ( NOT (DMGS.CDSQ_MDFACTURA.STATE IN [DSEDIT,DSINSERT]))
     THEN
     BEGIN
          WITH DMGS.CDSQ_MDCOBRO DO
          BEGIN
           CLOSE;
           DMGS.VCOBRO.ID :=' WHERE ID_EMPRESA='+DMGS.CDSQ_MDFACTURAID_EMPRESA.ASSTRING+' AND ANYO ='+ DMGS.CDSQ_MDFACTURAANYO.ASSTRING + ' AND ID='+DMGS.CDSQ_MDFACTURAID_FACTURA.ASSTRING+' AND ID_SERIE='''+DMGS.CDSQ_MDFACTURAID_SERIE.ASSTRING+''' AND TIPO=''FACTURA'' ' ;
           DMGS.VCOBRO.TIPO :='2';
           OPEN;
           IF DMGS.CDSQ_MDCOBRO.RecordCount = 0 THEN
           BEGIN
              if dmgs.cdsq_mdFACTURAtotal_cobrado.ASfloat > 0 then
              begin
                DMGS.RFACTURA.PREGUNTAEDIT := FALSE;
                dmgs.cdsq_mdFACTURA.Edit;
                dmgs.CDSQ_MDFACTURATOTAL_COBRADO.Clear;
                DMGS.CDSQ_MDFACTURACOBRADO.VALUE := 0;
                dmgs.cdsq_mdFACTURAid_forma.Clear;
                DMGS.CDSQ_MDFACTURAFECHACOBRO.CLEAR;
                DMGS.CDSQ_MDFACTURAHORACOBRO.CLEAR;
                DMGS.RFACTURA.PREGUNTA := FALSE;
                DMGS.CDSQ_MDFACTURA.Post;
              end;
              APPEND;
              DMGS.CDSQ_MDCOBROID.AsString := DMGS.CDSQ_MDFACTURAID_FACTURA.ASSTRING;
              DMGS.CDSQ_MDCOBROBASE.ASfloat := dmgs.cdsq_mdfacturadesctotal.asfloat ;
              //roundto((DMGS.CDSQ_MDFACTURABASE_FACTURA.ASfloat) - (DMGS.CDSQ_MDFACTURABASE_FACTURA.ASfloat*DMGS.CDSQ_MDFACTURADESCUENTO.ASfloat/100),DMGS.DECIMALES);
              dmgs.cdsq_mdcobrotipo.asstring:= 'FACTURA';
              dmgs.cdsq_mdcobroID_cliente.asstring := dmgs.cdsq_mdfacturaid_CLIENTE.ASSTRING;
              dmgs.cdsq_mdcobroID_SERIE.asstring := dmgs.cdsq_mdfacturaid_SERIE.ASSTRING;
              dmgs.cdsq_mdcobroANYOSERIE.asstring := dmgs.cdsq_mdfacturaANYO.ASSTRING;
              DMGS.CDSQ_MDCOBROOBSERVACIONES.FocusControl ;
            END;
           END;
       END;
end;
FUNCTION  TFACTURA.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 TFACTURA.AEUROExecute(Sender: TObject);
VAR AUX,AUX1:DOUBLE;
begin
  DMGS.COMPROBARARQUEO;
  IF NOT COMPROBARCOBRADO(1) THEN
  IF (DMGS.CDSQ_mdFACTURA.Active) and
  (dmgs.cdsq_mdlineaFACTURA.RecordCount > 0 )
  then
  begin
     DMGS.RFACTURA.PREGUNTAEDIT := FALSE;
     dmgs.cdsq_mdFACTURA.Edit;
     dmgs.cdsq_mdfactura.DisableControls;
     CAJAFACTURAS :=TCAJAFACTURAS.create(nil);
     CAJAFACTURAS.DEVOLUCION :=  LABEL7.Caption ;
     IF CAJAFACTURAS.Showmodal=MROK THEN
     BEGIN
        DMGS.cdsq_MDFACTURAid_FORMA.ASSTRING := CAJAFACTURAS.ID_FORMA;
        dmgs.CDSQ_MDFACTURATOTAL_COBRADO.asstring := cajafacturas.total_cobrado ;
        //DMGS.CDSQ_MDFACTURAENTREGA.ASfloat;
        DMGS.CDSQ_MDFACTURADEVOLUCION.ASSTRING := CAJAFACTURAS.DEVOLUCION;
        DMGS.CDSQ_MDFACTURAFECHACOBRO.VALUE := DATE;
        DMGS.CDSQ_MDFACTURAHORACOBRO.VALUE := TIME;
        FABRIRCAJON(7);
       try
          dmgs.cdsq_mdfactura.DisableControls ;
          dmgs.RFACTURA.PREGUNTA := false;
          DMGS.CDSQ_MDfactura.Post;
          IF FMENU.IMPRIMIRfactura='1' THEN
             BLISTADOCLICK(SENDER);
          finally
            dmgs.cdsq_mdfactura.EnableControls;
          end;
      END;
      if (dmgs.cdsq_mdfactura.state in [dsedit,dsinsert]) then
      begin
         dmgs.RFACTURA.PREGUNTA := false;
         dmgs.CDSQ_MDFACTURA.Post;
      end;
      dmgs.cdsq_mdfactura.EnableControls;      
      CAJAFACTURAS.FREE;
      CAJAFACTURAS := NIL;
  end;
end;

procedure TFACTURA.ATICKETExecute(Sender: TObject);
 var ordenaux:string;
     INDICE,FILAS : SMALLINT;
     NUEVA:BOOLEAN;
begin
// LO DESACTIVO PORQUE AL HACER EL ARQUEO DE CAJA DEBERIA DE VER SI HAY ALGÚN
// ITCKET FACTURADO. PERO EL TICKE YA SIRVE COMO FACTURA.

  NUEVA := TRUE;
  IF TRIM(FMENU.ID_SERIE) = '' THEN
  BEGIN
       MessageDlg('Debe seleccionar una serie en empresa y seleccionar la empresa.', mtWarning,[mbOK], 0);
       exit;
  END;
  dsFACTURA.DataSet := nil;
  dslineaFACTURA.DataSet := nil;
  DLGTICKETAUX := TDLGTICKETAUX.CREATE(NIL);
  IF (DLGTICKETAUX.ShowModal  =MROK) THEN
  BEGIN
   IF TRIM(DLGTICKETAUX.NOMBRE) <> '' THEN
   BEGIN
    IF COMPROBARTICKETS THEN
      BEGIN
      end
    else
    begin
    WITH DMGS.CDSQ_MDTICKETAUX DO
    BEGIN
       CLOSE;
       DMGS.VMDTICKETAUX.ID :=  ' AND TI.ID_EMPRESA='+DMGS.CDSQ_TICKETAUXID_EMPRESA.AsString+
         ' AND TI.ID_SERIE='''+DMGS.CDSQ_TICKETAUXID_SERIE.AsString+''' and TI.ANYO='+DMGS.CDSQ_TICKETAUXANYO.AsString+
         ' AND TI.ID_TICKET='+DMGS.CDSQ_TICKETAUXID_TICKET.AsString;
       DMGS.VMDTICKETAUX.TIPO := '4';
       OPEN;
    END;
    WITH DMGS.CDSQ_MDFACTURA DO
    BEGIN
       IF NOT Active THEN
       BEGIN
         DMGS.VFACTURA.ID :='-5541111' ;
         DMGS.VFACTURA.TIPO  :='1';
         DMGS.VFACTURA.ORDEN  := ORDENFACTURA;
         DMGS.VFACTURA.ORDENLINEA := ORDENLINEAFACTURA;
         OPEN;
       END
       ELSE
         case DMGS.PedirConfirmacion('¿AÑADIR EN FACTURA NUEVA (SI), O EN LA ACTUAL (NO)?',true,true,false) of
           mrno:NUEVA:=FALSE;
         end;
       IF NUEVA THEN
       APPEND;
    END;
      with dmgs do
      begin
      IF NUEVA THEN
      BEGIN
        cdsq_mdFACTURAid_cliente.asstring := cdsq_MDTICKETAUXid_cliente.asstring;
        cdsq_mdFACTURAiva.ASfloat := cdsq_MDTICKETAUXiva.ASfloat;
        CDSQ_MDFACTURAALBANYO.VALUE := CDSQ_MDTICKETAUXANYO.VALUE;
        CDSQ_MDFACTURAALBID_SERIE.VALUE := CDSQ_MDTICKETAUXid_serie.VALUE;
        cdsq_mdFACTURAdescuento.ASfloat := cdsq_MDTICKETAUXdescuento.ASfloat;
        CDSQ_MDFACTURAID_TICKET.VALUE := CDSQ_MDTICKETAUXID_TICKET.VALUE;
        IF CDSQ_MDTICKETAUXCOBRADO.Value = 1 THEN
        BEGIN
           CDSQ_MDFACTURACOBRADO.VALUE := 2;
           CDSQ_MDFACTURAID_FORMA.Value := CDSQ_MDTICKETAUXFORMAPAGO.Value;
        END;
        CDSQ_MDFACTURATOTAL_COBRADO.ASFLOAT := CDSQ_MDTICKETAUXTOTALCOBRADO.ASFLOAT;
        RFACTURA.PREGUNTA := false;
        cdsq_mdFACTURA.post;
      END;
     INDICE := 1;
     FILAS := DLGTICKETAUX.DBGrid1.SelectedRows.Count ;
     IF FILAS=0 THEN FILAS:=1;
     WHILE FILAS >= INDICE DO
       BEGIN
          IF FILAS > 1  THEN
             DLGTICKETAUX.DBGRID1.DATASOURCE.DataSet.GotoBookmark(pointer(DLGTICKETAUX.DBGrid1.SelectedRows.Items[INDICE-1]));
          if cdsq_mdlinEATICKETaux.RecordCount > 0 then
          begin
            cdsq_mdlinEATICKETaux.open;
            cdsq_mdLINEATICKETAUX.first;
            while not cdsq_mdLINEATICKETAUX.Eof do
            begin
            IF DMGS.CDSQ_MDFACTURA.RecordCount > 0 THEN
              BEGIN
                 WITH DMGS.CDSQ_MDLINEAFACTURA  DO
                 BEGIN
                  IF NOT Active THEN
                   OPEN;
                   LAST;
                   APPEND;
                 END;
              END;
        //*****
            CDSQ_MDLINEAFACTURANUMERO.AsString :=cdsq_mdLINEATICKETAUXid_TICKET.asstring;
            CDSQ_MDLINEAFACTURAALBANYO.AsString :=cdsq_mdLINEATICKETAUXANYO.asstring;
            CDSQ_MDLINEAFACTURAALBID_EMPRESA.AsString :=cdsq_mdLINEATICKETAUXid_EMPRESA.asstring;
            CDSQ_MDLINEAFACTURAALBID_SERIE.AsString :=cdsq_mdLINEATICKETAUXid_SERIE.asstring;
            CDSQ_MDLINEAFACTURATIPO.ASSTRING := 'TI';
            cdsq_mdlineaFACTURAid_articulo.asstring := cdsq_mdLINEATICKETAUXid_articulo.asstring;
            cdsq_mdlineaFACTURAmarca.asstring := cdsq_mdLINEATICKETAUXmarca.asstring;
            cdsq_mdlineaFACTURAdescripcion.asstring := cdsq_mdLINEATICKETAUXdescripcion.asstring;
            cdsq_mdlineaFACTURAcantidad.ASfloat := cdsq_mdLINEATICKETAUXcantidad.ASfloat;
            cdsq_mdlineaFACTURAdescuento.ASfloat := cdsq_mdLINEATICKETAUXdescuento.ASfloat;
            cdsq_mdlineaFACTURAprecio.ASfloat := ROUNDTO(cdsq_mdLINEATICKETAUXprecio.ASfloat/(1 + DMGS.CDSQ_TICKETAUXIVA.ASfloat/100),DMGS.DECIMALES);
          // AQUI HAY QUE DIVIDIR POR EL IVA DE LA LINEA
            cdsq_mdlineaFACTURAimporte.ASfloat := ROUNDTO(cdsq_mdLINEATICKETAUXIMPORTE.ASfloat/(1 + DMGS.CDSQ_TICKETAUXIVA.ASfloat/100),DMGS.DECIMALESMON);
          // AQUI HAY QUE DIVIDIR POR EL IVA DE LA LINEA
            RLINEAFACTURA.PREGUNTA  := FALSE;
            RFACTURA.ALMACEN  := TRUE; // PARA QUE NO DESCUENTE
            // LOS ARTICULOS, YA DESCONTADOS DE ALMACEN AL HACER EL
            // TICKET
            cdsq_mdlineaFACTURA.post;
            cdsq_mdLINEATICKETAUX.Next;
            end;
          end;
          cdsq_mdFACTURA.Edit;// por si se ha modificado
        // la base del PRESUPUESTOAUX exteriormente
          cdsq_mdFACTURAbase_FACTURA.ASfloat := ROUNDTO(cdsq_TICKETAUXBASE_TICKET.ASfloat/(1 + DMGS.CDSQ_TICKETAUXIVA.ASfloat/100),DMGS.DECIMALES);
          RFACTURA.PREGUNTA  := false;
          cdsq_mdFACTURA.post;
          if cdsq_mdlinEATICKETaux.RecordCount > 0 then
             INSERTARALBARAN(DMGS.CDSQ_MDFACTURAID_FACTURA.AsString,DMGS.CDSQ_MDFACTURAANYO.ASSTRING,DMGS.CDSQ_MDFACTURAID_EMPRESA.ASSTRING ,DMGS.CDSQ_MDFACTURAID_SERIE.AsString,DMGS.CDSQ_MDLINEATICKETauxID_TICKET.ASSTRING, DMGS.CDSQ_MDLINEATICKETauxANYO.ASSTRING, DMGS.CDSQ_MDLINEATICKETauxID_EMPRESA.ASSTRING, DMGS.CDSQ_MDLINEATICKETauxID_SERIE.ASSTRING, DMGS.CDSQ_MDFACTURABASE_FACTURA.ASSTRING,'TI');
          INDICE := INDICE+1;
       END
      end
    END;
   END;
   DMGS.CDSQ_MAXIMO.Close;
  END;
  dlgTICKETaux.free;
  dlgTICKETaux := nil;
  DMGS.CDSQ_MDTICKETAUX.CLOSE;

  dsFACTURA.DataSet := dmgs.cdsq_mdFACTURA ;
  dslineaFACTURA.DataSet := dmgs.cdsq_mdlineaFACTURA;
end;

PROCEDURE TFACTURA.INSERTARALBARAN(ID_FACTURA,ANYO,ID_EMPRESA,ID_SERIE,ID_ALBARAN,ALBANYO,ALBID_EMPRESA,ALBID_SERIE,BASE_FACTURA,TIPO:STRING) ;
var aux:string;
begin
    dmgs.TRANSACTIONACTUALIZAR :=10;
    WITH dmgs.CDSQ_ACTUALIZAR DO
    BEGIN

//  PONERLO COMO FACTURADO. DE MOMENTO EN CAMPOS CALCULADOS
// COMPRUEBO SI ESTA EN LA TABLA FACTURASALBARNES
        commandtext := 'INSERT INTO FACTURASALBARANES  (ID_FACTURA,ANYO,ID_EMPRESA,ID_SERIE,ID_ALBARAN,ALBANYO,ALBID_EMPRESA,ALBID_SERIE,BASE_FACTURA,BASE_ALBARAN,ALBTOTAL_COBRADO,TIPO) ' +
             ' VALUES('+ID_FACTURA+','+ANYO+','+ID_EMPRESA+','''+ID_SERIE+''','+ID_ALBARAN+','+ALBANYO+','+ALBID_EMPRESA+','''+ALBID_SERIE+''','+StringReplace(base_factura , ',', '.', [rfreplaceall])+',0,0,'''+TIPO+''' )';
        AUX := COMMANDTEXT;
        try
           Execute;
           except
            showmessage('Error No se ha insertado en facturasalbaranes.');
            dmgs.transactionACTUALIZAR:=-1; // CON ESTO HAGO QUE EL SERVER
                // HAGA UN ROLLBACK Y EJECUTO COMMIT, PARA QUE SEA
                // TODO VALIDO, PODRIA EJECUTAR UN ROLLBACK, PERO NO SE, NO ME FIO.
            COMMANDTEXT := 'COMMIT';
            EXECUTE;
            end;
     END;
end;

FUNCTION TFACTURA.COMPROBARALBARANES:BOOLEAN ;
VAR INDICE,FILAS,ID_CLIENTE:INTEGER;
    ORDENAUX :STRING;

BEGIN
     RESULT := FALSE;
     INDICE := 1;
     ID_CLIENTE := DMGS.CDSQ_MDALBARANAUXId_CLIENTE.VALUE;
     FILAS := DLGALBARANAUX.DBGrid1.SelectedRows.Count ;
     IF FILAS =0 THEN FILAS:=1;
     WHILE FILAS >= INDICE DO
     BEGIN
      IF ID_CLIENTE <> DMGS.CDSQ_MDALBARANAUXID_CLIENTE.VALUE THEN
      BEGIN
         SHOWMESSAGE('LOS ALBARANES DEBEN SER DEL MISMO CLIENTE.');
         RESULT := TRUE;
         INDICE := FILAS + 1;
      END
      ELSE
      BEGIN
       IF FILAS > 1 THEN
          DLGALBARANAUX.DBGRID1.DATASOURCE.DataSet.GotoBookmark(pointer(DLGALBARANAUX.DBGrid1.SelectedRows.Items[INDICE-1]));
       dmgs.CDSQ_MAXIMO.close;
       dmgs.CDSQ_MAXIMO.CommandText := ' select count(*) as maximo from FACTURASALBARANES where id_ALBARAN='+DMGS.CDSQ_MDALBARANAUXId_albaran.asstring+' and ALBid_empresa='+DMGS.CDSQ_MDALBARANAUXId_empresa.asstring+' and ALBid_serie='''+DMGS.CDSQ_MDALBARANAUXId_serie.asstring+''' and ALBanyo='+dmgs.cdsq_mdalbaranauxanyo.asstring+' AND TIPO=''AL'' ';
       dmgs.CDSQ_MAXIMO.Open;
      END;
      IF NOT DMGS.CDSQ_MAXIMO.Fields[0].ISNULL THEN
      if (DMGS.CDSQ_MAXIMO.ACTIVE) AND
      (dmgs.CDSQ_MAXIMO.Fields[0].VALUE > 0) then
      begin
       WITH DMGS.CDSQ_FLOAT DO
       BEGIN
          CLOSE;
          COMMANDTEXT := ' SELECT ID_FACTURA,ANYO,ID_EMPRESA,ID_SERIE FROM FACTURASALBARANES WHERE id_ALBARAN='+DMGS.CDSQ_MDALBARANAUXId_albaran.asstring+' and ALBid_empresa='+DMGS.CDSQ_MDALBARANAUXId_empresa.asstring+' and ALBid_serie='''+DMGS.CDSQ_MDALBARANAUXId_serie.asstring+''' and ALBanyo='+dmgs.cdsq_mdalbaranauxanyo.asstring+' AND TIPO=''AL'' ';
          OPEN;
       END;
       with DMGS.CDSQ_MDFACTURA do
       BEGIN
         SHOWMESSAGE('EL ALBARAN '+DMGS.CDSQ_MDALBARANAUXId_albaran.asstring+' YA HA SIDO INCLUIDO EN UNA FACTURA. SE MUESTRA');
         Close;
         if trim(arorden.sorden)='' then
           ordenaux:= ordenfactura
         else
           ordenaux := arorden.SORDEN;
         DMGS.VFACTURA.ID := ' where id_FACTURA='+DMGS.CDSQ_FLOAT.FieldBYNAME('ID_FACTURA').asstring+' and id_empresa='+DMGS.CDSQ_FLOAT.FieldBYNAME('ID_EMPRESA').asstring+' and id_serie='''+DMGS.CDSQ_FLOAT.FieldBYNAME('ID_SERIE').asstring+''' and anyo='+DMGS.CDSQ_FLOAT.FieldBYNAME('ANYO').asstring+' '+ ordenaux ;
         DMGS.VFACTURA.TIPO := '2';
         DMGS.VFACTURA.ORDENLINEA  := ORDENLINEAFACTURA;
         Open;
         RESULT := TRUE;
         INDICE := FILAS + 1;
        END;
     END;
     INDICE := INDICE + 1;
    END;
    DMGS.CDSQ_MAXIMO.CLOSE;
END;

///*************

FUNCTION TFACTURA.COMPROBARTICKETS:BOOLEAN ;
VAR INDICE,FILAS:INTEGER;
    ORDENAUX :STRING;
BEGIN
     RESULT := FALSE;
     INDICE := 1;
     FILAS := DLGTICKETAUX.DBGrid1.SelectedRows.Count ;
     IF FILAS =0 THEN FILAS:=1;
     WHILE FILAS >= INDICE DO
     BEGIN
      IF FILAS > 1 THEN
         DLGTICKETAUX.DBGRID1.DATASOURCE.DataSet.GotoBookmark(pointer(DLGTICKETAUX.DBGrid1.SelectedRows.Items[INDICE-1]));
      dmgs.CDSQ_MAXIMO.close;
      dmgs.CDSQ_MAXIMO.CommandText := ' select count(*) as maximo from FACTURASALBARANES where id_ALBARAN='+DMGS.CDSQ_TICKETAUXId_TICKET.asstring+' and ALBid_empresa='+DMGS.CDSQ_TICKETAUXId_empresa.asstring+' and ALBid_serie='''+DMGS.CDSQ_TICKETAUXId_serie.asstring+''' and ALBanyo='+dmgs.cdsq_TICKETauxanyo.asstring+' AND TIPO=''TI'' ' ;
      dmgs.CDSQ_MAXIMO.Open;
      IF NOT DMGS.CDSQ_MAXIMO.Fields[0].ISNULL THEN
      if dmgs.CDSQ_MAXIMO.Fields[0].VALUE > 0 then
      begin
       WITH DMGS.CDSQ_FLOAT DO
       BEGIN
          CLOSE;
          COMMANDTEXT := ' SELECT ID_FACTURA,ANYO,ID_EMPRESA,ID_SERIE FROM FACTURASALBARANES WHERE id_ALBARAN='+DMGS.CDSQ_TICKETAUXId_TICKET.asstring+' and ALBid_empresa='+DMGS.CDSQ_TICKETAUXId_empresa.asstring+' and ALBid_serie='''+DMGS.CDSQ_TICKETAUXId_serie.asstring+''' and ALBanyo='+dmgs.cdsq_TICKETauxanyo.asstring+' AND TIPO=''TI'' ';
          OPEN;
       END;
       with DMGS.CDSQ_MDFACTURA do
       BEGIN
         SHOWMESSAGE('EL TICKET '+DMGS.CDSQ_TICKETAUXId_TICKET.asstring+' YA HA SIDO INCLUIDO EN UNA FACTURA. SE MUESTRA');
         Close;
         if trim(arorden.sorden)='' then
           ordenaux:= ordenfactura
         else
           ordenaux := arorden.SORDEN;
         DMGS.VFACTURA.ID := ' where id_FACTURA='+DMGS.CDSQ_FLOAT.FieldBYNAME('ID_FACTURA').asstring+' and id_empresa='+DMGS.CDSQ_FLOAT.FieldBYNAME('ID_EMPRESA').asstring+' and id_serie='''+DMGS.CDSQ_FLOAT.FieldBYNAME('ID_SERIE').asstring+''' and anyo='+DMGS.CDSQ_FLOAT.FieldBYNAME('ANYO').asstring+' '+ ordenaux ;
         DMGS.VFACTURA.TIPO := '2';
         DMGS.VFACTURA.ORDENLINEA  := ORDENLINEAFACTURA;
         Open;
         RESULT := TRUE;
         INDICE := FILAS + 1;
        END;
     END;
     INDICE := INDICE + 1;
    END;
END;
PROCEDURE TFACTURA.INSERTARCOBROS;
var aux:double;
BEGIN
  WITH DMGS DO
   IF (CDSQ_MDALBARANAUXTOTAL_COBRADO.ASFLOAT <> 0)
   AND (CDSQ_MDALBARANAUXCOBRADO.VALUE = 0 )
   THEN
     BEGIN
          aux :=CDSQ_MDALBARANAUXTOTAL_COBRADO.asfloat;
          CDSQ_MDFACTURATOTAL_COBRADO.asfloat := CDSQ_MDFACTURATOTAL_COBRADO.asfloat + aux;
          // COMPRUEBO SI EXISTE EL COBRO
          // EN EL ALBARAN.
          with DMGS.CDSQ_MDcobroaux do
          BEGIN
             Close;
             DMGS.VCOBROAUX.ID  :=' AND CR.TIPO=''ALBARAN'' AND '+
             '  CR.ID='+CDSQ_MDALBARANAUXID_ALBARAN.AsString+' AND '+
             '  CR.ID_SERIE='''+CDSQ_MDALBARANAUXID_SERIE.ASSTRING+''' AND '+
             '  CR.ANYOSERIE='+CDSQ_MDALBARANAUXANYO.ASSTRING+' AND '+
             '  CR.ID_CLIENTE='+CDSQ_MDALBARANAUXID_CLIENTE.ASSTRING;
             DMGS.VCOBROAUX.TIPO := '3';
             DMGS.VCOBROAUX.ORDEN := ORDENCOBROAUX;
             OPEN;
             // SI EXISTE EL COBRO PARA EL ALBARAN LO PASO A LA FACTURA
             IF RECORDCOUNT>0 THEN
             BEGIN
               ANYADIRCOBROAFACTURA;
             END;
             CLOSE; // DMGS.CDSQ_MDCOBROAUX
             DMGS.CDSQ_MDCOBRO.Close; // LO ABRO EN ANYADIRCOBROAFACTURA
          END;
    END;

END;
PROCEDURE TFACTURA.ANYADIRCOBROAFACTURA;
BEGIN
  // COMPRUEBO SI EXISTE EL COBRO PARA LA FACTURA

    with DMGS.CDSQ_MDCOBRO do
    BEGIN
          Close;
          DMGS.VCOBRO.ID  :=' WHERE CR.TIPO=''FACTURA'' AND '+
          ' CR.ID='+dmgs.CDSQ_MDFACTURAID_FACTURA.AsString+' AND '+
          ' CR.ID_SERIE='''+dmgs.CDSQ_MDFACTURAID_SERIE.ASSTRING+''' AND '+
          ' CR.ANYOSERIE='+dmgs.CDSQ_MDFACTURAANYO.ASSTRING+' AND '+
          ' CR.ID_CLIENTE='+dmgs.CDSQ_MDFACTURAID_CLIENTE.ASSTRING;
          DMGS.VCOBRO.TIPO := '2';
          DMGS.VCOBRO.ORDEN := ORDENCOBROAUX;
          OPEN;
          // SI NO EXISTE EL COBRO PARA LA FACTURA LO AÑADO
          IF RECORDCOUNT = 0 THEN
          BEGIN
            APPEND;
            DMGS.CDSQ_MDCOBROTIPO.AsString := 'FACTURA';
            DMGS.CDSQ_MDCOBROID.AsString := DMGS.CDSQ_MDFACTURAID_FACTURA.ASSTRING;
            DMGS.CDSQ_MDCOBROID_SERIE.AsString := DMGS.CDSQ_MDFACTURAID_SERIE.ASSTRING;
            DMGS.CDSQ_MDCOBROANYOSERIE.AsString := DMGS.CDSQ_MDFACTURAANYO.ASSTRING;
            DMGS.CDSQ_MDCOBROID_CLIENTE.AsString := DMGS.CDSQ_MDFACTURAID_CLIENTE.ASSTRING;
            DMGS.CDSQ_MDCOBROID_EMPRESA.AsString := DMGS.CDSQ_MDFACTURAID_EMPRESA.ASSTRING;
            DMGS.RCOBRO.PREGUNTA := FALSE;
            DMGS.CDSQ_MDCOBRO.Post;
          END;
          // INSERTO TODAS LAS  LINEAS DEL COBRO DEL ALBARAN
          // EN EL COBRO DE LA FACTURA Y PONGO UNA LINEA
          // CON SALDO NEGATIVO.
          DMGS.CDSQ_MDLINEACOBROAUX.First;
          WHILE NOT DMGS.CDSQ_MDLINEACOBROAUX.Eof DO
          BEGIN
            DMGS.CDSQ_MDLINEACOBRO.APPEND;
            DMGS.CDSQ_MDLINEACOBROFECHA.Value :=DMGS.CDSQ_MDLINEACOBROAUXFECHA.Value ;
            DMGS.CDSQ_MDLINEACOBROID_FORMA.Value :=DMGS.CDSQ_MDLINEACOBROAUXID_FORMA.Value;
            DMGS.CDSQ_MDLINEACOBROOBSERVACIONES.Value :=DMGS.CDSQ_MDLINEACOBROAUXOBSERVACIONES.Value;
            DMGS.CDSQ_MDLINEACOBROCANTIDAD.VALUE :=DMGS.CDSQ_MDLINEACOBROAUXCANTIDAD.Value;
            DMGS.CDSQ_MDLINEACOBRONUM_DOCUMENTO.Value :=DMGS.CDSQ_MDLINEACOBROAUXNUM_DOCUMENTO.Value;
            DMGS.RLINEACOBRO.PREGUNTA := FALSE;
            DMGS.CDSQ_MDLINEACOBRO.Post;
            DMGS.CDSQ_MDLINEACOBROAUX.Next;
          END;
          DMGS.CDSQ_MDLINEACOBROAUX.Append;
          DMGS.CDSQ_MDLINEACOBROAUXOBSERVACIONES.AsString := ' COBRO PASADO AL COBRO '+DMGS.CDSQ_MDCOBROID_COBRO.ASSTRING +' Y AÑO='+DMGS.CDSQ_MDCOBROANYOSERIE.ASSTRING+' DE LA FACTURA '+DMGS.CDSQ_MDFACTURAID_FACTURA.AsString+' ';
          DMGS.CDSQ_MDLINEACOBROAUXCANTIDAD.AsString := '-'+DMGS.CDSQ_MDCOBROAUXTOTAL_COBRADO.ASSTRING ;
          DMGS.RLINEACOBROAUX.PREGUNTA:= FALSE;
          DMGS.CDSQ_MDLINEACOBROAUX.Post;
//          DMGS.CDSQ_MDLINEACOBROAUX.ApplyUpdates(0); 
    END;
    dmgs.TRANSACTIONACTUALIZAR :=10;
    WITH dmgs.CDSQ_ACTUALIZAR DO
    BEGIN
      commandtext := 'UPDATE ALBARANES SET TOTAL_COBRADO=0 WHERE ID_ALBARAN='+ DMGS.CDSQ_MDALBARANAUXID_ALBARAN.ASSTRING +' AND ID_SERIE= '''+ dmgs.CDSQ_MDALBARANAUXID_SERIE.ASSTRING +''' AND ID_EMPRESA='+ dmgs.CDSQ_MDALBARANAUXID_EMPRESA.ASSTRING+ ' AND ANYO = '+dmgs.CDSQ_MDALBARANAUXANYO.ASSTRING +' ';
//      AUX := COMMANDTEXT;
      try
        Execute;
        except
          showmessage('Error No se ha actualizado albaranes.');
          dmgs.transactionACTUALIZAR:=-1; // CON ESTO HAGO QUE EL SERVER
          // HAGA UN ROLLBACK Y EJECUTO COMMIT, PARA QUE SEA
          // TODO VALIDO, PODRIA EJECUTAR UN ROLLBACK, PERO NO SE, NO ME FIO.
          COMMANDTEXT := 'COMMIT';
          EXECUTE;
        end;
      END;
END;

procedure TFACTURA.DBEdit11KeyPress(Sender: TObject; var Key: Char);
begin
 if (dmgs.cdsq_mdFACTURA.State in [dsedit,dsinsert]) then
   if key ='.' then //.
      key:=',';  //,

 if (dmgs.cdsq_mdFACTURA.State in [dsedit,dsinsert]) then
  if (PORCIENVALOR<> DBEDIT11.Text + KEY)
  AND NOT EURO
  then
  begin
    porcien:= true;
    dmgs.cdsq_mdFACTURAdescuentoeuro.asstring:= '0';
  end;
end;



procedure TFACTURA.DBEdit5Enter(Sender: TObject);
begin
 EUROVALOR := DBEDIT5.TEXT;
end;

procedure TFACTURA.DBEdit5KeyPress(Sender: TObject; var Key: Char);
begin
 if (dmgs.cdsq_mdFACTURA.State in [dsedit,dsinsert]) then
   if key ='.' then //.
      key:=',';  //,
 if (dmgs.cdsq_mdFACTURA.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_mdFACTURAdescuento.asinteger := 0;
  end;
end;

procedure TFACTURA.DBEdit11Enter(Sender: TObject);
begin
 PORCIENVALOR := DBEDIT11.Text;
end;

procedure TFACTURA.DBEdit11Exit(Sender: TObject);
begin
  porcien := false;
  PORCIENVALOR := DBEDIT11.Text;
  EUROVALOR := DBEDIT5.Text;
end;
FUNCTION TFACTURA.FABRIRCAJON(IMPRESORA:INTEGER):BOOLEAN;
var
  f: TextFile;
begin
 if fmenu.existecaja = '1' then
 begin
  AssignFile(f,'lpt1');
  try
   TRY
    Rewrite(f);
    Writeln(f,#27+'p0'+#100+#0);
   EXCEPT
    SHOWMESSAGE('NO SE PUEDE ABRIR EL CAJON');
   END;
  finally
    CloseFile(f);
  END;
 end;
end;

procedure TFACTURA.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 TFACTURA.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_MDLINEAFACTURANUMERO' THEN
    IF dmgs.CDSQ_MDLINEAFACTURA.IndexFIELDNameS = '' THEN
       dmgs.CDSQ_MDLINEAFACTURA.IndexFIELDNameS := 'NUMERO' // ORDENA ASCENDENTE
    ELSE
       DMGS.CDSQ_MDLINEAFACTURA.IndexName := 'NUMEROINDEX'; // ORDENA DESCENDENTE


 IF AUX = 'CDSQ_MDLINEAFACTURAID_ARTICULO' THEN
    IF dmgs.CDSQ_MDLINEAFACTURA.IndexFIELDNameS = '' THEN
       dmgs.CDSQ_MDLINEAFACTURA.IndexFIELDNameS := 'ID_ARTICULO' // ORDENA ASCENDENTE
    ELSE
       DMGS.CDSQ_MDLINEAFACTURA.IndexName := 'ID_ARTICULOINDEX'; // ORDENA DESCENDENTE

 IF AUX = 'CDSQ_MDLINEAFACTURAMARCA' THEN
    IF dmgs.CDSQ_MDLINEAFACTURA.IndexFIELDNameS = '' THEN
       dmgs.CDSQ_MDLINEAFACTURA.IndexFIELDNameS := 'MARCA' // ORDENA ASCENDENTE
    ELSE
       DMGS.CDSQ_MDLINEAFACTURA.IndexName := 'MARCAINDEX'; // ORDENA DESCENDENTE

 IF AUX = 'CDSQ_MDLINEAFACTURADESCRIPCION' THEN
    IF dmgs.CDSQ_MDLINEAFACTURA.IndexFIELDNameS = '' THEN
       dmgs.CDSQ_MDLINEAFACTURA.IndexFIELDNameS := 'DESCRIPCION' // ORDENA ASCENDENTE
    ELSE
       DMGS.CDSQ_MDLINEAFACTURA.IndexName := 'DESCRIPCIONINDEX'; // ORDENA DESCENDENTE

 IF AUX = 'CDSQ_MDLINEAFACTURANUM_SERIE' THEN
    IF dmgs.CDSQ_MDLINEAFACTURA.IndexFIELDNameS = '' THEN
       dmgs.CDSQ_MDLINEAFACTURA.IndexFIELDNameS := 'NUM_SERIE' // ORDENA ASCENDENTE
    ELSE
       DMGS.CDSQ_MDLINEAFACTURA.IndexName := 'NUM_SERIEINDEX'; // ORDENA DESCENDENTE

 IF AUX = 'CDSQ_MDLINEAFACTURACANTIDAD' THEN
    IF dmgs.CDSQ_MDLINEAFACTURA.IndexFIELDNameS = '' THEN
       dmgs.CDSQ_MDLINEAFACTURA.IndexFIELDNameS := 'CANTIDAD' // ORDENA ASCENDENTE
    ELSE
       DMGS.CDSQ_MDLINEAFACTURA.IndexName := 'CANTIDADINDEX'; // ORDENA DESCENDENTE

 IF AUX = 'CDSQ_MDLINEAFACTURADESCUENTO' THEN
    IF dmgs.CDSQ_MDLINEAFACTURA.IndexFIELDNameS = '' THEN
       dmgs.CDSQ_MDLINEAFACTURA.IndexFIELDNameS := 'DESCUENTO' // ORDENA ASCENDENTE
    ELSE
       DMGS.CDSQ_MDLINEAFACTURA.IndexName := 'DESCUENTOINDEX'; // ORDENA DESCENDENTE

 IF AUX = 'CDSQ_MDLINEAFACTURAPRECIO' THEN
    IF dmgs.CDSQ_MDLINEAFACTURA.IndexFIELDNameS = '' THEN
       dmgs.CDSQ_MDLINEAFACTURA.IndexFIELDNameS := 'PRECIO' // ORDENA ASCENDENTE
    ELSE
       DMGS.CDSQ_MDLINEAFACTURA.IndexName := 'PRECIOINDEX'; // ORDENA DESCENDENTE

 IF AUX = 'CDSQ_MDLINEAFACTURAIMPORTE' THEN
    IF dmgs.CDSQ_MDLINEAFACTURA.IndexFIELDNameS = '' THEN
       dmgs.CDSQ_MDLINEAFACTURA.IndexFIELDNameS := 'IMPORTE' // ORDENA ASCENDENTE
    ELSE
       DMGS.CDSQ_MDLINEAFACTURA.IndexName := 'IMPORTEINDEX'; // ORDENA DESCENDENTE

 IF AUX = 'CDSQ_MDLINEAFACTURADESCUENTOEURO' THEN
    IF dmgs.CDSQ_MDLINEAFACTURA.IndexFIELDNameS = '' THEN
       dmgs.CDSQ_MDLINEAFACTURA.IndexFIELDNameS := 'DESCUENTOEURO' // ORDENA ASCENDENTE
    ELSE
       DMGS.CDSQ_MDLINEAFACTURA.IndexName := 'DESCUENTOEUROINDEX'; // ORDENA DESCENDENTE
end;
end.






