Fórum Como IMPRIMIR ETIQUETAS de MALA DIRETA com REPORT VIEWER #1552

26/12/2008

0

Srs.   Preciso uma orientação de como montar rotinas de impressão de Etiquetas de Mala Direta, Emissão de Boletos.     Atualmente estou usando o VS2005 e bd SQLSERVER.   Atte Sérgio
Sergio Santos

Sergio Santos

Responder

Posts

29/12/2008

Luiz Maia

Olá Sérgio,   Para fazer as etiquetas use o Crystal Report, no modo wizard é bem fácil e intuitivo para trabalhar. 1 - Crie um projeto do tipo CrystalReportsApplication. 2 - Seta a conexão usando o wizard. 3 - Escolha a tabela e os campos da mesma para o display.     4 - Formate as etiquetas como deseja e pronto.     Fiz um exemplo bem simples acima, só para efeitos de teste mesmo.     Quanto a impressão dos boletos, você deve ter um convênio com o banco para a sincronização do número de identificação. Segue um link com istruções do procedimento completo.   https://www.devmedia.com.br/articles/viewcomp.asp?comp=3347   Caso necessite de acesso, me avise.   Espero ter ajudado. Aguardo seu retorno. Abraços.   Luiz Maia      
Responder

Gostei + 0

29/12/2008

Luiz Maia

Sergio, Caso precise de mais de uma coluna, como abaixo: Etiqueta 1   Etiqueta 2  Etiqueta 3
Nome 1       Nome 2            Nome 3
Endereço 1   Endereço 2    Endereço 3
Fiz um teste com a versão do ReportViewer para .NET 2005 e .NET 2008 e existe um problema na hora de fazer a "renderização" do ReportViewer para ASP.NET, esse erro não ocorre com uma aplicação Windows Forms" Segue um exemplo completo para resolver o problema em ASP.NET, usando o REPORTVIEWER desta vez: referências do banco de dados Imports System.Data.SqlClient Imports System.Data referências do reportview Imports Microsoft.Reporting.WebForms referência ConnectionStrings web.config Imports System.Web.Configuration.WebConfigurationManager   Private Sub ExportarPDF() Dim strConexao As String = ConnectionStrings("AWorks").ConnectionString() Dim oConn As New SqlConnection Dim strSQL As New StringBuilder Dim oTable As New DataTable() Dim reportPath As String = Server.MapPath("~\Relatorios\ReportViewer\rdlEtiqueta.rdlc") Dim rView As ReportViewer = New ReportViewer() Try passar os dados para o relatório (datatable) abrindo conexão com o banco de dados oConn.ConnectionString = strConexao oConn.Open() carregando os dados strSQL.Append(" SELECT ") strSQL.Append(" Production.Product.ProductID, ") strSQL.Append(" Production.Product.Name, ") strSQL.Append(" Production.Product.Color, ") strSQL.Append(" Production.Product.ListPrice, ") strSQL.Append(" Production.ProductSubcategory.Name AS NameSubcategory ") strSQL.Append(" FROM ") strSQL.Append(" Production.Product INNER JOIN Production.ProductSubcategory ") strSQL.Append(" ON Production.Product.ProductSubcategoryID = Production.ProductSubcategory.ProductSubcategoryID ") Dim oDA As New SqlDataAdapter(strSQL.ToString, oConn) oDA.Fill(oTable) informando os dados para o reportview rView.LocalReport.DataSources.Add(New ReportDataSource("dsProduct", oTable)) rView.LocalReport.ReportPath = reportPath exportando os dados do relatório para PDF Dim warn() As Warning = Nothing Dim streamids() As String = Nothing Dim mimeType As String = "application/pdf" Dim encoding As String = String.Empty Dim extension As String = String.Empty Dim byteViewer() As Byte byteViewer = rView.LocalReport.Render("pdf", Nothing, mimeType, encoding, extension, streamids, warn) Response.Buffer = True Response.Clear() Response.ContentType = "application/pdf" Response.AddHeader("content-disposition", "inline; filename=ReportName.pdf") Response.BinaryWrite(byteViewer) Response.Flush() Response.End() Catch ex As Exception System.Diagnostics.Debug.WriteLine(ex.Message) Finally liberando os objetos oConn.Dispose() oTable.Dispose() rView.Dispose() oConn = Nothing oTable = Nothing rView = Nothing Response.Clear() End Try End Sub Espero ter ajudado. Abraços Luiz Maia
Responder

Gostei + 0

30/12/2008

Luiz Maia

Ola Sergio,   Como você não se manifestou, estou fechando o chamado. Espero ter ajudado você. Qualquewr dúvida, continuo a sua disposição.   Abraços Luiz Maia
Responder

