ene
22
Pues para empezar a programar con Velneo V7,
Puedes comprar este maravilloso libro y comenzar con el ejercicio que se plantea de inicio a fin: “Cambia el chip con Velneo V7“, es un buen comienzo, ya que en el se explican todos los pasos a seguir para desarrollar una sencilla aplicación desde cero.
También debes ayudarte con la documentación oficial que puedes descargar de la zona info, en Velneo.es. En esta página, también encontraras tutores y Open Apps (aplicaciones de código abierto) que podrás usar durante el aprendizaje.
Puedes asistir a los cursos oficiales de Velneo, que se realizan varias veces al año y en diferentes ciudades de España.
Y por supuesto, estamos a tu disposición para cualquier cosa que necesites:
- Formación, como desarrollador certificado de Velneo V7, en la primera promoción (en nov-2011)
- Consultoria, para el análisis de la aplicación.
- Programación, para llevar a cabo el proyecto con el mejor resultado y en el menor tiempo posible.
Y si no te quieres complicar demasiado la vida, también tenemos la posibilidad de que empieces a trabajar desde el primer dia con aplicaciones en producción.
Asi que no lo dudes, realiza tu consulta, indicanos las necesidades que tienes y te ofreceremos el producto que mas te convenga en cada caso.
Sólo tienes que ponerte en contacto: jose@ascsl.com
sep
19
Todo sistema informatico, para ser implantado requiere de 3 fases fundamentales,
- El análisis
- El diseño
- La programación
Vamos a ver en que consiste cada una de éstas fases:
- El análisis, consiste en realizar el planteamiento del problema, reunir la documentación e información preliminar y determinar los requisitos necesarios para completar todo el desarrollo.
- El diseño, consiste en especificar las caracteristicas que debe tener el producto terminado y como alcanzar dicho objetivo
- La programación, se encarga de desarrollar todas las especificaciones descritas en el diseño mediante la creación del software necesario para implementar el diseño.
Todos habeis visto en alguna ocasión alguna de las muchas versiones que se han realizado sobre “Los 3 mosqueteros” y ahora seguramente esperais que os cuente la peli para entender estos conceptos, ¿verdad?, pues no, ésta vez no hay peli. Por cierto, os habeis dado cuenta que “Los tres mosqueteros” llevaban capa, al igual que Caperucita Roja, pues algun dia os contare una historia sobre las “capas”.
Bueno vale, os contare un cuento, pero será el de “Los 3 jabalies”:
Erase una vez un bosque en el que vivian 3 jabalies, y como no, un lobo hambriento.
Un dia hartos de que el lobo les acosara con sus tremendos colmillos y con su gran bocaza, decidieron que debían construir una choza para refugiarse en los momentos de peligro.
- El jabalí programador, dijo vamos a construir una casa que nunca podrá derribar y empezo a programar, … y cuando hubo acabado, como por casualidad, el lobo apareció, y soplo y soplo hasta que la choza destruyó.
- El jabali diseñador, dijó, voy a diseñar una casa que ni siquiera un elefante derribará, y comenzo a desarrollar, … y cuando hubo acabado, como siempre, el lobo volvió para incordiar, y comenzo a soplar y soplar, y aunque un poco más le costó, al final la casa derribó.
- El jabalí analista, dijo finalmente, voy a analizar una casa y cuando haya termiando, tú (al jabali diseñador) la diseñaras y tú (al jabali programador) la crearás y asi lo hicierón.
Al finalizar, como siempre, el lobo (jefe del proyecto) empezó a soplar y soplar, luego empezo a golpear y por mas que soplaba y golpeaba, la casa no se derribaba.
Si bién es cierto, que despues de tanto ajetreo, los jabalies tubieron que hacer alguna reforma y redecorar algunos detalles de la choza, pero ésta se mantuvo en pie y por fin el proyecto llegó a buen puerto.
Después de leer el cuento, seguramente habrá varias dudas que os mantendrán intrigados, vamos a resolverlas ya, no os volvais impacientes:
- ¿Porque jabalies en vez de cerditos?, pues es lógico, hemos indicado al principio del cuento que estaban en el bosque, y la inmensa mayoria de los cerdos que conocemos son de granja, además de evitar así polemicas sobre si el cuento tiene o no, derechos de autor y evitar las posibles represalias de la S.G.A.E.
- ¿Porque el lobo siempre aparece cuando ya han terminado?, pues sencillo, porque como jefe de proyecto que es, debe estar enterado de todo lo que hacen los jabalies.
Este cuento, como todos, viene con moraleja:
En cualquiera de los 3 casos comentados anteriormente, solo el 3º consiguió su objetivo, y lo hizó porque a diferencia de los dos anteriores, trabajarón en equipo, y ello les condujó al éxito.
Además, el problema principal en la mayoria de las aplicaciones que realizamos, y yo también he cometido esos errores, es el tiempo.
Asi es, el tiempo, y no me refiero a la climatología, si llueve, si hace calor, si nieva, aunque esto también influye en nuestro estado de animo.
Me refiero a “otro” tiempo, al tiempo que dedicamos a cada una de estas tareas, y es que hay una regla que no falla (ya que se trata de una simple regla estadistica y la estadistica nunca falla, ya que se regula asi misma en el mismo momento en que hay variaciones).
Esta regla es la del 80/20, que seguro conocereis, y según la cual debemos dedicar el 80% de nuestro tiempo y recursos a las tareas o fases más importantes y asi minimizaremos los errores cometidos, que serán el 20% y ademas, dichos errores serán mas faciles de solucionar y no afectaran a la estructura principal del proyecto.
Y aquí viene donde uno debe pensar y decidir cuales son las fases mas importantes y cuales no.
Yo he resuelto este dilema desde hace mucho tiempo, ¿quereis saber como?
Cuando nos casamos (mi esposa y yo), llegamos a un acuerdo para evitar futuras discusiones:
- En casa, siempre seria yo quien tomara las decisiones importantes
- Pero ella sería quien decidiría que tareas son importantes y cuales no.
Espero vuestras aportaciones
sep
5
MVC son las siglas de Modelo, Vista, Controlador, o lo que viene a ser lo mismo, un patrón que se suele seguir en la arquitectura de software para separar los datos de una aplicación, del interfaz de usuario y de la lógica de control.
Primero vamos a definir que son estos conceptos:
- Modelo: es la estructura de la base de datos
- Vista: se corresponde con la interfaz, como visualiza los datos el usuario y como se organiza el acceso a los mismos
- Controlador: son todos los eventos y procesos necesarios para realizar peticiones a la base de datos e interactuar con el interfaz.
¿Sigues sin entender nada?, pues lo voy a explicar de otra forma para que todos lo puedan entender, y para ello voy a recurrir al cine como de costumbre, entre otras cosas porque asi me monto la pelicula como yo quiero.
Pongamos en situación,vamos a elegir en primer lugar un protagonista para la peli:
James Bond, Superagente 86, o Johnny English, cualquiera de ellos me vale, pero habeis elegido a éste último por mayoria absoluta.
Ahora toca elegir la escena, en la que nuestro protagonista, es capturado por el malo malisimo y quiere obtener la información en poder de nuestro protagonista.
El malo, un tipo duro pero inseguro de si mismo (por eso siempre va acompañado por otros 3 o 4 tipos malos y un poco mas tontos que el) desea obtener la información en poder de nuestro espia preferido, mamporro que va, mamporro que viene, le increpa en tono amenazante y repetidamente:
- Malo: Dime quién fué primero, ¿la gallina o el huevo?
- Jonnhy English: No te lo diré, aunque me invites a cañas de aqui hasta navidad
El malo le suelta una tanda de mamporros y lo zarandea mientras Jonnhy rie,
- Malo: Dimelo, o te invitaré a una mariscada con copa y puro para rematar la faena.
- Johnny English: No sigas, por favor, te lo diré, te lo escribiré todo, pero la mariscada no, por favor.
Al final Johnny empieza a cantar y suelta todo lo que sabe, que no es mucho, y ademas se lo toma con calma.
Ahora que ya tenemos la escena, vamos a ver si lo habeis entendido:
¿Quien es el Modelo?, pues está clarisimo, el modelo es nuestro espia, Johnny English, es quien tiene la información, y como la tiene organizada.
¿Donde está la Vista?, pues igual de sencillo, la vista es cuando al final, el espia suelta todo lo que sabe, que no era mucho y lo escribe en el papel. La vista es el papel con el texto.
¿Y cual es el Controlador?, ésta pregunta es interesante, porque aqui el controlador son varias cosas: los mamporros, los zarandeos y las amenazas que recibe nuestro espia para conseguir la información al final.
Claro que, visto lo dificil que fue obtener la información y la calidad de los datos del informador, seguramente podriamos comparar a nuestro Modelo con MS Access.
Seguramente seguis igual que al principio, pero es que hay peliculas en las que el guion brilla por su ausencia. Asi que vamos a continuar con lo nuestro.
En lenguajes orientados a la web como PHP, es facil diferenciar y desarrollar aplicaciones siguiendo esta lógica de programación.
En Velneo V7 no es tan sencillo ya que por una parte tenemos los proyectos de datos y los objetos que contienen (tablas, variables, constantes, etc), que se corresponderian el Modelo, y los proyectos de aplicación que se corresponden con la Vista (con objetos como formularios, rejillas, informes).
Pero ¿que pasa con el Controlador?, en la mayoria de los casos, se confunde con las Vista, ya que no podemos separar los eventos de los objetos que los disparan.
Para esto, disponemos de objetos como Procesos que podemos encontrar en ambos proyectos (de datos y de aplicación), Eventos de tablas (en los proyectos de datos), y también eventos en Formularios, Rejillas, etc (en proyectos de aplicación) y objetos como las Búsquedas que aunque pertenencen a los proyectos de aplicación, son de dificil clasificación.
En cualquier caso y después de muchas horas de estudio y muchos errores, vamos por el buen camino, y la organización interna de nuestros proyectos, que para nosotros es tan importante o más que la apariencia percibida por los usuarios.
Asi pués, a pesar de que separar Vista y Controlador se hace complicado, hemos conseguido acercarnos un poquito más a este sistema de desarrollo de aplicaciones, permitiendonos una mejor comprensión de la solución.
Y en éste sentido, debemos decir una buena forma de acercarnos inicialmente a este modelo es implantar la plantilla vDiseño en nuestras aplicaciones.
Espero que al menos os sirva para empezar la semana con una sonrisa, aunque no hayais entendido nada.
Y si quieres aprender más sobre como implementar el interfaz de vDiseño a tus aplicaciones, te recomiendo la lectura de mi libro Cambia el chip con Velneo V7, que ya deberías haber reservado si deseas recogerlo en el evento ¡Life is soft!
Nos vemos allí
abr
14
Muchas veces se ha hablado ya sobre cual es la estructura ideal para una aplicación, y como aqui la mayoria somos usuarios de Velneo como herramienta de trabajo, ya sea para desarrollar o para ejecutar aplicaciones de gestión, voy a hacer referencia a vERP, a vGestión, a vConta y a vBase como plantillas genericas para usar en nuestras aplicaciones.
Y partiendo de vBase como ejemplo, cuantas veces hemos debatido sobre la forma ideal de abordar un tema tan genérico, y cual es la estructura mas apropiada para algo tan simple, como podria ser, guardar un registro de personas y empresas, donde el 80% de los datos almacenados son comunes a todos ellos.
Todas las entidades tienen nombre, dirección, población, telefonos, contactos, relaciones entre ellas, esto solo por decir algunos de los campos más comunes que podemos encontrar en esta ficha.
Algo tan simple, y a la vez tan complicado, …
- ¿se puede hacer una plantilla vBase que sea válida para todo el mundo?
- ¿quien tiene el mejor análisis de una plantilla de este tipo?
- ¿porque es tan dificil ponerse de acuerdo en algo tan simple?
- una tabla común de entidades, tablas de clientes, proveedores y agentes por separado, una tabla de entidades para los datos comunes y tablas adicionales separadas para los datos comerciales, ¿cual es el mejor esquema?
- ¿fue el Big-Bang el origen del universo?, ¿puedes confirmarlo?, ¿estabas allí cuando ocurrió?
Si alguien tiene las respuestas, de verdad que me gustaria saberlas.
Por esa razón, no os voy a dar las respuestas a esas preguntas, porque no las se, y porque para responder a esas preguntas, hay que hacerse muchas más preguntas aún.
Cuando hablamos de tener una plantilla vBase generica está muy bien, si lo planteamos como tener un punto de partida para desarrollos futuros, y debemos realizar un buen analisis de la misma.
Pero lo primero que debemos saber, antes incluso de comenzar el análisis de dicha plantilla, es el destino. ¿A quién va dirigido el desarrollo?, ¿Que funcionalidad debe tener la aplicación? y al final, la pregunta que nos resuelve todas las respuestas a las preguntas anteriores: ¿quién paga el analisis y el desarrollo de la apliación?
Si, tantas incognitas para resolverlas con esta ultima pregunta, porque al final da igual como se plantea un analisis, al final es el cliente el que decide como quiere su analisis porque él es el que paga. Porque trabajamos a medida, para lo que el cliente nos solicita, y podemos aconsejarle pero no imponerle un modo de trabajo.
Y si de verdad quieres crear tu popio analisis y llevarlo a cabo, has de plantear el desarrollo de otra forma, ¿como?
- analiza la aplicación y toma todas las decisiones sobre las preguntas anteriores
- desarrolla la aplicación, y vuelve a decidir sobre su interfaz
- distribuye y vende la aplicación
Pero claro, ahora el precio de la misma debe ser acorde con existentes en el mercado para aplicaciones del mismo tipo. Y si despues de hacer esto, obtienes buenos resultados en la venta de la misma, es porque has realizado un buen trabajo.
Veamos esto que digo con un ejemplo real:
Este blog, está realizado con WordPress, para no irnos mas lejos a buscar.
Me permite publicar los articulos, incluir imagenes, cambiar el aspecto mediante multitud de CSS adaptados, y tengo a mi disposición miles de plugins que puedo instalar para mejorar la calidad de este sitio.
Es una aplicacion generalista, y la finalidad del mismo ha sido llegar a miles (o millones) de usuarios …
Y que coste tiene, ¡nada!, no cuesta absolutamente nada, pero a cambio tienes que tener un minimo de conocimientos para realizar la instalación y puesta en marcha.
Ante estas condiciones, como puede un usuario de WordPress, quejarse sobre la funcionalidad (ya sea por defecto o por exceso). ¿A quien te vas a quejar?, si además dispones del codigo fuente para modificar el problema.
Luego, al final, al única conclusión válida es la respuesta a una única pregunta.
- Si realizas un analisis generalista y lo vendes a un precio acorde con su funcionalidad.
- O por el contrario, se trata de una aplicación a medida y la funcionalidad la decide el cliente, que es quién paga.
Y a todo esto, debemos añadir, en el 2º de los casos, el carácter del cliente. Y la capacidad del mismo para dejarse aconsejar, o la capacidad de establecer un analisis previo y ceñirnos a sus exigencias.
En cualquiera de los casos, el beneficiario o perdudicado al final siempre es el mismo, el usuario que debe introducir los datos a la aplicación.
ene
13
En el post de ayer, veiamos como realizar un sistema de control de existencias, el más básico de todos, con un solo almacén.
Aqui teneis el enlace para los que no lo visteis:
Calculo de stocks I
Hoy vamos a complicar un poquito el ejemplo, y vamos a convertir nuestro control de existencias en un sistema multi-almacén.
Y para el ejemplo de hoy vamos a necesitar unos cuantos cambios sobre el ejercicio de ayer, pero, dejando claro, que ambos sistemas son compatibles y pueden ser realizados sobre el mismo ejercicio.
Para convertir el ejercicio anterior a multi-almacén necesitamos lo siguiente:
- Una tabla para controlar el Stock
Y por supuesto, necesitamos enlazar estas tablas en el esquema anterior.
Para incorporar estas tablas a nuestro anterior esquema, solo necesitamos:
- En la tabla de “Lineas de documentos”, creamos un enlace a la tabla maestra “Almacen”, para saber en que almacén se produce cada movimiento.
- La tabla de “Stock” debe tener enlaces a las tablas maestras “Almacen” y “Productos”, y por supuesto, un campo numerico para guardar el Stock, #STOCK
- En la tabla “Stock”, tambien necesitamos un indice de clave unica, formado por los campos #PRODUCTO y #ALMACEN, para evitar que esta tabla tenga registros repetidos.
- De nuevo, en la tabla “Lineas de documentos”, necesitamos un campo “Puntero indirecto” a la tabla “Stock” mendiante el indice de clave única formado por #PRODUCTO y #ALMACEN, al que llamaremos #PROD_ALM .
- Y para terminar, tambien en la tabla de “Lineas de documento”, necesitamos crear la “Actualización”, a través del campo #PROD_ALM , para acumular la #CANTIDAD en el campo #STOCK de la tabla “Stock”
Una vez creada la actualización, solo debemos indicar el campo a actualizar #STOCK, el modo de actualización “ACUMULAR” y como formula:
¿que formula usariais para actualizar? … pensad un poquito
… pensad un poquito mas
… vale, es que no deberia tener que decirla, es la misma de ayer.
choose( #TIPO=”C” , #CANTIDAD , – #CANTIDAD)
¿Como es posible que la misma formula sirva para actualizar el sistema multi-almacén?
Pues, muy sencillo, porque la actualización se realiza sobre una tabla diferente y esa tabla (Stock), dispone de un indice de clave única que combina las 2 tablas maestras “Productos” y “Almacén”.
¿Cuantos almacenes puedo controlar con este sistema: 2 , 3 , 4?
El ejemplo de ayer nos permitia controlar solo UN almacén. En este ejemplo, no hay una limitación del número de almacenes, en realidad depende del campo #ID de la tabla “Almacén”, si has creado un #ID con valor autonumerico de 1 byte, podrás controlar 255 almacenes, pero si amplias el numero de bytes del valor numérico a 2, podrás contolar más de 65.000 almacenes, y puedes seguir ampliando el número de bytes, pero la pregunta es ¿cuantos almacenes necesitas realmente?
Si vamos a usar la misma formula para actualizar y las dos actualiaciones deben ser creadas en la misma tabla de “Lineas de documento” ¿podemos hacer esto con una actualizacion para las 2 tablas?
La respuesta es ¡NO!, ya que, cada actualización debe corresponderse a un campo enlazado a una tabla maestra o a un puntero indirecto, y como puedes comprobar, la primera actualización acumula el resultado en la tabla “Productos” y la segunda, acumula el resultado en la tabla “Stock”
Y una última pregunta, ahora que he creado el sistema de control multi-almacén, ¿para que necesito mantener la acualización del ejemplo de ayer?
Por una razón muy sencilla: porque manteniendo las 2 actualiaciones, gestionamos mejor nuestro almacén, sabiendo las existencias de cada producto en cada uno de los almacenes, pero también, conociendo el stock acumulado de cada producto.
¿Alguna pregunta más?
ene
12
Vamos a analizar a partir de ahora y en los proximos post, un sistema de control de existencias, y porque en varios post, y no solo uno.
Pues bien, no se trata de hacer un culebrón con este articulo, ya que lo que pretendo es finalizar cada ejemplo en cada uno de los articulos. Se trata de realizar varios ejemplos en base a diferentes analisis para cubrir varias posibilidades.
Y en este primer articulo vamos a ver como realizar el calculo de existencias cuando trabajamos con un almacén, que seria el caso mas sencillo que se nos va a presentar en cualquier aplicación de gestión.
Bueno, es falso, en realidad el ejemplo mas sencillo, seria no tener que controlar el stock , pero en ese caso, este articulo no tendria ningún sentido.
¿Que necesitamos para realizar este ejercicio?
Pues basicamente, 3 tablas:
- La tabla de Albaranes (Documentos de venta y/o de compra)
- Y la tabla de Movimientos (Lineas de documentos)
- Si utilizamos la misma tabla para movimientos de compra y de venta, entonces, tambien necesitaremos una tabla estatica para diferenciar el tipo de movimiento a realizar, aunque también podriamos usar otros metodos para resolver ese problema.
Ahora que ya conocemos la estructura de nuestra aplicación, ¿cual es el siguiente paso?
Algunos se estaran preguntando, ¿y la tabla de entidades?, ¿donde está?, ¡vaya ejemplo de gestión!, pero es que, para este ejemplo, la tabla de entidades no pinta absolutamente nada, y como no nos resulta útil, he decidido prescindir de ella y centrarnos solo en lo verdaderamente importante: los productos y su stock.
Ahora que ya he dejado claro este punto, seguimos con el ejemplo, el siguiente paso.
La tabla estatica, solo necesita 2 valores, “C” para compras y “V” para ventas. Y en la tabla de Lineas de documentos, debemos crear un enlace a la tabla estatica, para conocer el tipo de cada una de las operaciones realizadas.
Debemos crear las relaciones entre tablas, y aunque puede haber preferencias al elegir el tipo de tabla, el esquema quedara asi. La tabla de movimientos puede ser maestra con un enlace a “Documentos” o tambien submaestra de “Documentos” , pero eso depende de cada uno.
El calculo del stock, lo vamos a realizar directamente en la tabla de Productos, con un campo numérico para acumular el resultado.
Y para obtener dicho acumulado, solo necesitamos crear una “actualización” en la tabla de “Lineas de documentos”, sobre el campo enlazado a la tabla maestra de “Productos”.
Para finalizar el ejercicio, solo debemos indicar el modo de actualizar “ACUMULAR”, y en la Formula: ¿que?
En la formula bastaria una función:
choose( #TIPO=”C” , #CANTIDAD , – #CANTIDAD)
que en castellano, viene a significar:
Si el movimiento es una Compra, “Suma” el campo #CANTIDAD y si no lo es, “Resta” el campo #CANTIDAD.
dic
20
Nuestro amigo sat.sbinario plantea el siguiente problema en el foro de V7
Preocupación con el rendimiento con número de registros elevado y optimización
en el que expone lo siguiente:
Hola a todos:
La situación es esta. Tabla con 40 campos (2 de ellos singular de plural por índice), unos 10 índices y 180000 registros.
He notado que el rendimiento de la aplicación cuando se trabaja con esta tabla decae notablemente. Por ejemplo, una rejilla que muestra todos los registros (resultado de una búsqueda), “se ve” en pantalla mientras la carga cómo va refrescando los datos, en especial los resueltos a través de los punteros singular de plural. Además cuando utilizas algún localizador asociado a la tabla, tienes tiempos de espera notables, que incluso provocan la rotura del vClient si no eres suficientemente paciente.
Esto nunca me había pasado en v6, así que lanzo varias preguntas.
¿Se debe a los punteros singular de plural? ¿A los componentes visuales? ¿Qué aspectos intervienen en estos tiempos de espera? ¿Optimización? ¿Alguna experiencia con número de registros elevados?
Un saludo y gracias.
Y despues de varias respuestas en el mismo hilo del foro se llega a la conclusion de que el problema esta en los “Punteros singular de plural”. Y la verdad, considero que es un problema muy puntual, para casos especiales.
Como ya sabeis, yo suelo protestar mucho donde otros no protestan, pero como me gusta llevar la contraria a todos, , donde los demas se quejan, yo busco soluciones, asi que analicemos el planteamiento y veremos la solución:
Planteamiento:
- La tabla tiene “muchos campos”
- La tabla tiene varios “punteros singular de plural por indice”
- La tabla tiene 180000 registros, pero podria tener más.
Problema:
Ya hemos identificado que el problema son los “punteros singular de plural por indice”
Solución:
A la vista de estos parametros tenemos varias soluciones posibles:
- El problema son los “Punteros” pues una solución sencilla es “Quitar los punteros”,
, creo que es la más fácil, la mas sencilla de implementar y la que mejor soluciona el problema. Ahhhhhhhhh, vale, ¡que no se puede hacer eso!, , pues vamos a buscar otra solución.
- En el foro se aporta una solución que también es valida, dejar los punteros en la tabla, pero quitarlos de la rejilla. Es una buena solución, pero que pasa si necesito mostrar columnas a través de los punteros y no puedo eliminarlos, esta solución tampoco es valida.
- Olvidemos el problema principal, que parecen ser los “Punteros” y centremonos en el resto de parámetros de la ecuación. Haber, para que necesito mostrar 180000 registros, acaso tengo que memorizarlos,
, ¿necesito verlos todos? si falta uno, o faltan 1000 registros, ¿te vas a dar cuenta?. Pues ahi tienes la solución, prepara un paginador y muestra los registros de 100 en 100 o de 5000 en 5000 y veras como la velocidad aumenta considerablemente. Ademas, antes de mostrar cantidades indecentes de información, deberiamos pensar todos en el ahorro economico (si, economico), porque vamos a utilizar las aplicaciones con moviles, y las compañias van a cobrar por volumenes de transmisión de datos, y de esta forma, además, matamos 2 pajaros de un tiro (ahorramos dinero a nuestros clientes, beneficiandoles a ellos, y reducimos su factura de consumo telefónico, perjudicando al operador de telefonia).
Piensa en verde, porque ahorrar es sano, sobre todo para el bolsillo, … y en estos tiempos que corren, más.
Y ahora me direis algunos, … ¿y como se hace un paginador en V7? … vale, vale, lo preparo y otro dia os lo cuento.
dic
16
Uno de los problemas en el artículo anterior, que diferencia también a V6 y V7 es el paso de parametros a las funciones, en V6 no hay limite (aparentemente), mientras en V7 existe un limite de 10 parametros como máximo.
En realidad, ¿para que estan los limites?, ¿para que estan los obstaculos?, … ¡para superarlos!
Los limites están porque alguien, consciente o inconscientemente quiere impedirnos que esos limites sean superados, en este caso, se debe simplemente, a que el departamente de desarrollo ha considerado que 10 parametros era más que suficiente para poder ejecutar cualquier operación con este objeto.
Pero hay excepciones, y en esos casos, en que nos encontramos con un obstaculo, y un muro nos impide seguir nuestro camino, tenemos varias opciones:
- sentarnos y esperar a que el muro sea derribado
- acelerar e intentar saltarlo, chocando repetidamente hasta cansarnos
- intentar rodearlo, aunque ello nos suponga un esceso de tiempo y de esfuerzo
o con un poquito de imaginación, y un poquito de esfuerzo también, pero sin excederse,
- abrir una puerta que nos permita cruzar al otro lado
Y para solucionar el probema de la limitación de parametros en las funciones, hemos abierto esa puerta:
Para esto, solo necesitamos pasar 1 o varios parametros en la llamada a la función, y en cada parametro podemos encadenar tantos valores como sea necesario, usando un separador “;”, por ejemplo.
Dentro de la función, como ya habeis imaginado vosotros, solo necesitaremos usar la funcion del sistema StringSection para volver a separar los valores de cada parametro recibido, y procesarlos como sea necesario.
La solución es sencilla, y no solo permite pasar algunos parametros más a la función, sino que elimina completamente la barrera.
Soluciones como esta, las estamos inventando a diario, pero es dificil imaginar una solución y mucho menos cuando aún no se ha presentado el problema.
….
Uhmmmmmmm
….
y ya puestos, si hemos abierto una puerta para pasar al otro lado, me pregunto:
¿porque no puedo utilizar la misma puerta para volver?
y la respuesta es ¡SI!, la puerta se abre en las dos direcciones,
por tanto, tambien puedo realizar la misma operacion para retornar varios resultados de una misma función, encadenando los valores antes de retornar el resultado y volviendolos a separar en el proceso o evento que recibe el resultado de la función.
Yo, he abierto la puerta, pero si alguien tiene alguna idea para que la puerta sea automatica y se abra sola ante nuestra simple presencia, eso siempre es de agradecer.
nov
9
Durante mucho tiempo hemos estado trabajando en este proyecto, que se inicio en un momento en que se hacia necesario un cambio.
El punto de inflexion fue marcado por la Conference’06 (enero-2006), en aquel momento, decidimos que habia que definir un nuevo sistema de gestion que sirviera como base a las multiples aplicaciones que teniamos en produccion hasta entonces.
Fruto de mucho esfuerzo y muchas pruebas, nos aseguramos que todo “encajaria” perfectamente, y no solo eso, tambien que fuera ampliable en todo aquello que los clientes pudieran necesitar en un futuro proximo. ¿Quieres ver el esquema?
El resultado podria calificarse de excelente, pero no perfecto, y no todo el recorrido fue un paseo, hemos tenido que superar obstaculos, muchas preguntas y respuestas, y muchas de las pruebas realizadas no dieron el resultado esperado, y tuvimos que realizar algunos proyectos hasta 4 veces, y no porque el proyecto no funcionara la primera vez, se relizo una segunda vez, una tercera y hasta una cuarta vez, porque los resultados obtenidos tenian que ser los mejores, porque solo realizando pruebas, teniamos informacion suficiente para saber cual de las opciones presentadas era la mejor, y sobre todo, porque cualquier proyecto que se realizaba tenia que ser “ampliable” en el futuro y permitir cualquier tipo de compatibilidad con el resto de modulos, sin afectar a dichos modulos directamente y permitiendo su acoplamiento con un minimo de esfuerzo.
Despues de tantas pruebas en su mayoria, realizadas con versiones antiguas como “vv5.x” y “v6.x”, aparecio por fin V7, en febrero de 2009 y comenzamos el desarrollo de la aplicacion. Pero ya teniamos una parte importante, muy importante y probada en ejecucion, los pilares de la aplicacion, la estructura de tablas.
Sin grandes preocupaciones por el esquema de lo que consideramos que a nivel de estructura estaba definido para ser muy eficiente en su ambito de negocio (un E.R.P. altamente personalizable con poco trabajo), nos centramos en un problema nuevo que obligaba a tomar nuevas decisiones:
Hasta entonces (en v6.x) estabamos a costumbrados a trabajar en un mismo mapa que contenia todo el desarrollo del ERP.
V7 nos daba la posibilidad de modularizar la aplicacion, y eso era muy bueno, pero, ¿que tablas debiamos colocar en cada proyecto? para que el resultado fuera optimo.
La respuesta, mas de lo mismo, muchas pruebas, dedicacion de tiempo y estudio de los distintos resultados obtenidos.
El resultado de tanto trabajo es este:

Aqui tenemos la mayoria de los modulos de la aplicacion, unos son opcionales, otros imprescindibles, pero consideramos que la mejor forma de probar la eficiencia de V7 era realizar una aplicacion robusta, y eso nos llevo a detectar problemas y a solicitar las correspondientes mejoras en la herramienta. Y es cierto que quiza me quejo demasiado, pero cuando lo hago es porque ya he dedicado varios dias a realizar pruebas y creo que el problema debe ser solucionado en su origen, en la propia herramienta.
Si os fijais en la imagen, solo 2 de los proyectos corresponden a la aplicacion de “Flota”, un proyecto de datos y otro de aplicacion y podeis ver un video de su funcionamiento aqui, y tambien su ficha tecnica aqui. Otros 2 proyectos nos permiten tener nuestro propio LOG del sistema.
El resto, corresponden a otros modulos en desarrollo, la mayoria en fase “beta”, y sobre todo al producto estrella, el E.R.P. del cual podeis ver un pequeño video aqui, y algunas de sus especificaciones tecnicas aqui.
El resto de modulos los presentaremos mas adelante, pero todos estan muy avanzados, aunque es cierto que no estan finalizados, principalmente por una razon, consideramos que un modulo no esta terminado hasta que esta en ejecucion en una instalacion real y se han solucionado los problemas que permiten trabajar comodamente con dicha aplicacion.
Incluso hemos tenido que crear nuestra propia coleccion de funciones, ya que en algunos casos, funciones tan utiles como “convertir importes o numeros a texto“, existentes en V6.x, ya no estaban disponibles en V7, y hemos tenido que crearlas nosotros mismos. Esta es solo un ejemplo, pero hay muchas mas.
Ya con todo organizado y los proyectos en ejecucion, seguimos realizando mas pruebas, muchas mas pruebas, importacion de datos y analisis de los resultados obtenidos,
No espero que entendais el porque de mis continuas quejas, pero al menos algunas de estas quejas han reportado soluciones:
- En la version 7.3 , se soluciono el problema existente en los calculos decimales (redondeo), problema importante donde los haya, si tenemos en cuenta que tabajamos continuamente con calculos matematicos de importes, porcentajes, etc.
- En la version 7.4.1 se mejoro la eficiencia de vDevelop, como habiamos solicitado, no refrescandose aquellos paneles que no eran visibles en ese momento. Ahora puedo decir, que “Donde se usa” tarda entre 4 y 6 segundos en refrescarse, pero al menos, puedo decidir si deseo que ese panel este activo o no.
Estos entre otros, son algunos de los mas importantes.
Y todo esto, ¿por que?
Pues basicamente para demostrar, aunque no tengo necesidad de demostrar nada, que no nos quejamos por aburrimiento, porque hay que perder el tiempo en algo, o simplemente por dañar la imagen de Velneo, nada de eso. Nos quejamos para que nos escuchen, nos quejamos porque para “mamar” hay que “llorar”, nos quejamos porque llevamos tiempo esperando a que el eslogan de Velneo (¡Life is soft!), sea una realidad, y no un cuento para .
Solo espero que la 7.5 nos permita dar la puntilla, y conseguir que no se quede solo en proyectos, queremos que sean una realidad y permitir a los clientes disfrutar con nuestras aplicaciones. Porque, pese a todas las criticas hacia a Velneo en este blog, y aunque no os lo creais, lo que mas me gustaria, es no tener nada que criticar, porque eso significaria que ellos hacen bien su trabajo y los demas podemos trabajar y rentabilizar todo el esfuerzo realizado.
¿Necesitais mas pruebas de que hemos apostado por Velneo? o ¿Ha llegado el momento de cambiar de herramienta?
Y respondiendo a la pregunta que realizabamos en el titulo de este “post”, la respuesta es NO, Life is hard!!!, pero la verdad es relativa, depende del tiempo y el espacio, quiza la semana que viene la respuesta sea diferente.
sep
30
Estas ultimas semanas ha habido mucho ambiente con algunos temas del foro, y pese a que me gustaria haber participado mas, no he podido. Ya sabeis, ¡me he pasado mucho tiempo en la cocina!,
Y al margen de suplicas y quejas, el trasfondo de todo, es que muchas veces hacemos las cosas mal, y la primera reaccion es intentar culpar a los demas.
Como no he tenido fisicamente tiempo, no he podido realizar pruebas de rendimiento para concretar esta informacion con mas detalle, pero si hay conceptos que deberiamos tener muy claros para mejorar la respuesta de las aplicaciones.
Pero, igual que antes he tratado de defender a Velneo que no tiene la culpa de nuestros errores como programadores, tambien voy a decir que si tiene la culpa de no publicar un articulo donde se haga hincapie en estos aspectos, y se deje claro que opciones son las mas recomendables, en segun que situaciones.
Y es que, cuando nosotros trabajamos bien, y realizamos desarrollos ejemplares, los clientes estan contentos y hablan bien de Velneo y tambien de nosotros, pero cuando no es asi, el cliente termina cansado, descontento y la culpa, no suele ir al programador, porque el programador trata de liberarse del problema culpando a la herramienta.
Sea por una razon o por otra, lo que si esta claro, es que deberiamos tener una serie de Test comparativos de respuesta en distintas situaciones:
Tenemos o deberiamos tener claro que:
- un proceso en 1 plano (ejecutado en la maquina del cliente), es mas lento que un proceso en 3 plano (ejecutado en el servidor). Pero hay veces que no podemos ejecutar el proceso en 3 plano, p.e. cuando tenemos que mostrar mensajes en el interfaz del cliente, o en el proceso debe interactuar el usuario de alguna forma.
- una busqueda en 1 plano (en el cliente), es mas lenta que si ejecutamos la misma busqueda en 3 plano (en el servidor).
- una lupa es mucho mas lenta siempre que Cargar lista y que una Busqueda por un indice, pero si no tenemos mas remedio, al menos, deberiamos ejecutar la lupa en 3 plano (tutor de busquedas y lupas en 3 plano).
- mostrar una rejilla de una tabla siempre es mas rapido si no aparecen campos Formula en el contenido de las columnas, es mucho mejor mostrar campos numericos o alfabeticos con contenido inicial.
- mostrar campos en una rejilla usando “punteros singular de plural por indice“, penaliza el rendimiento con grandes cantidades de registros (incluido el dia 15-dic-2010)
- un campo numerico con una formula en su contenido inicial es mucho mas eficiente que un campo formula, sobre todo si este debe aparecer en rejillas o informes con calculos masivos.
Pero hay otros conceptos que no quedan tan claros, ¿que es mas rapido?, o ¿como afecta al servidor? en las siguientes comparaciones:
- Un proceso con Cargar lista, o un proceso que lanza una Busqueda, si tenemos en cuenta que en ambos casos se utilizaria el mismo indice o grupo de indices, sabiendo que los 2 se ejecutarian en el mismo plano. Que diferencias habria si ejecutasemos en 1 plano y que diferencias habria si ejecutasemos en 3 plano, p.e.
- Del mismo modo, y bajo el mismo plano de ejecucion, cuando las circunstancias lo permitan, que se debe usar, el Tubo “de Lista” o “de Ficha“.
- En una rejilla, el rendimiento de Suma acumulada de toda la columna, deberia ser igual que usar la suma acumulada de un campo, si indicamos como campo esa misma columna y no indicamos condiciones. Pero, ¿es asi?
- Cuanto tiempo puede permanecer en ejecucion un proceso en el servidor antes de que sea interrumpido y las transacciones deshechas.
- Si tenemos que hacer un proceso de carga masiva de datos, creando registros nuevos, que es mas rapido, el Tubo de ficha o Crear nueva ficha en memoria + Alta de ficha
Seguro que algo se queda en el tintero pero si sois tan amables, ire actualizando el “post” a medida que se aporten nuevas cuestiones.
Visto esto, no se trata de comparar rendimientos de Velneo V7 con otras herramientas, ¡NO!, no nos interesa saber que V7 es mejor o peor que SQL server o que Oracle.
Lo que realmente nos interesa es como aprovechar el rendimiento del servidor al maximo, eso ¡SI!
¡¡¡ queremos programar bien, y optener el mejor rendimiento de la base de datos !!! y para ello necesitamos conocer esos pequeños detalles que marcan la diferencia entre un “funcionamiento correcto” y un “funcionamiento optimo“
|