Algoritmos

Los cinco tipos de algoritmo de Flex, cómo se crean, qué propiedades se editan, la unión con otra sección y sus preguntas.

Un algoritmo es una consulta guardada que el motor ejecuta para calcular un valor sobre una sección: la deuda de un cliente, el stock de un artículo, el total de una factura. La fórmula se escribe en DinaScript y el servidor la compila a SQL. En la Flex API es el tipo FlexObjectTypes.Algorithms.

Antes de empezar

  • Un algoritmo se crea y se edita en FlexHub → Algoritmos si el servidor de la empresa publica columnas editables para el tipo. Con la lista vacía, se lee y se comprueba, pero no se guarda.
  • El tipo y las secciones se eligen al crear y no se cambian: un algoritmo de otro tipo o sobre otra sección es otro algoritmo.
  • No se borra ni se restaura por la Flex API: Flex_DeleteObjectAsync y Flex_UndeleteObjectAsync lo rechazan.

Los tipos

El tipo es la columna tipoalgoritmo, enum TipoAlgoritmoE. Determina sobre qué filas se calcula, si el filtro se ejecuta y qué gramática admite la fórmula.

ValorTipoAlgoritmoERótuloSobre qué calculaEl filtroLa fórmula
1LinealLinealLos datos de la propia ficha, sin consultar ninguna otra.No se ejecuta. El servidor rechaza escribir uno; el que venga puesto se puede vaciar.Una ficha cada vez: no se puede sumar ni contar.
2DatoDatoMuchas fichas de una sección, resumidas en un solo valor: un total, un recuento, una media.Se ejecuta, ficha a ficha, sin resumir.Procesando varias fichas, todo dato va resumido (sumado, contado, máximo). Procesando una sola, no se puede resumir.
3CompuestoRelacionadoLas fichas de otra sección que le corresponden a cada una de las suyas. Es el único con criterio de unión.Se ejecuta, ficha a ficha.Los datos de la otra sección se resumen siempre; los de la propia, nunca.
4CalculoCalculadoraNinguna ficha: combina constantes, funciones y preguntas.No hay filas que filtrar. El servidor rechaza escribir uno; el que venga puesto se puede vaciar.Sin datos de ficha.
5CompatibilidadBúsquedaDevuelve la lista de fichas que cumplen una condición, para filtrar un informe.Se ejecuta. En FlexHub se llama Filtrado de compatibilidad: qué fichas deja pasar.Ficha a ficha, sin sumar ni contar. En FlexHub se crea con la fórmula C.ID.

El valor 0 (Indefinido, No Detectado) es una fila sin tipo válido: el motor no puede ejecutarla y FlexHub lo avisa con Este algoritmo no tiene tipo.

Pulsa Comprobar antes de Aceptar: comprueba la fórmula con las dos secciones, el tipo y las preguntas del algoritmo, sin escribir nada.

Crear un algoritmo

Pulsa Nuevo

En FlexHub → Algoritmos, o en Contenido → Algoritmos dentro de la ventana de una sección, pulsa Nuevo. Si el servidor de la empresa no admite crear algoritmos, FlexHub avisa No se pueden crear algoritmos y no abre nada.

Elige el tipo

La ventana Nuevo algoritmo ofrece Lineal, De dato, Relacionado, Calculadora y De búsqueda, cada uno con lo que necesita: una sección, dos o ninguna.

Elige las secciones

Desde FlexHub → Algoritmos, la ventana siguiente pide la sección sobre la que calcula; desde una sección, ya viene dada. Un Relacionado pide además la sección con la que se une. Una Calculadora no pide ninguna. Cerrar cualquiera de estas ventanas cancela el alta.

Nombre y fórmula

Se abre la ventana del algoritmo. Escribe el Nombre (mínimo 3 caracteres) y la fórmula en la pestaña Fórmula. Pulsa Aceptar: el servidor crea el algoritmo en unos 11 segundos, y la ventana sigue abierta con la pestaña Preguntas.

