oct
21
Se trata de un pequeño truco, y lo importante no es “el que” hace, sino “el como“.
Se trata de generar una hoja de calculo de Excel, pero como se indica en el titulo, lo vamos a generar desde cualquiera de las versiones de Velneo, incluida V7, por supuesto.
Pero antes de continuar, vamos a probar si funciona o no,
Copia este texto:
<table>
<tr>
<td>fila-1-col-1</td>
<td>fila-1-col-2</td>
<td>fila-1-col-3</td>
<td>fila-1-col-4</td>
<td>fila-1-col-5</td>
</tr>
<tr>
<td>fila-2-col-1</td>
<td>fila-2-col-2</td>
<td>fila-2-col-3</td>
<td>fila-2-col-4</td>
<td>fila-2-col-5</td>
</tr>
<tr>
<td>fila-3-col-1</td>
<td>fila-3-col-2</td>
<td>fila-3-col-3</td>
<td>fila-3-col-4</td>
<td>fila-3-col-5</td>
</tr>
</table>
Como podras comprobar, es texto HTML, puro y duro, y corresponde a una tabla
Copialo en el Bloc de notas, ahora guarda el archivo con extension XLS, y despues prueba a abrir el archivo con excel.
Sorprendido, pues eso,
Ahora como lo hacemos en V6, V7, etc,
Pues sencillo, solo necesitas un proceso que te genere el texto Html correspondiente a la tabla,
luego guardas el archivo:
Fichero abrir “lectura/escritura”
Fichero “guardar linea”: texto-html
y no olvides que el archivo debes cuardarlo con extension XLS, propia de Excel
ya ta
more easy is impossibol
no DLL, no complicate, nodin de nodin,
tengo que mejorar este Manche-Inglis,
la vida ya es bastante complicada desde que existen los “informaticos”, hagamosla un poco mas sencilla, “simple is beautifull”
ago
3
Como en el ejercicio anterior, voy a dar una solución al problema planteado por Juanjo “info.jjsoft“, que al igual que en el log del sistema, creo que tiene una solución muy sencilla.
Planteamiento del problema:
¡Necesitamos imprimir etiquetas en varias columnas en un informe!
Problemas técnicos:
Actualmente, en la version 7.4.1 no esta disponible la propidedad para modificar el número de columnas de la sección detalle de un informe.
Solución:
Crear una tabla temporal para la impresión de etiquetas, esta tabla debe tener varios campos para almacenar los datos de cada columna: #COLUMNA1, #COLUMNA2, #COLUMNA3, #COLUMNA4, y asi tantas como queramos.
Ahora creamos el informe, normalmente, eso si, ajustando cada campo en la posicion correcta para la impresión de cada columna de datos de la etiqueta.
Y para finalizar, solo nos queda una cosa por hacer:
Crear el proceso que guarda los datos de cada ficha en el campo #COLUMNAx correspondiente, y ejecutar el informe.
Como ya dije en el articulo anterior, hay 2 opciones:
- esperamos a que Velneo lo solucione
- ponemos los medios para evitar el problema
Este calor no debe ser muy bueno para las neuronas,
Con esto no quiero excusar a Velneo, por algo que deberia funcionar, pero la solución es sencilla y sigo creyendo que hay otros problemas mas importantes por resolver.
jul
31
Esta vez, creo que para estos dias de calor, de playa, de descanso, de aire acondicionado en la oficina, da igual … realmente las condiciones de cada uno, pero como seguro que teneis mono de V7, voy a proponer un pequeño ejercicio, que algunos han reclamado deberia venir “de serie” dentro de la propia herramienta.
Y creo que no solo no es necesario que venga de serie, sino que debemos crearlo nosotros mismos y asi “customizarlo” según las necesidades de cada uno.
Hacerlo es tan sencillo que en nuestros proyectos esta incorporado “de serie” y para realizarlo solo es necesario, lo siguiente:
- En nuestro proyecto de datos, creamos una tabla con los campos que vamos a guardar. Para este sencillo ejemplo, bastaria con crear campos para el #ID, #NAME, #USUARIO, #FCH y #HOR. Pero podeis añadir algún campo más si lo creeis necesario.
- Una vez creada la tabla, en este mismo proyecto de datos, necesitamos una función que realice una operación muy simple: crear un registro en la tabla de datos, y como parametros a la función, bastaria con pasarle un TEXTO y el USUARIO, que utilizariamos para crear el registro, por supuesto.
- Crea los objetos necearios para realizar consultas y visualizar los datos de esta tabla: busquedas, rejillas, informes, menús, etc.
- Ahora solo quedan una cosa por hacer, pero es la mas importante: desde cualquier parte que desees controlar cualquier operacion del usuario, un evento de tabla (alta, modificacion o baja), desde un proceso, desde un evento de formulario o rejilla, solo tienes que llamar a la función creada y pasarle los parametros TEXTO y USUARIO.
El ultimo punto, requiere trabajo, pues hay que ejecutar la función desde cualquier operación que se realice, pero eso también depende de la complejidad del proyecto.
Después de ver lo sencillo que resulta el ejercicio, quien no tenga LOG es porque no quiera, te atreves a realizar el ejercicio o prefieres esperar a que Velneo lo solucione.
Por mi parte creo que Velneo debe dedicar su tiempo a solucionar problemas reales, que no podamos solucionar nosotros mismos.
jul
2
Para el esquema de nuestra gestión, de la cual exponiamos el esquema en el articulo anterior: Analisis de una aplicación completa, hemos visto que era necesario disponer de una funcion muy interesante, pero que de la cual no disponemos en la versión actual v7.4.
Asi pues, me planteo si debo desarrollar mi propia función para este proposito o debo buscar algun recurso que realice dicha tarea, y a pesar de que la segunda opción es muy atractiva ya que me libera de un tiempo del que a veces no se dispone, he decidido que crear una función propia y ademas hacerlo en Velneo v7, puede ser un ejercicio práctico que merezca la pena.
 Convertir un importe a texto
