Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
andre_tonini
Creator II
Creator II

Valor da Expressão - Dados 2 Tabelas

Olá
       Estou precisando montar um relatório que na expressão busque dados de uma tabela e em outro momento preciso pegar de outra tabela.

Exemplo:
TABELA = titulofin
(SUM(IF(ANO_VENC = '2014' AND MES_VENC = 'mai' AND TIPO_EMISS = 'C',VL_LANCAMENTO,0))-
SUM(IF(ANO_VENC = '2014' AND MES_VENC = 'mai' AND TIPO_EMISS = 'D',VL_LANCAMENTO,0)))

TABELA = detalhefin
(SUM(IF(ANO_VENC = '2014' AND MES_VENC = 'mai' AND TIPO_EMISS = 'C',VL_NOMINAL,0))+
SUM(IF(ANO_VENC = '2014' AND MES_VENC = 'mai' AND TIPO_EMISS = 'C',VL_ACRESCIMOS,0))-
SUM(IF(ANO_VENC = '2014' AND MES_VENC = 'mai' AND TIPO_EMISS = 'C',VL_DESCONTOS,0)))

O que precisaria fazer é o seguinte quando o TIP_DOC in (“FIN01” ,“FIN03”) trazer

(SUM(IF(ANO_VENC = '2014' AND MES_VENC = 'mai' AND TIPO_EMISS = 'C',VL_NOMINAL,0))+
SUM(IF(ANO_VENC = '2014' AND MES_VENC = 'mai' AND TIPO_EMISS = 'C',VL_ACRESCIMOS,0))-
SUM(IF(ANO_VENC = '2014' AND MES_VENC = 'mai' AND TIPO_EMISS = 'C',VL_DESCONTOS,0)))

Quando o TIP_DOC <> “FIN01” e “FIN03” respeitar

(SUM(IF(ANO_VENC = '2014' AND MES_VENC = 'mai' AND TIPO_EMISS = 'C',VL_LANCAMENTO,0))-
SUM(IF(ANO_VENC = '2014' AND MES_VENC = 'mai' AND TIPO_EMISS = 'D',VL_LANCAMENTO,0)))


Caso alguem puder me dar uma dica desde já agradeço.


abraço


André

Labels (1)
1 Solution

Accepted Solutions
felipe_dutra
Partner - Creator
Partner - Creator

André,

Como bem foi dito pelo colega Clever Anjos, é melhor usar Análise de Conjunto.

Teste se o código abaixo atende a sua necessidade:

RangeSum(

/* TIP_DOC = FIN01 ou FIN03, ANO_VENC = 2014, MES_VENC = mai e TIPO_EMISS = C */

     SUM(

          {<TIP_DOC = {FIN01, FIN03}, ANO_VENC = {'2014'}, MES_VENC = {'mai'}, TIPO_EMISS = {'C'}>}

          RangeSum(VL_NOMINAL, VL_ACRESCIMOS, -VL_DESCONTOS)

     ),

/* TIP_DOC <> FIN01 e FIN03, ANO_VENC = 2014, MES_VENC = mai e TIPO_EMISS = C */

     SUM(

          {<TIP_DOC -= {FIN01, FIN03}, ANO_VENC = {'2014'}, MES_VENC = {'mai'}, TIPO_EMISS = {'C'}>}

          VL_LANCAMENTO

     ),

/* TIP_DOC <> FIN01 e FIN03, ANO_VENC = 2014, MES_VENC = mai e TIPO_EMISS = D */

     -SUM(

          {<TIP_DOC -= {FIN01, FIN03}, ANO_VENC = {'2014'}, MES_VENC = {'mai'}, TIPO_EMISS = {'D'}>}

          VL_LANCAMENTO

     )

)


Abs,

Felipe

View solution in original post

7 Replies
felipe_dutra
Partner - Creator
Partner - Creator

Supondo que as expressões estejam corretas:

IF(TIP_DOC like 'FIN01' or TIP_DOC like 'FIN03',

  (SUM(IF(ANO_VENC = '2014' AND MES_VENC = 'mai' AND TIPO_EMISS = 'C',VL_NOMINAL,0))+

  SUM(IF(ANO_VENC = '2014' AND MES_VENC = 'mai' AND TIPO_EMISS = 'C',VL_ACRESCIMOS,0))-

  SUM(IF(ANO_VENC = '2014' AND MES_VENC = 'mai' AND TIPO_EMISS = 'C',VL_DESCONTOS,0))),

  (SUM(IF(ANO_VENC = '2014' AND MES_VENC = 'mai' AND TIPO_EMISS = 'C',VL_LANCAMENTO,0))-

  SUM(IF(ANO_VENC = '2014' AND MES_VENC = 'mai' AND TIPO_EMISS = 'D',VL_LANCAMENTO,0)))

)

