unit FALBARAN;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  DBCtrls, StdCtrls, Buttons, ExtCtrls, Menus, Mask, db, DBTables,
  OleCtrls, Grids, DBGrids,variants,tiposdefinidos, ActnList, ImgList,
  ComCtrls, ToolWin,STRUTILS,FORDEN, ExtDlgs,dateutils,MATH,FCOBRO, ffunciones;

type
  TALBARAN = class(TForm)
    Panel1: TPanel;
    Panel3: TPanel;
    Panel4: TPanel;
    Label23: TLabel;
    Label25: TLabel;
    Label26: TLabel;
    Label27: TLabel;
    Label28: TLabel;
    Label29: TLabel;
    Menu: TMainMenu;
    ALBARAN1: 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;
    DSALBARAN: 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;
    DSLINEAALBARAN: 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;
    BLISTADO2: TToolButton;
    ALISTADO2: TAction;
    Label20: TLabel;
    DBEdit8: TDBEdit;
    BPRESUPUESTO: TToolButton;
    Label21: TLabel;
    DBEdit9: TDBEdit;
    Label22: TLabel;
    DBText4: TDBText;
    Label24: TLabel;
    Label32: TLabel;
    DBEdit10: TDBEdit;
    Label30: TLabel;
    Label33: TLabel;
    Label34: TLabel;
    DBText5: TDBText;
    ToolButton1: TToolButton;
    BCANTIDAD: TToolButton;
    ACANTIDAD: TAction;
    APRESUPUESTO: TAction;
    BCOBRO: TToolButton;
    ACOBRAR: TAction;
    DBText6: TDBText;
    AEURO: TAction;
    BEURO: TToolButton;
    Label31: TLabel;
    DBText7: TDBText;
    AFACTURA: TAction;
    ToolButton3: TToolButton;
    DBText8: TDBText;
    DBText9: TDBText;
    DBEdit11: TDBEdit;
    Label35: TLabel;
    Label36: TLabel;
    DBEdit12: TDBEdit;
    Label37: TLabel;
    Label38: TLabel;
    Label39: TLabel;
    Label40: 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 DSALBARANStateChange(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 ALBARAN1Click(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 DSALBARANDataChange(Sender: TObject; Field: TField);
    procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    procedure BBUSQUEDAClick(Sender: TObject);
    procedure BORDENClick(Sender: TObject);
    procedure DSLINEAALBARANStateChange(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 DBEdit10Exit(Sender: TObject);
    procedure DBEdit10KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure DBEdit10DblClick(Sender: TObject);
    procedure ToolButton1Click(Sender: TObject);
    procedure ACANTIDADExecute(Sender: TObject);
    procedure ACOBRARExecute(Sender: TObject);
    procedure AEUROExecute(Sender: TObject);
    procedure AFACTURAExecute(Sender: TObject);
    procedure DBEdit11Enter(Sender: TObject);
    procedure DBEdit5Enter(Sender: TObject);
    procedure DBEdit5KeyPress(Sender: TObject; var Key: Char);
    procedure DBEdit11Exit(Sender: TObject);
    procedure DBEdit11KeyPress(Sender: TObject; var Key: Char);
    procedure DBGrid1TitleClick(Column: TColumn);
    procedure DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
//    procedure ApdComPort1TriggerAvail(CP: TObject; Count: Word);

  private
    { Private declarations }
    F1ENTRA,EURO,PORCIEN :BOOLEAN;
    EUROVALOR,PORCIENVALOR:STRING;
    SORDEN:STRING;
    cadena:string;
    esta:boolean;
    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 FABRIRCAJON(IMPRESORA:INTEGER):BOOLEAN;
//    FUNCTION OBTENERPRECIOVENTA(EAN:BOOLEAN;PRECIO,PRECIO2:STRING):DOUBLE;




  public
    { Public declarations }
    ver: string;
    ARORDEN : TORDEN;

    PROCEDURE COMPROBAREMPRESA;
    PROCEDURE COMPROBARCLIENTE;
    PROCEDURE COMPROBARFORMAPAGO;
    FUNCTION  COMPROBARFACTURADOCOBRADO(AUX:SMALLINT):BOOLEAN;
    // EL PARAMETRO ME SIRVE PARA DECIRLE SI LO MANDO DESDE EL EURO (COBROS AL CONTADO)
    // O NO

  end;

var
  ALBARAN: TALBARAN;
  ALBCOBRO:TCOBRO;

implementation

uses FDLGCLIENTE, RUTINAS, UDMgs, fdlgarticulos,
  FDLGFAMILIASAUX, menu, DLGCOLORESAUX, FEAN, FDLGALBARAN,
  FDLGCLIENTEAUX, FDLGARTICULOSAUX, FLISTADOS, fprevio, PEDIRBASE,
  DLGSERIESAUX, FDLGPRESUPUESTOAUX, DLGFORMAPAGOAUX, FFORMAPAGO,
  FLISTADOOPCIONES, FCANTIDAD, fcajaalbaranes;

{$R *.DFM}





//*******************************************************************//
//*******************************************************************//



procedure TALBARAN.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_MDLINEAALBARAN.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_MDLINEAALBARANID_ARTICULO.AsString)<>'' )
    then
    BEGIN
      pfunciones.Borrar;
      pfunciones.Albaran := true;
      pfunciones.Esta(DMGS.CDSQ_MDLINEAALBARANID_ARTICULO.ASSTRING,true,'0','0',DMGS.CDSQ_MDALBARANID_SERIE.AsString,DMGS.CDSQ_MDALBARANID_EMPRESA.AsString,DMGS.CDSQ_MDALBARANANYO.AsString);
      dmgs.cdsq_MDLINEAALBARANID_ARTICULO.asstring:=pfunciones.ID_ARTICULO;
      DMGS.CDSQ_MDLINEAALBARANDESCRIPCION.ASSTRING:= pfunciones.DESCRIPCION;
      DMGS.CDSQ_MDLINEAALBARANPRECIO.ASfloat := pfunciones.precio;//OBTENERPRECIOVENTA(TRUE,'0','0'); //ROUNDTO(DMGS.CDSQ_ARTICULOEANPRECIO_VENTA.ASfloat,DMGS.DECIMALES);
      dmgs.cdsq_MDLINEAALBARANiva.asstring := pfunciones.IVA;
      DMGS.CDSQ_MDLINEAALBARANMARCA.ASSTRING := pfunciones.MARCA;
      DMGS.CDSQ_MDLINEAALBARANCODIGO_BARRAS.AsString := pfunciones.Codigo_barras ;
      DMGS.CDSQ_MDLINEAALBARANprecio_coste.asfloat := pfunciones.PrecioCoste ;
      dbgrid1.selectedindex:=dbgrid1.selectedindex+1;


    
      // ver 3.0
{  WITH DMGS.CDSQ_MAXIMO DO
  BEGIN
   CLOSE;
   COMMANDTEXT := ' SELECT ID_ARTICULO FROM ALMACEN WHERE CODIGO_BARRAS='''+UPPERCASE(DMGS.CDSQ_MDLINEAALBARANID_ARTICULO.ASSTRING)+''' ';
   OPEN;
   IF DMGS.CDSQ_MAXIMO.RECORDCOUNT > 0 THEN
   BEGIN
      DMGS.CDSQ_MDLINEAALBARANCODIGO_BARRAS.AsString := UPPERCASE(DMGS.CDSQ_MDLINEAALBARANID_ARTICULO.ASSTRING);

      DMGS.CDSQ_MDLINEAALBARANID_ARTICULO.ASSTRING := UPPERCASE(DMGS.CDSQ_MAXIMO.Fields[0].AsString);
   END;
   CLOSE;
  END;
} //

{

     WITH DMGS.CDSQ_ARTICULOEAN DO
     BEGIN
       CLOSE;
       DMGS.AREBGRID  := UPPERCASE(DMGS.CDSQ_MDLINEAALBARANID_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_MDLINEAALBARANID_ARTICULO.asstring:=DMGS.CDSQ_ARTICULOEANID_ARTICULO.ASSTRING;
          DMGS.CDSQ_MDLINEAALBARANDESCRIPCION.ASSTRING:= DMGS.CDSQ_ARTICULOEANDESCRIPCION.AsString;
          DMGS.CDSQ_MDLINEAALBARANPRECIO.ASfloat := OBTENERPRECIOVENTA(TRUE,'0','0'); //ROUNDTO(DMGS.CDSQ_ARTICULOEANPRECIO_VENTA.ASfloat,DMGS.DECIMALES);
          dmgs.cdsq_MDLINEAALBARANiva.asstring := DMGS.CDSQ_ARTICULOEANIVA.AsString;
          DMGS.CDSQ_MDLINEAALBARANMARCA.ASSTRING := DMGS.CDSQ_ARTICULOEANMARCA.AsString;
          dbgrid1.selectedindex:=dbgrid1.selectedindex+1;
       END
       ELSE
       BEGIN
          DMGS.CDSQ_MDLINEAALBARANDESCRIPCION.ASSTRING:= '';
          DMGS.CDSQ_MDLINEAALBARANPRECIO.ASSTRING := '';
          dmgs.cdsq_MDLINEAALBARANiva.asstring := '';

       END;
       DMGS.CDSQ_ARTICULOEAN.CLOSE;
     END;
}
  end;

  // VER 4.1

  // VER 4.1
  // EL DESCUENTO SE APLICA AL PRECIO DEL ARTICULO SIN IVA. ME DA IGUAL
  IVA := ROUNDTO((1 + (DMGS.CDSQ_MDLINEAALBARANIVA.ASfloat/100)),DMGS.DECIMALES);
  PVPSINIVA :=ROUNDTO((DMGS.CDSQ_MDLINEAALBARANPRECIO.ASfloat/IVA),DMGS.DECIMALES);
  DESCUENTO := ROUNDTO(DMGS.CDSQ_MDLINEAALBARANDESCUENTO.ASfloat/100,DMGS.DECIMALESDES);
  CANTIDAD := ROUNDTO(DMGS.CDSQ_MDLINEAALBARANCANTIDAD.ASfloat,DMGS.DECIMALES);
  IVA :=ROUNDTO(DMGS.CDSQ_MDLINEAALBARANPRECIO.ASCURRENCY,DMGS.DECIMALESmon);

  if DMGS.CDSQ_MDLINEAALBARANDESCUENTO.ASfloat <> 0 then
     DESCUENTO := ROUNDTO(DMGS.CDSQ_MDLINEAALBARANDESCUENTO.ASfloat/100,DMGS.DECIMALES);
  if DMGS.CDSQ_MDLINEAALBARANDESCUENTOEURO.ASfloat <> 0 then
     DESCUENTO := ROUNDTO(DMGS.CDSQ_MDLINEAALBARANDESCUENTOEURO.ASfloat,DMGS.DECIMALES);
  IF DESCUENTO <> 0 THEN
  BEGIN
    IF DMGS.CDSQ_MDLINEAALBARANDESCUENTOEURO.ASfloat <> 0 THEN
       DMGS.CDSQ_MDLINEAALBARANIMPORTE.ASfloat := ROUNDTO((CANTIDAD *DMGS.CDSQ_MDLINEAALBARANPRECIO.AsCurrency)- DESCUENTO,-2)
    ELSE
     DMGS.CDSQ_MDLINEAALBARANIMPORTE.ASfloat := ROUNDTO(CANTIDAD *DMGS.CDSQ_MDLINEAALBARANPRECIO.AsCurrency* (1 - DESCUENTO),-2)  ;
  END
  ELSE
     DMGS.CDSQ_MDLINEAALBARANIMPORTE.ASfloat := ROUNDTO(CANTIDAD *DMGS.CDSQ_MDLINEAALBARANPRECIO.AsCurrency* (1 - DESCUENTO),-2)  ;


//  DMGS.CDSQ_MDLINEAALBARANIMPORTE.ASfloat := ROUNDTO(CANTIDAD * DMGS.CDSQ_MDLINEAALBARANPRECIO.ASCURRENCY* (1 - DESCUENTO),DMGS.DECIMALESMON)  ;
//  DMGS.CDSQ_MDLINEAALBARANBASE_LINEA.ASfloat := IVA * CANTIDAD * (PVPSINIVA - (PVPSINIVA*DESCUENTO))
//  DMGS.CDSQ_MDLINEAALBARANBASE_LINEA.ASfloat := CANTIDAD * ROUNDTO(DMGS.CDSQ_MDLINEAALBARANPRECIO.AsCurrency,-5)  * (1 - DESCUENTO)

 END;
 F1ENTRA := FALSE;
end;



procedure TALBARAN.BBUSQUEDAClick(Sender: TObject);
begin
// FUNCION PARA HACER LA BUSQUEDA,
//HACERLO CON PRESUPUESTO.
  DMGS.CDSQ_MDALBARAN.CLOSE;
  DMGS.RALBARAN.BUSCANDO  := true;
  WITH DMGS.CDSQ_MDALBARAN  DO
  BEGIN
    DMGS.VALBARAN.ID  := '-5154111';
    dmgs.VALBARAN.TIPO  := '1';
    DMGS.VALBARAN.ORDEN := ordenalbaran;
    DMGS.VALBARAN.ORDENLINEA := ORDENLINEAALBARAN;
    OPEN;
    APPEND;
  END;
  dmgs.CDSQ_MDALBARANid_ALBARAN.asstring := '';
  DMGS.CDSQ_MDALBARANID_ALBARAN.FocusControl

end;
procedure tALBARAN.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_MDALBARAN.FieldByName(AUX1).ASSTRING) ='') then
      BEGIN
         if pos('FECHA',uppercase(aux1)) <> 0 then
         begin
            auxfecha :=DMGS.CDSQ_MDALBARAN.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_MDALBARAN.FieldByName(AUX1).ASSTRING+''') ' // VER 3.0 %
            else
               aux := 'char('+AUX1 +') = ('''+ TRIM(DMGS.CDSQ_MDALBARAN.FieldByName(AUX1).ASSTRING)+''') '; // VER 3.0 %
         end;                           // LIKE
      END;
      end;
      i:= i+1;
    END;
  dmgs.CDSQ_MDALBARAN.close;
  DMGS.RALBARAN.BUSCANDO :=false;
  if aux <> '' then
  begin

     AUX := AUX + ' AND ID_EMPRESA='+FMENU.ID_EMPRESA;

     if trim(arorden.sorden) = '' then
        aux :=  aux + ordenalbaran
     else
        aux := aux + ARORDEN.SORDEN;

     with dmgs.CDSQ_MDALBARAN do
     begin
       dmgs.VALBARAN.ID  := ' where '+ aux;
       dmgs.VALBARAN.TIPO := '2';
       DMGS.VALBARAN.ORDENLINEA := ORDENLINEAALBARAN;
       open;
     end
  end;
end;
procedure TALBARAN.BORDENClick(Sender: TObject);
BEGIN
  ARORDEN.ShowModal;
end;


procedure TALBARAN.DSLINEAALBARANStateChange(Sender: TObject);
begin
  if DMGS.CDsq_MDLINEAALBARAN.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 TALBARAN.FormCreate(Sender: TObject);
begin

  try
    dbgrid1.Columns.loadfromfile(FMENU.PATHDBGRID +'\'+SELF.Name);
  except
  end;

  pfunciones := tfunciones.create;

  DMGS.CDSQ_MDLINEAALBARAN.CLOSE;
  DMGS.CDSQ_MDALBARAN.CLOSE;
  ARORDEN := TORDEN.Create(NIL);
  ARORDEN.CDS  := DMGS.CDSQ_MDALBARAN;
  ARORDEN.nombre  := 'CDSQ_MDALBARAN';
  dmgs.RALBARAN.BUSCANDO := false;
  LABEL7.Caption :='';

  with DMGS.CDSQ_MDALBARAN do
  BEGIN
     Close;
     DMGS.VALBARAN.ID :='%';
     DMGS.VALBARAN.TIPO := '1';
     dmgs.VALBARAN.ORDEN := ordenalbaran;
     DMGS.VALBARAN.ORDENLINEA := ORDENLINEAALBARAN;
     Open;
  END;
  // LO HE PUESTO ESTO PORQUE NO ME SACA
  // LAS LINEAS DEL PRIMER ALBARAN.
  DMGS.CDSQ_MDLINEAALBARAN.OPEN;
  IF DMGS.CDSQ_MDLINEAALBARAN.RecordCount > 0 THEN
  BEGIN
     DMGS.CDSQ_MDLINEAALBARAN.Last;
     DMGS.CDSQ_MDLINEAALBARAN.First;
  END;
end;
procedure TALBARAN.FormDestroy(Sender: TObject);
begin
   DMGS.CDSQ_MDLINEAALBARAN.close;
   DMGS.CDSQ_MDALBARAN.CLOSE;
   ARORDEN.FREE;
   ARORDEN := NIL;

   pfunciones.destroy;

  try
    dbgrid1.Columns.SAVETOfile(FMENU.PATHDBGRID +'\'+SELF.Name);
  except
  end;


end;
procedure TALBARAN.FormShow(Sender: TObject);
begin
    EstadoBotones;
    F1ENTRA := FALSE;
    label30.caption := '';
end;
procedure TALBARAN.BConsultasClick(Sender: TObject);
var posaux:TBookmark;
    codigo:tcodigotar;
begin
    DSALBARAN.DataSet := NIL;

    DLGALBARAN:=TDLGALBARAN.create(nil);
    IF TRIM(ARORDEN.SORDEN) = '' THEN
      dlgalbaran.ORDEN:= ordenalbaran
    ELSE
      dlgalbaran.ORDEN :=  ARORDEN.SORDEN;
//    DLGALBARAN.ORDEN :=  ARORDEN.SORDEN;
    DLGALBARAN.CERRARDATASET := FALSE;
    DLGALBARAN.Showmodal;
    DLGALBARAN.Free;
    DLGALBARAN := NIL;
    IF NOT DMGS.CDSQ_MDALBARAN.ACTIVE THEN
       ESTADOBOTONES;
// UTILIZO LOS DATASETS ABIERTOS QUE VIENEN DE FDLGTARIFAS.
    DSALBARAN.DataSet := DMGS.CDSQ_MDALBARAN ;
end;
procedure TALBARAN.FormKeyPress(Sender: TObject; var Key: Char);
begin
    if (key ='.')
    and (DMGS.CDSQ_mdalbaran.State in [dsedit,dsinsert])
    and (activecontrol is tdbedit)
    then
      if (dmgs.cdsq_mdalbaran.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_MDLINEAALBARAN.State in [dsedit,dsinsert]) then
    begin
//       if dbgrid1.Focused then
     IF (ACTIVECONTROL IS TDBGRID) THEN
       begin
        if dbgrid1.SelectedIndex = (dbgrid1.FieldCount - 1) then
        begin
          DMGS.CDSQ_MDLINEAALBARAN.next;
          IF DMGS.CDSQ_MDLINEAALBARAN.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_MDLINEAALBARAN.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_MDLINEAALBARAN.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_MDLINEAALBARAN.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_MDALBARAN.state in [dsedit,dsinsert]))
            then close;
    if (key = #27) and (DMGS.CDSQ_MDALBARAN.state in [dsedit,dsinsert])
       and (not( dmgs.cdsq_MDLINEAALBARAN.state in [dsedit,dsinsert]))
    then
       if DMGS.RALBARAN.BUSCANDO then
          buscar
       ELSE
          DMGS.CDSQ_MDALBARAN.Post;
end;
procedure TALBARAN.BSalirClick(Sender: TObject);
begin
    close;
    SELF.ModalResult:=mrOk;
end;
procedure TALBARAN.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 TALBARAN.PRIMERO1Click(Sender: TObject);
begin
   DMGS.CDSQ_MDLINEAALBARAN.first;
end;

procedure TALBARAN.ANTERIOR1Click(Sender: TObject);
begin
    DMGS.CDSQ_MDLINEAALBARAN.Prior;
end;

procedure TALBARAN.SIGUIENTE1Click(Sender: TObject);
begin
    DMGS.CDSQ_MDLINEAALBARAN.next;
end;
procedure TALBARAN.REGISTRO1Click(Sender: TObject);
begin
   if DMGS.CDSQ_MDLINEAALBARAN.state in [dsedit,dsinsert] then
   begin
      primero1.enabled:=false;
      anterior1.enabled:=false;
      siguiente1.enabled:=false;
   end
   else
   begin
       primero1.enabled:=DMGS.CDSQ_MDLINEAALBARAN.bof=false;
       anterior1.enabled:=primero1.enabled;
       siguiente1.enabled:=DMGS.CDSQ_MDLINEAALBARAN.eof=false;
   end;
end;
procedure TALBARAN.EstadoBotones;
begin
{    IF (DMGS.CDSQ_MDALBARANTOTAL_COBRADO.ASfloat >=
    DMGS.CDSQ_MDALBARANBASE_ALBARAN.ASfloat)
    AND (DMGS.CDSQ_MDALBARANBASE_ALBARAN.ASfloat > 0 )
}
    IF DMGS.CDSQ_MDALBARANCOBRADOS.VALUE
    THEN
       LABEL32.Visible := TRUE
    ELSE
       LABEL32.Visible := FALSE;

    PDatos.enabled:=DMGS.CDSQ_MDALBARAN.state in [dsedit,dsinsert];
    BAltas.enabled:=(DMGS.CDSQ_MDALBARAN.state IN [DSBROWSE,dsinactive]);
    BListado.enabled:=(DMGS.CDSQ_MDALBARAN.state=dsbrowse) and (DMGS.CDSQ_MDLINEAALBARAN.recordcount >0) ;
    BListado2.enabled:=(DMGS.CDSQ_MDALBARAN.state=dsbrowse) and (DMGS.CDSQ_MDLINEAALBARAN.recordcount >0) ;
    BConsultas.enabled:=(DMGS.CDSQ_MDALBARAN.state IN [dsbrowse,dsinactive]);
    BModificaciones.enabled:=(DMGS.CDSQ_MDALBARAN.state=dsbrowse) and (DMGS.CDSQ_MDALBARAN.recordcount >0) ;
    BBajas.enabled:=(DMGS.CDSQ_MDALBARAN.state=dsbrowse) and (DMGS.CDSQ_MDALBARAN.recordcount >0) ;
     // para que no se pueda anyadir ni borrar lineas de pedido
    // antes de introducir todos
    // los datos del pedido.
    if (DMGS.CDSQ_MDALBARAN.state=dsbrowse) and (DMGS.CDSQ_MDALBARAN.recordcount >0) then
    begin
       baltas2.enabled:=true;
       BbAJAS2.Enabled := true;
       IF (DMGS.CDSQ_MDLINEAALBARAN.ACTIVE) AND
       (DMGS.CDSQ_MDLINEAALBARAN.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_MDLINEAALBARAN.ACTIVE) AND
//      (DMGS.CDSQ_MDLINEAALBARAN.recordcount >0) then
//      BEGIN
        bmodificar2.enabled:= false;
        BCANTIDAD.Enabled := FALSE;
        BCOBRO.Enabled := FALSE;
        BEURO.Enabled := FALSE;        
//      END;
    end;
end;
procedure TALBARAN.BAltasClick(Sender: TObject);
begin
  WITH DMGS.CDSQ_MDALBARAN DO
  BEGIN
     IF NOT Active THEN
     BEGIN
      DMGS.VALBARAN.ID :='-554111' ;
      DMGS.VALBARAN.TIPO :='1';
      dmgs.VALBARAN.ORDEN := ordenalbaran;
      DMGS.VALBARAN.ORDENLINEA := ORDENLINEAALBARAN;
//      DMGS.PRBGRORDEN := ARORDEN.SORDEN;
      OPEN;
     END;
     APPEND;
  END;
  DBEDIT1.SetFocus;
end;
procedure TALBARAN.BBajasClick(Sender: TObject);
begin
  IF NOT COMPROBARFACTURADOCOBRADO(0) THEN
  BEGIN
    if (DMGS.CDSQ_MDALBARAN.recordcount>0) then //or (DMGS.CDSQ_MDALBARAN.state in [dsedit,dsinsert]) then
    begin
       case dmgs.PedirConfirmacion('¿Confirma que desea borrar este Albaran?',true,true,false) of
           mrno: exit;
       end;
       if DMGS.CDSQ_MDLINEAALBARAN.recordcount >0 then
            DMGS.BorrandoLineas:= true;
       while DMGS.CDSQ_MDLINEAALBARAN.RecordCount>0  do
       begin
              DMGS.RLINEAALBARAN.PREGUNTA := FALSE;
              DMGS.CDSQ_MDLINEAALBARAN.Delete;
       end;
       // lo tengo que hacer asi, pq en el server modifico MDALBARAN
       // 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_MDLINEAALBARAN.afterpost(DMGS.CDSQ_MDLINEAALBARAN);
       DMGS.CDSQ_MDALBARAN.delete;
       DMGS.CDSQ_MDALBARANafterpost(DMGS.CDSQ_MDALBARAN);
   end;
  END;
end;






procedure TALBARAN.BALTAS2Click(Sender: TObject);
begin
  IF NOT COMPROBARFACTURADOCOBRADO(0) THEN
  BEGIN
    IF DMGS.CDSQ_MDALBARAN.RecordCount > 0 THEN
    BEGIN
     WITH DMGS.CDSQ_MDLINEAALBARAN  DO
     BEGIN
      IF NOT Active THEN
        OPEN;
      LAST;
      APPEND;
     END;
     DBGRID1.SetFocus;
//     DBGRID1.SelectedIndex :=0;
     DMGS.CDSQ_MDLINEAALBARANID_ARTICULO.FOCUSCONTROL;
    END;
 END;
end;
procedure TALBARAN.FormClose(Sender: TObject; var Action: TCloseAction);
begin
    if (DMGS.CDSQ_MDALBARAN.State in [dsedit,dsinsert]) AND
       (NOT DMGS.RALBARAN.BUSCANDO) then
       DMGS.CDSQ_MDALBARAN.Post;

    Action := caFree;
end;
procedure TALBARAN.BModificacionesClick(Sender: TObject);
begin
  IF NOT COMPROBARFACTURADOCOBRADO(0) THEN
  BEGIN
    if DMGS.CDSQ_MDALBARAN.recordcount>0 then
    begin
        DMGS.CDSQ_MDALBARAN.edit;
//        DMGS.CDSQ_MDALBARANID_PRESUPUESTO.FocusControl ;
        DBEDIT1.SetFocus;
    end;
  END;
end;
procedure TALBARAN.BListadoClick(Sender: TObject);
 VAR BOOKMARK,bookmark1:TBOOKMARK;
begin
    BOOKMARK:=DMGS.CDSQ_MDLINEAALBARAN.GetBookmark ;
    BOOKMARK1:=DMGS.CDSQ_MDALBARAN.GetBookmark ;
    dsalbaran.DataSet := NIL; // HACE FALTA
    dslineaalbaran.DataSet := NIL;

{    if DMGS.CDSQ_MDLINEAALBARAN.recordcount>0 then
    begin
        DMGS.CDSQ_MDLINEAALBARAN.edit;
        DMGS.RLINEAALBARAN.PREGUNTA := FALSE;
        DMGS.CDSQ_MDLINEAALBARAN.Post;
    end;
}
    WITH DMGS.CDSQ_EMPRESAAUX DO
    BEGIN
      Close;
      DMGS.VEMPRESASAUX.ID:= DMGS.CDSQ_MDALBARANID_EMPRESA.AsString;
      DMGS.VEMPRESASAUX.TIPO :='2';
      OPEN;
    END;
    IF ((DMGS.CDSQ_MDALBARANID_CLIENTE.ASSTRING) <> '' ) THEN
    BEGIN
     WITH DMGS.CDSQ_CLIENTEAUX DO
     BEGIN
       CLOSE;
       DMGS.CLABGRNOMBRE:= DMGS.CDSQ_MDALBARANID_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_MDALBARAN;
    LISTADOS.FRDB1.DATASET := DMGS.CDSQ_MDLINEAALBARAN;
    LISTADOS.FRDB2.DataSet := DMGS.CDSQ_EMPRESAAUX;
    LISTADOS.FRDB3.DataSet := DMGS.CDSQ_CLIENTEAUX;

 //   Path := ExtractFilePath(ParamStr(0));
    if dmgs.CDSQ_EMPRESAAUXDESGLOSAR_IVA.value =1 then
       LISTADOS.frReport1.LoadFromFile(dmgs.Path + 'LISTADOS\ALBARANCONIVA.frf')
    ELSE
       LISTADOS.frReport1.LoadFromFile(dmgs.Path + 'LISTADOS\ALBARAN.frf');
//    LISTADOS.frReport1.Preview := PREVIO.frPreview1;
//    LISTADOS.frReport1.ShowReport;

       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.COPIASALBARAN));
         PREVIO.IMPRESO := TRUE;
       END;
{    if previo.impreso then
    begin
       DMGS.ALBARANIMPRIMIR := TRUE;
       DMGS.CDSQ_MDALBARAN.Edit;
       DMGS.CDSQ_MDALBARANIMPReso.Value := 1;
       DMGS.RALBARAN.PREGUNTA := FALSE;
       dmgs.cdsq_mdALBARAN.Post;
    end;
}
//    PREVIO.ShowModal;
    DSALBARAN.DataSet := DMGS.CDSQ_MDALBARAN;
    DSLINEAALBARAN.DataSet := DMGS.CDSQ_MDLINEAALBARAN;
    LISTADOS.Free;
    LISTADOS := NIL;
    PREVIO.FREE;
    PREVIO := NIL;
    DMGS.CDSQ_EMPRESAAUX.CLOSE;
    DMGS.CDSQ_CLIENTEAUX.CLOSE;
    DMGS.CDSQ_MDLINEAALBARAN.GotoBookmark (BOOKMARK);
    DMGS.CDSQ_MDLINEAALBARAN.FreeBookmark(BOOKMARK);
    DMGS.CDSQ_MDALBARAN.GotoBookmark (BOOKMARK1);
    DMGS.CDSQ_MDALBARAN.FreeBookmark(BOOKMARK1);
end;
procedure TALBARAN.DSALBARANStateChange(Sender: TObject);
begin
    EstadoBotones;
end;
procedure TALBARAN.ALBARAN1Click(Sender: TObject);
begin
    altas1.enabled:=baltas.enabled;
    bajas1.enabled:=bbajas.enabled;
    consultas1.enabled:=bconsultas.enabled;
    modificaciones1.enabled:=bmodificaciones.enabled;
end;



procedure TALBARAN.DSALBARANDataChange(Sender: TObject;
  Field: TField);
  VAR I:INTEGER;
      AUXBOOKMARK:TBOOKMARK;
begin
    COMPROBAREMPRESA;
    COMPROBARCLIENTE;
    COMPROBARFORMAPAGO;
    IF ((DMGS.CDSQ_MDALBARAN.Eof)   AND (NOT (DMGS.CDSQ_MDALBARAN.STATE IN [DSEDIT,DSINSERT]))) THEN
    BEGIN
      try // para evitar el error de memoria bloqueada en el server.
        DMGS.CDSQ_MDALBARAN.GetNextPacket ;
      except
      end;
    END;
    ESTADOBOTONES;
end;
procedure TALBARAN.DBEdit3Exit(Sender: TObject);
begin
  comprobarcliente;
end;


procedure TALBARAN.DBEdit3KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  IF (DMGS.CDSQ_MDALBARAN.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_MDALBARANid_cliente.ASSTRING := dlgclienteaux.codigo;
            Perform(WM_NextDLGCtl, 0, 0);
        end;
        dlgclienteaux.Free;
        dlgclienteaux := nil;
    end
  end;
end;
procedure TALBARAN.BBAJAS2Click(Sender: TObject);
begin
  IF NOT COMPROBARFACTURADOCOBRADO(0) THEN
  BEGIN
    if (DMGS.CDSQ_MDLINEAALBARAN.recordcount>0) then
    begin
      DMGS.CDSQ_MDLINEAALBARAN.delete;
      DMGS.CDSQ_MDLINEAALBARANafterpost(dmGS.CDSQ_MDLINEAALBARAN);
    end;
  END;
end;
procedure TALBARAN.DBGrid1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  IF (DMGS.CDSQ_MDLINEAALBARAN.STATE IN [DSEDIT,DSINSERT]) THEN
   BEGIN
   IF KEY=27 THEN
     DMGS.RLINEAALBARAN.ESCAPE := 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.Albaran := true;             
             pfunciones.Esta(DLGARTICULOSAUX.codigo,FALSE,DLGARTICULOSAUX.PRECIO,DLGARTICULOSAUX.PRECIO2,DMGS.CDSQ_MDALBARANID_SERIE.AsString,DMGS.CDSQ_MDALBARANID_EMPRESA.AsString,DMGS.CDSQ_MDALBARANANYO.AsString);
             dmgs.cdsq_MDLINEAALBARANID_ARTICULO.asstring:=pfunciones.ID_ARTICULO;
             DMGS.CDSQ_MDLINEAALBARANDESCRIPCION.ASSTRING:= pfunciones.DESCRIPCION;
             DMGS.CDSQ_MDLINEAALBARANPRECIO.ASfloat := pfunciones.precio;//OBTENERPRECIOVENTA(TRUE,'0','0'); //ROUNDTO(DMGS.CDSQ_ARTICULOEANPRECIO_VENTA.ASfloat,DMGS.DECIMALES);
             dmgs.cdsq_MDLINEAALBARANiva.asstring := pfunciones.IVA;
             DMGS.CDSQ_MDLINEAALBARANMARCA.ASSTRING := pfunciones.MARCA;
             DMGS.CDSQ_MDLINEAALBARANCODIGO_BARRAS.AsString := pfunciones.Codigo_barras ;
             DMGS.CDSQ_MDLINEAALBARANprecio_coste.asfloat := pfunciones.PrecioCoste ;
             dbgrid1.selectedindex:=dbgrid1.selectedindex+1;

{             dmgs.cdsq_MDLINEAALBARANID_ARTICULO.asstring:=DLGARTICULOSAUX.codigo;
             DMGS.CDSQ_MDLINEAALBARANDESCRIPCION.ASSTRING:= DLGARTICULOSAUX.DESCRIPCION;
             DMGS.CDSQ_MDLINEAALBARANPRECIO.ASfloat := OBTENERPRECIOVENTA(FALSE,DLGARTICULOSAUX.PRECIO,DLGARTICULOSAUX.PRECIO2); //ROUNDTO(strtofloat(DLGARTICULOSAUX.PRECIO),DMGS.DECIMALES);
             dmgs.cdsq_MDLINEAALBARANiva.asstring := dlgarticulosaux.iva;
             DMGS.CDSQ_MDLINEAALBARANMARCA.ASSTRING := DLGARTICULOSAUX.MARCA;
             dbgrid1.selectedindex:=dbgrid1.selectedindex+1;
}
          end;
          DLGARTICULOSAUX.Free;
          DLGARTICULOSAUX := NIL;
      END;
    END;
  end;
END;
procedure TALBARAN.DBNavigator1Click(Sender: TObject;
  Button: TNavigateBtn);
begin
  IF DMGS.CDSQ_MDALBARAN.Eof THEN
  try // para evitar el error de memoria bloqueada en el server.
     DMGS.CDSQ_MDALBARAN.GetNextPacket ;
  except
  end;
end;

procedure TALBARAN.DBGrid1ColEnter(Sender: TObject);
begin
IF (DMGS.CDSQ_MDLINEAALBARAN.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 TALBARAN.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_MDLINEAALBARAN.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 TALBARAN.DBGrid1KeyPress(Sender: TObject; var Key: Char);
BEGIN
   if (key = #46) then // 46 -> .
     if (dmgs.CDSQ_MDLINEAALBARAN.state in [dsedit,dsinsert]) then
       if (dbgrid1.SelectedField.DataType in [ftfloat,ftfmtbcd,ftbcd]) then
          key := #44 ;  //44->  ,

   if (key <> #27) then
       DMgs.RLINEAALBARAN.ESCAPECDS := false;
   if (key = #13) and not (DMGS.CDSQ_MDLINEAALBARAN.State in [dsedit,dsinsert]) then
    begin
        Perform(WM_NextDLGCtl, 0, 0);
        key:=#0;
    end;
   if (key = #13) and (DMGS.CDSQ_MDLINEAALBARAN.State in [dsedit,dsinsert]) then
   begin
        if dbgrid1.SelectedIndex = (dbgrid1.FieldCount - 1) then
        begin
              DMGS.CDSQ_MDLINEAALBARAN.Post;
        end
        else
           dbgrid1.SelectedIndex := dbgrid1.SelectedIndex + 1;
        key:=#0;
   end;
     if (key = #27) and not (DMGS.CDSQ_MDLINEAALBARAN.state in [dsedit,dsinsert])
     then
       close;
     if (key = #27) and not (ActiveControl is TButton) then
        DMgs.RLINEAALBARAN.ESCAPECDS:= true;


  if (dmgs.cdsq_mdLINEAALBARAN.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_mdLINEAALBARANdescuento.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_mdLINEAALBARANdescuentoeuro.asstring:= '0';
         end;

  END;
END;
PROCEDURE TALBARAN.COMPROBAREMPRESA ;
BEGIN
   IF TRIM(DMGS.CDSQ_MDALBARANID_EMPRESA.ASSTRING)  <> '' THEN
    LABEL7.Caption := FMENU.NOMBREEMPRESA
   ELSE
    LABEL7.Caption := '';
END;

PROCEDURE TALBARAN.COMPROBARCLIENTE;
BEGIN
     if ((not (DMGS.CDSQ_MDALBARANID_CLIENTE.IsNull)) AND (TRIM(DMGS.CDSQ_MDALBARANID_CLIENTE.ASSTRING)<>'')) then
     begin
        if (TRIM(LABEL12.CAPTION) <> '') then
           begin
           if not (TRIM(LABEL12.CAPTION) = trim(DMGS.CDSQ_MDALBARANID_CLIENTE.asstring))
           then
             begin
               DMGS.CDSQ_CLIENTEAUX.close;
               DMGS.CLABGRNOMBRE :=trim(DMGS.CDSQ_MDALBARANID_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_MDALBARANID_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;
      label38.Caption := DMGS.CDSQ_CLIENTEAUXVEHICULO.ASSTRING;
      label40.Caption := DMGS.CDSQ_CLIENTEAUXMATRICULA.ASSTRING;
    END ;
    DMGS.CDSQ_CLIENTEAUX.close;
END;
procedure TALBARAN.BMODIFICAR2Click(Sender: TObject);
begin
  IF NOT COMPROBARFACTURADOCOBRADO(0) THEN
  BEGIN
    if DMGS.CDSQ_MDLINEAALBARAN.recordcount>0 then
    begin
        DMGS.CDSQ_MDLINEAALBARAN.edit;
        DMGS.CDSQ_MDLINEAALBARANID_ARTICULO.FocusControl;
    end;
  END;
end;

procedure TALBARAN.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 TALBARAN.DBEdit5Exit(Sender: TObject);
begin
 euro:= false;
 EUROVALOR := DMGS.CDSQ_MDALBARANDESCUENTOEURO.ASSTRING;
 PORCIENVALOR := DBEDIT3.TEXT;
 IF (DMGS.CDSQ_MDALBARAN.STATE IN [DSEDIT,DSINSERT]) THEN
 BEGIN
  IF (DMGS.CDSQ_MDALBARANDESCUENTO.AsString = '')
     AND (NOT DMGS.RALBARAN.BUSCANDO)
  THEN
     DMGS.CDSQ_MDALBARANDESCUENTO.ASSTRING := '0';
 END;


end;

procedure TALBARAN.DBEdit7Exit(Sender: TObject);
begin
 if (dmgs.cdsq_MDALBARAN.State in [dsedit,dsinsert]) then
    if (trim(dbedit7.Text) ='') AND (NOT DMGS.RALBARAN.BUSCANDO )then
       dbedit7.Text := '0';

end;

procedure TALBARAN.DBGrid1DblClick(Sender: TObject);
begin
  IF (DMGS.CDSQ_MDLINEAALBARAN.STATE IN [DSEDIT,DSINSERT]) THEN
    begin
      if UPPERCASE(TRIM(dbgrid1.SelectedField.FieldName)) ='ID_ARTICULO' then
      begin
          DLGARTICULOSAUX := TDLGARTICULOSAUX.CREATE(NIL);
          IF DLGARTICULOSAUX.Showmodal=mrOk then
          begin
             F1ENTRA := TRUE;
{             dmgs.cdsq_MDLINEAALBARANID_ARTICULO.asstring:=DLGARTICULOSAUX.codigo;
             DMGS.CDSQ_MDLINEAALBARANDESCRIPCION.ASSTRING:= DLGARTICULOSAUX.DESCRIPCION;
             DMGS.CDSQ_MDLINEAALBARANPRECIO.ASfloat := OBTENERPRECIOVENTA(FALSE,DLGARTICULOSAUX.PRECIO,DLGARTICULOSAUX.PRECIO2);//ROUNDTO(strtofloat(DLGARTICULOSAUX.PRECIO),DMGS.DECIMALES);
             dmgs.cdsq_MDLINEAALBARANiva.asstring := dlgarticulosaux.iva;
             DMGS.CDSQ_MDLINEAALBARANMARCA.ASSTRING := DLGARTICULOSAUX.MARCA;
 }
             pfunciones.Borrar;
             pfunciones.Albaran := true;
             pfunciones.Esta(DLGARTICULOSAUX.codigo,FALSE,DLGARTICULOSAUX.PRECIO,DLGARTICULOSAUX.PRECIO2,DMGS.CDSQ_MDALBARANID_SERIE.AsString,DMGS.CDSQ_MDALBARANID_EMPRESA.AsString,DMGS.CDSQ_MDALBARANANYO.AsString);
             dmgs.cdsq_MDLINEAALBARANID_ARTICULO.asstring:=pfunciones.ID_ARTICULO;
             DMGS.CDSQ_MDLINEAALBARANDESCRIPCION.ASSTRING:= pfunciones.DESCRIPCION;
             DMGS.CDSQ_MDLINEAALBARANPRECIO.ASfloat := pfunciones.precio;//OBTENERPRECIOVENTA(TRUE,'0','0'); //ROUNDTO(DMGS.CDSQ_ARTICULOEANPRECIO_VENTA.ASfloat,DMGS.DECIMALES);
             dmgs.cdsq_MDLINEAALBARANiva.asstring := pfunciones.IVA;
             DMGS.CDSQ_MDLINEAALBARANMARCA.ASSTRING := pfunciones.MARCA;
             DMGS.CDSQ_MDLINEAALBARANCODIGO_BARRAS.AsString := pfunciones.Codigo_barras ;
             DMGS.CDSQ_MDLINEAALBARANprecio_coste.asfloat := pfunciones.PrecioCoste ;
             dbgrid1.selectedindex:=dbgrid1.selectedindex+1;
          end;
          DLGARTICULOSAUX.Free;
          DLGARTICULOSAUX := NIL;
      END;
  end;
end;

procedure TALBARAN.DBEdit3DblClick(Sender: TObject);
begin
  IF (DMGS.CDSQ_MDALBARAN.STATE IN [DSEDIT,DSINSERT]) THEN
   BEGIN
        DMGS.cdsq_clienteaux.Close;
        dlgclienteAUX := tdlgclienteAUX.Create(NIL);
        if dlgclienteAUX.Showmodal=mrok then
        begin
            F1ENTRA:= TRUE;
            DMGS.cdsq_MDALBARANid_cliente.ASSTRING := dlgclienteaux.codigo;
        end;
        dlgclienteaux.Free;
        dlgclienteaux := nil;
  end;
end;

procedure TALBARAN.BLISTADO2Click(Sender: TObject);
 VAR BOOKMARK:TBOOKMARK;
begin
    BOOKMARK:=DMGS.CDSQ_MDLINEAALBARAN.GetBookmark ;


    FPEDIRBASE := TFPEDIRBASE.CREATE(NIL);
    FPEDIRBASE.Edit1.Text := FLOATTOSTR(ROUNDTO(DMGS.CDSQ_MDALBARANBASE_ALBARAN.ASFLOAT,DMGS.DECIMALES));
    IF FPEDIRBASE.ShowModal = MROK THEN
    BEGIN
       IF TRIM(FPEDIRBASE.Edit1.Text) <> TRIM(DMGS.CDSQ_MDALBARANBASE_ALBARAN.AsString) THEN
       BEGIN
         DMGS.CDSQ_MDALBARAN.EDIT;
         DMGS.CDSQ_MDALBARANBASE_ALBARAN.AsString := FPEDIRBASE.Edit1.Text;
         DMGS.RALBARAN.PREGUNTA := FALSE;
         DMGS.CDSQ_MDALBARAN.Post;
       END;
    END;
    FPEDIRBASE.Free;
    FPEDIRBASE := NIL;
    ESTADOBOTONES;
    
    DSALBARAN.DataSet := NIL; // HACE FALTA
    DSLINEAALBARAN.DataSet := NIL;

    WITH DMGS.CDSQ_EMPRESAAUX DO
    BEGIN
      Close;
      DMGS.VEMPRESASAUX.ID:= DMGS.CDSQ_MDALBARANID_EMPRESA.AsString;
      DMGS.VEMPRESASAUX.TIPO :='2';
      OPEN;
    END;
    IF ((DMGS.CDSQ_MDALBARANID_CLIENTE.ASSTRING) <> '' ) THEN
    BEGIN
     WITH DMGS.CDSQ_CLIENTEAUX DO
     BEGIN
       CLOSE;
       DMGS.CLABGRNOMBRE:= DMGS.CDSQ_MDALBARANID_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_MDALBARAN;
    LISTADOS.FRDB1.DATASET := DMGS.CDSQ_MDLINEAALBARAN;
    LISTADOS.FRDB2.DataSet := DMGS.CDSQ_EMPRESAAUX;
    LISTADOS.FRDB3.DataSet := DMGS.CDSQ_CLIENTEAUX;

 //   Path := ExtractFilePath(ParamStr(0));
    LISTADOS.frReport1.LoadFromFile(dmgs.Path + 'LISTADOS\ALBARAN1.frf');
    LISTADOS.frReport1.Preview := PREVIO.frPreview1;
    LISTADOS.frReport1.ShowReport;
    PREVIO.ShowModal;
    DSALBARAN.DataSet := DMGS.CDSQ_MDALBARAN;
    DSLINEAALBARAN.DataSet := DMGS.CDSQ_MDLINEAALBARAN;
    LISTADOS.Free;
    LISTADOS := NIL;
    PREVIO.FREE;
    PREVIO := NIL;
    DMGS.CDSQ_EMPRESAAUX.CLOSE;
    DMGS.CDSQ_CLIENTEAUX.CLOSE;

    DMGS.CDSQ_MDLINEAALBARAN.GotoBookmark (BOOKMARK);
    DMGS.CDSQ_MDLINEAALBARAN.FreeBookmark(BOOKMARK);
end;

procedure TALBARAN.DBEdit8KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  IF (DMGS.CDSQ_MDALBARAN.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_MDALBARANANYO.VALUE;
        if fdlgseriesAUX.Showmodal=mrok then
        begin
            F1ENTRA:= TRUE;
            DMGS.cdsq_MDALBARANid_serie.ASSTRING := fdlgseriesaux.serie;
            IF (TRIM(DMGS.CDSQ_MDALBARANID_SERIE.ASSTRING) <> TRIM(FMENU.ID_SERIE)) THEN
              DMGS.CDSQ_MDALBARANID_ALBARAN.ASfloat := DMGS.CDSQ_SERIESAUXSIG_ALBARAN.ASfloat + 1;
            Perform(WM_NextDLGCtl, 0, 0);
        end;
        fdlgseriesaux.Free;
        fdlgseriesaux := nil;
    end
  end;

end;

procedure TALBARAN.DBEdit8DblClick(Sender: TObject);
begin
  IF (DMGS.CDSQ_MDALBARAN.STATE IN [DSEDIT,DSINSERT]) THEN
   BEGIN
        DMGS.CDSQ_SERIESAUX.Close;
        fdlgseriesAUX := tfdlgseriesAUX.Create(NIL);
        FDLGSERIESAUX.SERIE := FMENU.ID_EMPRESA ;
        FDLGSERIESAUX.ANYO := DMGS.CDSQ_MDALBARANANYO.VALUE;
        if fdlgseriesAUX.Showmodal=mrok then
        begin
            F1ENTRA:= TRUE;
            DMGS.cdsq_MDALBARANid_serie.ASSTRING := fdlgseriesaux.serie;
            IF (TRIM(DMGS.CDSQ_MDALBARANID_SERIE.ASSTRING) <> TRIM(FMENU.ID_SERIE)) THEN
              DMGS.CDSQ_MDALBARANID_ALBARAN.VALUE := DMGS.CDSQ_SERIESAUXSIG_ALBARAN.VALUE + 1;
            Perform(WM_NextDLGCtl, 0, 0);
        end;
        fdlgseriesaux.Free;
        fdlgseriesaux := nil;
  end;
end;

procedure TALBARAN.DBEdit8Exit(Sender: TObject);
begin
    IF (NOT F1ENTRA) AND (NOT DMGS.RALBARAN.BUSCANDO ) THEN
     if ((not (DMGS.CDSQ_MDALBARANID_SERIE.IsNull)) AND (TRIM(DMGS.CDSQ_MDALBARANID_SERIE.ASSTRING)<>'')) then
     begin
         DMGS.CDSQ_SERIESAUX.close;
         DMGS.VSERIESAUX.ID := DMGS.CDSQ_MDALBARANID_EMPRESA.asstring;
         DMGS.VSERIESAUX.ID1 := trim(DMGS.CDSQ_MDALBARANID_SERIE.asstring);
         DMGS.VSERIESAUX.ANYO1 := DMGS.CDSQ_MDALBARANANYO.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_MDALBARANID_ALBARAN.VALUE := DMGS.CDSQ_SERIESAUXSIG_ALBARAN.VALUE + 1 ;
         END
         ELSE
         BEGIN
           MessageDlg('EL IDENTIFICADOR DE SERIE NO EXISTE PARA ESTA EMPRESA', mtWarning,[mbOK], 0);
           DMGS.CDSQ_MDALBARANID_SERIE.FocusControl;
         END;
         DMGS.CDSQ_SERIESAUX.CLOSE;
     END;
end;

procedure TALBARAN.BPRESUPUESTOClick(Sender: TObject);
 var ordenaux:string;
     nuevo:boolean;
begin
  nuevo := true;
  IF TRIM(FMENU.ID_SERIE) = '' THEN
  BEGIN
       MessageDlg('Debe seleccionar una serie en empresa y seleccionar la empresa.', mtWarning,[mbOK], 0);
       exit;
  END;
  dsalbaran.DataSet := nil;
  dslineaalbaran.DataSet := nil;
  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 albaranes where id_presupuesto='+dlgpresupuestoaux.nombre+' and id_empresa='+fmenu.id_empresa+' and anyo='+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_MDALBARAN do
      BEGIN
        Close;
        if trim(arorden.sorden)='' then
           ordenaux:= ordenalbaran
        else
           ordenaux := arorden.SORDEN;

        DMGS.VALBARAN.ID := ' WHERE ID_presupuesto='+dlgpresupuestoaux.nombre+' and id_empresa='+fmenu.id_empresa+' and anyo='+dmgs.CDSQ_MDPRESUPUESTOAUXanyo.AsString+' '+ ordenaux ;
        DMGS.VALBARAN.TIPO := '2';
        DMGS.VALBARAN.ORDENLINEA := ORDENLINEAALBARAN;
        Open;
       END;
    end
    else
    begin
    //  BAltasClick(SENDER);
     WITH DMGS.CDSQ_MDALBARAN DO
     BEGIN
        IF NOT Active THEN
        BEGIN
          DMGS.VALBARAN.ID :='-5154111' ;
          DMGS.VALBARAN.TIPO :='1';
          dmgs.VALBARAN.ORDEN := ordenalbaran;
          DMGS.VALBARAN.ORDENLINEA := ORDENLINEAALBARAN;
          OPEN;
        END
        ELSE
         case DMGS.PedirConfirmacion('¿AÑADIR EN ALBARAN NUEVO (SI), O EN EL ACTUAL (NO)?',true,true,false) of
           mrno:NUEVO:=FALSE;
         end;
       IF NUEVO THEN
        APPEND;
     END;
     //***

       with dmgs do
       begin
       IF NUEVO THEN
       BEGIN
         cdsq_mdalbaranid_cliente.asstring := cdsq_mdpresupuestoauxid_cliente.asstring;
         cdsq_mdalbaraniva.ASfloat := cdsq_mdpresupuestoauxiva.ASfloat;
         cdsq_mdalbaranre.ASfloat := cdsq_mdpresupuestoauxre.ASfloat;
         cdsq_mdalbarandescuento.ASfloat := cdsq_mdpresupuestoauxdescuento.ASfloat;
         cdsq_mdalbaranobservaciones.asstring := cdsq_mdpresupuestoauxobservaciones.asstring;
         CDSQ_MDALBARANID_PRESUPUESTO.ASfloat := CDSQ_MDPRESUPUESTOAUXID_PRESUPUESTO.ASfloat;
         RALBARAN.PREGUNTA := false;
         cdsq_mdalbaran.post;
       END;
       if cdsq_mdlinpresupuestoaux.RecordCount > 0 then
       begin
         cdsq_mdlinpresupuestoaux.open;
         cdsq_mdlinPRESUPUESTOAUX.first;
         while not cdsq_mdlinPRESUPUESTOAUX.Eof do
         begin
         //****
         //  BALTAS2Click(sender);
         IF DMGS.CDSQ_MDALBARAN.RecordCount > 0 THEN
         BEGIN
            WITH DMGS.CDSQ_MDLINEAALBARAN  DO
            BEGIN
              IF NOT Active THEN
                 OPEN;
              LAST;
              APPEND;
            END;
         END;
        // *****
          cdsq_mdlineaalbaranid_articulo.asstring := cdsq_mdlinPRESUPUESTOAUXid_articulo.asstring;
          cdsq_mdlineaalbaranmarca.asstring := cdsq_mdlinPRESUPUESTOAUXmarca.asstring;
          cdsq_mdlineaalbarandescripcion.asstring := cdsq_mdlinPRESUPUESTOAUXdescripcion.asstring;
          cdsq_mdlineaalbarancantidad.ASfloat := cdsq_mdlinPRESUPUESTOAUXcantidad.ASfloat;
          cdsq_mdlineaalbarandescuento.ASfloat := cdsq_mdlinPRESUPUESTOAUXdescuento.ASfloat;
          cdsq_mdlineaalbaranprecio.ASfloat := ROUNDTO(cdsq_mdlinPRESUPUESTOAUXprecio.ASfloat,DMGS.DECIMALES);
          cdsq_mdlineaalbaranimporte.ASfloat := cdsq_mdlinPRESUPUESTOAUXimporte.ASfloat;
          RLINEAALBARAN.PREGUNTA := FALSE;
          cdsq_mdlineaalbaran.post;
          cdsq_mdlinPRESUPUESTOAUX.Next;
        end;
      end;
{        cdsq_mdalbaran.Edit;// por si se ha modificado
        // la base del PRESUPUESTOAUX exteriormente
        cdsq_mdalbaranbase_albaran.ASfloat := cdsq_mdPRESUPUESTOAUXbase_PRESUPUESTO.ASfloat;
        RALBARAN.PREGUNTA  := false;
        cdsq_mdalbaran.post;
}
// lo quito pq al ponerle que pueda insertar varios presupuestos
// en un mismo albaran, me calcula mal la base
// ojo con los presupuestos que se hayan modificado la base.
      end
      END;
    end;
    dmgs.cdsq_maximo.Close;
  END;
  dlgPRESUPUESTOaux.free;
  dlgPRESUPUESTOaux := nil;

  dsalbaran.DataSet := dmgs.cdsq_mdalbaran ;
  dslineaalbaran.DataSet := dmgs.cdsq_mdlineaalbaran;
end;

procedure TALBARAN.DBEdit10Exit(Sender: TObject);
begin
  COMPROBARFORMAPAGO;
  IF (DMGS.CDSQ_MDALBARAN.STATE IN [DSEDIT,DSINSERT] ) THEN
   if DMGS.RALBARAN.BUSCANDO  then
      buscar
   ELSE
      DMGS.CDSQ_MDALBARAN.Post;
end;

PROCEDURE TALBARAN.COMPROBARFORMAPAGO;
BEGIN
     if ((not (DMGS.CDSQ_MDALBARANID_FORMA.IsNull)) AND (TRIM(DMGS.CDSQ_MDALBARANID_FORMA.ASSTRING)<>'')) then
     begin
        if (TRIM(LABEL33.CAPTION) <> '') then
           begin
           if not (TRIM(LABEL33.CAPTION) = trim(DMGS.CDSQ_MDALBARANID_FORMA.asstring))
           then
             begin
               DMGS.CDSQ_FORMAPAGOAUX.close;
               DMGS.VFORMAPAGOAUX.ID  :=trim(DMGS.CDSQ_MDALBARANID_FORMA.asstring);
               DMGS.CDSQ_FORMAPAGOAUX.OPEN;
             end;
           end
           else
             begin
               DMGS.CDSQ_FORMAPAGOAUX.close;
               DMGS.VFORMAPAGOAUX.ID  :=trim(DMGS.CDSQ_MDALBARANID_FORMA.asstring);
               DMGS.CDSQ_FORMAPAGOAUX.OPEN;
             end;
    end
    else
    begin
       DMGS.CDSQ_FORMAPAGOAUX.close;
       LABEL33.CAPTION := '';
       label30.Caption := '';
    end;

    IF DMGS.CDSQ_FORMAPAGOAUX.Active THEN
    BEGIN
      LABEL33.CAPTION := DMGS.CDSQ_FORMAPAGOAUXID_FORMA.ASSTRING;
      label30.Caption := trim(DMGS.CDSQ_FORMAPAGOAUXDESCRIPCION.ASSTRING);
    END ;
    DMGS.CDSQ_FORMAPAGOAUX.close;
END;


procedure TALBARAN.DBEdit10KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  IF (DMGS.CDSQ_MDALBARAN.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_MDALBARANid_FORMA.ASSTRING := fdlgFORMAPAGOAUX.FORMAPAGO;
            Perform(WM_NextDLGCtl, 0, 0);
        end;
        fdlgFORMAPAGOAUX.Free;
        fdlgFORMAPAGOAUX := nil;
    end
  end;
end;

procedure TALBARAN.DBEdit10DblClick(Sender: TObject);
begin
  IF (DMGS.CDSQ_MDALBARAN.STATE IN [DSEDIT,DSINSERT]) THEN
   BEGIN
    DMGS.cdsq_FORMAPAGOAUX.Close;
    fdlgFORMAPAGOAUX := tfdlgFORMAPAGOAUX.Create(NIL);
    if fdlgFORMAPAGOAUX.Showmodal=mrok then
    begin
        F1ENTRA:= TRUE;
        DMGS.cdsq_MDALBARANid_FORMA.ASSTRING := fdlgFORMAPAGOAUX.FORMAPAGO;
        Perform(WM_NextDLGCtl, 0, 0);
    end;
    fdlgFORMAPAGOAUX.Free;
    fdlgFORMAPAGOAUX := nil;
  end;
end;

procedure TALBARAN.ToolButton1Click(Sender: TObject);
var cadena:string;
    BOOKMARK:TBOOKMARK;
begin
   BOOKMARK:=DMGS.CDSQ_MDLINEAALBARAN.GetBookmark ;
   listadoopciones := tlistadoopciones.create(nil);
   listadoopciones.opcion := 1;
   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_albaran 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_ALBARAN ';
               cadena := cadena + ' and COBRADO = 0';
    end
    else
    begin
     if (listadoopciones.todo = false) then
       if (listadoopciones.cobrado = true) then
//        cadena := cadena + ' total_cobrado >= base_ALBARAN and total_cobrado <> 0 '
        cadena := cadena + ' COBRADO=1 '
       else  if (listadoopciones.confactura = true) then
                 cadena := cadena + ' cobrado=2 '
             else
//        cadena := cadena + ' total_cobrado <= base_ALBARAN ';
                 cadena := cadena + ' COBRADO = 0 ';
    end;
    if trim(cadena) <> '' then
    begin
       CADENA := ' AND ' + CADENA;
 //       cadena := ' id_empresa='+fmenu.id_empresa+' and '+ cadena;
 //      cadena := ' AND '+ cadena +' ORDER BY FECHA,ID_ALBARAN ';
    end;
    listadoopciones.free;
    listadoopciones := nil;
    dsALBARAN.DataSet := NIL; // HACE FALTA
    dslineaALBARAN.DataSet := NIL;

    WITH DMGS.CDSQ_EMPRESAAUX DO
    BEGIN
      Close;
      DMGS.VEMPRESASAUX.ID:= DMGS.CDSQ_MDALBARANID_EMPRESA.AsString;
      DMGS.VEMPRESASAUX.TIPO :='2';
      OPEN;
    END;


    with DMGS.CDSQ_MDALBARANaux do
    BEGIN
        Close;
        if trim(cadena) ='' then
        begin
           DMGS.VALBARANAUX.ID  :='%';
           DMGS.VALBARANAUX.TIPO := '1';
           IF TRIM(ARORDEN.SORDEN)='' THEN
               DMGS.VALBARANAUX.ORDEN := ORDENALBARAN
           ELSE
               DMGS.VALBARANAUX.ORDEN := ARORDEN.SORDEN;
           DMGS.VALBARANAUX.ORDENLINEA := ORDENLINEAALBARAN;
        end
        else
        begin
           DMGS.VALBARANAUX.ID :=cadena;
           DMGS.VALBARANAUX.TIPO := '3';
           DMGS.VALBARANAUX.ORDENLINEA  := ORDENLINEAALBARAN;
           DMGS.VALBARANAUX.ORDEN := ORDENALBARAN;
        end;
        Open;
    END;
    WHILE not dmgs.cdsq_mdALBARANaux.eof do
    begin
       dmgs.cdsq_mdALBARANaux.Last;
       if dmgs.cdsq_mdALBARANaux.Eof then
       try // para evitar el error de memoria bloqueada en el server.
           DMGS.CDSQ_MDALBARANaux.GetNextPacket ;
       except
       end;
    end;
    dmgs.cdsq_mdALBARANaux.First;

    LISTADOS := tLISTADOS.Create(nil);
    PREVIO := TPREVIO.Create(NIL);

    LISTADOS.FRDB.DataSet := DMGS.CDSQ_MDALBARANaux;
    LISTADOS.FRDB1.DATASET := DMGS.CDSQ_MDLINEAALBARANaux;
    LISTADOS.FRDB2.DataSet := DMGS.CDSQ_EMPRESAAUX;
    LISTADOS.FRDB3.DataSet := DMGS.CDSQ_CLIENTEAUX;

 //   Path := ExtractFilePath(ParamStr(0));
    LISTADOS.frReport1.LoadFromFile(dmgs.Path + 'LISTADOS\LISTADOALBARANes.frf');
    LISTADOS.frReport1.Preview := PREVIO.frPreview1;
    LISTADOS.frReport1.ShowReport;
    PREVIO.ShowModal;
    DSALBARAN.DataSet := DMGS.CDSQ_MDALBARAN;
    DSLINEAALBARAN.DataSet := DMGS.CDSQ_MDLINEAALBARAN;
    LISTADOS.Free;
    LISTADOS := NIL;
    PREVIO.FREE;
    PREVIO := NIL;
    DMGS.CDSQ_EMPRESAAUX.CLOSE;
    DMGS.CDSQ_CLIENTEAUX.CLOSE;
   end;

   DMGS.CDSQ_MDLINEAALBARAN.GotoBookmark (BOOKMARK);
   DMGS.CDSQ_MDLINEAALBARAN.FreeBookmark(BOOKMARK);
end;
FUNCTION  TALBARAN.COMPROBARFACTURADOCOBRADO(AUX:SMALLINT):BOOLEAN;
VAR ESTA:BOOLEAN;
BEGIN
  ESTA:= FALSE;
  IF (DMGS.CDSQ_MDALBARAN.ACTIVE )
  AND (DMGS.CDSQ_MDALBARAN.RecordCount > 0)
  THEN
  BEGIN
   WITH DMGS.CDSQ_MAXIMO DO
   BEGIN
    CLOSE;
    IF NOT ESTA THEN
    BEGIN
      COMMANDTEXT := ' SELECT COUNT(*) AS MAXIMO FROM FACTURASALBARANES WHERE ID_ALBARAN='+DMGS.CDSQ_MDALBARANID_ALBARAN.ASSTRING+' AND ALBID_EMPRESA= ' + DMGS.CDSQ_MDALBARANID_EMPRESA.AsString +' AND ALBANYO='+DMGS.CDSQ_MDALBARANANYO.AsString+'  AND ALBID_SERIE='''+DMGS.CDSQ_MDALBARANID_SERIE.ASSTRING+''' ';
      OPEN;
      IF NOT DMGS.CDSQ_MAXIMO.Fields[0].ISNULL THEN
      IF DMGS.CDSQ_MAXIMO.Fields[0].VALUE>0 THEN
         ESTA := TRUE;
      CLOSE;
    END;
//    IF NOT ESTA AND
//    (AUX=0)
//    THEN
//       IF DMGS.CDSQ_MDALBARANCOBRADOS.VALUE THEN
//          ESTA:=TRUE;
   IF ESTA THEN
//     MessageDlg('NO SE PUEDE MODIFICAR EL ALBARAN, YA HA SIDO COBRADO O FACTURADO.', mtWarning,[mbOK], 0);
     MessageDlg('NO SE PUEDE MODIFICAR EL ALBARAN, YA HA SIDO FACTURADO.', mtWarning,[mbOK], 0);
   CLOSE;
// lo quito para que se puedan añadir lineas.
//   COMMANDTEXT := ' SELECT COUNT(*) AS MAXIMO FROM COBRO WHERE ID='+DMGS.CDSQ_MDALBARANID_ALBARAN.ASSTRING+' AND ID_EMPRESA= ' + DMGS.CDSQ_MDALBARANID_EMPRESA.AsString +' AND ANYO='+DMGS.CDSQ_MDALBARANANYO.AsString+' AND TIPO=''ALBARAN'' AND ID_SERIE='''+DMGS.CDSQ_MDALBARANID_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;
END;
procedure TALBARAN.ACANTIDADExecute(Sender: TObject);
begin
  IF DMGS.CDSQ_MDLINEAALBARAN.ACTIVE
  AND (TRIM(DMGS.CDSQ_MDLINEAALBARANID_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_MDLINEAALBARANID_ARTICULO.AsString+''' AND ID_EMPRESA='+DMGS.CDSQ_MDLINEAALBARANID_EMPRESA.ASSTRING;
       OPEN;
     END;
     IF DMGS.CDSQ_ALMACENAUX.RecordCount > 0 THEN
        CANTIDAD.Showmodal;
     CANTIDAD.Free;
     CANTIDAD := nil;
end;

procedure TALBARAN.ACOBRARExecute(Sender: TObject);
begin
     DMGS.COMPROBARARQUEO;
// AÑADO PARA EVITAR PROBLEMA DE LOS ALBARANES CON LOS COBROS - LUMIHOUSE
     IF DMGS.CDSQ_MDLINEACOBRO.Active THEN
        DMGS.CDSQ_MDLINEACOBRO.Close;
     IF DMGS.CDSQ_MDCOBRO.Active THEN
        DMGS.CDSQ_MDCOBRO.Close;

     if FMENU.Hija(tcobro) then
        fmenu.CERRARHIJA(tcobro);
     tcobro.Create(self) ;
     IF (DMGS.CDSQ_MDALBARAN.RecordCount > 0 )
     AND (NOT(DMGS.CDSQ_MDALBARAN.STATE IN [DSEDIT,DSINSERT]))
     THEN
     BEGIN
          WITH DMGS.CDSQ_MDCOBRO DO
          BEGIN
           CLOSE;
           DMGS.VCOBRO.ID :=' WHERE ID_EMPRESA='+DMGS.CDSQ_MDALBARANID_EMPRESA.ASSTRING+' AND ANYO ='+ DMGS.CDSQ_MDALBARANANYO.ASSTRING + ' AND ID='+DMGS.CDSQ_MDALBARANID_ALBARAN.ASSTRING+' AND ID_SERIE='''+DMGS.CDSQ_MDALBARANID_SERIE.ASSTRING+'''  AND TIPO=''ALBARAN''  ' ;
           DMGS.VCOBRO.TIPO :='2';
           OPEN;
           IF DMGS.CDSQ_MDCOBRO.RecordCount = 0 THEN
           BEGIN
            IF TRIM(DMGS.CDSQ_MDALBARANFACTURADO.AsString) <> '' THEN
            BEGIN
              SHOWMESSAGE(' EL ALBARAN YA HA SIDO FACTURADO ');
              CLOSE;
              ABORT;
            END;

            if dmgs.cdsq_mdalbarantotal_cobrado.ASfloat > 0 then
            begin
               dmgs.cdsq_mdalbaran.Edit;
               dmgs.CDSQ_MDALBARANTOTAL_COBRADO.Clear;
               DMGS.CDSQ_MDALBARANCOBRADO.VALUE := 0;
               dmgs.CDSQ_MDALBARANFECHACOBRO.clear;
               dmgs.cdsq_mdalbaranhoracobro.clear;
               dmgs.cdsq_mdalbaranid_forma.Clear;
               DMGS.RALBARAN.PREGUNTA := FALSE;
               DMGS.CDSQ_MDALBARAN.POST;
            end;
            APPEND;
            DMGS.CDSQ_MDCOBROID.AsString := DMGS.CDSQ_MDALBARANID_ALBARAN.ASSTRING;
            DMGS.CDSQ_MDCOBROBASE.ASfloat := roundto((DMGS.CDSQ_MDalbaranBASE_albaran.ASfloat) - (DMGS.CDSQ_MDalbaranBASE_albaran.ASfloat*DMGS.CDSQ_MDalbaranDESCUENTO.ASfloat/100),DMGS.DECIMALES);;
            dmgs.cdsq_mdcobrotipo.asstring:= 'ALBARAN';
            dmgs.cdsq_mdcobroID_cliente.asstring := dmgs.cdsq_mdALBARANid_CLIENTE.ASSTRING;
            dmgs.cdsq_mdcobroID_SERIE.asstring := dmgs.cdsq_mdALBARANid_SERIE.ASSTRING;
            dmgs.cdsq_mdcobroANYOSERIE.asstring := dmgs.cdsq_mdALBARANANYO.ASSTRING;
            DMGS.CDSQ_MDCOBROOBSERVACIONES.FocusControl ;
           END;
          END;
     END;
end;
FUNCTION  TALBARAN.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 TALBARAN.AEUROExecute(Sender: TObject);
begin
  DMGS.COMPROBARARQUEO;
  IF TRIM(DMGS.CDSQ_MDALBARANFACTURADO.AsString) <> '' THEN
  BEGIN
       SHOWMESSAGE(' EL ALBARAN YA HA SIDO FACTURADO ');
       ABORT;
  END;
  IF NOT COMPROBARFACTURADOCOBRADO(1) THEN
  IF (DMGS.CDSQ_mdalbaran.Active) and
  (dmgs.cdsq_mdlineaalbaran.RecordCount > 0 )
  then
  begin
     DMGS.RALBARAN.PREGUNTAEDIT := FALSE;
     dmgs.cdsq_mdALBARAN.Edit;
     dmgs.cdsq_mdALBARAN.DisableControls;
     CAJAALBARANES :=TCAJAALBARANES.create(nil);
     CAJAALBARANES.DEVOLUCION :=  LABEL7.Caption ;
     IF CAJAALBARANES.Showmodal=MROK THEN
     BEGIN
        DMGS.cdsq_MDALBARANid_FORMA.ASSTRING := CAJAALBARANES.ID_FORMA;
        dmgs.CDSQ_MDALBARANTOTAL_COBRADO.asstring := cajaalbaranes.total_cobrado;
        //DMGS.CDSQ_MDALBARANENTREGA.ASfloat;
        DMGS.CDSQ_MDALBARANDEVOLUCION.ASSTRING := CAJAALBARANES.DEVOLUCION;
        DMGS.CDSQ_MDALBARANFECHACOBRO.VALUE := DATE;
        DMGS.CDSQ_MDALBARANHORACOBRO.VALUE := TIME;
        FABRIRCAJON(7);
       try
          dmgs.cdsq_mdALBARAN.DisableControls ;
          dmgs.RALBARAN.PREGUNTA := false;
          DMGS.CDSQ_MDALBARAN.Post;
          IF FMENU.IMPRIMIRALBARAN='1' THEN
             BLISTADOCLICK(SENDER);
          finally
            dmgs.cdsq_mdALBARAN.EnableControls;
          end;
      END;
      if (dmgs.cdsq_mdALBARAN.state in [dsedit,dsinsert]) then
      begin
         dmgs.RALBARAN.PREGUNTA := false;
         dmgs.CDSQ_MDALBARAN.Post;
      end;
      dmgs.cdsq_mdALBARAN.EnableControls;
      CAJAALBARANES.FREE;
      CAJAALBARANES := NIL;
  end;
end;

PROCEDURE TALBARAN.AFACTURAExecute(Sender: TObject);
VAR INDICE,FILAS:INTEGER;
    ORDENAUX,AUX :STRING;
    CORRECTO:BOOLEAN;
BEGIN
   IF (DMGS.CDSQ_MDALBARAN.ACTIVE)
   AND NOT (DMGS.CDSQ_MDALBARAN.STATE IN [DSEDIT,DSINSERT]) THEN
   BEGIN
      dmgs.CDSQ_MAXIMO.close;
      dmgs.CDSQ_MAXIMO.CommandText := ' select count(*) as maximo from FACTURASALBARANES where id_ALBARAN='+DMGS.CDSQ_MDALBARANId_albaran.asstring+' and ALBid_empresa='+DMGS.CDSQ_MDALBARANId_empresa.asstring+' and ALBid_serie='''+DMGS.CDSQ_MDALBARANId_serie.asstring+''' and ALBanyo='+dmgs.cdsq_mdALBARANanyo.asstring+' AND TIPO=''AL'' ';
      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_MDALBARANId_albaran.asstring+' and ALBid_empresa='+DMGS.CDSQ_MDALBARANId_empresa.asstring+' and ALBid_serie='''+DMGS.CDSQ_MDALBARANId_serie.asstring+''' and ALBanyo='+dmgs.cdsq_mdALBARANanyo.asstring+' AND TIPO=''AL'' ';
          OPEN;
       END;
       with DMGS.CDSQ_MDFACTURA do
       BEGIN
         SHOWMESSAGE('EL ALBARAN '+DMGS.CDSQ_MDALBARANId_albaran.asstring+' YA HA SIDO INCLUIDO EN UNA FACTURA. SE MUESTRA');
         FMENU.BFACTURAClick(SELF);
         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;
       END;
    END
    ELSE
    BEGIN
      FMENU.BFACTURAClick(SELF);
      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;
         APPEND;
      END;
      with dmgs do
      begin
        cdsq_mdFACTURAid_cliente.asstring := cdsq_mdALBARANid_cliente.asstring;
        cdsq_mdFACTURAiva.ASfloat := cdsq_mdALBARANiva.ASfloat;
        cdsq_mdFACTURAre.ASfloat := cdsq_mdALBARANre.ASfloat;
        cdsq_mdFACTURaid_serie.ASstring := cdsq_mdALBARANid_serie.ASstring;
        CDSQ_MDFACTURAALBANYO.VALUE := CDSQ_MDALBARANANYO.VALUE;
        CDSQ_MDFACTURAALBID_SERIE.VALUE := CDSQ_mdALBARANid_serie.VALUE;
        cdsq_mdFACTURAdescuento.ASfloat := cdsq_mdALBARANdescuento.ASfloat;
        cdsq_mdFACTURAobservaciones.asstring := cdsq_mdALBARANobservaciones.asstring;
        CDSQ_MDFACTURAID_ALBARAN.VALUE := CDSQ_MDALBARANID_ALBARAN.VALUE;
        IF CDSQ_MDALBARANCOBRADO.Value = 1 THEN
           CDSQ_MDFACTURACOBRADO.VALUE := 2;
        IF TRIM(CDSQ_MDFACTURAID_FORMA.ASSTRING)<>'' THEN
           CDSQ_MDFACTURAID_FORMA.Value := CDSQ_MDALBARANID_FORMA.Value;
        // QUITO LO QUE SE HA COBRADO DE ALBARAN Y LO PASO A FACTURA
        IF (CDSQ_MDALBARANTOTAL_COBRADO.ASFLOAT <> 0)
        AND (CDSQ_MDALBARANCOBRADO.VALUE = 0 )
        THEN
        BEGIN
             CDSQ_MDFACTURATOTAL_COBRADO.VALUE := CDSQ_MDALBARANTOTAL_COBRADO.VALUE;
             dmgs.TRANSACTIONACTUALIZAR :=10;
             WITH dmgs.CDSQ_ACTUALIZAR DO
             BEGIN
                  commandtext := 'UPDATE ALBARANES SET TOTAL_COBRADO=0 WHERE ID_ALBARAN='+ CDSQ_MDALBARANID_ALBARAN.ASSTRING +' AND ID_SERIE= '''+ CDSQ_MDALBARANID_SERIE.ASSTRING +''' AND ID_EMPRESA='+ CDSQ_MDALBARANID_EMPRESA.ASSTRING+ ' AND ANYO = '+CDSQ_MDALBARANANYO.ASSTRING +' ';
                  AUX := COMMANDTEXT;
                  try
                     CORRECTO:=FALSE;
                     Execute;
                     CORRECTO := TRUE;
                  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;
             IF CORRECTO THEN
             BEGIN
             // CAMBIO EN COBRO EL TIPO EL ID EL ANYO Y EL ID_SERIE

               dmgs.TRANSACTIONACTUALIZAR :=10;
                WITH dmgs.CDSQ_ACTUALIZAR DO
                BEGIN
                   commandtext := 'UPDATE COBRO SET TIPO=''FACTURA'',ID='+DMGS.CDSQ_MDFACTURAID_FACTURA.ASSTRING +',ID_SERIE='''+DMGS.CDSQ_MDFACTURAID_SERIE.ASSTRING+''',ANYOSERIE='+DMGS.CDSQ_MDFACTURAANYO.ASSTRING +' ' +
                   ' WHERE TIPO =''ALBARAN'' AND ID='+ CDSQ_MDALBARANID_ALBARAN.ASSTRING +' AND ID_SERIE= '''+ CDSQ_MDALBARANID_SERIE.ASSTRING +''' AND ID_EMPRESA='+ CDSQ_MDALBARANID_EMPRESA.ASSTRING+ ' AND ANYOSERIE = '+CDSQ_MDALBARANANYO.ASSTRING +' ';
                   AUX := COMMANDTEXT;
                   try
                      CORRECTO:=FALSE;
                      Execute;
                      CORRECTO := TRUE;
                   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;
             CORRECTO := FALSE;
        END;
        RFACTURA.PREGUNTA := false;
        cdsq_mdFACTURA.post;

        if cdsq_mdlinEAALBARAN.RecordCount > 0 then
        begin
            cdsq_mdlinEAALBARAN.open;
            cdsq_mdLINEAALBARAN.first;
            while not cdsq_mdLINEAALBARAN.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_mdLINEAALBARANid_ALBARAN.asstring;
            CDSQ_MDLINEAFACTURAALBANYO.AsString :=cdsq_mdLINEAALBARANANYO.asstring;
            CDSQ_MDLINEAFACTURATIPO.ASSTRING := 'AL';
            CDSQ_MDLINEAFACTURAALBID_EMPRESA.AsString :=cdsq_mdLINEAALBARANid_EMPRESA.asstring;
            CDSQ_MDLINEAFACTURAALBID_SERIE.AsString :=cdsq_mdLINEAALBARANid_SERIE.asstring;
            cdsq_mdlineaFACTURAid_articulo.asstring := cdsq_mdLINEAALBARANid_articulo.asstring;
            cdsq_mdlineaFACTURAmarca.asstring := cdsq_mdLINEAALBARANmarca.asstring;
            cdsq_mdlineaFACTURAdescripcion.asstring := cdsq_mdLINEAALBARANdescripcion.asstring;
            cdsq_mdlineaFACTURAcantidad.ASfloat := cdsq_mdLINEAALBARANcantidad.ASfloat;
            cdsq_mdlineaFACTURAdescuento.ASfloat := cdsq_mdLINEAALBARANdescuento.ASfloat;
            IF FMENU.ALBSINIVA='1' THEN
            BEGIN
              cdsq_mdlineaFACTURAprecio.ASfloat := ROUNDTO(cdsq_mdLINEAALBARANprecio.ASfloat,DMGS.DECIMALES);
          // AQUI HAY QUE DIVIDIR POR EL IVA DE LA LINEA
              cdsq_mdlineaFACTURAimporte.ASfloat := ROUNDTO(cdsq_mdLINEAALBARANIMPORTE.ASfloat,DMGS.DECIMALESMON);
          // AQUI HAY QUE DIVIDIR POR EL IVA DE LA LINEA
            END
            ELSE
            BEGIN
              cdsq_mdlineaFACTURAprecio.ASfloat := ROUNDTO(cdsq_mdLINEAALBARANprecio.ASfloat/(1 + DMGS.CDSQ_MDALBARANIVA.ASfloat/100),DMGS.DECIMALES);
          // AQUI HAY QUE DIVIDIR POR EL IVA DE LA LINEA
              cdsq_mdlineaFACTURAimporte.ASfloat := ROUNDTO(cdsq_mdLINEAALBARANIMPORTE.ASfloat/(1 + DMGS.CDSQ_MDALBARANIVA.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_mdLINEAALBARAN.Next;
            end;
          end;
          cdsq_mdFACTURA.Edit;// por si se ha modificado
        // la base del PRESUPUESTOAUX exteriormente

          IF FMENU.ALBSINIVA='1' THEN
             cdsq_mdFACTURAbase_FACTURA.ASfloat := ROUNDTO(cdsq_mdALBARANBASE_ALBARAN.ASfloat,DMGS.DECIMALES)
          ELSE
             cdsq_mdFACTURAbase_FACTURA.ASfloat := ROUNDTO(cdsq_mdALBARANBASE_ALBARAN.ASfloat/(1 + DMGS.CDSQ_MDALBARANIVA.ASfloat/100),DMGS.DECIMALES);

          RFACTURA.PREGUNTA  := false;
          cdsq_mdFACTURA.post;
          if cdsq_mdlinEAALBARAN.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_MDLINEAALBARANID_ALBARAN.ASSTRING, DMGS.CDSQ_MDLINEAALBARANANYO.ASSTRING, DMGS.CDSQ_MDLINEAALBARANID_EMPRESA.ASSTRING, DMGS.CDSQ_MDLINEAALBARANID_SERIE.ASSTRING, DMGS.CDSQ_MDFACTURABASE_FACTURA.ASSTRING,'AL');
       END
    END;
   DMGS.CDSQ_MAXIMO.Close;
   DMGS.CDSQ_MDALBARAN.CLOSE;
   SELF.CLOSE;
   END;
END;


PROCEDURE TALBARAN.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;


procedure TALBARAN.DBEdit11Enter(Sender: TObject);
begin
 PORCIENVALOR := DBEDIT11.Text;
end;

procedure TALBARAN.DBEdit5Enter(Sender: TObject);
begin
 EUROVALOR := DBEDIT5.TEXT;
end;

procedure TALBARAN.DBEdit5KeyPress(Sender: TObject; var Key: Char);
begin
 if (dmgs.cdsq_mdALBARAN.State in [dsedit,dsinsert]) then
   if key ='.' then //.
      key:=',';  //,
 if (dmgs.cdsq_mdALBARAN.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_mdALBARANdescuento.asinteger := 0;
  end;
end;

procedure TALBARAN.DBEdit11Exit(Sender: TObject);
begin
  porcien := false;
  PORCIENVALOR := DBEDIT11.Text;
  EUROVALOR := DBEDIT5.Text;
end;

procedure TALBARAN.DBEdit11KeyPress(Sender: TObject; var Key: Char);
begin
 if (dmgs.cdsq_mdALBARAN.State in [dsedit,dsinsert]) then
   if key ='.' then //.
      key:=',';  //,

 if (dmgs.cdsq_mdALBARAN.State in [dsedit,dsinsert]) then
  if (PORCIENVALOR<> DBEDIT11.Text + KEY)
  AND NOT EURO
  then
  begin
    porcien:= true;
    dmgs.cdsq_mdALBARANdescuentoeuro.asstring:= '0';
  end;
end;
FUNCTION TALBARAN.FABRIRCAJON(IMPRESORA:INTEGER):BOOLEAN;
var
  f: TextFile;
  PUERTO:STRING;
begin
 if fmenu.existecaja = '1' then
 begin
  PUERTO:=FMENU.PUERTOTIQUETS;
  AssignFile(f,PUERTO);
  try
   TRY
    Rewrite(f);
    Writeln(f,#27+'p0'+#100+#0);
   EXCEPT
    SHOWMESSAGE('NO SE PUEDE ABRIR EL CAJON');
   END;
  finally
    CloseFile(f);
  END;
 end;
end;


procedure TALBARAN.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_MDLINEAALBARANID_ARTICULO' THEN
    IF dmgs.CDSQ_MDLINEAALBARAN.IndexFIELDNameS = '' THEN
       dmgs.CDSQ_MDLINEAALBARAN.IndexFIELDNameS := 'ID_ARTICULO' // ORDENA ASCENDENTE
    ELSE
       DMGS.CDSQ_MDLINEAALBARAN.IndexName := 'ID_ARTICULOINDEX'; // ORDENA DESCENDENTE

 IF AUX = 'CDSQ_MDLINEAALBARANMARCA' THEN
    IF dmgs.CDSQ_MDLINEAALBARAN.IndexFIELDNameS = '' THEN
       dmgs.CDSQ_MDLINEAALBARAN.IndexFIELDNameS := 'MARCA' // ORDENA ASCENDENTE
    ELSE
       DMGS.CDSQ_MDLINEAALBARAN.IndexName := 'MARCAINDEX'; // ORDENA DESCENDENTE

 IF AUX = 'CDSQ_MDLINEAALBARANDESCRIPCION' THEN
    IF dmgs.CDSQ_MDLINEAALBARAN.IndexFIELDNameS = '' THEN
       dmgs.CDSQ_MDLINEAALBARAN.IndexFIELDNameS := 'DESCRIPCION' // ORDENA ASCENDENTE
    ELSE
       DMGS.CDSQ_MDLINEAALBARAN.IndexName := 'DESCRIPCIONINDEX'; // ORDENA DESCENDENTE

 IF AUX = 'CDSQ_MDLINEAALBARANNUM_SERIE' THEN
    IF dmgs.CDSQ_MDLINEAALBARAN.IndexFIELDNameS = '' THEN
       dmgs.CDSQ_MDLINEAALBARAN.IndexFIELDNameS := 'NUM_SERIE' // ORDENA ASCENDENTE
    ELSE
       DMGS.CDSQ_MDLINEAALBARAN.IndexName := 'NUM_SERIEINDEX'; // ORDENA DESCENDENTE

 IF AUX = 'CDSQ_MDLINEAALBARANCANTIDAD' THEN
    IF dmgs.CDSQ_MDLINEAALBARAN.IndexFIELDNameS = '' THEN
       dmgs.CDSQ_MDLINEAALBARAN.IndexFIELDNameS := 'CANTIDAD' // ORDENA ASCENDENTE
    ELSE
       DMGS.CDSQ_MDLINEAALBARAN.IndexName := 'CANTIDADINDEX'; // ORDENA DESCENDENTE

 IF AUX = 'CDSQ_MDLINEAALBARANDESCUENTO' THEN
    IF dmgs.CDSQ_MDLINEAALBARAN.IndexFIELDNameS = '' THEN
       dmgs.CDSQ_MDLINEAALBARAN.IndexFIELDNameS := 'DESCUENTO' // ORDENA ASCENDENTE
    ELSE
       DMGS.CDSQ_MDLINEAALBARAN.IndexName := 'DESCUENTOINDEX'; // ORDENA DESCENDENTE

 IF AUX = 'CDSQ_MDLINEAALBARANPRECIO' THEN
    IF dmgs.CDSQ_MDLINEAALBARAN.IndexFIELDNameS = '' THEN
       dmgs.CDSQ_MDLINEAALBARAN.IndexFIELDNameS := 'PRECIO' // ORDENA ASCENDENTE
    ELSE
       DMGS.CDSQ_MDLINEAALBARAN.IndexName := 'PRECIOINDEX'; // ORDENA DESCENDENTE

 IF AUX = 'CDSQ_MDLINEAALBARANIMPORTE' THEN
    IF dmgs.CDSQ_MDLINEAALBARAN.IndexFIELDNameS = '' THEN
       dmgs.CDSQ_MDLINEAALBARAN.IndexFIELDNameS := 'IMPORTE' // ORDENA ASCENDENTE
    ELSE
       DMGS.CDSQ_MDLINEAALBARAN.IndexName := 'IMPORTEINDEX'; // ORDENA DESCENDENTE

 IF AUX = 'CDSQ_MDLINEAALBARANDESCUENTOEURO' THEN
    IF dmgs.CDSQ_MDLINEAALBARAN.IndexFIELDNameS = '' THEN
       dmgs.CDSQ_MDLINEAALBARAN.IndexFIELDNameS := 'DESCUENTOEURO' // ORDENA ASCENDENTE
    ELSE
       DMGS.CDSQ_MDLINEAALBARAN.IndexName := 'DESCUENTOEUROINDEX'; // ORDENA DESCENDENTE
end;

procedure TALBARAN.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 TALBARAN.ApdComPort1TriggerAvail(CP: TObject; Count: Word);
VAR
  I:WORD;
  C:CHAR;
  S:STRING;
begin
{ IF (DMGS.CDSQ_MDLINEAALBARAN.STATE IN [DSEDIT,DSINSERT])  AND
 (UPPERCASE(TRIM(DbGRID1.SelectedField.FieldName)) ='ID_ARTICULO') then
 begin
   DMGS.CDSQ_MDLINEAALBARANID_ARTICULO.AsString := '';
   ESTA := FALSE;
   // EN LOS DBGRID PUEDE SER QUE YA ESTE DEFINIDA
   // PARA CUANDO ES F1
   FOR I:=1 TO COUNT DO
   IF NOT ESTA THEN
   BEGIN
     TRY
      C := APDCOMPORT1.GetChar ;
      if C=#13 THEN
      BEGIN
         C := APDCOMPORT1.GetChar ;
         IF C=#10 THEN
         BEGIN
            ESTA := TRUE;
            DMGS.CDSQ_MDLINEAALBARANID_ARTICULO.AsString := cadena;
            CADENA := '';
           END
      END
      ELSE
        cadena := cadena + C
     EXCEPT
     END;
   END;
  end;
 }
//end;
{
function TALBARAN.OBTENERPRECIOVENTA(EAN:BOOLEAN;PRECIO,PRECIO2:STRING):DOUBLE;
VAR AUX:DOUBLE;
begin

   DMGS.CDSQ_FLOAT.Close;
   DMGS.CDSQ_FLOAT.CommandText := ' SELECT PRECIO FROM SERIES WHERE ID_SERIE='''+DMGS.CDSQ_MDALBARANID_SERIE.AsString+''' AND ID_EMPRESA='+DMGS.CDSQ_MDALBARANID_EMPRESA.AsString+' AND ANYO='+DMGS.CDSQ_MDALBARANANYO.AsString ;
   DMGS.CDSQ_FLOAT.Open;

   IF FMENU.ALBSINIVA='1' THEN
   BEGIN
     IF DMGS.CDSQ_FLOAT.Fields [0].AsString ='PVP2' THEN
       IF EAN THEN
        AUX := ROUNDTO(DMGS.CDSQ_ARTICULOEANPVP2.ASfloat/(1+DMGS.CDSQ_MDLINEAALBARANIVA.AsFloat/100),DMGS.DECIMALES)
       ELSE
        AUX := ROUNDTO(STRTOFLOAT(PRECIO2)/(1+DMGS.CDSQ_MDLINEAALBARANIVA.AsFloat/100),DMGS.DECIMALES)
     ELSE
       IF EAN THEN
           AUX := ROUNDTO(DMGS.CDSQ_ARTICULOEANPRECIO_VENTA.ASfloat/(1+DMGS.CDSQ_MDLINEAALBARANIVA.AsFloat/100),DMGS.DECIMALES)
       ELSE
           AUX := ROUNDTO(STRTOFLOAT(PRECIO)/(1+DMGS.CDSQ_MDLINEAALBARANIVA.AsFloat/100),DMGS.DECIMALES)
   END
   ELSE
   BEGIN
     IF DMGS.CDSQ_FLOAT.Fields [0].AsString ='PVP2' THEN
       IF EAN THEN
         AUX := ROUNDTO(DMGS.CDSQ_ARTICULOEANPVP2.ASfloat,DMGS.DECIMALES)
       ELSE
         AUX := STRTOFLOAT(PRECIO2)
     ELSE
       IF EAN THEN
           AUX := ROUNDTO(DMGS.CDSQ_ARTICULOEANPRECIO_VENTA.ASfloat,DMGS.DECIMALES)
       ELSE
           AUX := STRTOFLOAT(PRECIO);
   END;

   DMGS.CDSQ_FLOAT.Close;

   RESULT := AUX;
end;

}
end.







