unit FARTICULOS;

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,MATH,DATEUTILS,FFUNCIONES;

type
  TARTICULOS = class(TForm)
    Panel1: TPanel;
    Panel5: TPanel;
    Panel6: TPanel;
    Label24: TLabel;
    Label30: TLabel;
    Label31: TLabel;
    Menu: TMainMenu;
    PRESUPUESTO1: TMenuItem;
    ALTAS1: TMenuItem;
    BAJAS1: TMenuItem;
    CONSULTAS1: TMenuItem;
    MODIFICACIONES1: TMenuItem;
    N4: TMenuItem;
    IMPRIMIR1: TMenuItem;
    N1: TMenuItem;
    SALIR1: TMenuItem;
    REGISTRO1: TMenuItem;
    PRIMERO1: TMenuItem;
    ANTERIOR1: TMenuItem;
    SIGUIENTE1: TMenuItem;
    DSARTICULOS: TDataSource;
    ToolBar1: TToolBar;
    baltas: TToolButton;
    bbajas: TToolButton;
    bconsultas: TToolButton;
    bmodificaciones: TToolButton;
    ToolButton5: TToolButton;
    DBNavigator2: TDBNavigator;
    bsalir: TToolButton;
    ActionList1: TActionList;
    AAltas: TAction;
    ABajas: TAction;
    AConsultas: TAction;
    AModificaciones: TAction;
    ASalir: TAction;
    ImageList1: TImageList;
    Label7: TLabel;
    DBText1: TDBText;
    DBText2: TDBText;
    DBText3: TDBText;
    ToolButton1: TToolButton;
    ToolButton2: TToolButton;
    ToolButton3: TToolButton;
    ToolButton6: TToolButton;
    OpenPictureDialog1: TOpenPictureDialog;
    BEAN: TToolButton;
    dbimage1: TDBImage;
    Label12: TLabel;
    Label2: TLabel;
    ToolButton4: TToolButton;
    ToolButton8: TToolButton;
    Label13: TLabel;
    Label6: TLabel;
    Label8: TLabel;
    BLISTADO: TToolButton;
    ALISTADO: TAction;
    ToolButton7: TToolButton;
    ACANTIDAD: TAction;
    Pderecho: TPanel;
    Label9: TLabel;
    DBEdit1: TDBEdit;
    DBEdit2: TDBEdit;
    Label10: TLabel;
    DBText4: TDBText;
    Label11: TLabel;
    DBEdit3: TDBEdit;
    Label14: TLabel;
    DBEdit4: TDBEdit;
    Label15: TLabel;
    DBEdit5: TDBEdit;
    Label16: TLabel;
    DBEdit6: TDBEdit;
    Label17: TLabel;
    DBEdit7: TDBEdit;
    Label18: TLabel;
    DBEdit8: TDBEdit;
    Label19: TLabel;
    DBEdit9: TDBEdit;
    Label20: TLabel;
    DBEdit10: TDBEdit;
    Label21: TLabel;
    DBEdit11: TDBEdit;
    Label22: TLabel;
    DBText5: TDBText;
    pdatos: TPanel;
    DBGrid1: TDBGrid;
    Label1: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    abusqueda: TAction;
    aorden: TAction;
    AEAN: TAction;
    APVPFIJO: TAction;
    Label23: TLabel;
    DBEdit12: TDBEdit;
    Label25: TLabel;
    DBEdit13: TDBEdit;
    Label26: TLabel;
    DBText6: TDBText;
    Label27: TLabel;
    DBText7: TDBText;
    ToolButton9: TToolButton;
    AVERIFICAR: TAction;
    DBText8: TDBText;
    DBText9: TDBText;
    ToolButton10: TToolButton;
    Label28: TLabel;
    DBEdit14: TDBEdit;
    DBRadioGroup1: TDBRadioGroup;
    DBCheckBox1: TDBCheckBox;
    DBCheckBox2: TDBCheckBox;
    Label29: TLabel;
    DBEdit15: TDBEdit;
    Label32: TLabel;
    Label33: TLabel;
    DBEdit16: TDBEdit;
    DBEdit17: TDBEdit;
    Image5: TImage;
    Image6: TImage;
    SpeedButton3: TSpeedButton;
    Ver1: TMenuItem;
    odos1: TMenuItem;
    NoBorrados1: TMenuItem;
    Label34: TLabel;
    DBRadioGroup2: TDBRadioGroup;
    DBCheckBox3: TDBCheckBox;
    DBCheckBox4: TDBCheckBox;
    DBCheckBox5: TDBCheckBox;
    DBCheckBox6: TDBCheckBox;
    ToolButton11: TToolButton;
    Label35: TLabel;
    DBEdit18: TDBEdit;
    Label36: TLabel;
    DBEdit19: TDBEdit;
    Label37: TLabel;
    DBEdit20: TDBEdit;
    Label38: 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 DSARTICULOSStateChange(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure REGISTRO1Click(Sender: TObject);
    procedure PRIMERO1Click(Sender: TObject);
    procedure ANTERIOR1Click(Sender: TObject);
    procedure SIGUIENTE1Click(Sender: TObject);
    procedure PRESUPUESTO1Click(Sender: TObject);
    procedure BListadoClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
    procedure DBGrid1KeyPress(Sender: TObject; var Key: Char);
    procedure DBGrid1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure DBGrid1ColEnter(Sender: TObject);
    procedure DBGrid1ColExit(Sender: TObject);
    procedure DSARTICULOSDataChange(Sender: TObject; Field: TField);
    procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    procedure dbimage1DblClick(Sender: TObject);
    procedure DBGrid1DblClick(Sender: TObject);
    procedure ACANTIDADExecute(Sender: TObject);
    procedure DBEdit2DblClick(Sender: TObject);
    procedure DBEdit2KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure DBEdit3Exit(Sender: TObject);
    procedure DBEdit10Enter(Sender: TObject);
    procedure DBGrid1Enter(Sender: TObject);
    procedure abusquedaExecute(Sender: TObject);
    procedure aordenExecute(Sender: TObject);
    procedure AEANExecute(Sender: TObject);
    procedure FormResize(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure DBEdit13DblClick(Sender: TObject);
    procedure DBEdit13KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure DBEdit11Enter(Sender: TObject);
    procedure DBEdit10Exit(Sender: TObject);
    procedure AVERIFICARExecute(Sender: TObject);
    procedure DBEdit12DblClick(Sender: TObject);
    procedure DBEdit12KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure ToolButton10Click(Sender: TObject);
    procedure SpeedButton3Click(Sender: TObject);
    procedure DBEdit17Exit(Sender: TObject);
    procedure NoBorrados1Click(Sender: TObject);
    procedure odos1Click(Sender: TObject);
    procedure DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure DBGrid1TitleClick(Column: TColumn);
    procedure ApdDataPacket1StringPacket(Sender: TObject; Data: String);
    procedure ApdComPort1TriggerAvail(CP: TObject; Count: Word);
    procedure DBCheckBox6Click(Sender: TObject);
    procedure DBCheckBox5Click(Sender: TObject);
    procedure DBCheckBox4Click(Sender: TObject);
    procedure DBCheckBox3Click(Sender: TObject);
    procedure ToolButton11Click(Sender: TObject);
    procedure DBEdit6Enter(Sender: TObject);
    procedure DBEdit6Exit(Sender: TObject);
    procedure DBEdit4Enter(Sender: TObject);
    procedure DBEdit18Enter(Sender: TObject);
    procedure DBEdit7Enter(Sender: TObject);
    procedure DBEdit5Enter(Sender: TObject);
    procedure DBEdit8Enter(Sender: TObject);
    procedure DBEdit9Enter(Sender: TObject);
    procedure DBEdit4Exit(Sender: TObject);
    procedure DBEdit18Exit(Sender: TObject);
    procedure DBEdit7Exit(Sender: TObject);
    procedure DBEdit5Exit(Sender: TObject);
    procedure DBEdit8Exit(Sender: TObject);
    procedure DBEdit9Exit(Sender: TObject);
    procedure DBEdit3Enter(Sender: TObject);
    procedure DBEdit19Enter(Sender: TObject);
    procedure DBEdit19Exit(Sender: TObject);

  private
    { Private declarations }
    F1ENTRA,ENTRABF, ENTRAPVP2, entrapvpcat,entrapvpprov,entradesc,entrapcoste,entraiva,entrapvp:BOOLEAN;
    SORDEN,ENTRA,sale:STRING;
    CADENA:STRING;
    ancho:integer;
    ESTA:BOOLEAN;
    pfunciones:tfunciones;

    
    procedure EstadoBotones;
    procedure buscar;
    procedure color;
    procedure calcular;
    procedure proveedor;
    PROCEDURE TARIFAS;


  public
    { Public declarations }
    ver: string;
    ARORDEN : TORDEN;
//    pvpfijo:boolean;

    PROCEDURE COMPROBARIMAGEN;
    
  end;

var
  ARTICULOS: TARTICULOS;

implementation

uses FDLGCLIENTE, RUTINAS, UDMgs, fdlgarticulos,
  FDLGFAMILIASAUX, menu, DLGCOLORESAUX, FEAN, FLISTADOS, fprevio, FCANTIDAD,
  FTARIFAS, FDLGTARIFASAUX, fdlgPROVEEDORaux, FDLGFAMILIAS;

{$R *.DFM}



procedure TARTICULOS.BListadoClick(Sender: TObject);
var bookmark:tbookmark;
begin
    bookmark := dmgs.cdsq_articulos.GetBookmark ;
    DSARTICULOS.DataSet := NIL; // HACE FALTA
    LISTADOS := tLISTADOS.Create(nil);
    PREVIO := TPREVIO.Create(NIL);
    LISTADOS.FRDB.DataSet := DMGS.CDSQ_ARTICULOS;
 //   Path := ExtractFilePath(ParamStr(0));
    IF NOT FMENU.VISTACLIENTE THEN
        LISTADOS.frReport1.LoadFromFile(dmgs.Path + 'LISTADOS\ARTICULOS.frf')
    ELSE
        LISTADOS.frReport1.LoadFromFile(dmgs.Path + 'LISTADOS\ARTICULOS1.frf');

    LISTADOS.frReport1.Preview := PREVIO.frPreview1;
    LISTADOS.frReport1.ShowReport;
    PREVIO.ShowModal;
    DSARTICULOS.DataSet := DMGS.CDSQ_ARTICULOS;
    LISTADOS.Free;
    LISTADOS := NIL;
    PREVIO.FREE;
    PREVIO := NIL;
    dmgs.cdsq_articulos.GotoBookmark(bookmark);
    dmgs.cdsq_articulos.FreeBookmark (bookmark);
end;

//*******************************************************************//
//*******************************************************************//

procedure TARTICULOS.FormCreate(Sender: TObject);
begin

  try
    dbgrid1.Columns.loadfromfile(FMENU.PATHDBGRID +'\'+SELF.Name);
  except
  end;


  VER := '0';
  DMGS.CDSQ_ARTICULOS.CLOSE;
  ARORDEN := TORDEN.Create(NIL);
  ARORDEN.CDS := DMGS.CDSQ_ARTICULOS;
  ARORDEN.nombre  := 'CDSQ_ARTICULOS';
  ancho :=  Width ;
  dmgs.RARTICULOS.BUSCANDO := false;
  CADENA := '';
  LABEL8.Caption := '';
  // PARA QUE MUESTRE ARTICULOS CUANDO ENTRA EN LA PANTALLA DE
  // ARTICULOS
  IF arorden.sORDEN = '' THEN
//     arorden.sORDEN := ' ORDER BY DESCRIPCION';
     arorden.SORDEN := ordenarticulos;
  WITH DMGS.CDSQ_ARTICULOS  DO
  BEGIN
    CLOSE;
    DMGS.VARTICULOS.ID := '%';
    DMGS.VARTICULOS.ORDEN:= ARORDEN.SORDEN;//' ORDER BY ID_ARTICULO';
    dmgs.VARTICULOS.TIPO := '1';
    DMGS.VARTICULOS.BORRADO := VER;
    OPEN;
  END;
    PANEL5.Visible := FALSE;
    DBEDIT4.Visible := FALSE;
    DBEDIT5.Visible := FALSE;
    DBEDIT6.Visible := FALSE;
    DBEDIT7.Visible := FALSE;
    DBEDIT8.Visible := FALSE;
    DBEDIT9.Visible := FALSE;
    dbedit3.visible := false;
    LABEL14.VISIBLE := FALSE;
    LABEL15.VISIBLE := FALSE;
    LABEL16.VISIBLE := FALSE;
    LABEL17.VISIBLE := FALSE;
    LABEL18.VISIBLE := FALSE;
    LABEL19.VISIBLE := FALSE;
    LABEL11.VISIBLE := FALSE;
    LABEL4.VISIBLE := FALSE;
    LABEL5.VISIBLE := FALSE;
    LABEL3.VISIBLE := FALSE;
    LABEL1.VISIBLE := FALSE;
    LABEL36.visible := FALSE;
    DBEDIT19.visible := FALSE;

         PANEL5.Enabled := FALSE;
    DBEDIT4.ENABLED := FALSE;
    DBEDIT5.ENABLED := FALSE;
    DBEDIT6.ENABLED := FALSE;
    DBEDIT7.ENABLED := FALSE;
    DBEDIT8.ENABLED := FALSE;
    DBEDIT9.ENABLED := FALSE;
    dbedit3.ENABLED := false;
    LABEL14.ENABLED := FALSE;
    LABEL15.ENABLED := FALSE;
    LABEL16.ENABLED := FALSE;
    LABEL17.ENABLED := FALSE;
    LABEL18.ENABLED := FALSE;
    LABEL19.ENABLED := FALSE;
    LABEL11.ENABLED := FALSE;
    LABEL4.ENABLED := FALSE;
    LABEL5.ENABLED := FALSE;
    LABEL3.ENABLED := FALSE;
    LABEL1.ENABLED := FALSE;
    LABEL35.Enabled := FALSE;
    DBEDIT18.Enabled := FALSE;
    LABEL35.visible := FALSE;
    DBEDIT18.visible := FALSE;
    LABEL36.ENABLED := FALSE;
    DBEDIT19.ENABLED := FALSE;


    entra := '';
    sale :='';
    entrabf := false;
    entrapvpcat:= false;
    entrapvpprov:=false;
    entradesc:=false;
    entraiva:=false;
    entrapvp:=false;
    entrapcoste := false;
    entrapvp2 := false;

    pfunciones := tfunciones.Create ;



end;
procedure TARTICULOS.FormDestroy(Sender: TObject);
begin

  try
    dbgrid1.Columns.SAVETOfile(FMENU.PATHDBGRID +'\'+SELF.Name);
  except
  end;


   DMGS.CDSQ_ARTICULOS.close;
   ARORDEN.FREE;
   ARORDEN := NIL;
   
   pfunciones.Destroy ;

end;

procedure TARTICULOS.FormShow(Sender: TObject);
begin
    EstadoBotones;
    F1ENTRA := FALSE;
    DBGRID1.SetFocus ;
end;

procedure TARTICULOS.BConsultasClick(Sender: TObject);
var posaux:TBookmark;
    codigo:tcodigotar;
begin
    DSarticulos.DataSet := NIL;

    dlgarticulos:=tdlgarticulos.create(nil);
    IF TRIM(ARORDEN.SORDEN) = '' THEN
        DLGARTICULOS.ORDEN:=ORDENARTICULOS
    ELSE
        dlgarticulos.ORDEN :=  ARORDEN.SORDEN;
    DLGARTICULOS.CERRARDATASET := FALSE;
    DLGARTICULOS.VER := VER;
    dlgarticulos.Showmodal;
    dlgarticulos.Free;
    dlgarticulos := NIL;
    IF NOT DMGS.CDSQ_ARTICULOS.ACTIVE THEN
       ESTADOBOTONES;
// UTILIZO LOS DATASETS ABIERTOS QUE VIENEN DE FDLGTARIFAS.
    dsarticulos.DataSet := DMGS.CDSQ_ARTICULOS ;
end;

procedure TARTICULOS.FormKeyPress(Sender: TObject; var Key: Char);
VAR AUXI:INTEGER;
begin
   if (key = #46) then // 46 -> .
     if (dmgs.cdsq_articulos.state in [dsedit,dsinsert]) then
       IF ACTIVECONTROL IS TDBEDIT THEN
          if (DMGS.CDSQ_ARTICULOS.FieldByName ((ACTIVECONTROL AS TDBEDIT).DataField).DataType in [ftfloat,ftfmtbcd,ftbcd]) then
             key := #44 ;  //44->  ,
    if (ActiveControl=nil) and (key=#13) then
    begin
        Perform(WM_NextDLGCtl, 0, 0);
        key:=#0;
    end;
   if (key = #13) and not (DMGS.CDSQ_ARTICULOS.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_ARTICULOS.next;
          IF DMGS.CDSQ_ARTICULOS.EOF THEN
             BALTAS.Click;
          dbgrid1.selectedindex := 0;
        end
        else
           dbgrid1.SelectedIndex := dbgrid1.SelectedIndex + 1;
       end
       else
           Perform(WM_NextDLGCtl, 0, 0);
       key:=#0;
    end;
    if (key = #13) and not (ActiveControl is TdbGRID) then
    begin
         if uppercase(activecontrol.name)='DBEDIT19'
          then
             IF DMGS.RARTICULOS.BUSCANDO THEN
               BUSCAR
             ELSE
             begin
//          BEGIN // POR LA FUNCION DE BUSQUEDA
               DBEdit19Exit(sender);   
               DMGS.CDSQ_ARTICULOS.post;
             end;
          Perform(WM_NextDLGCtl, 0, 0);
          key:=#0 ;
//          END;
    end;

//    if not (activeControl is TDBEdit) then
    IF (( NOT (DMGS.CDSQ_ARTICULOS.State IN [DSEDIT,DSINSERT]))) THEN
    begin
    // LO QUITO PQ LE DEJO BUSCAR POR DESCRIPCION CUANDO
    // PULSAS TECLAS EN EL DBGRID
{       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 )
       AND (NOT (DMGS.CDSQ_ARTICULOS.ACTIVE)) then
           key:=#0;
    end;

    if (key = #27) and not (DMGS.CDSQ_ARTICULOS.state in [dsedit,dsinsert])
    AND NOT (ACTIVECONTROL IS TDBGRID)
    and not (dmgs.rarticulos.buscando)
     then close;


    if (key = #27) and not (ActiveControl is TButton)
         AND NOT (ACTIVECONTROL IS TDBGRID)
     then
        if DMGS.CDSQ_ARTICULOS.state in [dsedit,dsinsert]
        then
        IF DMGS.RARTICULOS.BUSCANDO THEN
           BUSCAR
        ELSE
           DMGS.CDSQ_ARTICULOS.post;

   IF ((NOT (DMGS.CDSQ_ARTICULOS.State IN [DSEDIT,DSINSERT]))
      AND (DMGS.CDSQ_ARTICULOS.ACTIVE)
      AND (KEY <> #27)
      )THEN
   BEGIN
       AUXI := ORD(KEY);
       IF AUXI > 20 THEN
          CADENA := CADENA + KEY;
       IF CADENA <> '' THEN
       BEGIN
        WHILE (NOT (DMGS.CDSQ_ARTICULOS.Locate('DESCRIPCION',CADENA,[loPartialKey])))
           AND (NOT(DMGS.CDSQ_ARTICULOS.EOF))
        DO
        BEGIN
         DMGS.CDSQ_ARTICULOS.LAST;
         IF DMGS.CDSQ_ARTICULOS.Eof THEN
          try // para evitar el error de memoria bloqueada en el server.
            DMGS.CDSQ_ARTICULOS.GetNextPacket ;
          except
          end;
        END;
       END;

   END
   ELSE
       CADENA:='';
   LABEL8.Caption := CADENA;

end;
procedure TARTICULOS.BSalirClick(Sender: TObject);
begin
    close;
    SELF.ModalResult:=mrOk;
end;
procedure TARTICULOS.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
    if key=38 then CambiarControl(self,false);
    if key=40 then CambiarControl(self,true);
    IF NOT ( DMGS.CDSQ_ARTICULOS.STATE IN [DSEDIT,DSINSERT]) THEN
    BEGIN
       IF (KEY = 8) THEN
        BEGIN
           IF LENGTH(CADENA) > 0 THEN
             CADENA := COPY(CADENA,1,LENGTH(CADENA)-1);
           LABEL8.Caption := CADENA;
        END;
    END;
end;
procedure TARTICULOS.REGISTRO1Click(Sender: TObject);
begin
   if DMGS.CDSQ_ARTICULOS.state in [dsedit,dsinsert] then
   begin
      primero1.enabled:=false;
      anterior1.enabled:=false;
      siguiente1.enabled:=false;
   end
   else
   begin
       primero1.enabled:=DMGS.CDSQ_ARTICULOS.bof=false;
       anterior1.enabled:=primero1.enabled;
       siguiente1.enabled:=DMGS.CDSQ_ARTICULOS.eof=false;
   end;
end;
procedure TARTICULOS.PRIMERO1Click(Sender: TObject);
begin
   DMGS.CDSQ_ARTICULOS.first;
end;

procedure TARTICULOS.ANTERIOR1Click(Sender: TObject);
begin
    DMGS.CDSQ_ARTICULOS.Prior;
end;

procedure TARTICULOS.SIGUIENTE1Click(Sender: TObject);
begin
    DMGS.CDSQ_ARTICULOS.next;
end;


procedure TARTICULOS.BAltasClick(Sender: TObject);
begin
    DBEDIT11.ReadOnly := TRUE;
    DBEDIT10.ReadOnly := TRUE;
    WITH DMGS.CDSQ_ARTICULOS  DO
    BEGIN
     IF NOT Active THEN
     BEGIN
        CLOSE;
        DMGS.VARTICULOS.ID := '-1457842';
        DMGS.VARTICULOS.ORDEN:= ARORDEN.SORDEN;//' ORDER BY ID_ARTICULO';
        dmgs.VARTICULOS.TIPO := '1';
        DMGS.VARTICULOS.BORRADO := VER;        
        OPEN;
     END;
     APPEND;
    END;
    DMGS.CDSQ_ARTICULOScod_familia.FocusControl ;
    DMGS.RARTICULOS.ENDBGRID := TRUE;
//    dbedit1.setfocus;
end;
procedure TARTICULOS.BBajasClick(Sender: TObject);
VAR AUX:STRING;
begin
    if (DMGS.CDSQ_ARTICULOS.recordcount>0) then
    begin
      aux := dmgs.cdsq_articulosid_articulo.AsString ;
      case dmgs.PedirConfirmacion('¿Confirma que desea borrar este Articulo?',true,true,false) of
           mrno:EXIT;
      end;
//      DMGS.CDSQ_ARTICULOS.delete;
        dmgs.TRANSACTIONACTUALIZAR :=10;
        WITH dmgs.CDSQ_ACTUALIZAR DO
        BEGIN
             commandtext := 'UPDATE tarifas_proveedores SET id_articulo=null WHERE  id_articulo='''+aux+''' ';
             AUX := COMMANDTEXT;
             try
               Execute;
//               DMGS.CDSQ_ARTICULOSafterpost(dmGS.CDSQ_ARTICULOS);
               fmenu.CERRARHIJA(ttarifas);
               WITH DMGS.CDSQ_articulos DO
               BEGIN
                  EDIT;
                  DMGS.CDSQ_articulosBORRADO.Value := 1;
                  dmgs.RARTICULOS.PREGUNTA  := FALSE;
                  DMGS.RARTICULOS.ENDBGRID := FALSE;
                  POST;
               END
             except
               showmessage('Error No se ha podido borrar el articulo.');
               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;
               dmgs.CDSQ_ARTICULOS.UndoLastChange(true)  ;
             end;
        END;
    end;
end;
procedure TARTICULOS.FormClose(Sender: TObject; var Action: TCloseAction);
begin
    DMGS.RARTICULOS.ENDBGRID := FALSE;
    if (DMGS.CDSQ_ARTICULOS.State in [dsedit,dsinsert]) AND
      (NOT DMGS.RARTICULOS.BUSCANDO) then
       DMGS.CDSQ_ARTICULOS.Post;


    Action := caFree;
end;
procedure TARTICULOS.BModificacionesClick(Sender: TObject);
begin
    if DMGS.CDSQ_ARTICULOS.recordcount>0 then
    begin
        DBEDIT11.ReadOnly := TRUE;
        DBEDIT10.ReadOnly := TRUE;

        DMGS.CDSQ_ARTICULOS.edit;
//        DMGS.CDSQ_ARTICULOScod_familia.FocusControl ;
        dmgs.cdsq_articulospvpcat.FocusControl;
        IF DMGS.CDSQ_ARTICULOSBORRADO.Value =1 THEN
           DMGS.CDSQ_ARTICULOSBORRADO.VALUE :=0;
//        DMGS.RARTICULOS.ENDBGRID := TRUE;
        // SI CAMBIO LA FORMA DE MODIFICAR POR DONDE ESTE SELECCIONADO
        // EL CAMPO OJO CON ESTO, SI ESTA FUERA DEL DBGRID HAY Q
        //QUE PONERLO A FALSE;
    end;
end;
procedure TARTICULOS.PRESUPUESTO1Click(Sender: TObject);
begin
    altas1.enabled:=baltas.enabled;
    bajas1.enabled:=bbajas.enabled;
    consultas1.enabled:=bconsultas.enabled;
    modificaciones1.enabled:=bmodificaciones.enabled;
//    IMPRIMIR1.enabled:=blistado.enabled;

    // ¿Se ha hecho la carga?
end;
procedure TARTICULOS.DBNavigator1Click(Sender: TObject;
  Button: TNavigateBtn);
begin
  IF DMGS.CDSQ_ARTICULOS.Eof THEN
  try // para evitar el error de memoria bloqueada en el server.
     DMGS.CDSQ_ARTICULOS.GetNextPacket ;
  except
  end;
end;

procedure TARTICULOS.DSARTICULOSStateChange(Sender: TObject);
begin
    EstadoBotones;
    CADENA := '';
end;
procedure TARTICULOS.EstadoBotones;
begin
    Pderecho.enabled:=DMGS.CDSQ_articulos.state in [dsedit,dsinsert];
    BAltas.enabled:=DMGS.CDSQ_ARTICULOS.state IN [dsbrowse,DSINACTIVE];
//    BLISTADO.Enabled :=DMGS.CDSQ_ARTICULOS.state IN [dsbrowse,DSINACTIVE];
    BConsultas.enabled:=DMGS.CDSQ_ARTICULOS.state IN [dsbrowse,DSINACTIVE];
    BModificaciones.enabled:=(DMGS.CDSQ_ARTICULOS.state IN [dsbrowse]) and (DMGS.CDSQ_ARTICULOS.recordcount>0);
    BBajas.enabled:=(DMGS.CDSQ_ARTICULOS.state IN [dsbrowse]) and (DMGS.CDSQ_ARTICULOS.recordcount>0);
    BLISTADO.enabled:=(DMGS.CDSQ_ARTICULOS.state IN [dsbrowse]) and (DMGS.CDSQ_ARTICULOS.recordcount>0);
//    BIMAGEN.enabled:=(DMGS.CDSQ_ARTICULOS.state IN [dsbrowse,DSEDIT,DSINSERT]) and (DMGS.CDSQ_ARTICULOS.recordcount>0);
//    BBORRARIMAGEN.enabled:=(DMGS.CDSQ_ARTICULOS.state IN [dsbrowse,DSEDIT,DSINSERT]) and (DMGS.CDSQ_ARTICULOS.recordcount>0);
    BEAN.enabled:=(DMGS.CDSQ_ARTICULOS.state IN [dsbrowse]) and (DMGS.CDSQ_ARTICULOS.recordcount>0);
end;



procedure TARTICULOS.DBGrid1KeyPress(Sender: TObject; var Key: Char);
BEGIN
   key :=  upcase(key);

   if (key = #46) then // 46 -> .
     if (dmgs.cdsq_articulos.state in [dsedit,dsinsert]) then
       if (dbgrid1.SelectedField.DataType in [ftfloat,ftfmtbcd,ftbcd]) then
          key := #44 ;  //44->  ,

   if (key = #39) then // 39 -> '
     if (dmgs.cdsq_articulos.state in [dsedit,dsinsert]) then
//       if (dbgrid1.SelectedField.DataType in [ftfloat,ftfmtbcd,ftbcd]) then
          key := #34 ;  //34->  ''


   if (key <> #27) then
       DMgs.RARTICULOS.ESCAPECDS  := false;
   if (key = #13) and not (DMGS.CDSQ_ARTICULOS.State in [dsedit,dsinsert]) then
    begin
        Perform(WM_NextDLGCtl, 0, 0);
        key:=#0;
    end;
   if (key = #13) and (DMGS.CDSQ_ARTICULOS.State in [dsedit,dsinsert]) then
   begin
        if dbgrid1.SelectedIndex = (dbgrid1.FieldCount - 1) then
        begin
//           if DMGS.RARTICULOS.BUSCANDO then
//              buscar
//           ELSE
              Perform(WM_NextDLGCtl, 0, 0);
        end
        else
           dbgrid1.SelectedIndex := dbgrid1.SelectedIndex + 1;
        key:=#0;
   end;

     if (key = #27) and not (DMGS.CDSQ_ARTICULOS.state in [dsedit,dsinsert])
     and (not dmgs.rarticulos.buscando)
     then
       close
     else
       if (KEY = #27)
       AND dmgs.rarticulos.buscando
       then
          dmgs.rarticulos.buscando := false;

     if (key = #27) and not (ActiveControl is TButton) then
        DMgs.RARTICULOS.ESCAPECDS:= true;

END;

procedure TARTICULOS.DBGrid1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  IF (DMGS.CDSQ_ARTICULOS.STATE IN [DSEDIT,DSINSERT]) THEN
   BEGIN
   IF KEY=27 THEN
     DMGS.RARTICULOS.ESCAPECDS := TRUE;
   if key=112 then
    begin
      if UPPERCASE(TRIM(dbgrid1.SelectedField.FieldName)) ='COD_FAMILIA' then
      begin
        DMGS.CDSQ_FAMILIASAUX.Close;
        DLGFAMILIASAUX := TDLGFAMILIASAUX.Create(NIL);
        if DLGFAMILIASAUX.Showmodal=mrok then
        begin
            F1ENTRA:= TRUE;
            DBGRID1.SelectedField.AsString  :=DLGFAMILIASAUX.codigo ;
            dbgrid1.SelectedIndex  := dbgrid1.SelectedIndex  + 1;
            DMGS.CDSQ_ARTICULOSPROFUNDIDAD.Value := DMGS.CDSQ_FAMILIASAUXPROFUNDIDAD.VALUE;

            DMGS.CDSQ_ARTICULOSMOSTRARIMAGEN.asinteger := DMGS.CDSQ_FAMILIASAUXAMOSTRARIMAGEN.ASINTEGER;
            DMGS.cdsq_articulosmostrardescripcion.AsInteger := DMGS.CDSQ_FAMILIASAUXAMOSTRARDESCRIPCION.ASINTEGER;

        end;
        DLGFAMILIASAUX.Free;
        DLGFAMILIASAUX := nil;
      end;
    if UPPERCASE(TRIM(dbgrid1.SelectedField.FieldName)) ='ID_COLOR' then
      BEGIN
        DMGS.CDSQ_COLORESaux.Close;
        FDLGCOLORESaux := tFdlgCOLORESaux.Create(nil);
        if FDLGCOLORESaux.Showmodal=mrok then
        begin
            DBGRID1.SelectedField.AsString:=FDLGCOLORESaux.COLOR;
            dbgrid1.SelectedIndex  := dbgrid1.SelectedIndex  + 1;
        end;
        FDLGCOLORESAUX.Free;
        FDLGCOLORESAUX := nil;
      END;
     END;
    END;
    IF (KEY = 40) THEN
     begin
        if dmgs.RARTICULOS.BUSCANDO then
        begin
          buscar;
          key:=0;
        end;
//        if dmgs.CDSQ_ARTICULOS.RecordCount  = dmgs.CDSQ_ARTICULOS.RecNo then
//           key:=0;
     END;
     if (key = 9) then
       if (dmgs.RARTICULOS.BUSCANDO) and ((dbgrid1.selectedindex) = (dbgrid1.FieldCount -1))then
        begin
           buscar;
           key:=0
        end;
{    IF (KEY = 38) THEN
     if UPPERCASE(TRIM(dbgrid1.SelectedField.FieldName)) ='TIPO' then
     BEGIN
        DBGRID1.SELECTEDFIELD.ASSTRING := 'GENERICA';
        KEY:=0;
     END;
 }
//   END;

end;

procedure TARTICULOS.DBGrid1ColEnter(Sender: TObject);
begin
IF (DMGS.CDSQ_ARTICULOS.STATE IN [DSEDIT,DSINSERT]) THEN
 F1ENTRA:=FALSE;
END;
procedure TARTICULOS.DBGrid1ColExit(Sender: TObject);
 VAR AUX:TDATETIME;
     AUX1:STRING;
     PVP : DOUBLE;
begin
 IF (DMGS.CDSQ_ARTICULOS.STATE IN [DSEDIT,DSINSERT]) THEN
 BEGIN
   if (UPPERCASE(TRIM(dbgrid1.SelectedField.FieldName)) ='COD_FAMILIA') AND
   (NOT F1ENTRA) AND
   (TRIM(DMGS.CDSQ_ARTICULOSCOD_FAMILIA.AsString)<>'' )
    then
    BEGIN
     WITH DMGS.CDSQ_FAMILIASAUX DO
     BEGIN
       CLOSE;
       DMGS.VFAMILIASAUX.ID := DMGS.CDSQ_ARTICULOSCOD_FAMILIA.ASSTRING;
       DMGS.VFAMILIASAUX.TIPO := '3';
       dmgs.vfamiliasaux.ORDEN := Oordenfamilias;
       OPEN;
{       WHILE (NOT LOCATE('COD_FAMILIA',DBGRID1.SelectedField.Value,[LOCASEINSENSITIVE])) AND
             (NOT EOF) DO
       BEGIN
          LAST;
          IF DMGS.CDSQ_ARTICULOS.Eof THEN
            try // para evitar el error de memoria bloqueada en el server.
               DMGS.CDSQ_ARTICULOS.GetNextPacket ;
            except
            end;
       END;
}
       IF recordcount=0 THEN
       BEGIN
         close;
         SHOWMESSAGE('LA FAMILIA NO EXISTE');
         DMGS.CDSQ_FAMILIASAUX.CLOSE;
         abort;
       END
       ELSE
       BEGIN
         DMGS.CDSQ_ARTICULOSPROFUNDIDAD.Value := DMGS.CDSQ_FAMILIASAUXPROFUNDIDAD.VALUE;
         DMGS.CDSQ_ARTICULOSMOSTRARIMAGEN.asinteger := DMGS.CDSQ_FAMILIASAUXAMOSTRARIMAGEN.ASINTEGER;
         DMGS.cdsq_articulosmostrardescripcion.AsInteger := DMGS.CDSQ_FAMILIASAUXAMOSTRARDESCRIPCION.ASINTEGER;
       END;
       DMGS.CDSQ_FAMILIASAUX.CLOSE;
     END;
   end;
   if (UPPERCASE(TRIM(dbgrid1.SelectedField.FieldName)) ='DESCRIPCION') AND
   (NOT DMGS.RARTICULOS.BUSCANDO) and
   (dmgs.cdsq_articulos.State in [dsinsert])
   THEN
   begin
      DMGS.CDSQ_ARTICULOSDESCRIPCIONTICKET.ASSTRING :=TRIM(dbgrid1.SelectedField.AsString );
      DMGS.CDSQ_ARTICULOSDESCRIPCIONboton.ASSTRING :=TRIM(dbgrid1.SelectedField.AsString );
   end;

//***************

{      IF NOT DMGS.RARTICULOS.BUSCANDO THEN
      BEGIN
         IF (DMGS.CDSQ_ARTICULOSPVPCAT.VALUE <> 0)
         AND (NOT dmgs.PVPFIJO)
         THEN
         BEGIN
            DMGS.CDSQ_ARTICULOSPRECIO_COSTE.VALUE := ROUNDTO(DMGS.CDSQ_ARTICULOSPVPCAT.Value-(DMGS.CDSQ_ARTICULOSPVPCAT.Value*DMGS.CDSQ_ARTICULOSDESCUENTO.Value/100),-4);
            DMGS.CDSQ_ARTICULOSBENEFICIO.VALUE := ROUNDTO((ROUNDTO((DMGS.CDSQ_ARTICULOSPVPCAT.Value/DMGS.CDSQ_ARTICULOSPRECIO_COSTE.Value),-5)-1)*100,-2);
            PVP:= DMGS.CDSQ_ARTICULOSPVPCAT.VALUE * (1+DMGS.CDSQ_ARTICULOSTRANS.VALUE/100);
            DMGS.CDSQ_ARTICULOSPRECIO_VENTA.Value := ROUNDTO(PVP * ((DMGS.CDSQ_ARTICULOSIVA.Value /100)+1),-5);
         END
         ELSE
         BEGIN
          if dmgs.pvpfijo then
          begin
            IF DMGS.CDSQ_ARTICULOSPRECIO_VENTA.Value <> 0 THEN
            BEGIN
              DMGS.CDSQ_ARTICULOSPVPCAT.Value := 0;
              DMGS.CDSQ_ARTICULOSDESCUENTO.Value := 0;
              IF DMGS.CDSQ_ARTICULOSPRECIO_COSTE.Value <> 0 THEN
                dmgs.cdsq_articulosbeneficio.Value  := roundto((((DMGS.CDSQ_ARTICULOSPRECIO_VENTA.VALUE/(1+dmgs.cdsq_articulosiva.Value/100)) / (dmgs.cdsq_articulosprecio_coste.Value))-1)*100,-2);
            END;
          end
          ELSE
              IF DMGS.CDSQ_ARTICULOSPRECIO_COSTE.Value <> 0 THEN
              BEGIN
                PVP:=ROUNDTO(DMGS.CDSQ_ARTICULOSPRECIO_COSTE.Value * ((DMGS.CDSQ_ARTICULOSBENEFICIO.Value /100)+1) * (1+DMGS.CDSQ_ARTICULOSTRANS.VALUE/100),-5);
                DMGS.CDSQ_ARTICULOSPRECIO_VENTA.Value := ROUNDTO( PVP * ((DMGS.CDSQ_ARTICULOSIVA.Value /100)+1),-5);
          END
         END;
      END;
} END;
 F1ENTRA := FALSE;
end;

procedure TARTICULOS.DSARTICULOSDataChange(Sender: TObject;
  Field: TField);
begin
    COMPROBARIMAGEN;
    IF ((DMGS.CDSQ_ARTICULOS.Eof)   AND (NOT (DMGS.CDSQ_ARTICULOS.STATE IN [DSEDIT,DSINSERT]))) THEN
    BEGIN
      try // para evitar el error de memoria bloqueada en el server.
        DMGS.CDSQ_ARTICULOS.GetNextPacket ;
      except
      end;
    ESTADOBOTONES;
    END;
    IF DMGS.CDSQ_ARTICULOSBORRADO.Value = 1 THEN
       LABEL34.Visible := TRUE
    ELSE
       LABEL34.Visible := FALSE;

    IF DMGS.CDSQ_ARTICULOSTIENEEAN.Value = 1 THEN
       LABEL38.Visible := TRUE
    ELSE
       LABEL38.Visible := FALSE;

end;

procedure TARTICULOS.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_ARTICULOS.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 tarticulos.buscar;
var aux,AUX1,fecha:STRING;
    i,AUX2,AUX3:integer;
    auxfecha:tdatetime;
begin
  i:= 0;
  aux := '';
  WHILE I < SELF.ComponentCount DO
  begin
    IF (SELF.Components[I] IS TDBEDIT) THEN
    BEGIN
      AUX1:=(SELF.Components[I] AS TDBEDIT).DataField ;
      if (NOT (TRIM(DMGS.CDSQ_ARTICULOS.FieldByName(AUX1).ASSTRING) ='')) AND
         (NOT ( DMGS.CDSQ_ARTICULOS.FieldByName(AUX1).FieldKIND IN  [fkCalculated,fkInternalCalc]))
      then
      BEGIN
         IF (DMGS.CDSQ_ARTICULOS.FieldByName(AUX1).DataType IN [FTDATE,ftTimeStamp]) AND
         ( POS(':',UPPERCASE(AUX1)) = 0)
         THEN
         begin
            auxfecha :=DMGS.CDSQ_ARTICULOS.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_ARTICULOS.FieldByName(AUX1).ASSTRING+''') ' // VER 3.0 %
            else
               aux := 'char('+AUX1 +') = ('''+ TRIM(DMGS.CDSQ_ARTICULOS.FieldByName(AUX1).ASSTRING)+''') '; // VER 3.0 %
         end;                           // LIKE
      END;
      end;
      i:= i+1;
    END;
  DMGS.BUSCARDBGRID(DBGRID1,DMGS.CDSQ_ARTICULOS,DMGS.RARTICULOS,DMGS.VARTICULOS,ARORDEN.SORDEN,ORDENARTICULOS,' ','CDSQ_ARTICULOS',AUX);
{  i:= 0;
  aux := '';
  while i < dbgrid1.FieldCount do
  begin
    AUX1:=dbgrid1.Fields[i].Name;
    if (NOT dbgrid1.Fields [i].ISNULL) AND
       (NOT (TRIM(DBGRID1.Fields [I].AsString) = '')) then
      if aux <> '' then
        aux := aux + ' AND ' + RIGHTSTR(AUX1,LENGTH(AUX1)-LENGTH('CDSQ_ARTICULOS'))  +' Like ('''+ dbgrid1.Fields[i].AsString+'%'') '
      else
        aux := RIGHTSTR(AUX1,LENGTH(AUX1)-LENGTH('CDSQ_ARTICULOS')) +' like ('''+ dbgrid1.Fields[i].AsString+'%'') ';
    i:= i+1;
  end;
  dmgs.cdsq_articulos.close;
  DMGS.RARTICULOS.BUSCANDO:=false;
  if aux <> '' then
  begin

     IF TRIM(ARORDEN.SORDEN)<> '' THEN
        aux := aux + ARORDEN.SORDEN
     ELSE
        AUX := AUX + ordenarticulos;

     with dmgs.cdsq_articulos do
     begin
       dmgs.VARTICULOS.ID := ' where '+ aux;
       dmgs.VARTICULOS.TIPO := '2';
       dmgs.VARTICULOS.ORDEN := '';
       open;
     end
  end;
  }
end;


PROCEDURE TARTICULOS.COMPROBARIMAGEN;
BEGIN

END;

procedure TARTICULOS.dbimage1DblClick(Sender: TObject);
var
//  jpeg:tjpegimage;
  corriente:TmemoryStream;
  mybmp:tbitmap;
  EscalaX,EscalaY,Escala : single;
  Rectangulo : TRect;
begin
 IF (dmgs.cdsq_articulos.State IN [DSEDIT,DSINSERT])
 THEN
 BEGIN

  if OpenPictureDialog1.Execute then
  begin
     image5.Picture := nil;
     dbimage1.Picture := nil;
     image6.Picture := nil;
     image5.Picture.LoadFromFile(openpicturedialog1.FileName);
  end
  else
     exit;
  dmgs.cdsq_articulosimagen.Clear;//porque sino pone una foto encima de otra
  EscalaX := 1.0;
  EscalaY := 1.0;
  if dbimage1.Width <  image5.Picture.Width then
    EscalaX := dbimage1.Width /  image5.Picture.Width ;

  if dbimage1.Height  <  image5.Picture.Height  then
    EscalaX := dbimage1.Height  /  image5.Picture.Height ;

  if EscalaY < EscalaX then Escala := EscalaY else Escala:= EscalaX;

  with Rectangulo do
  begin
    Right := Trunc(image5.Picture.Width * Escala);
    Bottom := Trunc(image5.Picture.Height * Escala);
    left:=0;
    top:=0;
  end;

  with image6.Picture.Bitmap do
  begin
     width := Rectangulo.Right;
     Height := Rectangulo.Bottom;
     Canvas.StretchDraw(Rectangulo,image5.Picture.Graphic)
  end;
  corriente := tmemorystream.Create;
  image6.Picture.Bitmap.SaveToStream(corriente);
  dmgs.cdsq_articulosimagen.loadfromStream(corriente);
  CORRIENTE.Free;
END;
end;

{PROCEDURE TARTICULOS.COMPROBARCOLORES;
VAR AUX:STRING;
BEGIN
     if ((not (DMGS.CDSQ_ARTICULOSID_COLOR.IsNull)) AND (TRIM(DMGS.CDSQ_ARTICULOSID_COLOR.ASSTRING)<>'')) then
     begin
        if (TRIM(LABEL12.CAPTION) <> '') then
           begin
           if not (TRIM(LABEL12.CAPTION) = trim(DMGS.CDSQ_ARTICULOSID_COLOR.asstring))
           then
             begin
               DMGS.CDSQ_COLORESAUX.close;
               DMGS.CRABGRID  :=trim(DMGS.CDSQ_ARTICULOSID_COLOR.asstring);
               DMGS.CRABGRTIPO :='2';
               DMGS.CDSQ_COLORESAUX.OPEN;
             end;
           end
           else
             begin
               DMGS.CDSQ_COLORESAUX.close;
               DMGS.CRABGRID  :=trim(DMGS.CDSQ_ARTICULOSID_COLOR.asstring);
               DMGS.CRABGRTIPO :='2';
               DMGS.CDSQ_COLORESAUX.OPEN;
             end;
    end
    else
    begin
       DMGS.CDSQ_COLORESAUX.close;
       LABEL12.CAPTION := '';
    end;

    IF DMGS.CDSQ_COLORESAUX.Active THEN
    BEGIN
      LABEL12.CAPTION := DMGS.CDSQ_COLORESAUXID_COLOR.ASSTRING;
      label1.Caption := DMGS.CDSQ_COLORESAUXDESCRIPCION.ASSTRING;
    END ;
    DMGS.CDSQ_COLORESAUX.close;
END;
PROCEDURE TARTICULOS.COMPROBARFAMILIA;
BEGIN
     if ((not(dmgs.cdsq_articulosprofundidad.isnull)) and
     (not (DMGS.CDSQ_ARTICULOSCOD_FAMILIA.IsNull)) AND (TRIM(DMGS.CDSQ_ARTICULOSCOD_FAMILIA.ASSTRING)<>'')) then
     begin
        if (TRIM(LABEL13.CAPTION) <> '') then
           begin
           if not (TRIM(LABEL13.CAPTION) = trim(DMGS.CDSQ_ARTICULOSCOD_FAMILIA.asstring))
           then
             begin
               DMGS.CDSQ_FAMILIASAUX.close;
               DMGS.VFAMILIASAUX.ID  :=trim(DMGS.CDSQ_ARTICULOSCOD_FAMILIA.asstring);
               DMGS.VFAMILIASAUX.TIPO :='2';
               DMGS.VFAMILIASAUX.ID1 := DMGS.CDSQ_ARTICULOSPROFUNDIDAD.AsString;
               dmgs.vfamiliasaux.ORDEN := Oordenfamilias;
               DMGS.CDSQ_FAMILIASAUX.OPEN;
             end;
           end
           else
             begin
               DMGS.CDSQ_FAMILIASAUX.close;
               DMGS.VFAMILIASAUX.ID  :=trim(DMGS.CDSQ_ARTICULOSCOD_FAMILIA.asstring);
               DMGS.VFAMILIASAUX.TIPO :='2';
               DMGS.VFAMILIASAUX.ID1 := DMGS.CDSQ_ARTICULOSPROFUNDIDAD.AsString;
               dmgs.vfamiliasaux.ORDEN := Oordenfamilias;
               DMGS.CDSQ_FAMILIASAUX.OPEN;
             end;
    end
    else
    begin
       DMGS.CDSQ_FAMILIASAUX.close;
       LABEL13.CAPTION := '';
       LABEL5.Caption := '';
    end;

    IF DMGS.CDSQ_FAMILIASAUX.Active THEN
    BEGIN
      LABEL13.CAPTION := DMGS.CDSQ_FAMILIASAUXCOD_FAMILIA.ASSTRING;
      LABEL5.Caption := DMGS.CDSQ_FAMILIASAUXDESCRIPCION.ASSTRING;
    END ;
    DMGS.CDSQ_FAMILIASAUX.close;
END;
}


procedure TARTICULOS.DBGrid1DblClick(Sender: TObject);
var aux:string;
begin
    aux :='';
  IF (DMGS.CDSQ_ARTICULOS.State IN [DSEDIT,DSINSERT]) THEN
    begin
      if UPPERCASE(TRIM(dbgrid1.SelectedField.FieldName)) ='COD_FAMILIA' then
      begin

        DLGFAMILIASAUX:=tDLGFAMILIASAUX.create(nil);
        DLGFAMILIASAUX.CerrarDataset := false;
        DLGFAMILIASAUX.Showmodal;
        aux := dlgfamiliasAUX.codigo;
        IF AUX <> '' THEN
        BEGIN
            F1ENTRA:= TRUE;
            DBGRID1.SelectedField.AsString  :=DLGFAMILIASAUX.codigo ;
            dbgrid1.SelectedIndex  := dbgrid1.SelectedIndex  + 1;
            DMGS.CDSQ_ARTICULOSPROFUNDIDAD.Value := DMGS.CDSQ_FAMILIASAUXPROFUNDIDAD.VALUE;
            DMGS.CDSQ_ARTICULOSMOSTRARIMAGEN.asinteger := DMGS.CDSQ_FAMILIASAUXAMOSTRARIMAGEN.ASINTEGER;
            DMGS.cdsq_articulosmostrardescripcion.AsInteger := DMGS.CDSQ_FAMILIASAUXAMOSTRARDESCRIPCION.ASINTEGER;
        END;
        DLGFAMILIASAUX.Free;
        DLGFAMILIASAUX := nil;
{        DMGS.CDSQ_FAMILIAS.Close;
        DLGFAMILIAS := TDLGFAMILIAS.Create(NIL);
        if DLGFAMILIAS.Showmodal=mrok then
        begin
            F1ENTRA:= TRUE;
            DBGRID1.SelectedField.AsString  :=DLGFAMILIASAUX.codigo ;
            dbgrid1.SelectedIndex  := dbgrid1.SelectedIndex  + 1;
            DMGS.CDSQ_ARTICULOSPROFUNDIDAD.Value := DMGS.CDSQ_FAMILIASAUXPROFUNDIDAD.VALUE;
            DMGS.CDSQ_ARTICULOSMOSTRARIMAGEN.asinteger := DMGS.CDSQ_FAMILIASAUXAMOSTRARIMAGEN.ASINTEGER;
            DMGS.cdsq_articulosmostrardescripcion.AsInteger := DMGS.CDSQ_FAMILIASAUXAMOSTRARDESCRIPCION.ASINTEGER;
        end;
        DLGFAMILIASAUX.Free;
        DLGFAMILIASAUX := nil;
}     end;

    if UPPERCASE(TRIM(dbgrid1.SelectedField.FieldName)) ='ID_COLOR' then
       color;

  END;
 end;

procedure TARTICULOS.ACANTIDADExecute(Sender: TObject);
begin
  IF DMGS.CDSQ_ARTICULOS.ACTIVE
  AND (TRIM(DMGS.CDSQ_ARTICULOSID_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_ARTICULOSID_ARTICULO.AsString+''' AND ID_EMPRESA='+FMENU.ID_EMPRESA ;
       OPEN;
     END;
     IF DMGS.CDSQ_ALMACENAUX.RecordCount > 0 THEN
        CANTIDAD.Showmodal;
     CANTIDAD.Free;
     CANTIDAD := nil;
end;

procedure TARTICULOS.DBEdit2DblClick(Sender: TObject);
begin
   color;
end;
procedure tarticulos.color ;
begin
        DMGS.CDSQ_COLORESaux.Close;
        FDLGCOLORESaux := tFdlgCOLORESaux.Create(nil);
        if FDLGCOLORESaux.Showmodal=mrok then
        begin
            dmgs.cdsq_articulosid_color.AsString:=FDLGCOLORESaux.COLOR;
            Perform(WM_NextDLGCtl, 0, 0);
        end;
        FDLGCOLORESAUX.Free;
        FDLGCOLORESAUX := nil;
end;

procedure TARTICULOS.DBEdit2KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if key = 112 then
     color;
end;
procedure tarticulos.calcular ;
var pvp:double;
    dentro:boolean;
begin
 dentro := true;
 if (dmgs.cdsq_articulos.State in [dsedit,dsinsert])
 and (entra <> sale )
 then
 begin
     IF NOT DMGS.RARTICULOS.BUSCANDO THEN
      BEGIN
// *******************>> PRECIO VENTA
            IF (ENTRAPVP)
            and dentro
            THEN
            BEGIN
                IF DMGS.CDSQ_ARTICULOSPRECIO_VENTA.ascurrency <> 0 THEN
                BEGIN
                  DMGS.CDSQ_ARTICULOSPVPCAT.ascurrency := 0;
                  DMGS.CDSQ_ARTICULOSPVPprov.ascurrency := 0;
                  DMGS.CDSQ_ARTICULOSDESCUENTO.asfloat := 0;
                  IF DMGS.CDSQ_ARTICULOSPRECIO_COSTE.ascurrency <> 0 THEN
                  BEGIN
                    PVP := ROUNDTO((DMGS.CDSQ_ARTICULOSPRECIO_VENTA.ASFLOAT/(1+DMGS.CDSQ_ARTICULOSTRANS.VALUE/100)),DMGS.DECIMALES);
                    dmgs.cdsq_articulosbeneficio.asfloat  := roundto((((PVP/(1+dmgs.cdsq_articulosiva.asfloat/100)) / (dmgs.cdsq_articulosprecio_coste.ascurrency))-1)*100,DMGS.DECIMALEStotal);
                  END;
                  DMGS.CDSQ_ARTICULOSPVP2.AsFloat :=DMGS.CDSQ_ARTICULOSPRECIO_VENTA.ascurrency;
                END;
                dentro := false;
            END;
// <<******************* PRECIO VENTA
// *******************>> PRECIO PVP2
            IF (ENTRAPVP2)
            and dentro
            THEN
            BEGIN
                dentro := false;
            END;
// <<******************* PRECIO PVP2
// *******************>> PVP CATALOGO
            IF (DMGS.CDSQ_ARTICULOSPVPCAT.asfloat <> 0)
            and dentro THEN
            BEGIN
              PVP:= DMGS.CDSQ_ARTICULOSPVPCAT.ascurrency ;//* (1+DMGS.CDSQ_ARTICULOSTRANS.VALUE/100);
              IF (DMGS.CDSQ_ARTICULOSDESCUENTO.AsFloat <> 0 ) THEN
                 PVP := ROUNDTO(PVP * (1 - DMGS.CDSQ_ARTICULOSDESCUENTO.asfloat /100),DMGS.DECIMALES);

              DMGS.CDSQ_ARTICULOSPRECIO_VENTA.ascurrency := ROUNDTO(PVP * ((DMGS.CDSQ_ARTICULOSIVA.asfloat /100)+1),DMGS.DECIMALES);

              IF (DMGS.CDSQ_ARTICULOSPRECIO_COSTE.ascurrency <> 0) THEN                                                                                                                //-2
              BEGIN
                 DMGS.CDSQ_ARTICULOSBENEFICIO.asfloat := ROUNDTO((ROUNDTO((DMGS.CDSQ_ARTICULOSPVPCAT.ascurrency/DMGS.CDSQ_ARTICULOSPRECIO_COSTE.ascurrency),DMGS.DECIMALES)-1)*100,DMGS.DECIMALEStotal);
                 DMGS.CDSQ_ARTICULOSPVP2.ascurrency := ROUNDTO(PVP + (dmgs.cdsq_articulosprecio_coste.AsFloat*(DMGS.CDSQ_ARTICULOSIVA.asfloat /100)),DMGS.DECIMALES);
              END;

              dentro := false;

            END;
// <<******************* PVP CATALOGO
// *******************>> PVR PROVEEDOR
            IF (DMGS.CDSQ_ARTICULOSPVPPROV.Asfloat <> 0)
            and dentro THEN
            BEGIN

              PVP:= DMGS.CDSQ_ARTICULOSPVPPROV.ascurrency ;//* (1+DMGS.CDSQ_ARTICULOSTRANS.VALUE/100);

              IF (DMGS.CDSQ_ARTICULOSDESCUENTO.AsFloat <> 0) and
              (not entrabf) then
              begin
                 dmgs.cdsq_articulosprecio_coste.AsFloat := pvp *( 1- (dmgs.cdsq_articulosdescuento.AsFloat/100)) ;
                 dmgs.cdsq_articulosprecio_coste.AsFloat := ROUNDTO(dmgs.cdsq_articulosprecio_coste.AsFloat ,DMGS.DECIMALES);
                 IF DMGS.CDSQ_ARTICULOSPRECIO_COSTE.AsFloat <> 0 THEN
                     dmgs.CDSQ_ARTICULOSBENEFICIO.AsFloat := ROUNDTO((100 * (pvp - dmgs.cdsq_articulosprecio_coste.AsFloat))/dmgs.cdsq_articulosprecio_coste.AsFloat  ,DMGS.DECIMALEStotal)
                 ELSE
                         dmgs.CDSQ_ARTICULOSBENEFICIO.AsFloat := 0;
                 DMGS.CDSQ_ARTICULOSPRECIO_VENTA.ascurrency := ROUNDTO(PVP * ((DMGS.CDSQ_ARTICULOSIVA.asfloat /100)+1),DMGS.DECIMALES);
                 DMGS.CDSQ_ARTICULOSPVP2.ascurrency := ROUNDTO(PVP + (dmgs.cdsq_articulosprecio_coste.AsFloat*(DMGS.CDSQ_ARTICULOSIVA.asfloat /100)),DMGS.DECIMALES);
              end;

              DMGS.CDSQ_ARTICULOSPRECIO_VENTA.ascurrency := ROUNDTO(PVP * ((DMGS.CDSQ_ARTICULOSIVA.asfloat /100)+1),DMGS.DECIMALES);

              IF (DMGS.CDSQ_ARTICULOSDESCUENTO.AsFloat <> 0) and
              (DMGS.CDSQ_ARTICULOSPRECIO_COSTE.AsFloat <> 0) AND
              (entraBF) THEN
              BEGIN
                PVP:=ROUNDTO(pvp * ((DMGS.CDSQ_ARTICULOSBENEFICIO.asfloat /100)+1) * (1+DMGS.CDSQ_ARTICULOSTRANS.VALUE/100),DMGS.DECIMALES);
                DMGS.CDSQ_ARTICULOSPRECIO_VENTA.asfloat := ROUNDTO( PVP * ((DMGS.CDSQ_ARTICULOSIVA.asfloat /100)+1),DMGS.DECIMALES);
                DMGS.CDSQ_ARTICULOSPVP2.ascurrency := ROUNDTO(DMGS.CDSQ_ARTICULOSPVPPROV.ascurrency + (dmgs.cdsq_articulosprecio_coste.AsFloat*(DMGS.CDSQ_ARTICULOSIVA.asfloat /100)),DMGS.DECIMALES);
              END;

              IF DMGS.CDSQ_ARTICULOSDESCUENTO.AsFLOAT = 0 THEN
                 DMGS.CDSQ_ARTICULOSPRECIO_COSTE.AsFLOAT := PVP;

              dentro := false;
          END;
// <<******************* PVR PROVEEDOR
// *******************>> PRECIO COSTE
            IF (DMGS.CDSQ_ARTICULOSPRECIO_COSTE.Asfloat <> 0)
            and dentro
            THEN
            BEGIN
              IF DMGS.CDSQ_ARTICULOSPRECIO_COSTE.ascurrency <> 0 THEN
              BEGIN
                PVP:=ROUNDTO(DMGS.CDSQ_ARTICULOSPRECIO_COSTE.ascurrency * ((DMGS.CDSQ_ARTICULOSBENEFICIO.asfloat /100)+1) * (1+DMGS.CDSQ_ARTICULOSTRANS.VALUE/100),DMGS.DECIMALES);
                PVP := ROUNDTO(PVP * (1 - DMGS.CDSQ_ARTICULOSDESCUENTO.ASFLOAT /100),DMGS.DECIMALES);
                PVP := ROUNDTO( PVP * ((DMGS.CDSQ_ARTICULOSIVA.asfloat /100)+1),DMGS.DECIMALES);
                DMGS.CDSQ_ARTICULOSPRECIO_VENTA.asfloat := PVP;
              END;
              dentro := false;
          END;
// <<******************* PRECIO COSTE









{         IF (DMGS.CDSQ_ARTICULOSPVPCAT.ascurrency <> 0)
         AND (NOT dmgs.PVPFIJO) AND (NOT DMGS.pvpprov)
         THEN
         BEGIN
//            DMGS.CDSQ_ARTICULOSPRECIO_COSTE.VALUE := ROUNDTO(DMGS.CDSQ_ARTICULOSPVPCAT.Value-(DMGS.CDSQ_ARTICULOSPVPCAT.Value*DMGS.CDSQ_ARTICULOSDESCUENTO.Value/100),-4);
            IF DMGS.CDSQ_ARTICULOSPRECIO_COSTE.ascurrency <> 0 THEN
               DMGS.CDSQ_ARTICULOSBENEFICIO.asfloat := ROUNDTO((ROUNDTO((DMGS.CDSQ_ARTICULOSPVPCAT.ascurrency/DMGS.CDSQ_ARTICULOSPRECIO_COSTE.ascurrency),DMGS.DECIMALES)-1)*100,-2);
            PVP:= DMGS.CDSQ_ARTICULOSPVPCAT.ascurrency ;//* (1+DMGS.CDSQ_ARTICULOSTRANS.VALUE/100);
            PVP := ROUNDTO(PVP * (1 - DMGS.CDSQ_ARTICULOSDESCUENTO.asfloat /100),DMGS.DECIMALES);
            DMGS.CDSQ_ARTICULOSPRECIO_VENTA.ascurrency := ROUNDTO(PVP * ((DMGS.CDSQ_ARTICULOSIVA.asfloat /100)+1),DMGS.DECIMALES);
         END
         ELSE
         BEGIN
          if (dmgs.pvpfijo) AND (NOT DMGS.pvpprov) then
          begin
            IF DMGS.CDSQ_ARTICULOSPRECIO_VENTA.ascurrency <> 0 THEN
            BEGIN
              DMGS.CDSQ_ARTICULOSPVPCAT.ascurrency := 0;
              DMGS.CDSQ_ARTICULOSDESCUENTO.asfloat := 0;
              IF DMGS.CDSQ_ARTICULOSPRECIO_COSTE.ascurrency <> 0 THEN
                dmgs.cdsq_articulosbeneficio.asfloat  := roundto((((DMGS.CDSQ_ARTICULOSPRECIO_VENTA.ascurrency/(1+dmgs.cdsq_articulosiva.asfloat/100)) / (dmgs.cdsq_articulosprecio_coste.ascurrency))-1)*100,-2);
            END;
          end
          ELSE
          IF DMGS.pvpprov THEN
          BEGIN
            IF DMGS.CDSQ_ARTICULOSIVA.AsFloat = 0 THEN
               DMGS.CDSQ_ARTICULOSIVA.AsFloat := 16;

            pvp := 0;
            PVP:= DMGS.CDSQ_ARTICULOSPVPPROV.ascurrency ;//* (1+DMGS.CDSQ_ARTICULOSTRANS.VALUE/100);
//            PVP := ROUNDTO(PVP * (1 - DMGS.CDSQ_ARTICULOSDESCUENTO.asfloat /100),DMGS.DECIMALES);

            IF (DMGS.CDSQ_ARTICULOSDESCUENTO.AsFloat <> 0) and
            (pvp <> 0) THEN
            begin
               dmgs.cdsq_articulosprecio_coste.AsFloat := pvp *( 1- (dmgs.cdsq_articulosdescuento.AsFloat/100)) ;
               dmgs.cdsq_articulosprecio_coste.AsFloat := ROUNDTO(dmgs.cdsq_articulosprecio_coste.AsFloat ,DMGS.DECIMALES);
               dmgs.CDSQ_ARTICULOSBENEFICIO.AsFloat := ROUNDTO((100 * (pvp - dmgs.cdsq_articulosprecio_coste.AsFloat))/dmgs.cdsq_articulosprecio_coste.AsFloat  ,DMGS.DECIMALES);
            end;

            DMGS.CDSQ_ARTICULOSPRECIO_VENTA.ascurrency := ROUNDTO(PVP * ((DMGS.CDSQ_ARTICULOSIVA.asfloat /100)+1),DMGS.DECIMALES);

          END
          ELSE
              IF DMGS.CDSQ_ARTICULOSPRECIO_COSTE.ascurrency <> 0 THEN
              BEGIN
                PVP:=ROUNDTO(DMGS.CDSQ_ARTICULOSPRECIO_COSTE.ascurrency * ((DMGS.CDSQ_ARTICULOSBENEFICIO.asfloat /100)+1) * (1+DMGS.CDSQ_ARTICULOSTRANS.VALUE/100),DMGS.DECIMALES);
                PVP := ROUNDTO(PVP * (1 - DMGS.CDSQ_ARTICULOSDESCUENTO.ASFLOAT /100),DMGS.DECIMALES);
                DMGS.CDSQ_ARTICULOSPRECIO_VENTA.asfloat := ROUNDTO( PVP * ((DMGS.CDSQ_ARTICULOSIVA.asfloat /100)+1),DMGS.DECIMALES);
              END
         END;
}
      END;
 end;
end;

procedure TARTICULOS.DBEdit3Exit(Sender: TObject);
begin
  sale := DMGS.CDSQ_ARTICULOSTRANS.AsString;
  calcular;
end;

procedure TARTICULOS.DBEdit10Enter(Sender: TObject);
begin
  DMGS.RARTICULOS.ENDBGRID := FALSE;
  ENTRA := DMGS.CDSQ_ARTICULOSPVPCAT.AsString;
End;

procedure TARTICULOS.DBGrid1Enter(Sender: TObject);
begin
  DMGS.RARTICULOS.ENDBGRID := TRUE;
end;

procedure TARTICULOS.abusquedaExecute(Sender: TObject);
begin
  dbgrid1.DataSource.DataSet.Close;
  DBEDIT11.ReadOnly := FALSE;
  DBEDIT10.ReadOnly := FALSE;
  DMGS.RARTICULOS.BUSCANDO := true;
  WITH DMGS.CDSQ_ARTICULOS  DO
  BEGIN
    CLOSE;
    DMGS.VARTICULOS.ID := '-111117788';
    DMGS.VARTICULOS.ORDEN  := ARORDEN.SORDEN;//' ORDER BY ID_ARTICULO';
    dmgs.VARTICULOS.TIPO := '1';
    DMGS.VARTICULOS.BORRADO := VER;    
    OPEN;
    APPEND;
  END;
  dmgs.cdsq_articulosid_articulo.asstring := '';
  dmgs.cdsq_articuloscod_familia.asstring := '';
  DMGS.CDSQ_ARTICULOSCOD_FAMILIA.FocusControl
end;

procedure TARTICULOS.aordenExecute(Sender: TObject);
begin
  ARORDEN.ShowModal;
end;

procedure TARTICULOS.AEANExecute(Sender: TObject);
begin
  ean := Tean.create(nil);
  WITH DMGS.CDSQ_EAN DO
  BEGIN
     CLOSE;
     DMGS.EABGRID := DMGS.CDSQ_ARTICULOSID_ARTICULO.AsString;
     OPEN;
  END;
  EAN.ShowModal;
  ean.free;
  ean := nil;
  DMGS.CDSQ_EAN.CLOSE;
end;


procedure TARTICULOS.FormResize(Sender: TObject);
begin
{   pdatos.Left := 10 + (ClientWidth - ancho ) div 2 ;
   pderecho.left := 10 + (ClientWidth+pdatos.Width   - ancho ) div 2 ;
   panel1.left :=  10 + (ClientWidth - ancho ) div 2 ;
   panel1.Top := 10 + (ClientWidth+pdatos.height   - ancho ) div 2 ;
   }
end;

procedure TARTICULOS.FormPaint(Sender: TObject);
begin
{   pdatos.Left := 10 + (ClientWidth - ancho ) div 2 ;
   pderecho.left := 10 + (ClientWidth+pdatos.Width   - ancho ) div 2 ;
   panel1.left :=  10 + (ClientWidth - ancho ) div 2 ;
   panel1.Top := 10 + (ClientWidth+pdatos.height   - ancho ) div 2 ;
}
end;


procedure TARTICULOS.DBEdit13DblClick(Sender: TObject);
begin
  proveedor;
end;

procedure tarticulos.proveedor ;
begin
// quitar TARIFAS y poner tarifas_TARIFASaux
{     DLGTARIFASAUX := TDLGTARIFASAUX.Create(NIL);
     if DLGTARIFASAUX.Showmodal=mrok then
     begin
         dbedit13.Text  :=dmgs.cdsq_TARIFASAUXID_PROVEEDOR.ASSTRING ;
         dbedit12.text  :=dmgs.cdsq_TARIFASAUXART_PROVEEDOR.AsString;
         DBEDIT3.SETFOCUS;
     end;
     dLgTARIFASAUX.Free;
     dLgTARIFASAUX := nil;
}
IF (DMGS.CDSQ_ARTICULOS.State IN [DSEDIT,DSINSERT]) THEN
BEGIN
     DLGPROVEEDORAUX := TDLGPROVEEDORAUX.Create(NIL);
     if DLGPROVEEDORAUX.Showmodal=mrok then
     begin
         dbedit13.Text  :=dmgs.cdsq_proveedor_acreedorauxID_PROVEEDOR.ASSTRING ;
        Perform(WM_NextDLGCtl, 0, 0);
     end;
     dLgPROVEEDORAUX.Free;
     dLgPROVEEDORAUX := nil;
END;
end;
procedure tarticulos.TARIFAS ;
begin
// quitar TARIFAS y poner tarifas_TARIFASaux
IF (DMGS.CDSQ_ARTICULOS.State IN [DSEDIT,DSINSERT]) THEN
BEGIN
     DLGTARIFASAUX := TDLGTARIFASAUX.Create(NIL);
     if DLGTARIFASAUX.Showmodal=mrok then
     begin
         dbedit13.Text  :=dmgs.cdsq_TARIFASAUXID_PROVEEDOR.ASSTRING ;
         dbedit12.text  :=dmgs.cdsq_TARIFASAUXART_PROVEEDOR.AsString;
         Perform(WM_NextDLGCtl, 0, 0);
     end;
     dLgTARIFASAUX.Free;
     dLgTARIFASAUX := nil;
END;
end;

procedure TARTICULOS.DBEdit13KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
 IF KEY=112 THEN
   PROVEEDOR;
end;

procedure TARTICULOS.DBEdit11Enter(Sender: TObject);
begin
  DMGS.RARTICULOS.ENDBGRID := FALSE; 
  IF NOT DMGS.RARTICULOS.BUSCANDO THEN
     DBEDIT14.SETFOCUS;
end;

procedure TARTICULOS.DBEdit10Exit(Sender: TObject);
begin
 IF DMGS.RARTICULOS.BUSCANDO
 AND (TRIM(DMGS.CDSQ_ARTICULOSID_ARTICULO.ASSTRING) <> '') THEN
 BEGIN
     pfunciones.Borrar;
     pfunciones.Esta(UPPERCASE(DMGS.CDSQ_ARTICULOSID_ARTICULO.ASSTRING),FALSE,'0','0','X',FMENU.ID_EMPRESA,FMENU.ANYO);
     dmgs.cdsq_ARTICULOSID_ARTICULO.asstring:=pfunciones.ID_ARTICULO;
{     WITH DMGS.CDSQ_ARTICULOEAN DO
     BEGIN
       CLOSE;
       DMGS.AREBGRID  := UPPERCASE(DMGS.CDSQ_ARTICULOSID_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
          dmgs.CDSQ_ARTICULOSID_ARTICULO.asstring:=DMGS.CDSQ_ARTICULOEANID_ARTICULO.ASSTRING;
       DMGS.CDSQ_ARTICULOEAN.CLOSE;
     END;
}
 END;
end;

procedure TARTICULOS.AVERIFICARExecute(Sender: TObject);
VAR AUX,AUX1:STRING;
begin
 IF (TRIM(DMGS.CDSQ_ARTICULOSID_PROVEEDOR.AsString)<> '') AND
    (TRIM(DMGS.CDSQ_ARTICULOSART_PROVEEDOR.ASSTRING) <> '' )
 THEN
 BEGIN
    DMGS.CDSQ_PROCEDURE.Close;
    DMGS.CDSQ_PROCEDURE.CommandTexT := 'SELECT COUNT(*)  FROM ARTICULOS WHERE ID_PROVEEDOR='+DMGS.CDSQ_ARTICULOSID_PROVEEDOR.AsString +' AND ART_PROVEEDOR='''+ DMGS.CDSQ_ARTICULOSART_PROVEEDOR.AsString+''' ';
    DMGS.CDSQ_PROCEDURE.Open;
    IF (DMGS.CDSQ_PROCEDURE.FIELDS[0].Value > 0) THEN
    BEGIN
      // AL CERRAR EL DATASET DE ARTICULOS PERDERIA LOS VALORES
      AUX := DMGS.CDSQ_ARTICULOSID_PROVEEDOR.AsString;
      AUX1 := DMGS.CDSQ_ARTICULOSART_PROVEEDOR.AsString;
      DMGS.RARTICULOS.ESCAPE := FALSE;
      DMGS.CDSQ_ARTICULOS.CancelUpdates;
      DMGS.CDSQ_ARTICULOS.Close;
      DMGS.VARTICULOS.TIPO := '2';
      DMGS.VARTICULOS.ID := ' WHERE ID_PROVEEDOR='+AUX+' AND ART_PROVEEDOR='''+AUX1+''' ';
      DMGS.VARTICULOS.BORRADO := VER;
      DMGS.CDSQ_ARTICULOS.Open;
    END;
    DMGS.CDSQ_PROCEDURE.Close;
 END;
end;

procedure TARTICULOS.DBEdit12DblClick(Sender: TObject);
begin
  TARIFAS;
end;

procedure TARTICULOS.DBEdit12KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
IF KEY=112 THEN
  TARIFAS;
end;

procedure TARTICULOS.ToolButton10Click(Sender: TObject);
begin
  IF dbedit4.Visible THEN
  BEGIN
//    PANEL5.Visible := FALSE;
    DBEDIT4.Visible := FALSE;
    DBEDIT5.Visible := FALSE;
    DBEDIT6.Visible := FALSE;
    DBEDIT7.Visible := FALSE;
    DBEDIT8.Visible := FALSE;
    DBEDIT9.Visible := FALSE;
    dbedit3.visible := false;
    LABEL14.VISIBLE := FALSE;
    LABEL15.VISIBLE := FALSE;
    LABEL16.VISIBLE := FALSE;
    LABEL17.VISIBLE := FALSE;
    LABEL18.VISIBLE := FALSE;
    LABEL19.VISIBLE := FALSE;
    LABEL11.VISIBLE := FALSE;
    LABEL4.VISIBLE := FALSE;
    LABEL5.VISIBLE := FALSE;
    LABEL3.VISIBLE := FALSE;
    LABEL1.VISIBLE := FALSE;
    LABEL35.visible := FALSE;
    DBEDIT18.visible := FALSE;
    LABEL36.visible := FALSE;
    DBEDIT19.visible := FALSE;
    
     // 6 -> BENEFICIO
    // 7 -> PRECIO COSTE
    // 8 -> IVA
//    PANEL5.ENABLED := FALSE;
    DBEDIT4.ENABLED := FALSE;
    DBEDIT5.ENABLED := FALSE;
    DBEDIT6.ENABLED := FALSE;
    DBEDIT7.ENABLED := FALSE;
    DBEDIT8.ENABLED := FALSE;
    DBEDIT9.ENABLED := FALSE;
    dbedit3.ENABLED := false;
    LABEL14.ENABLED := FALSE;
    LABEL15.ENABLED := FALSE;
    LABEL16.ENABLED := FALSE;
    LABEL17.ENABLED := FALSE;
    LABEL18.ENABLED := FALSE;
    LABEL19.ENABLED := FALSE;
    LABEL11.ENABLED := FALSE;
    LABEL4.ENABLED := FALSE;
    LABEL5.ENABLED := FALSE;
    LABEL3.ENABLED := FALSE;
    LABEL1.ENABLED := FALSE;
    LABEL35.Enabled := FALSE;
    DBEDIT18.Enabled := FALSE;
    LABEL36.ENABLED := FALSE;
    DBEDIT19.ENABLED := FALSE;



  END
  ELSE
  BEGIN
//    PANEL5.Visible := TRUE;
    DBEDIT4.Visible := TRUE;
    DBEDIT5.Visible := TRUE;
    DBEDIT6.Visible := TRUE;
    DBEDIT7.Visible := TRUE;
    DBEDIT8.Visible := TRUE;
    DBEDIT9.Visible := TRUE;
    dbedit3.visible := TRUE;
    LABEL14.VISIBLE := TRUE;
    LABEL15.VISIBLE := TRUE;
    LABEL16.VISIBLE := TRUE;
    LABEL17.VISIBLE := TRUE;
    LABEL18.VISIBLE := TRUE;
    LABEL19.VISIBLE := TRUE;
    LABEL11.VISIBLE := TRUE;
    LABEL5.VISIBLE := TRUE;
    LABEL4.VISIBLE := TRUE;
    LABEL3.VISIBLE := TRUE;
    LABEL1.VISIBLE := TRUE;
    LABEL35.visible := true;
    DBEDIT18.visible := true;
    LABEL36.visible := TRUE;
    DBEDIT19.visible := TRUE;



//    PANEL5.ENABLED := TRUE;
    DBEDIT4.ENABLED := TRUE;
    DBEDIT5.ENABLED := TRUE;
    DBEDIT6.ENABLED := TRUE;
    DBEDIT7.ENABLED := TRUE;
    DBEDIT8.ENABLED := TRUE;
    DBEDIT9.ENABLED := TRUE;
    dbedit3.ENABLED := TRUE;
    LABEL14.ENABLED := TRUE;
    LABEL15.ENABLED := TRUE;
    LABEL16.ENABLED := TRUE;
    LABEL17.ENABLED := TRUE;
    LABEL18.ENABLED := TRUE;
    LABEL19.ENABLED := TRUE;
    LABEL11.ENABLED := TRUE;
    LABEL5.ENABLED := TRUE;
    LABEL4.ENABLED := TRUE;
    LABEL3.ENABLED := TRUE;
    LABEL1.ENABLED := TRUE;
    LABEL35.Enabled := TRUE;
    DBEDIT18.Enabled := TRUE;
    LABEL36.ENABLED := TRUE;
    DBEDIT19.ENABLED := TRUE;


  END;

end;



procedure TARTICULOS.SpeedButton3Click(Sender: TObject);
begin
 IF (dmgs.cdsq_articulos.State IN [DSEDIT,DSINSERT]) THEN
     dmgs.cdsq_articulosimagen.Clear;
end;

procedure TARTICULOS.DBEdit17Exit(Sender: TObject);
begin
    IF DMGS.RARTICULOS.BUSCANDO THEN
       BUSCAR
    ELSE
       DMGS.CDSQ_ARTICULOS.post;
end;

procedure TARTICULOS.NoBorrados1Click(Sender: TObject);
begin
   ODOS1.Checked := FALSE;
   NOBORRADOS1.Checked := TRUE;
   if ver <> '0' then
   begin
     ver := '0';
     bconsultasclick(sender);
   end;
end;

procedure TARTICULOS.odos1Click(Sender: TObject);
begin
   ODOS1.Checked := TRUE;
   NOBORRADOS1.Checked := FALSE;
   if ver <> '%' then
   begin
      ver := '%';
      bconsultasclick(sender);
   end;
end;

procedure TARTICULOS.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 TARTICULOS.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_ARTICULOSCOD_FAMILIA' THEN
    IF dmgs.CDSQ_ARTICULOS.IndexFIELDNameS = '' THEN
       dmgs.CDSQ_ARTICULOS.IndexFIELDNameS := 'COD_FAMILIA' // ORDENA ASCENDENTE
    ELSE
       DMGS.CDSQ_ARTICULOS.IndexName := 'COD_FAMILIAINDEX'; // ORDENA DESCENDENTE

 IF AUX = 'CDSQ_ARTICULOSMARCA' THEN
    IF dmgs.CDSQ_ARTICULOS.IndexFIELDNameS = '' THEN
       dmgs.CDSQ_ARTICULOS.IndexFIELDNameS := 'MARCA' // ORDENA ASCENDENTE
    ELSE
       DMGS.CDSQ_ARTICULOS.IndexName := 'MARCAINDEX'; // ORDENA DESCENDENTE

 IF AUX = 'CDSQ_ARTICULOSDESCRIPCION' THEN
    IF dmgs.CDSQ_ARTICULOS.IndexFIELDNameS = '' THEN
       dmgs.CDSQ_ARTICULOS.IndexFIELDNameS := 'DESCRIPCION' // ORDENA ASCENDENTE
    ELSE
       DMGS.CDSQ_ARTICULOS.IndexName := 'DESCRIPCIONINDEX'; // ORDENA DESCENDENTE

 IF AUX = 'CDSQ_ARTICULOSPRECIO_VENTA' THEN
    IF dmgs.CDSQ_ARTICULOS.IndexFIELDNameS = '' THEN
       dmgs.CDSQ_ARTICULOS.IndexFIELDNameS := 'PRECIO_VENTA' // ORDENA ASCENDENTE
    ELSE
       DMGS.CDSQ_ARTICULOS.IndexName := 'PRECIO_VENTAINDEX'; // ORDENA DESCENDENTE

END;

procedure TARTICULOS.ApdDataPacket1StringPacket(Sender: TObject;
  Data: String);
begin
{ IF (cservicios.cdsq_servicios.STATE IN [DSEDIT,DSINSERT])
 AND (((ACTIVECONTROL AS TMYDBEDIT).DataField) = 'ID_ARTICULO') then
 IF CSERVICIOS.CDSQ_SERVICIOSID_SERVICIO.AsString <> '' THEN
     Perform(WM_NextDLGCtl, 0, 0);
}
end;

procedure TARTICULOS.ApdComPort1TriggerAvail(CP: TObject; Count: Word);
VAR
  I:WORD;
  C:CHAR;
  S:STRING;
begin
{ IF (DMGS.CDSQ_ARTICULOS.STATE IN [DSEDIT,DSINSERT]) then
// AND
// (DMGS.CDSQ_ARTICULOS.FileName ='ID_ARTICULO') THEN
// and
 IF ACTIVECONTROL IS TDBEDIT THEN
 if ((ACTIVECONTROL AS TDBEDIT).DataField) = 'ID_ARTICULO' then
 begin
   DMGS.CDSQ_ARTICULOSID_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_ARTICULOSID_ARTICULO.AsString := cadena;
            CADENA := '';
         END
      END
      ELSE
        cadena := cadena + C
     EXCEPT
     END;
   END;
  end;
}
end;



procedure TARTICULOS.DBCheckBox6Click(Sender: TObject);
begin
{ IF (dmgs.cdsq_articulos.State IN [DSEDIT,DSINSERT]) THEN
   if DBCheckBox6.Checked then
   begin
      dmgs.CDSQ_ARTICULOSTRANSPORTES.value := 0;
      dmgs.CDSQ_ARTICULOSfinancieros.value := 0;
      dmgs.CDSQ_ARTICULOSalmacenable.value := 0;
      dmgs.CDSQ_ARTICULOSotroscostes.value := 1;
   end
}
end;

procedure TARTICULOS.DBCheckBox5Click(Sender: TObject);
begin
{
 IF (dmgs.cdsq_articulos.State IN [DSEDIT,DSINSERT]) THEN
   if DBCheckBox5.Checked then
   begin
      dmgs.CDSQ_ARTICULOSTRANSPORTES.value := 0;
      dmgs.CDSQ_ARTICULOSfinancieros.value := 1;
      dmgs.CDSQ_ARTICULOSalmacenable.value := 0;
      dmgs.CDSQ_ARTICULOSotroscostes.value := 0;
   end
}
end;

procedure TARTICULOS.DBCheckBox4Click(Sender: TObject);
begin
{ IF (dmgs.cdsq_articulos.State IN [DSEDIT,DSINSERT]) THEN
   if DBCheckBox4.Checked then
   begin
      dmgs.CDSQ_ARTICULOSTRANSPORTES.value := 1;
      dmgs.CDSQ_ARTICULOSfinancieros.value := 0;
      dmgs.CDSQ_ARTICULOSalmacenable.value := 0;
      dmgs.CDSQ_ARTICULOSotroscostes.value := 0;
   end
}
end;

procedure TARTICULOS.DBCheckBox3Click(Sender: TObject);
begin
{
 IF (dmgs.cdsq_articulos.State IN [DSEDIT,DSINSERT]) THEN
   if DBCheckBox3.Checked then
   begin
      dmgs.CDSQ_ARTICULOSTRANSPORTES.value := 0;
      dmgs.CDSQ_ARTICULOSfinancieros.value := 0;
      dmgs.CDSQ_ARTICULOSalmacenable.value := 1;
      dmgs.CDSQ_ARTICULOSotroscostes.value := 0;
   end
 }
end;

procedure TARTICULOS.ToolButton11Click(Sender: TObject);
var aux:string;
begin
    aux :='';
    dsarticulos.DataSet := nil;
    DLGFAMILIAS:=tDLGFAMILIAS.create(nil);
    DLGFAMILIAS.CerrarDataset := false;
    DLGFAMILIAS.Showmodal;
    aux := dlgfamilias.codigo;
    DLGFAMILIAS.Free;
    DLGFAMILIAS := nil;
//    IF NOT DMGS.CDSQ_FAMILIAS.ACTIVE THEN
    ESTADOBOTONES;// PARA CUANDO SE PULSA CANCELAR
    if aux <> '' then
    begin
      DMGS.CDSQ_ARTICULOS.Close;
      DMGS.VARTICULOS.TIPO := '2';
      DMGS.VARTICULOS.ID := ' WHERE COD_FAMILIA LIKE ('''+AUX+'%'') ';
      DMGS.VARTICULOS.BORRADO := VER;
      DMGS.VARTICULOS.ORDEN := ordenarticulos ;
      DMGS.CDSQ_ARTICULOS.Open;
    end;
    dsarticulos.dataset := DMGS.cdsq_articulos;
end;

procedure TARTICULOS.DBEdit6Enter(Sender: TObject);
begin
  DMGS.RARTICULOS.ENDBGRID := FALSE;
  ENTRA := DMGS.CDSQ_ARTICULOSBENEFICIO.AsString;
  entrabf := true;
end;

procedure TARTICULOS.DBEdit6Exit(Sender: TObject);
begin
  sale := DMGS.CDSQ_ARTICULOSbeneficio.AsString;
  calcular;
  entrabf := false;
end;

procedure TARTICULOS.DBEdit4Enter(Sender: TObject);
begin
  DMGS.RARTICULOS.ENDBGRID := FALSE;
  ENTRA := DMGS.CDSQ_ARTICULOSPVPCAT.AsString;
  entrapvpcat := true;
end;

procedure TARTICULOS.DBEdit18Enter(Sender: TObject);
begin
  DMGS.RARTICULOS.ENDBGRID := FALSE;
  ENTRA := DMGS.CDSQ_ARTICULOSPVPPROV.AsString;
  entrapvpprov := true;
end;

procedure TARTICULOS.DBEdit7Enter(Sender: TObject);
begin
  DMGS.RARTICULOS.ENDBGRID := FALSE;
  ENTRA := DMGS.CDSQ_ARTICULOSDESCUENTO.AsString;
  entradesc := true;
end;

procedure TARTICULOS.DBEdit5Enter(Sender: TObject);
begin
  DMGS.RARTICULOS.ENDBGRID := FALSE;
  ENTRA := DMGS.CDSQ_ARTICULOSPRECIO_COSTE.AsString;
  entrapcoste := true;
end;

procedure TARTICULOS.DBEdit8Enter(Sender: TObject);
begin
  DMGS.RARTICULOS.ENDBGRID := FALSE;
  ENTRA := DMGS.CDSQ_ARTICULOSIVA.AsString;
  entraiva := true;
end;

procedure TARTICULOS.DBEdit9Enter(Sender: TObject);
begin
  DMGS.RARTICULOS.ENDBGRID := FALSE;
  ENTRA := DMGS.CDSQ_ARTICULOSPRECIO_VENTA.AsString;
  entrapvp := true;
end;

procedure TARTICULOS.DBEdit4Exit(Sender: TObject);
begin
  sale := DMGS.CDSQ_ARTICULOSPVPCAT.AsString;
  if (dmgs.CDSQ_ARTICULOSPVPCAT.AsFloat <> 0) then
     dmgs.cdsq_articulospvpprov.AsFloat := 0;
  calcular;
  entrapvpcat := false;
end;

procedure TARTICULOS.DBEdit18Exit(Sender: TObject);
begin
  sale := DMGS.CDSQ_ARTICULOSPVPprov.AsString;
  if (dmgs.CDSQ_ARTICULOSPVPprov.AsFloat <> 0) then
      dmgs.CDSQ_ARTICULOSPVPcat.AsFloat := 0;
  calcular;
  entrapvpprov := false;
end;

procedure TARTICULOS.DBEdit7Exit(Sender: TObject);
begin
  sale := DMGS.CDSQ_ARTICULOSdescuento.AsString;
  calcular;
  entradesc := false;
end;

procedure TARTICULOS.DBEdit5Exit(Sender: TObject);
begin
  sale := DMGS.CDSQ_ARTICULOSPrecio_coste.AsString;
  calcular;
  entrapcoste := false;
end;

procedure TARTICULOS.DBEdit8Exit(Sender: TObject);
begin
  sale := DMGS.CDSQ_ARTICULOSiva.AsString;
  calcular;
  entraiva := false;
end;

procedure TARTICULOS.DBEdit9Exit(Sender: TObject);
begin
  sale := DBEdit9.Text;
  calcular;
  entrapvp := false;
end;

procedure TARTICULOS.DBEdit3Enter(Sender: TObject);
begin
  DMGS.RARTICULOS.ENDBGRID := FALSE;
  ENTRA := DMGS.CDSQ_ARTICULOSTRANS.AsString;
end;

procedure TARTICULOS.DBEdit19Enter(Sender: TObject);
begin
  DMGS.RARTICULOS.ENDBGRID := FALSE;
  ENTRA := DMGS.CDSQ_ARTICULOSPVP2.AsString;
  entrapvp2 := true;
end;

procedure TARTICULOS.DBEdit19Exit(Sender: TObject);
begin
  sale := DBEdit19.Text;
  calcular;
  entrapvp2 := false;
end;

end.

