unit fcontrolstock;

interface

uses
  FireDAC.Stan.Intf, FireDAC.Stan.Option, FireDAC.Stan.Param, FireDAC.Stan.Error, FireDAC.DatS, FireDAC.Phys.Intf, FireDAC.DApt.Intf, FireDAC.Stan.Async, FireDAC.DApt, FireDAC.Comp.DataSet, FireDAC.Comp.Client, uFireDacHelper,
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, Data.DB,
     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: TFDQuery;
    qstockdetalleide: TIntegerField;
    qstockdetallefecha: TDateField;
    qstockdetallecodigo: TWideStringField;
    qstockdetalledescripcion: TWideStringField;
    qstockdetallestock: TFloatField;
    qstockdetallestock_real: TFloatField;
    gridstocks: TDBGrid;
    qstock: TFDQuery;
    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: TFDQuery;
    btregularizar: TButton;
    DBCheckBox1: TDBCheckBox;
    qaux2: TFDQuery;
    qauxentradas: TFDQuery;
    qauxentradasdetalle: TFDQuery;
    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: TFDQuery;
    dsqfamilias: TDataSource;
    combofamilia: TDBLookupComboBox;
    Label1: TLabel;
    qfamiliasidempresa: TIntegerField;
    qfamiliasid: TIntegerField;
    qfamiliasdescripcion: TWideStringField;
    qfamiliasactivo: TIntegerField;
    qaux: TFDQuery;
    qupdateentradasdetalle: TFDQuery;
    qupdate0entradasdetalle: TFDQuery;
    qdetalle: TFDQuery;
    qentradas2: TFDQuery;
    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 posicin 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 aplicacin 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 estn 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 segn su tipo
    for J := 0 to DBGrid.FieldCount -1 do
      case DBGrid.Fields[J].DataType of
        ftAutoInc, ftBytes, ftInteger, ftSmallint, ftWord: // Auto o Numrico
          WorkSheet.Cells[I +2, J +1] := DBGrid.Fields[J].AsInteger;
        ftBCD, ftFloat, ftCurrency: // Numrico 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 segn su tamao
  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.
