segunda-feira, 28 de março de 2011

GERANDO O XML DA NFe EM VISUAL BASIC 6


Olá, Pessoal!! Vamos responder a algumas perguntas acercas de linguagens como Visual Basic 6 e Delphi 7. Sim, para estas duas linguagens se você não tiver nenhum componente pronto para criar o XML de sua NFe, deve fazer todo o código na unha, linha por linha!!!


Basicamente é nisso que se resume para muitos a criação do XML da NFe eletrônica, já que há grande variações de empresa para empresa - para não dizer de uma área de TI para outra área de TI - em diferentes empresas. Isso também se adequa aos padrões necessários a serem adotados para cada empresa em relação à sua atividade comercial: há certas peculiaridades para o grupo de automotivos que não existem para as empresas de refrigerantes, assim como o XML de uma indústria de componentes eletrônicos diverge de uma indústria de alimentos. Se sua empresa gera mais de dez notas fiscais com quinze itens cada uma por dia fica difícil você usar os aplicativos gratuitos fornecidos pelo site do SPED ou a Sefaz de seu estado.



Antes de mais nada: É CRUCIAL QUE VOCÊ ENTENDA DE XML E QUE TENHA O MANUAL DO CONTRIBUENTE PARA A GERAÇÃO DA NOTA FISCAL ELETRÔNICA! ANTES DE USAR O CÓDIGO ABAIXO, LEIA TODO O MANUAL E ENTENDA CADA TAG A SER GERADA PARA A SUA NOTA FISCAL ELETRÔNICA. TAMBÉM É CRUCIAL QUE VOCÊ ESTEJA PRÓXIMO A ÁREA FISCAL E ENTENDA CADA TAG QUE DEVA SER GERADA PARA A SUA EMPRESA E PARA A ATIVIDADE COMERCIAL ONDE A MESMA ESTÁ INSERIDA. SEM ISSO, SEU TRABALHO SERÁ EM VÃO E VOCÊ DEVERÁ FAZER NOVOS AJUSTES POSTERIORES PARA INSERIR ALGUMA TAG QUE ESQUECEU E É NECESSÁRIA!!



O exemplo abaixo é um dos muitos existentes na internet e foi extraído do site do VB Mania a título ilustrativo. O código completo não está sendo fornecido porque como todo bom desenvolvedor sabe bolo pronto nunca sai no ponto!

ATENÇÃO: O código abaixo ficará estranho por estar sendo postado aqui. Os links de XML são realmente mal-interpretados pelo blogger e precisam ser corrigidos linha a linha. Não farei isso aqui. Se desejar, consulte o link para a página onde os mesmos foram postados no VB Mania ou pode baixar do link abaixo (por enquanto!):


http://www.4shared.com/document/ilBKUDPt/XML_em_VB6.html



Vamos lá:


'Abre o Arquivo para Criação do XML


'----------------------------------


Open strArquivo For Output As #1


'Cabeçalho do Arquivo


'--------------------

With rstCabec .MoveFirst ' Print #1, "" 'Chr(239) & Chr(187) & Chr(191) Print #1, "" & " Print #1, "

