Á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 recibosrecibos 
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" y se habilita el parametro mandado al PE F998NRG2.
Aviso
titleImportante

Importante

La solución estará presente en el patch de expedición continua (fin_recibo_mi) con fecha  superior  al 0131/0807/2024, para un funcionamiento correcto de la solución compilar de la siguiente manera:

  1. Patch de la issue
  2. Patch de expedición continua superior a la fecha 0131/0807/2024.



Totvs custom tabs box
tabsConf. Previas, Flujo de Pruebas
idspaso1,paso2
Totvs custom tabs box items
defaultyes
referenciapaso1
  1. Por medio del módulo configurador (SIGACFG) damos de alta los siguientes campos

    Aviso
    titleCampos de ejemplo para el PE (No son estándar)
    1. E1_XPERDES - En el cual se guardara el descuento aplicado al título.
      1. Campo = E1_XPERDES.
      2. Tipo = Numerico.
      3. Tamaño = 5
      4. Decimal = 2
      5. Formato = @99.99
      6. Contexto = Real
      7. Propiedad = Modificar
      8. Nombre = Desc. PP
    2. E1_XCONDPP - En donde se indica la condición de pago.
      1. Campo = E1_XCONDPP.
      2. Tipo = Caracter.
      3. Tamaño = 3
      4. Decimal = 0
      5. Formato = @!
      6. Contexto = Real
      7. Propiedad = Modificar
      8. Nombre = Cond. PP
    3. E4_XDESCON - En el cual se guardara el límite de descuento aplicado al título.
      1. Campo = E4_XDESCON.
      2. Tipo = Numerico.
      3. Tamaño = 5
      4. Decimal = 2
      5. Formato = @99.99
      6. Contexto = Real
      7. Propiedad = Modificar
      8. Nombre = Lim Desc. PP
  2. Realizar un respaldo del repositorio (RPO).
  3. Aplicar el paquete de expedición continua Financiero - Totvs Recibo MI con fecha del 0108 o posterior.  
  4. Aplicar el parche correspondiente al issue DMINA-23387.
  5. Validar que las rutinas actualizadas en el repositorio, coincidan con las descritas en el encabezado del presente Documento Técnico, así como las fechas.
  6. 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. Realizara los calculos para los campos descuento, residuo, multa e interes.
    5. Realizara la grabación del "Descuento por pronto pago" a su respectivo campo.
  7. Compilar el PE F998NRG2 el cual llame la función de usuario U_TAFINE45().
  8. 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.
  9. Dentro del módulo Financiero ejecutar la rutina TOTVS Recibo (Actualizaciones | Cuentas por cobrar)Dentro del módulo Financiero ejecutar la rutina TOTVS Recibo (Actualizaciones | Cuentas por cobrar).
  10. En la rutina de Clientes (MATA030), ubicada en el módulo Financiero (Actualizaciones | Archivos) registré un cliente.

  11. En la rutina de Productos (MATA010), ubicada en el módulo Facturación (Actualizaciones | Archivos), incluir un nuevo producto.

  12. En la rutina de Tipos de Entrada y Salida (MATA080), ubicada en el módulo Facturación (Actualizaciones | Archivos), incluir una TES de salida.
  13. En la rutina de Facturaciones (MATA467N), ubicada en el módulo de Facturación (Actualizaciones | Facturaciones) generamos una factura que genere un título financiero al cliente configurado anteriormente.
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 con los datos configurados anteriormente y damos clic en "Extraer Títulos". 

      2. Localizamos el título generado anteriormente y damos clic en "Editar cobro".
        1. Verificamos que se visualice el nuevo campo configurado "Descuento por pronto pago".
        2. Verificamos que se realice la lógica matemática adecuadamente proporcionada al descuento.
      3. Agregamos una forma de pago por el valor restante del título financiero.
      4. Guardamos el recibo:
        1. Verificamos que el valor se haya guardado correctamente en el campo configurado en el PE.
  2. Actualización de la función de usuario U_TAFINE45() en el PE F998NRG2, para la generación de la NCC al momento de guardar el recibo.

    Aviso
    titleImportante

    Hay que adaptar la manera de obtener la información del recibo y/o títulos en la función de usuario TAFINE45(), ya que en la nueva rutina de TOTVS Recibo no hay variables privadas como aCols.

    • El objeto Json obtiene los siguientes objetos:
      • Encabezado - Valores ingresados en el encabezado del recibo.
      • Títulos - Array de valores con los datos de cada título seleccionado.
      • Monedas - Array con los valores de cada moneda registrada.
      • Formas de pago - Array de valores por cada una de las formas de pago registradas en el recibo.
      • Params - Parámetros registrados en el sistema.
    • Ejemplo para obtener el descuento por pronto pago en el título seleccionado es de la siguiente manera:
      • oJson['titulos'][1]['percentDiscount'], en donde se busca el descuento por pronto pago del título número uno del objeto títulos.

