- Criado por Rodrigo Machado Pontes, última alteração por Guilherme Alexandre Martins Futro em 11 abr, 2025
EXECAUTO MATA061 - Amarração Produto x Fornecedor
Produto: | Protheus |
Versões: | Todas |
Ocorrência: | Rotina Automática - MATA061 (Execauto) |
Ambiente: | SIGACOM - Compras |
Descrição: | Rotina automática que permite a inclusão de amarração produto x fornecedor. |
Observação: | Para realizar a opção de alteração e/ou exclusão é necessário que deixe posicionado no registro a ser alterado ou excluído. Os campos Cod. Fornecedor (A5_FORNECE) e Loja (A5_LOJA), na edição do cadastro os mesmo não podem ser alterados para que se mantenha integridade das informações. O correto é que seja feita a exclusão e assim adicionar o novo fornecedor em uma nova linha (tanto via execauto quanto via tela). |
Passo a passo: |
Exemplo de inclusão Expandir origem
#Include "Protheus.ch" #Include "TbiConn.ch" User Function INCMT061() Local aCab As Array Local aItens As Array Local aLinha As Array Local aForn As Array Local aLoja As Array Local aProdF As Array Local aErro As Array Local nX As Numeric Local nY As Numeric Local nOpc As Numeric Local lRet As Logical Local cProd As Character Local cDescProd As Character Local oModel As Object PREPARE ENVIRONMENT EMPRESA "T1" FILIAL "D MG 01" MODULO "COM" nOpc := 3 lRet := .T. oModel := FWLoadModel('MATA061') oModel:SetOperation(nOpc) oModel:Activate() cProd := PadR("PRODMATA061XGUI",TamSx3("A5_PRODUTO")[1]) cDescProd := GetAdvFVal("SB1","B1_DESC",FwxFilial("SB1")+cProd,1) aForn := {"000001","000002"} aLoja := {"01","01"} aProdF := {"PRODX01","PRODX02"} aCab := {} aLinha := {} aItens := {} aErro := {} //Cabeçalho Aadd(aCab,{'MdFieldSA5','A5_PRODUTO' ,cProd , Nil}) Aadd(aCab,{'MdFieldSA5','A5_NOMPROD' ,cDescProd, Nil}) For nX := 1 to Len(aCab) If !( oModel:SetValue( aCab[nX][1] , aCab[nX][2] , aCab[nX][3] ) ) // Caso a atribuição não possa ser feita, por algum motivo (validação, por exemplo) // o método SetValue retorna .F. lRet := .F. Exit EndIf Next nX if lRet For nX := 1 to Len(aForn) aItens := {} //Grid Aadd(aItens,{"MdGridSA5","A5_FORNECE" ,PadR(aForn[nX],TamSx3("A5_FORNECE")[1]) ,Nil}) Aadd(aItens,{"MdGridSA5","A5_LOJA" ,PadR(aLoja[nX],TamSx3("A5_LOJA")[1]) ,Nil}) Aadd(aItens,{"MdGridSA5","A5_CODPRF" ,PadR(aProdF[nX],TamSx3("A5_CODPRF")[1]) ,Nil}) Aadd(aLinha,aItens) Next nX For nX := 1 to Len(aLinha) if nX > 1 //Nova linha na Grid oModel:GetModel("MdGridSA5"):AddLine() EndIf For nY := 1 to Len(aLinha[nX]) If !( oModel:SetValue( aLinha[nX][nY][1] , aLinha[nX][nY][2] , aLinha[nX][nY][3] ) ) // Caso a atribuição não possa ser feita, por algum motivo (validação, por exemplo) // o método SetValue retorna .F. lRet := .F. Exit EndIf Next nY Next nX EndIf If lRet lRet := oModel:VldData() If lRet lRet := oModel:CommitData() Endif EndIf If !lRet //-- Busca o Erro do Modelo de Dados aErro := oModel:GetErrorMessage() //-- Monta o Texto que será mostrado na tela AutoGrLog("Id do formulário de origem:" + ' [' + AllToChar(aErro[01]) + ']') AutoGrLog("Id do campo de origem: " + ' [' + AllToChar(aErro[02]) + ']') AutoGrLog("Id do formulário de erro: " + ' [' + AllToChar(aErro[03]) + ']') AutoGrLog("Id do campo de erro: " + ' [' + AllToChar(aErro[04]) + ']') AutoGrLog("Id do erro: " + ' [' + AllToChar(aErro[05]) + ']') AutoGrLog("Mensagem do erro: " + ' [' + AllToChar(aErro[06]) + ']') AutoGrLog("Mensagem da solução:" + ' [' + AllToChar(aErro[07]) + ']') AutoGrLog("Valor atribuído: " + ' [' + AllToChar(aErro[08]) + ']') AutoGrLog("Valor anterior: " + ' [' + AllToChar(aErro[09]) + ']') //-- Mostra a mensagem de Erro MostraErro() EndIf FwFreeArray(aCab) FwFreeArray(aItens) FwFreeArray(aLinha) FwFreeArray(aForn) FwFreeArray(aLoja) FwFreeArray(aProdF) FwFreeArray(aErro) oModel:DeActivate() oModel:Destroy() RESET ENVIRONMENT Return
Exemplo de alteração Expandir origem
#Include "Protheus.ch" #Include "RwMake.ch" #Include "TbiConn.ch" User Function ALTMT061() Local aDados As Array Local aErro As Array Local cForn As Character Local cLoja As Character Local cProd As Character Local lRet As Logical Local lPosic As Logical Local nY As Numeric Local nOpc As Numeric Local oModel As Object Local oGridMod As Object PREPARE ENVIRONMENT EMPRESA "T1" FILIAL "D MG 01" MODULO "COM" cForn := PadR("000001",TamSx3("A5_FORNECE")[1]) cLoja := PadR("01",TamSx3("A5_LOJA")[1]) cProd := PadR("PRODMATA061XGUI",TamSx3("A5_PRODUTO")[1]) //Posicionar na SA5 no registro a ser alterado DbSelectArea("SA5") SA5->(DbSetOrder(1)) If SA5->(DbSeek(xFilial("SA5") + cForn + cLoja + cProd)) nOpc := 4 aDados := {} aErro := {} lPosic := .F. lRet := .T. oModel := FWLoadModel('MATA061') oGridMod := oModel:GetModel("MdGridSA5") oModel:SetOperation(nOpc) oModel:Activate() lPosic := oGridMod:SeekLine({{"A5_FORNECE",cForn},{"A5_LOJA",cLoja},{"A5_PRODUTO",cProd}}) If lPosic Aadd(aDados,{"MdGridSA5","A5_CODPRF" ,PadR("CODPRFFR",TamSx3("A5_CODPRF")[1]) ,Nil}) Endif For nY := 1 to Len(aDados) If !( oModel:SetValue( aDados[nY][1] , aDados[nY][2] , aDados[nY][3] ) ) // Caso a atribuição não possa ser feita, por algum motivo (validação, por exemplo) // o método SetValue retorna .F. lRet := .F. Exit EndIf Next nY If lRet lRet := oModel:VldData() If lRet lRet := oModel:CommitData() Endif EndIf If !lRet //-- Busca o Erro do Modelo de Dados aErro := oModel:GetErrorMessage() //-- Monta o Texto que será mostrado na tela AutoGrLog("Id do formulário de origem:" + ' [' + AllToChar(aErro[01]) + ']') AutoGrLog("Id do campo de origem: " + ' [' + AllToChar(aErro[02]) + ']') AutoGrLog("Id do formulário de erro: " + ' [' + AllToChar(aErro[03]) + ']') AutoGrLog("Id do campo de erro: " + ' [' + AllToChar(aErro[04]) + ']') AutoGrLog("Id do erro: " + ' [' + AllToChar(aErro[05]) + ']') AutoGrLog("Mensagem do erro: " + ' [' + AllToChar(aErro[06]) + ']') AutoGrLog("Mensagem da solução:" + ' [' + AllToChar(aErro[07]) + ']') AutoGrLog("Valor atribuído: " + ' [' + AllToChar(aErro[08]) + ']') AutoGrLog("Valor anterior: " + ' [' + AllToChar(aErro[09]) + ']') //-- Mostra a mensagem de Erro MostraErro() EndIf FwFreeArray(aDados) FwFreeArray(aErro) oModel:DeActivate() oModel:Destroy() Endif RESET ENVIRONMENT Return
Exemplo de alteração e exclusão de linha Expandir origem
#INCLUDE 'RWMAKE.CH' #INCLUDE 'TBICONN.CH' #INCLUDE 'PROTHEUS.CH' #INCLUDE 'FWMVCDEF.CH' User Function MyMata061() Local nLenProd := 0 //-- Controle de tamanho de campo de produto Local lOk := .T. //-- Controle de validação e commit Local aErro := {} //-- Recebe msg de erro de processamento Local oModel061 := NIL //-- Modelo de Dados Mata061 Local oModelGrid:= NIL //-- Modelo de Dados Grid Local cProd := "PR-001" //-- Produto a ser alterado Local cForn := "" //-- Fornecedor posiciondo Local cLoja := "" //-- Loja do Fornecedor posicionado Local cForn01 := "000002" //-- Fornecedor a ser alterado Local cLoja01 := "01" //-- Loja do Fornecedor a ser alterado Local cForn02 := "000005" //-- Fornecedor a ser excluido Local cLoja02 := "01" //-- Loja do Fornecedor a ser excluido Local nX := 0 //-- Inicializa o ambiente PREPARE ENVIRONMENT EMPRESA "01" FILIAL "01" MODULO "COM" nLenProd := TamSX3("A5_PRODUTO")[1] //-- Obtem tamanho do campo A5_PRODUTO DbSelectArea("SA5") SA5->(DbSetOrder(2)) //-- A5_FILIAL+A5_PRODUTO+A5_FORNECE+A5_LOJA // Posiciona na amarração If SA5->(DbSeek(xFilial("SA5") + Padr(cProd, nLenProd) + cForn01 + cLoja01)) //-- Carrega o modelo de dados e seleciona a operação de aprovação (UPDATE) oModel061 := FWLoadModel('MATA061') oModel061:SetOperation( MODEL_OPERATION_UPDATE ) // Alteração oModel061:Activate() oModelGrid := oModel061:GetModel('MdGridSA5') // Percorre a Grid para posicionar os itens a alterar e excluir For nX := 1 to oModelGrid:Length() oModelGrid:GoLine(nX) If !oModelGrid:Isdeleted() //Verifica se a linha está deletada cForn := oModelGrid:GetValue('A5_FORNECE') cLoja := oModelGrid:GetValue('A5_LOJA') // Verifica se é o Fornecedor a alterar If cForn+cLoja == cForn01+cLoja01 oModelGrid:SetValue('A5_CODPRF','Teste alteração') // Altera campo Endif // Verifica se é o Fornecedor a excluir If cForn+cLoja == cForn02+cLoja02 oModelGrid:DeleteLine() // Deleta linha do Fornecedor Endif EndIf Next nX //-- Valida o formulário lOk := oModel061:VldData() If lOk //-- Se validou, grava o formulário lOk := oModel061:CommitData() EndIf //-- Avalia erros If !lOk //-- Busca o Erro do Modelo de Dados aErro := oModel061:GetErrorMessage() //-- Monta o Texto que será mostrado na tela AutoGrLog("Id do formulário de origem:" + ' [' + AllToChar(aErro[01]) + ']') AutoGrLog("Id do campo de origem: " + ' [' + AllToChar(aErro[02]) + ']') AutoGrLog("Id do formulário de erro: " + ' [' + AllToChar(aErro[03]) + ']') AutoGrLog("Id do campo de erro: " + ' [' + AllToChar(aErro[04]) + ']') AutoGrLog("Id do erro: " + ' [' + AllToChar(aErro[05]) + ']') AutoGrLog("Mensagem do erro: " + ' [' + AllToChar(aErro[06]) + ']') AutoGrLog("Mensagem da solução:" + ' [' + AllToChar(aErro[07]) + ']') AutoGrLog("Valor atribuído: " + ' [' + AllToChar(aErro[08]) + ']') AutoGrLog("Valor anterior: " + ' [' + AllToChar(aErro[09]) + ']') //-- Mostra a mensagem de Erro MostraErro() EndIf //-- Desativa o modelo de dados oModel061:DeActivate() Else MsgInfo("Documento não encontrado!", "MyExec061") EndIf //-- Finaliza o ambiente RESET ENVIRONMENT Return Nil |
Visão Geral
Import HTML Content
Conteúdo das Ferramentas