unit fsalida;

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
  TSALIDA = class(TForm)
    Menu: TMainMenu;
    SALIDA1: 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;
    DSSALIDA: TDataSource;
    ToolBar1: TToolBar;
    baltas: TToolButton;
    bbajas: TToolButton;
    bconsultas: TToolButton;
    bmodificaciones: TToolButton;
    ToolButton5: TToolButton;
    DBNavigator2: TDBNavigator;
    ToolButton7: TToolButton;
    bsalir: TToolButton;
    ActionList1: TActionList;
    AAltas: TAction;
    ABajas: TAction;
    AConsultas: TAction;
    AModificaciones: TAction;
    ASalir: TAction;
    ImageList1: TImageList;
    BBUSQUEDA: TToolButton;
    ToolButton2: TToolButton;
    BORDEN: TToolButton;
    ToolButton6: TToolButton;
    OpenPictureDialog1: TOpenPictureDialog;
    ToolButton4: TToolButton;
    DSLINEASALIDA: TDataSource;
    PDATOS: TPanel;
    Label6: TLabel;
    Label8: TLabel;
    Label10: TLabel;
    DBEdit1: TDBEdit;
    DBEdit4: TDBEdit;
    ToolBar2: TToolBar;
    BALTAS2: TToolButton;
    BBAJAS2: TToolButton;
    BLISTADO: TToolButton;
    DBText1: TDBText;
    Label7: TLabel;
    Label11: TLabel;
    DBEdit2: TDBEdit;
    BMODIFICAR2: TToolButton;
    ALISTADO: TAction;
    AALTAS2: TAction;
    ABAJAS2: TAction;
    AModificar2: TAction;
    ABUSQUEDA: TAction;
    AORDEN: TAction;
    Label18: TLabel;
    Label20: TLabel;
    DBEdit8: TDBEdit;
    Label21: TLabel;
    DBEdit9: TDBEdit;
    DBGrid2: TDBGrid;
    ACANTIDAD: TAction;
    BCANTIDAD: TToolButton;
    Label1: TLabel;
    DBEdit3: 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 DSSALIDAStateChange(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 SALIDA1Click(Sender: TObject);
    procedure BListadoClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
    procedure DBGrid2KeyPress(Sender: TObject; var Key: Char);
    procedure DBGrid2KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure DBGrid2ColEnter(Sender: TObject);
    procedure DBGrid2ColExit(Sender: TObject);
    procedure DSSALIDADataChange(Sender: TObject; Field: TField);
    procedure DBGrid2DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    procedure FormActivate(Sender: TObject);
    procedure BBUSQUEDAClick(Sender: TObject);
    procedure BORDENClick(Sender: TObject);
    procedure DSLINEASALIDAStateChange(Sender: TObject);
    procedure BALTAS2Click(Sender: TObject);
    procedure BBAJAS2Click(Sender: TObject);
    procedure DBEdit3Exit(Sender: TObject);
    procedure DBEdit2Exit(Sender: TObject);
    procedure BMODIFICAR2Click(Sender: TObject);
    procedure DBEdit4Exit(Sender: TObject);
    procedure DSLINEASALIDADataChange(Sender: TObject; Field: TField);
    procedure DBGrid2DblClick(Sender: TObject);
    procedure ACANTIDADExecute(Sender: TObject);

  private
    { Private declarations }
    F1ENTRA :BOOLEAN;
    SORDEN:STRING;
    procedure EstadoBotones;
    procedure buscar;
    PROCEDURE IDARTICULO;
    function fechas(sender:tobject):boolean;
  public
    { Public declarations }
    ver: string;
    ARORDEN : TORDEN;

    PROCEDURE COMPROBAREMPRESA;
    PROCEDURE COMPROBARPROVEEDOR;

  end;

var
  SALIDA: TSALIDA;

implementation

uses FDLGPROVEEDORAUX, RUTINAS, UDMgs, fdlgarticulos,
  FDLGFAMILIASAUX, menu, DLGCOLORESAUX, FEAN, FDLGPRESUPUESTO,
  FDLGARTICULOSAUX, FLISTADOS, fprevio, FDLGSALIDA, FDLGALMACENAUX,
  FCANTIDAD;

{$R *.DFM}





//*******************************************************************//
//*******************************************************************//



procedure TSALIDA.DBGrid2ColExit(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
 aux1:=    dbgrid2.SelectedField.FieldName;
 IF (DMGS.CDSQ_mdlineaSALIDA.STATE IN [DSEDIT,DSINSERT]) THEN
 BEGIN
   if (UPPERCASE(TRIM(dbgrid2.SelectedField.FieldName)) ='ID_ARTICULO') AND
   (NOT F1ENTRA) AND
   (TRIM(DMGS.CDSQ_mdlineaSALIDAID_ARTICULO.AsString)<>'' )
    then
    BEGIN

  // ver 3.0
  WITH DMGS.CDSQ_MAXIMO DO
  BEGIN
   CLOSE;
   COMMANDTEXT := ' SELECT ID_ARTICULO FROM ALMACEN WHERE CODIGO_BARRAS='''+UPPERCASE(DMGS.CDSQ_MDLINEASALIDAID_ARTICULO.ASSTRING)+''' ';
   OPEN;
   IF DMGS.CDSQ_MAXIMO.RECORDCOUNT > 0 THEN
   BEGIN
      DMGS.CDSQ_MDLINEASALIDACODIGO_BARRAS.AsString := UPPERCASE(DMGS.CDSQ_MDLINEASALIDAID_ARTICULO.ASSTRING);
      DMGS.CDSQ_MDLINEASALIDAID_ARTICULO.ASSTRING := UPPERCASE(DMGS.CDSQ_MAXIMO.Fields[0].AsString);
   END;
   CLOSE;
  END;
  //



     WITH DMGS.CDSQ_ARTICULOEAN DO
     BEGIN
       CLOSE;
       DMGS.AREBGRID  := UPPERCASE(DMGS.CDSQ_mdlineaSALIDAID_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_mdlineaSALIDAID_ARTICULO.asstring:=DMGS.CDSQ_ARTICULOEANID_ARTICULO.ASSTRING;
          DMGS.CDSQ_mdlineaSALIDADESCRIPCION.ASSTRING:= DMGS.CDSQ_ARTICULOEANDESCRIPCION.AsString;
          dmgs.cdsq_mdlineaSALIDAMARCA.asstring := DMGS.cdsQ_ARTICULOEANMARCA.ASSTRING;
          dbgrid2.selectedindex:=dbgrid2.selectedindex+1;
       END
       ELSE
          DMGS.CDSQ_mdlineaSALIDADESCRIPCION.ASSTRING:= '';
       DMGS.CDSQ_ARTICULOEAN.CLOSE;
     END;
  end;

 END;
 F1ENTRA := FALSE;
end;



procedure TSALIDA.FormActivate(Sender: TObject);
begin
{  IF FMENU.VISTACLIENTE THEN
  BEGIN
    LABEL16.Visible := FALSE;
    DBEDIT6.VISIBLE := FALSE;
    dbgrid2.Columns[5].Visible := FALSE;
    dbgrid2.Columns[6].Visible := FALSE;
    dbgrid2.Columns[7].Visible := FALSE;
    dbgrid2.Columns[8].Visible := FALSE;
  END
  ELSE
  BEGIN
    LABEL16.Visible := TRUE;
    DBEDIT6.VISIBLE := TRUE;
    dbgrid2.Columns[5].Visible := TRUE;
    dbgrid2.Columns[6].Visible := TRUE;
    dbgrid2.Columns[7].Visible := TRUE;
    dbgrid2.Columns[8].Visible := TRUE;
  END;
}
end;

procedure TSALIDA.BBUSQUEDAClick(Sender: TObject);
begin
// FUNCION PARA HACER LA BUSQUEDA,
//HACERLO CON PRESUPUESTO.
  DMGS.CDSQ_mdSALIDA.CLOSE;
  DMGS.RSALIDA.BUSCANDO  := true;
  WITH DMGS.CDSQ_mdSALIDA  DO
  BEGIN
    DMGS.VSALIDA.ID:='-1115487';
    DMGS.VSALIDA.TIPO:='1';
    DMGS.VSALIDA.ORDEN:= ORDENSALIDA;
    DMGS.VSALIDA.ORDENLINEA:= ORDENLINEASALIDA;// CDSQ_MDSALIDA
    OPEN;
    APPEND;
  END;
  dmgs.CDSQ_mdSALIDAid_SALIDA.asstring := '';
  DMGS.CDSQ_mdSALIDAID_SALIDA.FocusControl

end;
procedure tSALIDA.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_mdSALIDA.FieldByName(AUX1).ASSTRING) ='') then
      BEGIN
         if pos('FECHA',uppercase(aux1)) <> 0 then
         begin
            auxfecha :=DMGS.CDSQ_mdSALIDA.FieldByName(AUX1).AsDateTime ;
//            fecha := inttostr(yearof(auxfecha))+'/'+inttostr(monthof(auxfecha))+'/'+inttostr(dayof(auxfecha));
            fecha := inttostr(yearof(auxfecha))+'-'+inttostr(monthof(auxfecha))+'-'+inttostr(dayof(auxfecha));
            if aux <> '' then
               aux := aux + ' AND ' + AUX1  +' = '''+ fecha+''' '
            else
               aux := AUX1 +' = '''+ fecha+''' ';
         end
         else
         begin
            if aux <> '' then                         // LIKE
               aux := aux + ' AND char(' + AUX1  +') = ('''+ DMGS.CDSQ_mdSALIDA.FieldByName(AUX1).ASSTRING+''') ' // VER 3.0 %
            else
               aux := 'char('+AUX1 +') = ('''+ TRIM(DMGS.CDSQ_mdSALIDA.FieldByName(AUX1).ASSTRING)+''') '; // VER 3.0 %
         end;                           // LIKE
      END;
      end;
      i:= i+1;
    END;
  dmgs.CDSQ_mdSALIDA.close;
  DMGS.RSALIDA.BUSCANDO:=false;
  if aux <> '' then
  begin

     AUX := AUX + ' AND ID_EMPRESA='+FMENU.ID_EMPRESA;
     IF TRIM(ARORDEN.SORDEN) = '' THEN
       AUX := AUX + ORDENSALIDA
     ELSE
       AUX := aux + ARORDEN.SORDEN;

     with dmgs.CDSQ_mdSALIDA do
     begin
       DMGS.VSALIDA.ID:=' where '+ aux;
       DMGS.VSALIDA.TIPO:='2';
       DMGS.VSALIDA.ORDENLINEA:= ORDENLINEASALIDA;// CDSQ_MDSALIDA
       Open;
     end
  end;
end;
procedure TSALIDA.BORDENClick(Sender: TObject);
BEGIN
  ARORDEN.ShowModal;
end;


procedure TSALIDA.DSLINEASALIDAStateChange(Sender: TObject);
begin
  if DMGS.CDsq_mdlineaSALIDA.STATE IN [dsedit,dsinsert] then
  begin
         pdatos.enabled := false;
         {aux :=} dbgrid2.Options := [DGEDITING,DGTITLES,DGINDICATOR,DGCOLUMNRESIZE,DGCOLLINES,DGROWLINES,DGTABS,DGCONFIRMDELETE,DGCANCELONEXIT];
  end
   else
      dbgrid2.Options := [DGTITLES,DGINDICATOR,DGCOLUMNRESIZE,DGCOLLINES,DGROWLINES,DGTABS,DGCONFIRMDELETE,DGCANCELONEXIT];
end;



///*****************************************************///
///*****************************************************///
procedure TSALIDA.FormCreate(Sender: TObject);
begin
  DMGS.CDSQ_mdlineaSALIDA.CLOSE;
  DMGS.CDSQ_mdSALIDA.CLOSE;
  ARORDEN := TORDEN.Create(NIL);
  ARORDEN.CDS  := DMGS.CDSQ_mdSALIDA;
  ARORDEN.nombre  := 'CDSQ_mdSALIDA';
  arorden.SORDEN := ordensalida;
  dmgs.RSALIDA.BUSCANDO := false;
  LABEL7.CAPTION :='';


  with DMGS.cdsq_mdSALIDA do
  BEGIN
     Close;
     DMGS.VSALIDA.ID:='%';
     DMGS.VSALIDA.TIPO:='1';
     DMGS.VSALIDA.ORDEN:= ORDENSALIDA;
     DMGS.VSALIDA.ORDENLINEA:= ORDENLINEASALIDA;// CDSQ_MDSALIDA
     Open;
  END;

end;
procedure TSALIDA.FormDestroy(Sender: TObject);
begin
   DMGS.CDSQ_mdlineaSALIDA.close;
   DMGS.CDSQ_mdSALIDA.CLOSE;
   ARORDEN.FREE;
   ARORDEN := NIL;
end;
procedure TSALIDA.FormShow(Sender: TObject);
begin
    EstadoBotones;
    F1ENTRA := FALSE;
end;
procedure TSALIDA.BConsultasClick(Sender: TObject);
var posaux:TBookmark;
    codigo:tcodigotar;
begin
    DSSALIDA.DataSet := NIL;

    dlgSALIDA:=tdlgSALIDA.create(nil);
    dlgSALIDA.ORDEN :=  ARORDEN.SORDEN;
    dlgSALIDA.CERRARDATASET := FALSE;
    dlgSALIDA.Showmodal;
    dlgSALIDA.Free;
    dlgSALIDA := NIL;
    IF NOT DMGS.CDSQ_mdSALIDA.ACTIVE THEN
       ESTADOBOTONES;
//    else
//       dmgs.cdsq_mdlineaSALIDA.Open;
// UTILIZO LOS DATASETS ABIERTOS QUE VIENEN DE FDLGTARIFAS.
    dsSALIDA.DataSet := DMGS.CDSQ_mdSALIDA ;
end;
procedure TSALIDA.FormKeyPress(Sender: TObject; var Key: Char);
begin
    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_mdlineaSALIDA.State in [dsedit,dsinsert]) then
    begin
//       if dbgrid2.Focused then
      IF (ACTIVECONTROL IS TDBGRID) THEN
       begin
        if dbgrid2.SelectedIndex = (dbgrid2.FieldCount - 1) then
        begin
          DMGS.CDSQ_mdlineaSALIDA.next;
          IF DMGS.CDSQ_MDLINEASALIDA.EOF THEN
             BALTAS2.Click;
          dbgrid2.selectedindex := 0;
        end
        else
           dbgrid2.SelectedIndex := dbgrid2.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_mdlineaSALIDA.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_mdlineaSALIDA.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_mdlineaSALIDA.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_mdSALIDA.state in [dsedit,dsinsert]))
            then close;
    if (key = #27) and (DMGS.CDSQ_mdSALIDA.state in [dsedit,dsinsert])
       and (not( dmgs.cdsq_mdlineaSALIDA.state in [dsedit,dsinsert]))
    then
       if DMGS.RSALIDA.BUSCANDO then
          buscar
       ELSE
          DMGS.CDSQ_mdSALIDA.Post;
end;
procedure TSALIDA.BSalirClick(Sender: TObject);
begin
    close;
    SELF.ModalResult:=mrOk;
end;
procedure TSALIDA.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 TSALIDA.PRIMERO1Click(Sender: TObject);
begin
   DMGS.CDSQ_mdlineaSALIDA.first;
end;

procedure TSALIDA.ANTERIOR1Click(Sender: TObject);
begin
    DMGS.CDSQ_mdlineaSALIDA.Prior;
end;

procedure TSALIDA.SIGUIENTE1Click(Sender: TObject);
begin
    DMGS.CDSQ_mdlineaSALIDA.next;
end;
procedure TSALIDA.REGISTRO1Click(Sender: TObject);
begin
   if DMGS.CDSQ_mdlineaSALIDA.state in [dsedit,dsinsert] then
   begin
      primero1.enabled:=false;
      anterior1.enabled:=false;
      siguiente1.enabled:=false;
   end
   else
   begin
       primero1.enabled:=DMGS.CDSQ_mdlineaSALIDA.bof=false;
       anterior1.enabled:=primero1.enabled;
       siguiente1.enabled:=DMGS.CDSQ_mdlineaSALIDA.eof=false;
   end;
end;
procedure TSALIDA.EstadoBotones;
begin
    PDatos.enabled:=DMGS.CDSQ_mdSALIDA.state in [dsedit,dsinsert];
    BAltas.enabled:=(DMGS.CDSQ_mdSALIDA.state IN [DSBROWSE,dsinactive]);
    BListado.enabled:=(DMGS.CDSQ_mdSALIDA.state=dsbrowse) and (DMGS.CDSQ_mdSALIDA.recordcount >0) ;
    BConsultas.enabled:=(DMGS.CDSQ_mdSALIDA.state IN [dsbrowse,dsinactive]);
    BModificaciones.enabled:=(DMGS.CDSQ_mdSALIDA.state=dsbrowse) and (DMGS.CDSQ_mdSALIDA.recordcount >0) ;
    BBajas.enabled:=(DMGS.CDSQ_mdSALIDA.state=dsbrowse) and (DMGS.CDSQ_mdSALIDA.recordcount >0) ;
     // para que no se pueda anyadir ni borrar lineas de pedido
    // antes de introducir todos
    // los datos del pedido.
    if (DMGS.CDSQ_mdSALIDA.state=dsbrowse) and (DMGS.CDSQ_mdSALIDA.recordcount >0) then
    begin
       baltas2.enabled:=true;
       BbAJAS2.Enabled := true;
       IF (DMGS.CDSQ_MDLINEASALIDA.ACTIVE) AND
       (DMGS.CDSQ_mdLINEASALIDA.recordcount >0) then
       BEGIN
          bmodificar2.enabled:= true;
          BCANTIDAD.Enabled := TRUE;
       END
       ELSE
       BEGIN
           bmodificar2.enabled:= FALSE;
           BCANTIDAD.Enabled := FALSE;
       END;
    end
    else
    begin
      baltas2.enabled := false;
      bBAJAS2.Enabled := false;
//      IF (DMGS.CDSQ_MDLINEASALIDA.ACTIVE) AND
//      (DMGS.CDSQ_mdLINEASALIDA.recordcount >0) then
//      BEGIN
         bmodificar2.enabled:= false;
         BCANTIDAD.Enabled := FALSE;
//      END;
    end;
end;
procedure TSALIDA.BAltasClick(Sender: TObject);
begin
  WITH DMGS.CDSQ_mdSALIDA DO
  BEGIN
     IF NOT Active THEN
     BEGIN
        Close;
        DMGS.VSALIDA.ID:='-1115487';
        DMGS.VSALIDA.TIPO:='1';
        DMGS.VSALIDA.ORDEN:= ORDENSALIDA;
        DMGS.VSALIDA.ORDENLINEA:= ORDENLINEASALIDA;// CDSQ_MDSALIDA
        Open;
     END;
     APPEND;
  END;
  DBEDIT1.SetFocus;
end;
procedure TSALIDA.BBajasClick(Sender: TObject);
begin
    if (DMGS.CDSQ_mdSALIDA.recordcount>0) then //or (DMGS.CDSQ_mdSALIDA.state in [dsedit,dsinsert]) then
    begin
       case dmgs.PedirConfirmacion('¿Confirma que desea borrar esta SALIDA?',true,true,false) of
           mrno: exit;
       end;
       if DMGS.CDSQ_mdlineaSALIDA.recordcount >0 then
            DMGS.BorrandoLineasSAL:= true;
       while DMGS.CDSQ_mdlineaSALIDA.RecordCount>0  do
       begin
              DMGS.RSALIDA.PREGUNTA := FALSE;
              DMGS.CDSQ_mdlineaSALIDA.Delete;
       end;
       // lo tengo que hacer asi, pq en el server modifico mdSALIDA
       // 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_mdlineaSALIDA.afterpost(DMGS.CDSQ_mdlineaSALIDA);
       DMGS.CDSQ_mdSALIDA.delete;
       DMGS.CDSQ_mdSALIDAafterpost(DMGS.CDSQ_mdSALIDA);
   end;
end;
procedure TSALIDA.BALTAS2Click(Sender: TObject);
begin
    IF DMGS.CDSQ_mdSALIDA.RecordCount > 0 THEN
    BEGIN
     WITH DMGS.CDSQ_mdlineaSALIDA  DO
     BEGIN
      IF NOT Active THEN
        OPEN;
      LAST;
      APPEND;
     END;
     dbgrid2.SetFocus;
//     dbgrid2.SelectedIndex :=0;
     DMGS.CDSQ_mdlineaSALIDAID_ARTICULO.FOCUSCONTROL;
    END;
end;
procedure TSALIDA.FormClose(Sender: TObject; var Action: TCloseAction);
begin
    if (DMGS.CDSQ_mdSALIDA.State in [dsedit,dsinsert]) AND
       (NOT DMGS.RSALIDA.BUSCANDO) then
       DMGS.CDSQ_mdSALIDA.Post;
    Action := caFree;
end;
procedure TSALIDA.BModificacionesClick(Sender: TObject);
begin
    if DMGS.CDSQ_mdSALIDA.recordcount>0 then
    begin
        DMGS.CDSQ_mdSALIDA.edit;
//        DMGS.CDSQ_mdSALIDAID_PRESUPUESTO.FocusControl ;
        DBEDIT1.SetFocus;
    end;
end;
procedure TSALIDA.BListadoClick(Sender: TObject);
VAR BOOKMARK,bookmark1:TBOOKMARK;
begin
// HACERLO
  { LISTADO }
    BOOKMARK:= DMGS.CDSQ_MDLINEASALIDA.GetBookmark ;
    BOOKMARK1:= DMGS.CDSQ_MDSALIDA.GetBookmark ;
    WITH DMGS.CDSQ_EMPRESAAUX DO
    BEGIN
      Close;
      DMGS.VEMPRESASAUX.ID:= DMGS.CDSQ_mdSALIDAID_EMPRESA.AsString;
      DMGS.VEMPRESASAUX.TIPO :='2';
      OPEN;
    END;

    DSSALIDA.DataSet := NIL; // HACE FALTA
    DSLINEASALIDA.DataSet := NIL;
    LISTADOS := tLISTADOS.Create(nil);
    PREVIO := TPREVIO.Create(NIL);

    LISTADOS.FRDB.DataSet := DMGS.CDSQ_mdSALIDA;
    LISTADOS.FRDB1.DATASET := DMGS.CDSQ_mdlineaSALIDA;
    LISTADOS.FRDB2.DataSet := DMGS.CDSQ_EMPRESAAUX;

 //   Path := ExtractFilePath(ParamStr(0));
    LISTADOS.frReport1.LoadFromFile(dmgs.Path + 'LISTADOS\SALIDA.frf');
    LISTADOS.frReport1.Preview := PREVIO.frPreview1;
    LISTADOS.frReport1.ShowReport;
    PREVIO.ShowModal;
    DSSALIDA.DataSet := DMGS.CDSQ_mdSALIDA;
    DSLINEASALIDA.DataSet := DMGS.CDSQ_mdlineaSALIDA;
    LISTADOS.Free;
    LISTADOS := NIL;
    PREVIO.FREE;
    PREVIO := NIL;
    DMGS.CDSQ_EMPRESAAUX.CLOSE;
    DMGS.CDSQ_MDSALIDA.GotoBookmark(BOOKMARK1);
    DMGS.CDSQ_MDSALIDA.FreeBookmark (BOOKMARK1);
    DMGS.CDSQ_MDlineaSALIDA.GotoBookmark(BOOKMARK);
    DMGS.CDSQ_MDLINEASALIDA.FreeBookmark (BOOKMARK);
end;
procedure TSALIDA.DSSALIDAStateChange(Sender: TObject);

begin
    EstadoBotones;
end;
procedure TSALIDA.SALIDA1Click(Sender: TObject);
begin
    altas1.enabled:=baltas.enabled;
    bajas1.enabled:=bbajas.enabled;
    consultas1.enabled:=bconsultas.enabled;
    modificaciones1.enabled:=bmodificaciones.enabled;
end;



procedure TSALIDA.DSSALIDADataChange(Sender: TObject;
  Field: TField);

begin
    COMPROBAREMPRESA;
    COMPROBARPROVEEDOR;
    IF ((DMGS.CDSQ_mdSALIDA.Eof)   AND (NOT (DMGS.CDSQ_mdSALIDA.STATE IN [DSEDIT,DSINSERT]))) THEN
    BEGIN
      try // para evitar el error de memoria bloqueada en el server.
        DMGS.CDSQ_mdSALIDA.GetNextPacket ;
      except
      end;
  //    ESTADOBOTONES;
    END;
    ESTADOBOTONES;
end;
procedure TSALIDA.DBEdit3Exit(Sender: TObject);
begin
  comprobarPROVEEDOR;
end;


procedure TSALIDA.BBAJAS2Click(Sender: TObject);
begin
    if (DMGS.CDSQ_mdlineaSALIDA.recordcount>0) then
    begin
      DMGS.CDSQ_mdlineaSALIDA.delete;
      DMGS.CDSQ_mdlineaSALIDAafterpost(dmGS.CDSQ_mdlineaSALIDA);
    end;
end;
procedure TSALIDA.DBGrid2KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  IF (DMGS.CDSQ_mdlineaSALIDA.STATE IN [DSEDIT,DSINSERT]) THEN
   BEGIN
   IF KEY=27 THEN
     DMGS.RSALIDA.ESCAPECDS := TRUE;
   if key=112 then
    begin
      if UPPERCASE(TRIM(dbgrid2.SelectedField.FieldName)) ='ID_ARTICULO' then
         IDARTICULO;
    END;
  end;
END;
procedure TSALIDA.DBNavigator1Click(Sender: TObject;
  Button: TNavigateBtn);
begin
  IF DMGS.CDSQ_mdSALIDA.Eof THEN
  try // para evitar el error de memoria bloqueada en el server.
     DMGS.CDSQ_mdSALIDA.GetNextPacket ;
  except
  end;
end;

procedure TSALIDA.DBGrid2ColEnter(Sender: TObject);
begin
IF (DMGS.CDSQ_mdlineaSALIDA.STATE IN [DSEDIT,DSINSERT]) THEN
 BEGIN
 F1ENTRA:=FALSE;
{   if UPPERCASE(TRIM(dbgrid2.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
        dbgrid2.SelectedField.AsString:=DlgClienteaux.cliente;
        dbgrid2.SelectedIndex  := dbgrid2.SelectedIndex  + 1;
      end;
      dlgclienteaux.Free;
      dlgclienteaux := nil;
   END;
}{   if UPPERCASE(TRIM(dbgrid2.SelectedField.FieldName)) ='ID_PLANTA' then
      begin
       if trim(dbgrid2.Fields[0].AsString)<>'' then
       begin
        dmst.cdsq_plantasaux.Close;
        dlgplantasaux := tdlgplantasaux.Create(nil);
        dlgplantasaux.nif := trim(dbgrid2.Fields[0].AsString);
        dlgplantasaux.NoCerrarDataset := false;
        if Dlgplantasaux.Showmodal=mrok then
        begin
            dbgrid2.SelectedField.AsString:=Dlgplantasaux.nif;// devuelve
            // el id_planta
            dbgrid2.SelectedIndex  := dbgrid2.SelectedIndex  + 1;
        end;
        dlgplantasaux.Free;
        dlgplantasaux := nil;
       end
       else
       BEGIN
           showmessage('Debe introducir primero el nif del cliente');
           dbgrid2.SelectedIndex  := dbgrid2.SelectedIndex  - 1;
       END;
      end;
      if UPPERCASE(TRIM(dbgrid2.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
            dbgrid2.SelectedField.AsString:=FDLGSERVICIOSaux.CODIGO;
            // DEVUELVE EL NIF
            dbgrid2.SelectedIndex  := dbgrid2.SelectedIndex  + 1;
        end;
        FDLGSERVICIOSAUX.Free;
        FDLGSERVICIOSAUX := nil;
       END;
   if UPPERCASE(TRIM(dbgrid2.SelectedField.FieldName)) ='TIPO' then
   BEGIN
     dbgrid2.SelectedField.AsString := 'GENERICA';
   END;
}
  end;
END;
procedure TSALIDA.DBGrid2DrawColumnCell(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_mdlineaSALIDA.RecNo   mod 2 )= 0)then
           If (gdFocused in State)
             then dbgrid2.canvas.brush.color := otro//clblue
             else dbgrid2.canvas.brush.color := azul//clPaleGreen;
       ELSE
           If (gdFocused in State)
             then dbgrid2.canvas.brush.color := otro;//clblue
 //            else dbgrid2.canvas.brush.color := azul2;//clPaleGreen;

     dbgrid2.DefaultDrawColumnCell(rect,DataCol,Column,State)
end;
procedure TSALIDA.DBGrid2KeyPress(Sender: TObject; var Key: Char);
BEGIN
   if (key = #46) then // 46 -> .
     if (dmgs.CDSQ_MDLINEASALIDA.state in [dsedit,dsinsert]) then
       if (dbgrid2.SelectedField.DataType in [ftfloat,ftfmtbcd,ftbcd]) then
          key := #44 ;  //44->  ,

   if (key <> #27) then
       DMgs.RSALIDA.ESCAPECDS := false;
   if (key = #13) and not (DMGS.CDSQ_mdlineaSALIDA.State in [dsedit,dsinsert]) then
   begin
        Perform(WM_NextDLGCtl, 0, 0);
        key:=#0;
   end;
   if (key = #13) and (DMGS.CDSQ_mdlineaSALIDA.State in [dsedit,dsinsert]) then
   begin
        if dbgrid2.SelectedIndex = (dbgrid2.FieldCount - 1) then
             DMGS.CDSQ_mdlineaSALIDA.Post
        else
           dbgrid2.SelectedIndex := dbgrid2.SelectedIndex + 1;
        key:=#0;
   end;
     if (key = #27) and not (DMGS.CDSQ_mdlineaSALIDA.state in [dsedit,dsinsert])
     then
       close;
     if (key = #27) and not (ActiveControl is TButton) then
        DMgs.RSALIDA.ESCAPECDS:= true;
END;
PROCEDURE TSALIDA.COMPROBAREMPRESA ;
BEGIN
   IF TRIM(DMGS.CDSQ_mdSALIDAID_EMPRESA.ASSTRING)  <> '' THEN
    LABEL7.Caption := FMENU.NOMBREEMPRESA
   ELSE
    LABEL7.Caption := '';
END;

procedure TSALIDA.DBEdit2Exit(Sender: TObject);
begin
  IF (DMGS.CDSQ_mdSALIDA.STATE IN [DSEDIT,DSINSERT] ) THEN
   if DMGS.RSALIDA.BUSCANDO then
      buscar
   ELSE
      DMGS.CDSQ_mdSALIDA.Post;
end;
PROCEDURE TSALIDA.COMPROBARPROVEEDOR;
BEGIN
END;
procedure TSALIDA.BMODIFICAR2Click(Sender: TObject);
begin
    if DMGS.CDSQ_mdlineaSALIDA.recordcount>0 then
    begin
        DMGS.CDSQ_mdlineaSALIDA.edit;
        DMGS.CDSQ_mdlineaSALIDAID_ARTICULO.FocusControl;
    end;
end;

procedure TSALIDA.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 TSALIDA.DSLINEASALIDADataChange(Sender: TObject;
  Field: TField);
  VAR I:INTEGER;
      AUXBOOKMARK:TBOOKMARK;
      F:DOUBLE;
begin
end;

procedure TSALIDA.DBGrid2DblClick(Sender: TObject);
begin
  IF (DMGS.CDSQ_mdlineaSALIDA.STATE IN [DSEDIT,DSINSERT]) THEN
   BEGIN
      if UPPERCASE(TRIM(dbgrid2.SelectedField.FieldName)) ='ID_ARTICULO' then
      begin
         IDARTICULO;
{          DLGARTICULOSAUX := TDLGARTICULOSAUX.CREATE(NIL);
          IF DLGARTICULOSAUX.Showmodal=mrOk then
          begin
             F1ENTRA := TRUE;
             dmgs.cdsq_mdlineaSALIDAID_ARTICULO.asstring:=DLGARTICULOSAUX.codigo;
             DMGS.CDSQ_mdlineaSALIDADESCRIPCION.ASSTRING:= DLGARTICULOSAUX.DESCRIPCION;
             DMGS.CDSQ_mdlineaSALIDAPRECIO.ASSTRING := DLGARTICULOSAUX.PRECIO;
             dmgs.cdsq_mdlineaSALIDAiva.asstring := dlgarticulosaux.iva;
             DMGS.CDSQ_mdlineaSALIDAMARCA.ASSTRING:= DLGARTICULOSAUX.MARCA;
            dbgrid2.selectedindex:=dbgrid2.selectedindex+1;
            WITH DMGS.CDSQ_TARIFASAUX DO
              BEGIN
               CLOSE;
               DMGS.TAABGRIDPROVEEDOR:=' WHERE ID_PROVEEDOR='+DMGS.CDSQ_MDSALIDAID_PROVEEDOR.ASSTRING+' AND ID_ARTICULO='''+DMGS.CDSQ_MDLINEASALIDAID_ARTICULO.AsString+''' ';
               DMGS.TAAbgrtipo:='2';
               OPEN;
               IF RECORDCOUNT > 0 THEN
                  DMGS.CDSQ_MDLINEASALIDAART_PROVEEDOR.AsString := DMGS.CDSQ_TARIFASAUXART_PROVEEDOR.ASSTRING;
               CLOSE;
              END;
          end;
          DLGARTICULOSAUX.Free;
          DLGARTICULOSAUX := NIL;
}      END;

  end;
end;

PROCEDURE TSALIDA.IDARTICULO ;
BEGIN
          DLGALMACENAUX := TDLGALMACENAUX.CREATE(NIL);
          IF DLGALMACENAUX.Showmodal=mrOk then
          begin
             F1ENTRA := TRUE;
             dmgs.cdsq_mdlineaSALIDAID_ARTICULO.asstring:=DMGS.CDSQ_ALMACENAUXID_ARTICULO.ASSTRING;
             DMGS.CDSQ_mdlineaSALIDADESCRIPCION.ASSTRING:= DMGS.CDSQ_ALMACENAUXDESCRIPCION.ASSTRING;
             DMGS.CDSQ_mdlineaSALIDAMARCA.ASSTRING:= DMGS.CDSQ_ALMACENAUXMARCA.ASSTRING;
            dbgrid2.selectedindex:=dbgrid2.selectedindex+1;
          end;
          DLGALMACENAUX.Free;
          DLGALMACENAUX := NIL;
END;
procedure TSALIDA.ACANTIDADExecute(Sender: TObject);
begin
  IF DMGS.CDSQ_MDLINEASALIDA.ACTIVE
  AND (TRIM(DMGS.CDSQ_MDLINEASALIDAID_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_MDLINEASALIDAID_ARTICULO.AsString+''' AND ID_EMPRESA='+DMGS.CDSQ_MDLINEASALIDAID_EMPRESA.ASSTRING;
       OPEN;
     END;
     IF DMGS.CDSQ_ALMACENAUX.RecordCount > 0 THEN
        CANTIDAD.Showmodal;
     CANTIDAD.Free;
     CANTIDAD := NIL;
end;
FUNCTION  TSALIDA.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;

end.