Aunque seguramente no es la mejor decisión, ya que disponemos de otras formas de resolver el problema, me he puesto manos a la obra y aqui esta el resultado del ejercicio.
El código adjunto corresponde a la función definida para convertir cualquier numero a su valor en texto, y nos será muy útil para imprimir el valor numerico del importe de un cheque, por ejemplo.
Espero que os sea de utilidad.
jun
3
Estoy examinando un poquito mas a fondo la nueva versión y estos son los cambios que he podido detectar a simple vista,
En el asistente de funciones:
- La función isEmpty(cadena) ha cambiado del grupo BASICAS al grupo CADENAS, lógico hasta cierto punto, si tenemos en cuenta que el parametro a comprobar va a ser una cadena de texto, aunque no creo que esto del cambio de un grupo a otro fuera necesario, mas que nada por el simple hecho de que ya estabamos acostumbrados y el cambio puede dar algun que otro “sustillo”.
- La función remoteFunctionCall(dominioIP, idInstancia, idFuncion, contraseña, parametros) ha desaparecido del mapa, o mejor dicho del grupo BASICAS y ha pasado a mejor vida. Al menos, no la encuentro por ningún lado.
En cuanto a las sentencias de proceso:
- En el grupo de CESTAS tenemos nuevas instrucciones que mejoran el manejo de estas,
Cesta: Agregar a la lista en curso
Cesta: Quitar de la lista en curso
Cesta: Cruzar la lista en curso
- En el grupo de sistema tenemos una nueva sentencia
Salir de la aplicación
- En el grupo de Protocolo TCP tenemos una nueva sentencia
Protocolo TCP: Recibir buffer
Protocolo TCP: Enviar entero 64 bits
Protocolo TCP: Recibir entero 64 bits
- Y en el grupo de sentencias de interfaz, se han incluido varias sentencias nuevas
Interfaz: activar subcontrol
Interfaz: obtener multi-selección
Interfaz: limpiar multi-selección
Interfaz: añadir ficha a multi-selección
Interfaz: quitar ficha de multi-selección
Interfaz: ejecutar otro evento-slot
Nuevas sentencias que van a mejorar enormemente el desarrollo y que en algunos casos, se echaban de menos.
jun
1
Acaba de aparecer la nueva versión 7.4.0 de Velneo v7, y sin haberla probado aún, pues no he tenido tiempo mas que de leer el blog de Velneo con las novedades de la versión y las mejoras de estabilidad en la herramienta, que no me queda mas remedio que dar mi mas sincera enhorabuena al equipo de Velneo, pues ahora parece que realmente empieza a ser una versión verdaderamente operativa.
- La opción deshacer/rehacer, es importantisima, aunque parece una tonteria, la cantidad de errores cometidos, sobre todo en procesos, y el tiempo perdido, obligaba a crear copias de cualquier proceso antes de comenzar a realizar cualquier cambio, que digo, incluso, simplemente para moverme por las lineas al revisar el proceso, podia meter la pata, y ya no habia marcha atras. A partir de ahora, va a ser un lujo no tener que copiar cualquier objeto antes de cambiarlo.
- El instalador de aplicaciones, pués tiene poco que decir, pero felicidades nuevamente, porque aunque hay multiples opciones de Instaladores, nos gusta no tener que depender de herramientas externas para todo aquello que no sea programar. Ya se nos hace pesado la necesidad de instalar DLL’s para gran cantidad de operaciones, principalmente, porque desde el momento en que necesitamos DLL’s nuestra aplicación deja de ser multiplataforma, para depender casi exclusivamente de Windows.
- El nuevo vClient para Maemo/Meego , nos permite expandir nuestros desarrollos a un sector que hasta ahora nos estaba prohibido a los desarrolladores de Velneo, el de los moviles, y eso es muy de agradecer, porque si algo no me apetece, es tener que aprender un lenguaje diferente para cada aplicación que me solicita un cliente, y son muchas las oportunidades perdidas por no disponer de movilidad. Si, ya se que se puede hacer con Terminal Server o un Cliente Web con HTML, pero entonces los presupuestos se disparan para determinadas operaciones.
En cuanto a los nuevos objetos, pues que están muy bien, y siempre son de agradecer, pero lo verdaderamente importante es que ahora, podremos empezar a desarrollar con mucha mas tranquilidad, una tranquilidad que no tenia hasta hoy.
Y espero que cuando instale la nueva versión y empiece a realizar pruebas, las sensaciones sean tan buenas como las novedades que trae esta nueva versión.
Y para terminar, solo me queda perdir un deseo, en voz alta, aunque con miedo a que no se cumpla:
Si pudiesemos avanzar con INTRO entre los campos EDIT de un formulario, y pudiesemos asociar las teclas rapidas dentro de un EDIT a las opciones tipicas de Localizar, Nuevo y Editar, como lo hacemos habitualmente en V6, entonces…
¡¡¡ Seria la hostia !!!
P.D. mas adelante comentaré si la sensación de euforia permanece tras realizar las pruebas de la nueva versión o …
may
4
Despues de varias semanas de mucho trabajo y poco tiempo libre, por fin la primera aplicación realizada en V7 esta en su fase final de desarrollo.
Pero el final, no es, sino el principio de una nueva fase, la “beta”, la de pruebas, en la que esperamos tener resultados muy satisfactorios y concluir pronto con el lanzamiento definitivo de esta aplicación, y os mantendremos informados.
Las principales caracteristicas de esta aplicación son:
- Llevar un control de los VehÃculos de una empresa, permitiendo gestionar los avisos para realizar las tareas de mantenimiento de dichos vehiculos, como Cambios de aceite, Filtros, etc. y también permite controlar los principales documentos de dichos vehÃculos, como Seguros, Tarjetas de transporte, I.T.V., etc.
- Además, tenemos una gestión de fichas de Conductores, para un control más detallado de las operaciones realizadas en los vehiculos y quien las realiza.
- También podemos disponer de Surtidores internos a la empresa, para el despacho de combustible a los vehÃculos. Y por supuesto, controlar el stock del surtidor para realizar pedidos al distribuidor.
- Las averias y otras operaciónes puntuales, se gestionan facilmente, llevando un libro registro de cada uno de los vehiculos.
- Y por último, también podemos llevar un registro de Sanciones a los conductores y de Incidencias.
Veamos algunos de los puntos anteriores, de forma gráfica:
Esta es la ficha del conductor, con los datos mas frecuentes,

