none
Serialização de listas em classes da XML RRS feed

  • Pergunta

  • Boa tarde pessoal, estou realizando um projeto de NFe .

    Estou usando a serialização de classes para montar o XML em VB.net,  parte ocorreu tudo certo,

    apenas na parte de itens do Produtos que não estou entendendo, tenho em um DataGridwiew os itens de produtos 

    ao Serializar os itens só gera o ultimo produto da lista conforme exemplo abaixo:

            Nota.infNFe.det = New ClassNFe.NFeInfNFeDet
            Nota.infNFe.det.prod = New ClassNFe.NFeInfNFeDetProd


           For i As Integer = 0 To GridM.Rows.Count - 1

                Nota.infNFe.det.nItem = GridM.Rows.Count.ToString '(Contar N° de Itens)
                Nota.infNFe.det.prod.cProd = GridM.Rows.Item(i).Cells("ProdutoIDG").Value.ToString.Trim()
                Nota.infNFe.det.prod.xProd = GridM.Rows.Item(i).Cells("ProdutoG").Value.ToString.Trim()

           Next i

    Esta saindo apenas um produto, deste já agradeço a ajuda obrigado.

    -<det nItem="2">
    -<prod>
    <cProd>1</cProd>
    <xProd>MONITOR SANSUNG 17 P USADO</xProd>
    <NCM>22029900</NCM>
    <CEST>0</CEST>
    <CFOP>5401</CFOP>
    <uCom>UN</uCom>
    <qCom>1</qCom>
    <vUnCom>430</vUnCom>
    <vProd>430</vProd>
    <qTrib>0</qTrib>
    <vUnTrib>0</vUnTrib>
    <indTot>1</indTot>
    </prod>
    -


     

    quinta-feira, 11 de março de 2021 22:45