Card documentos
Informacao"La solución estará presente en el patch de expedición continua con fecha superior al 01/08/2024."
Titulo¡IMPORTANTE!

Card documentos
Informacao"La solución estará presente en el patch de expedición continua con fecha superior al 01/08/2024."
Titulo¡IMPORTANTE!


parametros en Jsonparams[nX]mv_par01

Descripción de los objetos mandados en el Json cuando la bandera (PARAMIXB[2]) es Falsa (.F.) 

N/A

DescripciónActualizaciones
Punto de entrada:F998VALBX
Parámetros recibidos
NombreTipoDescripción
PARAMIXB[1]O

Definición de la vista del campo "Descuento por pronto pago"

Descripción del objeto PARAMIXB[1] cuando en el Json la bandera PARAMIXB[2] es Verdadera (.T.) y la bandera ["recalculate" ]  este como falsa (.F.)

Expandir
titleObjeto Titulo
Nombre en JsonEquivalenciaDescripción
['recalculate´]N/ASi es True (.T.) realizará los calculos, si es False (.F.) realizara la vista
titulos[nX]['branch']E1_FILIALFilial
titulos[nX]['billnumber']E1_NUMERONumero de Titulo
titulos[nX]['type']E1_TIPOTipo de Titulo
titulos[nX]['actualduedt']E1_VENCREAVencimiento Real
titulos[nX]['currency']E1_MOEDAMoneda
titulos[nX]['unit']E1_LOJATienda
titulos[nX]['installment']E1_PARCELACuota
titulos[nX]['billvalue']E1_VALORValor
titulos[nX]['customer']E1_CLIENTECliente
titulos[nX]['class']E1_NATUREZModalidad
titulos[nX]['custname']A1_NOMENombre del cliente
titulos[nX]['balance']E1_SALDOSaldo del titulo
titulos[nX]['prefix']E1_PREFIXOPrefijo del titulo
titulos[nX]['issuedt']E1_EMISSAOFecha de emisión
titulos[nX]['writeoffne']E1_VALLIQValor neto de la baja    
titulos[nX]['discount']E1_DESCONTDescuento
titulos[nX]['interest']E1_JUROSIntereses
titulos[nX]['fine']E1_MULTAMultas
titulos[nX]['series']E1_SERIESerie 
titulos[nX]['origin']E1_ORIGEMRuta origen
DescripciónActualizaciones
Nombre del programa fuente:FINANCIAL-TITLES.SERVICE.TLPP
Parámetros recibidos
NombreTipoDescripción
PARAMIXB[1]O

Definición de la vista y retorno de propiedades visuales del campo "Descuento por pronto pago"

Descripción del objeto cuando en el Json la bandera PARAMIXB[2]) es Verdadera (.T.) y la bandera ["recalculate" ]  este como falsa (.F.)