Abs,

Felipe

andre_tonini
Creator II
Creator II
Author

Felipe, muito obrigado com sua ajuda consegui resolver o meu problema...

um abraço

André

andre_tonini
Creator II
Creator II
Author

Felipe,

          Acho que me precipitei, fui testar melhor e infelizmente não deu certo, mas deixa eu entender a regra que sugeriu na expressão

*Para os lançamentos que o TIP_DOC for igual 'FIN01' e 'FIN03' a expressão fará o cálculo com base:

IF(TIP_DOC like 'FIN01' or TIP_DOC like 'FIN03',

  (SUM(IF(ANO_VENC = '2014' AND MES_VENC = 'mai' AND TIPO_EMISS = 'C',VL_NOMINAL,0))+

  SUM(IF(ANO_VENC = '2014' AND MES_VENC = 'mai' AND TIPO_EMISS = 'C',VL_ACRESCIMOS,0))-

  SUM(IF(ANO_VENC = '2014' AND MES_VENC = 'mai' AND TIPO_EMISS = 'C',VL_DESCONTOS,0))),

*Para os lançamentos que o TIP_DOC for DIFERENTE de 'FIN01' e 'FIN03' a expressão fará o cálculo com base:

  (SUM(IF(ANO_VENC = '2014' AND MES_VENC = 'mai' AND TIPO_EMISS = 'C',VL_LANCAMENTO,0))-

  SUM(IF(ANO_VENC = '2014' AND MES_VENC = 'mai' AND TIPO_EMISS = 'D',VL_LANCAMENTO,0)))

)

É isso?

Um abraço

André

Clever_Anjos
Employee
Employee

Andre,

Prefira usar Set Analysis ao invés de IF em suas expressões, fica mais rápido

SUM(IF(ANO_VENC = '2014' AND MES_VENC = 'mai' AND TIPO_EMISS = 'C',VL_NOMINAL,0)


tornaria-se

SUM({<ANO_VENC = {'2014'},MES_VENC = {'mai'},TIPO_EMISS = {'C'}>}VL_NOMINAL)

andre_tonini
Creator II
Creator II
Author


Clever,

       Obrigado pela dica, realmente utilizo sempre o IF mas vou começar a adotar o Set Analysis fiz um teste e deu pra perceber a difença.

        Abraço

        André

felipe_dutra
Partner - Creator
Partner - Creator

André,

Como bem foi dito pelo colega Clever Anjos, é melhor usar Análise de Conjunto.

Teste se o código abaixo atende a sua necessidade:

RangeSum(

/* TIP_DOC = FIN01 ou FIN03, ANO_VENC = 2014, MES_VENC = mai e TIPO_EMISS = C */

     SUM(

          {<TIP_DOC = {FIN01, FIN03}, ANO_VENC = {'2014'}, MES_VENC = {'mai'}, TIPO_EMISS = {'C'}>}

          RangeSum(VL_NOMINAL, VL_ACRESCIMOS, -VL_DESCONTOS)

     ),

/* TIP_DOC <> FIN01 e FIN03, ANO_VENC = 2014, MES_VENC = mai e TIPO_EMISS = C */

     SUM(

          {<TIP_DOC -= {FIN01, FIN03}, ANO_VENC = {'2014'}, MES_VENC = {'mai'}, TIPO_EMISS = {'C'}>}

          VL_LANCAMENTO

     ),

/* TIP_DOC <> FIN01 e FIN03, ANO_VENC = 2014, MES_VENC = mai e TIPO_EMISS = D */

     -SUM(

          {<TIP_DOC -= {FIN01, FIN03}, ANO_VENC = {'2014'}, MES_VENC = {'mai'}, TIPO_EMISS = {'D'}>}

          VL_LANCAMENTO

     )

)


Abs,

Felipe

andre_tonini
Creator II
Creator II
Author

Felipe,
           Excelente consegui resolver, inclusive estou optando pelo uso na expressão em vez de IF estou usando Set Analysis.

Um abraço,

André Tonini