Por la Flex API, Flex_CreateObjectAsync(FlexObjectTypes.Algorithms, sectionId, patch). sectionId es la sección principal y va vacío en una Calculadora. Claves del patch:

ClaveQué es
tipoalgoritmoEl valor de TipoAlgoritmoE. Obligatorio.
nombreObligatorio: mínimo 3 caracteres, sin * ni ~.
algoritmoLa fórmula, legible. Obligatoria.
plantillarelacionidLa sección con la que se une. Obligatoria en un Relacionado y rechazada en los demás.
condicionesEl filtro.
descripcion, categoria, subcategoriaCómo se archiva.
role, espublicoVer La ficha.
decimalescalc, decimalesvisSin ellos, 2 y 2.
El criterio de uniónLas columnas de La unión y el tope de filas.

Las preguntas se ponen después del alta, con Flex_SetQuestionsAsync.

Las partes de la consulta

El motor distingue cinco partes de un algoritmo, enum TipoAlgoritmo_TipoFormulaE:

ValorMiembroRótuloQué hace
1FormulaPrincipalFormula principalEl cálculo. La única parte que siempre existe. Columna algoritmo.
3PrefiltradoFiltradoDescarta filas antes de cualquier otro paso. Columna condiciones.
4FiltradoDeDatosPrincipalesPrefiltrado izquierdaFiltra la sección de partida en un Relacionado.
5FiltradoDeDatosRelacionadosPrefiltrado derechaFiltra las fichas de la otra sección en un Relacionado.
6FiltradoHavingFiltro post agrupaciónFiltra después de resumir, sobre el total.

FlexHub y la Flex API editan la fórmula (algoritmo) y el filtro (condiciones); en FlexHub, los dos en la pestaña Fórmula. Las otras tres partes no se editan.

La ficha

Las columnas que publica Flex_GetEditablesAsync(FlexObjectTypes.Algorithms), aparte del criterio de unión:

ColumnaRótulo en FlexHubQué hace
nombreNombreLa palabra clave con la que las fórmulas y los scripts lo invocan: A. seguido del nombre. Obligatorio, mínimo 3 caracteres. Va encima de las pestañas.
descripcion, categoria, subcategoriaDescripción, Categoría, SubcategoríaCómo se archiva dentro de su tipo. Card Datos del algoritmo de la pestaña General.
roleRol tipo de datoAlgoritmoRolE: Normal (0), Moneda (1), Porcentaje (2). Cómo se presenta el resultado. Tiene que coincidir con el rol del campo que use el algoritmo: mientras un campo se calcule con él, el servidor no deja cambiarlo (A-4073). Card Datos del algoritmo.
espublicoEl interruptor Público de la pestaña AvanzadoActivado, el algoritmo se usa en informes, paneles y otros algoritmos; desactivado, solo donde se haya añadido a mano. Uno que calcula un campo no puede ser público (A-4186) y uno sugerido para notificaciones tiene que serlo (E-6706).
algoritmoLa fórmulaEl cálculo, en DinaScript. Obligatorio. Pestaña Fórmula.
condicionesFiltro: sobre qué fichas calculaSobre qué filas se aplica. Vacío, sobre todas. Pestaña Fórmula.
decimalescalcDecimales que se venDe 0 a 9. Pestaña Avanzado.
decimalesvisDecimales con los que calculaDe 0 a 11. Pestaña Avanzado.
iconobase64El icono. FlexHub no lo cambia.

Si el servidor no publica esas dos columnas como editables, FlexHub muestra el dato en solo lectura: Cómo se presenta para role y Dónde se puede usar para espublico.

Lo que se lee pero no se edita:

DatoColumnaValores
TipotipoalgoritmoTipoAlgoritmoE. FlexHub lo muestra en el subtítulo de la card Sobre qué calcula.
Sección relacionadaplantillarelacionidLa sección con la que se une un Relacionado. Sale en Sobre qué calcula, al lado de la Sección principal.
SubtiposubtipoAlgoritmoSubtipoE: Normal (1), Notificacion (2), Permisos (3), CamposAutoCalculadosODestinador (4), Dinamico (5). El alta lo pone en Normal.

