Alguém entende de Report Builder?

773 views
Skip to first unread message

Teófilo Barbosa

unread,
Nov 8, 2010, 8:18:25 AM11/8/10
to dug...@googlegroups.com
Estou utilizando Report Builder com o Delphi 2009 e preciso de algumas orientações, mas antes de explanar todo o problema gostaria de saber se alguém tem conhecimento sobre. Principalmente o que se refere às ligações de MasterData e ligações semelhantes.

--
Atenciosamente,

Teófilo Barbosa

Samuel

unread,
Nov 8, 2010, 8:31:05 AM11/8/10
to dug...@googlegroups.com
Bom dia Teófilo,

Eu uso o RB 12 com o Delphi 2007.

Qual sua dúvida ?

[ ]s


Samuel Natali Junior
NatSam Consultoria Ltda
Fone: (11) 4688-1000
Cel: (11) 8698-6948
www.natsam.com.br
www.hipercusto.com.br
Conheça o Hipercusto e veja como ele pode ajudar sua indústria.
Faça um download e avalie o produto gratuitamente durante 20 dias.


www.tr7.com.br o seu site de buscas na web

--
Você recebeu esta mensagem porque está inscrito no "DUG-RS -
Delphi Users Group Rio Grande do Sul" em Grupos do Google.
Acesse o nosso BLOG em http://www.dug-rs.org e contribua com a comunidade Delphi do Rio Grande do Sul
Para postar neste grupo, envie um e-mail para dug...@googlegroups.com
Para cancelar a sua inscrição neste grupo, envie um e-mail para
dug-rs-un...@googlegroups.com
Para ver mais opções, visite este grupo em
http://groups.google.com.br/group/dug-rs?hl=pt-BR
Twitter: @dugrs

Teófilo Barbosa

unread,
Nov 8, 2010, 8:40:27 AM11/8/10
to dug...@googlegroups.com
São várias dúvidas que eu tenho, então eu vou ir mandando por partes:
 
Eu usava Rave, no rave a opção KeepTogether, quando marcada, faz com que o exame não quebre e fique um pedaço em uma página e o restante na próxima. Como faço isso no RB? Quando eu uso o keeptogether não acontece nada, ele continua deixando metade numa página e o restante na outra.

--
Atenciosamente,

Teófilo Barbosa

Samuel

unread,
Nov 8, 2010, 8:59:51 AM11/8/10
to dug...@googlegroups.com
No RB você faz exatamente da mesma maneira.

Porém, se o que você quer "deixar junto" está na área de detalhe de detalhe do relatório, que não tem a propriedade keeptogether então você tem inserir um componente região no detalhe.

[ ]s


Samuel Natali Junior
NatSam Consultoria Ltda
Fone: (11) 4688-1000
Cel: (11) 8698-6948
www.natsam.com.br
www.hipercusto.com.br
Conheça o Hipercusto e veja como ele pode ajudar sua indústria.
Faça um download e avalie o produto gratuitamente durante 20 dias.


www.tr7.com.br o seu site de buscas na web


Teófilo Barbosa

unread,
Nov 9, 2010, 10:05:39 AM11/9/10
to dug...@googlegroups.com
Obrigado, Samuel, funcionou corretamente. Meu problema seguinte é com relação aos índices das tabelas quando preciso linkar uma em master na outra, vou mandar em outro post as sqls e o que está sendo linkado para ver se clareia bem o que quero dizer. Caso saiba algum erro comum nesse tipo de situação talvez você também possa adiantar. 

Samuel

unread,
Nov 9, 2010, 10:24:17 AM11/9/10
to dug...@googlegroups.com
No ReportBuilder você não precisa se preocupar (diretamente) com os índices pois ele usará na ligação os campos que você selecionar (estando ou não nos índices).

A pesquisa ficará a cargo do seu banco de dados que deverá preferencialmente possuir algum índice com os campos selecionados na "junção" das tabelas caso contrário isso sobrecarregará seu banco de dados, já que ele terá que fazer um "scan" em todos os registros até encontrar o desejado.

Isso ocorre em qualquer gerador de relatórios que acesse o banco de dados usando comandos SQL.

