Boa tarde Amigos e Amigas.
Estou desenvolvendo um programa que deve realizar SC com centenas de itens.
Premissa: Importa um arquivo TXT ou CSV, criado pelo usuário e apartir desse arquivo monta a SC.
Porém estou tendo um problema, creio que na lógica.
Ele lê o arquivo e todos os dados dentro do arquivo, porém no momento de montar a SC ele monta com apenas um item que no caso será o último lido.
Eu preciso que a cada loop do While ele pule para a próxima linha na grid do Proteheus, Segue o trecho em que estou tendo problemas:
//Se o arquivo pode ser aberto
If (oArquivo:Open())
//Se não for fim do arquivo
If ! (oArquivo:EoF())
//Definindo o tamanho da régua
aLinhas := oArquivo:GetAllLines()
nTotLinhas := Len(aLinhas)
ProcRegua(nTotLinhas)
//Método GoTop não funciona (dependendo da versão da LIB), deve fechar e abrir novamente o arquivo
oArquivo:Close()
oArquivo := FWFileReader():New(cArqSel)
oArquivo:Open()
//Iniciando controle de transação
Begin Transaction
aCabec := {}
cDoc := GetSXENum("SC1","C1_NUM")
SC1->(dbSetOrder(1))
While SC1->(dbSeek(xFilial("SC1")+cDoc))
ConfirmSX8()
cDoc := GetSXENum("SC1","C1_NUM")
EndDo
aadd(aCabec,{"C1_NUM" , cDoc })
aadd(aCabec,{"C1_SOLICIT" , __cUserID })
aadd(aCabec,{"C1_EMISSAO" , dDataBase })
aadd(aCabec,{"C1_FILIAL" , xFilial("SC1")})
//Enquanto tiver linhas
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 := Separa(cLinAtu, ';')
//Se houver posições no array
If Len(aLinha) > 0
aDados := {}
aItens := {}
nx := 1
aadd(aDados, {"C1_ITEM" , StrZero(nx,len(SC1->C1_ITEM)),Nil})
aAdd(aDados, {"C1_PRODUTO" , aLinha[1] , Nil})
aAdd(aDados, {"C1_QUANT" , VAL(aLinha[2]) , Nil})
aadd(aDados, {"C1_OBS" , "TESTE" , Nil})
aadd(aItens,aDados)
EndIf
EndDo
If !Empty(aItens)
lMsErroAuto := .F.
MSExecAuto({|x,y| mata110(x,y)},aCabec,aItens, 3)
//Se houve erro, gera o log
If lMsErroAuto
cPastaErro := '\x_logs\'
cNomeErro := 'erro_' + cAliasImp + '_' + dToS(Date()) + '_' + StrTran(Time(), ':', '-') + '.txt'
//Se a pasta de erro não existir, cria ela
If ! ExistDir(cPastaErro)
MakeDir(cPastaErro)
EndIf
//Pegando log do ExecAuto, percorrendo e incrementando o texto
aLogErro := GetAutoGRLog()
For nLinhaErro := 1 To Len(aLogErro)
cTextoErro += aLogErro[nLinhaErro] + CRLF
Next
//Criando o arquivo txt e incrementa o log
MemoWrite(cPastaErro + cNomeErro, cTextoErro)
EndIf
Endif
End Transaction
//Se tiver log, mostra ele
If ! Empty(cLog)
MemoWrite(cDirTmp + cArqLog, cLog)
ShellExecute('OPEN', cArqLog, '', cDirTmp, 1)
EndIf
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