Algo melhor que o Quick Report!

Delphi

18/11/2003

Pelamordedeus, me digam que existe um gerador de relatórios melhor que o quickreport!!!

Queria um tipo o do Access, simples e funcional!

Obrigado.

[i:b6191dbe43]Título editado. Digite em minúsculas.[/i:b6191dbe43]


Tenil

Tenil

Curtidas 0

Respostas

Ilanocf

Ilanocf

18/11/2003

Não sei como pode um programaço como o Delphi ter um gerador de relatórios tão ´frango´ como o Quick Report. Ding_ling, vc lembrou bem, o Access tem um gerador de relatórios PORRETA mesmo.

Se vc descobrir um outro melhor q o QuickRepor´caria´, por favor, me avise tb, ok?

Ilano.


GOSTEI 0
Aroldo Zanela

Aroldo Zanela

18/11/2003

Colegas,

Na minha opinião o Crystal Reports e o melhor gerador de relatórios atualmente.


GOSTEI 0
Maurício Santos

Maurício Santos

18/11/2003

Olá!!!

Eu utilizo o Fortes report e nunca tive problemas com ele, substitui muito bem o QReport, tem vários recursos que facilitam a montagem do relatório e o melhor de tudo...É FREE!!!!

Se quiser testar acesse http://www.fortesinformatica.com.br

[]´s


GOSTEI 0
Tenil

Tenil

18/11/2003

Vou esperimentar o Fortes, parece legal.

Qual versão devo instalar?

Delphi6CLX
Delphi6VCL

Usuo o Delphi 6, mas não sei o que significa CLX e VCL.

Obrigado


GOSTEI 0
Denis

Denis

18/11/2003

Oi Pessoal,

Tem o Rave Report tb. para o Delphi 7. Mas em defesa do Quick Report, até que ele me quebra um galho. Não acho tão ruim assim. Já fiz algumas coisas escabrosas com ele, rs,rs,rs.


GOSTEI 0
Tenil

Tenil

18/11/2003

Galera, por favor, ignorem a pergunta sobre CLX e VCL, foi mal, já descobri.

[b:a4dccd521a]Denis[/b:a4dccd521a], então me dá uma ajuda aí!

Tenho duas tabelas, Pessoa e Telefone.

Uma Pessoa pode ter N Telefones.

Como faço para imprimir algo + ou - assim:
Código: 100111
Nome: Fulano da Silva
Endereço: Rua blá blá blá
Telefones: (61) 356-1010, (61) 356-0000, (61) 561-3232


Só consigo fazer assim:

Código: 100111
Nome: Fulano da Silva
Endereço: Rua blá blá blá
Telefone: (61) 356-1010
Telefone: (61) 356-0000
Telefone: (61) 561-3232


No segundo caso (o que eu consigo fazer) é utilizando um sub-detail.

Valeu.


GOSTEI 0
Tenil

Tenil

18/11/2003

Outra pergunta: [b:dc973b5fd2]Existe uma forma de colocar dois bands lado a lado? Ou todos os bands ocupam a toda a largura da página (ou coluna) disponível?[/b:dc973b5fd2]

Mais uma vez, obrigado.


GOSTEI 0
Thoor Cobain

Thoor Cobain

18/11/2003

Nunca precisei de um outro tipo de relatório, o quickrep solucionou todos meus problemas, mas depois deste tópico to pensando em conhecer outro, pois se algum outro gerador de relatório for mais simples do q o quickrep eu preciso conhecelo pois axo o quickrep muuuuito simples...


GOSTEI 0
Denis

Denis

18/11/2003

Ok, Vamos lá.

Nestes casos uma coisa que normalmente faço é o seguinte. Na banda detalhe eu coloque um componente qrlabel.
Defina suas propriedades autosize para false,autostretch para true,e WordWrap para true.
No evento beforeprint da banda detalhe crie uma query para buscar os telefones apenas desta pessoa. Crie um laço While, e acrescente no caption do qrlabel. Ex.
....
QRLabel1.caption := ´´
while not query1.eof do
begin
QRLabel1.caption := QRLabel1.caption + query1.fieldbyname(´fone´).asstring;
query1.next;
end;

