Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

GGerminiani

Crystal reports

Recommended Posts

Pessoal,

Bom dia.

 

Estou com dúvida no Crystal reports, referente a como retornar informações de outras tabelas (vários Inner Join).

 

Estou confeccionando boletos bancários, e os dados dos mesmos estão divididos em várias tabelas.

 

Até o momento, consegui o seguinte: criei um parâmetro (ID_BOLETO) e este é informado pelo form e transmitido ao CR - até aqui o funcionamento está OK. Na fórmula, está assim: {FATUR_BOLETOS.ID_FATUR_BOLETOS} = {?ID_BOLETO}

 

Porem quando tenho um campo que está conectado a 2 ou mais tabelas, no momento de visualizar, as informações ficam em banco - não encontra.

 

Abaixo fiz uma representação simples:

 

No caso o campo verde é o parâmetro que vou informar, e os AMARELOS são as informações que precisam constar no boleto.

TABS.jpg

Por favor, só me falta isso para finalizar o projeto.

 

Grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma solução :

Monte uma Consulta SQL que faça o join entre as tabelas

 

Ao criar/setar sua base de dados pelo Assistente, use "Incluir Comando"

 

Insira o SQL

Marque os parametros necessários (se for o caso)

 

Vai funcionar tal que nem fosse uma tabela.

 

Outra solução

 

Crie uma VIEW com base em sua SQL.

Use esta VIEW como uma tabela.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vou tentar a solução 1...

 

Vc se refere à este campo:

sql.jpg

 

Vou tentar monta-la aqui...

 

Retorno a resposta.

 

Muito obrigado!

 

 

Desculpe Khaos... aprendi extremamente o básico com reports (aliás, nem foi em CR, foi pela do próprio VS)..

 

 

 

Só tinha noção de conectar um BD e arrastar os campos..

 

Isto está sendo bem mais avançado para mim.

 

Por acaso vc se refere aos links que o CR faz? Caso seja, os links estão conectados, porem continuo com o erro.

 

Grato.

 

 

--------------------------------------------

 

 

 

Motta, estou procurando o INCLUIR COMANDOS porem não localizo.

 

 

Monte uma Consulta SQL que faça o join entre as tabelas

 

Ao criar/setar sua base de dados pelo Assistente, use "Incluir Comando"

 

Insira o SQL

Marque os parametros necessários (se for o caso)

 

Vai funcionar tal que nem fosse uma tabela.

 

 

Meu BD já esta setado... preciso incia-lo novamente?

 

Grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na 11

Banco de Dados

__Definir local de Banco de Dados

 

Em cima seleciona a atual, em baixo a nova, com as duas selecionadas , botão Atualizar

 

 

Mas se você não conseguiu fazer iria alterar o que ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa Motta,

 

Consegui no método de inserir um novo comando (sql query)... não deve ser o mais usual, porem muito obrigado!

 

vc sabe me dizer como faço para cada registro ficar numa página?

 

Grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cria um Grupo no nível que vc quer por página

 

Nas configurações do Grupo marque a opção (new page before) (Nova Página antes)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta,

Boa tarde.

 

Primeiramente gostaria de agradece-lo. Estava preocupado de como iria fazer as conexões de campos de tabelas distintas, porem pelo método que vc informou, construí o comando via sql query e os campos que precisava vieram junto com com o SELECT.

 

Gostaria de aproveitar e tirar 2 dúvidas:

  1. Pelo que percebi, este método de construir o comando me parece um pouco limitado. No meu caso, como citei acima, este relatório está gerando os boletos a serem enviado para nossos clientes. Me deparei com um problema que arranjei uma solução que provavelmente não seja a mais adequada: antes de gerar o relatório, os clientes aparecem num Grid, dando a possibilidade do usuário marcar os clientes que terão os seus boletos gerado. Acontecia que fazia a condição somente por mês e ano ( Where Competencia = '01' and Exercício = '2014'), o que não estava correto, pois nem todos os clientes estavam marcados no Grid. A solução que arranjei, foi criar um campo boolean no BD, sendo que se o cliente for marcado no Grid, o campo recebe TRUE e então aumentei a condição com esse campo ( Where Competencia = '01' and Exercício = '2014' and Relatorio = 1 [True]).
  2. Outra dúvida que tenho é se é possível tornar o CR mais dinâmico. Digo isso, pois penso em fazer relatórios futuros que dê a opção do usuário escolher campos a serem incluídos no relatório. Haveria essa possibilidade de eu fazer relatórios que ganhassem uma certa liberdade via código, ou devo fazer um arquivo RPT para cada situação?