No entanto, se você acessar as tabelas usando os componentes tppDBPipeline em vez de usar o designer, você deverá selecionar os índices corretos nos tTable ou tQuery.

[ ]s


Samuel Natali Junior
NatSam Consultoria Ltda
Fone: (11) 4688-1000
Cel: (11) 8698-6948
www.natsam.com.br
www.hipercusto.com.br
Conheça o Hipercusto e veja como ele pode ajudar sua indústria.
Faça um download e avalie o produto gratuitamente durante 20 dias.


www.tr7.com.br o seu site de buscas na web


Teófilo Barbosa

unread,
Nov 9, 2010, 10:55:13 AM11/9/10
to dug...@googlegroups.com
Uso DBPipeline mesmo porque me ensinaram assim, mas cada campo que adiciono no MasterFieldLinks me traz um resultado diferente como se não tivesse achado o registro, estranho é que são campos existentes e com valores, não entendi muito bem a lógica disso.
Estou tentando mais alguns links aqui pra ver se entendo a lógica, se não conseguir vou postar certinho o que estou fazendo.

Samuel

unread,
Nov 9, 2010, 11:05:24 AM11/9/10
to dug...@googlegroups.com
Se você usa vários DBPipelines então os "filhos" devem ter um índice para que a pesquisa possa ser realizada.

Depois veja a aba "dados" do Report Builder pois com ela é possível definir as tabelas que deverão ser acessadas e criar as ligações visualmente. Veja um exemplo:



Lembre-se que quando você usa o designer é muito importante que as tabelas possuam índices pelos campos de ligação, caso contrário o processamento do relatório poderá ser demorado assim como poderá ocorrer sobrecarga no servidor de banco de dados.

[ ]s


Samuel Natali Junior
NatSam Consultoria Ltda
Fone: (11) 4688-1000
Cel: (11) 8698-6948
www.natsam.com.br
www.hipercusto.com.br
Conheça o Hipercusto e veja como ele pode ajudar sua indústria.
Faça um download e avalie o produto gratuitamente durante 20 dias.


www.tr7.com.br o seu site de buscas na web

Teófilo Barbosa

unread,
Nov 10, 2010, 9:28:16 AM11/10/10
to dug...@googlegroups.com
Mais uma vez obrigado, Samuel, pelas explicações, agora vou deixar aqui o problema em seu todo:
 
Bom, vou tentar explicar da melhor forma possível agora já que tentei bastante aqui e não consegui chegar na solução.
Essa é minha query "cabeçalho" do relatório. Basicamente a Amostra é única, porém na tabela filha podemos ter vários médicos distintos ou convênios que o paciente está usando.  Logo, eu acesso essa tabela única e já subdivido tudo na mesma query:
 
 
Select distinct A.REGISTRO
     , A.PRONTUARIO
     , P.Nome
     , S.descricao as DESTINO
     , O.descricao as ORIGEM
     , A.DATA_FATURA
     , A.DATA_ENTRADA
     , A.DATA_ENTREGA
     , A.HORA_ENTRADA
     , A.COLETADOR
     , C.NOME as Coletador_Nome
     , E.CRM
     , M.NOME as MEDICO
     , E.CONVENIO
     , A.LEITOSETOR
     , A.FLAG_COLETAEXTERNA
From AMOSTRAS A
Left Join pacientes P on P.prontuario = A.prontuario
Left Join coletadores C on C.codigo = A.coletador
Left join Postos O on O.codigo = A.origem
Left join Postos S on S.codigo = A.destino
Left join AMOSTRAS_EXAMES E on E.REGISTRO = A.REGISTRO
--Left join CONVENIO V on V.SIGLA = E.CONVENIO
Left join MEDICOS M on M.CRM = E.CRM
Where A.REGISTRO = :registro
 
 O resultado quando eu lanço o parâmetro com o código de algum registro seria assim:
 

('CH1033', 10010181, 'BENTA MAYER MENGUE', 'CACHOEIRINHA', 'CACHOEIRINHA', NULL, '17-MAR-2010', NULL, NULL, 20, 'Nilza Maria da Silva Alves', 15323, 'ADAO ROGERIO L. MACHADO', 'UNIMED', NULL, 'N');
 