'Chave da NFe '-------------------- Print #1, " 'Cabeçalho da NFe '------------------- Print #1, "" Print #1, " " & .Fields("xIdUF").Value & "" Print #1, " " & "0" & .Fields("xRandomico").Value & "" Print #1, " " & UCase(.Fields("xNatureza").Value) & "" Print #1, " " & .Fields("xFormaPagto").Value & "" Print #1, " " & .Fields("xModelo").Value & "" Print #1, " " & .Fields("xSerie").Value & "" Print #1, " " & .Fields("xidNFe").Value & "" Print #1, " " & .Fields("xDataEntradaSaida").Value & "" Print #1, " " & .Fields("xDataEntradaSaida").Value & "" Print #1, " " & .Fields("xIdTipoNF").Value & "" Print #1, " " & .Fields("xIdMunicipio").Value & "" Print #1, " " & 1 & "" Print #1, " " & .Fields("xTipoEmissao").Value & "" Print #1, " " & Right(strChaveNFe, 1) & "" Print #1, " " & "2" & "" Print #1, " " & .Fields("xFinalidade").Value & "" Print #1, " " & "0" & "" Print #1, " " & "1.10" & "" Print #1, "" '---------------------------------------------------------------------------------------------------- 'Dados Emitente '---------------------------------------------------------------------------------------------------- Print #1, "" Print #1, " " & .Fields("xCNPJ") & "" Print #1, " " & .Fields("xEmitRazaoSocial").Value & "" Print #1, " " Print #1, " " & .Fields("xEmitLogradouro").Value & "" Print #1, " " & .Fields("xEmitNumero").Value & "" Print #1, " " & .Fields("xEmitBairro").Value & "" Print #1, " " & .Fields("xEmitIdMunicipio").Value & "" Print #1, " " & .Fields("xEmitMunicipio").Value & "" Print #1, " " & .Fields("xEmpresaUF").Value & "" Print #1, " " & .Fields("xEmitCEP").Value & "" Print #1, " " & "1058" & "" Print #1, " " & "Brasil" & "" Print #1, " " & .Fields("xEmitTelefone").Value & "" Print #1, " " Print #1, " " & .Fields("xEmitIE").Value & "" Print #1, "" '---------------------------------------------------------------------------------------------------- 'Dados Destinatario '---------------------------------------------------------------------------------------------------- Print #1, "" Print #1, " " & .Fields("xCNPJ") & "" Print #1, " " & .Fields("xDestRazaoSocial").Value & "" Print #1, " " Print #1, " " & .Fields("xDestLogradouro").Value & "" Print #1, " " & .Fields("xDestNumero").Value & "" If Len(.Fields("xDestComplemento").Value) > 0 Then Print #1, " " & .Fields("xDestComplemento").Value & "" End If Print #1, " " & .Fields("xDestBairro").Value & "" Print #1, " " & .Fields("xDestIdMunicipio").Value & "" Print #1, " " & .Fields("xDestMunicipio").Value & "" Print #1, " " & .Fields("xDestUF").Value & "" Print #1, " " & .Fields("xDestCEP").Value & "" Print #1, " " & .Fields("xDestIdPais") & "" Print #1, " " & .Fields("xDestPais") & "" Print #1, " " & .Fields("xDestTelefone").Value & "" Print #1, " " Print #1, " " & .Fields("xDestIE").Value & "" If Len(.Fields("xDestSuframa").Value) > 0 Then Print #1, " " & .Fields("xDestSuframa").Value & "" End If If Len(.Fields("xDestCNAE").Value) > 0 Then Print #1, " " & .Fields("xDestCNAE").Value & "" End If Print #1, "" '---------------------------------------------------------------------------------------------------- End With 'Dados dos Produtos '------------------ With rstItem .MoveFirst Do While .EOF = False DoEvents Print #1, "" Print #1, " " Print #1, " " & .Fields("xCodigo").Value & "" Print #1, " " & .Fields("xCodigoEAN").Value & "" Print #1, " " & .Fields("xDescrProduto").Value & "" If Len(Replace(.Fields("xCodigoNCM").Value, ".", "")) > 0 Then Print #1, " " & .Fields("xCodigoNCM").Value & "" End If Print #1, " " & "0" & "" Print #1, " " & .Fields("xCFOP").Value & "" Print #1, " " & .Fields("xUnidade").Value & "" Print #1, " " & .Fields("xQuantidade").Value & "" Print #1, " " & .Fields("xPrecoUnitario").Value & "" Print #1, " " & .Fields("xTotalProduto").Value & "" Print #1, " " & .Fields("xCodigoEAN").Value & "" Print #1, " " & .Fields("xUnidade").Value & "" Print #1, " " & .Fields("xQuantidade").Value & "" Print #1, " " & .Fields("xPrecoUnitario").Value & "" 'Dados da Importação '-------------------- If Len(rstCabec.Fields("xDINumero").Value) > 0 Then Print #1, " " Print #1, " " & rstCabec.Fields("xDINumero").Value & "" ' & .Fields("xNumeroDI") & "" Print #1, " " & rstCabec.Fields("xDIDataRegistro").Value & "" ' & Format(.Fields("xDataRegistroDI"), "YYYY-mm-dd") & "" Print #1, " " & rstCabec.Fields("xDILocalDesembaraco").Value & "" ' & .Fields("xLocalDesemb") & "" Print #1, " " & rstCabec.Fields("xDIUFDesembaraco").Value & "" ' & .Fields("xUFDesemb") & "" Print #1, " " & rstCabec.Fields("xDIDataDesembaraco").Value & "" ' & Format(.Fields("xDataDesemb"), "YYYY-mm-dd") & "" Print #1, " " & rstCabec.Fields("xDICodExportador").Value & "" ' & rstCabec.Fields("xCodExportador") & "" If Len(rstCabec.Fields("xNumeroAD").Value) > 0 Then Print #1, " " Print #1, " " & rstCabec.Fields("xNumeroAD").Value & "" ' & .Fields("xNumeroAdicao").Value & "" Print #1, " " & rstCabec.Fields("xItemAD").Value & "" '& .Fields("xSequenciaAdicao").Value & "" Print #1, " " & rstCabec.Fields("xFabricanteAD").Value & "" '& .Fields("xCodFabricante").Value & "" 'Verifica se tem desconto na DI '------------------------------ If rstCabec.Fields("xDescontoAD") > 0 Then Print #1, " " & Replace(Format(rstCabec.Fields("xDescontoAD"), "0.00"), ",", ".") & "" End If Print #1, " " '------------------------------ End If Print #1, " " End If Print #1, " " '-------------------------------------------------------------------------------------------------------- 'Destacamento dos Impostos '------------------------- Print #1, " " 'ICMS '--------- Print #1, " " Print #1, " Print #1, " " & rstCabec.Fields("xICMSOrigem") & "" Print #1, " " & .Fields("xSitTrib").Value & "" If .Fields("xSitTrib").Value = "00" Then 'Tributada Integralmente Print #1, " " & rstCabec.Fields("xICMS_Modalidade").Value & "" Print #1, " " & rstCabec.Fields("xI

O código acima pode também ser encontrado em:


http://www.vbmania.com.br/pages/index.php?varModulo=Forum&varMethod=abrir&varID=342709


Sucesso mais uma vez a todos!!




By


Leonardo Metelys


leo_florindo@hotmail.com

3 comentários:

Unknown disse...

Como obtenho o restante do código pois ele está coma última linha incompleta.

I love Helle Berry. disse...

Olá, Waldo!

Conforme dito, veja o código completo no link abaixo:

http://www.vbmania.com.br/pages/index.php?varModulo=Forum&varMethod=abrir&varID=342709

I love Helle Berry. disse...

Olá, Waldo!

Conforme dito, veja o código completo no link abaixo:

http://www.vbmania.com.br/pages/index.php?varModulo=Forum&varMethod=abrir&varID=342709

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