# VTableInfo

Las funciones de esta clase permiten acceder a la información de la estructura de una tabla.

Tiene funciones generales de la tabla, como ver su id o su tipo, y funciones para obtener información de sus subobjetos: campos, indices e históricos.

También nos permite obtener otros VTablaInfo de las tablas enlazadas como maestros o históricos.

## Funciones

**De tabla**

| Retorno | Función                             |
| ------- | ----------------------------------- |
| String  | [comments](#comments)()             |
| String  | [id](#id)()                         |
| String  | [idRef](#idref)()                   |
| Boolean | [isInMemory](#isinmemory)()         |
| String  | [name](#name)()                     |
| Number  | [registerLength](#registerlength)() |
| String  | [singleName](#singlename)()         |
| Number  | [type](#type)()                     |

**De campos**

| Retorno    | Función                                                                                                                                                  |
| ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Numer      | [fieldBindType](#fieldbindtype)( Number nCampo )                                                                                                         |
| String     | [fieldBoundedTableId](#fieldboundedtableid)( Number nCampo )                                                                                             |
| VTableInfo | [fieldBoundedTableInfo](#fieldboundedtableinfo)( Number nPlural )                                                                                        |
| Number     | [fieldBufferLen](#fieldbufferlen)( Number nCampo )                                                                                                       |
| String     | [fieldComments](#fieldcomments)( Number nCampo )                                                                                                         |
| String     | [fieldComments](#fieldcomments)( String szIdCampo )                                                                                                      |
| Number     | [fieldCount](#fieldcount)()                                                                                                                              |
| Number     | [fieldDecimals](#fielddecimals)( Number nCampo )                                                                                                         |
| String     | [fieldId](#fieldid)( Number nCampo )                                                                                                                     |
| Boolean    | [fieldIsSigned](#fieldissigned)( Number nCampo )                                                                                                         |
| Number     | [fieldMaximumValue](#fieldmaximumvalue)( Number nCampo )                                                                                                 |
| Number     | [fieldMinimumValue](#fieldminimumvalue)( Number nCampo )                                                                                                 |
| String     | [fieldName](#fieldname)( Number nCampo )                                                                                                                 |
| String     | [fieldName](#string-fieldname-number-ncampo-number-nlenguaje-number-npais0-)( Number nCampo, Number nLenguaje, \[Number nPais=0] )                       |
| String     | [fieldName](#string-fieldname-string-szidprimariocampo-)( String szIDPrimarioCampo )                                                                     |
| String     | [fieldName](#string-fieldname-string-szidprimariocampo-number-nlenguaje-number-npais0-)( String szIDPrimarioCampo, Number nLenguaje, \[Number nPais=0] ) |
| Number     | [fieldObjectType](#fieldobjecttype)( Number nCampo )                                                                                                     |
| String     | [fieldParentFieldId](#fieldparentfieldid)( Number nCampo )                                                                                               |
| Number     | [fieldParentFieldNumber](#fieldparentfieldnumber)( Number nCampo )                                                                                       |
| Number     | [fieldType](#fieldtype)( Number nCampo )                                                                                                                 |

**De índices**

| Retorno | Función                                  |
| ------- | ---------------------------------------- |
| Number  | [indexCount](#indexcount)()              |
| String  | [indexId](#indexid)( Number nIndex )     |
| String  | [indexName](#indexname)( Number nIndex ) |
| Number  | [indexType](#indextype)( Number nIndex ) |

**De históricos**

| Retorno                                                                                                  | Función                                                             |
| -------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------- |
| String                                                                                                   | [pluralBoundedIndexId](#pluralboundedindexid)( Number nPlural )     |
| [VObjectInfo](https://doc.velneo.com/29/velneo-vdevelop/scripts/lenguajes/javascript/clases/vobjectinfo) | [pluralBoundedIndexInfo](#pluralboundedindexinfo)( Number nPlural ) |
| String                                                                                                   | [pluralBoundedTableId](#pluralboundedtableid)( Number nPlural )     |
| VTableInfo                                                                                               | [pluralBoundedTableInfo](#pluralboundedtableinfo)( Number nPlural ) |
| Number                                                                                                   | [pluralCount](#pluralcount)()                                       |
| String                                                                                                   | [pluralId](#pluralid)( Number nPlural )                             |
| String                                                                                                   | [pluralName](#pluralname)( Number nPlural )                         |

**De localizadores por Id**

| Retorno | Función                                              |
| ------- | ---------------------------------------------------- |
| Number  | [findField](#findfield)( String szIDPrimarioCampo )  |
| Number  | [findIndex](#findindex)( String szIDPrimarioIndice ) |
| Number  | [findPlural](#findplural)( String szIDPrimarioHist ) |

## Enumeraciones

**Tipos de campo**

* FieldTypeAlpha256 = 00 - Alfa 256
* FieldTypeAlpha128 = 01 - Alfa 128
* FieldTypeAlpha64 = 02 - Alfa 64
* FieldTypeAlpha40 = 03 - Alfa 40
* FieldTypeAlphaLatin1 = 04 - Alfa Latin1
* FieldTypeAlphaUtf16 = 05 - Alfa UTF-16
* FieldTypeNumeric = 06 - Numérico
* FieldTypeDate = 07 - Fecha
* FieldTypeTime = 08 - Hora
* FieldTypeDateTime = 09 - Tiempo (fecha y hora)
* FieldTypeBool = 10 - Booleano
* FieldTypeObject = 11 - Objeto
* FieldTypeFormulaNumeric = 12 - Fórmula numérica
* FieldTypeFormulaAlfa = 13 - Fórmula alfabética
* FieldTypeFormulaDate = 14 - Fórmula fecha
* FieldTypeFormulaDateTime = 15 - Fórmula tiempo (fecha y hora)
* FieldTypeVirtualBind = 18 - Puntero virtual

**Tipos de campos objeto**

* ObjectTypePicture = 0 - Imagen
* ObjectTypeText = 1 - Texto
* ObjectTypeRichText = 2 - Texto enriquecido
* ObjectTypeBinary = 3 - Binario
* ObjectTypeFormula = 4 - Fórmula dinámica

**Tipos de enlaces de campo (bindType)**

* BindTypeNone = 0 - Ninguno
* BindTypeMaster = 1 - Tabla maestra
* BindTypeStatic = 2 - Tabla estática
* BindTypeIndirectReal = 3 - Indirecto real
* BindTypeIndirectVirtual = 4 - Indirecto virtual
* BindTypeSingularPluralPos = 5 - Singular de plural por posición
* BindTypeSingularPluralIndex = 6 - Singular de plural por índice
* BindTypeAdjacentSibling = 7 - Hermano contiguo
* BindTypeMasterExt = 8 - Maestro de extensión

**Tipos de índices**

* IndexTypeSingleKey = 0 - Clave única
* IndexTypeWords = 1 - Palabras
* IndexTypeMultiKey = 2 - Múltiples claves
* IndexTypeAcceptRepeat = 3 - Acepta repetidas
* IndexTypeWordParts = 4 - Trozos de palabras

**Tipos de tablas**

* TypeMaster = 0 - Maestra
* TypeHistorical = 1 - Histórica
* TypeMasterSub = 2 - Submaestra
* TypeMasterTree = 3 - Arbolada
* TypeMasterExt = 4 - Maestro de extensión

## Documentación de funciones

### Funciones de tabla

#### String comments() <a href="#comments" id="comments"></a>

Devuelve el valor de la propiedad comentarios de la tabla.

Esta función se ha incorporado al API a partir de la versión 7.14

#### String id() <a href="#id" id="id"></a>

Devuelve el identificador de la tabla. Por ejemplo: "CLIENTES".

#### String idRef() <a href="#idref" id="idref"></a>

Devuelve el idRef (Alias\_Aplicación/Id\_Tabla) de la tabla. Por ejemplo: "ERP/CLIENTES".

#### Boolean isInMemory() <a href="#isinmemory" id="isinmemory"></a>

Devuelve true si la tabla reside en memoria.

#### String name() <a href="#name" id="name"></a>

Devuelve el nombre plural de la tabla en el idioma configurado. Si no se especifican valores asume el idioma en curso. El código de país es opcional.

Parámetros:

* nLenguage: código del idioma. Ver tabla de idiomas en documentación de Qt.
* nPais: código del país. Ver tabla de idiomas en documentación de Qt.

#### Number registerLength() <a href="#registerlength" id="registerlength"></a>

Devuelve la longitud en bytes del registro de la tabla.

#### String singleName() <a href="#singlename" id="singlename"></a>

Devuelve el nombre singular de la tabla.

#### Number type() <a href="#type" id="type"></a>

Devuelve el código de tipo de tabla. Ver enum de tipos de tablas.

### Funciones de campos

#### Numer fieldBindType( Number nCampo ) <a href="#fieldbindtype" id="fieldbindtype"></a>

Devuelve el tipo de enlace del campo. Ver enum de tipos de enlaces de campo.

Parámetros:

* nCampo: número de campo, el primero es el 0.

#### String fieldBoundedTableId( Number nCampo ) <a href="#fieldboundedtableid" id="fieldboundedtableid"></a>

Devuelve el identificador de la tabla enlazada.

Parámetros:

* nCampo: número de campo, el primero es el 0.

#### VTableInfo fieldBoundedTableInfo( Number nPlural ) <a href="#fieldboundedtableinfo" id="fieldboundedtableinfo"></a>

Devuelve un objeto de la clase VTableInfo de la tabla enlazada.

Parámetros:

* nPlural: número ordinal del plural en la tabla.

#### Number fieldBufferLen( Number nCampo ) <a href="#fieldbufferlen" id="fieldbufferlen"></a>

Devuelve el tamaño en bytes de los caracteres que admite el buffer del campo. Por ejemplo un campo Alfa40 de 2 bytes de buffer, que puede almacenar 3 caracteres, devolverá 2.

Parámetros:

* nCampo: número de campo, el primero es el 0.

#### String fieldComments( Number nCampo ) <a href="#fieldcomments" id="fieldcomments"></a>

Devuelve el valor de la propiedad comentarios del campo.

Parámetros:

* nCampo: número de campo, el primero es el 0.

Esta función se ha incorporado al API a partir de la versión 7.14

#### String fieldComments( String szIdCampo ) <a href="#fieldcomments" id="fieldcomments"></a>

Devuelve el valor de la propiedad comentarios del campo.

Parámetros:

* szIdCampo: identificador del campo.

Esta función se ha incorporado al API a partir de la versión 7.14

#### Number fieldCount() <a href="#fieldcount" id="fieldcount"></a>

Devuelve el número de campos del registro de la tabla.

#### Number fieldDecimals( Number nCampo ) <a href="#fielddecimals" id="fielddecimals"></a>

Devuelve el nº de decimales de un campo numérico.

Parámetros:

* nCampo: número de campo, el primero es el 0.

#### String fieldId( Number nCampo ) <a href="#fieldid" id="fieldid"></a>

Devuelve el identificador del campo.

Parámetros:

* nCampo: número de campo, el primero es el 0.

#### Boolean fieldIsSigned( Number nCampo ) <a href="#fieldissigned" id="fieldissigned"></a>

Devuelve true si el campo numérico admite signo.

Parámetros:

* nCampo: número de campo, el primero es el 0.

#### Number fieldMaximumValue( Number nCampo ) <a href="#fieldmaximumvalue" id="fieldmaximumvalue"></a>

Devuelve el valor máximo de un campo numérico.

Parámetros:

* nCampo: número de campo, el primero es el 0.

#### Number fieldMinimumValue( Number nCampo ) <a href="#fieldminimumvalue" id="fieldminimumvalue"></a>

Devuelve el valor mínimo de un campo numérico.

Parámetros:

* nCampo: número de campo, el primero es el 0.

#### String fieldName( Number nCampo ) <a href="#fieldname" id="fieldname"></a>

Devuelve el nombre del campo.

Parámetros:

* nCampo: número de campo, el primero es el 0.

#### String fieldName( Number nCampo, Number nLenguaje, \[Number nPais=0] )

Devuelve el nombre del campo en el idioma y país especificados en los parámetros.

Parámetros:

* nCampo: número de campo, el primero es el 0.
* nLenguaje: número que corresponde al código del lenguaje (Tabla de código Qt).
* nPais: número que corresponde al código del país (Tabla de códigos Qt).

#### String fieldName( String szIDPrimarioCampo )

Devuelve el nombre del campo.

Parámetros:

* szIDPrimarioCampo: identificador del campo.

#### String fieldName( String szIDPrimarioCampo, Number nLenguaje, \[Number nPais=0] )

Devuelve el nombre del campo en el idioma y país especificados en los parámetros.

Parámetros:

* szIDPrimarioCampo: identificador del campo.
* nLenguaje: número que corresponde al código del lenguaje (Tabla de código Qt).
* nPais: número que corresponde al código del país (Tabla de códigos Qt).

#### Number fieldObjectType( Number nCampo ) <a href="#fieldobjecttype" id="fieldobjecttype"></a>

Devuelve el tipo de objeto de un campo objeto. Ver enum de tipos de campos objeto.

Parámetros:

* nCampo: número de campo, el primero es el 0.

#### String fieldParentFieldId( Number nCampo ) <a href="#fieldparentfieldid" id="fieldparentfieldid"></a>

Devuelve el identificar del campo padre de una tala submaestra.

Parámetros:

* nCampo: número de campo, el primero es el 0.

#### Number fieldParentFieldNumber( Number nCampo ) <a href="#fieldparentfieldnumber" id="fieldparentfieldnumber"></a>

Devuelve el número de campo del campo padre de una tala submaestra.

Parámetros:

* nCampo: número de campo, el primero es el 0.

#### Number fieldType( Number nCampo ) <a href="#fieldtype" id="fieldtype"></a>

Devuelve el tipo de campo. Ver enum de tipos de campo.

Parámetros:

* nCampo: número de campo, el primero es el 0.

### Funciones de índices

#### Number indexCount() <a href="#indexcount" id="indexcount"></a>

Devuelve el número de índices de la tabla.

#### String indexId( Number nIndex ) <a href="#indexid" id="indexid"></a>

Devuelve el identificador del índice.

Parámetros:

* nIndex: número de orden del índice, el primer valor es el 0.

#### String indexName( Number nIndex ) <a href="#indexname" id="indexname"></a>

Devuelve el nombre del índice.

Parámetros:

* nIndex: número de orden del índice, el primer valor es el 0.

#### Number indexType( Number nIndex ) <a href="#indextype" id="indextype"></a>

Devuelve el identificador del índice. Ver enum de tipos de índices.

Parámetros:

* nIndex: número de orden del índice, el primer valor es el 0.

### Funciones de históricos

#### String pluralBoundedIndexId( Number nPlural ) <a href="#pluralboundedindexid" id="pluralboundedindexid"></a>

Devuelve el identificador del índice de la tabla enlazada maestra.

Parámetros:

* nPlural: número de orden del plural, el primero valor es el 0.

#### VObjectInfo pluralBoundedIndexInfo( Number nPlural ) <a href="#pluralboundedindexinfo" id="pluralboundedindexinfo"></a>

Devuelve un objeto de la clase [VObjectInfo](https://doc.velneo.com/29/velneo-vdevelop/scripts/lenguajes/javascript/clases/vobjectinfo) del índice de la tabla enlazada maestra.

Parámetros:

* nPlural: número de orden del plural, el primero valor es el 0.

#### String pluralBoundedTableId( Number nPlural ) <a href="#pluralboundedtableid" id="pluralboundedtableid"></a>

Devuelve el identificador de la tabla enlazada maestra.

Parámetros:

* nPlural: número de orden del plural, el primero valor es el 0.

#### VTableInfo pluralBoundedTableInfo( Number nPlural ) <a href="#pluralboundedtableinfo" id="pluralboundedtableinfo"></a>

Devuelve un objeto de la clase VTableInfo de la tabla enlazada maestra.

Parámetros:

* nPlural: número de orden del plural, el primero valor es el 0.

#### Number pluralCount() <a href="#pluralcount" id="pluralcount"></a>

Devuelve el número de enlaces plurales de la tabla.

#### String pluralId( Number nPlural ) <a href="#pluralid" id="pluralid"></a>

Devuelve el identificado del plural.

Parámetros:

* nPlural: número de orden del plural, el primero valor es el 0.

#### String pluralName( Number nPlural ) <a href="#pluralname" id="pluralname"></a>

Devuelve el nombre del plural.

Parámetros:

* nPlural: número de orden del plural, el primero valor es el 0.

### Funciones de localizadores por Id

#### Number findField( String szIDPrimarioCampo ) <a href="#findfield" id="findfield"></a>

Devuelve el número de campo de un identificador.

Parámetros:

* szIdPrimarioCampo: identificador del campo.

#### Number findIndex( String szIDPrimarioIndice ) <a href="#findindex" id="findindex"></a>

Devuelve el número del índice de un identificador.

Parámetros:

* szIdPrimarioIndice: identificador del índice.

#### Number findPlural( String szIDPrimarioHist ) <a href="#findplural" id="findplural"></a>

Devuelve el número del enlace plural de un identificador.

Parámetros:

* szIdPrimarioIndice: identificador del enlace plural.

## Ejemplos

### 1. Controlar si es una tabla maestra normal

```javascript
if (VTableInfo.TypeMaster == theRegisterIn.tableInfo().type())
{
    .....
}

o bien

if (VTableInfo.TypeMaster == theRegisterListIn.tableInfo().type())
{
    .....
}
```

### 2. Eliminar todos los plurales de la tabla ENT-M de vERP

```javascript
/**
 * Eliminar todos los plurales de un registro
 *
 * @param {Object} root Objeto desde el que se ejecuta  la función
 * @param {VRegister} registro Registro del que se desean eliminar los plurales
 * @returns {Boolean} True si se han eliminado todos los plurales o false en caso contrario
 */
velneoDB.eliminarPlurales = function (root, registro) {

    // VARIABLES: declaración de las variables
    var listaPlurales,
        indice = 0,
        numPlurales,
        numRegistro = 0,
        numRegistros,
        pluralId,
        registroPlural,
        retorno = true,
        tablaInfo,
        transActiva,
        transNueva;

    // PROCESO: se leen todas las tablas de la aplicación incluídas las heredadas
    if (root) {

        // Si no hay transacción se crea una nueva      
        transActiva = theRoot.existTrans();
        if (transActiva === false) {
            transNueva = theRoot.beginTrans("Eliminando históricos de la tabla " + tablaInfo.name());
        }
        if (transActiva || transNueva) {

            // Se analiza la tabla para recorrer sus plurales
            tablaInfo = registro.tableInfo();
            numPlurales = tablaInfo.pluralCount();

            // Se recorren los plurales de la tabla
            for (indice; indice < numPlurales; indice += 1) {
                pluralId = tablaInfo.pluralId(indice);
                listaPlurales = theRegisterIn.loadPlurals(pluralId);
                numRegistros = listaPlurales.size();

                // Se eliminan los registros plurales
                if (numRegistros > 0) {
                    for (numRegistro; numRegistro < numRegistros; numRegistro += 1) {
                        registroPlural = listaPlurales.readLockingAt(numRegistro);
                        if (registroPlural.deleteRegister() === false) {
                            retorno = false;
                        }
                    }
                }
            }

            // Si se ha creado una transacción nueva, se cierra
            if (transNueva === true) {
                theRoot.commitTrans();
            }
        }
    }

    // RETORNO: retornor true si se han podido eliminar todos los plurales
    return retorno;
};
```
