ene 8

Búsquedas en 3 plano

Escribo este artículo, para aclarar aún más, si es que se puede, lo que ha descrito bastante bien nuestro amigo Fran Varona en este hilo del foro: Cargar lista Vs. Búsqueda

Una discusión que ha dado muchos quebraderos de cabeza y que por fin se desvela.

Para cada tabla, tenemos una búsqueda, en la que aprovechamos para usar varios indices y así, no tener que definir múltiples búsquedas:

Y en esa búsqueda hemos definido unas variables y unos componentes de búsqueda, para realizar búsquedas complejas.

Si os habéis fijado bien en vBase, veréis que en cada una de las opciones del menú, tenemos un formulario con un alternador, y desde un manejador de evento BUS, se llama a la búsqueda mediante el manejador de objetos:

En el evento, creamos un Manejador de objetos para llamar a la búsqueda y le pasamos los valores a las variables locales, antes de Disparar el objeto. Así, la búsqueda retorna una lista de registros con aquellos que cumplen las condiciones establecidas por las variables.

Tal y como se indica en el foro, las búsquedas siempre se ejecutan en 3º plano, pero esta afirmación solo es válida en aquellos casos en que las búsqueda se realiza por un solo índice, ya que cuando intervienen varios índices para obtener un resultado, las operaciones de Añadir, Cruzar y Quitar se realizan en 1º plano. Esto significa que el rendimiento baja considerablemente en la medida en la que aumenta el número de registros de la tabla en cuestión.

La solución a este problema, es sencilla, crear un proceso para llamar a la búsqueda:

El proceso debe cumplir unas reglas básicas:

  1. El proceso, como destino, debe ser de tipo Lista y para la misma tabla que la búsqueda a ejecutar.
  2. Tener las mismas variables definidas que la búsqueda a ejecutar, y para mayor sencillez, llamamos a las variables exactamente igual que en la búsqueda, de echo, podemos copiarlas.
  3. Creamos un manejador de objetos para llamar a la búsqueda, le pasamos todas las variables, y al finalizar retornamos la lista a la salida.

Ahora ya solo tenemos que crear el manejador de evento en el formulario principal, para llamar al proceso en 3º plano (en vez de a la búsqueda), asegurándonos así, de que esta vez si, la búsqueda se ejecutará en 3º plano y las operaciones de Añadir, Cruzar y Quitar, también.

Pero en este mismo hilo del foro se extiende la pregunta sobre la optimización de este tema, cuando además debemos usar búsquedas con formulario, pero este tema, lo dejare como ejercicio para otra ocasión, aunque la idea ya esta en el aire.

¿Tengo que repetirlo?

Pues vale, lo repito:

Antes de ejecutar el manejador de objetos que dispara el proceso en 3º plano, debemos pedir el formulario para introducir los valores por el usuario, y luego, pasar esos valores al proceso.

PDF    Enviar artculo en formato PDF   
comments: 1 »
jun 19

Oferta en funciones: 3 x 1

Estamos de oferta señoras y señores, …

vamos, que me las quitan de las manos, …

Ya solo me quedan 3, lleveselas y pague solo una.

Antes de comprar una oferta, deberiamos saber los que compramos, ¿no?

¿Qué es una función?

En la programación tradicional, en los lenguajes de 3 generación, una función es una porción de código que se separa del resto con el fin de abstraer la programación y evitar usar el mismo código de forma repetitiva. Es decir, si tengo que usar el mismo código en diferentes partes de una aplicación, creamos una función y llamamos a esa función cada vez que la necesitemos.

En Velneo V7, como en el resto de herramientas, tenemos 2 tipos de funciones:

  1. Funciones predefinidas, que son las que incluye la propia herramienta para las tareas más básicas:
    • round()
    • len()
    • choose()
    • currentDate()
    • etc…
  2. Funciones definidas por el usuario, que son aquellas que podemos definir nosotros mediante porciones de código o comandos de instrucción (igual que el usado en los procesos)
    • FUN_USER(param1,param2)

Y en este artículo nos centraremos en las funciones definidas por el usuario y debemos tener claras algunas consideraciones:

  • Las funciones hacen uso de los parámetros y podemos definir funciones que tengan hasta un máximo de 10 parámetros, aunque también podemos definir funciones que no necesitan ningún parámetro
  • El código de una función es el mismo que el usado en los procesos, y en algunos casos, seremos nosotros mismos, los que tengamos que decidir si realizamos una determinada tarea mediante una función o un proceso, ¿qué es mejor?
  • La función retorna un único valor, como resultado de ejecutar el código de la misma.

Ahora que ya hemos aclarado para que sirve una función y como debemos usarla, vamos a plantear el problema, o mejor dicho, los problemas que se nos presentan:

  1. Resulta que, con la salida de la versión 7.10 de Velneo V7, y la posibilidad de crear fórmulas y procesos JavaScript, he caido en la cuenta de que me falta algo, ¿dónde estan las funciones JavaScript?, tenemos fórmulas, tenemos procesos, pero no tenemos funciones.
    • El caso, es que despues de comentarlo con soporte, y de llegar a la conclusión de que no hay una solución clara a este problema que parece ser bastante complejo, y no tendrá solución viable a corto plazo, se me ocurre la siguiente solución, en la que afortunadamente, coindidimos con la respuesta de soporte:
    • No podemos crear funciones en JavaScript, pero hay que ser positivo y ver lo que si podemos hacer. Podemos crear un proceso JavaScript y llamar al proceso desde una función. No es la solución ideal, pero ¡es una solución!.
  2. Luego, de esta pequeña charla, cai en la cuenta de que podiamos llevar esta solución un poco mas alla, y de paso, solucionar el 2º problema. ¡No podemos ejecutar funciones en 3º plano!
    • ¿Cómo que no?, si ya hemos visto, que podemos llamar al proceso desde una función, esta misma solución nos vale para ejecutar las funciones en 3º plano. Para esto, solo hay que crear la función, y del mismo modo, llamamos a un proceso mediante el Manejador de objetos y disparamos el proceso en 3º plano. ¡Otro problema solucionado!
  3. Pero no acaba ahi la cosa, ya que uno de los problemas principales, para el cual se requeria el uso de funciones JavaScript, era poder usarlas desde contenidos iniciales en las fómulas de los campos.
    • Asi que, despues de lo dicho anteriormente, ya deberiais saber la solución. ¡Si!, crear una función que llame a un proceso en V7 o JavaScript, eso ahora da igual. Lo que importa es que con esta solución, en realidad, lo que hacemos es conseguir ejecutar procesos en los contenidos iniciales, que por definición, tampoco es posible. Te lo repito: “Si necesitas ejecutar un proceso desde un contenido inicial, ¡ya es posible!”

De esta forma, y con una única solución, estamos resolviendo 3 problemas que se nos pueden presentar con frecuencia.

Si necesitas ayuda para cualquier proyecto, seguro que podremos llegar a algún acuerdo. Aqui estan mis datos de contacto:

http://www.ascsl.com/about/

PDF    Enviar artculo en formato PDF   
comments: 2 »
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 Printer    Enviar artculo en formato PDF   
comments: 2 »
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    Enviar artculo en formato PDF   
comments: 2 »
ene 20

PRE y POST al botón Aceptar de un formulario

Posted in ejercicios, trucos, tutores

Aqui os dejo un enlace al hilo relacionado con este artículo.

http://velneo.es/foros/topic/interfaz-aceptar-1

Para los que venimos de V6, en ocasiones se echa de menos los eventos PRE y POST a la pulsación del botón aceptar de un formulario:

En V7 no tenemos esta opción, o al menos no tal como la conociamos.

En V7 podemos crear uno objeto Formulario con un botón Aceptar y en las propiedades del botón, le indicamos el Comando “Aceptar”, esto funcionaria correctamente y guardaria los cambios de la ficha cerrando despues el formulario, pero a cambio de la sencillez, no podemos ejecutar ninguna sentencia ni antes, ni después de guardar la ficha.

Si necesitamos ejecutar algún evento PRE o POST al cerrar el formulario, debemos realizarlo de la siguiente forma:

Creamos un evento “EVENTO_ACEPTAR” en el formulario, que no es otra cosa que un proceso interno al formulario y que solo puede ser ejecutado desde ese objeto, y en el evento, indicamos las siguientes instrucciones:

  1. Sentencias del PRE …. (escribimos todas las sentencias que queramos ejecutar antes de guardar la ficha)
  2. Interfaz: Guardar ficha en alta o modificacion … (aqui es donde se guardan los cambios del registro en la base de datos)
  3. Sentencias del POST … (aqui ya no podemos modificar campos de la tabla, pero podemos ejecutar otras sentencias)
  4. Interfaz: Aceptar … (Cierra el formulario)

Tras la ejecución del comando “Interfaz: Aceptar” ya no se ejecuta nada, pero tampoco tiene mucho sentido, si debemos mostrar algún mensaje o realizar alguna operación, debemos hacerlo en las posiciones 1 (PRE) o 3 (POST).

Para cualquier duda, podeis dejar un comentario.

Create PDF    Enviar artculo en formato PDF   
comments: 1 »
mar 9

Sabias que … III

Posted in quicktips, trucos

Cuando tienes que mover un control dentro de un formulario, o un campo nuevo dentro de una tabla, al seleccionar el campo, pulsas el botón de SUBIR y puedes desplazar el objeto a la posición deseada.

Seguramente no te estoy diciendo nada nuevo, pero claro, si hay que mover el objeto 10 posiciones, debes pulsar el botón subir 10 veces.

Lo que quizás no habías caido, es que es mas fácil y mas rápido, marcar los 10 objetos superiores y moverlos todos juntos hacia abajo, 😀

Pruebalo y me cuentas …

PDF Creator    Enviar artculo en formato PDF   
comments: 2 »
feb 16

Sabias que (II)

Posted in quicktips, trucos

… cuando tienes varios controles de edición de campos dentro de una “caja de grupo” como la de la imagen,

solo es necesario poner la condicion “Activo” a la “caja de grupo” para que todos los controles contenidos en ella, se activen / desactiven según se cumpla la condición de la caja contenedora.

De esta forma, no es necesario poner las condiciones, a cada uno de los controles por separado (siempre que la condición sea igual para todos los controles de edición, claro).

PDF Printer    Enviar artculo en formato PDF   
comments: 7 »
feb 8

Sabias que …

Posted in quicktips, trucos

… en los formularios, tenemos la costumbre de copiar y pegar los campos de edición.

Y al hacer esto, si vamos a pegar un nuevo campo #NIF, solo tenemos que pinchar en el campo #REF para que el orden de tabulación sea respetado.

Mira la imagen, y compruebalo por ti mismo, pincha en el Edit del campo #REF, y al pegar otros campos de edición , el orden de tabulación sera respetado a continuación del que habías seleccionado.

PDF Creator    Enviar artculo en formato PDF   
comments: 5 »