Gostei + 0

07/01/2009

Sergio Santos

Prezado Maia FELIZ ANO NOVO!   Estive meio ausente por motivos de falecimento na familia neste final de ano.Só agora é q estou tentando retornar as atividades.   Algumas dúvidas: 1o) Existe alguma maneira de configurar o report Viewer para que o relatório já saia em modo Retrato (Horizontal) qdo for impresso?   2o) Existe alguma maneira de configurar as margens de um relatório?   Atte Sérgio  
Responder

Gostei + 0

07/01/2009

Luiz Maia

Olá Sérgio, como vai?   Feliz ano novo para você também e meus sentimentos quanto a falecimento de seu parente.   1 - Para configurar o ReportViewer quanto ao formato (retrato ou paisagem) você precisa somente setar o tamanho do seu relatório no arquivo .rdlc, clicando na margem e arrastando até chegar no tamanho desejado, como na imagem abaixo que no caso o relatorio terá 21,5 centímetros na horizontal. É simples assim mesmo, não tem segredo.         2 - Para setar as margens do seu relatório, basta configurá-las no mesmo arquivo .rdlc, clicando em Report > Report Properties..., na qual abrirá a seguinte tela, navegar até a aba Layout, daí é só escolher as configurações das margens da página.       Abraços Sergio, Espero ter ajudado. Aguardo seu retorno.   Att Luiz Maia  
Responder

Gostei + 0

07/01/2009

Sergio Santos

Maia   ainda sobre este Report Viewer...   Nesta aplicação que estou montando há uma consulta de pedidos, onde o usuario coloca um periodo. Após visualizar a lista dos pedidos buscados, ele escolhe um deteminado pedido para ver seus detalhes. A partir dai ele tem a opção de imprimi-lo. Qdo clicar no botão de imprimir, o reportviewer tera q pegar o parametro que será passado pela Request.QueryString.   A impressão é unitária.   No ObjectDaTaSource no comando "where numpedido=@pedido ", não consigo passar o parametro para ele.   Estou colocando o codigo no page-load na WebForm que tem o reportviewer.     []s Sérgio
Responder

Gostei + 0

08/01/2009

Luiz Maia

Sergio,   Sete seus parametros dentro no próprio formulário do arquivo .rdlc, clicando em Report > Report Parameters, como na seguinte imagem:     Abraços Luiz Maia
Responder

Gostei + 0

08/01/2009

Sergio Santos

Maia   A briga ainda esta feia aqui comigo com o Report Viewer. Com as soluções que vc tem me passado estou progredindo.   O problema agora é com uns OBjectsDataSource "Fantasmas" que não estou sabendo como elimina-los.   Fiz um Report.dlc e na 1a. vez associei um ObjectaDataSource1 a ele. Devido a um erro de lógica, tive que mudar o DataSet e acrescentar um campo a ele, com isto, eliminei o primeiro e acrescentei o 2o. ObjectDatasouce2.   Na briga com o acerto dos Parametros, tive que mexer novamente no layout do relatório, adicionar e remover alguns campos, e com isto refazer a questão do DataSource. Por via das duvidas, elimieni o atual e criei um outro. O Qual ele criou com o nome de ObjectDaSource1 associado a um outro DataAdapter, pois, como o relatório era Mestre x Detalhe, (Itens x Pedido), tentei criar 2 Tabelas no DataSet para poder associar diferente. Acabou dando erro e não funcionando de corretamente e tentei voltar a anterior.   Observei que no HTML do arquivo ASPX, ele mostra os antigos ObjectDataSet, entro manualmente no HTML removo a definição salvo e sem eles.   Mas qdo vou na Report Viewer  Tasks , e seleciono a opção Rebind DataSources, os antigos que tinha usando aparecem.   já criei uma nova página do zero, e usei o mesmo arquivo Report.dlc e o mesmo problema acontece. Donde conclui, que esta informações ficam amarradas ao arquivo .dlc. Porém só não achei aonde remove-las.   Qdo vou no ChooseDataSource, ele mostra um janela com os Reports Data Sources, e os seus ObjectDataSource. Apenas o atual ficam associado ao DataSet, os demais, ficam associado a none.   Será que vou precisar de um caça fantamas???  rs.rs.rs   2o) - Existem alguma maneira de mandar uma imagem para vc?   Ainda estou com uma duvida em relação a parte de parametros, pois, o mesmo não esta sendo exibido no relatório, mas acata a passagem.   REM CODIGO VB           Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Dim sSQL As String
            Dim Retorno As Object             sSQL = "select RIGHT(MS000_REPRESENTANTE,6) MS000_REPRESENTANTE from MS100_PEDHEADER " _
                 & "WHERE       MS100_PEDHEADER = " & Request.QueryString("COD") & ""             Retorno = dbMS001.ExecuteScalar(sSQL, CommandType.Text)             sSQL = "SELECT  AMG_NOME " _
                 & "FROM    GD_N_DADOS_REP " _
                 & "WHERE   EQZ = " & Retorno.ToString()             Dim NomeRepre As Object
            NomeRepre = dbRS001.ExecuteScalar(sSQL, CommandType.Text)             Me.ReportViewer1.ProcessingMode = ProcessingMode.Local
        Dim varteste As String    aqui forcei a barra para ver se não seria a questão de ser string ou não
        varteste = NomeRepre.ToString()
        Dim prm(1) As Microsoft.Reporting.WebForms.ReportParameter Aqui estou definindo o array de tamanho 1           prm(0) = New Microsoft.Reporting.WebForms.ReportParameter("NomeRepresentante", varteste)
        prm(1) = New Microsoft.Reporting.WebForms.ReportParameter("NomeRepresentante", NomeRepre.ToString())         Por via das duvidas estou setando as posições 0 e 1 do array, mas mesmo assim não aparece no relatório               ReportViewer1.LocalReport.Refresh()             ReportViewer1.Visible = True
        End Sub   3o) Existe algum Manual sobre o ReportViewer que vc pudesse me indicar?   []s Sérgio    