e pronto.

Como o componente QuickReport aceita todos os comandos do Delphi fica até que fácil realizar estas operações. Claro que existem programas de relatório bem complexos e que fazem isso automaticamente. Mas a vantagem do QuickReport, é que não precisa de licença adicional nem dlls, etc... além de ser bem leve.

Falow.


GOSTEI 0
Imstaff

Imstaff

18/11/2003

Usamos o report builder aqui, funciona bem.


GOSTEI 0
N_valdo

N_valdo

18/11/2003

Realmente, se houve um gerador de relatórios igual ao do Access, seria bem mais fácil criar relatórios. O gerador do Access é ótimo, muito simples. Já que não temos gostaria que alguém me ajudasse no seguintê:
Tenho uma tabela com o nome GRUPO: nela tenho um campo CodigoGrupo e cadastrado neste campo os grupos A, B e C.
Tenho outra com o nome CLIENTES com os campos CodigoGrupo e NomeCliente com os seguintes registros:
CodigoGrupo Cliente
A Manoel
B Francisco
B Antonio

Onde no relatório está aparecendo da seguinte forma:

Grupo: A Clientes
-------------------------------------------------------
Manoel

Grupo: B Clientes
-------------------------------------------------------
Francisco
Antonio

Grupo: C Clientes
-------------------------------------------------------
Obs: Este grupo não tem clientes cadastrados para ele, mas, mesmo assim ele aparece como cabeçalho de grupo, e no seu Detail, não aparece nada, até mesmo porque não tem clientes para esse Grupo.
Pergunta: Como faço para que só apareçam os grupos que tem clientes cadastrados, ou seja, no caso acima só apareceria os GRUPOS A e B e o grupo C que não tem clientes não apareceria.

Desde já agradeço.


GOSTEI 0
Tenil

Tenil

18/11/2003

[b:00e14b2720]Denis[/b:00e14b2720], já tentei fazer isso. Só que, não sei se fiz de forma errada, quando eu dou um preview, os dados ficam se repetindo.

Será que, na impressão, os dados sairão corretos?

Valeu.


GOSTEI 0
Marcelo Saviski

Marcelo Saviski

18/11/2003

Repetindo assim:

Telefones: (61) 356-1010, (61) 356-1010, (61) 356-1010, (61) 356-1010
Telefones: (01) 234-2578, (01) 234-2578, (01) 234-2578 


ou assim:


Telefones: (61) 356-1010, (78) 444-7863, (12) 788-1212, (11) 111-1111
Telefones: (61) 356-1010, (78) 444-7863, (12) 788-1212, (11) 111-1111, (01) 234-2578, (01) 234-2578, (01) 234-2578



GOSTEI 0
Tenil

Tenil

18/11/2003

Assim:

Código: 100111 
Nome: Fulano da Silva 
Endereço: Rua blá blá blá 
Telefone: (61) 356-1010, (61) 356-0000, (61) 561-3232

Código: 211321
Nome: Beltrano José 
Endereço: Rua blé blé blé 
Telefone: (61) 356-1010, (61) 356-0000, (61) 561-3232

Código: 321546
Nome: Ciclano dos Santos
Endereço: Rua blí blí blí 
Telefone: (61) 356-1010, (61) 356-0000, (61) 561-3232

Código: 123654
Nome: Trajano Gonçalves
Endereço: Rua bló bló bló 
Telefone: (61) 356-1010, (61) 356-0000, (61) 561-3232


Sacou?


GOSTEI 0
Theofernandes

Theofernandes

18/11/2003

Assim:
Código: 100111 
Nome: Fulano da Silva 
Endereço: Rua blá blá blá 
Telefone: (61) 356-1010, (61) 356-0000, (61) 561-3232

