Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

Ejemplo de uso de punto de entrada padrón MVC para documentos fiscales de entrada.


Punto  de entrada MVC

Descripción


FORMPRE

Punto de entrada ejecutado antes de la alteración de cualquier campo de formulario.

Parámetros recibidos:

Formulario.

Nombre

Tipo

Descripción

PARAMIXB[1]OObjeto del formulario o del modelo, conforme el caso
PARAMIXB[2]CID del local de ejecución del punto de entrada.
PARAMIXB[3]CID del formulario.
PARAMIXB[4]C Acción de formulario.
PARAMIXB[5]CID del Campo.
PARAMIXB[5]CDato asignado al campo

Grid.

Nombre

Tipo

Descripción

PARAMIXB[1]OObjeto del formulario o del modelo, conforme el caso
PARAMIXB[2]CID del local de ejecución del punto de entrada.
PARAMIXB[3]CID del formulario.
PARAMIXB[4]NNúmero de línea de FWFORMGRID
PARAMIXB[5]C Acción del FWFORMGRID.
PARAMIXB[6]CID del Campo.
Respuesta:

Nombre

Tipo

Descripción

lRetL

"CANSETVALUE" - Indica si el campo puede ser editado.

"SETVALUE" -  Indica si el valor no puede ser atribuido.

Bloco de código
languagejava
firstline1
titleEjemplo:
linenumberstrue
collapsetrue
#INCLUDE 'protheus.ch'
#INCLUDE 'FWMVCDEF.CH'

User Function LOCXIN()
Local aParam     := PARAMIXB
Local xRet       := .T.
Local oObj       := ''
Local cIdPonto   := ''
Local cIdModel   := ''
Local cAction    := ''
Local nLinha     := 0
Local nX         := 0
Local cIdCpo     := 0


    If aParam <> NIL
            
        oObj       := aParam[1]
        cIdPonto   := aParam[2]
        cIdModel   := aParam[3]
        
        If cIdPonto == 'FORMPRE' //Ejecutado antes de la alteración de cualquier campo de formulario.
            //Formulario
            /*aParam
			1     O        Objeto del formulário o de modelo, conforme sea el caso
			2     C        ID local de ejecución del punto de entrada
			3     C        ID de formulario
			4     C        Acción de formulario
			5     C        Id del campo
			6     C        Dato asignado al campo*/
            //Grid
            /*aParam
			1     O        Objeto del formulário o de modelo, conforme sea el caso
			2     C        ID local de ejecución del punto de entrada
			3     C        ID de formulário
			4     N        Número de línea de FWFORMGRID
			5     C        Acción de FWFORMGRID
			6     C        Id del campo*/
            If cIdModel == "SF1_MASTER"
                cAction := aParam[4]
                cIdCpo  := aParam[5]
            elseIf cIdModel == "SD1_DETAIL"
                cAction := aParam[5]
                cIdCpo  := aParam[6]
            EndIf
            If cAction == "CANSETVALUE" 
                If cIdCpo == "F1_LOJA"
                    xRet := !Empty(oObj:GetValue("F1_FORNECE"))
                EndIf
            ElseIf cAction == "SETVALUE" 
                If cIdCpo == "D1_CF"
                    If Empty(oObj:GetValue("D1_TES"))
                        xRet := .F.
                        Help( ,, "HELP",, "Informe primero un TES", 1, 0)
                    EndIf
                EndIf
            EndIf
        EndIf
    EndIf

Return xRet

Âncora
FORMLINEPOS
FORMLINEPOS

FORMLINEPOS

Punto de entrada para VALIDAR los datos de retenciones en la rutina de cobros diversos.

Parámetros recibidos:

Nombre

Tipo

Descripción

PARAMIXB[1]OObjeto del formulario o del modelo, conforme el caso
PARAMIXB[2]CID del local de ejecución del punto de entrada.
PARAMIXB[3]CID del Model.
Respuesta:

Nombre

Tipo

Descripción

lRetLSi el valor retornado es .T. el campo es permitido , de lo contrario retornar un .F. 
HELP()ORetornar un mensaje de error para mostrar por que no es permitido el campo.
Bloco de código
languagejava
firstline1
titleEjemplo
linenumberstrue
collapsetrue
#include "Protheus.ch"
#include "FWMVCDEF.CH"

