# 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/25/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/25/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;
};
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://doc.velneo.com/25/velneo-vdevelop/scripts/lenguajes/javascript/clases/vtableinfo.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
