Árvore de páginas


01. DATOS GENERALES

Producto:

TOTVS Backoffice

Línea de producto:

Línea Protheus

Segmento:

Backoffice

Módulo:

SIGAFIN - Financiero

Función:
RutinaNombre TécnicoFecha
SAVE-RECEIPT.SERVICE.TLPPServicio para el guardado de los recibos
F887FIN.PRWReglas de negocio para todos los países
País:Todos (Mercado Internacional)
Ticket:N/A
Requisito/Story/Issue (informe el requisito vinculado):DMINA-14964 y DMINA-26519


02. DESCRIPCIÓN

Crear un punto de entrada  con el objetivo de agregar validaciones y mensajes de confirmación o error antes de guardar, de manera que si no cumple las condiciones del punto de entrada no permita el guardado del recibo y  este pueda ser modificado.


03. INFORMACIÓN ADICIONAL

Se crea el punto de entrada F998NROK en la rutina SAVE-RECEIPT.SERVICE.TLPP - 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 mandará un mensaje como alerta).

Se crea el punto de entrada F998NROK en la rutina F887FIN.PRW - Reglas de negocio para todos los países, 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 mandará un mensaje como alerta y una solución).

  1. Crear la función de usuario F998NROK para agregar validaciones y mensajes de confirmación o error.
    - La rutina efectuará las validaciones correspondientes y debe retornar un arreglo con un valor booleano y un mensaje de confirmación o error.
  2. Dentro del módulo Financiero ejecutar la rutina TOTVS Recibo (Actualizaciones | Cuentas por cobrar).
  3. En la sección Nuevo Recibo, llenar los campos necesarios para el encabezado del recibo.
  4. Seleccionar un título a cobrar o compensar.
  5. Agregar una forma de pago (Opcional).
  6. Al momento de dar clic en confirmar se ejecutará el punto de entrada F998NROK .
  7. Si las validaciones fueron las correctas procederá con el guardado del recibo, de lo contrario no permitirá el guardado y mandará un mensaje de error y/o solución. 



DescripciónActualizaciones
Punto de entrada:F998NROK
Nombre del programa fuente:SAVE-RECEIPT.SERVICE.TLPP
Parámetros recibidos:
NombreTipoDescripción
PARAMIXB[1]JsonObjeto Json que contiene la información de los métodos de pago que contiene el recibo a guardar.
PARAMIXB[2]JsonObjeto Json que contiene la información de los títulos que contiene el recibo a guardar.
PARAMIXB[3]JsonObjeto Json que contiene la información del encabezado del recibo a guardar.
Respuesta:
NombreTipoDescripción
aRet[1][1]BSi el valor obtenido en este campo es .T. se permitirá el guardado del recibo, de lo contrario no se permitirá el guardado del recibo.
aRet[1][2]CMensaje que se visualizara en el aplicativo en caso de que el campo aRet[1][1] sea Falso.


Ejemplo:

Ejemplo de código
#INCLUDE "Totvs.ch"
 
/*/{Protheus.doc} F998NROK
Punto de entrada que permite agregar validaciones al recibo antes del guardado
Si retorna un .T. procedera con el guardado del recibo
Si retorna un .F. no continuara con el guardado del recibo
/*/
USER FUNCTION F998NROK()
    Local jFormasPago   := Paramixb[1] //Json que contiene todas las formas de pago del recibo
    Local jTitulos      := Paramixb[2] //Json que contiene todos los titulos que contiene el recibo
    Local jEncabezado   := Paramixb[3] //Json que contiene los datos que conforman el encabezado del recibo
    Local lRet     := .T. As Logical
    Local aRet     := {}  As Array
    Local nCont    As Numeric
    Local cMensaje  := "" As Character
    Local nTipoDoc  As Numeric
    
    //Ejemplo de validaciones en las formas de pago que contiene el recibo
    FOR nCont := 1 TO LEN(jFormasPago)
        nTipoDoc  := AScan(jFormasPago[nCont],{|x|x['property'] == "tipodoc"})
        IF jFormasPago[nCont][nTipoDoc]['value'] == "EF"
            lRet := .F.
            cMensaje := "No se permite guardar recibos con forma de pago tipo EF-Efectivo"
            AADD(aRet,{lRet,cMensaje})
        ENDIF
    NEXT

    /*
    //Ejemplo de validaciones en los titulos que contiene el recibo
    FOR nCont := 1 TO LEN(jTitulos)
        IF jTitulos[nCont]['series'] == "A"
            lRet := .F.
            cMensaje := "No se permite guardar un recibo con un titulo de serie A"
            AADD(aRet,{lRet,cMensaje})
        ENDIF
    NEXT
    */

    /*
    //Ejemplo de validaciones sobre el encabezado del recibo
    IF ALLTRIM(jEncabezado['modalidad']) == "COBRO"
        lRet := .F.
        cMensaje := "No se permite guardar un recibo con una modalidad dde tipo COBRO"
        AADD(aRet,{lRet,cMensaje})
    ENDIF
    */

RETURN aRet
DescripciónActualizaciones
Punto de entrada:F998NROK
Nombre del programa fuente:F887FIN.PRW
Parámetros recibidos:
NombreTipoDescripción
PARAMIXB[1]Object

Objeto con toda la información  del recibo:

Se puede acceder a la información del recibo de acuerdo a los siguientes sub-objetos:

  • FJT_MASTER (Datos generales del recibo e información informada en el encabezado del recibo).
  • SEL_DETAIL (Información de las formas de pago).
  • SE1_DETAIL (Información de los títulos a cobrar o compensar).
  • MOE_DETAIL (Información de las monedas registradas en el sistema)
  • ADM_DETAIL (Información de la administradora financiera, disponible solo para ciertos países)
Respuesta:
NombreTipoDescripción
aRet[1][1]BSi el valor obtenido en este campo es .T. se permitirá el guardado del recibo, de lo contrario no se permitirá el guardado del recibo.
aRet[1][2]CMensaje de error o informativo que se visualizara en el aplicativo en caso de que el campo aRet[1][1] sea Falso.
aRet[1][3]CMensaje de solución (OPCIONAL) que se visualizara en el aplicativo en caso de que el campo aRet[1][1] sea Falso.


Ejemplo:

Ejemplo de código
#INCLUDE "Totvs.ch"
 
/*/{Protheus.doc} F998NROK
Punto de entrada que permite agregar validaciones al recibo antes del guardado
Si retorna un .T. procedera con el guardado del recibo
Si retorna un .F. no continuara con el guardado del recibo
/*/
USER FUNCTION F998NROK()
    Local oModel        := Paramixb[1] //Json que contiene todas las formas de pago del recibo
    Local oModelFJT		:= oModel:GetModel("FJT_MASTER")
    Local oModelSEL		:= oModel:GetModel("SEL_DETAIL")
    Local oModelSE1		:= oModel:GetModel("SE1_DETAIL")
    Local oModelMOE 	:= oModel:GetModel('MOE_DETAIL')
    Local lRet     := .T. As Logical
    Local aRet     := {}  As Array
    Local nCont    As Numeric
    Local cMensaje  := "" As Character
    Local cSolucion := "" As Character
    
    //Ejemplo de validaciones en las formas de pago que contiene el recibo
    FOR nCont := 1 TO oModelSEL:Length()
        IF oModelSEL:GetValue('EL_TIPO',nCont) == "EF "
            lRet := .F.
            cMensaje := "No se permite guardar recibos con forma de pago tipo EF-Efectivo"
            cSolucion := "Texto de solución"
            AADD(aRet,{lRet,cMensaje,cSolucion})
            RETURN aRet
        ENDIF
    NEXT

    FOR nCont := 1 TO oModelSE1:Length()
        IF oModelSE1:GetValue('CHECK',nCont) == .T. .AND. oModelSE1:GetValue('E1_TIPO',nCont) == "NCC"
            lRet := .F.
            cMensaje := "No se permite guardar recibos que contengan titulos NCC"
            cSolucion := "Texto de solución"
            AADD(aRet,{lRet,cMensaje,cSolucion})
            RETURN aRet
        ENDIF
    NEXT
RETURN aRet

¡IMPORTANTE!

La presente solución aplica para versión 12.1.2210 o superior, siempre y cuando se tengan las rutinas actualizadas a la fecha indicada en la sección 01 - Datos Generales.

04. ASUNTOS RELACIONADOS