Jump to content
Fivewin Brasil

tag "exporta" nao cria no xml


trufelli

Recommended Posts

Boa noite pessoal

Estou tentando gerar um XML para exportacao na base de testes da Sefaz e as tags "exporta" com "UFSaidaPais" e "xLocExporta" simplesmente não são criadas.

Uso a Classe do Gilmer com a DLL da Flexdocs

Fiz essa nota na versão 3.10 e gerou normal.

Comparei os códigos das duas versoes tanto dos meus prgs q e nao mudou nada, porem não gera de jeito nenhum.

Será que alguem está tendo o mesmo problema ou poderia me dar uma luz.

Obrigado

Link to comment
Share on other sites

 

Boa noite pessoal

Estou tentando gerar um XML para exportacao na base de testes da Sefaz e as tags "exporta" com "UFSaidaPais" e "xLocExporta" simplesmente não são criadas.

Uso a Classe do Gilmer com a DLL da Flexdocs

Fiz essa nota na versão 3.10 e gerou normal.

Comparei os códigos das duas versoes tanto dos meus prgs q e nao mudou nada, porem não gera de jeito nenhum.

Será que alguem está tendo o mesmo problema ou poderia me dar uma luz.

Obrigado

só pra complementar, pq enviei antes de terminar :
Comparei os códigos das duas versoes tanto dos meus prgs quanto os prgs da classe do Gilmer e nao mudou nada nesse ponto, porem não gera de jeito nenhum.

Link to comment
Share on other sites

Enquanto o prg estava igual a versao 3.10 nao criava as tags no XML
Ai resolvi trocar a posicao de algumas coisas, ai comecou a dar o erro similar ao seu 

// para exportacao
oNFe:SetValue("exporta", 'UFSaidaPais' , "SP" )       // Estado de embarque
oNFe:SetValue("exporta", 'xLocExporta' , "Sao Paulo") // Local de embarque

oNFe:SetValue("infAdic", 'infCpl' , cInfCpl )         // Informações Adicionais
 

//Comercio Exterior
aadd(::axNodes, {"exporta", {}, 0 } ); nPos := len(::axNodes)
aadd(::axNodes[ nPos ][2], {"UFSaidaPais" , TVoNFeItem():New("C", 1, 2,  2 ) } )
aadd(::axNodes[ nPos ][2], {"xLocExporta" , TVoNFeItem():New("C", 1, 1, 60 ) } )
aadd(::axNodes[ nPos ][2], {"xLocDespacho", TVoNFeItem():New("C", 0, 1, 60 ) } )

//Dados Adicionais
aadd(::axNodes, {"infAdic", {}, 0 } ); nPos := len(::axNodes)
aadd(::axNodes[ nPos ][2], {"infAdFisco"  , TVoNFeItem():New("C", 0, 1, 2000 ) } )
aadd(::axNodes[ nPos ][2], {"infCpl"      , TVoNFeItem():New("C", 0, 1, 5000 ) } )
 

Link to comment
Share on other sites

Gilmer, da erro ao criar o xml, conforme relatei no outro post:


Error description: Error BASE/1111  Argument error: LEN
   Args:
     [   1] = U   

Stack Calls
===========
   Called from:  => LEN( 0 )
   Called from: VoNFe2g.prg => TVONFE2G:SETVALUEII( 265 )
   Called from: VoNFe2g.prg => TVONFE2G:SETVALUE( 249 )

 

A sequencia correta das tags é essa?

.....

oNFe:SetValue("infAdic", 'infCpl' , 'Empresa optante pelo Simples Nacional' ) 

oNFe:SetValue("exporta", 'UFSaidaPais'   , 'SP' )     
oNFe:SetValue("exporta", 'xLocExporta'   , 'SAO PAULO' ) 

cDocXml := ""
if oNFe:GerarXml( @cDocXml )
    .....

 

Link to comment
Share on other sites

<exporta>
  <UFSaidaPais>SP</UFSaidaPais>
  <xLocEmbarq>Porto de Santos</xLocEmbarq>
</exporta>
<exporta>
  <UFSaidaPais>SP</UFSaidaPais>
  <xLocEmbarq>Porto de Santos</xLocEmbarq>
  <xLocDespacho>MARIMEX</xLocDespacho>
</exporta>

 

 

<exporta>
    <UFSaidaPais>GO</UFSaidaPais>
    <xLocExporta>GOIANIA</xLocExporta>
    <xLocDespacho>GOIANIA</xLocDespacho>
</exporta>

 

Link to comment
Share on other sites

eu acho que o erro está aqui, mas não sei dizer o que (???)
Se chamar a AddItem enviando a duas classname TVONFECOBR e TVONFEPAG ele nao gera no XML a tag exporta se envia apenas uma delas ai é gerada a tag exporta

