Estructura definición de campos de objetos QU_Table
Los campos de una tabla SQL (clases que extiendan la clase QU_Table) se definen con un array con los siguientes formatos posibles:
1. Campos de Datos (QU_ColReal)
Este es el formato más común y se utiliza para definir campos que almacenarán datos reales en la base de datos. La mayoría de los parámetros se interpretan de manera estándar.
Estructura del array:
array('<colType>,<colCode>,<sqlType>,<lenght>,<htmlType>,<description>,<values>,<defaultValue>,<onkeyupCol>')
Valores específicos para este formato:
<colType>:''(cadena vacía) indica que es una línea de tipo campo[QU_ColReal]. También puede incluir modificadores:H: Hidden, líneas reservadas para usos internos (no salen en pantalla). Si la línea es un 'link', se cargará internamente y se renderizará en los edits, aunque oculta.X: Solo para 'admin', visible únicamente para usuarios de tipo 'admin'.Y: Solo para 'superadmin', visible únicamente para usuarios de tipo 'superadmin'.L: Listed, se lista por defecto en los browse.l(obsoleto): Listed/edited, se lista y edita por defecto en los browse.N(obsoleto): 'nombre' listed, se listan los campos 'nombre' (de salida) por defecto en los browse.t: Indica que el título del campo no debe aparecer en el Edit (se usa para ocultar los títulos de los campos).e/b/n: Si procede, solo aparecerá el botón de Look(e), Flow(b), o Ninguno (n).B: Indica que el campo debe aparecer en la Barra de título/etiquetas del 'look'.R: Indica que el título del campo o link se usará en los reports sin alterar, y por tanto no se permitirá modificar en la edición de los reports que lo usen (siempre es posible modificarlo activando las traducciones en el usuario). Esto fuerza que los cambios de nombres se propaguen siempre a todos los informes.
<colCode>: Nombre del campo/control, con letras, números y guiones bajos. Es imprescindible usar siempre minúsculas, ya que las mayúsculas se reservan para sufijos y prefijos de control. Existen nombres reservados que permiten adicionar propiedades:cif: Si empieza por 'cif', validará que el contenido sea un CIF correcto.email: Si contiene 'email' y no es numérico, validará que el contenido sea un e-mail bien formado.iban_: Si contiene 'iban_' y no es numérico, buscará seis campos (iban_pais/banco/oficina/dc/cuenta/extra) y validará que el IBAN sea correcto.descuento: Si contiene 'descuento', validará que el contenido esté formado por valores numéricos (con posibles decimales) separados por símbolos '+'.filter: Si contiene 'filter' y el campo tiene un Join definido, el browse de la join trabajará en modo 'filter', permitiendo marcar más de un código para concatenarlos en el campo destino como un filtro.
<sqlType>: Tipo SQL del campo, con posibles valores:- Tipos enteros:
TINYINT(99),SMALLINT(9(4)),MEDIUMINT(9(7)),INT(9(9)),BIGINT(9(19)). - Tipos decimales:
DECIMAL. - Tipos de fecha/hora:
DATE,DATETIME,TIME,date(sin siglos visibles),time(sin segundos visibles). - Tipos de cadena:
CHAR(hasta 255),VARCHAR(hasta 255, case-insensitive),BINARY(hasta 255),VARBINARY(hasta 255, case-sensitive). - Tipos de texto largo:
TEXT(hasta 65.535, case-insensitive),MEDIUMTEXT(hasta 16 megas, case-insensitive),LONGTEXT(hasta 4 gigas, case-insensitive). - Tipo binario largo:
BLOB(idem*TEXT, pero case-sensitive).
- Tipos enteros:
<lenght>: Longitud de dígitos:ZZ9: Para camposCHAR,VARCHAR.Z999: Para camposDECIMAL(los 2 primeros son los dígitos totales, y los 2 últimos los decimales). ¡Cuidado! NUNCA poner ceros delante (ej: sí-"200" no-"0200", ya que PHP interpreta "0200" como octal).0: Para el resto de campos.
<htmlType>: Tipo Html del campo, con el formato:{'I[99][%]','M9999[%]','R'} + ['N'] + ['n'] + [{'a','A','B'}] + ['+'] + ['S'] + ['P'] + ['H'] + ['O'] + ['o'] + ['T'] + ['K'] + ['X'] + ['Y'] + ['Z'] + ['G'] + ['D'] + ['d'] + ['F'] + ['I'] + ['C'] + ['c'] + ['sql'] + ['sqls'] + ['Q'] + ['php'] + ['L'] + [',xxx'].I[99|999][%]: Input normal (los 9's opcionales permiten forzar un tamaño para la pantalla).M{9999|999999}[%]: Select Múltiple (los 9's son el número de líneas/columnas de la "select").R: Radio button.N: Campo numérico AUTO-INCREMENT (numeración automática por el gestor de BBDD). Solo puede haber uno por fichero; es imprescindible un índiceUNIQUEde la tabla que sea solo este campo.n: Campo numérico AUTO-HASH (numeración automática aleatoria por PHP, 18 dígitos). Quartup crea una clave primariaPRIMARYautomáticamente con este campo solo.a: Campo numérico de numeración automática por Quartup (antes de grabar). Imprescindible un índice de la tabla con este campo. El primer autonumérico tipo 'a' requiere que su índice asociado sea 'unique' y lo incluya al final.A: Igual quea, pero permite inserciones (renumeraciones) 'encima' de un registro. Solo puede haber un campo insertable de tipo 'A' o 'B', y debe ser el primero definido.B: Igual queA, pero admite también inserciones 'por debajo'. Si se definen varios 'A' o 'B', solo se procesa el primero y el resto se tratan como 'a'.+: Para numéricos, sin signo (solo positivo). Para alfanuméricos, siempre 'uppercase' (útil para códigos).S: Secure, para campos "password" (se ven con asteriscos).P: Campo protegido, el usuario no puede modificarlo pero se ve en pantalla (cambia solo). Para campossqlophp, los desprotege.H: Campo oculto, no se ve en pantalla (pero sí se carga por si hay internal-updates).O: Obligatorio llenar en edición. En campos con Join, valida que el campo 'nombre' asociado tenga valor correcto.o: No se valida el valor aunque esté lleno (solo tiene sentido en campos con Join).T: Control para activar/desactivar totales del campo. Invierte el valor por defecto: numéricos sin join/radio son totalizables; el resto no. Importante parasqlSelectconGROUP-BY.K: Se añadirá botón para num-keypad.X: Accesible solo para usuario tipo "admin".Y: Accesible solo para usuario tipo "superadmin".Z: Campo zero-visible (numérico que deben verse siempre los ceros en pantalla).G: Campo con botones grandes (por ahora solo en 'date': botones de cambios de día/mes/año).D: Campo 'document' ligado con la gestión documental del DMS (debe ser unBIGINT).d: Campo 'document' ligado con la gestión documental interna (debe serINT).F: Campo 'file' para almacenar un archivo (debe serBLOBo mayor). Los datos paravalsson:tabla-para-almacenar-archivo | id-tabla-archivo | campo-local-filename | campo-local-extension.I: Campo 'image' (debe ser unTEXT, donde se almacena el directorio y el archivo de la imagen). Los datos paravalsson:directorio|expresión-php-para-montar-el-nombre-sin-extensión|with-visible-en-pantalla,height-visible-en-pantalla|max-size|r/b según right/bottom-position-en-pantalla. Quedan "Protected" automáticamente, salvo que se indiqueP.C: Campo 'color' (debe ser unCHAR(6)), donde se almacena un colorrgbde 6 dígitos. Al hacer 'click' se abre un color-picker.c: Campo 'compressed' (debe ser un*TEXT/*BLOB), donde se almacena un texto de tamaño importante. La compresión optimiza espacio y tránsito.sql: Campo expresión 'sql', definida envals. Quedan "Protected" automáticamente, salvo que se indiqueP. Si tiene join:expresión-sql | expresión-join.sqls: Igual quesql, pero añadiendo una expresión 'php' adicional para evaluar en los totales. También puede tener join:sql | php-totales | join.Q: Campo 'sql' desactivado por defecto en las lecturas.php: Campo expresión 'php', definida envals. Quedan "Protected" automáticamente, salvo que se indiqueP. Sivalses una string vacía, el valor se asigna manualmente ensqlSelecty no se evalúa.L: Campo 'drop-down-list' forzado.,XXX: Tipo de campo DECIMAL (decimales configurables en la ficha de la empresa). Valores posibles paraXXX:ST: stocks/cantidades compras/ventas (unidades)SE: stocks/cantidades compras/ventas (embalajes)PME: precio medio ponderado en EurosPCEPCD: precios compras Euros/DivisasPVEPVD: precios ventas Euros/DivisasDT: descuentosBU: bultosPE: pesosVO: volúmenesCA: cambios de divisas y de embalajesCM: capacidades métricasMD: medidas métricasTP: tiempos de producciónCP: cambios de producciónHP: horas (duraciones) de producciónAP: cantidades de producción (CANTIDAD-FIJ/VAR)RP: revisiones de producción (NIVEL-REVISION)
<description>: Descripción del campo (aparecerá en las ediciones).<values>: Valores del campo:- Para campos "Radio" (
htmlType="R"): String con la lista de valores:"A,valor a[,x[,s]]|B,valor b[,x[,s]]|...".[,x]es valor por defecto,[,s]es salto de línea.[,checkbox]convierte el 'radio' en 'checkbox' (1º valor 'unchecked', 2º 'checked'). - Para campos
htmlType='F'(archivo):tabla-para-almacenar-archivo | id-tabla-archivo | campo-local-filename | campo-local-extension. - Para campos
htmlType='I'(imagen):directorio|expresión-php-para-montar-el-nombre-sin-extensión|with-visible-en-pantalla,height-visible-en-pantalla|max-size|r/b según right/bottom-position-en-pantalla. - Para campos
htmlType='sql'ohtmlType='sqls': Expresión SQL y opcionalmente PHP para totales y Join (expresión-sql | [expresión-php] | [join]). - Para campos
htmlType='php': Expresión PHP (expresión-php).
- Para campos "Radio" (
<defaultValue>: Valores por defecto:- Para campos "no-Radio": El valor por defecto.
- Para campos "DATE": Si vacío, coge fecha del día. Otros valores:
"00000000","m","M","a","A","I","F".
<onkeyupCol>: Código del campo del que se disparará elonkeyup. Si es'ON'(mayúsculas), se generará una llamada alonkeyupdel propio campo para validaciones controladas por el servidor.
2. Enlaces con Otros Ficheros (Joins)
Este formato se dedica a la definición de enlaces con otras tablas o ficheros, permitiendo seleccionar valores de ellos.
Estructura del array:
array('<colType>,<colCode>,<sqlType>,<lenght>,<htmlType>,<description>,<values>,<defaultValue>,<onkeyupCol>')
Valores específicos para este formato:
<colType>:E: Enlace con otro fichero. Sivalsse deja vacío,defValse interpreta como código HTML a incrustar.F: Enlace con otro fichero en formato "iframe".a: Complemento del 'F', desactiva la línea en blanco encima del 'iframe'.
<colCode>: Nombre del campo que contendrá el código del enlace.<sqlType>: Se define como el tipo de dato del campo que almacena la clave foránea (ej.,INT,CHAR).<lenght>: Longitud del campo clave foránea.<htmlType>: GeneralmenteI(Input) oI[99]para un input de texto. Para enlaces coniframe, se utiliza el indicadorI.<description>: Descripción del campo de enlace.<values>: Imprescindible. Contiene la definición del Join.<defaultValue>:- Para
colType='E': Sivalsestá vacío, se interpreta como código HTML a incrustar. Si se usa para el 'flow', todos los 'ids' hay que sufijarlos con 'QQQ'. - Para
colType='F': Puede ser un array: el primer elemento será el código HTML a incrustar dentro del 'iframe' y el segundo el código a incrustar a continuación del 'iframe'. - Puede contener datos extras a enviar al browse (ej.,
'&inf=pr,filter=cialdoco.sw_estado%21%3D%27T%27').
- Para
<onkeyupCol>: Igual que en el formato de Campos de Datos.
3. Elementos Estructurales y de Presentación
Este formato se utiliza para definir elementos que no son campos de datos propiamente dichos, sino que organizan la interfaz o presentan información.
Estructura del array:
array('<colType>,<colCode>,<sqlType>,<lenght>,<htmlType>,<description>,<values>,<defaultValue>,<onkeyupCol>')
Valores específicos para este formato:
3.1. Pestañas de Separación
Este grupo se enfoca en la creación de pestañas para organizar el contenido. Se utilizan para dividir la interfaz en secciones navegables.
<colType>:P(pestaña de separación).<colCode>: Contiene los datos de la pestaña, separados por pipes:título-pestaña|titulo-corto|key.título-pestaña: El título completo que se mostrará en la pestaña.titulo-corto: El título abreviado que se verá en la capa escamoteable (si esfalse, se omite).key: Un código de tecla para activar la pestaña vía teclado (ej.,esc,f6,f7).
- Comportamientos especiales de
<colCode>:- Si
colCodese deja en blanco, se interpreta como un "bloque fijo" que no tiene botón de activación y siempre está visible. - Si se usa
PPcomocolCode, indica que la pestaña debe tener una raya de separación en el bloque de secciones con la siguiente pestaña.
- Si
- Otros parámetros: Los demás parámetros (
<sqlType>,<lenght>, etc.) suelen estar vacíos o no son relevantes para este tipo de elemento.
3.2. Fieldsets de Separación
Este grupo gestiona la apertura y cierre de fieldsets, que son elementos HTML utilizados para agrupar visualmente controles relacionados dentro de un formulario.
<colType>:Q: Abre un fieldset.q: Cierra un fieldset.
<colCode>(solo paraQ): Puede contener una lista pipe-separada con los siguientes datos:{color-fondo ó html-class} | título-fieldset | id-fieldset | indicador-'closed'.color-fondo ó html-class: Define el estilo visual del fieldset.título-fieldset: El título que se mostrará en el fieldset.id-fieldset: Un identificador único para el fieldset.indicador-'closed': Si está presente, el fieldset se mostrará cerrado por defecto.
- Otros parámetros: Los demás parámetros (
<sqlType>,<lenght>, etc.) suelen estar vacíos o no son relevantes.
3.3. Separadores Visuales
Este grupo incluye elementos para añadir separaciones visuales simples en la interfaz, como rayas o espacios en blanco.
<colType>:r: Raya simple de separación.A: Línea en blanco de separación.
<colCode>:- Para
r: Puede contener el color de la raya. - Para
A: Si se usaAn(dondenes un número), insertaránlíneas en blanco.
- Para
- Otros parámetros: Los demás parámetros (
<sqlType>,<lenght>, etc.) suelen estar vacíos o no son relevantes.
3.4. Texto HTML
Este grupo se utiliza para incrustar bloques de texto HTML directamente en la interfaz.
<colType>:T(texto html).<colCode>: Contiene el texto HTML que se mostrará en la interfaz.- Otros parámetros: Los demás parámetros (
<sqlType>,<lenght>, etc.) suelen estar vacíos o no son relevantes.
3.5. Grupos de Campos
Este grupo permite organizar campos en grupos visuales, lo que puede implicar configuraciones de columnas para mejorar la presentación.
<colType>:G: Abre un grupo de campos.g: Cierra un grupo de campos.
<colCode>(solo paraG): Contiene el título del grupo. Si se usaGn(dondenes un número), el grupo se creará con uncolspan=nen eltdcontenedor.<sqlType>(solo paraG): Define la configuración de las columnas del grupo.- Puede contener porcentajes de
widthseparados por comas para los títulos y los inputs (ej.,"20%,80%"). - Puede ser
'c'para configuración. - Modificadores de alineación:
r:align=rightm:align=center(por defecto esleft)t:valign=topb:valign=bottom(por defecto esvalign=middle)
- Si está vacío, ocupará el ancho que pueda.
- Puede contener porcentajes de
- Otros parámetros: Los demás parámetros (
<lenght>, etc.) suelen estar vacíos o no son relevantes.
3.6. Líneas Anuladas (Void)
Este grupo se refiere a líneas que están inactivas y no se procesan en el constructor de la tabla.
<colType>:V(void).- Comportamiento: Las líneas con este
colTypeno se cargarán en el constructor ni se procesarán. - Uso habitual: Se utilizan a menudo para asignar dinámicamente campos según la configuración o para campos en "stand-by" para usos futuros.
- Otros parámetros: Los demás parámetros (
<colCode>,<sqlType>, etc.) son irrelevantes ya que la línea no se procesa.
Espero que esta organización te resulte mucho más clara y útil para navegar por tu documentación. ¿Necesitas alguna aclaración adicional sobre alguno de estos puntos, o te gustaría que exploráramos algún ejemplo práctico?