Problemas con Grid en Relación Uno-Varios

Saludos, tengo un formulario con 1 Grid en Relación Uno-Varios (Ordenes-Prductos-DetalleProducto), en el grid en la propiedad recordsource hago referencia a la tabla DetalleProducto, la cual tiene los campos(orden_id, producto_id, Tarifa_cero, Cantidad, Valor_Unitario). En el grid he tratado de poner las colmnas para que aparezca en este orden: Producto(el cual es un combo), Tarifa Cero, Cantidad, Valor Unitario y TOTAL.
Mi problema es que al correr el formulario, en el grid las columnas asparecen en el orden de la tabla DetalleProducto y no como las ordené en el diseño.
¿Cómo puedo solucionar esto?
Desde ya muchas gracias

1 Respuesta

Respuesta
1
Espero poder ayudarte
Lo primero que deberías hacer es ver que ademas de la propiedad recordSource del grid, hayas declarado la propiedad controlSource de cada columna.
Lo que yo hago, para no pensar mucho al momento de referirme a las columnas en un grid, es ponerle a las columnas el mismo nombre que a los campos de la consulta o tabla en tu caso.
Entonces, podes hacer así, en el init del formulario (no es obligatorio para solucionar tu problema, solo una sugerencia):
with thisform.grid
.recordSource='DetalleProducto'
.producto.controlSource='DetalleProducto.producto'
.tarifa.controlSource='DetalleProducto.tarifa'
.cantidad.controlSource='DetalleProducto.cantidad'
.valorUnitario.controSource='DetalleProducto.valorUnitario'
.total.controSource='DetalleProducto.total'
. Refresh
Endwith
En la columna total, te sigiero que directamente uses una fórmula para el controlSource así se actualiza sola..
.total.controlSource='DetalleProducto.valorUnitario*DetalleProducto.cantidad'
Bueno, creo que ese es el problema..
Si seguís con problemas, podes cambiar directamente en el init el valor de la propiedad columnOrder:
with thisform.grid
.producto.columnOrden=1
.tarifa.columnOrden=2.....
...
Endwith
Espero haberte ayudado y si es así por favor cerra y califica la respuesta
www.keystone.com.ar
Perdón..
Es columnOrder (con r) y no columnOrden (con n)
Estaba un poco distraído..
Gracias
Keystone - Christian
www.keystone.com.ar
Gracias amigo por tu ayuda, deseo preguntarte algo, lo mismo que tu me has explicado lo he hecho en diseño, ¿hay alguna diferencia hacerlo por código y por diseño?.
¿Podría enviarte mi formulario para que te puedas darte cuenta en que estoy fallando? Ya que ademas aparecen en el grid todos los productos de la tabla DetalleProductos, y solo debía aparecer los que corresponden a la orden .
Te explico por este medio así compartimos la respuesta con otros usuarios. ¿Te parece bien?
La diferencia que existe es básicamente que cada vez que cambias el recordsource del grid, debes definirlo..
Un caso muy común es cuando se ejecuta una consulta y ésta se muestra en un grid, entonce, luego de ejecutar la consulta debes pasarle el controlSource de cada columna así se redefine..
Con respecto a que te muestra todos los datos, hace lo siguiente..
La tabla de ordenes y la de detalle tienen que estar relacionadas de antemano..
Fíjate el entorno de datos del formulario y verifica que así sea o que no haya nada y lo definís antes de mostrar el formulario.. así:
La tabla de detalle debe estar indexada por ejemplo, por el numero:
Se le ordenes
set rela to numero into detalle
Si la relación se hace hacia varias tablas, no olvide poner addi después del rela, sino se cancela la relación anterior.. algo así:
Se le ordenes
set rela to numero into detalle
set relato otroCampo into OtraTabla ADDI
Otra cosa a tener en cuenta es que te conviene actualizar el grid de detalle cada vez que te moves por registros de ordenes.. en el AfterRowColChange del grid pones esto:
Thisform. GridDetalle. Refresh
Muchas veces el entorno de datos del formulario "nos cambia" las tablas abiertas, relaciones, etc...
Si te es posible, porque no lo usas, fíjate que no haya nada..
Gracias amigo por toda tu ayuda, todo va muy bien con tus consejos. Deseo Hacerte una pregunta: Que propiedades debe tener un combo, el cual esta insertado en el grid, este combo permitirá escoger los productos de la tabla productos.
Al momento ya lo he insertado, pero al querer escoger un producto, no me deja, en la barra de estado del fox aparece el mensaje indicando que el control es solo de lectura. He revisado en las propiedades del combo pero todo esta bien.
¿Qué debo hacer?
Con respeto a esto, te aconsejo que revises la propiedad readOnly del grid, del column y del combo..
Además, tené en cuenta que no estés trabajando con un cursor proveniente de un select, sino en la clausula del select debes poner readwrite.
Ahora..
Siempre recordá que estas trabajando sobre un grid que esta sobre una tabla (o un cursor)
Entonces, fíjate que el combo se llene con datos provenientes de otros lados, como tu tabla de artículos.
Bueno, espero haber sido útil mi respuesta y si te parece, antes de entrar a otro punto, califica y cerra esta respuesta.
Después podes hacer más preguntas.
Muchas gracias
Keystone - Christian
www.keystone.com.ar
Gracias amigo por tu invalorable ayuda. Como lo solicitaste valoraré esta pregunta y haré aparte otra que tengo que hacerte, espero me puedas ayudar. Gracias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas