No vídeo de hoje, vamos demonstrar em como acionar o Estorno de Movimentação Múltipla (MATA241) via ExecAuto.
A dúvida de hoje foi feita pelo grande Israel, onde ele perguntou como seria a montagem dos dados para acionar a execução automática do estorno de movimentação na SD3 via MATA241.
Então foi montado um exemplo demonstrando a realização do estorno via ExecAuto.
E abaixo o código fonte desenvolvido para exemplificar:
//Bibliotecas
#Include "TOTVS.ch"
/*/{Protheus.doc} User Function zVid0059
Exemplo de estorno / exclusão via ExecAuto da MATA241
@type Function
@author Atilio
@since 29/08/2022
/*/
User Function zVid0059()
Local aArea := FWGetArea()
Local cDocumento := Space(TamSX3("D3_DOC")[1])
Local aPergs := {}
//Adiciona a pergunta e mostra a pergunta
aAdd(aPergs, {1, "Documento SD3", cDocumento, "", ".T.", "", ".T.", 90, .T.})
If ParamBox(aPergs, "Informe os parâmetros", , , , , , , , , .F., .F.)
Processa({|| fEstornar(MV_PAR01)}, "Estornando...")
EndIf
FWRestArea(aArea)
Return
Static Function fEstornar(cDocumento)
Local aArea := FWGetArea()
Local aAreaSD3
Local aCab := {}
Local aItens := {}
Local aItem := {}
Local cChave := ""
Private lMsErroAuto := .F.
//Abre a tabela de movimentações, e se conseguir posicionar no documento
DbSelectArea("SD3")
SD3->(DbSetOrder(2)) // D3_FILIAL + D3_DOC + D3_COD
If SD3->(MsSeek(FWxFilial('SD3') + cDocumento))
aAreaSD3 := SD3->(FWGetArea())
cChave := SD3->D3_FILIAL + SD3->D3_DOC
//Adiciona no cabeçalho as chaves da tabela
aCab := {;
{"D3_DOC", SD3->D3_DOC, Nil};
}
//Enquanto houver dados que for o mesmo documento, adiciona no array de itens
ProcRegua(0)
While ! SD3->(EoF()) .And. SD3->D3_FILIAL + SD3->D3_DOC == cChave
IncProc("Adicionando produto " + Alltrim(SD3->D3_COD) + "...")
aItem := {}
aAdd(aItem, {"D3_COD", SD3->D3_COD, Nil})
aAdd(aItem, {"D3_UM", SD3->D3_UM, Nil})
aAdd(aItem, {"D3_QUANT", SD3->D3_QUANT, Nil})
aAdd(aItem, {"D3_LOCAL", SD3->D3_LOCAL, Nil})
aAdd(aItem, {"D3_ESTORNO", "S", Nil})
aAdd(aItens, aClone(aItem))
SD3->(DbSkip())
EndDo
//Volta onde estava na SD3
FWRestArea(aAreaSD3)
//Aciona o ExecAuto
MsExecAuto({|x, y, z| MATA241(x, y, z)}, aCab, aItens, 6)
//Se houve erro, exibe
If lMsErroAuto
MostraErro()
Else
FWAlertSuccess("Documento foi estornado com sucesso!", "Atenção")
EndIf
Else
FWAlertError("Documento não foi encontrado!", "Atenção")
EndIf
FWRestArea(aArea)
Return
Bom pessoal, por hoje é só.
Abraços e até a próxima.
Boa noite. Muito obrigado pelo artigo. E para estornos valorizados DE6? Qual seria o execauto?
Bom dia Jorge, tudo joia?
Eu nunca precisei fazer estorno de DE6/RE6 via ExecAuto. Depois irei pesquisar pra ver se encontro algo.
Se você encontrar também, me avise que daí eu atualizo aqui o artigo.
Um grande abraço.