User Function FINA887()
	Local aParam    := PARAMIXB
	Local oModel    := aParam[1]
	Local oModelSEL   := oModel:GetModel("SEL_DETAIL") //Datos correspondientes a los registros de la tabla SEL
	Local cIdPonto  := ""
	Local cIdModel  := ""
	Local lRet      := .T.

	If aParam <> NIL
		oModel      := aParam[1]
		cIdPonto    := aParam[2]
		cIdModel    := aParam[3]

		If cIdPonto == 'FORMLINEPOS'
			CONOUT('FORMLINEPOS')
			IF ALLTRIM(oModelSEL:GetValue("SEL_DETAIL","EL_TIPODOC")) == 'RB'
				Help(,,'Help',,'No se permite una retencion RB',1,0)
				lRet := .F.
			ENDIF
		EndIf
	EndIf
Return lRet

Âncora
F998BRFLT
F998BRFLT

MODELCOMMITNTTS


Punto de entrada para MÓDIFICAR los datos de retenciones en la rutina de cobros diversos.

Parámetros recibidos:

Nombre

Tipo

Descripción

PARAMIXB[1]OObjeto del formulario o del modelo, conforme el caso
PARAMIXB[2]CID del local de ejecución del punto de entrada.
PARAMIXB[3]CID del Model.
Respuesta:

N/A

Bloco de código
languagejava
firstline1
titleEjemplo
linenumberstrue
collapsetrue
#INCLUDE 'protheus.ch'
#INCLUDE 'FWMVCDEF.CH'

User Function LOCXIN()
Local aParam     := PARAMIXB
Local xRet       := .T.
Local oObj       := ''
Local cIdPonto   := ''
Local cIdModel   := ''
Local cAction    := ''
Local nLinha     := 0
Local nX         := 0
Local cIdCpo     := 0


    If aParam <> NIL
            
        oObj       := aParam[1]
        cIdPonto   := aParam[2]
        cIdModel   := aParam[3]
        
        If cIdPonto == 'MODELPOS' //Validación total del modelo.
            /*aParam
			1     O        Objeto del formulário o de modelo, conforme sea el caso
			2     C        ID local de ejecución del punto de entrada
			3     C        ID de formulário*/
            xRet := .T. 
            If Empty(oObj:GetModel("SF1_MASTER"):GetValue("F1_TPVENT"))
                xRet := .F.
                Help( ,, "HELP",, "El campo F1_TPVENT debe ser informado.", 1, 0)
            EndIf

            For nX := 1 To oObj:GetModel("SD1_DETAIL"):Length()
                If Empty(oObj:GetModel("SD1_DETAIL"):GetValue("D1_CONTA", nX))
                    xRet := .F.
                    Help( ,, "HELP",, "El campo D1_CONTA debe ser informado.", 1, 0)
                EndIf
            Next
            
        ElseIf cIdPonto == 'FORMPRE' //Ejecutado antes de la alteración de cualquier campo de formulario.
            //Formulario
            /*aParam
			1     O        Objeto del formulário o de modelo, conforme sea el caso
			2     C        ID local de ejecución del punto de entrada
			3     C        ID de formulário
			4     C        Acción de formulario
			5     C        Id del campo
			6     C        Dato asignado al campo*/
            //Grid
            /*aParam
			1     O        Objeto del formulário o de modelo, conforme sea el caso
			2     C        ID local de ejecución del punto de entrada
			3     C        ID de formulário
			4     N        Número de línea de FWFORMGRID
			5     C        Acción de FWFORMGRID
			6     C        Id del campo*/
            If cIdModel == "SF1_MASTER"
                cAction := aParam[4]
                cIdCpo  := aParam[5]
            elseIf cIdModel == "SD1_DETAIL"
                cAction := aParam[5]
                cIdCpo  := aParam[6]
            EndIf
            If cAction == "CANSETVALUE" 
                If cIdCpo == "F1_LOJA"
                    xRet := !Empty(oObj:GetValue("F1_FORNECE"))
                EndIf
            ElseIf cAction == "SETVALUE" 
                If cIdCpo == "D1_CF"
                    If Empty(oObj:GetValue("D1_TES"))
                        xRet := .F.
                        Help( ,, "HELP",, "Informe primero un TES", 1, 0)
                    EndIf
                EndIf
            EndIf
        ElseIf cIdPonto == 'FORMPOS' //Validación total del formulario.
            /*aParam
			1     O        Objeto del formulário o de modelo, conforme sea el caso
			2     C        ID local de ejecución del punto de entrada
			3     C        ID de formulário
			4     C        Acción de formulario
			5     C        Id del campo
			6			   Dato asignado al campo*/
            xRet := .T.
            If cIdModel == "SF1_MASTER"
                If Empty(oObj:GetValue("F1_TPVENT"))
                    xRet := .F.
                    Help( ,, "HELP",, "El campo F1_TPVENT debe ser informado.", 1, 0)
                EndIf
            ElseIf cIdModel == "SD1_DETAIL"
                For nX := 1 To oObj:Length()
                    If Empty(oObj:GetValue("D1_CONTA", nX))
                        xRet := .F.
                        Help( ,, "HELP",, "El campo D1_CONTA debe ser informado.", 1, 0)
                    EndIf
                Next
            EndIf  
        ElseIf cIdPonto == 'FORMLINEPRE' //Ejecutado antes de la alteración de una línea de formulário FWFORMGRID (Grid)
            /*aParam
			1     O        Objeto del formulário o de modelo, conforme sea el caso
			2     C        ID local de ejecución del punto de entrada
			3     C        ID de formulário
			4     N        Número de línea de FWFORMGRID
			5     C        Acción de FWFORMGRID
			6     C        Id del campo*/
            If cIdModel == "SD1_DETAIL"
                cAction := aParam[5]
                nLinha     := oObj:GetLine()
                If cAction == "DELETE" .and. nLinha == 1
                    xRet := .F. //Retorno de la validación.
                    Help( ,, "HELP",, "No puede ser eliminada esta linea.", 1, 0)
                EndIf
            EndIf
        ElseIf cIdPonto == 'FORMLINEPOS' //Ejecutado al finalizar la edición de una línea de formulário FWFORMGRID (Grid). (Validación de línea)
            /*aParam
			1     O        Objeto del formulário o de modelo, conforme sea el caso
			2     C        ID local de ejecución del punto de entrada
			3     C        ID de formulário
			4     N        Número de línea de FWFORMGRID*/
            If cIdModel == "SD1_DETAIL"
                nLinha     := oObj:GetLine()
                If Empty(oObj:GetValue("D1_CC", nLinha))
                    Help( ,, "HELP",, "El campo D1_CC debe ser informado.", 1, 0)
                    xRet := .F. //Retorno de la validación.
                EndIf
            EndIf
        EndIf
    EndIf

