FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Usar o no Usar un DBGrid
Hola!
Estoy desarrollando un modulo para Facturas, en Delphi 6 y paradox, me surge una duda, para la captura de las partidas en la factura yo había decidido usar un DBGrid y que el usuario capturará directamente en las celdas los datos, pero me encontre varios hilos en el foro que no recomiendan este tipo de trabajo en un DBGrid, lo cual me hace dudar de usarlo. Ustedes los que ya han realizado alguna vez un modulo de facturas, que componente utilizan para la captura de las partidas de la misma? ¿Cuál me recomiendan? Muchas gracias
__________________
Ana |
#2
|
||||
|
||||
No se a q te refieres con captura de partidas... pero si te puedo decir q el usar un DBGrid es bueno o malo dependiendo...si no le permites al usuario editar data ahí directamente sino q esto lo haces usando otros controles y su actualización se ve en el grid.........fino!!!.........si no es así....malo!!! sobre todo cuando se generan excepciones y dependen del comportamiento del servidor, lo digo particularmente por los problemas q tenía cuando empezaba
__________________
Los Estados Unidos parecen destinados por la Providencia para plagar la América de miserias a nombre de la libertad." Simón Bolívar (Carta al Coronel Inglés Patricio Cambell 05/08/1829). |
#3
|
|||
|
|||
Gracias OSKR!!
Cuando habló de partidas, me refiero, en una Factura se tiene la Cabeza, los datos principales (No. Factura, Cliente, Descripción, dirección, etc.), las partidas son el cuerpo de la factura (Cant, Producto, PU, Importe x Partida, etc), mi duda es: ¿Que componente me recomiendan para la captura de los datos que van en el cuerpo de la factura? Sobre lo que me comentas me parece bien, pero pienso que para el usuario es engorroso tener que abrir una ventana de captura para cada partida de la factura, por ello yo pensaba en capturar directamente en el DBGrid, pero si no es recomendable, que me sugieren?? Míl Gracias
__________________
Ana |
#4
|
|||
|
|||
yo suponete lo que hago es que la persona le da doble click al elemento de la grilla que quiere modificar y cargo todo en una pequeña ventana para su modificación o para una mejor visualizacion. Es por eso que no tuve tantos problemas con los dbgrid pero yo uso mas los wwDBGrid que son unos componentes que me dieron y estan buenos. Si los queres avisame que te los envio o me fijo donde estas
Saludos |
#5
|
|||
|
|||
Patricio,
Muchas gracias, enviame los componentes a sonrie_a@yahoo.com y veo si me sirven. Nuevamente Gracias
__________________
Ana |
#6
|
|||
|
|||
No hay ningun problema en usar el DBGrid, el DBGrid es un contenedor de datos virtual, significa q los datos no los contiene el sino otro contenedor, en este caso el Dataset, el problema entonces es con la manera de usar el Dataset, yo uso el JvDBGrid y nunca hay problema..
|
#7
|
|||
|
|||
Delfino,
Hola! Tienes toda la razón cuando me dices que no hay problema si se configura bien el DataSet, pero me surgio un detalle al final al momento de insertar datos en el DBGrid: Al Insertar un renglón en el DBGrid y pasar al siguiente renglón (ya sea con la tecla TAB o con la barra el botón Inserta de la barra TDBNavegator) el DBGrid se presenta en blanco, es decir, no visulizo los renglones que voy capturando. No sé si tenga que ver que La tabla a la que está conectada el DBGrid tiene la Opción "CacheUpdate = True". Y al hacer el Database.ApplyUpdates, se graban todos los renglones que capture. Tu me pdrías dar alguna piesta de que podría estar pasando. Gracias.
__________________
Ana |
#8
|
||||
|
||||
Quizás se podría hacer de otra forma la creación de una factura, ahí van varias ideas:
- Crear un asistente de facturación, pide las fechas, y muestra todos los clientes que tienen algún albaran, y propone una factura con todos los albaranes de cada cliente. Se dá la posibilidad de eliminar un albaran de la factura, añadir, etc. - Lo más fácil, pones en la ventana de la factura dos botones para añadir / eliminar albaranes, al pulsarlo pide el nº de albaran ( un combobox en el que se añade los ids de albaranes), y al aceptar esa ventana, el programa se encarga de buscar el albaran y meterlo en la factura. - Tendrás por algún sitio una ventana de listados de albaranes, pues permites que el usuario seleccione varios albaranes, y despues con un boton, se crea la factura de esos albaranes. Como ves, se trata de que el usuario escriba lo menos posible, para cometer menos fallos, y que además vea que es una mejora usar tu programa. La primera opción puede ser la más compleja, pero tambien será la más cómoda para el usuario. Un detalle más: El grid se usa para mostrar el cuerpo de la factura, y se permite, por ejemplo, modificar el concepto, pero no los importes. (poner a la columna de los importes, ReadONly := true) saludos y espero te sirva alguna de estas ideas.
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#9
|
|||
|
|||
Hola Lepe!!
Muchas gracias por las sugerencias, sólo que etngo un problemilla, no las entiendo, quizas el problema radique en que usamos diferentes nombres para los conceptos de una factura, es decir, no sé a que te refieres con un "albaran" Te platico como es mi ventana de captura de la factura, para los datos Generales de la factura (Nombre del cliente, dirección, etc) utilizo componenetes TDBEdit, los cuales están conectados a la Base de Datos Padre, para los datosdel cuerpo de la Factura (cantidad, unidad, producto, etc) uilizo un DBGrid para capturarlos, el cual esta conectado a la Base de Datos Hija, Tal como me aconsejo Delfino configure el DataSet de ambas tablas, para que al dar clic en el botón de guardar, se guarde la información y lo hace bien, Guarda lo que debe en cada tabla, respetas mis llaves, asigna el consecutivo, etc. todo bien. Mi problema radica que cuando estas en el DBGrid directamente capturando la cantida, unidad, etc, al pasar al siguiente renglón ya no visualizo el anterior que capture en el DBGrid, más sin embargo en memoria si se queda, ya que al guardar los datos, guarda todos los renglones capturados. Quiza, lo mejor no fue usar el DBGRID para está función, pero ya me bloquie y no sé porque cambiarlo o como capturar el cuerpo de la partida Gracias.
__________________
Ana |
#10
|
||||
|
||||
Cita:
En mi caso, cuando una persona retira 4 artículos de un producto, se le dá una hojita que llamamos "albaran", no es un documento de pago, simplemente es un documento para tener constancia de que en esa fecha, ese cliente, ha retirado del almacen dichos artículos. Esta información queda grabada en una tabla, por tanto, a final de mes, se puede ver qué artículos ha retirado cada cliente, y automáticamente el ordenador busca todos esos albaranes y crea la factura final. Quizás tu aplicación sea distinta y no tengas albaranes, pero si podrías hacerlo de otra forma. Lo que intento decirte en el mensaje anterior, es que el DBGrid es muy bueno para mostrar información, pero escribir directamente en el Grid es bastante incómodo, de ahí que propusiera otra filosofía para crear el cuerpo de la factura. Básicamente, estoy de acuerdo con la forma de actuar de Patricio y automatizar todo lo que sea posible. saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#11
|
|||
|
|||
Lepe,
Hola!! Muchas gracias, por la explicación, bueno pues segui ya vuestro consejo y el de Patrico, no dejo ya modificar o escribir sobre el DBGrid, coloque unos botoncitos muy monos y se abre la ventanita para capturar las partidas o detalle de la factura, pero sigo con un problemilla. Tengo la Tabla Padre y la tabla hija, ambas en el DataSet trabajan con Chacheupdate = True, lo menciono porque creo que es importante, al dar de alta las partidas o detalles de la factura, no los veo en el DBGrid a pesar de que ya es sólo de consulta. El DBGrid está conectado por medio de un DataSource a la tabla hija que a su vez está ligada a la tabla padre, por el MasterSource, lo anterior sólo sucede cuando estoy dando de alta las partidas o detalles. Quiza lo mejor sea lanzar mi duda como un nuevo hilo, pues ya nada que ver con usar o no un DBGrid, de cualquier forma muchas gracias Lepe
__________________
Ana |
#12
|
||||
|
||||
Si tiene CacheUpdates a true, todas las operaciones que hagas sobre los datasets, se hacen en memoria, tendrás que usar el método ApplyUpdates de los datasets para que los cambios se apliquen realmente a las tablas y se grabe a disco.
Si quieres que la dar de alta una linea del cuerpo automáticamente se grabe en las tablas y se refleje en el Grid, tendrás que desactivar la actualización en Cache. saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#13
|
||||
|
||||
Las filas que desaparecen
Cita:
Lo que pasa es que cuando insertas una fila en la tabla detalle y no le capturas el valor que la enlaza a la tabla maestra, la fila si se inserta, pero como está "filtrada" para que solo muestre el detalle del registro correspondiente en la maestra no la muestra. Normalmente te va a pasar cuando estás dando de alta una nueva fila en la tabla maestra, pues en ese momento probablemente aun no tengas el valor del campo que las enlaza. Para evitar esto tienes que colocar el valor correcto en el campo ligado de la tabla detalle antes de postear el valor para que la grilla te la muestre. Por ejemplo: Estas dando de alta la factura con folio 100, el usuario obviamente ya no necesita capturar el valor 100 en el campo factura en cada fila de la grilla de detalle. Entonces, debes de asignar el valor 100 al campo que se enlaza la tabla maestra. En esta caso se enlazarian por el campo folio. En otras palabras, antes de postear cualquier fila en el detalle, antes deberas de colocar el mismo valor (en el ejemplo 100) en el campo ligado. A mi me paso, que utilice un campo autoincrementado para el numero de folio y como este campo la DB no le asigna valor hasta que lo posteas pues era imposible saber que valor darle al detalle para postearlo.
__________________
AKA "El animalito" ||Cordobés a mucha honra|| |
#14
|
|||
|
|||
Lepe y AzidRain,
Muchas gracias por sus ideas. Efectivamente Azid, mi error, no error, era que usaba un campo Autoincremental para asignar el ID de la tabla Padre, lo cambie, ahora yo lo voy asignando y asunto arreglado. Lepe, me quede con tu idea de no usar el DBGRID para capturar o modificar información, uso una ventana aparte para hacerlo y se ve bien Muchas gracias a ambos!!! Saludos!!!
__________________
Ana |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
|