jun 5

Open Apps de pago

En los próximos post, presentaré posiblemente alguna nueva Open App, que ya esta saliendo del horno.

Pero a diferencia de las anteriores, esta será de pago, si, de pago.

El precio aun no esta fijado, y depende de muchas variables, unas Open Apps serán más baratas que otras, pero si puedo asegurar una cosa, ¡Todas estarán creadas con un solo espíritu! y unas intenciones muy claras:

  1. Que sean sencillas de entender
  2. Que sean sencillas de adaptar a nuestras aplicaciones
  3. Que prevalezca la calidad, pero sin perder la sencillez
  4. Que sean de utilidad, y sirvan para el aprendizaje
  5. Que esten bien documentadas, para evitar frustraciones

No obstante, se requiere de un mínimo de conocimientos de la herramienta de programación Velneo V7 para ponerlas en funcionamiento.

Las Open Apps, no prentenden resolver un problema concreto, sino que persiguen servir de tutor para que cada uno sea capaz de resolver sus propios problemas.

¿Son demasiado sencillas?

Eso he intentado, que lo sean, ya sera cada uno mayorcito y las complicará por si mismo.

¿Son de pago?

¡Si!, porque todo lo que requiere calidad lo es, y salvo que viva en “los mundos de yupi”, yo también debo pagar mis facturas, y por ende, mis acreedores desean cobrar.

¿Que precio tienen?

Pues eso dependera de cada una, pero intentare que sean econominas, para que nadie se pueda sentir engañado, ni en precio, ni en calidad.

Ademas, y puesto que al ser de pago, me siento obligado a aumentar la calidad de la misma, he intentado documentarlas correctamente para que todos puedan sacar el máximo jugo a cada recurso de la plantilla.

¿Y si no me gusta?

Pues sintiendolo mucho, el dinero no se devuelve, pero teniendo en cuenta el precio, y que con cada plantilla se especificará claramente lo que incluye, deberias decidir si el precio merece la pena antes de comprarla.

¿Y si hay actualizaciones?

Si hay actualizaciones, de aquellas plantillas que hayas comprado y por tanto, estarás el registro correspondiente, aprovecharé para enviar a cada uno la actualización de forma gratuita o previo pago de una cuota de mantenimiento, dependiendo de que tipo de plantilla o aplicación se trate.

Espero que sean de vuestro agrado.

PDF    Enviar artculo en formato PDF   
comments: 2 »
may 24

Open App vTools4Android

Posted in android, utilidades

En estos dias, he estado trabajando en un nuevo proyecto que creo que puede ser interante para quienes utilizan dispositivos móviles.

La aplicación en cuestión es un pequeño conjunto de utilidades para realizar las siguientes operaciones:

  1. Activar GPS
  2. Desactivar GPS
  3. Obtener localización exacta del GPS
  4. Obtener última localización conocida
  5. Ejecutar cámara del móvil y hacer foto
  6. Importar foto a base de datos Velneo

Debo indicar que la Open App, es completamente gratuita en esta versión, y la podeis descargar desde aqui:

http://velneo.es/velneo-open-app/vtools4android/

No obstante, la aplicación requiere de un 2º componente que esta disponible en el Market de Android a un precio reducido, pero es de pago, y este es el enlace a la descarga:

https://play.google.com/store/apps/details?id=ascsl.vtools4android

En el PDF adjunto (con la descarga de la Open App), esta toda la información necesaria para la instalación y puesta en marcha.

Con esta utilidad, podemos incorporar en nuestras aplicaciones desarrolladas con Velneo V7, la lectura de la posición del GPS, por ejemplo para, saber donde se encuentran nuestros comerciales en cada momento, o realizar catálogos/galerias de fotos, guardando la posición GPS donde fue capturada cada una de ellas.

