Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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é
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
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
Felipe, muito obrigado com sua ajuda consegui resolver o meu problema...
um abraço
André
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é
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)
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é
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
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