Return xRet  


Ejemplo completo:

Bloco de código
languagejava
firstline1
titleEjemplo:
linenumberstrue
collapsetrue
#INCLUDE 'protheus.ch'

...


#INCLUDE 'FWMVCDEF.CH'

...



User Function LOCXIN()

...


Local aParam     := PARAMIXB

...


Local xRet       := .T.

...


Local oObj       := ''

...


Local cIdPonto   := ''

...


Local cIdModel   := ''

...


Local cAction    := ''

...


Local nLinha     := 0

...


Local nX         := 0

...


Local cIdCpo     :=

...

 0


    If aParam <> NIL
            
        oObj       := aParam[1]
        cIdPonto   := aParam[2]
        cIdModel   := aParam[3]
        
        If cIdPonto == 'MODELPOS' //Validación total del modelo.
            /*aParam
			1     O        Objeto del formulário o de modelo, conforme sea el caso
			2     C        ID local de ejecución del punto de entrada
			3     C        ID de formulário*/
            xRet := .T. 
            If Empty(oObj:GetModel("SF1_MASTER"):GetValue("F1_TPVENT"))
                xRet := .F.
                Help( ,, "HELP",, "El campo F1_TPVENT debe ser informado.", 1, 0)
            EndIf

            For nX := 1 To oObj:GetModel("SD1_DETAIL"):Length(

...

)
                If Empty(oObj:GetModel("SD1_DETAIL"):GetValue("D1_CONTA", nX))
                    xRet := .F.
                    Help( ,, "HELP",, "El campo D1_CONTA debe ser informado.", 1, 0)
                EndIf
            Next
            
        ElseIf cIdPonto == 'FORMPRE' //Ejecutado antes de la alteración de cualquier campo de formulario.
            //Formulario
            /*aParam
			1     O        Objeto del formulário o de modelo, conforme sea el caso
			2     C        ID local de ejecución del punto de entrada
			3     C        ID de formulário
			4     C        Acción de formulario
			5     C        Id del campo
			6     C        Dato asignado al campo*/
            //Grid
            /*aParam
			1     O        Objeto del formulário o de modelo, conforme sea el caso
			2     C        ID local de ejecución del punto de entrada
			3     C        ID de formulário
			4     N        Número de línea de FWFORMGRID
			5     C        Acción de FWFORMGRID
			6     C        Id del campo*/
            If cIdModel == "SF1_MASTER"
                cAction := aParam[4]
                cIdCpo  := aParam[5]
            elseIf cIdModel == "SD1_DETAIL"