('CH1033', 10010181, 'BENTA MAYER MENGUE', 'CACHOEIRINHA', 'CACHOEIRINHA', NULL, '17-MAR-2010', NULL, NULL, 20, 'Nilza Maria da Silva Alves', 22983, 'VANIA FRACALOSSI', 'PARTICULAR', NULL, 'N');
 
('CH1033', 10010181, 'BENTA MAYER MENGUE', 'CACHOEIRINHA', 'CACHOEIRINHA', NULL, '17-MAR-2010', NULL, NULL, 20, 'Nilza Maria da Silva Alves', 22983, 'VANIA FRACALOSSI', 'UNIMED', NULL, 'N');
 
 Aí está ok, o cabeçalho está funcionando.
A seguir preciso trazer as solitações de exames desse registro (CH1033), no entanto os exames são subdividos por categorias. Então eu consulto as categorias que tem dentro desse registro:
 
Select distinct A.Registro, A.convenio, A.CRM, E.Categoria
From AMOSTRAS_EXAMES A
Left Join EXAMES E on E.Codigo = A.EXAME
Where A.Registro = :Registro
Order by A.CRM, A.CONVENIO, E.Categoria
 
 
 Resultado para o caso CH1033:
 

('CH1033', 'UNIMED', 15323, 1);
('CH1033', 'UNIMED', 15323, 8);
('CH1033', 'PARTICULAR', 22983, 2);
('CH1033', 'UNIMED', 22983, 1);
('CH1033', 'UNIMED', 22983, 3);
('CH1033', 'UNIMED', 22983, 5);
 
Como dá pra observar, dentro desse registro Tem como convênio a UNIMED e PARTICULAR. Dois médicos (15323 e 22983) e as categorias 1 e 8 para o primeiro médico, 2 para o segundo médico com o convênio particular e 1, 3 e 5 para o mesmo segundo médico porém com convênio unimed.
 
DBPipeline ficou com o Master da primeira tabela (cabecalho), e masterfield como (Registro -> Registro, CRM -> CRM, Convenio -> Convenio). (funcionou ok)
 
Agora vem a última etapa que são os resultados dos exames para essas categorias:
 
Select distinct A.Registro, A.convenio, A.CRM, E.Categoria, A.EXAME, A.MATERIAL, E.Prioridade
From AMOSTRAS_EXAMES A
Left Join EXAMES E on E.Codigo = A.EXAME
Where A.Registro = :Registro
Order by A.CRM, A.CONVENIO, E.Categoria, E.Prioridade
 
('CH1033', 'UNIMED', 15323, 1, 'TP', 1, 6);
('CH1033', 'UNIMED', 15323, 8, 'T3', 1, 114);
('CH1033', 'UNIMED', 15323, 8, 'T4', 1, 116);
('CH1033', 'PARTICULAR', 22983, 2, 'GLI', 1, 1);
('CH1033', 'PARTICULAR', 22983, 2, 'HBG', 1, 7);
('CH1033', 'PARTICULAR', 22983, 2, 'TRI', 1, 11);
('CH1033', 'PARTICULAR', 22983, 2, 'COL', 1, 12);
('CH1033', 'PARTICULAR', 22983, 2, 'HDL', 1, 13);
('CH1033', 'UNIMED', 22983, 1, 'HEM', 1, 1);
('CH1033', 'UNIMED', 22983, 3, 'HIV1', 1, 13);
('CH1033', 'UNIMED', 22983, 5, 'EQU', 2, 14);
 
Esse é o resultado, todos os exames solicitados já separados pelas categorias e médicos/convênios.
 
DBPipeline tem como MasterData a tabela anterior, Categoria, e como MasterField (CRM ->CRM, Convenio -> Convenio, Categoria -> Categoria)
Funcionou ok, o nome dos exames ficou abaixo da categoria, médico e convênio correto.
 
Meu problema vem nas tabelas onde são gravados os resultados, são várias... mas como estou remodelando o relatório peguei para começar a tabela de "diversos", nela vão exames variados de mesma formatação.
 
Diversos:
 
