Jump to content
Fivewin Brasil

Função File Falha


crisvam

Recommended Posts

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

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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)

Link to comment
Share on other sites

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()
********************************************************************************   

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...