[Lazarus-es] Como visualizar las existencia en un grid

Ismael L. Donis Garcia slibre en natio.co.cu
Jue Jun 22 17:01:23 CEST 2017


Llevo varios días tratando de visualizar las existencias en un grid y por más que doy para atrás y para delante no doy pie con bola.

Alguien ha logrado hacer esto utilizando un MenDataset?
Como podría lograrlo?

Aquí les paso un pequeño ejemplo de lo que quiero hacer.

Quiero que al moverme por el grid y llegue a la columna de la cantidad me sume a las existencias la cantidad y cuando salga de la columna me reste la cantidad. El grid es editable, ósea debe permitir agregar datos y cambiarle los valores de la algunas columnas, dentro de ellas la de la cantidad.

unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, memds, FileUtil, Forms, Controls, Graphics, Dialogs,
  DBGrids, StdCtrls, db, Grids;


type

  { TForm1 }

  TForm1 = class(TForm)
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    Edit1: TEdit;
    MemDataset1: TMemDataset;
    procedure DBGrid1SelectEditor(Sender: TObject; Column: TColumn;
      var Editor: TWinControl);
    procedure FormCreate(Sender: TObject);
    procedure MemDataset1BeforeScroll(DataSet: TDataSet);
  private
    { private declarations }
    icol: longint;
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
  DataSource1.DataSet:=MemDataset1;
  DBGrid1.DataSource:=DataSource1;
  MemDataset1.FieldDefs.Add('codigo', ftString, 12);
  MemDataset1.FieldDefs.Add('cod', ftString, 4);
  MemDataset1.FieldDefs.Add('elemusd', ftString, 7);
  MemDataset1.FieldDefs.Add('elemmn', ftString, 7);
 MemDataset1.FieldDefs.Add('cantidad', ftFloat);
 MemDataset1.FieldDefs.Add('saldo2', ftFloat);
 MemDataset1.FieldDefs.Add('saldo1', ftFloat);
 MemDataset1.FieldDefs.Add('exist', ftFloat);
  MemDataset1.Open;
 DBGrid1.Columns.Items[0].Title.Caption := 'Código';
 DBGrid1.Columns.Items[0].Width:=115;
  DBGrid1.Columns.Items[0].ReadOnly:=true;
  DBGrid1.Columns.Items[1].Title.Caption := 'Cod';
  DBGrid1.Columns.Items[1].Title.Alignment:=taCenter;
  DBGrid1.Columns.Items[1].Alignment:=taCenter;
 DBGrid1.Columns.Items[1].Width:=58;
 DBGrid1.Columns.Items[1].ButtonStyle:=cbsEllipsis;
  DBGrid1.Columns.Items[2].Title.Caption := 'Elem CUC';
  DBGrid1.Columns.Items[2].Title.Alignment:=taCenter;
  DBGrid1.Columns.Items[2].Alignment:=taCenter;
 DBGrid1.Columns.Items[2].Width:=72;
 DBGrid1.Columns.Items[2].ButtonStyle:=cbsEllipsis;
  DBGrid1.Columns.Items[3].Title.Caption := 'Elem CUP';
  DBGrid1.Columns.Items[3].Title.Alignment:=taCenter;
  DBGrid1.Columns.Items[3].Alignment:=taCenter;
 DBGrid1.Columns.Items[3].Width:=72;
 DBGrid1.Columns.Items[3].ButtonStyle:=cbsEllipsis;
  DBGrid1.Columns.Items[4].Title.Caption := 'Cantidad';
  DBGrid1.Columns.Items[4].Title.Alignment:=taCenter;
 DBGrid1.Columns.Items[4].Alignment:=taRightJustify;
 DBGrid1.Columns.Items[4].Width:=90;
 DBGrid1.Columns.Items[4].DisplayFormat:='###0.000';
  DBGrid1.Columns.Items[5].Title.Caption := 'Valor CUC';
  DBGrid1.Columns.Items[5].Title.Alignment:=taCenter;
 DBGrid1.Columns.Items[5].Alignment:=taRightJustify;
 DBGrid1.Columns.Items[5].Width:=90;
 DBGrid1.Columns.Items[5].DisplayFormat:='###0.00';
  DBGrid1.Columns.Items[6].Title.Caption := 'Valor CUP';
  DBGrid1.Columns.Items[6].Title.Alignment:=taCenter;
 DBGrid1.Columns.Items[6].Alignment:=taRightJustify;
 DBGrid1.Columns.Items[6].Width:=90;
 DBGrid1.Columns.Items[6].DisplayFormat:='###0.00';
  DBGrid1.Columns.Items[7].Title.Caption := 'Existencia';
  DBGrid1.Columns.Items[7].Title.Alignment:=taCenter;
 DBGrid1.Columns.Items[7].Alignment:=taRightJustify;
 DBGrid1.Columns.Items[7].Width:=85;
 DBGrid1.Columns.Items[7].DisplayFormat:='###0.000';

  MemDataset1.Append;
  MemDataset1.FieldByName('codigo').AsString:='100.100.0001';
  MemDataset1.FieldByName('cod').AsString:='801';
  MemDataset1.FieldByName('elemusd').AsString:='2013';
  MemDataset1.FieldByName('elemmn').AsString:='2014';
  MemDataset1.FieldByName('cantidad').AsFloat:=1.000;
  MemDataset1.FieldByName('saldo1').AsFloat:=12.5;
  MemDataset1.FieldByName('saldo2').AsFloat:=10.3;
  MemDataset1.FieldByName('exist').AsFloat:=4;
  MemDataset1.UpdateRecord;
  MemDataset1.Post;
  MemDataset1.Append;
  MemDataset1.FieldByName('codigo').AsString:='100.100.0002';
  MemDataset1.FieldByName('cod').AsString:='801';
  MemDataset1.FieldByName('elemusd').AsString:='2013';
  MemDataset1.FieldByName('elemmn').AsString:='2014';
  MemDataset1.FieldByName('cantidad').AsFloat:=2.000;
  MemDataset1.FieldByName('saldo1').AsFloat:=18.5;
  MemDataset1.FieldByName('saldo2').AsFloat:=6.3;
  MemDataset1.FieldByName('exist').AsFloat:=8;
  MemDataset1.UpdateRecord;
  MemDataset1.Post;

  icol:=0;
end;

procedure TForm1.MemDataset1BeforeScroll(DataSet: TDataSet);
begin
 if (icol = 4) then begin
  if not (DBGrid1.DataSource.DataSet.State in dsEditModes) then
    DBGrid1.DataSource.DataSet.Edit;
   DBGrid1.DataSource.DataSet.FieldByName('exist').AsFloat:=DBGrid1.DataSource.DataSet.FieldByName('exist').AsFloat - DBGrid1.DataSource.DataSet.FieldByName('cantidad').AsFloat;
  end;
end;

procedure TForm1.DBGrid1SelectEditor(Sender: TObject; Column: TColumn;
  var Editor: TWinControl);
begin
  if (Column.Index = 4) then begin
    if not (DBGrid1.DataSource.DataSet.State in dsEditModes) then
      DBGrid1.DataSource.DataSet.Edit;
    DBGrid1.DataSource.DataSet.FieldByName('exist').AsFloat:=DBGrid1.DataSource.DataSet.FieldByName('exist').AsFloat + DBGrid1.DataSource.DataSet.FieldByName('cantidad').AsFloat;
 end else if (icol = 4) then begin
   if not (DBGrid1.DataSource.DataSet.State in dsEditModes) then
     DBGrid1.DataSource.DataSet.Edit;
    DBGrid1.DataSource.DataSet.FieldByName('exist').AsFloat:=DBGrid1.DataSource.DataSet.FieldByName('exist').AsFloat - DBGrid1.DataSource.DataSet.FieldByName('cantidad').AsFloat;
  end;
  icol := Column.Index;
end;

end.     

Saludos
--
ISMAEL
Devuan User : http://distrowatch.com/table.php?distribution=devuan
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus-es/attachments/20170622/34cba0bf/attachment-0002.html>


Más información sobre la lista de distribución Lazarus-es