METHOD AddItem( oItem )  CLASS TVoNFe2G
local cID,  axArray := {},nPos

    If     oItem:Classname=="TVONFEPROD"
        cID := 'nItem="' + alltrim(str(len(::axItems)+1) ) + '"'
        aadd(::axItems, {cId,{} }  )
        aadd(::axItems[len(::axItems),2], {"prod"     , ::StruProduto(oItem) , 1     }  )
        aadd(::axItems[len(::axItems),2], {"imposto"  , ::StruImpostos(oItem), 1     }  )
        aadd(::axItems[len(::axItems),2], {"infAdProd", TVoNFeItem():New("C", 0, 1,500,,,oItem:infAdProd   )}  )
    ElseIf oItem:ClassName=="TVONFEREFNF"
        nPos:=ascan(::axNodes, {|x| x[1]=="ide" } )
        if nPos!=0
            Do Case
            Case ::nTipoRef==1
                AAdd(::axNodes[nPos,2],{"NFref"  , ::SetRefNfe(oItem) })
            Case ::nTipoRef==2
                AAdd(::axNodes[nPos,2],{"NFref"  , ::SetrefNF(oItem) })
            Case ::nTipoRef==3
                AAdd(::axNodes[nPos,2],{"NFref"  , ::SetrefECF(oItem) })
            Case ::nTipoRef==4
                AAdd(::axNodes[nPos,2],{"NFref"  , ::SetrefNFP(oItem) })
            EndCase
        Endif
    ElseIf oItem:ClassName=="TVONFECOBR"
        //if ::cModeloDoc == "55"
        nPos:=ascan(::axNodes, {|x| x[1]=="cobr" } )
        if nPos==0
            nPos:=ascan(::axNodes, {|x| x[1]=="transp" } )
            Ains(::axNodes,nPos+1)
            ::axNodes[nPos+1]:={"cobr"  , {},0 }
            nPos:=ascan(::axNodes, {|x| x[1]=="cobr" } )
            if nPos!=0
                aadd(::axNodes[nPos,2], {"fat"  , ::StruFatura(oItem) } )
            Endif
        Endif
    
        if nPos!=0
            //aadd(::axNodes[nPos,2], {"fat"  , ::StruFatura(oItem) } )
            aadd(::axNodes[nPos,2], {"dup"  , ::StruDuplicata(oItem)  }  )
        Endif
    ElseIf oItem:ClassName=="TVONFEPAG"
        // pag
        nPos := ascan(::axNodes, {|x| x[1] == "pag" } )
        if nPos == 0
            nPos := ascan(::axNodes, {|x| x[1] == "transp" } )
            Ains(::axNodes,nPos+1)
            ::axNodes[nPos+1]:={"pag", {}, 0 }
            nPos := ascan(::axNodes, {|x| x[1] == "pag" } )
        Endif
        if nPos != 0
            aadd(::axNodes[nPos,2], {"detPag", ::StruDetPag(oItem)  }  )
        Endif
    Endif
Return( Nil )
 

 

Link to comment
Share on other sites

continuando, a sequencia que eu uso é :
... 

    oNFe:SetValue("infAdic", 'infCpl' , cInfCpl )      // Informações Adicionais

    // para exportacao
    If (cDetalhes)->desUF == "EX"
        oNFe:SetValue("exporta", 'UFSaidaPais' , (cDetalhes)->UFEmbarq )         // Estado de embarque
        oNFe:SetValue("exporta", 'xLocExporta' , (cDetalhes)->LocEmbarq )         // Local de embarque
        oNFe:SetValue("exporta", 'xLocDespacho', (cDetalhes)->LocDespach )        // Local de despacho (Informação do Recinto Alfandegado)
    Endif

    // informações de pagamento para a versao 4.00
    LoadPagamentos(oNfe)

    //Carrega Duplicatas
    If lTemDuplicata
        LoadDuplicatas(oNFe)
    Endif
