EXECAUTO MATA061 - Vínculo Producto vs. Proveedor

Producto:

Protheus

Versiones:

Todas

Ocurrencia:

Rutina automática - MATA061 (Execauto)

Entorno:

SIGACOM - Compras

Descripción:Rutina automática que permite incluir el vínculo producto vs. proveedor.
Observación:Para realizar la opción de modificación y/o eliminación, es necesario seleccionar el registro que se va a modificar o eliminar.

Paso a paso:

Ejemplo de inclusión
#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
Ejemplo de modificación
#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
Ejemplo de modificación y eliminación de línea
#INCLUDE 'RWMAKE.CH'
#INCLUDE 'TBICONN.CH'
#INCLUDE 'PROTHEUS.CH'
#INCLUDE 'FWMVCDEF.CH'
 
User Function MyMata061()
 
    Local nLenProd  := 0        //-- Control de tamaño de campo de producto
    Local lOk       := .T.      //-- Control de validación y commit
    Local aErro     := {}       //-- Recibe msg de error de procesamiento
    Local oModel061 := NIL      //-- Modelo de datos Mata061
    Local oModelGrid:= NIL      //-- Modelo de datos Grid
    Local cProd     := "PR-001" //-- Producto que se modificará
    Local cForn     := ""       //-- Proveedor seleccionado
    Local cLoja     := ""       //-- Tienda del proveedor seleccionado
    Local cForn01   := "000002" //-- Proveedor que se modificará
    Local cLoja01   := "01"     //-- Tienda del proveedor que se modificará
    Local cForn02   := "000005" //-- Proveedor que se eliminará
    Local cLoja02   := "01"     //-- Tienda del proveedor que se eliminará
    Local nX        := 0
    

    //-- Inicia el entorno
    PREPARE ENVIRONMENT EMPRESA "01" FILIAL "01" MODULO "COM"
     
    nLenProd := TamSX3("A5_PRODUTO")[1] //-- Obtiene el tamaño del campo A5_PRODUTO
    DbSelectArea("SA5")
    SA5->(DbSetOrder(2)) //-- A5_FILIAL+A5_PRODUTO+A5_FORNECE+A5_LOJA
 
    // Posiciona en el vínculo
    If SA5->(DbSeek(xFilial("SA5") + Padr(cProd, nLenProd) + cForn01 + cLoja01))
 
         
        //-- Carga el modelo de datos y selecciona la operación de aprobación (UPDATE)
        oModel061 := FWLoadModel('MATA061')
        oModel061:SetOperation( MODEL_OPERATION_UPDATE ) // Modificación
        oModel061:Activate()

        oModelGrid := oModel061:GetModel('MdGridSA5')

        // Recorre la Grid para seleccionar los ítems para modificar o eliminar
        For nX := 1 to oModelGrid:Length()
	    	oModelGrid:GoLine(nX)
	    	If !oModelGrid:Isdeleted() //Verifica si la lína está borrada
	    		cForn := oModelGrid:GetValue('A5_FORNECE')
                cLoja := oModelGrid:GetValue('A5_LOJA')

                // Verifica si es el proveedor que se modificará
                If cForn+cLoja == cForn01+cLoja01
                    oModelGrid:SetValue('A5_CODPRF','Teste alteração') // Modifica el campo
                Endif

                // Verifica si es el proveedor que se eliminará
                If cForn+cLoja == cForn02+cLoja02
                    oModelGrid:DeleteLine() // Elimina línea del proveedor
                Endif
	    	EndIf	
	    Next nX
 
        //-- Valida el formulario
        lOk := oModel061:VldData()
 
        If lOk
            //-- Si validó, graba el formulario
            lOk := oModel061:CommitData()
        EndIf
 
        //-- Evalúa errores
        If !lOk
            //-- Busca el Error del Modelo de Datos
            aErro := oModel061:GetErrorMessage()
                  
            //-- Elabora el texto que se mostrará en la pantalla
            AutoGrLog("Id del formulario de origen:" + ' [' + AllToChar(aErro[01]) + ']')
            AutoGrLog("Id del campo de origen: "     + ' [' + AllToChar(aErro[02]) + ']')
            AutoGrLog("Id del formulario de error: "  + ' [' + AllToChar(aErro[03]) + ']')
            AutoGrLog("Id del campo de error: "       + ' [' + AllToChar(aErro[04]) + ']')
            AutoGrLog("Id del error: "                + ' [' + AllToChar(aErro[05]) + ']')
            AutoGrLog("Mensaje del error: "          + ' [' + AllToChar(aErro[06]) + ']')
            AutoGrLog("Mensaje de la solución:"        + ' [' + AllToChar(aErro[07]) + ']')
            AutoGrLog("Valor atribuido: "           + ' [' + AllToChar(aErro[08]) + ']')
            AutoGrLog("Valor anterior: "            + ' [' + AllToChar(aErro[09]) + ']')
 
            //-- Muestra el mensaje de error
            MostraErro()
        EndIf
 
        //-- Desactiva el modelo de datos
        oModel061:DeActivate()
 
    Else
        MsgInfo("¡Documento no encontrado!", "MyExec061")
    EndIf
     
    //-- Finaliza el entorno
    RESET ENVIRONMENT
 
Return Nil