Árvore de páginas

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.

Passo a passo:

Exemplo de inclusão
#Include "Protheus.ch"
#Include "RwMake.ch"
#Include "TbiConn.ch"

User Function EXEC061()

Local nOpc := 3
Local oModel := Nil
Local cProd061 := "0002"
Local cForn1 := "001"
Local cLoja1 := "01"
Local cForn2 := "002"
Local cLoja2 := "01"

PREPARE ENVIRONMENT EMPRESA "32" FILIAL "6597" MODULO "COM"

oModel := FWLoadModel('MATA061')

oModel:SetOperation(nOpc)
oModel:Activate()

//Cabeçalho
oModel:SetValue('MdFieldSA5','A5_PRODUTO',cProd061)
oModel:SetValue('MdFieldSA5','A5_NOMPROD','PRODUTO 061 CT001')

//Grid
oModel:SetValue('MdGridSA5','A5_FORNECE',cForn1)
oModel:SetValue('MdGridSA5','A5_LOJA' ,cLoja1)
//oModel:SetValue('MdGridSA5','A5_NOMEFOR', 'FOR. P/ ROTINA MATA061 - CT001')

//Nova linha na Grid
oModel:GetModel("MdGridSA5"):AddLine()

oModel:SetValue('MdGridSA5','A5_FORNECE',cForn2)
oModel:SetValue('MdGridSA5','A5_LOJA' ,cLoja2)
//oModel:SetValue('MdGridSA5','A5_NOMEFOR', 'FOR. P/ ROTINA MATA061 - CT001')

If oModel:VldData()
oModel:CommitData()
Endif

oModel:DeActivate()

oModel:Destroy()

RESET ENVIRONMENT

Return
Exemplo de alteração
#Include "Protheus.ch"
#Include "RwMake.ch"
#Include "TbiConn.ch"

User Function EXEC061()

Local nOpc := 4
Local oModel := Nil
Local oGridMod := Nil
Local cProd061 := "0002"
Local cForn1 := "001"
Local cLoja1 := "01"
Local cForn2 := "002"
Local cLoja2 := "01"
Local lFind	 := .F.

PREPARE ENVIRONMENT EMPRESA "32" FILIAL "6597" MODULO "COM"

//Posicionar na SA5 no registro a ser alterado
DbSelectArea("SA5")
SA5->(DbSetOrder(1))
If SA5->(DbSeek(xFilial("SA5") + cForn2 + cLoja2 + cProd061))

	oModel		:= FWLoadModel('MATA061')
	oGridMod	:= oModel:GetModel("MdGridSA5") 
	
	oModel:SetOperation(nOpc)
	oModel:Activate()

 	lFind := oGridMod:SeekLine({{"A5_FORNECE",cForn2},{"A5_LOJA",cLoja2},{"A5_PRODUTO",cProd061}})

	If lFind
		oModel:SetValue('MdGridSA5','A5_FORNECE',cForn2)
		oModel:SetValue('MdGridSA5','A5_LOJA' ,cLoja2)
		oModel:SetValue('MdGridSA5','A5_NOMEFOR', 'FOR. ALTERADO')
		oModel:SetValue("MdGridSA5','A5_CODPRF','TESPRF')
	Endif

	If oModel:VldData()
		oModel:CommitData()
	Endif

	oModel:DeActivate()

	oModel:Destroy()
Endif

RESET ENVIRONMENT

Return
Exemplo de alteração e exclusão de linha
#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