segunda-feira, 18 de maio de 2009

MANUAL 3.0 - CÓDIGO DE BARRAS PARA A CONTINGÊNCIA EM VB.NET

O novo manual de integração para a NF-e 3.0 traz vários novos ajustes a realizar na composição da DANFE e deverá entrar em vigor a partir de 31/08/2009.

Uma das novas alterações diz respeito a impressão da DANFE no modo de contigência que, com esse novo manual, pedirá a emissão de um código de barras próprio para os dados da DANFE em contigência.

Esse novo código de barras deverá ser impresso abaixo do código de
barras da nf-e
, conforme mostrado na figura abaixo:




O campo responsável pela emissão desse código de barras será a tag TpEmis dentro do XML da Nf-e. Se o campo TpEmis for diferente de 1 indicará a emissão de uma DANFE em modo de Contingência.

O campo DADOS DA NF-e contêm a composição da chave em código de barras. Ao passar a leitora sobre o segundo código de barras, o resultado de valor esperado deverá ser o que está contido dentro do campo DADOS da NF-e. Quando a DANFE foi emitida em modo normal, o nome desse campo deverá ser PROTOCOLO DE AUTORIZAÇÃO DE USO e deverá conter o referido protocolo de autorização da Nf-e.


A composição do campo DADOS DA NF-e pode ser vista no código VB.Net abaixo:

'Compõe a chave para o código de barras da Danfe em Contigência, se for necessário
DiadaEmissao = Mid(myRow2.dEmi, 1, 2)
TipodeEmissao = myRow2.tpEmis
CodigoUF = DigitoUF(myRow2.destUF)
DadosdaNfe = Trim(CodigoUF + TipodeEmissao + myRow2.destCNPJ + ValorvNF + "2" + "2" + DiadaEmissao)
DigitoDadosNfe = Calculo_DV11(DadosdaNfe)

'Inserção do dígito verificador do módulo 11 para a Nf-e
DadosdaNfe = DadosdaNfe + Trim(DigitoDadosNfe)



A função Calculo_DV11 retorna o cálculo em módulo 11 para o digito verificador dos dados da NF-e e é apresentada abaixo:

Function Calculo_DV11(ByVal strNumero As String) As String

'declara As variáveis
Dim intContador As Integer
Dim intNumero As Integer
Dim intTotalNumero As Integer
Dim intMultiplicador As Integer
Dim intResto As Integer
Dim ValorDigito As Integer

' se nao for um valor numerico sai da função
If Not IsNumeric(strNumero) Then
Calculo_DV11 = ""
Exit Function
End If

'inicia o multiplicador
intMultiplicador = 2

'pega cada caracter do numero a partir da direita
For intContador = Len(strNumero) To 1 Step -1

'extrai o caracter e multiplica pelo multiplicador
intNumero = Val(Mid(strNumero, intContador, 1)) * intMultiplicador

intMultiplicador = intMultiplicador + 1

' se o resultado for maior que nove soma os algarismos do resultado
If intMultiplicador > 9 Then
intMultiplicador = 2
End If

'soma o resultado para totalização
intTotalNumero = intTotalNumero + intNumero

Next

'calcula o resto da divisao do total por 11
intResto = intTotalNumero Mod 11

ValorDigito = 11 - intResto
'verifica as exceções ( 0 -> DV=0 1 -> DV=0 e retorna o DV
Select Case ValorDigito
Case 0
Calculo_DV11 = "0"
Case 1
Calculo_DV11 = "0"
Case Else
Calculo_DV11 = Str(ValorDigito)
End Select

End Function


Após a chave ser composta, a geração do código de barras poderá então ser realizada, com um código simples de chamada para a geração do código de barras:


'Nf-e em contingência / Gerar código de Barras dos dadosdaNFE
If TipodeEmissao <> "1" Then

'Cria o código de barras para a Danfe em Contingência, se houver
'Pôr o código de barras em oculto, se não houver o que gerar
myRow2.DadosNfe = DadosdaNfe
Dim Barcode2 As New BarcodeLib.Barcode(DadosdaNfe, BarcodeLib.TYPE.CODE128C)
PictureBox3.Image = Barcode2.Encode(BarcodeLib.TYPE.CODE128C, DadosdaNfe, 300, 150)
Barcode2.SaveImage("C:\NF-E\Barras\BARRAS2.JPG", BarcodeLib.SaveTypes.JPG)

Dim fs As New FileStream("C:\NF-E\Barras\BARRAS2.JPG", FileMode.Open)
Dim br As New BinaryReader(fs)
myRow2.Imagem2 = br.ReadBytes(br.BaseStream.Length)

br.Close()
fs.Close()

br = Nothing
fs = Nothing

Else
myRow2.Imagem2 = Nothing

End If


O campo Imagem2 deverá ser criado para receber o código de Barras da DANFE impressa em contigência.


Sorte a todos!!



8 comentários:

Unknown disse...

Bom dia...A respeito do cod. de barras de contigencia da NFE o campo CNPJ e UF se referem ao emitente da NFE ou o cliente que está indicado na nota do NFE? Pq no layout esta UF do destinatário do Documento fiscal e você pelo que vi colocou o CNPJ do Emissor da NFe, tá correto?
Obrigada!

I love Helle Berry. disse...

Vanessa,


A descrição da composição do campo DADOS DA NF-e está na página 76 do Manual, no item 6.3 Representação dos dados adicionais.

Confira na página como deve ser composta a chave.

Nesta página está explicado que deve ser o cUF e o CNPJ do Destinatário.

Forte Abraço.

Leonardo

I love Helle Berry. disse...

Você está certa, Vanessa.

Estava realmente o CNPJ do emitente e já fiz a correção na postagem.

Já está corrigido no código na página.

Unknown disse...

E agora uma dúvida...e se o destinatario for pessoa fisica que so tem CPF? como fica a chave???

I love Helle Berry. disse...

O manual informa na página 96 que, quando o cliente for pessoa física você deve informar a tag CPF em vez da CNPJ. Na página 96, é informado que o campo deve ser informado com os zeros não significativos.

Ou seja, se for cpf, você põe o CPF no lugar do CNPJ e tudo estará certo.

Unknown disse...

Manoel...então acho que fiz certo.... Obrigada!!!Foi só uma dúvida que surgiu.....

mlb disse...

E se o destinatario for exportacao??

que codigo voce vai informar para cUF ?? "EX" !!!

Como vai ficar o codigo de Barras???

esses caras so complicam , estou montando a danfe a partir do xml da nfe , e esse campo nao existe na nfe !!!!

como é que vou fazee ???

attMarcio

Unknown disse...

Segundo minha colega aqui, no campo CUF você deve colocar EX que indica EXTERIOR
na NF-e.

Obtive esta resposta de um dos órgãos de São Paulo:

Como emito uma NFe para um Cliente do Exterior ?

Para os clientes do exterior, a NFe/RTS deverá ser
emitido normalmente, porem o sistema não aceitara a
informação do endereço do exterior. Devido a isso,
no momento do cadastro, o Prestador deverá informar
o seu próprio endereço, para a efetivação do cadastro,
e destacar no campo de preenchimento livre da NFe/RTS,
o correto endereço e dados do Tomador de Serviço.

No momento da impressão da NFe os campos de endereço
serão impressos com a seguinte mensagem "Vide abaixo",
aonde deverá constar os dados corretos do tomador.
No caso de envio de RTS em lotes, o procedimento
é o mesmo, apenas observando os devidos campos
para as informações;

fonte:http://74.125.47.132/search?q=cache:dTy8Vm7JcK4J:nfe.santoandre.sp.gov.br/perguntas.aspx+nf-e+%2B+endere%C3%A7o+no+exterior&cd=2&hl=pt-BR&ct=clnk&gl=br


Eis outras informações que obtive de São Paulo ainda:


3.5.a. Transmissão e retransmissão do arquivo – entidades com acesso ao Serpro

Observe-se que, eficazmente, uma vez verificada uma
operação interestadual, a SEFAZ da unidade federativa
do emitente também deverá transmitir a NF-e para

(a) a unidade de destino das mercadorias, no caso de operação interestadual;
(b) a unidade federada onde deva se processar o embarque de mercadoria na saída para o exterior;
(c) a unidade federada de desembaraço aduaneiro, tratando-se de operação
de importação de mercadoria ou bem do exterior;

(d) a Superintendência da Zona Franca de Manaus – SUFRAMA, quando a NF-e tiver como destinatário
pessoa localizada nas áreas incentivadas.

fonte: http://jus2.uol.com.br/doutrina/texto.asp?id=10920&p=2

Boa sorte!!!

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