Árvore de páginas

Versões comparadas

Chave

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

...

F998NRDCOB

Nombre del Punto de EntradaDescripción
Âncora
F998BRFLT
F998BRFLT

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 filtrosen el programa TOTVS Recibos.

Parámetros recibidos:

Nombre TipoDescripción
PARAMIXB[1]CExpresión SQL estándar para la consulta (SELECT) que contará los registros a seleccionar.
PARAMIXB[2]CExpresión SQL estándar con filtros por campo que se utilizada para filtrar (WHERE) los registros a seleccionar.
PARAMIXB[3]C

Este punto de entrada se ejecuta en dos partes, este parámetro indica el tipo de consulta (expresión SQL para el Query a la base de datos) que se debe retornar:

"complete" - El punto de entrada debe retornar una expresión de consulta (Query) completa, la cual se utiliza para determinar el total de registros que se visualizaran.

"where" - El punto de entrada solo complementa la expresión de condiciones (WHERE) para la selección de registros a visualizar.

PARAMIXB[4]O

Contiene el Objeto Json con las respuestas del motor de búsqueda que se colocaron en buscar Recibo.

Aviso
titleImportante

Este parámetro solo es necesario cuando se tiene configurado el grupo de preguntas FINA998BUS.


Retorno: 

NombreTipoDescripción
queryNewCRetorna la expresión SQL de la consulta a realizar de acuerdo al tipo de Query; "complete" o "where".

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

Bloco de código
languagejava
firstline1
titleEjemplo
linenumberstrue
collapsetrue
#Include 'Protheus.ch'

User Function F998BRFLT
   Local querySelect := Paramixb[1]
   Local queryWhere := Paramixb[2]
   Local queryOption := Paramixb[3]
   Local whereNew := " AND SEL.EL_RECIBO >= '0040' "
   Local queryNew := ""

   IF queryOption == 'complete'
         queryNew := " SELECT " + querySelect + " AS totalreceipts FROM " + RetSqlName("SEL")
         queryNew += +" SEL WHERE " + queryWhere + whereNew
   ELSEIF queryOption == 'where'
         queryNew := queryWhere + whereNew
   ENDIF

RETURN queryNew
Bloco de código
language
anchor
java
F998BRMCOL
firstline
F998BRMCOL
1
F998BRMCOL
title
Tiene
Ejemplo con 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:

NombreTipoDescripción
PARAMIXB[1]CSerie del recibo
PARAMIXB[2]CNúmero del recibo
PARAMIXB[3]CCliente

Retorno: Arreglo de configuraciones para agregar a la lista de campos que se pueden visualizar en la lista de recibos.

NombreTipoDescripción
aRet[1]CTítulo de la columna que se desea agregar en la lista de recibos.
aRet[2]CValor del campo, de cualquier tabla en la DB vinculada a los recibos de cobro.
aRet[3]LMostrar marca de seleccionado en la lista de campos a visualizar: .T. = Sí, .F. = No.
aRet[4]C

Nombre para asignar al campo a visualizar, debe ser con estilo de escritura "camelCase".

Comienza con minúscula, puede tener mayúsculas intermedias, no permite espacios ni signos especiales.

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

Bloco de código
languagejava
firstline1
titleEjemplo
linenumberstrue
collapsetrue
#Include 'Protheus.ch'

User Function F998BRMCOL
   Local aCampos := {}
   Local cSerie := Paramixb[1]
   Local cReceipt := Paramixb[2]
   Local cClient := Paramixb[3]
   Local cQueryFields As Character
   Local cQueryWhere As Character
   Local cAlias As Character
   Local cQuery As Character
   Local nCont As Numeric
   Local aAux As Array
   cAlias := GetNextAlias()

   //En el arreglo de aCampos se agregan los campos a visualizar
   //aCampos[1] -> Campo se desea visualizar
   //aCampos[2] -> Título que se desea asignar a este campo para que lo visualice el cliente, ya sea fijo o que se obtenga de la SX3
   //aCampos[3] -> .T. si se desea que este marcado por default y .F. si se desea que no este marcado por default en el GRID
   //aCampos[4] -> Nombre de variable par ael campo, con formato camelCase; ejemplo "valorUnit", en vez de Valor Unitario
   aCampos := {{"FJT_VERSAO","VERSION",.T.,"version"},{"FJT_DTDIGI",GetSx3Cache("FJT_DTDIGI","X3_TITULO"),.T.,"dataDigit"}}

   //Se forman las condicionales de la consulta
   cQueryWhere := " FJT_FILIAL = '"+xFilial("FJT")+"' AND FJT_SERIE = '"+cSerie+"' AND FJT_RECIBO = '"+cReceipt+"' AND FJT_CLIENT = '"+cClient+"' "

   //Se estructura la parte de los campos a obtener
   cQueryFields := " SELECT "
   For nCont := 1 to LEN(aCampos)
      cQueryFields += " "+aCampos[nCont][1]+" "
      If nCont != LEN(aCampos)
         cQueryFields += ","
      EndIf
   Next nCont

   //Se estructura todo el query
   cQuery := cQueryFields + " FROM " + RetSqlName("FJT") + " WHERE " + cQueryWhere

   cQuery := ChangeQuery(cQuery)
   MPSysOpenQuery(cQuery, cAlias)

   aAux := {}

   //Se asignan los campos deseados al arreglo a retornar
   WHILE (cAlias)->(!EOF())
      AADD( aAux,{aCampos[1][2],(cAlias)->FJT_VERSAO,aCampos[1][3],aCampos[1][4]})
      AADD( aAux,{aCampos[2][2],(cAlias)->FJT_DTDIGI,aCampos[2][3],aCampos[2][4]})
      (cAlias)->(DbSkip())
   END

Return aAux
Âncora
F998NRDCOBF998NRDCOB
Grupo de preguntas FINA998BUS
linenumberstrue
collapsetrue
User Function F998BRFLT()

Local querySelect := Paramixb[1]
Local queryWhere  := Paramixb[2]
Local queryOption := Paramixb[3]
Local jPergunte   := Paramixb[4] // Objeto Json de Preguntas
Local whereNew := " "
Local queryNew := ""

      IF  jPergunte['form']['mv_par11'] != ""
        whereNew :=" AND EL_NATUREZ = '"+jPergunte['form']['mv_par11']+"' "
      EndIF

      IF queryOption == 'complete'
            queryNew := " SELECT " + querySelect + " AS totalreceipts FROM " + RetSqlName("SEL")
            queryNew += +" SEL WHERE " + queryWhere + whereNew
      ELSEIF queryOption == 'where'
            queryNew := queryWhere + whereNew
      ENDIF

RETURN queryNew

Âncora
F887ROT
F887ROT

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.

Nombre

Tipo

Descripción

Obligatorio

aRet[1]CTítulo de la nueva opción que se habilitara en Buscar Recibos.Si
aRet[2]CFunción de usuario que será ejecutada al dar clic en la nueva opciónSi
Aviso
titleImportante
  • El Punto de Entrada F887ROT proporciona una herramienta para que los usuarios puedan realizar acciones en el recibo seleccionado. Sin embargo, la decisión de realizar estas acciones son responsabilidad del cliente.
  • El sistema no válida ni verifica la información alterada o consultada por el usuario. Por lo tanto, el cliente debe asegurarse de que los cambios realizados en el recibo sean correctos y no generen problemas posteriores.
  • Al ejecutar la función de usuario, los datos del recibo seleccionado vienen en memoria, por lo cual el cliente puede hacer uso de ellas. Ejemplo:
    • FJT->FJT_CLIENT == '000001' 
  • La función de usuario retornada en el PE F887ROT debe estar compilada en RPO, de lo contrario marcara error.


