Ir para conteúdo
Fórum Script Brasil
  • 0

Duvida com if dentro do quick report expression


DELPHITOTS

Pergunta

Ola pessoal estou com uma duvida, deve ser bem simples mas estou penando pra resolver......

Estou com Delhpi7 e trabalhando com Quick Report e Firebird.....

Tenho estes campos no relatorio:

tipoestoque ndepecas qtde valor total

i 2 10 11 X

e 1 2 8 Y

No total (que é um qrexpression do quick report) eu preciso que faça o seguinte:

- se o tipoestoque for = i o total recebe (ndepecas*qtde*valor)

- se o tipoestoque for = e o total recebe (ndepecas*qtde)

somente isso, mas não consigo fazer isso, alguém pode me ajudar?

Muito obrigado a todos.

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

Boa noite amigo.

Acredito que possa fazer assim:

procedure TForm1.Button1Click(Sender: TObject);
var
i, e : string;
x, y : integer;
  begin
    if (tipoestoque.Caption = i) then
      begin
        x := (StrtoInt(ndepecas.Caption) * StrtoInt(qtde.Caption) * StrtoInt(valor.Caption));
        total.Caption := InttoStr(x);
      end;
    if (tipoestoque.Caption = e) then
      begin
        y := (StrtoInt(ndepecas.Caption) * StrtoInt(qtde.Caption));
        valor.Caption := InttoStr(y);
      end;
  end;

Abraço!

Link para o comentário
Compartilhar em outros sites

  • 0

ola amigo, mas como fao isso dentro de um campo qrexpression do quick report.... preciso desta condicao dentro do relatorio... vai sair a soma1 se for i ou a soma2 se for e..... este procedimetno é pra fazer um condicional no programa e não no relatorio... ou estou errado?

grato.

Link para o comentário
Compartilhar em outros sites

  • 0

Pessoal consehi fazer somente para uma condicao mas para a outra não tenho ideia como insiro no codigo... deu certo pra uma.. dentro do QrExpr coloco:

SUM(IF(IBQuery1.tipoest='e',(pesobruto*numpecas*qtdemat*valorunitcompcad),0))

ele faz a soma em todas as linhas que o tipoestoeu for = "'e".. mas eu preciso que faço outra conta se a linha fo "i'

como fazer isso? grato.

Link para o comentário
Compartilhar em outros sites

  • 0

então fiz assim mas não da certo

SUM(IF(IBQuery1.tipoest='e',(pesobruto*numpecas*qtdemat*valorunitcompcad),0))

SUM(IF(IBQuery1.tipoest='i',(pesobruto*numpecas*qtdemat),0))

alguém pode me ajudar? qual a sintaxe dentro do expression pra dar certo com dois condicionais?

somente com a primeira linha da certo.....

grato.

Link para o comentário
Compartilhar em outros sites

  • 0
então fiz assim mas não da certo

SUM(IF(IBQuery1.tipoest='e',(pesobruto*numpecas*qtdemat*valorunitcompcad),0))

SUM(IF(IBQuery1.tipoest='i',(pesobruto*numpecas*qtdemat),0))

alguém pode me ajudar? qual a sintaxe dentro do expression pra dar certo com dois condicionais?

use 2 QrExpr e coloque uma expressão em cada uma

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
então fiz assim mas não da certo

SUM(IF(IBQuery1.tipoest='e',(pesobruto*numpecas*qtdemat*valorunitcompcad),0))

SUM(IF(IBQuery1.tipoest='i',(pesobruto*numpecas*qtdemat),0))

DELPHITOTS, sua idéia está correta, apenas a forma de executá-la não.

Vamos avaliar apenas a primeira parte, aquela que você disse que já estava funcionando (post#4):

SUM(IF(IBQuery1.tipoest='e',(pesobruto*numpecas*qtdemat*valorunitcompcad),0))

Observe que a função SUM, fará o somatório dos valores retornados pela função IF, não é mesmo.

Agora olhe para a função IF. O primeiro argumento (IBQuery1.tipoest='e') é a condição a ser avaliada. O segundo argumento (then), você corretamente colocou a cálculo a ser feito quando o resultado desta avaliação é verdadeira. Mas, no terceiro argumento (else), quando a condição é falsa, você instrui ela a retornar o valor zero.

Caso o campo tipoest apenas possa possuir um destes dois valores, não tem erro: no lugar do zero, você faz o cálculo para a opção diferente de "e". Entretanto, se houver a possibilidade de outros valores para o campo, então, o que diria a lógica?

se tipoest = 'e'

então (pesobruto*numpecas*qtdemat*valorunitcompcad)

senão (se tipoest = 'i' então (pesobruto*numpecas*qtdemat) senão (0))

ou seja,

SUM(IF(IBQuery1.tipoest='e', (pesobruto*numpecas*qtdemat*valorunitcompcad), IF(IBQuery1.tipoest='i',(pesobruto*numpecas*qtdemat), 0)))

Experimente isto - deveria funcionar.

Abraços

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...