Bem, essas são dúvidas que tenho referente ao operacional e limites da ferramenta Crystal Reports.

 

Tenho um novo problema:

 

Cada boleto está sendo gerado em uma página (o que está correto). Preciso que seja gerado um arquivo PDF para cada página - se tento exportar em PDF, o arquivo de 44 páginas (boletos) e formado por um só. O que acho que daria certo é mandar imprimir via código, configurando uma impressora PDF e ao invés de marcar IMPRIMIR TODAS AS PÁGINAS, faria uma rotina imprimindo página por página.

 

Enfim, é uma possibilidade que enxergo.

 

Alguma dica para este caso?

 

Grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

1) Uma solução possível a sua, as passagem de parametros do tipo IN (do sql) é limitada, uma solução que vi para Oracle tornava os sqls muito lentos.

 

2) O CR tem opções de criar formulas, as colunas poderiam ser formulas e a montagem via parametros, daria trabalho, nunca tentei fazer algo do tipo com CR

 

novo problema

 

vc quer cada pdf num arquivo ?

não me ocorre como.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só para esclarecer então, o 2) seria mais viável eu confeccionar um arquivo por opção de relatório, certo?

 

___

 

Sim, gostaria de desmembrar o arquivo, pois tendo cada boleto salvo em um arquivo de PDF, faria automaticamente o envio de e-mail anexando o referido boleto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu não faria nada como o (2), não vejo um modo prático de fazer isto em Crystal, mas se quiser tentar

 

faça as colunas como formula (f_col01, f_col02)

conforme o paramentro atribua o valor a coluna (na formula)

if prapamcol1 = 'cliente' then

f_col01 = <fonte de dados..cliente

else...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok.

 

Provavelmente tentarei... posto como foi a experiência! Obrigado!

 

_____

 

Sobre imprimir boletos em arquivos individuais, existe alguma solução?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei talvez na opção de exportar para pdf, nunca fiz.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta, e prezados,

Boa tarde!

 

Para quem tem interesse em realizar exportações como identifico meu problema acima, compartilho aqui com todos uma solução que arranjei:

 

Criei nada mais que um laço para cada EMPRESA que desejo criar um PDF separadamente:

 

