Listas

Conjunto de comandos de proceso que permite interactuar con una lista de registros de una tabla.

Este tipo de comandos solamente estarán accesibles en aquellas líneas de proceso cuyo origen sea una lista de de registros de una tabla.

Añadir ficha a la lista en curso

Comando de instrucción del grupo Listas que permite añadir una ficha a la lista en curso.

Origen de la instrucción: lista de la tabla en curso.

Destino del subproceso: ninguno.

Parámetros

Manejador de ficha

Identificador o manejador dado a la ficha mediante la ejecución previa de los comandos Crear nueva ficha en memoria o Crear copia de ficha en memoria.

Funcionalidad

Permite añadir a la lista en curso una ficha local al proceso creada previamente mediante los comandos Crear nueva ficha en memoria o Crear copia de ficha en memoria.

Comentarios

Esta ficha será local al proceso, por lo que será destruida al finalizar el mismo. En el caso de una ficha creada mediante el comando crear nueva ficha en memoria, para que ésta pueda ser añadida a la lista ha de ser guardada en disco previamente, por lo que antes de añadirla a la lista tendremos que guardarla en disco usando el comando alta de ficha, en este comando la ficha será referenciada con el manejador declarado en su parámetro.

Ejemplo

Damos de alta un contacto y lo añadimos a la lista en curso de la rejilla en la vista de datos actual.

Crear nueva ficha en memoria ( alta, CLT_M@ejemplo_dat )
    Modificar campo ( NAME, "Juan Pérez García" )
Alta de ficha ( alta )
    Libre
Interfaz: procesar ( LST, Todas )
    Añadir ficha a la lista ( alta )

Calcular fórmula sobre lista

Comando de instrucción del grupo Listas que, a partir de la fórmula que establezcamos en sus parámetros, permite obtener la suma total, la media, el valor máximo y el valor mínimo.

Origen de la instrucción: lista de la tabla en curso.

Destino del subproceso: ninguno.

Parámetros

Fórmula a calcular

Expresión de tipo fórmula que queremos calcular por cada registro.

Modo de cálculo

En este parámetro especificaremos qué tipo de cálculo queremos hacer con esa fórmula. Los valores posibles son:

  • Media: obtiene la media aritmética de la fórmula sobre el número total de registros.

  • Máximo: obtiene el valor máximo obtenido.

  • Mínimo: obtiene el valor mínimo obtenido.

  • Suma: obtiene el sumatorio de la fórmula en todos los registros.

Modo de ejecución

Indicaremos dónde queremos que se realice el cálculo:

  • 1º plano: local (síncrono): el cálculo se hará en local.

  • 3er plano: servidor (síncrono):el cálculo se hará en el servidor.

Si se trata de pocos registros el cálculo se podrá hacer en local pero si son muchos registros y, sobre todo ejecutando en cloud, se recomienda hacerlo en tercer plano.

Identificador de variable local numérica de retorno

Variable local del proceso donde se guardará el resultado.

Funcionalidad

A partir de la fórmula que establezcamos en sus parámetros, permite obtener la suma total, la media, el valor máximo y el valor mínimo y guardar el valor obtenido en una variable local.

Comentarios

Este comando ni transacciona ni es bloqueante, con lo cual no habrá ningún problema si se modifica la lista o se ejecutan otros procesos mientras se está realizando el cálculo.

Ejemplo

Ejecutamos una búsqueda y con la lista obtenida calculamos la suma, la media, el máximo y el mínimo:

Rem ( Ejecutamos una búsqueda de facturas y calculamos la suma, la media el máximo y el mínimo facturado )
Búsqueda ( VTA_FAC_G_EMP_ENT_FCH@vERP_2_dat )
    Calcular fórmula sobre la lista ( #TOT_FAC, Suma, 3º plano: servidor (síncrono), SUM )
    Calcular fórmula sobre la lista ( #TOT_FAC, Media, 3º plano: local (síncrono), MED )
    Calcular fórmula sobre la lista ( #TOT_FAC, Máximo, 3º plano: local (síncrono), MAX )
    Calcular fórmula sobre la lista ( #TOT_FAC, Mínimo, 3º plano: local (síncrono), MIN )

Cortar lista

Comando de instrucción del grupo Listas que recorta el número de elementos de una la lista a partir de una posición determinada.

Origen de la instrucción: lista de la tabla en curso.

Destino del subproceso: ninguno.

Parámetros

Fórmula de tamaño

Tamaño o número de elementos de la nueva lista.

Fórmula de posición

Posición a partir de la cual se quiere cortar la lista. La primera posición de la lista será la 1. El número 0 no es un valor válido para este parámetro.

Funcionalidad

Este comando de instrucción recorta el número de elementos de la lista de origen de la línea del proceso al tamaño dado en el primer parámetro desde la posición especificada en el segundo parámetro.

El resto de los elementos no son borrados de la tabla de datos, sólo son quitados de la lista de origen.

Este comando no crea ningún tipo de subproceso, es simplemente un paso que altera el contenido de la lista de origen. La siguiente línea del proceso al mismo nivel que ésta partirá de la lista obtenida.

Comentarios

Obtenemos la lista top 10 de importes de pedidos realizados por los de clientes.

Ejemplo

Limpiamos la rejilla para que no muestre ningún registro.

Cargar lista ( CLT_M@ejemplo_dat, ID, , , ,  )
    Ordenar lista ( #TOT_PED, , , , ,  )
    Cortar lista ( 10, 1 )
    Añadir lista a la salida

Crear o modificar lista desde CSV

Comando de instrucción de proceso que nos permite, o bien modificar, o bien dar de alta una lista de registros en una tabla a partir de un CSV.

Origen de la instrucción: ninguno.

Destino del subproceso: lista de la tabla de destino.

Parámetros

Fórmula de dato

Expresión fórmula con el CSV a importar, directamente como texto literal o variable local alfabética, variable global alfabética o campo alfabético u objeto texto.

Identificador de tabla

En este parámetro seleccionaremos la tabla de destino.

Identificador de índice

Este parámetro solo es necesario si en la operación permitida está incluida la modificación, en cuyo caso especificaremos un índice de clave única que permita localizar el registro.

Tipo de operación

Tipo de operación a realizar en la tabla de destino. Los valores posibles son:

  • Alta o modificación: los registros que no existen lo dará de alta en la tabla, los que existen, los modificará.

  • Solo alta: dará de alta nuevos registros. Sl el CSV incluye el campo ID de cada registro lo ignorará y creará un nuevo registro con el ID que le corresponda. Así que es una buena alternativa al tubo de lista.

  • Solo modificación: los registros del CSV que existan en la tabla serán modificados, y con los que no existan no hará nada.

Fórmula para los parámetros CSV (formato JSON) (opcional)

Permite especificar un objeto JSON con los distintos parámetros configurables del comando. Debe tener esta estructura:

  • id (true/false): para configurar si el CSV incluye identificadores en la primera línea. El valor por defecto es true.

  • fields (array de string): objeto array con la especificación de campos a importar. El valor por defecto es todos los campos.

  • registerSeparator (string): carácter separador de registro en el CSV. El valor por defecto es el salto de línea.

  • fieldSeparator (string): carácter que se usa en el csv para separar los campos. El valor por defecto es la coma (,).

  • numericFormat (string): cadena para especificar el formato numérico del los campos del CSV. La fórmula admite los valores siguientes

    • "L": formato decimal con ajustes locales. Aplica la configuración local (separador decimal, separador de miles, mostrar/ocultar ceros a la izquierda) del sistema en el que es ejecuta el comando.

    • "C": formato contable. Aplica el formato de moneda (número de decimales, separador de miles y decimal) para el idioma del sistema en el que se ejecuta el comando.

    • Si no es ni "L", ni "C" intentará construir un locale con ese valor siguiendo estas reglas.

      Si no consigue construir un locale, aplicará el formato por defecto, que es "f": ([-]9.9).

Ejemplo:

{"id":true,
"fields":["ID","NAME", "NUMERO"],
"registerSeparator":"\r\n",
"fieldSeparator":",",
"numericFormat": "L"}

En el caso de que queramos escribir directamente la cadena del JSON como constante en la fórmula será necesario entrecomillarlo y reemplazar en la fórmula las comillas por la secuencia de escape \c:

"{\cid\c:true,
\cfields\c:[\cID\c,\cNAME\c, \cNUMERO\c],
\cregisterSeparator\c:\c\r\n\c,
\cfieldSeparator\c:\c,\c,
\cnumericFormat\c: \cL\c}"

Identificador de variable local alfabética de retorno con el resultado de la operación (formato JSON) (opcional)

Identificador de una variable local de tipo alfabético en la que se retornará el resultado de la operación. El contenido será un objeto de JSON con la siguiente estructura:

{ "ok": true, "errores" : {"velneo_errorRegistersCount": X, "velneo_errorRegisters"=[{ "velneo_errorCode": 1, "velneo_errorString : "" },…] }}

ok: 0 si no hay errores, 1 si los hay.

errores: JSON con información sobres los errores generados:

  • velneo_errorRegistersCount: entero con el tamaño del array de "registers" (0 si es un error general).

  • velneo_errorRegisters: [] → array de objetos con el que se intento dar el alta o modificar el registro con la información extra de las claves velneo_errorCode y velneo_errorString (como se especifica más abajo.

  • velneo_errorCode: 0 si no hay errores generales, o valor en caso de haber un error general. Ver enum de errores de JSON/CSV.

Ejemplos

Replicamos los registros de una tabla en otra tabla idéntica, con todos los campos:

// Rem ( Cargamos la lista de registos de la tabla de origen )
Cargar lista ( ORIGEN@miapp dat, ID, , , ,  )
	// Rem ( Generamos un CSV con la lsita obtenida )
	Generar CSV desde lista ( CSV, , , , ,  )
	// Rem ( Damos de alta los registros en la tabla de destino )
	Crear o modificar lista desde CSV ( CSV, DESTINO@miapp dat, ID, Alta o modificación, , RES )
		Libre
	Mensaje ( RES, Información, ,  )

Replicamos solamente el ID y el NAME de una tabla tabla en otra tabla idéntica:

// Rem ( Cargamos la lista de registos de la tabla de origen )
Cargar lista ( ORIGEN@miapp dat, ID, , , ,  )
	// Rem ( Generamos un CSV con la lsita obtenida )
	Generar CSV desde lista ( CSV, "" + #ID:getID() + "," + #NAME:getID(), , , ,  )
	// Rem ( Damos de alta los registros en la tabla de destino )
	Crear o modificar lista desde CSV ( CSV, DESTINO@miapp dat, ID, Alta o modificación, "{\cid\c:true,
\cfields\c:[\cID\c,\cNAME\c], \cregisterSeparator\c:\c\r\n\c, \cfieldSeparator\c:\c,\c,\cnumericFormat\c: \cL\c}" , RES )
		Libre
	Mensaje ( RES, Información, ,  )

Crear o modificar lista desde CSV en disco

Comando de instrucción de proceso que nos permite, o bien modificar, o bien dar de alta una lista de registros en una tabla a partir de un fichero CSV almacenado en disco.

Origen de la instrucción: ninguno.

Destino del subproceso: lista de la tabla de destino.

Parámetros

Fórmula de senda

Expresión fórmula con la senda del fichero CSV a importar.

Identificador de tabla

En este parámetro seleccionaremos la tabla de destino.

Identificador de índice

Este parámetro solo es necesario si en la operación permitida está incluida la modificación, en cuyo caso especificaremos un índice de clave única que permita localizar el registro.

Tipo de operación

Tipo de operación a realizar en la tabla de destino. Los valores posibles son:

  • Alta o modificación: los registros que no existen lo dará de alta en la tabla, los que existen, los modificará.

  • Solo alta: dará de alta nuevos registros. Sl el CSV incluye el campo ID de cada registro lo ignorará y creará un nuevo registro con el ID que le corresponda. Así que es una buena alternativa al tubo de lista.

  • Solo modificación: los registros del CSV que existan en la tabla serán modificados, y con los que no existan no hará nada.

Fórmula para los parámetros CSV (formato JSON) (opcional)

Permite especificar un objeto JSON con los distintos parámetros configurables del comando. Debe tener esta estructura:

  • id (true/false): para configurar si el CSV incluye identificadores en la primera línea. El valor por defecto es true.

  • fields (array de string): objeto array con la especificación de campos a importar. El valor por defecto es todos los campos.

  • registerSeparator (string): carácter separador de registro en el CSV. El valor por defecto es el salto de línea.

  • fieldSeparator (string): carácter que se usa en el csv para separar los campos. El valor por defecto es la coma (,).

  • numericFormat (string): cadena para especificar el formato numérico del los campos del CSV. La fórmula admite los valores siguientes:

    • "L": formato decimal con ajustes locales. Aplica la configuración local (separador decimal, separador de miles, mostrar/ocultar ceros a la izquierda) del sistema en el que es ejecuta el comando.

    • "C": formato contable. Aplica el formato de moneda (número de decimales, separador de miles y decimal) para el idioma del sistema en el que se ejecuta el comando.

    • Si no es ni "L", ni "C" intentará construir un locale con ese valor siguiendo estas reglas.

      Si no consigue construir un locale, aplicará el formato por defecto, que es "f": ([-]9.9).

Ejemplo:

{"id":true,
"fields":["ID","NAME", "NUMERO"],
"registerSeparator":"\r\n",
"fieldSeparator":",",
"numericFormat": "L"}

En el caso de que queramos escribir directamente la cadena del JSON como constante en la fórmula será necesario entrecomillarlo y reemplazar en la fórmula las comillas por la secuencia de escape \c:

"{\cid\c:true,
\cfields\c:[\cID\c,\cNAME\c, \cNUMERO\c],
\cregisterSeparator\c:\c\r\n\c,
\cfieldSeparator\c:\c,\c,
\cnumericFormat\c: \cL\c}"

Identificador de variable local alfabética de retorno con el resultado de la operación (formato JSON) (opcional)

Identificador de una variable local de tipo alfabético en la que se retornará el resultado de la operación. El contenido será un objeto de JSON con la siguiente estructura:

{ "ok": true, "errores" : {"velneo_errorRegistersCount": X, "velneo_errorRegisters"=[{ "velneo_errorCode": 1, "velneo_errorString : "" },…] }}

ok: 0 si no hay errores, 1 si los hay.

errores: JSON con información sobres los errores generados:

  • velneo_errorRegistersCount: entero con el tamaño del array de "registers" (0 si es un error general).

  • velneo_errorRegisters: [] → array de objetos con el que se intento dar el alta o modificar el registro con la información extra de las claves velneo_errorCode y velneo_errorString (como se especifica más abajo.

  • velneo_errorCode: 0 si no hay errores generales, o valor en caso de haber un error general. Ver enum de errores de JSON/CSV.

Ejemplos

Exportamos a disco todos los registros de una tabla con todos sus campos y los importamos en otra:

// Rem ( Cargamos la lista de registos de la tabla de origen )
Cargar lista ( ORIGEN@miapp dat, ID, , , ,  )
	// Rem ( Generamos un en disco CSV con la lsita obtenida )
	Generar CSV desde lista ( CSV, , , , ,  )
	Set ( SENDA, sysCacheClientPath + "datos.csv" )
	Fichero: Abrir ( file, SENDA, Lectura/escritura (Crea o limpia), BOK, .Ninguno )
		Fichero: Grabar fichero ( file, CSV, BOK2 )
	// Rem ( Damos de alta los registros en la tabla de destino )
	Crear o modificar lista desde CSV ( CSV, DESTINO@miapp dat, ID, Alta o modificación, , RES )
		Libre
	Mensaje ( RES, Información, ,  )

Replicamos solamente el ID y el NAME de una tabla tabla en otra tabla idéntica:

// Rem ( Cargamos la lista de registos de la tabla de origen )
Cargar lista ( ORIGEN@miapp dat, ID, , , ,  )
	// Rem ( Generamos un CSV con la lsita obtenida )
	Generar CSV desde lista ( CSV, "" + #ID:getID() + "," + #NAME:getID(), , , ,  )
	// Rem ( Damos de alta los registros en la tabla de destino )
	Crear o modificar lista desde CSV ( CSV, DESTINO@miapp dat, ID, Alta o modificación, "{\cid\c:true,
\cfields\c:[\cID\c,\cNAME\c], \cregisterSeparator\c:\c\r\n\c, \cfieldSeparator\c:\c,\c,\cnumericFormat\c: \cL\c}" , RES )
		Libre
	Mensaje ( RES, Información, ,  )
// Rem ( Cargamos la lista de registos de la tabla de origen )
Cargar lista ( ORIGEN@miapp dat, ID, , , ,  )
	// Rem ( Generamos un en disco CSV con la lsita obtenida )
	Generar CSV desde lista ( CSV, "" + #ID:getID() + "," + #NAME:getID(), , , ,  )
	Set ( SENDA, sysCacheClientPath + "datos.csv" )
	Fichero: Abrir ( file, SENDA, Lectura/escritura (Crea o limpia), BOK, .Ninguno )
		Fichero: Grabar fichero ( file, CSV, BOK2 )
	// Rem ( Damos de alta los registros en la tabla de destino )
	Crear o modificar lista desde CSV ( SENDA, DESTINO@miapp dat, ID, Alta o modificación, "{\cid\c:true,
\cfields\c:[\cID\c,\cNAME\c], \cregisterSeparator\c:\c\r\n\c, \cfieldSeparator\c:\c,\c,\cnumericFormat\c: \cL\c}" , RES )
		Libre
	Mensaje ( RES, Información, ,  )

Crear o modificar lista desde JSON

Comando de instrucción de proceso que nos permite, o bien modificar, o bien dar de alta una lista de registros en una tabla a partir de un JSON.

Origen de la instrucción: ninguno.

Destino del subproceso: lista de la tabla de destino.

Parámetros

Fórmula de dato

Expresión fórmula con el json a importar, directamente como texto literal o variable local alfabética, variable global alfabética o campo alfabético u objeto texto.

Tipo de operación

Tipo de operación a realizar en la tabla de destino. Los valores posibles son:

  • Alta o modificación: los registros que no existen lo dará de alta en la tabla, los que existen, los modificará.

  • Solo alta: dará de alta nuevos registros. Sl el JSON incluye el campo ID de cada registro lo ignorará y creará un nuevo registro con el ID que le corresponda. Así que es una buena alternativa al tubo de lista.

  • Solo modificación: los registros del json que existan en la tabla serán modificados, y con los que no existan no hará nada.

Tabla

En este parámetro seleccionaremos la tabla de destino.

Identificador de índice

Este parámetro solo es necesario si en la operación permitida está incluida la modificación, en cuyo caso especificaremos un índice de clave única que permita localizar el registro.

Identificador de variable local alfabética de retorno de ok (opcional)

Identificador de una variable local de tipo booleano que devolverá 1 si todo está correcto y 0 si hay errores.

Identificador de variable local booleana de retorno de ok (opcional)

Variable booleana con la que se devuelve un 1 si se ha podido realizar el alta o modificación, o un 0 si no se ha podido realizar el alta o modificación.

Identificador de variable local alfabética de retorno de mensaje de error (opcional)

Identificador de una variable local de tipo alfabético en la que se retornará si ha habido algún error. El contenido será un objeto de JSON con la siguiente estructura:

{

velneo_errorCode: 0 si no hay errores generales, o valor en caso de haber un error general. Ver enum de errores de JSON/CSV.

velneo_errorString: "" si errorCode es 0, o mensaje de error en caso de error general

velneo_errorRegistersCount: entero con el tamaño del array de "registers" (0 si es un error general)

velneo_errorRegisters: [] → array de objetos con el que se intento dar el alta o modificar el registro con la información extra de las claves velneo_errorCode y velneo_errorString (como se especifica más arriba

}

Funcionalidad

A partir de un JSON, permite o bien crear nuevosr registros en una tabla, o bien modificar registros existente.

Comentarios

Este comando de instrucción de proceso tiene el fin de facilitarnos el traspaso de información, de registros de tablas, entre aplicaciones. Nos permite duplicar o actualizar información entre aplicaciones o dentro de la propia aplicación, de forma sencilla, con el fin de dotar a nuestras aplicaciones de un sistema sencillo de exportación e importación de información usando JSON.

El comando no es case sensitive. Se hace un tratamiento de las claves que convierte a Identificador cualquier clave, permitiendo aceptar como claves tanto identificadores case insensitive como valores con símbolos no permitidos (como espacios) en los nombres.

En el JSON los campos no están ordenados, así que debemos tenerlo en cuenta para cuando existen contenidos iniciales .

Para ese caso, se recomienda o bien quitar las claves y valores correspondientes del JSON antes de emplearlo, o bien modificar posteriormente los campos de los que dependen contenidos iniciales usando las funciones JSON para obtener los valores.

Los objetos no permiten repetición de claves (debido a que su posición realmente es irrelevante) .

Una estructura de objeto se representa con un par de llaves {} que contendrán cero o más pares de nombre/valor (o miembros). Un nombre es una cadena. Un signo de dos puntos : va detrás de cada nombre, separando el nombre del valor. Una coma , separa un valor del nombre siguiente. Los nombres dentro de un objeto DEBEN ser únicos.

Los posible errores son:

  • No se puede dar de alta registros porque ya existe en alguno de los índices de clave única. (si es solo alta pero ya existe en alguno de los índices de clave única).

  • No es posible modificar registros porque no se encuentran (Si el tipo de operación es solo modificación y no se encuentra el registro) .

  • El campo %1 que está en el índice %2 no existe en el JSON.

  • El campo destino %1 no existe en la tabla.

  • El valor %1 a asignar al campo %2 no es válido.

Ejemplo

Un manejador de evento que duplica los registros que tenemos en una rejilla:

Rem ( Generamos el JSON con la lista de origen )
Generar JSON desde lista ( , SZ_JSON, BOK, ERROR )
If ( BOK )
    Rem ( Generamos una nueva lista a partir del JSON generado )
    Crear o modificar lista desde JSON ( SZ_JSON, Solo alta, ARTICULOS@miapp, ID, BOK, ERROR_ALTA )
        Libre
    If ( !BOK )
        Mensaje ( "No se ha podido crear la nueva lista. Error: " + ERROR_ALTA, Información, ,  )
Else
    Mensaje ( "No se ha podido generar el JSON de origen. Error: " + ERROR, Información, ,  )

Proceso que da de alta o modifica artículos a partir de un JSON que hemos copiado previamente en el portapapeles:

Rem ( Leemos el contenido del portapapeles )
Portapapeles: Get texto ( SZ_JSON,  )
Rem ( Creamos/modificamos lista con los datos del JSON )
Crear o modificar lista desde JSON ( SZ_JSON, Alta o modificación, ARTICULOS@Json pruebas, ID, BOK, ERROR )
    Libre
If ( !BOK )
    Mensaje ( "No se ha poddo completar la operación. Error: " + ERROR, Información, ,  )

Exportar informe a fichero

Comando de instrucción del grupo Listas que se encarga de realizar la acción de generar un fichero en disco a partir del informe.

Origen de la instrucción: lista de la tabla en curso.

Destino del subproceso: ninguno.

Parámetros

Identificador del informe (Obligatorio)

Objeto informe cuya tabla asociada es la misma que la del origen de la línea del proceso donde estamos incluyendo este comando de instrucción.

Fórmula de senda de destino

Senda del fichero a generar. La senda ha de incluir el nombre y la extensión del fichero. Este parámetro puede ser una cadena o literal, un campo, una variable, el retorno de una función, etc. Para su especificación podemos hacer uso del asistente para la creación de formularios.

Funcionalidad

Comando de instrucción de proceso que genera el fichero indicado en el segundo parámetro a partir del informe seleccionado en el primer parámetro.

Comentarios

El proceso se paralizará durante la generación del informe y, una vez generado, continuará la ejecución secuencial del proceso.

Los formatos posibles de fichero son pdf y eps. La generación de uno u otro dependerá de la extensión que especifiquemos al definir la senda. Ejemplo:

Exportar informe a fichero (FACTURA, sysCacheClientPath + “/Informe.pdf”) El informe se generará en formato pdf.

Exportar informe a fichero (FACTURA, sysCacheClientPath + “/Informe.eps”) El informe se generará en formato eps.

No es posible exportar informe a fichero desde procesos ejecutados en tercer o en cuarto plano ni desde triggers.

No es posible exportar informe a fichero desde procesos ejecutados por Velneo vModApache en Linux ni tampoco si las instancias ejecutadas desde Apache las ejecutamos en modo server.

Ejemplo

Generamos y mostramos un informe en formato .pdf que contiene la lista de contactos en orden alfabético guardándolo en la caché del cliente.

Cargar lista ( CTT_M@ejemplo_dat, NAME, , , ,  )
    Exportar informe a fichero ( INFORME@ejemplo_app, sysCacheClientPath + "/listadecontactos.pdf" )
    Ejecutar documento ( "file:///"+sysCacheClientPath + "/listadecontactos.pdf",  )

Filtrar lista

Comando de instrucción del grupo Listas que quita de la lista de origen los elementos que no cumplan una determinada condición.

Origen de la instrucción: lista de la tabla en curso.

Destino del subproceso: ninguno.

Parámetros

Fórmula filtro

Expresión de tipo fórmula en la que se establecerá el filtro a realizar. En la misma podremos usar campos de la tabla en curso.

Fórmula de porcentaje que realiza del proceso (opcional)

Expresión de tipo fórmula en la que se establecerá el porcentaje que que representará el filtr filtrar dentro de todo el proceso. Esta estimación debemos calcularla manualmente. Es decir, si preveemos que filtrar es el 30% del proceso, pues eso será lo que pase cuando termine del filtrar la barra de progreso.

Funcionalidad

Quita de la lista los elementos que no cumplan la condición especificada en sus parámetros. Los elementos filtrados no son borrados en la tabla de datos, sólo son quitados de la lista.

Este comando no crea ningún tipo de subproceso, es simplemente un paso que altera el contenido de la lista en curso. La siguiente función del proceso al mismo nivel tendrá como origen la lista filtrada.

Comentarios

Para facilitar la especificación de la fórmula podremos hacer uso del asistente para edición de fórmulas.

Ejemplo

Procesamos la lista de contactos de la rejilla en curso dejando los registros cuya campo #CAT (Categoría) sea igual a “1”.

Interfaz: procesar ( LST, Todas )
    Filtrar lista ( #CAT = "1",  )

Generar CSV desde lista

Comando de instrucción de proceso que convierte una lista de registros de una tabla en una cadena con formato CSV (valores separados por comas).

Origen de la instrucción: lista de la tabla en curso.

Destino del subproceso: ninguno.

Parámetros

Identificador de variable local alfabética de retorno

Identificador de una variable local de tipo alfabético donde se retornará el CSV generado.

Fórmula de dato (Opcional)

Expresión fórmula con los campos a incluir en el CSV, debemos especificar cada campo con la función de campo getID, separando cada campo por una coma. Ejemplo:

"" + #ID:getID() + "," + #NAME:getID()

Si lo dejamos vacío, generará el csv con todos los campos.

Incluir identificadores en primera línea (opcional)

Nos permite configurar si queremos que se incluyan en la primera línea los identificadores de los campos (1) o no (0). Si lo dejamos vacío, los incluirá.

Fórmula de separador de registro (opcional)

Nos permite configurar qué carácter se usará para separar los registros en el CSV. Si se deja vacío, usará el salto de línea.

Fórmula de separador de campo (opcional)

Nos permite configurar qué carácter se usará para separar los campos en el CSV. Si se deja vacío, usará la coma (,), el estándar para CSV.

Formato numérico (opcional)

Nos permite configurar en qué formato que generarán los campos numéricos en el CSV. Los valores que podemos usar son:

  • "L": local.

  • "C": moneda.

  • "K": el formato que usará es en el que Velneo guarda los números internamente (sin separador de miles y usando el punto "." como separador decimal).

Si lo dejamos vacío, tomará el valor "L". Cualquier otro valor será tomado como sin formato.

Funcionalidad

Este comando de instrucción de proceso convierte una lista de registros de una tabla en una cadena con formato CSV (valores separados por comas), permitiendo definir si se incluyen todos o algunos campos. Es posible configurar los campos a incluir y los caracteres para la separación de línea y de campos.

Ejemplos

Cargar una lista y generar en memoria un CSV con todos los campos, carácter separador de líneas por defecto, carácter separador de campos por defecto y formato numérico por defecto:

Cargar lista ( MAESTROS@csv desde lista dat, ID, , , ,  )
	Generar CSV desde lista ( CSV, , , , ,  )

Cargar una lista y generar en memoria un CSV solo con los campos ID y NAME, carácter separador de líneas por defecto, usando como carácter separador de campos el punto y coma (;) y con formato numérico de moneda:

Cargar lista ( MAESTROS@csv desde lista dat, ID, , , ,  )
	Generar CSV desde lista ( CSV, #ID:getID() + "," + #NAME:getID(), , , ";", "C" )

Generar fichero CSV desde lista

Comando de instrucción de proceso que genera en disco un fichero con formato CSV (valores separados por comas) a partir de una lista.

Origen de la instrucción: lista de la tabla en curso.

Destino del subproceso: ninguno.

Parámetros

Fórmula senda

Expresión fórmula con la senda completa del fichero a generar, incluyendo nombre y extensión.

Fórmula de dato (Opcional)

Expresión fórmula con los campos a incluir en el CSV, debemos especificar cada campo con la función de campo getID, separando cada campo por una coma. Ejemplo:

"" + #ID:getID() + "," + #NAME:getID()

Si lo dejamos vacío, generará el csv con todos los campos.

Incluir identificadores en primera línea (opcional)

Nos permite configurar si queremos que se incluyan en la primera línea los identificadores de los campos (1) o no (0). Si lo dejamos vacío, los incluirá.

Fórmula de separador de registro (opcional)

Nos permite configurar qué carácter se usará para separar los registros en el CSV. Si se deja vacío, usará el salto de línea.

Fórmula de separador de campo (opcional)

Nos permite configurar qué carácter se usará para separar los campos en el CSV. Si se deja vacío, usará la coma (,), el estándar para CSV.

Formato numérico (opcional)

Nos permite configurar en qué formato que generarán los campos numéricos en el CSV. Los valores que podemos usar son:

  • "L": local.

  • "C": moneda.

  • "K": el formato que usará es en el que Velneo guarda los números internamente (sin separador de miles y usando el punto "." como separador decimal).

Si lo dejamos vacío, tomará el valor "L". Cualquier otro valor será tomado como sin formato.

Funcionalidad

Este comando de instrucción de proceso genera un fichero con formato CSV en disco a partir de una lista de registros de una tabla, permitiendo definir si se incluyen todos o algunos campos. Es posible configurar los campos a incluir y los caracteres para la separación de línea y de campos.

Comentarios

Los ficheros serán codificados como UTF-8.

Ver RFC que se sigue para crear el CSV.

Ejemplos

Cargar una lista y generar en memoria un CSV con todos los campos, carácter separador de líneas por defecto, carácter separador de campos por defecto y formato numérico por defecto:

Cargar lista ( MAESTROS@csv desde lista dat, ID, , , ,  )
	Generar fichero CSV desde lista ( tempPath() + "/clientes.csv", , , , ,  )

Cargar una lista y generar en memoria un CSV solo con los campos ID y NAME, carácter separador de líneas por defecto, usando como carácter separador de campos el punto y coma (;) y con formato numérico de moneda:

Cargar lista ( MAESTROS@csv desde lista dat, ID, , , ,  )
	Generar fichero CSV desde lista ( tempPath() + "/clientes.csv", #ID:getID() + "," + #NAME:getID(), , ";", , "C" )

Generar JSON desde lista

Comando de instrucción de proceso que convierte una lista de registros de una tabla en un array de JSON en base al estándar RFC-4627, permitiendo definir si se incluyen todos o algunos campos.

Origen de la instrucción: lista de la tabla en curso.

Destino del subproceso: ninguno.

Parámetros

Fórmula de dato

Expresión fórmula con los campos a incluir, debemos especificar cada campo con la función de campo getID, separando cada campo por una coma. Ejemplo:

"" + #ID:getID() + "," + #NAME:getID()

Si lo dejamos vacío, generará el json con todos los campos.

Identificador de variable local alfabética de retorno

Identificador de una variable local de tipo alfabético donde se retornará el array de JSON.

Identificador de variable local alfabética de retorno de ok (opcional)

Identificador de una variable local de tipo booleano que devolverá 1 si todo está correcto y 0 si hay errores.

Identificador de variable local alfabética de retorno de mensaje de error (opcional)

Identificador de una variable local de tipo alfabético en la que se retornará la descripción de los errores encontrados. Si no hay errores quedará vacía.

Funcionalidad

Convierte una lista de registros de una tabla en un array de JSON, permitiendo definir si se incluyen todos o algunos campos y retorna el resultado en una variable local.

Comentarios

A tener en cuenta respecto a los campos a los datos a exportar :

Los campos fórmula de cualquier tipo sí se exportan.

Los campos de tipos objeto texto, textos enriquecido, fórmula, se exportan tal cual están.

Los campos objeto dibujo y binario se exportan en base64.

Los campos numéricos se exportan con separador de punto decimal y sin separador de miles.

Los campos fecha se exportan en formato YYYY-MM-DD.

Los campos hora se exportan en formato HH:MM:SS.

Los campos tiempo se exportan en formato YYYY-MM-DDTHH:MM:SS:ZZZ

Los booleanos se exportar como true/false .

No se exportan los campos de tipo puntero indirecto real o virtual, singular de plural por índice o posición y los hermanos contiguos.

Ejemplos

En un manejador de evento de una rejilla generamos un array de JSON con los todos los campos de la tabla y lo guardamos en una variable local alfabética llamada SZ_JSON:

Generar JSON desde lista ( , SZ_JSON, BOK, SZ_ERROR )

En un manejador de evento de una rejilla generamos una array de JSON con los siguientes campos de la tabla: ID, NAME y MAE y lo guardamos en una variable local alfabética llamada SZ_JSON:

Generar JSON desde lista ( "" + #ID:getID() +"," + #NAME:getID() +"," + #MAE:getID(), SZ_JSON, BOK, SZ_ERROR )

Guardar en lista virtual

Comando de instrucción que permite guardar, o bien en memoria, o bien en disco, una lista de registros de una tabla que posteriormente podrá ser recuperada con el comando de instrucción de proceso recuperar de lista virtual.

Origen de la instrucción: lista o ficha de la tabla en curso.

Destino del subproceso: ninguno.

Parámetros

Identificador de variable local alfabética de retorno (opcional)

Si queremos guardar la lista en una variable local, la especificaremos en este parámetro. Ha de ser una variable local alfabética.

Fórmula de senda de destino (opcional)

Si queremos guardar la lista virtual en disco, en este parámetro especificaremos la senda completa del archivo a generar (incluido nombre y extensión). Podremos darle la extensión que queramos.

Funcionalidad

Este comando de instrucción permite guardar, o bien en memoria, o bien en disco, una lista de registros de una tabla que posteriormente podrá ser recuperada con el comando de instrucción de proceso recuperar de lista virtual.

Comentarios

Es importante indicar que lo que guarda es la lista con las posiciones de los registros en la tabla.

Este comando de instrucción, si bien es de lista, también podemos lanzarlo desde un origen ficha; en ese caso lo que hará será guardar una ficha de un único elemento.

Ver el capítulo listas virtuales para ampliar información sobre su funcionamiento.

Ejemplo

Desde un manejador de evento de un formulario que contienen una rejilla con multiselección guardamos tanto en memoria como en disco una lista virtual con los registos seleccionados:

Interfaz: Procesar ( LST, Seleccionadas )
	Guardar en lista virtual ( LISTA, homePath() + "/lista.vrt" )

Imprimir informe

Comando de instrucción del grupo Listas que se encarga de realizar la acción de enviar a una impresora un informe.

Origen de la instrucción: lista de la tabla en curso.

Destino del subproceso: ninguno.

Parámetros

Identificador del informe (Obligatorio)

Objeto informe cuya tabla asociada es la misma que la del origen de la línea del proceso donde estamos incluyendo este comando de instrucción.

Identificador de impresora lógica (Opcional)

Si queremos imprimir el informe en una impresora lógica en este parámetro seleccionaremos la impresora lógica de salida.

Si seleccionamos el valor .ninguno lo que mandará será la salida declarada en el objeto informe:

Si la salida del informe es cuadro selección de impresora: antes de imprimir el informe en el proceso se presentará el cuadro de selección de impresora del sistema.

Si la salida del informe es impresora por defecto: el informe será enviado directamente a la impresora por defecto del sistema.

Si la salida del informe es impresora lógica: el informe será impreso en la impresora lógica asociada al objeto informe.

Si la salida del informe es presentación preliminar: el informe será enviado directamente a la impresora por defecto del sistema.

Si la salida del informe es fichero: el informe será generado directamente en el disco en la senda y con el nombre especificado en sus propiedades.

No es posible exportar informe a fichero desde procesos ejecutados en tercer o en cuarto plano.

No es posible exportar informe a fichero desde procesos ejecutados por Velneo vModApache en Linux.

Funcionalidad

Comando de instrucción de proceso que realiza la acción de enviar a una impresora un informe.

Comentarios

El proceso se paralizará durante la generación del informe y, una vez generado, continuará la ejecución secuencial del proceso.

Este comando está programado para imprimir directamente sin generar interfaz. Por eso en aquellos informes cuya salida genere interfaz, como la presentación preliminar, si no se selecciona impresora lógica, son enviados directamente a la impresora por defecto del sistema.

Como sabemos, en las propiedades de un objeto informe de Velneo se define una salida, pues bien, en el caso de que desde un proceso queramos enviar un informe usando la salida definida en sus propiedades, podremos hacerlo usando comandos de objeto.

Si en el parámetro Identificador de impresora lógica hemos seleccionado alguna y ésta no está asociada a ninguna impresora física, al imprimir el informe se abrirá el cuadro de diálogo de selección de impresora del sistema operativo.

No es posible imprimir informes desde procesos ejecutados en tercer o en cuarto plano ni desde Velneo vModApache.

Ejemplo

Imprimir la lista de contactos de la tabla CTT_M por orden de ID por la impresora lógica LST_VER usando el informe INFORME.

Cargar lista ( CTT_M@ejemplo_dat, ID, , , ,  )
    Imprimir informe ( INFORME@ejemplo_app, LST_VER@ejemplo_app )

Informe personalizable: exportar a fichero

Comando de instrucción del grupo listas que permite exportar a disco un informe personalizable alimentado con los registros de la lista de origen. Un informe personalizable es un archivo con formato XML que puede ser usado desde Velneo, de forma integrada con la base de datos.

Origen de la instrucción: lista de la tabla en curso.

Destino del subproceso: ninguno.

Parámetros

Origen de definición de informe

En este parámetro especificaremos de qué modo vamos a suministrar el XML del informe a exportar a disco. Los valores posibles son fórmula, que implicará que compondremos el código XML directamente en una fórmula o fichero, que implicará la selección de un fichero externo que contendrá el XML con la configuración del informe.

Definición informe

En este parámetro, que es de tipo fórmula, resolveremos el informe personalizable. El contenido dependerá de lo que hayamos indicado en el parámetro anterior. Si es fórmula, en la fórmula compondremos directamente el código xml correspondiente a la definición del informe. Si es fichero, indicaremos la senda donde está almacenado el archivo XML con la definición del informe.

Tipo de fichero

Nos permitirá definir el tipo de fichero de salida. Los formatos posibles son: html, imagen, pdf y svg.

Fórmula de senda de destino

Senda del fichero a generar. La senda ha de incluir el nombre y la extensión del fichero. Este parámetro puede ser una cadena o literal, un campo, una variable, el retorno de una función, etc. Para su especificación podemos hacer uso del asistente para la creación de formularios.

Parámetros en formato id1:valor1|id2:valor2… (opcional)

Es posible pasar parámetros al informe personalizable a generar. Estos han de ser resueltos con el formato siguiente: parametro1:valor1|parametro2:valor2….

Para usar estos parámetros en un campo de un informe, tendremos que especificar en la propiedad tipo de origen de campo el valor parámetro y, en la propiedad campo especificar el identificador del parámetro dado en este comando de instrucción de proceso.

Por lo tanto, estos parámetros no se declaran en el informe, sino que se declaran en el comando de instrucción de proceso que genera el informe.

Por ejemplo, supongamos que en el comando de instrucción de proceso de Informe personalizable: previsualizar informe queremos pasar en, sendas variables, la fecha y la hora del sistema. Podríamos resolverlos como sigue:

"fecha:" + currentDate() + "|" + "hora:" + currentTime()

Para crear un campo en el informe para imprimir el parámetro al que hemos llamado fecha, haríamos:

Funcionalidad

Permite exportar a disco un informe personalizable alimentado con los registros de la lista de origen.

Comentarios

No es posible exportar informe a fichero desde procesos ejecutados en tercer o en cuarto plano ni desde triggers.

No es posible exportar informe a fichero desde procesos ejecutados por Velneo vModApache en Linux ni tampoco si las instancias ejecutadas desde Apache las ejecutamos en modo server.

Ejemplo

Generamos en la caché del cliente un informe .pdf de artículos partiendo de la definición de un informe personalizable definido previamente en el fichero .xml.

Cargar lista ( ART_M@ejemplo_dat, ID, , , ,  )
    Informe personalizable: exportar a fichero ( Fichero, "c:\definforme.xml", PDF, sysCacheClientPath + "/infArticulos.pdf",  )

Informe personalizable: exportar a fichero de texto

Comando de instrucción de proceso que permite exportar a un fichero de texto en disco un informe personalizble con los registros de la lista de origen. Un informe personalizable es un archivo con formato XML que puede ser usado desde Velneo, de forma integrada con la base de datos.

Origen de la instrucción: lista de la tabla en curso.

Destino del subproceso: ninguno.

Parámetros

Origen de definición de informe

En este parámetro especificaremos de qué modo vamos a suministrar el XML del informe a exportar a disco. Los valores posibles son fórmula, que implicará que compondremos el código XML directamente en una fórmula o fichero, que implicará la selección de un fichero externo que contendrá el XML con la configuración del informe.

Definición informe

En este parámetro, que es de tipo fórmula, resolveremos el informe personalizable. El contenido dependerá de lo que hayamos indicado en el parámetro anterior. Si es fórmula, en la fórmula compondremos directamente el código xml correspondiente a la definición del informe. Si es fichero, indicaremos la senda donde está almacenado el archivo XML con la definición del informe. El informe solamente se necesita para obtener el origen de datos y definir las secciones y es en el siguiente parámetro donde definimos qué campos se muestran y cómo.

Origen de definición de la plantilla de texto

La plantilla de texto será un fichero de texto donde se indica qué campos se muestran y cómo serán impresos. Los valores posibles son fórmula, que implicará que compondremos el texto directamente en una fórmula o fichero, que implicará la selección de un fichero externo que contendrá el fichero de texto.

Definición plantilla de texto

En este parámetro, que es de tipo fórmula, resolveremos el fichero de texto. El contenido dependerá de lo que hayamos indicado en el parámetro anterior. Si es fórmula, en la fórmula compondremos directamente el contenido del fichero de texto. Si es fichero, indicaremos la senda donde está almacenado el archivo fichero de texto.

Fórmula de senda de destino

Senda del fichero a generar. La senda ha de incluir el nombre y la extensión del fichero. Este parámetro puede ser una cadena o literal, un campo, una variable, el retorno de una función, etc. Para su especificación podemos hacer uso del asistente de fórmulas.

Parámetros en formato id1:valor1|id2:valor2…(opcional)

Es posible pasar parámetros al informe personalizable a generar. Estos han de ser resueltos con el formato siguiente: parametro1:valor1|parametro2:valor2….

Para usar estos parámetros en un campo de un informe, tendremos que especificar en la propiedad tipo de origen de campo el valor parámetro y, en la propiedad campo especificar el identificador del parámetro dado en este comando de instrucción de proceso.

Por lo tanto, estos parámetros no se declaran en el informe, sino que se declaran en el comando de instrucción de proceso que genera el informe.

Por ejemplo, supongamos que en el comando de instrucción de proceso de informe personalizable: previsualizar informe queremos pasar en, sendas variables, la fecha y la hora del sistema. Podríamos resolverlos como sigue:

"fecha:" + currentDate() + "|" + "hora:" + currentTime()

Para crear un campo en el informe para imprimir el parámetro al que hemos llamado fecha, haríamos:

Funcionalidad

Este comando de instrucción permite exportar a un fichero de texto plano en disco un informe personalizable con los registros de la lista de origen.

El informe solamente se necesita para obtener el origen de datos y definir las secciones y es en el siguiente parámetro donde definimos qué campos se muestran y cómo.

Ejemplo

Generamos un informe en el directorio raíz de la unidad c: de precios de artículos y cantidades pendientes de servir con en formato de texto usando la plantilla de texto definida.

Cargar lista ( ART_M@ejemplo_dat, ID, , , ,  )
    Informe personalizable: exportar a fichero de texto ( Fichero, "c:\informe.xml", Fórmula, "Artículo: " + #ID + " - " + #NAME + "|" + "Precio: " + #PRE + "|" + "Pte servir: " + #PDT_SRV, “c:\informe.txt",  )

Informe personalizable: imprimir informe

Comando de instrucción del grupo listas que permite imprimir un informe personalizable alimentado con los registros de la lista de origen. Un informe personalizable es un archivo con formato XML que puede ser usado desde Velneo, de forma integrada con la base de datos.

Origen de la instrucción: lista de la tabla en curso.

Destino del subproceso: ninguno.

Parámetros

Origen de definición de informe

En este parámetro especificaremos de qué modo vamos a suministrar el XML del informe a exportar a disco. Los valores posibles son fórmula, que implicará que compondremos el código XML directamente en una fórmula o fichero, que implicará la selección de un fichero externo que contendrá el XML con la configuración del informe.

Definición informe

En este parámetro, que es de tipo fórmula, resolveremos el informe personalizable. El contenido dependerá de lo que hayamos indicado en el parámetro anterior. Si es fórmula, en la fórmula compondremos directamente el código xml correspondiente a la definición del informe. Si es fichero, indicaremos la senda donde está almacenado el archivo XML con la definición del informe.

Impresora por defecto

Nos permitirá definir si el informe será enviado a la impresora por defecto del sistema o no.

Identificador impresora lógica (opcional)

Si queremos que el informe sea enviado a una impresora lógica, la seleccionaremos en este parámetro.

Parámetros en formato id1:valor1|id2:valor2… (opcional)

Es posible pasar parámetros al informe personalizable a generar. Estos han de ser resueltos con el formato siguiente: parametro1:valor1|parametro2:valor2….

Para usar estos parámetros en un campo de un informe, tendremos que especificar en la propiedad tipo de origen de campo el valor parámetro y, en la propiedad campo especificar el identificador del parámetro dado en este comando de instrucción de proceso.

Por lo tanto, estos parámetros no se declaran en el informe, sino que se declaran en el comando de instrucción de proceso que genera el informe.

Por ejemplo, supongamos que en el comando de instrucción de proceso de informe personalizable: previsualizar informe queremos pasar en, sendas variables, la fecha y la hora del sistema. Podríamos resolverlos como sigue:

"fecha:" + currentDate() + "|" + "hora:" + currentTime()

Para crear un campo en el informe para imprimir el parámetro al que hemos llamado fecha, haríamos:

Funcionalidad

Este comando de instrucción permite imprimir un informe personalizable alimentado con los registros de la lista de origen.

Comentarios

No es posible imprimir informes personalizables desde procesos ejecutados en tercer o en cuarto plano ni desde Velneo vModApache.

Ejemplo

Realizamos la impresión de la factura editada leyendo primero la definición del informe de la tabla de repositorios de informes.

Cargar lista ( INF_DEF_W@ejemplo_dat, ID, "VERP_VTA_FAC", , ,  )
    Seleccionar ficha por posición ( 1 )
    Leer ficha seleccionada
        Set ( INF_DEF, #DFN )
Cargar plurales ( MOV_G_VTA_FAC )
    Informe personalizable: imprimir informe ( Fórmula, INF_DEF, 0, VTA_FAC_G@vERP_2_app,  )

Informe personalizable: previsualizar informe

Comando de instrucción del grupo listas que permite hacer la vista previa de un informe personalizable con los registros de la lista de origen. Un informe personalizable es un archivo con formato XML que puede ser usado desde Velneo, de forma integrada con la base de datos.

Origen de la instrucción: lista de la tabla en curso.

Destino del subproceso: ninguno.

Parámetros

Origen de definición de informe

En este parámetro especificaremos de qué modo vamos a suministrar el XML del informe a exportar a disco. Los valores posibles son fórmula, que implicará que compondremos el código XML directamente en una fórmula o fichero, que implicará la selección de un fichero externo que contendrá el XML con la configuración del informe.

Definición informe

En este parámetro, que es de tipo fórmula, resolveremos el informe personalizable. El contenido dependerá de lo que hayamos indicado en el parámetro anterior. Si es fórmula, en la fórmula compondremos directamente el código xml correspondiente a la definición del informe. Si es fichero, indicaremos la senda donde está almacenado el archivo XML con la definición del informe.

Parámetros en formato id1:valor1|id2:valor2… (opcional)

Es posible pasar parámetros al informe personalizable a generar. Estos han de ser resueltos con el formato siguiente: parametro1:valor1|parametro2:valor2….

Para usar estos parámetros en un campo de un informe, tendremos que especificar en la propiedad tipo de origen de campo el valor parámetro y, en la propiedad campo especificar el identificador del parámetro dado en este comando de instrucción de proceso.

Por lo tanto, estos parámetros no se declaran en el informe, sino que se declaran en el comando de instrucción de proceso que genera el informe.

Por ejemplo, supongamos que en el comando de instrucción de proceso de informe personalizable: previsualizar informe queremos pasar en, sendas variables, la fecha y la hora del sistema. Podríamos resolverlos como sigue:

"fecha:" + currentDate() + "|" + "hora:" + currentTime()

Para crear un campo en el informe para imprimir el parámetro al que hemos llamado fecha, haríamos:

Funcionalidad

Este comando de instrucción permite hacer la vista previa de un informe personalizable con los registros de la lista de origen.

Ejemplo

Previsualizar el albarán en edición leyendo primero la definición del informe de la tabla de repositorios de informes.

Cargar lista ( INF_DEF_W@ejemplo_dat, ID, "VERP_VTA_ALB", , ,  )
    Seleccionar ficha por posición ( 1 )
    Leer ficha seleccionada
        Set ( INF_DEF, #DFN )
Cargar plurales ( MOV_G_VTA_ALB )
    Informe personalizable: previsualizar informe ( Fórmula, INF_DEF,  )

Invertir lista

Comando de instrucción del grupo Listas que invierte el orden de la lista de origen.

Origen de la instrucción: lista de la tabla en curso.

Destino del subproceso: ninguno.

Parámetros

No tiene.

Funcionalidad

Invierte el orden de la lista de origen, tomando como campo de referencia aquel por el que la lista haya sido ordenada previamente.

Este comando no crea ningún tipo de subproceso. La siguiente línea del proceso al mismo nivel tendrá como origen la lista ya invertida.

Ejemplo

Cargamos la lista de pedidos por orden numérico del índice ID y posteriormente invertimos la lista para llevar el resultado a la salida.

Cargar lista ( PED_G@ejemplo_dat, ID, , , ,  )
    Invertir lista
    Añadir lista a la salida

Multipartir lista

Comando de instrucción del grupo Listas que parte la lista actual por cada ficha encontrada en la que el valor del campo de partición sea diferente al anterior.

Origen de la instrucción: lista de la tabla en curso.

Destino del subproceso: lista de la tabla en curso.

Parámetros

Identificador de campo

En este parámetro se especificará el campo de la tabla el curso por el que la lista será multipartida.

Funcionalidad

Por cada valor diferente que tenga el campo seleccionado se originará una nueva sub-lista que agrupará los registros correspondientes a ese valor. El subproceso que este comando genera será ejecutado por cada sub-lista obtenida. Si no hay registros en la lista de origen, no será ejecutado el subproceso.

Comentarios

Este comando ordena ascendentemente la lista por el campo seleccionado en el parámetro antes de realizar la multipartición.

La ordenación previa de los registros se hará en el servidor, excepto si multipartimos por los tipos de campo siguientes:

  • Fórmula.

  • Hermano contiguo.

  • Puntero indirecto real y virtual.

  • Singular de plural por índice y por posición.

  • Tabla de extensión.

Ejemplo

Agrupamos o multipartimos los pedidos por clientes y exportamos el informe diseñado en el fichero .xml en un fichero .pdf en la caché del cliente.Se generará un informe por cada cliente.

Cargar lista ( PED_G@ejemplo_dat, ID, , , ,  )
    Multipartir lista ( CLT )
        Informe personalizable: exportar a fichero ( Fórmula, "c:\pca.xml", PDF, sysCacheClientPath + "/pca" + #CLT + ".pdf",  )

Ordenar lista

Comando de instrucción del grupo Listas que permite ordenar la lista en curso por uno o varios campos.

Origen de la instrucción: lista de la tabla en curso.

Destino del subproceso: ninguno.

Parámetros

Campo de resolución

Primer campo de ordenación. Podrá tratarse de un campo de la tabla de origen o de un campo de cualquiera de sus tablas enlazadas.

Campo de resolución (Opcional)

Segundo campo de ordenación.

Campo de resolución (Opcional)

Tercer campo de ordenación.

Campo de resolución (Opcional)

Cuarto campo de ordenación.

Campo de resolución (Opcional)

Quinto campo de ordenación.

Campo de resolución (Opcional)

Sexto campo de ordenación.

Funcionalidad

Este comando de instrucción permite ordenar la lista en curso por el campo o campos especificados en sus parámetros. La lista será ordenada en primera instancia por el campo seleccionado en el primer parámetro y si se especifica más de un campo de ordenación, la lista ordenará por el segundo cuando haya valores coincidentes en el primero, por el tercero cuando haya valores coincidentes en el segundo y así sucesivamente.

Ejemplo: si ordenamos una lista de artículos por los campo FAMILIA, MARCA y NOMBRE, ésta será ordenada por FAMILIA dentro de cada familia por MARCA y dentro de cada MARCA por orden alfabético.

Comentarios

La ordenación se hará en el servidor, a excepción de si ordenamos por los tipos de campo siguientes:

  • Fórmula.

  • Hermano contiguo.

  • Puntero indirecto real y virtual.

  • Singular de plural por índice y por posición.

  • Tabla de extensión.

Esta función no crea ningún subproceso, es un simple paso. La siguiente línea del proceso que se cree al nivel de ésta, tendrá como origen la lista ordenada.

Para realizar la ordenación, el sistema hace una indexación previa. El tamaño de las claves es de 24 caracteres para los campos alfabéticos menores que alfa256 y de 48 para campos alfa256 y superiores. Por lo tanto, si queremos ordenar listas que contengan cadenas cuya parte común supere esos límites, nuestra recomendación es crear un índice alfabético con dicho campo y en el proceso usar el comando Cargar lista.

No se puede multipartir por un campo enlazado a tablas de datos indirecta. El motivo es que la información del puntero indirecto no es un valor sino que es binaria y no da resultado en una fórmula de Velneo.

Ejemplo

Leer lista de abreviaturas ordenando la lista por el campo #FECHA llevando el resultado a la salida del proceso.

Cargar lista ( ABR_M@ejemplo_dat, ID, , , ,  )
    Ordenar lista ( #FECHA, , , , ,  )
    Añadir lista a la salida

Quitar ficha de la lista

Comando de instrucción del grupo Listas que permite quitar un elemento de la lista de origen pero sin borrarlo de la base de datos.

Origen de la instrucción: lista de la tabla en curso.

Destino del subproceso: ninguno.

Parámetros

Fórmula posición

Expresión fórmula que resuelva la posición del elemento a quitar de la lista. La primera posición será 1.

Funcionalidad

Comando de instrucción que permite quitar el elemento especificado en el parámetro fórmula posición de la lista de origen pero sin borrarlo de la base de datos.

Comentarios

Para facilitar la especificación del elemento a quitar podremos hacer uso del asistente para edición de fórmulas. Al tratarse de una fórmula podrá ser tanto un dato constante como uno variable.

La última posición de la lista podremos obtenerla por medio de la variable del sistema sysListSize.

Ejemplo

Quitamos la primera ficha de la rejilla LST.

Interfaz: procesar ( LST, Todas )
    Quitar ficha de la lista ( 1 )

Recorrer lista eliminando fichas

Comando de instrucción del grupo Listas que recorre la lista de origen borrando los registros de la misma, disparando, por cada ficha borrada, las actualizaciones declaradas en la tabla asociada a la lista.

Origen de la instrucción: lista de la tabla en curso.

Destino del subproceso: ninguno.

Parámetros

No tiene.

Funcionalidad

Recorre la lista de origen borrando los registros de la misma, disparando, por cada ficha borrada, las actualizaciones declaradas en la tabla asociada a la lista.

Este comando genera un subproceso que será ejecutado por cada ficha a borrar; el origen de dicho subproceso, por tanto, será ficha de la tabla en curso. Las instrucciones que se incluyan dentro del subproceso serán ejecutadas por cada registro de la lista. Este subproceso será ejecutado antes del borrado de la ficha. El subproceso que genera no se ejecutará si no hay registros.

Comentarios

Este comando, dado que implica escritura en disco, genera transacción.

El borrado de un registro implicará la ejecución de los eventos de tabla de baja de ficha.

Si queremos borrar las fichas sin que se disparen las actualizaciones tendremos que usar el comando de instrucción Recorrer lista eliminando fichas sin desactualizar.

Ejemplo

Eliminamos las líneas del pedido cuyo ID es el 25. Esto hace que se actualicen los totales del campo total del pedido en una estructura de cabeceras y líneas, como puede ser pedidos y sus líneas de pedidos.

Cargar lista ( LIN_G@ejemplo_dat, PED, 25, , ,  )
    Recorrer lista eliminando fichas
        Libre

Recorrer lista eliminando fichas sin desactualizar

Comando de instrucción del grupo Listas que recorre la lista de origen borrando los registros de la misma sin disparar, por cada ficha borrada, las actualizaciones declaradas en la tabla asociada a la lista.

Origen de la instrucción: lista de la tabla en curso.

Destino del subproceso: ninguno.

Parámetros

No tiene.

Funcionalidad

Recorre la lista de origen borrando los registros de la misma pero no disparará, por cada ficha borrada, las actualizaciones declaradas en la tabla asociada a la lista.

Este comando genera un subproceso que será ejecutado por cada ficha a borrar; el origen de dicho subproceso, por tanto, será ficha de la tabla en curso. Las instrucciones que se incluyan dentro del subproceso serán ejecutadas por cada registro de la lista. Este subproceso será ejecutado antes del borrado de la ficha. Dicho subproceso no se ejecutará si no hay registros.

Comentarios

Este comando, dado que implica escritura en disco, genera transacción.

El borrado de un registro implicará la ejecución de los eventos de tabla de baja de ficha.

Si queremos borrar las fichas y que se disparen las actualizaciones tendremos que usar el comando de instrucción Recorrer lista eliminando fichas.

Ejemplo

Eliminamos las líneas del pedido cuyo ID es el 25. Esto hace que no se actualicen los totales del campo total del pedido.

Cargar lista ( LIN_G@ejemplo_dat, PED, 25, , ,  )
    Recorrer lista eliminando fichas sin desactualizar
        Libre

Recorrer lista lectura/escritura

Comando de instrucción del grupo Listas que recorre la lista de origen y modifica los registros de la misma.

Origen de la instrucción: lista de la tabla en curso.

Destino del subproceso: ninguna.

Parámetros

No tiene.

Funcionalidad

Recorre la lista de origen y ejecuta las instrucciones que cuelgan en el subproceso con cada registro de la misma. Este comando genera un subproceso que será ejecutado por cada ficha a modificar; el origen de dicho subproceso, por tanto, será ficha de la tabla en curso.

Las instrucciones que se incluyan dentro del subproceso serán ejecutadas por cada registro de la lista. Este subproceso será en el que se incluyan las instrucciones que modifiquen los campos de la ficha. Dicho subproceso no se ejecutará si no hay registros en la lista.

Comentarios

Este comando, dado que implica escritura en disco, genera transacción.

La modificación de un registro implicará la ejecución de los eventos de tabla de modificación de ficha y el disparo de las actualizaciones en las que intervengan los campos modificados en el proceso.

Cada ficha procesada permanecerá bloqueada mientras dure el subproceso que este comando genera; esto quiere decir que la ficha podrá ser leída pero no bloqueada en modo lectura-escritura desde otros procesos o por otros usuarios.

Para modificar el contenido de un campo usaremos el comando de proceso Modificar campo.

Este comando debe ir leyendo la lista registro a registro, por lo que no puede hacer una lectura de registros en bloque como hace el comando recorrer lista sólo lectura.

Ejemplo

Poner el campo total de pedidos a cero en todos los pedidos.

Cargar lista ( PED_G@ejemplo_dat, ID, , , ,  )
    Recorrer lista lectura/escritura
        Modificar campo ( TOT_PED, 0 )

Recorrer lista solo lectura

Comando de instrucción del grupo Listas que recorre la lista de origen y permite leer uno a uno los registros de la misma.

Origen de la instrucción: lista de la tabla en curso.

Destino del subproceso: ninguno.

Parámetros

No tiene.

Funcionalidad

Recorre la lista de origen y ejecuta las instrucciones que cuelgan en el subproceso con cada registro de la misma. Este comando genera un subproceso que será ejecutado por cada ficha a leer; el origen de dicho subproceso, por tanto, será ficha de la tabla en curso.

Las instrucciones que se incluyan dentro del subproceso serán ejecutadas por cada registro de la lista. Dicho subproceso no se ejecutará si no hay registros en la lista.

Comentarios

Este comando abre las fichas en modo de sólo lectura, por tanto, no genera transacción y no es posible modificar las fichas procesadas en el subproceso que genera.

En el caso de que se desee recorrer la lista de origen para modificar los registros contenidos en la misma, tendremos que usar el comando de instrucción Recorrer lista lectura/escritura.

Este comando hace una lectura optimizada de los registros, leyéndolos por bloques en el servidor.

Ejemplo

Recorremos la lista de pedidos para mostrar un mensaje con la suma total de todos los pedidos haciendo uso de una variable local TOTAL, acumulando en ella el valor del campo #TOT_PED del pedido leído en ese momento.

Set ( TOTAL, 0 )
Cargar lista ( PED_G@ejemplo_dat, ID, , , ,  )
    Recorrer lista sólo lectura
        Set ( TOTAL, TOTAL + #TOT_PED )
Mensaje ( "Suma de todos los pedidos: " + TOTAL, Información, ,  )

Recuperar de lista virtual

Comando de instrucción que permite recuperar una lista virtual en memoria previamente generada con el comando de instrucción de proceso guardar en lista virtual.

Origen de la instrucción: ninguno.

Destino del subproceso: lista de la tabla seleccionada en sus parámetros.

Parámetros

Identificador de la tabla

Seleccionaremos la tabla de la que se desea recuperar la lista.

Fórmula de lista virtual

Expresión fórmula con la lista virtual. Normalmente ésta se habrá guardado previamente en una variable alfabética.

Identificador de variable local booleana de retorno de ok (opcional)

Variable local donde se retornará si la lista ha sido recuperada (1) o no (0).

Identificador de la variable local alfabética de mensaje de error (opcional)

Si se ha producido algún error en la recuperación, en esta variable local se guardará el texto informativo del mismo.

Funcionalidad

Este comando de instrucción permite recuperar una lista virtual guardada previamente en memoria con el comando de instrucción de proceso guardar en lista virtual.

Comentarios

Es importante indicar que lo que guarda es la lista con las posiciones de los registros en la tabla. Ver el capítulo listas virtuales para ampliar información sobre su funcionamiento.

Ejemplo

En un manejador de evento de un formulario de un proveedor, recuperamos una lista virtual de artículos que habíamos guardado previamente en memoria y generamos un pedido con los mismos:

Set ( PROVEEDOR, #ID )
Crear nueva ficha en memoria ( pedido, PEDIDOS )
	Modificar campo ( FCH, currentDate() )
	Modificar campo ( PRV, PROVEEDOR )
alta de ficha ( pedido )
	Crear copia de ficha en memoria ( pedido )
Recuperar de lista virtual ( ARTICULOS@migestion dat, LISTA, ,  )
	Tubo de lista inducido ( GENERAR_LINEAS_DE_PEDIDO, pedido )
        Libre

Recuperar de lista virtual en fichero

Comando de instrucción que permite recuperar una lista virtual en disco previamente generada con el comando de instrucción de proceso guardar en lista virtual.

Origen de la instrucción: ninguno.

Destino del subproceso: lista de la tabla seleccionada en sus parámetros.

Parámetros

Identificador de la tabla

Seleccionaremos la tabla de la que se desea recuperar la lista.

Fórmula de senda

Expresión fórmula con la senda del fichero en disco que contiene la lista virtual.

Identificador de variable local booleana de retorno de ok (opcional)

Variable local donde se retornará si la lista ha sido recuperada (1) o no (0).

Identificador de la variable local alfabética de mensaje de error (opcional)

Si se ha producido algún error en la recuperación, en esta variable local se guardará el texto informativo del mismo.

Funcionalidad

Este comando de instrucción permite recuperar una lista virtual guardada previamente en disco con el comando de instrucción de proceso guardar en lista virtual.

Comentarios

Es importante indicar que lo que guarda es la lista con las posiciones de los registros en la tabla. Ver el capítulo listas virtuales para ampliar información sobre su funcionamiento.

Ejemplo

En un manejador de evento de un formulario de un proveedor, recuperamos una lista virtual de artículos que habíamos guardado previamente en disco y generamos un pedido con los mismos:

Ventana de selección de fichero ( FICHERO, OK_SELECCIONADO, , homePath() )
If ( OK_SELECCIONADO )
	Set ( PROVEEDOR, #ID )
	Crear nueva ficha en memoria ( pedido, PEDIDOS )
		Modificar campo ( FCH, currentDate() )
		Modificar campo ( PRV, PROVEEDOR )
	alta de ficha ( pedido )
		Crear copia de ficha en memoria ( pedido )
	Recuperar de lista virtual en fichero ( ARTICULOS@migestion dat, FICHERO, ,  )
		Tubo de lista inducido ( GENERAR_LINEAS_DE_PEDIDO, pedido )
	        Libre

Última actualización