Versão atual:

Criar SC EXECAUTO

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

Versão (1):

Ver a versão formatada

Criar SC EXECAUTO

  • criado 07 de Apr de 2022

Comentário

new question