¿Cómo puedo hacer que un campo este bloqueado en datawindow y se habilite mediante otro campo?

Por ej tengo un window abm base de donde heredo para mi ventana ya sea de compras o ventas! Mi problema es que yo en mi venta puedo tener pagos a cuotas lo cual tengo un datawindows de cuotas, y en mi venta cab. Una forma de pago. Lo que quiero que haga es que al darle yo a mi forma de pago credito se habilite mi campo cantidad cuotas que tambien tengo en venta cab. Y que al poner la cantidad me aparezca el datawindow de cuotas con la cantidad de cuotas y las fechas de vencimiento corrrespodiente a cada nro de cuota. ¿Nose cómo le hago la programacion?

1

1 Respuesta

18.950 pts. Programador en Power Builder

Para bloquear un campo en un datawindow se modifica la propiedad 'PROTECT'. De las siguientes maneras:

1.- Para modificar esta propiedad puedes hacer desde el painter del objeto datawindow donde puedes colocar la condición.

En el objeto datawindow: seleccionas la columna que desea bloquear, en las propiedades, en la ficha general, propiedad 'PROTECT', click en recuadrito al costado, escribes la condición; Ejm:

if (forma_pago = 'CREDITO',0,1)

 //instrucción if(condición,true,false)

2.- También puedes modificar la propiedad 'PROTECT' en tu código.

//usando modify
dw_1.Modify("campo.Protect=1")
//otra manera
dw_1.Object.campo.Protect = 1
 Por ejemplo en el evento itemchanged colocas lo siguiente:
if getcolumname() = 'forma_pago' then 
   if data = 'CREDITO' then
      this.modify ("cant_cuotas.Protect=0")
   else
      this.modify ("cant_cuotas.Protect=1")
   end if
end if
Saludos desde Lima - Perú.

en el itemchanged de mi dw_datos cabecera le hago eso vd?

es que me da error de sintaxis y me dice 

unknown fuction name: getcolumname

condition for it statement must be a boolean

sintax error

así le codifique en intemchanged

if getcolumname() = 'forma_pago' then
     if dw_datos = 'CRÉDITO' then

         this.modify ("cantidad.Protect=0");

     else

        this.modify ("cantidad.Protect=1");

     end if;

end if;

dw_datos es el nombre de cabecera!!

Disculpa fue un error de digitación, la función es 'getcolumnname( )'.

El evento itemchanged tiene los siguientes argumentos:

Itemchanged (long row, dwobject dwo, string data)

- row (tipo de dato long): El número de la fila que contiene el elemento cuyo valor se va a cambiar.

- Dwo (tipo DWObject ): Una referencia a la columna que contiene el elemento cuyo valor se ha cambiado. DWO es una referencia al control de la columna, no el nombre de la columna.

- Data (tipo string) : Contiene los nuevos datos que el usuario haya especificado para el elemento.

//Verifica que el foco esté en la columna de condición que es tu forma de pago
//suponiendo que el nombre de tu columna sea 'forma_pago' 
if getcolumnname() = 'forma_pago' then
   //obtiene el nuevo valor seleccionado por el usuario
   //para tu caso cuando seleccionó crédito, el valor debe se tal como especificas 
   //en tu BD para crédito, puede ser una 'C', 'CRE', etc para cuando halla seleccionado
   //la opción credito
   if data = 'CREDITO' then
      //aquí desbloqueamos el campo de la cantidad de cuotas("cant_cuotas") o como se llame segun tu BD
      this.modify ("cant_cuotas.Protect=0")
   else
      //aquí desbloqueamos el campo
      this.modify ("cant_cuotas.Protect=1")
   end if
end if

disculpa es que me sale bloqueado el campo y cuando le doy crédito no me habilita el campo cantidad. te doy una aclaración de lo que estoy haciendo

en mi dw_datos que se llama mi ventana cabecera en donde le llamo a mi abm_ventas cabecera. bueno tbn tengo mi dw_abm_ventas hay tengo un atributo que forma de pago que le puse su propiedad radiobuttons y un atributo que es cantidad que es la cantidad cuotas.

en el atributo cantidad le coloque( if ( forma_pago = 'credito',0,1))

y en el itemchanged

string data
if GetColumnName() = 'forma_pago' then
if data= 'crédito' then

this.modify ('cantidad.Protect=0')

 else

this.modify ('cantidad.Protect=1')

end if;

end if;

y me bloquea el campo cantidad si pero no me desbloquea cuando le doy crédito ni contado!!no se xq?

Los valores para el nombre de los campos 'forma_pago' y para el valor de la forma de pago 'CRÉDITO' son de ejemplo, tienes que colocar los valores de tu Base de Datos.

- No es necesario programar las dos maneras de bloquear un campo: con la función modify en el evento itemchanged o modificando la propiedad PROTECT en el objeto datawindow.

* Si te está bloqueando el campo, es porque no se está cumpliendo la condición:

//Está es la condición; el valor 'CRE' es un ejemplo, tienes que colocar el
//Valor de los radiobuttons, segun lo que colocaste en 'DATA VALUE' de los radiobuttons
//ten en cuenta que si lleva tilde, si es uno(1), una ce(C),con minusculas, con mayusculas,etc
if data = 'CRE' then /*condición*/
  this.modify ('cantidad.Protect=0')
else
 //se ejecuta esto porque no se está cunpliendo con la condición
  this.modify ('cantidad.Protect=1') 
end if

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas