Duvidas sobre o REPEATING FRAME (veja o anexo)

Dicas e truques sobre Oracle Reports Builder - modo gráfico ou modo caractere, ascii, arquivo .PRT, etc
Responder
inforjo
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 30
Registrado em: Qui, 18 Fev 2010 9:37 am
Localização: FORTALEZA

Estou criando um relatório com os dados em árvore de acordo com o exemplo 1 do anexo.
O que está acontecendo é que está saindo como no exemplo 2 do anexo.
Criei vários frames como no anexo.
E logo abaixo dos frames, criei uma representação das consultas.
Anexos
EXEMPLO OR.png
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Você precisa que sejam criados repeating frames diferentes ?

Normalmente quando se trabalha com árvore, a gente a gente monta toda árvore e deixa os espaços direto na saída.
Veja esse exemplo:
http://glufke.net/oracle/viewtopic.php?t=402

O campo ENAME já sai com as devidas indentações.
Você não pode fazer dessa foram ?
inforjo
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 30
Registrado em: Qui, 18 Fev 2010 9:37 am
Localização: FORTALEZA

O que aconteceu é que na propriedade do "repeating frame" estava com "Elasticidade Vertical" com valor "fixo",
mudei em todos os quadros de repetição para o valor "variável" e deu certo.

Meu problema agora é só consertar a consulta.
Na consulta I1 quero verificar se na I3 tem valor,
se não tiver não traz o registro, parece tão simples, mas estou apanhando que só... :'(

Tentei fazer uma coisa assim (simplifiquei o máximo):

Selecionar tudo


select *
 from  i1, e1 
 where i1.cod  = e1.cod(+)
   and i1.codn1 = e1.codn1(+)
   and i1.cd_ordem = e1.cd_item_ordem(+)
   and (i1.cd_ref is not null or e1.valor is not null)

--verifica se os cd_ref tem item com resultados 

and i1.cd_ref in (select n1.cod
from  n1
where n1.cod = i1.cd_ref
and exists (select 'X'
             from  i2, e2 
             where i2.cod = e2.cod(+)
               and i2.codn2 = e2.codn2(+)
               and i2.cd_ordem = e2.cd_item_ordem(+)
               and i2.cod = n1.cod
               and i2.codn2 = n1.codn2 
               and (i2.cd_ref is not null or e2.valor is not null)
                                                     
               --Verifica o 3o NIVEL
                                                     
                and i2.cd_ref not in (select n2.cod
                                      from   n2
                                      where n2.cod = i2.cd_ref) 
                                       and exists (select 'X'
                                                     from  i3,  e3 
                                                     where i3.cod = e3.cod(+)
                                                       and i3.codn3 = e3.codn3(+)
                                                       and i3.cd_ordem = e3.cd_item_ordem(+)
                                                       --and i3.cod = n2.cod
                                                       --and i3.codn3 = n2.codn 
                                                       and (i3.cd_ref is not null or e3.valor is not null))))

mas não deu certo.
inforjo
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 30
Registrado em: Qui, 18 Fev 2010 9:37 am
Localização: FORTALEZA

Resolvido.
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Ótimo! :-o
Só por curiosidade, como foi que resolveu ?
(E também pra ficar aqui como orientação pra gente no futuro)
inforjo
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 30
Registrado em: Qui, 18 Fev 2010 9:37 am
Localização: FORTALEZA

1º - o problema do repeating frame foi apenas colocar em sua propriedade Elasticidade vertical: Variável

2º - Criei duas consultas uma para verificar o 2º NÍVEL e o outra para verificar o 3º NÍVEL usando o "union all"
não tinha necessidade de colocar a tabela de nível "n3" . E alterei e removi algumas condições (vermelho).

Selecionar tudo

--consulta 1 
select * --campos 
  from i1, e1
 where i1.cd_cod = e1.cd_cod(+)
   and i1.cd_codn1 = e1.cd_codn1(+)
   and i1.cd_ordem = e1.cd_item_ordem(+)
   and nvl2(e1.valor, e1.valor, 1) = nvl2(e1.valor, :valor, 1)
   and (i1.cd_ref is not null or e1.valor is not null)
   and i1.cd_ref in
       (select i2.cd_cod
          from i2, e2
         where i2.cd_cod = e2.cd_cod(+)
           and i2.cd_codn2 = e2.cd_codn2(+)
           and i2.cd_ordem = e2.cd_item_ordem(+)
           and i2.cd_cod = i1.cd_ref
           and nvl2(e2.valor, e2.valor, 1) = nvl2(e2.valor, :p_valor, 1)
           and i2.cd_ref is null
           and i2.valor is not null)

union all

--consulta 2

select *
  from i1, e1
 where i1.cod = e1.cod(+)
   and i1.codn1 = e1.codn1(+)
   and i1.cd_ordem = e1.cd_item_ordem(+)
   and nvl2(e1.valor, e1.valor, 1) = nvl2(e1.valor, :p_valor, 1) --mostra os valores null do campo valor senão de acordo com parametro
   and (i1.cd_ref is not null or e1.valor is not null)
      
      --verifica se os cd_ref tem item com resultados 
      
   and i1.cd_ref in
       (select n1.cod
          from n1
         where n1.cod = i1.cd_ref
           and exists
         (select 'X'
                  from i2, e2
                 where i2.cod = e2.cod(+)
                   and i2.codn2 = e2.codn2(+)
                   and i2.cd_ordem = e2.cd_item_ordem(+)
                   and i2.cod = n1.cod
                   and i2.codn2 = n1.codn2
                   and nvl2(e2.valor, e2.valor, 1) =
                       nvl2(e2.valor, :p_valor, 1)
                   and (i2.cd_ref is not null)
                      
                      --Verifica o 3o NIVEL
                   and exists (select 'X'
                          from i3, e3
                         where i3.cod = e3.cod(+)
                           and i3.codn3 = e3.codn3(+)
                           and i3.cd_ordem = e3.cd_item_ordem(+)
                           and nvl2(e3.valor, e3.valor, 1) =
                               nvl2(e3.valor, :p_valor, 1)
                           and e3.valor is not null
                           and i3.cd_cod = i2.cd_ref)))
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Majestic-12 [Bot] e 9 visitantes