La ficha de vehÃculos,

El repostaje de los vehiculos,

Tambien las sanciones a los conductores,

Y algunas opciones mas que ya vereis mas adelante, entre tanto, aqui esta el menu de la aplicación:

Os mantendremos informados de la salida oficial de esta aplicación.
abr
13
Como usuario de la herramienta, y con el único animo de mejorar la operatividad de la misma, ademas, que de ello beneficia a velneo ya que permite el acercamiento a la herramienta de todos aquellos que ven interesantes las caracteristicas y la forma de realizar ciertas tareas. Llevo exponiendo ideas en el foro indicado por Velneo para ello, desde que apareció la primera versión oficial 7.0
Solo espero que no caigan en saco roto, ni las mias, ni las de los demas usuarios que realizan sus aportaciones con el mismo afán.
Con esta única intención escribo este articulo, como critica constructiva, aun cuando en ciertos aspectos hemos perdido operatividad en V7, como es es caso de las ACCIONES
Con mucho entusiasmo, se acogio la idea de que en V7 no tendriamos “pistolas”, tendriamos “metralletas” que permiten disparar hasta 10 objetos encadenados entre si. Esto es bueno, muy bueno, si lo comparamos con la operatividad que tenia la “doble bala” en los menus de V6.
Pero tambien hemos perdido operatividad en los formularios, ya que no es posible ejecutar un proceso en el “PRE” o en el “POST” de un boton Aceptar o Cancelar. Ahora es complicado, por no decir imposible, ejecutar un proceso al finalizar un formulario, ya se que ahora disponemos de los Eventos que han aumentado considerablemente la potencia de los formularios, pero les sigue faltanto “algo”.
Un ejemplo sencillo:
- En V6 lanzo un proceso que me retorna un formulario, y en este formulario a su vez, ejecuta un proceso si pulso “ACEPTAR” y otro proceso diferente si pulso “CANCELAR”, e incluso, desde el boton aceptar, en el “POST” puedo retornar otro formulario o una rejilla.
Pero como hariamos esto en V7:
- Pues, segun velneo, disponemos de las ACCIONES, que permiten encadenar multiples objetos, y cierto, se puede realizar con una ACCION, si el usuario acepta todos los formularios, podemos encadenar tantos como sea necesario.
¿Pero que ocurre, cuando el usuario cancela el formulario?
¿Podemos interrumpir la accion?
¿Podemos indicar en la accion que debe retornar un objeto si hay confirmacion y otro diferente si se cancela?
Pues esto es a lo que me refiero.
Quizá me este equivocando y la acción solo tenga la funcionalidad que tiene, en cuyo caso me parece que lo hace correctamente.
Pero, entonces, ¿como suplimos la carencia de los procesos “PRE” y “POST” en los botones de los formularios?
La solucion, quiza podria venir por que los botones “Aceptar” y “Cancelar” tambien pudieran tener una “SALIDA FICHA/LISTA/NINGUNO” y ejecutar un proceso u objeto con una “ENTRADA” equivalente.
Dicho de otra forma, a los botones Aceptar y Cancelar de los formularios, les falta una propiedad “Ejecutar objeto” que tenga como “Entrada”, el mismo origen del formulario (Origen en la misma tabla del formulario o Sin origen).
Visto esto, la teoria de “Mister Potato” esta muy bien, pero, porque no puedo poner los ojos dentro de las orejas, si me apetece, a pesar de las consecuencias de esta accion, es decir, que si “Mister Potato”, cierra los ojos, se quedaria sordo.
Y ya para terminar, decir que, estaria bien que Velneo informase sobre cuales de las ideas que exponemos en el “Foro de Ideas”, seran tenidas en cuenta en un futuro, y cuales van a ser desestimadas por ser consideradas irrelevantes, por que no van en la linea de negocio de Velneo, o simplemente, porque ya existen y pueden ser realizadas por otros métodos.
Tambien estaria bien, que se pudieran consultar las “Ideas del foro” por diferentes tipos de valoración, como:
- Ideas desestimadas por diversos conceptos
- Ideas que ya estan en preparacion
- Ideas que ya han sido implementadas en una version
mar
15
Tras las pruebas realizadas con la importación de datos en las tablas de contabilidad Asientos y Apuntes, las primeras impresiones fueron bastante buenas, los tiempos de acceso y los tiempos empleados en las operaciones resultaron muy aceptables teniendo en cuenta las condiciones en las que se realizarón dichas tareas.
No obstante, y debido a la falta de tiempo, lo que obliga a realizar las pruebas a altas horas de la noche, y tras largas jornadas de trabajo, suelen surgir problemas que posiblemente sean culpa del cansancio que a ciertas horas no podemos evitar. El caso es, que por no se que motivo, se han producido varias situaciones que se deberian tener en cuenta para evitar la consecuencia final, que se deriva en perdida total de datos en la tabla de Asientos.
Voy a exponer los 2 problemas mas frecuentes que me han surgido:
1. vClient se cuelga (o quiza no este colgado) pero cuando se solicita una accion, y vClient no responde tras 10 o 15 minutos de espera, uno cree que esta colgado y ejecuta el administrador de tareas para interrumpir la operación.
2. vClient esta en ejecución y como uno anda como loco, con vClient, vDevelop, vAdmin, en ocasiones minimizados en la barra de tareas de Windows, pues para ahorrar tiempo, y no tener que estar reiniciando instancias una por una, se me ocurre que es mas fácil, Detener el servicio de vServer desde el Panel de Control y volver a iniciarlo despues. De esta forma, me aseguro que todas las instancias estan correctamente actualizadas y disponibles. Pero luego me doy cuenta de que vClient, permanece abierto y estaba conectado al servidor, asi que lo cierro y vuelvo a entrar, pero no se que problemas puede haber causado el dejarlo abierto.
En el primero de los casos, no se puede evitar, si se ha colgado, pues que le vamos a hacer. Pero en el segundo de los casos, creo (y no se si será posible) que vServer te avise de que hay enganches activos antes de ser Detenido, porque luego pasa lo que pasa.
Y no es moco de pavo, el resultado de esto, es que teniendo datos en los ficheros (comprobado directamente sobre la carpeta de la instancia de datos) los datos han desaparecido y no soy capaz de visualizarlos.
Solución: no me queda otra que Regenerar area de datos y Regenerar indices, pero tras la operación, ocurren dos cosas muy distintas, si tenemos en cuenta que se habian perdido los datos de las tablas Asientos y Apuntes, pero no los datos de las tablas maestras
1. Al regenerar datos e indices de Apuntes, aparecen todos los registros y aparentemente se soluciona el problema en esta tabla, OK.
2. Al regenerar datos e indices de Asientos, los datos del fichero desaparecen y el fichero queda fisicamente vacio. Antes de regenerar el fichero tiene un tamaño de mas de 2 Mb. y despues de regenerar tiene un tamaño de 2 Kb. es decir, la estructura de la tabla vacia.
No se como, y no se exactamente porque se ha producido el fallo, posiblemente por estar los registros bloqueados por el servidor, durante cualquiera de los inconvenientes que he detallado.
En cualquier caso, el problema es lo suficientemente importante como para ser revisado y solucionado a la mayor brevedad, ya que en una instalación real, éste problema hubiera ocasionado una seria discusión con el cliente final.
Salvo por este problema, todas las pruebas realizadas han sido muy satisfactorias.
mar
11
Seguimos con las pruebas de importacion de datos esta vez si, ya he terminado las pruebas inciales que permitiran trabajar con datos reales y ver el comportamiento de la aplicacion en situaciones reales.
Porque hasta ahora solo habia podido hacer pequeñas simulaciones, para realizar estas comprobaciones, decir que se han manejado los datos obtenidos de la importacion publicada ayer.
Es decir:
Los datos se obtienen de una tabla de datos del mismo proyecto en el que vamos a crear los asientos y apuntes correspondientes, y por tanto en esta ocasion si que hay una pequeña variacion con respecto a las pruebas anteriores:
- El proceso que realiza todas las operaciones se ejecuta en 3 plano en el servidor
- El equipo utilizado para el trabajo ha sido el mismo HP 4510s
- El numero de asientos creados es de 12,068
- El numero de apuntes creados es de 39,281
El tiempo empleado en realizar esta operacion es de 1 hora y 2 minutos, quiza demasiado tiempo, ¿o no?
Para la generacion de asientos y apuntes se han usado las siguientes tablas:
Tabla de asientos: Longitud de 205 bytes, 55 campos , 19 indices
Tabla de apuntes: Longitud de 198 bytes, 44 campos , 19 indices
Vamos a ver que es lo que hizo el proceso y cuales fueron los tiempos medios empleados
en realizar dichas operaciones:
Esto se repite exactamente 12,068 veces
- Lectura de la linea de origen en una tabla
- Parsear 5 campos de la cabecera con StringSection
- Grabar la ficha del asiento en otra tabla
- No realiza actualziaciones de ningun tipo
Esto se repite exactamente 39,241 veces
- Lectura de la linea de origen en una tabla
- Parsear 8 campos de la linea con StringSection
- Grabar la ficha del apunte en otra tabla
- Realizar las 3 actualizaciones por cada apunte a la cabecera
El resultado de las tablas de asientos y apuntes es,
Tamaños de los archivos de datos Asientos: 2,37 mb y Apuntes 7,42 mb
Tramaños de los ficheros de indices: Asientos 3,88 mb y Apuntes 12,2 mb
Esto significa que el tiempo empleado en grabar cada apunte y actualizar a la cabecera : 0,0316Â Â es decir, 31,6 registros por segundo
Tras finalizar el proceso y realizar los calculos correspondientes para preparar este artÃculo, comencé a comprobar el resultado obtenido a traves de las tablas y la mala noticia es que habia un asiento descuadrado, pero no tiene importancia, la buena noticia es, que dicho asiento ya estaba descuadrado antes de ser exportado.
Por tanto, el resultado, todo correcto, parece que esta vez si, se ha solucionado el problema existente en los calculos numericos con decimales.
A raiz de estos datos, que cada uno saque sus propias conclusiones …
|