Ingreso de datos en DW

Tengo el siguiente problema que espero puedas orientarme cómo solucionarlo. Tengo un mantenedor de código y descripción en un DW, el problema está en que necesito que el código sólo se habilite para ingreso o modificación cuando el usuario seleccione agregar nuevo registro, ya que de otra forma significa que el código ya fue grabado y como es clave de la tabla no debiese poder modificarlo. Eso es. Cualquier aclaración me la pides ¿okis?.

1 respuesta

Respuesta
1
Esto es simple pero puede volverse complicado en la función de tu propio planteamiento, existen varias propiedades de los objetos que están integrados en un datawindow object, (como ya habrás adivinidado esto se hace a nivel del datawindow object), por ejemplo, una propiedad puede ser el protect, la cual recibe un valor 1 o 0 dependiendo de si esta encendida o apagada, o bien si la columna se encuentra protegida o no.
Esto lo haces por medio de código utilizando la función MODIFY() del datawindow control, o bien directamente haciendo mención al propio objeto. Digamos que tienes una columna de nombre CÓDIGO, y en ella colocas el valor del código que representa el registro y a su vez es parte de tu llave primaria, seguro que solo necesitas escribir en ella en tiempo de inserción, y nada más, entonces cuando pulses el botón de NUEVO, simplemente colocas el valor de la propiedad PROTECTED en 0 y esta columna permitirá la edición. Al momento de presionar el botón grabar, o cancelar, vuelves el estado de dicha propiedad a 1, o bien protegido.
El efecto seguramente sera el que buscas.
Por otro lado, existe otra propiedad que funciona muy parecido, y es la llamada TABSEQUENCE, o bien TABORDER, esta propiedad tiene un valor mayor a cero, que va de 10 en 10, cuando permite la edición del valor que en ella se encuentre, de lo contrario si el valor de dicha propiedad es 0, significa que la columna no puede ser editada.
La forma de hacer la actualización de cualquiera de las 2 opciones que te comento sera de las 2 siguientes maneras.
Por un lado la forma directa.
dw_1.object.codigo.TabSequence = 0
o bien utilizando una funcion llamada MODIFY()
dw_1.modify("codigo.TabSequence = 0")
De cualquiera de las dos formas es cambiado el valor, sin embargo personalmente me inclino por la primera, por cierto la función MODIFY devuelve un valor, indicando el éxito del cambio.
Al igual que lo anterior para cambiar el valor de la propiedad, protected sera:
dw_1.object.codigo.protected = 1
o bien
dw_1.modify("codigo.protected = 1")
Primero que todo muchas gracias por responderme, pero ya probé lo que me comentas (usando el protected), y el problema que se me produce es que no me desprotege sólo el código de nueva fila sino que toda la columna código por lo que si el usuario se para sobre un código en otra fila puede modificarlo (aunque esto no afecta a la tabla porque al momento de grabar uso el código original de las filas en el update), pero igual visualmente el usuario va a pensar que el nuevo código es el que modificó y esa no es la idea... Espero haberme explicado bien.
Saludos
Karla
No entendí muy bien, pero te puedo proponer otra solución en caso que esta no haya funcionado.
Esto va a nivel de datawindow object,
la idea es utilizar los recursos propios del datawindow, por ejemplo existe una función que me reporta si el registro o fila del datawindow es nuevo o no. la cual es ISROWNEW()
Con esta función puedo controlar el bloqueo o desbloqueo de uno o varios campos y dar el efecto que buscas, o sea, que en tiempo de alta, solo habilite ciertos campos, y en tiempo de modificación otros distintos.
Para dar el efecto buscado.
Vas a el datawindowobject, y luego te posicionas en la columna a bloquear, buscas la propiedad protect
Y en ella colocas en la parte donde puedes escribir.
if(IsRowNew(), 0, 1)
El efecto sera el que buscas,
por cierto la propiedad que te propuse que modificaras era PROTECTED sin embargo no es correcto, lo correcto es PROTECT.
Ya, me resultó el bloqueo y desbloqueo respectivo PERO mi problema ahora es que si digita algo sobre la columna bloqueada al salirse de ella lo ingresado modifica la columna sobre la que estaba posicionado. Ejemplo: está sobre la descripción de la tercera fila y hace click en el código de la 1ª fila... como está bloqueada dicha columna no se modifica con lo ingresado pero al cambiarse a otra ya sea con tab o haciendo click en otro lugar lo que ingresó en la columna bloqueada queda donde estaba posicionado al principio, en el ejemplo módica la descripción de la 3ª fila... ojalá me hayas entendido.. gracias
Hice exactamente lo que me dijiste lo del isrownew y nunca me bloquea la columna...
Desde el punto de vista bloqueado, cualquier columna que tenga una situación de bloqueada o bien protegida, no permite la modificación de esta, por medio del teclado, sin embargo si por medios programáticos, me da la impresión que has de tener un procedimiento de actualización de valores en alguno de los eventos, o bien antes de grabar las modificaciones, en donde actualiza según la fila activa, por lo que definitivamente puede esta invalidando el procedimiento de bloqueo, mi recomendación es que revises primero tu código y los eventos que corresponden al datawindow y/o la grabación de datos.
Espero esto pueda ser de utilidad para solucionar tu problema
Ya no tengo que mostrar el código, solo pedir descripción, así que no tengo que insistir en lo del bloqueo de columna, por lo menos por ahora. De todas formas muchas gracias por tu tiempo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas