Nacho versus v7

Mis experiencias con Velneo v7

VJavascript ejemplo cargar plurales

Publicado por Nacho en 3 diciembre 2011

En este artículo vamos a escribir un ejemplo de VJavascript que nos servirá para hacer algo super frecuente en v7: Cargar plurales, pero de forma genérica.

De esta forma podremos aprovechar el fichero javascript para cargar cualquier plural de cualquier tabla. Solo tendremos que crear el objeto proceso en v7 que nos índique cual es la ficha origen y cual la lista destino, y asociarlo con este fichero. Con la salvedad que la lista destino tiene que ser de un histórico de la ficha origen.

Fichero: CargarPlurales.js

// IN.- Ficha
// OUT.- Lista de historico (Cargar plurales en v7 )
// Este proceso puede recibir una ficha de cualquier tabla
// Retornará la lista del historico de esa ficha, que espere a la salida

// Recogemos la información de las dos tablas
var TableInfoEntrada = VRegisterIn.tableInfo();
var TableInfoOut = VRegisterListOut.tableInfo();

var ListOut = VRegisterList;

var NumHist = TableInfoEntrada.PluralCount();

// Suponemos que la numeración de los historicos es de 0 a n-1
for (h= 0; h < NumHist; h++ )
{

if ( TableInfoEntrada.pluralBoundedTableId( h ) == TableInfoOut.id() )
{
ListOut = VRegisterIn.loadPlurals( TableInfoEntrada.pluralId( h ) );

     h = NumHist;
}

}

// Retornamos la lista
VRegisterListOut.append( ListOut );

Publicado en Analizando con v7, Ideas v7, javascript, Velneo | Etiquetado: , , | 1 comentario

Velneo y Javascript la conexión de dos mundos

Publicado por Nacho en 2 diciembre 2011

Ya deciamos que después del 11/11/11 algo iba a cambiar y vaya que cambió. Las jornadas no tuvieron desperdicio, cada cual mejor. Pero no me he puesto a esta hora a escribir para hablar de la conferencia de hace casi un mes (lo siento pero no he tenido mucho tiempo, y supongo que eso es bueno ;) , sobre todo para los tiempos que corren ). Me pongo por que después de esas jornadas ha habido otro acontecimiento a destacar y ha sido el blog de nuestro querido vArquitecto Juan Muñoz-Cobos, en él nos está informando de primerísima mano por donde se está trabajando para las siguientes versiones, algo que muchos reclamabamos a Velneo desde hace tiempo y ahora Juan, como siempre, nos ha dicho “quieres caldo… pues toma tres tazas”.

En él nos está informando de la apertura de v7 a la programación en javascript, detallandonos los objetos que tendremos para acceder a toda las información de la aplicación desde el entorno gráfico a la base de datos. Así podremos crear procesos y funciones en javascript o v7, a gusto del consumidor.

Pero me parece que cuando empezemos a hacer los procesos en javascript, vamos a dejar los de v7 para las cosas sencillas solamente.

Estoy tratando de digerir las posibilidades, y lo que quiero en esta entrada es hacer un ejercicio teorico, de las posibilidades que se abren. Para ello voy a partir del ejemplo de su entrada http://varquitecto.wordpress.com/2011/11/24/procesos-javascript/ donde dispone de una estructura de tres tablas:

Hay tenemos un ejemplo de como en javascript podemos retornar las PELICULAS de una PERSONA.

Yo voy a tratar de hacer un proceso en javascript que sustituya a 2 procesos de v7.

Procesos en v7:

  1. PERSONAS_REPARTOS. Origen ficha PERSONA, Salida Lista REPARTOS
  2. PELICULAS_REPARTOS. Origen ficha PELICULA, salida Lista REPARTOS

Estos procesos en v7 todos sabremos hacerlos, ahora ¿como sería un único proceso en javascript que nos sirva para los dos casos?.

// Este proceso puede recibir una ficha de la tabla PERSONAS o de la tabla PELICULAS

// Retornará en cualquier caso la lista de la tabla REPARTOS historica de la ficha recibida

var TableInfoEntrada = VRegisterIn.tableInfo();

var reparto = VRegisterList;

if ( TableInfoEntrada.id() == “PELICULAS” ) {

reparto = VRegisterIn.loadPlurals( “REPARTOS_PELICULAS” );

}

else {

reparto = VRegisterIn.loadPlurals( “REPARTOS_PERSONAS” );

}

// Ponemos a la salida la lista

VRegisterListOut.append( reparto );

 

Ya tenemos el mismo proceso que retorna el histórico REPARTOS a partir de cualquiera de sus maestros. Ahora es cuestión de perfeccionar el proceso para que sirva para muchas mas combinaciones.

Espero que funcione, pues no lo he podido probar ;) , pero si no es así es culpa mía no de la herramienta.

 

 

Publicado en Analizando con v7, Velneo | 9 Comentarios »

Life is Soft 11.11.11. Algo va a cambiar

Publicado por Nacho en 10 octubre 2011

Todos los desarrolladores que hemos entrado en el mundo de Velneo y la v7, tenemos una cita anual en Noviembre. Una cita que este año se consolida, ampliando a tres días (en años anteriores era un único día).

En estas jornadas conoceremos todas las novedades de la versión 7.8, y también nos avanzarán lo que nos puede esperar a lo largo de 2012, que estoy seguro será el año de la consolidación, de la mano del mejor ponente posible (Juan Muñóz-Cobos), avances que sorprenderán a todos.

Podremos ver como profesionales sacan rendimiento a esta herramienta, escuchando sus experiencias de primera mano y conociendo sus OpenApps, que nos permitirán tener una curva de aprendizaje  menor.

Empezamos con 2 jornadas de seminarios con talleres técnicos, sobre temas muy interesantes, y enfocados a desarrolladores:

El miércoles día 9:

  • Presentación novedades Velneo V7 7.8. Con los ponentes más cualificados
  • Integración de Apps. Como integrar aplicaciones utilizando la potencia de la herencia y cómo aplicar la guía de estilo vDiseño a la interfaz de tus aplicciones.
  • vGestión V7. Nueva OpenApps de gestión integrada
  • Integración jQuery y Velneo. Open Apps para importar/exportar datos y generar gráficos
  • vConta V7. Open Apps de contabilidad profesional
El jueves día 10:
  • Aplicación de CSS en Velneo V7. Revolucionar el aspecto de tus aplicaciones con hojas de estilo
  • Curso de programación QML. Curso sobre el lenguaje declarativo para el diseño de interfaz en QT
  • Cómo implantar soluciones de movilidad. Soluciones autónomas con sincronización
  • Portal web + tienda online en Velneo. Solución web con módulo Apache y Velneo
  • Druneo. CMS Drupal + Velneo. Cómo integrar soluciones Velneo con el conocido CMS Drupal
  • CERTIFICACIÓN. Proceso de certificación para convertirte en Desarrollador Certificado Velneo 2012. Algo que todo programador de V7 que se precie debería obtener ( ya no faltaré ;) ).
y por último el viernes, nos queda la jornada abierta al público en general como en años anteriores, que seguro no defraudará. Life is soft

Si en años anteriores este evento no nos ha defraudado, este desde luego los superará.

Nos vemos en él, y si quereis en la vCena (no oficial) que intentaremos organizar los velneadores.

Publicado en Velneo | Deja un Comentario »

Steve Jobs. Frases para el recuerdo

Publicado por Nacho en 8 octubre 2011

Ha muerto un personaje admirado (y odiado), un visionario, o no. Pero no se le puede negar que con muchos de sus productos ha cambiado la forma de acercarse a la tegnología de mucha gente.

Por su personalidad, y seguramente también por su enfermedad, ha dejado frases que me gustaría agrupar, para recordar. Frases que nos hacen pensar.

“Hay que decir ‘no’ a mil cosas para estar seguro de que no te estás equivocando o intentas abarcar demasiado”

“Si hoy fuese el último día de mi vida, ¿querría hacer lo que voy a hacer? Si la respuesta fuese ‘no’ durante demasiados días seguidos, sabría que necesitaba cambiar algo”

“Tu tiempo es limitado, no lo malgastes viviendo la vida de alguien distinto. No quedes atrapado en el dogma, que es vivir como otros piensan que deberías. No dejes que los ruidos de las opiniones de los demás acallen tu voz interior. Y, lo que es más importante, ten el coraje para hacer lo que te dicen tu corazón y tu intuición”

“Encontrad lo que amáis”

“A veces la vida te va a golpear en la cabeza con un ladrillo. No pierdas la fe”

“Ser el más rico del cementerio no es lo que más me importa. Acostarme por la noche y pensar que he hecho algo genial… Eso es lo que me importa”

“No puedo ir a preguntarle a los consumidores qué es lo que desean porque durante el tiempo que esté desarrollándolo, van a desear algo nuevo”

“Si tú lo deseas, puedes volar, sólo tienes que confiar mucho en ti”

Recordar que vas a morir es la mejor manera que conozco para evitar la trampa de pensar que tienes algo que perder”

“La única forma de hacer un gran trabajo es amar lo que se hace”

“Si vives cada día como si fuera el último, es muy probable que algún día hagas lo correcto”

“Estoy más orgulloso de las funcionalidades que no hemos incluido en nuestros productos de las que hemos incluido, creo firmemente que solo debemos incluir las funcionalides que  el 80% de nuestros clientes usarán. El resto de funcionalides contribuyen ha que el producto sea más dificil de entender y menos elegante”.

Por último enlace al famoso discurso de Steve Jobs en la ceremonia de graduación de la Universidad de Stanford el 12 de junio 2005

Publicado en Velneo | Deja un Comentario »

Objetos públicos o privados

Publicado por Nacho en 4 octubre 2011

Cuando programamos en v7, lo hacemos partiendo de objetos, y a estos les tenemos que definir una propiedades. Dentro de estas hoy voy a hablar de una, que quizás pase un poco desapercibida al no estar visible a simple vista, privado. Para acceder a ella vamos a la ventana de propiedades → estilos y los desplegamos, aquí pueden aparecer distintas características a definir, dependiendo del objeto. Algunas de ellas son:

  • Punto de inserción: para objetos formulario o acciones
  • Accesible web para procesos
  • Ejecutable en remoto para funciones
  • Privado

¿Para que sirve marcar un objeto como privado?

Pues al marcar un objeto como privado estamos diciendo que el usuario en tiempo de ejecución no va a poder verlo en ningún punto de la aplicación en la que esto es posible. Lógicamente todos los objetos se pueden ver y usar donde nosotros hemos programado que aparezcan ;) (No vayáis a pensar que si, por ejemplo, marco como privado un opción de menú no se va a ver en ejecución en el menú que la he puesto)

Bien, ahora sabemos que cualquier objeto que hagamos (rejilla, informe, alternador, proceso, función, variable, constante, ………), es susceptible de aparecersele al usuario en algún momento!!

La siguiente pregunta que se nos viene a la cabeza es: ¿donde se ven los objetos que no están marcados como privados?

Leer el resto de esta entrada »

Publicado en Velneo | Deja un Comentario »

Multiidioma real o dependiente

Publicado por Nacho en 19 septiembre 2011

v7 nació sobre tres patas:

- Multiplataforma

- Orientado al trabajo en la nube, PaaS

- Multiidioma

Si embargo esta última se nos ha quedado un poco coja.

El caso es que nosotros podemos desarrollar aplicaciones con todos lo idiomas que queramos, de una forma sencilla. Con el vTraslator podemos hacer que un traductor, nos la traduzca de una forma sencilla, si conocientos informáticos. Hasta aquí muy bien….

Pero ahora queremos que el usuario pueda escoger su idioma preferido, de todos los idiomas que hemos incorporado a la aplicación,……. y nos encontramos que en ejecución solo le aparece el del sistema, español y el inglés :(

¿por qué? ¿por qué?….. Leer el resto de esta entrada »

Publicado en Velneo | 5 Comentarios »

Optimizando rejillas

Publicado por Nacho en 2 mayo 2011

A la hora de presentar una rejilla con datos en un formulario, se utiliza un “control objeto” sincronizador. Este tiene como entrada origen la ficha de la tabla del formulario y como salida una lista de la tabla destino

Si, por ejemplo, queremos cargar las líneas de un albarán haríamos un proceso con origen ficha del albarán y salida lista de las líneas. En su interior tendría:

Cargar plurales

Añadir lista a la salida

El problema que surge, es cuando en un formulario queremos cargar rejillas que pueden contener muchos registros, y seguro que no siempre los necesitamos todos. Como por ejemplo todos los albaranes de un cliente, todos los movimientos de almacén de un artículo,…..

En estos casos podemos usar un sistema mediante el cual por defecto se carguen vacias, alimentandolas mediante un evento cuando se necesite.

Vamos a desarrollar un ejemplo:

Leer el resto de esta entrada »

Publicado en Velneo | 1 comentario

Rebuscando

Publicado por Nacho en 25 marzo 2011

En v6 teníamos un funcionalidad en las rejillas que se denomina “Rebuscar”. Esta permitía realizar búsquedas, sobre el resultado de la búsqueda anterior indefinidamente, pudiendo mezclar de distintas formas el resultado de la nueva búsqueda con los datos de la rejilla.

Así podíamos:

- Nueva búsqueda. Realizar una búsqueda, de forma que primero limpiases la rejilla, y obteniendo los nuevos registros. Ejemplo buscar ciudades de “España”.

- Añadir nuevos registros a la rejilla. Esto nos permitía por ejemplo, si teníamos una búsqueda por países, obtener en una misma rejilla todas las ciudades de “España” con las de “Italia”.

- Quitar. Con esta opción podíamos quitar de la lista anterior las que tengan una densidad de población menor de 500000

- Cruzar. Esta opción obtenía todos los registros de la lista actual que cumpliesen las nuevas condiciones. En el ejemplo “Las ciudades costeras”

Con este ejemplo habríamos obtenido todas las ciudades de España e Italia costeras con una población mayor de 500000. Y sin embargo el programador solo nos había dejado una búsqueda de ciudades en la que podíamos escoger un país, ciudades costeras o no, y ciudades con una población mayor a una cantidad. Leer el resto de esta entrada »

Publicado en Velneo | 2 Comentarios »

Controlando el acceso a los datos

Publicado por Nacho en 14 marzo 2011

Cuando se hacen aplicaciones para empresas, es normal que se requiera controlar los permisos de acceso al programa dependiendo del departamento. En este artículo os voy a explicar como lo hemos solucionado.

La aplicación está pensada para poder ser heredada y aplicarla a aplicaciones de cualquier fin, pudiendo incluso ser usada simultáneamente por más de una aplicación.

Distingo dos niveles de acceso:

  1. Acceso a menús
  2. nivel de autorización para crear/modificar datos

El control de accesos lo vamos a hacer a nivel de grupos de usuario, aprovechando la tabla que existe en vBase

Por lo que he creado cuatro tablas:

Acciones. En ella se dan de alta las acciones de menú que vamos a permitir activar o bloquear.

Tablas. Donde creamos las tablas que tendrán control de acceso a la información

Grupos – tablas. Donde definiremos los permisos de cada grupo de usuario con las tablas

Grupos – acciones. Para dar o quitar el acceso a las acciones por grupo.

Este es el esquema:

A nivel de acciones de menú no hay mas que dos posibilidades, o se permite o no se permite. Sin embargo en las tablas la cosa se puede complicar mucho (todo lo que queramos), desde controlar alta-modificación-baja, hasta controlar el acceso a cada campo (ver/modificar).

Leer el resto de esta entrada »

Publicado en bases de datos, Ideas v7, Velneo | Etiquetado: , , | 2 Comentarios »

vBase. Personalizando entidades

Publicado por Nacho en 13 diciembre 2010

Al diseñar vBase nuestro objetivo era abstraer su contenido del uso que se pueda hacer desde otro proyecto. Por eso nuestra prioridad ha sido que en la tabla Entidades (ENT) no fuese necesario tener ningún dato dependiente de como interactuamos con ella a través de contabilidad, gestión, etc…
Para ello hemos creado una tabla de uso del programador “Tipo de entidad” (ENT_TIP) , donde cada proyecto podrá crear los tipos que necesite y la hemos relacionado con las entidades a través de la tabla “Entidad – Tipos de entidad” ( ENT_ENT_TIP).

Para manejar estas tablas, tenemos 4 funciones:

ENT_TIP_RSV_ALT.- Esta función nos crea un tipo de entidad, de uso reservado (El usuario no la podrá eliminar, ni modificar su código). La usaremos al inicializar nuestras aplicaciones.

fun:ENT_TIP_RSV_ALT@Entidades.dat(~CLT_TIP@vConta.dat, “Cliente “, 1)

ENT_ENT_TIP. Nos permite crear o verificar si existe una relación entre una entidad y un tipo de entidad. Nos retorna el ID de la tabla ENT_ENT_TIP.

fun:ENT_ENT_TIP@Entidades.dat(#ENT_CLT, ~CLT_TIP@vConta.dat, “N”, $EMP_ID_ENT@Entidades.dat)

ENT_ALT.- Un asistente para crear una entidad pasándole el tipo que queramos, nos retorna el ID de la entidad (tabla ENT), y se asegura que es del tipo pedido.

fun:ENT_ALT@vBase.app(~CLT_TIP@vConta.dat, $EMP_ID_ENT@Entidades.dat)

ENT_LOC.-  Un localizador de entidades, al cual le pasamos el tipo de entidad  (cliente, proveedor,..) y nos permite localizar por trozos, palabras… solo dentro de las entidades de tipo especificado.

fun:ENT_LOC@vBase.app( $EMP_ID_ENT@Entidades.dat , TIP_ENT, “”, “” )

Tipos de entidad

En esta tabla tenemos dos campos muy importantes:

Reservado: Cuando desde un proyecto creamos un tipo de entidad que necesitemos, como por ejemplo “alumno”, debemos marcarlo como “reservado”, de esta forma el usuario podrá ver y utilizar este tipo, pero no lo podrá modificar ni borrar (Al crear el tipo desde la función ENT_TIP_RSV_ALT ya se marca como tal). De esta forma, también permitimos al usuario de la aplicación crear sus propios tipos de entidad (estos no tendrán nunca la marca de reservado)

Multi empresa: Cuando indicamos que este tipo es multiempresa, le estamos indicando que el usuario cuando tenga más de una empresa, podrá definir una entidad como cliente para una empresa, sin que eso suponga que también estará como cliente para el resto.

Un ejemplo lo tenemos  en la vConta, desde donde creamos los tipos:

Id Nombre Multi Empresa Reservado
CLT Cliente Si Si
PRV Proveedor Si Si

Tipificando entidades

Una vez creados los tipos de entidad, el usuario podrá, desde la ficha de la entidad, definir que entidades son sus clientes y cuales sus proveedores (pudiendo, lógicamente, ser ambas cosas a la vez). Esto se realiza mediante la tabla ENT_ENT_TIP (Entidad – Tipos de entidad)

Localizando una entidad del tipo deseado

Cuando desde la contabilidad queremos buscar, por ejemplo un cliente, utilizamos la función ENT_LOC, que nos mostrará el siguiente localizador

A esta función se le pasa la empresa con la que estamos trabajando (necesaria para los tipos de entidad por empresa), y hasta 3 tipos de entidad (para permitirnos buscar, por ejemplo, clientes o preclientes)

Creando entidades desde otros proyectos

Para crear entidades desde otros proyectos disponemos de dos funciones que explicamos a continuación

ENT_ALT. Alta de entidad

Esta función nos realiza todo el proceso de creación de una entidad, mediante un asistente. Pero tiene 2 parámetros importantes:

-      TIP_ENT. Tipo de entidad: En el primer parámetro podemos pasarle el tipo de entidad que estamos creando (por ejemplo “CLT”, cliente), si queremos crear una entidad genérica pasaremos “”

-      EMP_ID. ID de la empresa: En el segundo parámetro indicamos con que empresa estamos trabajando.

La función nos retorna el ID de la entidad.

Dentro de la función se realiza el alta de la entidad, dirección y teléfonos de contactos, y al final se asegura que quede definida como cliente.

ENT_ENT_TIP. Verificar o crear relación entre entidad y tipo de entidad

A esta función le tenemos que pasar:

-      ID de la entidad

-      El tipo de entidad

-      La acción a realizar:

-      N. Nuevo: Nos crea el enlace, solo si no existe

-      V. Verificar: Retorna 0 si no existe

-      B. Borrar: Borra el enlace ente la entidad y el tipo

-      La empresa con la que trabajamos

La función nos retorna el ID de la tabla ENT_ENT_TIP.

Con esta función somos nosotros los que desde nuestra aplicación nos aseguramos que se establece el enlace, pudiendo además crear tablas con los datos específicos (formas de pago, tarifas,…) asociadas a la relación. Esto es importante si queremos utilizar campos de edición de clientes, donde podamos escribir el nombre, buscándonos únicamente en las entidades cliente.

Publicado en Analizando con v7, análisis, bases de datos | Deja un Comentario »

 
Seguir

Get every new post delivered to your Inbox.

Únete a otros 28 seguidores