Documentación de Velneo
36
36
  • 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
    • Conceptos básicos de Velneo
      • Ficha o registro
      • Lista de Fichas o registros
      • Vista de datos
      • Flujo
    • 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 radio
            • Botón de check
            • Switch
            • 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
          • Secciones de detalle especiales
          • 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
          • Códigos de estados HTTP
        • 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
            • Ejecución Web
            • 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
              • Zonas horarias
            • 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 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
      • Log de errores
      • Cambiar instancia
      • Reconexión automática
  • 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 para el usuario final
    • 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
  • Conociendo por dentro vERP
  • ¿Por qué vERP tiene todos los objetos de datos y de aplicación en un proyecto ?
  • ¿Cómo están organizados los objetos del proyecto de datos?
  • ¿Cómo están organizados los objetos del proyecto de aplicación?
  • ¿Por qué se usan abreviaturas en los identificadores de los objetos?
  • Uso de layouts
  • ¿Por qué los identificadores de los controles están todo renombrados respecto al asistente?
  • Hay alguna recomendación sobre el uso de imágenes en mis aplicaciones?
  • Programando sobre vERP
  • ¿Cómo crear una solución personalizada para mi cliente sin tocar vERP?
  • ¿Puedo tener una solución sectorial y otra solución para cada cliente de ese sector?
  • ¿Qué objetos básicos debo copiar a mi solución que hereda de vERP?
  • ¿Dónde hay puntos de inserción?
  • ¿Cuándo usar puntos de inserción y cuándo es mejor usar personalización de objetos?
  • ¿Cómo condicionar las pestañas insertadas en un formulario?
  • ¿Cómo personalizar un formulario que no esté en un separador de pestañas?
  • ¿Cuándo es conveniente usar tablas de extensión?
  • ¿Cómo implementar tablas de extensión?
  • ¿Cómo debo crear un formulario que combine datos de la tabla de extensión y su maestra?
  • Configurando vERP
  • ¿Para qué sirve que la tabla empresas sea arbolada?
  • ¿Cómo puedo gestionar el cambio de empresa en tiempo de ejecución?
  • ¿Cómo se gestionan los permisos?
  • Permisos por grupo de usuarios
  • ¿Cómo puedo llevarme los permisos de mi servidor a otro servidor?
  • ¿Cómo puedo cambiar las CSS que vienen por defecto?
  • ¿Cómo puedo aplicar una CSS específica en un formulario?
  • ¿Cómo personalizar la barra de menú?
  • ¿Cómo personalizar un menú?
  • ¿Dónde se guardan las personalizaciones de menú?
  • ¿Cómo usar la herramienta de personalización de formularios y rejillas?
  • ¿Qué puedo hacer con la personalización mediante script?
  • ¿Dónde se guardan las personalizaciones de formularios y rejillas?
  • Informes vERP
  • ¿Dónde se guardan los informes?
  • ¿Cómo puedo añadir nuevos informes?
  • ¿Cómo generar los documentos en pdf?
  • Documentación adicional
  • Guía de estilo de programación en Velneo
  • Documentación sobre la configuración de los distintos proveedores de la gestión documental
  • Generación de CSS con IA de OpenAI
  • Módulo OCR IA de Google
  • Lista de reproducción en el canal de Velneo en Youtube
  • Otros vídeos en el canal de Velneo en Youtube

¿Te fue útil?

  1. Velneo vERP

Manual del programador

Última actualización hace 7 días

¿Te fue útil?

Conociendo por dentro vERP

¿Por qué vERP tiene todos los objetos de datos y de aplicación en un proyecto ?

Por simplicidad: es mucho más sencillo instanciar, heredar, comprender y localizar los objetos.

Además, todos los objetos están organizados en carpetas por módulos o funcionalidad. Esto facilita la posibilidad de separar una parte del proyecto en otro distinto, ya que podríamos copiar las carpetas específicas teniendo luego que copiar aquellas partes comunes que están integradas como pueden ser las tablas maestras y las diferentes configuraciones de vERP.

¿Cómo están organizados los objetos del proyecto de datos?

Están organizados por tipo de objeto, asimismo, dentro de la carpeta están organizados por módulo, y las listas de objetos se ordenan alfabéticamente.

En este criterio se aplican algunas excepciones que son: existe una carpeta específica para

  • Las tablas de configuración

  • Las tablas de maestros

Además, las búsquedas y las constantes están junto al proceso que las usa.

¿Cómo están organizados los objetos del proyecto de aplicación?

En primer lugar están organizados por módulos y sub-módulos, y dentro de esas carpetas por menús.

Los objetos están encarpetados siempre en dos carpetas distintas

1) Objetos de interfaz (color púrpura), por este orden:

  1. Formularios.

  2. Multivistas.

  3. Rejillas.

Dentro de ese orden, los objetos están ordenados alfabéticamente.

Se añadirá además una carpeta con los objetos que se usen en botón menú de alguno de los formularios.

2) Objetos de ejecución (amarillo)

  1. Búsquedas.

  2. Localizadores.

  3. Procesos.

2) Acciones, toolbars y menús (color verde).

¿Por qué se usan abreviaturas en los identificadores de los objetos?

Las nomenclaturas alcanzan a todos los ámbitos de la programación ya que es conveniente tener reglas para nombrar de forma clara y precisa desde una carpeta del disco donde almacenaremos nuestro solución hasta la variable local más insignificante.

Una buena nomenclatura proporciona grandes beneficios:

  • Facilita la comprensión clara del concepto.

  • Evita ambigüedades.

  • Facilita la organización.

  • Facilita la localización: los identificadores se ven completos en propiedades, además cuando son compuestos, se ven acortados también.

  • Facilita el mantenimiento.

  • Permite la comprensión de otros desarrolladores.

  • Reduce el tamaño de los identificadores, por lo tanto se ve reducido el tamaño global del código.

Las tablas siempre terminan con una letra que las identifica con el módulo al que pertenecen, por tanto, lo mismo sus objetos, así se sabe fielmente qué es nombre de objeto y qué es nombre de la tabla origen.

Siempre se usan prefijos para identificar los objetos, así:

  • El prefijo de un objeto con origen tabla, es la propia tabla.

  • El prefijo nunca es el tipo de objeto, es decir una búsqueda no empieza por BUS

  • Cuando un objeto usa a otros el id. contiene tras el prefijo la segunda parte que lo describe. Por ejemplo los subformularios.

Uso de layouts

Se recomienda siempre el uso de layouts en todos los formularios.

Los márgenes del layout general del formulario son:

  • Izquierdo: 0

  • Derecho: 20

  • Superior: 20

  • Inferior: 20

  • Espaciado: 20

Normalmente existe uno para el título de formulario (con el id. LAY_TIT), otro para detalle (con el id. LAY_DET) y otro para el pie de botones (con el id. LAY_BTN).

Los márgenes de estos layouts son:

  • Izquierdo: 10

  • Derecho: -1

  • Superior: -1

  • Inferior: -1

  • Espaciado: 10

Siempre que exista necesidad de un layout para agrupar unos controles concretos, éste se identificará con el nombre del campo o campos que agrupa. Y en dicho caso los márgenes serán:

  • Izquierdo: 10

  • Derecho: -1

  • Superior: -1

  • Inferior: -1

  • Espaciado: -1

¿Por qué los identificadores de los controles están todo renombrados respecto al asistente?

Los controles de edición de un campo, sea cual sea el tipo de campo, siempre tienen como identificador el mismo que el campo. En caso de que tengan una etiqueta de texto, ésta será igual que el campo con el prefijo TXT delante.

Esto hace que sean sencillos de identificar el control durante la edición del objeto y además cuando está utilizando la herramienta de personalización de formulario o rejilla, el localizarlos para ocultarlos o mostrarlos es muy sencillo.

Hay alguna recomendación sobre el uso de imágenes en mis aplicaciones?

Las imágenes deberán estar optimizadas para ocupar el espacio mínimo imprescindible.

Se recomienda usar una paleta de colores lo más reducida posible, sin pérdida de calidad.

Para usar un fondo de imagen, si es color sólido debe ser pequeña y ampliará todo el área.

Este tipo de recomendaciones le ayudarán a desplegar su aplicación en cloud con éxito.

Programando sobre vERP

¿Cómo crear una solución personalizada para mi cliente sin tocar vERP?

Heredando vERP.

Puedes crear una solución nueva, con un proyecto de aplicación solamente o añadiendo también un proyecto de datos. En el mismo asistente de creación de la solución, podrás escoger los proyectos a heredar.

Gracias a que vERP está en un sólo proyecto de datos y otro de aplicación, simplemente heredando éstos, tendrás acceso a todos los módulos de la solución.

Importante: siempre cree sus proyectos nuevos con alias para poder utilizar la herramienta de personalización de objetos, pues es una propiedad imprescindible para este fin.

¿Puedo tener una solución sectorial y otra solución para cada cliente de ese sector?

Sí.

Puedes crear tantos niveles de herencia como necesites, pero siempre buscando un equilibrio entre dividir en funcionalidades, y no perder la agilidad que da tener todo localizado en un proyecto.

Ten en cuenta que los proyectos sólo pueden utilizar sus propios objetos y los de los proyectos que hereden, nunca se podrán usar objetos entre proyectos “hermanos”. No obstante, siempre existe la posibilidad de mover un objeto a un proyecto que esté heredado, pasando a ser visible por todos los que estén heredando ese último.

¿Qué objetos básicos debo copiar a mi solución que hereda de vERP?

Te recomendamos que copies al menos el marco Autoexec. Éste contiene:

  • Icono de la aplicación

  • Formulario principal

  • Menú principal

  • Dock izquierdo

  • Manejador de evento pre-ini

  • Manejador de evento post-ini

Cuando copias el marco de vERP a tu proyecto de aplicación, por defecto sigue usando los mismos objetos, pero puedes crear objetos nuevos y llamarlos desde el marco nuevo, logrando así un mayor detalle de personalización. No obstante, ten en cuenta que los procesos que son llamados en los manejadores de evento son necesarios para la carga de variables y configuraciones para el funcionamiento normal de la aplicación.

Si además deseas personalizar gráficamente tu aplicación, copia estos tres objetos:

  • Marco AUTOEXEC

  • Icono APP_ICO

  • Formulario INI_ERP

