Árvore de páginas


Los puntos de entrada utilizados en las rutinas de documentos fiscales (MATA101N, MATA102N, MATA466N) no se encuentran disponibles dentro de las nuevas rutinas de documentos fiscales, sin embargo; por medio de los puntos de entrada padrón de MVC es posible realizar validaciones de datos en los documentos de entrada, como se ejemplifican la información a continuación.


Punto  de entrada MVC

Descripción

MODELPOS

Punto de entrada ejecutado en la validación total del modelo.

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 formulario.
Respuesta:

Nombre

Tipo

Descripción

lRetL.T. indica que no hay errores.
Ejemplo:
#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.
            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
        EndIf
    EndIf

Return xRet




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.

Ejemplo:
#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.
            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

FORMPOS

Punto de entrada ejecutado en la validación total del formulario.

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 formulario.
Respuesta:

Nombre

Tipo

Descripción

lRetL

En caso de que el formulario esté correcto retornar .T., si existen errores retornar .F.

Ejemplo:
#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 == 'FORMPOS' //Validación total del formulario.
            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  
        EndIf
    EndIf

Return xRet 



FORMLINEPRE

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

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 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

Indica si permite alterar la línea .T., en caso contrario .F.

Ejemplo:
#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 == 'FORMLINEPRE' //Ejecutado antes de la alteración de una línea de formulário FWFORMGRID (Grid)
            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
        EndIf
    EndIf

Return xRet 




FORMLINEPOS

Punto de entrada ejecutado al finalizar la edición de una línea.

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.
PARAMIXB[4]NNúmero de línea.
Respuesta:

Nombre

Tipo

Descripción

lRetLSi el valor retornado es .T. si la línea no tiene errores, en caso de existir un error retornar .F.
Ejemplo
#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 == 'FORMLINEPOS' //Ejecutado al finalizar la edición de una línea de formulário FWFORMGRID (Grid). (Validación de línea)
            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:
#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*/
            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

IMPORTANTE

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

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


Puntos de entrada creados.

Puntos de entrada para agregar opciones al menú:

PE COMA221MNU Agregar opciones al menú en COMA221

PE COMA222MNU Agregar opciones al menú en COMA222

PE COMA223MNU Agregar opciones al menú en COMA223

PE COMA224MNU Agregar opciones al menú en COMA224



Puntos de entrada descontinuados.

Los puntos de entrada citados a continuación no tienen funcionalidad dentro de las rutinas COMA221, COMA222, COMA223, COMA224.


Punto de entradaDescripción
LOCXPE4| MT100GRV  Punto de entrada pre grabación de la nota.
LOCXPE5Punto de entrada post grabación del libro fiscal.
LOCXPE6 | A103VLRPunto de entrada para alterar valor total de la nota para base de calculo de los títulos.
LOCXPE7 | GQREENTRPunto de entrada para integración con Celerina.
LOCXPE8 | M466SF1Punto de entrada post grabación de encabezado.
LOCXPE9Punto de entrada post grabaciones de campos del encabezado.
LOCXPE11 | A466CRTOPunto de entrada post grabaciones finalizada la transacción.
LOCXPE13Punto de entrada para alterar cantidad de la segunda unidad de medida.
LOCXPE14 | M466SD1Punto de entrada post actualizaciones de cada ítem.
LOCXPE15Punto de entrada para ejecutar rdmakes para tratamiento especifico.
LOCXPE16 | MT100TOKPunto de entrada para incluir validaciones en el tudook.
LOCXPE17 | MT100LOKPunto de entrada para agregar validaciones de línea.
LOCXPE19 | A100F4CPPunto de entrada para notas de entrada que no sea devoluciones para agregar teclas.
LOCXPE24 | M460NUMPunto de entrada para numeración de NF.
LOCXPE30Punto de entrada para colocar campos obligatorios.
LOCXPE37Punto de entrada post grabación de SE1/SE2.
LOCXPE38Punto de entrada post grabación de SE1/SE2.
LOCXPE45 | M101SERPunto de entrada para alterar serie de NF.
LOCXPE62Punto de entrada para fecha de emisión.
LOCXPE68Punto de entrada para manipular los valores de costo de entrada en las monedas. 
LOCXPE72Punto de entrada para incluir campos de usuario al encabezado del documento.
LOCXPE74Punto de entrada para permitir alterar la provincia de entrega.

A103CND2

Punto de entrada para alterar condición de pago.

LXHORANFIS

Punto de entrada para ajustar valor del campo F1_HORA.

LOCXDREM

Punto de entrada para descripción del Remito.

M100L001

Punto de entrada para actualizar la tasa en las tablas fiscales.

MAGENTE

Punto de entrada para verificar si  es agente de percepción de IVA.

MT462MNU

Punto de entrada para agregar opciones al menú.


