Índice
1. Puntos de Entrada en fuente
...
Nombre del Punto de Entrada | Descripción |
---|
| Tiene el objetivo de que el usuario pueda agregar más filtros a la consulta (Query) de selección de recibos al momento de dar clic en "Aplicar filtros" en el programa TOTVS Recibos. Parámetros recibidos: Nombre | Tipo | Descripción |
---|
PARAMIXB[1] | C | Expresión SQL estándar para la consulta (SELECT) que contará los registros a seleccionar. | PARAMIXB[2] | C | Expresió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 |
---|
| Este parámetro solo es necesario cuando se tiene configurado el grupo de preguntas FINA998BUS. |
|
Retorno: Nombre | Tipo | Descripción |
---|
queryNew | C | Retorna 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 |
---|
language | java |
---|
firstline | 1 |
---|
title | Ejemplo |
---|
linenumbers | true |
---|
collapse | true |
---|
| #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 | anchorF998BRMCOLF998BRMCOLF998BRMCOL title | Ejemplo con el Grupo de preguntas FINA998BUS |
---|
linenumbers | true |
---|
collapse | true |
---|
| 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 |
|
| 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] | C | Título de la nueva opción que se habilitara en Buscar Recibos. | Si | aRet[2] | C | Función de usuario que será ejecutada al dar clic en la nueva opción | Si |
Aviso |
---|
| - 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 |
---|
title | Ejemplo del PE |
---|
linenumbers | true |
---|
collapse | true |
---|
| #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 |
|
| 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 que el usuario pueda indicar campos/columnas que se desean incluir en el GRID de visualización de los recibos desde la opción de "Buscar recibos". Parámetros recibidos: Nombre | Tipo | Descripción |
---|
PARAMIXB[1] | C | Serie del recibo | PARAMIXB[2] | C | Número del recibo | PARAMIXB[3] | C | Cliente |
Retorno: Arreglo de configuraciones para agregar a la lista de campos que se pueden visualizar en la lista de recibos. Nombre | Tipo | Descripción |
---|
aRet[1] | C | Título de la columna que se desea agregar en la lista de recibos. | aRet[2] | C | Valor del campo, de cualquier tabla en la DB vinculada a los recibos de cobro. | aRet[3] | L | Mostrar 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 |
---|
language | java |
---|
firstline | 1 |
---|
title | Ejemplo |
---|
linenumbers | true |
---|
collapse | true |
---|
| #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 |
---|
F998NRDCOB | F998NRDCOB | F998NRDCOB Tiene el objetivo de llenar el campo del Cobrador cuando se seleccione el código del cliente. Parámetros recibidos: Nombre | Tipo | Descripción |
---|
PARAMIXB[1] | CCliente seleccionado. | Serie del recibo | PARAMIXB[2] | C | Tienda del cliente seleccionado. | Número del recibo | PARAMIXB[3] | C | Cliente |
Retorno: Arreglo de configuraciones para agregar a la lista de campos que se pueden visualizar en la lista de recibos.Retorno: Nombre | Tipo | Descripción |
---|
cCobradoraRet[1] | C | Retorna 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] | C | Valor del campo, de cualquier tabla en la DB vinculada a los recibos de cobro. | aRet[3] | L | Mostrar 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 Este punto de entrada sustituye al "F087ACOB" de la rutina Cobros Diversos (FINA087A). Más información: DT PE F998NRDCOB Llenar el campo del Cobrador cuando seleccione el código del cliente en Nuevo ReciboF998BRMCOL Incluir columnas a visualizar en el GRID de buscar recibos Bloco de código |
---|
language | java |
---|
firstline | 1 |
---|
title | Ejemplo |
---|
linenumbers | true |
---|
collapse | true |
---|
| #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())
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 |
Â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. Parámetros recibidos: Retorno: Arreglo de configuraciones para agregar a la lista de campos que se pueden visualizar en la lista de títulos. Nombre | Tipo | Descripción |
---|
aRet[1] | C | Campo a visualizar en la lista de títulos. | aRet[2] | C | Título de la columna que se desea agregar en la lista de títulos. | aRet[3] | L | Mostrar 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 |
---|
language | java |
---|
firstline | 1 |
---|
title | Ejemplo |
---|
linenumbers | true |
---|
collapse | true |
---|
| User Function F998NRMCOL()
Local aCampos := {}
Aadd(aCampos, { "E1_DTACRED","Fecha cred",.T.})
Aadd(aCampos, { "E1_TXMOEDA","TX moneda",.T.}
Return aCampos |
| Âncora |
---|
F998NRIOFLT | F998NRIOFLT | F998NRIOFLT
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 |
|
| Tiene el objetivo de llenar el campo del Cobrador cuando se seleccione el código del cliente. Parámetros recibidos: Nombre | Tipo | Descripción |
---|
PARAMIXB[1] | C | Cliente seleccionado. | PARAMIXB[2] | C | Tienda del cliente seleccionado. |
Retorno: Nombre | Tipo | Descripción |
---|
cCobrador | C | Retorna el Cobrador que será colocado en el box del cobrador. |
Este punto de entrada sustituye al "F087ACOB" de la rutina Cobros Diversos (FINA087A). Más información: DT PE F998NRDCOB Llenar el campo del Cobrador cuando seleccione el código del cliente en Nuevo Recibo | 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:
Nombre | Tipo | Descripción |
---|
PARAMIXB[1] | C | Expresión SQL correspondiente al filtro estándar (Where) de selección (Query) de documentos. |
Retorno:
Nombre | Tipo | Descripción |
---|
cQuery | C | Expresió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 |
---|
language | java |
---|
firstline | 1 |
---|
title | Ejemplo |
---|
linenumbers | true |
---|
collapse | true |
---|
|
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: Retorno: Nombre | Tipo | Descripción |
---|
cTipos | C | Cadena 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 |
---|
language | java |
---|
firstline | 1 |
---|
title | Ejemplo |
---|
linenumbers | true |
---|
collapse | true |
---|
| #INCLUDE "Totvs.ch"
User Function F998FLOTIT()
Local cTipos := ""
cTipos += "/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: Retorno: Este punto de entrada sustituye al "FA087INC" de la rutina de Cobros Diversos (FINA087A). Más información: DT PE F998NRG3 Agregar acciones antes de asientos contables y de grabar tabla de impuestos/retenciones Bloco de código |
---|
language | java |
---|
firstline | 1 |
---|
title | Ejemplo |
---|
linenumbers | true |
---|
collapse | true |
---|
| #Include 'Protheus.ch'
User Function F998NRG3()
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: Retorno: Este punto de entrada sustituye al "F840SE1" de la rutina de Generación de recibos (FINA840). Más información: DT PE F998GSE1 Permite grabar campos creados por el usuario en la tabla de títulos por cobrar Bloco de código |
---|
language | java |
---|
firstline | 1 |
---|
title | Ejemplo |
---|
linenumbers | true |
---|
collapse | true |
---|
| #Include 'Protheus.ch'
User Function F998GSE1(User Function F998NRDCOB()
Local cCobrador := ""
Local cClient := Paramixb[1]
Local cLoja := Paramixb[2]
dbselectarea("SAR")
("SAR")->(dbGoTop())
IFWhile SEL→(ColumnPos("E1_EJEMPLO"SAR")->(!eof())
SE1->E1_EJEMPLO := .T.
ENDIF
Return Nil |
Âncora |
---|
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 |
|
| 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 F998MAIL | F998MAIL | F998MAIL Tiene el objetivo de actualizar el asunto y el cuerpo del Mail. Parámetros recibidos: Retorno: Arreglo de configuraciones para agregar a la lista de campos que se pueden visualizar en la lista de títulos. Nombre | Tipo | Nombre | Tipo | Descripción |
---|
PARAMIXBaRet[1] | C | Representa la Serie del Recibo | Campo a visualizar en la lista de títulos. | aRetPARAMIXB[2] | C | Representa el Número del Recibo |
Retorno: Título de la columna que se desea agregar en la lista de títulos. | aRet[3] | L | Mostrar marca de seleccionado en la lista de campos a visualizar en la pantalla de Nuevo Recibo: .T. = Sí, .F. = No. | aRet[4] | L | Mostrar 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). Nombre | Tipo | Descripción | Obligatorio |
---|
aMail[1] | C | Representa el asunto del corrreo | Si | aMail[2] | C | Representa el cuerpo del correo | SiMás información: DT PE F998MAIL Modificar el Asunto y Cuerpo al enviar el Recibo por Mail F998NRMCOL Agregar más columnas en la lista de títulos por cobrar TOTVS Recibo Bloco de código |
---|
language | java |
---|
firstline | 1 |
---|
title | Ejemplo |
---|
linenumbers | true |
---|
collapse | true |
---|
| #Include 'Protheus.ch'
User Function F998MAILF998NRMCOL()
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 |
Â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: Nombre | Tipo | Descripción |
---|
PARAMIXB[1,1] | C | Nombre del archivo XML ya generado con extensión. | PARAMIXB[1,2] | C | Vacío | PARAMIXB[1,3] | C | Vacío | PARAMIXB[1,4] | A | Array 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] | C | Serie del recibo. |
Más información: DT PE F998IMPREC Formato de impresión para los recibos TOTVS Recibo Bloco de código |
---|
language | java |
---|
firstline | 1 |
---|
title | Ejemplo |
---|
linenumbers | true |
---|
collapse | true |
---|
| #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 {}
Aadd(aCampos, { "E1_DTACRED","Fecha cred",.T.,.T.})
Aadd(aCampos, { "E1_TXMOEDA","TX moneda",.T.,.T.})
Return aCampos |
|
| Tiene el objetivo de agregar más filtros en la selección de registros (Query) que se usa en la pantalla de "Extraer Títulos" y "Agregar otros títulos". Parámetros recibidos: Nombre | Tipo | Descripción |
---|
PARAMIXB[1] | C | Expresión SQL correspondiente al filtro estándar (Where) de selección (Query) de documentos. | PARAMIXB[2] | N | Expresión para identificar el filtro corresponiente a cada pantalla 1-Extraer titulos 2-Incluir otros titulos |
Retorno: Nombre | Tipo | Descripción |
---|
cQuery | C | Expresió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 Más información: PE F998NRIOFLT Agregar más filtros en el query Extraer Titulos en Nuevo Recibo Bloco de código |
---|
language | java |
---|
firstline | 1 |
---|
title | Ejemplo |
---|
linenumbers | true |
---|
collapse | true |
---|
| #Include 'Protheus.ch'
//Punto de entrada F998NRIOFLT
User Function F998NRIOFLT()
Local cQuery := Paramixb[1]
Local nTipo := Paramixb[2] // 1-Extraer titulos/ 2-Incluir otros titulos
If nTipo == 2 //2-Incluir otros titulos
cQuery += " AND E1_VALOR < 2000 "
EndIF
If nTipo == 1 // 1-Extraer titulos
cQuery += " AND E1_VALOR > 2000 "
EndIF
Return cQuery |
|
| Tiene el objetivo de agregar nuevos tipos de títulos a los recibos generados desde la sección de "Nuevo Recibo" Parámetros recibidos: Retorno: Nombre | Tipo | Descripción |
---|
cTipos | C | Cadena 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 |
---|
language | java |
---|
firstline | 1 |
---|
title | Ejemplo |
---|
linenumbers | true |
---|
collapse | true |
---|
| #INCLUDE "Totvs.ch"
User Function F998FLOTIT()
Local cTipos := ""
cTipos += "/CC/CN"
Return cTipos |
|
| Punto de entrada disponible que permite realizar acciones antes de generar los asientos contables y de grabar la tabla de los impuestos/retenciones (SFE) desde la opción de "Nuevo Recibo". La llamada desde este punto de entrada está fuera del control de la transacción. Parámetros recibidos: Retorno: Este punto de entrada sustituye al "FA087INC" de la rutina de Cobros Diversos (FINA087A). Más información: DT PE F998NRG3 Agregar acciones antes de asientos contables y de grabar tabla de impuestos/retenciones Bloco de código |
---|
language | java |
---|
firstline | 1 |
---|
title | Ejemplo |
---|
linenumbers | true |
---|
collapse | true |
---|
| #Include 'Protheus.ch'
User Function F998NRG3()
If msgyesno("¿Desea ejecutar el punto de entrada F998NRG3? ", "Confirmar")
FINR300()
EndIf
Return |
|
| Tiene el objetivo de actualizar campos creados por el usuario en la tabla de Títulos por Cobrar (SE1), este proceso es realizado antes de finalizar las actualizaciones de la tabla de Títulos por Cobrar. Parámetros recibidos: Retorno: Este punto de entrada sustituye al "F840SE1" de la rutina de Generación de recibos (FINA840). Más información: DT PE F998GSE1 Permite grabar campos creados por el usuario en la tabla de títulos por cobrar Bloco de código |
---|
language | java |
---|
firstline | 1 |
---|
title | Ejemplo |
---|
linenumbers | true |
---|
collapse | true |
---|
| #Include 'Protheus.ch'
User Function F998GSE1()
IF SEL→(ColumnPos("E1_EJEMPLO"))
SE1->E1_EJEMPLO := .T.
ENDIF
Return Nil |
|
| Tiene el objetivo de actualizar el asunto y el cuerpo del Mail. Parámetros recibidos: Nombre | Tipo | Descripción |
---|
PARAMIXB[1] | C | Representa la Serie del Recibo | PARAMIXB[2] | C | Representa el Número del Recibo |
Retorno: Nombre | Tipo | Descripción | Obligatorio |
---|
aMail[1] | C | Representa el asunto del corrreo | Si | aMail[2] | C | Representa el cuerpo del correo | Si |
Más información: DT PE F998MAIL Modificar el Asunto y Cuerpo al enviar el Recibo por Mail - 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: - Banco (EF_BANCO).
- Agencia (EF_AGENCIA).
- Código Postal (EF_POSTAL).
- Cheque (EF_NUM) .
- Cuenta (EF_CONTA).
- DV Cuenta
Parámetros recibidos: Nombre | Tipo | Descripción |
---|
PARAMIXB[1,1] | C | Contiene la cadena que se introduce en la ventana de la Lectora de Cheques |
Ejemplo := 0<B240002400240123456789ASDFGHJK Informações |
---|
| 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 |
---|
language | java |
---|
firstline | 1 |
---|
title | Ejemplo |
---|
linenumbers | true |
---|
collapse | true |
---|
| #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 Numeric
Local aCmc7Tc := {} As Array
If nTamBco == 0PDF"
cCuerpo += "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 Campo | Longitud |
---|
Banco | 3 | Agencia | 3 | Codigo Postal | 4 | Cheque | 8 | Cuenta | 10 | DV Cuenta | 1 |
Â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: Más información: 695246_MMI-5510_DT_Punto_de_Entrada_FINLRCHQ_ARG Bloco de código |
---|
language | java |
---|
firstline | 1 |
---|
title | Ejemplo |
---|
linenumbers | true |
---|
collapse | true |
---|
| #Include 'Protheus.ch'
User Function FINLRCHQ()
Local cChq := ""
cChq := "0<00123456789abcdefghijklmnopqrs"
Return cChq |
| Âncora |
---|
F998NATVAZ | F998NATVAZ | F998NATVAZ
Aviso |
---|
| 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: Más información: DT PE F998NATVAZ Validación obligatoriedad de campo Modalidad Totvs Recibos PER Bloco de código |
---|
language | java |
---|
firstline | 1 |
---|
title | Ejemplo |
---|
linenumbers | true |
---|
collapse | true |
---|
| #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". - 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. - Dentro del módulo Financiero ejecutar la rutina TOTVS Recibo (Actualizaciones | Cuentas por cobrar).
- En la sección Buscar recibo, especifique los criterios de consulta.
- Aplicar el filtro y posicionarse en el recibo a visualizar.
- Al momento de dar clic en "Visualizar" el punto de entrada F998VISFP será ejecutado.
- Haga clic en el ícono con la imagen del engrane que se encuentra a la derecha de las formas de pago.
- En la lista de campos a visualizar serán agregados los definidos por el usuario a través del punto de entrada.
- Seleccione y deseleccione los campos requeridos, a continuación, confirme.
- 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. Nombre | Tipo | Descripción | Obligatorio |
---|
aRet[1] | C | Nombre del campo a buscar. Ejemplo (EL_TIPODOC) | Si | aRet[2] | C | Nombre 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] | L | Mostrar 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 |
---|
language | java |
---|
firstline | 1 |
---|
title | Ejemplo |
---|
linenumbers | true |
---|
collapse | true |
---|
| #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).
- 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. - Dentro del modulo Financiero ejecutar la rutina TOTVS Recibo (Actualizaciones | Cuentas por cobrar).
- En la sección Nuevo Recibo, llenar los campos necesarios para el encabezado del recibo.
- Seleccionar un titulo a cobrar o compensar.
- Agregar una forma de pago (Opcional).
- Al momento de dar clic en confirmar se ejecutará el punto de entrada F998NROK .
- 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] | Json | Objeto Json que contiene la información de los métodos de pago que contiene el recibo a guardar. | PARAMIXB[2] | Json | Objeto Json que contiene la información de los títulos que contiene el recibo a guardar. | PARAMIXB[3] | Json | Objeto Json que contiene la información del encabezado del recibo a guardar. |
|
Respuesta: | Nombre | Tipo | Descripción |
---|
aRet[1][1] | B | Si 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] | C | Mensaje que se visualizara en el aplicativo en caso de que el campo aRet[1][1] sea Falso. |
|
Bloco de código |
---|
language | java |
---|
firstline | 1 |
---|
title | Ejemplo |
---|
linenumbers | true |
---|
collapse | true |
---|
|
#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.
Crear la función de usuario F998NRG2, en la cual se puedan ejecutar acciones posteriores a grabar el recibo de cobro.
Dentro del módulo Financiero, ejecutar la rutina TOTVS Recibo (Actualizaciones | Cuentas por cobrar | TOTVS Recibo).Dentro del aplicativo de TOTVS Recibo, ir a Nuevo Recibo.Llenar el encabezado del recibo.Aplicar los filtros del encabezado.Seleccionar un Título por Cobrar y agregar una Forma de Pago (opcional).Dar clic en Confirmar para el guardado del recibo.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: | N/A |
Respuesta: | N/A |
Bloco de código |
---|
language | java |
---|
firstline | 1 |
---|
title | Ejemplo |
---|
linenumbers | true |
---|
collapse | true |
---|
|
#Include 'Protheus.ch'
User Function F998NRG2()
If MsgYesNo("¿Desea ejecutar el punto de entrada F998NRG2? ", "Confirmar")
Finr087()
EndIf
Return |
Âncora |
---|
F998NRG1 | F998NRG1 | F998NRG1
Punto de entrada disponible que permite realizar acciones antes de la contabilidad
La llamada desde este punto de entrada está fuera del control de la transacción.
Crear la función de usuario F998NRG1 por medio del cual realicen acciones antes de generar asientos contables al grabar un recibo de cobro.
- Dentro del módulo Financiero, ejecutar la rutina TOTVS Recibo (Actualizaciones | Cuentas por cobrar | TOTVS Recibo).
- Dentro del aplicativo de TOTVS Recibo, ir a Nuevo Recibo.
- Llenar el encabezado del recibo.
- Aplicar los filtros del encabezado.
- Seleccionar un Título por Cobrar y agregar una Forma de Pago (opcional).
- Dar clic en Confirmar para grabar el recibo.
- Revisar que la ejecución del punto de entrada haya realizado las acciones esperadas.
Parámetros recibidos: | N/A |
Respuesta: | N/A |
Bloco de código |
---|
language | java |
---|
firstline | 1 |
---|
title | Ejemplo |
---|
linenumbers | true |
---|
collapse | true |
---|
|
#Include 'Protheus.ch'
User Function F998NRG1()
If MsgYesNo("¿Desea ejecutar el punto de entrada F998NRG1? ", "Confirmar")
FINR270()
EndIf
Return |
Â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/Borrar" en la rutina.
- Crear la función de usuario F998BRANU con las validaciones personalizadas tanto para aceptar así como para rechazar la anulación o borrado del recibo.
- Debe retornar un arreglo con dos parámetros, en donde el primero es un valor lógico, .T. (Verdadero) o .F. (Falso), de aceptación o rechazo, y el segundo es un mensaje personalizado según sea el caso. - Dentro del módulo Financiero ejecutar la rutina TOTVS Recibo (Actualizaciones | Cuentas por cobrar).
- Dentro del aplicativo de TOTVS Recibo, ir a Buscar recibo, llenar los campos de consulta de acuerdo a los recibos que se desea buscar y visualizar.
- Se mostrará la lista de los recibos.
- Seleccionar el recibo deseado y al dar clic en el botón de Anular/Borrar recibo se ejecutará el punto de entrada F998BRANU.
- La función de usuario efectúa las validaciones personalizadas y retorna una respuesta que indica si procede o no la anulación/borrado.
- Se mostrará una ventana con el mensaje correspondiente y en caso de que proceda, el sistema continuará con la anulación/borrado del recibo.
Parámetros recibidos: | Nombre | Tipo | Descripción |
---|
PARAMIXB[1] | C | Serie del recibo | PARAMIXB[2] | C | Número del recibo |
|
Respuesta: | Nombre | Tipo | Descripción | Obligatorio |
---|
aRet[1] | L | Retorna .T. si procede el Anulado/Borrado o .F. si no se permite | Si | aRet[2] | C | Mensaje de la causa de rechazo de anulación. | Si |
|
Bloco de código |
---|
language | java |
---|
firstline | 1 |
---|
title | Ejemplo |
---|
linenumbers | true |
---|
collapse | true |
---|
|
#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 |
Puntos de entrada en MVC (Estándares)
...
ID DEL PUNTO DE ENTRADA
...
MOMENTO DE EJECUCIÓN DEL PUNTO DE ENTRADA
...
MODELPRE
...
Antes de la alteración de cualquier campo del modelo.
Parámetros recibidos:
1 O Objeto del formulario ó del modelo, conforme el caso.
2 C ID del local de ejecución del punto de entrada.
3 C ID del formulario.
Retorno:
Requiere un retorno lógico.
...
MODELPOS
...
En la validación total del modelo
Parámetros recibidos:
1 O Objeto del formulario o del modelo, conforme el caso.
2 C ID del local de ejecución del punto de entrada.
3 C ID del formulario.
Retorno:
Requiere un retorno lógico.
...
FORMPRE
Antes de la alteración de cualquier campo del formulario.
Parámetros recibidos:
1 O Objeto del formulario o del modelo, conforme el caso.
2 C ID del local de ejecución del punto de entrada.
3 C ID del formulario.
4 C Acción del FWFORMGRID.
5 C ID del Campo.
Retorno:
Requiere un retorno lógico.
...
FORMPOS
...
En la validación total del formulario.
Parámetros recibidos:
1 O Objeto del formulario o del modelo, conforme el caso.
2 C ID del local de ejecución del punto de entrada.
3 C ID del formulario.
Retorno:
Requiere un retorno lógico.
...
FORMLINEPRE
...
Antes de la alteración de la línea del formulario FWFORMGRID.
Parámetros recibidos:
1 O Objeto del formulario o del modelo, conforme al caso.
2 C ID del local de ejecución del punto de entrada.
3 C ID del formulario.
4 N Numero de linea del FWFORMGRID
5 C Acción del FWFORMGRID
6 C Id del campo
Retorno:
Requiere un retorno lógico.
...
FORMLINEPOS
...
En la validación total de la línea del formulario FWFORMGRID.
Parámetros recibidos:
1 O Objeto do formulário ou do modelo, conforme o caso
2 C ID do local de execução do ponto de entrada
3 C ID do formulário
4 N Número da Linha da FWFORMGRID
Retorno:
Requiere un retorno lógico.
...
MODELCOMMITTTS
...
Despúes de la grabación total del modelo y dentro de la transacción.
Parámetros Recibidos:
1 O Objeto del formulario del modelo, conforme el caso.
2 C ID del local de ejecución del punto de entrada.
3 C ID del formulario.
Retorno:
No espera retorno.
...
MODELCOMMITNTTS
...
Después de la grabación total del modelo y fuera de la transacción.
Parámetros recibidos:
1 O Objeto del formulario o del modelo, conforme el caso.
2 C ID del local de ejecución del punto de entrada.
3 C ID del formulario.
Retorno:
No espera retorno
...
FORMCOMMITTTSPRE
...
Antes da gravação da tabela do formulário.
Parâmetros Recebidos:
1 O Objeto del formulario o del modelo, conforme el caso.
2 C ID del local de ejecución del punto de entrada.
3 C ID del formulario.
4 L Si es .T. indica nuevo registro (inclusión) si es .F. registro ya existente (Alteración/ Exclusión)
Retorno:
No espera retorno.
...
FORMCOMMITTTSPOS
...
Después de la grabación de la tabla del formulario.
Parâmetros Recebidos:
1 O Objeto del formulario o del modelo, conforme el caso.
2 C ID del local de ejecución del punto de entrada.
3 C ID del formulario.
4 L Si es .T. indica nuevo registro (inclusión) si es .F. registro ya existente (Alteración/ Exclusión)
Retorno:
No espera retorno.
...
MODELCANCEL
...
El botón de cancelar.
Parámetros recibidos:
1 O Objeto del formulario o del modelo, conforme el caso.
2 C ID del local de ejecución del punto de entrada.
3 C ID del formulario.
Retorno:
No espera retorno.
...
BUTTONBAR
...
Incluir botones en el ControlBar.
Para crear los botones se debe retornar un array bidimensional con la siguiente estructura de cada ítem:
1 C Titulo para el botón.
2 C Nombre del Bitmap para mostrar.
3 B CodeBlock a ser ejecutado.
4 C ToolTip (Opcional)
Parâmetros Recebidos:
1 O Objeto del formulario o del modelo, conforme el caso.
2 C ID del local de ejecución del punto de entrada.
3 C ID del formulario.
Retorno:
Array con la estructura pre-definida.
"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 |
|
| 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: Nombre | Tipo | Descripción |
---|
PARAMIXB[1,1] | C | Nombre del archivo XML ya generado con extensión. | PARAMIXB[1,2] | C | Vacío | PARAMIXB[1,3] | C | Vacío | PARAMIXB[1,4] | A | Array 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] | C | Serie del recibo. |
Más información: DT PE F998IMPREC Formato de impresión para los recibos TOTVS Recibo Bloco de código |
---|
language | java |
---|
firstline | 1 |
---|
title | Ejemplo |
---|
linenumbers | true |
---|
collapse | true |
---|
| #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.
|
| 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: - Banco (EF_BANCO).
- Agencia (EF_AGENCIA).
- Código Postal (EF_POSTAL).
- Cheque (EF_NUM) .
- Cuenta (EF_CONTA).
- DV Cuenta
Parámetros recibidos: Nombre | Tipo | Descripción |
---|
PARAMIXB[1,1] | C | Contiene la cadena que se introduce en la ventana de la Lectora de Cheques |
Ejemplo := 0<B240002400240123456789ASDFGHJK Informações |
---|
| 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 |
---|
language | java |
---|
firstline | 1 |
---|
title | Ejemplo |
---|
linenumbers | true |
---|
collapse | true |
---|
| #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 Campo | Longitud |
---|
Banco | 3 | Agencia | 3 | Codigo Postal | 4 | Cheque | 8 | Cuenta | 10 | DV Cuenta | 1 |
|
| Tiene el objetivo de retornar una cadena de caracteres con el formato de un cheque y ser visualizado en la "Lectora De Cheque". Parámetros recibidos: Más información: 695246_MMI-5510_DT_Punto_de_Entrada_FINLRCHQ_ARG Bloco de código |
---|
language | java |
---|
firstline | 1 |
---|
title | Ejemplo |
---|
linenumbers | true |
---|
collapse | true |
---|
| #Include 'Protheus.ch'
User Function FINLRCHQ()
Local cChq := ""
cChq := "0<00123456789abcdefghijklmnopqrs"
Return cChq |
|
| Aviso |
---|
| 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: Más información: DT PE F998NATVAZ Validación obligatoriedad de campo Modalidad Totvs Recibos PER Bloco de código |
---|
language | java |
---|
firstline | 1 |
---|
title | Ejemplo |
---|
linenumbers | true |
---|
collapse | true |
---|
| #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 |
|
| 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". - 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. - Dentro del módulo Financiero ejecutar la rutina TOTVS Recibo (Actualizaciones | Cuentas por cobrar).
- En la sección Buscar recibo, especifique los criterios de consulta.
- Aplicar el filtro y posicionarse en el recibo a visualizar.
- Al momento de dar clic en "Visualizar" el punto de entrada F998VISFP será ejecutado.
- Haga clic en el ícono con la imagen del engrane que se encuentra a la derecha de las formas de pago.
- En la lista de campos a visualizar serán agregados los definidos por el usuario a través del punto de entrada.
- Seleccione y deseleccione los campos requeridos, a continuación, confirme.
- 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. Nombre | Tipo | Descripción | Obligatorio |
---|
aRet[1] | C | Nombre del campo a buscar. Ejemplo (EL_TIPODOC) | Si | aRet[2] | C | Nombre 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] | L | Mostrar 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 |
---|
language | java |
---|
firstline | 1 |
---|
title | Ejemplo |
---|
linenumbers | true |
---|
collapse | true |
---|
| #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 |
|
| 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).
- 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. - Dentro del modulo Financiero ejecutar la rutina TOTVS Recibo (Actualizaciones | Cuentas por cobrar).
- En la sección Nuevo Recibo, llenar los campos necesarios para el encabezado del recibo.
- Seleccionar un titulo a cobrar o compensar.
- Agregar una forma de pago (Opcional).
- Al momento de dar clic en confirmar se ejecutará el punto de entrada F998NROK .
- 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] | Json | Objeto Json que contiene la información de los métodos de pago que contiene el recibo a guardar. | PARAMIXB[2] | Json | Objeto Json que contiene la información de los títulos que contiene el recibo a guardar. | PARAMIXB[3] | Json | Objeto Json que contiene la información del encabezado del recibo a guardar. |
| Respuesta: | Nombre | Tipo | Descripción |
---|
aRet[1][1] | B | Si 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] | C | Mensaje que se visualizara en el aplicativo en caso de que el campo aRet[1][1] sea Falso. |
|
Bloco de código |
---|
language | java |
---|
firstline | 1 |
---|
title | Ejemplo |
---|
linenumbers | true |
---|
collapse | true |
---|
| #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 |
|
| 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. Crear la función de usuario F998NRG2, en la cual se puedan ejecutar acciones posteriores a grabar el recibo de cobro. - Dentro del módulo Financiero, ejecutar la rutina TOTVS Recibo (Actualizaciones | Cuentas por cobrar | TOTVS Recibo).
- Dentro del aplicativo de TOTVS Recibo, ir a Nuevo Recibo.
- Llenar el encabezado del recibo.
- Aplicar los filtros del encabezado.
- Seleccionar un Título por Cobrar y agregar una Forma de Pago (opcional).
- Dar clic en Confirmar para el guardado del recibo.
- 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] | Json | Objeto Json con toda la información guardada en el recibo |
El objeto Json PARAMIXB[1] Contiene los siguientes objetos: Expandir |
---|
| Nombre en Json | Equivalencia | Descripción |
---|
encabezado['serie'] | FJT_SERIE | Serie del recibo | encabezado['recibo'] | FJT_RECIBO | Numero de recibo | encabezado['emissa'] | FJT_EMISSA | Emisión | encabezado['nature'] | FJT_NATURE | Cobrador | encabezado['client'] | FJT_CLIENT | Cliente | encabezado['loja'] | FJT_LOJA | Tienda | encabezado['cobrad'] | FJT_COBRAD | Cobrador | encabezado['recprov'] | FJT_RECPRV | Recibo Provisorio |
|
Expandir |
---|
| Nombre en Json | Equivalencia | Descripción |
---|
titulos[nX]['branch'] | E1_FILIAL | Filial | titulos[nX]['billnumber'] | E1_NUMERO | Numero de Titulo | titulos[nX]['type'] | E1_TIPO | Tipo de Titulo | titulos[nX]['actualduedt'] | E1_VENCREA | Vencimiento Real | titulos[nX]['currency'] | E1_MOEDA | Moneda | titulos[nX]['unit'] | E1_LOJA | Tienda | titulos[nX]['installment'] | E1_PARCELA | Cuota | titulos[nX]['billvalue'] | E1_VALOR | Valor | titulos[nX]['customer'] | E1_CLIENTE | Cliente | titulos[nX]['class'] | E1_NATUREZ | Modalidad | titulos[nX]['custname'] | A1_NOME | Nombre del cliente | titulos[nX]['balance'] | E1_SALDO | Saldo del titulo | titulos[nX]['prefix'] | E1_PREFIXO | Prefijo del titulo | titulos[nX]['issuedt'] | E1_EMISSAO | Fecha de emisión | titulos[nX]['writeoffne'] | E1_VALLIQ | Valor neto de la baja | titulos[nX]['discount'] | E1_DESCONT | Descuento | titulos[nX]['interest'] | E1_JUROS | Intereses | titulos[nX]['fine'] | E1_MULTA | Multas | titulos[nX]['series'] | E1_SERIE | Serie | titulos[nX]['origin'] | E1_ORIGEM | Ruta origen del titulo | titulos[nX]['recno'] | R_E_C_N_O |
| titulos[nX]['client'] | E1_CLIENTE | Cliente | titulos[nX]['originbranch'] | E1_FILORIG | Filial Original | titulos[nX]['paycondf2'] | F2_COND | Condicion SF2 | titulos[nX]['paycondf1'] | F1_COND | Condición SF1 | titulos[nX]['serie2f2'] | F2_SERIE2 | Serie SF2 | titulos[nX]['serie2f1'] | F1_SERIE2 | Serie SF1 | titulos[nX]['paymentcondition'] |
| Condición de pago | titulos[nX]['cobrar'] |
| Monto a cobrar en Numeric | titulos[nX]['billvalueString'] |
| Toyal o saldo (Dependiendo la pantalla) | titulos[nX]['balanceString'] |
| Saldo en String | titulos[nX]['cobrarString'] |
| Monto a cobrar en String | titulos[nX]['discountString'] |
| Descuento del titulo en String | titulos[nX]['interestString'] |
| Interes del titulo en String | titulos[nX]['fineString'] |
| Multa del titulo en String | titulos[nX]['quickSelected'] |
| Titulo seleccionado en el GRID | titulos[nX]['reasonBx'] |
| Motivos de baja | titulos[nX]['peso'] |
| Total en moneda |
|
Expandir |
---|
| Nombre en Json | Descripción |
---|
monedas[nX]['coin'] | Nombre Moneda | monedas[nX]['tasa'] | Tasa | monedas[nX]['received'] | Cantidad recibida en esta moenda | monedas[nX]['balance'] | Saldo en Numeric | monedas[nX]['type'] | Nombre de Moneda | monedas[nX]['moneda'] | Numero de Moneda | monedas[nX]['stringTasa'] | Tasa de moneda | monedas[nX]['balanceString'] | Saldo en String | monedas[nX]['receivedString'] | Cantidad recibida en esta moenda |
|
Expandir |
---|
title | Objeto formas de pago |
---|
| Nombre en Json | Descripción |
---|
formaspago[nX]['property'] | Nombre de la propiedad (Trae el mismo nombre registrado en la SX3) | formaspago[nX]['value'] | Valor de la propiedad |
|
Expandir |
---|
| Nombre en Json | Descripción |
---|
params[nX]['mv_par01'] | Valor del parametro 01 | params[nX]['mv_par01'] . . . params[nX]['mv_parxx'] |
|
|
| Respuesta: | N/A |
Bloco de código |
---|
language | java |
---|
firstline | 1 |
---|
title | Ejemplo |
---|
linenumbers | true |
---|
collapse | true |
---|
| #Include 'Protheus.ch'
User Function F998NRG2()
Local oModel:=PARAMIXB[1]
MsgYesNo("ATENCIÓN" , "Se manda a llamar la funcion de usuario")
Return |
|
| Punto de entrada disponible que permite realizar acciones antes de la contabilidad La llamada desde este punto de entrada está fuera del control de la transacción. Crear la función de usuario F998NRG1 por medio del cual realicen acciones antes de generar asientos contables al grabar un recibo de cobro. - Dentro del módulo Financiero, ejecutar la rutina TOTVS Recibo (Actualizaciones | Cuentas por cobrar | TOTVS Recibo).
- Dentro del aplicativo de TOTVS Recibo, ir a Nuevo Recibo.
- Llenar el encabezado del recibo.
- Aplicar los filtros del encabezado.
- Seleccionar un Título por Cobrar y agregar una Forma de Pago (opcional).
- Dar clic en Confirmar para grabar el recibo.
- Revisar que la ejecución del punto de entrada haya realizado las acciones esperadas.
Descipción | Actualizaciones | Punto de entrada: | F998NRG1 | Parámetros recibidos: | N/A | Respuesta: | N/A |
Bloco de código |
---|
language | java |
---|
firstline | 1 |
---|
title | Ejemplo |
---|
linenumbers | true |
---|
collapse | true |
---|
| #Include 'Protheus.ch'
User Function F998NRG1()
MsgYesNo("ATENCIÓN" , "Se manda a llamar la funcion de usuario")
Return |
|
| 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. - 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.
- Dentro del módulo Financiero ejecutar la rutina TOTVS Recibo (Actualizaciones | Cuentas por cobrar).
- Dentro del aplicativo de TOTVS Recibo, ir a Nuevo Recibo, llenar los campos del encabezado para localizar un titulo.
- Editar el cobro de un titulo.
Verificar si se visualiza el nuevo campo configurado en la función F998VALBX. - Verificar si realizan los calculos para los campos descuento, multa e interes y total. Esto de acuerdo a la lógica determinada en la función de usuario.
Verificar si se guarda correctamente el valor ingresado en el campo definido por el cliente. Parámetros recibidos: | Nombre | Tipo | Descripción |
---|
PARAMIXB[1] | O | Definición de la vista del campo "Descuento por pronto pago"" Descripción del objeto PARAMIXB[1] cuando en el Json la bandera PARAMIXB[2] es Verdadera (.T.) y la bandera ["recalculate" ] este como falsa (.F.) Expandir |
---|
| Nombre en Json | Equivalencia | Descripción |
---|
['recalculate´] | N/A | Si es True (.T.) realizará los calculos, si es False (.F.) realizara la vista | titulos[nX]['branch'] | E1_FILIAL | Filial | titulos[nX]['billnumber'] | E1_NUMERO | Numero de Título | titulos[nX]['type'] | E1_TIPO | Tipo de Título | titulos[nX]['actualduedt'] | E1_VENCREA | Vencimiento Real | titulos[nX]['currency'] | E1_MOEDA | Moneda | titulos[nX]['unit'] | E1_LOJA | Tienda | titulos[nX]['installment'] | E1_PARCELA | Cuota | titulos[nX]['billvalue'] | E1_VALOR | Valor | titulos[nX]['customer'] | E1_CLIENTE | Cliente | titulos[nX]['class'] | E1_NATUREZ | Modalidad | titulos[nX]['custname'] | A1_NOME | Nombre del cliente | titulos[nX]['balance'] | E1_SALDO | Saldo del Título | titulos[nX]['prefix'] | E1_PREFIXO | Prefijo del Título | titulos[nX]['issuedt'] | E1_EMISSAO | Fecha de emisión | titulos[nX]['writeoffne'] | E1_VALLIQ | Valor neto de la baja | titulos[nX]['discount'] | E1_DESCONT | Descuento | titulos[nX]['interest'] | E1_JUROS | Intereses | titulos[nX]['fine'] | E1_MULTA | Multas | titulos[nX]['series'] | E1_SERIE | Serie | titulos[nX]['origin'] | E1_ORIGEM | Ruta origen del Título | titulos[nX]['recno'] | R_E_C_N_O |
| titulos[nX]['client'] | E1_CLIENTE | Cliente | titulos[nX]['originbranch'] | E1_FILORIG | Filial Original | titulos[nX]['paycondf2'] | F2_COND | Condicion SF2 | titulos[nX]['paycondf1'] | F1_COND | Condición SF1 | titulos[nX]['serie2f2'] | F2_SERIE2 | Serie SF2 | titulos[nX]['serie2f1'] | F1_SERIE2 | Serie SF1 | titulos[nX]['paymentcondition'] |
| Condición de pago | titulos[nX]['cobrar'] |
| Monto a cobrar en Numeric | titulos[nX]['billvalueString'] |
| Toyal o saldo (Dependiendo la pantalla) | titulos[nX]['balanceString'] |
| Saldo en String | titulos[nX]['cobrarString'] |
| Monto a cobrar en String | titulos[nX]['discountString'] |
| Descuento del Título en String | titulos[nX]['interestString'] |
| Interes del titulo en String | titulos[nX]['fineString'] |
| Multa del titulo en String |
|
Definición de la lógica del campo "Descuento por pronto pago" Descripción del objeto PARAMIXB[1] cuando en el Json la bandera PARAMIXB[2] es Verdadera (.T.) y la bandera ["recalculate" ] este como True (.T.) Expandir |
---|
| Nombre en Json | Descripción |
---|
['recalculate´] | Si es True (.T.) realizará los calculos, si es False (.F.) realizara la vista | bind['discountInput'] | Descuento ingresado en el campo Descuento Pronto Pago | bind['descuento'] | Tipo de Titulo | bind['multa'] | Interes del titulo en String | bind['interes'] | Multa del titulo en String | bind['saldo'] | Saldo total (Ya tomando en cuenta, descuento, multa e interes) |
|
Definición de la grabación del campo "Descuento por pronto pago" Descripción de los objetos (PARAMIXB[1]) mandados en el Json cuando la bandera PARAMIXB[2] es Falsa (.F.) Expandir |
---|
| Nombre en Json | Equivalencia | Descripción |
---|
encabezado['serie'] | FJT_SERIE | Serie del recibo | encabezado['recibo'] | FJT_RECIBO | Numero de recibo | encabezado['emissa'] | FJT_EMISSA | Emisión | encabezado['nature'] | FJT_NATURE | Cobrador | encabezado['client'] | FJT_CLIENT | Cliente | encabezado['loja'] | FJT_LOJA | Tienda | encabezado['cobrad'] | FJT_COBRAD | Cobrador | encabezado['recprov'] | FJT_RECPRV | Recibo Provisorio |
|
Expandir |
---|
| Nombre en Json | Equivalencia | Descripción |
---|
titulos[nX]['branch'] | E1_FILIAL | Filial | titulos[nX]['billnumber'] | E1_NUMERO | Numero de Titulo | titulos[nX]['type'] | E1_TIPO | Tipo de Titulo | titulos[nX]['actualduedt'] | E1_VENCREA | Vencimiento Real | titulos[nX]['currency'] | E1_MOEDA | Moneda | titulos[nX]['unit'] | E1_LOJA | Tienda | titulos[nX]['installment'] | E1_PARCELA | Cuota | titulos[nX]['billvalue'] | E1_VALOR | Valor | titulos[nX]['customer'] | E1_CLIENTE | Cliente | titulos[nX]['class'] | E1_NATUREZ | Modalidad | titulos[nX]['custname'] | A1_NOME | Nombre del cliente | titulos[nX]['balance'] | E1_SALDO | Saldo del titulo | titulos[nX]['prefix'] | E1_PREFIXO | Prefijo del titulo | titulos[nX]['issuedt'] | E1_EMISSAO | Fecha de emisión | titulos[nX]['writeoffne'] | E1_VALLIQ | Valor neto de la baja | titulos[nX]['discount'] | E1_DESCONT | Descuento | titulos[nX]['interest'] | E1_JUROS | Intereses | titulos[nX]['fine'] | E1_MULTA | Multas | titulos[nX]['series'] | E1_SERIE | Serie | titulos[nX]['origin'] | E1_ORIGEM | Ruta origen del titulo | titulos[nX]['recno'] | R_E_C_N_O |
| titulos[nX]['client'] | E1_CLIENTE | Cliente | titulos[nX]['originbranch'] | E1_FILORIG | Filial Original | titulos[nX]['paycondf2'] | F2_COND | Condicion SF2 | titulos[nX]['paycondf1'] | F1_COND | Condición SF1 | titulos[nX]['serie2f2'] | F2_SERIE2 | Serie SF2 | titulos[nX]['serie2f1'] | F1_SERIE2 | Serie SF1 | titulos[nX]['paymentcondition'] |
| Condición de pago | titulos[nX]['cobrar'] |
| Monto a cobrar en Numeric | titulos[nX]['billvalueString'] |
| Toyal o saldo (Dependiendo la pantalla) | titulos[nX]['balanceString'] |
| Saldo en String | titulos[nX]['cobrarString'] |
| Monto a cobrar en String | titulos[nX]['discountString'] |
| Descuento del titulo en String | titulos[nX]['interestString'] |
| Interes del titulo en String | titulos[nX]['fineString'] |
| Multa del titulo en String | titulos[nX]['quickSelected'] |
| Titulo seleccionado en el GRID | titulos[nX]['reasonBx'] |
| Motivos de baja | titulos[nX]['peso'] |
| Total en moneda |
|
Expandir |
---|
| Nombre en Json | Descripción |
---|
monedas[nX]['coin'] | Nombre Moneda | monedas[nX]['tasa'] | Tasa | monedas[nX]['received'] | Cantidad recibida en esta moenda | monedas[nX]['balance'] | Saldo en Numeric | monedas[nX]['type'] | Nombre de Moneda | monedas[nX]['moneda'] | Numero de Moneda | monedas[nX]['stringTasa'] | Tasa de moneda | monedas[nX]['balanceString'] | Saldo en String | monedas[nX]['receivedString'] | Cantidad recibida en esta moenda |
|
Expandir |
---|
title | Objeto formas de pago |
---|
| Nombre en Json | Descripción |
---|
formaspago[nX]['property'] | Nombre de la propiedad (Trae el mismo nombre registrado en la SX3) | formaspago[nX]['value'] | Valor de la propiedad |
|
Expandir |
---|
| Nombre en Json | Descripción |
---|
params[nX]['mv_par01'] | Valor del parametro 01 | params[nX]['mv_par01'] . . . params[nX]['mv_parxx'] |
|
|
| PARAMIXB[2] | L | True (.T.) si es momento del guardado y False (.F.) si es configuración de la vista |
| Respuesta: | Descripción del objeto de respuesta cuando en el Json la bandera PARAMIXB[2] es Verdadera (.T.) y la bandera ["recalculate" ] este como falsa (.F.) Expandir |
---|
| Nombre | Tipo | Descripción | Obligatorio |
---|
oJson['label'] | L | Nombre del campo nuevo a mostrar. | Si | oJson['disabledDiscount'] | L | Deshabilitar o habilitar el campo de descuento. | Si | oJson['disabledInterest'] | L | Deshabilitar o habilitar el campo de Intereses. | Si | oJson['disabledFine'] | L | Deshabilitar o habilitar el campo de Multa. | Si | oJson['disabledInput'] | L | Deshabilitar o habilitar el input nuevo | Si | oJson['maxDiscount'] | N | Se informa el descuento permitido debe tener un rango mayor a 0 y menor a 100 | Si | oJson['warningMaxDiscount'] | C | Mensaje personalizado por si se excede el descuento permitido, si no se informa el front mandará uno por default | No |
|
Descripción del objeto de respuesta cuando en el Json la bandera PARAMIXB[2] es Verdadera (.T.) y la bandera ["recalculate" ] este como True (.T.) Expandir |
---|
| Nombre en Json | Descripción |
---|
oJson['descuento'] | Valor que sera mostrado en el campo descuento | oJson['residuo'] | Valor que sera mostrado como total del titulo (Despues de descuentos, multa e intereses) | oJson['multa'] | Valor que sera mostrado como multa del titulo | oJson['interes'] | Valor que sera mostrado como interes del titulo |
|
Descripción de los objetos de respues en el Json cuando la bandera PARAMIXB[2] sea Falsa (.F.) N/A |
Bloco de código |
---|
language | actionscript3 |
---|
title | Ejemplo de PE F998VALBX y sus funciones de usuario |
---|
linenumbers | true |
---|
collapse | true |
---|
| #Include 'Protheus.ch'
User Function F998VALBX()
Local oResponse := JsonObject():New() as Object
IF PARAMIXB[2] //Vista
IF PARAMIXB[1]['recalculate']
oResponse:=setValues(PARAMIXB[1])
ELSE
oResponse['label'] := "% Descuento por pronto pago" //Nombre del campo nuevo a mostrar.
oResponse['readonlyDiscount'] := .T. //Deshabilitar o habilitar el campo de descuento.
oResponse['readonlyInterest'] := .T. //Deshabilitar o habilitar el campo de Intereses.
oResponse['readonlyFine'] := .T. //Deshabilitar o habilitar el campo de Multa.
oResponse['disabledInput'] := .F.//isDisable(PARAMIXB[1]) //Deshabilitar o habilitar el input nuevo
oResponse['maxDiscount'] := 50//GetLimite(PARAMIXB[1]) //Se informa el descuento permitido debe tener un rango mayor a 0 y menor a 100
oResponse['warningMaxDiscount'] := "Descuento por Pronto Pago mayor al permitido. En esta condición el tope es:"+ALLTRIM(STR(oResponse['maxDiscount'])) //Mensaje personalizado por si se excede el descuento permitido, si no se informa el front mandara uno por default
ENDIF
ELSE
SaveData(PARAMIXB[1]) //Grabación
ENDIF
Return oResponse
/*/{Protheus.doc} setValues
Esta funcion determina los valores a mostrar en los campos de descuento, residuo,multa e interes
@type function
@version
@author luis.aboytes
@since 25/7/2024
@param oJson, object, param_description
@return variant, return_description
/*/
Static Function setValues(oJson)
Local oRes := JsonObject():New()
oRes['descuento'] := Round(PARAMIXB[1]['bind']['discountInput']/100*PARAMIXB[1]['bind']['saldo'],2)
oRes['residuo'] := Round(PARAMIXB[1]['bind']['saldo']-oRes['descuento'],MsDecimais(SE1->E1_MOEDA))
oRes['multa'] := 0
oRes['interes'] := 0
Return oRes
/*/{Protheus.doc} SaveData
Guardamos el dato en un campo en especifico
@type function
@author luis.aboytes
@since 18/7/2024
/*/
Static Function SaveData(oJsonData)
Local nCont as Numeric
For nCont := 1 to LEN(oJsonData['titulos'])
SE1->(dbSetOrder(1))
SE1->(dbSeek(xFilial("SE1")+PADR(oJsonData['titulos'][nCont]['prefix'],GetSx3Cache("E1_PREFIXO","X3_TAMANHO"))+PADR(oJsonData['titulos'][nCont]['billnumber'],GetSx3Cache("E1_NUM","X3_TAMANHO"))+PADR(oJsonData['titulos'][nCont]['installment'],GetSx3Cache("E1_PARCELA","X3_TAMANHO"))))
RecLock("SE1",.F.)
SE1->E1_XPERDES := oJsonData['titulos'][nCont]['percentDiscount']
MsUnLock()
Next
Return
/*/{Protheus.doc} GetLimite
Se retorna el limite de descuento
@type function
@author luis.aboytes
@since 18/7/2024
/*/
Static Function GetLimite(oJsonData)
Local nTope := 0
SE1->(dbSetOrder(1))
SE1->(dbSeek(xFilial("SE1")+PADR(oJsonData['prefix'],GetSx3Cache("E1_PREFIXO","X3_TAMANHO"))+PADR(oJsonData['billnumber'],GetSx3Cache("E1_NUM","X3_TAMANHO"))+PADR(oJsonData['installment'],GetSx3Cache("E1_PARCELA","X3_TAMANHO"))))
nTope:=IIF(VAZIO(Posicione("SE4", 1,xFilial("SE4")+SE1->E1_XCONDPP,"E4_XDESCON")),0,Posicione("SE4", 1,xFilial("SE4")+SE1->E1_XCONDPP,"E4_XDESCON"))
Return nTope
/*/{Protheus.doc} isDisable
Funcion que retorna si es editable o no el valor del input
@type function
@author luis.aboytes
@since 18/7/2024
/*/
Static Function isDisable(oJsonData)
Local lRet := .t.
SE1->(dbSetOrder(1))
SE1->(dbSeek(xFilial("SE1")+PADR(oJsonData['prefix'],GetSx3Cache("E1_PREFIXO","X3_TAMANHO"))+PADR(oJsonData['billnumber'],GetSx3Cache("E1_NUM","X3_TAMANHO"))+PADR(oJsonData['installment'],GetSx3Cache("E1_PARCELA","X3_TAMANHO"))))
IF SE1->E1_XCONDPP == '999'
lRet := .f.
ENDIF
Return lRet |
|
| Se crea el punto de entrada F998BRANU en la rutina FINA998- TOTVS Recibo, con el objetivo de que el usuario pueda incluir validaciones para la opción de "Anular" en la rutina.
- Crear la función de usuario F998BRANU con las validaciones personalizadas tanto para aceptar así como para rechazar la anulación del recibo.
- Debe retornar un arreglo con dos parámetros, en donde el primero es un valor lógico, .T. (Verdadero) o .F. (Falso), de aceptación o rechazo, y el segundo es un mensaje personalizado según sea el caso. - Dentro del módulo Financiero ejecutar la rutina TOTVS Recibo (Actualizaciones | Cuentas por cobrar).
- Dentro del aplicativo de TOTVS Recibo, ir a Buscar recibo, llenar los campos de consulta de acuerdo a los recibos que se desea buscar y visualizar.
- Se mostrará la lista de los recibos.
- Seleccionar el recibo deseado y al dar clic en el botón de Anular recibo se ejecutará el punto de entrada F998BRANU.
- La función de usuario efectúa las validaciones personalizadas y retorna una respuesta que indica si procede o no la anulación.
- Se mostrará una ventana con el mensaje correspondiente y en caso de que proceda, el sistema continuará con la anulacióndel recibo.
Parámetros recibidos: | Nombre | Tipo | Descripción |
---|
PARAMIXB[1] | C | Serie del recibo | PARAMIXB[2] | C | Número del recibo |
| Respuesta: | Nombre | Tipo | Descripción | Obligatorio |
---|
aRet[1] | L | Retorna .T. si procede el Anulado/Borrado o .F. si no se permite | Si | aRet[2] | C | Mensaje de la causa de rechazo de anulación. | Si |
|
Bloco de código |
---|
language | java |
---|
firstline | 1 |
---|
title | Ejemplo |
---|
linenumbers | true |
---|
collapse | true |
---|
| #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 |
|
| Se crea el punto de entrada F998BRBOR en la rutina FINA998- TOTVS Recibo, con el objetivo de que el usuario pueda incluir validaciones para la opción de "Borrar" en la rutina.
- Crear la función de usuario "F998BRBOR" con las validaciones personalizadas tanto para aceptar, así como para rechazar el borrado del recibo.
- Debe retornar un arreglo con dos parámetros, en donde el primero es un valor lógico, .T. (Verdadero) o .F. (Falso), de aceptación o rechazo, y el segundo es un mensaje personalizado, según sea el caso. - Dentro del módulo Financiero ejecutar la rutina TOTVS Recibo (Actualizaciones | Cuentas por cobrar).
- Dentro del aplicativo de TOTVS Recibo, ir a Buscar recibo, llenar los campos de consulta de acuerdo a los recibos que se desea buscar y visualizar.
- Se mostrará la lista de los recibos.
- Seleccionar el recibo deseado y al dar clic en el botón de Borrar (El recibo tiene que estar previamente anulado) recibo se ejecutará el punto de entrada "F998BRBOR".
- La función de usuario efectúa las validaciones personalizadas y retorna una respuesta que indica si procede o no el borrado.
- Se mostrará una ventana con el mensaje correspondiente y en caso de que proceda, el sistema continuará con el borrado del recibo.
Parámetros recibidos: | Nombre | Tipo | Descripción |
---|
PARAMIXB[1] | C | Serie del recibo | PARAMIXB[2] | C | Número del recibo |
| Respuesta: | Nombre | Tipo | Descripción | Obligatorio |
---|
aRet[1] | L | Retorna .T. si procede el Anulado/Borrado o .F. si no se permite | Si | aRet[2] | C | Mensaje de la causa de rechazo de anulación. | Si |
|
Bloco de código |
---|
language | java |
---|
title | Ejemplo |
---|
collapse | true |
---|
| #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 |
|
| Tiene el objetivo de especificar el correo por defecto que se desea utilizar para el envío de correo en Nuevo Recibo y en Buscar Recibo. Parámetros recibidos: Nombre | Tipo | Descripción |
---|
PARAMIXB[1] | C | Código de cliente | PARAMIXB[2] | C | Tienda del cliente |
Retorno: Nombre | Tipo | Descripción | Obligatorio |
---|
cCorreo | C | Correo electrónico | Si |
Más información: PE F998DMAIL Correo por defecto para envío de correos en Totvs Recibo Bloco de código |
---|
language | java |
---|
firstline | 1 |
---|
title | Ejemplo |
---|
linenumbers | true |
---|
collapse | true |
---|
| #Include 'Protheus.ch'
User Function F998DMAIL()
Local cCliente := Paramixb[1]
Local cLoja := Paramixb[2]
Local cCorreo := ""
Local aArea := GetArea()
DbSelectArea("SA1")
SA1->(DbSetOrder(1))//A1_FILIAL+A1_COD+A1_LOJA
If SA1->(MsSeek(xFilial("SA1")+cCliente+cLoja))
cCorreo := Alltrim(SA1->A1_EMAIL)
EndIf
SA1->(DbCloseArea())
RestArea(aArea)
Return cCorreo |
|
2. Puntos de entrada en MVC (Estándares)
ID DEL PUNTO DE ENTRADA | MOMENTO DE EJECUCIÓN DEL PUNTO DE ENTRADA |
MODELPRE | Antes de la alteración de cualquier campo del modelo. 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. |
| 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. |
| 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. |
| 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. |
| 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 |
| 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. |
| 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. |
| 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. |
2.1 Usos de los Puntos de Entrada de MVC
Aviso |
---|
|
Al utilizar uno de los siguientes Puntos de Entrada MVC, y al tener configurado un mensaje personalizado de error (HELP), este mensaje del Punto de Entrada será priorizado sobre el mensaje de error o información (HELP) descrito desde el módulo configurador (SIGACFG). En caso de no contar con ninguno de los dos mensajes (HELP), se mostrará vacío el detalle del mensaje. Este comportamiento también se aplica al título del mensaje configurado en el HELP.
Ejemplos: Image Added Image Added |
| |
| 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] | O | Objeto del formulario o del modelo, conforme el caso | PARAMIXB[2] | C | ID del local de ejecución del punto de entrada. | PARAMIXB[3] | C | ID del formulario. | PARAMIXB[4] | C | Acción del FWFORMGRID. | PARAMIXB[5] | C | ID del Campo. |
| Respuesta: | Nombre | Tipo | Descripción |
---|
lRet | L | Si el valor retornado es .T. el campo Cobrador (FJT_COBRAD) sera habilitado, de lo contrario sera inhabilitado. |
|
Bloco de código |
---|
language | java |
---|
firstline | 1 |
---|
title | Ejemplo: |
---|
linenumbers | true |
---|
collapse | true |
---|
| #include "Protheus.ch"
#include "FWMVCDEF.CH"
User Function FINA887()
Local aParam := PARAMIXB
Local oModel := aParam[1]
Local cIdPonto := aParam[2]
Local cIdModel := ""
Local lRet := .T.
If aParam <> NIL
If cIdPonto == 'FORMPRE'
cIdModel := aParam[3]
cAccion := aParam[4]
cIdCamp := aParam[5]
CONOUT('FORMPRE')
IF cIdModel == 'FJT_MASTER' .AND. cAccion == 'CANSETVALUE' .AND. cIdCamp ==
'FJT_COBRAD' //Deshabilitamos en la accion de CANSETVALUE el campo retornando un .F.
lRet := .F.
ENDIF
EndIf
EndIf
Return lRet |
|
| Punto de entrada para VALIDAR los datos de retenciones en la rutina de cobros diversos. Parámetros recibidos: | Nombre | Tipo | Descripción |
---|
PARAMIXB[1] | O | Objeto del formulario o del modelo, conforme el caso | PARAMIXB[2] | C | ID del local de ejecución del punto de entrada. | PARAMIXB[3] | C | ID del Model. |
| Respuesta: | Nombre | Tipo | Descripción |
---|
lRet | L | Si el valor retornado es .T. el campo es permitido , de lo contrario retornar un .F. | HELP() | O | Retornar un mensaje de error para mostrar por que no es permitido el campo. |
|
Bloco de código |
---|
language | java |
---|
firstline | 1 |
---|
title | Ejemplo |
---|
linenumbers | true |
---|
collapse | true |
---|
| #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
|
|
| 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] | O | Objeto del formulario o del modelo, conforme el caso | PARAMIXB[2] | C | ID del local de ejecución del punto de entrada. | PARAMIXB[3] | C | ID del Model. |
| Respuesta: | N/A |
Bloco de código |
---|
language | java |
---|
firstline | 1 |
---|
title | Ejemplo |
---|
linenumbers | true |
---|
collapse | true |
---|
| #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
|
|
2.2 Campos de validaciones para el punto de entrada
Generales:
- EL_LOJA = Tienda del cliente.
- EL_LOJORIG = Tienda original.
- EL_TIPO = Tipo de título.
- EL_BCOCHQ = Banco Cheque.
México:
- EL_CTABEN = Cuenta beneficiario.
- EL_CTAORD = Cuenta ord.
- EL_FORPGO = Forma de pago.
- EL_HRPAGO = Hora de pago.
Perú:
- EL_TIPODOC = Tipo de documento.
Sentencia When
General:
- EL_PREFIXO = Prefijo.
- EL_TPCRED = Tipo de crédito.
Argentina/Colombia
- EL_TPCRED = Tipo de crédito.
Chile/Perú
México
- EL_CEPCAD = Cadena CEP.
- EL_CEPCER = Certificado CEP.
- EL_CEPSEL = Sello CEP.
- EL_CEPTIP = Tipo CEP.
- EL_CTABEN = Cuenta beneficiario.
- EL_CTAORD = Cuenta ord.
- EL_RFCEMI = RFC Emisor.
- EL_TPCRED = Tipo de crédito.
Ejemplo:
User Function FINA887() 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 |
2.3 Ejemplo de "Carga Masiva" de formas de pago (SEL) utilizando PE BUTTONBAR:
FINA887.PRX
User Function FINA887() Local aParam := PARAMIXB Local oModel := Nil Local cIdPonto := "" Local cIdModel := "" Local lRet := .T. If aParam <> NIL oModel := aParam[1] cIdPonto := aParam[2] cIdModel := aParam[3] If cIdPonto == 'BUTTONBAR' lRet := {{'Carga', 'CARGA', {|x| U_FN998CARGA(oModel)}, 'Carga Masiva' }} EndIf EndIf Return lRet |
FN998CARGA.PRW
#Include "protheus.ch" //Importación de formas de pago a partir de archivo .CSV al modelo SEL_DETAIL (formas de pago de la tabla SEL) //Ejemplo de registro en el archivo .CSV : NUMTITULO;BANCODESCRIPCION;;;20/09/2024;21/09/2024;01000 User Function FN998CARGA(oModel) //Nota: En Totvs Recibo (FINA998), las variables aHeaders y aCols nao existen como private, por lo que la función gdFieldPos no se puede utilizar //Se extrae la variable aHeader del modelo SEL_DETAIL controla los registros de la pantalla de formas de pagos de la tabla SEL //Se construye la variable aCols y después se actualiza al modelo SEL_DETAIL para que aparezcan las formas de pago visualmente en pantalla Local aArea := getArea() Local oModelSEL := oModel:GetModel("SEL_DETAIL") Local aHeader := oModelSEL:aHeader Local aCols := {} Local nC := 1 Local nH := 1 Local nPosNro := aScan(aHeader,{|x| AllTrim(x[2])=="EL_NUMERO" }) //Inicializa la variable aCols con valores por defecto a partir del tamaño de aHeader addLine(aHeader, @aCols) If MsgYesNo("Deseja importar arquivo .csv ?", "Cheques") fLoadCsv(@aCols, aHeader) EndIf //Actualización al modelo SEL_DETAIL en grid for nC:= 1 to Len(aCols) If !Empty(oModelSEL:GetValue("EL_NUMERO")) // Se agrega una línea nueva al modelo en caso de que el exista el campo EL_NUMERO ya informado en la línea actual oModelSEL:AddLine() EndIf If !Empty(aCols[nC][nPosNro]) // Se verifica que el campo EL_NUMERO no este vacío para identificar que el registro de aCols es válido for nH := 1 to Len(aHeader) oModelSEL:loadValue(aHeader[nH][2],aCols[nC][nH]) // Se carga la información de aCols en el modelo SEL_DETAIL de la vista en grid Next nH If !oModelSEL:VldData() Help( ,,"Error de Modelo",,oModel:GetModel():GetErrorMessage()[6], 1, 0) // Mensaje de error en caso de que la línea del modelo no sea válida Exit EndIf EndIf Next nC restArea(aArea) RETURN **************************************************** Static Function fLoadCsv(aCols, aHeader) Local nLinha := 0 Local aDados := {} Local aColsV := ACLONE(aCols[1]) //Se obtiene la posición de cada campo de la tabla SEL para reemplazar el uso de gdFieldPos Local nPosNro := aScan(aHeader,{|x| AllTrim(x[2])=="EL_NUMERO" }) Local nPosBco := aScan(aHeader,{|x| AllTrim(x[2])=="EL_BCOCHQ" }) Local nPosAge := aScan(aHeader,{|x| AllTrim(x[2])=="EL_AGECHQ" }) Local nPosPos := aScan(aHeader,{|x| AllTrim(x[2])=="EL_POSTAL" }) Local nPosTipo := aScan(aHeader,{|x| AllTrim(x[2])=="EL_TIPO" }) Local nPosPref := aScan(aHeader,{|x| AllTrim(x[2])=="EL_PREFIXO" }) Local nPosValor := aScan(aHeader,{|x| AllTrim(x[2])=="EL_VALOR" }) Local nPosEmiss := aScan(aHeader,{|x| AllTrim(x[2])=="EL_EMISSAO" }) Local nPosVnto := aScan(aHeader,{|x| AllTrim(x[2])=="EL_DTVCTO" }) Local nPosBanc := aScan(aHeader,{|x| AllTrim(x[2])=="EL_BANCO" }) Local nPosAgen := aScan(aHeader,{|x| AllTrim(x[2])=="EL_AGENCIA" }) Local nPosCont := aScan(aHeader,{|x| AllTrim(x[2])=="EL_CONTA" }) Local nPosObs := aScan(aHeader,{|x| AllTrim(x[2])=="EL_OBSBCO" }) //Se lee el archivo .csv cFOpen := cGetFile("Arquivos |*.CSV",OemToAnsi("Selecione o arquivo para Importação: ")) If Len(cFOpen) > 0 .And. FILE(cFOpen) //Abre o arquivo selecionado nHandle := FT_FUse(cFOpen) If nHandle == -1 MsgAlert("Erro de abertura do arquivo ") Return EndIf nNumReg := FT_FLastRec() FT_FGoTop() FT_FSkip() While !FT_FEof() nLinha++ If nLinha+1 == nNumReg Exit Endif aDados := Separa(FT_FReadln(),';') cValor := StrTran(Substr(aDados[7],2),".","") cValor := StrTran(cValor,",",".") aBcoCh := fRetBcoCh(aDados[2]) If nLinha > 1 AADD(aCols,Aclone(aColsV)) EndIf aCols[nLinha][nPosTipo] := "CHD" aCols[nLinha][nPosNro] := padr(aDados[1],TamSx3("EL_NUMERO")[1]) aCols[nLinha][nPosValor] := Val(cValor) aCols[nLinha][nPosEmiss] := ctod(aDados[5]) aCols[nLinha][nPosVnto] := ctod(aDados[6]) aCols[nLinha][nPosBanc] := Padr("001",TamSx3("EL_BANCO")[1]) aCols[nLinha][nPosAgen] := Padr("00001",TamSx3("EL_AGENCIA")[1]) aCols[nLinha][nPosCont] := Padr("0000000001",TamSx3("EL_CONTA")[1]) aCols[nLinha][nPosBco] := Padr(aBcoCh[1],TamSx3("EL_BCOCHQ")[1]) aCols[nLinha][nPosPref] := Padr(aBcoCh[1],TamSx3("EL_PREFIXO")[1]) aCols[nLinha][nPosAge] := Padr(aBcoCh[2],TamSx3("EL_AGECHQ")[1]) aCols[nLinha][nPosPos] := Padr(aBcoCh[3],TamSx3("EL_POSTAL")[1]) aCols[nLinha][nPosObs] := aDados[2] FT_FSkip() EndDo FCLose(nHandle) EndIf Return ************************************ Static Function fRetBcoCh(pDescri) Local cQuery := "", aRet := {"","",""} cQuery := "SELECT FJN_COD, FJN_AGENCI, FJN_POSTAL, FJO_NOME " cQuery += "FROM "+RetSqlName("FJN")+" (NOLOCK) FJN JOIN "+RetSqlName("FJO")+" (NOLOCK) FJO ON FJN_FILIAL=FJO_FILIAL AND FJN_COD=FJO_COD " cQuery += "WHERE FJN.D_E_L_E_T_ = ' ' AND FJO.D_E_L_E_T_ = ' ' " cQuery += "AND FJO_NOME LIKE '%"+Alltrim(pDescri)+"%' " If Select("QRY") <> 0 QRY->(dbCloseArea()) End dbUseArea(.T.,"TOPCONN",TcGenQry(,,cQuery),"QRY",.T.,.T.) QRY->(dbGoTop()) If !QRY->(Eof()) aRet[1] := QRY->FJN_COD aRet[2] := QRY->FJN_AGENCI aRet[3] := QRY->FJN_POSTAL else aRet[1] := "005" aRet[2] := "00001" aRet[3] := "1000" EndIf QRY->(dbCloseArea()) Return(aRet) /*/{Protheus.doc} addLine Agrega una nueva línea a aCols en base a los campos en aHeader /*/ Static function addLine(aHeader, aCols) Local nX, nY Aadd(aCols, Array(Len(aHeader))) nX := Len(aCols) For nY := 1 to Len(aHeader) If !(aHeader[nY][2] $ "EL_BANCOS|EL_BCOCHQS") // EL_BANCOS y EL_BCOCHQS son campos virtuales de la forma de pago sin grid, estos se dejan como vacío aCols[nX][nY] := CriaVar(aHeader[nY][2]) Else aCols[nX][nY] := "" EndIf Next nY Return nX |
Nota:
El cIdPonto igual a BUTTONBAR adiciona un nuevo botón en la pantalla de carga de formas de pago y detona una función, para esto es necesario habilitar el parámetro MV_FPADVPL igual a .T. para utilizar la pantalla ADVPL de carga de formas de pago. Para más información véase el siguiente documento: https://tdn.totvs.com/x/kBNdMg
Image Added
Puntos de Entrada en MVC (Funcionales)
...
FORMPRE
Punto de entrada con la finalidad de habilitar o deshabilitar el campo Cobrador (FJT_COBRAD) de la tabla Encabezado de Recibo (FJT) y no permitir su edición.
...
Nombre | Tipo | Descripción |
---|
PARAMIXB[1] | O | Objeto del formulario o del modelo, conforme el caso |
PARAMIXB[2] | C | ID del local de ejecución del punto de entrada. |
PARAMIXB[3] | C | ID del formulario. |
PARAMIXB[4] | C | Acción del FWFORMGRID. |
PARAMIXB[5] | C | ID del Campo. |
...
Nombre | Tipo | Descripción |
---|
lRet | L | Si el valor retornado es .T. el campo Cobrador (FJT_COBRAD) sera habilitado, de lo contrario sera inhabilitado. |
Bloco de código |
---|
language | java |
---|
firstline | 1 |
---|
title | Ejemplo: |
---|
linenumbers | true |
---|
collapse | true |
---|
|
#include "Protheus.ch"
#include "FWMVCDEF.CH"
User Function FINA887()
Local aParam := PARAMIXB
Local oModel := aParam[1]
Local cIdPonto := ""
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 |
Campos de validaciones para el punto de entrada
Generales:
- EL_LOJA = Tienda del cliente.
- EL_LOJORIG = Tienda original.
- EL_TIPO = Tipo de título.
- EL_BCOCHQ = Banco Cheque.
México:
- EL_CTABEN = Cuenta beneficiario.
- EL_CTAORD = Cuenta ord.
- EL_FORPGO = Forma de pago.
- EL_HRPAGO = Hora de pago.
Perú:
- EL_TIPODOC = Tipo de documento.
Sentencia When
General:
- EL_PREFIXO = Prefijo.
- EL_TPCRED = Tipo de crédito.
Argentina/Colombia
- EL_TPCRED = Tipo de crédito.
Chile/Perú
México
- EL_CEPCAD = Cadena CEP.
- EL_CEPCER = Certificado CEP.
- EL_CEPSEL = Sello CEP.
- EL_CEPTIP = Tipo CEP.
- EL_CTABEN = Cuenta beneficiario.
- EL_CTAORD = Cuenta ord.
- EL_RFCEMI = RFC Emisor.
- EL_TPCRED = Tipo de crédito.
Ejemplo de punto de entrada:
...