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 |