Select D.REGISTRO
         , E.METODO
         , E.DESCRICAO as  EXAME_NOME
         , E.REFERENCIA
         , E.PRIORIDADE
         , D.EXAME
         , D.MATERIAL
         , D.NORMAL
         , D.NORMAIS
         , D.POSITIVO
         , D.REAGENTE
         , D.INDICE
         , D.RESULTADO
         , D.OBSERVACAO
         , M.DESCRICAO as MATERIAL_NOME
         , E.UNIDADE
         , E.OBSERVACAO as NOTA
         , E.Categoria
         , A.Convenio
         , A.CRM
from RESULTADO_DIVERSOS D
Left Join Material M on M.CODIGO = D.MATERIAL
Left Join EXAMES E on E.CODIGO = D.EXAME
Left Join Amostras_Exames A on D.Registro = A.Registro and A.Exame = D.Exame and A.Material = D.Material
Where D.REGISTRO = :REGISTRO
Order by A.CRM, A.CONVENIO, E.Categoria, E.Prioridade
 
 
 
Aqui aparecem os resultados de todos os exames, aí vem o meu problema que não consigo ligar corretamente o DBPipeline nos masterfields. Não aparece o resultado do exame abaixo do exame correto. Em uma das tentativas até apareceu corretamente o resultado abaixo do exame, no entanto só retornaram 2 resultados de todos que deveriam ter aparecido.
 
Bom, sei que parece meio desespero porque postei todas as SQLs e toda a lógica do que estou fazendo, mas estou tentando resolver esse assunto tem algum tempo e não consigo desenvolver essa parte final. Isso é uma remodelagem da saída dos relatórios, por isso estou refazendo. Claro que provavelmente vão encontrar algum jeito diferente que eu fiz a minha sql, foi como eu desenvolvi na hora e acredito que até há jeito melhor de fazer, mas enfim...
 
Agradeço se alguém puder colaborar com qualquer sugestão!
 
Abraços.
moz-screenshot-6.png

Samuel

unread,
Nov 10, 2010, 9:46:12 AM11/10/10
to dug...@googlegroups.com
Teófilo,

Você pode colocar um exemplo dos registros que estão sendo retornados para o SQL diversos ? (pegue os dados do mesmo "registro" que você usou nos outros exemplos).

No caso dessa query, como você está definindo o relatório para impressão dos seus dados ?

Você está usando "grupo" ou "sub-report" ? Usar sub-report talvez seja a maneira mais fácil de montar esse relatório que você precisa.

Fico no aguardo.

[ ]s


Samuel Natali Junior
NatSam Consultoria Ltda
Fone: (11) 4688-1000
Skype: Hipercusto

www.natsam.com.br
www.hipercusto.com.br
Conheça o Hipercusto e veja como ele pode ajudar sua indústria.
Faça um download e avalie o produto gratuitamente durante 20 dias.

www.tr7.com.br o seu site de buscas na web

Teófilo Barbosa

unread,
Nov 10, 2010, 10:10:54 AM11/10/10
to dug...@googlegroups.com
Exemplo do resultado de diversos.
SQL Diversos:
 
Select D.REGISTRO
 
Resultado:
 
('CH1033', 'T3', 1, NULL, 'T3 - TRIIODOTIRONINA', NULL, 114, 2, NULL, NULL, NULL, NULL, NULL, NULL, 'SANGUE', 'ng/dL', NULL, 8, 'UNIMED', 15323);
('CH1033', 'T4', 1, NULL, 'T4 - TIROXINA TOTAL', NULL, 116, NULL, NULL, NULL, NULL, NULL, '45', NULL, 'SANGUE', 'µg/dL', NULL, 8, 'UNIMED', 15323);
('CH1033', 'GLI', 1, NULL, 'GLICOSE', NULL, 1, 174, NULL, NULL, NULL, NULL, NULL, NULL, 'SANGUE', 'mg/dL', NULL, 2, 'PARTICULAR', 22983);
('CH1033', 'HBG', 1, NULL, 'HEMOGLOBINA GLICADA', NULL, 7, 10.6, NULL, NULL, NULL, NULL, NULL, NULL, 'SANGUE', '%', NULL, 2, 'PARTICULAR', 22983);
('CH1033', 'TRI', 1, NULL, 'TRIGLICERÍDIOS', NULL, 11, 546, NULL, NULL, NULL, NULL, NULL, NULL, 'SANGUE', 'mg/dL', NULL, 2, 'PARTICULAR', 22983);
('CH1033', 'COL', 1, NULL, 'COLESTEROL TOTAL', NULL, 12, 230, NULL, NULL, NULL, NULL, NULL, NULL, 'SANGUE', 'mg/dL', NULL, 2, 'PARTICULAR', 22983);
('CH1033', 'HDL', 1, NULL, 'COLESTEROL HDL', NULL, 13, 47, NULL, NULL, NULL, NULL, NULL, NULL, 'SANGUE', 'mg/dL', NULL, 2, 'PARTICULAR', 22983);
 