Más información: PE F887ROT Agregar opción personalizada en lista opciones en Buscar Recibo

Bloco de código
titleEjemplo del PE
linenumberstrue
collapsetrue
#Include 'Protheus.ch'
 
//Punto de entrada F887ROT
User Function F887ROT
 
    Local aData As Array
 
    aData := {"CANCEL FORZA","EjemploPE"} //{Nombre de la nueva opción, Funcion a ejecutarse}
 
Return aData
 
//Funcion de usuario que será ejecutada al dar clic en la nueva opción
User Function EjemploPE()
    LOCAL aRet := {}
 
    IF FJT->FJT_CLIENT == '000001'  //Cancelara recibos que pertenezcan a este cliente
        RecLock("FJT",.F.)
        Replace FJT_CANCEL With "1"
        MsUnLock()
        aRet:={.T.,"PE EJECUTADO CORRECTAMENTE"} //{.T., Mensaje personalizado}
    ELSE
        aRet:={.F.,"ESTE CLIENTE NO PERMITE MODIFICACIONES"} //{.F., Mensaje personalizado}
    ENDIF
Return aRet

Âncora
F998BRMCOL
F998BRMCOL

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:

Tiene el objetivo de llenar el campo del Cobrador cuando se seleccione el código del cliente.

Parámetros recibidos: 

NombreTipoDescripción
PARAMIXB[1]CCliente seleccionado.Serie del recibo
PARAMIXB[2]CTienda del cliente seleccionado.Número del recibo
PARAMIXB[3]CCliente

Retorno: Arreglo de configuraciones para agregar a la lista de campos que se pueden visualizar en la lista de recibos.Retorno: 

NombreTipoDescripción
cCobradoraRet[1]CRetorna el Cobrador que será colocado en el box del cobrador.Título de la columna que se desea agregar en la lista de recibos.
aRet[2]CValor del campo, de cualquier tabla en la DB vinculada a los recibos de cobro.
aRet[3]LMostrar marca de seleccionado en la lista de campos a visualizar: .T. = Sí, .F. = No.
aRet[4]C

Nombre para asignar al campo a visualizar, debe ser con estilo de escritura "camelCase".

Comienza con minúscula, puede tener mayúsculas intermedias, no permite espacios ni signos especiales.

Este punto de entrada sustituye al "F088NP2KEste 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 ReciboF998BRMCOL Incluir columnas a visualizar en el GRID de buscar recibos

Bloco de código
languagejava
firstline1
titleEjemplo
linenumberstrue
collapsetrue
#Include 'Protheus.ch'

User Function F998NRDCOB()
Local cCobradorF998BRMCOL
   Local aCampos := ""
Local cClient{}
   Local cSerie := Paramixb[1]
Local   Local cLojacReceipt := Paramixb[2]

dbselectarea("SAR")
("SAR")->(dbGoTop())

   Local  cClient While ("SAR")->(!eof())
        If  xFilial("SAR")== SAR->AR_FILIAL .AND. cClient == SAR->AR_CODCLI .AND. cLoja == SAR->AR_LOJCLI
             cCobrador :=AR_CODCOBR
        EndIf
        ("SAR")->(dbskip())
    EndDo

("SAR")->(dbCloseArea())

Return cCobrador
ÂncoraF998NRMCOLF998NRMCOL

F998NRMCOL

:= Paramixb[3]
   Local cQueryFields As Character
   Local cQueryWhere As Character
   Local cAlias As Character
   Local cQuery As Character
   Local nCont As Numeric
   Local aAux As Array
   cAlias := GetNextAlias()

   //En el arreglo de aCampos se agregan los campos a visualizar
   //aCampos[1] -> Campo se desea visualizar
   //aCampos[2] -> Título que se desea asignar a este campo para que lo visualice el cliente, ya sea fijo o que se obtenga de la SX3
   //aCampos[3] -> .T. si se desea que este marcado por default y .F. si se desea que no este marcado por default en el GRID
   //aCampos[4] -> Nombre de variable par ael campo, con formato camelCase; ejemplo "valorUnit", en vez de Valor Unitario
   aCampos := {{"FJT_VERSAO","VERSION",.T.,"version"},{"FJT_DTDIGI",GetSx3Cache("FJT_DTDIGI","X3_TITULO"),.T.,"dataDigit"}}

   //Se forman las condicionales de la consulta
   cQueryWhere := " FJT_FILIAL = '"+xFilial("FJT")+"' AND FJT_SERIE = '"+cSerie+"' AND FJT_RECIBO = '"+cReceipt+"' AND FJT_CLIENT = '"+cClient+"' "

   //Se estructura la parte de los campos a obtener
   cQueryFields := " SELECT "
   For nCont := 1 to LEN(aCampos)
      cQueryFields += " "+aCampos[nCont][1]+" "
      If nCont != LEN(aCampos)
         cQueryFields += ","
      EndIf
   Next nCont

   //Se estructura todo el query
   cQuery := cQueryFields + " FROM " + RetSqlName("FJT") + " WHERE " + cQueryWhere

   cQuery := ChangeQuery(cQuery)
   MPSysOpenQuery(cQuery, cAlias)

   aAux := {}

   //Se asignan los campos deseados al arreglo a retornar
   WHILE (cAlias)->(!EOF())
      AADD( aAux,{aCampos[1][2],(cAlias)->FJT_VERSAO,aCampos[1][3],aCampos[1][4]})
      AADD( aAux,{aCampos[2][2],(cAlias)->FJT_DTDIGI,aCampos[2][3],aCampos[2][4]})
      (cAlias)->(DbSkip())
   END

Return aAux

Âncora
F998NRDCOB
F998NRDCOB

F998NRDCOB



Tiene el objetivo de llenar el campo del Cobrador cuando se seleccione el código del cliente.

Parámetros recibidos: 

NombreTipoDescripción
PARAMIXB[1]CCliente seleccionado.
PARAMIXB[2]CTienda del cliente seleccionado.

Retorno: 

NombreTipoDescripción
cCobradorCRetorna el Cobrador que será colocado en el box del cobrador.

Este punto de entrada sustituye al "F087ACOB" de la rutina

Tiene el objetivo de agregar más columnas a visualizar en los títulos financieros en la pantalla de Nuevo Recibo.

Parámetros recibidos: 

  •     N/A

Retorno: Arreglo de configuraciones para agregar a la lista de campos que se pueden visualizar en la lista de títulos.

NombreTipoDescripción
aRet[1]CCampo a visualizar en la lista de títulos.
aRet[2]CTítulo de la columna que se desea agregar en la lista de títulos.
aRet[3]LMostrar marca de seleccionado en la lista de campos a visualizar: .T. = Sí, .F. = No.

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

Bloco de código
languagejava
firstline1
titleEjemplo
linenumberstrue
collapsetrue
User Function F998NRMCOL()

