Manual para comprender los archivos SCRIPTS de extensión .qs .
- CREADO POR: miguelajsmaps@gmail.com en https://github.com/Miguel-J/eneboo/wiki (YA NO EXISTE)
- FECHA CREACIÓN:
- ACTUAL: miguelajsmaps@gmail.com en https://manuales-eneboo-pineboo.org/lenguajes-de-programacion-introduccion/lenguajes-de-programacion-scripts/
- ULTIMA ACTUALIZACIÓN:[lastupdate]
[Volver al menú de general de lenguajes]
(https://manuales-eneboo-pineboo.org/lenguajes-de-programacion-introduccion)
Lenguajes de programación. SCRIPTS
Indice:
- Lenguaje que utiliza:
- Extensión de archivos:
- Cómo poner un comentario:
- Otros datos:
- Estructura del archivo:
- Modo Debug o modo desarrollo:
- Solucionar errores de código:
Haz clic aquí para volver al índice
1. LENGUAJE QUE UTILIZA:
- ECMASCRIPT (es muy parecido a Javascript)
- tutorial: https://librosweb.es/libro /javascript/capitulo_1/ sintaxis.html
Haz clic aquí para volver al índice
2. EXTENSION DE ARCHIVOS:
- .qs
Se pueden abrir con:
- «Wordpad».
- «Sublime Text2» y luego con «Ctrl + Shift + P» y elegir «S» y buscar «Set Syntax: JavaScript»…..oculta las líneas inactivas y separa por colores los distintos elementos…
Haz clic aquí para volver al índice
3. COMO PONER UN COMENTARIO:
- Ejemplo de comentario de una sola línea:
// a continuación se muestra un mensaje
- Ejemplo de comentario de varias líneas:
/************aquí escribes lo que quieras, para aclarar lo que hace ese código*****************/
Haz clic aquí para volver al índice
4. OTROS DATOS:
- Nota: Python utiliza retornos de carro para separar sentencias y los dos puntos y el sangrado para reconocer bloques de código. C++ y Java usan punto y coma para separar sentencias, y llaves para indicar bloques de código.
- NOTA DE CARGA: Eneboo carga todos los archivos/funciones .qs al arrancar. Eso permite que se ejecuten las acciones más rápido, pero a cambio el inicio es más lento…y si alguna función no está bien definida, el programa se bloquea DESDE EL INICIO, no espera a que se use. EN EL CASO DE QUE HAYAN DOS FUNCIONES DEFINIDAS CON EL MISMO NOMBRE, AUNQUE ESTÉN EN UN ARCHIVO DE CUALQUIER OTRO MÓDULO, COMO LAS «CARGA» TODAS AL INICIAR, ÉSTA FUNCIÓN NO SE EJECUTARÁ BIEN….PUEDEN APARECER LOS FORMULARIOS, PERO LOS «BOTONES» NO HARÁN NADA….habrá que cambiar el nombre a una de las dos funciones…
- NOTA 2: SCRIPT DEL MÓDULO….Además del «script» de cada uno de los «ejecutables» del módulo, hay un archivo de scripts comunes del módulo, para poner aquellos ejecutables que son comunes a todos los de ese módulo. Por ejemplo, en el módulo de «Informes» (módulo flfactinfo), para poder ejecutar el «Datos Generales» debe aparecer el «factinfo_general.ui» asociado a su «factinfo_general.qs» pero es necesario que exista el flfactinfo.qs para que funcionen los botones generales de OK, CANCELAR, etc (y en éste caso, el lanzar-jasper…)
Haz clic aquí para volver al índice
5. ESTRUCTURA DEL ARCHIVO:
Sub-Indice:
Haz clic aquí para volver al Sub-Indice
Haz clic aquí para volver al índice
1. Título:
ejemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
`/***************************************************************************` `i_masterclientes.qs - description` `-------------------` `begin : mar jun 27 2006` `copyright : (C) 2006 by InfoSiAL S.L.` `email : mail@infosial.com` `***************************************************************************/` `/***************************************************************************` `* *` `* This program is free software; you can redistribute it and/or modify *` `* it under the terms of the GNU General Public License as published by *` `* the Free Software Foundation; either version 2 of the License, or *` `* (at your option) any later version. *` `* *` `***************************************************************************/` |
Haz clic aquí para volver al Sub-Indice
2. Declaración de funciones
Sirve para «informar» al programa sobre TODAS las funciones en juego, y así se evita tener que poner las funciones en orden y que dé error porque no se ha definido una función: le dice al programa que «si no tienes definida una función, que la busques más adelante» en la zona de «Definición de funciones».
ejemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
`/** @class_declaration interna */` `////////////////////////////////////////////////////////////////////////////` `//// DECLARACION ///////////////////////////////////////////////////////////` `////////////////////////////////////////////////////////////////////////////` `//////////////////////////////////////////////////////////////////` `//// INTERNA /////////////////////////////////////////////////////` `class interna {` `aquí se pone un listado de las variables y funciones` `}` `//// INTERNA /////////////////////////////////////////////////////` `//////////////////////////////////////////////////////////////////` |
Haz clic aquí para volver al Sub-Indice
3. Definición de funciones:
Desarrollo de lo que hace cada función.
- La función «INTERNA» determina QUÉ FORM va a usar / abrir cuando ejecuten este «script» desde el toolbar o menú (el de «+»), ejemplo:
1 2 3 |
function interna_main() { var f:Object = new FLFormSearchDB("sincronizaciones"); |
…en éste caso, abrirá el form «sincronizaciones.ui»
- otro ejemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
`/** @class_definition interna */` `////////////////////////////////////////////////////////////////////////////` `//// DEFINICION ////////////////////////////////////////////////////////////` `////////////////////////////////////////////////////////////////////////////` `//////////////////////////////////////////////////////////////////` `//// INTERNA /////////////////////////////////////////////////////` `function interna_init()` `{` `connect (this.child("toolButtonPrint"), "clicked()", this, "iface.lanzar()");` `}` `//// INTERNA /////////////////////////////////////////////////////` `/////////////////////////////////////////////////////////////////` |
- OJO: VER NOTA DE CARGA (más arriba) para conflictos entre funciones (aunque estén en archivos distintos)
Haz clic aquí para volver al Sub-Indice
4. SCRIPTS (.qs):
https://groups.google.com /forum/#!searchin/eneboo/ uuid/eneboo/zVtFx0 E9HIw/j3bPxFyYPAUJ
…los filtros (de informes) se envían al informe jasper desde los criterios «ORDER BY» del «flfactinfo.qs» de la carpeta SCRIPTS del módulo INFORMES (adaptado para eneboo-reports)….
Ejemplo:
1 2 3 4 5 6 7 |
function nomFuncion() { ........ ........ return x; } |
Haz clic aquí para volver al Sub-Indice
Haz clic aquí para volver al índice
Para hacer pruebas con los SCRIPTS es bueno poner Eneboo en MODO DEBUG o DESARROLLO, y para eso hay que modificar: Ir a «Menú» – «Sistema» – «Administración» – «Opciones de comportamiento»…
![]()
![]()
Paso 1-b: …cerrar y volver a abrir la pestaña de «Albaranes»…
![]()
Paso 1-c: …clickar la «*mariquita«…
Paso 1-d: …fijarse en el nombre del archivo que se abre en QSA Workbench</str

Haz clic aquí para volver al índice
Solucionar errores de código:
Cuando hay un error en el código, Eneboo NO TE DEJA ARRANCAR y aparece un mensaje de ERROR. Eso es porque Eneboo «carga» todas las funciones ANTES de arrancar, no cuando las necesita. Eso hace que sea lento al empezar, pero más rápido luego.
Hay una manera de poner «detectores» en el código, y arrancar por «interfaz SDI», pero no me la sé…
Otra opción: En estos casos tengo éstas soluciones:
- una es volver a cargar la copia de seguridad de la base de datos, ANTERIOR a ese último cambio del código.
- la otra es meterme en la cocina y arreglar el error directamente sobre la base de datos…tienes que ir a LA TABLA FLFILES, en la que CADA LÍNEA guarda uno de los archivos de texto de la «mezcla»
- …si la opción 2 no es suficiente, es porque hay «algo» guardado en la caché de «regedit«….para borrarlo hay que (después de arreglar el código por la opción 2) entrar a Eneboo activando la opción «interfaz SDI» y luego, mediante menús, ir a «regenerar la base de datos«…y reiniciar Eneboo.
Para más información, seguir: como-sacar-la-mezcla-de-mi-base-de-datos/
Haz clic aquí para volver al índice



