Ir para conteúdo
Fórum Script Brasil
  • 0

Filtros - Impressao em uma unica janela


Guest --Cristina --

Pergunta

Guest --Cristina --

Gente, to com uma super duvida.

É o seguinte, preciso montar um relatorio em crystal.

Mais eu tenho um intervalo, e eu preciso trazer todos os conhecimentos deste intervalo que eu digitei.

Mas, eu quero o seguinte, em vez de pra cada conhecimento ele abrir uma janela, gostaria que ele abrisse uma unica janela para todos os conhecimentos do intervalo.

ficaria tipo uma unica janelinha, com varias paginas sabe?

Porque daí a pessoa mandaria imprimir uma unica vez, e já sairiam todos para a impressora.

alguém sabe como faz isso??

Estou usando o crystal 8.5, e meu sisteminha que chama este relatorio está feito em Visual Basic 6.

Obrigada

Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

cristina, é só você editar o selecion formula do relatorio a partir do visual basic. ai você poe la o filtro com todas as opcoes q ele escolher.

se tiver dificuldades em fazer, me fala qual o componente do crystal q você usa (Crystal Reports Control, Design RunTime Library, etc) ou poste o seu codigo do Visual Basic q chama o relatorio pra gente dar uma olhada.

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --Cristina --

CrystalReport1.ReportFileName = App.Path & "\rptCTE.rpt"
   CrystalReport1.SelectionFormula = "{ST_CTE_Conhecimento.NR_CTRC_Impresso}='" & BnCT.Text & "' AND {ST_CTE_Conhecimento.NR_CTRC_Impresso} = {ST_CTE_NF.NR_CTRC_Impresso}"
  CrystalReport1.WindowState = 2
  CrystalReport1.DiscardSavedData = True
  CrystalReport1.Action = 1
Olha só, eu chamo o crystal dessa forma. Estou usando o componente CrystalReport mesmo. Dai eu fiz um loop, onde ele vai chamar cada um dos conhecimentos selecionados, mais não consegui fazer abrir tudo de uma vez. vou colar o codigo de como eu fiz pra você dar uma olhada ok?
For i = 0 To lstConhecimentos.ListCount - 1
      If lstConhecimentos.Selected(i) = True Then
         CTRC = CTRC + """" & Left(lstConhecimentos.List(i), 6) & """" & ","
    
   End If
    Next i
    qtd = Len(CTRC)
    CTRC = Mid(CTRC, 1, qtd - 1)
    CrystalReport1.SelectionFormula = "{ST_CTE_Conhecimento.NR_CTRC_Impresso}='" & Left(lstConhecimentos.List(i), 6) & "' AND {ST_CTE_Conhecimento.NR_CTRC_Impresso} = {ST_CTE_NF.NR_CTRC_Impresso}"
        CrystalReport1.WindowState = 2
    CrystalReport1.DiscardSavedData = True
    CrystalReport1.Action = 1

Dessa maneira que eu coloquei, ele ta abrindo uma unica vez, mais abre a penas o ultimo.

Se eu colocar isso dentro do loop, ele abre varias janelinhas.

Deu pra entender mais ou menos?

Obrigada

Editado por kuroi
Adicionar tag CODE
Link para o comentário
Compartilhar em outros sites

  • 0

é então, o melhor seria você por o filtro dentro do for. tipo assim:

Dim filtro As String
filtro = ""
For i = 0 To lstConhecimentos.ListCount - 1
      If lstConhecimentos.Selected(i) = True Then
         CTRC = CTRC + """" & Left(lstConhecimentos.List(i), 6) & """" & ","  
   End If

    filtro = "({ST_CTE_Conhecimento.NR_CTRC_Impresso} = '" & Left(lstConhecimentos.List(i), 6) & "'" & IIf(i = lstConhecimentos.ListCount - 1, ")" " OR ")

    Next i
    qtd = Len(CTRC)
    CTRC = Mid(CTRC, 1, qtd - 1)

    CrystalReport1.SelectionFormula = filtro & " AND {ST_CTE_Conhecimento.NR_CTRC_Impresso} = {ST_CTE_NF.NR_CTRC_Impresso}"

        CrystalReport1.WindowState = 2
    CrystalReport1.DiscardSavedData = True
    CrystalReport1.Action = 1[/code]

