Algo melhor que o Quick Report!
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]
Queria um tipo o do Access, simples e funcional!
Obrigado.
[i:b6191dbe43]Título editado. Digite em minúsculas.[/i:b6191dbe43]
Tenil
Curtidas 0
Respostas
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.
Se vc descobrir um outro melhor q o QuickRepor´caria´, por favor, me avise tb, ok?
Ilano.
GOSTEI 0
Aroldo Zanela
18/11/2003
Colegas,
Na minha opinião o Crystal Reports e o melhor gerador de relatórios atualmente.
Na minha opinião o Crystal Reports e o melhor gerador de relatórios atualmente.
GOSTEI 0
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
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
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
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
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.
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
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:
Só consigo fazer assim:
No segundo caso (o que eu consigo fazer) é utilizando um sub-detail.
Valeu.
[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
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.
Mais uma vez, obrigado.
GOSTEI 0
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
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.
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
18/11/2003
Usamos o report builder aqui, funciona bem.
GOSTEI 0
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.
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
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.
Será que, na impressão, os dados sairão corretos?
Valeu.
GOSTEI 0
Marcelo Saviski
18/11/2003
Repetindo assim:
ou 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
18/11/2003
Assim:
Sacou?
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
18/11/2003
Assim:
Sacou?
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
Você está colocando a query junto ao beforeprint?
Para acontecer isto, deve ser por aí.
GOSTEI 0
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!
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
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
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
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:
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:
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!
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
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.
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
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.
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
18/11/2003
Alguém sabe como executar um formulário ou relatório do Access pelo Delphi?
GOSTEI 0
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.
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