Expandir
titleObjeto Titulo
Nombre en JsonEquivalenciaDescripción
titulos[nX]['branch']E1_FILIALFilial
titulos[nX]['billnumber']E1_NUMERONumero de Titulo
titulos[nX]['type']E1_TIPOTipo de Titulo
titulos[nX]['actualduedt']E1_VENCREAVencimiento Real
titulos[nX]['currency']E1_MOEDAMoneda
titulos[nX]['unit']E1_LOJATienda
titulos[nX]['installment']E1_PARCELACuota
titulos[nX]['billvalue']E1_VALORValor
titulos[nX]['customer']E1_CLIENTECliente
titulos[nX]['class']E1_NATUREZModalidad
titulos[nX]['custname']A1_NOMENombre del cliente
titulos[nX]['balance']E1_SALDOSaldo del titulo
titulos[nX]['prefixrecno']R_E_C_N_O
E1_PREFIXOPrefijo del titulotitulos[nX]['issuedtclient']E1_EMISSAOCLIENTEFecha de emisiónCliente
titulos[nX]['writeoffneoriginbranch']E1_VALLIQFILORIGFilial OriginalValor neto de la baja    
titulos[nX]['discountpaycondf2']E1F2_DESCONTCONDDescuentoCondicion SF2
titulos[nX]['interestpaycondf1']E1F1_JUROSCONDInteresesCondición SF1
titulos[nX]['fineserie2f2']E1F2_MULTASERIE2MultasSerie SF2
titulos[nX]['seriesserie2f1']E1F1_SERIESERIE2Serie Serie SF1
titulos[nX]['originpaymentcondition']E1_ORIGEMRuta origen del titulo
Condición de pago
titulos[nX]['recnocobrar']
R_E_C_N_OMonto a cobrar en Numeric
titulos[nX]['clientbillvalueString']E1_CLIENTE
ClienteToyal o saldo (Dependiendo la pantalla)
titulos[nX]['originbranchbalanceString']E1_FILORIGFilial Original
Saldo en String
titulos[nX]['paycondf2cobrarString']F2_CONDCondicion SF2
Monto a cobrar en String
titulos[nX]['paycondf1discountString']F1_COND
Condición SF1Descuento del titulo en String
titulos[nX]['serie2f2interestString']F2_SERIE2Serie SF2
Interes del titulo en String
titulos[nX]['serie2f1fineString']F1_SERIE2Serie SF1titulos[nX]['paymentcondition']Condición de pagotitulos[nX]['cobrar']Monto a cobrar en Numerictitulos[nX]['billvalueString']Toyal o saldo (Dependiendo la pantalla)titulos[nX]['balanceString']Saldo en Stringtitulos[nX]['cobrarString']Monto a cobrar en Stringtitulos[nX]['discountString']Descuento del titulo en Stringtitulos[nX]['interestString']Interes del titulo en Stringtitulos[nX]['fineString']Multa del titulo en String
Multa del titulo en String

Definición de la lógica del campo "Descuento por pronto pago"

Descripción del objeto PARAMIXB[1] cuando en el Json la bandera PARAMIXB[2] es Verdadera (.T.) y la bandera ["recalculate" ] este como True (.T.)

