Ayuda porfa

722 views
Skip to first unread message

Fati Villa

unread,
Dec 13, 2012, 9:24:13 AM12/13/12
to powerbui...@googlegroups.com
Amigos de nuevo estoy estancada en una bobada, a ver si pudieran darme una mano.....
tengo una tabla de tipo cabecera detalle, en el detalle tengo una lista de productos que voy ingresando, mediante un procedimiento controlo que solo ciertas descripciones de
productos sea EDITABLE... hasta alli todo bien...
Lo que quisiera es que cuando el usario ingrese el producto que puede editar lo pinte de un cierto COLOR, para que el pueda identificar los EDITABLES de los NO.
El problema de cuando pinto es que me pinta tooooooda la columna y NO solo la fila del EDITABLE, les adjunto un ejemplo....
y el scrip que utilizo

decimal ld_prod, ld_producto, ld_sucu
if this.GetColumnName ( )='descripcion'  then
    ld_prod=this.object.producto[row]
    ld_sucu=gnv_global.ii_sucursal
           /*desde aqui solo utilizo para llamar al SP q me controla si es editable o NO, en esto sin problemas*/
            select PON_PRODUCTO
            into :ld_producto
            from SP_AJUSTE_SERVICIOS (:ld_prod, :ld_sucu)
            using sqlca;
    if this.object.producto[row]<>ld_producto then
        this.object.descripcion.protect=1 /*Si no es EDITABLE lo protejo*/
    else
        this.Modify('descripcion.Background.Color=' + string(RGB(199,233,232)))  /*aqui es DONDE TENGO QUE DECIRLE Q CAMBIE EL COLOR*/
         /*Pero como el modify hago de la columna DESCRIPCION obviamente me cambia de color toooooda la columna,
         necesito un codigo que sea algo como this.Modify('descripcion[Row].Background.Color=' + string(RGB(199,233,232))) , que
         claro esto me da un error */

           
    end if
end if

Desde ya gracias... Espero me haya explicado, si no me lo hacen saber.
PD.: en las imagenes el produto editable seria el 87589.

imag1.JPG
imag2.JPG

Nicolás Luis Wong Sebastián

unread,
Dec 13, 2012, 9:32:25 AM12/13/12
to powerbui...@googlegroups.com
Vas a tener que al momento de jalar el producto volver a consultar en la tabla si es editable o no.....
o como haces para saber que es o no editable?

agregale a tu dw un computed y ahi le pasas el flag sis es editable o no.....    y despues en la propiedad de la columna haces que cambie de color...

Saludos;



--
Has recibido este mensaje porque estás suscrito al grupo "PowerBuilder - Ica" de Grupos de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a powerbui...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a powerbuilder-i...@googlegroups.com
Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/powerbuilder-ica?hl=es.



--
Nicolás Luis Wong S.

Fati Villa

unread,
Dec 13, 2012, 9:35:51 AM12/13/12
to powerbui...@googlegroups.com
Eso lo hago en un procedimiento donde si un producto reune ciertos requisitos sea editables....
Necesito hacerlo con scrip y no en las propiedades... ya que en las propiedades no puedo llamar al procedimiento este.
Atte.
Lic. Fatima Villamayor
Analista de Sistemas Informáticos.

Otto Maldonado

unread,
Dec 13, 2012, 10:06:57 AM12/13/12
to powerbui...@googlegroups.com
cuales son los requisitos del producto para ser editable ?

Nicolás Luis Wong Sebastián

unread,
Dec 13, 2012, 10:08:17 AM12/13/12
to powerbui...@googlegroups.com
encontre esto...   revisalo, parece que es lo que necesitas....

Describir y modificar las funciones

Para leer y modificar los atributos de un objeto DataWindow, que llamamosdescribe () y modificar () función. Describir () devuelve el valor del atributo especificado. Por ejemplo, el comando retorna siguientes si el DataWindow se encuentra en el modo de consulta o no.

Cadena ls_QueryModeCheck 
ls_QueryModeCheck = & 
dw_product.Describe ("datawindow.querymode")

