DESSERIALIZANDO - XML - CLASSES
Acho que ele usou o [Ô]xsd[Ô] em [Ô]Program Files\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools[Ô]
Exemplo:
xsd E:\Teste
fe\schemas\NFe
fe_v3.10.xsd E:\Teste
fe\schemas\NFe\xmldsig-core-schema_v1.01.xsd /l:VB /c /n:teste /edb /o:[Ô]E:\TesteNFE[Ô]
Foi isso mesmo KERPLUNK?
Citação::
:
Como diria Jack, o estripador: Vamos por partes.
Você entende o que esse código faz?
hsuhsushuashas,
entendo, ele armazena todas os dados do XML. qnd faz a desserialização.
porem, não consegui adaptar ao meu codigo conforme seu video.
agora, tava pensando se eu achasse um XML Completaço, eu resolveria tudo. pq eu criaria no VIsual Studio todas as classe no Cole Special.
oq vc me surgere Kerplunk?
Amigo, essas classes que passei SÃO completas. Ali tem TODOS os campos e classes disponÃveis para a NFe. O que você não entendeu ainda é que o processo não é à partir de um XML. O que está fazendo errado ai da é usar sua classe atual e não essa que passei. Preencha os dados nela e serialize ela.
Citação::
Então, eu aprendi com o KERPLUNK,
Tive esse mesmo problema mas criei as classes que faltavam tudo na unha mesmo, peguei o manual da Nfe e observei as que faltavam e criei, alguma coisa deve ter ficado de fora.
Disponibilizei um arquivo aqui no vbmania com essa classe que criei.
KERPLUNK,
Onde encontrou essa classe, se na época eu tivesse, teria sido mais fácil, Obrigado.
olhando assim por cima, percebi que a unica diferença esta no nome dados as classes, exemplo: TNFeInfNFeTranspTransporta e eu tenho NFeInfNFeTranspTransporta.
Classe que disponibilizei
Isso foi gerado à partir dos modelos XSD disponÃveis no portal da NFe , não digitei uma linha de código sequer, usando a ferramenta XSD.
XSD é um modelo de como as classes devem ser criadas. Existem várias diferentes maneiras de se fazer isso, a usada pela secretaria da fazenda na NFe se chama Venetian Blind. Você pode criar um esquema XSD para qualquer classe, mesmo as suas. A aplicação disso é justamente a padronização de dados, para certificar que os dados serão sempre iguais tanto para quem envia quanto para quem recebe. Digamos que você tenha a classe:
public class Cliente
{
public int Codigo {get; set;}
public string Nome {get; set;}
public DateTime? DataCadastro {get; set;}
public bool Ativo {get;set;}
}
Se você instanciar a classe e serializar, você terá um XML assim:
<Cliente>
<Codigo>99</Codigo>
<Nome>Paulinho da Silva</Nome>
<DataCadastro>2002-09-24+06:00</DataCadastro>
<Ativo>true</Ativo>
</Cliente>
O XSD baseado nesse XML seria:
<xs:schema attributeFormDefault=[Ô]unqualified[Ô] elementFormDefault=[Ô]qualified[Ô] xmlns:xs=[Ô]http://www.w3.org/2001/XMLSchema[Ô]>
<xs:element name=[Ô]Cliente[Ô] type=[Ô]ClienteType[Ô]/>
<xs:complexType name=[Ô]ClienteType[Ô]>
<xs:sequence>
<xs:element type=[Ô]xs:byte[Ô] name=[Ô]Codigo[Ô]/>
<xs:element type=[Ô]xs:string[Ô] name=[Ô]Nome[Ô]/>
<xs:element type=[Ô]xs:date[Ô] name=[Ô]DataCadastro[Ô]/>
<xs:element type=[Ô]xs:boolean[Ô] name=[Ô]Ativo[Ô]/>
</xs:sequence>
</xs:complexType>
</xs:schema>
Se você rodar a ferramenta XSD sobre esse esquema, você criará uma classe assim:
//------------------------------------------------------------------------------
// <auto-generated>
// O código foi gerado por uma ferramenta.
// Versão de Tempo de Execução:4.0.30319.42000
//
// As alterações ao arquivo poderão causar comportamento incorreto e serão perdidas se
// o código for gerado novamente.
// </auto-generated>
//------------------------------------------------------------------------------
using System.Xml.Serialization;
//
// This source code was auto-generated by xsd, Version=4.6.1055.0.
//
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute([Ô]xsd[Ô], [Ô]4.6.1055.0[Ô])]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute([Ô]code[Ô])]
[System.Xml.Serialization.XmlRootAttribute([Ô]Cliente[Ô], Namespace=[Ô][Ô], IsNullable=false)]
public partial class ClienteType {
private sbyte codigoField;
private string nomeField;
private System.DateTime dataCadastroField;
private bool ativoField;
/// <remarks/>
public sbyte Codigo {
get {
return this.codigoField;
}
set {
this.codigoField = value;
}
}
/// <remarks/>
public string Nome {
get {
return this.nomeField;
}
set {
this.nomeField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(DataType=[Ô]date[Ô])]
public System.DateTime DataCadastro {
get {
return this.dataCadastroField;
}
set {
this.dataCadastroField = value;
}
}
/// <remarks/>
public bool Ativo {
get {
return this.ativoField;
}
set {
this.ativoField = value;
}
}
}
Repare que a estrutura da classe é a mesma, a tipagem é a mesma e também a maneira de usar. O que está [Ô]a mais[Ô], são as DataAnnotations, que não farão diferença alguma quanto ao uso do XML, mesmo o nome da classe em si estando diferente, repare a que a DataAnnotation especifica que o elemento no XML é chamado [Ô]Cliente[Ô], exatamente como no XML original. Portanto, serializando e desserializando tanto da classe original quanto da gerada com o XSD será um processo transparente e normal, não afetando de maneira alguma nenhum dos processos.
esse lance ai do XSD eu não entendi, mais o resto ja sei kkkkk, pelo seu video.
no caso kerplunk ja importei suas classes. ficaria assim?
Dim ser As New XmlSerializer(GetType(cls_Kerplunk.TNFe))
Dim textReader As TextReader = DirectCast(New StreamReader(txtArquivo.Text), TextReader)
Dim reader As New XmlTextReader(textReader)
reader.Read()
Dim nota As cls_Kerplunk.TNFe = DirectCast(ser.Deserialize(reader), cls_Kerplunk.TNFe)
fiz o teste debugei e deu erro, não esta importando nenhum XML.
da erro nessa linha Dim nota As cls_Kerplunk.TNFe = DirectCast(ser.Deserialize(reader), cls_Kerplunk.TNFe)
[c] Dim ser As New XmlSerializer(GetType(Ler_XML_NFe.nfeProc))
Dim textReader As TextReader = DirectCast(New StreamReader(txtArquivo.Text), TextReader)
Dim reader As New XmlTextReader(textReader)
reader.Read()
Dim nota As Ler_XML_NFe.nfeProc = DirectCast(ser.Deserialize(reader), Ler_XML_NFe.nfeProc)
txt_Numero_NotaFiscal.Text = nota.NFe.infNFe.ide.nNF
txt_Serie.Text = nota.NFe.infNFe.ide.serie
txt_Modelo.Text = nota.NFe.infNFe.ide.mod
txt_NaturezaOperacao.Text = nota.NFe.infNFe.ide.natOp
mkb_DataEmissao.Text = CDate(nota.NFe.infNFe.ide.dhEmi)
txt_Logradouro_Emitente.Text = nota.NFe.infNFe.emit.enderEmit.xLgr
txt_Cidade_Emitente.Text = nota.NFe.infNFe.emit.enderEmit.xMun
txt_UF_Emitente.Text = nota.NFe.infNFe.emit.enderEmit.UF
txt_Cep_Emitente.Text = nota.NFe.infNFe.emit.enderEmit.CEP
Try
TelFornecedor = nota.NFe.infNFe.emit.enderEmit.fone
Catch ex As Exception
TelFornecedor = Nothing
End Try
If TelFornecedor <> [Ô][Ô] Then
txt_Telefone_Emitente.Text = TelFornecedor
End If
txt_Bairro_Emitente.Text = nota.NFe.infNFe.emit.enderEmit.xBairro
txt_Numero_Emitente.Text = nota.NFe.infNFe.emit.enderEmit.nro
Complement_emitent = nota.NFe.infNFe.emit.enderEmit.xCpl
txtCodMunicipio.Text = nota.NFe.infNFe.emit.enderEmit.cMun
[ô]*****************************************************************************
[ô]CNPJ, INS.ESTD. REGIME DO EMITENTE
txt_Cnpj_Emitente.Text = nota.NFe.infNFe.emit.CNPJ
txt_RazaoSocial_Emitente.Text = nota.NFe.infNFe.emit.xNome
txt_Ins_Estadual_Emitente.Text = nota.NFe.infNFe.emit.IE
_CRT_ = nota.NFe.infNFe.emit.CRT
If _CRT_ = [Ô]1[Ô] Then
Me.lbl_regime_tributacao.Text = [Ô]1-SIMPLES NACIONAL[Ô]
ElseIf _CRT_ <> [Ô]1[Ô] Then
Me.lbl_regime_tributacao.Text = [Ô]2-EMPRESA NORMAL[Ô]
End If
[ô]***************************************************************
[ô]**DADOS DOS PRODUTOS
Dim AddGrid As Integer
For AddGrid = 0 To nota.NFe.infNFe.det.Count - 1
Dim V_vProd As Double = Format(CType(Replace(nota.NFe.infNFe.det(AddGrid).prod.vProd, [Ô].[Ô], [Ô],[Ô]), Double))
dgv_Produtos_NotaFiscal.Rows.Add()
dgv_Produtos_NotaFiscal.Rows.Item(AddGrid).Cells(0).Value = nota.NFe.infNFe.det(AddGrid).prod.cProd
dgv_Produtos_NotaFiscal.Rows.Item(AddGrid).Cells(1).Value = nota.NFe.infNFe.det(AddGrid).prod.xProd.ToUpper
dgv_Produtos_NotaFiscal.Rows.Item(AddGrid).Cells(2).Value = nota.NFe.infNFe.det(AddGrid).prod.NCM
dgv_Produtos_NotaFiscal.Rows.Item(AddGrid).Cells(4).Value = nota.NFe.infNFe.det(AddGrid).prod.CFOP
If Not nota.NFe.infNFe.det(AddGrid).prod.vOutro Is Nothing Then
dgv_Produtos_NotaFiscal.Rows.Item(AddGrid).Cells(20).Value = Replace(nota.NFe.infNFe.det(AddGrid).prod.vOutro, [Ô].[Ô], [Ô],[Ô])
Else
dgv_Produtos_NotaFiscal.Rows.Item(AddGrid).Cells(20).Value = [Ô]0,00[Ô]
End If
If Not nota.NFe.infNFe.det(AddGrid).prod.vFrete Is Nothing Then
dgv_Produtos_NotaFiscal.Rows.Item(AddGrid).Cells([Ô]ValorFrete[Ô]).Value = FormatNumber(Convert.ToDouble(nota.NFe.infNFe.det(AddGrid).prod.vFrete).ToString().Replace([Ô].[Ô], [Ô],[Ô]), 2)
Else
dgv_Produtos_NotaFiscal.Rows.Item(AddGrid).Cells([Ô]ValorFrete[Ô]).Value = [Ô]0,00[Ô]
End If
If Not nota.NFe.infNFe.det(AddGrid).prod.vSeg Is Nothing Then
dgv_Produtos_NotaFiscal.Rows.Item(AddGrid).Cells([Ô]vlr_seguro[Ô]).Value = FormatNumber(Convert.ToDouble(nota.NFe.infNFe.det(AddGrid).prod.vSeg).ToString().Replace([Ô].[Ô], [Ô],[Ô]), 2)
Else
dgv_Produtos_NotaFiscal.Rows.Item(AddGrid).Cells([Ô]vlr_seguro[Ô]).Value = [Ô]0,00[Ô]
End If
Try
CEST_ = nota.NFe.infNFe.det(AddGrid).prod.CEST
Catch ex As Exception
CEST_ = Nothing
End Try
If CEST_ <> [Ô][Ô] Then
dgv_Produtos_NotaFiscal.Rows.Item(AddGrid).Cells(5).Value = CEST_
End If
dgv_Produtos_NotaFiscal.Rows.Item(AddGrid).Cells(6).Value = nota.NFe.infNFe.det(AddGrid).prod.uCom
dgv_Produtos_NotaFiscal.Rows.Item(AddGrid).Cells(7).Value = FormatNumber(Convert.ToDouble(nota.NFe.infNFe.det(AddGrid).prod.qCom).ToString().Replace([Ô].[Ô], [Ô],[Ô]), 2)
dgv_Produtos_NotaFiscal.Rows.Item(AddGrid).Cells(8).Value = FormatNumber(Convert.ToDouble(nota.NFe.infNFe.det(AddGrid).prod.vUnCom).ToString().Replace([Ô].[Ô], [Ô],[Ô]), 2)
dgv_Produtos_NotaFiscal.Rows.Item(AddGrid).Cells(9).Value = FormatNumber(Convert.ToDouble(nota.NFe.infNFe.det(AddGrid).prod.vProd).ToString().Replace([Ô].[Ô], [Ô],[Ô]), 2)
dgv_Produtos_NotaFiscal.Rows.Item(AddGrid).Cells(22).Value = nota.NFe.infNFe.det(AddGrid).prod.cEAN
Try
[ô]
vDesc_ = FormatNumber(Convert.ToDouble(nota.NFe.infNFe.det(AddGrid).prod.vDesc).ToString().Replace([Ô].[Ô], [Ô],[Ô]), 2)
Catch ex As Exception
vDesc_ = Nothing
End Try
If vDesc_ <> [Ô][Ô] Then
dgv_Produtos_NotaFiscal.Rows.Item(AddGrid).Cells(18).Value = vDesc_
Else
dgv_Produtos_NotaFiscal.Rows.Item(AddGrid).Cells(18).Value = [Ô]0,00[Ô]
End If
[ô]************************************************************************************************************************************
[ô]***********ICMS
[ô]**ICMS00
If Not nota.NFe.infNFe.det(AddGrid).imposto.ICMS.ICMS00 Is Nothing Then
dgv_Produtos_NotaFiscal.Rows(AddGrid).Cells(27).Value = nota.NFe.infNFe.det(AddGrid).imposto.ICMS.ICMS00.orig
dgv_Produtos_NotaFiscal.Rows(AddGrid).Cells(3).Value = nota.NFe.infNFe.det(AddGrid).imposto.ICMS.ICMS00.CST
dgv_Produtos_NotaFiscal.Rows(AddGrid).Cells(12).Value = nota.NFe.infNFe.det(AddGrid).imposto.ICMS.ICMS00.vBC
dgv_Produtos_NotaFiscal.Rows(AddGrid).Cells(15).Value = FormatNumber(Convert.ToDouble(nota.NFe.infNFe.det(AddGrid).imposto.ICMS.ICMS00.pICMS).ToString().Replace([Ô].[Ô], [Ô],[Ô]), 2) [ô]aliq icms
dgv_Produtos_NotaFiscal.Rows(AddGrid).Cells(13).Value = nota.NFe.infNFe.det(AddGrid).imposto.ICMS.ICMS00.vICMS
dgv_Produtos_NotaFiscal.Rows(AddGrid).Cells(10).Value = [Ô]0,00[Ô] [ô]base st
dgv_Produtos_NotaFiscal.Rows(AddGrid).Cells(11).Value = [Ô]0,00[Ô] [ô]vlr icms st
dgv_Produtos_NotaFiscal.Rows(AddGrid).Cells(17).Value = [Ô]0,00[Ô] [ô]aliq icms st
[ô]dgv_Produtos_NotaFiscal.Rows(AddGrid).Cells(IvICMSST.Name).Value = [Ô]0,00[Ô]
[ô]dgv_Produtos_NotaFiscal.Rows(AddGrid).Cells(IpICMSST.Name).Value = [Ô]0,00[Ô]
[ô]dgv_Produtos_NotaFiscal.Rows(AddGrid).Cells(IvCredICMSSN.Name).Value = [Ô]0,00[Ô]
[ô]dgv_Produtos_NotaFiscal.Rows(AddGrid).Cells(IpCredSN.Name).Value = [Ô]0,00[Ô]
End If
[ô]************************************************************************************************************************************
[ô]**ICMS10
If Not nota.NFe.infNFe.det(AddGrid).imposto.ICMS.ICMS10 Is Nothing Then
dgv_Produtos_NotaFiscal.Rows(AddGrid).Cells(3).Value = nota.NFe.infNFe.det(AddGrid).imposto.ICMS.ICMS10.CST
dgv_Produtos_NotaFiscal.Rows(AddGrid).Cells(12).Value = nota.NFe.infNFe.det(AddGrid).imposto.ICMS.ICMS10.vBC [ô]Bc ICMS
dgv_Produtos_NotaFiscal.Rows(AddGrid).Cells(15).Value = nota.NFe.infNFe.det(AddGrid).imposto.ICMS.ICMS10.pICMS [ô]Aliq ICMS
dgv_Produtos_NotaFiscal.Rows(AddGrid).Cells(13).Value = nota.NFe.infNFe.det(AddGrid).imposto.ICMS.ICMS10.vICMS [ô]vlr ICMS
[ô]dgv_Produtos_NotaFiscal.Rows(AddGrid).Cells(IpRedBC.Name).Value = [Ô]0,00[Ô]
[ô]dgv_Produtos_NotaFiscal.Rows(AddGrid).Cells(IpMVAST.Name).Value = nota.NFe.infNFe.det(AddGrid).imposto.ICMS.ICMS10.pMVAST
dgv_Produtos_NotaFiscal.Rows(AddGrid).Cells(10).Value = nota.NFe.infNFe.det(AddGrid).imposto.ICMS.ICMS10.vBCST [ô]Bc ICMS ST
dgv_Produtos_NotaFiscal.Rows(AddGrid).Cells(17).Value = nota.NFe.infNFe.det(AddGrid).imposto.ICMS.ICMS10.pICMSST [ô]pICMSST
dgv_Produtos_NotaFiscal.Rows(AddGrid).Cells(11).Value = nota.NFe.infNFe.det(AddGrid).imposto.ICMS.ICMS10.vICMSST [ô]Vlr ICMS ST
dgv_Produtos_NotaFiscal.Rows(AddGrid).Cells(27).Value = nota.NFe.infNFe.det(AddGrid).imposto.ICMS.ICMS10.orig [ô]origem
[ô]dgv_Produtos_NotaFiscal.Rows(AddGrid).Cells(IvCredICMSSN.Name).Value = [Ô]0,00[Ô]
[ô]dgv_Produtos_NotaFiscal.Rows(AddGrid).Cells(IpCredSN.Name).Value = [Ô]0,00[Ô]
End If
[ô]************************************************************************************************************************************
[ô]**ICMS20
If Not nota.NFe.infNFe.det(AddGrid).imposto.ICMS.ICMS20 Is Nothing Then
dgv_Produtos_NotaFiscal.Rows(AddGrid).Cells(27).Value = nota.NFe.infNFe.det(AddGrid).imposto.ICMS.ICMS20.orig
dgv_Produtos_NotaFiscal.Rows(AddGrid).Cells(3).Value = nota.NFe.infNFe.det(AddGrid).imposto.ICMS.ICMS20.CST
dgv_Produtos_NotaFiscal.Rows.Item
Esse tipo [Ô]nfeProc[Ô], não parece ser o tipo correto...
Citação::
A chave para entender é nessa linha: GetType(Ler_XML_NFe.nfeProc)
Esse tipo [Ô]nfeProc[Ô], não parece ser o tipo correto...
isso com minha classe ja funciona certinho por essa linha ..
fiz igual para sua classe mais não funcionou. onde estou errando?
veja
Dim ser As New XmlSerializer(GetType(cls_Kerplunk.TNFe))
Dim textReader As TextReader = DirectCast(New StreamReader(txtArquivo.Text), TextReader)
Dim reader As New XmlTextReader(textReader)
reader.Read()
Dim nota As cls_Kerplunk.TNFe = DirectCast(ser.Deserialize(reader), cls_Kerplunk.TNFe)