se você preferir, totalmente criada dentro do VB.NET 2008 com a ferramenta Crystal
ali contida - muito mais poderosa e fácil de trabalhar.
Usar a DANFE em VB.NET 2008 possibilita utilizar um DATASET para gerar a leitura do arquivo XML da NF-e.
Usando o VB.NET 2008
É preciso acrescentar ao form o uso das bibliotecas necessárias:
Imports System.Xml
Imports System.IO
Imports System.Text
Imports System.Drawing
Imports System.Collections
Imports System.ComponentModel
Imports System.Drawing.Text
Cada uma delas será necessária para o projeto em si
Isso se fará necessário quando o fornecedor da empresa enviar em vez da DANFE em pdf o arquivo XML propriamente dito. Muitas empresas além da DANFE impressa que acompanha a mercadoria podem disponibilizar o arquivo XML via e-mail da nf-e emitida.
LANÇANDO OS DADOS DO XML EM UM DATASET
Crie o DATASET normalmente e defina os campos do modo apropriada para receber os
dados do arquivo XML
No botão de impressão, você poderá definir os dados do seguinte modo:
Dim myDs1 As New DsXML1()
Dim myRow2 As DsXML1.DtDsXML1Row
Dim reader As XmlTextReader = New XmlTextReader(TxtArquivo.Text)
'DsXML1 é o nome do DATASET com o campos da XML
'abrindo o DATASET
myRow2 = myDs1.DtDsXML1.NewDtDsXML1Row
'Lendo o XML
Do While (reader.Read())
'Fazendo a seleção dos campos
Select Case reader.NodeType
Case XmlNodeType.Element 'Exibir o início do elemento.
If reader.HasAttributes Then 'Se existirem atributos
While reader.MoveToNextAttribute()
If reader.Name = "Id" Then
myRow2.IdChave = Mid(reader.Value, 4)
myRow2.Id = ValorTexto
endif
If reader.Name = "emit" Then
SelecionarEmitente = True
SelecionarDestinatario = False
End If
'----------------------------------------------------------
'Dados do EMITENTE
If SelecionarEmitente = True Then
If reader.Name = "CNPJ" Then
myRow2.EmitCNPJ = reader.ReadString
End If
If reader.Name = "IE" Then
myRow2.EmitIE = reader.ReadString
End If
If reader.Name = "xNome" Then
myRow2.EmitxNome = reader.ReadString
End If
If reader.Name = "xLgr" Then
myRow2.EmitxLgr = reader.ReadString
End If
If reader.Name = "xMun" Then
myRow2.EmitxMun = reader.ReadString
End If
If reader.Name = "UF" Then
myRow2.EmitUF = reader.ReadString
End If
If reader.Name = "CEP" Then
myRow2.EmitCEP = reader.ReadString
End If
End If
...
...
End Select
Loop
'Fecha o XML
reader.Close()
myDs1.DtDsXML1.AddDtDsXML1Row(myRow2)
'Imprimindo a DANFE
Dim caminho_imagem As String
caminho_imagem = "C:\NF-E\Barras\BARRAS.JPG"
Dim myRelatorio As New rptIAM()
myRelatorio.SetDataSource(myDs1)
myRelatorio.ParameterFields(0).AllowCustomValues = True
myRelatorio.ParameterFields(0).CurrentValues.AddValue(caminho_imagem)
'myRelatorio.SetParameterValue(0, caminho_imagem)
Me.CrvXml.ReportSource = myRelatorio
Me.CrvXml.Visible = True
TxtArquivo.Text = ""
Seguinte estes passos, você poderá imprimir a DANFE totalmente jogando os dados para um DATASET e associando este DATASET ao relatório em Crystal.
CÓDIGO DE BARRAS 128C para a NF-e
O BarcodeLib pode ser encontrado nas páginas do CodeProject (http://www.codeproject.com/KB/graphics/BarcodeLibrary.aspx), que se trata de uma área de projetos em várias linguagens da plataforma Vb.Net. O dll gerado pelo projeto
mostrado permite gerar o código de barras 128C no formato desejado pela NF-e.
Para integrar a dll no seu Projeto em Vb.Net você simplesmente precisa acessar em
seu projeto o menu Project -
Após acrescentar a DLL, acrescente a mesma à sua lista de bibliotecas no
início do form:
Imports BarcodeLib
Para gerar o código de barras do código da NF-e, basta usar o seguinte código:
Dim Barcode As New BarcodeLib.Barcode(ValorTexto, BarcodeLib.TYPE.CODE128C)
PictureBox2.Image = Barcode.Encode(BarcodeLib.TYPE.CODE128C, ValorTexto, 300, 150)
Barcode.SaveImage("C:\NF-E\Barras\BARRAS.JPG", BarcodeLib.SaveTypes.JPG)
Dim fs As New FileStream("C:\NF-E\Barras\BARRAS.JPG", FileMode.Open)
Dim br As New BinaryReader(fs)
myRow2.Imagem = br.ReadBytes(br.BaseStream.Length)
br.Close()
fs.Close()
br = Nothing
fs = Nothing
'myRow2 é um DATASET no qual está sendo jogado os dados da XML. Defina o
'campo que receberá o código de barras como sendo do tipo byte. No caso,
'o campo no dataset se chama Imagem
Após lançar a imagem dentro do campo imagem, basta arrasta este campo para a
área onde o código deverá ser impresso que a imagem será apresentada na visualização
do relatório
Arquivos disponíveis:
DANFE em Vb.NEt 2008
http://www.4shared.com/file/97470303/39ecd635/Danfe_VBNet.html
Danfe em Crystal 8.5
http://www.4shared.com/file/97468171/63f3f4ef/Danfe_Layout.html
BarcodeLib
http://www.4shared.com/file/97468816/a41cfd45/BarcodeLib.html
9 comentários:
Amigo, gostaria de saber como encontro os tipos: DsXML1 e DtDsXML1 referenciados no trecho abaixo...
'-------------------------------
Dim myDs1 As New DsXML1()
Dim myRow2 As DsXML1.DtDsXML1Row
Dim reader As XmlTextReader = New XmlTextReader(TxtArquivo.Text)
'DsXML1 é o nome do DATASET com o campos da XML
'abrindo o DATASET
myRow2 = myDs1.DtDsXML1.NewDtDsXML1Row
'-------------------------------
Você conseguiu gerar o DANFE com várias páginas e variedades de itnes e dados adicionais dinamicamente, somente utilizando Crystal em VB.NET?
Amigo vc ja tem uma ideia como enviar o XML na versao 2.0 ? mudou totalmente a forma de envia, ele pede agora um XMLNODE e nao conseguir colocar o xml num NODE, parece besteira isso, mas realmente nao consegui.
Manoel , cara.. seu post me ajudou di mais aqui em um projeto que estou desenvolvendo!!
Tks, Amigo..
Amigo
seu post em muito me ajudará.Mas os links estao invalidos.Meu email é srequejo@hotmail.com
Agradeço sua ajuda
Abracos
Os Links são inválidos, teria como enviar por e-mail?
katiane@intelecta.com.br
Manuel (ou algum participante deste forum), como os links estão inválidos, alguém poderia me enviar os arquivos por email?
Grato,
Julio
email: julio@carreiradasilva.com
olá, os links estao invalidos,
poderia me enviar por email
eduogou@gmail.com
também gostaria destes links por email obrigado
kamikai@gmail.com
Postar um comentário