Código: 211321
Nome: Beltrano José 
Endereço: Rua blé blé blé 
Telefone: (61) 356-1010, (61) 356-0000, (61) 561-3232

Código: 321546
Nome: Ciclano dos Santos
Endereço: Rua blí blí blí 
Telefone: (61) 356-1010, (61) 356-0000, (61) 561-3232

Código: 123654
Nome: Trajano Gonçalves
Endereço: Rua bló bló bló 
Telefone: (61) 356-1010, (61) 356-0000, (61) 561-3232
Sacou?



Você está colocando a query junto ao beforeprint?
Para acontecer isto, deve ser por aí.


GOSTEI 0
Tenil

Tenil

18/11/2003

[size=24:15ab7c1391][b:15ab7c1391]Consegui.[/b:15ab7c1391][/size:15ab7c1391]

Galera, valeu pela ajuda.

Finalmente funcionou.

Não sei o que estava errado, comecei tudo denovo e funcionou!

[b:15ab7c1391]Há uma esperança para o QuickReport![/b:15ab7c1391] Apesar de que não consegui, ainda, fazer muitos relatórios mais complexos.

Obrigado a todos!


GOSTEI 0
Nildo

Nildo

18/11/2003

O melhor que eu já ví até hoje (e olha que eu testei um milhao deles) foi o Free Report. É muito bom. Alem de ocmplilar com o executável, ele tem interpretador próprio de scripts, faz relatorios muito complexos, e vem até com um editor. É por ele que você monta seu relatório e o editor também pode ser compilado com seu programa. Assim o usuário pode alterar o Layout de impressão quando quiser. Recomendo. E ainda é de graça!


GOSTEI 0
Denis

Denis

18/11/2003

Outra pergunta: [b:f68808361b]Existe uma forma de colocar dois bands lado a lado? Ou todos os bands ocupam a toda a largura da página (ou coluna) disponível?[/b:f68808361b] Mais uma vez, obrigado.


Para colocar lado a lado, vc. pode usar o relatório divido em colunas. Por exemplo para fazer etiquetas de endereçamento.


GOSTEI 0
Rafael Heise

Rafael Heise

18/11/2003

Pessoal, tenho usado o QuickReport para muitas coisas, e ele tem sanado todas as minhas necessidades. Claro, as vezes a gente tem que batalhar um pouco mais pra fazer o que a gente realmente quer, mas nada como usar um pouco a cabeça.
Seguinte, se você quer enfileirar a informação (telefone) não tem como fazer isso direto pelo quickreport, mas porque? Para saber a resposta, basta você pensar, como teria que ser feito o relatório ou como você fazer se você desenvolvesse o quickreport. Seria muito complexo fazer algo assim fora que é fora da prática comum. Então, você soluciona isso da forma como foi postado. Você coloca junto na banda detail um QRLabel, e no BeforePrint dele, você busca os telefones. Coloca uma outra query, com SQL do tipo SELECT TELEFONE FROM TABELA WHERE CDPESSOA = x, pode usar até como ´Param´ da Query para ficar mais fácil, e então usa o while para setar o valor do QRLabel, resultando em algo mais ou menos assim:
  //SQL: SELECT TELEFONE FROM TABELA WHERE CODIGO = :COD
  var
     telefones: string;
  begin
    Query.DisableControls;
    Query.Close;
    Query.ParamByName(´COD´).Value := QrPes.FieldByName(´CODIGO´).Value;
    Query.Open;
    Query.First;
    telefones := ´´;
    while not Query.eof do
    begin
       telefones := Query.FieldByName(´TELEFONE´).AsString + ´,´;
       Query.Next;
    end;
    Delete(telefones,Length(telefones),1); // isto para apagar a última virgula que não pode aparecer    
    QrLabel.Caption := telefones;
    Query.Close;
  end;


