Documentación de Velneo
35
35
  • Introducción
  • Velneo
    • Requerimientos de Velneo
    • Notas de la versión
    • Funcionalidades comunes a los componentes de Velneo
      • Instalación
      • Conexión con Velneo vServer
      • Cambiar el estilo de visualización
      • Cambiar el aspecto
      • Ver u ocultar barras de herramientas
      • Mensajería interna entre usuarios
      • Soporte de alta resolución (HighDPI)
      • Carpetas de trabajo de los componentes de Velneo
      • Numeración de versiones de Velneo
      • Certificado de firma digital para componentes de Windows
    • Tipos de archivo generados por Velneo
    • Velneo Web
      • Plataformas y navegador compatibles
      • Acceso a recursos del sistema
      • Siempre HTTPS
      • Funcionamiento de VATPS por websocket
      • CORS para llamadas XmlHttpRequest vía API o mediante el objeto Consumo servicio Web
  • Aplicación vLanzadera y login social
    • Configuración de vLanzadera en Apache en el Cloud de Velneo
    • Configuración de vLanzadera en Apache en servidores propietarios
  • Velneo vDevelop
    • ¿Qué es Velneo vDevelop?
    • Identificación de usuario
    • Interfaz de Velneo vDevelop
      • Dock de proyecto
      • Menú Soluciones
      • Menú Proyectos
      • Menú Objetos
      • Menú Scripts
      • Menú Edición
      • Menú Ver
      • Menú Componentes
      • Menú Ayuda
    • Lista de teclas aceleradoras de Velneo vDevelop
    • Soluciones y proyectos
    • Control y edición de proyectos
    • Herencia
    • Inspectores
    • Proyectos objetos y editores
      • Proyecto de datos
      • Proyecto de aplicación
        • Crear CSS para aplicar a objetos en edición
      • Objeto
        • Refactorización automátca
        • Exportación e importación de objetos
      • Objetos de proyecto de datos
        • Indice complejo
        • Tabla
          • Actualización
          • Campo
          • Enlace
          • Indice
          • Plural
          • Traspaso de campo
          • Trigger
        • Tabla estática
        • Variable
      • Objetos de proyecto de aplicación
        • Acción
        • Alternador de lista
        • Arbol visor de tablas
        • Bloc de formularios
        • Casillero
        • Cesta
        • ComboView
        • Control SVG
        • Dispositivo serie
        • Formulario
          • Controles de visualización
            • Texto estático
            • Nombre de campo
            • Visor HTML
            • Dibujo
            • Imagen SVG
            • Caja de grupo
            • Menú arbolado
            • Barra de progreso
            • Reloj
            • Manómetro
            • Termómetro
          • Controles de edición
            • Caja de texto
            • Caja de texto enriquecido
            • Data catcher edit
            • Edición alfabética
            • Edición fecha
            • Edición fecha/hora
            • Edición fórmula
            • Edición hora
            • Edición numérica
            • Edición senda fichero
            • Edición senda directorio
            • Objeto dibujo
          • Controles de entrada
            • Botón
            • Botón de check
            • Botón de radio
            • Calendario
            • ComboBox
            • Deslizador
            • Dial
            • ListBox
            • Rueda
          • Contenedores
            • Área de scroll
            • Caja de formularios
            • Pila de formularios
            • Separador de formularios
            • Splitter
            • Vista de datos
          • Layout
          • Tree widget
          • Controles SVG
          • Extensión de ficha
        • Formulario QML
        • Gráfico
        • Imagen SVG
        • Impresora lógica
        • Informe
          • Editor de informes
          • Agrupamiento
          • Sección
          • Cálculo
        • Informe personalizable
          • Diseñando un informe personalizable básico
          • Diseño avanzado
          • Diseñando un informe personalizable
          • Añadiendo orígenes de datos
          • Añadiendo elementos al informe
          • Características avanzadas
          • Etiquetas
          • Asistente de scripts
          • Impresión de gráficos
          • Opciones html
        • ListView
        • Lista QML
        • Localizador
        • Marco
        • Menú
        • Multivista
        • Protocolo TCP-IP
        • Reemplazo
        • Rejilla
          • Columna de rejilla
        • Rejilla avanzada
          • Columna de rejilla avanzada
        • Toolbar
        • ViewFlow
        • Sub-objetos de vistas de datos
          • Conexión de evento
          • Drop
          • Inserción
          • Manejador de evento
          • Variables locales especiales
      • Objetos comunes a proyecto de datos y de aplicación
        • Búsqueda
        • Cola
        • Constante
        • Consumo servicio Web
          • Proceso de respuesta de consumo servicio Web
          • Códigos de error de consumo servicio Web
        • Dibujo
        • Esquema de tablas
        • Fichero adjunto
        • Función
        • Librería externa
        • Lupa
        • Proceso
          • Indice de comandos de instrucción de proceso
          • Comandos de base de datos
            • API
            • Bases de datos externas
            • Búsquedas
            • Campos (grupo de comandos)
            • Cestas
            • Fichas
              • Enum de errores de JSON/CSV
            • Fichas seleccionadas
            • Listas
            • Tablas
            • Tubos
          • Básicos
            • Controles de flujo
            • Debug
            • Ejecución
            • Salida/retornos
            • Scripts (grupo de comandos)
            • Transacciones (comandos)
            • Variables
          • Comunicación
            • GPS
            • Internet
            • Protocolo TCP
            • Puerto serie
            • SDV
          • Interfaz
            • Acciones (comandos)
            • Controles
              • Ejemplos de CSS
            • Diálogos
            • Formularios - comandos
            • Localizadores
            • Objeto - grupo de comandos
            • Ventana principal
            • Vista de datos - comandos
          • Sistema
            • Comandos de Sistema
            • Configuración
            • Directorios
            • Ficheros
        • Tubo de ficha
        • Tubo de lista
        • Variable local
      • Editores
        • Asistente de fórmulas
          • Operadores
          • Funciones estándar
            • Funciones API
            • Funciones básicas
            • Funciones de cadenas
              • Expresiones regulares
            • Funciones científicas
            • Funciones de Cliente-servidor
            • Funciones de color
            • Funciones de códigos
              • Lista de codecs
            • Funciones de directorios
            • Funciones de fechas
            • Funciones de ficha en curso
            • Funciones de horas
            • Funciones JSON
            • Funciones de Internet
            • Funciones de juegos de caracteres
              • Codecs
            • Funciones numéricas
            • Funciones de sistema
            • Funciones de tiempo
            • Funciones trigonométricas
          • Funciones de dll
          • Funciones de proceso
          • Funciones remotas
          • Funciones de campo
          • Campos
          • Constantes
          • Variables globales
          • Variables locales
          • Variables del sistema
          • Buscar/Reemplazar (Ctrl + F)
          • Verificador de fórmulas
          • Conversión automática de datos
          • Introducción de datos literales
          • Secuencias de escape en cadenas de caracteres
          • Composición de sendas en fórmulas
          • Operar con datos de tipo fecha, hora y tiempo
        • Editor de imágenes
        • Selector de fuentes
    • Scripts
      • Lenguajes
        • JavaScript
          • Procesos JavaScript
          • Fórmulas JavaScript
          • Clases
            • Funciones globales
            • Objetos
            • FormData
            • VAbstractBrowser
            • VAbstractDataView
            • VAbstractListDataView
            • VAdvandedGridListDataView
            • VAlternatorListDataView
            • VApp
              • VApp: enumeraciones
              • VApp: ejemplos
            • VBoundFieldComboBox
            • VBoundFieldEdit
            • VBoundFieldEditBrowser
            • VBoundFieldListBox
            • VByteArray
            • VCheckBox
            • VClipboard
            • VClockWidget
            • VComboBox
            • VComboListDataView
            • VCoverFlowListDataView
            • VCWebView
            • VDataCatcherEdit
            • VDataCatcherEditBrowser
            • VDataView
            • VDataViewDialog
            • VDateEdit
            • VDateEditBrowser
            • VDateTimeEdit
            • VDateTimeEditBrowser
            • VDial
            • VDir
            • VExtension
              • VExtension: enumeraciones
            • VFile
              • VFile: enumeraciones
            • VFileInfo
            • VFilePathEditBrowser
            • VFinder
            • VFont
            • VFormBlockListDataView
            • VFormDataView
            • VFormulaEditBrowser
            • VGaugeWidget
            • VGPS
            • VGridListDataView
            • VGroupBox
            • VImage
            • VImageEdit
            • VImageWidget
            • VInstancesList
            • VInstance
            • VInstances
            • VItemRegisterPattern
            • VLabel
            • VLineEdit
            • VLineEditBrowser
            • VListBox
            • VListDataView
            • VLogin
            • VMainWindow
              • VMainWindow: enumeraciones
              • VMainWindow: ejemplos
            • VMdiView
            • VMimeData
            • VMultiDataView
            • VNumberSpinBox
            • VNumberSpinBoxBrowser
            • VObjectInfo
              • VObjectInfo: enumeraciones
            • VObjectInstance
            • VProcess
            • VProgressBar
            • VProjectInfo
            • VPushButton
            • VQmlFormDataView
            • VQmlListDataView
            • VQmlListModel
            • VQuery
            • VRadioButton
            • VRegister
            • VRegisterList
            • VReportListDataView
            • VRequest
            • VResponse
            • VRoot
            • VScreen
            • VScrollArea
            • VServerAdmin
            • VSettings
            • VSlider
            • VSlotListDataView
            • VSolutionInfo
            • VSplitter
            • VSqlDatabase
            • VSSLCertificate
            • VSSLKey
            • VSSLInfo
            • VSSLSessionCipher
            • VStackedWidget
            • VSvgButton
            • VSvgSlideSwitch
            • VSvgToggleSwitch
            • VSvgWidget
            • VSysInfo
              • VSisInfo: enumeraciones
            • VTableInfo
              • VTableInfo: enumeraciones
            • VTabWidget
            • VTextEdit
            • VTextFile
            • VThermometerWidget
            • VThumbWheel
            • VTimeEdit
            • VTimeEditBrowser
            • VToolBox
            • VTreeItem
            • VTreeItemRegister
            • VTreeListDataView
            • VTreeMenu
            • VTreeMultiTableListDataView
            • VTreeWidget
            • VUser
            • VUserGroup
            • VUserGroupList
            • VUserList
            • VXmlReader
            • VXmlWriter
            • Widget
            • XMLHttpRequest
        • QML
          • Tipos QML
            • Documentación para migrar de QtQuick Controls 1.X a 2.X
          • Funciones específicas de QML
    • Depuración
      • Depuración de procesos de Velneo
      • Monitor de vClient
    • Extensiones de Velneo vDevelop
    • Acceso directo a una solución desde vDevelop
    • Buenas prácticas
      • Buenas prácticas de organización
        • Proyectos
        • Organización de carpetas
        • Proyecto de datos
        • Proyecto de aplicación
      • Buenas prácticas de codificación
        • Identificadores
        • Teclas aceleradoras
        • Documenta
        • Diseña los formularios como si no existiesen los layouts
      • Buenas prácticas de rendimiento
        • Arquitectura
          • Listas de registros
          • Lista de resultados de una búsqueda
          • Las cestas
          • Las variables globales
          • La caché de fichas
          • Programa en cloud
        • Formularios
          • Condiciones de visible y activo
          • Carga de subformularios en pestaña, caja o pila
        • Base de datos
          • Campos
          • Indices
          • Actualizaciones
          • Eventos de tabla o triggers
          • Variables globales y constantes
          • Tablas en memoria vs tablas en disco
          • Optimizar migraciones de datos
          • Búsquedas en el servidor ¿Cuándo y Cómo?
          • Campos fórmula vs campos en disco
          • Indices condicionados vs búsquedas complejas
          • ¿Cuándo usar tablas de extensión?
          • Indices de trozos y palabras
          • ¿Cuándo usar cada tipo de campo alfa?
        • Procesos y funciones y eventos
          • 1º, 2º, 3º y 4º plano ¿Cuándo usar cada uno?
          • Bloqueo blando vs bloqueo duro
          • Pasar información del cliente al servidor
          • ¿Cómo optimizar transacciones grandes?
          • ¿Cómo gestionar las transacciones?
          • Grabaciones optimizadas para el usuario
        • Carga de registros en objetos de lista
          • Rejillas
            • Campos punteros a singular
            • Totales
            • Condiciones de activo, visible y color en columna
            • Campos de tipo objeto
        • Conoce los límites
      • Imágenes
      • Buenas prácticas para el desarrollo en equipo
      • Modo mantenimiento
    • Análisis de bases de datos para aplicaciones de Velneo
      • Un centro de enseñanza
      • Facturas de un cliente
      • Repartos de obras de teatro
      • Galería de arte
      • Gestión de un colegio
      • Instalación de lunas para vehículos
      • Libros y autores
      • Tienda de discos
      • Últimos pedidos de un proveedor
      • Existencias por almacén y precios por cliente
      • Generación de tickets para un quiosco
      • Navegación por facturas
  • Velneo vDevelop Web
  • Velneo vAdmin
    • ¿Qué es Velneo vAdmin?
    • Activación de licencias de Velneo vServer
    • Gestión de usuarios
    • Gestión de aplicaciones
      • Soluciones
      • Instancias
      • Disco
    • Monitorización
      • Lista de comandos
    • Tareas
    • Acceso directo
    • Velneo vAdmin Web
  • Velneo vClient
    • ¿Qué es Velneo vClient?
    • Movilidad
    • Funcionalidades de Velneo vClient
      • Accesos directos y VRL
      • Cambiar idioma
      • Panel de multitarea: procesos, colas y servicios
      • Manejo de rejillas
        • Submenú de filtros
      • Uso de la rejilla avanzada
      • Formularios: inducción automática del maestro en altas de registros de tablas plurales
      • Manejo de cestas
      • Refrescos
      • Caché local
      • Edición de campos enlazados a maestro
      • Edición de campos de tipo fecha
      • Capturar imagen desde una cámara
      • Asignar impresoras lógicas
      • Actualización automática
      • Personalización de la ventana de conexión de Velneo vClient
      • Instalador personalizado de Velneo vClient
      • Ordenación de listas
      • Listas virtuales
  • Velneo vClient Web
    • Cómo incrustar una aplicación de Velneo Web en un DIV de una página html
  • Velneo vServer
    • ¿Qué es Velneo vServer?
    • Instalación y configuración
      • Línea de comandos de Velneo vServer
      • Parámetros configurables de Velneo vServer
        • Componer certificado fullchain
        • Certificados TLS/SSL para intranets
      • Estructura de directorios
    • Iniciar y detener Velneo vServer
    • Funcionalidades
      • Protocolo VATPS
      • Protocolo VATP
      • Multi-hilo
      • Integridad referencial
      • Refrescos terciarios
      • Sistema transaccional
      • Sistema de bloqueos
      • Tecnología bigkey
      • Hilo de control
      • Colas de procesos en 4º plano
    • vPacker
      • Mensajes de log de sistema
  • Velneo vInstallBuilder
    • ¿Qué es Velneo vInstallBuilder?
    • Configurar una instalación
    • Probar una instalación
    • Crear el instalable
    • Accesos directos
  • Velneo vModApache
    • ¿Qué es Velneo vModApache?
    • Instalación y configuración
    • Nomenclatura de objetos en urls
    • Uso de ficheros adjuntos
    • Caché local de Velneo vModApache
  • Optimización del consumo de memoria en Apache
  • Velneo vDataClient
    • ¿Qué es Velneo vDataClient?
    • Iniciar Velneo vDataClient
    • Interfaz de Velneo vDataClient
      • Panel de tablas
      • Panel de datos
    • Procesos
    • Utilidades
    • Acceso directo a una instancia de datos
    • Velneo vDataClient Web
  • Velneo vTranslator
    • ¿Qué es Velneo vTranslator?
    • Importación y exportación basada en XLIFF
    • Acceso directo a una solución
  • Velneo ODBC Driver
    • ¿Qué es velneo ODBC Driver?
    • Referencia de comandos SQL
  • Velneo vVersion
    • ¿Qué es Velneo vVersion?
  • Velneo vERP
    • ¿Qué es Velneo vERP?
    • Manual del programador
    • Documentación de la ApiRest
    • Novedades de la versión
  • Velneo vTutor
    • ¿Qué es vTutor?
    • Tutores de objetos básicos
      • Tutor de árboles visores de tablas arboladas
      • Tutor de búsquedas
      • Tutor de cestas
      • Tutor de formularios
      • Tutor de informes
      • Tutor de localizador básico
      • Tutor de marcos
      • Tutor de rejillas
      • Tutor de rejillas avanzadas
    • Tutores de objetos avanzados
      • Tutor de alternadores de lista
      • Tutor de comboview
      • Tutor de drag and drop
      • Tutor de eventos
      • Tutor de tablas de extensión y extensiones de ficha
      • Tutor de tubos de ficha y de lista
      • Tutor de grabación de fichas
      • Tutor de gráficos
      • Tutor de impresión de informes
      • Tutor de lupas
      • Tutor de protocolo TCP/IP
      • Tutor de reemplazo
    • Tutores de controles
      • Tutor de botones de menú
      • Tutor de controles SVG
      • Tutor de edición numérica
      • Tutor de visor html dinámico
      • Tutor de vistas de datos de lista
    • Tutores de procesos y manejadores de evento avanzados
      • Tutor de cambio de marco
      • Tutor de comandos de interfaz y acciones
      • Tutor de importación y exportación de ficheros ASCII
      • Tutor de portapapeles
      • Tutor de procesos
      • Tutor de SDV
    • Tutores de scripts
      • QML: hola mundo
      • QML: tutor básico
      • QML: tutor de vistas
      • Tutor de XMLHttpRequest (webServices)
  • Velneo cloud
    • ¿Qué es Velneo Cloud?
    • Panel de control vServer cloud
      • URC
      • vServer
      • Apache
      • SFTP
      • Usuarios
      • Copias
    • Copias de seguridad automáticas
    • Velneo Cloud API
      • Uso de Velneo cloud API
    • Explorador de archivos cloud sFTP
    • TCP en Velneo cloud
    • Dominios de empresa y certificados
    • Velneo vModApache en cloud
    • SLA
    • Hora de los servidores en el cloud de Velneo
    • Arranque automático de un servidor tras una parada no controlada
    • ¿Qué puedo hacer si tengo una incidencia en mi servidor cloud?