El sistema da aviso en caso de tener alguno de estos Puntos de Entrada compilados:



Personalización de pantalla.

Es posible realizar la personalización de algunas propiedades de las pantallas de los documentos fiscales.


DocumentoPunto de entradaDocumentación
Remito de entradaLOCX60VIEW.PRW

PE LOCX60VIEW Realizar modificaciones a la view LOCX60

Remito de entrada de beneficiamientoLOCX62VIEW.PRWPE LOCX62VIEW Realizar modificaciones a la view LOCX62

Factura de entrada

LOCX10VIEW.PRWPE LOCX10VIEW Realizar modificaciones a la view LOCX10
Gastos de importaciónLOCX13VIEW.PRWPE LOCX13VIEW Realizar modificaciones a la view LOCX13
Conoc. transp./Conoc. fleteLOCX14VIEW.PRWPE LOCX14VIEW Realizar modificaciones a la view LOCX14
Factura anticipoLOCX20VIEW.PRWPE LOCX20VIEW Realizar modificaciones a la view LOCX20 MEX
AutofacturaLOCX10AUTV.PRWPE LOCX10AUTV Realizar modificaciones a la view LOCX10AUT PAR
Factura documento soporteLOCX10SOPV.PRWPE LOCX10SOPV Realizar modificaciones a la view LOCX10SOP COL
Nota de débito proveedorLOCX08VIEW.PRWPE LOCX08VIEW Realizar modificaciones a la view LOCX08
Nota de débito - Nota ajusteLOCX23VIEW.PRWPE LOCX23VIEW Realizar modificaciones a la view LOCX23 COL
Nota de crédito internaLOCX09VIEW.PRWPE LOCX09VIEW Realizar modificaciones a la view LOCX09


Propiedades.

PropiedadTipoDescripción
MVC_VIEW_IDFIELDCNombre de campo
MVC_VIEW_ORDEMCOrden
MVC_VIEW_TITULO CTítulo del campo
MVC_VIEW_DESCR CDescripción del campo
MVC_VIEW_HELP AArray del help
MVC_VIEW_PICT CPicture
MVC_VIEW_PVARBBloque de Picture Var
MVC_VIEW_LOOKUP CConsulta F3
MVC_VIEW_CANCHANGE LIndica si el campo es editable
MVC_VIEW_FOLDER_NUMBER CCarpeta de campo
MVC_VIEW_GROUP_NUMBER CAgruapamiento de campo
MVC_VIEW_COMBOBOX ALista de valores permitidos en el campo (Combo)
MVC_VIEW_MAXTAMCMBNTamaño máximo de la opción mayor de campo
MVC_VIEW_INIBROW CInicializador de browse
MVC_VIEW_VIRTUAL LIndica si el campo es virtual
MVC_VIEW_PICTVAR CPicture variable
MVC_VIEW_INSERTLINE LIndica si debe haber un salto de línea después del campo
MVC_VIEW_WIDTH NAncho de campo en el grid
MVC_VIEW_MODAL LIndica si el campo debe ser mostrado en formularios modal

 

Ejemplo:
#INCLUDE 'protheus.ch'
#INCLUDE 'parmtype.ch'
#INCLUDE 'FWMVCDEF.CH'

User function LOCX10VIEW()
Local oView := PARAMIXB[1] //Viewdef

    
	//Remover un campo de usuario de la pantalla.
    If oView:GetViewStruct("SF1_MASTER"):HasField("F1_NUMERO") //Verificación de la existencia del campo.
        oView:GetViewStruct("SF1_MASTER"):RemoveField( "F1_NUMERO" )
    EndIf

    //Bloqueo de campo para edición. Encabezado.
    If oView:GetViewStruct("SF1_MASTER"):HasField("F1_STRING") //Verificación de la existencia del campo.
        oView:GetViewStruct("SF1_MASTER"):SetProperty("F1_STRING", MVC_VIEW_CANCHANGE, .F.)
    EndIf

	//Agregar un campo de sistema.
     oView:GetViewStruct("SF1_MASTER"):AddField("F1_HORA"  ,"99",AllTrim(FwX3Titulo("F1_HORA"))    ,AllTrim(FwX3Titulo("F1_HORA"))     ,{""},"GET","@!",NIL,"",.T.,NIL,NIL,{},NIL,NIL,.F.)

 	//Bloqueo de campo para edición. Grid.
    oView:GetViewStruct("SD1_DETAIL"):SetProperty("D1_CF", MVC_VIEW_CANCHANGE, .F.)

Return



Es recomendable no realizar modificaciones sobre los campos estándar de los documentos para no generar errores.

Los campos de usuario son agregados de manera automática a las rutinas de documentos fiscales, en caso de requerir retirar algún campo se puede marcar como no usado, o removerlo por medio de los presentes puntos de entrada.