unit FCOBRO;

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;

type
  TCOBRO = class(TForm)
    Panel1: TPanel;
    Panel3: TPanel;
    Panel4: TPanel;
    Label23: TLabel;
    Label25: TLabel;
    Label26: TLabel;
    Label27: TLabel;
    Label28: TLabel;
    Label29: TLabel;
    Menu: TMainMenu;
    COBRO1: 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;
    DSCOBRO: 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;
    DSLINEACOBRO: TDataSource;
    PDATOS: TPanel;
    Label6: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    DBEdit1: TDBEdit;
    DBEdit3: TDBEdit;
    ToolBar2: TToolBar;
    BALTAS2: TToolButton;
    BBAJAS2: TToolButton;
    BLISTADO: TToolButton;
    DBText1: TDBText;
    Label11: TLabel;
    DBEdit2: TDBEdit;
    Label12: TLabel;
    BMODIFICAR2: TToolButton;
    Label14: TLabel;
    Label15: TLabel;
    Label17: TLabel;
    DBText3: TDBText;
    ALISTADO: TAction;
    AALTAS2: TAction;
    ABAJAS2: TAction;
    AModificar2: TAction;
    ABUSQUEDA: TAction;
    AORDEN: TAction;
    Label18: TLabel;
    ALISTADO2: TAction;
    Label22: TLabel;
    Label33: TLabel;
    Label34: TLabel;
    DBEdit4: TDBEdit;
    DBComboBox1: TDBComboBox;
    Label10: TLabel;
    DBText2: TDBText;
    DBEdit5: TDBEdit;
    Panel6: TPanel;
    Panel7: TPanel;
    Label41: TLabel;
    Label42: TLabel;
    Label48: TLabel;
    DBText4: TDBText;
    Label13: TLabel;
    DBEdit6: TDBEdit;
    VER1: TMenuItem;
    TODOS1: TMenuItem;
    NOCOBRADOS: TMenuItem;
    COBRADOS1: TMenuItem;
    COBRADOSPARTE1: TMenuItem;
    ToolButton1: TToolButton;
    Label16: TLabel;
    Label21: TLabel;
    DBEdit9: TDBEdit;
    Label7: TLabel;
    DBEdit7: TDBEdit;
    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 DSCOBROStateChange(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 COBRO1Click(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 DSCOBRODataChange(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 DSLINEACOBROStateChange(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 DBGrid1DblClick(Sender: TObject);
    procedure DBEdit3DblClick(Sender: TObject);
    procedure DBEdit10Exit(Sender: TObject);
    procedure DBEdit4KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure DBEdit4DblClick(Sender: TObject);
    procedure DSLINEACOBRODataChange(Sender: TObject; Field: TField);
    procedure DBEdit2Exit(Sender: TObject);
    procedure DBComboBox1Change(Sender: TObject);
    procedure DBEdit6Exit(Sender: TObject);
    procedure TODOS1Click(Sender: TObject);
    procedure NOCOBRADOSClick(Sender: TObject);
    procedure COBRADOS1Click(Sender: TObject);
    procedure COBRADOSPARTE1Click(Sender: TObject);
    procedure ToolButton1Click(Sender: TObject);
    procedure FormKeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure DBGrid1TitleClick(Column: TColumn);

  private
    { Private declarations }
    F1ENTRA :BOOLEAN;
    SORDEN:STRING;
    procedure EstadoBotones;
    procedure buscar;


  public
    { Public declarations }
    ver: string;
    ARORDEN : TORDEN;

    PROCEDURE COMPROBAREMPRESA;
    PROCEDURE COMPROBARCLIENTE;
    PROCEDURE COMPROBARFORMAPAGO;
    procedure albaranfactura;

  end;

var
  COBRO: TCOBRO;

implementation

uses FDLGCLIENTE, RUTINAS, UDMgs,
  FDLGFAMILIASAUX, menu, DLGCOLORESAUX, FEAN, FDLGCOBRO,
  FDLGCLIENTEAUX, FLISTADOS, fprevio, PEDIRBASE,
  DLGSERIESAUX, FDLGPRESUPUESTOAUX, DLGFORMAPAGOAUX, FFORMAPAGO,
  FFACTURA_ALBARAN, FDLGFACTURAAUX, FDLGALBARANAUX, FLISTADOOPCIONEScobro;

{$R *.DFM}





//*******************************************************************//
//*******************************************************************//



procedure TCOBRO.DBGrid1ColExit(Sender: TObject);
 VAR AUX:TDATETIME;
     AUX1:STRING;
     PVP,DESCUENTO,IVA,PVPSINIVA,CANTIDAD : DOUBLE;
begin
 F1ENTRA := FALSE;
end;



procedure TCOBRO.BBUSQUEDAClick(Sender: TObject);
begin
// FUNCION PARA HACER LA BUSQUEDA,
//HACERLO CON PRESUPUESTO.
  DMGS.CDSQ_MDCOBRO.CLOSE;
  DMGS.RCOBRO.BUSCANDO := true;
  WITH DMGS.CDSQ_MDCOBRO  DO
  BEGIN
    DMGS.VCOBRO.ID  := '-1115487';
    dmgs.VCOBRO.TIPO  := '1';
    DMGS.VCOBRO.ID1 := VER;
    OPEN;
    APPEND;
  END;
  dmgs.CDSQ_MDCOBROid_COBRO.asstring := '';
  DMGS.CDSQ_MDCOBROID_COBRO.FocusControl

end;
procedure tCOBRO.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) OR
    (SELF.COMPONENTS[I] IS TDBCOMBOBOX)
    THEN
    BEGIN
      IF (SELF.Components[I] IS TDBEDIT) THEN
          AUX1:=(SELF.Components[I] AS TDBEDIT).DataField
      ELSE
          AUX1:=(SELF.Components[I] AS TDBCOMBOBOX).DataField ;
      if NOT (TRIM(DMGS.CDSQ_MDCOBRO.FieldByName(AUX1).ASSTRING) ='') then
      BEGIN
         if pos('FECHA',uppercase(aux1)) <> 0 then
         begin
            auxfecha :=DMGS.CDSQ_MDCOBRO.FieldByName(AUX1).AsDateTime ;
//            fecha := inttostr(yearof(auxfecha))+'/'+inttostr(monthof(auxfecha))+'/'+inttostr(dayof(auxfecha));
            fecha := inttostr(yearof(auxfecha))+'-'+inttostr(monthof(auxfecha))+'-'+inttostr(dayof(auxfecha));
            if aux <> '' then
               aux := aux + ' AND ' + AUX1  +' = '''+ fecha+''' '
            else
               aux := AUX1 +' = '''+ fecha+''' ';
         end
         else
         begin
            if aux <> '' then
               aux := aux + ' AND char(' + AUX1  +') Like ('''+ DMGS.CDSQ_MDCOBRO.FieldByName(AUX1).ASSTRING+''') ' // VER 3.0 %
            else
               aux := 'char('+AUX1 +') like ('''+ TRIM(DMGS.CDSQ_MDCOBRO.FieldByName(AUX1).ASSTRING)+''') '; // VER 3.0 %
         end;
      END;
      end;
      i:= i+1;
    END;
  dmgs.CDSQ_MDCOBRO.close;
  DMGS.RCOBRO.BUSCANDO:=false;
  if aux <> '' then
  begin

     AUX := AUX + ' AND ID_EMPRESA='+FMENU.ID_EMPRESA;

     aux := aux + ARORDEN.SORDEN;
     with dmgs.CDSQ_MDCOBRO do
     begin
       dmgs.VCOBRO.ID  := ' where '+ aux;
       dmgs.VCOBRO.TIPO := '2';
       open;
     end
  end;
end;
procedure TCOBRO.BORDENClick(Sender: TObject);
BEGIN
  ARORDEN.ShowModal;
end;


procedure TCOBRO.DSLINEACOBROStateChange(Sender: TObject);
begin
  if DMGS.CDsq_MDLINEACOBRO.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 TCOBRO.FormCreate(Sender: TObject);
begin

  try
    dbgrid1.Columns.loadfromfile(FMENU.PATHDBGRID +'\'+SELF.Name);
  except
  end;


  DMGS.CDSQ_MDLINEACOBRO.CLOSE;
  DMGS.CDSQ_MDCOBRO.CLOSE;
  ARORDEN := TORDEN.Create(NIL);
  ARORDEN.CDS  := DMGS.CDSQ_MDCOBRO;
  ARORDEN.nombre  := 'CDSQ_MDCOBRO';
  dmgs.RCOBRO.BUSCANDO := false;
  VER := '';
  LABEL16.Caption :='';
  with DMGS.CDSQ_MDCOBRO do
  BEGIN
    Close;
    DMGS.VCOBRO.ID :='%';
    DMGS.VCOBRO.TIPO := '1';
    DMGS.VCOBRO.ID1 := VER;
    DMGS.VCOBRO.ORDEN := ORDENCOBRO;
    Open;
   END;
end;
procedure TCOBRO.FormDestroy(Sender: TObject);
begin
   DMGS.CDSQ_MDLINEACOBRO.close;
   DMGS.CDSQ_MDCOBRO.CLOSE;
   ARORDEN.FREE;
   ARORDEN := NIL;

  try
    dbgrid1.Columns.SAVETOfile(FMENU.PATHDBGRID +'\'+SELF.Name);
  except
  end;
   
end;
procedure TCOBRO.FormShow(Sender: TObject);
begin
    EstadoBotones;
    F1ENTRA := FALSE;
end;
procedure TCOBRO.BConsultasClick(Sender: TObject);
var posaux:TBookmark;
    codigo:tcodigotar;
begin
    DSCOBRO.DataSet := NIL;

    DLGCOBRO:=TDLGCOBRO.create(nil);
    IF TRIM(ARORDEN.SORDEN) = '' THEN
      DLGCOBRO.ORDEN:= ORDENCOBRO
    ELSE
      DLGCOBRO.ORDEN :=  ARORDEN.SORDEN;
//    DLGCOBRO.ORDEN :=  ARORDEN.SORDEN;
    DLGCOBRO.VER := VER;
    DLGCOBRO.CERRARDATASET := FALSE;
    DLGCOBRO.Showmodal;
    DLGCOBRO.Free;
    DLGCOBRO := NIL;
//    IF NOT DMGS.CDSQ_MDCOBRO.ACTIVE THEN
    ESTADOBOTONES;
// UTILIZO LOS DATASETS ABIERTOS QUE VIENEN DE FDLGTARIFAS.
    DSCOBRO.DataSet := DMGS.CDSQ_MDCOBRO ;
end;
procedure TCOBRO.FormKeyPress(Sender: TObject; var Key: Char);
begin
    if (key ='.')
    and (DMGS.CDSQ_mdcobro.State in [dsedit,dsinsert])
    and (activecontrol is tdbedit)
    then
      if (dmgs.cdsq_mdcobro.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_MDLINEACOBRO.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_MDLINEACOBRO.next;
          IF DMGS.CDSQ_MDLINEACOBRO.EOF THEN
             BALTAS2.Click;
          dbgrid1.selectedindex := 0;
        end
        else
           dbgrid1.SelectedIndex := dbgrid1.SelectedIndex + 1;
       end
       else
           Perform(WM_NextDLGCtl, 0, 0);
       key:=#0;
    end;

    if not (activeControl is TDBEdit) and not (DMGS.CDSQ_MDLINEACOBRO.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_MDLINEACOBRO.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_MDLINEACOBRO.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_MDCOBRO.state in [dsedit,dsinsert]))
            then close;
    if (key = #27) and (DMGS.CDSQ_MDCOBRO.state in [dsedit,dsinsert])
       and (not( dmgs.cdsq_MDLINEACOBRO.state in [dsedit,dsinsert]))
    then
       if DMGS.RCOBRO.BUSCANDO  then
          buscar
       ELSE
          DMGS.CDSQ_MDCOBRO.Post;
end;
procedure TCOBRO.BSalirClick(Sender: TObject);
begin
    close;
    SELF.ModalResult:=mrOk;
end;
procedure TCOBRO.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
  var aux:tdatetime;
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 TCOBRO.PRIMERO1Click(Sender: TObject);
begin
   DMGS.CDSQ_MDLINEACOBRO.first;
end;

procedure TCOBRO.ANTERIOR1Click(Sender: TObject);
begin
    DMGS.CDSQ_MDLINEACOBRO.Prior;
end;

procedure TCOBRO.SIGUIENTE1Click(Sender: TObject);
begin
    DMGS.CDSQ_MDLINEACOBRO.next;
end;
procedure TCOBRO.REGISTRO1Click(Sender: TObject);
begin
   if DMGS.CDSQ_MDLINEACOBRO.state in [dsedit,dsinsert] then
   begin
      primero1.enabled:=false;
      anterior1.enabled:=false;
      siguiente1.enabled:=false;
   end
   else
   begin
       primero1.enabled:=DMGS.CDSQ_MDLINEACOBRO.bof=false;
       anterior1.enabled:=primero1.enabled;
       siguiente1.enabled:=DMGS.CDSQ_MDLINEACOBRO.eof=false;
   end;
end;
procedure TCOBRO.EstadoBotones;
begin
    PDatos.enabled:=DMGS.CDSQ_MDCOBRO.state in [dsedit,dsinsert];
    BAltas.enabled:=(DMGS.CDSQ_MDCOBRO.state IN [DSBROWSE,dsinactive]);
    BListado.enabled:=(DMGS.CDSQ_MDCOBRO.state=dsbrowse) and (DMGS.CDSQ_MDCOBRO.recordcount >0) ;
    BConsultas.enabled:=(DMGS.CDSQ_MDCOBRO.state IN [dsbrowse,dsinactive]);
    BModificaciones.enabled:=(DMGS.CDSQ_MDCOBRO.state=dsbrowse) and (DMGS.CDSQ_MDCOBRO.recordcount >0) ;
    BBajas.enabled:=(DMGS.CDSQ_MDCOBRO.state=dsbrowse) and (DMGS.CDSQ_MDCOBRO.recordcount >0) ;
     // para que no se pueda anyadir ni borrar lineas de pedido
    // antes de introducir todos
    // los datos del pedido.
    if (DMGS.CDSQ_MDCOBRO.state=dsbrowse) and (DMGS.CDSQ_MDCOBRO.recordcount >0) then
    begin
       baltas2.enabled:=true;
       BbAJAS2.Enabled := true;
       IF (DMGS.CDSQ_MDLINEACOBRO.ACTIVE) AND
       (DMGS.CDSQ_MDLINEACOBRO.recordcount >0) then
          bmodificar2.enabled:= true;
    end
    else
    begin
      baltas2.enabled := false;
      bBAJAS2.Enabled := false;
      IF (DMGS.CDSQ_MDLINEACOBRO.ACTIVE) AND
      (DMGS.CDSQ_MDLINEACOBRO.recordcount >0) then
          bmodificar2.enabled:= false;
    end;
end;
procedure TCOBRO.BAltasClick(Sender: TObject);
begin
  DMGS.COMPROBARARQUEO;
  WITH DMGS.CDSQ_MDCOBRO DO
  BEGIN
     IF NOT Active THEN
     BEGIN
      DMGS.VCOBRO.ID :='-1115487' ;
      DMGS.VCOBRO.TIPO :='1';
      DMGS.VCOBRO.ID1 := VER;
//      DMGS.PRBGRORDEN := ARORDEN.SORDEN;
      OPEN;
     END;
     APPEND;
  END;
  DBEDIT1.SetFocus;
end;
procedure TCOBRO.BBajasClick(Sender: TObject);
begin
    if (DMGS.CDSQ_MDCOBRO.recordcount>0) then //or (DMGS.CDSQ_MDCOBRO.state in [dsedit,dsinsert]) then
    begin
       case dmgs.PedirConfirmacion('¿Confirma que desea borrar este COBRO?',true,true,false) of
           mrno: exit;
       end;
       if DMGS.CDSQ_MDLINEACOBRO.recordcount >0 then
            DMGS.BorrandoLineas:= true;
       while DMGS.CDSQ_MDLINEACOBRO.RecordCount>0  do
       begin
              DMGS.RLINEACOBRO.PREGUNTA  := FALSE;
              DMGS.CDSQ_MDLINEACOBRO.Delete;
       end;
       // lo tengo que hacer asi, pq en el server modifico MDCOBRO
       // 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_MDLINEACOBRO.afterpost(DMGS.CDSQ_MDLINEACOBRO);
       DMGS.CDSQ_MDCOBRO.delete;
       DMGS.CDSQ_MDCOBROafterpost(DMGS.CDSQ_MDCOBRO);
   end;
end;






procedure TCOBRO.BALTAS2Click(Sender: TObject);
begin
    IF DMGS.CDSQ_MDCOBRO.RecordCount > 0 THEN
    BEGIN
     WITH DMGS.CDSQ_MDLINEACOBRO  DO
     BEGIN
      IF NOT Active THEN
        OPEN;
      LAST;
      APPEND;
     END;
     DBGRID1.SetFocus;
//     DBGRID1.SelectedIndex :=0;
    END;
    DMGS.CDSQ_MDLINEACOBRONUM_LINEA.FocusControl;
end;
procedure TCOBRO.FormClose(Sender: TObject; var Action: TCloseAction);
begin
    if (DMGS.CDSQ_MDCOBRO.State in [dsedit,dsinsert]) AND
       (NOT DMGS.RCOBRO.BUSCANDO ) then
       DMGS.CDSQ_MDCOBRO.Post;
    action :=  cafree;
end;
procedure TCOBRO.BModificacionesClick(Sender: TObject);
begin
    DMGS.COMPROBARARQUEO;
    if DMGS.CDSQ_MDCOBRO.recordcount>0 then
    begin
        DMGS.CDSQ_MDCOBRO.edit;
//        DMGS.CDSQ_MDCOBROID_PRESUPUESTO.FocusControl ;
        DBEDIT1.SetFocus;
    end;
end;
procedure TCOBRO.BListadoClick(Sender: TObject);
var bookmark,bookmark1:tbookmark;
begin
// HACERLO
  { LISTADO }
    bookmark := dmgs.CDSQ_MDCOBRO.GetBookmark ;
    bookmark1 := dmgs.CDSQ_MDLINEACOBRO.GetBookmark ;
    
{    if DMGS.CDSQ_MDLINEACOBRO.recordcount>0 then
    begin
        DMGS.CDSQ_MDLINEACOBRO.edit;
        DMGS.RLINEACOBRO.PREGUNTA := FALSE;
        DMGS.CDSQ_MDLINEACOBRO.Post;
    end;
}
    WITH DMGS.CDSQ_EMPRESAAUX DO
    BEGIN
      Close;
      DMGS.VEMPRESASAUX.ID:= DMGS.CDSQ_MDCOBROID_EMPRESA.AsString;
      DMGS.VEMPRESASAUX.TIPO :='2';
      OPEN;
    END;
    IF ((DMGS.CDSQ_MDCOBROID_CLIENTE.ASSTRING) <> '' ) THEN
    BEGIN
     WITH DMGS.CDSQ_CLIENTEAUX DO
     BEGIN
       CLOSE;
       DMGS.CLABGRNOMBRE:= DMGS.CDSQ_MDCOBROID_CLIENTE.AsString;
       DMGS.CLABGRBORRADO := '0';
       DMGS.CLABGRTIPO :='2';
       OPEN;
     END;
    END
    ELSE
     WITH DMGS.CDSQ_CLIENTEAUX DO
     BEGIN
       CLOSE;
       DMGS.CLABGRNOMBRE:= '-1154871';
       DMGS.CLABGRBORRADO := '0';
       DMGS.CLABGRTIPO :='2';
       OPEN;
     END;

    dsCOBRO.DataSet := NIL; // HACE FALTA
    dslineaCOBRO.DataSet := NIL;
    LISTADOS := tLISTADOS.Create(nil);
    PREVIO := TPREVIO.Create(NIL);

    LISTADOS.FRDB.DataSet := DMGS.CDSQ_MDCOBRO;
    LISTADOS.FRDB1.DATASET := DMGS.CDSQ_MDLINEACOBRO;
    LISTADOS.FRDB2.DataSet := DMGS.CDSQ_EMPRESAAUX;
    LISTADOS.FRDB3.DataSet := DMGS.CDSQ_CLIENTEAUX;

 //   Path := ExtractFilePath(ParamStr(0));
    LISTADOS.frReport1.LoadFromFile(dmgs.Path + 'LISTADOS\COBRO.frf');
    LISTADOS.frReport1.Preview := PREVIO.frPreview1;
    LISTADOS.frReport1.ShowReport;
    PREVIO.ShowModal;
    DSCOBRO.DataSet := DMGS.CDSQ_MDCOBRO;
    DSLINEACOBRO.DataSet := DMGS.CDSQ_MDLINEACOBRO;
    LISTADOS.Free;
    LISTADOS := NIL;
    PREVIO.FREE;
    PREVIO := NIL;
    DMGS.CDSQ_EMPRESAAUX.CLOSE;
    DMGS.CDSQ_CLIENTEAUX.CLOSE;
    dmgs.cdsq_mdcobro.GotoBookmark(bookmark);
    dmgs.cdsq_mdcobro.FreeBookmark (bookmark);
    dmgs.cdsq_mdlineacobro.GotoBookmark(bookmark1);
    dmgs.cdsq_mdlineacobro.FreeBookmark (bookmark1);
end;
procedure TCOBRO.DSCOBROStateChange(Sender: TObject);
begin
    EstadoBotones;
end;
procedure TCOBRO.COBRO1Click(Sender: TObject);
begin
    altas1.enabled:=baltas.enabled;
    bajas1.enabled:=bbajas.enabled;
    consultas1.enabled:=bconsultas.enabled;
    modificaciones1.enabled:=bmodificaciones.enabled;
end;



procedure TCOBRO.DSCOBRODataChange(Sender: TObject;
  Field: TField);
  VAR I:INTEGER;
      AUXBOOKMARK:TBOOKMARK;
begin
    COMPROBAREMPRESA;
    COMPROBARCLIENTE;
    COMPROBARFORMAPAGO;
    IF ((DMGS.CDSQ_MDCOBRO.Eof)   AND (NOT (DMGS.CDSQ_MDCOBRO.STATE IN [DSEDIT,DSINSERT]))) THEN
    BEGIN
      try // para evitar el error de memoria bloqueada en el server.
        DMGS.CDSQ_MDCOBRO.GetNextPacket ;
      except
      end;
    END;
    ESTADOBOTONES;
end;
procedure TCOBRO.DBEdit3Exit(Sender: TObject);
begin
  comprobarcliente;
end;


procedure TCOBRO.DBEdit3KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  IF (DMGS.CDSQ_MDCOBRO.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_MDCOBROid_cliente.ASSTRING := dlgclienteaux.codigo;
            Perform(WM_NextDLGCtl, 0, 0);
        end;
        dlgclienteaux.Free;
        dlgclienteaux := nil;
    end
  end;
end;
procedure TCOBRO.BBAJAS2Click(Sender: TObject);
begin
    if (DMGS.CDSQ_MDLINEACOBRO.recordcount>0) then
    begin
      DMGS.CDSQ_MDLINEACOBRO.delete;
      DMGS.CDSQ_MDLINEACOBROafterpost(dmGS.CDSQ_MDLINEACOBRO);
    end;
end;
procedure TCOBRO.DBGrid1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
  var aux:string;
begin
  IF (DMGS.CDSQ_MDLINEACOBRO.STATE IN [DSEDIT,DSINSERT]) THEN
   BEGIN
   IF KEY=27 THEN
     DMGS.RLINEACOBRO.ESCAPECDS  := TRUE;

   if key=112 then
    begin
      if UPPERCASE(TRIM(dbgrid1.SelectedField.FieldName)) ='ID_FORMA' then
      begin
        DMGS.cdsq_FORMAPAGOAUX.Close;
        fdlgFORMAPAGOAUX := tfdlgFORMAPAGOAUX.Create(NIL);
        if fdlgFORMAPAGOAUX.Showmodal=mrok then
        begin
            F1ENTRA:= TRUE;
            DMGS.cdsq_MDLINEACOBROid_FORMA.ASSTRING := fdlgFORMAPAGOAUX.FORMAPAGO;
            Perform(WM_NextDLGCtl, 0, 0);
        end;
        fdlgFORMAPAGOAUX.Free;
        fdlgFORMAPAGOAUX := nil;
      END;
    END;
  end;
END;
procedure TCOBRO.DBNavigator1Click(Sender: TObject;
  Button: TNavigateBtn);
begin
  IF DMGS.CDSQ_MDCOBRO.Eof THEN
  try // para evitar el error de memoria bloqueada en el server.
     DMGS.CDSQ_MDCOBRO.GetNextPacket ;
  except
  end;
end;

procedure TCOBRO.DBGrid1ColEnter(Sender: TObject);
begin
IF (DMGS.CDSQ_MDLINEACOBRO.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 TCOBRO.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_MDLINEACOBRO.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 TCOBRO.DBGrid1KeyPress(Sender: TObject; var Key: Char);
BEGIN
   if (key = #46) then // 46 -> .
     if (dmgs.CDSQ_MDLINEACOBRO.state in [dsedit,dsinsert]) then
       if (dbgrid1.SelectedField.DataType in [ftfloat,ftfmtbcd,ftbcd]) then
          key := #44 ;  //44->  ,

   if (key <> #27) then
       DMgs.RLINEACOBRO.ESCAPECDS := false;
   if (key = #13) and not (DMGS.CDSQ_MDLINEACOBRO.State in [dsedit,dsinsert]) then
    begin
        Perform(WM_NextDLGCtl, 0, 0);
        key:=#0;
    end;
   if (key = #13) and (DMGS.CDSQ_MDLINEACOBRO.State in [dsedit,dsinsert]) then
   begin
        if dbgrid1.SelectedIndex = (dbgrid1.FieldCount - 1) then
        begin
              DMGS.CDSQ_MDLINEACOBRO.Post;
              // PQ AL INSERTAR LA PRIMERA LINEA ME LO DEJA EN EL ULTIMO
              // CAMPO EN DISPOSICION DE ESCRIBIR. 
              DBGRID1.SelectedIndex := DBGRID1.FieldCount -2;
              DBGRID1.SelectedIndex := DBGRID1.FieldCount -1;              
        end
        else
           dbgrid1.SelectedIndex := dbgrid1.SelectedIndex + 1;
        key:=#0;
   end;
     if (key = #27) and not (DMGS.CDSQ_MDLINEACOBRO.state in [dsedit,dsinsert])
     then
       close;
     if (key = #27) and not (ActiveControl is TButton) then
        DMgs.RLINEACOBRO.ESCAPECDS:= true;
END;
PROCEDURE TCOBRO.COMPROBAREMPRESA ;
BEGIN
   IF TRIM(DMGS.CDSQ_MDCOBROID_EMPRESA.ASSTRING)  <> '' THEN
    LABEL16.Caption := FMENU.NOMBREEMPRESA
   ELSE
    LABEL16.Caption := '';
END;

PROCEDURE TCOBRO.COMPROBARCLIENTE;
BEGIN
     if ((not (DMGS.CDSQ_MDCOBROID_CLIENTE.IsNull)) AND (TRIM(DMGS.CDSQ_MDCOBROID_CLIENTE.ASSTRING)<>'')) then
     begin
        if (TRIM(LABEL12.CAPTION) <> '') then
           begin
           if not (TRIM(LABEL12.CAPTION) = trim(DMGS.CDSQ_MDCOBROID_CLIENTE.asstring))
           then
             begin
               DMGS.CDSQ_CLIENTEAUX.close;
               DMGS.CLABGRNOMBRE :=trim(DMGS.CDSQ_MDCOBROID_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_MDCOBROID_CLIENTE.asstring);
               dmGS.CLABGRborrado := '0';
               DMGS.CLABGRTIPO :='2';
               DMGS.CDSQ_CLIENTEAUX.OPEN;
             end;
    end
    else
    begin
       DMGS.CDSQ_CLIENTEAUX.close;
       LABEL12.CAPTION := '';
       label1.Caption := '';
       label2.Caption := '';
       label3.Caption := '';
       label5.Caption := '';
       label4.Caption := '';
    end;

    IF DMGS.CDSQ_CLIENTEAUX.Active THEN
    BEGIN
      LABEL12.CAPTION := DMGS.CDSQ_CLIENTEAUXID_CLIENTE.ASSTRING;
      label1.Caption := DMGS.CDSQ_CLIENTEAUXNOMBRE.ASSTRING;
      label2.Caption := DMGS.CDSQ_CLIENTEAUXDIRECCION.ASSTRING;
      label3.Caption := DMGS.CDSQ_CLIENTEAUXPOBLACION.ASSTRING;
      label5.Caption := DMGS.CDSQ_CLIENTEAUXCOD_POSTAL.ASSTRING;
      label4.Caption := DMGS.CDSQ_CLIENTEAUXPROVINCIA.ASSTRING;
    END ;
    DMGS.CDSQ_CLIENTEAUX.close;
END;
procedure TCOBRO.BMODIFICAR2Click(Sender: TObject);
begin
    if DMGS.CDSQ_MDLINEACOBRO.recordcount>0 then
    begin
        DMGS.CDSQ_MDLINEACOBRO.edit;
        DMGS.CDSQ_MDLINEACOBRONUM_LINEA.FocusControl;
    end;
end;

procedure TCOBRO.DBGrid1DblClick(Sender: TObject);
begin
  IF (DMGS.CDSQ_MDLINEACOBRO.STATE IN [DSEDIT,DSINSERT]) THEN
    begin
      if UPPERCASE(TRIM(dbgrid1.SelectedField.FieldName)) ='ID_FORMA' then
      begin
        DMGS.cdsq_FORMAPAGOAUX.Close;
        fdlgFORMAPAGOAUX := tfdlgFORMAPAGOAUX.Create(NIL);
        if fdlgFORMAPAGOAUX.Showmodal=mrok then
        begin
            F1ENTRA:= TRUE;
            DMGS.cdsq_MDLINEACOBROid_FORMA.ASSTRING := fdlgFORMAPAGOAUX.FORMAPAGO;
            Perform(WM_NextDLGCtl, 0, 0);
        end;
        fdlgFORMAPAGOAUX.Free;
        fdlgFORMAPAGOAUX := nil;
    end
  end;
end;

procedure TCOBRO.DBEdit3DblClick(Sender: TObject);
begin
  IF (DMGS.CDSQ_MDCOBRO.STATE IN [DSEDIT,DSINSERT]) THEN
   BEGIN
        DMGS.cdsq_clienteaux.Close;
        dlgclienteAUX := tdlgclienteAUX.Create(NIL);
        if dlgclienteAUX.Showmodal=mrok then
        begin
            F1ENTRA:= TRUE;
            DMGS.cdsq_MDCOBROid_cliente.ASSTRING := dlgclienteaux.codigo;
        end;
        dlgclienteaux.Free;
        dlgclienteaux := nil;
  end;
end;

procedure TCOBRO.DBEdit10Exit(Sender: TObject);
begin
  COMPROBARFORMAPAGO;
  IF (DMGS.CDSQ_MDCOBRO.STATE IN [DSEDIT,DSINSERT] ) THEN
   if DMGS.RCOBRO.BUSCANDO then
      buscar
   ELSE
      DMGS.CDSQ_MDCOBRO.Post;
end;



procedure TCOBRO.DBEdit4KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
 IF (DMGS.CDSQ_MDCOBRO.STATE IN [DSEDIT,DSINSERT]) THEN
   if key=112 then
     albaranfactura;
end;


procedure TCOBRO.DBEdit4DblClick(Sender: TObject);
begin
 IF (DMGS.CDSQ_MDCOBRO.STATE IN [DSEDIT,DSINSERT]) THEN
     albaranfactura;
end;
PROCEDURE TCOBRO.COMPROBARFORMAPAGO;
BEGIN
     if ((not (DMGS.CDSQ_MDlineaCOBROID_FORMA.IsNull)) AND (TRIM(DMGS.CDSQ_MDLINEACOBROID_FORMA.ASSTRING)<>'')) then
     begin
        if (TRIM(LABEL33.CAPTION) <> '') then
           begin
           if not (TRIM(LABEL33.CAPTION) = trim(DMGS.CDSQ_MDLINEACOBROID_FORMA.asstring))
           then
             begin
               DMGS.CDSQ_FORMAPAGOAUX.close;
               DMGS.VFORMAPAGOAUX.ID :=trim(DMGS.CDSQ_MDLINEACOBROID_FORMA.asstring);
               DMGS.CDSQ_FORMAPAGOAUX.OPEN;
             end;
           end
           else
             begin
               DMGS.CDSQ_FORMAPAGOAUX.close;
               DMGS.VFORMAPAGOAUX.ID :=trim(DMGS.CDSQ_MDLINEACOBROID_FORMA.asstring);
               DMGS.CDSQ_FORMAPAGOAUX.OPEN;
             end;
    end
    else
    begin
       DMGS.CDSQ_FORMAPAGOAUX.close;
       LABEL33.CAPTION := '';
       label48.Caption := '';
    end;
    IF DMGS.CDSQ_FORMAPAGOAUX.Active THEN
    BEGIN
      LABEL33.CAPTION := DMGS.CDSQ_FORMAPAGOAUXID_FORMA.ASSTRING;
      label48.Caption := DMGS.CDSQ_FORMAPAGOAUXdescripcion.ASSTRING;
    END ;
    DMGS.CDSQ_FORMAPAGOAUX.close;
END;


procedure TCOBRO.DSLINEACOBRODataChange(Sender: TObject; Field: TField);
begin
  COMPROBARFORMAPAGO;
end;

procedure TCOBRO.DBEdit2Exit(Sender: TObject);
begin
  IF (DMGS.CDSQ_MDCOBRO.STATE IN [DSEDIT,DSINSERT] ) THEN
   if DMGS.RCOBRO.BUSCANDO  then
      buscar
   ELSE
      DMGS.CDSQ_MDCOBRO.Post;
end;

procedure tcobro.albaranfactura ;
VAR FACTURA,ALBARAN:BOOLEAN;
    CADENA:STRING;
begin
       FACTURA:=FALSE;ALBARAN:=FALSE;
       IF DMGS.CDSQ_MDCOBROTIPO.AsString = '' THEN
       BEGIN
        FACTURA_ALBARAN := TFACTURA_ALBARAN.CREATE(NIL);
        IF FACTURA_ALBARAN.ShowModal = MROK THEN
        BEGIN
           IF FACTURA_ALBARAN.RBFACTURA.Checked THEN
              FACTURA := TRUE;
           IF FACTURA_ALBARAN.RBALBARAN.Checked THEN
              ALBARAN := TRUE;
        END
        ELSE
          EXIT;
       END
       ELSE
           IF TRIM(DMGS.CDSQ_MDCOBROTIPO.AsString) = 'FACTURA' THEN
             FACTURA:= TRUE
           ELSE
             ALBARAN := TRUE;

       IF FACTURA THEN
       BEGIN
          DLGFACTURAAUX:=TDLGFACTURAAUX.create(nil);
          IF DLGFACTURAAUX.Showmodal=MROK THEN
          BEGIN
            DMGS.CDSQ_MDCOBROID.AsString := DLGFACTURAAUX.NOMBRE;
            DMGS.CDSQ_MDCOBROBASE.ASfloat := roundto((DMGS.CDSQ_MDFACTURAAUXBASE_FACTURA.ASfloat) - (DMGS.CDSQ_MDFACTURAAUXBASE_FACTURA.ASfloat*DMGS.CDSQ_MDFACTURAAUXDESCUENTO.ASfloat/100),DMGS.DECIMALES);
            dmgs.cdsq_mdcobrotipo.asstring:= 'FACTURA';
            dmgs.cdsq_mdcobroID_cliente.asstring := dmgs.cdsq_mdfacturaAUXid_CLIENTE.ASSTRING;
            dmgs.cdsq_mdcobroID_SERIE.asstring := dmgs.cdsq_mdfacturaAUXid_SERIE.ASSTRING;
            DMGS.CDSQ_MDCOBROANYOSERIE.AsString :=dmgs.cdsq_mdfacturaAUXANYO.ASSTRING;
            Perform(WM_NextDLGCtl, 0, 0);
          END;
          DLGFACTURAAUX.Free;
          DLGFACTURAAUX := NIL;
       END;
       IF ALBARAN THEN
       BEGIN
          DLGALBARANAUX:=TDLGALBARANAUX.create(nil);
          IF DLGALBARANAUX.Showmodal=MROK THEN
          BEGIN
            DMGS.CDSQ_MDCOBROID.AsString := DLGALBARANAUX.NOMBRE;
            DMGS.CDSQ_MDCOBROBASE.ASfloat := roundto((DMGS.CDSQ_MDALBARANAUXBASE_albaran.ASfloat) - (DMGS.CDSQ_MDALBARANAUXBASE_albaran.ASfloat*DMGS.CDSQ_MDALBARANAUXDESCUENTO.ASfloat/100),DMGS.DECIMALES);
            dmgs.cdsq_mdcobrotipo.asstring:= 'ALBARAN';
            dmgs.cdsq_mdcobroID_cliente.asstring := dmgs.cdsq_mdALBARANAUXid_CLIENTE.ASSTRING;
            dmgs.cdsq_mdcobroID_SERIE.asstring := dmgs.cdsq_mdALBARANAUXid_SERIE.ASSTRING;
            DMGS.CDSQ_MDCOBROANYOSERIE.AsString :=dmgs.cdsq_mdALBARANAUXANYO.ASSTRING;            
            Perform(WM_NextDLGCtl, 0, 0);
          END;
          DLGALBARANAUX.Free;
          DLGALBARANAUX := NIL;
       END;
       FACTURA_ALBARAN.FREE;
       FACTURA_ALBARAN := NIL;
       DMGS.CDSQ_MDCOBROOBSERVACIONES.FocusControl;
      if (trim(DMGS.CDSQ_MDCOBROID_SERIE.ASSTRING) <> '')
      and (trim(DMGS.CDSQ_MDCOBROID.ASSTRING) <> '')
      and (trim(DMGS.CDSQ_MDCOBROANYO.ASSTRING)<> '')
      then
       WITH DMGS.CDSQ_MAXIMO DO
        BEGIN
           CLOSE;
           COMMANDTEXT := ' SELECT COUNT(*) AS MAXIMO FROM COBRO WHERE ID_EMPRESA='+ DMGS.CDSQ_MDCOBROID_EMPRESA.ASSTRING +' AND ID_SERIE='''+ DMGS.CDSQ_MDCOBROID_SERIE.ASSTRING + ''' AND ID='+ DMGS.CDSQ_MDCOBROID.ASSTRING + ' AND ANYO='+DMGS.CDSQ_MDCOBROANYO.ASSTRING+' AND TIPO='''+DMGS.CDSQ_MDCOBROTIPO.ASSTRING +''' ';
           OPEN;
           IF NOT DMGS.CDSQ_MAXIMO.Fields[0].ISNULL THEN
           IF dmgs.CDSQ_MAXIMO.Fields[0].VALUE > 0 THEN
           BEGIN
            CADENA := ' WHERE ID_EMPRESA='+ DMGS.CDSQ_MDCOBROID_EMPRESA.ASSTRING +' AND ID_SERIE='''+ DMGS.CDSQ_MDCOBROID_SERIE.ASSTRING + ''' AND ID='+ DMGS.CDSQ_MDCOBROID.ASSTRING + ' AND ANYO='+DMGS.CDSQ_MDCOBROANYO.ASSTRING+' AND TIPO='''+DMGS.CDSQ_MDCOBROTIPO.ASSTRING +''' ';
            DMGS.CDSQ_MDCOBRO.CancelUpdates;
            DMGS.CDSQ_MDCOBRO.CLOSE;
            DMGS.VCOBRO.ID := CADENA;
            dmgs.VCOBRO.TIPO := '2';
            DMGS.CDSQ_MDCOBRO.Open;
           END;
           CLOSE;
        END;
END;

procedure TCOBRO.DBComboBox1Change(Sender: TObject);
begin
 IF (DMGS.CDSQ_MDCOBRO.STATE IN [DSEDIT,DSINSERT]) THEN
 BEGIN
   DMGS.CDSQ_MDCOBROID_CLIENTE.Clear ;
   DMGS.CDSQ_MDCOBROTOTAL_COBRADO.Clear;
   DMGS.CDSQ_MDCOBROOBSERVACIONES.CLEAR;
   DMGS.CDSQ_MDCOBROID.CLEAR;
 END;
end;

Procedure TCOBRO.DBEdit6Exit(Sender: TObject);
VAR CADENA:STRING;
begin
    if (trim(DMGS.CDSQ_MDCOBROID_SERIE.ASSTRING) <> '')
    and (trim(DMGS.CDSQ_MDCOBROID.ASSTRING) <> '')
    and (trim(DMGS.CDSQ_MDCOBROANYOSERIE.ASSTRING)<> '')
    AND (TRIM(DMGS.CDSQ_MDCOBROTIPO.AsString) <> '')
    then
    WITH DMGS.CDSQ_MAXIMO DO
    BEGIN
        CLOSE;
        COMMANDTEXT := ' SELECT COUNT(*) AS MAXIMO FROM COBRO WHERE ID_EMPRESA='+ DMGS.CDSQ_MDCOBROID_EMPRESA.ASSTRING +' AND ID_SERIE='''+ DMGS.CDSQ_MDCOBROID_SERIE.ASSTRING + ''' AND ID='+ DMGS.CDSQ_MDCOBROID.ASSTRING + ' AND ANYO='+DMGS.CDSQ_MDCOBROANYOSERIE.ASSTRING+' AND TIPO='''+DMGS.CDSQ_MDCOBROTIPO.ASSTRING+''' ';
        OPEN;
        IF NOT DMGS.CDSQ_MAXIMO.Fields[0].ISNULL THEN
        IF dmgs.CDSQ_MAXIMO.Fields[0].VALUE > 0 THEN
        BEGIN
            CADENA := ' WHERE ID_EMPRESA='+ DMGS.CDSQ_MDCOBROID_EMPRESA.ASSTRING +' AND ID_SERIE='''+ DMGS.CDSQ_MDCOBROID_SERIE.ASSTRING + ''' AND ID='+ DMGS.CDSQ_MDCOBROID.ASSTRING + ' AND ANYO='+DMGS.CDSQ_MDCOBROANYOSERIE.ASSTRING+' AND TIPO='''+DMGS.CDSQ_MDCOBROTIPO.ASSTRING+''' ';
            DMGS.CDSQ_MDCOBRO.CancelUpdates;
            DMGS.CDSQ_MDCOBRO.CLOSE;
            DMGS.VCOBRO.ID := CADENA;
            dmgs.VCOBRO.TIPO  := '2';
            DMGS.CDSQ_MDCOBRO.Open;
         END;
         CLOSE;
     END;

end;

procedure TCOBRO.TODOS1Click(Sender: TObject);
begin
   TODOS1.Checked := TRUE;
   NOCOBRADOS.Checked := FALSE;
   COBRADOS1.Checked := FALSE;
   COBRADOSPARTE1.Checked := FALSE;
   if ver <> '' then
   begin
      ver := '';
      bconsultasclick(sender);
   end;
end;

procedure TCOBRO.NOCOBRADOSClick(Sender: TObject);
begin
   TODOS1.Checked := FALSE;
   NOCOBRADOS.Checked := TRUE;
   COBRADOS1.Checked := FALSE;
   COBRADOSPARTE1.Checked := FALSE;
   if ver <> ' AND TOTAL_COBRADO=0 ' then
   begin
      ver := ' AND TOTAL_COBRADO=0 ';
      bconsultasclick(sender);
   end;

end;

procedure TCOBRO.COBRADOS1Click(Sender: TObject);
begin
   TODOS1.Checked := FALSE;
   NOCOBRADOS.Checked := FALSE;
   COBRADOS1.Checked := TRUE;
   COBRADOSPARTE1.Checked := FALSE;
   if ver <> ' AND BASE<=TOTAL_COBRADO AND TOTAL_COBRADO<>0 ' then
   begin
      ver := ' AND BASE<=TOTAL_COBRADO AND TOTAL_COBRADO<>0 ';
      bconsultasclick(sender);
   end;
end;

procedure TCOBRO.COBRADOSPARTE1Click(Sender: TObject);
begin
   TODOS1.Checked := FALSE;
   NOCOBRADOS.Checked := FALSE;
   COBRADOS1.Checked := FALSE;
   COBRADOSPARTE1.Checked := TRUE;
   if ver <> ' AND BASE>TOTAL_COBRADO AND TOTAL_COBRADO<>0 ' then
   begin
      ver := ' AND BASE>TOTAL_COBRADO AND TOTAL_COBRADO<>0 ';
      bconsultasclick(sender);
   end;
end;

procedure TCOBRO.ToolButton1Click(Sender: TObject);
var cadena,CADENAAUX:string;
begin
   listadoopcionescobro := tlistadoopcionescobro.create(nil);
   if listadoopcionescobro.ShowModal = mrok then
   begin
    cadena := listadoopcionescobro.cadena;
    if trim(cadena) <> '' then
    begin
     if (listadoopcionescobro.todo = false) then
       if (listadoopcionescobro.cobrado = true) then
        cadena := cadena + ' and total_cobrado >= base and total_cobrado <> 0 '
       else
        cadena := cadena + ' and total_cobrado <= base ';
    end
    else
    begin
     if (listadoopcionescobro.todo = false) then
       if (listadoopcionescobro.cobrado = true) then
        cadena := cadena + ' total_cobrado >= base and total_cobrado <> 0 '
       else
        cadena := cadena + ' total_cobrado <= base ';
    end;
    if trim(cadena) <> '' then
    begin
        CADENAAUX := CADENA;
//        cadena := ' id_empresa='+fmenu.id_empresa+' and ' + cadena;
//        cadena := ' AND ' + cadena +' ORDER BY ID_cobro ';
    end;
    listadoopcionescobro.free;
    listadoopcionescobro := nil;
    WITH DMGS.CDSQ_EMPRESAAUX DO
    BEGIN
      Close;
      DMGS.VEMPRESASAUX.ID:= DMGS.CDSQ_MDcobroID_EMPRESA.AsString;
      DMGS.VEMPRESASAUX.TIPO :='2';
      OPEN;
    END;


    with DMGS.CDSQ_MDcobroaux do
    BEGIN
        Close;
        if trim(cadena) ='' then
        begin
//           DMGS.VCOBROAUX.ID  :='%';
           DMGS.VCOBROAUX.TIPO := '3';
           DMGS.VCOBROAUX.ORDEN := ORDENCOBROAUX;
        end
        else
        begin
           DMGS.VCOBROAUX.ID :=' AND '+cadenaAUX;
           DMGS.VCOBROAUX.TIPO := '3';
           DMGS.VCOBROAUX.ORDEN := ORDENCOBROAUX;
        end;
        Open;
    END;
    WHILE not dmgs.cdsq_mdcobroaux.eof do
    begin
       dmgs.cdsq_mdcobroaux.Last;
       if dmgs.cdsq_mdcobroaux.Eof then
       try // para evitar el error de memoria bloqueada en el server.
           DMGS.CDSQ_MDcobroaux.GetNextPacket ;
       except
       end;
    end;
    dmgs.cdsq_mdcobroaux.First;
    dscobro.DataSet := NIL; // HACE FALTA
    dslineacobro.DataSet := NIL;
    LISTADOS := tLISTADOS.Create(nil);
    PREVIO := TPREVIO.Create(NIL);

    LISTADOS.FRDB.DataSet := DMGS.CDSQ_MDcobroaux;
    LISTADOS.FRDB1.DATASET := DMGS.CDSQ_MDLINEAcobroaux;
    LISTADOS.FRDB2.DataSet := DMGS.CDSQ_EMPRESAAUX;
    LISTADOS.FRDB3.DataSet := DMGS.CDSQ_CLIENTEAUX;

 //   Path := ExtractFilePath(ParamStr(0));
    LISTADOS.frReport1.LoadFromFile(dmgs.Path + 'LISTADOS\LISTADOcobroS.frf');
    LISTADOS.frReport1.Preview := PREVIO.frPreview1;
    LISTADOS.frReport1.ShowReport;
    PREVIO.ShowModal;
    DScobro.DataSet := DMGS.CDSQ_MDcobro;
    DSLINEAcobro.DataSet := DMGS.CDSQ_MDLINEAcobro;
    LISTADOS.Free;
    LISTADOS := NIL;
    PREVIO.FREE;
    PREVIO := NIL;
    DMGS.CDSQ_EMPRESAAUX.CLOSE;
    DMGS.CDSQ_CLIENTEAUX.CLOSE;
   end;

end;

procedure TCOBRO.FormKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
// hola
end;

procedure TCOBRO.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 TCOBRO.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_MDLINEACOBRONUM_LINEA' THEN
    IF dmgs.CDSQ_MDLINEACOBRO.IndexFIELDNameS = '' THEN
       dmgs.CDSQ_MDLINEACOBRO.IndexFIELDNameS := 'NUM_LINEA' // ORDENA ASCENDENTE
    ELSE
       DMGS.CDSQ_MDLINEACOBRO.IndexName := 'NUM_LINEAINDEX'; // ORDENA DESCENDENTE

 IF AUX = 'CDSQ_MDLINEACOBROFECHA' THEN
    IF dmgs.CDSQ_MDLINEACOBRO.IndexFIELDNameS = '' THEN
       dmgs.CDSQ_MDLINEACOBRO.IndexFIELDNameS := 'FECHA' // ORDENA ASCENDENTE
    ELSE
       DMGS.CDSQ_MDLINEACOBRO.IndexName := 'FECHAINDEX'; // ORDENA DESCENDENTE

 IF AUX = 'CDSQ_MDLINEACOBROHORA' THEN
    IF dmgs.CDSQ_MDLINEACOBRO.IndexFIELDNameS = '' THEN
       dmgs.CDSQ_MDLINEACOBRO.IndexFIELDNameS := 'HORA' // ORDENA ASCENDENTE
    ELSE
       DMGS.CDSQ_MDLINEACOBRO.IndexName := 'HORAINDEX'; // ORDENA DESCENDENTE

 IF AUX = 'CDSQ_MDLINEACOBROOBSERVACIONES' THEN
    IF dmgs.CDSQ_MDLINEACOBRO.IndexFIELDNameS = '' THEN
       dmgs.CDSQ_MDLINEACOBRO.IndexFIELDNameS := 'OBSERVACIONES' // ORDENA ASCENDENTE
    ELSE
       DMGS.CDSQ_MDLINEACOBRO.IndexName := 'OBSERVACIONESINDEX'; // ORDENA DESCENDENTE

 IF AUX = 'CDSQ_MDLINEACOBRONUM_DOCUMENTO' THEN
    IF dmgs.CDSQ_MDLINEACOBRO.IndexFIELDNameS = '' THEN
       dmgs.CDSQ_MDLINEACOBRO.IndexFIELDNameS := 'NUM_DOCUMENTO' // ORDENA ASCENDENTE
    ELSE
       DMGS.CDSQ_MDLINEACOBRO.IndexName := 'NUM_DOCUMENTOINDEX'; // ORDENA DESCENDENTE

 IF AUX = 'CDSQ_MDLINEACOBROID_FORMA' THEN
    IF dmgs.CDSQ_MDLINEACOBRO.IndexFIELDNameS = '' THEN
       dmgs.CDSQ_MDLINEACOBRO.IndexFIELDNameS := 'ID_FORMA' // ORDENA ASCENDENTE
    ELSE
       DMGS.CDSQ_MDLINEACOBRO.IndexName := 'ID_FORMAINDEX'; // ORDENA DESCENDENTE

 IF AUX = 'CDSQ_MDLINEACOBROPRECIO' THEN
    IF dmgs.CDSQ_MDLINEACOBRO.IndexFIELDNameS = '' THEN
       dmgs.CDSQ_MDLINEACOBRO.IndexFIELDNameS := 'PRECIO' // ORDENA ASCENDENTE
    ELSE
       DMGS.CDSQ_MDLINEACOBRO.IndexName := 'PRECIOINDEX'; // ORDENA DESCENDENTE

 IF AUX = 'CDSQ_MDLINEACOBROIMPORTE' THEN
    IF dmgs.CDSQ_MDLINEACOBRO.IndexFIELDNameS = '' THEN
       dmgs.CDSQ_MDLINEACOBRO.IndexFIELDNameS := 'IMPORTE' // ORDENA ASCENDENTE
    ELSE
       DMGS.CDSQ_MDLINEACOBRO.IndexName := 'IMPORTEINDEX'; // ORDENA DESCENDENTE

 IF AUX = 'CDSQ_MDLINEACOBROID_FORMA' THEN
    IF dmgs.CDSQ_MDLINEACOBRO.IndexFIELDNameS = '' THEN
       dmgs.CDSQ_MDLINEACOBRO.IndexFIELDNameS := 'ID_FORMA' // ORDENA ASCENDENTE
    ELSE
       DMGS.CDSQ_MDLINEACOBRO.IndexName := 'ID_FORMAINDEX'; // ORDENA DESCENDENTE

 IF AUX = 'CDSQ_MDLINEACOBROCANTIDAD' THEN
    IF dmgs.CDSQ_MDLINEACOBRO.IndexFIELDNameS = '' THEN
       dmgs.CDSQ_MDLINEACOBRO.IndexFIELDNameS := 'CANTIDAD' // ORDENA ASCENDENTE
    ELSE
       DMGS.CDSQ_MDLINEACOBRO.IndexName := 'CANTIDADINDEX'; // ORDENA DESCENDENTE

end;


End.






