Histórico da Página
Índice
Índice | ||
---|---|---|
|
1. Puntos de Entrada en fuente
...
Nombre del Punto de Entrada | Descripción | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
F998BRFLT | Tiene el objetivo de que el usuario pueda agregar más filtros a la consulta (Query) de selección de recibos al momento de dar clic en "Aplicar filtros" en el programa TOTVS Recibos. Parámetros recibidos:
Retorno:
Este punto de entrada sustituye al "F088FLT" de la rutina Cobros Diversos (FINA087A). Más información: DT PE F998BRFLT Agregar más filtros al momento de buscar recibos TOTVS Recibo MEX
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
F887ROT | Tiene el objetivo de habilitar una nueva opción en la ventana de Buscar Recibo, esta opción ejecutara una función de usuario el cual tiene la finalidad de realizar acciones sobre el recibo seleccionado. Retorno: Arreglo con el nombre de esta nueva opción asi como la función que se efectuara al dar clic en esta misma.
Más información: PE F887ROT Agregar opción personalizada en lista opciones en Buscar Recibo
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
F998BRMCOL | Tiene el objetivo de que el usuario pueda indicar columnas que se desean incluir en el GRID de visualización de los recibos desde la opción de "Buscar recibos". Parámetros recibidos:
Retorno: Arreglo de configuraciones para agregar a la lista de campos que se pueden visualizar en la lista de recibos.
Este punto de entrada sustituye al "F088NP2K" de la rutina Cobros Diversos (FINA087A). Más información: DT PE F998BRMCOL Incluir columnas a visualizar en el GRID de buscar recibos
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
F998NRDCOB | Tiene el objetivo de llenar el campo del Cobrador cuando se seleccione el código del cliente. Parámetros recibidos:
Retorno:
Este punto de entrada sustituye al "F087ACOB" de la rutina Cobros Diversos (FINA087A). Más información: DT PE F998NRDCOB Llenar el campo del Cobrador cuando seleccione el código del cliente en Nuevo Recibo
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
F998NRMCOL | Tiene el objetivo de agregar más columnas a visualizar en los títulos financieros en la pantalla de Nuevo Recibo y Otros Títulos. Parámetros recibidos:
Retorno: Arreglo de configuraciones para agregar a la lista de campos que se pueden visualizar en la lista de títulos.
Este punto de entrada sustituye al "F087COL" de la rutina Cobros Diversos (FINA087A). Más información: DT PE F998NRMCOL Agregar más columnas en la lista de títulos por cobrar TOTVS Recibo
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
F998NRIOFLT | Tiene el objetivo de agregar más filtros en la selección de registros (Query) que se usa en la pantalla de "Agregar otros títulos". Parámetros recibidos:
Retorno:
Este punto de entrada sustituye al "F087AFCL" de la rutina Cobros Diversos (FINA087A). Más información: DT PE F998NRIOFLT Agregar más filtros en el query de Agregar otros títulos TOTVS Recibo
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
F998FLOTIT | Tiene el objetivo de agregar nuevos tipos de títulos a los recibos generados desde la sección de "Nuevo Recibo" Parámetros recibidos:
Retorno:
Este punto de entrada sustituye al "A087TIPTI" de la rutina Cobros Diversos (FINA087A). Más información: DT PE F998FLOTIT Agregar otros tipos de títulos a los recibos de cobro en TOTVS recibo
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
F998NRG3 | Punto de entrada disponible que permite realizar acciones antes de generar los asientos contables y de grabar la tabla de los impuestos/retenciones (SFE) desde la opción de "Nuevo Recibo". La llamada desde este punto de entrada está fuera del control de la transacción. Parámetros recibidos:
Retorno:
Este punto de entrada sustituye al "FA087INC" de la rutina de Cobros Diversos (FINA087A). Más información: DT PE F998NRG3 Agregar acciones antes de asientos contables y de grabar tabla de impuestos/retenciones
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
F998GSE1 | Tiene el objetivo de actualizar campos creados por el usuario en la tabla de Títulos por Cobrar (SE1), este proceso es realizado antes de finalizar las actualizaciones de la tabla de Títulos por Cobrar. Parámetros recibidos:
Retorno:
Este punto de entrada sustituye al "F840SE1" de la rutina de Generación de recibos (FINA840). Más información: DT PE F998GSE1 Permite grabar campos creados por el usuario en la tabla de títulos por cobrar
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
F998MAIL | Tiene el objetivo de actualizar el asunto y el cuerpo del Mail. Parámetros recibidos:
Retorno:
Más información: DT PE F998MAIL Modificar el Asunto y Cuerpo al enviar el Recibo por Mail TOTVS Recibo
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
F998IMPREC | Tiene el objetivo de imprimir un recibo en formato PDF personalizado (El recibo en formato PDF debe quedar con el mismo nombre del archivo XML y en la misma ruta, en el caso de que sea enviado por email). Parámetros recibidos:
Más información: DT PE F998IMPREC Formato de impresión para los recibos TOTVS Recibo
IMPORTANTE
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
FINCMTC | Tiene el objetivo de dar tratamiento a la cadena ingresada en la lectora de cheques para indicar posición y longitud de los datos contenidos en la cadena, retorna un array con 6 valores correspondiente a los campos:
Parámetros recibidos:
Ejemplo := 0<B240002400240123456789ASDFGHJK
Más información: DT PE FINCMTC Personalización de los datos ingresados en la lectora de cheques TOTVS Recibo
IMPORTANTE: Este punto de entrada es opcional de lo contrario la Lectora de cheques tomara las siguientes longitudes
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
FINLRCHQ | Tiene el objetivo de retornar una cadena de caracteres con el formato de un cheque y ser visualizado en la "Lectora De Cheque". Parámetros recibidos:
Más información: 695246_MMI-5510_DT_Punto_de_Entrada_FINLRCHQ_ARG
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
F998NATVAZ |
Tiene el objetivo de personalizar la obligatoriedad del campo Modalidad en el encabezado del recibo y esta supliendo al punto de entrada A087NATVAZ de la rutina FINA087A. Parámetros recibos:
Más información: DT PE F998NATVAZ Validación obligatoriedad de campo Modalidad Totvs Recibos PER
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
F998VISFP | Tiene el objetivo de que el usuario pueda indicar columnas y valores que se desean incluir en el GRID de visualización de las formas de pago al momento de visualizar un recibo a detalle desde "Buscar recibos".
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
F998NROK | Servicio para el guardado de los recibos, con el objetivo de que el usuario pueda agregar validaciones y mensajes de confirmación antes de guardar (Si retorna true procederá con el guardado del recibo, de lo contrario no procederá con el guardado del recibo y mandara un mensaje como alerta).
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
F998NRG2 | Punto de entrada disponible que permite realizar acciones después de registrar datos en la tabla de Recibos (SEL) y Cuentas por Cobrar (SE1). La llamada desde este punto de entrada está fuera del control de la transacción.
Âncora | F998NRG1 | F998NRG1 | F998NRG1 Punto de entrada disponible que permite realizar acciones antes de la contabilidad La llamada desde este punto de entrada está fuera del control de la transacción.
Descipción | Actualizaciones Punto de entrada: | F998NRG1 Parámetros recibidos: | Nombre Tipo Descripción PARAMIXB[1] | Json | Objeto Json con toda la información guardada en el recibo | Respuesta: | N/A |
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Âncora | F998VALBX | F998VALBX | F998VALBX||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Parámetros recibidos: |
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Respuesta: |
|
Bloco de código | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
#Include 'Protheus.ch'
User Function F998VALBX()
Local oResponse := JsonObject():New() as Object
Local oJsonData := JsonObject():New() as JsonObject
oJsonData:fromJson(PARAMIXB[1])
IF !PARAMIXB[2] //Vista
oResponse['label'] := "% Descuento" //Nombre del campo nuevo a mostrar.
oResponse['readonlyDiscount'] := .T. //Deshabilitar o habilitar el campo de descuento.
oResponse['readonlyInterest'] := .T. //Deshabilitar o habilitar el campo de Intereses.
oResponse['readonlyFine'] := .T. //Deshabilitar o habilitar el campo de Multa.
oResponse['disabledInput'] := isDisable(oJsonData) //Deshabilitar o habilitar el input nuevo
oResponse['maxDiscount'] := GetLimite(oJsonData) //Se informa el descuento permitido debe tener un rango mayor a 0 y menor a 100
oResponse['warningMaxDiscount'] := "Descuento por Pronto Pago mayor al permitido. En esta condición el tope es:"+ALLTRIM(STR(oResponse['maxDiscount'])) //Mensaje personalizado por si se excede el descuento permitido, si no se informa el front mandara uno por default
ELSE
SaveData(oJsonData) //Grabar datos
ENDIF
Return oResponse
/*/{Protheus.doc} SaveData
Guardamos el dato en un campo en especifico
@type function
@author luis.aboytes
@since 18/7/2024
/*/
Static Function SaveData(oJsonData)
Local nCont as Numeric
For nCont := 1 to LEN(oJsonData['titulos'])
SE1->(dbSetOrder(1))
SE1->(dbSeek(xFilial("SE1")+PADR(oJsonData['titulos'][nCont]['prefix'],GetSx3Cache("E1_PREFIXO","X3_TAMANHO"))+PADR(oJsonData['titulos'][nCont]['billnumber'],GetSx3Cache("E1_NUM","X3_TAMANHO"))+PADR(oJsonData['titulos'][nCont]['installment'],GetSx3Cache("E1_PARCELA","X3_TAMANHO"))))
RecLock("SE1",.F.)
SE1->E1_XPERDES := oJsonData['titulos'][nCont]['percentDiscount']
MsUnLock()
Next
Return
/*/{Protheus.doc} GetLimite
Se retorna el limite de descuento
@type function
@author luis.aboytes
@since 18/7/2024
/*/
Static Function GetLimite(oJsonData)
Local nTope := 0
SE1->(dbSetOrder(1))
SE1->(dbSeek(xFilial("SE1")+PADR(oJsonData['prefix'],GetSx3Cache("E1_PREFIXO","X3_TAMANHO"))+PADR(oJsonData['billnumber'],GetSx3Cache("E1_NUM","X3_TAMANHO"))+PADR(oJsonData['installment'],GetSx3Cache("E1_PARCELA","X3_TAMANHO"))))
nTope:=IIF(VAZIO(Posicione("SE4", 1,xFilial("SE4")+SE1->E1_XCONDPP,"E4_XDESCON")),0,Posicione("SE4", 1,xFilial("SE4")+SE1->E1_XCONDPP,"E4_XDESCON"))
Return nTope
/*/{Protheus.doc} isDisable
Funcion que retorna si es editable o no el valor del input
@type function
@author luis.aboytes
@since 18/7/2024
/*/
Static Function isDisable(oJsonData)
Local lRet := .t.
SE1->(dbSetOrder(1))
SE1->(dbSeek(xFilial("SE1")+PADR(oJsonData['prefix'],GetSx3Cache("E1_PREFIXO","X3_TAMANHO"))+PADR(oJsonData['billnumber'],GetSx3Cache("E1_NUM","X3_TAMANHO"))+PADR(oJsonData['installment'],GetSx3Cache("E1_PARCELA","X3_TAMANHO"))))
IF SE1->E1_XCONDPP == '999'
lRet := .f.
ENDIF
Return lRet |
El objeto Json PARAMIXB[1] Contiene los siguientes objetos:
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Respuesta: | N/A |
Bloco de código | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
#Include 'Protheus.ch'
User Function F998NRG2()
Local oModel:=PARAMIXB[1]
MsgYesNo("ATENCIÓN" , "Se manda a llamar la funcion de usuario")
Return |
Âncora F998NRG1 F998NRG1
F998NRG1
Punto de entrada disponible que permite realizar acciones antes de la contabilidad
La llamada desde este punto de entrada está fuera del control de la transacción.
Crear la función de usuario F998NRG1 por medio del cual realicen acciones antes de generar asientos contables al grabar un recibo de cobro.
- Dentro del módulo Financiero, ejecutar la rutina TOTVS Recibo (Actualizaciones | Cuentas por cobrar | TOTVS Recibo).
- Dentro del aplicativo de TOTVS Recibo, ir a Nuevo Recibo.
- Llenar el encabezado del recibo.
- Aplicar los filtros del encabezado.
- Seleccionar un Título por Cobrar y agregar una Forma de Pago (opcional).
- Dar clic en Confirmar para grabar el recibo.
- Revisar que la ejecución del punto de entrada haya realizado las acciones esperadas.
Descipción | Actualizaciones |
Punto de entrada: | F998NRG1 |
Parámetros recibidos: | N/A |
Respuesta: | N/A |
Bloco de código | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
#Include 'Protheus.ch'
User Function F998NRG1()
MsgYesNo("ATENCIÓN" , "Se manda a llamar la funcion de usuario")
Return |
Âncora | ||||
---|---|---|---|---|
|
F998VALBX
Se crea el punto de entrada F998VALBX
F998BRANU
Se crea el punto de entrada F998BRANUen la rutina FINA998 - TOTVS Recibo, con el objetivo de
habilitar el descuento por pronto pago al momento de editar el "Cobro del titulo" desde la opción de Nuevo Recibo.
- Crear la
- Debe retornar un arreglo con dos parámetros, en donde el primero es un valor lógico, .T. (Verdadero) o .F. (Falso), de aceptación o rechazo, y el segundo es un mensaje personalizado según sea el caso
- funcion de usuario F998VALBX definiendo las propiedades para la vista , calculos matematicos para los campos descuento, multa, interes y total así como la funcion a ejecutar para guardar los datos.
- Dentro del módulo Financiero ejecutar la rutina TOTVS Recibo (Actualizaciones | Cuentas por cobrar).
- Dentro del aplicativo de TOTVS Recibo, ir
- a Nuevo Recibo, llenar los campos
Nombre | Tipo | Descripción |
---|---|---|
PARAMIXB[1] | C | Serie del recibo |
PARAMIXB[2] | C | Número del recibo |
Nombre | Tipo | Descripción | Obligatorio |
---|---|---|---|
aRet[1] | L | Retorna .T. si procede el Anulado/Borrado o .F. si no se permite | Si |
aRet[2] | C | Mensaje de la causa de rechazo de anulación. | Si |
Bloco de código | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
#Include 'Protheus.ch'
User Function F998BRANU
Local cSerie := Paramixb[1]
Local cRecibo := Paramixb[2]
Local cQueryWhere := ""
Local cQueryFields := ""
Local cAlias := GetNextAlias()
Local aRet := {.T.,""}
cQueryWhere := " FJT_FILIAL = '"+xFilial("FJT")+"' AND FJT_SERIE = '"+cSerie+"' AND FJT_RECIBO = '"+cRecibo+"' "
cQueryFields := " FJT_SERIE,FJT_RECIBO,FJT_CLIENT,FJT_DTDIGI "
cQuery := " SELECT "+cQueryFields+" FROM "+ RetSqlName("FJT") + " WHERE "+cQueryWhere
cQuery := ChangeQuery(cQuery)
MPSysOpenQuery(cQuery, cAlias)
WHILE (cAlias)->(!EOF())
IF (cAlias)->FJT_DTDIGI == DTOS(ddatabase)
aRet := {.F.,"No se puede eliminar un recibo que haya sido generado el dia de hoy"}
EndIf
(cAlias)->(DbSkip())
END
Return aRet |
F998BRBOR
Se crea el punto de entrada F998BRBOR en la rutina FINA998- TOTVS Recibo, con el objetivo de que el usuario pueda incluir validaciones para la opción de "Borrar" en la rutina.
- Debe retornar un arreglo con dos parámetros, en donde el primero es un valor lógico, .T. (Verdadero) o .F. (Falso), de aceptación o rechazo, y el segundo es un mensaje personalizado, según sea el caso.
- del encabezado para localizar un titulo.
- Editar el cobro de un titulo.
Verificar si se visualiza el nuevo campo configurado en la función F998VALBX.
- Verificar si realizan los calculos para los campos descuento, multa e interes y total. Esto de acuerdo a la lógica determinada en la función de usuario.
Verificar si se guarda correctamente el valor ingresado en el campo definido por el cliente.
Parámetros recibidos: Nombre Tipo Descripción PARAMIXB[1] O Definición de la vista del campo "Descuento por pronto pago""
Descripción del objeto PARAMIXB[1] cuando en el Json la bandera PARAMIXB[2] es Verdadera (.T.) y la bandera ["recalculate" ] este como falsa (.F.)
Expandir title Objeto Titulo Nombre en Json Equivalencia Descripción ['recalculate´] N/A Si es True (.T.) realizará los calculos, si es False (.F.) realizara la vista titulos[nX]['branch'] E1_FILIAL Filial titulos[nX]['billnumber'] E1_NUMERO Numero de Título titulos[nX]['type'] E1_TIPO Tipo de Título titulos[nX]['actualduedt'] E1_VENCREA Vencimiento Real titulos[nX]['currency'] E1_MOEDA Moneda titulos[nX]['unit'] E1_LOJA Tienda titulos[nX]['installment'] E1_PARCELA Cuota titulos[nX]['billvalue'] E1_VALOR Valor titulos[nX]['customer'] E1_CLIENTE Cliente titulos[nX]['class'] E1_NATUREZ Modalidad titulos[nX]['custname'] A1_NOME Nombre del cliente titulos[nX]['balance'] E1_SALDO Saldo del Título titulos[nX]['prefix'] E1_PREFIXO Prefijo del Título titulos[nX]['issuedt'] E1_EMISSAO Fecha de emisión titulos[nX]['writeoffne'] E1_VALLIQ Valor neto de la baja titulos[nX]['discount'] E1_DESCONT Descuento titulos[nX]['interest'] E1_JUROS Intereses titulos[nX]['fine'] E1_MULTA Multas titulos[nX]['series'] E1_SERIE Serie titulos[nX]['origin'] E1_ORIGEM Ruta origen del Título titulos[nX]['recno'] R_E_C_N_O titulos[nX]['client'] E1_CLIENTE Cliente titulos[nX]['originbranch'] E1_FILORIG Filial Original titulos[nX]['paycondf2'] F2_COND Condicion SF2 titulos[nX]['paycondf1'] F1_COND Condición SF1 titulos[nX]['serie2f2'] F2_SERIE2 Serie SF2 titulos[nX]['serie2f1'] F1_SERIE2 Serie SF1 titulos[nX]['paymentcondition'] Condición de pago titulos[nX]['cobrar'] Monto a cobrar en Numeric titulos[nX]['billvalueString'] Toyal o saldo (Dependiendo la pantalla) titulos[nX]['balanceString'] Saldo en String titulos[nX]['cobrarString'] Monto a cobrar en String titulos[nX]['discountString'] Descuento del Título en String titulos[nX]['interestString'] Interes del titulo en String titulos[nX]['fineString'] Multa del titulo en String Definición de la lógica del campo "Descuento por pronto pago"
Descripción del objeto PARAMIXB[1] cuando en el Json la bandera PARAMIXB[2] es Verdadera (.T.) y la bandera ["recalculate" ] este como True (.T.)
Expandir title Objeto Nombre en Json Descripción ['recalculate´] Si es True (.T.) realizará los calculos, si es False (.F.) realizara la vista bind['discountInput'] Descuento ingresado en el campo Descuento Pronto Pago bind['descuento'] Tipo de Titulo bind['multa'] Interes del titulo en String bind['interes'] Multa del titulo en String bind['saldo'] Saldo total (Ya tomando en cuenta, descuento, multa e interes) Definición de la grabación del campo "Descuento por pronto pago"
Descripción de los objetos (PARAMIXB[1]) mandados en el Json cuando la bandera PARAMIXB[2] es Falsa (.F.)
Expandir title Objeto Encabezado Nombre en Json Equivalencia Descripción encabezado['serie'] FJT_SERIE Serie del recibo encabezado['recibo'] FJT_RECIBO Numero de recibo encabezado['emissa'] FJT_EMISSA Emisión encabezado['nature'] FJT_NATURE Cobrador encabezado['client'] FJT_CLIENT Cliente encabezado['loja'] FJT_LOJA Tienda encabezado['cobrad'] FJT_COBRAD Cobrador encabezado['recprov'] FJT_RECPRV Recibo Provisorio Expandir title Objeto Titulos Nombre en Json Equivalencia Descripción titulos[nX]['branch'] E1_FILIAL Filial titulos[nX]['billnumber'] E1_NUMERO Numero de Titulo titulos[nX]['type'] E1_TIPO Tipo de Titulo titulos[nX]['actualduedt'] E1_VENCREA Vencimiento Real titulos[nX]['currency'] E1_MOEDA Moneda titulos[nX]['unit'] E1_LOJA Tienda titulos[nX]['installment'] E1_PARCELA Cuota titulos[nX]['billvalue'] E1_VALOR Valor titulos[nX]['customer'] E1_CLIENTE Cliente titulos[nX]['class'] E1_NATUREZ Modalidad titulos[nX]['custname'] A1_NOME Nombre del cliente titulos[nX]['balance'] E1_SALDO Saldo del titulo titulos[nX]['prefix'] E1_PREFIXO Prefijo del titulo titulos[nX]['issuedt'] E1_EMISSAO Fecha de emisión titulos[nX]['writeoffne'] E1_VALLIQ Valor neto de la baja titulos[nX]['discount'] E1_DESCONT Descuento titulos[nX]['interest'] E1_JUROS Intereses titulos[nX]['fine'] E1_MULTA Multas titulos[nX]['series'] E1_SERIE Serie titulos[nX]['origin'] E1_ORIGEM Ruta origen del titulo titulos[nX]['recno'] R_E_C_N_O titulos[nX]['client'] E1_CLIENTE Cliente titulos[nX]['originbranch'] E1_FILORIG Filial Original titulos[nX]['paycondf2'] F2_COND Condicion SF2 titulos[nX]['paycondf1'] F1_COND Condición SF1 titulos[nX]['serie2f2'] F2_SERIE2 Serie SF2 titulos[nX]['serie2f1'] F1_SERIE2 Serie SF1 titulos[nX]['paymentcondition'] Condición de pago titulos[nX]['cobrar'] Monto a cobrar en Numeric titulos[nX]['billvalueString'] Toyal o saldo (Dependiendo la pantalla) titulos[nX]['balanceString'] Saldo en String titulos[nX]['cobrarString'] Monto a cobrar en String titulos[nX]['discountString'] Descuento del titulo en String titulos[nX]['interestString'] Interes del titulo en String titulos[nX]['fineString'] Multa del titulo en String titulos[nX]['quickSelected'] Titulo seleccionado en el GRID titulos[nX]['reasonBx'] Motivos de baja titulos[nX]['peso'] Total en moneda Expandir title Objeto monedas Nombre en Json Descripción monedas[nX]['coin'] Nombre Moneda monedas[nX]['tasa'] Tasa monedas[nX]['received'] Cantidad recibida en esta moenda monedas[nX]['balance'] Saldo en Numeric monedas[nX]['type'] Nombre de Moneda monedas[nX]['moneda'] Numero de Moneda monedas[nX]['stringTasa'] Tasa de moneda monedas[nX]['balanceString'] Saldo en String monedas[nX]['receivedString'] Cantidad recibida en esta moenda Expandir title Objeto formas de pago Nombre en Json Descripción formaspago[nX]['property'] Nombre de la propiedad (Trae el mismo nombre registrado en la SX3) formaspago[nX]['value'] Valor de la propiedad Expandir title Objeto parametros Nombre en Json Descripción params[nX]['mv_par01'] Valor del parametro 01 params[nX]['mv_par01']
.
.
.
params[nX]['mv_parxx']
PARAMIXB[2] L True (.T.) si es momento del guardado y False (.F.) si es configuración de la vista Respuesta: Descripción del objeto de respuesta cuando en el Json la bandera PARAMIXB[2] es Verdadera (.T.) y la bandera ["recalculate" ] este como falsa (.F.)
Expandir title Objeto de respuesta Nombre
Tipo
Descripción
Obligatorio
oJson['label'] L Nombre del campo nuevo a mostrar.
Si oJson['disabledDiscount'] L Deshabilitar o habilitar el campo de descuento. Si oJson['disabledInterest'] L Deshabilitar o habilitar el campo de Intereses. Si oJson['disabledFine'] L Deshabilitar o habilitar el campo de Multa. Si oJson['disabledInput'] L Deshabilitar o habilitar el input nuevo Si oJson['maxDiscount'] N Se informa el descuento permitido debe tener un rango mayor a 0 y menor a 100 Si oJson['warningMaxDiscount'] C Mensaje personalizado por si se excede el descuento permitido, si no se informa el front mandará uno por default No Descripción del objeto de respuesta cuando en el Json la bandera PARAMIXB[2] es Verdadera (.T.) y la bandera ["recalculate" ] este como True (.T.)
Expandir title Objeto de respuesta Nombre en Json Descripción oJson['descuento'] Valor que sera mostrado en el campo descuento oJson['residuo'] Valor que sera mostrado como total del titulo (Despues de descuentos, multa e intereses) oJson['multa'] Valor que sera mostrado como multa del titulo oJson['interes'] Valor que sera mostrado como interes del titulo Descripción de los objetos de respues en el Json cuando la bandera PARAMIXB[2] sea Falsa (.F.)
N/A
Bloco de código language actionscript3 title Ejemplo de PE F998VALBX y sus funciones de usuario linenumbers true collapse true #Include 'Protheus.ch' User Function F998VALBX() Local oResponse := JsonObject():New() as Object IF PARAMIXB[2] //Vista IF PARAMIXB[1]['recalculate'] oResponse:=setValues(PARAMIXB[1]) ELSE oResponse['label'] := "% Descuento por pronto pago" //Nombre del campo nuevo a mostrar. oResponse['readonlyDiscount'] := .T. //Deshabilitar o habilitar el campo de descuento. oResponse['readonlyInterest'] := .T. //Deshabilitar o habilitar el campo de Intereses. oResponse['readonlyFine'] := .T. //Deshabilitar o habilitar el campo de Multa. oResponse['disabledInput'] := .F.//isDisable(PARAMIXB[1]) //Deshabilitar o habilitar el input nuevo oResponse['maxDiscount'] := 50//GetLimite(PARAMIXB[1]) //Se informa el descuento permitido debe tener un rango mayor a 0 y menor a 100 oResponse['warningMaxDiscount'] := "Descuento por Pronto Pago mayor al permitido. En esta condición el tope es:"+ALLTRIM(STR(oResponse['maxDiscount'])) //Mensaje personalizado por si se excede el descuento permitido, si no se informa el front mandara uno por default ENDIF ELSE SaveData(PARAMIXB[1]) //Grabación ENDIF Return oResponse /*/{Protheus.doc} setValues Esta funcion determina los valores a mostrar en los campos de descuento, residuo,multa e interes @type function @version @author luis.aboytes @since 25/7/2024 @param oJson, object, param_description @return variant, return_description /*/ Static Function setValues(oJson) Local oRes := JsonObject():New() oRes['descuento'] := Round(PARAMIXB[1]['bind']['discountInput']/100*PARAMIXB[1]['bind']['saldo'],2) oRes['residuo'] := Round(PARAMIXB[1]['bind']['saldo']-oRes['descuento'],MsDecimais(SE1->E1_MOEDA)) oRes['multa'] := 0 oRes['interes'] := 0 Return oRes /*/{Protheus.doc} SaveData Guardamos el dato en un campo en especifico @type function @author luis.aboytes @since 18/7/2024 /*/ Static Function SaveData(oJsonData) Local nCont as Numeric For nCont := 1 to LEN(oJsonData['titulos']) SE1->(dbSetOrder(1)) SE1->(dbSeek(xFilial("SE1")+PADR(oJsonData['titulos'][nCont]['prefix'],GetSx3Cache("E1_PREFIXO","X3_TAMANHO"))+PADR(oJsonData['titulos'][nCont]['billnumber'],GetSx3Cache("E1_NUM","X3_TAMANHO"))+PADR(oJsonData['titulos'][nCont]['installment'],GetSx3Cache("E1_PARCELA","X3_TAMANHO")))) RecLock("SE1",.F.) SE1->E1_XPERDES := oJsonData['titulos'][nCont]['percentDiscount'] MsUnLock() Next Return /*/{Protheus.doc} GetLimite Se retorna el limite de descuento @type function @author luis.aboytes @since 18/7/2024 /*/ Static Function GetLimite(oJsonData) Local nTope := 0 SE1->(dbSetOrder(1)) SE1->(dbSeek(xFilial("SE1")+PADR(oJsonData['prefix'],GetSx3Cache("E1_PREFIXO","X3_TAMANHO"))+PADR(oJsonData['billnumber'],GetSx3Cache("E1_NUM","X3_TAMANHO"))+PADR(oJsonData['installment'],GetSx3Cache("E1_PARCELA","X3_TAMANHO")))) nTope:=IIF(VAZIO(Posicione("SE4", 1,xFilial("SE4")+SE1->E1_XCONDPP,"E4_XDESCON")),0,Posicione("SE4", 1,xFilial("SE4")+SE1->E1_XCONDPP,"E4_XDESCON")) Return nTope /*/{Protheus.doc} isDisable Funcion que retorna si es editable o no el valor del input @type function @author luis.aboytes @since 18/7/2024 /*/ Static Function isDisable(oJsonData) Local lRet := .t. SE1->(dbSetOrder(1)) SE1->(dbSeek(xFilial("SE1")+PADR(oJsonData['prefix'],GetSx3Cache("E1_PREFIXO","X3_TAMANHO"))+PADR(oJsonData['billnumber'],GetSx3Cache("E1_NUM","X3_TAMANHO"))+PADR(oJsonData['installment'],GetSx3Cache("E1_PARCELA","X3_TAMANHO")))) IF SE1->E1_XCONDPP == '999' lRet := .f. ENDIF Return lRet
Âncora F998BRANU F998BRANU
F998BRANU
Se crea el punto de entrada F998BRANU en la rutina FINA998- TOTVS Recibo, con el objetivo de que el usuario pueda incluir validaciones para la opción de "Anular" en la rutina.
- Crear la función de usuario F998BRANU con las validaciones personalizadas tanto para aceptar así como para rechazar la anulación del recibo.
- Debe retornar un arreglo con dos parámetros, en donde el primero es un valor lógico, .T. (Verdadero) o .F. (Falso), de aceptación o rechazo, y el segundo es un mensaje personalizado según sea el caso. - Dentro del módulo Financiero ejecutar la rutina TOTVS Recibo (Actualizaciones | Cuentas por cobrar).
- Dentro del aplicativo de TOTVS Recibo, ir a Buscar recibo, llenar los campos de consulta de acuerdo a los recibos que se desea buscar y visualizar.
- Se mostrará la lista de los recibos.
- Seleccionar el recibo deseado y al dar clic en el botón de Anular recibo se ejecutará el punto de entrada F998BRANU.
- La función de usuario efectúa las validaciones personalizadas y retorna una respuesta que indica si procede o no la anulación.
- Se mostrará una ventana con el mensaje correspondiente y en caso de que proceda, el sistema continuará con la anulacióndel recibo.
Parámetros recibidos: |
| ||||||||||||
Respuesta: |
|
Bloco de código | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
#Include 'Protheus.ch'
User Function F998BRANU
Local cSerie := Paramixb[1]
Local cRecibo := Paramixb[2]
Local cQueryWhere := ""
Local cQueryFields := ""
Local cAlias := GetNextAlias()
Local aRet := {.T.,""}
cQueryWhere := " FJT_FILIAL = '"+xFilial("FJT")+"' AND FJT_SERIE = '"+cSerie+"' AND FJT_RECIBO = '"+cRecibo+"' "
cQueryFields := " FJT_SERIE,FJT_RECIBO,FJT_CLIENT,FJT_DTDIGI "
cQuery := " SELECT "+cQueryFields+" FROM "+ RetSqlName("FJT") + " WHERE "+cQueryWhere
cQuery := ChangeQuery(cQuery)
MPSysOpenQuery(cQuery, cAlias)
WHILE (cAlias)->(!EOF())
IF (cAlias)->FJT_DTDIGI == DTOS(ddatabase)
aRet := {.F.,"No se puede eliminar un recibo que haya sido generado el dia de hoy"}
EndIf
(cAlias)->(DbSkip())
END
Return aRet |
Âncora F998BRBOR F998BRBOR
F998BRBOR
Se crea el punto de entrada F998BRBOR en la rutina FINA998- TOTVS Recibo, con el objetivo de que el usuario pueda incluir validaciones para la opción de "Borrar" en la rutina.
- Crear la función de usuario "F998BRBOR" con las validaciones personalizadas tanto para aceptar, así como para rechazar el borrado del recibo.
- Debe retornar un arreglo con dos parámetros, en donde el primero es un valor lógico, .T. (Verdadero) o .F. (Falso), de aceptación o rechazo, y el segundo es un mensaje personalizado, según sea el caso. - Dentro del módulo Financiero ejecutar la rutina TOTVS Recibo (Actualizaciones | Cuentas por cobrar).
- Dentro del aplicativo de TOTVS Recibo, ir a Buscar recibo, llenar los campos de consulta de acuerdo a los recibos que se desea buscar y visualizar.
- Se mostrará la lista de los recibos.
- Seleccionar el recibo deseado y al dar clic en el botón de Borrar (El recibo tiene que estar previamente anulado) recibo se ejecutará el punto de entrada "F998BRBOR".
- La función de usuario efectúa las validaciones personalizadas y retorna una respuesta que indica si procede o no el borrado.
- Se mostrará una ventana con el mensaje correspondiente y en caso de que proceda, el sistema continuará con el borrado del recibo.
Parámetros recibidos: |
| ||||||||||||
Respuesta: |
|
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
#Include 'Protheus.ch'
User Function F998BRBOR
Local cSerie := Paramixb[1]
Local cRecibo := Paramixb[2]
Local cQueryWhere := ""
Local cQueryFields := ""
Local cAlias := GetNextAlias()
Local aRet := {.T.,""}
cQueryWhere := " FJT_FILIAL = '"+xFilial("FJT")+"' AND FJT_SERIE = '"+cSerie+"' AND FJT_RECIBO = '"+cRecibo+"' "
cQueryFields := " FJT_SERIE,FJT_RECIBO,FJT_CLIENT,FJT_DTDIGI "
cQuery := " SELECT "+cQueryFields+" FROM "+ RetSqlName("FJT") + " WHERE "+cQueryWhere
cQuery := ChangeQuery(cQuery)
MPSysOpenQuery(cQuery, cAlias)
WHILE (cAlias)->(!EOF())
IF (cAlias)->FJT_DTDIGI == DTOS(ddatabase)
aRet := {.F.,"No se puede BORRAR un recibo que haya sido generado el dia de hoy"}
EndIf
(cAlias)->(DbSkip())
END
Return aRet |
2. Puntos de entrada en MVC (Estándares)
ID DEL PUNTO DE ENTRADA | MOMENTO DE EJECUCIÓN DEL PUNTO DE ENTRADA |
MODELPRE | Antes de la alteración de cualquier campo del modelo. 1 O Objeto del formulario ó del modelo, conforme el caso. Retorno: |
MODELPOS | En la validación total del modelo 1 O Objeto del formulario o del modelo, conforme el caso. Retorno: |
FORMPRE | Antes de la alteración de cualquier campo del formulario. Parámetros recibidos: 1 O Objeto del formulario o del modelo, conforme el caso. Retorno: |
FORMPOS | En la validación total del formulario. Parámetros recibidos: 1 O Objeto del formulario o del modelo, conforme el caso. Retorno: |
FORMLINEPRE | Antes de la alteración de la línea del formulario FWFORMGRID. 1 O Objeto del formulario o del modelo, conforme al caso. Retorno: |
FORMLINEPOS | En la validación total de la línea del formulario FWFORMGRID. 1 O Objeto do formulário ou do modelo, conforme o caso Retorno: |
MODELCOMMITTTS | Despúes de la grabación total del modelo y dentro de la transacción. Parámetros Recibidos: 1 O Objeto del formulario del modelo, conforme el caso. Retorno: |
MODELCOMMITNTTS | Después de la grabación total del modelo y fuera de la transacción. Parámetros recibidos: 1 O Objeto del formulario o del modelo, conforme el caso. Retorno: |
FORMCOMMITTTSPRE | Antes da gravação da tabela do formulário. Parâmetros Recebidos: 1 O Objeto del formulario o del modelo, conforme el caso. Retorno: |
FORMCOMMITTTSPOS | Después de la grabación de la tabla del formulario. Parâmetros Recebidos: 1 O Objeto del formulario o del modelo, conforme el caso. Retorno: |
MODELCANCEL | El botón de cancelar. Parámetros recibidos: 1 O Objeto del formulario o del modelo, conforme el caso. Retorno: |
BUTTONBAR | Incluir botones en el ControlBar. Para crear los botones se debe retornar un array bidimensional con la siguiente estructura de cada ítem: 1 C Titulo para el botón. Parâmetros Recebidos: 1 O Objeto del formulario o del modelo, conforme el caso. Retorno: |
2.1 Usos de los Puntos de Entrada de MVC
Aviso | ||
---|---|---|
| ||
Al utilizar uno de los siguientes Puntos de Entrada MVC, y al tener configurado un mensaje personalizado de error (HELP), este mensaje del Punto de Entrada será priorizado sobre el mensaje de error o información (HELP) descrito desde el módulo configurador (SIGACFG). En caso de no contar con ninguno de los dos mensajes (HELP), se mostrará vacío el detalle del mensaje. Este comportamiento también se aplica al título del mensaje configurado en el HELP. Ejemplos:
|
Punto de entrada MVC | Descripcíon | |||||||||||||||||||||||||||||||||||||||||||||||
FORMPRE | Punto de entrada con la finalidad de habilitar o deshabilitar el campo Cobrador (FJT_COBRAD) de la tabla Encabezado de Recibo (FJT) y no permitir su edición.
| |||||||||||||||||||||||||||||||||||||||||||||||
FORMLINEPOS | Punto de entrada para VALIDAR los datos de retenciones en la rutina de cobros diversos.
| |||||||||||||||||||||||||||||||||||||||||||||||
MODELCOMMITNTTS | Punto de entrada para MÓDIFICAR los datos de retenciones en la rutina de cobros diversos.
|
|
Nombre
Tipo
Descripción
Obligatorio
|
|
|
|
|
|
Puntos de entrada en MVC (Estándares)
...
ID DEL PUNTO DE ENTRADA
...
MOMENTO DE EJECUCIÓN DEL PUNTO DE ENTRADA
...
MODELPRE
...
Antes de la alteración de cualquier campo del modelo.
Parámetros recibidos:
1 O Objeto del formulario ó del modelo, conforme el caso.
2 C ID del local de ejecución del punto de entrada.
3 C ID del formulario.
Retorno:
Requiere un retorno lógico.
...
MODELPOS
...
En la validación total del modelo
Parámetros recibidos:
1 O Objeto del formulario o del modelo, conforme el caso.
2 C ID del local de ejecución del punto de entrada.
3 C ID del formulario.
Retorno:
Requiere un retorno lógico.
...
FORMPRE
Antes de la alteración de cualquier campo del formulario.
Parámetros recibidos:
1 O Objeto del formulario o del modelo, conforme el caso.
2 C ID del local de ejecución del punto de entrada.
3 C ID del formulario.
4 C Acción del FWFORMGRID.
5 C ID del Campo.
Retorno:
Requiere un retorno lógico.
...
FORMPOS
...
En la validación total del formulario.
Parámetros recibidos:
1 O Objeto del formulario o del modelo, conforme el caso.
2 C ID del local de ejecución del punto de entrada.
3 C ID del formulario.
Retorno:
Requiere un retorno lógico.
...
FORMLINEPRE
...
Antes de la alteración de la línea del formulario FWFORMGRID.
Parámetros recibidos:
1 O Objeto del formulario o del modelo, conforme al caso.
2 C ID del local de ejecución del punto de entrada.
3 C ID del formulario.
4 N Numero de linea del FWFORMGRID
5 C Acción del FWFORMGRID
6 C Id del campo
Retorno:
Requiere un retorno lógico.
...
FORMLINEPOS
...
En la validación total de la línea del formulario FWFORMGRID.
Parámetros recibidos:
1 O Objeto do formulário ou do modelo, conforme o caso
2 C ID do local de execução do ponto de entrada
3 C ID do formulário
4 N Número da Linha da FWFORMGRID
Retorno:
Requiere un retorno lógico.
...
MODELCOMMITTTS
...
Despúes de la grabación total del modelo y dentro de la transacción.
Parámetros Recibidos:
1 O Objeto del formulario del modelo, conforme el caso.
2 C ID del local de ejecución del punto de entrada.
3 C ID del formulario.
Retorno:
No espera retorno.
...
MODELCOMMITNTTS
...
Después de la grabación total del modelo y fuera de la transacción.
Parámetros recibidos:
1 O Objeto del formulario o del modelo, conforme el caso.
2 C ID del local de ejecución del punto de entrada.
3 C ID del formulario.
Retorno:
No espera retorno
...
FORMCOMMITTTSPRE
...
Antes da gravação da tabela do formulário.
Parâmetros Recebidos:
1 O Objeto del formulario o del modelo, conforme el caso.
2 C ID del local de ejecución del punto de entrada.
3 C ID del formulario.
4 L Si es .T. indica nuevo registro (inclusión) si es .F. registro ya existente (Alteración/ Exclusión)
Retorno:
No espera retorno.
...
FORMCOMMITTTSPOS
...
Después de la grabación de la tabla del formulario.
Parâmetros Recebidos:
1 O Objeto del formulario o del modelo, conforme el caso.
2 C ID del local de ejecución del punto de entrada.
3 C ID del formulario.
4 L Si es .T. indica nuevo registro (inclusión) si es .F. registro ya existente (Alteración/ Exclusión)
Retorno:
No espera retorno.
...
MODELCANCEL
...
El botón de cancelar.
Parámetros recibidos:
1 O Objeto del formulario o del modelo, conforme el caso.
2 C ID del local de ejecución del punto de entrada.
3 C ID del formulario.
Retorno:
No espera retorno.
...
BUTTONBAR
...
Incluir botones en el ControlBar.
Para crear los botones se debe retornar un array bidimensional con la siguiente estructura de cada ítem:
1 C Titulo para el botón.
2 C Nombre del Bitmap para mostrar.
3 B CodeBlock a ser ejecutado.
4 C ToolTip (Opcional)
Parâmetros Recebidos:
1 O Objeto del formulario o del modelo, conforme el caso.
2 C ID del local de ejecución del punto de entrada.
3 C ID del formulario.
Retorno:
Array con la estructura pre-definida.
Puntos de Entrada en MVC (Funcionales)
...
title | Importante |
---|
Al utilizar uno de los siguientes Puntos de Entrada MVC, y al tener configurado un mensaje personalizado de error (HELP), este mensaje del Punto de Entrada será priorizado sobre el mensaje de error o información (HELP) descrito desde el módulo configurador (SIGACFG). En caso de no contar con ninguno de los dos mensajes (HELP), se mostrará vacío el detalle del mensaje. Este comportamiento también se aplica al título del mensaje configurado en el HELP.
Ejemplos:
...
Punto de entrada MVC
...
Descripcíon
...
FORMPRE
Punto de entrada con la finalidad de habilitar o deshabilitar el campo Cobrador (FJT_COBRAD) de la tabla Encabezado de Recibo (FJT) y no permitir su edición.
...
Nombre | Tipo | Descripción |
---|---|---|
PARAMIXB[1] | O | Objeto del formulario o del modelo, conforme el caso |
PARAMIXB[2] | C | ID del local de ejecución del punto de entrada. |
PARAMIXB[3] | C | ID del formulario. |
PARAMIXB[4] | C | Acción del FWFORMGRID. |
PARAMIXB[5] | C | ID del Campo. |
...
Nombre | Tipo | Descripción |
---|---|---|
lRet | L | Si el valor retornado es .T. el campo Cobrador (FJT_COBRAD) sera habilitado, de lo contrario sera inhabilitado. |
Bloco de código | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
#include "Protheus.ch"
#include "FWMVCDEF.CH"
User Function FINA887()
Local aParam := PARAMIXB
Local oModel := aParam[1]
Local cIdPonto := aParam[2]
Local cIdModel := ""
Local lRet := .T.
If aParam <> NIL
If cIdPonto == 'FORMPRE'
cIdModel := aParam[3]
cAccion := aParam[4]
cIdCamp := aParam[5]
CONOUT('FORMPRE')
IF cIdModel == 'FJT_MASTER' .AND. cAccion == 'CANSETVALUE' .AND. cIdCamp ==
'FJT_COBRAD' //Deshabilitamos en la accion de CANSETVALUE el campo retornando un .F.
lRet := .F.
ENDIF
EndIf
EndIf
Return lRet |
...
FORMLINEPOS
...
Punto de entrada para VALIDAR los datos de retenciones en la rutina de cobros diversos.
Parámetros recibidos: |
| ||||||||||||
Respuesta: |
|
Bloco de código | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
#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
|
...
MODELCOMMITNTTS
...
Punto de entrada para MÓDIFICAR los datos de retenciones en la rutina de cobros diversos.
Parámetros recibidos: |
| ||||||||||||
Respuesta: | N/A |
Bloco de código | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
#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.
Local nSEL := 1
If aParam <> NIL
oModel := aParam[1]
cIdPonto := aParam[2]
cIdModel := aParam[3]
If cIdPonto == 'MODELCOMMITNTTS'
CONOUT('MODELCOMMITNTTS')
IF cIdModel == 'FINA887'
For nSEL:= 1 To oModelSEL:Length()
If oModelSEL:GetValue("EL_TIPODOC",nSEL) $ 'RI|RB|RG|RM|RS|RR'
SEL->(DbSetOrder(8))
SEL->(DbGotop())
SEL->(MsSeek(xFilial("SEL")+oModelSEL:GetValue("EL_SERIE",nSEL)+oModelSEL:GetValue("EL_RECIBO",nSEL)))
RecLock("SEL",.F.)
If SEL->(ColumnPos('EL_EJEMPLO')) > 0
SEL->EL_EJEMPLO := "MODIFI"
ENDIF
MsUnlock()
nSEL := oModelSEL:Length()
ENDIF
NEXT
ENDIF
CONOUT('BUTTONBAR')
EndIf
EndIf
Return lRet
|
Campos de validaciones para el punto de entrada
Generales:
- EL_LOJA = Tienda del cliente.
- EL_LOJORIG = Tienda original.
- EL_TIPO = Tipo de título.
- EL_BCOCHQ = Banco Cheque.
México:
- EL_CTABEN = Cuenta beneficiario.
- EL_CTAORD = Cuenta ord.
- EL_FORPGO = Forma de pago.
- EL_HRPAGO = Hora de pago.
Perú:
- EL_TIPODOC = Tipo de documento.
Sentencia When
General:
- EL_PREFIXO = Prefijo.
- EL_TPCRED = Tipo de crédito.
Argentina/Colombia
- EL_TPCRED = Tipo de crédito.
Chile/Perú
- EL_DIACTB = Cod. diario.
México
- EL_CEPCAD = Cadena CEP.
- EL_CEPCER = Certificado CEP.
- EL_CEPSEL = Sello CEP.
- EL_CEPTIP = Tipo CEP.
- EL_CTABEN = Cuenta beneficiario.
- EL_CTAORD = Cuenta ord.
- EL_RFCEMI = RFC Emisor.
- EL_TPCRED = Tipo de crédito.
Ejemplo de punto de entrada:
...
|
2.2 Campos de validaciones para el punto de entrada
Generales:
- EL_LOJA = Tienda del cliente.
- EL_LOJORIG = Tienda original.
- EL_TIPO = Tipo de título.
- EL_BCOCHQ = Banco Cheque.
México:
- EL_CTABEN = Cuenta beneficiario.
- EL_CTAORD = Cuenta ord.
- EL_FORPGO = Forma de pago.
- EL_HRPAGO = Hora de pago.
Perú:
- EL_TIPODOC = Tipo de documento.
Sentencia When
General:
- EL_PREFIXO = Prefijo.
- EL_TPCRED = Tipo de crédito.
Argentina/Colombia
- EL_TPCRED = Tipo de crédito.
Chile/Perú
- EL_DIACTB = Cod. diario.
México
- EL_CEPCAD = Cadena CEP.
- EL_CEPCER = Certificado CEP.
- EL_CEPSEL = Sello CEP.
- EL_CEPTIP = Tipo CEP.
- EL_CTABEN = Cuenta beneficiario.
- EL_CTAORD = Cuenta ord.
- EL_RFCEMI = RFC Emisor.
- EL_TPCRED = Tipo de crédito.
Ejemplo:
User Function FINA887() |
2.3 Ejemplo de "Carga Masiva" de formas de pago (SEL) utilizando PE BUTTONBAR:
FINA887.PRX
User Function FINA887() |
FN998CARGA.PRW
#Include "protheus.ch" //Importación de formas de pago a partir de archivo .CSV al modelo SEL_DETAIL (formas de pago de la tabla SEL) User Function FN998CARGA(oModel) //Nota: En Totvs Recibo (FINA998), las variables aHeaders y aCols nao existen como private, por lo que la función gdFieldPos no se puede utilizar Local aArea := getArea() //Inicializa la variable aCols con valores por defecto a partir del tamaño de aHeader If MsgYesNo("Deseja importar arquivo .csv ?", "Cheques") //Actualización al modelo SEL_DETAIL en grid If !Empty(aCols[nC][nPosNro]) // Se verifica que el campo EL_NUMERO no este vacío para identificar que el registro de aCols es válido restArea(aArea) RETURN **************************************************** Local nLinha := 0 //Se lee el archivo .csv If Len(cFOpen) > 0 .And. FILE(cFOpen) nNumReg := FT_FLastRec() If nLinha+1 == nNumReg aDados := Separa(FT_FReadln(),';') cValor := StrTran(Substr(aDados[7],2),".","") aBcoCh := fRetBcoCh(aDados[2]) aCols[nLinha][nPosObs] := aDados[2] Return ************************************ Local cQuery := "", aRet := {"","",""} cQuery := "SELECT FJN_COD, FJN_AGENCI, FJN_POSTAL, FJO_NOME " If Select("QRY") <> 0 dbUseArea(.T.,"TOPCONN",TcGenQry(,,cQuery),"QRY",.T.,.T.) If !QRY->(Eof()) QRY->(dbCloseArea()) Return(aRet) /*/{Protheus.doc} addLine Aadd(aCols, Array(Len(aHeader))) |
Nota:
El cIdPonto igual a BUTTONBAR adiciona un nuevo botón en la pantalla de carga de formas de pago y detona una función, para esto es necesario habilitar el parámetro MV_FPADVPL igual a .T. para utilizar la pantalla ADVPL de carga de formas de pago. Para más información véase el siguiente documento: https://tdn.totvs.com/x/kBNdMg