crisvam Posted February 1, 2023 Report Share Posted February 1, 2023 Senhores, Tenho um problema com a função File, assim: Tenho um arqivo de controle de chave das NFC-e enviadas Pego a Chave := Chave+"-nfe.xml" Path = "\Pvenda\Remessa\Protocolos\Chave" O arquivo XML existe na pasta protocolos, mas a função File não o encontra. ? File("\Pvenda\Remessa\Protocolos\Chave") A função me retorna .F. ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- A função Adir Encontra os arquivos XML, mas eu gostaria de fazer um While no arquivo de chaves e ler o XML no arquivo Protocolos, pois a função Adir ler todos os arquivos da pasta e eu gostaria de escolher os XMLs pela chave como mostrei acima. Já fiz um filtro nos arquivos lidos pela função Adir, Mas ao tentar abrir o arquivo com a Função Fopen, esta me retorna False e daí a Classe TxmlDocument não consegue ler o arquivo.. A função cGetFile, também ler, mas de um em um arquivo Alguem tem uma ideia de como solucionar isto e que possa me dar uma clareada? Grato a todos Quote Link to comment Share on other sites More sharing options...
lucimauromelo Posted February 1, 2023 Report Share Posted February 1, 2023 Ola File("\Pvenda\Remessa\Protocolos\"+Chave) Quote Link to comment Share on other sites More sharing options...
kapiaba Posted February 1, 2023 Report Share Posted February 1, 2023 ou: File(".\Pvenda\Remessa\Protocolos\"+Chave) Quote Link to comment Share on other sites More sharing options...
Ladinilson Posted February 1, 2023 Report Share Posted February 1, 2023 Não seria por falta do drive onde ele está ou estou ficando doido aqui?! drive:=CURDRIVE() File(drive+":"+"\Pvenda\Remessa\Protocolos\Chave") Abs Quote Link to comment Share on other sites More sharing options...
crisvam Posted February 1, 2023 Author Report Share Posted February 1, 2023 Obrigado a: Lucimauromelo kapiaba Ladinilson Engraçado que as funções: Adir, Directory, cGetFile Talvez a minha versão do xHarbour teja com problemas Quote Link to comment Share on other sites More sharing options...
kapiaba Posted February 1, 2023 Report Share Posted February 1, 2023 ao inicio do módulo, fizestes isso: #Include "Directry.ch" ?? Regards, saludos. Quote Link to comment Share on other sites More sharing options...
emotta Posted February 1, 2023 Report Share Posted February 1, 2023 Vc consegue fazer um fonte simplificado simulando o problema? A chance da função FILE estar bugada é praticamente zero, é possivel que esteja mas o mais provavel é que seu código esteja com algo errado. Se fizer um fonte simplificado pra simular o problema pode ser que vc mesmo já identifique o erro ou então postando aqui fica mais fácil de lhe ajudarmos. Quote Link to comment Share on other sites More sharing options...
kapiaba Posted February 1, 2023 Report Share Posted February 1, 2023 12 minutos atrás, emotta disse: Vc consegue fazer um fonte simplificado simulando o problema? A chance da função FILE estar bugada é praticamente zero, é possivel que esteja mas o mais provavel é que seu código esteja com algo errado. Se fizer um fonte simplificado pra simular o problema pode ser que vc mesmo já identifique o erro ou então postando aqui fica mais fácil de lhe ajudarmos. Concordo plenamente com o mestre Emotta. Regards, saludos. Quote Link to comment Share on other sites More sharing options...
Theotokos Posted February 1, 2023 Report Share Posted February 1, 2023 eu sempre coloco no parâmetro da função File() o caminho completo + nome do arquivo + extensão; se falta algo não funciona, não acha o arquivo mesmo TESTA AI O PARAMETROS QUE VC ESTA PASSANDO PARA A FUNÇÃO FILE() SE ESTA COMPLETA... cArquivo := "MeuArquivo" cExtensao := ".XML" cpatch := "C:\ARQ_XML\" ? cPath+cArquivo+cExtensao ? File( cPath+cArquivo+cExtensao) Quote Link to comment Share on other sites More sharing options...
kapiaba Posted February 1, 2023 Report Share Posted February 1, 2023 ou: File(".\Pvenda\Remessa\Protocolos\"+Chave+".xml") Regards, saludos. Theotokos 1 Quote Link to comment Share on other sites More sharing options...
crisvam Posted February 1, 2023 Author Report Share Posted February 1, 2023 Vou postar o codigo fonte aquie, se alguém tiver um tempo pra dar uma verificada> rocedure Ler_Xml() Memvar wCdf,dIni,dFim,bCond Local mXml,mDado :={},nArea,nOrd,Chave,cArq,Ano,Mes,mDia[2],lOpe:=.F. Local oRep,oDig,oGet[2],oFnt[2],oPen,cRod,cTit,Cabae,nField:=1,wCras,Arq Private dIni,dFim,vCond ******************************************************************************** Abre_ArqSistem(.T.) nOrd := IndexOrd() nArea := Select() Chave := Space(44) DbSelectArea("RETORNO") Retorno->(DbSetOrder(3) ) dIni := Ctod(Space(8) ) dFim := Ctod(Space(8) ) Flag := PesqDat() If Empty(dIni) Return Endif Ano := STR(YEAR(dIni),4) Mes := StrZero(Month(dIni),2) mDIA[1] := STRZERO(DAY(dIni),2) mDIA[2] := STRZERO(DAY(dFim),2) wCras := Empe->Raso Cabe := "Emissão da Empresa: "+wCras cTic := "XML calculado de "+mDia[1]+" a "+mDia[2]+" de "+Mes+" de "+Ano cRod := "Página: " Retorno->(OrdScope(TOPSCOPE,Dtos(dIni)) ) Retorno->(OrdScope(BOTTOMSCOPE,Dtos(dFim)) ) Retorno->(DbGotop() ) Do While Eval(vCond,Retorno->Demi) Chave := Retorno->Chav+"-nfe.xml" // Arq := MemoRead("\PVenda\remessa\Protocolos "+Chave) não funciona Arq :=cGetFile("\PVenda\remessa\Protocolos "+Chave) // funciona um por um Arq := Right(Arq,52) If Empty(Arq) MsgAlert("O arquivo "+Chave+" não foi encontrado","Cup_System:Alerata") Return Endif mXml := RetornaConteudoXml(Arq) AADD(mDado,{mXml[1,1],mXml[1,2],mXml[1,3],mXml[1,4],mXml[1,5]}) Retorno->(DbSkip() ) Enddo lOpe := MsgNoYes("Imprime o relatorio?","Cup_System: Pergunta") If lOpe Define Font oFnt[1] Name "Arial" Size 0,-12 Define Font oFnt[2] Name "Courier new" Size 0,-10 Define Pen oPen width 1 Report oRep Title cTit Pen oPen Font oFnt[1],oFnt[2] Caption "Ver Relatorios"; Header Cabe,"" Center Footer Dtoc(Date() )+" "+cRod+Str(oRep:nPage,3) CENTER; PREVIEW Column Title "Documento" Data mDado[nField,1] Font 2 Column Title "Unid" Data mDado[nField,2] Font 2 Column Title "Qtde" Data mDado[nField,3] Picture "@E ##,###.##" Font 2 Column Title "Punit" Data mDado[nField,4] Picture "@E ##,###.##" Font 2 Column Title "Total" Data mDado[nField,5] Total Picture "@E ###,###.##" Font 2 End Report oRep:bSkip := {|| nField++} oRep:oTitle:aFont[1] := {|| 1 } oRep:cPageTotal := "Total da Página: " oRep:cGrandTotal := "Total das notas aprovadas: " Activate Report oRep WHILE nField <= len(mDado) Retorno->(DbSetOrder(nOrd) ) oFnt[1]:End() oFnt[2]:End() DBSelectArea(nArea) Endif ******************************************************************************** Return // Fim do Proc Ler_Xml ******************************************************************************** Function RetornaConteudoXml(cFileName) Local cDoc:=Space(9),nVdoc,vUnid,nQtde,pUnit,hFile,mRet := {} Local xmlDoc,xmlIter,xmlNode,cNode,cAttrib,cValue,oCampo,oConteudo ******************************************************************************** cNode := NIL cAttrib := NIL cValue := NIL hFile := FOpen("\Pvenda\remessa\Protocolos\"+cFilename) If FError()<>0 ? "Erro ao abri o arquivo",Ferror() Return Endif xmlDoc := TXmlDocument():New(hFile ) xmlDoc:Read(cFilename) If xmlDoc:nStatus != 1 Alert("erro ao ler XML ") Return Nil Endif xmlIter := TXmlIterator():New( xmlDoc:oRoot ) xmlNode := xmlIter:Find() DO WHILE xmlNode != NIL If !empty(xmlNode:cData) If subs(xmlNode:cData,1,1) # "<" oCampo :=xmlNode:cName oConteudo:=xmlNode:cData Endif Else oCampo :=xmlNode:cName oConteudo:="" Endif If oCampo == "xPed" cDoc := oConteudo ElseIf oCampo == "uCom" vUnid := oConteudo ElseIf oCampo == "qCom" nQtde := oConteudo ElseIf oCampo == "vUnCom" pUnit := oConteudo ElseIf oCampo == "vProd" nVdoc := oConteudo Endif // alert( Padr("Campo...: "+oCampo,70)+";"+; // Padr("Conteudo: "+oConteudo,70)) xmlNode := xmlIter:Next() // joga pro proximo campo Enddo AADD(mRet,{cDoc,vUnid,Val(nQtde),Val(pUnit),Val(nVdoc)} ) ******************************************************************************** Return (mRet) // Fim da função RetornaConteudoXml() ******************************************************************************** Quote Link to comment Share on other sites More sharing options...
kapiaba Posted February 1, 2023 Report Share Posted February 1, 2023 Chave := Retorno->Chav // NAO DEIXE ESPACOS EM BRANCO: Assim, tem que funcionar ARQ := "PVENDA\REMESSA\PROTOCOLOS\" + ALLTRIM(Chave) + "-nfe.xml" ? ARQ // nao vai mostrar espacos em branco... eu acho. kkkkk Regards, saludos. Quote Link to comment Share on other sites More sharing options...
crisvam Posted February 1, 2023 Author Report Share Posted February 1, 2023 Kapiaaaaabaaaa, vc é o cara! Ok, my brother, valeu. BRIGADOOOOOOOO Quote Link to comment Share on other sites More sharing options...
Jmsilva Posted February 2, 2023 Report Share Posted February 2, 2023 Já testou hb_FileExists(cFile) 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.