Cobol Foro

Cobol Foro (https://www.cobolforo.es/index.php)
-   PowerCOBOL (ActiveX, v4 - v11) (https://www.cobolforo.es/forumdisplay.php?f=9)
-   -   [Sintaxis] Pasar datos entre pantallas (https://www.cobolforo.es/showthread.php?t=130)

Breew 7 de mayo de 2015 08:23

Pasar datos entre pantallas
 
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.


Cita:

Citación del post de Kuk (Mensaje 540)
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 ?

Cita:

Citación del post de Kuk (Mensaje 540)
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

Código COBOL:
  1. 01  TABLA1   EXTERNAL GLOBAL.
  2.      03  TAB1  OCCURS 1 TO 2000 DEPENDING ON IND.
  3.           05  T1                       PIC 9(4).
  4.           05  T2                       PIC X(30).
  5. 01  IND                                PIC 9999 COMP-5 EXTERNAL GLOBAL.
  6. 01  IND1                               PIC 9999 COMP-5.

Pasas los datos a la tabla con un bucle, vamos a suponer que el objeto se llama CMTABLE.

Código COBOL:
  1. INICIO.
  2.      MOVE POW-ROWS OF CMTABLE TO IND1.
  3.      PERFORM VARYING IND FROM 1 BY 1
  4.                   UNTIL IND > IND1 OR IND > 2000
  5.                            MOVE "Text" OF "TableCells" (IND 1) OF CMTABLE TO T1 (IND)
  6.                            MOVE "Text" OF "TableCells" (IND 2) OF CMTABLE TO T2 (IND)
  7.       END-PERFORM.

Y en el otro programa cargas la tabla

Código COBOL:
  1. CARGAR.
  2.       PERFORM VARYING IND1 FROM 1 BY 1
  3.                     UNTIL IND1 > IND OR IND1 > 2000
  4.                              MOVE IND1 TO POW-ROWS OF CMTABLE
  5.                              MOVE T1 (IND1) TO "Text" OF "TableCells" (IND1 1) OF CMTABLE
  6.                              MOVE T2 (IND1) TO "Text" OF "TableCells" (IND1 2) OF CMTABLE
  7.       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í:

Código COBOL:
  1.  01  WAUX-TABLA  IS GLOBAL.  *> ----- AUXILIARES PARA LA TABLA
  2.       03  LIN                   PIC S9(4)  COMP-5.
  3.       03  COL               PIC S9(4)  COMP-5.
  4.           .
  5.           .
  6.           .
  7.           .
  8.         INVOKE TABLA "SelectCell" USING LIN COL.

En PWC3, creo que era algo así:

Código COBOL:
  1.          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.-


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

Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.