Cadastro de Plano de Contas via ExecAuto com CSV

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)
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!

0 resposta

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