Fórum herdando valores. #292382

19/08/2005

0

Imaginem a seguinte situação:

Tenho um form frmRelatorio, outro frmCadPedido.


No frmRelatorio, no evento AfterPrint, eu faço o relatório receber todos os valores, (Número do Pedido, Cliente etc.. etc..).
No final eu pego o id do pedido (Where idpedido = frmCadPedido.idpedido)
Essa solução funciona legal.


O Problema:

Agora fiz uma pesquisa, de pedidos nessa pesquisa eu gostaria de imprimir também o pedido.
Então meu frmRelatorio está pegando o valor idpedido, do form frmCadPedido.

Eu gostaria de passar esse valor de ambos os form, sem repetir código.

Eu sei que poderia colocar o valor idpedido, em baixo do Tform, mas o form frmRelatorio vai ficar com 2 variaveis iguais, outra também vou precisar disso no frmRelatorio, não gostaria de criar um procedimento com muitos parametros, só precisava herdar o valor dessa variavel de ambos os forms.

alguém tem uma solução boa para resolver isso ?

Obrigado


Lynx

Lynx

Responder

Posts

19/08/2005

Lynx

eu tentei criar um procedimento ImprimirRelatorio(form:Tform;idpedido:integer);


e no outro form fazer

  with TfrmRelatorio.Create(nil) do
    begin
      rlPedido.AfterPrint.ImprimirRelatorio(nomedoform:idpedido);
      rlPedido.Preview;
      free
    end;


Mas não deu certo


Responder

Gostei + 0

19/08/2005

Lynx

beleza acho que assim estou no caminho certo.

No form relatório eu criei a procedure ImprimirRelatorio(Form:TForm;idpedido:Integer)

no form do cadastro ou pesquisa, eu coloco assim


  with TfrmRelatorio.Create(nil) do
    begin
      rlPedido.AfterPrint.ImprimirRelatorio(frmPesquisaouCadastro,idpedido);
      rlPedido.Preview;
      free
    end;


Mas está retornando esse erro
Incompatible types: ´TForm´ and ´Class reference´



Responder

Gostei + 0

19/08/2005

Lynx

Outra coisa, se eu criar uma variavel no frmRelatorio, e nos outros Forms atribuir valor a ela é certo ?


frmrelatorio
varidpedido: Integer;


frmCadPedido e FrmPesqPedido
Nesses forms eu altero o valor da variavel varpedido, do relatório.

É Possivel alterar o valor da variavel em outro form ?
é meio estranho fazer isso...

Alguém pode me dar uma força ?

Valeu


Responder

Gostei + 0

19/08/2005

Rjun

Basta declarar a variável na área de declarações publicas. Mas o correto seria vc criar propriedades em vez de variáveis publicas.


Responder

Gostei + 0

19/08/2005

Lynx

O Problema, que não da certo alterar o valor de uma váriavel em outro form.

Ler funciona, mas alterar o valor não.
Isso é meio gambiarra tb...

Como seria declarar propriedades ?
Na verdade o que eu preciso é passar o valor, da variavel idpedido de qualquer form.


Quando fixo no frmRelatório ,frmcadPedidos.idpedido funciona...
Mas só vai funcionar para esse form.

valeu


Responder

Gostei + 0

20/08/2005

Lynx

no caso no relatório eu coloco fixo assim.

      SQL.Add(´select * from PEDIDOS where IDPEDIDO = :IDPEDIDO´);
      ParamByName(´IDPEDIDO´).AsInteger:= frmCadPedidos.idpedido;
      Open;


Eu fixei o frmCadPedidos, esse valor deveria ser dinamico, no caso.

frmFormQueAbriu.idpedido.

Porque, agora vou passar o idpedido, em vários forms, e não gostaria de repetir código.


Responder

Gostei + 0

20/08/2005

Lynx

:cry: ainda estou com esse problema...
Não tem como pegar a variavel do form que abriu...

Fixando o valor da certo, só para um form.

Não gostaria de fazer gambiarra com variavel pra saber qual form abriu, e colocar vários parametros...

:cry:


Responder

Gostei + 0

20/08/2005

Lynx

Vou tentar explicar da forma mais clara possivel.

Imagine isso
FrmCadPedidos 
var 
 idpedido : Integer; 

FrmPesqPedidos 
var 
 idpedido : Integer 



No cadastro tem um botao para imprimir, quando clica nele abre o FrmRelatorio.

no form relatório tem isso.

with qryRelPedido do 
    begin 
      Close; 
      SQL.Clear; 
      SQL.Add(´select * from PEDIDOS where IDPEDIDO = :IDPEDIDO´); 
      ParamByName(´IDPEDIDO´).AsInteger:= frmCadPedidos.idpedido; 
      Open; 
      lblData.Caption:= ´Data: ´+FieldByname(´DATA´).AsString; 
      lblPedido.Caption:= ´Pedido Nº ´+FieldByname(´CODPEDIDO´).AsString; 
  
     abaixo tem muitas mais linhas... passando para os label do relatório 
 


Então essa situação funciona porque eu coloco fixo [color=red:e61925b042]frmCadPedidos.idpedido[/color:e61925b042] na condicão do relatório.

Se eu mudar para [color=red:e61925b042]frmPesqPedidos.idpedido[/color:e61925b042] vai funcionar a impressao na tela de pesquisa e não vai funcionar na tela de cadastro :lol:

Acho que deu para entender, o que preciso...
Tentei de muitas maneiras mas não deu certo.

Só fazendo gambiarra com váriavel para resolver.

Alguém pode me ajudar, a resolver isso de uma forma mais limpa ?


Muito Obrigado.

Obs:(Fica aqui meu agradecimento ao Marcos Sales, pela força que deu nas m.p)

valeu!


Responder

Gostei + 0

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

Aceitar