Árvore de páginas

Versões comparadas

Chave

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

...

Producto

Solucoes_espanhol
SolucaoTOTVS Backoffice

Línea de producto: 

Linhas_totvs_espanhol
LinhaLínea Protheus

Segmento:

Segmentos_totvs_espanhol
SegmentoBackoffice

Módulo:SIGAFIN - FINANCIERO
Función:
RutinaNombre TécnicoFecha
FINA998.APPAplicativo de TOTVS Recibo (Front-end)
FINA998.PRWAplicativo de TOTVS Recibo (Back-end)

FINA998A.PRWLlamada de servicios por ADVPL

GETCONTENTINI.SERVICE.TLPPServicio para obtener las configuraciones iniciales

FINANCIAL-TITLES.CONTROLLER.TLPPControlador para obtener los títulos financieros

FINANCIAL-TITLES.SERVICE.TLPPServicio para obtener los títulos financieros

SAVE-RECEIPT.SERVICE.TLPPServicio para guardar los recibos

País:Todos
Ticket:N/A
Requisito/Story/Issue (informe el requisito vinculado):DMINA-23387

...

  • Aplicativo de TOTVS Recibo (FINA998.PRW Y FINA998A.TLPP) habilitando el endpoint para obtener las configuraciones determinadas en el PE "Descuento por pronto pago" (F998VALBX) y aplicar la  lógica matemática para realizar los descuentos.
  • Servicio para configuraciones iniciales (GETCONTENTINI.SERVICE.TLPP) se habilita una bandera para habilitar o deshabilitar la opción "Descuento por pronto pago" cuando se desea realizar la "Edición de cobro" a un título.
  • Controlador y servicio para obtener los títulos financieros (FINANCIAL-TITLES.CONTROLLER.TLPP y FINANCIAL-TITLES.SERVICE.TLPP) se realiza la ejecución del PE "Descuento por pronto pago"
  • Servicio para guardar un recibo (SAVE-RECEIPT.SERVICE.TLPP) se habilita el llamado del PE para el guardado del valor ingresado en el campo "Descuento por pronto pago".
Aviso
titleImportante

Importante

La solución estará presente en el patch de expedición continua con fecha  superior  al 18/07/2024.

...

Totvs custom tabs box
tabsConf. Previas, Flujo de Pruebas
idspaso1,paso2
Totvs custom tabs box items
defaultyes
referenciapaso1
  1. Realizar un respaldo del repositorio (RPO).
  2. Aplicar el paquete de expedición continua Financiero - Totvs Recibo MI con fecha del 1807 o posterior.  
  3. Aplicar el parche correspondiente al issue DMINA-23387.
  4. Validar que las rutinas actualizadas en el repositorio, coincidan con las descritas en el encabezado del presente Documento Técnico, así como las fechas.
  5. Crear la función de usuario "Descuento por pronto pago" (F998VALBX) el cual retornará un objeto Json con las siguientes opciones:
    1. Nombre del campo nuevo a mostrar.
    2. Deshabilitar o habilitar el campo de descuento, multa o interés.
    3. Habilitar o deshabilitar el campo "Descuento por pronto pago".
    4. Galeria
      titlePE ejemplo
       
    5. La siguiente imagen es un ejemplo del PE (F998VALBX):
    6. Image Removed
  6. Dentro del módulo Financiero ejecutar la rutina TOTVS Recibo (Actualizaciones | Cuentas por cobrar).
  7. En la rutina de Clientes (MATA030), ubicada en el módulo Financiero (Actualizaciones | Archivos) registré un cliente.

  8. En la rutina de Facturaciones (MATA467N), ubicada en el módulo de Facturación (Actualizaciones | Facturaciones) generamos un nuevo título.
Totvs custom tabs box items
defaultno
referenciapaso2
  1. Ingresar a la rutina TOTVS Recibo; SIGAFIN - Actualizaciones | Cuentas por Cobrar | TOTVS Recibo.

    1. Ingresar a la opción Nuevo Recibo.

      1. Informe el encabezado del recibo de cobro con el cliente configurado anteriormente, después de clic en el botón Extraer Títulos.

      2. Informe una forma de pago de tipo CH con el número 1307001

      3. con los datos configurados anteriormente y damos clic en "Extraer Títulos". 

      4. Localizamos el título generado anteriormente y damos clic en "Editar cobro".
      5. Verificamos que se visualice el nuevo campo configurado "Descuento por pronto pago".
      6. Verificamos que se realice la lógica matemática adecuadamenteConfirme el recibo de cobro.