El primer valor del argumento es el nombre del objeto y el segundo es el nombre del atributo. Hay algunos atributos que son aplicables para el objeto DataWindow conjunto. Por ejemplo, querymode, vista preliminar. En ese caso, el primer argumento es, literalmente, "DataWindow". Oye, ¿quieres saber si la fuente de la "product_description" campo está en cursiva o no, entonces tenemos que sustituir "DataWindow" con el nombre de la columna ", product_description" en el código anterior.

Cadena ls_FontItalicCheck 
ls_FontItalicCheck = dw_product.Describe (& 
"product_description.font.italic")

Al hacer frente a la columna, puede especificar el número de columna en lugar del nombre de columna. Por ejemplo, en el "dw_product" control DataWindow, la segunda columna es "product_description", la llamada de función sería:

Cadena ls_FontItalicCheck 
ls_FontItalicCheck = & 
dw_product.Describe ("# 2.font.italic")

Cuando se utiliza el número de columna, debe anteponer al número de columna con el símbolo como se muestra en el ejemplo anterior. El valor de retorno de describir () es siempre un tipo de datos de cadena. Por lo tanto, cuando usted está esperando un tipo de datos numérico o de otro tipo, es necesario convertirlo en el tipo de datos deseado.

La corrección del argumento no se comprueba en tiempo de compilación. Si hay algo mal con el argumento, Describir devuelve "".

Utilizamos Modificar () función para cambiar el valor de un atributo. El código siguiente establece el DataWindow en el modo de consulta:

dw_product.Modify ("DataWindow.QueryMode = yes")

El código siguiente cambia el campo product_balance:

dw_product.Modify ("product_balance.Format = '[red] & 
$ #, # # #, # # 0,00 ")

El siguiente código establece el argumento de recuperación de un informe anidado.

ls_Arg = ". Nest_Arguments = ((~" "+ & 
string (lEmpIdToPrint) + "~")) " 
dw_print.Modify ("r_emp_details" + lStrArg) 
dw_print.Modify ("+" r_emp_vacations lStrArg) 
dw_print.Modify ("r_emp_wages "+ lStrArg) 
dw_print.Modify ("r_emp_docs" + lStrArg)

El ejemplo anterior es tomada del proyecto de Nómina. En la ventana de entrada de datos empleado tenemos cuatro DataWindows. Ya que no podemos imprimir todos esos cuatro DataWindows juntos como podemos ver en la ventana, estamos usando un DataWindow compuesto que tiene cuatro DataWindows. Cada una de las DataWindow tiene un argumento de recuperación de la Identificación del empleado.

El argumento de la recuperación de un DataWindow anidado no se puede especificar con una normal Retrieve () función. Por lo tanto, tenemos que usar Modify ()función para establecer el argumento de recuperación de cada una de las DataWindow anidada. Para ello, es necesario especificar el nombre y DataWindow objeto anidado " . Nest_Arguments "la propiedad y el valor. Estamos usar tilde signo "~" utilizar caracteres especiales en las citas. Por ejemplo, si desea utilizar un carácter de tabulación, es necesario utilizar "~ t". Del mismo modo para representar una cita doble en una cita doble, es necesario utilizar "~" "tilde antes de la cita.

No está limitado al uso de un valor constante en el Modificar () función. Se puede asignar un valor a través de una expresión que se evalúa PowerBuilder durante la ejecución, en lugar de tener que asignar directamente un valor. La siguiente es la sintaxis:

'DefaultValue ~ t DataWindowExpression'

DefaultValueThe valor para asignar la propiedad si DataWindowExpression no devuelve un valor válido. Tenga en cuenta que usted debe separar el valor por defecto y expresión DataWindow con un carácter de tabulación.

dw_product.Modify ("product_balance.Color = '0 ~ t & 
if ("product_balance <product_reorder_level, 255,0) '")

Los cambios de color por encima de la declaración de product_balance a rojo si el saldo es menor que el nivel de pedido, de lo contrario, el color se establece en negro.

dw_wages.Modify ("effective_date.TabSequence = 0")

En el ejemplo anterior, estamos estableciendo la secuencia de tabulación de la columna EFFECTIVE_DATE a cero. Esto significa que el usuario no puede editar este campo. Eso está bien. Pero, si desea permitir al usuario editar el campo en los nuevos registros, pero desea proteger en los registros existentes, la afirmación anterior no funcionará. Tenemos que utilizar una expresión.

dw_wages.Modify ("gross_wages.Protect = '1 ~ TIF (y 
IsRowNew (), 0,1) '")

Cuando se establece el orden de tabulación de un campo, se aplica al campo en todos los registros. En cambio, si se utiliza proteger atributo, se puede aplicar a un nivel récord. En el ejemplo anterior, estamos protegiendo el campo si no es un nuevo récord. Los dos ejemplos anteriores sería útil para usted en el "Proyecto de Nómina" próximo proyecto, que necesita el código de inicio.

dw_product.Modify ("product_balance.Color = '0 ~ t" + + 
"if (product_balance <product_reorder_level, 255,0) '" + + 
"product_balance.Font.Weight = '400 ~ t" + + 
"if (product_balance < product_reorder_level, y 
700 400) '"+ &" product_balance.Alignment = '1 ~ t "+ + 
"if (product_balance <product_reorder_level, 0,1) '")

Usted no está limitado a una expresión por modificar () función. Puede utilizar varias expresiones separadas por un espacio entre cada expresión. En la declaración anterior estamos creando la product_balance al color rojo en negrita y alineado a la izquierda. Hemos utilizado tres expresiones separadas por un espacio.

DataWindow después de varias expresiones Modificar () función.

También puede utilizar la sentencia CREATE para agregar objetos a la DataWindow en tiempo de ejecución. En el ejemplo siguiente se toma de la ayuda, que añade una elipse a la DataWindow.

dw_1.Modify ("CREATE elipse (banda = detail x = '1229 '" + + 
"y = 0" height = 112 "width = '739 'brush.hatch = '6'" + + 
"name = oval2" brush.color = '65535 'pen.style = '0' "+ + 
"Pen.Width = '10 'pen.color = '0' background.mode = '1 '")

También puede destory los elementos de la DataWindow using Destory.

dw_1.Modify ("DESTRUIR oval2")

Destrucción de una columna por su nombre no elimina los datos de la columna de la memoria intermedia. Simplemente elimina la columna de la pantalla.

dw_1.Modify ("DESTRUIR emp_id")

Si desea eliminar los datos de la columna también desde el buffer, incluir la columna de palabras clave.

dw_1.Modify ("emp_id DESTRUIR LA COLUMNA")

Oscar Camargo Rodriguez

unread,
Dec 13, 2012, 10:28:29 AM12/13/12
to powerbui...@googlegroups.com
Asu toda una vida escriben jajajaja
Bueno yo haría esto
En el query de tu dw agrega una columna

