Ver la Versión Completa : [Sintaxis] Pasar datos entre pantallas
Breew
7 de mayo de 2015, 08:23
Hola.
Uno de los principales problemas que me encuentro es la presentacion en pantalla.
Normalmente necesito mucha informacion en cada pantalla y me encuentro que es incomoda de manipular, demasiado movimiento en las barras de desplazamiento en Cmtable.
El diseño de Cmtab, me es dificil de organizar dentro de cad tab, ya que no puedo alinear o mover los controles con soltura.
He optado por abrir nuevos forms donde meto cada tabla ampliada y poder trabajar en ellas con mas "espacios" pero no se como cargar los datos de un form a otro sin tener que leer el fichero de nuevo.
¿Como lo organizais vosotros?.
¿Hay alguna funcion para pasar los datos que estan en CmTable1 del form1 a CmTable1 del form2?
o poder ampliar la tabla en tiempo de ejecucion?
Como organizais las pantallas ?
El problema que tengo ahora es que tengo que leer los datos desde una hoja excell y aunque la carga de los datos es mas o menos rapida, a la hora de salvarlos es sumamente lenta, con lo cual deberia salvarlos una unica vez , cuando he acabado de trabajar.
Saludos
Kuk
7 de mayo de 2015, 08:42
Para pasar los datos de un Form a otro, debes definir los datos es WORKING como EXTERNAL en ambos Forms, por ejemplo en el "Click" del boton del Form1 y en "Opened" del Form2. Asi cuando Form2 se abra, comparte datos de las estructuras EXTERNAL que hayas definido.
Claramente se puede ampliar la tabla en tiempo de ejecucion. SImplemente hay que ir añadiendo lineas a RowCount (creo que se llamaba asi la propiedad).
Para ver todas las propiedades y todos los metodos que tiene cada control, puedes escribir el nombre del control en el editor de codigo (por ejemplo CmCombo1), seleccionar conel raton ese nombre de control y hacer click con el boton derecho. Ahi te sale toda la lista.
Breew
7 de mayo de 2015, 15:40
Hola.
Para pasar los datos de un Form a otro, debes definir los datos es WORKING como EXTERNAL en ambos Forms, por ejemplo en el "Click" del boton del Form1 y en "Opened" del Form2. Asi cuando Form2 se abra, comparte datos de las estructuras EXTERNAL que hayas definido.
Perfecto, en el caso de tener los datos de un form dentro de un CmTable, entiendo que deberia meter los datos en una tabla interna de cobol ( linea por linea ) con el atributo external y entonces en el nuevo form los muevo a otro CmTable o existe alguna manera mas directa ?
Claramente se puede ampliar la tabla en tiempo de ejecucion. SImplemente hay que ir añadiendo lineas a RowCount (creo que se llamaba asi la propiedad).
Para ver todas las propiedades y todos los metodos que tiene cada control, puedes escribir el nombre del control en el editor de codigo (por ejemplo CmCombo1), seleccionar conel raton ese nombre de control y hacer click con el boton derecho. Ahi te sale toda la lista.
Acabo de descubrir la ayuda que mencionas, lastima que no tenga ejemplos, siempre queda el ensayo y error.
Saludos.
Josber
7 de mayo de 2015, 16:34
No sé si es ésto lo que necesitas, pero si es así, es más fácil de lo que parece Breew:
Defines en cada una de las WORKING, la tabla en tamaño variable y EXTERNAL
01 TABLA1 EXTERNAL GLOBAL.
03 TAB1 OCCURS 1 TO 2000 DEPENDING ON IND.
05 T1 PIC 9(4).
05 T2 PIC X(30).
01 IND PIC 9999 COMP-5 EXTERNAL GLOBAL.
01 IND1 PIC 9999 COMP-5.
Pasas los datos a la tabla con un bucle, vamos a suponer que el objeto se llama CMTABLE.
INICIO.
MOVE POW-ROWS OF CMTABLE TO IND1.
PERFORM VARYING IND FROM 1 BY 1
UNTIL IND > IND1 OR IND > 2000
MOVE "Text" OF "TableCells" (IND 1) OF CMTABLE TO T1 (IND)
MOVE "Text" OF "TableCells" (IND 2) OF CMTABLE TO T2 (IND)
END-PERFORM.
Y en el otro programa cargas la tabla
CARGAR.
PERFORM VARYING IND1 FROM 1 BY 1
UNTIL IND1 > IND OR IND1 > 2000
MOVE IND1 TO POW-ROWS OF CMTABLE
MOVE T1 (IND1) TO "Text" OF "TableCells" (IND1 1) OF CMTABLE
MOVE T2 (IND1) TO "Text" OF "TableCells" (IND1 2) OF CMTABLE
END-PERFORM.
Lo de ponerle 2000, es porque el objeto TABLE en PWC, no puede tener más de 2000 filas y que TABLA1 lleve un DEPENDING, es para hacer la tabla de tamaño dinámico y que ocupe en memoria lo que tenga que ocupar, ni más ni menos, además que de esa manera nunca te quedarás corto, (ni largo), en OCCURS.
Yo lo veo bastante claro, pero si tienes algún problema para entenderlo, pregunta.
Un saludo.-
Breew
7 de mayo de 2015, 22:23
Hola Josber
Exacto, esto es lo que pensaba hacer, pero por si acaso lo he preguntado por si habia alguna opcion Magica tipo Move Cmtable1 of form1 to Cmtable of form2
;)
Saludos
Breew
11 de mayo de 2015, 23:54
Hola.
Estoy haciendo pruebas con el control de la tabla pero no encuentro ningun metodo .
¿Como puedo indicarle a la tabla que quiero que visualize una linea en concreto ?
Saludos
Josber
12 de mayo de 2015, 07:51
Por visualizar una linea en concreto, ¿a qué te refieres?
Un saludo.-
Breew
12 de mayo de 2015, 17:59
Hola.
En el form tengo definido una tabla de 1200 elementos, pero visualmente solo establezco 2 lineas, si quiero modificar la linea 50 , no encuentro otro remedio que tirar de raton sobre la barra de desplazamiento.
La intencion es posicionarme automaticamente sobre esa linea.
Saludos
Josber
12 de mayo de 2015, 18:31
Creo que lo que quieres hacer es ir a cualquier linea/columna que tú quieras ...
No sé ahora que versión de PWC usas,(podrías indicarnosla), en la versión 7/9 es así:
01 WAUX-TABLA IS GLOBAL. *> ----- AUXILIARES PARA LA TABLA
03 LIN PIC S9(4) COMP-5.
03 COL PIC S9(4) COMP-5.
.
.
.
.
INVOKE TABLA "SelectCell" USING LIN COL.
En PWC3, creo que era algo así:
CALL SELECTCELL OF TABLA USING LIN COL.
Recuerda que en las propiedades de la tabla, en la pestaña Columns, tienes que habilitar la opción Writable, para cada columna que quieras que se pueda editar, de lo contrario, te dará un error porque no puede "coger el foco" si está inhabilitado.
Un saludo.-
vBulletin v3.8.7, Derechos ©2000-2026, Jelsoft Enterprises Ltd.