Con tecnología de GitBook
En esta página
  • Identificadores cortos y descriptivos
  • ¿Por qué usar abreviaturas?
  • ¿Por qué conviene usar un diccionario de abreviaturas?
  • ¿Por qué abreviaturas de 3 caracteres?
  • Evita el uso de preposiciones y conjunciones
  • Utiliza el guión bajo como separador de abreviaturas
  • No uses como sufijo de los identificadores el tipo de objeto
  • Usa el identificador de la tabla como prefijo de los objetos con ese origen
  • Usa identificadores que combinen origen y destino para tubos y procesos
  • Usa sufijos en los identificadores de las tablas, tablas estáticas y variables globales
  • No uses el sufijo de la tabla en los identificadores de campos e índices
  • Excepciones para que los campos punteros a tabla maestra no usen su mismo identificador

¿Te fue útil?

  1. Velneo vDevelop
  2. Buenas prácticas
  3. Buenas prácticas de codificación

Identificadores

Los identificadores son una pieza clave en el desarrollo de aplicaciones Velneo. Es el elemento que más vamos a utilizar en nuestros desarrollos para hacer referencia a cada objeto, subobjeto o control.

Identificadores cortos y descriptivos

El tamaño del identificador es muy importante no solo por su legibilidad sino porque es el código o referencia que se utilizará en el resto de puntos de la aplicación para ejecutar el objeto, subobjeto o hacer referencia a un control. Por lo tanto aquí el tamaño sí importa ya que si utilizamos identificadores muy largos el tamaño de nuestros proyectos pueden incrementarse notablemente.

¿Por qué usar abreviaturas?

Hay que tener en cuenta que un simple campo puede ser usado cientos de veces. Si su identificador tiene un tamaño de 50 caracteres estamos hablando de una ocupación de varios miles de bytes. Para reducir el tamaño de los identificadores podemos usar abreviaturas que nos aportarán 2 grandes beneficios:

  1. Reducción del tamaño que nos beneficiará en el tamaño de los proyectos.

  2. En el árbol de propiedades poder ver completo el identificador del objeto usado.

¿Por qué conviene usar un diccionario de abreviaturas?

Evidentemente, las abreviaturas también tienen una desventaja y es que debemos de interpretar la abreviatura para conocer la palabra a la que sustituye. Para facilitar esta labor es conveniente utilizar un diccionario de abreviaturas.

Además, el diccionario nos aporta otra gran ventaja, como es el conseguir que todos los programadores escribamos igual los identificadores. Precisamente, cuando no se usa un diccionario de términos o abreviaturas es habitual que cada programador escriba la misma palabra de una forma distinta, por ejemplo: FACTURAS, FACTURA, FACT, FRA, etc.

En definitiva, un equipo de desarrollo debe contar con un diccionario de abreviaturas que puede estar almacenado en una aplicación, una hoja de cálculo o un documento de texto, es muy importante que cuente con un sistema de búsqueda ágil. Lo fundamental para el equipo es que exista, que se utilice y que se mantenga actualizado. Es recomendable que al lado de la abreviatura se indique todos los términos que la utilizarán.