Responder

Gostei + 0

08/01/2009

Luiz Maia

Ola Sergio,   1º) Dê um search no seu projeto pelo "ObjectDataSource", provavelmente você irá encontrar referências de DataSources no arquivo .xsd, basta retirar as linhas de código que fazem referência a eles. Mas tome cuidado para não retirar coisas necessárias, preste atenção nos blocos das tags abrindo e fechando.   Se ainda persistirem, apaga elas usando a interface do arquivo .rdlc, basta ir em Report > Data Sources e deletar conforme figura abaixo:     2º) Para enviar uma imagem basta copiar e colar (crtl c + crtl v) mesmo na caixa de texto. Como assim esta sendo exibido no relatorio mas nao acata a passagem, me explique melhor isto por favor.   3º) De referências sobre o ReportViewer:   https://www.devmedia.com.br/cursos/listcurso.asp?curso=70 ;(curso) https://www.devmedia.com.br/articles/viewcomp.asp?comp=4372&;hl=*reportviewer* (video aula com mais de 10 aulas, bem completo, caso necessite de permissão para acesso, me fale).   Aguardo seu retorno. Abraços   Luiz Maia
Responder

Gostei + 0

08/01/2009

Sergio Santos

Maia   Putz! Esta do menu, foi ótima. Se eu soubesse desta opção no menu, tinha deixado de perder umas 10 horas de trabalho... Uma verdadeira surra. Obrigaço.   1o) Ok. Qtos aos videos seria interessante.   2o) Tirando os Videos há algum livro sobre ele? Ele chega a ser semelhante ao Cristal Report? A grosso modo será a versão genérica do Cristal??   3o) Há algum video que fale sobre como controlar para que alguns componentes sejam impressos conforme uma determianda condição? Ou seja, eu tenho um 2 textBox que estão no formulário, mas que só podem aparecer em deterninada situação.  COmo seria a programação desta situação neste caso?   Muito obrigado []s Sérgio  
Responder

Gostei + 0

08/01/2009

Luiz Maia

Que bom Sergio que a dica foi útil. Quanto ao livro, não tenho um específico para te indicar não, mas na web você acha muitos tutoriais legais, pequenos e simples de compreenssão. O ReportViewer é uma versão já integrada com o Visual Studio do Report Service, são muito parecidos.   Para controlar a impressão de determinados controles você pode fazer da seguinte forma, é bem simples:   1 - Vc pode construir suas funções dentro do report. como na figura abaixo:     Código acima: Function ExceedMaxVisits(ByVal visitCount As Integer, ByVal Month As Integer, ByVal Year As Integer) As Boolean Our businesses logic dictates that we need to know if we exceed 240 visits per patient per year or 20 visits per patient per month If (Month = Nothing And Year <> Nothing) Then If visitCount > 240 Then Return True End If ElseIf (Month <> Nothing And Year <> Nothing) Then If visitCount > 20 Then Return True End If End If Return False End FunctionE depois chama-las dentro das propriedades de seus campos no formulario, veja a figura:   Codigo da propriedade:   =iif(Code.ExceedMaxVisits(Sum(Fields!Visit_Count.Value),Parameters!ServiceMonth.Value ,Parameters!ServiceYear.Value), "Red", "Black")  OU seja, vc consegue programar suas celulas da forma que desejar usando IFs e etc.Veja um exemplo de um parametro constante, no qual recebe uma expressão: Espero ter ajudado.Abraços Sergio Luiz Maia
       