Dim cnPenafiel As New Pen... 'CONEXÃO COM LINQtoSQL

            'Instancia o Relatório, além de Carrega-lo
            Dim CR As New ReportDocument
            CR.Load(Exportacao.rpt)

            'Configura a Conexão do BD
            Dim crtableLogoninfo As New TableLogOnInfo
            Dim crConnectionInfo As New ConnectionInfo
            Dim CrTables As Tables
            Dim CrTable As Table

            'Conexão do CR com SQL
            With crConnectionInfo
                .ServerName = [NOME_SERVIDOR]
                .DatabaseName = [NOME_BASE_DE_DADOS]
                .UserID = [USUARIO_LOGIN]
                .Password = [SENHA_LOGIN]
            End With

            CrTables = CR.Database.Tables
            For Each CrTable In CrTables
                crtableLogoninfo = CrTable.LogOnInfo
                crtableLogoninfo.ConnectionInfo = crConnectionInfo
                CrTable.ApplyLogOnInfo(crtableLogoninfo)
            Next
            '_____________________________________________________

            'Variáveis para o Crystal Reports
            Dim DefinicaoParametros As ParameterFieldDefinitions
            Dim ParametroRelatorio As ParameterFieldDefinition
            Dim ValorParametro As New ParameterValues
            Dim DefinicaoValorParametro As New ParameterDiscreteValue

			Dim _Ano = 2014
			Dim _Mes = 01
			Dim _Empresas = 'TRAGO UMA LIST ATRAVÉS DO LINQtoSQL

            For Each i In _Empresas 'LAÇO PARA EXPORTAR O RELATÓRIO PARA CADA EMPRESA
                Dim Nome_arquivo As String

                'ANO
                DefinicaoValorParametro = New CrystalDecisions.Shared.ParameterDiscreteValue
                DefinicaoValorParametro.Value = _Ano
                DefinicaoParametros = CR.DataDefinition.ParameterFields()
                ParametroRelatorio = DefinicaoParametros.Item("Ano")
                ValorParametro = ParametroRelatorio.CurrentValues
                ValorParametro.Add(DefinicaoValorParametro)
                ParametroRelatorio.ApplyCurrentValues(ValorParametro)

                'MÊS
                DefinicaoValorParametro = New CrystalDecisions.Shared.ParameterDiscreteValue
                DefinicaoValorParametro.Value = _Mes
                DefinicaoParametros = CR.DataDefinition.ParameterFields()
                ParametroRelatorio = DefinicaoParametros.Item("Mes")
                ValorParametro = ParametroRelatorio.CurrentValues
                ValorParametro.Add(DefinicaoValorParametro)
                ParametroRelatorio.ApplyCurrentValues(ValorParametro)

                'EMPRESA - AQUI QUE ACONTECE A VARIAÇÃO
                DefinicaoValorParametro = New CrystalDecisions.Shared.ParameterDiscreteValue
                DefinicaoValorParametro.Value = i.EMPRESA.ToString
                DefinicaoParametros = CR.DataDefinition.ParameterFields()
                ParametroRelatorio = DefinicaoParametros.Item("Empresa")
                ValorParametro = ParametroRelatorio.CurrentValues
                ValorParametro.Add(DefinicaoValorParametro)
                ParametroRelatorio.ApplyCurrentValues(ValorParametro)
                '_____________________________________________________

                'Exporta em PDF
                Dim CrExportOptions As ExportOptions
                Dim CrDiskFileDestinationOptions As New  _
                DiskFileDestinationOptions()
                Dim CrFormatTypeOptions As New PdfRtfWordFormatOptions()
                CrDiskFileDestinationOptions.DiskFileName = "C:\USUARIOS\DESKTOP\" & i.EMPRESA.ToString & ".pdf"
                CrExportOptions = CR.ExportOptions
                With CrExportOptions
                    .ExportDestinationType = ExportDestinationType.DiskFile
                    .ExportFormatType = ExportFormatType.PortableDocFormat
                    .DestinationOptions = CrDiskFileDestinationOptions
                    .FormatOptions = CrFormatTypeOptions
                End With
                CR.Export()
                '_____________________________________________________

            Next

 

 

Só tenho um problema:

 

Por algum motivo que ainda não descobri, ao exportar o Crystal Reports diminui o código de barras:

 

Original:

tamanho_comum.jpg

 

Modificado:

tamanho_export.jpg

 

Alguém já passou por isso e teria alguma solução?

 

Grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ao e portar pode ser que o fonte do CB não caiba no formato pdf, as vezes mudar ou exportar muda o layout.

 

Tente redizir o fonte do CR.

 

Boa e simples a sacada de do laço para gerar N arquivos.

 

 

Tentou imprimir em pdf (um destas drives) no lugar de e portar ?

 

 

Passei por um problema parecido, um CR cheio de gráficos dava erro ao imprimir numa impressora especifica, tinha de exportar ou imprimir em pdf e imprimir o pdf na maldita ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou tentando diversas maneiras, mas está difícil...

 

Vi alguma coisa sobre True Types, mas acredito que não seja esse o caminho.

 

Já diminui a fonte e nada também.

 

Sobre imprimir em pdf, fica perfeito... mas tem 2 problemas:

 

  1. Não sei fazer a impressão do Cyrstal Via code... mas até aqui ok, descobriria;
  2. Fazendo a impressão via code, de qualquer vou ter que fazer o usuário interagir... por exemplo, uso o CutePDF Writer, se conseguir pedir a impressão via código, selecionando a impresso CutePDF, de me aparecerá a DialogBox para escolher o lugar e o nome do arquivo. EU gostaria que fosse um processo automática. Há a possibilidade de "driblar" esse Dialog também por código?

Grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.