En el diccionario se puede aplicar por convenio el uso de palabras en un solo idioma, todo en Español, todo en Inglés o también ser menos estricto y utilizar palabras en su mayoría en tu idioma nativo permitiendo alguna excepción cuando aporte legibilidad y reducción de tamaño.

¿Por qué abreviaturas de 3 caracteres?

3 es un número que nos permite una gran combinación de caracteres alfanuméricos con un tamaño muy reducido.

Un problema que nos podemos encontrar con el uso de abreviaturas de 3 caracteres es la coincidencia de varios términos, por ejemplo IMP se puede usar para los términos “importe”, “importar” y también “imprimir”. En muchos casos el contexto facilita la interpretación del significado, es decir si la abreviatura se escribiese sola, por ejemplo un campo IMP si está en una tabla de líneas de detalle es fácil interpretarlo como importe antes que importación o impresión. Sin embargo, en muchos casos los identificadores son compuestos de varias abreviaturas, de esta forma IMP_TOT es fácil interpretarlo como importe total, SND_IMP como senda de importación. Incluso para evitar estas coincidencias se pueden usar alteraciones o abreviaturas estándar del mercado, por ejemplo PRT (print) para imprimir. De esta forma si vemos VTA_FAC_PRT lo interpretaremos como impresión de la factura de venta.