Card documentos
InformacaoLa presente solución aplica para versión 12.1.2210 o superior, siempre y cuando se encuentre aplicado el paquete de expedición continua Financiero - Totvs Recibo MI con fecha de corte superior a este comunicado.
Titulo¡IMPORTANTE!

...

DescripciónActualizaciones
Nombre del programa fuente:RECEIPTFINANCIAL-TITLES.SERVICE.TLPP
Parámetros recibidosN/A
NombreTipoDescripción
PARAMIXB[1]CCadena con toda la información del recibo
PARAMIXB[2]LTrue (.T.) si es momento del guardado y False (.F.) si es configuración de la vista
Punto de entrada:F887ROTF998VALBX
Respuesta:Arreglo que contiene el nombre de la nueva opción habilitada y la función que se ejecutara al dar clic en ella.

Objeto json con las siguientes opciones:

Título de la nueva opción que se habilitara en Buscar RecibosaRet2Función de usuario que será ejecutada al dar clic en la nueva opción

Nombre

Tipo

Descripción

Obligatorio

oJson['label']L

Nombre del campo nuevo a mostrar.

Si
oJson['disabledDiscount']LDeshabilitar o habilitar el campo de descuento.Si
oJson['disabledInterest']LDeshabilitar o habilitar el campo de Intereses
aRet[1]C
.Si
oJson[
'disabledFine']
C
LDeshabilitar o habilitar el campo de Multa.Si
oJson['disabledInput']LDeshabilitar o habilitar el input nuevoSi
Bloco de código
languageactionscript3
titleEjemplo de PE F887ROT y función de usuario
linenumberstrue
#Include 'Protheus.ch'

User Function F998VALBX()

//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    Local oResponse := JsonObject():New() as Object
    Local oJsonData := JsonObject():New() as JsonObject
    oJsonData:fromJson(PARAMIXB[1])
    
    IF !PARAMIXB[2]  //Vista 
        oResponse['label']              := "% Descuento"        //Nombre del campo nuevo a mostrar.
        oResponse['readonlyDiscount']   := .T.                  //Deshabilitar o habilitar el campo de descuento.
        oResponse['readonlyInterest']   := .T.                  //Deshabilitar o habilitar el campo de Intereses.
        oResponse['readonlyFine']       := .T.                  //Deshabilitar o habilitar el campo de Multa.
        oResponse['disabledInput']      := isDisable(oJsonData) //Deshabilitar o habilitar el input nuevo
        oResponse['maxDiscount']        := GetLimite(oJsonData) //Se informa el descuento permitido debe tener un rango mayor a 0 y menor a 100
        oResponse['warningMaxDiscount'] := "Descuento por Pronto Pago mayor al permitido. En esta condición el tope es:"+ALLTRIM(STR(oResponse['maxDiscount'])) //Mensaje personalizado por si se excede el descuento permitido, si no se informa el front mandara uno por default
    ELSE 
       SaveData(oJsonData) //Grabación
    ENDIF

Return oResponse

/*/{Protheus.doc} SaveData
Guardamos el dato en un campo en especifico
@type function
@author luis.aboytes
@since 18/7/2024
/*/
Static Function SaveData(oJsonData)
    Local nCont as Numeric

    For nCont := 1 to LEN(oJsonData['titulos'])
        SE1->(dbSetOrder(1))
	    SE1->(dbSeek(xFilial("SE1")+PADR(oJsonData['titulos'][nCont]['prefix'],GetSx3Cache("E1_PREFIXO","X3_TAMANHO"))+PADR(oJsonData['titulos'][nCont]['billnumber'],GetSx3Cache("E1_NUM","X3_TAMANHO"))+PADR(oJsonData['titulos'][nCont]['installment'],GetSx3Cache("E1_PARCELA","X3_TAMANHO"))))
        RecLock("FJTSE1",.F.)
            SE1->E1_XPERDES :=	oJsonData['titulos'][nCont]['percentDiscount']
		MsUnLock()
    Replace FJT_CANCEL With "1"
	    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 :=  aRet:={.T.,"PE EJECUTADO CORRECTAMENTE"} //{.T., Mensaje personalizado}
    ELSE
        aRet:={.F.,"ESTE CLIENTE NO PERMITE MODIFICACIONES"} //{.F., Mensaje personalizado}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 aRet

lRet

04. ASUNTOS RELACIONADOS