|
Bem Vindo, Visitante
|
Todos os Fórums
ADVPL
|
Imprimir
Enviar Para um Amigo Precisa estar Logado
|

 |
 |
Assunto: |
Execauto mata200 |
|
Versão: |
12.1.2210 |
|
Plataforma: |
Microsoft |
Complemento: |
|
|
DB: |
SQL Server |
Complemento: |
|
|
|
|
|
Mensagem do
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
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
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
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] |
|
|
Mensagem do
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
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
|
|