Anexo conceptos Paramétricos
* Próximamente en Ingrid versión 10 *
Conceptos con información paramétrica
Los conceptos paramétricos o familias paramétricas se definen en la Bases de Precios de la Construcción y Catálogos de fabricantes, mediante un programa para una serie de unidades o recursos (aunque en general son aplicables a cualquier tipo de concepto), y la lógica del programa generará con toda su información, unos conceptos derivados en función del valor qua se de a cada uno de los posibles parámetros. Con esto la familia puede generar una unidad de obra o recurso con un código y precio único.
En el formato de intercambio estándar de la construcción, FIEBDC, define en los archivos .BC3, un registro para guardar la descripción paramétrica de 2 posibles formas:
· en lenguaje tradicional: un metalenguaje que proviene de las primeras versiones del formato anteriores a la vigente (2016) y que define las opciones de cada parámetro, y las expresiones o algoritmia con la que se generan los derivados paramétricos resultantes: el código, precio, texto, pliegos, posible descomposición...
· en metalenguaje javascript para poder compilar en una DLL: otro metalenguaje pero con sintaxis javascript y no tan restringido. También permite tener protegida la propiedad intelectual de los programas paramétricos, pero debido a que sólo funciona con aplicaciones Windows (que usan los datos de la DLL) está cayendo en desuso desde hace tiempo.
Con Ingrid, lanzamos a la asociación FIE-BDC una propuesta de lenguaje paramétrico basado en javascript completamente estándar, lo que permite usar toda las funciones, estructuras y sintaxis de ECMASCRIPT 6 para mejorar los programas en legibilidad y simplicidad de definición.
Para comprender como seleccionar en una BD paramétrica un derivado, desde un concepto de familia paramétrica:
Para ver cómo trasladar a un proyecto un derivado paramétrico (una unidad de obra o recurso concreto):
Preparar un presupuesto de forma rápida
Para redactores de Bases de Precios, detalle de cómo se define un paramétrico en:
Persiana de lenguaje tradicional
Persiana de lenguaje javascript
Para administradores
Como cualquier clase de concepto puede tener definición paramétrica, hay unos campos internos sell (última selección de valores en los parámetros), estándar (programa paramétrico en lenguaje FIE), programa (programa en lenguaje javascript)... que almacenan información de una familia paramétrica pero no se definen en el interface de campos de con (general) ni en ningún otro.
Parámetros
Al comienzo de este tema hay una Introducción a Familias paramétricas
Partiendo de un concepto con una definición de familia paramétrica, vamos a ver cómo se ejecuta en Ingrid para entender las estructuras de datos de esta nueva definición javascript. El aspecto de la ficha de un Precio auxiliar paramétrico con descomposición en recursos simples, sería como:
La persiana Parámetros muestra preseleccionada una opción, desactivando y coloreando en gris los valores de los parámetros que son incompatibles con los otros valores elegidos (en el ejemplo, al seleccionar 'b' en 'CONSISTENCIA' y 'a' en 'CM', no se puede seleccionar 'e' en 'RESISTENCIA'. Pero si des-seleccionamos uno de los valores del segundo o tercer parámetro, se activan todos los compatibles.
Cuando hay una selección de todos los valores se genera un derivado paramétrico que se muestra al pie de la persiana, con un código, resumen, precio, descomposición, texto, pliego, etc. único para esa combinación.
Sólo si es administrador de la Base de Precios en cuestión, podrá ver el programa (estándar y/o Javascript) de las familias paramétricas. Los usuarios que sólo usan al base para trasladar derivados, no tienen acceso en el cliente Ingrid al código paramétrico, este permanece seguro en el servidor.
Programación estándar
Al comienzo de este tema hay una Introducción a Familias paramétricas
La especificación estándar del FIEBDC, para paramétricos en lenguaje tradicional se encuentra a partir de la página 13 de este documento de especificación FIEBDC
En una BD con familias paramétricas, se define un concepto con un programa en un metalenguaje que proviene de las primeras versiones del formato anteriores a la vigente (2016) y que define las opciones de cada parámetro, y las expresiones o algoritmia con la que se generan los derivados paramétricos resultantes: el código, precio, texto, pliegos, posible descomposición...
Una definición sería, por ejemplo:
\RESISTENCIA \ HM-10 \ HM-12.5 \ HM-15 \ HM-17.5 \
HM-20 \HA-25\
\CONSISTENCIA \ plástica \ fluida \
\TM (mm) \ 40 \ 20 \
%I= 0.180*(%C=a & %B=a)+0.200*(%C=b & %B=a)+0.205*(%C=a & %B=b)+
0.225*(%C=b & %B=b)
#$A H-100 H-125 H-150 H-175 H-200 H-250
%T(2,2,6)= 0.195, 0.220, 0.245, 0.270, 0.300, 0.350, #Plástica TM40
0.225, 0.250, 0.280, 0.305, 0.000, 0.000, #Fluida
0.220, 0.245, 0.270,
0.300, 0.330, 0.380, #Plástica TM20
0.245, 0.275, 0.305, 0.335, 0.000,
0.000 #Fluida
#$A H-100 H-125 H-150 H-175 H-200 H-250
%U(2,2,6)=
0.690, 0.685, 0.675, 0.670, 0.665, 0.650, #Plástica TM40
0.660, 0.655,
0.645, 0.635, 0.000, 0.000, #Fluida
0.665, 0.660, 0.650, 0.645, 0.640,
0.630, #Plástica TM20
0.635, 0.630, 0.620, 0.610, 0.000, 0.000 #Fluida
Programación en javascript
La especificación estándar actual del FIEBDC, para paramétricos en metalenguaje JS para compilar en DLL se encuentra al final (Anexo 3) de esta página
Ingrid propone al FIE una nueva programación Javascript más estándar y potente, que es la soportada por la aplicación. Se incluye una herramienta para convertir automáticamente una BD completa desde lenguaje estándar tradicional de paramétricos la javascript de Ingrid.
El código paramétrico de la persiana Programa javascript para familia comenzaría como:
Especificación introductoria a este lenguaje usando javascript estándar, NO RIGUROSA:
El código de esta pestaña se considera envuelto en una función: function (P, G) { ... }
que recibe como entrada un objeto P con el documento actual de BD (el concepto familia paramétrica con el nombre P.doc, y un objeto G con el paramétrico global opcional para toda la BD (se pueden definir unos parámetros como el ámbito provincial de precios u otros, que queremos que afecten a todos o muchos de los paramétricos de la base.
Uno de los parámetros que hay que definir en el flujo de ejecución es la lista de opciones y parámetros: se hace en una lista de listas P.parll [ [rot, opc1, opc2, opc3...], [], []...]
Luego se definen variables (estrictamente con var o let), como T y U con valores que se van a utilizar en las expresiones. Los códigos no son fijos porque se usan dentro del programa y lo importante es son los parámetros de salida de la función de paramétrico devueltos en el objeto P.
El programa TIENE que tener una función P.calcula() que asigna valores, con las operaciones y expresiones que queramos, a las variables del objeto P:
P.cod, : código del derivado paramétrico que va a ser el concepto resultante (reemplaza el $ del código de la familia, como ECMF$ con los valores seleccionados, por ejemplo: ECMFaba)
P.res: resumen
P.pre: precio (si no tiene descomposición)
P.tex: texto extenso
P.plis: objeto con métodos que serán los códigos de pliegos utilizados y su contenido textual, como por ejemplo: P.pli= {NOR:'aaaaaa', GES:'hhhhhh', TER:'uuuuuu'} de forma que podemos acceder a cada pliego con P.plis.NOR y P.plis[NOR]
P.desl: array con los códigos de los conceptos de la descomposición (si la tiene) del concepto, y su cantidad por unidad de este concepto. Ejemplo:
P.desl.push(["PBAC.1aa", T[P.C][P.B][P.A]])
P.desl.push(["PBRG.1ea",
(U[P.C][P.B][P.A]*(2*(P.C==a)))])
Opcionalmente puede contener una función P.invalida() que define qué opciones de entrada son incompatibles; retorna true o distinto de null si la selección de opciones actual es inválida.
Al ser javascript estándar se pueden usar todas las estructuras del lenguaje con grandes ventajas. Por ejemplo, introducir los textos mediante "template strings", o sea, formateando los textos multilínea entre comillas simples a la izquierda ` , que además admiten variables con el formato: ${expresión o variable} :
Al ejecutar el código, se obtienen las variables: P.A (0,1,2,3...), P.$A (textoOpcion1, textoOpcion2,...) y P.a (a,b,c,d... opción elegida en el parámetro)
Si se desea definir parámetros Globales, se hace en Menú > Proyecto > Paramétricos > Programa javascript (v9). Con esto tenemos definidos parámetros cuyo valor se puede seleccionar en este mismo menú, en la persiana Parámetros, y que modificaran las familias paramétricas que los utilicen.
Además hay definidas algunas funciones macro que están por especificar, para ampliar las estándar de javascript, como LETRA() que pone en mayúsculas la letra de la opción, y algunas otras de uso muy habitual.
Buenas prácticas para programar paramétricos
Consejos y recordatorios para redactores de Bases de Precios y catálogos:
- El quinto parámetro de los paramétricos se denomina $F, ya que $E es una variable reservada para el error.
- Aunque Ingrid puede soportar conceptos familia paramétrica con el código sin terminar en $, esto es incorrecto, ya que la especificación FIE obliga a ello y esa exportación no sería estándar.
- En algunas bases estándar, los archivos adjuntos (gráficos), se describen con espacios en blanco. Aunque el estándar no especifica nada sobre ello, siempre es problemático ponerlos así, lo lógico es usar códigos sin espacios en blanco.