Cuándo utilizar PROP:AcceptAll

Artículos, debates sobre herramientas.
Responder
Avatar de Usuario
DanielRuzo
Al nivel de RZ
Mensajes: 124
Registrado: Dom Feb 06, 2011 7:45 pm
Ubicación: Uruguay
Contactar:

Cuándo utilizar PROP:AcceptAll

Mensaje por DanielRuzo » Vie Feb 11, 2011 3:44 pm

Hace algunos días un usuario que daba sus primeros pasos con Clarion planteó un problema que estaba relacionado con el uso de la propiedad AcceptAll. Algunos usuarios nuevos tal vez no conozcan esta propiedad, y los que la conocemos algunas veces dudamos sobre cuándo y cómo usarla.

Veamos un ejemplo. Tenemos un formulario para pago de gastos. La forma de pago más usada es en efectivo, pero además se puede pagar con cheques, conformes, o compensar contra un rubro de la contabilidad donde ya se hizo la previsión del gasto. Tenemos un control para seleccionar "Efectivo" u "Otros" como forma de pago que en el momento de abrir el formulario lo cargamos como "Efectivo". Tenemos además otro control en donde se selecciona la forma de compensación cuando la forma de pago no sea "Efectivo". Allí se puede seleccionar "Cheque", "Conforme" o "Rubro". Este control se inicializa como DISABLED y se pasará a ENABLED cuando en la forma de pago se seleccione "Otros".

Como además de "Efectivo" la forma de pago más habitual es con cheque, la intención es que cuando el usuario seleccione "Otros" en la forma de pago automáticamente se tome "Cheques" como la forma de compensación. Por lo tanto en el EVENT:Accepted del control para la forma de pago escribimos el siguiente código:

Código: Seleccionar todo

IF FormaPago = FormaPago:Efectivo
  CLEAR(TipoCompensacion)
ELSE
  ENABLE(?TipoCompensacion)
  TipoCompensacion = TipoCompensacion:Cheque
END
¿Qué problemas tenemos con este código? Pues que si el usuario en forma de pago selecciona "Otros" y en tipo de compensación selecciona "Conformes" o "Rubros" al revisar la base de datos nos vamos a encontrar con que la transacción quedó registrada como si se hubiera pagado con un cheque. ¿Cómo sucedió esto? Pues que en el momento de aceptar el formulario, automáticamente se genera un EVENT:Accepted para todos los controles para verificar que algún control por el cual el usuario no pasó no haya quedado en un estado no válido. Al ejecutar el código ingresado para este evento en la forma de pago, como la forma de pago no era "Efectivo" forzó la forma de compensación a "Cheque".

Así que nuestro código correcto para el EVENT:Accepted de la forma de pago deberá ser:

Código: Seleccionar todo

IF FormaPago = FormaPago:Efectivo
  CLEAR(TipoCompensacion)
ELSE
  IF NOT 0{PROP:AcceptAll}
    ENABLE(?TipoCompensacion)
    TipoCompensacion = TipoCompensacion:Cheque
  END
END
De esta manera, la asignación de "Cheque" como forma de compensación se hará únicamente cuando el usuario realmente cambie la forma de pago.

Dejo planteado un debate para la comunidad: ¿En qué otra situación corresponde utilizar la propiedad AcceptAll de la ventana?
Última edición por DanielRuzo el Lun Feb 14, 2011 2:00 pm, editado 1 vez en total.
¡Saludos!

Daniel Ruzo
www.amazingGUI.com

Yo creo en la reencarnación:
antes tenía una vida y ahora soy programador


luizmarin
Al nivel de RZ
Mensajes: 161
Registrado: Dom Feb 06, 2011 2:36 am
Contactar:

Re: Cuándo utilizar PROP:AcceptAll

Mensaje por luizmarin » Sab Feb 12, 2011 12:18 pm

he utilizado para limitar la repeticion de alguno embed de un evento Accepted , o sea, para evitar uq un codigo embeb associado a un evento accepted sea ejecutado de nuevo cuando cerrar la ventana (modo non-stop) hago asi:


if ~ 0 {Prop:AcceptAll}
! mi calculo, codigo, etc
End

o

If self.request = insertrecord Then
If thiswindow{prop:acceptall} = 0 then
CLI:TipoPessoa = 'Jurídica'
End
End
Display
Luiz Marin

Saludos desde Brazil...

www.olabombinhas.com.br

Avatar de Usuario
DanielRuzo
Al nivel de RZ
Mensajes: 124
Registrado: Dom Feb 06, 2011 7:45 pm
Ubicación: Uruguay
Contactar:

Re: Cuándo utilizar PROP:AcceptAll

Mensaje por DanielRuzo » Lun Feb 14, 2011 2:12 pm

Hola, Luiz.

En tu ejemplo, la pregunta que me surge es qué sucede si tu usuario no pasa por esos controles. Aparentemente, tus cálculos quedan sin ejecutar. Salvo que esos controles estén como "Required" o que el resultado de los cálculos ya tenga un valor por defecto.
¡Saludos!

Daniel Ruzo
www.amazingGUI.com

Yo creo en la reencarnación:
antes tenía una vida y ahora soy programador

luizmarin
Al nivel de RZ
Mensajes: 161
Registrado: Dom Feb 06, 2011 2:36 am
Contactar:

Re: Cuándo utilizar PROP:AcceptAll

Mensaje por luizmarin » Lun Feb 14, 2011 9:59 pm

si daniel,

en ese caso los valores ya fueran calculados. Que pasa es que sin acceptall ally, al cerrar la ventana el calcula de nuevo y paf...

puede que otra cosa seria lo mejor, pero asi lo aprendi hace años y no me actualise...
Luiz Marin

Saludos desde Brazil...

www.olabombinhas.com.br


Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 20 invitados