× Linguagem de Programação ADVPL

Perguntas ExecAuto mata261 - array out of bounds [0][0]

Mais
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()

Por favor Acessar ou Registrar para participar da conversa.

Mais
10 anos 3 meses atrás #24257 por dexter
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.

#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.

Mais
10 anos 3 meses atrás #24260 por luiz.fernandocn@gmail.com
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!

Por favor Acessar ou Registrar para participar da conversa.

Tempo para a criação da página:0.076 segundos
Joomla templates by a4joomla