trufelli Posted August 8, 2018 Report Share Posted August 8, 2018 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 Quote Link to comment Share on other sites More sharing options...
trufelli Posted August 8, 2018 Author Report Share Posted August 8, 2018 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. Quote Link to comment Share on other sites More sharing options...
trufelli Posted August 9, 2018 Author Report Share Posted August 9, 2018 up Quote Link to comment Share on other sites More sharing options...
marceloCR Posted August 9, 2018 Report Share Posted August 9, 2018 acontece isso? Quote Link to comment Share on other sites More sharing options...
trufelli Posted August 9, 2018 Author Report Share Posted August 9, 2018 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 ) } ) Quote Link to comment Share on other sites More sharing options...
trufelli Posted August 9, 2018 Author Report Share Posted August 9, 2018 Voce conseguiu resolver Marcelo ? Quote Link to comment Share on other sites More sharing options...
gilmer Posted August 9, 2018 Report Share Posted August 9, 2018 Boa Tarde, Verifique se o xml realmente esta sendo criado, se não tivesse a tag para adicionar daria erro. Quote Link to comment Share on other sites More sharing options...
marceloCR Posted August 9, 2018 Report Share Posted August 9, 2018 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 ) ..... Quote Link to comment Share on other sites More sharing options...
kapiaba Posted August 9, 2018 Report Share Posted August 9, 2018 <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> Quote Link to comment Share on other sites More sharing options...
trufelli Posted August 9, 2018 Author Report Share Posted August 9, 2018 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 ) Quote Link to comment Share on other sites More sharing options...
trufelli Posted August 9, 2018 Author Report Share Posted August 9, 2018 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) Quote Link to comment Share on other sites More sharing options...
marceloCR Posted August 9, 2018 Report Share Posted August 9, 2018 <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). Quote Link to comment Share on other sites More sharing options...
trufelli Posted August 9, 2018 Author Report Share Posted August 9, 2018 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" Quote Link to comment Share on other sites More sharing options...
marceloCR Posted August 9, 2018 Report Share Posted August 9, 2018 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? Quote Link to comment Share on other sites More sharing options...
trufelli Posted August 9, 2018 Author Report Share Posted August 9, 2018 pois é, ja fiz de tudo, tenta colocar nessa sequencia que nao vai dar o erro que voce comentou, justamente colocando antes da o erro. Quote Link to comment Share on other sites More sharing options...
marceloCR Posted August 9, 2018 Report Share Posted August 9, 2018 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 ) Quote Link to comment Share on other sites More sharing options...
trufelli Posted August 9, 2018 Author Report Share Posted August 9, 2018 Estou usando uma do dia 16/07 segue anexo vonfeutil2g_v4_3.zip Quote Link to comment Share on other sites More sharing options...
marceloCR Posted August 9, 2018 Report Share Posted August 9, 2018 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. Quote Link to comment Share on other sites More sharing options...
trufelli Posted August 9, 2018 Author Report Share Posted August 9, 2018 é verdade, estava diferente mesmo, porém testei e o resultado foi o mesmo, nao gerou todas as tags Quote Link to comment Share on other sites More sharing options...
marceloCR Posted August 10, 2018 Report Share Posted August 10, 2018 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? Quote Link to comment Share on other sites More sharing options...
trufelli Posted August 10, 2018 Author Report Share Posted August 10, 2018 Gilmer, poderia nos auxiliar Tem algo a mais ou a menos na classe que nao está deixando gerar as tags corretamente. Obrigado Quote Link to comment Share on other sites More sharing options...
trufelli Posted August 10, 2018 Author Report Share Posted August 10, 2018 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) Quote Link to comment Share on other sites More sharing options...
gilmer Posted August 13, 2018 Report Share Posted August 13, 2018 Não vejo motivo para não estar gerando. Mas... tenho uma suspeita. Abra a Vonfe2g_v4.prg procure por aIns e insira um segundo parâmetro .t. , ficando assim Ains(::axNodes,nPos+1,.t.) Quote Link to comment Share on other sites More sharing options...
Valdir Posted August 13, 2018 Report Share Posted August 13, 2018 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. Quote Link to comment Share on other sites More sharing options...
trufelli Posted August 13, 2018 Author Report Share Posted August 13, 2018 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, Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.