GARANTIR DESCONTO

Fórum somar variaveis #320243

28/04/2006

0

assim ó
o cadastro de produtos tem grupo desse produto.
ai tem uma promocao na loja : na compra de 2 produtos do grupo 1 voce ganha um desconto X.
cada produto que eu passo no leitor de codigo de barras eu sei o grupo.


exemplo da venda
produtos vendidos.

produto/grupo
1 / 1
2 / 2
3 / 1
4 / 5
6 / 5
7 / 5

como criar as variaveis em tempo de execucao pra que eu tenho a soma dos grupos.

1 = 2
2 = 1
5 = 3


acho que é isso cada produto que for passando no leitor ele verifica o grupo c nao tem ainda a variavel do grupo ele cria c ja tem ele soma.


Mysys

Mysys

Responder

Posts

28/04/2006

Marcio.theis

Você poderia fazer um controle simplis usando StringGrid, quando vai passando o produto pelo leitor, pega o grupo, passa para uma função que verifica se o código do grupo já foi adicionado no StringGrid, caso já tenha sido adicionado somente acrescenta mais um item... uma idéia...


Responder

Gostei + 0

28/04/2006

Mysys

é ... tinha pensado nisso tambem ...

mais eu tinha visto a milhoes de anos atraz algo mais simples acho que era com array ( acho que é assim que escreve ), so que nao achei no forum...

c alguem tiver mais uma opcao ..


um abraco


Responder

Gostei + 0

29/04/2006

Marco Salles

mais eu tinha visto a milhoes de anos atraz algo mais simples acho que era com array ( acho que é assim que escreve ), so que nao achei no forum...


Array ???? [b:4a755385af]Isto não te pertence mais[/b:4a755385af]

Type
TClasseModerna = Class
private
 FTotal:Integer;
    procedure Settotal(const Value: Integer);
public
Constructor Create(Total:Integer);
property Total:Integer Read FTotal Write Settotal;
end;


constructor tClasseModerna.Create(Total: Integer);
begin
 FTotal:=Total
end;


procedure TClasseModerna.Settotal(const Value: Integer);
begin
  FTotal := Total+ Value;
end;


Var
ListaModerna:TStringList;



Procedure Armazenar(var ListaModerna:TstringList;Grupo:String;Total:Integer);
var
i,j:Integer;
MyObj:TObject;
begin
   j:=ListaModerna.IndexOf(Grupo);
   if j >= 0 Then
      TClasseModerna(ListaModerna.Objects[j]).Settotal(total)
   else
     begin
       MyObj:=TClasseModerna.Create(total);
       ListaModerna.AddObject(Grupo,MyObj);
     end;
 end;


[b:4a755385af]Para Usar :[/b:4a755385af]

Armazenar(ListaModerna,SeusDadosDeGroup,SeuDadosDoTotal)


[b:4a755385af]Para acessar os dados[/b:4a755385af]

For i:=0 To ListaModerna.Count-1 do
   Showmessage(inttostr(TClasseModerna(ListaModerna.Objects[i]).FTotal));
 end ;


[b:4a755385af]Não esquecer de destruir[/b:4a755385af]

For i:=0 To ListaModerna.Count-1 do
  TClasseModerna(ListaModerna.Objects[i]).Free;
freeandnil(ListaModerna);
end;


e boa sorte


Responder

Gostei + 0

14/09/2006

Mysys

Testado e aprovado ...

so um detalhe ..

nao to conseguindo fazer isso em formMDI

porque ..

exemplo

Form1 eu digito lá 5 itens

ai abro o form2 mesmo antes de digitar as variaveis do form1 ja ta contando

nao to conseugindo criar a variavel no Private..

  private

      FTotal:Integer;
      procedure Settotal(const Value: Integer);
      Constructor Create(Total:Integer);
      property Total:Integer Read FTotal Write Settotal;
  public

  end;

var
  FRMLoc: TFRMLoc;
  ListaModerna : TStringList;

implementation

uses UDM, UConTit, ULocCxa, UConDep, UConPro, UMen, ULocCopEdi,
  UAguarde, UIniLoc, UVisRes, UPro, UTroUsu, UCadMen, UPagAvu,
  UHisCli, UCadCli, ULanRes, UCapImg, ULocDet, DateUtils ;

{$R *.dfm}


constructor TFRMLoc.Create(Total: Integer);
begin
 FTotal:=Total
end;
procedure TFRMLoc.Settotal(const Value: Integer);
begin
  FTotal := Total+ Value;
end;
Procedure Armazenar(var ListaModerna:TstringList;Grupo:String;Total:Integer);
var
i,j:Integer;
MyObj:TObject;
begin
   j:=ListaModerna.IndexOf(Grupo);
   if j >= 0 Then
      TFRMLoc(ListaModerna.Objects[j]).Settotal(total)
   else
     begin
       MyObj:=TFRMLoc.Create(total);
       ListaModerna.AddObject(Grupo,MyObj);
     end;
 end;



Responder

Gostei + 0

14/09/2006

Marco Salles

não sei se entendi direito.... Mas voce pode tornar este metodo independente do form.. o que é mais correto

coloque numa [b:8118a82f5c]Unit[/b:8118a82f5c]

unit Unit2; interface Type TClasseModerna = Class private FTotal:Integer; procedure Settotal(const Value: Integer); public Constructor Create(Total:Integer); property Total:Integer Read FTotal Write Settotal; end; implementation { TClasseModerna } constructor TClasseModerna.Create(Total: Integer); begin FTotal:=Total end; procedure TClasseModerna.Settotal(const Value: Integer); begin FTotal := FTotal+ Value;[b:8118a82f5c] /////ALTERIE AQUI[/b:8118a82f5c] ********* end; end.


[b:8118a82f5c]e depois em qualquer form[/b:8118a82f5c]


uses Unit2; {$R *.dfm} Var ListaModerna:TStringList; Procedure Armazenar(var ListaModerna:TstringList;Grupo:String;Total:Integer); var i,j:Integer; MyObj:TObject; begin j:=ListaModerna.IndexOf(Grupo); if j >= 0 Then [b:8118a82f5c] //Alterei aqui , para fazer acesso a propriedade Total //e não ao Método SetTotal ... Privativo.... //entendi que era isto o seu problema[/b:8118a82f5c] [b:8118a82f5c]TClasseModerna(ListaModerna.Objects[j]).Total:=Total[/b:8118a82f5c] else begin MyObj:=TClasseModerna.Create(total); ListaModerna.AddObject(Grupo,MyObj); end; end; procedure TForm1.Button1Click(Sender: TObject); begin Armazenar(ListaModerna,edit1.text,strtoint(edit2.text)); end; procedure TForm1.Button2Click(Sender: TObject); var i:integer; begin For i:=0 To ListaModerna.Count-1 do Showmessage(´Grupo ´+ListaModerna.Strings[i]+´ total : ´+ inttostr(TClasseModerna(ListaModerna.Objects[i]).Total)); end; procedure TForm1.FormShow(Sender: TObject); begin listaModerna:=TstringList.Create; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); var i:integer; begin [b:8118a82f5c]//Destruição dos objetos criados....[/b:8118a82f5c] for i:=0 To ListaModerna.Count-1 do TClasseModerna(ListaModerna.Objects[i]).Free; listaModerna.Destroy; end; end.



[b:8118a82f5c]Para acessar os valores em qualque Form , basta declarar a Variavel ListaModerna no campo Public Do form...[/b:8118a82f5c]

espero que desta vez voce não fique tanto tempo sem dar Noticias...

[b:8118a82f5c]Sáb Abr 29, 2006[/b:8118a82f5c] para [b:8118a82f5c]Qui Set 14, 2006[/b:8118a82f5c] ja poderia ter morrido sem saber :cry: :cry: :cry:

Testado e aprovado ...



Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar