Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 31-05-2007
jcapitan jcapitan is offline
Miembro
 
Registrado: jun 2006
Posts: 31
Poder: 0
jcapitan Va por buen camino
Aplicacion de manejo de papeletas o tickets

Amigos, tengo un problemilla con los forms no modales. Resulta que genero un modal desde un form principal, y ya puedo moverme de uno a otro y llamarlo desde el pricipal a través de su caption (en un hilo anterior me dieron el tip para hacer esto), bueno hasta todo bien, el problema aparece cuando .....

En cada form no modal tengo un componente
FIBDataSet ligado a su respectiva tabla y su DataBase (el cual esta en un data module), tengo un dbgrid en el form no modal ligado al datasource ligado al FIBDataSet mencionado arriba, bueno al crear el no modal abro el dataset, y lo muestro filtrado en el grid (filtrado de acuerdo al valor del caption el cual es un valor numerico), pero... cuando creo varios y me muevo a uno anterior, y quiero meter datos a la tabla y que se refleje en el grid del no modal seleccionado, resulta que aparecen en el ultimo form generado, imagino que es porque es el que se encuentra activo por ser el ultimo generado, y es que como tienen el mismo nombre (creo que por ahi esta la jugada), creo que tengo que generarlos en tiempo de ejecución o no? y si es asi como lo hago, y si hay otra manera cual es? o que estoy haciendo mal?

Espero alguien pueda ayudarme en este problemilla.
Mil gracias.

Última edición por jcapitan fecha: 31-05-2007 a las 19:52:00.
Responder Con Cita
  #2  
Antiguo 31-05-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.282
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Por favor intenta poner títulos descriptivos a los hilos. El que has puesto al actual (que estaría bien que modificaras...) no ayuda a búsquedas posteriores.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 31-05-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Además de lo que ya te comentó Neftalí, yo te recomiendo que medites bien tu pregunta y la formules con mayor claridad. Yo, al menos no entiendo que quieres decir con puedo moverme de uno a otro, siendo que uno de los dos es modal, y menos entiendo lo de llamarlo desde el pricipal a través de su caption.

Pero menos aún entiendo qué tiene que ver el formulario modal en todo esto si después únicamente hablas de formularios no modales.

// Saludos
Responder Con Cita
  #4  
Antiguo 31-05-2007
jcapitan jcapitan is offline
Miembro
 
Registrado: jun 2006
Posts: 31
Poder: 0
jcapitan Va por buen camino
Aplicacion de manejo de papeletas o tickets

Disculpen por el título del hilo.

Bueno, lo que estoy intentando es lo siguiente:

Tengo la ventana principal de la aplicacion, ahi tengo una linea de comandos, el cual uno de los comandos es para generar "papeletas" o registros nuevos, en esta papeleta se puede capturar informacion; esta ventana de la papeleta la muestro con Form.Show porque el sistema tiene que ser capaz de poder generar tantas papeletas como sean necesarias y poder moverse de una a otra teniendolas en pantalla, y poder modificar los campos; el registro que muestran las papeletas por lógica debe ser de acuerdo al ticket de la misma, el cual muestro en el caption (UN NUMERO). El problema que quería explicarles es que cuando genero las papeletas (2 por ejemplo) y las tengo en pantalla y me muevo a la primera que generé, cuando meto datos (unas notas) se me reflejan en la ultima y no en la que seleccioné.

Cabe mencionar que la llamada de la papeleta o ventana lo hago de la siguiente manera:

frmNew:=TfrmNew.Create(Self);
frmNew.Caption:=IntToStr(NewFolio);
frmNew.Show; (esto con la finalidad de poder moverme de una a otra)


tambien menciono que en el form que genero (frmNew) tengo un FIBDataSet y lo que hago es llamar siempre a la misma para generar una papeleta nueva, y lo unico que cambio es el ticket. ¿Es correcto esto? ¿o es por lo que tengo el problemilla?

espero ahora me haya explicado, discupen si aun no queda claro.

mil gracias.

Última edición por jcapitan fecha: 31-05-2007 a las 22:20:49.
Responder Con Cita
  #5  
Antiguo 31-05-2007
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
A ver si traduje bien:

Tienes una tabla FB, y puedes crear tantos formularios como quieras para insertar nuevos registros en la tabla. Estos registros sin embargo no se guardan hasta que uno presiona "Guardar" (o algo similar) por lo que mientras tanto esos datos capturados en cada ventana quedan "en el limbo".

Ahora bien, si usaste componentes dbaware, todas las instancias de esos controles apuntarán a un solo dataset por lo que los cambios que hagas en cualquier ventana se propagan a las otras como magia.

Solucion: No uses controles dataware y dale al formulario la capacidad de guardar el mismo sus datos al dataset en forma independiente. Además puedes usar un campo autoincrementado para guardar el numero de papeleta de manera que no necesites saber éste numero sino hasta que se guarda en la tabla.

Como se trata de ventanas no-modales, se crea una instancia de cada una cada vez que "generas" una papelete. Por eso creo que debes ponerle el códig o necesario para insertar y guardar los datos en el dataset de forma independiente de manera que cada instancia pueda trabajar de forma independiente.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #6  
Antiguo 01-06-2007
jcapitan jcapitan is offline
Miembro
 
Registrado: jun 2006
Posts: 31
Poder: 0
jcapitan Va por buen camino
Un poco mas detallado, sorry, aunque gaste mas texto :-)

Lo que mencionas (http://www.clubdelphi.com/foros/imag...ine=1165511126 AzidRain) es precisamente o que quiero hacer, que trabajen de manera independientes las "papeletas".

Mas detalles:

Primero, tengo un DataModule, en el cual tengo un FIBDatabase, un FIBTransaction, y unos FIBDataSet.
ok.

Ahora

Desde mi form principal, voy a llamar y mostrar a mi ventana (.Show) para capturar mis datos del nuevo registro.

el codigo que tengo es el siguiente:


frmNew:=TfrmNew.Create(Self);
frmNew.Caption:=IntToStr(NewFolio);
frmNew.Show;

Este codigo es el que ejecuto cada que pongo el comando de generar una nueva papeleta, es decir si abro 5 este codigo es el que se ejecuta 5 veces, con el cual las mantengo en pantalla y me muevo de una a otra sin problemas (solo el moverme :-( )

Cabe mencionar los componentes que tengo en esta ventana (frmNew):
2 FIBDataSet que estan ligados al FIBDatabase del DataModule, esto con el fin de que cada papeleta tenga su propia consulta y su grid, bien hasta ahi todo bien (creo) , tengo igualmente un boton en el frmNew con el cual mando a llamar otra ventana en la cual meto las notas para la papeleta seleccionada ( y aqui viene el problema), en esta nueva ventana (notas) grabo cada que doy un enter y limpio el campo esperando una nueva nota (esto por motivos de registro en cuanto a tiempo, fecha, usuario, etc), si la nota es vacia simplemente se cierra la ventana y regresa al frmNew, en la cual se me deben de reflejar las notas de esa papeleta.
cuando grabo las notas lo hago de la siguiente manera (la cual es donde creo que esta el problema)

frmNew.tblDetalles.Insert;
frmNew.tblDetallesFOLIO.AsString:=Caption;
frmNew.tblDetallesOPERADOR.Value:=Operador;
frmNew.tblDetallesNOTA.AsString:=NotasMemo.Lines.Text;
frmNew.tblDetallesHORA.Value:=Now;
frmNew.tblDetallesDIA.Value:=Now;
frmNew.tblDetalles.Post;

En esta form (frmNew) tengo: un boton para las notas (llama a un form en la cual meto las notas), un componente dbgrid y 2 FIBDataBase (reporte y notas de las cuales guardo hora, usuario y la nota en si) que usa al FIBDatabase que se encuentra en el DataModule (mencionado al inicio), al crearse la ventana (frmNew) asigno un nuevo numero de papeleta, y abro el FIBDatabase con la condicion de folio=NewFolio para que me muestre en el grid las notas relacionadas a este folio (las notas estan en otra tabla como mencione arriba) , bien pues cuando abro una sola papeleta no hay broncas click al boton par añadir notas y cuando voy guardando las notas aparecen en el grid de la papeleta, pero... cuando abro dos y me muevo a la primera papeleta y quiero meter las notas, las mete en la ultima pepeleta creada, ese es el problema, como le hago para que cada papeleta sea independiente y cuando me mueva a cualquiera los componentes o tablas que se activen sean las de la papeleta en uso y no la ultima generada.

¿Es por el crearlas con el mismo nombre? ¿Como puedo hacer esto?
Responder Con Cita
  #7  
Antiguo 01-06-2007
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
checa esto:
folio=NewFolio
que es el filtro que usas para las tablas de detalle de cada papeleta (notas)

Al usar la primera papeleta supongamos que newFolio es igual a 1, ok?, entonces el grid solo mostrara las notas del folio 1, hasta aqui ok. Pero que pasa cuando abrimos una nueva papeleta, NewFolio ahora vale 2, por ejemplo, y el de esta nueva ventana muestra solo las papeletas del folio 2. Todo bien hasta aqui...ahora volvamos a la primera papeleta...

Sorpresa! Como la tabla filtra por NewFolio que en este momento vale 2, adivina que notas te muestra e inserta?? las de la última papeleta!!!

Solución:
Quick & Dirty:
folio=Caption
(veo que usas caption para guardar el folio)

MAs Decente:
Crea una propiedad que llamaremos Folio para la frmNew y un método como esto:

Código Delphi [-]
 Procedure frmNew.AsignaFolio(unFolio:Integer);
 Begin
   Folio := unFolio; // Folio es una propiedad integer de frmNew
  Caption := Format('Papeleta num %d',[NewFolio]); //Ponemos el título
   // Aqui colocas la asignación del filtro de la tabla de manera
  // que quede filtro=Folio 
 end;

Tu código para crear las notas quedaria así:
Código Delphi [-]

frmNew.tblDetalles.Insert;
frmNew.tblDetallesFOLIO.AsINTEGER:=Folio;  // Aqui cambió
frmNew.tblDetallesOPERADOR.Value:=Operador;
frmNew.tblDetallesNOTA.AsString:=NotasMemo.Lines.Text;
frmNew.tblDetallesHORA.Value:=Now;
frmNew.tblDetallesDIA.Value:=Now;
frmNew.tblDetalles.Post;


En tu form principal harias esto:
Código Delphi [-]
frmNew:=TfrmNew.Create(Self);
frmNew.AsignaFolio(NewFolio); //Aqui cambió
frmNew.Show;

Con esto debe funcionar, ahora cuando creas una papeleta ésta guarda su propio folio devuelto por NewFolio y filtro de la tabla muestra y añade solo notas correspondientes.

Ojala te funcione
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #8  
Antiguo 04-06-2007
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 19
olbeup Va camino a la fama
Wink

Hay una variable que casi nunca se utiliza en los formularios que es el tab, pon hay el numero de folio y juega con el.

Un saludo.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Programar es como el Sexo Pascalizado La Taberna 3 01-03-2007 20:56:00
Programar algo parecido al Ipod jorgito.crazy Varios 9 04-01-2007 04:22:54
como programar en PDA Rabata Varios 3 23-08-2006 16:35:30
Como puedo grabar texto en un Archivo de Texto sin Sobreescribir???? AGAG4 Varios 12 08-11-2005 22:53:00
Como se debe programar... sierraja Varios 4 13-09-2005 15:39:30


La franja horaria es GMT +2. Ahora son las 01:34:37.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi