Execauto MATA261 - Transferências Multiplas

Produto:

Protheus

Versões:

Todas

Ocorrência:

Rotina Automática - MATA261 (Execauto)

Ambiente:

SIGAEST - Estoque e Custos

Descrição:

Rotina automática que permite a inclusão de movimentos de transferências múltiplas.

Objetivo: As transferências no segundo modelo, oferecido pelo Protheus, permite que vários produtos possam ser transferidos num único documento.

Este modelo de transferência é semelhante à transferência normal, possui os mesmos parâmetros relacionados, campos, e tem como única diferença o fato de que a data de emissão e o documento se aplicam a todas as transferências.

As transferências realizadas podem tratar casos particulares apresentados no "Ambiente de Inspeção de Entrada", no qual pode ocorrer "Devolução para o Controle de Qualidade".

Parâmetros:
NomeTipoDescriçãoConteúdo Default
ExpA1ArrayArray contendo os valores a serem cadastradas, alteradas ou excluídas.Obrigatório
ExpA2

Array

Informa qual ação a rotina automática irá tomar Inclusão : 3 ou Nill Estorno: 6 3

Passo a passo:

#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_SERVIC << Caso exista integração com WMS
aadd(aItem,"") //D3_ITEMGRD
// aadd(aItem,"") //D3_CODLAN << Caso use CAT83
// aadd(aItem,"") //D3_ITEMGRD << Caso use CAT83
// aadd(aItem,"") //D3_PERIMP << Caso use FCI
aadd(aItem,"") //D3_IDDCF
// aadd(aItem,"") //D3_OBSERVA
// aadd(aItem,"") //D3_xxxxx << Caso PE MA261CPO
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


//===================================================================================
// Exemplo Estorno:
//===================================================================================
User Function Tmata261()
Local aAUTO := {}
Local cDoc := "000113001"
Local cProd := "TESTE "

Private lMsErroAuto := .F.

RpcSetEnv("99","01",,,,,,,,,)
DbSelectArea("SD3")
DbSetOrder(2)
DbSeek(xFilial("SD3")+cDoc+cProd)
aAuto := {}
MSExecAuto({|x,y| mata261(x,y)},aAuto,6)
If !lMsErroAuto
ALERT("Incluido com sucesso! ")
ALERT(CVALTOCHAR(LMSERROAUTO))
Else
ALERT("Erro na inclusao!")
MostraErro()
EndIf
Return

O Modelo acima está baseado em campos padrões sem nenhuma integração ativa ou campos adicionais. Sugere-se que o desenvolvedor efetue uma simulação manual, com as integrações ativas, e observe todos os campos que poderão ser obrigatórios e deverão ser adicionados em suas respectivas posições para evitar erro no momento da execução pela falta de campos. O modelo acima não necessariamente é funcional e trata-se apenas de um exemplo orientativo de utilização.