Return (oNFe

Static Func LoadPagamentos(oNFe)

    oItem := TVoNFePag()

    WITH OBJECT oItem
        // pagamentos
        :indPag  := NfSaida->pagindPag    // indicador da forma de pagamento
        :tPag    := NfSaida->pagtPag    // meio de pagamento 
        :vPag    := NfSaida->pagvPag    // Valor do pagamento

        // para uso com cartao de credito
        :tpIntegra    := NfSaida->pagTpInteg    // 1-integrado com sistema, 2-nao integrado com sistema

        // essas 3 colunas ou informa todas ou nao informa nenhuma
        :CNPJ_Opc  := NfSaida->pagCnpj    // CNPJ da credenciadora
        :tBand_Opc := NfSaida->pagtBand    // tipo de bandeira
        :cAut_Opc  := NfSaida->pagcAut    // numero da autorizacao
    
        :vTroco  := NfSaida->pagvTroco    // valor do troco
    END
    
    oNFe:AddItem( oItem )
Return (Nil)

Static Function LoadDuplicatas(oNFe)
Local oItem
Local nFatu := 0

    nDup := 0
   Duplicata->( DbGotop() )
    Do Whil( !Duplicata->(eof()) )

        oItem := TVoNfeCobr()

        WITH OBJECT oItem
            //Faturas
            If nFatu == 0
                :nFat  := Duplicata->FatNumero
                :vOrig := Duplicata->FatValor
                :vDesc := 0.00
                :vLiq  := Duplicata->FatValor
 
                nFatu++
/           Endif
            //Duplicatas
            nDup++
            :nDup  := StrZero(nDup,3)
            :dVenc := Duplicata->DupVencim // Data de vencimento
            :vDup  := Duplicata->DupValor     // Valor Duplicata
        END

        oNFe:AddItem( oItem )

        Duplicata->( DbSkip() )
    Enddo
Return (Nil)

 

Link to comment
Share on other sites

 

<exporta>
  <UFSaidaPais>SP</UFSaidaPais>
  <xLocEmbarq>Porto de Santos</xLocEmbarq>
</exporta>

<exporta>
  <UFSaidaPais>SP</UFSaidaPais>
  <xLocEmbarq>Porto de Santos</xLocEmbarq>
  <xLocDespacho>MARIMEX</xLocDespacho>
</exporta>

 

 

<exporta>
    <UFSaidaPais>GO</UFSaidaPais>
    <xLocExporta>GOIANIA</xLocExporta>
    <xLocDespacho>GOIANIA</xLocDespacho>
</exporta>

 

isso ok, nos sabemos o que compõe esse grupo "exporta".

agora como usar na classe? (pois acontece erro ou não é gerada).

 

Link to comment
Share on other sites

Só quis mostrar como é a sequencia que utilizo. 

Por exemplo : se eu comentar somente a chamada da funcao LoadDuplicatas(), o XML é gerado com as tags "infAdic", "pag" (obtida pela LoadPagamentos) e "exporta"

se eu comentar somente a chamada da funcao LoadPagamentos(),  o XML é gerado com as tags "infAdic", "cobr" (obtida pela LoadDuplicatas) e "exporta"

se eu deixo do jeito que mostrei a sequencia sem comentar nada, o XML é gerado com as tags "infAdic", "cobr" (obtida pela LoadDuplicatas) e "pag" (obtida pela LoadPagamentos) e não gera a tag "exporta"

Link to comment
Share on other sites

 

continuando, a sequencia que eu uso é :
... 

    oNFe:SetValue("infAdic", 'infCpl' , cInfCpl )      // Informações Adicionais

    // para exportacao
    If (cDetalhes)->desUF == "EX"
        oNFe:SetValue("exporta", 'UFSaidaPais' , (cDetalhes)->UFEmbarq )         // Estado de embarque
        oNFe:SetValue("exporta", 'xLocExporta' , (cDetalhes)->LocEmbarq )         // Local de embarque
        oNFe:SetValue("exporta", 'xLocDespacho', (cDetalhes)->LocDespach )        // Local de despacho (Informação do Recinto Alfandegado)
    Endif

    // informações de pagamento para a versao 4.00
    LoadPagamentos(oNfe)

    //Carrega Duplicatas
    If lTemDuplicata
        LoadDuplicatas(oNFe)
    Endif
Return (oNFe

Static Func LoadPagamentos(oNFe)

    oItem := TVoNFePag()

    WITH OBJECT oItem
        // pagamentos
        :indPag  := NfSaida->pagindPag    // indicador da forma de pagamento
        :tPag    := NfSaida->pagtPag    // meio de pagamento 
        :vPag    := NfSaida->pagvPag    // Valor do pagamento

        // para uso com cartao de credito
        :tpIntegra    := NfSaida->pagTpInteg    // 1-integrado com sistema, 2-nao integrado com sistema

        // essas 3 colunas ou informa todas ou nao informa nenhuma
        :CNPJ_Opc  := NfSaida->pagCnpj    // CNPJ da credenciadora
        :tBand_Opc := NfSaida->pagtBand    // tipo de bandeira
        :cAut_Opc  := NfSaida->pagcAut    // numero da autorizacao
    
        :vTroco  := NfSaida->pagvTroco    // valor do troco
    END
    
    oNFe:AddItem( oItem )
Return (Nil)

Static Function LoadDuplicatas(oNFe)
Local oItem
Local nFatu := 0

    nDup := 0
   Duplicata->( DbGotop() )
    Do Whil( !Duplicata->(eof()) )

        oItem := TVoNfeCobr()

        WITH OBJECT oItem
            //Faturas
            If nFatu == 0
                :nFat  := Duplicata->FatNumero
                :vOrig := Duplicata->FatValor
                :vDesc := 0.00
                :vLiq  := Duplicata->FatValor
 
                nFatu++
/           Endif
            //Duplicatas
            nDup++
            :nDup  := StrZero(nDup,3)
            :dVenc := Duplicata->DupVencim // Data de vencimento
            :vDup  := Duplicata->DupValor     // Valor Duplicata
        END

        oNFe:AddItem( oItem )

        Duplicata->( DbSkip() )
    Enddo
Return (Nil)

 

Eu já faço diferente: a parte de duplicatas e pagamentos antes do Informações Adicionais

Qual a sequencia correta?

 

Link to comment
Share on other sites

 

eu acho que o erro está aqui, mas não sei dizer o que (???)
Se chamar a AddItem enviando a duas classname TVONFECOBR e TVONFEPAG ele nao gera no XML a tag exporta se envia apenas uma delas ai é gerada a tag exporta

METHOD AddItem( oItem )  CLASS TVoNFe2G
local cID,  axArray := {},nPos

    If     oItem:Classname=="TVONFEPROD"
        cID := 'nItem="' + alltrim(str(len(::axItems)+1) ) + '"'
        aadd(::axItems, {cId,{} }  )
        aadd(::axItems[len(::axItems),2], {"prod"     , ::StruProduto(oItem) , 1     }  )
        aadd(::axItems[len(::axItems),2], {"imposto"  , ::StruImpostos(oItem), 1     }  )
        aadd(::axItems[len(::axItems),2], {"infAdProd", TVoNFeItem():New("C", 0, 1,500,,,oItem:infAdProd   )}  )
    ElseIf oItem:ClassName=="TVONFEREFNF"
        nPos:=ascan(::axNodes, {|x| x[1]=="ide" } )
        if nPos!=0
            Do Case
            Case ::nTipoRef==1
                AAdd(::axNodes[nPos,2],{"NFref"  , ::SetRefNfe(oItem) })
            Case ::nTipoRef==2
                AAdd(::axNodes[nPos,2],{"NFref"  , ::SetrefNF(oItem) })
            Case ::nTipoRef==3
                AAdd(::axNodes[nPos,2],{"NFref"  , ::SetrefECF(oItem) })
            Case ::nTipoRef==4
                AAdd(::axNodes[nPos,2],{"NFref"  , ::SetrefNFP(oItem) })
            EndCase
        Endif
    ElseIf oItem:ClassName=="TVONFECOBR"
        //if ::cModeloDoc == "55"
        nPos:=ascan(::axNodes, {|x| x[1]=="cobr" } )
        if nPos==0
            nPos:=ascan(::axNodes, {|x| x[1]=="transp" } )
            Ains(::axNodes,nPos+1)
            ::axNodes[nPos+1]:={"cobr"  , {},0 }
            nPos:=ascan(::axNodes, {|x| x[1]=="cobr" } )
            if nPos!=0
                aadd(::axNodes[nPos,2], {"fat"  , ::StruFatura(oItem) } )
            Endif
        Endif
    
        if nPos!=0
            //aadd(::axNodes[nPos,2], {"fat"  , ::StruFatura(oItem) } )
            aadd(::axNodes[nPos,2], {"dup"  , ::StruDuplicata(oItem)  }  )
        Endif
    ElseIf oItem:ClassName=="TVONFEPAG"
        // pag
        nPos := ascan(::axNodes, {|x| x[1] == "pag" } )
        if nPos == 0
            nPos := ascan(::axNodes, {|x| x[1] == "transp" } )
            Ains(::axNodes,nPos+1)
            ::axNodes[nPos+1]:={"pag", {}, 0 }
            nPos := ascan(::axNodes, {|x| x[1] == "pag" } )
        Endif
        if nPos != 0
            aadd(::axNodes[nPos,2], {"detPag", ::StruDetPag(oItem)  }  )
        Endif
    Endif
Return( Nil )
 

 

Esse método esta diferente do meu. Você usou a ultima versão disponibilizada pelo Gilmer do dia 12/07?

 

METHOD AddItem( oItem )  CLASS TVoNFe2G
   local cID,  axArray := {},nPos

   If oItem:Classname=="TVONFEPROD"
     cID := 'nItem="'+alltrim(str(len(::axItems)+1) ) +'"'
     aadd(::axItems, {cId,{} }  )
     aadd(::axItems[len(::axItems),2], {"prod"     , ::StruProduto(oItem),  1     }  )
     aadd(::axItems[len(::axItems),2], {"imposto"  , ::StruImpostos(oItem), 1     }  )
      aadd(::axItems[len(::axItems),2], {"infAdProd", TVoNFeItem():New("C", 0, 1,500,,,oItem:infAdProd   )}  )
   ElseIf oItem:ClassName=="TVONFEREFNF"
     nPos:=ascan(::axNodes, {|x| x[1]=="ide" } )
     if nPos!=0
      Do Case
         Case ::nTipoRef==1
            AAdd(::axNodes[nPos,2],{"NFref"  , ::SetRefNfe(oItem) })
         Case ::nTipoRef==2
            AAdd(::axNodes[nPos,2],{"NFref"  , ::SetrefNF(oItem) })
         Case ::nTipoRef==3
            AAdd(::axNodes[nPos,2],{"NFref"  , ::SetrefECF(oItem) })
         Case ::nTipoRef==4
            AAdd(::axNodes[nPos,2],{"NFref"  , ::SetrefNFP(oItem) })
      EndCase
     Endif
   ElseIf oItem:ClassName=="TVONFECOBR"
      //if ::cModeloDoc == "55"
         nPos:=ascan(::axNodes, {|x| x[1]=="cobr" } )
         if nPos==0
            nPos:=ascan(::axNodes, {|x| x[1]=="transp" } )
            Ains(::axNodes,nPos+1)
            ::axNodes[nPos+1]:={"cobr"  , {},0 }
            nPos:=ascan(::axNodes, {|x| x[1]=="cobr" } )

            if nPos!=0
               aadd(::axNodes[nPos,2], {"fat"  , ::StruFatura(oItem) } )
            Endif

         Endif
         if nPos!=0
                //aadd(::axNodes[nPos,2], {"fat"  , ::StruFatura(oItem) } )
               aadd(::axNodes[nPos,2], {"dup"  , ::StruDuplicata(oItem)  }  )
         Endif
  ElseIf oItem:ClassName=="TVONFEPAG"
         // pag
         nPos:=ascan(::axNodes, {|x| x[1]=="pag" } )
         if nPos==0
            nPos:=ascan(::axNodes, {|x| x[1]=="cobr" } )
            if nPos==0
               nPos:=ascan(::axNodes, {|x| x[1]=="transp" } )
            Endif
            Ains(::axNodes,nPos+1)
            ::axNodes[nPos+1]:={ "pag", {}, 0 }
            nPos:=ascan(::axNodes, {|x| x[1]=="pag" } )
         Endif
         if nPos!=0
            aadd(::axNodes[nPos,2], {"detPag"  , ::StruDetPag(oItem)  }  )
            aadd(::axNodes[nPos,2], {"vTroco", TVoNFeItem():new("N", 0, 1,15, 02,,oItem:vTroco )  }  )
         Endif
   Endif

Return( Nil )

 

 

Link to comment
Share on other sites

  ElseIf oItem:ClassName=="TVONFEPAG"
         // pag
         nPos:=ascan(::axNodes, {|x| x[1]=="pag" } )
         if nPos==0
            nPos:=ascan(::axNodes, {|x| x[1]=="cobr" } )
            if nPos==0
               nPos:=ascan(::axNodes, {|x| x[1]=="transp" } )
            Endif
            Ains(::axNodes,nPos+1)
            ::axNodes[nPos+1]:={ "pag", {}, 0 }
            nPos:=ascan(::axNodes, {|x| x[1]=="pag" } )
         Endif
         if nPos!=0
            aadd(::axNodes[nPos,2], {"detPag"  , ::StruDetPag(oItem)  }  )
            aadd(::axNodes[nPos,2], {"vTroco", TVoNFeItem():new("N", 0, 1,15, 02,,oItem:vTroco )  }  )
         Endif
   Endif

 

Sim, esta versão mesmo.
Só que essa parte está diferente do que você postou.

Link to comment
Share on other sites

 

Só quis mostrar como é a sequencia que utilizo. 

Por exemplo : se eu comentar somente a chamada da funcao LoadDuplicatas(), o XML é gerado com as tags "infAdic", "pag" (obtida pela LoadPagamentos) e "exporta"

se eu comentar somente a chamada da funcao LoadPagamentos(),  o XML é gerado com as tags "infAdic", "cobr" (obtida pela LoadDuplicatas) e "exporta"

se eu deixo do jeito que mostrei a sequencia sem comentar nada, o XML é gerado com as tags "infAdic", "cobr" (obtida pela LoadDuplicatas) e "pag" (obtida pela LoadPagamentos) e não gera a tag "exporta"

é bem isso que está acontecendo mesmo.

Gilmer, você pode nos ajudar nesse problema?

Link to comment
Share on other sites

Só para complementar, segue abaixo novamente os métodos e as funcoes utilizadas, o que pode estar faltando ?

//VoNFe2G_V4.Prg

/***************************************************************************/
/* Método Construtor                                                       */
/* Programador:  Gilmer Tavares                                            */
/* Data: 11-11-2010                                                        */
/***************************************************************************/
METHOD New(cPathNFe,nTipoRef,cModeloDoc) CLASS TVoNFe2G
Local nPos
   #IFDEF __DOS__
      DEFAULT cPathNFe:=CurDir(CurDrive())
   #ELSE
      DEFAULT cPathNFe:=curdrive()+":\"+GetCurDir()
   #ENDIF
   Default nTipoRef:=1,cModeloDoc:="55"

      ::cModeloDoc := cModeloDoc
   ::axItems := {}
   ::axNodes := {}

   ::cPathNFe:=cPathNFe
   ::nTipoRef:=nTipoRef

   //Identificação da Nota Fiscal Eletronica(NFe)
   aadd(::axNodes, {"ide"     , {} } );nPos := len(::axNodes)
   aadd(::axNodes[ nPos ][2], {"cUF"    , TVoNFeItem():New("C",1, 2,   ) }  )
   aadd(::axNodes[ nPos ][2], {"cNF"    , TVoNFeItem():New("N",1, 9,   ) }  )
   aadd(::axNodes[ nPos ][2], {"natOp"  , TVoNFeItem():New("C",1, 1, 60) }  )
   aadd(::axNodes[ nPos ][2], {"indPag" , TVoNFeItem():New("N",1, 1,   ) }  )
   aadd(::axNodes[ nPos ][2], {"mod"    , TVoNFeItem():New("C",1, 2,   ) }  )
   aadd(::axNodes[ nPos ][2], {"serie"  , TVoNFeItem():New("N",1, 1,3  ) }  )
   aadd(::axNodes[ nPos ][2], {"nNF"    , TVoNFeItem():New("N",1, 1,9  ) }  )
   aadd(::axNodes[ nPos ][2], {"dhEmi"  , TVoNFeItem():New("C",1, 23    ) }  )
   aadd(::axNodes[ nPos ][2], {"dhSaiEnt",TVoNFeItem():New("C",0, 23    ) }  )
   aadd(::axNodes[ nPos ][2], {"tpNF"   , TVoNFeItem():New("N",1, 1    ) }  )
   aadd(::axNodes[ nPos ][2], {"idDest" , TVoNFeItem():New("N",1, 1    ) }  )
   aadd(::axNodes[ nPos ][2], {"cMunFG" , TVoNFeItem():New("N",1, 7    ) }  )
   aadd(::axNodes[ nPos ][2], {"tpImp"  , TVoNFeItem():New("N",1, 1    ) }  )
   aadd(::axNodes[ nPos ][2], {"tpEmis" , TVoNFeItem():New("N",1,1     ) }  )
   aadd(::axNodes[ nPos ][2], {"cDV"    , TVoNFeItem():New("N",1,1     ) }  )
   aadd(::axNodes[ nPos ][2], {"tpAmb"  , TVoNFeItem():New("N",1,1     ) }  )
   aadd(::axNodes[ nPos ][2], {"finNFe" , TVoNFeItem():New("N",1,1     ) }  )
   aadd(::axNodes[ nPos ][2], {"indFinal", TVoNFeItem():New("N",1,1     ) }  )
   aadd(::axNodes[ nPos ][2], {"indPres" , TVoNFeItem():New("N",1,1     ) }  )
   aadd(::axNodes[ nPos ][2], {"procEmi", TVoNFeItem():New("N",1,1     ) }  )
   aadd(::axNodes[ nPos ][2], {"verProc", TVoNFeItem():New("C",1,1,20  ) }  )
   aadd(::axNodes[ nPos ][2], {"dhCont" , TVoNfeItem():New("C",0,1,19  ) }  )
   aadd(::axNodes[ nPos ][2], {"xJust"  , TVoNfeItem():New("C",0,1,256 ) }  )

   //Identificação do Emitente
   aadd(::axNodes, {"emit"  , {} } );nPos := len(::axNodes)
   aadd(::axNodes[ nPos ][2], {"CNPJ"     , TVoNFeItem():New("C", 1, 14,,,{|| empty(::GetValueII("emit","CPF","") ) }  ) }  )
   aadd(::axNodes[ nPos ][2], {"CPF"      , TVoNFeItem():New("C", 1, 11,,,{|| empty(::GetValueII("emit","CNPJ","") ) }   ) }  )
   aadd(::axNodes[ nPos ][2], {"xNome"    , TVoNFeItem():New("C", 1, 1,60  ) } )
   aadd(::axNodes[ nPos ][2], {"xFant"    , TVoNFeItem():New("C", 0, 1,60  ) } )
   aadd(::axNodes[ nPos ][2], {"enderEmit", ::StruEndereco()  , 1          } )
   aadd(::axNodes[ nPos ][2], {"IE"       , TVoNFeItem():New("C", 1, 0,14  ) } )
   aadd(::axNodes[ nPos ][2], {"IEST"     , TVoNFeItem():New("C", 0, 2,14  ) } )
   aadd(::axNodes[ nPos ][2], {"IM"       , TVoNFeItem():New("C", 0, 1,15  ) } )
   aadd(::axNodes[ nPos ][2], {"CNAE"     , TVoNFeItem():New("C", 0, 7,07  ) } )
   aadd(::axNodes[ nPos ][2], {"CRT"      , TVoNfeItem():New("1", 1, 1     ) } )

   //Identificação do Destinatario
   aadd(::axNodes, {"dest"  , {} } );nPos := len(::axNodes)
   aadd(::axNodes[ nPos ][2], {"CNPJ"     , TVoNFeItem():New("C", 1, 14,,,{|| empty(::GetValueII("dest","CPF","") ) }   ) }  )
   aadd(::axNodes[ nPos ][2], {"CPF"      , TVoNFeItem():New("C", 1, 11,,,{|| empty(::GetValueII("dest","CNPJ","") ) } ) }  )
        aadd(::axNodes[ nPos ][2], {"idEstrangeiro", TVoNFeItem():New("C", 0, 0,20  ) } )
   aadd(::axNodes[ nPos ][2], {"xNome"    , TVoNFeItem():New("C", 1, 1,60  ) }  )
   aadd(::axNodes[ nPos ][2], {"enderDest", ::StruEndereco(),  1     }  )
   aadd(::axNodes[ nPos ][2], {"indIEDest", TVoNFeItem():New("C", 1, 1  ) } )
   aadd(::axNodes[ nPos ][2], {"IE"       , TVoNFeItem():New("C", 0, 0,14,,  ) } )
   aadd(::axNodes[ nPos ][2], {"ISUF"     , TVoNFeItem():New("C", 0, 1,09  ) }  )
   aadd(::axNodes[ nPos ][2], {"email"    , TVoNFeItem():New("C", 0, 1,60  ) }  )

    // Autorização
    aadd(::axNodes, {"autXML" , ::StruAutXML(), 0 } )

    //Endereço de Retirada
   aadd(::axNodes, {"retirada" , ::StruEnd(), 0 } )

   //Endereço de Entrega
   aadd(::axNodes, {"entrega"  , ::StruEnd(), 0 } )

   //Detalhamento de Produtos da NFe
   aadd(::axNodes, {"det"  , {}, 999 } ); nPos := len(::axNodes)

    //Totais
   aadd(::axNodes, {"total"  , {} } ); nPos := len(::axNodes)
   aadd(::axNodes[ nPos ][2], {"ICMSTot" , ::StruTotIcms() }  )
   aadd(::axNodes[ nPos ][2], {"ISSQNtot", ::StruISS()  }  )
   aadd(::axNodes[ nPos ][2], {"retTrib" , ::StruRetencoes() }  )

   aadd(::axNodes, {"transp"  , {} } ); nPos := len(::axNodes)
   aadd(::axNodes[ nPos ][2], {"modFrete"  , TVoNFeItem():New("N", 1, 1,1,   ) }  )
   aadd(::axNodes[ nPos ][2], {"transporta", ::StruTransport() , 0 }  )
   aadd(::axNodes[ nPos ][2], {"retTransp" , ::StruRetTransp() , 0 }  )
   aadd(::axNodes[ nPos ][2], {"veicTransp", ::StruveicTransp(), 0 }  )
   aadd(::axNodes[ nPos ][2], {"reboque"   , ::StruVeicTransp(), 0 }  )
   aadd(::axNodes[ nPos ][2], {"vol"      , ::StruVolume()    , 0 }  )

    //  If ::cModeloDoc=="55"
     //    aadd(::axNodes, {"cobr"  , {},0 } ); nPos := len(::axNodes)
      //aadd(::axNodes[ nPos ][2], {"fat"  , ::StruFatura()  }  )
      //aadd(::axNodes[ nPos ][2], {"dup"  , ::StruDuplicata()  }  )
     // aadd(::axNodes[ nPos ][2], {"fat"  , {}  }  )
    // aadd(::axNodes[ nPos ][2], {"dup"  , {}  }  )
   //Else
   // aadd( ::axNodes, { "pag", {}, 0 } ); nPos := len( ::axNodes )
  //Endif

   //Dados Adcionais
   aadd(::axNodes, {"infAdic", {}, 0 } ); nPos := len(::axNodes)
   aadd(::axNodes[ nPos ][2], {"infAdFisco"  , TVoNFeItem():New("C", 0, 1, 2000   )  }  )
   aadd(::axNodes[ nPos ][2], {"infCpl"      , TVoNFeItem():New("C", 0, 1, 5000  )  }  )

   //Comercio Exterior
   aadd(::axNodes, {"exporta", {}, 0 } ); nPos := len(::axNodes)
   aadd(::axNodes[ nPos ][2], {"UFSaidaPais"  , TVoNFeItem():New("C", 1, 2,2   )  }  )
   aadd(::axNodes[ nPos ][2], {"xLocExporta", TVoNFeItem():New("C", 1, 1,60   )  }  )
   aadd(::axNodes[ nPos ][2], {"xLocDespacho", TVoNFeItem():New("C", 0, 1,60   )  }  )

   //Informaçóes de compras
   aadd(::axNodes, {"compra", {}, 0 } ); nPos := len(::axNodes)
   aadd(::axNodes[ nPos ][2], {"xNEmp", TVoNFeItem():New("C", 0, 1, 17,   )  }  )
   aadd(::axNodes[ nPos ][2], {"xPed" , TVoNFeItem():New("C", 0, 1, 60,   )  }  )
   aadd(::axNodes[ nPos ][2], {"xCont", TVoNFeItem():New("C", 0, 1, 60,   )  }  )
RETURN( Self )

METHOD AddItem( oItem )  CLASS TVoNFe2G
local cID,  axArray := {},nPos

    If     oItem:Classname=="TVONFEPROD"
        cID := 'nItem="' + alltrim(str(len(::axItems)+1) ) + '"'
        aadd(::axItems, {cId,{} }  )
        aadd(::axItems[len(::axItems),2], {"prod"     , ::StruProduto(oItem) , 1     }  )
        aadd(::axItems[len(::axItems),2], {"imposto"  , ::StruImpostos(oItem), 1     }  )
        aadd(::axItems[len(::axItems),2], {"infAdProd", TVoNFeItem():New("C", 0, 1,500,,,oItem:infAdProd   )}  )
    ElseIf oItem:ClassName=="TVONFEREFNF"
        nPos:=ascan(::axNodes, {|x| x[1]=="ide" } )
        if nPos!=0
            Do Case
            Case ::nTipoRef==1
                AAdd(::axNodes[nPos,2],{"NFref"  , ::SetRefNfe(oItem) })
            Case ::nTipoRef==2
                AAdd(::axNodes[nPos,2],{"NFref"  , ::SetrefNF(oItem) })
            Case ::nTipoRef==3
                AAdd(::axNodes[nPos,2],{"NFref"  , ::SetrefECF(oItem) })
            Case ::nTipoRef==4
                AAdd(::axNodes[nPos,2],{"NFref"  , ::SetrefNFP(oItem) })
            EndCase
        Endif
    ElseIf oItem:ClassName=="TVONFECOBR"
        //if ::cModeloDoc == "55"
        nPos:=ascan(::axNodes, {|x| x[1]=="cobr" } )
        if nPos==0
            nPos:=ascan(::axNodes, {|x| x[1]=="transp" } )
            Ains(::axNodes,nPos+1)
            ::axNodes[nPos+1]:={"cobr"  , {},0 }
            nPos:=ascan(::axNodes, {|x| x[1]=="cobr" } )
            if nPos!=0
                aadd(::axNodes[nPos,2], {"fat"  , ::StruFatura(oItem) } )
            Endif
        Endif

        if nPos!=0
            //aadd(::axNodes[nPos,2], {"fat"  , ::StruFatura(oItem) } )
            aadd(::axNodes[nPos,2], {"dup"  , ::StruDuplicata(oItem)  }  )
        Endif
    ElseIf oItem:ClassName=="TVONFEPAG"
        // pag
        nPos := ascan(::axNodes, {|x| x[1] == "pag" } )
        if nPos == 0
            nPos := ascan(::axNodes, {|x| x[1] == "cobr" } )
            if nPos==0
                nPos := ascan(::axNodes, {|x| x[1] == "transp" } )
         Endif
            Ains(::axNodes,nPos+1)
            ::axNodes[nPos+1]:={"pag", {}, 0 }
            nPos := ascan(::axNodes, {|x| x[1] == "pag" } )
        Endif
        if nPos != 0
            aadd(::axNodes[nPos,2], {"detPag", ::StruDetPag(oItem)  }  )
         aadd(::axNodes[nPos,2], {"vTroco", TVoNFeItem():new("N", 0, 1,15, 02,,oItem:vTroco )  }  )
        Endif
    Endif
Return( Nil )

// Meu prg
/*********************************************************
 * Função : CriacaoDoXml() -
**********************************************************/
Static Function CriacaoDoXml(cDirPadrao,nTipoRefe,cModeloDoc,cNossaNota,lDuplicat)
Local lPodeTentarMandar := .T.

    //Criação do XML
    oNFe := TVoNFe2G():New(cDirPadrao,nTipoRefe,cModeloDoc)

    //cabeçalho da Nota
    oNFe:SetValue("ide", 'cUF'   , cIdecUF)                                 // 2 Digitos

    ...

    // Totais da NF - Transportadora
    oNFe:SetValue("transp", 'modFrete'   , NfSaida->tramodFret )                            // 0-Emitente; 1=Destinatario
    If Val(NfSaida->TraCnpj) != 0
        oNFe:SetValue("transp", Iif(Len(AllTrim(SoNumeros(NfSaida->traCNPJ)))<=11,"CPF","CNPJ"), SoNumeros(NfSaida->traCNPJ) )                              // CNPJ ou CPF da Transportadora
        oNFe:SetValue("transp", 'xNome'   , NfSaida->traxNome )                             // Razão Social da Transportadora
        oNFe:SetValue("transp", 'IE'      , Iif(Len(AllTrim(SoNumeros(NfSaida->traCNPJ)))<=11,"ISENTO",ClearChar(NfSaida->traIE,{".","-"," ","/"} )))  // Inscrição Estadual
        oNFe:SetValue("transp", 'xEnder'  , NfSaida->traxEnder)                             // Endereço
        oNFe:SetValue("transp", 'xMun'    , NfSaida->traxMun)                               // Municipio
        oNFe:setValue("transp", "UF"      , NfSaida->TraUF )
    Endif
    If NfSaida->TraqVol != 0
        oNFe:SetValue("transp", "qVol"    , NfSaida->traqVol )                                 // Quantidade
        oNFe:SetValue("transp", "esp"     , NfSaida->traesp )                                 // Especie
        oNFe:SetValue("transp", "marca"   , NfSaida->tramarca )                             // Marca
        oNFe:SetValue("transp", "nVol"    , NfSaida->tranVol )                                 // Numeração
    Endif
    oNFe:SetValue("transp", "pesoB"     , NfSaida->trapesoB )                                 // Peso Bruto
    oNFe:SetValue("transp", "pesoL"     , NfSaida->trapesoL )                                 // Peso liquido
    If !Empty(ClearChar(NfSaida->traplaca,{".","-"} ))
        oNFe:setValue("transp", "placa"  , ClearChar(NfSaida->traplaca,{".","-"} ) )
        oNFe:SetValue("veicTransp", 'UF' , NfSaida->VeiUF)                                  // Estado da Transportadora
    Endif

    // para exportacao
    If NfSaida->desUF == "EX"
        oNFe:SetValue("exporta", 'UFSaidaPais' , NfSaida->UFEmbarq )     // Estado de embarque
        oNFe:SetValue("exporta", 'xLocExporta' , NfSaida->LocEmbarq )     // Local de embarque
        oNFe:SetValue("exporta", 'xLocDespacho', NfSaida->LocDespach )    // Local de despacho (Informação do Recinto Alfandegado)
    Endif

    // Rodapé - Informações Adicionais
    oNFe:SetValue("infAdic", 'infCpl' , cInfCpl )      // Informações Adicionais

    // compras
    oNFe:SetValue("compra", 'xNEmp', Space(17)) //Identificação da Nota de Empenho, quando se tratar de compras públicas
    oNFe:SetValue("compra", 'xPed' , Space(60)) //Informar o pedido.
    oNFe:SetValue("compra", 'xCont', Space(60)) //Informar o contrato de compra

    // informações de pagamento para a versao 4.00
    // (por enquanto está somente como pagamento 99-outros)
    LoadPagamentos(oNfe)

    //Carrega Duplicatas
    If lTemDuplicata
        LoadDuplicatas(oNFe)
    Endif
Return (oNFe)

/*********************************************************
 * Função : LoadPagamentos() - Carrega os pagamentos
**********************************************************/
Static Function LoadPagamentos(oNFe)

    oItem := TVoNFePag()

    WITH OBJECT oItem
        // pagamentos
        :indPag    := NfSaida->pagindPag    // indicador da forma de pagamento
        :tPag      := NfSaida->pagtPag    // meio de pagamento
        :vPag      := NfSaida->pagvPag    // Valor do pagamento

        // para uso com cartao de credito
        :tpIntegra := NfSaida->pagTpInteg    // 1-integrado com sistema, 2-nao integrado com sistema

        // essas 3 colunas ou informa todas ou nao informa nenhuma
        :CNPJ_Opc  := NfSaida->pagCnpj    // CNPJ da credenciadora
        :tBand_Opc := NfSaida->pagtBand    // tipo de bandeira
        :cAut_Opc  := NfSaida->pagcAut    // numero da autorizacao

        :vTroco    := NfSaida->pagvTroco    // valor do troco
    END

    oNFe:AddItem( oItem )
Return (Nil)

/*********************************************************
 * Função      : LoadDuplicatas() - Carrega as Duplicatas da nota no XML
**********************************************************/
Static Func LoadDuplicatas(oNFe)
Local oItem
Local nFatu := 0
Local nDupl := 0

    Duplicatas->( DbGotop() )
    Do Whil( !Duplicatas->(eof()) )

        oItem := TVoNfeCobr()

        WITH OBJECT oItem
            //Faturas
            If nFatu == 0
                :nFat  := Duplicatas->FatNumero
                :vOrig := Duplicatas->FatValor
                :vDesc := 0.00
                :vLiq  := Duplicatas->FatValor
                
                nFatu++
            Endif
            //Duplicatas
            nDupl++
            :nDup  := StrZero(nDupl,3) //Duplicatas->DupNumero // Numero da Duplicata
            :dVenc := Duplicatas->DupVencim // Data de vencimento
            :vDup  := Duplicatas->DupValor     // Valor Duplicata
        END

        oNFe:AddItem( oItem ) // LoadDuplicatas()

        Duplicatas->( DbSkip() )
    Enddo
Return (Nil)

   
   

Link to comment
Share on other sites

Bom dia...

Trufelli...

Aparentemente era para estar gerando o XML normalmente, porém já tive alguns problemas ao passar parâmetros inválidos.

A impressão que tenho é que não está passando pela condição: "If (cDetalhes)->desUF == "EX""

Veja se não é o seu caso.

Coloque alguns break point para avaliar os retornos...

? (cDetalhes)->desUF

? (cDetalhes)->UFEmbarq

? (cDetalhes)->LocEmbarq

? (cDetalhes)->LocDespach

 // para exportacao
    If (cDetalhes)->desUF == "EX"
        oNFe:SetValue("exporta", 'UFSaidaPais' , (cDetalhes)->UFEmbarq )         // Estado de embarque
        oNFe:SetValue("exporta", 'xLocExporta' , (cDetalhes)->LocEmbarq )         // Local de embarque
        oNFe:SetValue("exporta", 'xLocDespacho', (cDetalhes)->LocDespach )        // Local de despacho (Informação do Recinto Alfandegado)
    Endif

Abrs.

Link to comment
Share on other sites

Oi Boa Tarde

GIlmer, coloquei como voce sugeriu, mas continua não gerando as tags corretamente.

O estranho é que se colocar antes "exporta" e depois "infCpl" o XML gera com a tag "exporta" sem a tag "infCpl"

  // para exportacao
    If NfSaida->desUF == "EX"
        oNFe:SetValue("exporta", 'UFSaidaPais' , NfSaida->UFEmbarq )     // Estado de embarque
        oNFe:SetValue("exporta", 'xLocExporta' , NfSaida->LocEmbarq )     // Local de embarque
        oNFe:SetValue("exporta", 'xLocDespacho', NfSaida->LocDespach )    // Local de despacho (Informação do Recinto Alfandegado)
    Endif

    // Rodapé - Informações Adicionais
    oNFe:SetValue("infAdic", 'infCpl' , cInfCpl )      // Informações Adicionais

XML :

        <cobr>
            <fat>
                <nFat>125837</nFat>
                    <vOrig>57051.60</vOrig>
                    <vDesc>0.00</vDesc>
                    <vLiq>57051.60</vLiq>
                </fat>
            <dup>
                <nDup>001</nDup>
                <dVenc>2018-08-13</dVenc>
                <vDup>57051.60</vDup>
            </dup>
        </cobr>
        <pag>
            <detPag>
                <indPag>0</indPag>
                <tPag>99</tPag>
                <vPag>57051.60</vPag>
            </detPag>
        </pag>
        <infAdic>
            <infCpl>INCOTERM EX-WORKS (EXW);PEDIDO : 036708, 037112</infCpl>
        </infAdic>
    </infNFe>
</NFe>

Mas se coloca antes "infCpl" depois "exporta" o XML gera com a tag ""infCpl"" sem a tag "exporta"

  // para exportacao
    If NfSaida->desUF == "EX"
        oNFe:SetValue("exporta", 'UFSaidaPais' , NfSaida->UFEmbarq )     // Estado de embarque
        oNFe:SetValue("exporta", 'xLocExporta' , NfSaida->LocEmbarq )     // Local de embarque
        oNFe:SetValue("exporta", 'xLocDespacho', NfSaida->LocDespach )    // Local de despacho (Informação do Recinto Alfandegado)
    Endif

    // Rodapé - Informações Adicionais
    oNFe:SetValue("infAdic", 'infCpl' , cInfCpl )      // Informações Adicionais

XML 

        -<cobr>
            -<fat>
                <nFat>125837</nFat>
                <vOrig>57051.60</vOrig>
                <vDesc>0.00</vDesc>
                <vLiq>57051.60</vLiq>
            </fat>
            -<dup>
                <nDup>001</nDup>
                <dVenc>2018-08-13</dVenc>
                <vDup>57051.60</vDup>
            </dup>
        </cobr>
        -<pag>
            -<detPag>
                <indPag>0</indPag>
                <tPag>99</tPag>
                <vPag>57051.60</vPag>
            </detPag>
        </pag>
        -<exporta>
            <UFSaidaPais>SP</UFSaidaPais>
            <xLocExporta>Sao Paulo - Brasil</xLocExporta>
        </exporta>
    </infNFe>
</NFe>

 

Valdir 

Quanto aos breaks eu já havia feito isso, está passando normal e com os dados corretos.

Realmente está muito estranho 

Obrigado às respostas, 

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...