Copiando los tres a la vez y pegándolos en el nuevo proyecto de aplicación, ya el marco usará los objetos. Después desde el nuevo proyecto podrán ser modificados según cada caso.

¿Dónde hay puntos de inserción?

Se han creado acciones de tipo Inserción para ser utilizadas en los proyectos que hereden vERP_2_app. Cuando se crea una acción nueva en un proyecto que hereda vERP, se deberá crear además un sub-objeto inserción, que llama a su vez a la acción que está en el núcleo de vERP, siempre y cuando tenga el mismo origen, ya sea de tabla o no.

Están creadas en todas las toolbars de rejillas.

¿Cuándo usar puntos de inserción y cuándo es mejor usar personalización de objetos?

La personalización de objetos siempre se puede usar añadiendo nuevos subformularios a las pestañas, modificando acciones que se lanzan etc.

Por otro lado, si ya tiene desarrollos realizados utilizando la herencia inversa con los puntos de inserción proporcionados en el núcleo de vERP, podrá seguir utilizando este sistema sin realizar cambios.

Otro caso en que el deberá utilizar puntos de inserción es en el caso de un formulario insertado que tenga una extensión de ficha y desea que aparezca siempre la opción en la pestaña de gestionar el alta y baja del registro extendido.

¿Cómo condicionar las pestañas insertadas en un formulario?

Con la herramienta de personalización se puede añadir una pestaña a un separador para un grupo de usuarios en exclusiva.

Pero si lo que se pide es que sea condicionada en función de un campo del registro, en el formulario personalizado que se quiere insertar, añadir la conexión de evento PRE_INI Pre-inicializando, y en el manejador de ese evento PRE_INI se hacen las comprobaciones y en caso de que no cumplirse, utilizar el comando Set retorno = NO.

¿Cómo personalizar un formulario que no esté en un separador de pestañas?

En dicho caso lo que deberá hacer es sustituir el objeto completo.

Deberá programar el nuevo objeto en su propio proyecto de aplicación de su solución, fuera de vERP

A continuación, deberá sustituir el uso de ese formulario por el nuevo mediante la personalización de objetos.

Si se trata de un formulario que es lanzado desde una opción de menú, deberá sustituir la opción de menú completa y los objetos que ésta use. Podrá copiar todos esos objetos (normalmente se localizarán en la misma carpeta) y a continuación pegarlos en el proyecto personalizado.

¿Cuándo es conveniente usar tablas de extensión?

Cuando se necesita ampliar campos a una tabla de vERP pero sin realizar modificaciones sobre dicha tabla directamente. De esta forma cuando aparezca una nueva versión o revisión de vERP podremos actualizarla sin perder los cambios realizados ya que estos permanecerán en la tabla de extensión.

En definitiva, ampliamos las información y funcionalidad de vERP respetando su código fuente y sin necesidad de realizar cambios en nuestro código ante la aparición de nuevas versiones.

¿Cómo implementar tablas de extensión?

Desde vDevelop, deberá tener creado el proyecto de aplicación de su propia solución, que herede vERP. En el menú ❖ Objetos la opción ➜ Nuevo objeto ➜ Tabla le permitirá lanzar el asistente de creación de tablas

¿Cómo debo crear un formulario que combine datos de la tabla de extensión y su maestra?

Existen dos posibilidades:

  1. El origen del formulario es la tabla padre y se crea un subobjeto “Extensión de ficha” en modo campo puntero a la tabla de extensión (se usa el campo automático que crea Velneo en la tabla padre) o en el modo proceso con un proceso de origen de ficha de la tabla padre y destino ficha de la tabla de extensión.

  2. El origen del formulario es la tabla de extensión y se crear un subobjeto “Extensión de ficha” en modo campo puntero a la tabla padre (se usa el campo ID) o en el modo proceso con un proceso de origen de ficha de la tabla de extensión y destino ficha de la tabla padre.

Ambos casos funcionan bien siempre que configuremos correctamente las propiedades de alta, baja y modificación de ficha principal.

Para el caso A los valores más habituales son 10 (no se marca el previo), 5 (Sí se marca el previo) y 10 (No se marca el previo).

Para el caso B los valores más habituales son 11 (Sí se marca el previo), 4 (No se marca el previo), 11 (Sí se marca el previo).

En caso de usar el modo proceso es responsabilidad del programador crear en dicho proceso la ficha de la extensión de ficha del formulario, ya que de esta forma cuando se muestra el formulario ya existe el registro y se puede editar.

Actualmente, si queremos usar menú de botón en los campos puntero a maestro de registro de la “extensión de ficha” del formulario, tendremos que usar la opción B para que funcionen correctamente las acciones de menú de localizar, crear o editar maestro. La opción A no está operativa actualmente y se encuentra registrada como un bug a resolver en futuras versiones.

Configurando vERP

¿Para qué sirve que la tabla empresas sea arbolada?

El hecho de que la tabla sea arbolada le da la posibilidad de generar tantas divisiones y sub-divisiones como sea necesario en la empresa “real”.

Puede crear divisiones de Grupo-Empresa-Delegación-Departamento-División e incluso teniendo una empresa por usuario, dando acceso independiente a cada usuario. Aún así, si un usuario tiene acceso a una rama superior de la empresa, podrá ver todas las sub-ramas de la misma, porque cada documento está grabado en la rama desde la que fue creado.

Veamos un ejemplo:

El acceso a cada empresa se da por usuario, de modo que un usuario puede tener acceso a una rama de las inferiores y sólo verá los documentos de esa, o si tiene acceso a una rama superior podrá ver los de esa empresa y las sub-ramas de la misma.

Las búsquedas de documentos por el índice de empresa, se realizan entre límites, siendo el límite inicial la empresa a la que ha accedido inicialmente (se pide en la entrada a vERP), y para el límite final es concatenado con “ZZZZZZ” para así englobar las subramas.

¿Cómo puedo gestionar el cambio de empresa en tiempo de ejecución?

Cuando en la instalación existe configurada más de una empresa, es posible que desee realizar el cambio de empresa a gestionar pero sin salir de la aplicación.

Desde el menú ❖ Supervisor ➜ Utilidades ➜ Seleccionar empresa de trabajo.

La acción que lanza esta opción es EMP_M_SEL, si se desea se puede insertar en otro punto si el usuario no es supervisor y no tiene acceso a la opción de la barra de menú.

¿Cómo se gestionan los permisos?

Todos los permisos en vERP se gestionan en base al diccionario de permisos que contiene simplemente una etiqueta y una descripción.

Este diccionario de permisos es pre-cargado en la aplicación. Podrá verlo desde el menú ❖ Supervisor ➜ Diccionario permisos.

El sistema de permisos integrado en vERP persigue estos objetivos:

  1. Abstracto para que pueda ser utilizado en una gran variedad de funcionalidades.

  2. Flexible para facilitar la integración de permisos de las aplicaciones que heredan vERP.

  3. Sencillo de implementar por parte del programador.

  4. Sencillo de utilizar por parte del usuario. Que sólo sean necesarios definir las excepciones para que requiera la menor configuración posible de permisos

Permisos por grupo de usuarios

Accesible desde el menú ❖ Supervisor ➜ Grupo de usuarios.

Los permisos se gestionan a nivel de grupos de usuario, no a nivel de usuario individual. Un usuario puede pertenecer a múltiples grupos de usuarios y asumirá los permisos de todos sus grupos.

El diccionario de permisos es muy sencillo de definir. Tan sólo requiere una etiqueta y una descripción. Es importante tener en cuenta que lo mejor es definir la etiqueta en base al criterio de excepción.

Por ejemplo, si todos los usuarios van a tener acceso al menú de países, y sólo a unos determinados usuarios no queremos darles acceso al mismo, lo lógico es definir la etiqueta con el valor de la excepción, es decir, verp.menu.pai.no De esta forma conseguimos que la configuración de los permisos en los grupos de usuario sea realmente sencilla.

Además hay que tener en cuenta que se pueden crear tantos grupos de usuario como nos interese y cada usuario puede pertenecer a múltiples grupos de usuario, siendo sus permisos la suma de todos los permisos (de autorización o de negación de autorización) asignados a los grupos de usuarios que tenga asignados.

El diccionario de permisos

El diccionario de permisos es muy sencillo de definir. Tan sólo requiere una etiqueta y una descripción.

Es importante tener en cuenta que lo mejor es definir la etiqueta en base al criterio de excepción.

Por ejemplo, si todos los usuarios van a tener acceso al menú de países, y sólo a unos determinados usuarios no queremos darles acceso al mismo, lo lógico es definir la etiqueta con el valor de la excepción, es decir, verp.menu.pai.no

De esta forma conseguimos que la configuración de los permisos en los grupos de usuario sea realmente sencilla.

Además hay que tener en cuenta que se pueden crear tantos grupos de usuario como nos interese y cada usuario puede pertenecer a múltiples grupos de usuario, siendo sus permisos la suma de todos los permisos (de autorización o de negación de autorización) asignados a los grupos de usuarios que tenga asignados.

La función PRM_USR

El objeto que más uso tendrá en el nuevo sistema de permisos es la función PRM_USR que se utiliza. La función incluye documentación de los parámetros de entrada y de los posibles valores de retorno.

Si por ejemplo existe en el diccionario la etiqueta verp.mant.auditoria.no y ejecutamos la función fun:PRM_USR@Usuarios.dat("verp.mant.auditoria.no")

  • Si alguno de los grupos del usuario tiene asignado el permiso nos devolverá un “1”

  • Si ninguno de los grupos del usuario tiene asignado el permiso nos devolverá un “0”

Si por ejemplo existe en el diccionario la etiqueta vconta.cta.clt:430,431,435 y ejecutamos la función fun:PRM_USR@Usuarios.dat("vconta.cta.clt:")

  • Si alguno de los grupos del usuario tiene asignado el permiso nos devolverá “430,431,435”

  • Si ninguno de los grupos del usuario tiene asignado el permiso nos devolverá un “0”

Ejemplo de control de opciones de menú

Ejemplo de control al abrir un formulario (evento de pre_inicializado)

¿Cómo puedo llevarme los permisos de mi servidor a otro servidor?

En la barra de menú ❖ Supervisor ➜ Diccionario de permisos, es posible importar y exportar el diccionario de permisos mediante ficheros planos para enviar a otros servidores u otras instancias.

¿Cómo puedo cambiar las CSS que vienen por defecto?

En la barra de menú ❖ Supervisor ➜ CSS.

Ahí están los registros de CSS que se aplican por defecto en vERP. Podrá cambiar y personalizar el aspecto de su aplicación cambiando ahí el Script correspondiente, lo que sí deberá mantener de forma fija la etiqueta creada por defecto, que es AUTOEXEC o MEN_APP_ERP.

¿Cómo puedo aplicar una CSS específica en un formulario?

Si es un formulario personalizado que está en su propio proyecto deberá utilizar el comando “Interfaz: establecer hoja de estilo CSS” en el manejador de evento que se lance con señal post-inicializado.

La fórmula texto de la hoja de estilo CSS puede ser indicada de forma fija en el manejador de evento o bien mediante una etiqueta de texto de uno de los registros de la tabla CSS_W que están accesibles desde el menú ❖ Supervisor ➜ CSS.

Si se trata de aplicar una CSS en un formulario del núcleo, puede aplicar una personalización de script para los formularios del núcleo sin modificarlos.

¿Cómo personalizar la barra de menú?

El acceso a las distintas opciones de la barra de menú se puede controlar mediante el Diccionario de permisos.

En el menú ❖ Supervisor ➜ Grupos de usuarios, puede crear un grupo al que va a restringir el acceso a las distintas opciones que puede localizar buscando por las etiquetas “barra menú” en la utilidad de “Permisos sin asignar” del grupo.

¿Cómo personalizar un menú?

En el menú ❖ Supervisor ➜ Opciones de menú están pre-configuradas las opciones del menú del dock izquierdo y en cada una de ellas el objeto a ejecutar, que es un proceso del proyecto:

  • En la primera pestaña se configura el nombre e icono de la opción de menú.

  • En la segunda pestaña se configura el objeto a ejecutar, de qué proyecto es, el tipo de objeto (acción, proceso o menú) y a continuación podrá localizar los objetos entre los disponibles del proyecto que se cargarán si todo está configurado. Es imprescindible para esto que el proyecto tenga Alias configurado.

  • En la tercera pestaña se configuran los permisos de acceso a dicha opción del menú. Si marcar el check de “Todos los grupos de usuarios”, podrá escoger debajo si lo desea algún objeto a excluir. Si no marca el check, seleccione en la rejilla los grupos concretos que pueden acceder.

¿Dónde se guardan las personalizaciones de menú?

Se guardan en la tabla PRS_MEN_W.

¿Cómo usar la herramienta de personalización de formularios y rejillas?

Se han añadido las opciones de personalización en todas las rejillas y formularios. Esta opción le permitirá configurar totalmente dichos objetos:

  • Ocultar o desactivar controles en formularios

  • Ocultar columnas en rejillas

  • Ocultar, añadir o sustituir un subformulario, ya sea del proyecto actual o de uno heredado

  • Ejecutar un script

Todo ello podrá hacerlo de forma general para todos los usuarios, o por usuario (inclusión o excepción), además de forma sencilla e intuitiva. Próximamente se podrá hacer por grupos de usuario.

Veamos a continuación algunos ejemplos en imágenes, de lo sencillo que es configurar y el potencial de la herramienta:

En la imagen se muestra un ejemplo de personalización de ocultar controles en formulario de artículos (en este caso se oculta la referencia, tanto el edit como la etiqueta de título del campo).

