Cobol Foro

Cobol Foro (https://www.cobolforo.es/index.php)
-   PowerCOBOL (ActiveX, v4 - v11) (https://www.cobolforo.es/forumdisplay.php?f=9)
-   -   [Componente] Bug de mostrado de líneas en CtList (https://www.cobolforo.es/showthread.php?t=382)

Ciro 27 de abril de 2016 14:36

Bug de mostrado de líneas en CtList
 
2 Archivos Adjunto(s)
Solicito ayuda con el comando CtList de DBI- TECH.

Al digitar un comprobante de Contabilidad, voy llenando el CtList, para mostrar los registros.
Tengo un problema, cuando se hace click por error en el área vacia del CtList, principalmente cuando no tiene ningún registro o tiene uno solo, se daña la visualización, muestra toda la información recogida en la primera columna. Para que muestre bien, hay que salir de TODA la aplicación.

El único evento que tengo programado en el CtList es el doble click en un registro, para eliminarlo, y esto lo hace bien.

Adjunto las imágenes de cuando muestra bien y mal. Muchas gracias.

Hrmcobol 27 de abril de 2016 14:43

Hola Amigo, fijate si en los textos no tienes un ";" (caracter punto y coma). Ya que el mismo es separador de campos. O algun otro caracter extraño.
saludos

Ciro 27 de abril de 2016 15:03

Hola Hrmcobol, gracias, inicialmente pensé en el "punto y coma", pero ya revisé y no lo es. Además hice pruebas con diferentes datos y ocurre lo mismo.

Fito 27 de abril de 2016 15:55

hola:

Cuando armes el registro para cargar, ponele campos a los punto y coma y volvé a cargarlos siempre, seguramente en algún lado esos punto y coma se están blanqueando.

Ejemplo.

Código COBOL:
  1. Working ....
  2. 01  registro.
  3.      02 cuenta        pic z(6).
  4.      02 separador     pic x value ";".
  5.      02 nombre        pic x(50).
  6.  
  7. Procedure...
  8.  
  9.      move campo-cuenta      to cuenta.
  10.      move ";"               to separador.
  11.      move campos-nombre     to nombre.
  12.      invoke ctList "AddItem" using registro.

Saludos.

Fito.

Roger 28 de abril de 2016 06:13

Hola Ciro
Tenia ese mismo problema eso se da cuando tienes un campo alfabetico y esa variable esta en blanco para solucionar pon
Código COBOL:
  1. 01  registro.
  2.      02 cuenta        pic z(6).
  3.      02 separador     pic x value ";".
  4.      02 nombre        pic x(50) value "  ".

mueve " " a todos los campo alfabeticos.

Ciro 29 de abril de 2016 14:41

Fito y Roger gracias por sus respuestas, hice lo que indican, pero sigue visualizando mal.

Este es el código.

Código COBOL:
  1. 01 REGISTRO-ITE GLOBAL.
  2.     02 CUENTA-TITE PIC X(12) VALUE " ".
  3.     02 FILLER      PIC X(01) VALUE ";".
  4.     02 NOMCUE-TITE PIC X(30) VALUE " ".
  5.     02 FILLER      PIC X(01) VALUE ";".
  6.     02 NITTER-TITE PIC X(15) VALUE " ".
  7.     02 FILLER      PIC X(01) VALUE ";".
  8.     02 CENCOS-TITE PIC X(08) VALUE " ".
  9.     02 FILLER      PIC X(01) VALUE ";".
  10.     02 TIPREF-TITE PIC X(02) VALUE " ".
  11.     02 FILLER      PIC X(01) VALUE ";".
  12.     02 NROREF-TITE PIC X(08) VALUE " ".
  13.     02 FILLER      PIC X(01) VALUE ";".
  14.     02 DEBITO-TITE PIC ZZ,ZZZ,ZZZ,ZZZ.ZZ.
  15.     02 FILLER      PIC X(01) VALUE ";".
  16.     02 CREDIT-TITE PIC ZZ,ZZZ,ZZZ,ZZZ.ZZ.
  17.     02 FILLER      PIC X(01) VALUE ";".
  18.     02 BASMOV-TITE PIC ZZ,ZZZ,ZZZ,ZZZ.ZZ.
  19.     02 FILLER      PIC X(01) VALUE ";".
  20.     02 DETAL1-TITE PIC X(30) VALUE " ".
  21.     02 FILLER      PIC X(01) VALUE ";".
  22.     02 CONSEC-TITE PIC X(06) VALUE " ".

Kuk 29 de abril de 2016 15:52

Amigos, nunca he usado este control y no entiendo cual es su funcionamiento. ¿No se rellena campo por campo sino se indica todo el churro de string separando los campos por ";"? :flipa: Si es así, pues vaya castaña... :shok:

Entonces Roger, dices que el problema viene cuando un campo alfa no está inicializado?

Ciro, intenta poner como delimitadores el nulo, porque en Windows es el que indica fin de campo:

Código COBOL:
  1.      02 FILLER      PIC X(01) VALUE X"00".

A ver qué tal...

Si por el contrario ese control no se rellena con un sólo churro de datos sino campo por campo, cuando lago esté vacío, aún así haz MOVE SPACES al campo de CtList. En plan:

Código COBOL:
  1.      IF  MI-DATO NOT = SPACES
  2.          MOVE MI-DATO TO "Text"(Col Row) OF CtList1
  3.          
  4.      ELSE
  5.          MOVE SPACES TO "Text"(Col Row) OF CtList1
  6.      END-IF

También si no funciona podrías probar con nulos:


Código COBOL:
  1.      IF  MI-DATO NOT = SPACES
  2.          MOVE MI-DATO TO "Text"(Col Row) OF CtList1
  3.          
  4.      ELSE
  5.          MOVE X"00" TO "Text"(Col Row) OF CtList1
  6.      END-IF

La sintaxis de CtList no la conozco, es más bien pseudo-código. ;)

Hrmcobol 29 de abril de 2016 20:06

Hola Ciro, prueba con estas lineas. En el evento ItemCick

Código COBOL:
  1.  ENVIRONMENT     DIVISION.
  2.  DATA            DIVISION.
  3.  WORKING-STORAGE SECTION.
  4.  LINKAGE         SECTION.
  5.  01  POW-NINDEX  PIC S9(9) COMP-5.
  6.  01  POW-NCOLUMN PIC S9(4) COMP-5.
  7.  PROCEDURE       DIVISION USING POW-NINDEX POW-NCOLUMN.
  8.  
  9.  
  10.      IF   "CellText"(POW-NINDEX  1) OF CT-REGISTRO-ITe = SPACES EXIT PROGRAM.
  11.      

Armando 29 de abril de 2016 20:07

Ciro, también puedes tener un Null x"00".


No deberían tener dentro los campos ni ; ni null.


ejemplo nuestro:

Código COBOL:
  1.  01 LINEA-CT GLOBAL.
  2.            02 MARCA-CT         PIC XXX.
  3.            02 SEPARA1-CT       PIC X VALUE ";".
  4.            02 CORREL-CT        PIC Z(6).
  5.            02 SEPARA2-CT       PIC X VALUE ";".
  6.            02 FILLER           PIC X VALUE " ".
  7.            02 ETAPA-CT         PIC X(7).
  8.            02 SEPARA3-CT       PIC X VALUE ";".
  9.            02 FILLER           PIC X VALUE " ".
  10.            02 NOMBRE-CT        PIC X(50).
  11.            02 SEPARA4-CT       PIC X VALUE ";".
  12.            02 FILLER           PIC X VALUE " ".
  13.            02 ORIGEN-CT        PIC X(20).
  14.            02 SEPARA5-CT       PIC X VALUE ";".
  15.  
  16.         MOVE ";" TO SEPARA1-CT SEPARA2-CT SEPARA3-CT SEPARA4-CT EPARA5-CT.
  17.         INSPECT LINEA-CT REPLACING ALL X"00" BY " ".
  18.         INVOKE ctList1 "AddItem" USING LINEA-CT.

cuando tenés ; por ejemplo en el campo NOMBRE-CT, normalmente se corre todo porque identifica que es una nueva columna,

espero te sirva.


ADMIN: Armando, usa el bloque de resalto de sintaxis.

Hrmcobol 29 de abril de 2016 22:17

Yo también creo que es un problema de datos.


La franja horaria es GMT +2. Ahora son las 16:22.

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