quarta-feira, 8 de abril de 2009

VB.NET: DANFE EM CRYSTAL E CÓDIGO DE BARRAS 128C

A Danfe pode ser gerada em Crystal 8.5 e depois migrada para dentro do Vb.NET ou,
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 - Properties e clicar em ADD, apontando para a pasta onde se encontra o barcodelib.dll.

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:

Nenhum disse...

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

UTE disse...

Você conseguiu gerar o DANFE com várias páginas e variedades de itnes e dados adicionais dinamicamente, somente utilizando Crystal em VB.NET?

Anônimo disse...

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.

Anônimo disse...

Manoel , cara.. seu post me ajudou di mais aqui em um projeto que estou desenvolvendo!!

Tks, Amigo..

Sérgio disse...

Amigo
seu post em muito me ajudará.Mas os links estao invalidos.Meu email é srequejo@hotmail.com
Agradeço sua ajuda
Abracos

*Katy* disse...

Os Links são inválidos, teria como enviar por e-mail?

katiane@intelecta.com.br

Anônimo disse...

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

Eduardo Oliveira Goulart disse...

olá, os links estao invalidos,


poderia me enviar por email

eduogou@gmail.com

Anônimo disse...

também gostaria destes links por email obrigado

kamikai@gmail.com

UM APLICATIVO PARA LEITURA DEVOCIONAL ANUAL DA BIBLIA EM ANDROID

Olá, pessoal!  Este novo projeto foi criado em Visual Studio 2019 em C#.Net com o Xamarin. Já está disponível no Google Play para vocês baix...