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
|