e se você não quer que apareça os os registros que não tenham ´filhos´ ou que não tenham registros no subdetail, você precisa é arrumar o seu SQL porque o QuickReport apenas imprime o que você diz pra ele imprimir. Então, coloque uma condição no seu sql da seguinte forma:
digamos que você tem a tabela PAI e a tabela FILHOS, e você quer imprimir os nomes dos pais e seus filhos, mas não quer mostrar os pais que não tem filhos. Então, você faz seu SQL sa seguinte forma:
  SELECT NOMEPAI FROM PAI WHERE (SELECT COUNT(*) FROM FILHOS WHERE FILHOS.CDPAI = PAI.CDPAI) > 0

E pronto. Isso fará com que sua consulta (query) traga somente os registros da tabela PAI que tenham algum filho cadastrado, e então seu relatório irá mostrar apenas os DETAILS que contém SUBDETAILS!!
abraços.. e boa sorte a todos!


GOSTEI 0
Ilanocf

Ilanocf

18/11/2003

Olá pessoal,

Quero aproveitar o embalo e perguntas a vcs como faço para incrementar um contador usando um QRGroup, assim:

Curso: Eletromecânica
01 - Fulano
02 - Fulano de Tal
03 - Beltrano

Curso: Recursos Hídricos / Irrigação
01 - Beltrano de Tal
02 - Cicrano
03 - Cicrano de Tal

Total de Alunos: 06

Onde:

Os cursos ficam numa QRGroup1
Os alunos noutra QRGroup2
E o total numa QRBand (Summary)

Grato por sua ajuda,

Ilano.


GOSTEI 0
Rafael Heise

Rafael Heise

18/11/2003

Você cria duas variável do tipo integer no private da sua form.
Então no AfterPrint do Group das turmas, você seta ela para 1.
E então no before print da sua GroupBand dos alunos, você seta ma QrLabel o valor do variável e vai incrementado, e vai incrementando também a outra. porque? Porque uma é a numeração dos alunos (essa que você deve setar para 0), e a outra é o contador de alunos.
Então quando você imprimir a última Band, o Sumary, você coloca ali um QrLabel e coloca o valor que está a sua variável de total.


GOSTEI 0
Cfreitas

Cfreitas

18/11/2003

Alguém sabe como executar um formulário ou relatório do Access pelo Delphi?


GOSTEI 0
N_valdo

N_valdo

18/11/2003

Amigo Thoor Cobain, obrigado pela ajuda quanto à questão de só aparecerem somente os registros PAIS que tenham FILHOS, mas, não consegui fazê-lo. Estou encaminhando abaixo a as duas instruções SQL, da tabela pai e filha, gostaria que vc montasse para mim as duas, desde já agradeço. Obrigadaço.

SQL Master

SELECT tGru.GruCodigo, tGruCat.GruCatDescricao
FROM tGruCat INNER JOIN tGru ON tGruCat.GruCatCodigo = tGru.GruCatCodigo;
(Nesta instrução aparecerá o código do GRUPO e o tipo de GRUPO)

SQL Detail

SELECT DISTINCTROW tCon.ConCodigo, tCon.GruCodigo, tCon.CliCodigo, tCli.CliNome, tPar.ParVencimento
FROM (tCli INNER JOIN tCon ON tCli.CliCodigo = tCon.CliCodigo) INNER JOIN tPar ON tCon.ConCodigo = tPar.ConCodigo
WHERE ((tPar.ParVencimento) Between [DataIn] And [DataFn]) And tCon.GruCodigo=:GruCodigo;
(Nesta Instrução Há vários contratos(tCon) em um mesmo GRUPO, estes contratos têm parcelas tPar.ParVencimento onde indico qual o intervalo de vencimento destas parcelas). Tentei de várias formas a instrução que vc explicou, mas não deu certo, solicito então que vc monte para mim. Obrigado novamente.


GOSTEI 0
POSTAR