Versão atual:

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

Versão (1):

Ver a versão formatada

Error log ao incluir itens na grid do pedido de vendas

Comentário

new question