Otras funcionalidades que se podrían añadir, si la comunidad lo demanda, serían:

  • Envio de SMS desde Velneo
  • Realizar llamadas telefónicas desde Velneo
  • Leer la lista de contactos del teléfono
  • Leer un determinado SMS
  • o incluso, enviar la posición del GPS periodicamente a un servidor de V7 para controlar rutas de viaje.

Espero que os guste.

PDF Printer    Enviar artculo en formato PDF   
comments: 3 »
may 18

¿Funciones o procesos?

Hace algún tiempo que escribi un artículo, en principio, estaba destinado a eliminar lo que en apariencia era una limitación de las funciones en V7 (sólo permiten 10 parámetros máximo): Parámetros en funciones de V7

De paso, porque no decirlo, ya que habiamos eliminado la barrera de los 10 parámetros, y con la misma solución que se usaba para aumentar la entrada, podiamos aumentar la salida, que como sabemos, todas las funciones retornan unicamente un valor.

Pero cosas de la vida, cuando surge un problema, con paciencia y un poquito de estudio, tambien surge la solución. Y la solución tambien puede venir de mano de lo que se esta convirtiendo en la solución para todo, el manejador de objetos.

Para aquellos que aun no lo han utilizado, solo tengo que decir, que si bien puede generar algo más de trabajo de lo habitual al principio y quizá algo mas de complejidad por la falta de costumbre, en su favor, tiene solo una cosa: que sirve para todo.

Veamos un ejemplo:

Necesitamos una función para realizar una tarea, y debemos pasarle 15 o 20 parametros, y por si fuera poco, el resultado de la función, deberia retornar 3 valores diferentes.

Tal y como comentabamos en el articulo anterior, necesitariamos unir varios valores en una cadena y pasar las cadenas a la función, después, ya dentro de la función, parsear las cadenas para separar los parámetros y ejecutar el resto de la función, y al finalizar, volver a unir los resultados para retornar una cadena con todos los valores, y ya fuera de la función, volver a parsear la cadena para obtener cada uno de los resultados. Vamos, un pequeño lio, de hecho, no se si me he liado al explicarlo, espero no haberlo complicado demasiado.

Ahora veamos como resolverlo con el manejador de objetos:

Con el manejador de objetos, creamos un proceso, similar a la función, que realiza la misma tarea, y para ejecutar el proceso y enviar los parametros:

Crear manejador de objeto( hPro , PROCESO )

Set variable local de objeto ( hPro, VAR_1, #CAMPO_1 )

Set variable local de objeto ( hPro, VAR_2, #CAMPO_2 )

Set variable local de objeto ( hPro, VAR_3, #CAMPO_3 )

Set variable local de objeto ( hPro, VAR_4, #CAMPO_4 )

Set variable local de objeto ( hPro, VAR_5, #CAMPO_5 )

Disparar objeto ( hPro , 1º  2º o 3º plano a elegir )

Get variable local de objeto ( hPro , VALOR_1 , RET_1 )

Get variable local de objeto ( hPro , VALOR_2 , RET_2 )

Get variable local de objeto ( hPro , VALOR_3 , RET_3 )

Como podemos observar, podemos pasar tantos parámetros como lineas SET quieras incluir, y del mismo modo, podemos obtener tantos valores como sean necesarios, mediante la sentencia GET. Y sólo un detalle, no olvideis que la sentencia GET no debe ir anidada dentro de la sentencia “Disparar objeto”

PDF Printer    Enviar artculo en formato PDF   
comments: 2 »
oct 7

Cálculos acumulados en la cabecera de página

Posted in ejercicios, foro, utilidades

Se dice, se comenta, se rumorea ….

Que no es posible incluir los acumulados de los importes de una página, al inicio de la página siguiente.

Eso es, lo que pretendemos es incluir un “Suma y sigue …” al inicio de cada página del informe, y surgen un problema en el calculo de los acumulados en las variables que utilizamos para la impresión de dichos importes.

A raíz de aqui, buscamos una solución sencilla que nos resuelva el problema:

y parte de esa solución esta en duplicar las variables y los calculos necesarios para los acumulados.

Asi es, puesto que tenemos dos variables PIE_DEB (para el acumulado del debe) y PIE_HAB (para el acumulado del haber) y que son las que utilizamos en el pie de página del informes (y estos cálculos los hace correctamente).

He decidido que necesitariamos otras 2 variables (aunque en la imagen solo se ve una de ellas) CAB_DEB (para el suma y sigue del Debe) y CAB_HAB (para el suma y sigue del Haber).

Y hasta aqui, no hay diferencias sustanciales en nuestro informe, salvo por el hecho de usar 4 variables en vez de 2.

El informe ya tenia 2 “Cálculos” PIE_DEB y PIE_HAB para realizar las operaciones con las variables PIE_DEB y PIE_HAB respectivamente, y las propiedades en cada uno de ellos para sumar en Modo: Acumulado y en Fórmula, el importe (#IMP_DEBE o #IMP_HABER) de cada una de las columnas.

Con esto, ya conseguimos que aparezcan las sumas en el pie de página correctamente …

Ahora, falta realizar los Cáculos para que aparezca el “Suma y sigue …” en la cabecera de cada página, antes de la primera línea de la página.

Y para eso creamos 2 nuevos Cálculos, uno llamado CAB_DEB y otro llamado CAB_HAB y en ellos usamos las propiedades Modo: Absoluto y en Fórmula, indicamos la diferencia entre el importe de la variable acumulada del pie de pagina anterior y el importe de la linea: PIE_DEB-#IMP_DEBE para la primera columna y PIE_HAB-#IMP_HABER para la segunda.

Y despues de realizar las pruebas con un informe con varias páginas de registros, he podido comprobar que funciona correctamente.

Create PDF    Enviar artculo en formato PDF   
comments: Comentarios desactivados en Cálculos acumulados en la cabecera de página
may 3

Proceso de importación

Posted in foro, utilidades

Como solución al problema planteado por Velavisual en este hilo:

Emulando importación y exportación de listas virtuales

He preferido realizar las pruebas partiendo de cero, por varios motivos:

  • Un formulario con demasiados eventos y dificil de localizar el problema
  • El uso de cestas locales y procesos en 3 plano, son dificiles de procesar
  • La falta de datos para revisar el buen funcionamiento de los objetos
  • Y la poca disponibilidad de tiempo para solucionarlo

Asi que me he puesto a realizar el ejemplo y el resultado es este:

1. He creado un fichero de texto similar al que se indica en el hilo del foro:

2. He creado un formulario sin origen para ejecutar la importacion y mostrar el resultado

3, He creado un objeto CESTA para almacenar los registros que se muestran en la rejilla

4. He creado el proceso que carga la rejilla desde el control objeto del formulario

5. En el formulario he incluido las propiedades del control objeto , ejecutar el proceso que retorna el contenido de la cesta y mostrar la rejilla con el resultado

6. He creado un evento en el formulario para IMPORTAR el fichero de texto y he asociado el evento a un boton llamado IMPORTAR

En el proceso de importacion no he usado la busqueda, para evitar crear otro objeto, y lo he cambiado por Cargar Lista, pero deberia funcionar exactamente igual en cualquiera de los casos.

7. He creado una accion que ejecuta y visualiza el formulario

8. He ejecutado la aplicacion y al abrir el formulario aparece una rejilla vacia, luego pulso el boton IMPORTAR, y la rejilla se muestra con los registros que hay en la lista del archivo de texto.

Las pruebas las he realizado con una tabla de facturas para comprobar que los registros del fichero de texto se corresponderian con un codigo de registro en la tabla.

Despues de esto, todo ha funcionado correctamente, ahora solo tienes que revisar los pasos y detectar el error.

PDF Creator    Enviar artculo en formato PDF   
comments: 2 »
dic 23

Procesar varios registros de una rejilla

Hace unos dias, en un artículo anterior, en el que comparabamos V6 y V7, no para criticar, sino para ver las diferentes formas de llegar a los mismos resultados en determinadas operaciones:

Encuentra las diferencias entre V6 y V7

Prometi a Miguel un ejemplo para ver como se realizaba un ejemplo para procesar varios elementos de una rejilla marcandolos con check como el de la imagen.

En V6 este ejemplo se podria realizar de 2 formas:

  1. Con una rejilla multiseleccion y una toolbar, creando un proceso con origen LISTA y recorriendo los registros para procesarlos y ejecutando el proceso desde la toolbar.
  2. Con una rejilla incrustada en un formulario y un boton que ejecuta el proceso para recorrer los rejistros seleccionados.

Como la misión no es desarrollar el ejemplo en V6, vamos a continuar y a ver como realizarlo en V7.

Y en V7 necesitariamos lo siguiente:

Un formulario, en el ejemplo hemos incluido 2 controles objeto, que muestran 2 rejillas de 2 tablas.

El ejercicio es conseguir procesar varios registros de la rejilla inferior y procesarlos para subirlos a la rejilla superior, pulsando el boton “INCLUIR”.

Para ello necesitamos crear un evento en el formulario como el siguiente:

En el se procesan los registros seleccionados de la rejilla inferior y recorremos la lista, realizando las operaciones necesarias en cada uno. Al finalizar el proceso ejecutamos las sentencias de “Interfaz: Recalcular control()” , para asegurarnos de que las rejillas se actualizan correctamente para reflejar los cambios.

Ahora ya solo nos queda incluir el boton y asignarle el evento anterior

Un ejercicio muy sencillo, cuando se sabe, claro.

PDF Download    Enviar artculo en formato PDF   
comments: 8 »
dic 21

Paginador de registros

En el articulo anterior, proponiamos una solución a un problema concreto, como siempre, una solucion sencilla a un problema aparentemente complejo, ¿Quitar o no quitar los punteros sigular de plural?

Pues bien, como no debemos quitar nada, porque “Quitar” es sinonimo de “Robar” y eso no esta bien, he decidido que para este ejemplo la frase apropiada es “¡Divide y venceras!”

Ademas, esta división tambien nos reporta beneficios, y no solo en tiempo, sino también economicos (cuando las tarifas de moviles se calculan por volumen de transmisión de datos), aunque el mejor, es la menor carga soportarda por el servidor, y que se traduce en beneficio para el resto de usuarios que trabajan simultaneamente. Ya sabeis, si mis operaciones no saturan la capacidad de vServer, este estará disponible para realizar otras operaciones en menos tiempo y de forma más eficiente.

Basicamente, cuando programamos mal, nos damos cuenta porque la consulta o tarea que esta realizando el servidor es excesivamente lenta y debemos mejorarla para ganar esa velocidad que nos falta. Pero cuando un proceso funciona aparentemente bien, pocas veces intentamos mejorarlo simplemente para quitar carga al servidor y mejorar las tareas de los demas.

Basandonos en esto, voy a explicar como realizar un paginador, que nos permita ver los registros de una tabla (con un volumen de datos elevado).

¿Quien ha pensado alguna vez en hacer una web  mostrando enormes volumenes de datos sin utilizar paginadores?

La respuesta es sencilla, en internet, son tan habituales que no hacerlo seria una excepción.

Y sin embargo, ¿porque? cuando mostramos una rejilla con vClient, nadie piensa en poner un paginador.

Sera porque la respuesta es rapida y no tenemos necesidad, y nos da igual.

En cualquier caso, aqui dejo el ejemplo, y para realizarlo vamos a necesitar los siguientes objetos:

  • una variable global, una para saber el numero de pagina actual
  • otra variable global, para saber el numero de registros a mostrar en cada pagina
  • una busqueda, para mostrar los registros de la tabla, en nuestro ejemplo, sera una busqueda por el indice ID completo, que retorne todos los registros.
  • un proceso para ejecutar la busqueda y retornar la lista de registros
  • una rejilla para mostrar el resultado
  • un formulario, con un control objeto para ejecutar el proceso y mostrar la rejilla y sobre todo, con algunos botones y eventos para controlar nuestro paginador, que es a fin de cuentas, el ejercicio que nos proponemos aqui.

Empecemos pues,

Aqui esta el resultado de nuestro formulario con la rejilla y el paginador, y ahora los vamos a desmenuzar para ver todos sus componentes.

En este momento, necesitaras crear una rejilla de la tabla para la que vas a realizar el ejercicio, y sobre el formulario, como puedes ver, aparece un control objeto que es donde se muestra la rejilla.

El control objeto ejecuta un proceso para retornar la rejilla. Este proceso se encarga de ejecutar la búsqueda y seleccionar los registros a visualizar dependiendo de la página activa en cada momento.

En este punto, si aún no has creado las variables globales, deberias crearlas para usarlas en el proceso, y recuerda que deben ser numéricas. Necesitas una variable global llamada $PAGINA_ACT, para saber en que página nos encontramos y otra llamada $PAGINADOR para saber el nº de registros a mostrar en cada página.

La búsqueda que vamos a definir no es nada compleja. Solo una simple búsqueda por ID con todos los registros de la tabla.

Ahora que yatenemos todos los objetos necesarios para realizar el ejercicio, ha llegado el momento de crear los Eventos del formulario, y el primer evento que vamos a ver es el de inicio del formulario. En este evento le vamos a indicar a las variables globales, los valores por defecto, página actual = 1 y el nº de registros que queremos visualizar en cada página.

Ahora, crea una conexión de evento y le asocias el evento creado, para que el evento se ejecute al inicar el formulario.

Seguimos creando el evento para movernos a la primera pagina y es muy similar al anterior, unicamente tenemos que refrescar el control objeto al finalizar el evento para actualizar nuevamente la rejilla.

Ahora veamos el evento para movernos a la página anterior, solo debemos comprobar si la página actual es > 1 y restar 1 a la variable global.

Ahora que ya tenemos los eventos, solo queda ir a las propiedades de los botones y asociarles su evento correspondiente a cada uno, mediante la propiedad “Ejecutar evento”.

El artículo esta incompleto, solo hemos visto los eventos para movernos a la “Primera página” y para ir a la “Página anterior“, pero con estos ejemplos, ya no deberia resultar dificil crear otros 2 eventos para ir a la “Página siguiente” y a la “Ultima página“, asi pues, consideralo parte del ejercicio y terminalo tú mismo.

En realidad, a pesar de todo este rollo que he metido, se tarda menos en realizar el ejercicio completo que en escribir el articulo.

Create PDF    Enviar artculo en formato PDF   
comments: 15 »
dic 17

Nuevos servicios del blog

Posted in ideas, utilidades

Agradecemos todas aquellas peticiones que nos sirven para mejorar el servicio que intentamos prestar a la comunidad, y las tenemos todas en cuenta, y dicho esto, comunicampos algunos cambios que hemos efectuado en el blog con la unica intención de facilitar las siguientes tareas:

  • Al final de cada articulo y justo antes de los comentarios, hemos instalado nuevas opciones para facilitar la descarga de los articulos en PDF y el envio de los mismoa a una cuenta de eMail. A partir de ahora, podras guardar en tu equipo los articulos que sean de tú interés para poder leerlos cuando no tengas conexión.
  • También y para aquellos que nos solicitan la lectura del blog desde el móvil (si que estais pillados, 😀 ),  hemos activado un nuevo servicio precisamente para facilitar la lectura desde el iPhone, pero manteniendo nuestro estilo actual para aquellos que prefieren leernos desde su escritorio tradicional.

Otras peticiones, como el uso de etiquetas, se estan valorando pero creo que, más interesante que el propio uso de etiquetas para los articulos es el propio buscador, y es que, con el buscador, puedes localizar cualquier articulo publicado y por cualquiera de las palabras que aparecen en el texto del articulo.

De todas formas podeis dejar vuestras opiniones, pero personalmente no suelo usar las “nubes de etiquetas”, porque simplemente, me cuesta mas encontrar la palabra que busco entre todas las etiquetas, que escribir las palabras en el buscador. Ademas eso nos limita a que mediante la nube de etiquetas, solo encontrareis el articulo deseado si he realizado el etiquetado adecuadamente, lo que obliga a hacer uso de un excesivo numero de palabras para etiquetar y de elegir correctamente las palabras. Lo dicho, complicado tanto para vosotros como para mi.

Mi voto particular es por el buscador pero si lo considerais útil, usare las etiquetas también.

Y sobre todo, muy agradecido, porque este interes mostrado por mejorar este blog, solo puede significar una cosa, que os gusta leerme, aunque no siempre os guste lo que digo, y eso, a mi tambien me gusta, asi que, todos contentos. :)

PDF Printer    Enviar artculo en formato PDF   
comments: 5 »
nov 15

¿Tienes problemas con el control de licencias?

Posted in aplicaciones, utilidades, v7

Uno de los problemas de la actual v7.4.1 es, que cada instancia, cada aplicacion que ejecutamos con vClient, consume una licencia, incluso cuando estas se ejecutan en el mismo equipo y por el mismo usuario.

En A.S.C. hemos creado varias aplicaciones como:

Aplicación de cine (para cinefilos)

De Cine

Aplicación de flota (control de vehiculos)

Flota (by A.S.C.)

Aplicación de gimnasios

Gimnasios

Aplicación de logger (log de usuarios)

Log de usuarios

Aplicación de entities (entidades y basicos de dirección)

Modulos de  entidades

Aplicación de registro de documentos

Registro de documentos

Pero si ejecutamos todas estas aplicaciones simultaneamente en un mismo equipo con vClient o vWebClient, tenemos un problema importante, ¡estamos consumiendo 6 licencias!

Y claro, llega un momento en que intentamos abrir una aplicacion y nos aparece un sonoro error como este:

Error pro falta de licencias disponibles

Y claro, es un problema, pero tiene una solución muy sencilla:

Basta con crear un nuevo proyecto y heredar a todos los proyectos anteriores, creando un menu que nos da acceso al resto de aplicaciones.

Menu de acceso a todos los modulos

De esta forma, podemos tener acceso a todas las aplicaciones consuminedo una única licencia, pero claro, esto no es una solución al problema de las licencias consumidas por las diferentes instancias, tal y como se planteaba en este hilo del foro: ejecucion-simultanea-de-aplicaciones

Y es que, para que las instancias tampoco aumenten el consumo de licencias, Velneo deberia proveernos de una solución para poder cambiar de instancia directamente desde una aplicación en ejecución.

Espero que os haya servido para algo.

PDF Creator    Enviar artculo en formato PDF   
comments: 4 »
oct 21

Te atreves a generar un Word

Ahora, visto esto, y pensando un poquito,

¿que pasaria si escribo un documento en Html y lo guardo con la extension “.DOC”?

<html>

<head>

<title>Ejemplo para generar un documento de Word</title>

… sigue tu con el Html, que me da verguenza

</head>

<body>

… escribe aqui el contenido del cuerpo

</body>

</html>

¿te atreves a probarlo?

si eres atrevido, cuentame el resultado

lo peor que podria pasar, seria que el universo se colapsara y todo volveria al comienzo, un nuevo “Big Bang!”, y se crearia un nuevo universo, sin Politicos, sin Clero, sin Abogados, sin Informaticos, vamos una “utopia” 😉

PDF Creator    Enviar artculo en formato PDF   
comments: 4 »