En la imagen se muestra un ejemplo de personalización de ocultar columnas de rejilla`.

En la imagen se muestra un ejemplo de personalización de sustitución de subformulario por uno de un proyecto que hereda vERP.

Realmente las posibilidades son tantas como casos se vaya encontrando al instalar vERP en sus clientes finales, podrá simplificar la configuración de sus proyectos, personalizar al máximo todos los formularios de su aplicación, sus permisos de acceso a distintas opciones o campos, etc.

¿Qué puedo hacer con la personalización mediante script?

Se puede hacer prácticamente de todo…

El código javascript de la personalización se ejecuta en el manejador de evento pos-ini de los formularios. Se puede añadir sub-formularios, sustituir pestañas, css, etc.

¿Dónde se guardan las personalizaciones de formularios y rejillas?

Se guardan en la tabla PRS_OBJ_W.

Informes vERP

¿Dónde se guardan los informes?

Se guardan en la tabla INF_DEF_W.

En ejecución puede acceder desde el menú ❖ Supervisor ➜ Definición de informes.

¿Cómo puedo añadir nuevos informes?

Podrá crear nuevos informes desde el menú ➜ Definición de informes siguiendo los mismos pasos que en la aplicación vReport.

A continuación, para realizar las llamadas directas a los mismos, deberá realizarlo desde un proyecto de aplicación propio que herede vERP:

1º Cree un proceso que cargue la definición de informe por la etiqueta (identificador) de informe nuevo que ha creado.

¿Cómo generar los documentos en pdf?

Desde el proyecto de aplicación propio que hereda vERP_2_app, deberá crear un proceso con origen ficha, igual al manejador BTN_OPC_PRT que encontrará en un formulario de documento, por ejemplo VTA_PRE_G. Ahí existe un comando "Informe externo: imprimir…" que deberá sustituir por el comando “Informe externo: exportar a fichero” indicando el parámetro pdf en el tipo de fichero.

A continuación deberá crear una acción que llame a ese proceso. Esa acción tendrá como sub-objeto la inserción VTA_PRE_G_OPC_INS_FIN. Este tipo de inserción lo podrá encontrar en todos los documentos.

Documentación adicional

Guía de estilo de programación en Velneo

Se trata de un documento dirigido a desarrolladores que desean utilizar un sistema diseñado para aprovechar todas las bondades de la plataforma Velneo, facilitando una forma de programación probada y fiable que acelerará tu productividad al evitar tener que pensar en muchos aspectos del día a día de un programador.

Documentación sobre la configuración de los distintos proveedores de la gestión documental

Generación de CSS con IA de OpenAI

Módulo OCR IA de Google

Lista de reproducción en el canal de Velneo en Youtube

    • Explicación de cómo se gestiona la ayuda en vídeo dentro de la plantilla.

    • Explica las opciones de configuración:

      • Configuración general de la interfaz de la aplicación.

      • Opción de menú configuración de aplicación.

      • Nombre.

      • Barra de estado.

      • Temas → Flujo de carga: Empresa → Configuración de aplicación → AUTOEXEC (CSS).

      • Icono.

    • Configuración general de supervisor de la aplicación.

      • Log transaccional. → Tabla LOG_TRN_W.

      • Log de sesión. → Tabla LUC_W (disco) a partir de LOG_SES_W (memoria).

      • Control de usuarios concurrentes (minutos para mantener activa, minutos para caducar).

      • Nº máximo de usuarios concurrentes → A nivel de aplicación → También se puede configurar a nivel de empresa.

      • Usuarios conectados → Expulsar.

    • Configuración general de datos de la aplicación.

      • Datos de ejemplo generados.

      • Migración en curso.

      • Control de migración de versiones ejecutado → Proceso CTL_CHG_VER.

      • FTP para la descarga de los ficheros JSON.

      • Botón descarga.

      • Botón importar.

    • Configuración general de optimización de la aplicación.

      • Tablas a cachear en memoria.

      • Nº registros a mostrar en carga inicial de documentos de compras y ventas.

    • Explica cómo están programadas las tablas de Empresas y Divisiones.

      • Empresas y divisiones para el supervisor y el usuario final.

      • Empresas y divisiones para el programador.

      • Divisiones.

      • Usuarios con acceso permitido.

      • Supervisor.

      • Configuración.

      • Tablas que usan empresa, división o son comunes.

      • Consideraciones generales.

      • ¿Qué casos de uso tengo trabajando en una sola instancia?

      • Si quiero que cada empresa tenga sus propios maestros.

      • Si una tabla maestra tiene campo empresa ¿podría tener registros específicos para una empresa y otros que no tengan asignada empresa los pudiese usar en todas las empresas?

    • Explica cómo está programado el módulo de personalización de rejillas y formularios de la plantilla.

      • Opción de menú en configuración.

      • Objetos personalizables: rejilla y formulario.

      • Tipos:

        • Ocultar controles.

        • Desactivar.

        • Añadir subformulario.

        • Sustituir subformulario.

        • Quitar subformulario.

        • Ejecutar script.

      • Controles.

      • Scripts.

      • Permisos.

    • Explicación detallada de la tabla de Contactos.

      • ¿Por qué una tabla para todos y no cada tipo en una tabla independiente?

      • Esquema de tablas con contactos, direcciones, medios de contacto y relaciones → Esquema ENT.

      • Objetos de interfaz de un contacto.

      • La subindexación.

      • Contabilidad.

    • Explicación detallada de la tabla de movimientos de almacén, que se utiliza para las líneas de albaranes, facturas, inventario, regularizaciones y traslados.

    • Es un resumen de las existencias por cada empresa-artículo-almacén. Explicación de cómo está programado dicho módulo.

    • Acumula información de diferentes orígenes.

    • Campos calculados.

    • Recálculo.

    • Explica todos los manejadores de eventos y procesos que se lanzan durante la primera ejecución de Velneo vERP.

      • Pre-ini - Configuración inicial (CFG_INI): Este proceso se encarga de ejecutar otros procesos adicionales que permiten realizar diferentes tareas.

      • Control Usuario concurrente (LUC_W_CAD): Encargado de detectar las sesiones caducadas, y al encontrarlas, las expulsa eliminandolas de la tabla.

      • Generación de datos de ejemplo (GEN_DAT_EJE): Se encarga de crear por primera vez, algunos registros de tablas principales o maestras:

        • Serie (SER_M)

        • Tipo documento (DOC_TIP_M)

        • Forma de pago (FPG_M)

        • Idioma (IDI_M)

        • Moneda (MON_M)

        • País (PAI_M)

        • Contactos (ENT_M)

        • Almacén (ALM_M)

        • Tipo de relacion (REL_TIP_M)

        • Empresa (EMP_M)

        • Familia (FAM_M)

        • Artículo (ART_M)

        • Grupo de usuario (USR_GRP_M)

        • Conceptos automáticos (CNC_C)

        • Usuarios (USR_M):

          • Si no existe crea el primero y lo asocia al grupo creado.

    • Generación datos de tablas principales (GEN_DAT_TAB): destinado a realizar la descarga y posterior importación en 3er plano, de los ficheros que contienen los datos iniciales de otras tablas. Internamente ejecuta los procesos:

      • DES_DAT_JSON: Proceso que descarga del FTP de Velneo.

      • IMP_JSO: Proceso que importa los JSON descargados.

      • PRM_DIC_W_GEN_TAB: Proceso que genera los permisos por defecto.

    • Pre-ini - Control cambio de version (CTL_CHG_VER): proceso encargado de evaluar de manera secuencial los cambios de versión desde la v19.0 hasta la v26.1 y realiza los ajustes que cada versión requiera. Después de ello realiza la regeneración de todos los índices complejos que existan en el proyecto.

    • Pre-ini - Proceso arranque (AUTOEXEC): este proceso se encarga de leer todas las configuraciones y valores iniciales para que el vERP se inicie con los datos de sesión necesarios, como lo son identificar el usuarios, los grupos, los permisos, el CSS aplicar, entre otros.

    • Pos-ini - Configurar barra de menú (CFG_BAR_MEN): proceso en JS el cual genera, de manera dinámica, la barra de menú que se mostrará al usuario, en base a su perfil.

    • Pos-ini - Cambiar titulo de aplicacion (CHG_TIT_APP): proceso en JS encargado de modificar el título a mostrar en la cabecera del vClient según lo configurado.

    • Pos-ini - Abrir formulario de inicio (FRM_INI_TAB): Acción que al ser disparada, muestra en la pantalla central, una pestaña que contiene el formulario principal de la solución.

    • Pos-ini - Contabilizar deuda Vencida (VTO_COB_C_CON_VTO_2P): proceso en 2do plano, encargado de contabilizar todos los vencimientos a cobrar pendientes.

    • Pos-ini - Cargar opciones de menu en 2do plano (CAR_OPC_MEN): proceso que carga en memoria los registros de las opciones de menú.

    • Adicional - Formulario de menú general (MEN_APP) - Timer: además de volver a controlar el log de usuarios concurrentes, también el formulario es encargado de mostrar el menú dinámico en base a los grupos de usuarios que pertenezca el usuario logueado.

    • Explica cómo están pogramados los menús.

      • Tipos de menú:

        • Básicos: sin búsquedas.

          • Tablas muy sencillas como ejercicios.

        • Maestro: con búsqueda por trozos y desactivados

          • Maestros.

        • Documentos: con búsqueda por trozos, desactivados y otros filtros.

          • Documentos de compras y ventas.

      • Complejos: con búsquedas desde-hasta estados.

        • Ficha de almacén.

        • Extracto contable.

      • Todos comparten un mismo diseño, sus partes son:

        • Pestaña.

        • Título.

        • Criterios de búsqueda.

        • Vista de datos.

        • Toolbar.

        • Multi selección (en algunos casos).

    • Programación del formulario (con o sin origen) que hace de menú.

      • Propiedades.

      • Diseño (layouts).

      • Controles de edición.

      • Búsqueda (objeto).

      • Panel de búsqueda avanzada.

      • Ayuda.

      • La vista de datos.

      • Conexiones y manejadores de evento.

      • Variables locales.

      • Qué hay que cambiar cuando se genera un nuevo menú con copiar/pegar como...

    • Explica los distintos métodos de los que dispone Velneo vERP para la importación de datos.

      • Importación de texto plano (csv, text, etc): método simple de importación, donde nosotros conocemos la estructura del fichero, y por ende, sabemos cómo leerlo e interpretarlo para realizar la importación.

      • Importación dinámica (vERP): método implementado en vERP el cual en base al directorio seleccionado, lee todos los ficheros con extensión CSV y cumpliendo reglas estrictas en la generación del fichero, se realiza la importación de todos los ficheros que encuentre.

      • Importación y exportación JSON (vERP): métodos disponibles en todos los maestros principales del vERP, el cual permite generar un fichero en el cacherun con extensión JSON, el cual contiene todo el contenido disponible en la rejilla donde se ejecute.

      • Importador SQL (Manual - Excel): es un método utilizado mayormente cuando queremos realizar procesos de importación de ficheros xls o xlsx, consiste en utilizar el driver DataBaseEngine de Microsoft, para tratar las hojas de cálculo como una base de datos, y poder realizar lecturas con los comandos de BD de Velneo.

      • Importador SQL (Automático - Plataforma): es un complemento integrado en la plataforma de Velneo, especificamente en el vDevelop, el cual permite no solo importar la estructura de la base de datos, sino también sus valores o contenido.

      • Importador Dinámico (Ecosistema): complemento disponible del ecosistema, mediante esta funcionalidad, podremos automatizar los procesos repetitivos de importación de registros desde ficheros externos, permitiendo configurar de forma dinámica la asignación de campos y sus contenidos a campos de tablas de Velneo.

  • Explica las distintas formas que dispone Velneo vERP para cambiar la interfaz en ejecución.

    • La primera forma de cambiar la interfaz es aplicando los estilos: sistema, windows, mac, fusion.

    • En Web se usa CSS3 y Sass.

    • Qt tiene las Qt Style Sheets con una funcionalidad limitada respecto a CSS3.

    • Las hojas de estilo de Qt usa el box model.

    • Tipos de selectores.

    • Objetos y controles.

    • CSS -> Qt QSS:

      • Las hojas de estilo se aplican en cascada.

      • Admiten includes.

        • ¿Una CSS con todo o muchas CSS, una para cada control?

      • Usar valores constantes es engorroso, aprendamos del mundo web. Usemos variables.

      • Las CSS se pueden exportar e importar entre servidores.

    • Temas.

      • Equivalente al uso de Sass en web.

      • Las CSS deben estar preparadas.

      • Es mucho más fácil aplicar temas.

      • Los temas se pueden exportar e importar entre servidores.

    • Configuración de temas

      • Por empresa, para saber cuando estás en una otro empresa.

      • General para toda la aplicación.

      • Por defecto AUTOEXEC.

      • Tema compacto para pantalla de menor resolución.

      • Se puede aplicar una CSS en el PRE_INI de cualquier objeto.

    • Si tienes una versión de vERP personalizada directamente en sus proyectos de datos o aplicación, en este vídeo te mostramos como puedes actualizarlo a una nueva versión de vERP siguiendo unos sencillos pasos:

      • Instalar la nueva versión en el otro vServer.

      • Abrir en vDevelop la nueva versión de vERP.

      • Abrir en otro vDevelop la versión de vERP anterior personalizada.

      • Eliminar los objetos de los proyectos de datos y aplicación de la nueva versión que estén personalizados.

      • Exportar los directorios de scripts personalizados de la versión anterior.

      • Importar los directorios de scripts personalizados en la nueva versión.

      • Copiar las carpetas personalizadas de los proyectos de datos y aplicación de la versión anterior a la nueva.

    • La importancia de la base de datos en una aplicación.

    • Tipos de tablas.

    • Tipos de campos.

    • Tipos de índices.

    • Los contenidos iniciales.

    • Actualizaciones vs Eventos de tabla o triggers.

    • Variables globales.

    • Características especiales de la base de datos Velneo.

    • Listas y fichas.

    • Los planos de ejecución y el Cloud.

    • Bloqueo blando vs Bloqueo duro.

    • Búsquedas.

    • Índice complejos.

    • Transacciones y optimizaciones.

    • Configuración a nivel de empresa.

    • Diccionario de permisos.

    • Contadores basados en punteros al último registro.

    • Tabla de contactos vs Tablas de clientes, proveedores, ...

    • Movimientos de almacén vs tablas de líneas.

    • Totales en cabecera vs Tabla plural de totales.

    • Acumulados y saldos en contabilidad y almacén.

    • Formas de pago porcentuales.

    • Personalizaciones.

    • Datos de arranque.

    • Fork:

      • ¿Qué es?

      • ¿Qué no es un fork en Velneo?

      • ¿Cómo hacer un fork?

      • Mejora en Velneo 27 -> singulares de plural.

      • ¿Cuándo hacer un fork?

    • Personalización por herencia:

      • ¿Qué es?

      • ¿Qué puedo personalizar el tiempo de ejecución?

      • Personalizar usando puntos de inserción.

      • Personalizar usando reemplazo de objetos.

      • Personalizar usando tablas de extensión.

Otros vídeos en el canal de Velneo en Youtube

  • Muestra cómo, partiendo de la plantilla de código abierto Velneo vERP, podemos personalizarla para convertirla en nuestra aplicación utilizando diferentes técnicas de programación.

  • Explica cómo todas las aplicaciones programadas con la plataforma de desarrollo Velneo, sin necesidad de programar nada disponen de la API Rest de Velneo vERP para consumir sus datos y funcionalidades.

Solo podemos crear de extensión contra tablas padre que sean del tipo maestro normal con clave numérica o maestro normal con clave arbolada. No debemos crear nunca tablas de extensión contra tablas de tipo submaestro ni histórico, aunque el editor lo permita.

Puede obtener más información de este tipo de tablas consultando el .

2º Cree una acción que llame al proceso anterior y que tenga como sub-objeto una en vERP_2_app.

.

.

.

.

.

.

.

.

(vídeo)

(vídeo)

(vídeo)

tablas
el artículo de la ayuda en velneo.es
Descargar
Amazon S3
Dropbox
Google drive
Onedrive
Descargar
Descargar
Ayuda en vídeo para el usuario final
Configuración general de la aplicación
Configuración de empresas y divisiones
Personalización de rejillas y formularios
Tablas a fondo: contactos
Tablas a fondo: movimientos de almacén
Tablas a fondo: existencias
Qué pasa durante la primera ejecución
Cómo están programados los menús
Formas de importar datos
Cómo personalizar la interfaz en ejecución
¿Cómo actualizar a una nueva versión de Velneo vERP si lo tengo personalizado?
Conoce la base de datos de Velneo vERP
Personalización por herencia y fork
Personaliza la plantilla de código abierto para convertirla en tu aplicación
Tu aplicación puede tener un API Rest para soluciones web y aplicaciones móviles, sin programar
Velneo vERP móvil
inserción de las que existen predefinidas