La unión y el tope de filas

En un Relacionado la fila guarda cómo se une con la otra sección, y en los tipos que ordenan y acotan, qué fichas entran en el cálculo. FlexHub lo edita en la pestaña Unión de un Relacionado o Fichas de un Dato y una Búsqueda. Un Lineal y una Calculadora no tienen esa pestaña.

DatoColumnasQué es
Parejas de unióncamporelacioninterno1 a camporelacioninterno10 con camporelacionexterno1 a camporelacionexterno10El campo de la sección principal y el de la relacionada que tienen que valer lo mismo. El número de la columna empareja los dos campos. Añadir pareja ocupa el primer número libre. Solo campos directos.
Orden de la sección principalcampoorden1 a campoorden6, con campoorden1desc a campoorden6descHasta seis niveles, cada uno ascendente o descendente. Se añaden con Añadir orden.
Orden de la sección relacionadarelacioncampoorden1 a relacioncampoorden6, con su descLo mismo, del lado de la relacionada. Solo en un Relacionado.
Se saltan las primerasdatosignorar, y relacioncantidadignorar en la relacionadaCuántas fichas se saltan.
Y de ahí entrandatosaprocesar, y relacioncantidaprocesar en la relacionadaCuántas fichas entran en el cálculo.
Fecha de referenciacamporeftemporal, y camporeftemporalrel en la relacionadaEl campo de fecha, o de fecha y hora, por el que un informe o un panel acotan el cálculo en el tiempo. En FlexHub se rotula Fecha de referencia en y el nombre de la sección. Solo campos directos. Con las dos puestas, del mismo formato.

El criterio viaja en bloque: si cambia una de sus 50 columnas, se envían todas, y el servidor lo valida entero antes de escribir. Lo rechaza si no cumple estas reglas:

  • Un Relacionado necesita al menos una pareja completa y no admite parejas incompletas.
  • Orden y tope van juntos: acotar sin ordenar (B-645, B-662) y ordenar sin acotar (B-646, B-663) se rechazan.
  • Un Lineal no ordena ni acota, y una Calculadora no admite nada de esta tabla (B-625, B-626).

Con datosaprocesar = 1 el algoritmo devuelve un solo valor y la fórmula no puede resumir; con 0 o más de 1 devuelve un conjunto y la fórmula tiene que resumir.

Preguntas

Un algoritmo puede pedir valores antes de calcular: un porcentaje, una fecha, un registro. Son FlexQuestionDTO, los mismos que en un informe o un documento, y en la fórmula se leen como v. seguido del nombre interno de la pregunta (Keyword). Se pasan por posición, no por nombre: mover una pregunta cambia lo que recibe quien llama. En FlexHub están en la pestaña Preguntas, que sale con el algoritmo ya creado.

Un algoritmo que ya calcula un campo está en uso y su estructura de preguntas queda congelada (FlexQuestionsDTO.Frozen): no se añade, quita ni mueve ninguna, ni se cambia su formato, su sección o su rango de fechas. Se cambian la etiqueta, la ayuda, el desplegable y, por la Flex API, el rol; FlexHub no ofrece el rol. Ver Las preguntas.

Dónde se usa un algoritmo

UsoCómo
Campo auto-calculadoEl subtipo CamposAutoCalculadosODestinador calcula el valor de un campo que rellena el motor.
Columna de un informeUna columna calculada que no existe como campo. Ver Informes.
Filtro de un informeUn algoritmo de Búsqueda en la columna algoritmodefiltrado determina qué filas entran; un desplegable ofrece solo lo que encaja.
ScriptA. seguido del nombre del algoritmo devuelve su valor dentro de un script.
Documento dinámicoUn valor calculado que se inserta en la plantilla. Ver Documentos dinámicos.

Cambiar la fórmula de un algoritmo en uso cambia lo que calcula en todo el ERP: en cada campo, informe o script que lo use. Tras Aceptar, pulsa Releer para ver la fórmula tal como la guardó el servidor.

Siguiente: Scripts.

En esta página