Se alguma pergunta ou resposta lhe foi útil, não deixe de dar seu voto positivo!

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

2 respostas

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