entendeu a ideia?? veja se funciona ai, qualquer coisa poste.

Editado por kuroi
Link para o comentário
Compartilhar em outros sites

  • 0
Guest Visitante

Será que você pode me dar mais uma ajudinha???

é o seguinte, dentro deste relatorio que eu to montando, eu joguei um subrelatorio.

Este subrelatorio seria uma segunda pagina do relatorio...é em outra folha.

daí é assim: quando as nfs que eu tenho nesse relatorio não couberem mais nessa folha...eu tenho q imprimir esta segunda folha... com as outras nfs que faltam.

só que eu queria colocar uma regra..pra essa segunda pagina só aparecer, quando tiver nf pra colocar la.

Do jeito que eu fiz ta assim: tem um conhecimento q tem uma nf nessa outra pagina...mas pra todos os que eu estou imprimindo...ele joga essa segunda pagina..e na realidade teria que jogar apenas para um.

To tentando jogar naquele selection formula uma condicao pra comparar o numero do conhecimento com o numero do conhecimento dessa tabela que vi guardar essas notas excedentes...mais ta dando erro na formula

da uma olhada:

Ela ta assim agora:

CrystalReport1.SelectionFormula = filtro1 & filtro & " AND {ST_CTE_Conhecimento.NR_CTRC_Impresso} = {ST_CTE_NF.NR_CTRC_Impresso} AND {ST_CTE_Conhecimento.CD_Filial} = {ST_CTE_NF.CD_Filial}"

agora...se eu acrescento a condicao dessa outra tabela...ela da erro

dai ela fica assim:

CrystalReport1.SelectionFormula = filtro1 & filtro & " AND {ST_CTE_Conhecimento.NR_CTRC_Impresso} = {ST_CTE_NF.NR_CTRC_Impresso} AND {ST_CTE_Conhecimento.CD_Filial} = {ST_CTE_NF.CD_Filial} and {ST_CTE_Conhecimento.NR_CTRC_Impresso} = {ST_CTE_NF_Continuacao.NR_CTRC_Impresso}"

Esse filtro, eu coloco aqui na formula, ou tem como eu fazer uma formula direto no crystal...pra ele só mostrar quando tiver conteudo na tabela prakele determinado conhecimento???

Obrigada

Link para o comentário
Compartilhar em outros sites

  • 0

hum... não entendi nd... tem como você mostrar algum print ou coisa assim??

mas tipo, se a segunda pagina é continuacao da outra, porque você não poe direto em vez de usar o subreport??

só que eu queria colocar uma regra..pra essa segunda pagina só aparecer, quando tiver nf pra colocar la.

ta mas como você sabe quando tem e quando não tem nf pra colocar la??

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --Cristina --

Eu coloquei como SubRelatorio por conta dele abrir em uma unica janelinha.

Eu tinha feito esse de continuacao em um arquivo separado, só que aí, ele vai abrir em outra janela..não vai ser como conitnuacao daquele documento que tem na outra janela. Daí meu chefe acha que vai ficar ruim, e quer que abra tudo em uma unica janela, pra falicitar pro expedidor na hora da impressao.

Pra controlar essas NF eu fiz meio que uma gambiarra..

Da tabela de NF..eu exibo ate 12 NFs nesse relatorio principal, quando passa de 12, eu jogo o restante numa tabela temporaria.. esse sub relatorio só busca as NFs nessa tabela temporaria.

Como faço pra te mostrar a tela??

SE puder, me deixa seu email, que eu mando pra você dar uma olhada

Obrigada!!

Link para o comentário
Compartilhar em outros sites

  • 0

então, tinha falado pra você por um printscreen.

pra por foto no post, você pode anexar o arquivo com a opcao aqui em baixo na hora de postar.

ou se for mais facil pra você hospedar a imagem em algum servidor, ai você pode exibir aqui, clicando no botaozinho de imagem ali em cima e passar o endereco (ou colocar o endereco dentro da tag img tipo assim: [i.m.g]http://www.endereco.xxx/imagem.jpg[/i.m.g] só q sem os pontos pra escrever img).

mas acho q consegui entender mais ou menos. você quer q, quando não existam registros no subreport, ele não exiba nd do sub, nem cabecalho nem nd certo?? com o selection formula noa tem como fazer isso, a não ser q você suprima secao por secao, o q daria muito trabalho e seria uma gambiarra, mas não deixa de ser uma opcao tb.

se você clicar com o botao direito no nome da secao no painel na esquerda e selecionar Format Section, tem uma opcao la chamada Supress. Se você selecionar essa opcao, a secao não é mostrada. mas veja tb q tem um botaozinho do lado pra por uma formula. isso significa q a secao sera suprimida caso a formula retorne True. ai pra saber se a tabela tem ou não registros, você pode fazer uma formula do tipo:

IsNull({NomeDaTabela.Campo})
de preferencia, passe o campo chave pra funcao IsNull(), pra não correr o risco de você usar algum campo q tenha valor nulo, o q faria com q ele retornasse True mesmo com registros. mas note tb q se, estando no report principal, você clicar com o botao direito no subreport, e entrando em propriedades, existe a funcao Supress tb do subreport. ou seja, você pode suprimir o subreport inteiro. mas ai eu não sei direito como funciona o seu banco. você mostra apenas 12 notas da primeira tabela certo?? mas e se tiver mais?? as demais tb estao gravadas nessa mesma tabela?? se tiver, você pode suprimir o subreport com uma formula tipo assim:
Count({NomeDaTabela.Campo) <= 12

outra forma tb seria você suprimir o subreport por codigo no visual basic. mas me parece q você esta usando o Crystal Reports Control, certo?? nesse componente eu não saberia como suprimir o subreport, sei q da pra fazer com o Crystal Reports Design Run Time Library (q alias, é muito melhor q o Crystal Reports Control - aqui ensina como se usa basicamente: http://scriptbrasil.com.br/forum/index.php?showtopic=122749).

veja ai se alguma das ideias q eu passei ajuda, qualquer coisa poste ai.

Link para o comentário
Compartilhar em outros sites

  • 0

Nossa!! Deu certo!!

Eu tava usando lá no format section a opcao suppress a blank section...e nesse não dava certo...

daí usei a outra opcao de suprress e coloquei essa formula do isnull que você me passou e funcionou.

Mais também tirei o subrelatorio, fiz direto sabe?

Criei um details b...e joguei la as nfs que vao ficar nessa tabela temporaria!!

Muito obrigada pela ajuda e desculpe a amolação!

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --Cristina --

Vou aproveitar para tirar mais uma dúvida!

Assim, eu relaciono nesse meu relatorio as Notas fiscais...elas saem mais ou menos desta forma:

NF CNPJ-Emitente Serie-Numero da nota NF CNPJ-Emitente Serie-Numero da nota

são duas colunas..e 6 linhas

foi pra isso que eu criei a tabela temporaria, para conseguir jogar nas NF certinho, uma embaixo da outra, usando as 2 colunas.

Tem uma forma deu fazer isso, sem que eu precise jogar isso pra uma tabela temporaria? Jogar direto da tabela de NF para o meu relatorio??

Porque eu tenho quem 1 conhecimento, pode ter 1 ou até 12 NFs.

Eu me confundi, porque no crystal a gente poe la o campo correspondente ao campo que ta criado na tabela né? E foi por isso que criei a tabela temporaria, porque pra cada NF eu criei um campo (NF1, NF2, NF3...)...pois se pegasse da tabela de nota fiscal o campo chama apenas NF. Como eu iria conseguir distribuir, caso tivesse mais de 1 NF??

Deu pra enteder minha duvida??

Link para o comentário
Compartilhar em outros sites

  • 0

sua duvida é como mostrar uma nota do lado da outra?? se for, clique com o botao direito no nome da section (acredito q seja a details) no painel da esquerda e clique em Format Section e habilite a opcao Format with Multiple Columns. va pra aba Layout q vai abrir e selecione um width pra cada coluna (se você quer duas, pode por a metade da pagina, assim você divide a pagina em dois).

ai caso você queira essa ordem:

1|4

2|5

3|6

selecione a opcao Down Then Across

caso queira essa:

1|2

3|4

5|6

selecione Across Then Down

veja se é isso, qualquer coisa poste.

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --Cristina --

Ola novamente.

Estou precisando de um novo help! ^_^

Bom, é assim. Nosso sistema aqui da empresa, é on line. Com as representacoes e filiais é usado pelo Terminal Server.

E no TS todas as impressoras ficam compartilhadas. Então, quando mando imprimir, ele vai me mostrar uma lista com todas as impressoras instaladas (o que neste caso aki são muitas..umas 40).

Será que tem como eu fazer ele mandar automaticamente pra uma impressora especifica??

Ou por exemplo, quando eu mandar imprimir, pra cada filial e já mandar pra impressora "padrão" desta filial??

Sem o usuário precisar ficar selecionando a impressora.

Obrigada.

Link para o comentário
Compartilhar em outros sites

  • 0

a com o Crystal Reports Control não sei direito, nunca usei ele pra imprimir. com o CRAXDRT se você fizer como explica esse tópico http://scriptbrasil.com.br/forum/index.php?showtopic=122749 ele imprime direto na impressora q estiver setada como padrão no windows.

mas acho q não seria viavel você trocar o componente e ter q refazer todo o codigo certo??

então poste ai o codigo q você usar pra imprimir no CRControl q eu tento ver se descubro alguma coisa.

Link para o comentário
Compartilhar em outros sites

  • 0
Guest Christina

Olá! Boa tarde!

Primeiramente obrigada por toda ajuda que me deu!!

Hoje, depois de um tempão..quero outro help seu!

Quero deixar automatico, pra quando for imprimir meu rpt ele já sair 3 copias, sem a necessidade do usuario ir la e informar que quer 3 copias. Como faço isso???

eu mudei a propriedade PrinterCopies, do meu componente CrystalReport no Visual Basic, de 1 para 3.

Só que mesmo assim, quando executo e mando imprimir, ele manda apenas 1 copia pra impressora.

Link para o comentário
Compartilhar em outros sites

  • 0

um só sei com CRAXDRT, é o segundo parametro do PrintOut. no CRControl não sei não.

mas ai eu repito a mesmo coisa de antes:

então poste ai o codigo q você usar pra imprimir no CRControl q eu tento ver se descubro alguma coisa.

se você postar, posso tentar descobrir aqui, mas não garanto nd.

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --Cristina --

eu uso esse codigo pra chamar o relatorio no crystal

CrystalReport1.ReportFileName = App.Path & "\rptCTE.rpt"

CrystalReport1.WindowState = 2

CrystalReport1.DiscardSavedData = True

CrystalReport1.PrinterCopies = 3

CrystalReport1.Action = 1

pelo que pesquisei na net..usando aquele comando PrinterCopies é que determina o numero de copias que manda pra impressora...mais ele não ta funcionando não..

mesmo colocando 3 ali...ele manda apenas 1

Link para o comentário
Compartilhar em outros sites

  • 0

aqui funcionou sim. veja, mandei imprimir o seguinte codigo:

With CrystalReport1
    .ReportFileName = App.Path & "\x.rpt"
      
    .WindowState = 2
    .DiscardSavedData = True
      
    .Destination = crptToPrinter
    .PrinterCopies = 3
    
    .Action = 1
End With[/code]

e aqui ele mostra as tres copias na fila da impressao:

crystal3fa2.jpg

e as tres copias são impressas certinho.

de uma olhada ai se as copias não aparecem na fila pra você tb. talvez seja problema com o sistema e não com o codigo.

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --Cristina --

Será que pode ser problema de versão??

Acabei de testar aqui e ele só joga uma copia na fila da impressora mesmo.

Que versão do Crystal você tem ai??

Aqui eu uso a 8.5.

Link para o comentário
Compartilhar em outros sites

  • 0

Olá! Bom dia.

Tenho uma outra super dúvida com o Crystal.

Estou montando um relatorio que ele tem que ficar na seguinte estrutura:

Numero Manifesto:

Motorista:

Filial Destino:

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

Filial CTRC DT Emissao Remetente Destinatario Cidade Destino Nº NF

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

Meu problema está exatametne nessa parte de baixo, que não tenho ideia de como fazer.

Alguém me da alguma ideia?!

Porque eu tava tentando fazer assim: jogar todos os dados numa tabela temporaria, e da temporaria jogar pro crystal. Assim é facil.

Mais acho que deva ter algum outro jeito, mais pratico, sem que eu precise jogar tudo na temporaria.

Meu problema é que eu to lidando com várias tabelas e varios registros. Isso ta me confundindo.

Pra exibir tudo, como Numero do Manifesto, CTRC, NF, Remetente e Destinatario eu vou usar as seguintes tabelas:

Manifesto

Manifesto_CTRC (pois um manifesto pode conter varios CTRCs)

CTRC

Nota_Fiscal

Cliente

O remetente e o Destinatario ta sendo outro problema, porque preciso exibir a razao social

e é assim:

Tenho a tabela cliente onde a chave é CGC_CPF e na tabela CTRC eu tenho CGC_CPF_Remetente e CGC_CPF_Destinatario

e esses dois (remetente e destinatario) estao cadastrados na tabela cliente

Será que tem como eu fazer isso usando sub relatorio??

Ou tem alguma maneira sem que eu precise jogar tudo pra tabela temporaria?!?!?

alguém me ajuda?!?!

Link para o comentário
Compartilhar em outros sites

  • 0

ou seu problema é junta os dados de varias tabelas num relatorio so??

se as tabelas tiverem relacionamento entre suas chaves primarias, é so você adicionar todas no relatorio e abir o visual linking expert e fazer o link.

senao outra opcao é você fazer a consulta (view) e salvar no seu banco de dados. por exemplo, se você tiver usando access, você clica la em nova consulta, faz a selecao como você quer e dexa salva la. ai você aponta o relatoria pra essa consulta.

a consulta funcionaria como a sua tabela temporaria, entendeu?? so q ela é dinamica, ela faz a selecao a cada vez q for chamada.

otra opcao ainda é fazer como eu explico aqui: http://scriptbrasil.com.br/forum/index.php...st&p=477615

qualquer duvida, pergunta.

Link para o comentário
Compartilhar em outros sites

  • 0

Olá. Bom dia!

Muito obrigada pelas ajudas!!

Agora meu problema é outro. :blink:

Acontece algumas vezes, quando vou gerar meu rpt, de dar o seguinte erro : "error 20500: not enough memory for operation"

Isso não estava acontecendo, comecou acontecer do nada, e quse toda hora da este erro quando vou gerar meu relatorio.

Vi algumas coisas que fala que este erro pode ocorrer quando o banco é access, mais meu banco de dados aqui é o SQL server.

Você tem ideia do que possa ser???

Link para o comentário
Compartilhar em outros sites

  • 0

esse erro me acontece direto, mas é sempre problema dentro do .rpt. pode ser mtas coisas, mas a mensagem não da os detalhes no visual basic. ai você teria q abrir o .rpt e tentar imprimir por la pra ver se acontece alguma coisa de errado.

umas dicas q eu posso dar: abra o .rpt no crystal, clique em Verify Database e salve. dexe desabilitada a opcao Save Data With Report de dexe habilitada a opcao Verify on Every Print.

se o erro persistir, abra o preview do relatorio no crystal e clique no botao q vai pra ultima pagina pra q ele passe por todos os dados assim se o erro for em algum registro no meio do arquivo, ele vai passar por ele.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...