unit fcontrolstock;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, Data.DB,
  ZAbstractRODataset, ZAbstractDataset, ZDataset, Vcl.DBCtrls,datos, Vcl.Mask,
  Vcl.Grids, Vcl.DBGrids, Vcl.ComCtrls, frxClass, frxDBSet,  ComObj, Excel2000,
  frxExportPDF, frxExportBaseDialog;

type
  Tcontrolstock = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    DBGrid1: TDBGrid;
    SaveDialog1: TSaveDialog;
    Button3: TButton;
    btAnuevo: TButton;
    btaimprimir: TButton;
    btAguardar: TButton;
    qstockdetalle: TZQuery;
    qstockdetalleide: TIntegerField;
    qstockdetallefecha: TDateField;
    qstockdetallecodigo: TWideStringField;
    qstockdetalledescripcion: TWideStringField;
    qstockdetallestock: TFloatField;
    qstockdetallestock_real: TFloatField;
    gridstocks: TDBGrid;
    qstock: TZQuery;
    dsqstockdetalle: TDataSource;
    dsqstock: TDataSource;
    qstockide: TIntegerField;
    qstockfecha: TDateField;
    qstockregularizado: TIntegerField;
    frxPDFExport1: TfrxPDFExport;
    dbinfstock: TfrxDBDataset;
    infstock: TfrxReport;
    DBEdit1: TDBEdit;
    btAmodificar: TButton;
    btAborrar: TButton;
    btAcancelar: TButton;
    Label5: TLabel;
    qentradasdetalle: TZQuery;
    btregularizar: TButton;
    DBCheckBox1: TDBCheckBox;
    qaux2: TZQuery;
    qauxentradas: TZQuery;
    qauxentradasdetalle: TZQuery;
    qauxentradasid: TIntegerField;
    qauxentradasidempresa: TIntegerField;
    qauxentradasidproveedor: TIntegerField;
    qauxentradasfecha: TDateField;
    qauxentradasdocumento: TWideStringField;
    qauxentradasbase: TFloatField;
    qauxentradastotaliva: TFloatField;
    qauxentradastotalentrada: TFloatField;
    qauxentradasdetalleid: TIntegerField;
    qauxentradasdetalleidempresa: TIntegerField;
    qauxentradasdetalleidentrada: TIntegerField;
    qauxentradasdetalleidproveedor: TIntegerField;
    qauxentradasdetallecodigo: TWideStringField;
    qauxentradasdetalleid_propio: TWideStringField;
    qauxentradasdetalledescripcion: TWideStringField;
    qauxentradasdetallelote: TWideStringField;
    qauxentradasdetallecantidad: TFloatField;
    qauxentradasdetallestock: TFloatField;
    qauxentradasdetalleprecio: TFloatField;
    qauxentradasdetalletipo_iva: TIntegerField;
    qauxentradasdetallebase: TFloatField;
    qauxentradasdetalletotal: TFloatField;
    qstockdetallefamilia: TWideStringField;
    qfamilias: TZReadOnlyQuery;
    dsqfamilias: TDataSource;
    combofamilia: TDBLookupComboBox;
    Label1: TLabel;
    qfamiliasidempresa: TIntegerField;
    qfamiliasid: TIntegerField;
    qfamiliasdescripcion: TWideStringField;
    qfamiliasactivo: TIntegerField;
    qaux: TZQuery;
    qupdateentradasdetalle: TZQuery;
    qupdate0entradasdetalle: TZQuery;
    qdetalle: TZQuery;
    qentradas2: TZQuery;
    qentradas2id: TIntegerField;
    qentradas2idempresa: TIntegerField;
    qentradas2fecha: TDateField;
    chkactivos: TCheckBox;
    qentradasdetalleid: TIntegerField;
    qentradasdetalleidempresa: TIntegerField;
    qentradasdetalleidentrada: TIntegerField;
    qentradasdetalleidproveedor: TIntegerField;
    qentradasdetallecodigo: TWideStringField;
    qentradasdetalleid_propio: TWideStringField;
    qentradasdetalledescripcion: TWideStringField;
    qentradasdetallelote: TWideStringField;
    qentradasdetallecantidad: TFloatField;
    qentradasdetallestock: TFloatField;
    qentradasdetalleprecio: TFloatField;
    qentradasdetalletipo_iva: TIntegerField;
    qentradasdetallebase: TFloatField;
    qentradasdetalletotal: TFloatField;
    qentradasdetallefecha: TDateField;
    qdetalleid: TIntegerField;
    qdetalleidempresa: TIntegerField;
    qdetalleidentrada: TIntegerField;
    qdetalleidproveedor: TIntegerField;
    qdetallecodigo: TWideStringField;
    qdetalleid_propio: TWideStringField;
    qdetalledescripcion: TWideStringField;
    qdetallelote: TWideStringField;
    qdetallecantidad: TFloatField;
    qdetallestock: TFloatField;
    qdetalleprecio: TFloatField;
    qdetalletipo_iva: TIntegerField;
    qdetallebase: TFloatField;
    qdetalletotal: TFloatField;
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure dsqstockStateChange(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure btAnuevoClick(Sender: TObject);
    procedure btAcancelarClick(Sender: TObject);
    procedure btAborrarClick(Sender: TObject);
    procedure btAguardarClick(Sender: TObject);
    procedure dsqstockDataChange(Sender: TObject; Field: TField);
    procedure btaimprimirClick(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure btregularizarClick(Sender: TObject);
    procedure dsqfamiliasDataChange(Sender: TObject; Field: TField);
    procedure combofamiliaClick(Sender: TObject);
    procedure chkactivosClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  procedure ExportaraExcel(FileNameXLS, SheetName: String; DBGrid: TDBGrid; ProgressBarXls: TProgressBar = nil);

  end;

var
  controlstock: Tcontrolstock;

implementation

{$R *.dfm}
procedure Tcontrolstock.ExportaraExcel(FileNameXLS, SheetName: String; DBGrid: TDBGrid; ProgressBarXls: TProgressBar);

const
  xlWBATworksheet = -4167;
var
  Excel, WorkBook, WorkSheet: OleVariant;
  I, J: Integer;
  PBookmark: TBookmark;
begin
  // Guardar la posición en la DB y desactivar que se mueva el registro
  PBookmark := DBGrid.DataSource.DataSet.GetBookmark;
  DBGrid.DataSource.DataSet.DisableControls;
  DBGrid.DataSource.DataSet.First;

  // Comprobar si existe el component TProgressBar

  // Crear instancia de la aplicación Excel
  Excel := CreateOleObject('Excel.Application');

  // Evitar que nos pregunte si deseamos sobreescribir el archivo
  Excel.DisplayAlerts := False;

  // Agregar libro de trabajo
  WorkBook := Excel.Workbooks.Add(xlWBATWorksheet);

  // Tomar una referencia a la hoja creada
  WorkSheet := WorkBook.WorkSheets[1];

  // Se  describe el nombre de la hoja
  WorkSheet.Name := SheetName;

  // Llenamos las celdas
  //    Toma en cuenta que las columnas y filas empiezan en 1, y que en el
  // WorkSheet.Cells[I, J], I es la fila y J es la columna.

  //   Extrae los nombres de los campos del DBGrid y los coloca en el primer registro,
  // excluyendo los campos que están ocultos
  for J := 0 to DBGrid.FieldCount -1 do
    if DBGrid.Fields[J].Visible then
    begin
      // Poner la fuente de letra en Negrita
      WorkSheet.Cells[1, J +1].Font.Bold := True;
      // Centrar la celda
//      WorkSheet.Cells[1, J +1].HorizontalAlignment := xlCenter;
      // Asignamos Valor del titulo del DBrid
      WorkSheet.Cells[1, J +1] := DBGrid.Columns[J].Title.Caption;
    end;

  // Guardar los registros
  for I := 0 to DBGrid.DataSource.DataSet.RecordCount -1 do
  begin
    // Identificamos los campos y lo grabamos según su tipo
    for J := 0 to DBGrid.FieldCount -1 do
      case DBGrid.Fields[J].DataType of
        ftAutoInc, ftBytes, ftInteger, ftSmallint, ftWord: // Auto o Numérico
          WorkSheet.Cells[I +2, J +1] := DBGrid.Fields[J].AsInteger;
        ftBCD, ftFloat, ftCurrency: // Numérico con decimales
          WorkSheet.Cells[I +2, J +1] := DBGrid.Fields[J].AsFloat;
        ftDateTime, ftDate, ftTime: // Fecha y Hora
          WorkSheet.Cells[I +2, J +1] := DBGrid.Fields[J].AsDateTime;
        else // Todo lo demas caracteres
          WorkSheet.Cells[I +2, J +1] := DBGrid.Fields[J].AsString;
      end;

    // Saltamos de registro
    DBGrid.DataSource.DataSet.Next;

    // Comprobar si existe el component TProgressBar
    if (ProgressBarXls <> nil) then
      ProgressBarXls.Position := ProgressBarXls.Position +1;
  end;

  // Comprobar si existe el component TProgressBar
  if (ProgressBarXls <> nil) then
    ProgressBarXls.Visible := False;

  // Redimensionar todas las celdas para que esten según su tamaño
  WorkSheet.Cells.Columns.AutoFit;

  // Guardar el archivo
  WorkBook.SaveAs(FileNameXLS);

  // Cierra el archivo
  WorkBook.Close(FileNameXLS);

  // Salir de Excel
  Excel.Quit;

  // posicionar el registro donde estaba
  DBGrid.DataSource.DataSet.GotoBookmark(PBookmark);
  DBGrid.DataSource.DataSet.FreeBookmark(PBookmark);
  DBGrid.DataSource.DataSet.EnableControls;
end;

procedure Tcontrolstock.btAborrarClick(Sender: TObject);
begin
   qstock.delete;
end;

procedure Tcontrolstock.btAcancelarClick(Sender: TObject);
begin
    qstock.Cancel;
end;

procedure Tcontrolstock.btAguardarClick(Sender: TObject);
var fecha,tanyo,tmes,tdia:string;
    anyo,mes,dia:word;
begin
     qaux.Close;
     qaux.SQL.Clear;
     qaux.SQL.Add('update articulosf af set stock=(select sum(stock) as stock from entradas_detalle where id_propio=af.codigo and idempresa=af.idempresa group by id_propio )');
     qaux.ExecSQL;

    if qstock.State in [dsinsert] then
    begin
      qstockregularizado.Value:=0;
      qstock.Post;
      decodedate(qstockfecha.AsDateTime,anyo,mes,dia);
      fecha:=''''+floattostr(anyo)+'/'+floattostr(mes)+'/'+floattostr(dia)+'''';
      qaux.Close;
      qaux.SQL.Clear;
      qaux.SQL.Add('insert into control_stock_detalle select a.idempresa,'+fecha+',codigo,a.descripcion,sum(stock),0,f.descripcion from articulosf a, familias f where a.idempresa=f.idempresa and f.id=a.familia and a.activo=1 and inventariable=1 group by codigo');
      qaux.execsql;
      qstockdetalle.Close;
      qstockdetalle.Open;
    end;
    if qstock.State in [dsedit] then
    begin
      qstock.Post;
      decodedate(qstockfecha.AsDateTime,anyo,mes,dia);
      fecha:=''''+floattostr(anyo)+'/'+floattostr(mes)+'/'+floattostr(dia)+'''';
      qstockdetalle.Close;
      qstockdetalle.Open;
    end;
    qstock.Refresh;
end;

procedure Tcontrolstock.btaimprimirClick(Sender: TObject);
var fecha:string;
    dia,mes,anyo:word;
begin
   if (qstock.RecordCount>0) and (qstock.State in [dsbrowse]) then
   begin
  {    decodedate(qstockfecha.AsDateTime,anyo,mes,dia);
      fecha:=''''+floattostr(anyo)+'/'+floattostr(mes)+'/'+floattostr(dia)+'''';
      qstockdetalle.Close;
      qstockdetalle.SQL.Clear;
      qstockdetalle.SQL.Add('select * from control_stock_detalle where ide='+qstockide.asstring+' and fecha='+fecha+' order by  fecha desc,familia,descripcion');
      qstockdetalle.open;}

   end;
    infstock.DataSet:=dbinfstock;
    infstock.Report.Clear;
    infstock.LoadFromFile('c:\agrigest\informes\listadodestocks.fr3');
    fecha:=qstockfecha.AsString;
    infstock.Variables.Variables['FECHA']:=QUOTEDSTR(fecha);
    infstock.ShowReport();

end;

procedure Tcontrolstock.btAnuevoClick(Sender: TObject);
begin
    qstock.Append;
    qstockide.Value:=dm.tempresaid.AsInteger;
    qstockfecha.Value:=date();
    dbedit1.SetFocus;
end;

procedure Tcontrolstock.btregularizarClick(Sender: TObject);
var cantidad,resto:real;
    fecha,empresa,codigo:string;
    dia,mes,anyo:word;

begin
    try
       while not qstockdetalle.eof do
       begin //while  1
         //decodedate(qstockdetallefecha.AsDateTime,anyo,mes,dia);
         fecha:='2100-01-01';//''''+floattostr(anyo)+'-'+floattostr(mes)+'-'+floattostr(dia)+'''';
         resto:=qstockdetallestock_real.AsFloat;
         empresa:=qstockdetalleide.asstring;
         qentradasdetalle.Close;
         qentradasdetalle.Prepare;
         qentradasdetalle.ParamByName('EMPRESA').AsInteger:=qstockdetalleide.asinteger;
         qentradasdetalle.ParamByName('ARTICULO').Asstring:=qstockdetallecodigo.asstring;
         qentradasdetalle.ParamByName('FECHA').AsSTRING:=fecha;
         qentradasdetalle.Open;
{         qaux.Close;
         qaux.sql.Clear;
         qaux.sql.Add('select * from entradas_detalle where id_propio='+''''+qstockdetallecodigo.asstring+''''+' and idempresa='+qstockdetalleide.asstring+' order by id desc');
         qaux.open;
         if qaux.RecordCount>0 then     // if 1}
         if qentradasdetalle.RecordCount>0 then //if 1
         begin      //1
           decodedate(qstockdetallefecha.AsDateTime,anyo,mes,dia);
           fecha:=''''+floattostr(anyo)+'-'+floattostr(mes)+'-'+floattostr(dia)+'''';
           qupdateentradasdetalle.close;
           qupdateentradasdetalle.Prepare;
           qupdateentradasdetalle.ParamByName('EMPRESA').AsInteger:=qstockdetalleide.asinteger;
           qupdateentradasdetalle.ParamByName('ARTICULO').Asstring:=qstockdetallecodigo.asstring;
           qupdateentradasdetalle.ParamByName('FECHA').Asdate:=qstockdetallefecha.AsDateTime;
           qupdateentradasdetalle.ExecSQL;
           qupdate0entradasdetalle.close;
           qupdate0entradasdetalle.Prepare;
           qupdate0entradasdetalle.ParamByName('EMPRESA').AsInteger:=qstockdetalleide.asinteger;
           qupdate0entradasdetalle.ParamByName('ARTICULO').Asstring:=qstockdetallecodigo.asstring;
           qupdate0entradasdetalle.ParamByName('FECHA').Asdate:=qstockdetallefecha.AsDateTime;
           qupdate0entradasdetalle.ExecSQL;
           qentradasdetalle.Close;
           qentradasdetalle.Prepare;
           qentradasdetalle.ParamByName('EMPRESA').AsInteger:=qstockdetalleide.asinteger;
           qentradasdetalle.ParamByName('ARTICULO').Asstring:=qstockdetallecodigo.asstring;
           qentradasdetalle.ParamByName('FECHA').Asdate:=qstockdetallefecha.AsDateTime;
           qentradasdetalle.Open;
         end;        //1
         if resto<0 then
         begin       //2
           qdetalle.Close;
           qdetalle.Prepare;
           qdetalle.ParamByName('EMPRESA').AsInteger:=qentradasdetalleidempresa.AsInteger;
           qdetalle.ParamByName('ID').AsInteger:=qentradasdetalleid.AsInteger;
           qdetalle.Open;
           qdetalle.edit;
           qdetallestock.Value:=resto;
           qdetalle.post;
           resto:=0;
         end;        //2
         if resto>0 then
         begin     //3
           while resto>0 do   // while 2
             begin
               qdetalle.Close;
               qdetalle.Prepare;
               qdetalle.ParamByName('EMPRESA').AsInteger:=qentradasdetalleidempresa.AsInteger;
               qdetalle.ParamByName('ID').AsInteger:=qentradasdetalleid.AsInteger;
               qdetalle.Open;
               if qdetallecantidad.AsFloat>=resto then
               begin  //4
                  if not qentradasdetalle.Eof then
                  begin  //5
                    qdetalle.edit;
                    qdetallestock.Value:=resto;
                    qdetalle.post;
                    resto:=0;
                  end else  //5
                  begin    //6
                    qdetalle.edit;
                    qdetallestock.Value:=qdetallestock.asfloat+resto;
                    qdetalle.post;
                    resto:=0;
                  end;     //6
               end;        //4
               if qdetallecantidad.asfloat<=resto then
               begin       //7
                  if not qentradasdetalle.Eof then
                  begin    //8
                    qdetalle.edit;
                    resto:=resto-qdetallecantidad.asfloat;
                    qdetallestock.Value:=qdetallecantidad.asfloat;
                    qdetalle.post;
                  end else    //8
                  begin       //9
                    qdetalle.edit;
                    qdetallestock.Value:=resto;
                    qdetalle.post;
                    resto:=0;
                  end;         //9
                end;           //7
                qentradasdetalle.Next;
             end;   //   while 2
           end;//3
       if qentradasdetalle.RecordCount=0 then
       begin       //10
          decodedate(qstockfecha.AsDateTime,anyo,mes,dia);
          fecha:=''''+floattostr(anyo)+'/'+floattostr(mes)+'/'+floattostr(dia)+'''';

          qaux2.close;
          qaux2.SQL.Clear;
          qaux2.SQL.Add('select * from entradas where idproveedor=0 and fecha='+fecha+' and idempresa='+empresa);
          qaux2.Open;
          if qaux2.RecordCount=0 then
          begin   //11
            qauxentradas.Open;
            qauxentradas.Append;
            qauxentradasidempresa.Value:=dm.tempresaid.asinteger;
            qauxentradasidproveedor.Value:=0;
            qauxentradasfecha.Value:=qstockfecha.AsDateTime;
            qauxentradasdocumento.Value:='INV.'+qstockfecha.AsSTRING;
            qauxentradas.Post;
          end else  //11
               begin    //12
                   qauxentradas.Open;
                   qauxentradas.Locate('documento','INV.'+fecha,[locaseinsensitive]);
               end;    //12
            qauxentradasdetalle.Open;
            qauxentradasdetalle.Append;
            qauxentradasdetalleidempresa.Value:=qauxentradasidempresa.AsInteger;
            qauxentradasdetalleidentrada.Value:=qauxentradasid.AsInteger;
            qauxentradasdetalleidproveedor.Value:=qauxentradasidproveedor.AsInteger;
            qauxentradasdetallecodigo.Value:=qstockdetallecodigo.asstring;
            qauxentradasdetalleid_propio.Value:=qstockdetallecodigo.asstring;
            qauxentradasdetalledescripcion.Value:=qstockdetalledescripcion.asstring;
            qauxentradasdetallecantidad.Value:=qstockdetallestock_real.asfloat;
            qauxentradasdetallestock.Value:=qstockdetallestock_real.asfloat;
            qauxentradasdetalleprecio.Value:=0;
            qauxentradasdetalletipo_iva.Value:=0;
            qauxentradasdetalle.Post;
         end;       //10
         qstockdetalle.next;

         end; //while 1
         if qstockdetalle.Eof then
         begin      //13
           qstock.Edit;
           qstockregularizado.Value:=1;
           qstock.post;
           qaux.SQL.Clear;
           qaux.SQL.Add('update articulosf af set stock=(select sum(stock) as stock from entradas_detalle where id_propio=af.codigo and idempresa=af.idempresa group by id_propio )');
           qaux.ExecSQL;
           qaux.SQL.Clear;
           qaux.SQL.Add('update articulosf af set preciocoste=(SELECT SUM((SELECT PRECIO*STOCK FROM entradas_detalle WHERE ID=ed.id))/sum(stock) FROM `entradas_detalle` ed  where id_propio=af.codigo) where idempresa=af.idempresa and codigo=af.codigo');
           qaux.ExecSQL;
           qaux.SQL.Clear;
           qaux.SQL.Add('select * from articulosf where stock_minimo>stock and avisar_stock=1');
           qaux.Open;
         end;        //13
    except
        showmessage('error en el codigo '+qstockdetallecodigo.AsString);
    end;


end;

procedure Tcontrolstock.Button3Click(Sender: TObject);
var  archivo:string;
begin
    savedialog1.FileName:='INVENTARIO.xls';
    savedialog1.Execute();
    archivo:=savedialog1.FileName;
    try
    Exportaraexcel(archivo,'STOCK',gridstocks);
    finally
      showmessage('Los datos han sido exportados correctamente');
    end;

end;

procedure Tcontrolstock.chkactivosClick(Sender: TObject);
var grupo,activos:string;
begin
   if (qstock.RecordCount>0) and (qstock.State in [dsbrowse]) then
   begin
      if combofamilia.KeyValue=null then grupo:='%' else grupo:=combofamilia.KeyValue;
      if chkactivos.Checked then activos:='1' else activos:='%';

      qstockdetalle.Close;
      qstockdetalle.Prepare;
      qstockdetalle.ParamByName('EMPRESA').AsInteger:=qstockide.AsInteger;
      qstockdetalle.ParamByName('FECHA').AsDate:=qstockfecha.AsDateTime;
      qstockdetalle.ParamByName('GRUPO').Asstring:=grupo;
      qstockdetalle.ParamByName('ACTIVO').Asstring:=activos;
      qstockdetalle.open;
      if qstockregularizado.asinteger=0 then btregularizar.Enabled:=true else btregularizar.Enabled:=false;
   end;
   if (qstock.RecordCount=0) then
   begin
     qstockdetalle.close;
   end;

end;

procedure Tcontrolstock.combofamiliaClick(Sender: TObject);
begin
    combofamilia.KeyValue:=null;
end;

procedure Tcontrolstock.dsqfamiliasDataChange(Sender: TObject; Field: TField);
var grupo:string;
begin
      if combofamilia.KeyValue=null then grupo:='%' else grupo:=combofamilia.KeyValue;
      qstockdetalle.Close;
      qstockdetalle.Prepare;
      qstockdetalle.ParamByName('EMPRESA').AsInteger:=qstockide.AsInteger;
      qstockdetalle.ParamByName('FECHA').AsDate:=qstockfecha.AsDateTime;
      qstockdetalle.ParamByName('GRUPO').Asstring:=grupo;
      qstockdetalle.open;
end;

procedure Tcontrolstock.dsqstockDataChange(Sender: TObject; Field: TField);
var grupo,activos:string;
begin
   if (qstock.RecordCount>0) and (qstock.State in [dsbrowse]) then
   begin
      if combofamilia.KeyValue=null then grupo:='%' else grupo:=combofamilia.KeyValue;
      if chkactivos.Checked then activos:='1' else activos:='%';

      qstockdetalle.Close;
      qstockdetalle.Prepare;
      qstockdetalle.ParamByName('EMPRESA').AsInteger:=qstockide.AsInteger;
      qstockdetalle.ParamByName('FECHA').AsDate:=qstockfecha.AsDateTime;
      qstockdetalle.ParamByName('GRUPO').Asstring:=grupo;
      qstockdetalle.ParamByName('ACTIVO').Asstring:=activos;
      qstockdetalle.open;
      if qstockregularizado.asinteger=0 then btregularizar.Enabled:=true else btregularizar.Enabled:=false;
   end;
   if (qstock.RecordCount=0) then
   begin
     qstockdetalle.close;
   end;

end;

procedure Tcontrolstock.dsqstockStateChange(Sender: TObject);
begin
    if qstock.State in [dsedit,dsinsert] then
    begin
        btanuevo.Enabled:=false;
        btamodificar.Enabled:=false;
        btaborrar.Enabled:=false;
        btregularizar.Enabled:=false;
        btacancelar.Enabled:=true;
        btaguardar.Enabled:=true;
    end else
    begin
        btanuevo.Enabled:=true;
        btamodificar.Enabled:=true;
        btaborrar.Enabled:=true;
        btacancelar.Enabled:=false;
        btaguardar.Enabled:=false;
    end;

end;


procedure Tcontrolstock.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
    if (activecontrol is tdbgrid) then
    begin
        if Key = 13 then  Key :=9;
    end;

end;

procedure Tcontrolstock.FormKeyPress(Sender: TObject; var Key: Char);
var formatos:tformatsettings;
punto:string;
begin
    GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT, formatos);
    punto:=formatos.DecimalSeparator;
    if punto=',' then
    begin
        key:=upcase(key);
        if (key='.') and (activecontrol is tdbgrid) then
        begin
            key:=',';
        end;
    end;
    if (activecontrol is tdbgrid) then
    begin
        if Key = #13 then Key :=#9;
    end;

    if (key=#13) then
    begin
        Perform(WM_NextDLGCtl,0,0);
        key:=#0;
    end;
end;


procedure Tcontrolstock.FormShow(Sender: TObject);
begin
    dm.tempresa.open;
    qfamilias.Open;
    qstock.open;
end;

end.