Responder

Gostei + 0

09/01/2009

Sergio Santos

Maia   E qto ao meu código? o que esta de errado com ele , pois, não consigo passar fazer com queo nome do representante seja impresso no relatório.   Outra duvida, acho q para fechar esta parte de relatórios.   Como é que faço para colocar a pontuação monetárias e o "R$ ", nos valores monetários.   []s Sérgio
Responder

Gostei + 0

09/01/2009

Luiz Maia

Sergio,   E ai, blz? Para a passagem de parametros para o report vocÊ deve usar a interface do arquivo .rdlc, no qual você cria seus parâmetros dentro no próprio formulário do arquivo .rdlc, clicando em Report > Report Parameters, como na seguinte imagem (no qual já foi explicado acima):     Veja que aqui criei o parametro de entrada CodPedido, o mesmo pode ser usado para complementar uma query dentro do DataSource ou simplesmente para ser exibido dentro do relatorio, vou mostrar abaixo as duas formas:     Private Sub Carregarelatorio() Dim strConexao As String = My.Settings("StrProd").ToString Dim oConn As New SqlConnection Dim strSQL As New StringBuilder Dim oTable As New DataTable() Dim oCmd As SqlCommand = Nothing Dim strReportPath As String = "" Dim StrPathOld As String = "" Dim StrPathChange As String = ""   Try 1 passo: carregar o relat¢rio strReportPath = String.Concat(Replace(My.Application.Info.DirectoryPath(), "\bin\Debug", ""), "\RlProd.rdlc") ReportViewer1.LocalReport.ReportPath = strReportPath 2 passo: passar os dados para o relat¢rio abrindo conexÆo com o banco de dados oConn.ConnectionString = strConexao oConn.Open() definindo o SQL do relat¢rio strSQL.Append(" SELECT ") strSQL.Append(" Produto.id_prod,produto.nome_prod ") strSQL.Append(" FROM produto") strSQL.Append(" WHERE ID_prod in(@IDPROD) ") oCmd = New SqlCommand(strSQL.ToString, oConn) oCmd.CommandText = strSQL.ToString oCmd.CommandType = CommandType.Text definindo o parametro do SQL oCmd.Parameters.Add(New SqlParameter("@IDPROD", SqlDbType.Int)).Value = "3" executando o SQLCommand Dim oDataReader As SqlDataReader = oCmd.ExecuteReader(CommandBehavior.CloseConnection) converter o DataReader para DataTable oTable.Load(oDataReader) definindo o DataSource do relat¢rio Dim myReportDataSource As ReportDataSource = New ReportDataSource("dsProd", oTable) ReportViewer1.LocalReport.DataSources.Add(myReportDataSource) Catch ex As Exception System.Diagnostics.Debug.WriteLine(ex.Message) Finally liberando os objetos oConn.Dispose() oTable.Dispose() oConn = Nothing oTable = Nothing End Try     End Sub   Repare que vc não esta setando o ReportPath e nem o dataSource, sem eles não funciona.   E para exibir os parametros dentro do relatorio, use:   ="Cod do parametro = " + Parameters!codProduto.Value   Nas expressoes que vc pode criar dentro dos campos no relatorio, segue imagem:   Para formatar os campos para valores monetarios:     Espero ter ajudado.   Abraços Sergio Luiz Maia
Responder

Gostei + 0

12/01/2009

Luiz Maia

Sergio,   Conseguiu agora com o exemplo acima? Lembrando que ao usar o FormatCurrency vc ira colocar o $ na frente do valor, caso queira colocar no formato brasileiro concatene o R$ com o valor desta forma:   ="R$ " & Fields!NomeCampoBase.value   Abraços. Luiz Maia
Responder

Gostei + 0

12/01/2009

Sergio Santos

Maia   A questão do R$ já estava desconfiado disso, mas preciso saber agora a questão de como mudar de 999,999,999.10  para 999.999.999,10 , ou seja,   ", , .00"  para ". . ,00 "   Ainda sobre os relatórios...   2o) Eu não estou conseguindo fazer aparecer o botão de Impressão, no report Viewer. Até aonde em consegui, procurei e não encontrei.   3o) Ainda não consegui fechar a questão dos parametros, não sei o q estou fazendo errado. Vou te mandar daqui a pouco, tudo o que fiz em relação aos parametros.   []s Sérgio    
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar