Cosmos

Preguntas frecuentes / Casos prácticos

  1. ¿Cómo hacer un "ADD" de "MultiBase" en el modo edición de Cosmos?

    Hay que redefinir el comando "AcceptEdit", ver si el método "Status" devuelve "New" y, si es así, hacer de nuevo el "EditNew".

  2. ¿Se puede cambiar el color de un control desactivado para que no salga en gris?

    No.

  3. ¿Cómo ver los controles en todas las páginas de un "TAB CONTROL"?

    Poniendo la propiedad "Page" de los controles a 0.

  4. ¿Se pueden asignar variables definidas como Boolean a un "Edit Field"?

    No se puede asignar una variable Boolean a un control "Edit Field". Hay que utilizar los controles adecuados, por ejemplo: "Radio button", "check", "drop", etc.

  5. Cuando en un CURSOR con una SELECT con GROUP BY queremos agrupar por una serie de campos, las cantidades que se obtienen no son correctas (hay 3 niveles de grupos).

    No poner la cláusula GROUP BY en la SELECT, poner en su lugar la ORDER BY y utilizar el método "group by" de la clase Sqlcursor.

  6. Tenemos una variable pseudo asociada a una tabla en un "grid". Al pasar a otra fila no guarda el estado de esa variable. ¿Cómo recoger el valor de esa variable para cada fila?

    Hay que modificar el registro para que se actualice el valor de la variable asociada método Update de la clase FormTable.

  7. ¿Cómo añadir "templates" nuevos para los wizards a Cosmos?

    Copiar el archivo ".smd" al directorio "templates" y añadir, en el fichero "templates.ini", una línea en la entrada que queramos con el siguiente formato:

    <Etiqueta>=<clase>,<fichero template donde está>,[......]

  8. ¿Cómo añadir campos muy grandes a un grid?

    Poniendo un control "Multilínea" o gestionándolo desde otro "Form".

  9. ¿Se puede convertir a mayúsculas o minúsculas el "label" de un control del tipo "Text"?

    Sí, de la siguiente manera:

    <control>.Text = <control>.Text.[Upcase|Lowcase]

  10. ¿Cómo pasar de ANSI a OEM?

    Con la función "AnsiToOem" o bien con la variable de entorno DBCHARSET.

  11. En un "List Box" de tipo sql, ¿hay Drag and Drop?

    Sí, se puede hacer chequeando en las propiedades de la ventana "Allow Drop" y en las de la lista "Allow Drag".

  12. ¿Cómo pueden desarrollar varios usuarios un mismo proyecto?

    En el "Cosmos.ini" poner el parámetro "MultiUser=TRUE" en la entrada [Cosmos Visual Editor]. De este modo los usuarios no podrán modificar el módulo que esté modificando otro usuario.

  13. En la clase "ArgList" de tipo char, al utilizar el método Select de la clase "SqlServer" aparece un error indicando que dicho método no existe en la clase "ArgList".

    No se pueden instanciar objetos de clases heredadas de la clase "ArgList". Sólo se pueden utilizar en la declaración de funciones para recibir parámetros.

  14. Queremos añadir una entrada al fichero "template.ini" de una clase que no es hija de la clase "FORM", sino de una clase abstracta que hemos generado. ¿Cómo podemos hacerlo?

    Hay que generar un "include" con la clase abstracta y, posteriormente, crear un módulo donde haya una clase que derive de esa clase abstracta. Dicho "include" deberá quedar guardado en el directorio "includes" y el módulo en el directorio "templates".

  15. En un "AcceptEdit" redefinido, ¿cómo se puede salir de dicho comando en un momento dado?

    Con la palabra reservada "Return".

  16. Al borrar una registro de una tabla de líneas ésta queda desordenada. ¿Existe algún método que la reordene automáticamente?

    No. Lo único que podemos hacer es un "query" de esa tabla habiendo definido previamente una columna de ordenación para la misma.

  17. Tenemos un "TabControl" con 3 páginas. ¿De qué forma podemos cambiar de página por programa?

    <nombre del control>.Page = <nº de página>

  18. ¿Cómo se puede calcular el número de registros que se han recogido en un CURSOR?

    La única manera es hacer previamente un "Select count(*)" con las mismas condiciones del CURSOR.

    Si ya hubiésemos recorrido todo, podríamos haber llevado un contador de filas.

  19. En un mantenimiento con un "Tab Control" con una tabla asociada, al arrastrar a la tercera pestaña se produce un error y la tabla queda desasociada. ¿Cómo se puede volver a asociar dicha tabla?

    Se puede realizar desde el "Source Editor".

  20. ¿Se puede poner un "bmp" en un control de tipo "List Box"?

    No. Se deben utilizar los controles de tipo "Bitmap".

  21. ¿Se pueden leer los archivos "syserror" y "Sysmonitor" con algún editor?

    No, ya que se trata de ficheros binarios.

  22. ¿Se pueden pasar "arrays" a una función?

    No. Hay que definir un "array" público que pueda ser visto por la función.

  23. ¿Cómo restringir los accesos a unas tablas a través de ODBC?

    Estableciendo los permisos mediante el SQL.

  24. Una impresora con un cajón monedero necesita enviar un "null" para que dicho cajón se abra.

    Se puede hacer enviando un "Character(0)" o bien haciendo un copy de un fichero ".pif" directamente al puerto donde está conectada la impresora.

  25. ¿Cómo hacer que un usuario de Cosmos tenga una conexión por defecto?

    Llamando al usuario de la misma forma que a la conexión para que compartan las variables de entorno definidas.

  26. ¿Cómo se pueden sacar mensajes en la barra de estado?

    La barra de estado está compuesta por controles. Se puede utilizar un control de tipo "PANEL" para sacar los comentarios (propiedad "comment") o bien poner un nuevo control de tipo "TEXT" y modificar su propiedad "Text".

  27. ¿Existe en Cosmos una variable similar la "locked" de MultiBase?

    El método "locked" de la clase SqlCursor.

  28. ¿Cómo podemos imprimir sin utilizar un objeto de la clase Page?

    Abriendo un STREAM sobre el puerto de impresión del ordenador, aunque es aconsejable utilizar la clase "Page".

  29. ¿Cómo se puede conectar Cosmos con una base de datos en un servidor UNIX?

    Con el editor de configuración crear una conexión cliente-servidor y definir las variables de entorno necesarias para poder realizar dicha conexión (DBHOST, DBUSER, DBSERVICE, DBPATH, etc.).

  30. Para realizar la apertura de cajón en un TPV es necesario enviar una secuencia de escape. ¿Cómo podemos enviar dicha secuencia?

    Hay que utilizar un "stream binary" y enviar el "character(xxx)" necesario.