Posts
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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