Todas as Respostas

  • Bom dia Nilton Viana

    Eu utilizo uma ferramenta para gerar a classe da nfe
    eu gerei ela em C# mas vc pode gerar em VB também

    coloque os arquivos xsd numa pasta exemplo:  D:\TEMP\XSD\
      
    use um editor de texto (notepad ou o que desejar) e
    junte os NOMES dos arquivos xsd numa linha somente como abaixo, UM nome na frente do outro.

    Ficaria assim:

    xmldsig-core-schema_v1.01.xsd tiposBasico_v1.03.xsd tiposBasico_v4.00.xsd CCe_v1.00.xsd consReciNFe_v4.00.xsd consSitNFe_v4.00.xsd consStatServ_v4.00.xsd e110140_v1.00.xsd e210200_v1.00.xsd e210210_v1.00.xsd e210220_v1.00.xsd e210240_v1.00.xsd envCCe_v1.00.xsd envEPEC_v1.00.xsd envEventoCancNFe_v1.00.xsd enviNFe_v4.00.xsd EPEC_v1.00.xsd inutNFe_v4.00.xsd leiauteCCe_v1.00.xsd leiauteConsSitNFe_v4.00.xsd leiauteConsStatServ_v4.00.xsd leiauteEPEC_v1.00.xsd leiauteEventoCancNFe_v1.00.xsd leiauteInutNFe_v4.00.xsd leiauteNFe_v4.00.xsd nfe_v4.00.xsd procEPEC_v1.00.xsd procInutNFe_v4.00.xsd procNFe_v4.00.xsd retConsReciNFe_v4.00.xsd retConsSitNFe_v4.00.xsd retConsStatServ_v4.00.xsd retEnvEPEC_v1.00.xsd retEnvEventoCancNFe_v1.00.xsd retEnviNFe_v4.00.xsd .\retInutNFe_v4.00.xsd


    Obs IMPORTANTE:   XMLxmldsig..., tiposBasicos ficam no inicio da linha.

    Obs IMPORTANTE:   No final da linha, veja que vc tem de colocar  .\retInutNFe_v4.00.xsd   ( Colocar um   .\  antes do ultimo nome)
       
    abaixo o comando completo.  voce pode ver que  /L:VB   indica a linguagem    
       /n:TESTEXSD  indica o namespace
       
    XSD /C /L:VB  /N:TESTEXSD xmldsig-core-schema_v1.01.xsd tiposBasico_v1.03.xsd tiposBasico_v4.00.xsd CCe_v1.00.xsd consReciNFe_v4.00.xsd consSitNFe_v4.00.xsd consStatServ_v4.00.xsd e110140_v1.00.xsd e210200_v1.00.xsd e210210_v1.00.xsd e210220_v1.00.xsd e210240_v1.00.xsd envCCe_v1.00.xsd envEPEC_v1.00.xsd envEventoCancNFe_v1.00.xsd enviNFe_v4.00.xsd EPEC_v1.00.xsd inutNFe_v4.00.xsd leiauteCCe_v1.00.xsd leiauteConsSitNFe_v4.00.xsd leiauteConsStatServ_v4.00.xsd leiauteEPEC_v1.00.xsd leiauteEventoCancNFe_v1.00.xsd leiauteInutNFe_v4.00.xsd leiauteNFe_v4.00.xsd nfe_v4.00.xsd procEPEC_v1.00.xsd procInutNFe_v4.00.xsd procNFe_v4.00.xsd retConsReciNFe_v4.00.xsd retConsSitNFe_v4.00.xsd retConsStatServ_v4.00.xsd retEnvEPEC_v1.00.xsd retEnvEventoCancNFe_v1.00.xsd retEnviNFe_v4.00.xsd .\retInutNFe_v4.00.xsd


    Localize no iniciar do windows a pasta "Visual studio 2019"    ou visual studio que vc tiver.
    expandir

       click em "Developer Command Prompt for VS..."

       Vá para a pasta "D:\TEMP\XSD\" neste commando do DOS

        agora voce joga a linha completa do comando,  "XSD ..." na linha no command do DOS.

    e executa.

    a classe.cs  terá o nome do ultimo arquivo da linha, ou seja, "retInutNFe_v4.00.vb"


    eu até gerei a classe.VB aqui pra ver como ficou.  Verifique se sua classe está correta. SE SIM, usa a sua mesmo.
    Neste exemplo gerado, percebo que  NFeInfNFeDet  é ocorrencia.

    Então,  voce deveria criar a instancia com o numero de produtos da NFe.

    No c# seria algo assim:   (não fiz em vb - tenho pouco conhecimento)

            Nota.infNFe.det = New ClassNFe.NFeInfNFeDet[numeroItens];
            
    for ...
       //a cada ocorrencia vc tem de criar o tipo da classe
       Nota.infNFe.det[indice] = new ClassNFe.NFeInfNFeDet();
       
       Nota.infNFe.det.prod[indice] = New ClassNFe.NFeInfNFeDetProd;
       Nota.infNFe.det.prod[indice].propriedade = ...
       
    Espero que te ajude.

    bom trabalho a todos.    
    • Editado Jose Geraldo sexta-feira, 12 de março de 2021 09:50 correção - melhoria
    sexta-feira, 12 de março de 2021 09:47
  • Obrigado pela ajuda. Anotei a dica para me ajudar também.

    Nilton, por favor avisar se a dica do José ajudou. Obrigado 


    sexta-feira, 12 de março de 2021 16:02
    Moderador
  • Obrigado por responder, a serialização eu peguei de um XML de uma NFe Valida.

    Para fazer a Classe. Os demais campos estão com as funções funcionadas somente na parte dos Itens dos produtos que esta gerando apenas um da listagem do Datagridview

    Eu fiz um teste gerando em modo texto e geram os dois produtos  

    O correto seria

    -<det nItem="1">
    -<prod>Produto 1

    -<det nItem="2">
    -<prod>Produto 2

    Mais uma vez obrigado

    sexta-feira, 12 de março de 2021 17:40