Error log ao incluir itens na grid do pedido de vendas

Boa tarde amigos,

Estou desenvolvendo um programa para importar os itens de um pedido de venda à partir de um arquivo CSV, o processo de leitura do arquivo está funcionando legal. O problema é quando ele vai inserir os itens na grid apresenta um error log que eu não lembro de visto antes. Alguém poderia me ajudar?

/*/{Protheus.doc} ImpItens
Rotina de importacao dos pedidos de compra
@type function
@version 1.0.1
@author marcos.sanches
@since 12/21/2023
/*/
Static Function ImpItens()
   Local cTmp :="C:\"
   Local cArquivo := "" 

   if MSGYESNO("Iniciar importacao dos itens?", "TOTVS" )
      cArquivo := tFileDialog( "Arquivos CSV (*.csv) ", 'Selecao de Arquivos',, cTmp, .F.,)
      LeArquivo(cArquivo)
   EndIf
Return

/*/{Protheus.doc} LeArquivo
Funcao para leitura do arquivo e importacao dos itens do pedido de venda
@type function
@version 1.0.1
@author marcos.sanches
@since 12/22/2023
@param Caminho, character, Caminho e nome do arquivo csv a ser importado
/*/
Static Function LeArquivo(Caminho)
   If !Empty(Caminho)
      If File(caminho) .And. Upper(SubStr(Caminho,RAt(".",Caminho) + 1,3)) == "CSV"
         Processa({|| Importa(Caminho)},"Importando itens")
      Else
         MSGSTOP("Arquivo com extensao invalida", "TOTVS" )
      EndIf
   Endif
Return

/*/{Protheus.doc} Importa
Processa a importacao do arquivo
@type function
@version 1.0.1 
@author marcos.sanches
@since 12/22/2023
@param Arquivo, array, arquivo CSV
/*/
Static Function Importa(Arquivo)
   Local aArea       := GetArea()
   Local nTotLinhas  := 0
   Local cLinAtu     := ""
   Local nLinhaAtu   := 0
   Local aLinha      := {}
   Local aItens      := {}
   Local i           := 1
   Local oArquivo
   Local aLinhas
   Local nValUni     := 0
   Local nQtd        := 0
   Local nValTot     := 0

   oArquivo := FWFileReader():New(Arquivo)

   If (oArquivo:Open())
      If ! (oArquivo:EoF())
         //Definindo o tamanho da régua
         aLinhas := oArquivo:GetAllLines()
         nTotLinhas := Len(aLinhas)

         ProcRegua(nTotLinhas)

         oArquivo:Close()
         oArquivo := FWFileReader():New(Arquivo)
         oArquivo:Open()

         While (oArquivo:HasLine())
            //Incrementa na tela a mensagem
            nLinhaAtu++
            IncProc("Analisando linha " + cValToChar(nLinhaAtu) + " de " + cValToChar(nTotLinhas) + "...")

            //Pegando a linha atual e transformando em array
            cLinAtu := oArquivo:GetLine()
            aLinha  := StrTokArr(cLinAtu, ";")
            aadd(aItens,aLinha)
         EndDo

         For i := 1 to len(aItens)

            IncProc("Importando linha " + cValToChar(i) + " de " + cValToChar(len(aItens)) + "...")

            acols[Len(Acols)][aScan(aHeader,{|x|Alltrim(x[2])=="C6_ITEM"})] := aItens[i][1]
            acols[Len(Acols)][aScan(aHeader,{|x|Alltrim(x[2])=="C6_PRODUTO"})] := aItens[i][2]

            DbSelectArea("SB1")
            SB1->(DbSetOrder((1)))
            SB1->(dbSeek(FwxFilial('SB1') + aItens[i][2]))

            nValUni := Val(StrTran(aItens[i][5],",","."))
            nQtd := Val(StrTran(aItens[i][4],",","."))
            nValTot := nQtd * nValUni

            acols[Len(Acols)][aScan(aHeader,{|x|Alltrim(x[2])=="C6_DESCRI"})] := SB1->B1_DESC
            acols[Len(Acols)][aScan(aHeader,{|x|Alltrim(x[2])=="C6_UM"})] := aItens[i][3]
            acols[Len(Acols)][aScan(aHeader,{|x|Alltrim(x[2])=="C6_QTDVEN"})] := Val(StrTran(aItens[i][4],",","."))
            acols[Len(Acols)][aScan(aHeader,{|x|Alltrim(x[2])=="C6_PRCVEN"})] := Val(StrTran(aItens[i][5],",","."))
            acols[Len(Acols)][aScan(aHeader,{|x|Alltrim(x[2])=="C6_VALOR"})] := nValTot
            acols[Len(Acols)][aScan(aHeader,{|x|Alltrim(x[2])=="C6_QTDLIB"})] := Val(StrTran(aItens[i][4],",","."))

            aadd(aCols,Array(Len(aHeader)+1))
         Next
      Else
         MsgStop("Arquivo não tem conteúdo!", "Atenção")
      EndIf

      //Fecha o arquivo
      oArquivo:Close()
   Else
      MsgStop("Arquivo não pode ser aberto!", "Atenção")
   EndIf
   RestArea(aArea)
Return
compartilhar
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do TOTVS DevForum!

2 respostas

Não é a resposta que estava procurando? Procure outras perguntas com as tags advpl pedidovenda ou faça a sua própria pergunta.