(select PON_PRODUCTO
            into :ld_producto
            from SP_AJUSTE_SERVICIOS (:ld_prod, :ld_sucu) AS FLAG_EDIT             (no se que valores starás retornando 1 . 0 / V.F siempre tiene que retornar un valor)

Lluego en modo de diseño del datawindows haz lo siguiente:
Selecciona el campo y en la pestaña General de las propiedades en el Protect pon "IF (FLAG_EDIT = F, 1,0)"
luego en la pestaña font en la propiedad Background Color IF ( FLAG_EDIT = F , RGB(1,2,3) (color ROJO), RGB(4,5,6)(Color Negro) )

Esto es todo lo que haría... Me confirmas si utilizaste eso.. SENKIU!
330.gif

Juan Valdez

unread,
Dec 13, 2012, 10:30:00 AM12/13/12
to powerbui...@googlegroups.com
En tu DW detalle, da de alta un campo, por ejemplo, cambia_color INT (si estas usando un DW external, solo agrega la columna, si usas SQL Select o SP, agregalo en el DW Source), luego, en las propiedades de la columna programa en al background color la expresion de IF (cambia_color = 0, Color Normal, Color Especial)
 
La idea es, que cuando te capuren la clave del articulo, consultes si es editable o no via la SP, con el valor que te regrese la SP, ponselo en la columna cambia_Color.
 
Creo que por ahi lo podras hacer... bueno, eso lo hago yo sobre PB 10.5
 
Espero te sirva.

Atte. Juan Antonio Valdez Medrano
LinkedIn. http://lnkd.in/By5bx8

 

Date: Thu, 13 Dec 2012 10:24:13 -0400
Subject: [PowerBuilder-ICA:1912] Ayuda porfa
From: fati...@gmail.com
To: powerbui...@googlegroups.com

CARLOS ALBERTO TORRES CAMARGO

unread,
Dec 13, 2012, 11:03:20 AM12/13/12
to powerbui...@googlegroups.com
bueno te explico lo que hago generalmente, espero te sea util

tienes tu procedimeinto y puedes identificar si la fila es editable?
si es asi es muy facil de solucionar tu requerimiento solo asegurate que el select del datawindow tenga ese campo que te indica si es editable o no eso es lo que se conoce como flag entonces ahora en modo edicion selecciona todos los campos que deseas que cambien el color o fondo
entonces si es el fondo te vas al tab background
si es el text te vas al tab font

por ejemplo si quieres cambiar el color del texto

te vas al tab  font e ingresas a la propiedad text color (click en el boton)

ahi escribes el script de tu color con la condicion de la bandera (   if( falg = 1, RGB(colorflag), RGB(otro color)    )

y listo cuando la fila tenga el flag encedido cambiara su color o fondo dependiente donde apliques el script
espero te sea util aclaro que el background esta disponible desde la version 11 el font si en anteriores versiones.

--
Carlos Alberto Torres C.

Fati Villa

unread,
Dec 13, 2012, 12:11:50 PM12/13/12
to powerbui...@googlegroups.com
Gracias  TOTALES!!! , aplique la idea tuya CARLOS :D no se como no se me ocurrió algo asi :)

Oscar Camargo Rodriguez

unread,
Dec 13, 2012, 12:14:23 PM12/13/12
to powerbui...@googlegroups.com
la mía ignoró...
323.gif

Fati Villa

unread,
Dec 13, 2012, 12:23:41 PM12/13/12
to powerbui...@googlegroups.com
jaja jamas, todas las opciones fueron importantes... solo que la de Carlos se ajustaba a lo que ya tenia desarrollado
35E.png
323.gif
Message has been deleted

Juan Valdez

unread,
Dec 13, 2012, 12:48:40 PM12/13/12
to powerbui...@googlegroups.com
Asi es, coincidimos en la solucion al problema.


Atte. Juan Antonio Valdez Medrano
LinkedIn. http://lnkd.in/By5bx8

 

Date: Thu, 13 Dec 2012 12:27:01 -0500
Subject: Re: [PowerBuilder-ICA:1923] Ayuda porfa
From: ocry...@gmail.com
To: powerbui...@googlegroups.com

varios pusieron el mismo comentario antes jajajaja mas quejón!

Otto Maldonado

unread,
Dec 13, 2012, 1:39:30 PM12/13/12
to powerbui...@googlegroups.com
creo que nicolas ya le habia dicho al principio!
Message has been deleted

Nicolás Luis Wong Sebastián

unread,
Dec 13, 2012, 2:19:44 PM12/13/12
to powerbui...@googlegroups.com
Es que hay veces que hay que decirlos en términos generales, para que investigue un poquito...   bueno así me enseñaron a mí...  


El 13 de diciembre de 2012 13:47, Oscar Camargo Rodriguez <ocry...@gmail.com> escribió:
lo dijo en terminos generales



--
Nicolás Luis Wong S.
360.gif
Message has been deleted

Nicolás Luis Wong Sebastián

unread,
Dec 13, 2012, 2:26:12 PM12/13/12
to powerbui...@googlegroups.com
Me olvida no entre en detalle, xq Fati dijo que quería hacerlo por código......   y creo que le mande un ejemplo....

El 13 de diciembre de 2012 14:23, Oscar Camargo Rodriguez <ocry...@gmail.com> escribió:
alguien te odiaba...
Bueno un saludo pa todos...! Hoy es Juergues!
35D.gif
360.gif

CARLOS ALBERTO TORRES CAMARGO

unread,
Dec 13, 2012, 3:24:25 PM12/13/12
to powerbui...@googlegroups.com
Bien, de nada, efectivamente una solución de grupo
35D.gif
360.gif
Reply all
Reply to author
Forward
0 new messages