Es cierto que con 4 caracteres sería más fácil evitar algunas coincidencias como las comentadas anteriormente, sin embargo la longitud de los campos se dispararía, incluso algunas abreviaturas serían más complejas de elaborar ya que cuantos más caracteres más decisiones hay que utilizar para la combinación de consonantes y vocales. En el ejemplo anterior VNTA_FACT_PRNT sería el mismo identificador de impresión de facturas de venta con abreviaturas de 4 caracteres, como podemos apreciar hay palabras difíciles de abreviar como venta que se podría haber abreviado como VENT, VETA, VNTA o VTAS no siendo ninguna de ellas demasiado satisfactoria.

Recordar 3 abreviaturas de 3 caracteres es más sencillo que de 4 ó más. Además, a medida que vamos desarrollando las aplicaciones nos daremos cuenta de que se van construyendo objetos cuyo identificador es cada vez más y más largo para poder expresar de forma concreta y única la funcionalidad del mismo. Por ejemplo para el formulario de detalle de una línea de pedido de venta podríamos encontrarnos con estas posibilidades:

Tipo

Identificador

Sin abreviar

VENTA_PEDIDO_LINEA_DETALLE

Abreviatura de 4

VNTA_PEDI_LINE_DETA

Abreviatura de 3

VTA_PED_LIN_DET

Ahora imagínate cómo se llamaría un tubo de ficha que genera una línea de factura de venta a partir de una línea de pedido.

Tipo

Identificador

Sin abreviar

VENTA_PEDIDO_LINEA_TO_VENTA_FACTURA_LINEA

Abreviatura de 4

VNTA_PEDI_LINE_DETA_TO_VNTA_FACT_LINE

Abreviatura de 3

VTA_PED_LIN_DET_TO_VTA_FAC_LIN

Aplica cada uno de los tipos a todos los identificadores de tu aplicación y podrás comprobar como te encontraras con objetos cuyos identificadores son extra largos. Sin duda las abreviaturas son un magnífico recurso para reducir el tamaño y facilitar la legibilidad.

Por último indicar que cuando se establece un máximo de 3 caracteres en las abreviaturas no implica que todas deban tener ese tamaño, también se admiten abreviaturas de menor tamaño como por ejemplo “A”, “OK”.

Evita el uso de preposiciones y conjunciones

Estas palabras no deben ser usadas cuando no aportan valor semántico significativo, algo que ocurre en la mayoría de los casos.

Utiliza el guión bajo como separador de abreviaturas

Velneo no permite el uso de espacios en blanco ni caracteres especiales en los identificadores, por este motivo esos caracteres son sustituidos de forma automática por el guión bajo “_”. Para facilitar la legibilidad de los identificadores usaremos el separador entre cada abreviatura.

Tipo

Identificador

Sin separador, difícil de leer

VTAPEDLINDETTOVTAFACLIN

Con separador, más fácil de leer

VTA_PED_LIN_DET_TO_VTA_FAC_LIN

No uses como sufijo de los identificadores el tipo de objeto

Hacerlo tiene 2 desventajas. La primera es aumentar el tamaño del identificador y la segunda es que estarás aplicando una información redundante ya que el tipo de objeto está representado por su icono y en la ventana de propiedad se indica el nombre del tipo de objeto.

Por lo tanto debemos evitar usar identificadores como ACC_VTA_FAC_G_MEN ya que como vemos además de ser más largo la información que aporta es redundante, e incluso lo más probable es que allí donde se use tan solo podríamos utilizar objetos de este tipo.

Usa el identificador de la tabla como prefijo de los objetos con ese origen

Una de las características de los objetos en Velneo es que disponen de origen y destino (ninguno, ficha o lista), por este motivo es muy importante poder identificar el origen de cada objeto sin necesidad de revisar en su propiedad el origen.

Por este motivo es importante que los identificadores de las tablas sean a la vez descriptivos y lo más cortos posible.

Aplicando el diccionario conseguimos tablas con identificadores de 1 abreviatura y otras 2 y hasta 3 abreviaturas de 3 caracteres. En general no conviene sobrepasar las 3 abreviaturas ya que acabaríamos teniendo identificadores demasiado largos.

Es habitual que haya tablas relacionadas bien por su funcionalidad o porque pertenecen al mismo submódulo, como por ejemplo "COM" para compras y "VTA" para ventas. En estos casos es conveniente que el dato “común” o agrupador sea el de más peso y se use como prefijo, en nuestro ejemplo es correcto poner VTA_PED para pedido de venta en lugar de PED_VTA. De esta forma conseguimos que alfabéticamente las tablas del mismo submódulo estén juntas. Si no aplicamos este criterio el orden alfabético producirá una organización más caótica.

Usa identificadores que combinen origen y destino para tubos y procesos

Existen objetos en los que es muy importante tanto su origen como su destino. Un caso claro son los tubos de ficha y lista. En estos objetos es conveniente que el identificador incluya ambas tablas.

En el ejemplo podemos apreciar como cuando la tabla de origen y destino son diferentes se separan con la abreviatura TO. Es cierto que está en inglés, pero es una abreviatura corta y fácil de leer e interpretar.

Podemos apreciar que cuando la tabla de origen y destino es la misma se está aplicando en este caso el sufijo _DUP para indicar que el objeto creará un duplicado del registro de origen.

En el último ejemplo el sufijo es _MEM, esto se utiliza para indicar que se generarán los registros de origen en la misma tabla de destino pero en memoria, en lugar de repetir el identificador completo de la tabla PRS_OBJ_W_MEM se utiliza solo el sufijo diferencial. Estos casos son bastante excepcionales por lo que si se aplica la norma aunque el identificador sería mucho más largo PRS_OBJ_W_TO_PRS_OBJ_W_MEM sigue siendo igual de válido.

Usa sufijos en los identificadores de las tablas, tablas estáticas y variables globales

El editor no permite que dos tablas tengan el mismo identificador en el mismo proyecto, pero sí es posible crear dos tablas con el mismo identificador en distintos proyectos. Cuando se trabaja con múltiples soluciones o múltiples proyectos heredados o incluso cuando se trabaja sobre un núcleo común a todas las aplicaciones hay que tener especial cuidado en conseguir que no se repita el identificador de una tabla.

El problema se produce cuando al instanciar ambos proyectos se realiza sobre la misma carpeta del disco produciéndose un conflicto al solo existir una tabla que tiene dos definiciones de estructura diferentes en los proyectos.

Para evitar esta duplicidad de identificadores es conveniente usar un sufijo diferenciador que permita poner identificadores a las tablas sin riesgo de caer en la duplicidad. Conviene que esos sufijos tampoco se repitan. Se puede utilizar el criterio de un sufijo diferente por aplicación, módulo, etc.

Como el número de aplicaciones o módulos no suele ser muy alto, se pueden utilizar sufijos con una sola letra, por ejemplo: "_G" para gestión, "_C" para contabilidad, "_M" para maestros generales, "_W" para configuración, etc. En caso que el nº de aplicaciones o módulos sea muy grande se pueden colocar 2 ó más letras.

Para mantener un criterio único, se aplicará el mismo criterio de las tablas a las tablas estáticas y también a las variables globales que tengan una relación directa con un módulo.

No uses el sufijo de la tabla en los identificadores de campos e índices

Aunque las tablas tengan un sufijo y cuando añadimos campos a una tabla se crean con el mismo identificador de la tabla tanto el campo como el índice correspondiente. Por mejorar la legibilidad de los subobjetos de la tabla: campos, índices y actualizaciones, quitaremos del identificador el sufijo correspondiente.

Por ejemplo, si la tabla de artículos tiene como identificador "ART_M", las diferentes tablas de líneas de detalle de compras y ventas tendrán un puntero al artículo cuyo campo, índice o actualización tendrá como identificador "ART" en lugar de "ART_M".

Excepciones para que los campos punteros a tabla maestra no usen su mismo identificador

Por regla general coincidirá el identificador del campo con el de la tabla o tabla estática apuntada. Es decir, el campo puntero al artículo se identificará como "ART" ya que su tabla maestra se identifica como "ART_M".

Sin embargo, se pueden dar circunstancias que no permitan usar el identificador exacto de la tabla:

Si en una misma tabla existen varios punteros a la misma tabla maestra, es lógico que el identificador sea más explícito, y por lo tanto diferente al de la tabla maestra. Por ejemplo si una entidad puede tener forma de pago para cobros y forma de pago para pagos, si la tabla de formas de pago se identifica como "FPG_M", los campos podrían identificarse como "FPG_COB" y "FPG_PAG" respectivamente.

En ocasiones hay tablas que contienen múltiples tipos de registros, por ejemplo el caso de la tabla de entidades o contactos que puede servir para almacenar diferentes tipos de registros como clientes, proveedores, comerciales, etc. En estos caso se podrían utilizar los siguientes identificadores en la tabla de factura de venta:

Tipo

Identificador

Comentario

ENT

Cliente

Desaconsejable si en la tabla pueden existir otros campos punteros a la entidad como el comercial.

ENT_CLT

Cliente

Es válido ya que permite que el comercial tenga como identificador ENT_CMR.

CLT

Cliente

Este es el identificador más corto, pero además es el más explícito ya que indica el uso del dato y no el origen de la tabla. Para campos de uso masivo como el de clientes, proveedores, etc. Este identificador puede ser el más conveniente.

En cualquier caso debe existir un consenso en el equipo de cuál de los 2 últimos utilizar.

No te preocupes por los identificadores repetidos en el proyecto

Es cierto que si miramos los identificadores de la carpeta de una tabla encontraremos muchas repeticiones. Sin embargo, esto es algo permitido por el editor de Velneo ya que el identificador “completo” de un objeto viene dado por: el proyecto + el tipo de objeto + el identificador.

De esta forma para un mismo proyecto podemos tener objetos con el mismo identificador siempre que sean de diferente tipo. Esto nos permite utilizar el mismo criterio para todo los objetos sin necesidad de recurrir a un prefijo o sufijo que lo indique el tipo de objeto.

¿Te fue útil?