...


                cAction := aParam[5]
                cIdCpo  := aParam[6]
            EndIf
            If cAction == "CANSETVALUE" 
                If cIdCpo == "F1_LOJA"
                    xRet := !Empty(oObj:GetValue("F1_FORNECE"))
                EndIf
            ElseIf cAction == "SETVALUE" 
                If cIdCpo == "D1_CF"
                    If Empty(oObj:GetValue("D1_TES"))
                        xRet := .F.
                        Help( ,, "HELP",, "Informe primero un TES", 1, 0)
                    EndIf
                EndIf
            EndIf
        ElseIf cIdPonto == 'FORMPOS' //Validación total del formulario.
            /*aParam
			1     O        Objeto del formulário o de modelo, conforme sea el caso
			2     C        ID local de ejecución del punto de entrada
			3     C        ID de formulário
			4     C        Acción de formulario
			5     C        Id del campo
			6			   Dato asignado al campo*/

...


            xRet := .T.
            If cIdModel == "SF1_MASTER"
                If Empty(oObj:GetValue("F1_TPVENT"))
                    xRet := .F.
                    Help( ,, "HELP",, "El campo F1_TPVENT debe ser informado.", 1, 0)
                EndIf
            ElseIf cIdModel == "SD1_DETAIL"
                For nX := 1 To oObj:Length()
                    If Empty(oObj:GetValue("D1_CONTA", nX))
                        xRet := .F.
                        Help( ,, "HELP",, "El campo D1_CONTA debe ser informado.", 1, 0)
                    EndIf
                Next
            EndIf  
        ElseIf cIdPonto == 'FORMLINEPRE' //Ejecutado antes de la alteración de una línea de formulário FWFORMGRID (Grid)
            /*aParam
			1     O        Objeto del formulário o de modelo, conforme sea el caso
			2     C        ID local de ejecución del punto de entrada
			3     C        ID de formulário
			4     N        Número de línea de FWFORMGRID
			5     C        Acción de FWFORMGRID
			6     C        Id del campo*/
            If cIdModel == "SD1_DETAIL"

...


                cAction := aParam[5]
                nLinha     := oObj:GetLine()
                If cAction == "DELETE" .and. nLinha == 1
                    xRet := .F. //Retorno de la validación.
                    Help( ,, "HELP",, "No puede ser eliminada esta linea.", 1, 0)
                EndIf
            EndIf
        ElseIf cIdPonto == 'FORMLINEPOS' //Ejecutado al finalizar la edición de una línea de formulário FWFORMGRID (Grid). (Validación de línea)
            /*aParam
			1     O        Objeto del formulário o de modelo, conforme sea el caso
			2     C        ID local de ejecución del punto de entrada
			3     C        ID de formulário
			4     N        Número de línea de FWFORMGRID*/
            If cIdModel == "SD1_DETAIL"
                nLinha     := oObj:GetLine()
                If Empty(oObj:GetValue("D1_CC", nLinha))
                    Help( ,, "HELP",, "El campo D1_CC debe ser informado.", 1, 0)
                    xRet := .F. //Retorno de la validación.
                EndIf
            EndIf
        EndIf
    EndIf

...

Return xRet
Aviso
titleIMPORTANTE

La función  de usuario debe llamarse "LOCXIN", sin embargo es importante que el nombre del fuente no sea "LOCXIN".

Para más información verificar: Punto de entrada padrón MVC

...