Local aCampos := {}

	Aadd(aCampos, { "E1_DTACRED","Fecha cred",.T.})

	Aadd(aCampos, { "E1_TXMOEDA","TX moneda",.T.}

Return aCampos
ÂncoraF998NRIOFLTF998NRIOFLT

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: 

NombreTipoDescripción
PARAMIXB[1]C

Expresión SQL correspondiente al filtro estándar (Where) de selección (Query) de documentos.

Retorno: 

NombreTipoDescripción
cQueryCExpresión SQL del filtro de selección de documentos. Debe retornar la expresión recibida, complementada con los criterios específicos.

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

Bloco de código
languagejava
firstline1
titleEjemplo
linenumberstrue
collapsetrue
User Function F998NRIOFLT()
Local cQuery  := Paramixb[1]

	cQuery += " AND E1_VALOR < 2000 "

Return cQuery
ÂncoraF998FLOTITF998FLOTIT

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: 

  • N/A

Retorno:

Nombre TipoDescripción
cTiposCCadena que contiene los tipos de títulos adicionales, separados por diagonal ("/").

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

Bloco de código
languagejava
firstline1
titleEjemplo
linenumberstrue
collapsetrue
#INCLUDE "Totvs.ch"
 
User Function F998FLOTIT()
    Local cTipos := ""

    cTipos += "/CC/CN"
 
Return cTipos
ÂncoraF998NRG3F998NRG3

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:

  • N/A

Retorno:

  • N/A

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 DT PE F998NRDCOB Llenar el campo del Cobrador cuando seleccione el código del cliente en Nuevo Recibo

Bloco de código
languagejava
firstline1
titleEjemplo
linenumberstrue
collapsetrue
#Include 'Protheus.ch'

User Function F998NRG3F998NRDCOB()

 Local  cCobrador If:= msgyesno("¿Desea ejecutar el punto de entrada F998NRG3? ", "Confirmar")""
Local cClient := Paramixb[1]
Local cLoja := Paramixb[2]

dbselectarea("SAR")
("SAR")->(dbGoTop())

    While ("SAR")->(!eof())
        If FINR300 xFilial()
    EndIf

Return
ÂncoraF998GSE1F998GSE1

F998GSE1

"SAR")== SAR->AR_FILIAL .AND. cClient == SAR->AR_CODCLI .AND. cLoja == SAR->AR_LOJCLI
             cCobrador :=AR_CODCOBR
        EndIf
        ("SAR")->(dbskip())
    EndDo

("SAR")->(dbCloseArea())

Return cCobrador

Âncora
F998NRMCOL
F998NRMCOL

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: 

  •     N/A

Retorno: Arreglo de configuraciones para agregar a la lista de campos que se pueden visualizar en la lista de títulos.

NombreTipoDescripción
aRet[1]CCampo a visualizar en la lista de títulos.
aRet[2]CTítulo de la columna que se desea agregar en la lista de títulos.
aRet[3]LMostrar marca de seleccionado en la lista de campos a visualizar en la pantalla de Nuevo Recibo: .T. = Sí, .F. = No.
aRet[4]LMostrar marca de seleccionado en la lista de campos a visualizar en la pantalla de Otros títulos: .T. = Sí, .F. = No.

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

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:

  • N/A

Retorno:

  • N/A

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

Bloco de código
languagejava
firstline1
titleEjemplo
linenumberstrue
collapsetrue
#Include 'Protheus.ch'

User Function F998GSE1()

    IF SEL→(ColumnPos("E1_EJEMPLO"))

        SE1->E1_EJEMPLO := .T.

    ENDIF

Return Nil
ÂncoraF998MAILF998MAIL

F998MAIL

Tiene el objetivo de actualizar el asunto y el cuerpo del Mail.

Parámetros recibidos:

Nombre Tipo Descripción
PARAMIXB[1]CRepresenta la Serie del Recibo
PARAMIXB[2]CRepresenta el Número del Recibo

Retorno:

Nombre Tipo DescripciónObligatorio

aMail[1]

CRepresenta el asunto del corrreo Si

aMail[2]

CRepresenta el cuerpo del correo Si

Más información:  DT PE F998MAIL Modificar el Asunto y Cuerpo al enviar el Recibo por Mail TOTVS Recibo

Bloco de código
languagejava
firstline1
titleEjemplo
linenumberstrue
collapsetrue
#Include 'Protheus.ch'

User Function F998MAILUser Function F998NRMCOL()

    Local cserie  aCampos := Paramixb[1]
    Local cRecibo  := Paramixb[2]
    Local cAsunto := "" 
    Local cCuerpo := ""
    Local aMail := {}

    cAsunto := "XML y PDF"

    cCuerpo += "Hola usuario"
    cCuerpo += "<br><br>"
    cCuerpo += "Anexo los archivos XML y PDF del recibo número "+ " <b>" + cserie + "-" + cRecibo+"</b>"
    cCuerpo +=  "<br><br>"
    cCuerpo += "Saludos"
    cCuerpo += "<br><br>"
    cCuerpo += "Empresa SA de CV"

    AADD (aMail,cAsunto)
    AADD (aMail,cCuerpo)


Return aMail
ÂncoraF998IMPRECF998IMPREC

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:

NombreTipoDescripción
PARAMIXB[1,1]CNombre del archivo XML ya generado con extensión.
PARAMIXB[1,2]CVacío 
PARAMIXB[1,3]CVacío
PARAMIXB[1,4]AArray que contiene la información del recibo (Títulos a cobrar y/o compensar)
[1] Serie título
[2] Número de documento título
[3] Fecha del recibo
[4] Monto del pago
[5] Monto compensación
[6] Cliente
[7] Tienda
PARAMIXB[1,5]C

Numero del recibo.

PARAMIXB[1,6]CSerie del recibo.
{}

	Aadd(aCampos, { "E1_DTACRED","Fecha cred",.T.,.T.})

	Aadd(aCampos, { "E1_TXMOEDA","TX moneda",.T.,.T.})

Return aCampos

Âncora
F998NRIOFLT
F998NRIOFLT

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: 

NombreTipoDescripción
PARAMIXB[1]C

Expresión SQL correspondiente al filtro estándar (Where) de selección (Query) de documentos.

Retorno: 

NombreTipoDescripción
cQueryCExpresión SQL del filtro de selección de documentos. Debe retornar la expresión recibida, complementada con los criterios específicos.

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

Bloco de código
languagejava
firstline1
titleEjemplo
linenumberstrue
collapsetrue
User Function F998NRIOFLT()
Local cQuery  := Paramixb[1]

	cQuery += " AND E1_VALOR < 2000 "

Return cQuery

Âncora
F998FLOTIT
F998FLOTIT

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: 

  • N/A

Retorno:

Nombre TipoDescripción
cTiposCCadena que contiene los tipos de títulos adicionales, separados por diagonal ("/").

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 reciboMás información:  DT PE F998IMPREC Formato de impresión para los recibos TOTVS Recibo

Bloco de código
languagejava
firstline1
titleEjemplo
linenumberstrue
collapsetrue
#Include#INCLUDE 'Protheus"Totvs.ch'"
 
User Function F998IMPRECF998FLOTIT()

     LocalLocal aReciboscTipos := PARAMIXB""

     LocalcTipos cDir := &(SuperGetmv( "MV_CFDRECP" , .F. , "GetSrvProfString('startpath','')+'\cfd\recpagos\'" ))
     Local cName := Replace(aRecibos[1][1], ".xml", ".pdf" )
     Local cRuta := "C:\Ambientes\2210\+= "/CC/CN"
 
Return cTipos

Âncora
F998NRG3
F998NRG3

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:

  • N/A

Retorno:

  • N/A

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

Bloco de código
languagejava
firstline1
titleEjemplo
linenumberstrue
collapsetrue
#Include 'Protheus.ch'

User Function F998NRG3()ARG\protheus_data"+cDir


    // Función para Crear PDF personalizado
    // U_CreaPDF(cName,cDir)

    ShellExecute("Open", cName+".pdf"),"",cRuta,1)   //Función para abrir archivo PDF — Esta función ocupa la ruta completa del archivo.
    
Return

IMPORTANTE

If msgyesno("¿Desea ejecutar el punto de entrada F998NRG3? ", "Confirmar")
        FINR300()
    EndIf

Return

Âncora
F998GSE1
F998GSE1

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:

  • N/A

Retorno:

  • N/A

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

Bloco de código
languagejava
firstline1
titleEjemplo
linenumberstrue
collapsetrue
#Include 'Protheus.ch'

User Function F998GSE1()

    IF SEL→(ColumnPos("E1_EJEMPLO"))

        SE1->E1_EJEMPLO := .T.

    ENDIF

Return Nil

Âncora
F998MAIL
F998MAIL

F998MAIL

Tiene el objetivo de actualizar el asunto y el cuerpo del Mail.

Parámetros recibidos:

Nombre Tipo Descripción
PARAMIXB[1]CRepresenta la Serie del Recibo
PARAMIXB[2]CRepresenta el Número del Recibo

Retorno:

Nombre Tipo DescripciónObligatorio

aMail[1]

CRepresenta el asunto del corrreo Si

aMail[2]

CRepresenta el cuerpo del correo Si

Más información:  DT PE F998MAIL Modificar el Asunto y Cuerpo al enviar el Recibo por Mail TOTVS Recibo

Bloco de código
languagejava
firstline1
titleEjemplo
linenumberstrue
collapsetrue
  • El parámetro recibido PARAMIXB[1,1], contiene el nombre del archivo XML ya generado con extensión, este debe de ser usado para generar el nombre del recibo en formato PDF.
    Considerar que ambos archivos XML y PDF deben ubicarse en la misma ruta y tener el mismo nombre.
  • La ruta para el guardado de los Recibos se configura para México en el parámetro MV_CFDRECP de lo contrario se debe de guardar en la ruta ""\system\cfd\recpagos\",
    la cual debe ser referenciada de la siguiente forma: "GetSrvProfString('startpath','')+'\cfd\recpagos\'".
    En esta ruta se validará la existencia del archivo, si el archivo no se encuentra en esta ruta el sistema alertará que no se encontro el archivo PDF.
  • El PE F998IMPREC debe de abrir el Archivo PDF creado previamente.
ÂncoraFINCMTCFINCMTC

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:

  1. Banco (EF_BANCO).
  2. Agencia (EF_AGENCIA).
  3. Código Postal (EF_POSTAL).
  4. Cheque (EF_NUM.
  5. Cuenta (EF_CONTA).
  6. DV Cuenta

Parámetros recibidos:

NombreTipoDescripción
PARAMIXB[1,1]CContiene la cadena que se introduce en la ventana de la Lectora de Cheques

Ejemplo := 0<B240002400240123456789ASDFGHJK

Informações
titleInformación

Cuando se usa una lectora de cheques se agrega un cero y un signo menor que (<) por lo que en caso de informar los valores manualmente, deberá asegurarse de que estos caracteres también sean indicados al inicio antes de la información del cheque.

0<B240002400240123456789ASDFGHJK

Más información:  DT PE FINCMTC Personalización de los datos ingresados en la lectora de cheques TOTVS Recibo

Bloco de código
languagejava
firstline1
titleEjemplo
linenumberstrue
collapsetrue
#Include 'Protheus.ch'

User Function FINCMTCF998MAIL()

    Local cCmc7cserie   := Paramixb[1]
    Local nTamBcocRecibo  := 0 As Numeric 
Local nTamAgeParamixb[2]
    Local cAsunto := 0 As Numeric
"" 
    Local nTamCtacCuerpo := 0 As Numeric
""
    Local nTamChqaMail := 0 As Numeric
Local nTamCPo{}

    cAsunto := 0"XML Asy NumericPDF"

Local  aCmc7Tc  cCuerpo :+= {}  As Array

	If nTamBco == 0"Hola usuario"
    cCuerpo += "<br><br>"
   	 	nTamBcocCuerpo :+= TamSX3("EF_BANCO")[1]
	Endif
	If nTamAge == 0
   	 	nTamAge := TamSX3("EF_AGENCIA")[1]
	Endif
	If nTamCta == 0
   	 	nTamCta := TamSX3("EF_CONTA")[1]
	Endif
	If nTamChq == 0
   		nTamChq := TamSX3("EF_NUM")[1]
	Endif
	If nTamCPo == 0
    	nTamCPo := TamSX3("EF_POSTAL")[1]
	Endif
    //Se agrega al arreglo a retornar una subcadena de la cadena original, configurando la posición inicial de cada campo y su longitud
    //AADD(Array al que se le agregaran los valores, SUBSTR(cadena de la lectora de cheques, numero editable que indica donde empieza la cadena y por ultimo el tamaño del campo))
    Aadd( aCmc7Tc, SubStr(cCmc7,  2,  nTamBco))     //Banco
    Aadd( aCmc7Tc, SubStr(cCmc7,  5,  nTamAge))     //Agencia
    Aadd( aCmc7Tc, SubStr(cCmc7, 10,  nTamCPo))     //Codigo Postal
    Aadd( aCmc7Tc, SubStr(cCmc7, 14,  nTamChq))     //Cheque
    Aadd( aCmc7Tc, SubStr(cCmc7, 20,  nTamCta))     //Cuenta
    Aadd( aCmc7Tc,      SubStr(cCmc7, 30,  1) )        //DV Cuenta

Return aCmc7Tc

IMPORTANTE: Este punto de entrada es opcional de lo contrario la Lectora de cheques tomara las siguientes longitudes 

CampoLongitud
Banco3
Agencia3
Codigo Postal4
Cheque8
Cuenta10
DV Cuenta1
ÂncoraFINLRCHQFINLRCHQ

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:

  • N/A

Más información:  695246_MMI-5510_DT_Punto_de_Entrada_FINLRCHQ_ARG

Bloco de código
languagejava
firstline1
titleEjemplo
linenumberstrue
collapsetrue
#Include 'Protheus.ch'

User Function FINLRCHQ()
Local cChq := ""

	cChq := "0<00123456789abcdefghijklmnopqrs"

Return cChq
ÂncoraF998NATVAZF998NATVAZ

F998NATVAZ

Aviso
titleImportante

Este PE se encuentra deshabilitado, para personalizar la obligatoriedad del campo Modalidad en el encabezado del recibo deberá configurarla directamente en el campo FJT_NATURE a través del configurador en el habilitando el campo Obligat. Usuario.

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:

  • N/A

Más información: DT PE F998NATVAZ Validación obligatoriedad de campo Modalidad Totvs Recibos PER

Bloco de código
languagejava
firstline1
titleEjemplo
linenumberstrue
collapsetrue
#INCLUDE "Totvs.ch"
 
User Function F998NATVAZ()
    Local lRequired

    lRequired := .F. // Retorna .T. si el campo Modalidad se requiere como obligatorio , retorna .F. si el campo Modalidad no es obligatorio.
     
Return lRequired
ÂncoraF998VISFPF998VISFP

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

  1. Crear la función de usuario F998VISFP para agregar columnas e información que se desea visualizar en el GRID de las formas de pago al momento de visualizar el recibo a detalle desde la opción de "Buscar recibo".
    - La rutina efectuará las validaciones correspondientes y debe retornar un objeto con las columnas y los valores determinados por el usuario, para agregar al GRID.
  2. Dentro del módulo Financiero ejecutar la rutina TOTVS Recibo (Actualizaciones | Cuentas por cobrar).
  3. En la sección Buscar recibo, especifique los criterios de consulta.
  4. Aplicar el filtro y posicionarse en el recibo a visualizar.
  5. Al momento de dar clic en "Visualizar" el punto de entrada F998VISFP será ejecutado.
  6. Haga clic en el ícono con la imagen del engrane que se encuentra a la derecha de las formas de pago.
  7. En la lista de campos a visualizar serán agregados los definidos por el usuario a través del punto de entrada.
  8. Seleccione y deseleccione los campos requeridos, a continuación, confirme.
  9. Se visualizarán las columnas e información de acuerdo a los campos seleccionados.
Parámetros recibidos:

No aplica

Respuesta:

Arreglo de configuraciones para agregar a la lista de campos que se pueden visualizar en la lista de recibos.

NombreTipoDescripciónObligatorio
aRet[1]CNombre del campo a buscar. Ejemplo (EL_TIPODOC)Si
aRet[2]CNombre que se desea colocar a la columna y este sea visible en el GRID, El nombre puede ser fijo u obtener por medio de la SX3.Si
aRet[3]LMostrar marca de seleccionado en la lista de campos a visualizar:  .T. = Sí,  .F. = No.Si
aRet[4]C

Nombre para asignar al campo a visualizar, debe ser con estilo de escritura "camelCase".

Comienza con minúscula, puede tener mayúsculas intermedias, no permite espacios ni signos especiales.

Si
Bloco de código
languagejava
firstline1
titleEjemplo
linenumberstrue
collapsetrue
#Include 'Protheus.ch'

User Function F998VISFP 
    Local aCampos   := {} 


    aCampos := {{"EL_TPCRED",GetSx3Cache("EL_TPCRED","X3_TITULO"),.F.,"tipoCred"},{"EL_TERCEIR",'Aprobado',.T.,"terCeir"}}

Return aCampos
ÂncoraF998NROKF998NROK

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

  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 modulo 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 titulo 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 mandara un mensaje. 
Parámetros recibidos:

Nombre

Tipo

Descripció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:

Nombre

Tipo

Descripció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.
Bloco de código
languagejava
firstline1
titleEjemplo
linenumberstrue
collapsetrue
#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
ÂncoraF998NRG2F998NRG2

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.

  1. Crear la función de usuario F998NRG2, en la cual se puedan ejecutar acciones posteriores a grabar el recibo de cobro.

  2. Dentro del módulo Financiero, ejecutar la rutina TOTVS Recibo (Actualizaciones | Cuentas por cobrar | TOTVS Recibo).
  3. Dentro del aplicativo de TOTVS Recibo, ir a Nuevo Recibo.
  4. Llenar el encabezado del recibo.
  5. Aplicar los filtros del encabezado.
  6. Seleccionar un Título por Cobrar y agregar una Forma de Pago (opcional).
  7. Dar clic en Confirmar para el guardado del recibo.
  8. Comprobar las acciones ejecutadas por el punto de entrada posteriores a grabar el recibo de cobro.

Descripción

Actualizaciones

Punto de entrada:F998NRG2Parámetros recibidos:

N/A

Respuesta:N/A
Bloco de código
languagejava
firstline1
titleEjemplo
linenumberstrue
collapsetrue
#Include 'Protheus.ch'

User Function F998NRG2()

   If MsgYesNo("¿Desea ejecutar el punto de entrada F998NRG2? ", "Confirmar")
        Finr087()
    EndIf
Return
ÂncoraF998NRG1F998NRG1

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.

  1. Crear la función de usuario F998NRG1 por medio del cual realicen acciones antes de generar asientos contables al grabar un recibo de cobro.

  2. Dentro del módulo Financiero, ejecutar la rutina TOTVS Recibo (Actualizaciones | Cuentas por cobrar | TOTVS Recibo).
  3. Dentro del aplicativo de TOTVS Recibo, ir a Nuevo Recibo.
  4. Llenar el encabezado del recibo.
  5. Aplicar los filtros del encabezado.
  6. Seleccionar un Título por Cobrar y agregar una Forma de Pago (opcional).
  7. Dar clic en Confirmar para grabar el recibo.
  8. Revisar que la ejecución del punto de entrada haya realizado las acciones esperadas.
Parámetros recibidos:

N/A

Respuesta:N/A Bloco de código
languagejava
firstline1
titleEjemplo
linenumberstrue
collapsetrue
#Include 'Protheus.ch' User Function F998NRG1()     If MsgYesNo("¿Desea ejecutar el punto de entrada F998NRG1? ", "Confirmar")         FINR270()     EndIf Return
"Anexo los archivos XML y PDF del recibo número "+ " <b>" + cserie + "-" + cRecibo+"</b>"
    cCuerpo +=  "<br><br>"
    cCuerpo += "Saludos"
    cCuerpo += "<br><br>"
    cCuerpo += "Empresa SA de CV"

    AADD (aMail,cAsunto)
    AADD (aMail,cCuerpo)


Return aMail

Âncora
F998IMPREC
F998IMPREC

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:

NombreTipoDescripción
PARAMIXB[1,1]CNombre del archivo XML ya generado con extensión.
PARAMIXB[1,2]CVacío 
PARAMIXB[1,3]CVacío
PARAMIXB[1,4]AArray que contiene la información del recibo (Títulos a cobrar y/o compensar)
[1] Serie título
[2] Número de documento título
[3] Fecha del recibo
[4] Monto del pago
[5] Monto compensación
[6] Cliente
[7] Tienda
PARAMIXB[1,5]C

Numero del recibo.

PARAMIXB[1,6]CSerie del recibo.

Más información:  DT PE F998IMPREC Formato de impresión para los recibos TOTVS Recibo

Bloco de código
languagejava
firstline1
titleEjemplo
linenumberstrue
collapsetrue
#Include 'Protheus.ch'

User Function F998IMPREC()

     Local aRecibos := PARAMIXB
     Local cDir := &(SuperGetmv( "MV_CFDRECP" , .F. , "GetSrvProfString('startpath','')+'\cfd\recpagos\'" ))
     Local cName := Replace(aRecibos[1][1], ".xml", ".pdf" )
     Local cRuta := "C:\Ambientes\2210\ARG\protheus_data"+cDir


    // Función para Crear PDF personalizado
    // U_CreaPDF(cName,cDir)

    ShellExecute("Open", cName+".pdf"),"",cRuta,1)   //Función para abrir archivo PDF — Esta función ocupa la ruta completa del archivo.
    
Return

IMPORTANTE

  • El parámetro recibido PARAMIXB[1,1], contiene el nombre del archivo XML ya generado con extensión, este debe de ser usado para generar el nombre del recibo en formato PDF.
    Considerar que ambos archivos XML y PDF deben ubicarse en la misma ruta y tener el mismo nombre.
  • La ruta para el guardado de los Recibos se configura para México en el parámetro MV_CFDRECP de lo contrario se debe de guardar en la ruta ""\system\cfd\recpagos\",
    la cual debe ser referenciada de la siguiente forma: "GetSrvProfString('startpath','')+'\cfd\recpagos\'".
    En esta ruta se validará la existencia del archivo, si el archivo no se encuentra en esta ruta el sistema alertará que no se encontro el archivo PDF.
  • El PE F998IMPREC debe de abrir el Archivo PDF creado previamente.

