PERGUNTAS E RESPOSTAS
 
Bem Vindo, Visitante  Todos os Fórums
  ADVPL
Enviar para a impressoraImprimir  Enviar e-mail para um amigoEnviar Para um Amigo
Precisa estar Logado

Subject Assunto:
Execauto mata200
Versão:
12.1.2210
Plataforma:
Microsoft
Complemento:
DB:
SQL Server
Complemento:
LinkedIn
Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário PIETRCK PIETRCK em 25/10/2023, 08:59 h
Local: PR  Registro: 25/10/2023  Postagens: 2
Bom dia,

Tenho uma customização para importação em massa de estrutura de produtos, utilizando o execauto da MATA200. Porém sempre que executo ele insere apenas o primeiro registro, no segundo ele afirma que o código é inválido. Segue o código:

If ! (oFile:EoF())
            nLinha := 1
            aItens := {}

            //Enquanto houver linhas a serem lidas
            While (oFile:HasLine())
               MsProcTxt("Analisando registro " + cValToChar(nLinha))
               //Buscando o texto da linha atual
               cLinAtu := oFile:GetLine()

               //Despreza o cabeçalho
               if nLinha > 1
              
                    aDadosTemp := Separa(cLinAtu, ‘;‘, .T.)

                    IF cCodigo != aDadosTemp[1]
                        cCodigo := aDadosTemp[1]

                        if LEN(aCab) != 0

                            MSExecAuto({|x,y,z| mata200(x,y,z)},aCab,aItens,3,.F.)
              
                            If !lMsErroAuto
                                AutoGrLog("Incluido com sucesso a estrutura do produto " + aCab[1][2] + cPulLin)
                            EndIf
                            
                        endif

                        aItens := {}
                        aCab := {}

                        aCab := {{"G1_COD",aDadosTemp[1],NIL},;
                        {"G1_QUANT",VAL(aDadosTemp[4]),NIL},;
                        {"NIVALT","S",NIL},;
                        {"ATUREVSB1","N",NIL}}

                    ENDIF
                        
                    aadd(aGets,{"G1_COD",aDadosTemp[1],NIL})
                    aadd(aGets,{"G1_COMP",aDadosTemp[2],NIL})
                    aadd(aGets,{"G1_TRT",aDadosTemp[3],NIL})
                    aadd(aGets,{"G1_QUANT",VAL(aDadosTemp[4]),NIL})
                    aadd(aGets,{"G1_PERDA",VAL(aDadosTemp[5]),NIL})
                    aadd(aGets,{"G1_INI",CTOD(aDadosTemp[6]),NIL})
                    aadd(aGets,{"G1_FIM",CTOD(aDadosTemp[7]),NIL})
                    aadd(aGets,{"G1_REVINI",aDadosTemp[8],NIL})
                    aadd(aGets,{"G1_REVFIM",aDadosTemp[9],NIL})
                    aadd(aGets,{"G1_DESC",aDadosTemp[10],NIL})
                    aadd(aGets,{"G1_GROPC",aDadosTemp[11],NIL})
                    aadd(aGets,{"G1_OBSERV",aDadosTemp[12],NIL})
                    aadd(aGets,{"G1_LOCCONS",aDadosTemp[13],NIL})
                    aadd(aItens,aGets)
                    aGets := {}

               endif
               nLinha++
            EndDo

            //Caso o arquivo tenha terminado mas possua itens ainda ele realiza a inclusão
            if nLinha > 1 .AND. LEN(aItens) > 0
            
               MSExecAuto({|x,y,z| mata200(x,y,z)},aCab,aItens,3,.F.)
              
               If !lMsErroAuto
                    AutoGrLog("Incluido com sucesso a estrutura do produto " + aCab[1][2] + cPulLin)
               EndIf
              
            endif

        EndIf


Debuguei e as variaveis de cabeçalho e itens estão corretas. Alguém já pegou algo parecido?

Mensagem do Enviar e-mail Abrir o Perfil do usuário TIAGOFLM TIAGOFLM em 25/10/2023, 13:32 h
Local: ES  Registro: 25/02/2023  Postagens: 5
Bom dia, verifique se ao definir o cCodigo como aDadosTemp[1] está pegando o codigo da linha atual, pois pode ser que ao definir esteja usando um código que já passou pelo execauto

Mensagem do Enviar e-mail Abrir o Perfil do usuário ROBERTOMEN ROBERTOMEN em 25/10/2023, 14:42 h
Local: PR  Registro: 04/07/2017  Postagens: 346


Boa tarde


https://centraldeatendimento.totvs.com/hc/pt-br/articles/360019402932-Cross-Segmentos-TOTVS-Backoffice-Linha-Protheus-ADVPL-FWFileReader-n%C3%A3o-faz-a-leitura-de-todas-as-linhas-corretamente


troca ai pra ver se resolve....

// cLinAtu := oFile:GetLine()

cLinAtu := oFile:GetLine(.t.)

Mensagem do Enviar e-mail Abrir o Perfil do usuário ROBERTOMEN ROBERTOMEN em 25/10/2023, 15:03 h
Local: PR  Registro: 04/07/2017  Postagens: 346

Realmente, analisando o ponto de vista do TIAGO, a variável cCodigo só é diferente de aDadosTemp[1], antes de entrar no if, depois ela nunca será diferente pois não esta sendo atualizada e neste caso só vai rodar o execauto uma vez.


IF cCodigo != aDadosTemp[1]                        
   cCodigo := aDadosTemp[1]

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário PIETRCK PIETRCK em 25/10/2023, 15:31 h
Local: PR  Registro: 25/10/2023  Postagens: 2
No exemplo do CSV abaixo ela é diferente duas vezes:

G1_COD;G1_COMP;G1_TRT;G1_QUANT;G1_PERDA;G1_INI;G1_FIM;G1_REVINI;G1_REVFIM;G1_DESC;G1_GROPC;G1_OBSERV;G1_LOCCONS
000000;000009;2;1;0;26/06/2023;31/12/2049;;;;;;
000000;000007;1;1;0;26/06/2023;31/12/2049;;;;;;
000002;000009;1;1;0;26/06/2023;31/12/2049;;;;;;
000007;000009;1;1;0;26/06/2023;31/12/2049;;;;;;

Pois agrupo todos os G1_COD iguais mas em diferentes itens. Tanto que no primeiro código indiferente de quantos itens ele inclui, mas no segundo ele da erro de invalido.

Durante o debug eu verifiquei a variavel de cabeçalho e itens e esta com os dados corretos em ambas as execuções do execauto.

Mensagem do Enviar e-mail Abrir o Perfil do usuário ROBERTOMEN ROBERTOMEN em 26/10/2023, 16:02 h
Local: PR  Registro: 04/07/2017  Postagens: 346
sim mas no seu fonte é só é declarada uma vez,

só aqui:


IF cCodigo != aDadosTemp[1]                        
   cCodigo := aDadosTemp[1]



depois daqui ela nunca mais será diferente.

por isto que o executo insere apenas o primeiro registro

Para postar no Fórum você precisa efetuar o seu login ou se registrar

 Mudar para Fórum

 

 

 
 
   
Pagina Principal Shopping PROTHEUS Tire suas duvidas Vagas Microsiga em todo Brasil Aprofunde seus conhecimentos Noticias Online Fale Conosco Pagina Principal