Cosmos

Preguntas frecuentes / Casos prácticos

  1. ¿Cómo se puede deshabilitar una rama entera de un menú?

    Utilizando este conjunto de instrucciones:

    <menu>.Option("<opcion>").Disabled=TRUE;
    Self.SetMenu();

  2. En un mantenimiento cabeceras-líneas, las líneas se llevan en un "grid", el cual lleva un menú para mantenerlo. Si quisiéramos asignar un valor a un campo de la tabla que está oculto, ¿de qué manera podemos saber en qué tabla nos encontramos?

    Utilizando el método "EditingTable" para saber qué tabla está en edición y posteriormente aplicar el método "ChildTable" para saber si es la tabla de líneas. A continuación, si el "Status" es "New" se le podrá asignar valor al campo.

  3. ¿Es mejor usar ActiveX o DDE?

    Es igual, pero es más manejable el ActiveX.

  4. ¿Cómo crear un acceso directo a un proyecto?

    Mediante la siguiente línea de comando:

    cosrun -prj <ruta del proyecto> -omd <módulo> -arg <argumento>

  5. Dentro de un grupo tenemos una caja con campos y dibujamos una raya vertical, pero se muestra siempre. ¿Qué se puede hacer para que la dibuje solamente una vez?

    Hay que activar el "store status" solamente en una línea.

  6. ¿Se puede crear un repositorio de una conexión ODBC?

    En versiones 3.3 y posteriores sí.

  7. ¿Cómo hacer que en un grupo se vea como fondo un "bmp"?

    En primer lugar, colocar el "bmp"; a continuación, poner encima el grupo y pinchar la "T" en la paleta de colores de Cosmos y arrastrarla al grupo para que lo ponga transparente.

  8. ¿Hay que incluir la librería de conexión a todos lo módulos de un proyecto?

    No, basta con incluirla en el módulo de inicio.

  9. ¿Se puede cambiar el título de un FORM de forma dinámica?

    Sí. Por ejemplo, con la instrucción:

    Self.Frame().Text = "Nuevo Título del Form";

  10. ¿Cómo se puede hacer que en un "grid" aparezcan los últimos movimientos sin tener que desplazarse con la barra de scroll?

    Desactivando el "buffering" y situándonos donde queramos con el evento "QueryEnd" de la tabla. También es posible hacerlo redefiniendo el comando "AcceptEdit".

  11. ¿Hay alguna función en Cosmos que permita pasar un carácter a número?

    Sí, utilizando los conversores.

  12. ¿Se pueden utilizar los "lookup's" del repositorio en una "SelectWindow"?

    No, los "lookups" no son del SQL. Habría que definir la SELECT con un "inner join".

  13. ¿Se pueden tener menús comunes en varios formularios?

    Sí, para ello pondremos el menú en una "include" y, posteriormente, la include en los formularios que queramos.

  14. ¿Cómo se pueden recoger en forma de condición los valores de la lista en curso?

    Con el método "GetQueryByForm".

  15. ¿Qué funcionalidad tiene el EasyReport de Cosmos?

    Generar informes.

  16. ¿Se puede tener la misma tabla en una "caja" y en un "grid"?

    Sólo es posible introduciendo el "grid" dentro de la caja.

  17. ¿Se puede crear una clase a partir de nada?

    No, siempre tiene que haber una "parent class".

  18. Necesitamos crear un "array" de una clase "struct". Hacemos un método en la clase "array" que permite cargar la estructura. ¿Es correcto?

    No. El método tiene que estar declarado en la clase "struct" para independizar más la estructura.

  19. Durante la ejecución de un programa, ¿cómo se puede hacer un "hard copy" de la pantalla por impresora?

    Pulsando simultáneamente las teclas [Alt]+[PrtScreen] o bien utilizando el método "ExportImage" de la clase "form".

  20. Tenemos un "Grupo con caja". Si no se imprimen todas las líneas del grupo el resto tiene el formato por defecto de la caja. ¿Cómo se puede evitar esto?

    Al hacer el diseño la dejaremos en blanco, o bien por programa podemos recorrer las líneas y mostrar una página en blanco o, por último, utilizar el método "Truncate".

  21. Al ejecutar un "AcceptEdit", ¿podemos saber el error que se produce cuando se inserta un registro con clave duplicada?

    No, ya que el mensaje que da el "AcceptEdit" es un "Warning". Además, depende del gestor de base de datos con el que estemos trabajando.

  22. Dentro de un "grid" soportamos el mantenimiento de una tabla en modo líneas. Esta tabla tiene un campo "serial" y está incluido en la línea del "grid". Al intentar grabar el registro aparece un mensaje de error indicando que no puede grabar nulo en una columna declarada como "Not null", precisamente la columna de tipo "serial". ¿Por qué sucede esto?

    Hay que poner una variable asociada en la sección "tables" con los atributos "noentry" y "noupdate".

  23. En un "Band Group", ¿cómo podemos saber el número de líneas que quedan?

    Utilizando el método "RemainigSpace();".

  24. En una instrucción PREPARE, al utilizar una SELECT con la cláusula ORDER BY aparece el siguiente mensaje de error: "Objects scoped in method (Into) must contain SqlCursor scoped" (en la cláusula ORDER BY se ha puesto el nombre de las columnas).

    En la cláusula ORDER BY dentro de una PREPARE no se pueden poner nombres de columnas, hay que poner la posición de dicha columna dentro de la lista de la SELECT.

  25. ¿Cómo podemos cambiar el "Mask" de una variable de un listado?

    Utilizando la siguiente línea de código:

    <control>.Mask = número de máscara

  26. ¿Cómo saber en qué campo estamos dentro de un control?

    Por la variable asociada con el método "Field". Si lo que queremos saber es el control que tiene el foco podemos utilizar el método "CurrentFocus".