Fala pessoal, boa noite tudo bom?
Estou desenvolvendo um fonte que irá ler um arquivo csv e importar para o Protheus as informações, o programa está lendo normalmente o arquivo porem não está preenchendo as tabelas CT1 e CVD, debugando verifiquei que o erro pode estar entre as linhas 100 e 137 pois ao colocar o breakproint em alguma linha com a função aAdd o debug nao para e processa direto. Ou seja nao esta passando por este array
Segue fonte abaixo:
User Function zImpPlano()
Local aArea := FWGetArea()
Local cDirIni := GetTempPath()
Local cTipArq := "Arquivo com Separações (*.csv)"
Local cTitulo := "Seleção de Arquivos para Processamento"
Local lSalvar := .F.
Local cArqSel := ""
If ! IsBlind()
cArqSel := tFileDialog(;
cTipArq,;
cTitulo,;
,;
cDirIni,;
lSalvar,;
;
)
If ! Empty(cArqSel) .And. File(cArqSel)
Processa({|| fImporta(cArqSel)}, "Importa")
EndIf
EndIf
FwRestArea(aArea)
Return
Static Function fImporta(cArqSel)
Local cDirLog := GetTempPath()
Local cArqLog := "zArqui11_"+ dToS(Date()) + "_" + StrTran(Time() , ':', "-") + ".log"
Local nTotLinhas := 0
Local cLinAtu := ""
Local nLinhaAtu := 0
Local aLinha := {}
Local oArquivo
Local aLinhas
// Local oCT1
Private nPosTip := 1
//CT1
Private nCT1Filial := 2
Private nCT1Conta := 3
Private nCT1Desc := 4
Private nCT1Classe := 5
Private nCT1Normal := 6
Private nCT1Superior := 7
Private nCT1Livro := 8
Private nCT1NatCta := 9
Private nCT1NatSpd := 10
//CVD
Private nCVDFilial := 2
Private nCVDConta := 3
Private nCVDEntRef := 4
Private nCVDCodPla := 5
Private nCVDVersao := 6
Private nCVDCtaRef := 7
Private nCVDCusto := 8
Private nCVDTpUtil := 9
Private nCVDClasse := 10
Private nCVDNatCta := 11
Private nCVDCtaSup := 12
Private aCT1 := {}
Private aCT2 := {}
Private cLog := ""
oArquivo := FWFileReader():New(cArqSel)
If (oArquivo:Open())
If ! (oArquivo:Eof())
aLinhas := oArquivo:GetAllLines()
nTotLinhas := Len(aLinhas)
ProcRegua(nTotLinhas)
oArquivo:Close()
oArquivo := FWFileReader():New(cArqSel)
oArquivo:Open()
Begin Transaction
While (oArquivo:Hasline())
nLinhaAtu++
IncProc("Analisando Linha " + cValToChar(nLinhaAtu) + " de " + cValToChar(nTotLinhas) + " ...-")
cLinAtu := oArquivo:GetLine()
aLinha := Separa(cLinAtu, ";", .T.)
If Len(aLinha) > 0
If Upper(aLinha[nPosTip]) == "1"
fNovaConta()
//aCT1 := {}
//aCVD := {}
If Len(aLinha) == nCT1NatSpd
aAdd(aCT1,{'CT1_FILIAL',aLinha[nCT1Filial]})
aAdd(aCT1,{'CT1_CONTA',aLinha[nCT1Conta]})
aAdd(aCT1,{'CT1_DESC',aLinha[nCT1Desc]})
aAdd(aCT1,{'CT1_CLASSE',aLinha[nCT1Classe]})
aAdd(aCT1,{'CT1_NORMAL',aLinha[nCT1Normal]})
aAdd(aCT1,{'CT1_CTASUP',aLinha[nCT1Superior]})
aAdd(aCT1,{'CT1_BOOK',aLinha[nCT1Livro]})
aAdd(aCT1,{'CT1_NATCTA',aLinha[nCT1NatCta]})
aAdd(aCT1,{'CT1_NATSPED',aLinha[nCT1NatSpd]})
EndIf
ElseIf Upper(aLinha[nPosTip]) == "2" .And. Len(aLinha) == nCVDCtaSup
aAdd(aCT2, {'CVD_FILIAL' ,aLinha[nCVDFilial]})
aAdd(aCT2, {'CVD_CONTA' ,aLinha[nCVDConta]})
aAdd(aCT2, {'CVD_ENTREF' ,aLinha[nCVDEntRef]})
aAdd(aCT2, {'CVD_CODPLA' ,aLinha[nCVDCodPla]})
aAdd(aCT2, {'CVD_VERSAO' ,aLinha[nCVDVersao]})
aAdd(aCT2, {'CVD_CTAREF' ,aLinha[nCVDCtaRef]})
aAdd(aCT2, {'CVD_CUSTO' ,aLinha[nCVDCusto]})
aAdd(aCT2, {'CVD_TPUTIL' ,aLinha[nCVDTpUtil]})
aAdd(aCT2, {'CVD_CLASSE' ,aLinha[nCVDClasse]})
aAdd(aCT2, {'CVD_NATCTA' ,aLinha[nCVDNatCta]})
aAdd(aCT2, {'CVD_CTASUP' ,aLinha[nCVDCtaSup]})
EndIf
EndIf
EndDo
fNovaConta()
End Transaction
If ! Empty(cLog)
MemoWrite(cDirLog + cArqLog, cLog)
ShellExecute("OPEN", cArqLog, "", cDirLog,1)
EndIf
Else
MsgStop("Arquivo não tem Conteúdo", "Atenção")
EndIf
EndIf
Return
Static Function fNovaConta()
Local nOpcAuto := 0
Local nX
Local cLog := ""
Local lRet := .T.
Local oCT1
Local oCVD
//DbSelectArea("CT1")
//CT1->(DbSetOrder(1))
//DbSeek(xFilial("CT1")+CT1->CT1_CONTA)
If Len(aCT1) > 0 .And. Len(aCT2) > 0
If oModelCTB == Nil
oModelCTB := FWLoadModel('CTBA020')
EndIf
nOpcAuto := 4
oModelCTB:SetOperation(nOpcAuto)
oModelCTB:Activate()
oCT1:= oModelCTB:GetModel('CT1MASTER')
oCT1:setValue('CT1_FILIAL', aCT1[nCT1Filial])
oCT1:setValue('CT1_CONTA', aCT1[nCT1Conta])
oCT1:setValue('CT1_DESC', aCT1[nCT1Desc])
oCT1:setValue('CT1_CLASSE', aCT1[nCT1Classe])
oCT1:setValue('CT1_NORMAL', aCT1[nCT1Normal])
oCT1:setValue('CT1_CTASUP', aCT1[nCT1Superior])
oCT1:setValue('CT1_BOOK', aCT1[nCT1Livro])
oCT1:setValue('CT1_NATCTA', aCT1[nCT1NatCta])
oCT1:setValue('CT1_NATSPED',aCT1[nCT1NatSpd])
oCVD:= oModelCTB:GetModel('CVDDETAIL')
oCVD:setValue('CVD_FILIAL', aCT2[nCVDFilial])
oCVD:setValue('CVD_CONTA', aCT2[nCVDConta])
oCVD:setValue('CVD_ENTREF', aCT2[nCVDEntRef])
oCVD:setValue('CVD_CODPLA', aCT2[nCVDCodPla])
oCVD:setValue('CVD_VERSAO', aCT2[nCVDVersao])
oCVD:setValue('CVD_CTAREF', aCT2[nCVDCtaRef])
oCVD:setValue('CVD_CUSTO', aCT2[nCVDCusto])
oCVD:setValue('CVD_TPUTIL', aCT2[nCVDTpUtil])
oCVD:setValue('CVD_CLASSE', aCT2[nCVDClasse])
oCVD:setValue('CVD_NATCTA', aCT2[nCVDNatCta])
oCVD:setValue('CVD_CTASUP', aCT2[nCVDCtaSup])
If oModelCTB:VldData()
oModelCTB:CommitData()
Else
aLog := oModelCTB:GetErrorMessage()
For nX := 1 to Len(aLog)
If !Empty(aLog[nX])
cLog += Alltrim(aLog[nX]) + CRLF
EndIf
Next nX
lMsErroAuto := .T.
AutoGRlog(cLog)
MostraErro()
lRet := .F.
EndIf
oModelCTB:DeActivate()
EndIf
Return(lRet)