A chave é Registro, Exame, Material (os três primeiros campos).
 
Eu uso apenas subreports.
No começo eu uso o mainform do ReportBuilder como cabeçalho. No detail eu coloco um sub de Categorias, dentro desse coloco o sub dos exames, dentro do sub dos exames o dos resultados.

Samuel

unread,
Nov 10, 2010, 10:17:14 AM11/10/10
to dug...@googlegroups.com
Teófilo,

Não se ofenda com a pergunta :-)  mas no subreport dos resultados (query Diversos) você disse que o DataPipeline é o SQL Diversos ?

[ ]s


Samuel Natali Junior
NatSam Consultoria Ltda
Fone: (11) 4688-1000
Skype: Hipercusto
www.natsam.com.br
www.hipercusto.com.br
Conheça o Hipercusto e veja como ele pode ajudar sua indústria.
Faça um download e avalie o produto gratuitamente durante 20 dias.

www.tr7.com.br o seu site de buscas na web

Teófilo Barbosa

unread,
Nov 10, 2010, 10:22:58 AM11/10/10
to dug...@googlegroups.com
No subreport de exames (onde vai a listagem de todos os exames, vão os subreports de resultados. Nesse caso, sim, o pipe da SQL de diversos também.

Samuel

unread,
Nov 10, 2010, 4:00:38 PM11/10/10
to dug...@googlegroups.com
Teófilo,

Pelo que você diz, parece que está tudo definido corretamente.

Seria possível eu ver seu micro via acesso remoto ? Acho que assim ficaria mais fácil de descobrir o problema.

[ ]s


Samuel Natali Junior
NatSam Consultoria Ltda
Fone: (11) 4688-1000
Skype: Hipercusto
www.natsam.com.br
www.hipercusto.com.br
Conheça o Hipercusto e veja como ele pode ajudar sua indústria.
Faça um download e avalie o produto gratuitamente durante 20 dias.


www.tr7.com.br o seu site de buscas na web


Teófilo Barbosa

unread,
Nov 10, 2010, 6:35:43 PM11/10/10
to dug...@googlegroups.com
Certamente, só dizer como faço pra entrar em contato contigo pra gente marcar certinho a hora.

Samuel

unread,
Nov 11, 2010, 7:41:48 AM11/11/10
to dug...@googlegroups.com
Bom dia,

Hoje ficarei em um cliente o dia inteiro, mas podemos ver isso amanhã (12/10) logo pela manhã.

Se quiser, me chame amanhã cedo (a partir das 08:30) pelo meu celular (11) 8698-6948 ou então pelo Skype: Powervendas.

Se tiver MSN, me passe o endereço que conversamos por ele.

[ ]s


Samuel Natali Junior
NatSam Consultoria Ltda
Fone: (11) 4688-1000
Skype: Hipercusto
www.natsam.com.br
www.hipercusto.com.br
Conheça o Hipercusto e veja como ele pode ajudar sua indústria.
Faça um download e avalie o produto gratuitamente durante 20 dias.


www.tr7.com.br o seu site de buscas na web


Teófilo Barbosa

unread,
Nov 12, 2010, 6:15:01 AM11/12/10
to dug...@googlegroups.com


 
...

[Mensagem cortada]  



--
Atenciosamente,

Teófilo Barbosa
Reply all
Reply to author
Forward
0 new messages