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.