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