- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- ExecAuto mata261 - array out of bounds [0][0]
×
Linguagem de Programação ADVPL
Perguntas ExecAuto mata261 - array out of bounds [0][0]
- luiz.fernandocn@gmail.com
- Autor do Tópico
- Desconectado
- Membro Iniciado
Menos
Mais
- Postagens: 2
- Obrigados Recebidos: 0
10 anos 3 meses atrás #24246
por luiz.fernandocn@gmail.com
Bom dia Pessoal , tudo certo ?
Estou precisando utilizar a rotina automática de geração de transferência entre armazéns.
Fiz a rotina de acordo com um exemplo que peguei , mas quando chega no comando MsExecAuto o sistema retorna erro de array out of bounds [0][0]. Alguém sabe me ajudar a solucionar este erro ?
Segue a rotina como estou utilizando:
(OBRIGADO !!!!!)
#include "rwmake.ch"
User Function TRNAUTO(_aEstrut,cDocto)
Local _aTransfer := {{cDocto,dDataBase}} //Criacao da 1a. linha do array com o documento e data
Local i
Local cCod, cDescri, cUM, nQtde, dData, cProximo, cAlmOri
Local cAlmDest := getMv("BR_LOCTRAN")
Private lmsErroAuto := .F.
for i := 1 to Len(_aEstrut)
cCod := _aEstrut[i,1]
cAlmOri := _aEstrut[i,3]
//Posicionando o SB1 do produto
SB1->(MsSeek(xFilial("SB1")+cCod))
cDescri := SB1->B1_DESC
cUM := SB1->B1_UM
nQtde := _aEstrut[i,2]
nQtde2 := ConvUM(cCod,nQtde,0,2)
dData := dDataBase
cProximo := ProxNum()
// Alimento o array com os itens a serem transferidos
aAdd(_aTransfer,{ cCod,;
cDescri,;
cUM,;
cAlmOri,;
Space(15),;
cCod,;
cDescri,;
cUM,;
cAlmDest,;
Space(15),;
Space(20),;
Space(10),;
Space(6),;
ctod(''),;
0,;
nQtde,;
nQtde2,;
Space(1),;
cProximo,;
Space(10),;
ctod(''),;
Space(3) })
next
// executo a rotina automatica somente quando o tamanho do array for maior que 1
if Len(_aTransfer) > 1
MsExecAuto({|x,y| mata261(x,y)},_aTransfer,3)
endif
//-- Verifica se houve algum erro
If lmsErroAuto
if Aviso("Pergunta","Transferencia nao gerada. Deseja visualizar o log?",{"Sim","Nao"},1,"Atencao")=1
MostraErro()
endif
EndIf
Return()
Estou precisando utilizar a rotina automática de geração de transferência entre armazéns.
Fiz a rotina de acordo com um exemplo que peguei , mas quando chega no comando MsExecAuto o sistema retorna erro de array out of bounds [0][0]. Alguém sabe me ajudar a solucionar este erro ?
Segue a rotina como estou utilizando:
(OBRIGADO !!!!!)
#include "rwmake.ch"
User Function TRNAUTO(_aEstrut,cDocto)
Local _aTransfer := {{cDocto,dDataBase}} //Criacao da 1a. linha do array com o documento e data
Local i
Local cCod, cDescri, cUM, nQtde, dData, cProximo, cAlmOri
Local cAlmDest := getMv("BR_LOCTRAN")
Private lmsErroAuto := .F.
for i := 1 to Len(_aEstrut)
cCod := _aEstrut[i,1]
cAlmOri := _aEstrut[i,3]
//Posicionando o SB1 do produto
SB1->(MsSeek(xFilial("SB1")+cCod))
cDescri := SB1->B1_DESC
cUM := SB1->B1_UM
nQtde := _aEstrut[i,2]
nQtde2 := ConvUM(cCod,nQtde,0,2)
dData := dDataBase
cProximo := ProxNum()
// Alimento o array com os itens a serem transferidos
aAdd(_aTransfer,{ cCod,;
cDescri,;
cUM,;
cAlmOri,;
Space(15),;
cCod,;
cDescri,;
cUM,;
cAlmDest,;
Space(15),;
Space(20),;
Space(10),;
Space(6),;
ctod(''),;
0,;
nQtde,;
nQtde2,;
Space(1),;
cProximo,;
Space(10),;
ctod(''),;
Space(3) })
next
// executo a rotina automatica somente quando o tamanho do array for maior que 1
if Len(_aTransfer) > 1
MsExecAuto({|x,y| mata261(x,y)},_aTransfer,3)
endif
//-- Verifica se houve algum erro
If lmsErroAuto
if Aviso("Pergunta","Transferencia nao gerada. Deseja visualizar o log?",{"Sim","Nao"},1,"Atencao")=1
MostraErro()
endif
EndIf
Return()
Por favor Acessar ou Registrar para participar da conversa.
- dexter
- Desconectado
- Membro Sénior
Menos
Mais
- Postagens: 78
- Obrigados Recebidos: 0
10 anos 3 meses atrás #24257
por dexter
Respondido por dexter no tópico ExecAuto mata261 - array out of bounds [0][0]
Caramba em amigo esses execs dão dor de cabeça tem hora.
Tem este example no tdn totvs, veja se lhe ajuda.
Pelo que eu entende desse erro o array não esta sendo preenchido
vc já debugou ai pra ver se os valores estão sendo jogados dentro do array.
Tem este example no tdn totvs, veja se lhe ajuda.
Pelo que eu entende desse erro o array não esta sendo preenchido
vc já debugou ai pra ver se os valores estão sendo jogados dentro do array.
#INCLUDE "PROTHEUS.CH"
#include "rwmake.ch"
#include "TbiConn.ch"
User Function MyMata261()
Local cProd := "PA001"
Local cUM := ""
Local cLocal := ""
Local cDoc := ""
Local cLote := "8888888888"
Local dDatVal := ""
Local nQuant := 0
Local lOk := .T.
Local aItem := {}
Local nOpcAuto:= 3 // Indica qual tipo de ação será tomada (Inclusão/Exclusão)
PRIVATE lMsHelpAuto := .T.
PRIVATE lMsErroAuto := .F.
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//| Abertura do ambiente |
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
PREPARE ENVIRONMENT EMPRESA "YY" FILIAL "01" MODULO "EST"
DbSelectArea("SB1")
DbSetOrder(1)
If !SB1->(MsSeek(xFilial("SB1")+cProd))
lOk := .F.
ConOut(OemToAnsi("Cadastrar produto: " + cProd))
Else
cProd := B1_COD
cDescri := B1_DESC
cUM := B1_UM
cLocal := B1_LOCPAD
EndIf
DbSelectArea("SD5")
DbSetOrder(1)
If !SD5->(MsSeek(xFilial("SD5")+ " " + cProd ))
lOk := .F.
ConOut(OemToAnsi("Cadastrar lote: " + cLote ))
Else
cLote := D5_LOTECTL
dDataVl := D5_DTVALID
nQuant := D5_QUANT
EndIf
If lOk
cDoc := GetSxENum("SD3","D3_DOC",1)
ConOut(Repl("-",80))
ConOut(PadC("Teste de Transf. Mod2",80))
ConOut("Inicio: "+Time())
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//| Teste de Inclusao |
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Begin Transaction //Cabecalho a Incluir
aAuto := {}
aadd(aAuto,{cDoc,dDataBase}) //Cabecalho
//Itens a Incluir
aadd(aItem,cProd) //D3_COD
aadd(aItem,cDescri) //D3_DESCRI
aadd(aItem,cUM) //D3_UM
aadd(aItem,cLocal) //D3_LOCAL
aadd(aItem,"") //D3_LOCALIZ
aadd(aItem,cProd) //D3_COD
aadd(aItem,cDescri) //D3_DESCRI
aadd(aItem,cUM) //D3_UM
aadd(aItem,"02") //D3_LOCAL
aadd(aItem,"") //D3_LOCALIZ
aadd(aItem,"") //D3_NUMSERI
aadd(aItem,cLote) //D3_LOTECTL
aadd(aItem,"") //D3_NUMLOTE
aadd(aItem,dDataVl) //D3_DTVALID
aadd(aItem,0) //D3_POTENCI
aadd(aItem,nQuant) //D3_QUANT
aadd(aItem,0) //D3_QTSEGUM
aadd(aItem,"") //D3_ESTORNO
aadd(aItem,"") //D3_NUMSEQ
aadd(aItem,cLote) //D3_LOTECTL
aadd(aItem,dDataVl) //D3_DTVALID
aadd(aItem,"") //D3_ITEMGRD
aadd(aAuto,aItem)
MSExecAuto({|x,y| mata261(x,y)},aAuto,nOpcAuto)
If !lMsErroAuto
ConOut("Incluido com sucesso! " + cDoc)
Else
ConOut("Erro na inclusao!")
MostraErro()
EndIf
ConOut("Fim : "+Time())
End Transaction
EndIf
RESET ENVIRONMENT
Return Nil
Por favor Acessar ou Registrar para participar da conversa.
- luiz.fernandocn@gmail.com
- Autor do Tópico
- Desconectado
- Membro Iniciado
Menos
Mais
- Postagens: 2
- Obrigados Recebidos: 0
10 anos 3 meses atrás #24260
por luiz.fernandocn@gmail.com
Respondido por luiz.fernandocn@gmail.com no tópico ExecAuto mata261 - array out of bounds [0][0]
Dexter , obrigado !
Eu já debuguei sim. O problema é interno na função MsExecAuto mata261.
Atualizei o repositório com RPO, Updates, patch e lib novo da totvs, e o mesmo código funcionou. Acho que está com algum erro mesmo interno na função.
Valeu , obrigado
Abraço!
Eu já debuguei sim. O problema é interno na função MsExecAuto mata261.
Atualizei o repositório com RPO, Updates, patch e lib novo da totvs, e o mesmo código funcionou. Acho que está com algum erro mesmo interno na função.
Valeu , obrigado
Abraço!
Por favor Acessar ou Registrar para participar da conversa.
- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- ExecAuto mata261 - array out of bounds [0][0]
Tempo para a criação da página:0.076 segundos