Âncora
FINCMTC
FINCMTC

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:

  1. Banco (EF_BANCO).
  2. Agencia (EF_AGENCIA).
  3. Código Postal (EF_POSTAL).
  4. Cheque (EF_NUM.
  5. Cuenta (EF_CONTA).
  6. DV Cuenta

Parámetros recibidos:

NombreTipoDescripción
PARAMIXB[1,1]CContiene la cadena que se introduce en la ventana de la Lectora de Cheques

Ejemplo := 0<B240002400240123456789ASDFGHJK

Informações
titleInformación

Cuando se usa una lectora de cheques se agrega un cero y un signo menor que (<) por lo que en caso de informar los valores manualmente, deberá asegurarse de que estos caracteres también sean indicados al inicio antes de la información del cheque.

0<B240002400240123456789ASDFGHJK

Más información:  DT PE FINCMTC Personalización de los datos ingresados en la lectora de cheques TOTVS Recibo

Bloco de código
languagejava
firstline1
titleEjemplo
linenumberstrue
collapsetrue
#Include 'Protheus.ch'

User Function FINCMTC()
Local cCmc7  := Paramixb[1]
Local nTamBco := 0 As Numeric 
Local nTamAge := 0 As Numeric
Local nTamCta := 0 As Numeric
Local nTamChq := 0 As Numeric
Local nTamCPo := 0 As Numeric
Local aCmc7Tc := {}  As Array

	If nTamBco == 0
   	 	nTamBco := TamSX3("EF_BANCO")[1]
	Endif
	If nTamAge == 0
   	 	nTamAge := TamSX3("EF_AGENCIA")[1]
	Endif
	If nTamCta == 0
   	 	nTamCta := TamSX3("EF_CONTA")[1]
	Endif
	If nTamChq == 0
   		nTamChq := TamSX3("EF_NUM")[1]
	Endif
	If nTamCPo == 0
    	nTamCPo := TamSX3("EF_POSTAL")[1]
	Endif
    //Se agrega al arreglo a retornar una subcadena de la cadena original, configurando la posición inicial de cada campo y su longitud
    //AADD(Array al que se le agregaran los valores, SUBSTR(cadena de la lectora de cheques, numero editable que indica donde empieza la cadena y por ultimo el tamaño del campo))
    Aadd( aCmc7Tc, SubStr(cCmc7,  2,  nTamBco))     //Banco
    Aadd( aCmc7Tc, SubStr(cCmc7,  5,  nTamAge))     //Agencia
    Aadd( aCmc7Tc, SubStr(cCmc7, 10,  nTamCPo))     //Codigo Postal
    Aadd( aCmc7Tc, SubStr(cCmc7, 14,  nTamChq))     //Cheque
    Aadd( aCmc7Tc, SubStr(cCmc7, 20,  nTamCta))     //Cuenta
    Aadd( aCmc7Tc,      SubStr(cCmc7, 30,  1) )        //DV Cuenta

Return aCmc7Tc

IMPORTANTE: Este punto de entrada es opcional de lo contrario la Lectora de cheques tomara las siguientes longitudes 

CampoLongitud
Banco3
Agencia3
Codigo Postal4
Cheque8
Cuenta10
DV Cuenta1

Âncora
FINLRCHQ
FINLRCHQ

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:

  • N/A

Más información:  695246_MMI-5510_DT_Punto_de_Entrada_FINLRCHQ_ARG

Bloco de código
languagejava
firstline1
titleEjemplo
linenumberstrue
collapsetrue
#Include 'Protheus.ch'

User Function FINLRCHQ()
Local cChq := ""

	cChq := "0<00123456789abcdefghijklmnopqrs"

Return cChq

Âncora
F998NATVAZ
F998NATVAZ

F998NATVAZ

Aviso
titleImportante

Este PE se encuentra deshabilitado, para personalizar la obligatoriedad del campo Modalidad en el encabezado del recibo deberá configurarla directamente en el campo FJT_NATURE a través del configurador en el habilitando el campo Obligat. Usuario.

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:

  • N/A

Más información: DT PE F998NATVAZ Validación obligatoriedad de campo Modalidad Totvs Recibos PER

Bloco de código
languagejava
firstline1
titleEjemplo
linenumberstrue
collapsetrue
#INCLUDE "Totvs.ch"
 
User Function F998NATVAZ()
    Local lRequired

    lRequired := .F. // Retorna .T. si el campo Modalidad se requiere como obligatorio , retorna .F. si el campo Modalidad no es obligatorio.
     
Return lRequired

Âncora
F998VISFP
F998VISFP

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

  1. Crear la función de usuario F998VISFP para agregar columnas e información que se desea visualizar en el GRID de las formas de pago al momento de visualizar el recibo a detalle desde la opción de "Buscar recibo".
    - La rutina efectuará las validaciones correspondientes y debe retornar un objeto con las columnas y los valores determinados por el usuario, para agregar al GRID.
  2. Dentro del módulo Financiero ejecutar la rutina TOTVS Recibo (Actualizaciones | Cuentas por cobrar).
  3. En la sección Buscar recibo, especifique los criterios de consulta.
  4. Aplicar el filtro y posicionarse en el recibo a visualizar.
  5. Al momento de dar clic en "Visualizar" el punto de entrada F998VISFP será ejecutado.
  6. Haga clic en el ícono con la imagen del engrane que se encuentra a la derecha de las formas de pago.
  7. En la lista de campos a visualizar serán agregados los definidos por el usuario a través del punto de entrada.
  8. Seleccione y deseleccione los campos requeridos, a continuación, confirme.
  9. Se visualizarán las columnas e información de acuerdo a los campos seleccionados.
Parámetros recibidos:

No aplica

Respuesta:

Arreglo de configuraciones para agregar a la lista de campos que se pueden visualizar en la lista de recibos.

NombreTipoDescripciónObligatorio
aRet[1]CNombre del campo a buscar. Ejemplo (EL_TIPODOC)Si
aRet[2]CNombre que se desea colocar a la columna y este sea visible en el GRID, El nombre puede ser fijo u obtener por medio de la SX3.Si
aRet[3]LMostrar marca de seleccionado en la lista de campos a visualizar:  .T. = Sí,  .F. = No.Si
aRet[4]C

Nombre para asignar al campo a visualizar, debe ser con estilo de escritura "camelCase".

Comienza con minúscula, puede tener mayúsculas intermedias, no permite espacios ni signos especiales.

Si
Bloco de código
languagejava
firstline1
titleEjemplo
linenumberstrue
collapsetrue
#Include 'Protheus.ch'

User Function F998VISFP 
    Local aCampos   := {} 


    aCampos := {{"EL_TPCRED",GetSx3Cache("EL_TPCRED","X3_TITULO"),.F.,"tipoCred"},{"EL_TERCEIR",'Aprobado',.T.,"terCeir"}}

Return aCampos

Âncora
F998NROK
F998NROK

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

  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 modulo 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 titulo 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 mandara un mensaje. 
Parámetros recibidos:

Nombre

Tipo

Descripció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:

Nombre

Tipo

Descripció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.
Bloco de código
languagejava
firstline1
titleEjemplo
linenumberstrue
collapsetrue
#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

Âncora
F998NRG2
F998NRG2

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.

  1. Crear la función de usuario F998NRG2, en la cual se puedan ejecutar acciones posteriores a grabar el recibo de cobro.

  2. Dentro del módulo Financiero, ejecutar la rutina TOTVS Recibo (Actualizaciones | Cuentas por cobrar | TOTVS Recibo).
  3. Dentro del aplicativo de TOTVS Recibo, ir a Nuevo Recibo.
  4. Llenar el encabezado del recibo.
  5. Aplicar los filtros del encabezado.
  6. Seleccionar un Título por Cobrar y agregar una Forma de Pago (opcional).
  7. Dar clic en Confirmar para el guardado del recibo.
  8. Comprobar las acciones ejecutadas por el punto de entrada posteriores a grabar el recibo de cobro.

Descripción

Actualizaciones

Punto de entrada:F998NRG2
Parámetros recibidos:

Nombre

Tipo

Descripción

PARAMIXB[1]JsonObjeto Json con toda la información guardada en el recibo

El objeto Json PARAMIXB[1] Contiene los siguientes objetos:

Expandir
titleObjeto Encabezado
Nombre en JsonEquivalenciaDescripción
encabezado['serie']FJT_SERIESerie del recibo
encabezado['recibo']FJT_RECIBONumero de recibo
encabezado['emissa']FJT_EMISSAEmisión
encabezado['nature']FJT_NATURECobrador
encabezado['client']FJT_CLIENTCliente
encabezado['loja']FJT_LOJATienda
encabezado['cobrad']FJT_COBRADCobrador
encabezado['recprov']FJT_RECPRVRecibo Provisorio
Expandir
titleObjeto Titulos
Nombre en JsonEquivalenciaDescripción
titulos[nX]['branch']E1_FILIALFilial
titulos[nX]['billnumber']E1_NUMERONumero de Titulo
titulos[nX]['type']E1_TIPOTipo de Titulo
titulos[nX]['actualduedt']E1_VENCREAVencimiento Real
titulos[nX]['currency']E1_MOEDAMoneda
titulos[nX]['unit']E1_LOJATienda
titulos[nX]['installment']E1_PARCELACuota
titulos[nX]['billvalue']E1_VALORValor
titulos[nX]['customer']E1_CLIENTECliente
titulos[nX]['class']E1_NATUREZModalidad
titulos[nX]['custname']A1_NOMENombre del cliente
titulos[nX]['balance']E1_SALDOSaldo del titulo
titulos[nX]['prefix']E1_PREFIXOPrefijo del titulo
titulos[nX]['issuedt']E1_EMISSAOFecha de emisión
titulos[nX]['writeoffne']E1_VALLIQValor neto de la baja    
titulos[nX]['discount']E1_DESCONTDescuento
titulos[nX]['interest']E1_JUROSIntereses
titulos[nX]['fine']E1_MULTAMultas
titulos[nX]['series']E1_SERIESerie 
titulos[nX]['origin']E1_ORIGEMRuta origen del titulo
titulos[nX]['recno']R_E_C_N_O
titulos[nX]['client']E1_CLIENTECliente
titulos[nX]['originbranch']E1_FILORIGFilial Original
titulos[nX]['paycondf2']F2_CONDCondicion SF2
titulos[nX]['paycondf1']F1_CONDCondición SF1
titulos[nX]['serie2f2']F2_SERIE2Serie SF2
titulos[nX]['serie2f1']F1_SERIE2Serie 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
titleObjeto monedas
Nombre en JsonDescripció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
titleObjeto formas de pago
Nombre en JsonDescripción
formaspago[nX]['property']Nombre de la propiedad (Trae el mismo nombre registrado en la SX3)
formaspago[nX]['value']Valor de la propiedad
Expandir
titleObjeto parametros
Nombre en JsonDescripción
params[nX]['mv_par01']Valor del parametro 01

params[nX]['mv_par01']

.

.

.

params[nX]['mv_parxx']


Respuesta:N/A
Bloco de código
languagejava
firstline1
titleEjemplo
linenumberstrue
collapsetrue
#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.

  1. Crear la función de usuario F998NRG1 por medio del cual realicen acciones antes de generar asientos contables al grabar un recibo de cobro.

  2. Dentro del módulo Financiero, ejecutar la rutina TOTVS Recibo (Actualizaciones | Cuentas por cobrar | TOTVS Recibo).
  3. Dentro del aplicativo de TOTVS Recibo, ir a Nuevo Recibo.
  4. Llenar el encabezado del recibo.
  5. Aplicar los filtros del encabezado.
  6. Seleccionar un Título por Cobrar y agregar una Forma de Pago (opcional).
  7. Dar clic en Confirmar para grabar el recibo.
  8. 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
languagejava
firstline1
titleEjemplo
linenumberstrue
collapsetrue
#Include 'Protheus.ch'

User Function F998NRG1()      

MsgYesNo("ATENCIÓN" , "Se manda a llamar la funcion de usuario") 

Return
Âncora
F998VALBX 
F998VALBX 

F998VALBX 

Se crea el punto de entrada F998VALBX en 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.

  1. Crear la 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.
    1. Dentro del módulo Financiero ejecutar la rutina TOTVS Recibo (Actualizaciones | Cuentas por cobrar).
    2. Dentro del aplicativo de TOTVS Recibo, ir a Nuevo Recibo, llenar los campos del encabezado para localizar un titulo.
    3. Editar el cobro de un titulo.
    4. Verificar si se visualiza el nuevo campo configurado en la función F998VALBX.

    5. 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.
    6. Verificar si se guarda correctamente el valor ingresado en el campo definido por el cliente.

      Parámetros recibidos:
      NombreTipoDescripció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
      titleObjeto Titulo
      Nombre en JsonEquivalenciaDescripción
      ['recalculate´]N/ASi es True (.T.) realizará los calculos, si es False (.F.) realizara la vista
      titulos[nX]['branch']E1_FILIALFilial
      titulos[nX]['billnumber']E1_NUMERONumero de Título
      titulos[nX]['type']E1_TIPOTipo de Título
      titulos[nX]['actualduedt']E1_VENCREAVencimiento Real
      titulos[nX]['currency']E1_MOEDAMoneda
      titulos[nX]['unit']E1_LOJATienda
      titulos[nX]['installment']E1_PARCELACuota
      titulos[nX]['billvalue']E1_VALORValor
      titulos[nX]['customer']E1_CLIENTECliente
      titulos[nX]['class']E1_NATUREZModalidad
      titulos[nX]['custname']A1_NOMENombre del cliente
      titulos[nX]['balance']E1_SALDOSaldo del Título
      titulos[nX]['prefix']E1_PREFIXOPrefijo del Título
      titulos[nX]['issuedt']E1_EMISSAOFecha de emisión
      titulos[nX]['writeoffne']E1_VALLIQValor neto de la baja    
      titulos[nX]['discount']E1_DESCONTDescuento
      titulos[nX]['interest']E1_JUROSIntereses
      titulos[nX]['fine']E1_MULTAMultas
      titulos[nX]['series']E1_SERIESerie 
      titulos[nX]['origin']E1_ORIGEMRuta origen del Título
      titulos[nX]['recno']R_E_C_N_O
      titulos[nX]['client']E1_CLIENTECliente
      titulos[nX]['originbranch']E1_FILORIGFilial Original
      titulos[nX]['paycondf2']F2_CONDCondicion SF2
      titulos[nX]['paycondf1']F1_CONDCondición SF1
      titulos[nX]['serie2f2']F2_SERIE2Serie SF2
      titulos[nX]['serie2f1']F1_SERIE2Serie 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
      titleObjeto
      Nombre en JsonDescripció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
      titleObjeto Encabezado
      Nombre en JsonEquivalenciaDescripción
      encabezado['serie']FJT_SERIESerie del recibo
      encabezado['recibo']FJT_RECIBONumero de recibo
      encabezado['emissa']FJT_EMISSAEmisión
      encabezado['nature']FJT_NATURECobrador
      encabezado['client']FJT_CLIENTCliente
      encabezado['loja']FJT_LOJATienda
      encabezado['cobrad']FJT_COBRADCobrador
      encabezado['recprov']FJT_RECPRVRecibo Provisorio
      Expandir
      titleObjeto Titulos
      Nombre en JsonEquivalenciaDescripción
      titulos[nX]['branch']E1_FILIALFilial
      titulos[nX]['billnumber']E1_NUMERONumero de Titulo
      titulos[nX]['type']E1_TIPOTipo de Titulo
      titulos[nX]['actualduedt']E1_VENCREAVencimiento Real
      titulos[nX]['currency']E1_MOEDAMoneda
      titulos[nX]['unit']E1_LOJATienda
      titulos[nX]['installment']E1_PARCELACuota
      titulos[nX]['billvalue']E1_VALORValor
      titulos[nX]['customer']E1_CLIENTECliente
      titulos[nX]['class']E1_NATUREZModalidad
      titulos[nX]['custname']A1_NOMENombre del cliente
      titulos[nX]['balance']E1_SALDOSaldo del titulo
      titulos[nX]['prefix']E1_PREFIXOPrefijo del titulo
      titulos[nX]['issuedt']E1_EMISSAOFecha de emisión
      titulos[nX]['writeoffne']E1_VALLIQValor neto de la baja    
      titulos[nX]['discount']E1_DESCONTDescuento
      titulos[nX]['interest']E1_JUROSIntereses
      titulos[nX]['fine']E1_MULTAMultas
      titulos[nX]['series']E1_SERIESerie 
      titulos[nX]['origin']E1_ORIGEMRuta origen del titulo
      titulos[nX]['recno']R_E_C_N_O
      titulos[nX]['client']E1_CLIENTECliente
      titulos[nX]['originbranch']E1_FILORIGFilial Original
      titulos[nX]['paycondf2']F2_CONDCondicion SF2
      titulos[nX]['paycondf1']F1_CONDCondición SF1
      titulos[nX]['serie2f2']F2_SERIE2Serie SF2
      titulos[nX]['serie2f1']F1_SERIE2Serie 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
      titleObjeto monedas
      Nombre en JsonDescripció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
      titleObjeto formas de pago
      Nombre en JsonDescripción
      formaspago[nX]['property']Nombre de la propiedad (Trae el mismo nombre registrado en la SX3)
      formaspago[nX]['value']Valor de la propiedad
      Expandir
      titleObjeto parametros
      Nombre en JsonDescripción
      params[nX]['mv_par01']Valor del parametro 01

      params[nX]['mv_par01']

      .

      .

      .

      params[nX]['mv_parxx']


      PARAMIXB[2]LTrue (.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
      titleObjeto de respuesta

      Nombre

      Tipo

      Descripción

      Obligatorio

      oJson['label']L

      Nombre del campo nuevo a mostrar.

      Si
      oJson['disabledDiscount']LDeshabilitar o habilitar el campo de descuento.Si
      oJson['disabledInterest']LDeshabilitar o habilitar el campo de Intereses.Si
      oJson['disabledFine']LDeshabilitar o habilitar el campo de Multa.Si
      oJson['disabledInput']LDeshabilitar o habilitar el input nuevoSi
      oJson['maxDiscount']NSe informa el descuento permitido debe tener un rango mayor a 0 y menor a 100Si
      oJson['warningMaxDiscount']C Mensaje personalizado por si se excede el descuento permitido, si no se informa el front mandará uno por defaultNo

      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
      titleObjeto de respuesta
      Nombre en JsonDescripció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
      languageactionscript3
      titleEjemplo de PE F998VALBX  y sus funciones de usuario
      linenumberstrue
      collapsetrue
      #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.

  1. 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.
  2. Dentro del módulo Financiero ejecutar la rutina TOTVS Recibo (Actualizaciones | Cuentas por cobrar).
  3. 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.
  4. Se mostrará la lista de los recibos.
  5. Seleccionar el recibo deseado y al dar clic en el botón de Anular recibo se ejecutará el punto de entrada F998BRANU.
  6. La función de usuario efectúa las validaciones personalizadas y retorna una respuesta que indica si procede o no la anulación.
  7. 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:

Nombre

Tipo

Descripción

PARAMIXB[1]CSerie del recibo
PARAMIXB[2]CNúmero del recibo
Respuesta:

Nombre

Tipo

Descripción

Obligatorio

aRet[1]LRetorna .T. si procede el Anulado/Borrado o .F. si no se permiteSi
aRet[2]CMensaje de la causa de rechazo de anulación.Si
Bloco de código
languagejava
firstline1
titleEjemplo
linenumberstrue
collapsetrue
#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.

  1. 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.
  2. Dentro del módulo Financiero ejecutar la rutina TOTVS Recibo (Actualizaciones | Cuentas por cobrar).
  3. 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.
  4. Se mostrará la lista de los recibos.
  5. 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".
  6. La función de usuario efectúa las validaciones personalizadas y retorna una respuesta que indica si procede o no el borrado.
  7. 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:

Nombre

Tipo

Descripción

PARAMIXB[1]CSerie del recibo
PARAMIXB[2]CNúmero del recibo
Respuesta:

Nombre

Tipo

Descripción

Obligatorio

aRet[1]LRetorna .T. si procede el Anulado/Borrado o .F. si no se permiteSi
aRet[2]CMensaje de la causa de rechazo de anulación.Si



Bloco de código
languagejava
titleEjemplo
collapsetrue
#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


...

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.

...

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)

Aviso
titleImportante

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:

Image Added Image Added

Punto  de entrada MVC

Descripcíon

Âncora
F998BRFLT
F998BRFLT

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.

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]C Acción del FWFORMGRID.
PARAMIXB[5]CID del Campo.
Respuesta:

Nombre

Tipo

Descripción

lRetLSi el valor retornado es .T. el campo Cobrador (FJT_COBRAD) sera habilitado, de lo contrario sera inhabilitado.
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 cIdPonto  := ""aParam[2]
    Local cIdModel  := ""
    Local lRet      := .T.

    If aParam <> NIL
        If cIdPonto == 'FORMPRE'
            oModel      := aParam[1]
            cIdPonto    := aParam[2]
            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

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

...

Ejemplo de punto de entrada:

    If         oModel              oModelFJT           oModelSEL           cIdPonto            cIdModel            If             If                 Help            EndIf
             
            nLineas  
            For nX                 If    
                    lRet      := .F.
                EndIf
            Next nX
        ElseIf cIdPonto ==         ElseIf         ElseIf         EndIf    EndIf
User Function FINA887()
Local aParam    := PARAMIXB
Local oModel    := Nil
Local oModelFJT := Nil
Local oModelSEL := Nil
Local cIdPonto  := ""
Local cIdModel  := ""
Local nLineas   := 0
Local nX        := 0
Local lRet      := .T.
 
 
    If aParam <> NIL
        oModel      := aParam[1]
        oModelFJT   := oModel:GetModel("FJT_MASTER") //Datos del encabezado
        oModelSEL   := oModel:GetModel("SEL_DETAIL") //Datos correspondientes a los registros de la tabla SEL
        cIdPonto    := aParam[2]
        cIdModel    := aParam[3]
 
        If cIdPonto == 'MODELPOS'
            If Len(AllTrim(oModelFJT:GetValue("FJT_RECIBO"))) < 12
                Help(Nil,Nil,'Help',Nil,'Tamaño del número de recibo',1,0,Nil,Nil,Nil,Nil,Nil,{"Debe introducir un numero menor a 12"})                      
lRet:= .F.
            EndIf
            nLineas := oModelSEL:Length()
            For nX := 1 To nLineas
                If Empty(oModelSEL:GetValue("EL_NUMERO",nX)) .AND. lRet
                   lRet := .F.
                 
 Help(Nil,Nil,'Help',Nil,'Numero no informado',1,0,Nil,Nil,Nil,Nil,Nil,{"Debe introducir un numero"})
 
                EndIf
            Next nX
        ElseIf cIdPonto == 'MODELCOMMITTTS'
            //'Llamada después de la grabación total del modelo y dentro de la transacción (MODELCOMMITTTS).'
        ElseIf cIdPonto == 'MODELCOMMITNTTS'
            //'Llamada después de la grabación total del modelo y fuera de la transacción (MODELCOMMITNTTS).'
        ElseIf cIdPonto == 'FORMCOMMITTTSPOS'
            //'Llamada después de la grabación de la tabla del formulario (FORMCOMMITTTSPOS).
        EndIf
    EndIf
 
Return lRet