Expandir
titleObjeto
Nombre en JsonDescripción
['recalculate´]Si es True (.T.) realizará los calculos, si es False (.F.) realizara la vista
bind['discountInput']Descuento ingresado en el campo Descuento Pronto Pago
bind['descuento']Tipo de Titulo
bind['multa']Interes del titulo en String
bind['interes']Multa del titulo en String
bind['saldo']Saldo total (Ya tomando en cuenta, descuento, multa e interes)

Definición de la grabación Definición de la lógica del campo "Descuento por pronto pago"

Descripción del objeto cuando de los objetos (PARAMIXB[1]) mandados en el Json cuando la bandera PARAMIXB[2] es Verdadera Falsa (.TF.) y la bandera ["recalculate" ] este como True (.T.) 

Expandir
titleObjeto Encabezado
Nombre en JsonEquivalenciaDescripción
recalculateSi 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 mandados en el Json cuando la bandera (PARAMIXB[2]) es Falsa (.F.) 

encabezado['serie']FJT_SERIESerie del recibo
encabezado['recibo']FJT_RECIBONumero de recibo
encabezado['emissa']FJT_EMISSAEmisión
encabezado['nature']FJT_NATURECobrador
encabezado['client']FJT_CLIENTCliente
encabezado['loja']FJT_LOJATienda
encabezado['cobrad']FJT_COBRADCobrador
encabezado['recprov']FJT_RECPRVRecibo Provisorio
Expandir
titleObjeto Titulos
Expandir
titleObjeto Encabezado
Nombre en JsonEquivalenciaDescripción
encabezadotitulos[nX]['seriebranch']FJTE1_SERIEFILIALSerie del reciboFilial
titulos[nX]encabezado['recibobillnumber']FJTE1_RECIBONUMERONumero de reciboTitulo
titulos[nX]encabezado['emissatype']FJTE1_EMISSATIPOEmisiónTipo de Titulo
titulos[nX]encabezado['natureactualduedt']FJTE1_NATUREVENCREACobradorVencimiento Real
titulos[nX]encabezado['clientcurrency']FJTE1_CLIENTMOEDAClienteMoneda
titulos[nX]encabezado['lojaunit']FJTE1_LOJATienda
encabezadotitulos['cobrad']FJT_COBRADCobradorencabezadonX]['recprovinstallment']FJTE1_RECPRVRecibo Provisorio
Expandir
titleObjeto Titulos
Descripción
PARCELACuotaNombre en JsonEquivalencia
titulos[nX]['branchbillvalue']E1_FILIALVALORFilialValor
titulos[nX]['billnumbercustomer']E1_NUMEROCLIENTENumero de TituloCliente
titulos[nX]['typeclass']E1_TIPONATUREZTipo de TituloModalidad
titulos[nX]['actualduedtcustname']E1A1_VENCREANOMENombre del clienteVencimiento Real
titulos[nX]['currencybalance']E1_MOEDASALDOMonedaSaldo del titulo
titulos[nX]['unitprefix']E1_LOJAPREFIXOTiendaPrefijo del titulo
titulos[nX]['installmentissuedt']E1_PARCELAEMISSAOCuotaFecha de emisión
titulos[nX]['billvaluewriteoffne']E1_VALORVALLIQValor neto de la baja    
titulos[nX]['customerdiscount']E1_CLIENTEDESCONTClienteDescuento
titulos[nX]['classinterest']E1_NATUREZJUROSModalidadIntereses
titulos[nX]['custnamefine']A1E1_NOMEMULTANombre del clienteMultas
titulos[nX]['balanceseries']E1_SALDOSERIESaldo del tituloSerie 
titulos[nX]['prefixorigin']E1_PREFIXOORIGEMPrefijo Ruta origen del titulo
titulos[nX]['issuedtrecno']R_E_C_N_O
E1_EMISSAOFecha de emisióntitulos[nX]['writeoffneclient']E1_VALLIQCLIENTEClienteValor neto de la baja    
titulos[nX]['discountoriginbranch']E1_DESCONTFILORIGDescuentoFilial Original
titulos[nX]['interestpaycondf2']E1F2_JUROSCONDInteresesCondicion SF2
titulos[nX]['finepaycondf1']E1F1_MULTACONDMultasCondición SF1
titulos[nX]['seriesserie2f2']E1F2_SERIESERIE2Serie Serie SF2
titulos[nX]['originserie2f1']E1F1_ORIGEMSERIE2Serie SF1Ruta origen del titulo
titulos[nX]['recnopaymentcondition']
R_E_C_N_OCondición de pago
titulos[nX]['clientcobrar']E1_CLIENTE
ClienteMonto a cobrar en Numeric
titulos[nX]['originbranchbillvalueString']E1_FILORIG
Toyal o saldo (Dependiendo la pantalla)
Filial Originaltitulos[nX]['paycondf2balanceString']F2_CONDCondicion SF2
Saldo en String
titulos[nX]['paycondf1cobrarString']F1_CONDCondición SF1
Monto a cobrar en String
titulos[nX]['serie2f2discountString']F2_SERIE2Serie SF2
Descuento del titulo en String
titulos[nX]['serie2f1interestString']F1_SERIE2
Serie SF1Interes del titulo en String
titulos[nX]['paymentconditionfineString']
Condición de pagoMulta del titulo en String
titulos[nX]['cobrarquickSelected']
Monto a cobrar en NumericTitulo seleccionado en el GRID
titulos[nX]['billvalueStringreasonBx']
Toyal o saldo (Dependiendo la pantalla)Motivos de baja
titulos[nX]['balanceStringpeso']Saldo en String
Total en moneda
Expandir
titleObjeto monedas
titulosreasonBxMotivos baja
Nombre en JsonDescripción
monedastitulos[nX]['cobrarStringcoin']Monto a cobrar en StringNombre Moneda
monedastitulos[nX]['discountStringtasa']Descuento del titulo en StringTasa
monedastitulos[nX]['interestStringreceived']Cantidad recibida en esta moenda
monedasInteres del titulo en Stringtitulos[nX]['fineStringbalance']Multa del titulo Saldo en StringNumeric
titulosmonedas[nX]['quickSelectedtype']Titulo seleccionado en el GRIDNombre de Moneda
monedas[nX]['
moneda']
Numero de
Moneda
titulosmonedas[nX]['pesostringTasa']Total en moneda
Expandir
titleObjeto monedas
Tasa de moneda
Nombre en JsonDescripción
monedas[nX]['coinbalanceString']Nombre MonedaSaldo en String
monedas[nX]['tasa']Tasamonedas[nX]['received'receivedString']Cantidad recibida en esta moenda
monedas[nX]['balance']Saldo en Numeric
Expandir
titleObjeto formas de pago
monedasmoneda
Nombre en JsonDescripción
formaspagomonedas[nX]['typeproperty']Nombre de Moneda
la propiedad (Trae el mismo nombre registrado en la SX3)
formaspago[nX]['
value']
Numero de Moneda
Valor de la propiedad
Valor de la propiedad
Expandir
titleObjeto parametros
Nombre en JsonDescripción
paramsmonedas[nX]['stringTasamv_par01']Tasa de monedaValor del parametro 01

params

monedas

[nX]['

balanceString

mv_par01']

Saldo en String

.

.

.

params

monedas

[nX]['

receivedString

mv_parxx']

Cantidad recibida en esta moenda
Expandir
titleObjeto formas de pago
Nombre en JsonDescripción
formaspago[nX]['property']Nombre de la propiedad (Trae el mismo nombre registrado en la SX3)
formaspago[nX]['value']

PARAMIXB[2]LTrue (.T.) si es momento del guardado y False (.F.) si es configuración de la vista
Respuesta:

Descripción del objeto de respuesta cuando en el Json la bandera PARAMIXB[2] es Verdadera (.T.) y la bandera ["recalculate" ]  este como falsa (.F.)

Expandir
titleObjeto
de respuesta

Nombre

Tipo

Descripción

Obligatorio

oJson['
label']
Valor del parametro 01

params[nX]['mv_par01']

.

.

.

params[nX]['mv_parxx']

PARAMIXB[2]LTrue (.T.) si es momento del guardado y False (.F.) si es configuración de la vista
Punto de entrada:F998VALBX
L

Nombre del campo nuevo a mostrar.

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

Descripción del objeto de respuesta cuando en el Json la bandera PARAMIXB[2]

Respuesta:

Objeto cuando en el Json la bandera PARAMIXB[2]) es Verdadera (.T.) y la bandera ["recalculate" ]   este como falsa True (.FT.)

Expandir
titleObjeto de respuesta
Obligatoriolabel
Nombre en Json

Tipo

Descripción
oJson['descuento']L

Nombre del campo nuevo a mostrar.

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

Descripción del objeto cuando en el Json la bandera PARAMIXB[2] es Verdadera (.T.) y la bandera ["recalculate" ] este como True (.T.)

Expandir
titleObjeto de respuesta
Nombre en JsonDescripción
['descuento']Valor que sera mostrado en el campo descuento
['residuo']Valor que sera mostrado como total del titulo (Despues de descuentos, multa e intereses)
['multa']Valor que sera mostrado como multa del titulo
['interes']Valor que sera mostrado como interes del titulo
Valor que sera mostrado en el campo descuento
oJson['residuo']Valor que sera mostrado como total del titulo (Despues de descuentos, multa e intereses)
oJson['multa']Valor que sera mostrado como multa del titulo
oJson['interes']Valor que sera mostrado como interes del titulo

Descripción de los objetos de respues en el Json cuando la bandera PARAMIXB[2] sea Falsa (.F.) 

N/A

Bloco de código
languageactionscript3
titleEjemplo de PE F998VALBX
linenumberstrue
collapsetrue
#Include 'Protheus.ch'

User Function F998VALBX()

    Local oResponse := JsonObject():New() as Object
    
    IF PARAMIXB[2]  //Vista
        IF PARAMIXB[1]['recalculate']
            oResponse:=setValues(PARAMIXB[1])
        ELSE
	        oResponse['label']              := "% Descuento por pronto pago"        //Nombre del campo nuevo a mostrar.
            oResponse['readonlyDiscount']   := .T.                  //Deshabilitar o habilitar el campo de descuento.
            oResponse['readonlyInterest']   := .T.                  //Deshabilitar o habilitar el campo de Intereses.
    
Bloco de código
languageactionscript3
titleEjemplo de PE F998VALBX
linenumberstrue
collapsetrue
#Include 'Protheus.ch'

User Function F998VALBX()

    Local oResponse := JsonObject():New() as Object
    
    IF PARAMIXB[2]  //Vista 
        oResponse['labelreadonlyFine']       :=  .T.     := "% Descuento por pronto pago"        //Nombre delDeshabilitar o habilitar el campo nuevode a mostrarMulta.
            oResponse['readonlyDiscountdisabledInput']      := .T.   F.//isDisable(PARAMIXB[1]) //Deshabilitar o habilitar el input nuevo
            oResponse['maxDiscount']   //Deshabilitar o habilitar el campo de descuento.
        oResponse['readonlyInterest']   := .T.    := 50//GetLimite(PARAMIXB[1]) //Se informa el descuento permitido debe tener un rango mayor a 0 y menor a 100
            oResponse['warningMaxDiscount']  //Deshabilitar o habilitar el campo de Intereses.
        oResponse['readonlyFine']       := .T.           := "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
       //Deshabilitar oENDIF
 habilitar el campo deELSE Multa.
        oResponse['disabledInput'] SaveData(PARAMIXB[1]) //Grabación
     := .T.//Deshabilitar o habilitar el input nuevo
        oResponse['maxDiscount']        := 50 //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(PARAMIXB[1]) //Grabación
    ENDIF

Return oResponseENDIF

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 

04. ASUNTOS RELACIONADOS